Configuration files for my development environment. I use Neovim and VS Code as text editors, Zsh as my shell, and Ghostty as my terminal.
These files are shared between a macOS laptop and an Ubuntu VPS. A few sections auto-detect the platform so the same source works on both:
zsh/.zshrc: the lazy-load conda function looks for miniconda3 (Mac) or miniforge3 (Linux) and sources whichever exists. QUARTO_PYTHON is set the same way.tmux/tmux.conf: copy-command is chosen at tmux start time from pbcopy (macOS), wl-copy (Wayland Linux), or xclip (X11 Linux), whichever is on PATH. The TPM run line only fires if TPM is installed, so machines without it start cleanly.Anything Mac-only that isn’t behind a guard (some Oh My Zsh plugins, the iTerm2 shell integration, the $HOME/Library/TinyTeX/bin/universal-darwin PATH entry) is intentionally inert on Linux — the file checks ([ -f ... ] &&) or path deduplication keep it harmless.
dotfiles/
├── gemini/ # Gemini MCP settings
├── ghostty/ # Ghostty terminal configuration
├── iterm2-themes/ # iTerm2 colour schemes
├── latex/ # LaTeX configuration (.latexmkrc)
├── nano/ # Nano editor configuration
├── neovim/ # Neovim/Vim configuration and plugins
├── orbstack/ # Ubuntu-on-macOS via OrbStack: setup guide
├── roo-code/ # Roo Code MCP settings and custom modes
├── tmux/ # tmux config and multi-agent workspace launcher
├── vscode/ # VS Code settings and extensions list
└── zsh/ # Zsh configuration and cheatsheet
The neovim/ folder contains .vimrc, init.vim, coc-settings.json, a command reference (useful-commands.md), and a screenshot. These files work with both Neovim and regular Vim.
Install Neovim with Homebrew:
brew install neovim
I also recommend installing iTerm2, Zsh, and Oh My Zsh:
brew install --cask iterm2
brew install zsh
chsh -s $(which zsh)
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Download vim-plug:
curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
Copy the configuration files to your home folder and create a symlink for Neovim:
git clone https://github.com/danilofreire/dotfiles
cp dotfiles/neovim/.vimrc ~/
cp dotfiles/neovim/init.vim ~/.config/nvim/init.vim
Then open Neovim and install plugins:
nvim .vimrc +PlugInstall +qall
For nice icons in lightline and vim-devicons, install Fira Code Nerd Font:
brew install --cask font-fira-code-nerd-font

The ghostty/ folder contains my Ghostty terminal configuration. It uses the Monokai Pro Ristretto theme with FiraCode Nerd Font. To install Ghostty:
brew install --cask ghostty
Copy the config file to the expected location:
mkdir -p ~/.config/ghostty
cp dotfiles/ghostty/config ~/.config/ghostty/config
Ghostty hot-reloads its configuration, so changes take effect immediately. The config file is at ~/.config/ghostty/config.
Ghostty advertises its own terminal type (TERM=xterm-ghostty) so it can expose features beyond stock xterm (true colour, hyperlinks, advanced underline styles). The terminfo entry that describes those features ships with the Ghostty app, but is not present on remote machines you SSH into. tmux on a fresh Ubuntu VPS will fail with missing or unsuitable terminal: xterm-ghostty until the entry is installed.
The file ghostty/xterm-ghostty.terminfo in this repo is the source form (text, ~80 lines). On any new Linux machine, compile and install it once:
tic -x ~/dotfiles/ghostty/xterm-ghostty.terminfo
That writes the compiled entry under ~/.terminfo/ for your user. For a system-wide install (covers every user on the box), prefix with sudo and target /usr/share/terminfo:
sudo tic -x -o /usr/share/terminfo ~/dotfiles/ghostty/xterm-ghostty.terminfo
When Ghostty updates, regenerate the source from your Mac to keep this file fresh:
infocmp -x xterm-ghostty > ~/dotfiles/ghostty/xterm-ghostty.terminfo
The tmux/ folder contains my tmux configuration and tmux-work, a script that launches multi-agent Claude Code workspaces with a shared preview pane. Install tmux with Homebrew:
brew install tmux
Copy the files to their expected locations:
cp dotfiles/tmux/tmux.conf ~/.tmux.conf
cp dotfiles/tmux/tmux-work ~/.local/bin/tmux-work
chmod +x ~/.local/bin/tmux-work
Add the alias to your .zshrc:
alias tw='tmux-work'
The script supports several layouts (tw, tw duo, tw solo, tw focus) and pane management commands (tw add, tw rm, tw open, tw preview). Both add and rm accept vim-style directional arguments (h, v, up, down, left, right). See the tmux README for full usage details.
The iterm2-themes/ folder includes Gruvbox, Nord, Pale Night Hc, Monokai Pro, Monokai Pro Octagon, and Monokai Pro Ristretto. To install a theme, run open <filename>.itermcolors and select it in iTerm2 under Settings > Profiles > Colors > Color Presets. Many more themes are available at https://iterm2colorschemes.com.
The vscode/ folder contains my settings.json and a list of installed extensions. To install all extensions at once:
cat vscode/vscode-extensions.txt | xargs -L 1 code --install-extension
The zsh/ folder contains my .zshrc with aliases, plugins, and shell options. It also includes a Git/Oh My Zsh cheatsheet. I use Starship as my prompt and autojump for quick directory navigation.
The orbstack/ folder contains a guide to setting up an Ubuntu 24.04 development environment alongside macOS using OrbStack. It covers the full toolchain (zsh, Neovim, R, Python, Quarto, Claude Code), VS Code Remote-SSH, GitHub setup, and how to share files between macOS and the Linux side. See orbstack/README.md.