Skip to content

Commit 95691a1

Browse files
committed
neoprism: add vibe-kanban service
- systemd service running as dedicated kanban user on SSD (zroot) - nginx reverse proxy at kanban.lassul.us with basic auth via clan vars - DNS record for kanban.lassul.us - binary-patch claude-code version for claude 4.6 support - backup of vibe-kanban state
1 parent 9f30843 commit 95691a1

4 files changed

Lines changed: 108 additions & 1 deletion

File tree

2configs/dns/lassul.us.zone

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
@ 3600 IN SOA lassul.us. ns1.lassul.us. 2026030700 7200 3600 86400 3600
1+
@ 3600 IN SOA lassul.us. ns1.lassul.us. 2026030800 7200 3600 86400 3600
22

33
;;@ 3600 IN NS ns1
44
@ 3600 IN NS ns1
@@ -53,6 +53,7 @@ c IN CNAME neoprism
5353
hass IN CNAME neoprism
5454
vault IN CNAME neoprism
5555
cal IN CNAME neoprism
56+
kanban IN CNAME neoprism
5657

5758
;; Mail
5859
@ IN MX 3 mail

2configs/vibe-kanban.nix

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
{
2+
self,
3+
config,
4+
pkgs,
5+
...
6+
}:
7+
let
8+
vibe-kanban-base = self.inputs.llm-agents.packages.${pkgs.system}.vibe-kanban;
9+
# HACK: binary-patch pinned claude-code version for claude 4.6 support
10+
# TODO: fork upstream and bump properly, then submit PR
11+
vibe-kanban = vibe-kanban-base.overrideAttrs (old: {
12+
postInstall = (old.postInstall or "") + ''
13+
${pkgs.gnused}/bin/sed -i 's|@anthropic-ai/claude-code@2\.1\.45|@anthropic-ai/claude-code@2.1.71|g' $out/bin/vibe-kanban
14+
'';
15+
});
16+
port = 4242;
17+
in
18+
{
19+
users.users.kanban = {
20+
isNormalUser = true;
21+
home = "/var/lib/vibe-kanban";
22+
createHome = true;
23+
group = "users";
24+
useDefaultShell = true;
25+
openssh.authorizedKeys.keys = [
26+
self.keys.ssh.barnacle.public
27+
self.keys.ssh.yubi_pgp.public
28+
self.keys.ssh.yubi1.public
29+
self.keys.ssh.yubi2.public
30+
self.keys.ssh.solo2.public
31+
self.keys.ssh.xerxes.public
32+
self.keys.ssh.massulus.public
33+
];
34+
};
35+
36+
clan.core.vars.generators.vibe-kanban = {
37+
files."htpasswd" = {
38+
owner = "root";
39+
group = "nginx";
40+
mode = "0640";
41+
};
42+
files."password" = { };
43+
runtimeInputs = with pkgs; [
44+
apacheHttpd
45+
coreutils
46+
];
47+
script = ''
48+
password=$(head -c 32 /dev/urandom | base64 | tr -dc 'a-zA-Z0-9' | head -c 24)
49+
echo "$password" > "$out/password"
50+
htpasswd -nbB kanban "$password" > "$out/htpasswd"
51+
'';
52+
};
53+
54+
systemd.services.vibe-kanban = {
55+
description = "Vibe Kanban Board";
56+
wantedBy = [ "multi-user.target" ];
57+
after = [ "network-online.target" ];
58+
wants = [ "network-online.target" ];
59+
60+
path = [
61+
pkgs.nodejs
62+
pkgs.git
63+
pkgs.bash
64+
pkgs.coreutils
65+
pkgs.nix
66+
];
67+
68+
environment = {
69+
HOST = "127.0.0.1";
70+
PORT = toString port;
71+
};
72+
73+
serviceConfig = {
74+
ExecStart = "${vibe-kanban}/bin/vibe-kanban";
75+
Restart = "on-failure";
76+
RestartSec = 10;
77+
User = "kanban";
78+
Group = "users";
79+
WorkingDirectory = "/var/lib/vibe-kanban";
80+
};
81+
};
82+
83+
services.nginx.virtualHosts."kanban.lassul.us" = {
84+
enableACME = true;
85+
forceSSL = true;
86+
locations."/" = {
87+
proxyPass = "http://127.0.0.1:${toString port}";
88+
proxyWebsockets = true;
89+
extraConfig = ''
90+
auth_basic "Vibe Kanban";
91+
auth_basic_user_file ${config.clan.core.vars.generators.vibe-kanban.files."htpasswd".path};
92+
proxy_set_header Host $host;
93+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
94+
proxy_set_header X-Forwarded-Proto $scheme;
95+
proxy_read_timeout 300s;
96+
proxy_send_timeout 300s;
97+
'';
98+
};
99+
};
100+
}

machines/neoprism/backup.nix

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"/var/lib/matrix-synapse/media_store/local_content"
3232
"/var/lib/radicale"
3333
"/home/bot"
34+
"/var/lib/vibe-kanban"
3435
"/var/vmail"
3536
"/var/dkim"
3637
"/var/sieve"
@@ -40,6 +41,8 @@
4041
"/home/bot/.cache"
4142
"/home/bot/.nix-defexpr"
4243
"/home/bot/.nix-profile"
44+
"/var/lib/vibe-kanban/.cache"
45+
"/var/lib/vibe-kanban/.npm"
4346
];
4447
repo = "u550643@u550643.your-storagebox.de:/./neoprism";
4548
encryption.mode = "none";

machines/neoprism/config.nix

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@
6868
# opencrow matrix bot
6969
../../2configs/opencrow.nix
7070

71+
# vibe kanban
72+
../../2configs/vibe-kanban.nix
73+
7174
# backups
7275
./backup.nix
7376
];

0 commit comments

Comments
 (0)