diff --git a/hosts/v-th-ctr-01/configuration.nix b/hosts/v-th-ctr-01/configuration.nix index 4bf5125..0713998 100644 --- a/hosts/v-th-ctr-01/configuration.nix +++ b/hosts/v-th-ctr-01/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ modulesPath, ... }: +{ modulesPath, lib, ... }: { imports = [ @@ -12,6 +12,8 @@ ../../modules/system/default.nix ]; + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + settings = { hostname = "v-th-ctr-01"; display-manager = "none"; diff --git a/hosts/v-th-ctr-01/home.nix b/hosts/v-th-ctr-01/home.nix index f3f4529..45f3f2c 100644 --- a/hosts/v-th-ctr-01/home.nix +++ b/hosts/v-th-ctr-01/home.nix @@ -57,6 +57,7 @@ vikunja.enable = true; stalwart.enable = true; linkding.enable = true; + jellyfin.enable = true; }; }; diff --git a/modules/home/containers/beszel.nix b/modules/home/containers/beszel.nix index eedfee5..7770c9c 100644 --- a/modules/home/containers/beszel.nix +++ b/modules/home/containers/beszel.nix @@ -49,11 +49,10 @@ in { }; }; - settings.containers.caddy.routes.tbmrs-local.routes = [{ - name = "beszel"; + settings.containers.caddy.routes.tbmrs-local.routes.beszel = { host = "monitor"; url = "beszel:8090"; - }]; + }; sops.secrets = { "containers/beszel/key" = { }; diff --git a/modules/home/containers/caddy.nix b/modules/home/containers/caddy.nix index 4d65a45..3815194 100644 --- a/modules/home/containers/caddy.nix +++ b/modules/home/containers/caddy.nix @@ -5,6 +5,12 @@ with lib; let cfg = config.settings.containers.caddy; + toInternal = name: routesDef: { + name = name; + host = routesDef.host; + url = routesDef.url; + }; + generateRoutes = domain: entries: lib.concatMapStrings (route: '' @${route.name} host ${route.host}.${domain} handle @${route.name} { @@ -13,11 +19,8 @@ let '') entries; routesOption = lib.mkOption { - type = types.listOf (types.submodule { + type = types.attrsOf (types.submodule { options = { - name = mkOption { - type = types.str; - }; url = mkOption { type = types.str; }; @@ -79,7 +82,7 @@ in { resolvers 1.1.1.1 } - ${generateRoutes cfg.routes.tbmrs.domain cfg.routes.tbmrs.routes} + ${generateRoutes cfg.routes.tbmrs.domain (mapAttrsToList toInternal cfg.routes.tbmrs.routes)} } *.local.tbmrs.nl { @@ -88,7 +91,7 @@ in { resolvers 1.1.1.1 } - ${generateRoutes cfg.routes.tbmrs-local.domain cfg.routes.tbmrs-local.routes} + ${generateRoutes cfg.routes.tbmrs-local.domain (mapAttrsToList toInternal cfg.routes.tbmrs-local.routes)} } ''; }; diff --git a/modules/home/containers/forgejo.nix b/modules/home/containers/forgejo.nix index 752b24f..bee417d 100644 --- a/modules/home/containers/forgejo.nix +++ b/modules/home/containers/forgejo.nix @@ -29,10 +29,9 @@ in { }; }; - settings.containers.caddy.routes.tbmrs.routes = [{ - name = "forgejo"; + settings.containers.caddy.routes.tbmrs.routes.forgejo = { host = "git"; url = "forgejo:3000"; - }]; + }; }; } diff --git a/modules/home/containers/homeassistant.nix b/modules/home/containers/homeassistant.nix index aca0ba2..85b9cec 100644 --- a/modules/home/containers/homeassistant.nix +++ b/modules/home/containers/homeassistant.nix @@ -28,10 +28,9 @@ in { }; }; - settings.containers.caddy.routes.tbmrs-local.routes = [{ - name = "homeassistant"; + settings.containers.caddy.routes.tbmrs-local.routes.home-assistant = { host = "home-assistant"; url = "homeassistant:8123"; - }]; + }; }; } diff --git a/modules/home/containers/homepage.nix b/modules/home/containers/homepage.nix index 199e86e..1a4509d 100644 --- a/modules/home/containers/homepage.nix +++ b/modules/home/containers/homepage.nix @@ -32,6 +32,11 @@ in { }; }; + settings.containers.caddy.routes.tbmrs.routes.homepage = { + host = "home"; + url = "homepage:3000"; + }; + home.file."containers/homepage/config/settings.yaml".source = (pkgs.formats.yaml { }).generate "settings" { title = "Timo's Server"; description = "server from Timo"; @@ -125,12 +130,21 @@ in { }; } { - "Karakeep" = { - href = "https://karakeep.local.tbmrs.nl"; - description = "Data hoarder"; - icon = "karakeep"; + "Linkding" = { + href = "https://links.local.tbmrs.nl"; + description = "Bookmarks"; + icon = "linkding"; server = "podman"; - container = "karakeep"; + container = "linkding"; + }; + } + { + "Stalwart" = { + href = "https://mail.tbmrs.nl"; + description = "Mailserver"; + icon = "stalwart"; + server = "podman"; + container = "stalwart"; }; } ]; diff --git a/modules/home/containers/immich.nix b/modules/home/containers/immich.nix index eb5eb24..e587dbf 100644 --- a/modules/home/containers/immich.nix +++ b/modules/home/containers/immich.nix @@ -72,10 +72,9 @@ in { exec = ''postgres -c shared_preload_libraries=vectors.so -c 'search_path="$$user", public, vectors' -c logging_collector=on -c max_wal_size=2GB -c shared_buffers=512MB -c wal_compression=on''; }; - settings.containers.caddy.routes.tbmrs.routes = [{ - name = "immich"; + settings.containers.caddy.routes.tbmrs.routes.immich = { host = "photos"; url = "immich-server:2283"; - }]; + }; }; } diff --git a/modules/home/containers/jellyfin.nix b/modules/home/containers/jellyfin.nix new file mode 100644 index 0000000..3af54bd --- /dev/null +++ b/modules/home/containers/jellyfin.nix @@ -0,0 +1,36 @@ +{ config, lib, ... }: + +with lib; + +let + cfg = config.settings.containers.jellyfin; +in { + options = { + settings.containers.jellyfin.enable = lib.mkOption { + type = lib.types.bool; + default = false; + description = '' + Enable jellyfin container + ''; + }; + }; + + config = mkIf cfg.enable { + services.podman.containers.jellyfin = { + image = "jellyfin:jellyfin"; + network = "proxy"; + volumes = [ + "%h/containers/jellyfin/data:/data" + "%h/containers/jellyfin/cache:/cache" + "%h/media:/media" + ]; + userNS = "keep-id"; + }; + + settings.containers.caddy.routes.tbmrs.routes.jellyfin = { + name = "jellyfin"; + host = "watch"; + url = "jellyfin:8096"; + }; + }; +} diff --git a/modules/home/containers/kanidm.nix b/modules/home/containers/kanidm.nix index ccdebb8..fcce27e 100644 --- a/modules/home/containers/kanidm.nix +++ b/modules/home/containers/kanidm.nix @@ -37,10 +37,9 @@ in { }; }; - settings.containers.caddy.routes.tbmrs.routes = [{ - name = "kanidm"; + settings.containers.caddy.routes.tbmrs.routes.kanidm = { host = "auth"; url = "https://auth.tbmrs.nl"; - }]; + }; }; } diff --git a/modules/home/containers/linkding.nix b/modules/home/containers/linkding.nix index 859bca1..10cbc85 100644 --- a/modules/home/containers/linkding.nix +++ b/modules/home/containers/linkding.nix @@ -36,11 +36,10 @@ in { ]; }; - settings.containers.caddy.routes.tbmrs-local.routes = [{ - name = "linkding"; + settings.containers.caddy.routes.tbmrs-local.routes.linkding = { host = "links"; url = "linkding:9090"; - }]; + }; settings.services.sops.enable = true; diff --git a/modules/home/containers/paperless-ngx.nix b/modules/home/containers/paperless-ngx.nix index c92115c..a5b9122 100644 --- a/modules/home/containers/paperless-ngx.nix +++ b/modules/home/containers/paperless-ngx.nix @@ -88,11 +88,10 @@ in { ]; }; - settings.containers.caddy.routes.tbmrs-local.routes = [{ - name = "paperless-ngx"; + settings.containers.caddy.routes.tbmrs-local.routes.paperless-ngx = { host = "paperless"; url = "paperless-ngx:8000"; - }]; + }; sops.secrets = { "containers/paperless-ngx/db-password" = { }; diff --git a/modules/home/containers/pingvin-share.nix b/modules/home/containers/pingvin-share.nix index c30aea9..ec6ae77 100644 --- a/modules/home/containers/pingvin-share.nix +++ b/modules/home/containers/pingvin-share.nix @@ -39,11 +39,10 @@ in { }; }; - settings.containers.caddy.routes.tbmrs.routes = [{ - name = "pingvin-share"; + settings.containers.caddy.routes.tbmrs.routes.pingvin = { host = "share"; url = "pingvin-share:3000"; - }]; + }; sops.templates = { "container-pingvin.yaml" = { diff --git a/modules/home/containers/stalwart.nix b/modules/home/containers/stalwart.nix index 1f3a6e9..1fca1f5 100644 --- a/modules/home/containers/stalwart.nix +++ b/modules/home/containers/stalwart.nix @@ -34,10 +34,9 @@ in { ]; }; - settings.containers.caddy.routes.tbmrs.routes = [{ - name = "stalwart"; + settings.containers.caddy.routes.tbmrs.routes.stalwart = { host = "mail"; url = "stalwart:8080"; - }]; + }; }; } diff --git a/modules/home/containers/storage.nix b/modules/home/containers/storage.nix index 99ef302..d0c0d57 100644 --- a/modules/home/containers/storage.nix +++ b/modules/home/containers/storage.nix @@ -44,16 +44,14 @@ in { ]; }; - settings.containers.caddy.routes.tbmrs-local.routes = [{ - name = "syncthing"; + settings.containers.caddy.routes.tbmrs-local.routes.sycnthing = { host = "syncthing"; url = "syncthing:8384"; - }]; + }; - settings.containers.caddy.routes.tbmrs.routes = [{ - name = "dufs"; + settings.containers.caddy.routes.tbmrs.routes.dufs = { host = "files"; url = "dufs:5000"; - }]; + }; }; } diff --git a/modules/home/containers/uptime-kuma.nix b/modules/home/containers/uptime-kuma.nix index 9197134..5740080 100644 --- a/modules/home/containers/uptime-kuma.nix +++ b/modules/home/containers/uptime-kuma.nix @@ -24,10 +24,9 @@ in { ]; }; - settings.containers.caddy.routes.tbmrs.routes = [{ - name = "uptime-kuma"; + settings.containers.caddy.routes.tbmrs.routes.uptime-kuma = { host = "uptime"; url = "uptime-kuma:3001"; - }]; + }; }; } diff --git a/modules/home/containers/vaultwarden.nix b/modules/home/containers/vaultwarden.nix index df07d6c..b1091fc 100644 --- a/modules/home/containers/vaultwarden.nix +++ b/modules/home/containers/vaultwarden.nix @@ -28,11 +28,10 @@ in { }; }; - settings.containers.caddy.routes.tbmrs-local.routes = [{ - name = "vaultwarden"; + settings.containers.caddy.routes.tbmrs-local.routes.vaultwarden = { host = "vault"; url = "vaultwarden:80"; - }]; + }; }; } diff --git a/modules/home/containers/vikunja.nix b/modules/home/containers/vikunja.nix index 0950c1d..445d8ba 100644 --- a/modules/home/containers/vikunja.nix +++ b/modules/home/containers/vikunja.nix @@ -26,10 +26,9 @@ in { ]; }; - settings.containers.caddy.routes.tbmrs-local.routes = [{ - name = "vikunja"; + settings.containers.caddy.routes.tbmrs-local.routes.vikunja = { host = "tasks"; url = "vikunja:3456"; - }]; + }; }; } diff --git a/modules/home/default.nix b/modules/home/default.nix index b98bd16..dab789e 100644 --- a/modules/home/default.nix +++ b/modules/home/default.nix @@ -46,6 +46,7 @@ ./containers/stalwart.nix ./containers/static.nix ./containers/linkding.nix + ./containers/jellyfin.nix ]; config = {