diff --git a/machines/jupiter/environments.nix b/machines/jupiter/environments.nix index c2ba90d..e36c825 100644 --- a/machines/jupiter/environments.nix +++ b/machines/jupiter/environments.nix @@ -21,6 +21,7 @@ in sonarr.enable = true; jellyfin.enable = true; jellyseerr.enable = true; + immich.enable = true; development.enable = true; home-assistant.enable = true; diff --git a/modules/environments/default.nix b/modules/environments/default.nix index eb0d299..9158f6a 100644 --- a/modules/environments/default.nix +++ b/modules/environments/default.nix @@ -19,5 +19,6 @@ ./sonarr ./jellyfin ./jellyseerr + ./immich ]; } diff --git a/modules/environments/immich/default.nix b/modules/environments/immich/default.nix new file mode 100644 index 0000000..f1b50f2 --- /dev/null +++ b/modules/environments/immich/default.nix @@ -0,0 +1,46 @@ +# Immich self-hosted photo & video server +{ + config, + lib, + pkgs, + ... +}: +let + cfg = config.my.profiles.immich; + hostName = config.networking.hostName; + port = 2283; +in +{ + options.my.profiles.immich = with lib; { + enable = mkEnableOption "Immich photo server"; + }; + + config = lib.mkIf cfg.enable { + services.immich = { + enable = true; + host = "0.0.0.0"; + inherit port; + openFirewall = true; + mediaLocation = "/var/lib/immich"; + machine-learning.enable = true; + accelerationDevices = [ "/dev/dri/renderD128" ]; + settings.server.externalDomain = "http://${hostName}:${toString port}"; + }; + + # The native module does not add GPU groups; required for VAAPI/QSV transcoding. + users.users.immich.extraGroups = [ + "video" + "render" + ]; + + my.homepage.services = [ + { + group = "Media"; + name = "Immich"; + description = "Photo & video server"; + href = "http://${hostName}:${toString port}"; + icon = "immich.png"; + } + ]; + }; +}