diff --git a/modules/servers/homepage.nix b/modules/servers/homepage.nix index 20fee27..1724a79 100644 --- a/modules/servers/homepage.nix +++ b/modules/servers/homepage.nix @@ -1,6 +1,5 @@ { lib, config, ... }: let - services = import ./homepage/services.nix { inherit config lib; }; cfg = config.my.servers.homepage; setup = import ./setup.nix { inherit lib config; }; in @@ -14,107 +13,14 @@ in enable = true; listenPort = cfg.port; environmentFile = config.sops.secrets.homepage.path; - settings = { - layout = { - stash = { - header = false; - tab = "secret"; - style = "row"; - }; - multimedia = { - header = false; - tab = "servers"; - style = "row"; - columns = 4; - }; - piracy = { - header = false; - tab = "servers"; - style = "row"; - columns = 4; - }; - main = { - header = false; - tab = "servers"; - style = "row"; - columns = 3; - }; - "server bookmarks" = { - header = false; - tab = "servers"; - style = "row"; - columns = 3; - }; - art.tab = "bookmarks"; - entertainment.tab = "bookmarks"; - torrents.tab = "bookmarks"; - shopping.tab = "bookmarks"; - social.tab = "bookmarks"; - development.tab = "bookmarks"; - "secret art".tab = "secret"; - "secret media".tab = "secret"; - "secret social".tab = "secret"; - }; - }; - widgets = [ - { - resources = { - cpu = true; - cputemp = true; - units = "metric"; - disk = "/"; - memory = true; - }; - } - { - search = { - provider = [ - "brave" - "bing" - "google" - ]; - target = "_blank"; - showSearchSuggestions = true; - }; - } - ]; - services = [ - { "stash" = [ { inherit (services) stash; } ]; } - { - "multimedia" = [ - { inherit (services) plex; } - { inherit (services) jellyfin; } - { inherit (services) audiobookshelf; } - { inherit (services) kavita; } - ]; - } - { - "piracy" = [ - { inherit (services) sonarr; } - { inherit (services) radarr; } - { inherit (services) lidarr; } - { inherit (services) bazarr; } - { inherit (services) prowlarr; } - { inherit (services) sabnzbd; } - { inherit (services) "qbittorrent server"; } - { inherit (services) "qbittorrent miniserver"; } - ]; - } - { - "main" = [ - { inherit (services) nextcloud; } - { inherit (services) mealie; } - { inherit (services) paperless; } - ]; - } - ]; + settings.layout = import ./homepage/layout.nix; + widgets = import ./homepage/widgets.nix; + services = import ./homepage/services.nix { inherit lib config; }; bookmarks = - let - bookmarkFiles = builtins.filter (file: builtins.match ".*\\.nix" file != null) ( - builtins.attrNames (builtins.readDir ./homepage/bookmarks) - ); - in - map (file: import ./homepage/bookmarks/${file}) bookmarkFiles; + builtins.readDir ./homepage/bookmarks + |> builtins.attrNames + |> builtins.filter (file: builtins.match ".*\\.nix" file != null) + |> map (file: import ./homepage/bookmarks/${file}); }; nginx.virtualHosts."${cfg.host}" = lib.mkIf cfg.enableProxy ( setup.proxyReverse cfg.hostName cfg.port // { } diff --git a/modules/servers/homepage/layout.nix b/modules/servers/homepage/layout.nix new file mode 100644 index 0000000..5763380 --- /dev/null +++ b/modules/servers/homepage/layout.nix @@ -0,0 +1,40 @@ +{ + stash = { + header = false; + tab = "secret"; + style = "row"; + }; + multimedia = { + header = false; + tab = "servers"; + style = "row"; + columns = 4; + }; + piracy = { + header = false; + tab = "servers"; + style = "row"; + columns = 4; + }; + main = { + header = false; + tab = "servers"; + style = "row"; + columns = 3; + }; + "server bookmarks" = { + header = false; + tab = "servers"; + style = "row"; + columns = 3; + }; + art.tab = "bookmarks"; + entertainment.tab = "bookmarks"; + torrents.tab = "bookmarks"; + shopping.tab = "bookmarks"; + social.tab = "bookmarks"; + development.tab = "bookmarks"; + "secret art".tab = "secret"; + "secret media".tab = "secret"; + "secret social".tab = "secret"; +} diff --git a/modules/servers/homepage/service-widgets.nix b/modules/servers/homepage/service-widgets.nix new file mode 100644 index 0000000..69ce19f --- /dev/null +++ b/modules/servers/homepage/service-widgets.nix @@ -0,0 +1,243 @@ +{ lib, config, ... }: +{ + audiobookshelf = + let + cfg = config.my.servers.audiobookshelf; + in + lib.mkIf (cfg.enable || cfg.enableProxy) { + icon = "${cfg.name}.png"; + href = cfg.url; + widget = { + inherit (cfg) url; + type = cfg.name; + key = "{{HOMEPAGE_VAR_AUDIOBOOKSHELF}}"; + }; + }; + plex = + let + cfg = config.my.servers.plex; + in + lib.mkIf (cfg.enable || cfg.enableProxy) { + icon = "${cfg.name}.png"; + href = cfg.url; + widget = { + inherit (cfg) url; + type = cfg.name; + key = "{{HOMEPAGE_VAR_PLEX}}"; + }; + }; + jellyfin = + let + cfg = config.my.servers.jellyfin; + in + lib.mkIf (cfg.enable || cfg.enableProxy) { + icon = "${cfg.name}.png"; + href = cfg.url; + widget = { + inherit (cfg) url; + type = cfg.name; + key = "{{HOMEPAGE_VAR_JELLYFIN}}"; + enableUser = true; + enableBlocks = true; + enableNowPlaying = false; + }; + }; + sonarr = + let + cfg = config.my.servers.sonarr; + in + lib.mkIf (cfg.enable || cfg.enableProxy) { + icon = "${cfg.name}.png"; + href = cfg.url; + widget = { + inherit (cfg) url; + type = cfg.name; + key = "{{HOMEPAGE_VAR_SONARR}}"; + enableQueue = true; + }; + }; + radarr = + let + cfg = config.my.servers.radarr; + in + lib.mkIf (cfg.enable || cfg.enableProxy) { + icon = "${cfg.name}.png"; + href = cfg.url; + widget = { + inherit (cfg) url; + type = cfg.name; + key = "{{HOMEPAGE_VAR_RADARR}}"; + enableQueue = true; + }; + }; + lidarr = + let + cfg = config.my.servers.lidarr; + in + lib.mkIf (cfg.enable || cfg.enableProxy) { + icon = "${cfg.name}.png"; + href = cfg.url; + widget = { + inherit (cfg) url; + type = cfg.name; + key = "{{HOMEPAGE_VAR_LIDARR}}"; + }; + }; + prowlarr = + let + cfg = config.my.servers.prowlarr; + in + lib.mkIf (cfg.enable || cfg.enableProxy) { + icon = "${cfg.name}.png"; + href = cfg.url; + widget = { + type = cfg.name; + inherit (cfg) url; + key = "{{HOMEPAGE_VAR_PROWLARR}}"; + }; + }; + bazarr = + let + cfg = config.my.servers.bazarr; + in + lib.mkIf (cfg.enable || cfg.enableProxy) { + icon = "${cfg.name}.png"; + href = cfg.url; + widget = { + type = cfg.name; + inherit (cfg) url; + key = "{{HOMEPAGE_VAR_BAZARR}}"; + }; + }; + kavita = + let + cfg = config.my.servers.kavita; + in + lib.mkIf (cfg.enable || cfg.enableProxy) { + icon = "${cfg.name}.png"; + href = cfg.url; + widget = { + type = cfg.name; + inherit (cfg) url; + username = "{{HOMEPAGE_VAR_KAVITA_USERNAME}}"; + password = "{{HOMEPAGE_VAR_KAVITA_PASSWORD}}"; + }; + }; + "qbittorrent server" = + let + url = "https://${config.my.ips.server}:${toString config.my.servers.qbittorrent.port}"; + name = "qbittorrent"; + in + lib.mkIf config.my.servers.qbittorrent.enable { + icon = "${name}.png"; + href = url; + widget = { + type = name; + inherit url; + username = "{{HOMEPAGE_VAR_QBIT_USERNAME}}"; + password = "{{HOMEPAGE_VAR_QBIT_PASSWORD}}"; + }; + }; + "qbittorrent miniserver" = + let + url = "https://${config.my.ips.miniserver}:${toString config.my.servers.qbittorrent.port}"; + name = "qbittorrent"; + in + lib.mkIf config.my.servers.qbittorrent.enable { + icon = "${name}.png"; + href = url; + widget = { + type = name; + inherit url; + username = "{{HOMEPAGE_VAR_QBIT_USERNAME}}"; + password = "{{HOMEPAGE_VAR_QBIT_PASSWORD}}"; + }; + }; + sabnzbd = + let + name = "sabnzbd"; + url = "https://${config.my.ips.server}:${toString config.my.servers.sabnzbd.port}"; + in + { + icon = "${name}.png"; + href = url; + widget = { + type = name; + inherit url; + key = "{{HOMEPAGE_VAR_SABNZBD}}"; + }; + }; + mealie = + let + cfg = config.my.servers.mealie; + in + lib.mkIf (cfg.enable || cfg.enableProxy) { + icon = "${cfg.name}.png"; + href = cfg.url; + widget = { + inherit (cfg) url; + type = cfg.name; + key = "{{HOMEPAGE_VAR_MEALIE}}"; + version = 2; + }; + }; + nextcloud = + let + cfg = config.my.servers.nextcloud; + in + lib.mkIf (cfg.enable || cfg.enableProxy) { + icon = "${cfg.name}.png"; + href = cfg.url; + widget = { + inherit (cfg) url; + type = cfg.name; + username = "{{HOMEPAGE_VAR_NEXTCLOUD_USERNAME}}"; + password = "{{HOMEPAGE_VAR_NEXTCLOUD_PASSWORD}}"; + token = "{{HOMEPAGE_VAR_NEXTCLOUD_TOKEN}}"; + fields = [ + "memoryusage" + "activeusers" + "numfiles" + "numshares" + ]; + }; + }; + paperless = + let + name = "paperlessngx"; + url = "http://${config.my.ips.miniserver}:${toString config.services.paperless.port}"; + in + lib.mkIf config.my.servers.paperless.enable { + icon = "paperless.png"; + href = url; + widget = { + type = name; + key = "{{HOMEPAGE_VAR_PAPERLESS}}"; + inherit url; + fields = [ + "total" + "inbox" + ]; + }; + }; + stash = + let + name = "stash"; + url = "http://192.168.1.69:9999"; + in + { + icon = "${name}.png"; + href = url; + widget = { + type = name; + key = "{{HOMEPAGE_VAR_STASH}}"; + inherit url; + fields = [ + "scenes" + "images" + "playCount" + "oCount" + ]; + }; + }; +} diff --git a/modules/servers/homepage/services.nix b/modules/servers/homepage/services.nix index 64808c7..b14ddef 100644 --- a/modules/servers/homepage/services.nix +++ b/modules/servers/homepage/services.nix @@ -1,243 +1,34 @@ -{ config, lib, ... }: -{ - audiobookshelf = - let - cfg = config.my.servers.audiobookshelf; - in - lib.mkIf (cfg.enable || cfg.enableProxy) { - icon = "${cfg.name}.png"; - href = cfg.url; - widget = { - inherit (cfg) url; - type = cfg.name; - key = "{{HOMEPAGE_VAR_AUDIOBOOKSHELF}}"; - }; - }; - plex = - let - cfg = config.my.servers.plex; - in - lib.mkIf (cfg.enable || cfg.enableProxy) { - icon = "${cfg.name}.png"; - href = cfg.url; - widget = { - inherit (cfg) url; - type = cfg.name; - key = "{{HOMEPAGE_VAR_PLEX}}"; - }; - }; - jellyfin = - let - cfg = config.my.servers.jellyfin; - in - lib.mkIf (cfg.enable || cfg.enableProxy) { - icon = "${cfg.name}.png"; - href = cfg.url; - widget = { - inherit (cfg) url; - type = cfg.name; - key = "{{HOMEPAGE_VAR_JELLYFIN}}"; - enableUser = true; - enableBlocks = true; - enableNowPlaying = false; - }; - }; - sonarr = - let - cfg = config.my.servers.sonarr; - in - lib.mkIf (cfg.enable || cfg.enableProxy) { - icon = "${cfg.name}.png"; - href = cfg.url; - widget = { - inherit (cfg) url; - type = cfg.name; - key = "{{HOMEPAGE_VAR_SONARR}}"; - enableQueue = true; - }; - }; - radarr = - let - cfg = config.my.servers.radarr; - in - lib.mkIf (cfg.enable || cfg.enableProxy) { - icon = "${cfg.name}.png"; - href = cfg.url; - widget = { - inherit (cfg) url; - type = cfg.name; - key = "{{HOMEPAGE_VAR_RADARR}}"; - enableQueue = true; - }; - }; - lidarr = - let - cfg = config.my.servers.lidarr; - in - lib.mkIf (cfg.enable || cfg.enableProxy) { - icon = "${cfg.name}.png"; - href = cfg.url; - widget = { - inherit (cfg) url; - type = cfg.name; - key = "{{HOMEPAGE_VAR_LIDARR}}"; - }; - }; - prowlarr = - let - cfg = config.my.servers.prowlarr; - in - lib.mkIf (cfg.enable || cfg.enableProxy) { - icon = "${cfg.name}.png"; - href = cfg.url; - widget = { - type = cfg.name; - inherit (cfg) url; - key = "{{HOMEPAGE_VAR_PROWLARR}}"; - }; - }; - bazarr = - let - cfg = config.my.servers.bazarr; - in - lib.mkIf (cfg.enable || cfg.enableProxy) { - icon = "${cfg.name}.png"; - href = cfg.url; - widget = { - type = cfg.name; - inherit (cfg) url; - key = "{{HOMEPAGE_VAR_BAZARR}}"; - }; - }; - kavita = - let - cfg = config.my.servers.kavita; - in - lib.mkIf (cfg.enable || cfg.enableProxy) { - icon = "${cfg.name}.png"; - href = cfg.url; - widget = { - type = cfg.name; - inherit (cfg) url; - username = "{{HOMEPAGE_VAR_KAVITA_USERNAME}}"; - password = "{{HOMEPAGE_VAR_KAVITA_PASSWORD}}"; - }; - }; - "qbittorrent server" = - let - url = "https://${config.my.ips.server}:${toString config.my.servers.qbittorrent.port}"; - name = "qbittorrent"; - in - lib.mkIf config.my.servers.qbittorrent.enable { - icon = "${name}.png"; - href = url; - widget = { - type = name; - inherit url; - username = "{{HOMEPAGE_VAR_QBIT_USERNAME}}"; - password = "{{HOMEPAGE_VAR_QBIT_PASSWORD}}"; - }; - }; - "qbittorrent miniserver" = - let - url = "https://${config.my.ips.miniserver}:${toString config.my.servers.qbittorrent.port}"; - name = "qbittorrent"; - in - lib.mkIf config.my.servers.qbittorrent.enable { - icon = "${name}.png"; - href = url; - widget = { - type = name; - inherit url; - username = "{{HOMEPAGE_VAR_QBIT_USERNAME}}"; - password = "{{HOMEPAGE_VAR_QBIT_PASSWORD}}"; - }; - }; - sabnzbd = - let - name = "sabnzbd"; - url = "https://${config.my.ips.server}:${toString config.my.servers.sabnzbd.port}"; - in - { - icon = "${name}.png"; - href = url; - widget = { - type = name; - inherit url; - key = "{{HOMEPAGE_VAR_SABNZBD}}"; - }; - }; - mealie = - let - cfg = config.my.servers.mealie; - in - lib.mkIf (cfg.enable || cfg.enableProxy) { - icon = "${cfg.name}.png"; - href = cfg.url; - widget = { - inherit (cfg) url; - type = cfg.name; - key = "{{HOMEPAGE_VAR_MEALIE}}"; - version = 2; - }; - }; - nextcloud = - let - cfg = config.my.servers.nextcloud; - in - lib.mkIf (cfg.enable || cfg.enableProxy) { - icon = "${cfg.name}.png"; - href = cfg.url; - widget = { - inherit (cfg) url; - type = cfg.name; - username = "{{HOMEPAGE_VAR_NEXTCLOUD_USERNAME}}"; - password = "{{HOMEPAGE_VAR_NEXTCLOUD_PASSWORD}}"; - token = "{{HOMEPAGE_VAR_NEXTCLOUD_TOKEN}}"; - fields = [ - "memoryusage" - "activeusers" - "numfiles" - "numshares" - ]; - }; - }; - paperless = - let - name = "paperlessngx"; - url = "http://${config.my.ips.miniserver}:${toString config.services.paperless.port}"; - in - lib.mkIf config.my.servers.paperless.enable { - icon = "paperless.png"; - href = url; - widget = { - type = name; - key = "{{HOMEPAGE_VAR_PAPERLESS}}"; - inherit url; - fields = [ - "total" - "inbox" - ]; - }; - }; - stash = - let - name = "stash"; - url = "http://192.168.1.69:9999"; - in - { - icon = "${name}.png"; - href = url; - widget = { - type = name; - key = "{{HOMEPAGE_VAR_STASH}}"; - inherit url; - fields = [ - "scenes" - "images" - "playCount" - "oCount" - ]; - }; - }; -} +{ lib, config, ... }: +let + services = import ./service-widgets.nix { inherit lib config; }; +in +[ + { "stash" = [ { inherit (services) stash; } ]; } + { + "multimedia" = [ + { inherit (services) plex; } + { inherit (services) jellyfin; } + { inherit (services) audiobookshelf; } + { inherit (services) kavita; } + ]; + } + { + "piracy" = [ + { inherit (services) sonarr; } + { inherit (services) radarr; } + { inherit (services) lidarr; } + { inherit (services) bazarr; } + { inherit (services) prowlarr; } + { inherit (services) sabnzbd; } + { inherit (services) "qbittorrent server"; } + { inherit (services) "qbittorrent miniserver"; } + ]; + } + { + "main" = [ + { inherit (services) nextcloud; } + { inherit (services) mealie; } + { inherit (services) paperless; } + ]; + } +] diff --git a/modules/servers/homepage/widgets.nix b/modules/servers/homepage/widgets.nix new file mode 100644 index 0000000..9ec1e95 --- /dev/null +++ b/modules/servers/homepage/widgets.nix @@ -0,0 +1,22 @@ +[ + { + resources = { + cpu = true; + cputemp = true; + units = "metric"; + disk = "/"; + memory = true; + }; + } + { + search = { + provider = [ + "brave" + "bing" + "google" + ]; + target = "_blank"; + showSearchSuggestions = true; + }; + } +]