A carefully curated collection of configuration files and scripts for a streamlined development environment across macOS and Linux systems.
- My Dotfiles π
- Table of Contents
- Clone the repository
- Navigate to the directory
- Run the installation script
- In .zshrc - automatic platform detection
- Remove plugin cache and restart
- Manually install TPM and plugins
This dotfiles repository contains my personal development environment configuration, optimized for productivity and efficiency. It includes configurations for modern terminal tools, editors, version control, and development utilities with full GitHub Codespaces support.
- Modular Architecture: Organized installation scripts and Zsh configuration for maintainability
- Automated Installation: One-command setup with comprehensive
install.sh - Cross-Platform: Works on macOS, Linux, and GitHub Codespaces
- Modern Tools: Curated selection of powerful CLI utilities
- Organized Structure: Clean organization using GNU Stow
- Developer-Focused: Optimized for coding with LSP, Copilot, and modern workflows
- Extensive Neovim Setup: Complete Lua-based configuration with 30+ plugins
- Zsh: Enhanced shell with Oh My Zsh framework and modern plugins
- Starship: Fast, customizable prompt with Dracula theme
- Tmux: Terminal multiplexer with Catppuccin theme and productivity plugins
- Ghostty: High-performance terminal emulator configuration
- Neovim: Comprehensive Lua configuration with:
- LSP integration (Mason, nvim-lspconfig)
- GitHub Copilot and CopilotChat
- MCPHub integration for enhanced AI capabilities
- Modern completion with blink.cmp
- File management with Neo-tree and fzf-lua
- Testing framework (Neotest)
- Session persistence and much more
- Git: Optimized configuration with helpful aliases
- Lazygit: Beautiful terminal Git UI with custom configuration
- FZF: Fuzzy finder with Git integration scripts
- Claude: AI assistant configuration with custom powerline and global code instructions
- Yazi: Modern file manager with custom themes and keymaps
- Bat: Syntax-highlighted
catreplacement - Eza: Modern
lsreplacement with icons - Ripgrep: Ultra-fast text search
- Zoxide: Smart directory jumping (
cdreplacement) - Tree-sitter: Advanced syntax highlighting
- fd: Fast alternative to
find - pay-respects: Command correction tool
- yq: YAML/JSON processor
- Homebrew: Package manager with comprehensive Brewfile
- NVM: Node.js version management
- Lua/LuaJIT: For Neovim configuration and tools
# Clone the repository
git clone https://github.com/YousefHadder/dotfiles.git ~/dotfiles
# Navigate to the directory
cd ~/dotfiles
# Run the installation script
./install.shThe installation script will:
- Bootstrap Phase: Update system, install Zsh and Oh My Zsh
- Installation Phase: Install Homebrew and all packages from Brewfile
- Configuration Phase: Copy scripts and create symlinks using GNU Stow
- Finalization: Switch to new Zsh shell with all configurations active
The install.sh script is now modular and organized into separate components in the install/ directory for better maintainability.
This repository is fully configured for GitHub Codespaces with automatic environment detection and non-interactive installation.
dotfiles/
βββ Brewfile # Homebrew package definitions
βββ install.sh # Main installation script
βββ README.md # This comprehensive guide
βββ .gitignore # Git ignore patterns
βββ .stowrc # GNU Stow configuration
βββ .luarc.json # Lua LSP configuration
β
βββ install/ # Modular installation scripts
β βββ bootstrap.sh # System bootstrap and Zsh setup
β βββ homebrew.sh # Homebrew installation
β βββ languages.sh # Programming language setup
β βββ packages.sh # Package installation via Homebrew
β βββ scripts.sh # Script copying and permissions
β βββ symlinks.sh # GNU Stow symlink creation
β βββ utils.sh # Utility functions and helpers
β
βββ claude/ # Claude AI configuration
β βββ .claude/
β βββ CLAUDE.md # Global Claude code instructions
β βββ settings.json # Claude status line settings
β βββ claude-powerline.json # Powerline theme configuration
β
βββ git/
β βββ .gitconfig # Git configuration and aliases
β
βββ ghostty/ # Ghostty terminal configuration
β βββ .config/ghostty/
β βββ config # Terminal settings
β
βββ lazygit/ # Lazygit UI configuration
β βββ .config/lazygit/
β βββ config.yml # Lazygit settings
β
βββ nvim/ # Neovim configuration (30+ plugins)
β βββ .config/nvim/
β βββ init.lua # Main entry point
β βββ lua/yousef/ # Personal configuration modules
β βββ config/ # Core settings (options, keymaps, autocmds)
β βββ plugins/ # Plugin configurations (LSP, Copilot, etc.)
β βββ lazy.lua # Lazy.nvim plugin manager setup
β
βββ scripts/ # Utility scripts
β βββ custom_modules/ # Custom tmux status modules
β β βββ ctp_battery.conf # Battery status
β β βββ ctp_cpu.conf # CPU monitoring
β β βββ ctp_memory.conf # Memory usage
β β βββ pane_size.conf # Pane size indicator
β β βββ primary_ip.conf # IP address display
β βββ fzf-git.sh # Enhanced git operations with fzf
β
βββ starship/ # Starship prompt configuration
β βββ .config/
β βββ starship.toml # Custom prompt with Dracula theme
β
βββ tmux/
β βββ .tmux.conf # Tmux configuration with Catppuccin theme
β
βββ vim/
β βββ .vimrc # Vim configuration (fallback)
β
βββ yazi/ # Yazi file manager configuration
β βββ .config/yazi/
β βββ keymaps.toml # Custom key bindings
β βββ theme.toml # Visual theme
β βββ yazi.toml # Main configuration
β
βββ zsh/
βββ .zshrc # Main Zsh configuration
βββ conf.d/ # Modular Zsh configuration files
βββ 00-paths.zsh # PATH and environment paths
βββ 01-environment.zsh # Environment variables
βββ 02-homebrew.zsh # Homebrew configuration
βββ 03-oh-my-zsh.zsh # Oh My Zsh setup and plugins
βββ 04-editor.zsh # Editor preferences
βββ 05-tools.zsh # Tool-specific configurations
βββ 06-fzf.zsh # FZF fuzzy finder setup
βββ 07-plugins.zsh # Additional Zsh plugins
βββ 08-functions.zsh # Custom shell functions
- macOS: Xcode Command Line Tools (automatically installed by script)
- Linux:
curl,git, and system package manager (apt, yum, or dnf) - GitHub Codespaces: Ready to use (no additional setup required)
- Both: Internet connection for downloading packages
-
Clone the Repository:
git clone https://github.com/YousefHadder/dotfiles.git ~/dotfiles cd ~/dotfiles
-
Review the Brewfile (optional):
cat Brewfile
-
Run Installation:
chmod +x install.sh ./install.sh
-
Automatic Shell Switch: The script automatically switches to Zsh with all configurations loaded
The Brewfile includes these essential packages:
- Core Tools:
stow,fzf,bat,eza,ripgrep,fd,tree,yq - Development:
node,nvm,lua,luajit,luarocks,prettier,make - Terminal:
tmux,neovim,starship,tree-sitter - Git Tools:
lazygit - Navigation:
yazi,zoxide,pay-respects - Shell:
zsh-autosuggestions,zsh-syntax-highlighting
If you prefer manual control:
-
Install Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" -
Install packages:
brew bundle --file=Brewfile
-
Install GNU Stow:
brew install stow
-
Stow individual packages:
stow zsh tmux nvim git starship lazygit yazi
The Zsh configuration is now modular and organized into separate files in zsh/conf.d/ for better maintainability:
- Modular Structure: Configuration split into logical components (paths, environment, tools, etc.)
- Load Order: Files are loaded in numerical order (00-08) for proper dependency management
- Oh My Zsh: Framework with Git and rbenv plugins configured in
03-oh-my-zsh.zsh - Modern Aliases: Defined in various files based on functionality
lsβeza --icons=alwayswith variants (ll,la,lt)cdβz(zoxide smart jumping)vimβnvim
- Environment Variables: Optimized PATH, GOPATH, and tool configurations in dedicated files
- Functions: Custom shell functions in
zsh/conf.d/08-functions.zsh:y(): Yazi file manager with directory change supportgpp <file.cpp>: Compile C++ files with optimal settingsgrun <file.cpp>: Compile and run C++ files in one command
- Plugin Manager: Lazy.nvim for fast, lazy-loaded plugins
- LSP Integration:
- Mason for LSP server management
- Full language support with nvim-lspconfig
- Intelligent completion with blink.cmp
- AI Integration:
- GitHub Copilot for code suggestions
- CopilotChat for AI conversations
- MCPHub for Model Context Protocol server integration
- File Management:
- Snacks Explorer for fast project exploration with hidden file support
- Neo-tree for detailed project exploration (when needed)
- Snacks Pickers for smart file finding, grep, and navigation
- Development Tools:
- Treesitter for syntax highlighting
- Which-key for keybinding discovery
- Neotest for testing frameworks
- Conform for code formatting
- UI Enhancements:
- Lualine for statusline
- Bufferline for tab management
- Alpha dashboard with custom Palestine flag theme
- Noice for enhanced command line UI with rounded borders
- Snacks for notifications, zen mode, and terminal management
- Theme: Catppuccin Mocha with custom styling
- Plugin Manager: TPM with automatic installation
- Key Plugins:
- Vim navigation integration (christoomey/vim-tmux-navigator)
- System monitoring (CPU, battery, memory)
- Enhanced copy/paste with tmux-yank
- Session management with sessionx
- Text extraction with extrakto
- Window naming with nerd font support
- Editor Integration: Neovim as default editor
- LFS Support: Large file handling enabled
- Cross-Platform: Proper line ending handling
- Performance: Optimized with useful aliases
- Theme: Custom Dracula palette
- Modules: OS, directory, Git status, Node.js, AWS, execution time
- Layout: Two-line format with comprehensive information display
- Performance: High-performance terminal emulator with GPU acceleration
- Theme: Custom Slate colorscheme matching Neovim configuration
- Background Images: Support for background images with configurable opacity
- Background image path: configurable in
ghostty/.config/ghostty/config - Opacity control:
background-image-opacity = 0.15 - Fit mode:
background-image-fit = cover
- Background image path: configurable in
- Font: Hack Nerd Font Mono for consistent icon rendering
- macOS Integration: Native titlebar styling and Option key as Alt
- Global Instructions: Comprehensive coding standards and tool preferences (CLAUDE.md)
- Powerline Integration: Custom status line configuration with usage tracking
- Theme: Custom color scheme for better visibility and modern appearance
- Features: Session tracking, token usage monitoring, and budget management
-
Add to Brewfile:
brew "package-name" # or for GUI applications cask "app-name"
-
Install the package:
brew bundle --file=Brewfile
-
Create configuration directory (if needed):
mkdir package-name # Add your config files -
Stow the configuration:
stow package-name
-
Edit files directly in their respective directories:
# Example: Edit Neovim config nvim nvim/.config/nvim/lua/yousef/config/options.lua # Example: Edit Zsh environment variables nvim zsh/conf.d/01-environment.zsh # Example: Edit installation script component nvim install/packages.sh
-
Re-stow if needed:
stow -R package-name
Add new plugins to the appropriate file in nvim/.config/nvim/lua/yousef/plugins/:
return {
"author/plugin-name",
config = function()
-- Plugin configuration
end,
}The configurations include cross-platform compatibility:
# In .zshrc - automatic platform detection
if [ "$(uname)" = "Darwin" ]; then
BREW_HOME="/opt/homebrew"
elif [ "$(uname)" = "Linux" ]; then
BREW_HOME="/home/linuxbrew/.linuxbrew"
fiThe .stowrc file automatically ignores certain files:
.stowrcitselfDS_StorefilesBrewfileinstall.shscriptsdirectory
Note: The git, ghostty, and claude packages are intentionally skipped during automated stowing in the install script when running in GitHub Codespaces.
Stow conflicts:
stow -D package-name # Remove existing links
stow package-name # Re-create linksPermission errors:
sudo chown -R $(whoami) ~/.configHomebrew path issues (macOS):
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zshrcHomebrew path issues (Linux):
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> ~/.zshrcOh My Zsh installation fails:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattendedNeovim plugins not loading:
# Remove plugin cache and restart
rm -rf ~/.local/share/nvim
nvim --headless "+Lazy! sync" +qaTmux plugins not working:
# Manually install TPM and plugins
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
~/.tmux/plugins/tpm/bin/install_pluginsGitHub Codespaces specific issues:
- The dotfiles are automatically copied to
/workspaces/.codespaces/.persistedshare/dotfiles - Environment variables are automatically configured for Codespaces
- No manual intervention required during installation
- Check the Issues page
- Review individual tool documentation:
- Test configurations in isolation
- Check plugin-specific documentation for Neovim issues
- Leader Key:
<Space> - File Explorer:
<leader>e(Snacks Explorer with hidden files) - Smart Find:
<leader><space>(smart find files) - Find Files:
<leader>ff(Snacks picker files) - Find Text:
<leader>fg(Snacks picker grep) - Git Status:
<leader>gs(Snacks picker git status) - Recent Files:
<leader>fr(Snacks picker recent) - Copilot Chat:
<leader>aa - Format Code:
<leader>cf(code format) - LSP Actions:
<leader>ca(code actions) - Terminal:
<Ctrl-/>(Snacks terminal toggle) - Zen Mode:
<leader>z(Snacks zen mode)
- Prefix:
Ctrl+b - Split Horizontal:
Prefix + | - Split Vertical:
Prefix + - - Vim Navigation:
Ctrl+h/j/k/l - Session Manager:
Prefix + o(sessionx)
- Enhanced ls:
l,ll,la,lt(with icons) - Smart cd:
z <directory>(zoxide) - Git shortcuts: Provided by Oh My Zsh git plugin
- C++ compilation:
gpp <file.cpp>(compile),grun <file.cpp>(compile and run)
This repository is in active development and contributions are welcome!
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature
- Make your changes following the existing structure
- Test thoroughly on both macOS and Linux if possible
- Update documentation if adding new features
- Submit a pull request
- Maintain cross-platform compatibility (macOS, Linux, Codespaces)
- Document new features or significant changes in the README
- Test installation script changes thoroughly
- Follow existing code style and organization
- Add appropriate comments for complex configurations
- Update Brewfile when adding new packages
- Use proper Stow structure for new configurations
- New tool configurations (following existing patterns)
- Neovim plugin additions (with proper configuration)
- Tmux enhancements (new plugins or themes)
- Shell improvements (new aliases or functions)
- Cross-platform compatibility fixes
- Documentation improvements
- Installation script enhancements
When reporting issues, please include:
- Operating system and version (macOS/Linux/Codespaces)
- Terminal emulator being used
- Complete error messages (with full stack traces)
- Steps to reproduce the problem
- Expected vs actual behavior
- Relevant configuration files that might be involved
This project is open source and available under the MIT License.
This dotfiles repository is built on the shoulders of giants. Special thanks to:
-
Framework Creators:
-
Package Managers:
-
Theme & Plugin Authors:
- Catppuccin for beautiful terminal themes
- All Neovim plugin authors for extending editor capabilities
- Tmux plugin ecosystem contributors
-
Tool Creators:
- Modern CLI tool authors (eza, bat, ripgrep, fd, yazi, etc.)
- fzf and related fuzzy finder tools
- Neovim Configurations: LazyVim, NvChad
- Dotfiles Inspiration: GitHub does dotfiles
- Terminal Themes: Catppuccin
Happy coding! π
If you find these dotfiles helpful, please consider:
- β Starring the repository
- π΄ Forking for your own use
- π Reporting issues you encounter
- π‘ Contributing improvements
Built with β€οΈ for developers who value productivity and beautiful terminals.