So, I recently bought a MacBook...
This repository contains my updated development environment configuration for macOS, featuring a modern and powerful terminal setup with Ghostty, a fully customized Neovim configuration, and various CLI tools like my custom 'ls' command alternative. Everything is themed with my own custom 'viis' colorscheme. Looks pretty nice, I've gotta say 😉
- Ghostty - Modern, fast GPU-accelerated terminal emulator. Probably the best one out there right now. Currently have it defined with a vim keymap that I'm testing out.
- Starship - Just a nice, lightweight cross-shell prompt that's easy to customize.
- Tmux - I'm honestly not using Tmux much anymore, as I'm trying to give Ghostty's native session/window management systems a shot. Liking them A LOT so far!
- ...all on top of good ol' zsh.
- Neovim - Fully customized with Lazy.nvim plugin manager and a carefully-curated set of plugins. No off-the-shelf Neovim configuration here!
- Zed - For when I need a bit more power than Neovim can provide. Ported over my custom theme because I like it so much.
- lx-cli - lx is my custom alternative to the traditional
lscommand, with nicer formatting and lots of customization options. - FZF - Command-line file fuzzy finder.
- FD - Command-line directory fuzzy finder. Fast alternative to
find.
.config/
├── ghostty/ # Ghostty config
│ ├── config # Main Ghostty settings configuration
│ └── themes/ # Custom color schemes
│ └── viis # Bespoke 'viis' theme config file
├── nvim/ # Neovim config
│ ├── init.lua # Entry point
│ ├── lua/
│ │ ├── colorschemes/ # Custom colorscheme config because I'm too lazy to make an actual plugin
│ │ ├── config/ # Core configurations
│ │ ├── plugins/ # Plugin specifications
│ │ └── utils/ # Utility functions
│ └── lazy-lock.json
├── lx/ # lx-cli configuration
│ └── config # lx-cli config file
├── fastfetch/ # FastFetch configuration
│ └── config.jsonc # FastFetch config file
├── tmux/ # Tmux configuration
│ └── tmux.conf # Main tmux config
├── zed/ # Neovim config
│ ├── settings.json # Zed settings file
│ └── themes/ # Zed theme directory for local themes (once again, too lazy to make an actual extension)
│ └── viis.json # Zed port of my bespoke nvim theme
└── starship.toml # Starship prompt config
dotfiles/
├── .zshrc # Zsh configuration
└── .zsh_aliases # Custom aliases and functions
My Neovim setup is built around productivity and speed, featuring:
- LSP Integration - Full language server support with Mason
- Smart Completion - nvim-cmp with multiple sources
- Git Integration - Gitsigns for change tracking and Git operations
- File Management - Oil.nvim for intuitive file system editing
- Quick Navigation - Harpoon for instant file switching
- Beautiful UI - Custom lualine statusline with mode indicators
- Code Formatting - Conform.nvim with automatic formatting on save
- Ghostty Terminal - Hardware-accelerated terminal emulator with custom Sonokai theme
- Starship Prompt - Clean, fast, informative prompt
- Tmux Integration - Seamless navigation between vim and tmux panes
- Smart Aliases - Productivity-focused shortcuts and functions (also just because I'm lazy)
# Fuzzy find a file and automatically open it in Neovim
ff
# Fuzzy navigate to a directory
dff# Create new session
tn project-name
# List existing sessions
tls
# Attach to existing session
ta project-name
# Kill session
tk project-namedffto navigate to project directorytn projectto start a new tmux session (if I decided to use Tmux that day)- Create focused windows for different tasks (coding, testing, etc.), either with Tmux or Ghostty tabs/panes
- Get to work!
My entire environment uses my own custom theme for consistency:
- Ghostty - Custom viis terminal colors
- Neovim - Viis colorscheme defined locally, with custom highlights
- Tmux - Matching status bar colors
- FZF - Matching themed fuzzy finder interface
| Plugin | Purpose |
|---|---|
| lazy.nvim | Modern plugin manager |
| mason.nvim + lspconfig | LSP management and configuration |
| nvim-cmp + sources | Intelligent code completion |
| conform.nvim | Code formatting with multiple formatters |
| gitsigns.nvim | Git integration and change indicators |
| harpoon | Quick file navigation and bookmarking |
| oil.nvim | File system editing as text |
| telescope.nvim | Fuzzy finder for everything |
| treesitter | Syntax highlighting and code understanding |
| trouble.nvim | Better diagnostics and error management |
| lualine.nvim | Fast and highly customizable statusline |
- TPM - Tmux plugin manager
- tmux-sensible - Sensible defaults
- tmux-yank - Copy to system clipboard
- tmux-resurrect - Save and restore sessions
- vim-tmux-navigator - Seamless vim/tmux navigation
Ensure you have these tools installed:
# Install Homebrew if you haven't already
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install required tools
brew install git curl neovim tmux fzf fd ripgrep starship
brew install --cask ghostty
# Install a Nerd Font (required for icons)
brew tap homebrew/cask-fonts
brew install --cask font-geist-mono-nerd-font-
Clone this repository:
git clone https://github.com/JackDerksen/macos-dev-env.git cd macos-dev-env -
Run the installation script:
chmod +x install.sh ./install.sh
-
Restart your terminal or run:
source ~/.zshrc
-
Set up Tmux plugins:
# Start tmux tmux # Install TPM plugins (in tmux session) # Press: Ctrl+Space + I
If you prefer manual installation:
-
Copy configurations:
cp -r .config/* ~/.config/ cat dotfiles/.zshrc >> ~/.zshrc cat dotfiles/.zsh_aliases >> ~/.zshrc
-
Install Tmux Plugin Manager:
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
<Space>- Leader key<leader>e- Toggle Oil file explorer<leader><leader>- Telescope find files<leader>sg- Telescope live grep<leader>h- Harpoon quick menu<leader>H- Add file to Harpoon<leader>1-5- Navigate to Harpoon file 1-5<leader>ar- Find out for yourself ;)
Ctrl+Space- Prefix keyPrefix + |- Split window verticallyPrefix + -- Split window horizontallyPrefix + r- Reload tmux configAlt+H/L- Switch between windowsCtrl+h/j/k/l- Navigate between vim/tmux panes
Ctrl + Cmd + -- Split window horizontallyCtrl + Cmd + |- Split window verticallyCtrl + h/j/k/l- Switch between panesCtrl + Cmd + z- Zoom on focused paneCtrl + Cmd + x- Close focused paneCmd + t- Open a new tabCmd + w- Close current tabOpt + v- Enter vim mode
ff- Fuzzy find and open file in Neovimdff- Fuzzy find and change to directoryvim→nvim- Muscle memory overridecl→clear- Just a bit faster to typegs→git status- Quick git statusgb→git branch- Quick git branchgc→git checkout- Quick git checkoutga→git add- Quick git addgitgood→git branch -m master main && git fetch --all --prune- Convert 'master' branch to 'main'
I mean... you should know how to do this already.
The modular structure makes it easy to customize:
- Keymaps: Edit
lua/config/keymaps.lua - Options: Modify
lua/config/options.lua - Plugins: Add new plugins in
lua/plugins/ - LSP: Configure language servers in
lua/config/lsp.lua - Colours: Configure the colour scheme to your liking in
lua/colorschemes/viis/init.lua
I don't necessarily want anyone contributing to or modifying this particular repo, as it's meant to show my own personal preferences (unless you see a way I can optimize the setup 👀). However, you should obviously feel free to fork it and modify things to your liking!
- This configuration is optimized for software development with a focus on web technologies, Python, Rust, and C/C++
- Some plugins may require additional language-specific tools (installed via Mason)
- The configuration prioritizes performance and minimalism while maintaining powerful functionality
Happy coding! 🚀