diff options
| -rw-r--r-- | configuration.nix | 6 | ||||
| -rw-r--r-- | modules/dashboard/default.nix | 10 | ||||
| -rw-r--r-- | modules/dashboard/links.nix | 7 | ||||
| -rw-r--r-- | modules/media/default.nix | 4 | ||||
| -rw-r--r-- | modules/network/default.nix | 1 | ||||
| -rw-r--r-- | modules/storage/default.nix | 3 | ||||
| -rw-r--r-- | modules/storage/immich.nix | 47 | ||||
| -rw-r--r-- | settings.nix | 7 |
8 files changed, 75 insertions, 10 deletions
diff --git a/configuration.nix b/configuration.nix index cb191a2..6622ec1 100644 --- a/configuration.nix +++ b/configuration.nix @@ -11,12 +11,6 @@ ./modules/monitoring ]; - # services.shiori = { - # enable = true; - # port = 3144; - # }; - # networking.firewall.allowedTCPPorts = [ 3144 ]; - environment.systemPackages = with pkgs; [ bottom mtm diff --git a/modules/dashboard/default.nix b/modules/dashboard/default.nix index 9bde252..f3c55ff 100644 --- a/modules/dashboard/default.nix +++ b/modules/dashboard/default.nix @@ -1,10 +1,18 @@ -{ settings, ... }: +{ settings, lib, ... }: +with lib; let links = import ./links.nix { inherit settings; }; + isKeysUnique = + let linkKeys = map (l: l.key) (filter (hasAttr "key") links); + in length linkKeys == length (lib.unique linkKeys); in { imports = [ ../../services/bacchus-dashboard/bacchus-dashboard.service.nix ]; + assertions = [ + { assertion = isKeysUnique; message = "The dashboard link 'key' property must be unique"; } + ]; + services.bacchus-dashboard = { enable = true; openFirewall = true; diff --git a/modules/dashboard/links.nix b/modules/dashboard/links.nix index 9a89c2b..1ccded8 100644 --- a/modules/dashboard/links.nix +++ b/modules/dashboard/links.nix @@ -66,4 +66,11 @@ in [ altUrl = "http://${host}:${toString ports.send}"; color = "#AA5CC3"; } + { + title = "Immich"; + key = "i"; + url = "http://photos.local"; + altUrl = "http://${host}:${toString ports.immich}"; + color = "#fa2921"; + } ] diff --git a/modules/media/default.nix b/modules/media/default.nix index a472992..755f18e 100644 --- a/modules/media/default.nix +++ b/modules/media/default.nix @@ -3,11 +3,11 @@ imports = [ ./torrent.nix ]; systemd.tmpfiles.rules = [ - "d ${settings.media.baseDir} 0770 - ${settings.media.group} - -" + "d ${settings.media.baseDir} 0755 - ${settings.media.group} - -" "d ${settings.media.downloadsDir} 0770 transmission ${settings.media.group} - -" "d ${settings.media.tvDir} 0770 sonarr ${settings.media.group} - -" "d ${settings.media.moviesDir} 0770 radarr ${settings.media.group} - -" - "d ${settings.media.musicDir} 0770 radarr ${settings.media.group} - -" + "d ${settings.media.musicDir} 0770 lidarr ${settings.media.group} - -" ]; users.groups.${settings.media.group} = { }; users.users.bacchus.extraGroups = [ settings.media.group ]; diff --git a/modules/network/default.nix b/modules/network/default.nix index 8f706c0..93f41a8 100644 --- a/modules/network/default.nix +++ b/modules/network/default.nix @@ -30,6 +30,7 @@ in "ntfy.local" = { inherit host; port = ports.ntfy; }; "grafana.local" = { inherit host; port = ports.grafana; extraNginxOptions.recommendedProxySettings = true; }; "send.local" = { inherit host; port = ports.send; }; + "photos.local" = { inherit host; port = ports.immich; }; }; }; diff --git a/modules/storage/default.nix b/modules/storage/default.nix index bbb9267..d4e8da9 100644 --- a/modules/storage/default.nix +++ b/modules/storage/default.nix @@ -1,8 +1,9 @@ { ... }: { imports = [ - ./syncthing.nix ./git.nix + ./immich.nix ./send.nix + ./syncthing.nix ]; } diff --git a/modules/storage/immich.nix b/modules/storage/immich.nix new file mode 100644 index 0000000..2f3e4f1 --- /dev/null +++ b/modules/storage/immich.nix @@ -0,0 +1,47 @@ +{ settings, ... }: +let + ports = settings.network.ports; +in +{ + systemd.tmpfiles.rules = [ + "d ${settings.immich.baseDir} 0770 ${settings.immich.user} ${settings.immich.group} - -" + ]; + + services.immich = { + enable = true; + host = "0.0.0.0"; + port = ports.immich; + group = settings.immich.group; + user = settings.immich.user; + openFirewall = true; + mediaLocation = settings.immich.baseDir; + machine-learning.enable = false; + settings = { + library.watch.enabled = true; + library.scan = { + enabled = true; + cron = "0 */5 * * *"; + }; + trash = { + enabled = true; + days = 15; + }; + backup.database = { + enabled = false; + cronExpression = "0 02 * * *"; + }; + server.externalDomain = "http://photos.local"; + passwordLogin.enabled = true; + newVersionCheck.enabled = false; + map.enabled = false; + machineLearning.enabled = false; + }; + }; + + users.users.bacchus.extraGroups = [ settings.immich.group ]; + users.users.${settings.immich.user}.extraGroups = [ + settings.immich.group + settings.syncthing.group + settings.media.group + ]; +} diff --git a/settings.nix b/settings.nix index 968bfff..ed2f212 100644 --- a/settings.nix +++ b/settings.nix @@ -19,6 +19,7 @@ in lib.recursiveUpdate privateSettings rec { prometheus = 9001; prometheusNodeExporter = 9002; send = 1443; + immich = 3144; }; exposeTransmissionRPC = false; }; @@ -28,6 +29,12 @@ in lib.recursiveUpdate privateSettings rec { group = "git"; }; + immich = { + baseDir = "/media/_immich"; + user = "immich"; + group = "immich"; + }; + syncthing = { baseDir = "/media/syncthing"; photosDir = "${syncthing.baseDir}/photos"; |
