{ config, pkgs, ... }: let dotfiles = "${config.home.homeDirectory}/.dotfiles"; in { home.username = "laptran"; home.homeDirectory = "/Users/laptran"; home.stateVersion = "24.11"; home.packages = with pkgs; [ ripgrep fd fzf jq lazygit neovim nerd-fonts.hack ]; fonts.fontconfig.enable = true; home.sessionVariables.EDITOR = "nvim"; programs.zsh = { enable = true; autosuggestion.enable = true; # ghost text from history syntaxHighlighting.enable = true; # commands turn green when valid initContent = '' bindkey '^f' autosuggest-accept ''; shellAliases = { ".." = "cd .."; ll = "ls -plart"; add = "git add ."; push = "git push"; pull = "git pull"; m = "git switch main"; # High-agency agent launchers (same idea across tools) cc = "claude --dangerously-skip-permissions"; co = "codex --full-auto"; gb = "grok --yolo"; }; }; programs.starship = { enable = true; settings = { add_newline = false; format = "$directory$git_branch$git_status$cmd_duration$line_break$character"; character = { success_symbol = "[❯](purple)"; error_symbol = "[❯](red)"; }; cmd_duration.format = "[$duration]($style) "; }; }; # Edit-in-place: the real file stays in my repo, the live path just points at it. home.file.".config/wezterm".source = config.lib.file.mkOutOfStoreSymlink "${dotfiles}/home/.config/wezterm"; home.file.".config/nvim".source = config.lib.file.mkOutOfStoreSymlink "${dotfiles}/home/.config/nvim"; home.file.".config/herdr".source = config.lib.file.mkOutOfStoreSymlink "${dotfiles}/home/.config/herdr"; # Claude Code settings (also read by Grok for permissions/compat) home.file.".claude/settings.json".source = config.lib.file.mkOutOfStoreSymlink "${dotfiles}/home/.claude/settings.json"; # Shared agent policy - one file, many harnesses home.file.".claude/CLAUDE.md".source = config.lib.file.mkOutOfStoreSymlink "${dotfiles}/home/AGENTS.md"; home.file.".codex/AGENTS.md".source = config.lib.file.mkOutOfStoreSymlink "${dotfiles}/home/AGENTS.md"; home.file.".config/opencode/AGENTS.md".source = config.lib.file.mkOutOfStoreSymlink "${dotfiles}/home/AGENTS.md"; home.file.".grok/AGENTS.md".source = config.lib.file.mkOutOfStoreSymlink "${dotfiles}/home/AGENTS.md"; # Grok Build native config home.file.".grok/config.toml".source = config.lib.file.mkOutOfStoreSymlink "${dotfiles}/home/.grok/config.toml"; }