Add claude-code module
This commit is contained in:
parent
4d33ba175f
commit
4131b5fe34
3 changed files with 105 additions and 2 deletions
93
modules/claude-code.nix
Normal file
93
modules/claude-code.nix
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
{ config, pkgs, lib, claude-code, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.programs.claude-code-custom;
|
||||
|
||||
# Detect system architecture and select appropriate package
|
||||
claudePackage = if pkgs.system == "aarch64-darwin" then
|
||||
claude-code.packages.aarch64-darwin.claude-code
|
||||
else if pkgs.system == "x86_64-linux" then
|
||||
claude-code.packages.x86_64-linux.claude-code
|
||||
else
|
||||
throw "Unsupported system for Claude Code: ${pkgs.system}";
|
||||
|
||||
# Default global permissions
|
||||
defaultPermissions = {
|
||||
allow = [
|
||||
"WebSearch"
|
||||
"WebFetch(domain:github.com)"
|
||||
"Read(/Users/yanlin/.claude/**)"
|
||||
"Read(/Users/yanlin/.claude/**)"
|
||||
];
|
||||
deny = [];
|
||||
ask = [];
|
||||
};
|
||||
|
||||
# Global settings configuration
|
||||
globalSettings = {
|
||||
model = cfg.model;
|
||||
};
|
||||
|
||||
# Global permissions configuration
|
||||
globalPermissions = if cfg.permissions != null then cfg.permissions else defaultPermissions;
|
||||
|
||||
# Default global memory content
|
||||
defaultGlobalMemory = ''
|
||||
# Global Claude Code Instructions
|
||||
- Never write shebang unless specifically requested
|
||||
|
||||
## NixOS
|
||||
- I use nixOS for all my computers (global config in ~/.config/nix) and nix-shell for project-specific runtime management
|
||||
- Check existing nix config when interacting with runtime environments
|
||||
'';
|
||||
|
||||
# Global memory configuration
|
||||
globalMemoryContent = if cfg.globalMemory != null then cfg.globalMemory else defaultGlobalMemory;
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
options.programs.claude-code-custom = {
|
||||
enable = mkEnableOption "Claude Code AI assistant";
|
||||
|
||||
model = mkOption {
|
||||
type = types.str;
|
||||
default = "sonnet";
|
||||
description = "Default model to use with Claude Code";
|
||||
};
|
||||
|
||||
permissions = mkOption {
|
||||
type = types.nullOr (types.attrsOf (types.listOf types.str));
|
||||
default = null;
|
||||
description = "Global permissions configuration. If null, uses default permissions.";
|
||||
};
|
||||
|
||||
globalMemory = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
description = "Global memory configuration for Claude Code. Content for ~/.claude/CLAUDE.md file. If null, uses default global memory.";
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
# Install Claude Code package
|
||||
home.packages = [ claudePackage ];
|
||||
|
||||
# Create global settings file
|
||||
home.file.".claude/settings.json" = {
|
||||
text = builtins.toJSON globalSettings;
|
||||
};
|
||||
|
||||
# Create global permissions file (optional, can be overridden per project)
|
||||
home.file.".claude/permissions.json" = {
|
||||
text = builtins.toJSON { permissions = globalPermissions; };
|
||||
};
|
||||
|
||||
# Create global memory file (always created with default or custom content)
|
||||
home.file.".claude/CLAUDE.md" = {
|
||||
text = globalMemoryContent;
|
||||
};
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue