{ inputs, pkgs, lib, config, ... }: let enabled = config.mod.ai.enable; # Shared statusline: show the logged-in account email. statusLine = { type = "command"; command = "jq -r '.oauthAccount.emailAddress' \"$CLAUDE_CONFIG_DIR/.claude.json\""; }; # PostToolUse hook: echoes a JSON payload that injects a comment-policy # reminder as additional context after every Write/Edit. commentPolicyPayload = builtins.toJSON { suppressOutput = true; hookSpecificOutput = { hookEventName = "PostToolUse"; additionalContext = "Comment policy: default to ZERO code comments. Review what you just wrote and delete any comment that narrates the change, restates the code, states the obvious, is tangential, or explains design/why rationale -- put that reasoning in your chat reply instead, never in the code. Never use em dashes or en dashes anywhere in file content; use a plain ASCII hyphen or reword."; }; }; settings = builtins.toJSON { inherit statusLine; theme = "dark"; editorMode = "vim"; cleanupPeriodDays = 3650; attribution = { commit = ""; pr = ""; }; hooks = { PostToolUse = [ { matcher = "Write|Edit"; hooks = [ { type = "command"; command = "echo ${lib.escapeShellArg commentPolicyPayload}"; } ]; } ]; }; }; in { options = { mod.ai = { enable = lib.mkEnableOption "enable ai module"; }; }; config = lib.mkMerge [ { home-manager.sharedModules = [ inputs.ct.homeManagerModules.default ]; } (lib.mkIf enabled { home-manager.users.alex = { home.packages = [ pkgs.claude-code ]; programs.zsh.shellAliases = { claude = "pclaude"; wclaude = "CLAUDE_CONFIG_DIR=$HOME/.claude-work command claude"; pclaude = "CLAUDE_CONFIG_DIR=$HOME/.claude-personal command claude"; }; home.file.".claude-work/settings.json".text = settings; home.file.".claude-personal/settings.json".text = settings; programs.ct = { enable = true; web.enable = true; settings.profiles = { work.configDir = "/home/alex/.claude-work"; personal.configDir = "/home/alex/.claude-personal"; }; }; }; }) ]; }