ArinDash/main.go
2025-12-22 18:49:05 +01:00

104 lines
2.8 KiB
Go

package main
import (
"ArinDash/util"
"ArinDash/widgets"
"context"
"github.com/mum4k/termdash"
"github.com/mum4k/termdash/cell"
"github.com/mum4k/termdash/container"
"github.com/mum4k/termdash/container/grid"
"github.com/mum4k/termdash/keyboard"
"github.com/mum4k/termdash/linestyle"
"github.com/mum4k/termdash/terminal/tcell"
"github.com/mum4k/termdash/terminal/terminalapi"
"github.com/mum4k/termdash/widgets/textinput"
)
const rootID = "root"
func quitter(cancel context.CancelFunc) func(k *terminalapi.Keyboard) {
quitter := func(k *terminalapi.Keyboard) {
if k.Key == keyboard.KeyEsc || k.Key == keyboard.KeyCtrlC {
cancel()
}
}
return quitter
}
func initWidgets(ctx context.Context, term *tcell.Terminal) {
var titleUpdate = make(chan string)
widgets.Create(ctx, term,
widgets.New("Clock", widgets.Clock()),
widgets.New("ChangeTitle", widgets.TextInput(titleUpdate, textinput.Label("Update Title: "), textinput.PlaceHolder("New Title"))),
widgets.New("Wifi", widgets.WifiQRCode()),
widgets.New("Docker", widgets.DockerList()),
widgets.New("PiHole", widgets.PiholeStats()),
)
}
func layout() []container.Option {
builder := grid.New()
builder.Add(
grid.ColWidthFixed(84,
grid.RowHeightFixed(44,
grid.Widget(widgets.Get["Wifi"],
container.BorderTitle("Wifi"),
container.Border(linestyle.Light),
container.BorderColor(cell.ColorWhite)),
),
grid.RowHeightFixed(1,
grid.Widget(widgets.Get["empty"]),
),
),
grid.ColWidthPerc(20,
grid.RowHeightFixed(8,
grid.Widget(widgets.Get["Clock"],
container.BorderTitle("Time"),
container.Border(linestyle.Light),
container.BorderColor(cell.ColorWhite),
),
),
grid.RowHeightFixed(8,
grid.Widget(widgets.Get["PiHole"],
container.BorderTitle("pi-hole"),
container.Border(linestyle.Light),
container.BorderColor(cell.ColorWhite),
),
),
grid.RowHeightPerc(85,
grid.Widget(widgets.Get["empty"]),
),
),
grid.ColWidthPerc(35,
grid.RowHeightPerc(25,
grid.Widget(widgets.Get["empty"]),
),
),
grid.ColWidthPerc(35,
grid.RowHeightPerc(25,
grid.Widget(widgets.Get["Docker"],
container.BorderTitle("Docker"),
container.Border(linestyle.Light),
container.BorderColor(cell.ColorWhite),
),
),
),
)
return util.PanicOnErrorWithResult(builder.Build())
}
func main() {
term := util.PanicOnErrorWithResult(tcell.New(tcell.ColorMode(terminalapi.ColorMode256)))
defer term.Close()
ctx, cancel := context.WithCancel(context.Background())
initWidgets(ctx, term)
rootContainer := util.PanicOnErrorWithResult(container.New(term, container.ID(rootID)))
util.PanicOnError(rootContainer.Update(rootID, layout()...))
util.PanicOnError(termdash.Run(ctx, term, rootContainer, termdash.KeyboardSubscriber(quitter(cancel)), termdash.RedrawInterval(util.RedrawInterval)))
}