From 60aeec7cfe92bb4db2a59bb7bae8d6ea45952778 Mon Sep 17 00:00:00 2001 From: m3tm3re
Date: Mon, 27 Apr 2026 12:43:56 +0200 Subject: [PATCH 1/5] feat(agents): add gitIdentity module - Renamed shared-options.nix to shared/shared-options.nix - Created shared/default.nix importing git-identity.nix and shared-options.nix - Created shared/git-identity.nix with gitIdentity option set: - enable: Toggle for agent git identity - name: Git author name (default: m3ta-chiron) - email: Git author email (default: m3ta-chiron@agentmail.to) - signingKey: Optional GPG signing key path - sshKey: SSH private key path for git push auth - Updated opencode.nix, pi.nix, claude-code.nix to import shared/default.nix - Restructured modules to follow proper Nix module syntax with imports at top level --- .../coding/agents/claude-code.nix | 27 ++++---- .../home-manager/coding/agents/opencode.nix | 53 ++++++++------- modules/home-manager/coding/agents/pi.nix | 24 ++++--- .../coding/agents/shared/default.nix | 8 +++ .../coding/agents/shared/git-identity.nix | 64 +++++++++++++++++++ .../agents/{ => shared}/shared-options.nix | 0 6 files changed, 129 insertions(+), 47 deletions(-) create mode 100644 modules/home-manager/coding/agents/shared/default.nix create mode 100644 modules/home-manager/coding/agents/shared/git-identity.nix rename modules/home-manager/coding/agents/{ => shared}/shared-options.nix (100%) diff --git a/modules/home-manager/coding/agents/claude-code.nix b/modules/home-manager/coding/agents/claude-code.nix index 2309125..d992e9c 100644 --- a/modules/home-manager/coding/agents/claude-code.nix +++ b/modules/home-manager/coding/agents/claude-code.nix @@ -3,14 +3,16 @@ lib, pkgs, ... -}: let - shared = import ./shared-options.nix {inherit lib;}; -in - with lib; let - cfg = config.coding.agents.claude-code; +}: { + imports = [ + ../shared/default.nix + ]; + + options.coding.agents.claude-code = let + shared = import ../shared/shared-options.nix {inherit lib;}; mcpCfg = config.programs.mcp or null; - in { - options.coding.agents.claude-code = { + in + with lib; { enable = mkEnableOption "Claude Code agent management via canonical agent.toml definitions"; agentsInput = shared.mkAgentsInputOption '' @@ -38,9 +40,12 @@ in }; }; - config = mkIf cfg.enable (let - agentsLib = (import ../../../../lib {inherit lib;}).agents; - + config = with lib; let + shared = import ../shared/shared-options.nix {inherit lib;}; + cfg = config.coding.agents.claude-code; + agentsLib = (import ../../../../lib {inherit lib;}).agents; + in + mkIf cfg.enable (let # Rendered agents + permissions (only if agentsInput is set) rendered = mkIf (cfg.agentsInput != null) ( agentsLib.renderForClaudeCode { @@ -86,4 +91,4 @@ in source = "${settingsJson}"; }; }); - } +} diff --git a/modules/home-manager/coding/agents/opencode.nix b/modules/home-manager/coding/agents/opencode.nix index 2f9ac77..5e0faa9 100644 --- a/modules/home-manager/coding/agents/opencode.nix +++ b/modules/home-manager/coding/agents/opencode.nix @@ -3,11 +3,15 @@ lib, pkgs, ... -}: let - shared = import ./shared-options.nix {inherit lib;}; -in - with lib; { - options.coding.agents.opencode = { +}: { + imports = [ + ../shared/default.nix + ]; + + options.coding.agents.opencode = let + shared = import ../shared/shared-options.nix {inherit lib;}; + in + with lib; { enable = mkEnableOption "OpenCode agent management via canonical agent.toml definitions"; agentsInput = shared.mkAgentsInputOption '' @@ -19,13 +23,17 @@ in modelOverrides = shared.mkModelOverridesOption; }; - config = mkIf config.coding.agents.opencode.enable { + config = with lib; let + shared = import ../shared/shared-options.nix {inherit lib;}; + cfg = config.coding.agents.opencode; + in + mkIf cfg.enable { # Rendered agent files symlinked to ~/.config/opencode/agents/ xdg.configFile."opencode/agents" = let - cfg = config.coding.agents.opencode; + agentsLib = (import ../../../../lib {inherit lib;}).agents; in mkIf (cfg.agentsInput != null) { - source = (import ../../../../lib {inherit lib;}).agents.renderForOpencode { + source = agentsLib.renderForOpencode { inherit pkgs; canonical = cfg.agentsInput.lib.loadAgents; modelOverrides = cfg.modelOverrides; @@ -33,23 +41,14 @@ in }; # Static config dirs from AGENTS repo - xdg.configFile."opencode/context" = let - cfg = config.coding.agents.opencode; - in - mkIf (cfg.agentsInput != null) { - source = "${cfg.agentsInput}/context"; - }; - xdg.configFile."opencode/commands" = let - cfg = config.coding.agents.opencode; - in - mkIf (cfg.agentsInput != null) { - source = "${cfg.agentsInput}/commands"; - }; - xdg.configFile."opencode/prompts" = let - cfg = config.coding.agents.opencode; - in - mkIf (cfg.agentsInput != null) { - source = "${cfg.agentsInput}/prompts"; - }; + xdg.configFile."opencode/context" = mkIf (cfg.agentsInput != null) { + source = "${cfg.agentsInput}/context"; + }; + xdg.configFile."opencode/commands" = mkIf (cfg.agentsInput != null) { + source = "${cfg.agentsInput}/commands"; + }; + xdg.configFile."opencode/prompts" = mkIf (cfg.agentsInput != null) { + source = "${cfg.agentsInput}/prompts"; + }; }; - } +} diff --git a/modules/home-manager/coding/agents/pi.nix b/modules/home-manager/coding/agents/pi.nix index c2c8176..d36892a 100644 --- a/modules/home-manager/coding/agents/pi.nix +++ b/modules/home-manager/coding/agents/pi.nix @@ -3,14 +3,16 @@ lib, pkgs, ... -}: let - shared = import ./shared-options.nix {inherit lib;}; -in - with lib; let - cfg = config.coding.agents.pi; +}: { + imports = [ + ../shared/default.nix + ]; + + options.coding.agents.pi = let + shared = import ../shared/shared-options.nix {inherit lib;}; mcpCfg = config.programs.mcp or null; - in { - options.coding.agents.pi = { + in + with lib; { enable = mkEnableOption "Pi agent management via canonical agent.toml definitions"; mcpServers = mkOption { @@ -202,7 +204,11 @@ in }; }; - config = mkIf cfg.enable (let + config = with lib; let + shared = import ../shared/shared-options.nix {inherit lib;}; + cfg = config.coding.agents.pi; + in + mkIf cfg.enable (let # Build settings.json by filtering out null values recursively filterNulls = attrs: lib.filterAttrs (_: v: v != null) ( @@ -281,4 +287,4 @@ in agentFiles ]; }); - } +} diff --git a/modules/home-manager/coding/agents/shared/default.nix b/modules/home-manager/coding/agents/shared/default.nix new file mode 100644 index 0000000..0a8e52c --- /dev/null +++ b/modules/home-manager/coding/agents/shared/default.nix @@ -0,0 +1,8 @@ +# Shared agent module exports +# Imports all shared modules for the coding.agents namespace. +{ + imports = [ + ./git-identity.nix + ./shared-options.nix + ]; +} diff --git a/modules/home-manager/coding/agents/shared/git-identity.nix b/modules/home-manager/coding/agents/shared/git-identity.nix new file mode 100644 index 0000000..acce2b5 --- /dev/null +++ b/modules/home-manager/coding/agents/shared/git-identity.nix @@ -0,0 +1,64 @@ +# Git identity module for agent commits. +# Sets GIT_AUTHOR_*, GIT_COMMITTER_*, and GIT_SSH_COMMAND environment variables. +{ + pkgs, + lib, + config, + ... +}: let + cfg = config.coding.agents.gitIdentity; +in { + options.coding.agents.gitIdentity = { + enable = lib.mkEnableOption '' + Agent Git identity for commits. When enabled, sets GIT_AUTHOR_* and + GIT_COMMITTER_* environment variables for consistent bot identity. + ''; + + name = lib.mkOption { + type = lib.types.str; + default = "m3ta-chiron"; + description = "Git user name for agent commits."; + example = "m3ta-chiron"; + }; + + email = lib.mkOption { + type = lib.types.str; + default = "m3ta-chiron@agentmail.to"; + description = "Git email for agent commits."; + example = "m3ta-chiron@agentmail.to"; + }; + + signingKey = lib.mkOption { + type = lib.types.nullOr lib.types.path; + default = null; + description = '' + Optional GPG signing key for verified commits. + Set to null to disable signing. + ''; + example = "/home/user/.gnupg/sign_key.gpg"; + }; + + sshKey = lib.mkOption { + type = lib.types.path; + description = '' + Path to SSH private key for git push authentication. + Use agenix-managed paths like /run/agenix/m3ta-chiron-ssh-key + for secure secret management. + ''; + example = "/run/agenix/m3ta-chiron-ssh-key"; + }; + }; + + config = lib.mkIf cfg.enable { + home.sessionVariables = { + # Git author/committer identity + GIT_AUTHOR_NAME = cfg.name; + GIT_AUTHOR_EMAIL = cfg.email; + GIT_COMMITTER_NAME = cfg.name; + GIT_COMMITTER_EMAIL = cfg.email; + + # SSH command for git push + GIT_SSH_COMMAND = "ssh -i ${cfg.sshKey} -o IdentitiesOnly=yes -o StrictHostKeyChecking=accept-new"; + }; + }; +} diff --git a/modules/home-manager/coding/agents/shared-options.nix b/modules/home-manager/coding/agents/shared/shared-options.nix similarity index 100% rename from modules/home-manager/coding/agents/shared-options.nix rename to modules/home-manager/coding/agents/shared/shared-options.nix -- 2.53.0 From 5edd0929d0a04339a48d880da30877867ada0b34 Mon Sep 17 00:00:00 2001 From: m3tm3re
Date: Mon, 27 Apr 2026 13:00:52 +0200 Subject: [PATCH 2/5] fix(agents): correct import paths for shared module --- modules/home-manager/coding/agents/claude-code.nix | 2 +- modules/home-manager/coding/agents/opencode.nix | 2 +- modules/home-manager/coding/agents/pi.nix | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/home-manager/coding/agents/claude-code.nix b/modules/home-manager/coding/agents/claude-code.nix index d992e9c..4fe7467 100644 --- a/modules/home-manager/coding/agents/claude-code.nix +++ b/modules/home-manager/coding/agents/claude-code.nix @@ -5,7 +5,7 @@ ... }: { imports = [ - ../shared/default.nix + ./shared/default.nix ]; options.coding.agents.claude-code = let diff --git a/modules/home-manager/coding/agents/opencode.nix b/modules/home-manager/coding/agents/opencode.nix index 5e0faa9..35efe41 100644 --- a/modules/home-manager/coding/agents/opencode.nix +++ b/modules/home-manager/coding/agents/opencode.nix @@ -5,7 +5,7 @@ ... }: { imports = [ - ../shared/default.nix + ./shared/default.nix ]; options.coding.agents.opencode = let diff --git a/modules/home-manager/coding/agents/pi.nix b/modules/home-manager/coding/agents/pi.nix index d36892a..fd7c1b6 100644 --- a/modules/home-manager/coding/agents/pi.nix +++ b/modules/home-manager/coding/agents/pi.nix @@ -5,7 +5,7 @@ ... }: { imports = [ - ../shared/default.nix + ./shared/default.nix ]; options.coding.agents.pi = let -- 2.53.0 From 6a8360305d9454ec3a1ed41c92470758931aadbb Mon Sep 17 00:00:00 2001 From: m3tm3re
Date: Mon, 27 Apr 2026 13:08:40 +0200 Subject: [PATCH 3/5] fix(agents): remove shared-options.nix from imports to avoid module system conflict --- modules/home-manager/coding/agents/shared/default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/home-manager/coding/agents/shared/default.nix b/modules/home-manager/coding/agents/shared/default.nix index 0a8e52c..eda92db 100644 --- a/modules/home-manager/coding/agents/shared/default.nix +++ b/modules/home-manager/coding/agents/shared/default.nix @@ -3,6 +3,5 @@ { imports = [ ./git-identity.nix - ./shared-options.nix ]; } -- 2.53.0 From cec0c31d91e76b48abc3907daf10db917d626dd1 Mon Sep 17 00:00:00 2001 From: m3tm3re
Date: Mon, 27 Apr 2026 13:11:11 +0200 Subject: [PATCH 4/5] fix(agents): correct shared-options.nix import path --- modules/home-manager/coding/agents/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/home-manager/coding/agents/default.nix b/modules/home-manager/coding/agents/default.nix index c0e3180..8e44f25 100644 --- a/modules/home-manager/coding/agents/default.nix +++ b/modules/home-manager/coding/agents/default.nix @@ -10,7 +10,7 @@ pkgs, ... }: let - shared = import ./shared-options.nix {inherit lib;}; + shared = import ./shared/shared-options.nix {inherit lib;}; cfg = config.coding.agents.skills; mkIf = lib.mkIf; in { -- 2.53.0 From fa339ae8ccdf1d3ae35b7571a9639f45952c725e Mon Sep 17 00:00:00 2001 From: m3tm3re
Date: Mon, 27 Apr 2026 13:17:11 +0200 Subject: [PATCH 5/5] fix(agents): correct shared-options.nix import paths from ../ to ./ --- modules/home-manager/coding/agents/claude-code.nix | 4 ++-- modules/home-manager/coding/agents/opencode.nix | 4 ++-- modules/home-manager/coding/agents/pi.nix | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/home-manager/coding/agents/claude-code.nix b/modules/home-manager/coding/agents/claude-code.nix index 4fe7467..f564927 100644 --- a/modules/home-manager/coding/agents/claude-code.nix +++ b/modules/home-manager/coding/agents/claude-code.nix @@ -9,7 +9,7 @@ ]; options.coding.agents.claude-code = let - shared = import ../shared/shared-options.nix {inherit lib;}; + shared = import ./shared/shared-options.nix {inherit lib;}; mcpCfg = config.programs.mcp or null; in with lib; { @@ -41,7 +41,7 @@ }; config = with lib; let - shared = import ../shared/shared-options.nix {inherit lib;}; + shared = import ./shared/shared-options.nix {inherit lib;}; cfg = config.coding.agents.claude-code; agentsLib = (import ../../../../lib {inherit lib;}).agents; in diff --git a/modules/home-manager/coding/agents/opencode.nix b/modules/home-manager/coding/agents/opencode.nix index 35efe41..07b4fc2 100644 --- a/modules/home-manager/coding/agents/opencode.nix +++ b/modules/home-manager/coding/agents/opencode.nix @@ -9,7 +9,7 @@ ]; options.coding.agents.opencode = let - shared = import ../shared/shared-options.nix {inherit lib;}; + shared = import ./shared/shared-options.nix {inherit lib;}; in with lib; { enable = mkEnableOption "OpenCode agent management via canonical agent.toml definitions"; @@ -24,7 +24,7 @@ }; config = with lib; let - shared = import ../shared/shared-options.nix {inherit lib;}; + shared = import ./shared/shared-options.nix {inherit lib;}; cfg = config.coding.agents.opencode; in mkIf cfg.enable { diff --git a/modules/home-manager/coding/agents/pi.nix b/modules/home-manager/coding/agents/pi.nix index fd7c1b6..99b762c 100644 --- a/modules/home-manager/coding/agents/pi.nix +++ b/modules/home-manager/coding/agents/pi.nix @@ -9,7 +9,7 @@ ]; options.coding.agents.pi = let - shared = import ../shared/shared-options.nix {inherit lib;}; + shared = import ./shared/shared-options.nix {inherit lib;}; mcpCfg = config.programs.mcp or null; in with lib; { @@ -205,7 +205,7 @@ }; config = with lib; let - shared = import ../shared/shared-options.nix {inherit lib;}; + shared = import ./shared/shared-options.nix {inherit lib;}; cfg = config.coding.agents.pi; in mkIf cfg.enable (let -- 2.53.0