Files
nixos/modules/environments/immich/default.nix
T
finn.markwitzandClaude Sonnet 5 30b7f177c5 feat(immich): upgrade to 3.x via unstable overlay
nixos-26.05 pins immich at 2.7.5; pull 3.2.0 from pkgs.unstable
instead. The machine-learning service picks up the matching version
automatically via the package's passthru. Verified jupiter's toplevel
still builds; pgvecto.rs->vectorchord migration was already in place
so no DB migration is needed for the bump itself.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DDyhS2N9XEeMq4GisBrqyf
2026-09-21 15:42:31 +02:00

55 lines
1.4 KiB
Nix

# 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;
# nixos-26.05 pins immich 2.7.5; pull 3.x from the unstable overlay instead.
package = pkgs.unstable.immich;
host = "0.0.0.0";
inherit port;
openFirewall = true;
mediaLocation = "/var/lib/immich";
machine-learning.enable = true;
accelerationDevices = [ "/dev/dri/renderD128" ];
# Setting `settings` puts Immich in config-file mode: the admin settings
# UI becomes read-only and system config is managed declaratively here.
settings = {
server.externalDomain = "http://${hostName}:${toString port}";
# Intel Quick Sync hardware transcoding (jupiter's iGPU).
ffmpeg.accel = "qsv";
};
};
# 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";
}
];
};
}