this repo has no description
2
fork

Configure Feed

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

Merge branch 'main' of git.sealight.xyz:aynish/helm

+200 -28
+88 -12
flake.lock
··· 99 99 "llm-agents", 100 100 "nixpkgs" 101 101 ], 102 - "systems": "systems_5" 102 + "systems": [ 103 + "llm-agents", 104 + "systems" 105 + ] 103 106 }, 104 107 "locked": { 105 108 "lastModified": 1771437256, ··· 129 132 "owner": "Homebrew", 130 133 "ref": "5.0.3", 131 134 "repo": "brew", 135 + "type": "github" 136 + } 137 + }, 138 + "bun2nix": { 139 + "inputs": { 140 + "flake-parts": [ 141 + "llm-agents", 142 + "flake-parts" 143 + ], 144 + "import-tree": "import-tree", 145 + "nixpkgs": [ 146 + "llm-agents", 147 + "nixpkgs" 148 + ], 149 + "systems": [ 150 + "llm-agents", 151 + "systems" 152 + ], 153 + "treefmt-nix": [ 154 + "llm-agents", 155 + "treefmt-nix" 156 + ] 157 + }, 158 + "locked": { 159 + "lastModified": 1770895533, 160 + "narHash": "sha256-v3QaK9ugy9bN9RXDnjw0i2OifKmz2NnKM82agtqm/UY=", 161 + "owner": "nix-community", 162 + "repo": "bun2nix", 163 + "rev": "c843f477b15f51151f8c6bcc886954699440a6e1", 164 + "type": "github" 165 + }, 166 + "original": { 167 + "owner": "nix-community", 168 + "repo": "bun2nix", 132 169 "type": "github" 133 170 } 134 171 }, ··· 346 383 "narHash": "sha256-NKw96t+BgHIYzHUjkTK95FqYRVKB8DHpVhefWSz/kTw=", 347 384 "rev": "549f2762aebeff29a2e5ece7a7dc0f955281a1d1", 348 385 "type": "tarball", 349 - "url": "https://git.lix.systems/api/v1/repos/lix-project/flake-compat/archive/549f2762aebeff29a2e5ece7a7dc0f955281a1d1.tar.gz?rev=549f2762aebeff29a2e5ece7a7dc0f955281a1d1" 386 + "url": "https://git.lix.systems/api/v1/repos/lix-project/flake-compat/archive/549f2762aebeff29a2e5ece7a7dc0f955281a1d1.tar.gz" 350 387 }, 351 388 "original": { 352 389 "type": "tarball", ··· 374 411 "flake-parts_2": { 375 412 "inputs": { 376 413 "nixpkgs-lib": [ 414 + "llm-agents", 415 + "nixpkgs" 416 + ] 417 + }, 418 + "locked": { 419 + "lastModified": 1772408722, 420 + "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", 421 + "owner": "hercules-ci", 422 + "repo": "flake-parts", 423 + "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", 424 + "type": "github" 425 + }, 426 + "original": { 427 + "owner": "hercules-ci", 428 + "repo": "flake-parts", 429 + "type": "github" 430 + } 431 + }, 432 + "flake-parts_3": { 433 + "inputs": { 434 + "nixpkgs-lib": [ 377 435 "nur", 378 436 "nixpkgs" 379 437 ] ··· 700 758 "url": "https://github.com/IBM/plex/releases/download/@ibm/plex-mono@1.1.0/ibm-plex-mono.zip" 701 759 } 702 760 }, 761 + "import-tree": { 762 + "locked": { 763 + "lastModified": 1763762820, 764 + "narHash": "sha256-ZvYKbFib3AEwiNMLsejb/CWs/OL/srFQ8AogkebEPF0=", 765 + "owner": "vic", 766 + "repo": "import-tree", 767 + "rev": "3c23749d8013ec6daa1d7255057590e9ca726646", 768 + "type": "github" 769 + }, 770 + "original": { 771 + "owner": "vic", 772 + "repo": "import-tree", 773 + "type": "github" 774 + } 775 + }, 703 776 "indigo": { 704 777 "flake": false, 705 778 "locked": { ··· 753 826 "llm-agents": { 754 827 "inputs": { 755 828 "blueprint": "blueprint", 829 + "bun2nix": "bun2nix", 830 + "flake-parts": "flake-parts_2", 756 831 "nixpkgs": "nixpkgs_3", 832 + "systems": "systems_5", 757 833 "treefmt-nix": "treefmt-nix_2" 758 834 }, 759 835 "locked": { 760 - "lastModified": 1772596195, 761 - "narHash": "sha256-RZHuv6e3rH3t8QsyHPue1L6w8I+d023/LdVmOezLWDg=", 836 + "lastModified": 1773068014, 837 + "narHash": "sha256-5WOIh+mgU1TLBVLOCgJDc3vSlx20saK+VYVZTl6MkSo=", 762 838 "owner": "numtide", 763 839 "repo": "llm-agents.nix", 764 - "rev": "92d68fc403787815a8f213b5bc2065d7010e1efe", 840 + "rev": "51efc59e9d492d10a2d85d57ba764898df71d0b9", 765 841 "type": "github" 766 842 }, 767 843 "original": { ··· 1034 1110 }, 1035 1111 "nixpkgs_3": { 1036 1112 "locked": { 1037 - "lastModified": 1772554988, 1038 - "narHash": "sha256-8Kb+MSE6QYVX1S96aZOluOMVfvSEOs70vgX980qVUaY=", 1113 + "lastModified": 1772956932, 1114 + "narHash": "sha256-M0yS4AafhKxPPmOHGqIV0iKxgNO8bHDWdl1kOwGBwRY=", 1039 1115 "owner": "NixOS", 1040 1116 "repo": "nixpkgs", 1041 - "rev": "87f6b6e02cb3f87a1be4f939326c94c8af9d55d8", 1117 + "rev": "608d0cadfed240589a7eea422407a547ad626a14", 1042 1118 "type": "github" 1043 1119 }, 1044 1120 "original": { ··· 1098 1174 }, 1099 1175 "nur": { 1100 1176 "inputs": { 1101 - "flake-parts": "flake-parts_2", 1177 + "flake-parts": "flake-parts_3", 1102 1178 "nixpkgs": "nixpkgs_6" 1103 1179 }, 1104 1180 "locked": { ··· 1450 1526 ] 1451 1527 }, 1452 1528 "locked": { 1453 - "lastModified": 1770228511, 1454 - "narHash": "sha256-wQ6NJSuFqAEmIg2VMnLdCnUc0b7vslUohqqGGD+Fyxk=", 1529 + "lastModified": 1772660329, 1530 + "narHash": "sha256-IjU1FxYqm+VDe5qIOxoW+pISBlGvVApRjiw/Y/ttJzY=", 1455 1531 "owner": "numtide", 1456 1532 "repo": "treefmt-nix", 1457 - "rev": "337a4fe074be1042a35086f15481d763b8ddc0e7", 1533 + "rev": "3710e0e1218041bbad640352a0440114b1e10428", 1458 1534 "type": "github" 1459 1535 }, 1460 1536 "original": {
+47 -12
home/profiles/opencode/default.nix
··· 18 18 # github-mcp-server binary path from nixpkgs 19 19 githubMcpServer = "${pkgs.github-mcp-server}/bin/github-mcp-server"; 20 20 21 - # opencode-handoff plugin: fetch source and assemble into a single directory 22 - # so the relative import from the entry point resolves correctly 21 + # Upstream plugin/skill sources pinned via fetchFromGitHub 23 22 opencode-handoff-src = pkgs.fetchFromGitHub { 24 23 owner = "Chickensoupwithrice"; 25 24 repo = "opencode-handoff"; 26 - rev = "e66697d"; 27 - hash = "sha256-/drpkGLxKmoYlo3MZqYnQSedwLWHl7TQuO+NkY21xuQ="; 25 + rev = "b18d546e567c8c15c7ce8377f82f1b81cd838890"; 26 + hash = "sha256-1wDwwz7gcKLeCr0kqwQtQi7UWf12AYiPDL8YT9iFO08="; 27 + }; 28 + 29 + learning-opportunities-src = pkgs.fetchFromGitHub { 30 + owner = "DrCatHicks"; 31 + repo = "learning-opportunities"; 32 + rev = "e5f985d376461993253d285096ed0f4b4a095858"; 33 + hash = "sha256-xMpy9XxMaNCIAOr2dffrc5dyRt56jlam+XQjrNapsEw="; 28 34 }; 29 35 30 - opencode-handoff-plugin = pkgs.runCommand "opencode-handoff-plugin" { } '' 31 - mkdir -p $out 36 + learning-goal-src = pkgs.fetchFromGitHub { 37 + owner = "DrCatHicks"; 38 + repo = "learning-goal"; 39 + rev = "cc7e3a6c7f0917501f1fd422bad81ab6f5040050"; 40 + hash = "sha256-lvQdDRuC9H+8F4Fud753c6NogVdZtGqgtjKbiSVZCig="; 41 + }; 42 + 43 + # Combined plugins derivation: assembles all local and upstream plugins 44 + # into a single directory with the layout OpenCode expects. 45 + # 46 + # OpenCode globs plugins/*.{ts,js} and calls every export as a plugin 47 + # initializer, so only actual entry points belong at the top level. 48 + # Helper modules (tools.ts, files.ts, etc.) go in subdirectories to 49 + # avoid being auto-loaded. 50 + opencode-plugins = pkgs.runCommand "opencode-plugins" { } '' 51 + mkdir -p $out/handoff-src 52 + 53 + # opencode-handoff: thin entry point re-exports from a subdirectory 54 + # so OpenCode only auto-loads the plugin, not its helper modules 32 55 cat > $out/handoff.ts <<'ENTRY' 33 56 export { HandoffPlugin } from "./handoff-src/plugin" 34 57 ENTRY 35 - ln -s ${opencode-handoff-src}/src $out/handoff-src 58 + ln -s ${opencode-handoff-src}/src/* $out/handoff-src/ 59 + 60 + # learning-opportunities-auto: OpenCode port of the upstream 61 + # Claude Code PostToolUse hook (local file, not a patch of upstream) 62 + cp ${./plugins/learning-opportunities-auto.js} $out/learning-opportunities-auto.js 36 63 ''; 37 64 in 38 65 { ··· 82 109 "opencode/themes".source = ./themes; 83 110 "opencode/agents".source = ./agents; 84 111 "opencode/commands".source = ./commands; 85 - "opencode/skills".source = ./skills; 112 + 113 + # Local skills 114 + "opencode/skills/tmux".source = ./skills/tmux; 115 + "opencode/skills/session-search.disabled".source = ./skills/session-search.disabled; 86 116 87 - # opencode-handoff plugin: single derivation with entry point + source 88 - # so relative imports resolve correctly (home-manager would otherwise 89 - # place them in separate nix store paths) 90 - "opencode/plugins".source = opencode-handoff-plugin; 117 + # Upstream skills via fetchFromGitHub 118 + "opencode/skills/learning-opportunities".source = 119 + "${learning-opportunities-src}/learning-opportunities/skills/learning-opportunities"; 120 + "opencode/skills/learning-goal".source = "${learning-goal-src}/learning-goal/skills/learning-goal"; 121 + "opencode/skills/orient".source = "${learning-opportunities-src}/orient/skills/orient"; 122 + 123 + # Plugins: combined derivation with correct layout for OpenCode's 124 + # plugin loader (only entry points at top level) 125 + "opencode/plugins".source = opencode-plugins; 91 126 }; 92 127 93 128 home.file = lib.mkIf isBox {
+61
home/profiles/opencode/plugins/learning-opportunities-auto.js
··· 1 + // learning-opportunities-auto: OpenCode plugin 2 + // 3 + // Port of DrCatHicks/learning-opportunities' PostToolUse hook for OpenCode. 4 + // After a git commit, injects a context message into the session that nudges 5 + // the agent to consider offering a learning exercise via the skill. 6 + // 7 + // Zero external imports -- avoids Bun module resolution issues when deployed 8 + // via Nix home-manager (where the file is copied from the Nix store). 9 + // 10 + // License: CC-BY-4.0 11 + 12 + export const LearningOpportunitiesAuto = async ({ client }) => { 13 + let offers = 0; 14 + 15 + return { 16 + "tool.execute.after": async (input, output) => { 17 + // Only act on bash tool invocations 18 + if (input.tool !== "bash") return; 19 + 20 + // Check if the command was a git commit 21 + const command = input?.args?.command || ""; 22 + if (!/git\s+(commit|cz)/.test(command)) return; 23 + 24 + // Rate limit: max 2 offers per session 25 + if (offers >= 2) return; 26 + offers++; 27 + 28 + try { 29 + // Inject a context message into the active session. The agent sees 30 + // this as a user message with noReply, so it becomes part of the 31 + // conversation context for the next assistant turn. 32 + await client.session.prompt({ 33 + path: { id: input.sessionID }, 34 + body: { 35 + noReply: true, 36 + parts: [ 37 + { 38 + type: "text", 39 + text: [ 40 + "<system-reminder>", 41 + "[learning-opportunities-auto] The user just committed code.", 42 + "Per the learning-opportunities skill, consider whether this", 43 + "is a good moment to offer a learning exercise. If the committed", 44 + "work involved new files, schema changes, architectural decisions,", 45 + "refactors, or unfamiliar patterns, ask the user (one short sentence)", 46 + "if they'd like a 10-15 minute exercise. Do not start the exercise", 47 + "until they confirm. If they decline, note it -- no more offers", 48 + "this session.", 49 + "</system-reminder>", 50 + ].join(" "), 51 + }, 52 + ], 53 + }, 54 + }); 55 + } catch { 56 + // Session prompt API may not be available in all contexts. 57 + // Silently ignore -- the skill can always be invoked manually. 58 + } 59 + }, 60 + }; 61 + };
+4 -3
hosts/darwin/casks/default.nix
··· 1 - { ... }: 1 + { ... }: 2 2 3 3 { 4 4 homebrew.enable = true; ··· 22 22 "wireshark" 23 23 "1password" 24 24 "orbstack" 25 - # "aerospace" 25 + "scoop" 26 + "aerospace" 26 27 27 28 # Communication Tools 28 29 # Already installed manually 29 30 # "loom" 30 - # "slack" 31 + # "slack" 31 32 # "zoom" 32 33 # "firefox" 33 34 # "1password-cli"
-1
hosts/darwin/default.nix
··· 121 121 system = { 122 122 stateVersion = 4; 123 123 primaryUser = "anishlakhwara"; # required for newer nix-darwin 124 - 125 124 keyboard = { 126 125 enableKeyMapping = true; 127 126 };