Added Immich service

This commit is contained in:
pazpi 2025-03-30 11:39:17 +02:00
parent feef193d6e
commit 18021fb910
7 changed files with 147 additions and 0 deletions

View file

@ -55,6 +55,12 @@ in
}; };
}; };
immich.proxy = {
enable = true;
domain = p.domains.public;
host = p.hosts.immich;
};
media-mgr = { media-mgr = {
proxy = { proxy = {
enable = true; enable = true;

View file

@ -222,4 +222,15 @@ in
# specialArgs = { }; # specialArgs = { };
}; };
immich = nixpkgs.lib.nixosSystem {
pkgs = pkgs "x86_64-linux";
modules = [
myModules
proxmoxModule
./immich
agenix.nixosModules.default
];
# specialArgs = { };
};
} }

View file

@ -33,6 +33,7 @@ in
"nextcloud" "nextcloud"
"portainer" "portainer"
"vaultwarden" "vaultwarden"
"immich"
]; ];
}; };
@ -134,6 +135,15 @@ in
]; ];
}; };
immich.deployment = {
targetHost = hosts.immich;
tags = [
"lxc"
"bacco"
"immich"
];
};
deadbeef.deployment = { deadbeef.deployment = {
allowLocalDeployment = true; allowLocalDeployment = true;
targetHost = null; targetHost = null;

32
hosts/immich/default.nix Normal file
View file

@ -0,0 +1,32 @@
{
config,
pkgs,
lib,
...
}:
{
my = {
utils = {
commons.enable = true;
lxc-standard.enable = true;
};
services.immich = {
enable = true;
mediaDir = "/mnt/immich";
};
networking.nas-samba-share = {
enable = true;
allowUsers = [ config.services.immich.user ];
};
virtualisation.proxmox.enable = true;
};
# Extra packages
environment.systemPackages = with pkgs; [ ];
system.stateVersion = "24.11";
}

View file

@ -17,6 +17,7 @@
shadowsocks = "shadowsocks.internal"; shadowsocks = "shadowsocks.internal";
mpd = "192.168.1.7"; mpd = "192.168.1.7";
librechat = "librechat.internal"; librechat = "librechat.internal";
immich = "immich.internal";
}; };
domains = { domains = {
public = "pasetto.me"; public = "pasetto.me";

View file

@ -2,6 +2,7 @@
imports = [ imports = [
./authentik.nix ./authentik.nix
./dashy.nix ./dashy.nix
./immich.nix
./media-mgr.nix ./media-mgr.nix
./nextcloud.nix ./nextcloud.nix
./plex.nix ./plex.nix

View file

@ -0,0 +1,86 @@
{
lib,
config,
pkgs,
...
}:
let
cfg = config.my.services.immich;
in
{
options.my.services.immich = {
enable = lib.mkEnableOption "Enable Immich photo albums module";
mediaDir = lib.mkOption {
type = lib.types.path;
default = "/var/lib/immich/media";
description = "Directory with Immich will store media files";
};
settings = lib.mkOption {
type = lib.types.attrsOf lib.types.any;
default = { };
description = ''
Settings for Immich
'';
};
proxy = {
enable = lib.mkEnableOption "Set the proxy entry for this service";
domain = lib.mkOption {
default = "example.com";
type = lib.types.str;
description = ''
The domain where Caddy is reachable
'';
};
subdomain = lib.mkOption {
default = "photos";
type = lib.types.str;
description = ''
The subdomain where Immich is reachable
'';
};
host = lib.mkOption {
default = "localhost";
type = lib.types.str;
description = ''
host name where the service is running
'';
};
};
};
config = lib.mkMerge [
(lib.mkIf cfg.enable {
services.immich = {
enable = true;
host = "0.0.0.0";
openFirewall = true;
redis.enable = true;
mediaLocation = cfg.mediaDir;
machine-learning.enable = true;
database = {
enable = true;
createDB = true;
};
};
})
(lib.mkIf cfg.proxy.enable {
services.caddy = with cfg.proxy; {
virtualHosts."${subdomain}.${domain}".extraConfig = ''
reverse_proxy http://${host}:${toString config.services.immich.port}
import cloudflare_${domain}
'';
};
})
];
}