pinwheel: Manage claude settings through nix

This commit is contained in:
Alexander Heldt
2026-08-16 14:19:58 +02:00
parent 8eefa99ca8
commit fbf8db1558
+38
View File
@@ -6,6 +6,41 @@
}: }:
let let
enabled = config.mod.ai.enable; 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";
hooks = {
PostToolUse = [
{
matcher = "Write|Edit";
hooks = [
{
type = "command";
command = "echo ${lib.escapeShellArg commentPolicyPayload}";
}
];
}
];
};
};
in in
{ {
options = { options = {
@@ -24,6 +59,9 @@ in
wclaude = "CLAUDE_CONFIG_DIR=$HOME/.claude-personal claude"; wclaude = "CLAUDE_CONFIG_DIR=$HOME/.claude-personal claude";
pclaude = "CLAUDE_CONFIG_DIR=$HOME/.claude-work claude"; pclaude = "CLAUDE_CONFIG_DIR=$HOME/.claude-work claude";
}; };
home.file.".claude-work/settings.json".text = settings;
home.file.".claude-personal/settings.json".text = settings;
}; };
}; };
} }