Add NixOS package

Open 💬 20 comments Opened Apr 17, 2025 by JackPala
💡 Likely answer: A maintainer (tibo-openai, collaborator) responded on this thread — see the highlighted reply below.

There appears to be no NixOS Package available. Currently willing to write one if there are others interested in using it.

View original on GitHub ↗

20 Comments

tibo-openai collaborator · 1 year ago

Yes, count us interested!

JackPala · 1 year ago

Cool, I created a currently functional .nix config that can be imported into a user's configuration.nix via imports

# /etc/nixos/codex.nix
{ pkgs, ... }:

let
  # 1) Node.js LTS + npm
  nodejs = pkgs.nodejs;               # Node.js LTS alias
  npm    = pkgs.nodePackages.npm;     # npm CLI

  # 2) Fetch the Codex repo
  codexRepo = pkgs.fetchFromGitHub {
    owner  = "openai";
    repo   = "codex";
    rev    = "refs/heads/main";
    sha256 = "AnxbfkYEuIljqvGL+bPgADuAKb0SIrrb1lJPZIsQcyg=";
  };

  # 3) Build the CLI from codex-cli/
  codex-cli = pkgs.buildNpmPackage rec {
    pname   = "codex-cli";
    version = "unstable";

    # point at the subfolder containing package.json
    src = "${codexRepo}/codex-cli";

    buildInputs   = [ nodejs npm ];

    # this exact hash fixed the npm‑deps mismatch error you saw
    npmDepsHash = "sha256-Upq467farJjMcbpswqz2U40RXbA8APq145Z0pgaSzgs=";
  };
in
{
  environment.systemPackages = with pkgs; [
    nodejs     # the runtime
    npm        # the CLI
    codex-cli  # makes `codex` available globally
  ];
}

This allows codex to run on NixOS, but it is not a true Nix package. I will see what processes are required for nix package repo approval

JackPala · 1 year ago

@tibo-openai Do you guys do grants for OS package development? I'd be happy to build and maintain it, starting on Nix unstable and moving into the next versioned nix branch from there.

JackPala · 1 year ago

@tibo-openai Here is a functional codebase for a starting point, it is by no means a full nix package, but it does work as a starter

https://github.com/JackPala/OpenAI-Codex-NixOS

tibo-openai collaborator · 1 year ago

Looks like a nix integration for dev is also implemented in https://github.com/openai/codex/pull/225, thoughts on the implementation there? Feel free to comment.

JackPala · 1 year ago

@tibo-openai That appears to be a nix flake implementation which is useful for users who use flakes.

My implementation does not require flakes and is designed for environments without flake support

solomon-b · 1 year ago

@JackPala I'm having trouble getting codex building with buildingNpmPackage. I'm getting an error about a missing package.json:


       last 16 log lines:
       > Running phase: unpackPhase
       > unpacking source archive /nix/store/5jp361mn57i7yf3l11hz0yidjz7bpvnm-source/codex-cli
       > source root is codex-cli
       > Running phase: patchPhase
       > Running phase: updateAutotoolsGnuConfigScriptsPhase
       > Running phase: configurePhase
       > no configure script, doing nothing
       > Running phase: buildPhase
       >
       > ERROR: The package-lock.json file does not exist!
       >
       > package-lock.json is required to make sure that npmDepsHash doesn't change
       > when packages are updated on npm.
       >
       > Hint: You can copy a vendored package-lock.json file via postPatch.
       >

I tried generating a lock file with npm install --package-lock-only @openai/codex then referencing that in the postPatch step but I'm getting further errors:

    postPatch = ''
      cp ${./package-lock.json} ./package-lock.json
    '';

       last 21 log lines:
       > Running phase: unpackPhase
       > unpacking source archive /nix/store/5jp361mn57i7yf3l11hz0yidjz7bpvnm-source/codex-cli
       > source root is codex-cli
       > Running phase: patchPhase
       > Executing npmConfigHook
       > Configuring npm
       > Validating consistency between /build/codex-cli/package-lock.json and /nix/store/c5lccmsn6hnfdqikf674ysbkh3ppa371-codex-cli-unstable-npm-deps/package-lock.json
       > Setting npm_config_cache to /nix/store/c5lccmsn6hnfdqikf674ysbkh3ppa371-codex-cli-unstable-npm-deps
       > Installing dependencies
       > npm error code ENOTCACHED
       > npm error request to https://registry.npmjs.org/@eslint%2fjs failed: cache mode is 'only-if-cached' but no cached response is available.
       > npm error Log files were not written due to an error writing to the directory: /nix/store/c5lccmsn6hnfdqikf674ysbkh3ppa371-codex-cli-unstable-npm-deps/_logs
       > npm error You can rerun the command with --loglevel=verbose to see the logs in your terminal
       >
       > ERROR: npm failed to install dependencies
       >
       > Here are a few things you can try, depending on the error:
       > 1. Set makeCacheWritable = true
       >   Note that this won't help if npm is complaining about not being able to write to the logs directory -- look above that for the actual error.
       > 2. Set npmFlags = [ "--legacy-peer-deps" ]
       >

