Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

programs.codex.enable

Whether to enable Lightweight coding agent that runs in your terminal.

Type: boolean

Default:

false

Example:

true

Declared by:

programs.codex.enableMcpIntegration

Whether to integrate the MCP server config from programs.mcp.servers into programs.codex.settings.mcp_servers.

Note: Settings defined in programs.mcp.servers are merged with programs.codex.settings.mcp_servers, with settings-based values taking precedence.

Type: boolean

Default:

false

Declared by:

programs.codex.package

The codex package to use.

Type: null or package

Default:

pkgs.codex

Declared by:

programs.codex.context

Global context for Codex.

The value is either:

  • Inline content as a string
  • A path to a file containing the content

The configured content is written to CODEX_HOME/AGENTS.md.

Type: strings concatenated with “\n” or absolute path

Default:

""

Example:

''
  - Always respond with emojis
  - Only use git commands when explicitly requested
''

Declared by:

programs.codex.marketplaces

Custom marketplaces for Codex plugins. The attribute name becomes the marketplace name, and the value is either:

  • A path to the marketplace directory
  • The marketplace package, whether a nix package or the output of a fetcher

Marketplaces are configured through CODEX_HOME/config.toml.

Type: attribute set of (package or absolute path)

Default:

{ }

Example:

{
  local-marketplace = ./my-local-marketplace;
  gh-marketplace = fetchFromGitHub {
    owner = "some-github-org";
    repo = "codex-marketplace";
    rev = "8a873a220b8427b25b03ce1a821593a24e098c34";
    sha256 = "5c2dce95122b5bb73fa547edabbb6c3061c2d193d11e51faecd4d22659e67279";
  };
}

Declared by:

programs.codex.plugins

List of plugins to use when running Codex. Each entry is either:

  • A path to the plugin directory
  • The plugin package, whether a nix package or the output of a fetcher Plugins are installed into Codex’s plugin cache and enabled through CODEX_HOME/config.toml.

Warning: If using a derivation as the source for a plugin, make sure that the derivation name matches the name of the plugin in the manifest file.

Type: list of (package or absolute path)

Default:

[ ]

Example:

[
  ./my-local-plugin
  (fetchFromGitHub {
    owner = "some-github-org";
    repo = "codex-plugin";
    rev = "779a68ebc2a75e4a184d2c87e5a43a758e6458a1";
    sha256 = "228fdd7e5908ea1d2f65218ecd9c71e1eefa0834d200d55fbb8bf8b5563acec0";
  })
]

Declared by:

programs.codex.profiles

Named Codex configuration profiles written to CODEX_HOME/<name>.config.toml.

These profiles are selected with codex --profile <name>. Codex 0.134.0 and later no longer reads profile settings from programs.codex.settings.profiles, and the top-level programs.codex.settings.profile selector is no longer supported.

Type: attribute set of (TOML value)

Default:

{ }

Example:

{
  deep-review = {
    model = "gpt-5.5";
    model_reasoning_effort = "xhigh";
    approval_policy = "on-request";
    sandbox_mode = "workspace-write";
  };
}

Declared by:

programs.codex.rules

Codex rules files to manage under CODEX_HOME/rules/.

The attribute name becomes the filename, with a .rules extension added automatically. The value is either:

  • Inline content as a string
  • A path to an existing rules file

This is useful for declaratively managing persistent prefix_rule() definitions, including the default default.rules allow-list Codex writes when you accept recurring approvals interactively.

Type: attribute set of (strings concatenated with “\n” or absolute path)

Default:

{ }

Example:

{
  default = "prefix_rule(pattern = [\"nix\", \"build\"], decision = \"allow\")\n";
  github = ./codex/github.rules;
}

Declared by:

programs.codex.settings

Configuration written to CODEX_HOME/config.toml (0.2.0+) or ~/.codex/config.yaml (<0.2.0). Per default CODEX_HOME defaults to ~/.codex. See https://github.com/openai/codex/blob/main/codex-rs/config.md for supported values.

Type: null or TOML value

Default:

{ }

Example:

{
  model = "gemma3:latest";
  model_provider = "ollama";
  model_providers = {
    ollama = {
      name = "Ollama";
      baseURL = "http://localhost:11434/v1";
      envKey = "OLLAMA_API_KEY";
    };
  };
  mcp_servers = {
    context7 = {
      command = "npx";
      args = [
        "-y"
        "@upstash/context7-mcp"
      ];
    };
  };
}

Declared by:

programs.codex.skills

Custom skills for Codex.

This option can be either:

  • An attribute set defining skills
  • A path to a directory containing skill folders

If an attribute set is used, the attribute name becomes the skill directory name, and the value is either:

  • Inline content as a string (creates a generated skill directory at <skills-dir>/<name>/)
  • A path to a file (creates a generated skill directory at <skills-dir>/<name>/)
  • A path to a directory (symlinks <skills-dir>/<name>/ to that directory)

If a path is used, it is expected to contain one folder per skill name, each containing a SKILL.md. Each top-level skill entry is symlinked into <skills-dir>/, leaving <skills-dir>/ itself as a normal directory so unmanaged skills can coexist.

Home Manager manages skills under CODEX_HOME/skills (typically ~/.codex/skills, or ~/.config/codex/skills when home.preferXdgDirectories is enabled).

Type: (attribute set of (strings concatenated with “\n” or absolute path)) or absolute path

Default:

{ }

Example:

{
  pdf-processing = ''
    ---
    name: pdf-processing
    description: Extract text and tables from PDF files, fill forms, merge documents. Use when working with PDF files or when the user mentions PDFs, forms, or document extraction.
    ---

    # PDF Processing

    ## Quick start

    Use pdfplumber to extract text from PDFs:

    ```python
    import pdfplumber

    with pdfplumber.open("document.pdf") as pdf:
        text = pdf.pages[0].extract_text()
    ```
  '';
  data-analysis = ./skills/data-analysis;
}

Declared by: