Personal configuration files (dotfiles) for macOS, tailored for daily development (especially JavaScript/TypeScript, React, and React Native projects) and a fast terminal-centric workflow.
| Application / Tool | Repo Path | Symlink Destination | Main Purpose |
|---|---|---|---|
| Neovim (LazyVim) | nvim/ |
~/.config/nvim |
Primary modern editor with LSP, Treesitter, Prettier, TypeScript, GitHub Copilot, and Tmux navigation. |
| Vim | vimrc |
~/.vimrc |
Classic Vim setup with vim-plug, FZF, NERDTree, ALE (ESLint/Prettier), Fugitive, Gruvbox, and vim-claude-code. |
| Spacemacs (Emacs) | spacemacs |
~/.spacemacs |
Emacs distribution with Vim (Evil) keybindings, LSP for JS/TS/React, ESLint, Prettier on save, Helm, Magit, and Treemacs. |
| Tmux | tmux.conf |
~/.tmux.conf |
Terminal multiplexer with C-a prefix, Catppuccin Mocha High Contrast theme, Vim/Neovim integration, and a Claude CLI popup. |
| Lazygit | lazygit/config.yml |
~/Library/Application Support/lazygit/config.yml |
Terminal UI for Git with Catppuccin Mocha theme, Nerd Font icons, Neovim file editing, and custom rebase commands. |
| EditorConfig | editorconfig |
~/.editorconfig |
Global formatting rules (LF line endings, trim trailing whitespace, 2-space indent for JS/TS/HTML/CSS/JSON, and tabs for Makefile). |
| JetBrains IDEs (IdeaVim) | ideavimrc |
~/.ideavimrc (manual link) |
Vim emulation and <Space> leader keybindings for IntelliJ IDEA, WebStorm, Android Studio, PyCharm, etc. |
| GnuCash | gnucash.css |
(Used in GnuCash templates) | Custom CSS stylesheet for formatting and printing invoices in GnuCash. |
Running install.sh installs the following packages if they are not already present on the system:
- CLI Formulae:
neovim: Primary text editor.ripgrep(rg): Fast text search tool used by Neovim pickers, FZF, and Spacemacs.fzf: Command-line fuzzy finder (used in terminal and Vim).node: JavaScript runtime required by LSP servers, Prettier, ESLint, and GitHub Copilot.bat:catclone with syntax highlighting (used for FZF previews).lazygit: Interactive terminal UI for Git.git-delta: Syntax-highlighting pager for Git diffs.gh: Official GitHub CLI.
- GUI Apps & Fonts (Casks):
iterm2: macOS terminal emulator.font-jetbrains-mono-nerd-font: Nerd Font patched typeface used across iTerm2 and editors.
Built on LazyVim with automatic lazy.nvim bootstrapping:
- Enabled LazyVim Extras (
nvim/lazyvim.json):- Full TypeScript support (
lazyvim.plugins.extras.lang.typescript). - Prettier formatting (
lazyvim.plugins.extras.formatting.prettier). - AI assistance via GitHub Copilot and Copilot Chat (
ai.copilot,ai.copilot-chat). - Enhanced yank/paste history with Yanky (
coding.yanky).
- Full TypeScript support (
- Custom Options (
nvim/lua/config/options.lua):- Soft line wrapping enabled (
wrap,linebreak,breakindent) with↳prefix indicator. - 2-space indentation (
expandtab,shiftwidth = 2).
- Soft line wrapping enabled (
- Custom Keymaps & Plugins:
<Leader><Tab>: Quickly switch to the alternate buffer (<C-^>).vim-tmux-navigator(nvim/lua/plugins/tmux.lua): Seamless navigation between Neovim splits and Tmux panes usingCtrl-h,Ctrl-j,Ctrl-k, andCtrl-l.
Self-contained configuration that automatically installs vim-plug on first launch if missing:
- Included Plugins:
fzf&fzf.vim,nerdtree,bufexplorer,mru,gruvbox,vim-airline,vim-devicons,nerdfont.vim,vim-fugitive,vim-commentary,vim-surround,ale, andvim-claude-code. - Key Features:
- Gruvbox dark colorscheme, hybrid line numbers (
number relativenumber), and system clipboard integration (unnamedplus). - Persistent undo history (
undofile) and backups stored in~/.vim/backup/. - Linting & Formatting (ALE): Automatic ESLint and Prettier execution on save for JS, TS, TSX, CSS, and SCSS files, plus trailing whitespace and empty line cleanup.
- Main Keybindings (Leader
<Space>):<Leader>ssave file /<Leader>qsave and quit.<Leader>p(:Files),<C-p>(:GFiles),<C-g>(:Rg),<Leader>b(:Buffers),<Leader>r(:MRU),<Leader>e(:BufExplorer).<C-t>toggle NERDTree,<C-m>reveal current file in NERDTree.<Leader>gsGit status,<Leader>gccommit,<Leader>gPpush,<Leader>gddiff,<Leader>gbblame.gdgo to definition,grfind references,gygo to type definition,geerror details (via ALE).<Leader>vinserts aconsole.log('[file:line]', word); /* TODO */statement for the word under the cursor.- Arrow keys are disabled in normal mode to enforce
h,j,k,lnavigation.
- Gruvbox dark colorscheme, hybrid line numbers (
Configured for daily JavaScript, TypeScript, and React / React Native development:
- Active Layers:
auto-completion,better-defaults,emacs-lisp,git,helm,html,json,lsp,markdown,multiple-cursors,spell-checking,syntax-checking,version-control,prettier,javascript,typescript,react,ruby,osx,treemacs. - Project-local Tooling: Automatically resolves project binaries from
node_modules/.bin(prettier,eslint,typescript-language-server). - Behavior:
- Formats on save with Prettier in JS/TS buffers.
- Maps
gdandgDin Evil normal mode toxref-find-definitionsover LSP for consistency with Neovim. - Honors
.editorconfigand disables lockfiles (.#*) to keep repositories clean. - Maps macOS
CommandtoHyperand leftOptiontoMeta.
- Prefix:
Ctrl-a(replacesCtrl-b) with mouse support enabled (mouse on). - Pane & Window Management:
<Prefix> |: Split pane horizontally in the current directory.<Prefix> -: Split pane vertically in the current directory.<Prefix> H / J / K / L: Resize panes in 5-cell increments.<Prefix> Ctrl-h / Ctrl-l: Switch to previous / next window.
- Claude CLI Integration:
<Prefix> g: Opens a 90% floating popup window runningclaudein the active pane's current working directory.
- Theme & Plugins (TPM):
- Styled with Catppuccin Mocha High Contrast (includes commented presets for standard Mocha and Catppuccin Latte).
- Plugins managed via TPM:
tmux-sensible,vim-tmux-navigator,tmux-yank,tmux-open.
- Rounded borders, Nerd Fonts v3 icons, and Catppuccin Mocha color palette.
- Configured to open and edit files directly in Neovim (
nvim {{filename}}), suspending Lazygit until the editor exits. - Disables
autoFetchon startup for faster responsiveness. - Custom Command: Pressing
<Ctrl-u>prompts for an upstream branch (defaults todevelop) and runsgit pull --rebase upstream <branch>.
Configuration for the IdeaVim plugin across JetBrains IDEs with <Space> as the leader key:
- Search & Files:
<Leader>fGoto File,<Leader>pSearch Everywhere,<Leader>rRecent Files,<Leader>eSelect in Project View,<Leader>sFile Structure popup. - Code Navigation:
gddeclaration,gDtype declaration,giimplementation,grfind usages,gtgo to test,<Leader>aintention actions. - Refactoring & Formatting:
<Leader>rnrename element,<Leader>cfreformat code,<Leader>cooptimize imports,<Leader>cctoggle line comment. - Run & Debug:
<Leader>rrrun,<Leader>rddebug,<Leader>rbtoggle breakpoint,<Leader>rcresume,<Leader>rsstep over,<Leader>ristep into,<Leader>rostep out,<Leader>rxstop. - Git / VCS:
<Leader>ggVCS tool window,<Leader>glGit log,<Leader>gaannotate (git blame). - Tool Windows & Tabs:
Shift-h/Shift-lswitch tabs;<Leader>1Project window,<Leader>3VCS window,<Leader>4Terminal window.
Custom CSS stylesheet designed to improve the layout and print/PDF output of GnuCash invoices (tested with GnuCash 4.x), styling headers, entry tables, totals, and page margins.
- macOS with Homebrew installed.
- Git available on your system.
-
Clone the repository into
~/GitHub/dotfiles:Note:
install.shexpects the repository to live at$HOME/GitHub/dotfiles.mkdir -p ~/GitHub git clone https://github.com/gustavomcortez/dotfiles.git ~/GitHub/dotfiles cd ~/GitHub/dotfiles
-
Run the bootstrap script:
bash install.sh
What
install.shdoes:- Installs CLI tools and GUI cask packages via Homebrew (skipping any that are already installed).
- Creates required directories (
~/.configand~/.vim/backup). - Creates symlinks pointing to this repository for Neovim, Vim, Spacemacs, Tmux, EditorConfig, and Lazygit.
- Automatically backs up any pre-existing real files or directories to
~/.dotfiles_backup/<YYYYMMDD_HHMMSS>/before replacing them with symlinks.
-
Optional Post-Install Steps:
- IdeaVim: If you use JetBrains IDEs, symlink
ideavimrc:ln -sf ~/GitHub/dotfiles/ideavimrc ~/.ideavimrc
- TPM (Tmux Plugin Manager): On a fresh machine, clone TPM and press
<Prefix> I(Ctrl-a+Shift-iinside Tmux) to install plugins:git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm - iTerm2:
- Go to Preferences → Profiles → Colors and import the Catppuccin Mocha theme.
- Go to Preferences → Profiles → Text and set the font to JetBrainsMono Nerd Font Mono.
- GnuCash: Paste or reference the contents of
gnucash.cssin your GnuCash invoice report stylesheet settings.
- IdeaVim: If you use JetBrains IDEs, symlink
To pull recent updates from the repository and ensure all symlinks and Homebrew packages are in sync:
cd ~/GitHub/dotfiles
git pull
bash install.shinstall.sh is idempotent and safe to re-run at any time—already installed packages and valid symlinks are skipped without side effects.
-
Homebrew Packages:
brew update && brew upgrade -
Neovim (LazyVim):
- Open
nvimand run:Lazy sync(or press<Space>lto open the Lazy UI, then pressS). nvim/lazy-lock.jsonlocks exact plugin commits; commit changes to this file after updating plugins to keep your setup reproducible across machines.- To update LSP servers, linters, and formatters managed by Mason, run
:MasonUpdateinside Neovim.
- Open
-
Vim (vim-plug):
- Open
vimand run::PlugInstallto install newly added plugins.:PlugUpdateto update installed plugins.:PlugCleanto remove unused plugins deleted fromvimrc.
- Open
-
Spacemacs:
- Inside Spacemacs, press
SPC f e Uto update layer packages, andSPC f e Rto reload your configuration after editingspacemacs.
- Inside Spacemacs, press
-
Tmux (TPM):
- Inside a Tmux session:
Ctrl-a+Shift-i(<Prefix> I): Install new plugins listed intmux.conf.Ctrl-a+Shift-u(<Prefix> U): Update installed plugins.- Reload
tmux.confwithout restarting Tmux:tmux source-file ~/.tmux.conf.
- Inside a Tmux session:
-
Editing an existing config: Because the files in
~/and~/.config/are symlinked to~/GitHub/dotfiles, editing~/.vimrc,~/.tmux.conf,~/.spacemacs, or~/.config/nvim/directly modifies the files in this repository. Simply review your changes withgit status/lazygitand commit them. -
Adding a new tool or dotfile:
- Place the configuration file or directory inside
~/GitHub/dotfiles/. - If it requires a Homebrew package, add it to
brew_installorbrew_cask_installininstall.sh. - Add a
link <repo-relative-path> <destination>entry ininstall.sh. - Run
bash install.shto create the symlink and verify everything works.
- Place the configuration file or directory inside
-
Restoring Backups: If you ever need to recover a file that was replaced by
install.sh, check the timestamped directories under~/.dotfiles_backup/.
Distributed under the MIT License.