{ config, self', self, ... }: let dataDir = "/var/lib/planka"; d = self.lib.data.services.planka; in { virtualisation.oci-containers.containers = { planka-server = { image = "ghcr.io/plankanban/planka:latest"; ports = [ "${toString d.port}:1337" ]; environment = { BASE_URL = "https://${d.extUrl}"; DATABASE_URL = "postgresql://planka@planka-db/planka"; # Default Admin DEFAULT_ADMIN_EMAIL = "pyrox@pyrox.dev"; DEFAULT_ADMIN_USERNAME = "pyrox"; }; environmentFiles = [ config.age.secrets.planka-env.path ]; volumes = [ "${dataDir}/user-avatars:/app/public/user-avatars" "${dataDir}/project-background-images:/app/public/project-background-images" "${dataDir}/attachments:/app/private/attachments" ]; extraOptions = [ "--network=planka" ]; }; planka-db = { image = "postgres:16-alpine"; volumes = [ "${dataDir}/db:/var/lib/postgresql/data" ]; environment = { POSTGRES_USER = "planka"; POSTGRES_DB = "planka"; POSTGRES_HOST_AUTH_METHOD = "trust"; }; extraOptions = [ "--network=planka" ]; }; }; age.secrets.planka-env = { file = ./secrets/planka-env.age; owner = "thehedgehog"; group = "misc"; }; services.anubis.instances.planka = { settings = { COOKIE_DOMAIN = ".cs2a.club"; BIND = ":${toString d.anubis}"; POLICY_FNAME = "${self'.packages.anubis-files}/policies/planka.yaml"; TARGET = "http://localhost:${toString d.port}"; }; }; }