From 6bf5be2a995173cc410243878469423a609186a0 Mon Sep 17 00:00:00 2001 From: Jessie Frazelle Date: Wed, 20 Aug 2025 13:09:46 -0700 Subject: [PATCH 01/11] add a github action to test the nix flake works and doesn't break Signed-off-by: Jessie Frazelle --- .github/workflows/nix.yml | 44 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 .github/workflows/nix.yml diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml new file mode 100644 index 00000000000..be6ed409aef --- /dev/null +++ b/.github/workflows/nix.yml @@ -0,0 +1,44 @@ +name: Test Nix Flake +on: + push: + branches: [main] + pull_request: + workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true +jobs: + nix-flake-check: + runs-on: namespace-profile-ubuntu-2-cores + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - uses: cachix/install-nix-action@v31 + with: + nix_path: nixpkgs=channel:nixos-unstable + - name: nix flake check for all platforms + run: | + nix flake check --all-systems + nix-build-linux: + runs-on: namespace-profile-ubuntu-2-cores + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - uses: cachix/install-nix-action@v31 + with: + nix_path: nixpkgs=channel:nixos-unstable + - name: nix build . for x86_64-linux + run: nix build . + nix-build-macos: + runs-on: namespace-profile-macos-6-cores + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - uses: cachix/install-nix-action@v31 + with: + nix_path: nixpkgs=channel:nixos-unstable + - name: nix build . for x86_64-darwin + run: nix build . From 57ca18c9c5db90d539535a72e8fd18b9d31a8624 Mon Sep 17 00:00:00 2001 From: Jessie Frazelle Date: Wed, 20 Aug 2025 13:34:51 -0700 Subject: [PATCH 02/11] fix Signed-off-by: Jessie Frazelle --- .github/workflows/nix.yml | 3 --- codex-rs/default.nix | 28 +++++++++++++++++++--------- flake.nix | 28 +++++++++++++--------------- 3 files changed, 32 insertions(+), 27 deletions(-) diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index be6ed409aef..1e0afc0cace 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -9,7 +9,6 @@ concurrency: cancel-in-progress: true jobs: nix-flake-check: - runs-on: namespace-profile-ubuntu-2-cores steps: - uses: actions/checkout@v4 with: @@ -21,7 +20,6 @@ jobs: run: | nix flake check --all-systems nix-build-linux: - runs-on: namespace-profile-ubuntu-2-cores steps: - uses: actions/checkout@v4 with: @@ -32,7 +30,6 @@ jobs: - name: nix build . for x86_64-linux run: nix build . nix-build-macos: - runs-on: namespace-profile-macos-6-cores steps: - uses: actions/checkout@v4 with: diff --git a/codex-rs/default.nix b/codex-rs/default.nix index d2d4dfb6ba5..b1efec74fa2 100644 --- a/codex-rs/default.nix +++ b/codex-rs/default.nix @@ -1,15 +1,23 @@ -{ pkgs, monorep-deps ? [], ... }: -let +{ + pkgs, + monorep-deps ? [], + ... +}: let env = { PKG_CONFIG_PATH = "${pkgs.openssl.dev}/lib/pkgconfig:$PKG_CONFIG_PATH"; }; -in -rec { +in rec { package = pkgs.rustPlatform.buildRustPackage { inherit env; pname = "codex-rs"; version = "0.1.0"; - cargoLock.lockFile = ./Cargo.lock; + cargoLock = { + lockFile = ./Cargo.lock; + # Since ratatui is in crates.patch we need to use the hash here + outputHashes = { + "ratatui-0.29.0" = "sha256-HBvT5c8GsiCxMffNjJGLmHnvG77A6cqEL+1ARurBXho="; + }; + }; doCheck = false; src = ./.; nativeBuildInputs = with pkgs; [ @@ -25,10 +33,12 @@ rec { devShell = pkgs.mkShell { inherit env; name = "codex-rs-dev"; - packages = monorep-deps ++ [ - pkgs.cargo - package - ]; + packages = + monorep-deps + ++ [ + pkgs.cargo + package + ]; shellHook = '' echo "Entering development shell for codex-rs" alias codex="cd ${package.src}/tui; cargo run; cd -" diff --git a/flake.nix b/flake.nix index 7247333c5a3..3d0823b9f54 100644 --- a/flake.nix +++ b/flake.nix @@ -10,48 +10,46 @@ }; }; - outputs = { nixpkgs, flake-utils, rust-overlay, ... }: - flake-utils.lib.eachDefaultSystem (system: - let + outputs = { + nixpkgs, + flake-utils, + rust-overlay, + ... + }: + flake-utils.lib.eachDefaultSystem ( + system: let pkgs = import nixpkgs { inherit system; }; pkgsWithRust = import nixpkgs { inherit system; - overlays = [ rust-overlay.overlays.default ]; + overlays = [rust-overlay.overlays.default]; }; monorepo-deps = with pkgs; [ # for precommit hook pnpm husky ]; - codex-cli = import ./codex-cli { - inherit pkgs monorepo-deps; - }; codex-rs = import ./codex-rs { pkgs = pkgsWithRust; inherit monorepo-deps; }; - in - rec { + in rec { packages = { - codex-cli = codex-cli.package; codex-rs = codex-rs.package; }; devShells = { - codex-cli = codex-cli.devShell; codex-rs = codex-rs.devShell; }; apps = { - codex-cli = codex-cli.app; codex-rs = codex-rs.app; }; - defaultPackage = packages.codex-cli; - defaultApp = apps.codex-cli; - defaultDevShell = devShells.codex-cli; + defaultPackage = packages.codex-rs; + defaultApp = apps.codex-rs; + defaultDevShell = devShells.codex-rs; } ); } From d34e962e86643a3175ef53a099161611778d2230 Mon Sep 17 00:00:00 2001 From: Jessie Frazelle Date: Wed, 20 Aug 2025 13:41:33 -0700 Subject: [PATCH 03/11] update the rust version in the flake this is bullshit Signed-off-by: Jessie Frazelle --- flake.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/flake.lock b/flake.lock index 6e4f3acce7e..742de0e23c2 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1744463964, - "narHash": "sha256-LWqduOgLHCFxiTNYi3Uj5Lgz0SR+Xhw3kr/3Xd0GPTM=", + "lastModified": 1755615617, + "narHash": "sha256-HMwfAJBdrr8wXAkbGhtcby1zGFvs+StOp19xNsbqdOg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2631b0b7abcea6e640ce31cd78ea58910d31e650", + "rev": "20075955deac2583bb12f07151c2df830ef346b4", "type": "github" }, "original": { @@ -48,11 +48,11 @@ ] }, "locked": { - "lastModified": 1746844454, - "narHash": "sha256-GcUWDQUDRYrD34ol90KGUpjbVcOfUNbv0s955jPecko=", + "lastModified": 1755657401, + "narHash": "sha256-rPHuWPAcwW63wH1SUtDCqAnf2+60pi/pGMCIhVobzXc=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "be092436d4c0c303b654e4007453b69c0e33009e", + "rev": "292ca754b0f679b842fbfc4734f017c351f0e9eb", "type": "github" }, "original": { From c44ce17b31826c4f6eb791cb2744bf926e145b3c Mon Sep 17 00:00:00 2001 From: Jessie Frazelle Date: Wed, 20 Aug 2025 14:11:34 -0700 Subject: [PATCH 04/11] other cleanups Signed-off-by: Jessie Frazelle --- codex-rs/default.nix | 25 +++++++------ flake.nix | 86 ++++++++++++++++++++++++++++---------------- 2 files changed, 69 insertions(+), 42 deletions(-) diff --git a/codex-rs/default.nix b/codex-rs/default.nix index b1efec74fa2..c512a3beed6 100644 --- a/codex-rs/default.nix +++ b/codex-rs/default.nix @@ -1,8 +1,10 @@ { pkgs, - monorep-deps ? [], + monorepo-deps ? [], ... }: let + lib = pkgs.lib; + env = { PKG_CONFIG_PATH = "${pkgs.openssl.dev}/lib/pkgconfig:$PKG_CONFIG_PATH"; }; @@ -11,40 +13,41 @@ in rec { inherit env; pname = "codex-rs"; version = "0.1.0"; + src = ./.; + cargoLock = { lockFile = ./Cargo.lock; - # Since ratatui is in crates.patch we need to use the hash here + # ratatui is patched via git, so we must whitelist its fixed-output hash outputHashes = { "ratatui-0.29.0" = "sha256-HBvT5c8GsiCxMffNjJGLmHnvG77A6cqEL+1ARurBXho="; }; }; + doCheck = false; - src = ./.; + nativeBuildInputs = with pkgs; [ pkg-config openssl ]; - meta = with pkgs.lib; { - description = "OpenAI Codex command‑line interface rust implementation"; + + meta = with lib; { + description = "OpenAI Codex command line interface rust implementation"; license = licenses.asl20; homepage = "https://github.com/openai/codex"; }; }; + devShell = pkgs.mkShell { inherit env; name = "codex-rs-dev"; - packages = - monorep-deps - ++ [ - pkgs.cargo - package - ]; + packages = monorepo-deps ++ [package]; shellHook = '' echo "Entering development shell for codex-rs" alias codex="cd ${package.src}/tui; cargo run; cd -" ${pkgs.rustPlatform.cargoSetupHook} ''; }; + app = { type = "app"; program = "${package}/bin/codex"; diff --git a/flake.nix b/flake.nix index 3d0823b9f54..a26078ddcf2 100644 --- a/flake.nix +++ b/flake.nix @@ -11,45 +11,69 @@ }; outputs = { + self, nixpkgs, flake-utils, rust-overlay, ... }: - flake-utils.lib.eachDefaultSystem ( - system: let - pkgs = import nixpkgs { - inherit system; - }; - pkgsWithRust = import nixpkgs { - inherit system; - overlays = [rust-overlay.overlays.default]; - }; - monorepo-deps = with pkgs; [ - # for precommit hook - pnpm - husky + flake-utils.lib.eachDefaultSystem (system: let + # Base pkgs with the Rust overlay + pkgsBase = import nixpkgs { + inherit system; + overlays = [rust-overlay.overlays.default]; + }; + + # Use toolchain pinned in ./codex-rs/rust-toolchain.toml, fallback to stable 1.89.0 + rustToolchain = + if builtins.pathExists ./codex-rs/rust-toolchain.toml + then pkgsBase.rust-bin.fromRustupToolchainFile ./codex-rs/rust-toolchain.toml + else pkgsBase.rust-bin.stable."1.89.0".default; + + # Reimport pkgs and override rustPlatform to use that toolchain for builds + pkgs = import nixpkgs { + inherit system; + overlays = [ + rust-overlay.overlays.default + (final: prev: { + rustPlatform = prev.makeRustPlatform { + cargo = rustToolchain; + rustc = rustToolchain; + }; + }) ]; - codex-rs = import ./codex-rs { - pkgs = pkgsWithRust; - inherit monorepo-deps; - }; - in rec { - packages = { - codex-rs = codex-rs.package; - }; + }; - devShells = { - codex-rs = codex-rs.devShell; - }; + monorepo-deps = with pkgs; [ + pnpm + husky + ]; + + codex-rs = import ./codex-rs { + inherit pkgs monorepo-deps; + }; + in rec { + packages = { + codex-rs = codex-rs.package; + default = codex-rs.package; + }; + + apps = { + codex-rs = codex-rs.app; + default = codex-rs.app; + }; - apps = { - codex-rs = codex-rs.app; + devShells = { + # Dev shell includes the pinned toolchain on PATH + codex-rs = pkgs.mkShell { + packages = monorepo-deps ++ [rustToolchain codex-rs.package]; }; + default = devShells.codex-rs; + }; - defaultPackage = packages.codex-rs; - defaultApp = apps.codex-rs; - defaultDevShell = devShells.codex-rs; - } - ); + # Optional CI hook to ensure the package builds + checks = { + codex-rs-build = packages.codex-rs; + }; + }); } From 7c2b25f60c95258b33468a6bfeddf0c58b17e9e2 Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Mon, 25 Aug 2025 18:01:16 -0700 Subject: [PATCH 05/11] Update .github/workflows/nix.yml Co-authored-by: Kamil Zabielski <50334623+limakzi@users.noreply.github.com> --- .github/workflows/nix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index 1e0afc0cace..2c391054a05 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -10,7 +10,7 @@ concurrency: jobs: nix-flake-check: steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: recursive - uses: cachix/install-nix-action@v31 From 966c3878863cf4cd4d44595c702f60c08efdfffc Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Mon, 25 Aug 2025 18:01:24 -0700 Subject: [PATCH 06/11] Update .github/workflows/nix.yml Co-authored-by: Kamil Zabielski <50334623+limakzi@users.noreply.github.com> --- .github/workflows/nix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index 2c391054a05..ac779829f87 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -21,7 +21,7 @@ jobs: nix flake check --all-systems nix-build-linux: steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: recursive - uses: cachix/install-nix-action@v31 From da1b4d155f81ed9523bef1469a6dea04f09435aa Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Mon, 25 Aug 2025 18:01:32 -0700 Subject: [PATCH 07/11] Update .github/workflows/nix.yml Co-authored-by: Kamil Zabielski <50334623+limakzi@users.noreply.github.com> --- .github/workflows/nix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index ac779829f87..cda5d04357e 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -31,7 +31,7 @@ jobs: run: nix build . nix-build-macos: steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: recursive - uses: cachix/install-nix-action@v31 From ce683b1b14d49b8fadb3d6239cf3ece423d8230c Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Mon, 25 Aug 2025 18:01:40 -0700 Subject: [PATCH 08/11] Update .github/workflows/nix.yml Co-authored-by: Kamil Zabielski <50334623+limakzi@users.noreply.github.com> --- .github/workflows/nix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index cda5d04357e..1493e562d73 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -37,5 +37,5 @@ jobs: - uses: cachix/install-nix-action@v31 with: nix_path: nixpkgs=channel:nixos-unstable - - name: nix build . for x86_64-darwin + - name: nix build for x86_64-darwin run: nix build . From 5772c1f80beaeb979089697f5c7c334555fcf00f Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Mon, 25 Aug 2025 18:01:50 -0700 Subject: [PATCH 09/11] Update .github/workflows/nix.yml Co-authored-by: Kamil Zabielski <50334623+limakzi@users.noreply.github.com> --- .github/workflows/nix.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index 1493e562d73..28b80bbe9aa 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -4,6 +4,7 @@ on: branches: [main] pull_request: workflow_dispatch: + concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true From c1dbef48634612274a25fcb8113daf3c15ac1313 Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Mon, 25 Aug 2025 18:01:56 -0700 Subject: [PATCH 10/11] Update .github/workflows/nix.yml Co-authored-by: Kamil Zabielski <50334623+limakzi@users.noreply.github.com> --- .github/workflows/nix.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index 28b80bbe9aa..5b74e54d195 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -8,6 +8,7 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true + jobs: nix-flake-check: steps: From d6658f60323761a1c596131ac894f7eb5cbbb6d5 Mon Sep 17 00:00:00 2001 From: Jessie Frazelle Date: Wed, 24 Sep 2025 13:25:39 -0700 Subject: [PATCH 11/11] updates Signed-off-by: Jessie Frazelle --- flake.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/flake.lock b/flake.lock index 742de0e23c2..f7946d555a1 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1755615617, - "narHash": "sha256-HMwfAJBdrr8wXAkbGhtcby1zGFvs+StOp19xNsbqdOg=", + "lastModified": 1758427187, + "narHash": "sha256-pHpxZ/IyCwoTQPtFIAG2QaxuSm8jWzrzBGjwQZIttJc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "20075955deac2583bb12f07151c2df830ef346b4", + "rev": "554be6495561ff07b6c724047bdd7e0716aa7b46", "type": "github" }, "original": { @@ -48,11 +48,11 @@ ] }, "locked": { - "lastModified": 1755657401, - "narHash": "sha256-rPHuWPAcwW63wH1SUtDCqAnf2+60pi/pGMCIhVobzXc=", + "lastModified": 1758681214, + "narHash": "sha256-8cW731vev6kfr58cILO2ZsjHwaPhm88dQ8Q6nTSjP9I=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "292ca754b0f679b842fbfc4734f017c351f0e9eb", + "rev": "b12ed88d8d33d4f3cbc842bf29fad93bb1437299", "type": "github" }, "original": {