This repository has no description
0

Configure Feed

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

neoprism: add covibe co-vibing dashboard (covibe.lassul.us)

+132 -5
+59 -4
flake.lock
··· 79 79 "url": "https://git.clan.lol/clan/clan-core" 80 80 } 81 81 }, 82 + "covibe": { 83 + "inputs": { 84 + "flake-utils": "flake-utils", 85 + "nixpkgs": [ 86 + "nixpkgs" 87 + ] 88 + }, 89 + "locked": { 90 + "lastModified": 1784636421, 91 + "narHash": "sha256-KKL5ioNRaPOLpFAcd7iYQowFZ7/5Xzx+E54rXrm1g8Q=", 92 + "owner": "lassulus", 93 + "repo": "covibe", 94 + "rev": "06ffd90f80baba4bdbec4072cf25324535df4a5d", 95 + "type": "github" 96 + }, 97 + "original": { 98 + "owner": "lassulus", 99 + "repo": "covibe", 100 + "type": "github" 101 + } 102 + }, 82 103 "data-mesher": { 83 104 "inputs": { 84 105 "flake-parts": [ ··· 128 149 }, 129 150 "extra-container": { 130 151 "inputs": { 131 - "flake-utils": "flake-utils", 152 + "flake-utils": "flake-utils_2", 132 153 "nixpkgs": [ 133 154 "nixpkgs" 134 155 ] ··· 308 329 } 309 330 }, 310 331 "flake-utils_2": { 332 + "inputs": { 333 + "systems": "systems_3" 334 + }, 335 + "locked": { 336 + "lastModified": 1731533236, 337 + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", 338 + "owner": "numtide", 339 + "repo": "flake-utils", 340 + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", 341 + "type": "github" 342 + }, 343 + "original": { 344 + "owner": "numtide", 345 + "repo": "flake-utils", 346 + "type": "github" 347 + } 348 + }, 349 + "flake-utils_3": { 311 350 "locked": { 312 351 "lastModified": 1676283394, 313 352 "narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=", ··· 401 440 "nixpkgs": [ 402 441 "nixpkgs" 403 442 ], 404 - "systems": "systems_3", 443 + "systems": "systems_4", 405 444 "treefmt-nix": "treefmt-nix_3" 406 445 }, 407 446 "locked": { ··· 540 579 }, 541 580 "nix-writers": { 542 581 "inputs": { 543 - "flake-utils": "flake-utils_2", 582 + "flake-utils": "flake-utils_3", 544 583 "nixpkgs": [ 545 584 "stockholm", 546 585 "nixpkgs" ··· 651 690 "nixpkgs": [ 652 691 "nixpkgs" 653 692 ], 654 - "systems": "systems_4" 693 + "systems": "systems_5" 655 694 }, 656 695 "locked": { 657 696 "lastModified": 1783980039, ··· 783 822 "root": { 784 823 "inputs": { 785 824 "clan-core": "clan-core", 825 + "covibe": "covibe", 786 826 "disko": "disko", 787 827 "extra-container": "extra-container", 788 828 "hermes-agent": "hermes-agent", ··· 917 957 } 918 958 }, 919 959 "systems_4": { 960 + "locked": { 961 + "lastModified": 1681028828, 962 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 963 + "owner": "nix-systems", 964 + "repo": "default", 965 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 966 + "type": "github" 967 + }, 968 + "original": { 969 + "owner": "nix-systems", 970 + "repo": "default", 971 + "type": "github" 972 + } 973 + }, 974 + "systems_5": { 920 975 "locked": { 921 976 "lastModified": 1774449309, 922 977 "narHash": "sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w=",
+3
flake.nix
··· 82 82 nixos-mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver"; 83 83 nixos-mailserver.inputs.nixpkgs.follows = "nixpkgs"; 84 84 85 + covibe.url = "github:lassulus/covibe"; 86 + covibe.inputs.nixpkgs.follows = "nixpkgs"; 87 + 85 88 }; 86 89 87 90 outputs =
+65
2configs/covibe.nix
··· 1 + let 2 + domain = "covibe.lassul.us"; 3 + port = 8770; 4 + in 5 + { 6 + config, 7 + pkgs, 8 + self, 9 + ... 10 + }: 11 + { 12 + # covibe: co-vibing dashboard. Launches omp sessions in zellij as the 13 + # pairprogramming user, shows live sessions + collab QR codes, and exposes a 14 + # REST API. Browser auth via the local pocket-id IdP (id.lassul.us); the REST 15 + # surface additionally accepts a generated API key. 16 + imports = [ self.inputs.covibe.nixosModules.default ]; 17 + 18 + # Cookie-signing secret + REST API key (generated), plus the pocket-id client 19 + # secret (prompted once), materialised into one EnvironmentFile: 20 + # COVIBE_COOKIE_SECRET, COVIBE_API_KEYS, COVIBE_OIDC_CLIENT_SECRET. 21 + clan.core.vars.generators.covibe = { 22 + files."env" = { }; 23 + files."api_key" = { }; # readable copy of the key for clients 24 + prompts.oidc_client_secret = { 25 + description = "pocket-id OIDC client secret for covibe"; 26 + type = "hidden"; 27 + persist = true; 28 + }; 29 + runtimeInputs = [ pkgs.openssl ]; 30 + script = '' 31 + ck=$(openssl rand -hex 32) 32 + ak=$(openssl rand -hex 32) 33 + cs=$(cat "$prompts"/oidc_client_secret) 34 + printf '%s' "$ak" > "$out/api_key" 35 + printf 'COVIBE_COOKIE_SECRET=%s\nCOVIBE_API_KEYS=%s\nCOVIBE_OIDC_CLIENT_SECRET=%s\n' \ 36 + "$ck" "$ak" "$cs" > "$out/env" 37 + ''; 38 + }; 39 + 40 + services.covibe = { 41 + enable = true; 42 + user = "pairprogramming"; 43 + ompPackage = self.legacyPackages.${pkgs.stdenv.hostPlatform.system}.llm.omp; 44 + relay = "wss://my.omp.sh"; 45 + dashboard = { 46 + addr = "127.0.0.1:${toString port}"; 47 + workspaceRoot = "/home/pairprogramming/covibe"; 48 + environmentFile = config.clan.core.vars.generators.covibe.files."env".path; 49 + oidc = { 50 + issuer = "https://id.lassul.us"; 51 + clientId = "a7e4b0aa-f09d-472a-965b-908cd4634f16"; 52 + redirectUrl = "https://${domain}/auth/callback"; 53 + }; 54 + }; 55 + }; 56 + 57 + services.nginx.virtualHosts.${domain} = { 58 + enableACME = true; 59 + forceSSL = true; 60 + locations."/" = { 61 + proxyPass = "http://127.0.0.1:${toString port}"; 62 + proxyWebsockets = true; 63 + }; 64 + }; 65 + }
+2 -1
2configs/dns/lassul.us.zone
··· 1 - @ 3600 IN SOA lassul.us. ns1.lassul.us. 2026060707 7200 3600 86400 3600 1 + @ 3600 IN SOA lassul.us. ns1.lassul.us. 2026072100 7200 3600 86400 3600 2 2 3 3 ;;@ 3600 IN NS ns1 4 4 @ 3600 IN NS ns1 ··· 56 56 kanban IN CNAME neoprism 57 57 n2n IN CNAME neoprism 58 58 id IN CNAME neoprism 59 + covibe IN CNAME neoprism 59 60 60 61 ;; Mail 61 62 @ IN MX 3 mail
+3
machines/neoprism/config.nix
··· 101 101 102 102 # pocket-id SSO IdP (id.lassul.us) 103 103 ../../2configs/pocket-id.nix 104 + 105 + # covibe co-vibing dashboard (covibe.lassul.us) 106 + ../../2configs/covibe.nix 104 107 ]; 105 108 106 109 # lassul.us shouldn't be the default vhost here (nginx.nix already sets one)