104 lines
2.8 KiB
Go
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)))
|
|
}
|