Compare commits
2 Commits
937655b8c1
...
6763181b94
| Author | SHA1 | Date | |
|---|---|---|---|
| 6763181b94 | |||
| 4aee7480c7 |
@@ -19,8 +19,16 @@ For each supported system, the flake exports:
|
||||
|
||||
Current `default` points to the `t3code-desktop`.
|
||||
|
||||
There are also `desktop` and `server` shorthands available for `apps` and `packages`.
|
||||
|
||||
## Usage
|
||||
|
||||
Inspect the flake surface:
|
||||
|
||||
```bash
|
||||
nix flake show --all-systems
|
||||
```
|
||||
|
||||
Build the desktop package:
|
||||
|
||||
```bash
|
||||
@@ -53,24 +61,26 @@ Both packages can be overridden to add AI agent CLIs to the runtime `PATH`:
|
||||
- `withClaudeCode` adds `github:numtide/llm-agents.nix#claude-code`
|
||||
- `withOpencode` adds `github:numtide/llm-agents.nix#opencode`
|
||||
|
||||
Agent CLIs can be overridden as well using `codexPackage`, `claudeCodePackage` and `opencodePackage` respectively.
|
||||
|
||||
These overrides wrap the finished package in a small `postBuild` layer, so changing the agent flags does not rebuild the full T3 Code package.
|
||||
|
||||
In a Nix expression, use the same package override directly:
|
||||
In a Nix expression, use the same package override directly (using `perSystem` from [`github:numtide/blueprint`](https://github.com/numtide/blueprint)):
|
||||
|
||||
```nix
|
||||
self.packages.${system}.t3code-desktop.override {
|
||||
withCodex = true;
|
||||
withClaudeCode = true;
|
||||
withOpencode = true;
|
||||
{perSystem, pkgs, ...}: {
|
||||
home.packages = [
|
||||
(perSystem.t3code.desktop.override {
|
||||
withCodex = true;
|
||||
claudeCodePackage = pkgs.claude-code-bin;
|
||||
withClaudeCode = true;
|
||||
opencodePackage = perSystem.foobar.my-awesome-opencode-fork;
|
||||
withOpencode = true;
|
||||
})
|
||||
];
|
||||
}
|
||||
```
|
||||
|
||||
Inspect the flake surface:
|
||||
|
||||
```bash
|
||||
nix flake show --all-systems
|
||||
```
|
||||
|
||||
## Layout
|
||||
|
||||
```text
|
||||
|
||||
@@ -32,17 +32,15 @@
|
||||
packages = forAllSystems (
|
||||
system: let
|
||||
pkgs = import nixpkgs {inherit system;};
|
||||
src = t3code;
|
||||
codexPackage = llm-agents.packages.${system}.codex;
|
||||
claudeCodePackage = llm-agents.packages.${system}."claude-code";
|
||||
opencodePackage = llm-agents.packages.${system}.opencode;
|
||||
t3code-desktop = pkgs.callPackage ./packages/t3code-desktop {
|
||||
src = t3code;
|
||||
codex = llm-agents.packages.${system}.codex;
|
||||
claudeCode = llm-agents.packages.${system}."claude-code";
|
||||
opencode = llm-agents.packages.${system}.opencode;
|
||||
inherit src codexPackage claudeCodePackage opencodePackage;
|
||||
};
|
||||
t3code-server = pkgs.callPackage ./packages/t3code-server {
|
||||
src = t3code;
|
||||
codex = llm-agents.packages.${system}.codex;
|
||||
claudeCode = llm-agents.packages.${system}."claude-code";
|
||||
opencode = llm-agents.packages.${system}.opencode;
|
||||
inherit src codexPackage claudeCodePackage opencodePackage;
|
||||
};
|
||||
in {
|
||||
inherit t3code-desktop t3code-server;
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
stdenv,
|
||||
symlinkJoin,
|
||||
bun,
|
||||
codex ? null,
|
||||
claudeCode ? null,
|
||||
codexPackage ? null,
|
||||
claudeCodePackage ? null,
|
||||
electron_40,
|
||||
gcc,
|
||||
git,
|
||||
@@ -14,7 +14,7 @@
|
||||
makeWrapper,
|
||||
node-gyp,
|
||||
nodejs,
|
||||
opencode ? null,
|
||||
opencodePackage ? null,
|
||||
pkg-config,
|
||||
python3,
|
||||
writableTmpDirAsHomeHook,
|
||||
@@ -198,14 +198,14 @@
|
||||
});
|
||||
withAgentPath = withCodex || withClaudeCode || withOpencode;
|
||||
agentPath = lib.makeBinPath (
|
||||
lib.optionals withCodex [codex]
|
||||
++ lib.optionals withClaudeCode [claudeCode]
|
||||
++ lib.optionals withOpencode [opencode]
|
||||
lib.optionals withCodex [codexPackage]
|
||||
++ lib.optionals withClaudeCode [claudeCodePackage]
|
||||
++ lib.optionals withOpencode [opencodePackage]
|
||||
);
|
||||
in
|
||||
assert lib.assertMsg (!withCodex || codex != null) "withCodex requires a codex package";
|
||||
assert lib.assertMsg (!withClaudeCode || claudeCode != null) "withClaudeCode requires a claudeCode package";
|
||||
assert lib.assertMsg (!withOpencode || opencode != null) "withOpencode requires an opencode package";
|
||||
assert lib.assertMsg (!withCodex || codexPackage != null) "withCodex requires a codex package";
|
||||
assert lib.assertMsg (!withClaudeCode || claudeCodePackage != null) "withClaudeCode requires a claudeCode package";
|
||||
assert lib.assertMsg (!withOpencode || opencodePackage != null) "withOpencode requires an opencode package";
|
||||
if withAgentPath
|
||||
then
|
||||
symlinkJoin {
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
stdenv,
|
||||
symlinkJoin,
|
||||
bun,
|
||||
codex ? null,
|
||||
claudeCode ? null,
|
||||
codexPackage ? null,
|
||||
claudeCodePackage ? null,
|
||||
makeBinaryWrapper,
|
||||
node-gyp,
|
||||
nodejs,
|
||||
opencode ? null,
|
||||
opencodePackage ? null,
|
||||
python3,
|
||||
writableTmpDirAsHomeHook,
|
||||
withClaudeCode ? false,
|
||||
@@ -129,14 +129,14 @@
|
||||
});
|
||||
withAgentPath = withCodex || withClaudeCode || withOpencode;
|
||||
agentPath = lib.makeBinPath (
|
||||
lib.optionals withCodex [codex]
|
||||
++ lib.optionals withClaudeCode [claudeCode]
|
||||
++ lib.optionals withOpencode [opencode]
|
||||
lib.optionals withCodex [codexPackage]
|
||||
++ lib.optionals withClaudeCode [claudeCodePackage]
|
||||
++ lib.optionals withOpencode [opencodePackage]
|
||||
);
|
||||
in
|
||||
assert lib.assertMsg (!withCodex || codex != null) "withCodex requires a codex package";
|
||||
assert lib.assertMsg (!withClaudeCode || claudeCode != null) "withClaudeCode requires a claudeCode package";
|
||||
assert lib.assertMsg (!withOpencode || opencode != null) "withOpencode requires an opencode package";
|
||||
assert lib.assertMsg (!withCodex || codexPackage != null) "withCodex requires a codex package";
|
||||
assert lib.assertMsg (!withClaudeCode || claudeCodePackage != null) "withClaudeCode requires a claudeCode package";
|
||||
assert lib.assertMsg (!withOpencode || opencodePackage != null) "withOpencode requires an opencode package";
|
||||
if withAgentPath
|
||||
then
|
||||
symlinkJoin {
|
||||
|
||||
Reference in New Issue
Block a user