claude-code: mark hook scripts executable

Inline hooks are scripts, so write them with the executable bit set. Add NMT assertions covering default and custom config directories.

(cherry picked from commit d0af9b8bf3)
This commit is contained in:
Austin Horstman
2026-06-01 15:12:42 -05:00
parent 4baa8ac595
commit e28654b710
3 changed files with 11 additions and 4 deletions

View File

@@ -558,10 +558,14 @@ in
name: content: nameValuePair "${cfg.configDir}/${subdir}/${name}.md" (mkSourceEntry content)
) attrs;
mkTextEntries =
subdir: attrs:
mkHookEntries =
attrs:
lib.mapAttrs' (
name: content: nameValuePair "${cfg.configDir}/${subdir}/${name}" { text = content; }
name: content:
nameValuePair "${cfg.configDir}/hooks/${name}" {
text = content;
executable = true;
}
) attrs;
mkRecursiveDirAttrs =
@@ -727,7 +731,7 @@ in
recursive = true;
};
})
(mkTextEntries "hooks" cfg.hooks)
(mkHookEntries cfg.hooks)
(lib.optionalAttrs (builtins.isAttrs cfg.skills) (lib.mapAttrs' mkSkillEntry cfg.skills))
(mkMarkdownEntries "output-styles" cfg.outputStyles)
];

View File

@@ -66,6 +66,7 @@
assertFileExists home-files/.config/claude/commands/hello.md
assertFileExists home-files/.config/claude/rules/style.md
assertFileExists home-files/.config/claude/hooks/pre-edit
assertFileIsExecutable home-files/.config/claude/hooks/pre-edit
assertFileExists home-files/.config/claude/output-styles/concise.md
assertFileExists home-files/.config/claude/skills/pdf/SKILL.md

View File

@@ -135,9 +135,11 @@
assertFileContent home-files/.claude/commands/commit.md ${./expected-commit}
assertFileExists home-files/.claude/hooks/pre-edit
assertFileIsExecutable home-files/.claude/hooks/pre-edit
assertFileRegex home-files/.claude/hooks/pre-edit "About to edit file"
assertFileExists home-files/.claude/hooks/post-commit
assertFileIsExecutable home-files/.claude/hooks/post-commit
assertFileRegex home-files/.claude/hooks/post-commit "Committed with message"
'';
}