Configuration for Ghostty terminal, Nushell shell, and Starship prompt.
- Nushell: Modern shell with structured data pipelines
- Ghostty: Fast, native, feature-rich terminal emulator
- Starship: Minimal, blazing-fast, customizable prompt
- CLI Tools: bat, fd, fzf, ripgrep, zoxide integration
- Interactive Navigation: FZF-powered file/directory browsing with previews
- Aliases: Organized by category (defaults, git, docker)
- Keybindings: Efficient keyboard shortcuts for common tasks
- Clean Structure: Modular configuration files for easy maintenance
- Catppuccin Mocha Theme: My favorite color scheme
Install these tools for full functionality:
# Core tools (required)
brew install nushell ghostty starship
# CLI tools
brew install bat fd fzf ripgrep zoxide
# Development Tools (optional; highly recommended)
brew install mise git-delta lazygit
# Editors - Neovim and Cursor
brew install neovim
# also install Cursor from https://cursor.sh~/Library/Application Support/nushell/ (this repository)
βββ README.md # This file
βββ .gitignore # Git ignore patterns
β
βββ config.nu # Main Nushell config
βββ env.nu # Environment variables
βββ aliases_defaults.nu # CLI tool aliases
βββ aliases_git.nu # Git-related aliases
βββ aliases_docker.nu # Docker-related aliases
βββ navigation.nu # FZF functions & keybindings
βββ integrations.nu # External tool loader
βββ integrations_setup.sh # Executable; auto-generates integrations directory
β
βββ integrations/ # Auto-generated (gitignored)
β βββ starship.nu # Generated by: starship init nu
β βββ zoxide.nu # Generated by: zoxide init nushell
β βββ mise.nu # Generated by: mise activate nu
β
βββ ghostty/
β βββ config # Ghostty terminal config
β
βββ starship/
βββ starship.toml # Full Starship config (symlinked to ~/.config/)
βββ starship.toml.minimal # Minimal Starship config (symlinked as starship.toml to ~/.config/)
Note: On Linux, this would be
~/.config/nushell/. Configs use$nu.default-config-dirwhich works on all platforms.
π Primary Platform: These instructions are for macOS where this config is actively used and tested. While the Nushell configs themselves are cross-platform, the setup script may need adjustments for Linux/Windows. Contributions for other platforms are very welcome!
Note: Ghostty will be configured in Step 3. For now, use Terminal.app, iTerm2, or another terminal emulator.
# View config and back it up
ls ~/Library/Application\ Support/nushell
mv ~/Library/Application\ Support/nushell ~/Library/Application\ Support/nushell.backup
# You should see both nushell and nushell.backup
ls ~/Library/Application Support/
# Stop existing nu processes (if any) and delete nushell
killall nu
cd ~/Library/Application\ Support/
rm -rf nushell # try sudo rm -rf nushell if permission denied<repo-url> e.g https://github.com/arvi/ghostinnu.git
git clone <repo-url> ~/Library/Application Support/nushell
cd ~/Library/Application Support/nushell
ls -lacd ~/Library/Application\ Support/nushell
# Use nushell - ignore sourced_file_not_found - will be auto-generated by script below
nu
# Make sure script is executable then setup integrations directory and symlinks
chmod +x integrations_setup.sh
./integrations_setup.sh# Restart nushell
# if not in nushell directory
# nu
# cd `~/Library/Application Support/nushell`
source config.nuClose and reopen Ghostty terminal to apply all configurations.
Explore usage guide or quickly check core tools which ghostty nu starship.
To use Nushell as your default terminal in Cursor and enable Alt keybindings:
- Open Cursor Settings (
Cmd+Shift+P) - Type and select "Open Settings (JSON)"
- Add (or modify) the following configuration:
{
// Set Nushell as default terminal
"terminal.integrated.defaultProfile.osx": "nu",
// Enable Alt keybindings
"terminal.integrated.macOptionIsMeta": true, // or "left"q
// Terminal profiles
"terminal.integrated.profiles.osx": {
"nu": {
"path": "/opt/homebrew/bin/nu", // Use path from "which nu"
"args": []
},
"bash": {
"path": "/bin/bash"
},
"zsh": {
"path": "/bin/zsh"
}
}
}What this does:
- Sets Nushell as your default terminal in Cursor
- Left and right Options (β₯) key works as Alt for keybindings (Alt+C, Alt+Z, etc.)
- Keeps bash and zsh available as alternative profiles
Note: Restart Cursor after making these changes.
If using Neovim inside Nushell, your shell configuration automatically applies. No additional setup needed!
| Keybinding | Action | Use Case |
|---|---|---|
Ctrl+R |
Search command history | Find previously used commands |
Ctrl+T |
Insert file path | Build commands: git add <Ctrl+T> |
Alt+C |
Browse & change directory | Navigate to any folder recursively |
Alt+Z |
Jump to frequent directory | Quick access to often-used dirs |
| Command | Description | Example |
|---|---|---|
f |
Browse files (returns path) | f β select β get filename |
fv |
Browse and open in nvim | fv β select β opens in nvim |
fo |
Browse and open with default app | fo β select β opens PDF/etc |
fc |
Browse and display contents | fc β select β shows with bat |
rgf "pattern" |
Search file contents (includes hidden) | rgf "TODO" β find in .eslintrc, etc. |
rgfa "pattern" |
Search everything (ignores .gitignore) | rgfa "API_KEY" β search node_modules too |
| Old | New | Description |
|---|---|---|
cat |
bat |
Syntax highlighting, line numbers |
find |
fd |
Faster, simpler, respects .gitignore |
grep |
rg |
Ripgrep - much faster searching |
cd |
z |
Zoxide - smart directory jumping |
# Navigation
.. # Up one directory (zoxide)
... # Up two directories
- # Jump to previous directory
zz # Interactive directory jump
# File viewing
cat file.txt # View with syntax highlighting (bat)
catl file.txt # View without decorations
cata file.txt # View with paging
# Finding files
fdf # Find files only
fdd # Find directories only
fda # Find all (including gitignored)
# Searching content
rg "pattern" # Search in files
rgi "pattern" # Case-insensitive search
rgl "pattern" # Just show filenames
rga "pattern" # Search all (including gitignored)
# Editors
v file.txt # Open in nvim
vi file.txt # Open in nvim
cs file.txt # Open in Cursor
cu file.txt # Open in Cursor
o file.pdf # Open with default app
# Utilities
ll # List with sorting
la # List all with sorting
ls dir1 dir2 # List contents of one or more directories
psf # Browse processes interactively
envf # Browse environment variablesCreate a new file (e.g., aliases_custom.nu):
# My custom aliases
alias myalias = echo "Hello!"Then source it in config.nu:
source ($nu.default-config-dir | path join "aliases_custom.nu")Edit navigation.nu and adjust the keybindings section. After changes:
source ($nu.default-config-dir | path join "config.nu")Edit config.nu and modify the $env.config.color_config section. Current theme is Catppuccin Mocha.
To update starship, zoxide, or mise, regenerate their integration files:
starship init nu | save -f ($nu.default-config-dir | path join "integrations/starship.nu")
zoxide init nushell | save -f ($nu.default-config-dir | path join "integrations/zoxide.nu")
mise activate nu | save -f ($nu.default-config-dir | path join "integrations/mise.nu")| Platform | Config Location |
|---|---|
| macOS | ~/Library/Application Support/nushell/ |
| Linux | ~/.config/nushell/ |
| Windows | %APPDATA%\nushell\ |
Use $nu.default-config-dir in configs for cross-platform compatibility.
Feel free to:
- Add custom aliases
- Improve documentation
- Extend CLI tools, themes, configs
- Report issues
- The
integrations/folder contains auto-generated files - don't edit them directly - Use
deffor complex functions with pipes,aliasfor simple replacements - Power functions require Enter to activate, keybindings are just key presses
- Aliases are organized by category for easy maintenance
- All configs use
$nu.default-config-dirfor cross-platform compatibility
Add to Ghostty config (~/.config/ghostty/config):
macos-option-as-alt = true
Note: Restart Ghostty after making this change.
Check if another keybinding conflicts:
$env.config.keybindings | where modifier == alt and keycode == char_cNote: If you see multiple entries with the same modifier+keycode, you have a conflict.
echo $nu.default-config-dir$env.config
$env.config.keybindings
$env.HOME