
A powerful Raycast extension for managing your ~/.zshrc configuration file
View, organize, and edit your shell aliases, exports, functions, and more with an intuitive interface.
Features • Commands • Usage • Configuration • Development • Contributing
| 🏠 | Unified Home | One search-first surface: recents, tools with a live health badge, category counts, and discovery — typing searches your whole config at once |
| 🖥️ | Alias Management | Browse, add, edit, and search aliases organized by sections with full validation |
| 📦 | Export Management | Manage environment variable exports with search by variable name or value |
| ⚙️ | Advanced Config | View and manage functions, plugins, sources, evals, setopts, PATH entries, and keybindings |
| 🔍 | Smart Search | Search across all content types with real-time filtering by section, name, command, or value |
| 📝 | Section Management | View zshrc content organized by logical sections with detailed breakdowns |
| 💾 | Backup & Restore | Automatic backups before edits with one-click restore functionality |
| ↩️ | Undo History | Session-based undo/redo for all edit operations |
The Zshrc Manager command opens a single home surface. At rest it shows an overview; press ⏎ on a category to drill into a focused view (Esc returns home), or just start typing to search everything at once.
| Surface | What it holds | Reach it by |
|---|---|---|
| 🕘 Recently Managed | Every entry you've touched here, ranked by frecency | Browse, at rest |
| 🏥 Health Check | Duplicates, conflicts and broken sources, with a live issue badge | Tools row or ⌘⇧H |
| 💾 Backup Manager | Restore or diff a previous version | Tools row or ⌘⇧B |
| ↩️ History | Undo and redo recent changes | Tools row or ⌘⇧Y |
| 📁 Browse | Sections, Aliases, Exports, Functions, Plugins, Sources, Evals, Setopts, PATH, FPATH, Keybindings — each with a count, each a focused view | ⏎ on a category |
| 📚 Discover | Curated alias collections you can add | Discover row, ⌘⇧L, or inline under "Available to Add" while searching |
⌘⇧D toggles the detail paneCmd+N or click "Add New Alias"# Example: Add a quick git status alias
alias gs='git status'
Cmd+N to add a new export# Example: Set your default editor
export EDITOR=code
The extension automatically detects sections using these patterns:
| Format | Example | Description |
|---|---|---|
| Labeled | # Section: Name | Simple labeled sections |
| Dashed | # --- Name --- # | Dashed delimiter sections |
| Bracketed | # [Name] | Bracketed sections |
| Hash | ## Name | Double-hash sections |
| Tags | # @start Name / # @end Name | Custom start/end tags |
| Functions | myFunc() { ... } | Function definitions |
Configure custom patterns in Raycast Preferences:
# Example: Match "# My Section"
^#\s+(.+)$
# Start pattern
^#\s*start\s+(.+)$
# End pattern
^#\s*end\s+(.+)$
(...) for the section name^)| Shortcut | Action |
|---|---|
Cmd+N | Add new alias/export |
Cmd+R | Refresh data |
Cmd+O | Open ~/.zshrc in default editor |
Cmd+C | Copy selected content |
Cmd+Z | Undo last change |
Cmd+Shift+Z | Redo |
| Requirement | Details |
|---|---|
| 🐚 Shell | Zsh (Z shell) |
| 📄 File | ~/.zshrc configuration file |
| 🔐 Permissions | Read/write access to home directory |
| Scenario | Behavior |
|---|---|
| 📁 File Not Found | Graceful fallback with cached data |
| 🔒 Permission Errors | Clear error messages with suggestions |
| 📏 Large Files | Automatic content truncation (1MB limit) |
| ✅ Validation | Input validation for aliases and exports |
| 💾 Backups | Automatic .zshrc.bak before writes |
# Install dependencies
npm install
# Development mode
npm run dev
# Build
npm run build
# Testing
npm run test
npm run test:coverage
# Linting
npm run lint
npm run fix-lint
src/
├── __tests__/ # Test files (mirror src structure)
├── components/ # Reusable UI components
├── data/ # Static data (templates)
├── hooks/ # React hooks for state management
├── lib/ # Core business logic
├── types/ # TypeScript type definitions
├── utils/ # Pure utility functions
└── *.tsx # UI components (commands)
We welcome contributions!
MIT License
| Resource | Link |
|---|---|
| 🐛 Issues | GitHub Issues |
| 📚 Documentation | Raycast Developer Docs |
| 📝 Changelog | CHANGELOG.md |
| ⚠️ Limitations | LIMITATIONS.md |
Made with ❤️ for the Raycast community
Search, browse, and manage your ~/.zshrc configuration from one home surface
Health check, backups and change history for your zshrc
Esc returns home instead of quitting the command, and the two-search-boxes-at-once layout is goneAll / With Warnings / Without Warnings dropdown that the view-switcher dropdown had been occupying since launch⌘⇧D toggles the pane everywhere; row subtitles render only while the pane is hidden, since the narrow column truncates them/opt/homebrew/bin and /usr/local/bin become homebrew/bin and local/bin); commands reduce to the program name; nothing is invented to fill a slot⌘⇧L) away everywherecurrentColor (which rendered black). Node sections now resolve to the Node.js brand icon instead of a folderplugins=(…), path+=(…) and fpath=(…) array declarations — the standard Oh My Zsh layout — are now parsed everywhere; sections and search previously missed themexport/typeset -x/declare -x, += string append, array append/set, $PATH:-relative, and plain assignment) are recognized consistently across every surfacebindkey -e that the Keybindings view has nothing to show for$(…) command substitutions stay one element with their text kept verbatim; inline comments inside array bodies are ignored## group, # Section: X) no longer splits the array — per-section counts stay consistent with the views, and adding an item can no longer insert a line into the middle of an arraySource Exists fact; plugin install checks honor ZSH_CUSTOM/ZSH set as plain (unexported) assignments; $HOMEBREW_PREFIX-style variables are no longer mis-expanded as $HOMEShadows row with the executable's path when an alias masks something on PATH (scanning the environment PATH plus PATH entries declared in the config — no subprocess involved)Source Exists row — Yes, Missing, or Unknown. Paths that cannot be expanded without a shell (e.g. ${XDG_CACHE_HOME:-$HOME/.cache}) deliberately report Unknown rather than a false MissingInstalled row, checked against the Oh My Zsh plugins directories ($ZSH_CUSTOM first, then $ZSH or ~/.oh-my-zsh as the base). When no Oh My Zsh installation exists, the answer is Unknown — absence of OMZ says nothing about other plugin managersLIMITATIONS.md no longer claims extensions cannot spawn child processes (they can — the limitation is the absence of a terminal UI), and the file-watching limitation is narrowed to background watching: fs.watch works while a command is open⌘C) and Copy Name (⌘⇧C) actions on every entry in every view, replacing the mislabeled "Copy Name/Value" action that only copied the name⌘U) and a Secret tag; copy actions always copy the real value, copy it concealed (kept out of clipboard-manager history), and never echo it in the confirmation toast~/.zshrc or refreshes instead of triggering Undo Last ChangesanitizeMarkdown and escapeShellContent helpers, six unused enums, and an unreachable section list view with its item componentsPATH= line); validation findings now show a confirmation dialog with Save Anyway / Cancel instead of failing the write