I don't have much experience with javascript + nix. Do you know whats going wrong?

MSDimos · 1 year ago
@JackPala I'm having trouble getting codex building with buildingNpmPackage. I'm getting an error about a missing package.json: `` last 16 log lines: > Running phase: unpackPhase > unpacking source archive /nix/store/5jp361mn57i7yf3l11hz0yidjz7bpvnm-source/codex-cli > source root is codex-cli > Running phase: patchPhase > Running phase: updateAutotoolsGnuConfigScriptsPhase > Running phase: configurePhase > no configure script, doing nothing > Running phase: buildPhase > > ERROR: The package-lock.json file does not exist! > > package-lock.json is required to make sure that npmDepsHash doesn't change > when packages are updated on npm. > > Hint: You can copy a vendored package-lock.json file via postPatch. > ` I tried generating a lock file with npm install --package-lock-only @openai/codex then referencing that in the postPatch step but I'm getting further errors: ` postPatch = '' cp ${./package-lock.json} ./package-lock.json ''; ` ` last 21 log lines: > Running phase: unpackPhase > unpacking source archive /nix/store/5jp361mn57i7yf3l11hz0yidjz7bpvnm-source/codex-cli > source root is codex-cli > Running phase: patchPhase > Executing npmConfigHook > Configuring npm > Validating consistency between /build/codex-cli/package-lock.json and /nix/store/c5lccmsn6hnfdqikf674ysbkh3ppa371-codex-cli-unstable-npm-deps/package-lock.json > Setting npm_config_cache to /nix/store/c5lccmsn6hnfdqikf674ysbkh3ppa371-codex-cli-unstable-npm-deps > Installing dependencies > npm error code ENOTCACHED > npm error request to https://registry.npmjs.org/@eslint%2fjs failed: cache mode is 'only-if-cached' but no cached response is available. > npm error Log files were not written due to an error writing to the directory: /nix/store/c5lccmsn6hnfdqikf674ysbkh3ppa371-codex-cli-unstable-npm-deps/_logs > npm error You can rerun the command with --loglevel=verbose to see the logs in your terminal > > ERROR: npm failed to install dependencies > > Here are a few things you can try, depending on the error: > 1. Set makeCacheWritable = true > Note that this won't help if npm is complaining about not being able to write to the logs directory -- look above that for the actual error. > 2. Set npmFlags = [ "--legacy-peer-deps" ] > `` I don't have much experience with javascript + nix. Do you know whats going wrong?

Well, you are unlucky, they updated the project using pnpm about two days ago, but the above nix codes used buildNpmPackage which needs package-lock.json.

You can check the document here.

MSDimos · 1 year ago
{
  pkgs,
  stdenv,
  ...
}: let
  codexRepo = pkgs.fetchFromGitHub {
    owner = "openai";
    repo = "codex";
    rev = "8f1ea7fa855cc2a130824a272a35dcd031ff519b";
    sha256 = "sha256-VDF7hg81awpV4EUXT/DW9wE/AhQc006TCQnMYTr9JK0=";
  };

  codex-cli = stdenv.mkDerivation (finalAttrs: {
    pname = "codex-cli";
    version = "0.1.0";
    src = codexRepo;
    nativeBuildInputs = with pkgs; [
      nodejs
      pnpm
      pnpm.configHook
    ];

    pnpmDeps = pkgs.pnpm.fetchDeps {
      inherit (finalAttrs) pname version src;
      hash = "sha256-fnWprp1OD+LpA/aMKk3KWM6ObTdFtPCaMBNx95eVUwQ=";
      sourceRoot = "${finalAttrs.src.name}/codex-cli";
    };

    buildPhase = ''
      pnpm install --frozen-lockfile
      pnpm run build
    '';

    installPhase = ''
      runHook preInstall

      mkdir -p $out/bin
      mkdir -p $out/lib

      cp -r codex-cli/dist/* $out/lib/
      ln -s $out/lib/cli.js $out/bin/codex
      chmod +x $out/bin/codex

      runHook postInstall
    '';
  });
in
  codex-cli

Notice:

Currently, Codex is still under active development, and using Nix to install it means you'll need to frequently update the relevant hash values in the code above.
JackPala · 1 year ago

@MSDimos @solomon-b You'll need to get the latest hash and swap it out, the way I built it is really quick and janky. That hash changes with every commit, so if the post a commit it will change the hash of the repo and make it not work.

I have not found a way around this yet, as NixOS really likes the use of hashes to validate the repo when yanking it.

If anyone has any ideas on how to safely get around the hash, I can take a look and try to help.

solomon-b · 1 year ago

Thank you @MSDimos. I had to change the sourceRoot as the lock file is in the root of the repo and wrap the cli tool to run it with node. Here is a currently working version:

{ pkgs, ...}:

let
  codexRepo = pkgs.fetchFromGitHub {
    owner = "openai";
    repo = "codex";
    rev = "8f1ea7fa855cc2a130824a272a35dcd031ff519b";
    sha256 = "sha256-gHk2ydublBWuHqli11Dj5C9en2HtwTtwxhuayVHbcXs=";
  };

  codex-cli = pkgs.stdenv.mkDerivation (finalAttrs: {
    pname = "codex-cli";
    version = "0.1.0";
    src = codexRepo;
    sourceRoot = finalAttrs.src.name;
    nativeBuildInputs = with pkgs; [
      nodejs
      pnpm
      pnpm.configHook
      makeWrapper
    ];

    pnpmDeps = pkgs.pnpm.fetchDeps {
      inherit (finalAttrs) pname version src;
      hash = "sha256-ZXX9f/MsqMN8fxTclowDdD8+gSOOhI0i+EduTJ5eM34=";
    };

    buildPhase = ''
      cd codex-cli
      pnpm install --frozen-lockfile
      pnpm run build
    '';

    installPhase = ''
      runHook preInstall

      mkdir -p $out/bin
      mkdir -p $out/lib

      install -Dm644 dist/cli.js $out/lib/cli.js
      makeWrapper ${pkgs.nodejs}/bin/node $out/bin/codex \
        --add-flags "$out/lib/cli.js"

      runHook postInstall
    '';
  });
in {
  environment.systemPackages = [
    codex-cli
  ];
}
jessfraz · 11 months ago

there is a codex package in nixpkgs apparently but its 2 versions out of date pretty consistenly what are you all doing, would be nice to make this repo a flake and then i could just pull from that like i do w ghostyy

EDIT: there seems to be a flake in the repo ill try that

sadjow · 10 months ago

Created a nix flake that is always up-to-date(automated)

https://github.com/sadjow/codex-nix/

davidak · 10 months ago

There is a nix package, but it is outdated.

https://search.nixos.org/packages?channel=unstable&query=codex

You can use the package from numtide:

nix profile install github:numtide/nix-ai-tools#codex

it would also be nice if the included flake is fixed (https://github.com/openai/codex/issues/3453)

dionysuzx · 9 months ago
There is a nix package, but it is outdated. https://search.nixos.org/packages?channel=unstable&query=codex You can use the package from numtide: nix profile install github:numtide/nix-ai-tools#codex it would also be nice if the included flake is fixed (#3453)

yes it is outdated right now. cc @tibo-openai or anyone else looking at this, would love to use Nix instead of homebrew etc. for keeping my codex updated :)

sadjow · 9 months ago

https://github.com/sadjow/codex-nix

Em sáb., 4 de out. de 2025 às 18:26, dionysuz @.***>
escreveu:

dionysuzx left a comment (openai/codex#241) <https://github.com/openai/codex/issues/241#issuecomment-3368549436> There is a nix package, but it is outdated. https://search.nixos.org/packages?channel=unstable&query=codex You can use the package from numtide: nix profile install github:numtide/nix-ai-tools#codex it would also be nice if the included flake is fixed (#3453 <https://github.com/openai/codex/issues/3453>) yes it is outdated right now. cc @tibo-openai <https://github.com/tibo-openai> or anyone else looking at this, would love to use Nix instead of homebrew etc. for keeping my codex updated :) — Reply to this email directly, view it on GitHub <https://github.com/openai/codex/issues/241#issuecomment-3368549436>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/AABLK5MOWF2E6OJLXXAKFL33WA3RRAVCNFSM6AAAAAB3LC33EKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTGNRYGU2DSNBTGY> . You are receiving this because you commented.Message ID: @.***>
TheArctesian · 8 months ago

ya lowkey embarrassing af that they have taken so long and not made or accepted any prs for nix integration

acgxv · 7 months ago
There is a nix package, but it is outdated. https://search.nixos.org/packages?channel=unstable&query=codex You can use the package from numtide: nix profile install github:numtide/nix-ai-tools#codex it would also be nice if the included flake is fixed (#3453)

This has a scanning rate that’s 12 times slower than the one below.
If you want to stay up-to-date with the latest features daily I recommend the one below.

Created a nix flake that is always up-to-date(automated) https://github.com/sadjow/codex-nix/
yakimant · 5 months ago
This has a scanning rate that’s 12 times slower than the one below. If you want to stay up-to-date with the latest features daily I recommend the one below.

Numtide is respected organisation, more stars, contributors etc:
https://github.com/numtide/llm-agents.nix

I personally trust it more (especially for such power tools as agents).

Would be nice if it ends up here:
https://github.com/nix-community/

mbana · 3 months ago

Ditto. I'd like to see a NixOS package as well. FYI: I'm using home-manager. Please do include one. Would be lovely to see an official package make its way in.