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`.
|
Current `default` points to the `t3code-desktop`.
|
||||||
|
|
||||||
|
There are also `desktop` and `server` shorthands available for `apps` and `packages`.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
Inspect the flake surface:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nix flake show --all-systems
|
||||||
|
```
|
||||||
|
|
||||||
Build the desktop package:
|
Build the desktop package:
|
||||||
|
|
||||||
```bash
|
```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`
|
- `withClaudeCode` adds `github:numtide/llm-agents.nix#claude-code`
|
||||||
- `withOpencode` adds `github:numtide/llm-agents.nix#opencode`
|
- `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.
|
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
|
```nix
|
||||||
self.packages.${system}.t3code-desktop.override {
|
{perSystem, pkgs, ...}: {
|
||||||
withCodex = true;
|
home.packages = [
|
||||||
withClaudeCode = true;
|
(perSystem.t3code.desktop.override {
|
||||||
withOpencode = true;
|
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
|
## Layout
|
||||||
|
|
||||||
```text
|
```text
|
||||||
|
|||||||
@@ -32,17 +32,15 @@
|
|||||||
packages = forAllSystems (
|
packages = forAllSystems (
|
||||||
system: let
|
system: let
|
||||||
pkgs = import nixpkgs {inherit system;};
|
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 {
|
t3code-desktop = pkgs.callPackage ./packages/t3code-desktop {
|
||||||
src = t3code;
|
inherit src codexPackage claudeCodePackage opencodePackage;
|
||||||
codex = llm-agents.packages.${system}.codex;
|
|
||||||
claudeCode = llm-agents.packages.${system}."claude-code";
|
|
||||||
opencode = llm-agents.packages.${system}.opencode;
|
|
||||||
};
|
};
|
||||||
t3code-server = pkgs.callPackage ./packages/t3code-server {
|
t3code-server = pkgs.callPackage ./packages/t3code-server {
|
||||||
src = t3code;
|
inherit src codexPackage claudeCodePackage opencodePackage;
|
||||||
codex = llm-agents.packages.${system}.codex;
|
|
||||||
claudeCode = llm-agents.packages.${system}."claude-code";
|
|
||||||
opencode = llm-agents.packages.${system}.opencode;
|
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
inherit t3code-desktop t3code-server;
|
inherit t3code-desktop t3code-server;
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
stdenv,
|
stdenv,
|
||||||
symlinkJoin,
|
symlinkJoin,
|
||||||
bun,
|
bun,
|
||||||
codex ? null,
|
codexPackage ? null,
|
||||||
claudeCode ? null,
|
claudeCodePackage ? null,
|
||||||
electron_40,
|
electron_40,
|
||||||
gcc,
|
gcc,
|
||||||
git,
|
git,
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
makeWrapper,
|
makeWrapper,
|
||||||
node-gyp,
|
node-gyp,
|
||||||
nodejs,
|
nodejs,
|
||||||
opencode ? null,
|
opencodePackage ? null,
|
||||||
pkg-config,
|
pkg-config,
|
||||||
python3,
|
python3,
|
||||||
writableTmpDirAsHomeHook,
|
writableTmpDirAsHomeHook,
|
||||||
@@ -198,14 +198,14 @@
|
|||||||
});
|
});
|
||||||
withAgentPath = withCodex || withClaudeCode || withOpencode;
|
withAgentPath = withCodex || withClaudeCode || withOpencode;
|
||||||
agentPath = lib.makeBinPath (
|
agentPath = lib.makeBinPath (
|
||||||
lib.optionals withCodex [codex]
|
lib.optionals withCodex [codexPackage]
|
||||||
++ lib.optionals withClaudeCode [claudeCode]
|
++ lib.optionals withClaudeCode [claudeCodePackage]
|
||||||
++ lib.optionals withOpencode [opencode]
|
++ lib.optionals withOpencode [opencodePackage]
|
||||||
);
|
);
|
||||||
in
|
in
|
||||||
assert lib.assertMsg (!withCodex || codex != null) "withCodex requires a codex package";
|
assert lib.assertMsg (!withCodex || codexPackage != null) "withCodex requires a codex package";
|
||||||
assert lib.assertMsg (!withClaudeCode || claudeCode != null) "withClaudeCode requires a claudeCode package";
|
assert lib.assertMsg (!withClaudeCode || claudeCodePackage != null) "withClaudeCode requires a claudeCode package";
|
||||||
assert lib.assertMsg (!withOpencode || opencode != null) "withOpencode requires an opencode package";
|
assert lib.assertMsg (!withOpencode || opencodePackage != null) "withOpencode requires an opencode package";
|
||||||
if withAgentPath
|
if withAgentPath
|
||||||
then
|
then
|
||||||
symlinkJoin {
|
symlinkJoin {
|
||||||
|
|||||||
@@ -4,12 +4,12 @@
|
|||||||
stdenv,
|
stdenv,
|
||||||
symlinkJoin,
|
symlinkJoin,
|
||||||
bun,
|
bun,
|
||||||
codex ? null,
|
codexPackage ? null,
|
||||||
claudeCode ? null,
|
claudeCodePackage ? null,
|
||||||
makeBinaryWrapper,
|
makeBinaryWrapper,
|
||||||
node-gyp,
|
node-gyp,
|
||||||
nodejs,
|
nodejs,
|
||||||
opencode ? null,
|
opencodePackage ? null,
|
||||||
python3,
|
python3,
|
||||||
writableTmpDirAsHomeHook,
|
writableTmpDirAsHomeHook,
|
||||||
withClaudeCode ? false,
|
withClaudeCode ? false,
|
||||||
@@ -129,14 +129,14 @@
|
|||||||
});
|
});
|
||||||
withAgentPath = withCodex || withClaudeCode || withOpencode;
|
withAgentPath = withCodex || withClaudeCode || withOpencode;
|
||||||
agentPath = lib.makeBinPath (
|
agentPath = lib.makeBinPath (
|
||||||
lib.optionals withCodex [codex]
|
lib.optionals withCodex [codexPackage]
|
||||||
++ lib.optionals withClaudeCode [claudeCode]
|
++ lib.optionals withClaudeCode [claudeCodePackage]
|
||||||
++ lib.optionals withOpencode [opencode]
|
++ lib.optionals withOpencode [opencodePackage]
|
||||||
);
|
);
|
||||||
in
|
in
|
||||||
assert lib.assertMsg (!withCodex || codex != null) "withCodex requires a codex package";
|
assert lib.assertMsg (!withCodex || codexPackage != null) "withCodex requires a codex package";
|
||||||
assert lib.assertMsg (!withClaudeCode || claudeCode != null) "withClaudeCode requires a claudeCode package";
|
assert lib.assertMsg (!withClaudeCode || claudeCodePackage != null) "withClaudeCode requires a claudeCode package";
|
||||||
assert lib.assertMsg (!withOpencode || opencode != null) "withOpencode requires an opencode package";
|
assert lib.assertMsg (!withOpencode || opencodePackage != null) "withOpencode requires an opencode package";
|
||||||
if withAgentPath
|
if withAgentPath
|
||||||
then
|
then
|
||||||
symlinkJoin {
|
symlinkJoin {
|
||||||
|
|||||||
Reference in New Issue
Block a user