{config, ...}: { services.glance = { enable = true; openFirewall = true; settings = { server = { host = "0.0.0.0"; }; pages = [ { name = "Home"; columns = [ { size = "small"; widgets = [ { type = "calendar"; first-day-of-week = "monday"; } { type = "twitch-channels"; channels = [ "theprimeagen" ]; } ]; } { size = "full"; widgets = [ { type = "group"; widgets = [ {type = "hacker-news";} {type = "lobsters";} ]; } { type = "server-stats"; servers = [ { type = "local"; name = "Tyr"; } ]; } { type = "custom-api"; title = "Beszel stats"; cache = "5m"; options = { base-url = "\${BESZEL_URL}"; api-key = "\${BESZEL_TOKEN}"; }; template = '' {{/* Required config options */}} {{ $baseURL := .Options.StringOr "base-url" "" }} {{ $apiKey := .Options.StringOr "api-key" "" }} {{/* Error message template */}} {{ define "errorMsg" }}
{{ . }}
{{ end }} {{ define "formatGigabytes" }} {{ $value := . }} {{ $label := "GB" }} {{- if lt $value 1.0 }} {{ $value = mul $value 1000.0 }} {{ $label = "MB" }} {{- else if lt $value 1000.0 }} {{ else }} {{ $value = div $value 1000.0 }} {{ $label = "TB" }} {{ end }} {{ printf "%.1f" $value }} {{ $label }} {{ end }} {{/* Check required fields */}} {{ if or (eq $baseURL "") (eq $apiKey "") }} {{ template "errorMsg" "Some required options are not set." }} {{ else }} {{ $token := concat "Bearer " $apiKey }} {{ $systemsResponse := newRequest (print $baseURL "/api/collections/systems/records") | withHeader "Authorization" $token | getResponse }} {{ $systems := $systemsResponse.JSON.Array "items" }} {{ range $n, $system := $systems }} {{ $status := $system.String "status" }} {{ $systemStatsRequest := newRequest (print $baseURL "/api/collections/system_stats/records") | withHeader "Authorization" $token | withParameter "sort" "-created" | withParameter "page" "1" | withParameter "perPage" "1" | withParameter "filter" (print "type='1m'&&system='" ($system.String "id") "'") | getResponse }} {{ $systemStats := index ($systemStatsRequest.JSON.Array "items") 0 }} {{ $hostname := $system.String "name" }} {{ $uptimeSec := $system.Float "info.u" }} {{ $systemTemp := $system.Float "info.dt"}} {{ $cpuLoad := $system.Float "info.cpu" }} {{ $cpuLoad1m := $system.Float "info.l1" }} {{ $cpuLoad15m := $system.Float "info.l15" }} {{ $memoryUsedPercent := $system.Float "info.mp" }} {{ $memoryTotalGb := $systemStats.Float "stats.m" }} {{ $memoryUsedGb := $systemStats.Float "stats.mu" }} {{ $swapTotalGb := $systemStats.Float "stats.s" }} {{ $swapUsedGb := $systemStats.Float "stats.su" }} {{ $swapUsedPercent := mul (div $swapUsedGb $swapTotalGb) 100.0 }} {{ $rootUsedPercent := $system.Float "info.dp" }} {{ $rootTotalGb := $systemStats.Float "stats.d" }} {{ $rootUsedGb := $systemStats.Float "stats.du" }}