# CLI FEATURES (home-manager)

**Shell and terminal tooling with Fish + Nushell dual configuration**

## OVERVIEW
8 CLI modules with integrated tooling across Fish and Nushell shells.

## STRUCTURE
```
cli/
├── default.nix      # Imports + shared tools (bat, eza, direnv)
├── fish.nix         # Fish shell + aliases
├── fzf.nix          # Fuzzy finder
├── nitch.nix        # System info tool
├── nushell.nix      # Nushell + aliases
├── secrets.nix      # Password-store integration
├── starship.nix     # Shell prompt
└── zellij.nix       # Terminal multiplexer
```

## WHERE TO LOOK

| Task | Location | Notes |
|------|----------|-------|
| Add CLI tool | default.nix home.packages | Check if shell integration needed |
| Shell aliases | fish.nix or nushell.nix | Kept in sync between shells |
| Prompt config | starship.nix | Uses nerd-fonts symbols |
| Secret access | secrets.nix | Agenix integration |

## CONVENTIONS

### Shell Integration Pattern
Tools with shell hooks enabled in both Fish and Nushell:
- **carapace**: Completions
- **zoxide**: Smart cd
- **eza**: ls replacement
- **direnv**: Directory environments
- **fzf**: Fuzzy finding

### NixOS Rebuild Aliases (both shells)
```
nr/nrs    - nixos-rebuild [switch]
snr/snrs  - sudo nixos-rebuild [switch]
hms       - home-manager switch
```

### Bat Theme
Custom `universal` theme generated from nix-colors palette in default.nix (lines 34-157).

### Secrets Integration
Fish/Nushell source `$HOME/.secrets` if `secrets.enable = true` (CLI secrets feature).

## ANTI-PATTERNS

- **DON'T** add aliases to only one shell - keep Fish/Nushell in sync
- **DON'T** use `programs.bash` - Nushell is default shell
- **DON'T** bypass carapace for completions - integrated by default

## NOTES

- zellij-ps custom package for project session management
- Default shell set to Nushell in hosts/common/default.nix
- Bat theme dynamically generated (no external theme files)
- lf file manager uses bat for previews
- Agenix CLI (agenix-cli) included for secret management
