{ config, pkgs, ... }: let settings = import ../settings.nix; paperlessPort = 28981; paperlessUserId = config.users.users.nix-apps.uid; paperlessGroupId = config.users.groups.jallen-nas.gid; paperlessEnv = config.sops.templates."paperless.env".path; paperlessPkg = pkgs.paperless-ngx; in { containers.paperless = { autoStart = true; privateNetwork = true; hostAddress = settings.hostAddress; localAddress = "10.0.1.20"; hostAddress6 = "fc00::1"; localAddress6 = "fc00::20"; config = { lib, ... }: { # Enable paperless service services.paperless = { enable = false; package = paperlessPkg; port = paperlessPort; user = "paperless"; address = "0.0.0.0"; passwordFile = "/var/lib/paperless/paperless-password"; # environmentFile = paperlessEnv; # unstable is too unstable, but this doesnt exist in stable.... disabling altogether.... }; # Create required users and groups users.groups = { documents = { gid = lib.mkForce paperlessGroupId; }; }; users.users.paperless = { isSystemUser = true; uid = lib.mkForce paperlessUserId; group = lib.mkForce "documents"; }; # Create and set permissions for required directories system.activationScripts.paperless-dirs = '' mkdir -p /var/lib/paperless chown -R paperless:documents /var/lib/paperless chmod -R 775 /var/lib/paperless ''; networking = { firewall = { enable = true; allowedTCPPorts = [ paperlessPort ]; }; # Use systemd-resolved inside the container # Workaround for bug https://github.com/NixOS/nixpkgs/issues/162686 useHostResolvConf = lib.mkForce false; }; services.resolved.enable = true; system.stateVersion = "23.11"; }; # Bind mount directories from host bindMounts = { "/var/lib/paperless" = { hostPath = "/media/nas/ssd/nix-app-data/paperless"; isReadOnly = false; }; secrets = { hostPath = "/run/secrets/jallen-nas/paperless"; isReadOnly = true; mountPoint = "/run/secrets/jallen-nas/paperless"; }; secret-env = { hostPath = "/run/secrets/rendered/paperless.env"; isReadOnly = true; mountPoint = "/run/secrets/rendered/paperless.env"; }; }; }; networking.nat = { forwardPorts = [ { destination = "10.0.1.20:28981"; sourcePort = paperlessPort; } ]; }; }