diff --git a/hosts/plexy/default.nix b/hosts/plexy/default.nix index 48b6ef5..9f49350 100644 --- a/hosts/plexy/default.nix +++ b/hosts/plexy/default.nix @@ -65,6 +65,7 @@ 80 443 5201 # iperf3 + 15835 # Glance ]; }; @@ -102,6 +103,10 @@ LOG_LEVEL = "warn"; }; }; + glance = { + enable = true; + settings = import ./glance.nix; + }; }; environment.variables.EDITOR = "nvim"; diff --git a/hosts/plexy/glance.nix b/hosts/plexy/glance.nix new file mode 100644 index 0000000..17c7838 --- /dev/null +++ b/hosts/plexy/glance.nix @@ -0,0 +1,313 @@ +{ +server = { + host = "localhost"; + port = 15835; + }; + theme = { + light = false; + background-color = "225 10 10"; + primary-color = "120 100 37"; + negative-color = "0 100 37"; + contrast-multiplier = 1.3; + }; + pages = [ + { + name = "Home"; + columns = [ + { + size = "small"; + widgets = [ + { + type = "calendar"; + hide-header = true; + } + { + type = "rss"; + limit = 10; + collapse-after = 3; + cache = "20min"; + feeds = [ + { + url = "https://vitalik.eth.limo/feed.xml"; + } + { + url = "https://blog.benjojo.co.uk/rss.xml"; + } + { + url = "https://selfh.st/rss/"; + } + { + url = "https://ersei.net/en/blog.atom"; + } + { + url = "https://ersei.net/en/notes.atom"; + } + { + url = "https://mbrizic.com/blog/feed.xml"; + } + { + url = "https://samwho.dev/rss.xml"; + } + { + url = "https://feeds.feedburner.com/martinkl"; + } + { + url = "https://cocomelonc.github.io/feed.xml"; + } + { + url = "https://www.da.vidbuchanan.co.uk/blog/rss.xml"; + } + { + url = "https://kibty.town/blog.rss"; + } + { + url = "https://textslashplain.com/feed"; + } + { + url = "https://microsoftedge.github.io/edgevr/feed.xml"; + } + { + url = "https://eieio.games/feed.xml"; + } + { + url = "https://www.da.vidbuchanan.co.uk/blog/rss.xml"; + } + { + url = "https://www.rugu.dev/en/index.xml"; + } + { + url = "https://ericmigi.com/rss.xml"; + } + { + url = "http://www.gridsagegames.com/blog/feed/"; + } + { + url = "https://backdrifting.net/rss"; + } + { + url = "https://env.fail/blog.rss"; + } + { + url = "https://cblgh.org/articles.xml"; + } + { + url = "https://cblgh.org/posts.xml"; + } + { + url = "https://www.devever.net/~hl/index.feed"; + } + { + url = "https://vit.baisa.cz/index.xml"; + } + { + url = "https://chrismcleod.dev/follow/blog/feed.rss"; + } + { + url = "https://www.winstoncooke.com/blog/atom.xml"; + } + { + url = "https://conduition.io/rss2.xml"; + } + { + url = "https://xeiaso.net/blog.rss"; + } + { + url = "https://brycev.com/rss.xml"; + } + { + url = "https://uptime.zen-browser.app/history.rss"; + } + { + url = "https://endtimes.dev/feed.xml"; + } + { + url = "https://shkspr.mobi/blog/feed/atom"; + } + { + url = "https://www.evilsocket.net/atom.xml"; + } + { + url = "https://bobdahacker.com/feed.xml"; + } + { + url = "https://jorianwoltjer.com/blog/rss.xml"; + } + { + url = "https://blog.jaisal.dev/rss.xml"; + } + { + url = "https://planetscale.com/blog/feed.atom"; + } + { + url = "https://lyra.horse/blog/posts/index.xml"; + } + { + url = "https://jasonwryan.com/atom.xml"; + } + { + url = "https://jvns.ca/atom.xml"; + } + { + url = "https://zacoons.com/index.xml"; + } + { + url = "https://notnite.com/blog/rss.xml"; + } + { + url = "https://tonsky.me/atom.xml"; + } + { + url = "https://heitorpb.github.io/atom.xml"; + } + { + url = "https://precondition.github.io/feed.xml"; + } + { + url = "https://www.adyxax.org/blog/index.xml"; + } + { + url = "https://words.filippo.io/rss"; + } + ]; + } + { + type = "twitch-channels"; + sort-by = "viewers"; + channels = [ + "dreamsofcode_dev" + "tsoding" + "sphaerophoria" + "theprimeagen" + "randy" + ]; + } + ]; + } + { + size = "full"; + widgets = [ + { + type = "reddit"; + subreddit = "selfhosted"; + } + ]; + } + { + size = "small"; + widgets = [ + { + type = "weather"; + units = "metric"; + hour-format = "24h"; + location = "Tallinn Airport"; + hide-header = true; + } + { + type = "releases"; + repositories = [ + "cloudflare/cloudflared" + "dani-garcia/vaultwarden" + "linkwarden/linkwarden" + "glanceapp/glance" + "Yooooomi/your_spotify" + "codeberg:Forgejo/forgejo" + "linuxserver/docker-qbittorrent" + "jellyfin/jellyfin" + "Fallenbagel/jellyseerr" + "Radarr/Radarr" + "Sonarr/Sonarr" + "Prowlarr/Prowlarr" + "autobrr/autobrr" + ]; + } + { + type = "custom-api"; + title = "Epic Games"; + cache = "1h"; + url = "https://store-site-backend-static.ak.epicgames.com/freeGamesPromotions?locale=en&country=US&allowCountries=US"; + template = "
+ {{ if eq .Response.StatusCode 200 }} +
+ {{ range .JSON.Array \"data.Catalog.searchStore.elements\" }} + {{ $price := .String \"price.totalPrice.discountPrice\" }} + {{ $hasPromo := gt (len (.Array \"promotions.promotionalOffers\")) 0 }} + {{ if and $hasPromo (eq $price \"0\") }} + {{ $gamePage := .String \"productSlug\" }} + {{ if gt (len (.Array \"offerMappings\")) 0 }} + {{ $gamePage = .String \"offerMappings.0.pageSlug\" }} + {{end }} + + {{ $title := .String \"title\" }} + {{ range .Array \"keyImages\" }} + {{ if eq (.String \"type\") \"OfferImageWide\" }} + \"{{ + {{ end }} + {{ end }} +
+ {{ $title }}
+ + {{ if $hasPromo }} + {{ $promotions := .Array \"promotions.promotionalOffers\" }} + {{ if gt (len $promotions) 0 }} + {{ $firstPromo := index $promotions 0 }} + {{ $offers := $firstPromo.Array \"promotionalOffers\" }} + {{ if gt (len $offers) 0 }} + {{ $firstOffer := index $offers 0 }} + Free until {{ slice ($firstOffer.String \"endDate\") 0 10 }} + {{ else }} + Free this week! + {{ end }} + {{ else }} + Free this week! + {{ end }} + {{ end }} + +
+
+ {{ end }} + {{ end }} +
+ {{ else }} +

Error fetching Epic Games data.

+ {{ end }} +
+"; + } + ]; + } + ]; + } + { + name = "Homelab"; + columns = [ + { + size = "full"; + widgets = [ + { + type = "monitor"; + } + ]; + } + { + size = "small"; + widgets = [ + { + type = "server-stats"; + servers = [ + { + type = "local"; + hide-mountpoints-by-default = true; + mountpoints = { + "/" = { + hide = false; + }; + }; + } + ]; + } + ]; + } + ]; + } + ]; +}