Skip to content
Draft
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
44 changes: 43 additions & 1 deletion modules/ai.nix
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,47 @@ let
command = "${kagiWrapper}";
};
};

codexMcpConfig = (pkgs.formats.toml { }).generate "codex-mcp.toml" {
mcp_servers = mcpServers;
};

# Keep Codex's main config writable so it can persist runtime state such as
# project and hook trust. Home Manager owns only the marked MCP section.
codexConfigSetup = ''
config_dir="''${CODEX_HOME:-$HOME/.codex}"
config_file="$config_dir/config.toml"
mkdir -p "$config_dir"

if [ -L "$config_file" ]; then
tmp_file="$(${pkgs.coreutils}/bin/mktemp "$config_file.tmp.XXXXXX")"
${pkgs.coreutils}/bin/cp -L "$config_file" "$tmp_file"
${pkgs.coreutils}/bin/rm "$config_file"
${pkgs.coreutils}/bin/mv "$tmp_file" "$config_file"
elif [ ! -e "$config_file" ]; then
${pkgs.coreutils}/bin/touch "$config_file"
fi

stripped_file="$(${pkgs.coreutils}/bin/mktemp "$config_file.stripped.XXXXXX")"
tmp_file="$(${pkgs.coreutils}/bin/mktemp "$config_file.tmp.XXXXXX")"

${pkgs.gawk}/bin/awk '
$0 == "# BEGIN home-manager managed mcp_servers" { skip = 1; next }
$0 == "# END home-manager managed mcp_servers" { skip = 0; next }
!skip { print }
' "$config_file" > "$stripped_file"

{
${pkgs.coreutils}/bin/cat "$stripped_file"
printf '\n# BEGIN home-manager managed mcp_servers\n'
${pkgs.coreutils}/bin/cat ${codexMcpConfig}
printf '# END home-manager managed mcp_servers\n'
} > "$tmp_file"

${pkgs.coreutils}/bin/mv "$tmp_file" "$config_file"
${pkgs.coreutils}/bin/rm -f "$stripped_file"
${pkgs.coreutils}/bin/chmod 600 "$config_file"
'';
in
{
options.profiles.ai = {
Expand All @@ -68,7 +109,6 @@ in
enable = true;
package = codex;
settings = null;
profiles.home-manager.mcp_servers = mcpServers;
};

programs.claude-code = {
Expand Down Expand Up @@ -110,6 +150,8 @@ in
playwright-cli
];

home.activation.codexConfig = lib.hm.dag.entryAfter [ "writeBoundary" ] codexConfigSetup;

home.file = {
".codex/skills/audit-nix-app-updates" = {
source = ../config/codex/skills/audit-nix-app-updates;
Expand Down
2 changes: 1 addition & 1 deletion modules/shell.nix
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,7 @@ in
dc = "dclaude";
dcc = "dclaude --continue";
dcr = "dclaude --resume";
cdx = "codex --profile home-manager --yolo";
cdx = "codex --yolo";

wtrm = "wt remove --force";
wtrmm = "wt remove --force --no-hooks -D";
Expand Down
8 changes: 4 additions & 4 deletions pkgs/hermes-desktop/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
}:

let
version = "0.17.0";
rev = "413ed6b9df18f22152d26b6de4093280dcb2b16b";
version = "0.18.2";
rev = "9de9c25f620ff7f1ce0fd5457d596052d5159596";
in
buildNpmPackage {
pname = "hermes-desktop";
Expand All @@ -17,11 +17,11 @@ buildNpmPackage {
owner = "NousResearch";
repo = "hermes-agent";
inherit rev;
hash = "sha256-wek7P9tdrqRk/ArxBXt/X3BJpQ+wcnKFqG0S+ryx5p0=";
hash = "sha256-RieWkLWEn21aamFvQTTnJwwQl00JJGgp3LvY3D3G3jQ=";
};

npmWorkspace = "apps/desktop";
npmDepsHash = "sha256-RqQyEqzeSlywA83+S9d0KXBnirIVPNFixXCyaE523zo=";
npmDepsHash = "sha256-qDXGL/INHPW0pTF4SRVL1dS5XVh2X85dEE4JhrAQeqU=";

env = {
ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
Expand Down