These are my personal dotfiles for macOS. They configure my development environment to my liking, with a focus on efficiency and a pleasant aesthetic.
The guiding principle that I follow when configuring my dotfiles is that things should be easy to do. So easy in fact that it should favor laziness. Everything here revolves around vim and its movement.
This repository contains configurations for a variety of tools, including:
- Terminal: Alacritty, tmux
- Shell: Zsh (with Oh My Zsh)
- Editor: Neovim
- Git: git, git-delta, tig
- Other Tools: fzf, bat, ripgrep, and many more.
The install.sh script automates the setup process. It will:
- Install Xcode Command Line Tools.
- Install Homebrew and a wide range of packages.
- Install several GUI applications.
- Install programming languages like Python, Node.js, and Java.
- Set up Zsh with Oh My Zsh and plugins.
- Configure Neovim with a rich set of plugins.
- Create symbolic links for the dotfiles in this repository.
To start the installation, run the following command:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/faruzzy/dotfiles/main/install.sh)"My Neovim setup is tailored for a modern development workflow, with a focus on providing a rich and efficient coding experience. It is built entirely in Lua and managed by lazy.nvim with ~91 plugins, all lazy-loaded for fast startup.
nvim/
├── init.lua # Entry point
├── lua/
│ ├── faruzzy/ # Core settings, keymaps, autocommands
│ ├── lsp/ # LSP server definitions and attach hooks
│ ├── plugins/ # Plugin specs (~37 files)
│ ├── config/ # Theme and statusline components
│ └── utils.lua # Helper functions
├── snippets/ # Custom JS/TS/React snippets
└── after/queries/ # Treesitter query overrides
Catppuccin (mocha) with custom highlight overrides, rounded floating window borders, and full Nerd Font support.
Servers are managed by mason.nvim and configured via mason-lspconfig. The following servers are set up out of the box:
| Server | Language |
|---|---|
| lua_ls | Lua |
| pyright | Python |
| rust_analyzer | Rust (via rustaceanvim) |
| typescript-tools | TypeScript / JavaScript |
| eslint | JS/TS linting |
| emmet_language_server | HTML/CSS abbreviations |
| tailwindcss | Tailwind CSS |
| html / cssls | HTML / CSS |
| jsonls | JSON (with schemas) |
| yamlls | YAML |
| clangd | C/C++ |
| vimls | Vim script |
Powered by blink.cmp, a Rust-based completion engine. Sources include LSP, snippets (LuaSnip), path, buffer, and lazydev. Completions are context-aware (e.g. buffer-only inside comments) and sorted by frecency.
conform.nvim handles format-on-save with per-language formatters:
- JS/TS/HTML/CSS/JSON: prettierd
- Lua: stylua
- Python: isort + black
- Go: goimports + gofmt
- Rust: rust-analyzer (built-in)
- Shell: shfmt
fzf-lua is used for all fuzzy finding:
| Binding | Action |
|---|---|
<C-p> |
Find files |
<M-f> |
Live grep |
<leader><CR> |
Open buffers |
<leader>/ |
Buffer lines |
<leader>fw |
Grep word under cursor |
gd / gr / gi |
Go to definition / references / implementation |
- gitsigns.nvim -- inline hunk indicators, stage/reset (
<leader>hs/<leader>hr), blame (<leader>hb) - vim-fugitive -- full Git command suite (
g<CR>for status,<leader>gdfor diff) - diffview.nvim -- visual diff browser
TypeScript / JavaScript
- typescript-tools.nvim with inlay hints, auto JSX closing, and import management (
<leader>ioorganize,<leader>iaadd missing,<leader>irremove unused) - Custom React hook snippets (
ususeState,ueuseEffect,uruseRef,umuseMemo,ucuseCallback, and more)
Rust
- rustaceanvim with hover actions, runnables (
gBr), debuggables (gBR), macro expansion (gBe), and external docs (gK)
Leader key is , (comma). A few highlights:
| Binding | Action |
|---|---|
<Tab> |
Switch to last buffer |
<C-c> |
Toggle file explorer (neo-tree) |
<leader>rn |
Rename symbol |
<leader>ca |
Code action |
<leader>e |
Diagnostic float |
]d / [d |
Next / previous diagnostic |
<leader>ti |
Toggle inlay hints |
<leader>ut |
Undo tree |
<leader>bd |
Delete buffer (preserve layout) |
<leader>1-5 |
Jump to buffer 1-5 |
Use which-key.nvim to discover all available bindings -- just press <leader> and wait.
- bufferline.nvim -- tabline with buffer grouping by language and type
- lualine.nvim -- statusline showing mode, git branch, diagnostics, and LSP status
- incline.nvim -- floating filename labels on splits
- indent-blankline.nvim -- indent guides
- alpha.nvim -- startup dashboard
- trouble.nvim -- diagnostics panel (
<leader>tt)
- NVM auto-detection -- reads
.nvmrc/.node-versionto use the correct Node version inside Neovim - Code action lightbulb -- shows a hint when code actions are available
- Treesitter -- 40+ parsers with text objects (
af/iffor functions,ac/icfor classes), auto-tag closing, and sticky context - vim-tmux-navigator -- seamless
<C-h/j/k/l>navigation between Neovim splits and tmux panes - auto-save -- saves on insert leave
- persistent undo -- undo history survives across sessions
This repository also includes configuration files for:
- Alacritty: A fast, cross-platform, OpenGL terminal emulator.
- tmux: A terminal multiplexer.
- Zsh: A powerful shell with Oh My Zsh for plugin and theme management.
- bat: A cat(1) clone with syntax highlighting and Git integration.
- and more...
