From ea737420e93ef30f23e1f299ff23faf30cc0f494 Mon Sep 17 00:00:00 2001 From: matt1432 Date: Mon, 4 Nov 2024 17:31:23 -0500 Subject: [PATCH] feat(homepage): switch to NixOS module --- devices/nos/modules/default.nix | 1 + devices/nos/modules/docker/default.nix | 1 - .../nos/modules/docker/homepage/compose.nix | 68 ----- .../docker/homepage/images/homepage.nix | 8 - .../nos/modules/docker/homepage/services.nix | 262 ---------------- devices/nos/modules/homepage.nix | 287 ++++++++++++++++++ flake.lock | Bin 57613 -> 57613 bytes 7 files changed, 288 insertions(+), 339 deletions(-) delete mode 100644 devices/nos/modules/docker/homepage/compose.nix delete mode 100644 devices/nos/modules/docker/homepage/images/homepage.nix delete mode 100644 devices/nos/modules/docker/homepage/services.nix create mode 100644 devices/nos/modules/homepage.nix diff --git a/devices/nos/modules/default.nix b/devices/nos/modules/default.nix index ffcfdfd5..d39954b4 100644 --- a/devices/nos/modules/default.nix +++ b/devices/nos/modules/default.nix @@ -1,6 +1,7 @@ {...}: { imports = [ ./docker + ./homepage.nix ./jellyfin ./qbittorrent ./subtitles diff --git a/devices/nos/modules/docker/default.nix b/devices/nos/modules/docker/default.nix index af8f3313..c7d96a9a 100644 --- a/devices/nos/modules/docker/default.nix +++ b/devices/nos/modules/docker/default.nix @@ -6,7 +6,6 @@ in { ./freshrss/compose.nix ./gameyfin/compose.nix ./hauk/compose.nix - ./homepage/compose.nix ./immich/compose.nix ./music/jbots/compose.nix ./nextcloud/compose.nix diff --git a/devices/nos/modules/docker/homepage/compose.nix b/devices/nos/modules/docker/homepage/compose.nix deleted file mode 100644 index d383e4dc..00000000 --- a/devices/nos/modules/docker/homepage/compose.nix +++ /dev/null @@ -1,68 +0,0 @@ -{ - config, - pkgs, - ... -}: let - inherit (config.sops) secrets; - inherit (pkgs.writers) writeYAML; -in { - khepri.compositions."homepage" = { - networks.proxy_net = {external = true;}; - - services."homepage" = { - image = import ./images/homepage.nix pkgs; - restart = "always"; - - ports = [ - "3020:3000" - ]; - - networks = ["proxy_net"]; - - extraHosts = ["lan.nelim.org:10.0.0.130"]; - - environmentFiles = [secrets.homepage.path]; - - volumes = let - services = writeYAML "services.yaml" (import ./services.nix); - - bookmarks = writeYAML "bookmarks.yaml" {}; - - settings = writeYAML "settings.yaml" { - # FIXME: title not working - title = "bruh"; - theme = "dark"; - color = "gray"; - target = "_self"; - - layout.video = { - style = "columns"; - row = 4; - # columns = 2; - }; - }; - - widgets = writeYAML "widgets.yaml" [ - { - resources = { - cpu = true; - memory = true; - disk = "/"; - }; - } - { - search = { - provider = "duckduckgo"; - target = "_blank"; - }; - } - ]; - in [ - "${bookmarks}:/app/config/bookmarks.yaml:ro" - "${services}:/app/config/services.yaml:ro" - "${settings}:/app/config/settings.yaml:ro" - "${widgets}:/app/config/widgets.yaml:ro" - ]; - }; - }; -} diff --git a/devices/nos/modules/docker/homepage/images/homepage.nix b/devices/nos/modules/docker/homepage/images/homepage.nix deleted file mode 100644 index dfe6ea7e..00000000 --- a/devices/nos/modules/docker/homepage/images/homepage.nix +++ /dev/null @@ -1,8 +0,0 @@ -pkgs: -pkgs.dockerTools.pullImage rec { - imageName = "ghcr.io/gethomepage/homepage"; - imageDigest = "sha256:d41dca72f3a68d2c675eb232a448104af200096f05e2610ffbfdb16bc7f71410"; - sha256 = "0x97p3d22qb43p653qrf29aknxwla1nnss3sk32wn6gapg1v05iy"; - finalImageName = imageName; - finalImageTag = "latest"; -} diff --git a/devices/nos/modules/docker/homepage/services.nix b/devices/nos/modules/docker/homepage/services.nix deleted file mode 100644 index 0024da08..00000000 --- a/devices/nos/modules/docker/homepage/services.nix +++ /dev/null @@ -1,262 +0,0 @@ -[ - ##################################################### - ## PUBLIC - ##################################################### - { - public = [ - { - jellyfin = rec { - href = "https://jelly.nelim.org"; - icon = "jellyfin.png"; - description = "ourflix"; - widget = { - type = "jellyfin"; - url = href; - key = "{{HOMEPAGE_VAR_JELLY_API}}"; - }; - }; - } - { - accounts = { - href = "https://jelly.nelim.org/accounts"; - icon = "jellyfin.png"; - description = "manage jellyfin users"; - }; - } - { - jellyseerr = rec { - href = "https://seerr.nelim.org"; - icon = "jellyseerr.png"; - description = "request handler"; - widget = { - type = "jellyseerr"; - url = href; - key = "{{HOMEPAGE_VAR_SEERR_API}}"; - }; - }; - } - { - gitea = { - href = "https://git.nelim.org"; - icon = "gitea.png"; - description = "git"; - }; - } - { - immich = rec { - href = "https://photos.nelim.org"; - icon = "immich.png"; - description = "gphotos replacement"; - widget = { - type = "immich"; - url = href; - key = "{{HOMEPAGE_VAR_IMMICH_API}}"; - }; - }; - } - { - gameyfin = { - href = "https://games.nelim.org"; - description = "steam (tm)"; - }; - } - { - nextcloud = rec { - href = "https://cloud.nelim.org"; - icon = "nextcloud.png"; - description = "PDrive"; - widget = { - type = "nextcloud"; - url = href; - username = "mathis"; - password = "{{HOMEPAGE_VAR_CLOUD_PASS}}"; - }; - }; - } - { - "public vaultwarden" = { - href = "https://vault.nelim.org"; - icon = "bitwarden.png"; - description = "password manager"; - }; - } - { - calibre-web = { - href = "https://books.nelim.org"; - icon = "calibreweb.png"; - description = "online library"; - }; - } - ]; - } - ##################################################### - ## VIDEO AUTOMATION - ##################################################### - { - "video automation" = [ - { - qbit = { - href = "https://lan.nelim.org/qbt"; - icon = "qbittorrent.png"; - description = "torrent client"; - widget = { - type = "qbittorrent"; - url = "http://10.0.0.121:8080"; - username = "admin"; - password = "{{HOMEPAGE_VAR_QBIT_PASS}}"; - }; - }; - } - { - sabnzbd = { - href = "https://lan.nelim.org/sabnzbd"; - icon = "sabnzbd.png"; - description = "nzb client"; - widget = { - type = "sabnzbd"; - url = "http://10.0.0.121:8382"; - key = "{{HOMEPAGE_VAR_SAB_API}}"; - }; - }; - } - { - sonarr = { - href = "https://lan.nelim.org/sonarr"; - icon = "sonarr.png"; - description = "fetches tv shows"; - widget = { - type = "sonarr"; - url = "http://sonarr:8989"; - key = "{{HOMEPAGE_VAR_SONARR_API}}"; - }; - }; - } - { - radarr = { - href = "https://lan.nelim.org/radarr"; - icon = "radarr.png"; - description = "fetches movies"; - widget = { - type = "radarr"; - url = "http://radarr:7878"; - key = "{{HOMEPAGE_VAR_RADARR_API}}"; - }; - }; - } - { - bazarr = { - href = "https://lan.nelim.org/bazarr"; - icon = "bazarr.png"; - description = "fetches subs"; - widget = { - type = "bazarr"; - url = "http://bazarr:6767/bazarr"; - key = "{{HOMEPAGE_VAR_BAZARR_API}}"; - }; - }; - } - { - prowlarr = { - href = "https://lan.nelim.org/prowlarr"; - icon = "prowlarr.png"; - description = "fetches tracker queries"; - widget = { - type = "prowlarr"; - url = "http://prowlarr:9696"; - key = "{{HOMEPAGE_VAR_PROWLARR_API}}"; - }; - }; - } - { - joal = { - href = "https://joal.nelim.org"; - icon = "joal.png"; - description = "boosts YGGTorrent ratio"; - }; - } - ]; - } - ##################################################### - ## MISC PROJECTS - ##################################################### - { - "misc projects" = [ - { - freshrss = { - href = "https://rss.nelim.org"; - icon = "freshrss.png"; - description = "rss client"; - }; - } - { - docker-hub-rss = { - href = "https://drss.nelim.org"; - icon = "freshrss.png"; - description = "dockerhub feed maker"; - }; - } - { - rss-bridge = { - href = "https://bridge.nelim.org"; - icon = "rss-bridge.png"; - description = "make rss feeds from anything"; - }; - } - { - calibre = { - href = "https://lan.nelim.org/calibre"; - icon = "calibre.png"; - description = "library backend"; - }; - } - ]; - } - ##################################################### - ## MANAGEMENT - ##################################################### - { - management = [ - { - cloudflare = { - href = "https://dash.cloudflare.com/3152abbe78daf6d91c57b6fcc424f958/nelim.org/dns"; - icon = "cloudflare.png"; - description = "dns to the world"; - }; - } - { - vaultwarden = { - href = "https://lan.nelim.org/vault"; - icon = "bitwarden.png"; - description = "password manager"; - }; - } - { - wireguard = { - href = "https://wg.nelim.org"; - icon = "wireguard.png"; - description = "wireguard gui"; - }; - } - { - steampunk = { - icon = "minecraft.png"; - description = "minecwaf"; - widget = { - type = "minecraft"; - url = "udp://mc.nelim.org"; - }; - }; - } - { - creative = { - icon = "minecraft.png"; - description = "minecwaf"; - widget = { - type = "minecraft"; - url = "udp://cv.nelim.org"; - }; - }; - } - ]; - } -] diff --git a/devices/nos/modules/homepage.nix b/devices/nos/modules/homepage.nix new file mode 100644 index 00000000..e3c48d6b --- /dev/null +++ b/devices/nos/modules/homepage.nix @@ -0,0 +1,287 @@ +{config, ...}: { + services.homepage-dashboard = { + enable = true; + listenPort = 3020; + + environmentFile = config.sops.secrets.homepage.path; + + settings = { + title = "bruh"; + theme = "dark"; + color = "gray"; + target = "_self"; + + layout.video = { + style = "columns"; + row = 4; + # columns = 2; + }; + }; + + widgets = [ + { + resources = { + cpu = true; + memory = true; + disk = "/"; + }; + } + { + search = { + provider = "duckduckgo"; + target = "_blank"; + }; + } + ]; + + services = [ + ##################################################### + ## PUBLIC + ##################################################### + { + public = [ + { + jellyfin = rec { + href = "https://jelly.nelim.org"; + icon = "jellyfin.png"; + description = "ourflix"; + widget = { + type = "jellyfin"; + url = href; + key = "{{HOMEPAGE_VAR_JELLY_API}}"; + }; + }; + } + { + accounts = { + href = "https://jelly.nelim.org/accounts"; + icon = "jellyfin.png"; + description = "manage jellyfin users"; + }; + } + { + jellyseerr = rec { + href = "https://seerr.nelim.org"; + icon = "jellyseerr.png"; + description = "request handler"; + widget = { + type = "jellyseerr"; + url = href; + key = "{{HOMEPAGE_VAR_SEERR_API}}"; + }; + }; + } + { + gitea = { + href = "https://git.nelim.org"; + icon = "gitea.png"; + description = "git"; + }; + } + { + immich = rec { + href = "https://photos.nelim.org"; + icon = "immich.png"; + description = "gphotos replacement"; + widget = { + type = "immich"; + url = href; + key = "{{HOMEPAGE_VAR_IMMICH_API}}"; + version = 2; + }; + }; + } + { + gameyfin = { + href = "https://games.nelim.org"; + description = "steam (tm)"; + }; + } + { + nextcloud = rec { + href = "https://cloud.nelim.org"; + icon = "nextcloud.png"; + description = "PDrive"; + widget = { + type = "nextcloud"; + url = href; + username = "mathis"; + password = "{{HOMEPAGE_VAR_CLOUD_PASS}}"; + }; + }; + } + { + "public vaultwarden" = { + href = "https://vault.nelim.org"; + icon = "bitwarden.png"; + description = "password manager"; + }; + } + ]; + } + ##################################################### + ## VIDEO AUTOMATION + ##################################################### + { + "video automation" = [ + { + qbit = rec { + href = "https://lan.nelim.org/qbt"; + icon = "qbittorrent.png"; + description = "torrent client"; + widget = { + type = "qbittorrent"; + url = href; + username = "admin"; + password = "{{HOMEPAGE_VAR_QBIT_PASS}}"; + }; + }; + } + { + sabnzbd = rec { + href = "https://lan.nelim.org/sabnzbd"; + icon = "sabnzbd.png"; + description = "nzb client"; + widget = { + type = "sabnzbd"; + url = href; + key = "{{HOMEPAGE_VAR_SAB_API}}"; + }; + }; + } + { + sonarr = rec { + href = "https://lan.nelim.org/sonarr"; + icon = "sonarr.png"; + description = "fetches tv shows"; + widget = { + type = "sonarr"; + url = href; + key = "{{HOMEPAGE_VAR_SONARR_API}}"; + }; + }; + } + { + radarr = rec { + href = "https://lan.nelim.org/radarr"; + icon = "radarr.png"; + description = "fetches movies"; + widget = { + type = "radarr"; + url = href; + key = "{{HOMEPAGE_VAR_RADARR_API}}"; + }; + }; + } + { + bazarr = rec { + href = "https://lan.nelim.org/bazarr"; + icon = "bazarr.png"; + description = "fetches subs"; + widget = { + type = "bazarr"; + url = href; + key = "{{HOMEPAGE_VAR_BAZARR_API}}"; + }; + }; + } + { + prowlarr = rec { + href = "https://lan.nelim.org/prowlarr"; + icon = "prowlarr.png"; + description = "fetches tracker queries"; + widget = { + type = "prowlarr"; + url = href; + key = "{{HOMEPAGE_VAR_PROWLARR_API}}"; + }; + }; + } + { + joal = { + href = "https://joal.nelim.org"; + icon = "joal.png"; + description = "boosts YGGTorrent ratio"; + }; + } + ]; + } + ##################################################### + ## MISC PROJECTS + ##################################################### + { + "misc projects" = [ + { + freshrss = { + href = "https://rss.nelim.org"; + icon = "freshrss.png"; + description = "rss client"; + }; + } + { + docker-hub-rss = { + href = "https://drss.nelim.org"; + icon = "freshrss.png"; + description = "dockerhub feed maker"; + }; + } + { + rss-bridge = { + href = "https://bridge.nelim.org"; + icon = "rss-bridge.png"; + description = "make rss feeds from anything"; + }; + } + ]; + } + ##################################################### + ## MANAGEMENT + ##################################################### + { + management = [ + { + cloudflare = { + href = "https://dash.cloudflare.com/3152abbe78daf6d91c57b6fcc424f958/nelim.org/dns"; + icon = "cloudflare.png"; + description = "dns to the world"; + }; + } + { + vaultwarden = { + href = "https://lan.nelim.org/vault"; + icon = "bitwarden.png"; + description = "password manager"; + }; + } + { + wireguard = { + href = "https://wg.nelim.org"; + icon = "wireguard.png"; + description = "wireguard gui"; + }; + } + { + survie = { + icon = "minecraft.png"; + description = "minecwaf"; + widget = { + type = "minecraft"; + url = "udp://mc.nelim.org"; + }; + }; + } + { + creative = { + icon = "minecraft.png"; + description = "minecwaf"; + widget = { + type = "minecraft"; + url = "udp://cv.nelim.org"; + }; + }; + } + ]; + } + ]; + }; +} diff --git a/flake.lock b/flake.lock index e13a57d1026d4249a902ac0b5a343622c393eadc..98e07cf8042ceb15eb62c5a6462219ee8c5f5ead 100644 GIT binary patch delta 146 zcmeA@#N2y`c|+6=4r2pzQwwu*^T{9OWp#qe%~E_TJTklu((>~2lKc&wN<9pXN*#^z z{XA3hol3l2%_H5*ii?6wTx};`=og)QV26UErKN>&N@ALcfuW^YN=k}_QIer~VzQCB tL8^(dd0L8*rKx$cX<~Akk`9*w6ety?mO1B_=9MT}DOeb7R^0hU9RTvOE{FgC delta 144 zcmeA@#N2y`c|+6=HX}<@BNLO!jB)Zh$*xuUS(as?S)S>>mcf1ze&%`3W)_)IMkQVm z+K!&)sgW6uL8gv|836{ilP~m(PCl?h!7(u@$<#R2!pzXbA}uM^Fv-B&#KJVy(7+@m r#nK?nEYZl)%+lE0z(`4lO92X$ic-s*^Gowel&lmi3^yz8e4`Ek;=3!i