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:2.0.0-rc.4";
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 TRUST_PROXY = "true";
23 DEFAULT_LANGUAGE = "en-US";
24 };
25 environmentFiles = [ config.age.secrets.planka-env.path ];
26 volumes = [
27 "${dataDir}/user-avatars:/app/public/user-avatars"
28 "${dataDir}/project-background-images:/app/public/project-background-images"
29 "${dataDir}/attachments:/app/private/attachments"
30 "${dataDir}/favicons:/app/public/favicons"
31 "${dataDir}/background-images:/app/public/background-images"
32 ];
33 extraOptions = [ "--network=planka" ];
34 };
35 planka-db = {
36 image = "postgres:16-alpine";
37 volumes = [ "${dataDir}/db:/var/lib/postgresql/data" ];
38 environment = {
39 POSTGRES_USER = "planka";
40 POSTGRES_DB = "planka";
41 POSTGRES_HOST_AUTH_METHOD = "trust";
42 };
43 extraOptions = [ "--network=planka" ];
44 };
45 };
46 age.secrets.planka-env = {
47 file = ./secrets/planka-env.age;
48 owner = "thehedgehog";
49 group = "misc";
50 };
51 services.anubis.instances.planka = {
52 settings = {
53 COOKIE_DOMAIN = ".cs2a.club";
54 BIND = ":${toString d.anubis}";
55 POLICY_FNAME = "${self'.packages.anubis-files}/policies/planka.yaml";
56 TARGET = "http://localhost:${toString d.port}";
57 };
58 };
59}