Skip to content

ThibaultJRD/dotfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

210 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Dotfiles

License: MIT macOS Shell Theme

Terminal screenshot

Automated macOS terminal setup β€” tmux, neovim, and 40+ CLI tools with a consistent Catppuccin theme.


⚑ Quick Start

git clone https://github.com/ThibaultJRD/dotfiles.git
cd dotfiles
./install.sh

Open Kitty, run tmux, you're ready. The script backs up existing configs before making changes.


πŸ“¦ What's Included

Category Tool Description Launch
Terminal Kitty GPU-accelerated terminal kitty
Shell Zsh + Oh My Zsh System default shell default
Shell Nushell Structured data shell (tmux default) nu
Prompt Starship Cross-shell prompt with vi mode indicators auto
Multiplexer Tmux Terminal multiplexer with 12+ plugins tmux
Sessions sesh Smart tmux session manager with project layouts Prefix + o
Editor Neovim (LazyVim) Extensible text editor v
Files Yazi Terminal file manager with previews y
Git Lazygit Git TUI lg
Git gh GitHub CLI gh
Search fzf Fuzzy finder Ctrl+T
Search ripgrep Fast text search rg
Search fd Fast file finder fd
Navigation Zoxide Smart cd (replaces cd) cd
History Atuin Shell history with fuzzy search Ctrl+R
Viewer bat Syntax-highlighted cat cat
Viewer eza Modern ls with icons ls
Viewer glow Markdown renderer glow
Viewer jq / yq JSON / YAML processors jq, yq
Viewer delta Syntax-highlighted git diffs auto
Monitor btop System resource monitor btop
Completions Carapace Multi-shell completion engine auto
Dev Node.js via n JavaScript runtime node
Dev Go Go language go
Dev Rust via rustup Rust toolchain cargo
Dev pnpm / yarn / bun JS package managers p
Docker Lazydocker Docker TUI lazydocker
Utility Lazyprune Find and delete heavy cache dirs + kill processes by port lazyprune

πŸ–₯️ Tmux β€” The Core Workflow

Tmux is the hub of this setup. Everything runs inside it: sessions persist across restarts, panes navigate seamlessly into Neovim, and the status bar monitors your system.

πŸš€ Getting Started

tmux                      # new session
tmux new -s myproject     # new named session
tmux a                    # attach to last session

The prefix is Ctrl+s β€” all tmux shortcuts start with it. Press Prefix + Space to open the which-key help menu and discover all available bindings.

πŸ“‹ Session Management

Key Action
Prefix + o Sesh β€” fuzzy session picker (tmux sessions, zoxide dirs, configs)
Prefix + Tab Switch to last session
Prefix + d Detach from current session
Prefix + $ Rename session

Sessions are managed by sesh. Connecting to a git repo automatically creates a 3-window layout (lazygit, nvim+terminal, AI terminal). Non-git directories get a simple terminal. The sesh.toml config is in sesh/.config/sesh/.

πŸͺŸ Windows and Panes

Key Action
Prefix + c New window (preserves current path)
Prefix + | Split pane horizontally
Prefix + - Split pane vertically
Ctrl+h/j/k/l Navigate between panes and Neovim splits
Prefix + H/J/K/L Resize pane (5px increments, repeatable)
Prefix + < Swap window left
Prefix + > Swap window right

Pane navigation uses vim-tmux-navigator β€” Ctrl+h/j/k/l moves between tmux panes and Neovim splits seamlessly, no prefix needed.

⚑ Power Features

Key Action Plugin
Prefix + f Floating terminal overlay (80% screen) tmux-floax
Prefix + T Vimium-style copy hints (lowercase = copy, UPPERCASE = paste) tmux-thumbs
Prefix + u Fuzzy-find and open URLs from terminal output tmux-fzf-url
Prefix + Space Interactive keybinding help tmux-which-key
Prefix + r Reload tmux configuration built-in

Mouse is enabled for pane selection and resizing.

πŸ“Š Status Bar

Top-positioned, showing: session name | windows | IP | CPU | RAM | battery (if available) | date/time

🐚 Default Shell

Tmux launches Nushell by default. To switch to Zsh, edit tmux/.config/tmux/tmux.conf:

# Change this line:
set -g default-command /opt/homebrew/bin/nu
# To:
set -g default-command /bin/zsh

Then reload with Prefix + r.

πŸ”Œ Tmux Plugins

Plugin Purpose
tmux-sensible Sane defaults
tmux-yank System clipboard integration
vim-tmux-navigator Seamless pane/split navigation
catppuccin/tmux Catppuccin Macchiato theme
tmux-nerd-font-window-name Nerd Font icons in window names
tmux-which-key Keybinding discovery
tmux-cpu CPU monitoring
tmux-battery Battery status
tmux-primary-ip Network IP display
tmux-floax Floating terminal pane
tmux-fzf-url URL picker
tmux-thumbs Copy hints
sesh Smart session manager (standalone CLI)

Plugins are managed by TPM and installed automatically on first launch. To manually install: Prefix + I.


⌨️ Shell Keybindings

These work in both Zsh and Nushell:

Key Action
Ctrl+T fzf file picker with bat/eza preview
Ctrl+G Zoxide interactive directory picker with tree preview
Ctrl+R Atuin history search (fuzzy, vi mode)
Esc Toggle vi mode (cursor changes: beam = insert, block = normal)

