229 lines
6.5 KiB
Go
229 lines
6.5 KiB
Go
package main
|
|
|
|
import (
|
|
"ArinDash/util"
|
|
"ArinDash/widgets"
|
|
"context"
|
|
|
|
"github.com/mum4k/termdash"
|
|
"github.com/mum4k/termdash/align"
|
|
"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("Date", widgets.Date()),
|
|
widgets.New("Calendar", widgets.Calendar()),
|
|
widgets.New("CalendarEvents", widgets.CalendarEvents()),
|
|
widgets.New("Weather", widgets.Weather()),
|
|
widgets.New("ChangeTitle", widgets.TextInput(titleUpdate, textinput.Label("Update Title: "), textinput.PlaceHolder("New Title"))),
|
|
widgets.New("Wifi", widgets.WifiQRCode()),
|
|
widgets.New("NetworkDevices", widgets.NetworkDevices()),
|
|
widgets.New("Docker", widgets.DockerList()),
|
|
widgets.New("HTTPProber", widgets.HTTPProber()),
|
|
widgets.New("PiHole", widgets.PiholeStats()),
|
|
widgets.New("PiHoleBlocked", widgets.PiholeBlocked()),
|
|
widgets.New("NinaWarnings", widgets.NinaWarnings()),
|
|
widgets.New("News", widgets.News()),
|
|
widgets.New("Zukitchi", widgets.Zukitchi()),
|
|
)
|
|
}
|
|
|
|
func layout() []container.Option {
|
|
builder := grid.New()
|
|
builder.Add(
|
|
|
|
grid.ColWidthFixed(84,
|
|
grid.RowHeightFixed(21,
|
|
grid.ColWidthFixed(38,
|
|
grid.RowHeightFixed(20,
|
|
grid.Widget(widgets.Get["Wifi"],
|
|
container.BorderTitle("Wifi"),
|
|
container.Border(linestyle.Light),
|
|
container.BorderColor(cell.ColorWhite),
|
|
container.PaddingLeft(1),
|
|
container.PaddingTop(1),
|
|
),
|
|
),
|
|
),
|
|
grid.ColWidthFixed(20,
|
|
grid.Widget(widgets.Get["NetworkDevices"],
|
|
container.BorderTitle("Network Devices"),
|
|
container.Border(linestyle.Light),
|
|
container.BorderColor(cell.ColorWhite),
|
|
container.PaddingLeft(1),
|
|
container.PaddingTop(1),
|
|
),
|
|
),
|
|
),
|
|
|
|
grid.RowHeightFixed(25,
|
|
grid.RowHeightFixed(19,
|
|
grid.Widget(widgets.Get["HTTPProber"],
|
|
container.BorderTitle("Website Status"),
|
|
container.Border(linestyle.Light),
|
|
container.BorderColor(cell.ColorWhite),
|
|
container.PaddingLeft(1),
|
|
container.PaddingTop(1),
|
|
),
|
|
),
|
|
grid.RowHeightFixed(40,
|
|
grid.Widget(widgets.Get["Docker"],
|
|
container.BorderTitle("Docker"),
|
|
container.Border(linestyle.Light),
|
|
container.BorderColor(cell.ColorWhite),
|
|
container.PaddingLeft(1),
|
|
container.PaddingTop(1),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
|
|
grid.ColWidthPerc(62,
|
|
grid.RowHeightFixed(40,
|
|
grid.ColWidthFixed(40,
|
|
grid.RowHeightFixed(8,
|
|
grid.Widget(widgets.Get["Clock"],
|
|
container.AlignHorizontal(align.HorizontalCenter),
|
|
container.BorderTitle("Time"),
|
|
container.Border(linestyle.Light),
|
|
container.BorderColor(cell.ColorWhite),
|
|
),
|
|
),
|
|
grid.RowHeightFixed(13,
|
|
grid.Widget(widgets.Get["PiHole"],
|
|
container.BorderTitle("pi-hole"),
|
|
container.Border(linestyle.Light),
|
|
container.BorderColor(cell.ColorWhite),
|
|
container.PaddingLeft(1),
|
|
container.PaddingTop(1),
|
|
),
|
|
),
|
|
grid.RowHeightFixed(38,
|
|
grid.Widget(widgets.Get["PiHoleBlocked"],
|
|
container.BorderTitle("pi-hole (Blocked Percent)"),
|
|
container.Border(linestyle.Light),
|
|
container.BorderColor(cell.ColorWhite),
|
|
),
|
|
),
|
|
),
|
|
|
|
grid.ColWidthFixed(26,
|
|
grid.RowHeightFixed(21,
|
|
grid.Widget(widgets.Get["Calendar"],
|
|
container.BorderTitle("Calendar"),
|
|
container.Border(linestyle.Light),
|
|
container.BorderColor(cell.ColorWhite),
|
|
container.PaddingLeft(1),
|
|
container.PaddingTop(1),
|
|
),
|
|
),
|
|
grid.RowHeightFixed(25,
|
|
grid.Widget(widgets.Get["empty"],
|
|
container.Border(linestyle.Light),
|
|
container.BorderColor(cell.ColorGreen),
|
|
),
|
|
),
|
|
),
|
|
|
|
grid.ColWidthFixed(25,
|
|
grid.RowHeightFixed(21,
|
|
grid.Widget(widgets.Get["CalendarEvents"],
|
|
container.BorderTitle("Events"),
|
|
container.Border(linestyle.Light),
|
|
container.BorderColor(cell.ColorWhite),
|
|
container.PaddingLeft(1),
|
|
container.PaddingTop(1),
|
|
),
|
|
),
|
|
grid.RowHeightFixed(11,
|
|
grid.Widget(widgets.Get["Weather"],
|
|
container.BorderTitle("Weather"),
|
|
container.Border(linestyle.Light),
|
|
container.BorderColor(cell.ColorWhite),
|
|
container.PaddingLeft(1),
|
|
),
|
|
),
|
|
grid.RowHeightFixed(85,
|
|
grid.Widget(widgets.Get["empty"],
|
|
container.Border(linestyle.Light),
|
|
container.BorderColor(cell.ColorWhite),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
grid.RowHeightFixed(20,
|
|
grid.RowHeightFixed(20,
|
|
grid.Widget(widgets.Get["News"],
|
|
container.BorderTitle("News"),
|
|
container.Border(linestyle.Light),
|
|
container.BorderColor(cell.ColorWhite),
|
|
container.PaddingLeft(1),
|
|
container.PaddingTop(1),
|
|
),
|
|
),
|
|
grid.RowHeightFixed(20,
|
|
grid.Widget(widgets.Get["NinaWarnings"],
|
|
container.BorderTitle("BBK Warnings"),
|
|
container.Border(linestyle.Light),
|
|
container.BorderColor(cell.ColorWhite),
|
|
container.PaddingLeft(1),
|
|
container.PaddingTop(1),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
|
|
grid.ColWidthPerc(35,
|
|
grid.RowHeightFixed(21,
|
|
grid.Widget(widgets.Get["Zukitchi"],
|
|
container.Border(linestyle.Light),
|
|
container.BorderColor(cell.ColorWhite),
|
|
container.PaddingTop(1),
|
|
container.PaddingLeft(1),
|
|
),
|
|
),
|
|
grid.RowHeightFixed(85,
|
|
grid.Widget(widgets.Get["empty"],
|
|
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)))
|
|
}
|