1{
2 config,
3 self',
4 self,
5 ...
6}:
7let
8 dataDir = "/var/lib/planka";
9 d = self.lib.data.services.planka;
10in
11{
12 virtualisation.oci-containers.containers = {
13 planka-server = {
14 image = "ghcr.io/plankanban/planka:latest";
15 ports = [ "${toString d.port}:1337" ];
16 environment = {
17 BASE_URL = "https://${d.extUrl}";
18 DATABASE_URL = "postgresql://planka@planka-db/planka";
19 # Default Admin
20 DEFAULT_ADMIN_EMAIL = "pyrox@pyrox.dev";
21 DEFAULT_ADMIN_USERNAME = "pyrox";
22 };
23 environmentFiles = [ config.age.secrets.planka-env.path ];
24 volumes = [
25 "${dataDir}/user-avatars:/app/public/user-avatars"
26 "${dataDir}/project-background-images:/app/public/project-background-images"
27 "${dataDir}/attachments:/app/private/attachments"
28 ];
29 extraOptions = [ "--network=planka" ];
30 };
31 planka-db = {
32 image = "postgres:16-alpine";
33 volumes = [ "${dataDir}/db:/var/lib/postgresql/data" ];
34 environment = {
35 POSTGRES_USER = "planka";
36 POSTGRES_DB = "planka";
37 POSTGRES_HOST_AUTH_METHOD = "trust";
38 };
39 extraOptions = [ "--network=planka" ];
40 };
41 };
42 age.secrets.planka-env = {
43 file = ./secrets/planka-env.age;
44 owner = "thehedgehog";
45 group = "misc";
46 };
47 services.anubis.instances.planka = {
48 settings = {
49 COOKIE_DOMAIN = ".cs2a.club";
50 BIND = ":${toString d.anubis}";
51 POLICY_FNAME = "${self'.packages.anubis-files}/policies/planka.yaml";
52 TARGET = "http://localhost:${toString d.port}";
53 };
54 };
55}