✨ feat(yaml): Reading yaml files!
This commit is contained in:
parent
0a23305cbd
commit
7d91974c56
3 changed files with 83 additions and 14 deletions
11
go.mod
11
go.mod
|
@ -2,10 +2,14 @@ module bartender
|
||||||
|
|
||||||
go 1.23.1
|
go 1.23.1
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/charmbracelet/bubbletea v1.1.0
|
||||||
|
github.com/charmbracelet/lipgloss v0.13.0
|
||||||
|
golang.org/x/term v0.24.0
|
||||||
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
|
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
|
||||||
github.com/charmbracelet/bubbletea v1.1.0 // indirect
|
|
||||||
github.com/charmbracelet/lipgloss v0.13.0 // indirect
|
|
||||||
github.com/charmbracelet/x/ansi v0.2.3 // indirect
|
github.com/charmbracelet/x/ansi v0.2.3 // indirect
|
||||||
github.com/charmbracelet/x/term v0.2.0 // indirect
|
github.com/charmbracelet/x/term v0.2.0 // indirect
|
||||||
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
|
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
|
||||||
|
@ -18,6 +22,7 @@ require (
|
||||||
github.com/muesli/termenv v0.15.2 // indirect
|
github.com/muesli/termenv v0.15.2 // indirect
|
||||||
github.com/rivo/uniseg v0.4.7 // indirect
|
github.com/rivo/uniseg v0.4.7 // indirect
|
||||||
golang.org/x/sync v0.8.0 // indirect
|
golang.org/x/sync v0.8.0 // indirect
|
||||||
golang.org/x/sys v0.24.0 // indirect
|
golang.org/x/sys v0.25.0 // indirect
|
||||||
golang.org/x/text v0.3.8 // indirect
|
golang.org/x/text v0.3.8 // indirect
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
)
|
)
|
||||||
|
|
9
go.sum
9
go.sum
|
@ -31,7 +31,12 @@ golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
|
||||||
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||||
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
|
golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34=
|
||||||
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
|
golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM=
|
||||||
|
golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8=
|
||||||
golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY=
|
golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY=
|
||||||
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
|
77
main.go
77
main.go
|
@ -5,26 +5,75 @@ import (
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
tea "github.com/charmbracelet/bubbletea"
|
tea "github.com/charmbracelet/bubbletea"
|
||||||
|
gloss "github.com/charmbracelet/lipgloss"
|
||||||
|
"golang.org/x/term"
|
||||||
|
"gopkg.in/yaml.v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var width, height, _ = term.GetSize(int(os.Stdout.Fd()))
|
||||||
|
|
||||||
type menu struct {
|
type menu struct {
|
||||||
order []string
|
order SoftwarePackages
|
||||||
current int
|
current int
|
||||||
done int
|
done int
|
||||||
}
|
}
|
||||||
|
|
||||||
func initialModel() menu {
|
func initialModel() menu {
|
||||||
return menu{
|
return menu{
|
||||||
order: []string{"brew install yq"},
|
current: 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SoftwareDef struct {
|
||||||
|
Bin *string `yaml:"_bin"`
|
||||||
|
Desc string `yaml:"_desc"`
|
||||||
|
Docs *string `yaml:"_docs"`
|
||||||
|
Github *string `yaml:"_github"`
|
||||||
|
Home *string `yaml:"_home"`
|
||||||
|
Name string `yaml:"_name"`
|
||||||
|
Apk *string `yaml:"apk"`
|
||||||
|
Appimage *string `yaml:"appimage"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SoftwarePackages map[string]SoftwareDef
|
||||||
|
|
||||||
|
type YamlStructure struct {
|
||||||
|
SoftwarePackages SoftwarePackages `yaml:"softwarePackages"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type yamlMsg YamlStructure
|
||||||
|
|
||||||
|
type errMsg struct{ err error }
|
||||||
|
|
||||||
|
func (e errMsg) Error() string { return e.err.Error() }
|
||||||
|
|
||||||
|
func readYaml() tea.Msg {
|
||||||
|
fileData, fileErr := os.ReadFile("/Users/marley/hackin/install.fairie/software-custom.yml")
|
||||||
|
if fileErr != nil {
|
||||||
|
return errMsg{fileErr}
|
||||||
|
}
|
||||||
|
|
||||||
|
var parsedYaml YamlStructure
|
||||||
|
|
||||||
|
yamlErr := yaml.Unmarshal(fileData, &parsedYaml)
|
||||||
|
if yamlErr != nil {
|
||||||
|
return errMsg{yamlErr}
|
||||||
|
}
|
||||||
|
|
||||||
|
return yamlMsg(parsedYaml)
|
||||||
|
}
|
||||||
|
|
||||||
func (m menu) Init() tea.Cmd {
|
func (m menu) Init() tea.Cmd {
|
||||||
return nil
|
return readYaml
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m menu) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
func (m menu) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||||
switch msg := msg.(type) {
|
switch msg := msg.(type) {
|
||||||
|
|
||||||
|
case yamlMsg:
|
||||||
|
m.order = msg.SoftwarePackages
|
||||||
|
return m, tea.Quit
|
||||||
|
|
||||||
case tea.KeyMsg:
|
case tea.KeyMsg:
|
||||||
switch msg.String() {
|
switch msg.String() {
|
||||||
case "ctrl+c", "q":
|
case "ctrl+c", "q":
|
||||||
|
@ -36,15 +85,25 @@ func (m menu) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m menu) View() string {
|
func (m menu) View() string {
|
||||||
s := "Installing...\n\n"
|
mainStyle := gloss.NewStyle().
|
||||||
|
Width(int(float64(width) * 0.65)).
|
||||||
|
BorderStyle(gloss.NormalBorder()).
|
||||||
|
BorderForeground(gloss.Color("63"))
|
||||||
|
|
||||||
for _, item := range m.order {
|
sidebarStyle := gloss.NewStyle().
|
||||||
s += fmt.Sprintf("%s\n", item)
|
Width(int(float64(width) * 0.3)).
|
||||||
}
|
BorderStyle(gloss.NormalBorder()).
|
||||||
|
BorderForeground(gloss.Color("63"))
|
||||||
|
|
||||||
s += "\nPress q to quit.\n"
|
mainContent := fmt.Sprintln(m.order)
|
||||||
|
sidebarContent := ""
|
||||||
|
|
||||||
return s
|
main := mainStyle.Render(mainContent)
|
||||||
|
sidebar := sidebarStyle.Render(sidebarContent)
|
||||||
|
|
||||||
|
content := gloss.JoinHorizontal(gloss.Top, main, sidebar)
|
||||||
|
|
||||||
|
return gloss.PlaceHorizontal(width, gloss.Center, content)
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
Loading…
Reference in a new issue