Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions FORK.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ This repository is a fork of `pingdotgg/t3code`. Keep this file focused on fork
- Fork release jobs use GitHub-hosted runners where upstream private runners are unavailable.
- Web dist release archives are built as hosted static apps and carry the release channel.

### Nix Package

- The fork exposes the server and web bundle as an `x86_64-linux` flake package.
- The package version follows the server manifest by default and supports the generated nightly version override.

### Desktop Updater Channels

- Stable builds use `latest`; nightly builds use `nightly`.
Expand Down
27 changes: 27 additions & 0 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 20 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
description = "T3 Code";

inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";

outputs =
{ nixpkgs, self }:
let
system = "x86_64-linux";
pkgs = import nixpkgs { inherit system; };
in
{
packages.${system} = rec {
t3code = pkgs.callPackage ./nix/package.nix { src = self; };
default = t3code;
};

formatter.${system} = pkgs.nixfmt;
};
}
110 changes: 110 additions & 0 deletions nix/package.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
{
cacert,
fetchPnpmDeps,
lib,
makeBinaryWrapper,
node-gyp,
nodejs_24,
pnpm_11,
pnpmConfigHook,
python3,
src,
stdenv,
version ? null,
writableTmpDirAsHomeHook,
}:

let
nodejs = nodejs_24;
pnpm = pnpm_11;
sourceVersion = (builtins.fromJSON (builtins.readFile "${src}/apps/server/package.json")).version;
in
stdenv.mkDerivation (finalAttrs: {
pname = "t3code";
version = if version == null then sourceVersion else version;
inherit src;
strictDeps = true;

pnpmWorkspaces = [
"@t3tools/monorepo"
"t3..."
"@t3tools/web..."
"@t3tools/scripts..."
];

pnpmDeps = fetchPnpmDeps {
inherit (finalAttrs)
pname
version
src
pnpmWorkspaces
;
inherit pnpm;
fetcherVersion = 4;
hash = "sha256-/FRJ6duN5A0x2wiMc9zBX+/Zkse8duCKSrHENlmD4Gk=";
};

postPatch = lib.optionalString (finalAttrs.version != sourceVersion) ''
substituteInPlace \
apps/desktop/package.json \
apps/server/package.json \
apps/web/package.json \
packages/contracts/package.json \
--replace-fail '"version": "${sourceVersion}"' \
'"version": "${finalAttrs.version}"'
'';

nativeBuildInputs = [
makeBinaryWrapper
node-gyp
nodejs
pnpm
pnpmConfigHook
python3
writableTmpDirAsHomeHook
];

dontPatchELF = true;
noAuditTmpdir = true;
SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";

preBuild = ''
export npm_config_nodedir=${nodejs}
export ELECTRON_SKIP_BINARY_DOWNLOAD=1
pnpm rebuild --pending "''${pnpmInstallFlags[@]}" --filter '!@t3tools/monorepo'
'';

buildPhase = ''
runHook preBuild

pnpm --filter @t3tools/web build
pnpm --filter t3 build:bundle

runHook postBuild
'';

installPhase = ''
runHook preInstall

mkdir --parents "$out"/libexec/t3code/apps/server
cp --recursive --no-preserve=mode node_modules "$out"/libexec/t3code
cp --recursive --no-preserve=mode packages "$out"/libexec/t3code
cp --recursive --no-preserve=mode apps/server/{node_modules,dist} "$out"/libexec/t3code/apps/server
cp --recursive --no-preserve=mode apps/web/dist "$out"/libexec/t3code/apps/server/dist/client

find "$out"/libexec/t3code -xtype l -delete

makeWrapper ${lib.getExe nodejs} "$out"/bin/t3 \
--add-flags "$out"/libexec/t3code/apps/server/dist/bin.mjs

runHook postInstall
'';

meta = {
description = "Remote control for coding agents";
homepage = "https://github.com/tarik02/t3code";
license = lib.licenses.mit;
mainProgram = "t3";
platforms = [ "x86_64-linux" ];
};
})
Loading