{ config, lib, namespace, ... }: with lib; let cfg = config.${namespace}.services.authentik; in { imports = [ ./options.nix ]; config = mkIf cfg.enable { services.authentik = { enable = true; environmentFile = cfg.environmentFile; settings = { port = cfg.port; }; }; # Open firewall for authentik if enabled networking.firewall = mkIf cfg.openFirewall { allowedTCPPorts = [ cfg.port 4822 ]; allowedUDPPorts = [ cfg.port 4822 ]; }; # Ensure PostgreSQL is configured for authentik services.postgresql = { enable = mkDefault true; ensureDatabases = [ "authentik" ]; ensureUsers = [ { name = "authentik"; ensureDBOwnership = true; } ]; }; # Ensure Redis is configured for authentik services.redis.servers.authentik = { enable = mkDefault true; port = mkDefault 6379; }; virtualisation.oci-containers.containers.authentik_rac = { autoStart = true; image = "ghcr.io/goauthentik/rac"; ports = [ "4822:4822" ]; volumes = [ "/media/nas/main/nix-app-data/authentik-rac:/media" ]; # environmentFiles = [ # "/media/nas/main/nix-app-data/lubelogger/lubelogger.env" # ]; environment = { AUTHENTIK_HOST = "https://authentik.mjallen.dev"; AUTHENTIK_TOKEN = "0XGkB2pXoOTqcCMAjucAtfamvlsIZCPmy1Zri54Ozjj3zzMCvcLwkQPrukfx"; AUTHENTIK_INSECURE = "false"; # Set to true for self-signed certs PUID = toString config.users.users.nix-apps.uid; PGID = toString config.users.groups.jallen-nas.gid; TZ = "America/Chicago"; }; }; }; }