This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

kanvibe: remove package

Its fetchPnpmDeps used fetcherVersion=2, removed in nixpkgs 26.11, breaking
`nix flake check`. Drop the package and its unused (un-imported) service module.

Assisted-by: Claude Code (claude-opus-4-8[1m])

-285
-164
2configs/kanvibe.nix
··· 1 - { 2 - self, 3 - config, 4 - pkgs, 5 - ... 6 - }: 7 - let 8 - kanvibe = self.packages.${pkgs.system}.kanvibe; 9 - port = 4242; 10 - in 11 - { 12 - users.users.kanban = { 13 - isNormalUser = true; 14 - home = "/var/lib/kanvibe"; 15 - createHome = true; 16 - group = "users"; 17 - openssh.authorizedKeys.keys = [ 18 - self.keys.ssh.barnacle.public 19 - self.keys.ssh.yubi_pgp.public 20 - self.keys.ssh.yubi1.public 21 - self.keys.ssh.yubi2.public 22 - self.keys.ssh.solo2.public 23 - self.keys.ssh.xerxes.public 24 - self.keys.ssh.massulus.public 25 - ]; 26 - }; 27 - 28 - clan.core.vars.generators.vibe-kanban = { 29 - files."htpasswd" = { 30 - owner = "root"; 31 - group = "nginx"; 32 - mode = "0640"; 33 - }; 34 - files."password" = { 35 - owner = "kanban"; 36 - group = "kanban"; 37 - mode = "0400"; 38 - }; 39 - runtimeInputs = with pkgs; [ 40 - apacheHttpd 41 - coreutils 42 - ]; 43 - script = '' 44 - password=$(head -c 32 /dev/urandom | base64 | tr -dc 'a-zA-Z0-9' | head -c 24) 45 - echo "$password" > "$out/password" 46 - htpasswd -nbB kanban "$password" > "$out/htpasswd" 47 - ''; 48 - }; 49 - 50 - services.postgresql = { 51 - enable = true; 52 - ensureDatabases = [ "kanban" ]; 53 - ensureUsers = [ 54 - { 55 - name = "kanban"; 56 - ensureDBOwnership = true; 57 - } 58 - ]; 59 - }; 60 - 61 - systemd.services.kanvibe = { 62 - description = "KanVibe AI Agent Kanban Board"; 63 - wantedBy = [ "multi-user.target" ]; 64 - after = [ 65 - "network-online.target" 66 - "postgresql.service" 67 - ]; 68 - wants = [ "network-online.target" ]; 69 - requires = [ "postgresql.service" ]; 70 - 71 - path = with pkgs; [ 72 - tmux 73 - git 74 - openssh 75 - nodejs 76 - bash 77 - coreutils 78 - nix 79 - ]; 80 - 81 - environment = { 82 - PORT = toString port; 83 - NODE_ENV = "production"; 84 - KANVIBE_USER = "kanban"; 85 - }; 86 - 87 - serviceConfig = { 88 - Type = "simple"; 89 - LoadCredential = "password:${config.clan.core.vars.generators.vibe-kanban.files."password".path}"; 90 - ExecStart = 91 - let 92 - startScript = pkgs.writeShellScript "kanvibe-start" '' 93 - export KANVIBE_PASSWORD="$(cat "$CREDENTIALS_DIRECTORY/password")" 94 - export DATABASE_URL="postgresql:///kanban?host=/run/postgresql" 95 - 96 - # Run TypeORM migrations 97 - cd ${kanvibe}/lib/kanvibe 98 - ${pkgs.nodejs}/bin/node -e " 99 - require('tsx/cjs'); 100 - const ds = require('./src/lib/typeorm-cli.config.ts').default; 101 - ds.initialize().then(d => d.runMigrations()).then(() => { console.log('Migrations done'); process.exit(0); }).catch(e => { console.error(e); process.exit(1); }); 102 - " 103 - 104 - exec ${kanvibe}/bin/kanvibe 105 - ''; 106 - in 107 - toString startScript; 108 - Restart = "on-failure"; 109 - RestartSec = 10; 110 - User = "kanban"; 111 - Group = "users"; 112 - WorkingDirectory = "/var/lib/kanvibe"; 113 - 114 - # Hardening 115 - NoNewPrivileges = true; 116 - ProtectSystem = "strict"; 117 - ProtectHome = "read-only"; 118 - ReadWritePaths = [ "/var/lib/kanvibe" ]; 119 - PrivateTmp = true; 120 - }; 121 - }; 122 - 123 - services.nginx.virtualHosts."kanban.lassul.us" = { 124 - enableACME = true; 125 - forceSSL = true; 126 - locations."/" = { 127 - proxyPass = "http://127.0.0.1:${toString port}"; 128 - proxyWebsockets = true; 129 - extraConfig = '' 130 - auth_basic "Kanban"; 131 - auth_basic_user_file ${config.clan.core.vars.generators.vibe-kanban.files."htpasswd".path}; 132 - proxy_set_header Host $host; 133 - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 134 - proxy_set_header X-Forwarded-Proto $scheme; 135 - proxy_read_timeout 300s; 136 - proxy_send_timeout 300s; 137 - ''; 138 - }; 139 - locations."/api/terminal/" = { 140 - proxyPass = "http://127.0.0.1:${toString (port - 1)}"; 141 - proxyWebsockets = true; 142 - extraConfig = '' 143 - auth_basic "Kanban"; 144 - auth_basic_user_file ${config.clan.core.vars.generators.vibe-kanban.files."htpasswd".path}; 145 - proxy_set_header Host $host; 146 - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 147 - proxy_set_header X-Forwarded-Proto $scheme; 148 - proxy_read_timeout 3600s; 149 - proxy_send_timeout 3600s; 150 - ''; 151 - }; 152 - locations."/api/board/" = { 153 - proxyPass = "http://127.0.0.1:${toString (port - 1)}"; 154 - proxyWebsockets = true; 155 - extraConfig = '' 156 - auth_basic "Kanban"; 157 - auth_basic_user_file ${config.clan.core.vars.generators.vibe-kanban.files."htpasswd".path}; 158 - proxy_set_header Host $host; 159 - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 160 - proxy_set_header X-Forwarded-Proto $scheme; 161 - ''; 162 - }; 163 - }; 164 - }
-121
5pkgs/kanvibe/package.nix
··· 1 - { 2 - lib, 3 - stdenv, 4 - nodejs, 5 - pnpm_10, 6 - fetchPnpmDeps, 7 - pnpmConfigHook, 8 - makeWrapper, 9 - tmux, 10 - git, 11 - openssh, 12 - fetchFromGitHub, 13 - }: 14 - 15 - let 16 - src = fetchFromGitHub { 17 - owner = "Lassulus"; 18 - repo = "kanvibe"; 19 - rev = "6887b163b7ab36c2f4f41bd02bf6c648ebe85840"; 20 - hash = "sha256-FTszbYyYlTqDJxHVRPV9VMu9i+gRrdTq1du1nbzHjdA="; 21 - }; 22 - in 23 - stdenv.mkDerivation (finalAttrs: { 24 - pname = "kanvibe"; 25 - version = "0.1.0"; 26 - 27 - inherit src; 28 - 29 - nativeBuildInputs = [ 30 - nodejs 31 - pnpm_10 32 - pnpmConfigHook 33 - makeWrapper 34 - ]; 35 - 36 - pnpmDeps = fetchPnpmDeps { 37 - pname = "kanvibe"; 38 - inherit (finalAttrs) version src; 39 - pnpm = pnpm_10; 40 - hash = "sha256-POorUzaa5JFmQygDNlGY7G4XoZOf7iW6UIyqgmF05b0="; 41 - fetcherVersion = 2; 42 - }; 43 - 44 - buildPhase = '' 45 - runHook preBuild 46 - 47 - export NEXT_TELEMETRY_DISABLED=1 48 - 49 - # Set default locale to English 50 - substituteInPlace src/i18n/routing.ts \ 51 - --replace-fail 'defaultLocale: "ko"' 'defaultLocale: "en"' 52 - 53 - # Patch out Google Fonts (no network in sandbox) 54 - substituteInPlace src/app/\[locale\]/layout.tsx \ 55 - --replace-fail 'import { Inter } from "next/font/google";' "" \ 56 - --replace-fail 'const inter = Inter({ 57 - variable: "--font-inter", 58 - subsets: ["latin"], 59 - });' 'const inter = { variable: "" };' 60 - 61 - pnpm build 62 - 63 - # Replace @/ path aliases with absolute paths for runtime tsx resolution 64 - # (Next.js require-hook interferes with tsx's tsconfig paths resolution) 65 - find . -name '*.ts' -not -path './node_modules/*' -not -path './.next/*' \ 66 - -exec sed -i "s|from \"@/|from \"$out/lib/kanvibe/src/|g" {} + 67 - find . -name '*.ts' -not -path './node_modules/*' -not -path './.next/*' \ 68 - -exec sed -i "s|from '@/|from '$out/lib/kanvibe/src/|g" {} + 69 - 70 - runHook postBuild 71 - ''; 72 - 73 - installPhase = '' 74 - runHook preInstall 75 - 76 - mkdir -p $out/lib/kanvibe 77 - 78 - # Copy the built Next.js app 79 - cp -r .next $out/lib/kanvibe/.next 80 - 81 - # Copy runtime files 82 - cp boot.js $out/lib/kanvibe/ 83 - cp server.ts $out/lib/kanvibe/ 84 - cp next.config.ts $out/lib/kanvibe/ 85 - cp package.json $out/lib/kanvibe/ 86 - cp tsconfig.json $out/lib/kanvibe/ 87 - cp -r src $out/lib/kanvibe/src 88 - cp -r messages $out/lib/kanvibe/messages 89 - cp -r public $out/lib/kanvibe/public 2>/dev/null || true 90 - 91 - # node_modules needed at runtime (tsx, typeorm, node-pty, etc.) 92 - cp -r node_modules $out/lib/kanvibe/node_modules 93 - 94 - mkdir -p $out/bin 95 - # Patch boot.js to chdir to package directory so tsx finds tsconfig.json 96 - substituteInPlace $out/lib/kanvibe/boot.js \ 97 - --replace-fail 'require("tsx/cjs");' \ 98 - 'process.chdir(__dirname); require("tsx/cjs");' 99 - 100 - makeWrapper ${nodejs}/bin/node $out/bin/kanvibe \ 101 - --add-flags "$out/lib/kanvibe/boot.js" \ 102 - --set NODE_ENV production \ 103 - --prefix PATH : ${ 104 - lib.makeBinPath [ 105 - tmux 106 - git 107 - openssh 108 - ] 109 - } 110 - 111 - runHook postInstall 112 - ''; 113 - 114 - meta = { 115 - description = "AI Agent Task Management Kanban Board"; 116 - homepage = "https://github.com/Lassulus/kanvibe"; 117 - license = lib.licenses.agpl3Only; 118 - mainProgram = "kanvibe"; 119 - platforms = lib.platforms.unix; 120 - }; 121 - })