Vi mode is enabled in both shells with cursor shape feedback.


πŸ”— Aliases

Shared (Zsh + Nushell)

Alias Expands to Description
cat bat Syntax-highlighted file viewing
lt eza --tree (2 levels) Tree view
v nvim Neovim
lg lazygit Git TUI
p pnpm Package manager
y yazi (cd-on-exit) File manager

Zsh only

Alias Expands to Description
ls eza (icons, git, colors) Enhanced file listing
la eza -la (grouped dirs first) All files with details

Nushell only

Alias Expands to Description
la ls -a (Nushell built-in) All files
ll eza -la (grouped dirs first) All files with details

Git Aliases (Nushell only)

Alias Command Description
gst git status Status
gc git commit -m Commit with message
gca git commit -a -m Commit all with message
gp git push origin HEAD Push current branch
gpu git pull origin Pull
glog git log --graph (formatted) Visual commit graph
gdiff git diff Show diff
gco git checkout Checkout
gb git branch List branches
gba git branch -a List all branches
ga git add -p Interactive patch staging
gadd git add Stage files
gcoall git checkout -- . Discard all changes
gr git remote Remotes
gre git reset Reset

πŸ› οΈ Custom Functions

y [args] β€” Opens Yazi file manager. On exit, your shell cds to the last directory you browsed.


✏️ Neovim

Built on LazyVim with these additions:

Plugin Purpose
copilot.vim GitHub Copilot
vim-tmux-navigator Seamless tmux pane navigation
snacks.nvim File picker with hidden files
tokyonight.nvim Colorscheme

Ctrl+h/j/k/l navigates between Neovim splits and tmux panes β€” same keybindings, zero context switch. maplocalleader is set to ΓΉ. ESLint and Prettier integration enabled.


πŸ“ File Management β€” Yazi

Launch with y. Uses vim-style keybindings:

Key Action
h/j/k/l Navigate
Enter Open file
y / x / p Copy / Cut / Paste
d Move to trash
D Permanent delete
a Create file/directory
r Rename
s Search by name (fd)
S Search by content (rg)
z Jump with fzf
Z Jump with zoxide
Space Select / deselect
t New tab
. Toggle hidden files
w Task manager

Previews supported for: images (ImageMagick), videos (ffmpeg), PDFs (poppler), SVGs (resvg), archives (7zip), code (bat with syntax highlighting).


🎨 Theme

Catppuccin across the entire stack:

  • Mocha: Kitty, Starship, Yazi, Lazygit, bat, btop, Atuin, Nushell
  • Macchiato: Tmux, fzf
  • TokyoNight: Neovim (LazyVim default β€” change in nvim/lua/plugins/tokyonight.lua)

Vi mode is enabled across all tools with cursor shape feedback:

  • Insert mode: beam cursor (|)
  • Normal mode: block cursor (β–ˆ)

Nerd Fonts installed:

  • CaskaydiaCove β€” primary font (Cascadia Code with Nerd Font icons)
  • VictorMono β€” italic font for code comments
  • JetBrains Mono NL β€” symbol fallback
  • Symbols Only β€” icon-only fallback

πŸ”§ Customization

Change the theme

# Starship β€” edit starship/.config/starship/starship.toml
palette = 'your_palette'

# Kitty β€” edit kitty/.config/kitty/kitty.conf
include your-theme.conf

# Tmux β€” edit tmux/.config/tmux/tmux.conf
set -g @catppuccin_flavor 'your_flavor'

Add custom aliases

# Create a file in the Zsh custom config directory (preserved across reinstalls)
echo 'alias myalias="my command"' > ~/.config/zsh/conf.d/custom.zsh

Add new tools

  1. Add to Brewfile: brew "your-tool"
  2. Create config: mkdir -p your-tool/.config/your-tool
  3. Update install.sh if symlinks are needed
  4. Run ./install.sh

πŸ“₯ Installation Details

Prerequisites

  • macOS Sonoma (14.0) or later
  • Git and internet connection

What install.sh Does

  1. Installs Homebrew if missing
  2. Installs Oh My Zsh with plugins (syntax-highlighting, autosuggestions, completions, history-substring-search)
  3. Runs brew bundle to install all packages from Brewfile
  4. Installs Rust toolchain and Lazyprune
  5. Creates symlinks from dotfiles to ~/.config/ for each tool
  6. Installs Node.js LTS via n, Bun, and Atuin
  7. Builds bat syntax theme cache

Existing config files are backed up with a timestamp suffix before symlinking.

Reinstall

./install.sh    # safe to re-run β€” backs up existing files, skips installed packages

🩺 Troubleshooting

Icons not displaying β€” Make sure Kitty (or your terminal) is using a Nerd Font. Restart the terminal after font installation.

Tmux plugins not installed β€” Press Prefix + I (capital I) inside tmux to trigger TPM plugin installation.

Tool not found after install β€” Restart your terminal or run source ~/.zshrc. Check Homebrew health with brew doctor.

Config not applied β€” Verify symlinks exist: ls -la ~/.config/. Re-run ./install.sh if needed.


License

MIT β€” see LICENSE.

About

A modern, automated dotfiles setup for macOS that creates a beautiful and productive terminal environment. Features a consistent Catppuccin theme, powerful CLI tools, and seamless integration between all components.

Topics

Resources

License

Stars

Watchers

Forks

Contributors