dotfiles

Dotfiles

Configuration files for my development environment. I use Neovim and VS Code as text editors, Zsh as my shell, and Ghostty as my terminal.

Cross-platform notes

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:

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.

Repository structure

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

Neovim

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.

Setup

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

Neovim screenshot

Ghostty

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.

Terminfo entry for SSH targets

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

tmux

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.

iTerm2 themes

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.

VS Code

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

Zsh

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.

OrbStack

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.