3ee2b1a9d8
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016e2PKH5yN31h6JgHWCQb32
53 lines
1.3 KiB
Nix
53 lines
1.3 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;
|
|
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";
|
|
}
|
|
];
|
|
};
|
|
}
|