A comprehensive collection of my personal configuration files (dotfiles), meticulously organized and managed with Git. These configurations are designed to create a consistent, efficient, and aesthetically pleasing development environment across different machines and operating systems.
These dotfiles embody a philosophy of simplicity, efficiency, and consistency. Every configuration choice is intentional, prioritizing:
- Muscle Memory: Consistent keybindings across all tools
- Productivity: Streamlined workflows and automation
- Maintainability: Clean, well-documented configurations
- Portability: Works seamlessly across Linux, macOS, and Windows
- Modern Tools: Leveraging the latest and greatest development tools
The configurations are shared not just as personal backup, but as inspiration and starting point for other developers seeking to optimize their development environment.
This repository follows the XDG Base Directory Specification where possible, keeping the home directory clean and organized. The structure is designed for clarity, modularity, and easy maintenance:
dotfiles/
โโโ .config/ # Main configuration directory (XDG compliant)
โ โโโ bash/ # Shell environment and customization
โ โ โโโ bashrc # Main bash configuration
โ โ โโโ README.md # Bash setup documentation
โ โโโ nvim/ # Neovim configuration (Lua-based)
โ โ โโโ init.lua # Entry point
โ โ โโโ lua/ # Modular Lua configurations
โ โ โ โโโ options.lua # Editor options
โ โ โ โโโ keymaps.lua # Custom keybindings
โ โ โ โโโ plugins.lua # Plugin management
โ โ โ โโโ lsp.lua # Language server setup
โ โ โ โโโ theme.lua # Visual appearance
โ โ โโโ lazy-lock.json # Plugin version lockfile
โ โ โโโ README.md # Comprehensive Neovim guide
โ โโโ kitty/ # Kitty terminal emulator
โ โ โโโ kitty.conf # Terminal configuration
โ โ โโโ README.md # Kitty customization guide
โ โโโ wezterm/ # WezTerm terminal emulator
โ โ โโโ wezterm.lua # Terminal configuration
โ โ โโโ README.md # WezTerm setup guide
โ โโโ tmux/ # Terminal multiplexer
โ โ โโโ tmux.conf # Tmux configuration
โ โ โโโ README.md # Tmux workflow guide
โ โโโ git/ # Git version control
โ โ โโโ .gitconfig # Git aliases and settings
โ โ โโโ README.md # Git workflow documentation
โ โโโ .vscode/ # VS Code IDE settings
โ โ โโโ settings.json # Editor preferences with Vim integration
โ โ โโโ README.md # VS Code configuration guide
โ โโโ .idea/ # JetBrains IDEs configuration
โ โ โโโ .ideavimrc # Vim emulation in IntelliJ
โ โ โโโ README.md # IntelliJ setup guide
โ โโโ htop/ # System process viewer
โ โ โโโ htoprc # Process viewer customization
โ โ โโโ README.md # htop configuration guide
โ โโโ lazygit/ # Git terminal UI
โ โโโ config.yml # LazyGit customization
โ โโโ README.md # LazyGit workflow guide
โโโ scripts/ # Automation and setup scripts
โ โโโ setup/ # Platform-specific setup scripts
โ โ โโโ setup-mac-dev.sh # macOS development environment
โ โ โโโ setup-ubuntu-dev.sh # Ubuntu development environment
โ โ โโโ setup-windows-dev.ps1 # Windows PowerShell setup
โ โ โโโ setup-windows-dev.sh # Windows WSL setup
โ โ โโโ python_version.txt # Python version specification
โ โ โโโ requirements.txt # Python package requirements
โ โ โโโ system-packages.txt # System package list
โ โ โโโ README.md # Comprehensive setup guide
โ โโโ refresh-dotfiles.sh # Maintenance and update script
โโโ LICENSE # Apache License 2.0
โโโ README.md # This comprehensive guide
The easiest way to get started is using the automated setup scripts:
# Clone the repository to a dedicated location
git clone https://github.com/yourusername/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
# Navigate to setup scripts
cd scripts/setup
# Choose your platform and run the appropriate script:
# For Ubuntu/Linux:
chmod +x setup-ubuntu-dev.sh
./setup-ubuntu-dev.sh
# For macOS:
chmod +x setup-mac-dev.sh
./setup-mac-dev.sh
# For Windows (in PowerShell as Administrator):
.\setup-windows-dev.ps1
# For Windows (in WSL/Git Bash):
chmod +x setup-windows-dev.sh
./setup-windows-dev.sh
What the setup scripts do:
- Install essential development tools and applications
- Create symbolic links for all configuration files
- Set up package managers (Homebrew, Chocolatey, APT)
- Configure shell environment with custom aliases and functions
- Install and configure Neovim with plugins
- Set up Git with useful aliases and configurations
For those who prefer granular control or want to understand each step:
# 1. Clone the repository
git clone https://github.com/yourusername/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
# 2. Backup existing configurations (important!)
mkdir -p ~/.config/backup
cp ~/.bashrc ~/.config/backup/ 2>/dev/null || true
cp -r ~/.config/nvim ~/.config/backup/ 2>/dev/null || true
cp -r ~/.config/kitty ~/.config/backup/ 2>/dev/null || true
# 3. Create symbolic links for core configurations
ln -sf ~/.dotfiles/.config/bash/bashrc ~/.bashrc
ln -sf ~/.dotfiles/.config/nvim ~/.config/
ln -sf ~/.dotfiles/.config/kitty ~/.config/
ln -sf ~/.dotfiles/.config/wezterm ~/.config/
ln -sf ~/.dotfiles/.config/tmux ~/.config/
ln -sf ~/.dotfiles/.config/git ~/.config/
ln -sf ~/.dotfiles/.config/htop ~/.config/
ln -sf ~/.dotfiles/.config/lazygit ~/.config/
# 4. Create IDE-specific configurations
mkdir -p ~/.config/.vscode ~/.config/.idea
ln -sf ~/.dotfiles/.config/.vscode/settings.json ~/.config/.vscode/
ln -sf ~/.dotfiles/.config/.idea/.ideavimrc ~/.config/.idea/
# 5. Source the new bash configuration
source ~/.bashrc
# 6. Install Neovim plugins (if using Neovim)
nvim --headless +Lazy +qall
Install only specific configurations you need:
# Clone repository
git clone https://github.com/yourusername/dotfiles.git ~/.dotfiles
# Link only Neovim configuration
ln -sf ~/.dotfiles/.config/nvim ~/.config/
# Link only terminal configurations
ln -sf ~/.dotfiles/.config/kitty ~/.config/
ln -sf ~/.dotfiles/.config/tmux ~/.config/
# Link only shell configuration
ln -sf ~/.dotfiles/.config/bash/bashrc ~/.bashrc
Enhanced .bashrc
Features:
- Smart PATH Management: Automatically adds user binaries, Cargo, Anaconda, Node.js, and Snap to PATH
- Color-Coded Prompt: Shows Git status, current directory, user, and host with visual indicators
- Productivity Aliases: Common shortcuts for navigation, file operations, and development tasks
- Git Integration: Quick aliases for Git operations and status display
- Interactive Features: Only loads for interactive shells to optimize startup time
Key Aliases:
# Navigation
alias ..='cd ..'
alias ...='cd ../..'
alias ll='ls -alF --color=auto'
alias la='ls -A --color=auto'
# Git shortcuts
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gp='git push'
alias gl='git log --oneline'
# Development
alias py='python3'
alias serve='python3 -m http.server'
alias activate='source venv/bin/activate'
Comprehensive Lua Configuration:
- Plugin Manager: lazy.nvim for efficient plugin management
- LSP Integration: Full Language Server Protocol support for 10+ languages
- Advanced Completion: Context-aware autocompletion with snippets
- File Navigation: nvim-tree explorer and Telescope fuzzy finder
- Git Integration: LazyGit terminal UI and git blame/diff
- Productivity Features: Harpoon for quick file switching, which-key for discoverability
Language Support:
- Python (pyright), JavaScript/TypeScript (tsserver), Go (gopls)
- Rust (rust_analyzer), Lua (lua_ls), HTML/CSS, JSON, YAML, Markdown
Kitty Terminal:
- Performance: GPU-accelerated rendering for smooth scrolling
- Font Configuration: JetBrains Mono with ligatures and icons
- Color Scheme: Carefully chosen dark theme with syntax highlighting
- Window Management: Tabs, splits, and session management
- URL Handling: Smart URL detection and opening
WezTerm:
- Cross-Platform: Consistent experience across Linux, macOS, Windows
- Lua Configuration: Powerful scripting for customization
- Leader Key System: Tmux-style navigation with Ctrl+a prefix
- Multiplexing: Built-in tab and pane management
- Font Resizing: Dynamic font size adjustment
Advanced Session Management:
- Prefix Key: Changed to Ctrl+a for easier access (closer to home row)
- Vi Mode: Vim-style navigation in copy mode
- Smart Pane Management: Intuitive splitting and resizing
- Status Bar: Custom status line with session info, host, and time
- Mouse Support: Modern mouse integration for pane selection
- Session Persistence: Maintains sessions across disconnections
Productivity-Focused Git Setup:
- Meaningful Aliases: Shortened commands for common operations
- Enhanced Logging: Beautiful, informative log formatting
- Smart Defaults: Sensible configuration for modern Git workflows
- Editor Integration: Seamless integration with Neovim
- Merge Tools: Configured diff and merge tools
Key Git Aliases:
co = checkout
br = branch
ci = commit
st = status
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
VS Code with Vim Integration:
- Vim Extension: Full Vim emulation with custom keybindings
- Consistent Keymaps: Matches Neovim keybindings for muscle memory
- LSP Integration: IntelliSense and debugging capabilities
- Theme Consistency: Matching color schemes across editors
IntelliJ IDEA with IdeaVim:
- Complete Vim Emulation: Advanced Vim features in JetBrains IDEs
- Cross-Platform Keybindings: Same shortcuts across Neovim, VS Code, and IntelliJ
- IDE-Specific Features: Database tools, debugging, and refactoring integration
One of the key features of this dotfiles setup is the consistent keybinding system across all editors and tools:
<space>
โ Universal leader keygd
,gr
,gi
โ LSP navigation (definition, references, implementation)<leader>ff
,<leader>fg
โ File finding and grep search<leader>ee
,<leader>ef
โ File explorer toggle and focus<space>e
,[d
,]d
โ Diagnostics and error navigation
<leader>sv/sh
โ Create vertical/horizontal splits<C-h/j/k/l>
โ Navigate between splits/panes (works with tmux!)<leader>+/-/>/<
โ Resize splits and panes
<leader>w
โ Save file<leader>y/p
โ System clipboard operations<leader>/
โ Toggle comments
- Neovim: Harpoon (
<leader>ha
,<leader>h1-4
) - VS Code: Pinned tabs with same keybindings
- IntelliJ: Favorites system with consistent shortcuts
# Update all system packages (Ubuntu)
sudo apt update && sudo apt upgrade
# Update Homebrew packages (macOS)
brew update && brew upgrade
# Update Node.js packages globally
npm update -g
# Update Neovim plugins
nvim --headless +"Lazy update" +qall
# Refresh dotfiles (run from dotfiles directory)
./scripts/refresh-dotfiles.sh
# Clean package caches
sudo apt autoremove && sudo apt autoclean # Ubuntu
brew cleanup # macOS
# Update Python packages in virtual environments
pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
# Update Git repositories in development folders
find ~/dev -name ".git" -type d -execdir git pull \;
Making Changes:
- Edit configuration files directly in the
~/.dotfiles
repository - Changes take effect immediately due to symbolic linking
- Test changes before committing
- Commit and push to backup your configurations
Adding New Configurations:
# Add new application config
mkdir -p ~/.dotfiles/.config/newapp
ln -sf ~/.dotfiles/.config/newapp ~/.config/
# Document the new configuration
echo "# New App Configuration" > ~/.dotfiles/.config/newapp/README.md
- Package Manager: APT with PPA support
- Terminal: Kitty or WezTerm with true color support
- Shell: Bash with custom prompt and aliases
- Compatibility: Full feature support for all configurations
- Package Manager: Homebrew for CLI tools and applications
- Terminal: iTerm2 or WezTerm for enhanced features
- Shell: Zsh (default) or Bash with custom configurations
- Compatibility: Full support with macOS-specific optimizations
- Subsystem: WSL2 for Linux compatibility
- Terminal: Windows Terminal or WezTerm
- Package Manager: Chocolatey for Windows applications
- Compatibility: Full support through WSL2 and native Windows tools
Fork and Personalize:
- Fork this repository to your GitHub account
- Update personal information in setup scripts
- Modify color schemes and themes to your preference
- Add your own aliases and functions
- Customize keybindings for your workflow
Environment Variables:
# Add to ~/.config/bash/bashrc
export EDITOR="nvim"
export BROWSER="firefox"
export TERM="xterm-256color"
export DOTFILES="$HOME/.dotfiles"
Custom Aliases:
# Add personal aliases to ~/.config/bash/bashrc
alias work='cd ~/Documents/work'
alias personal='cd ~/Documents/personal'
alias dotfiles='cd ~/.dotfiles'
Terminal Themes:
- Modify color schemes in
kitty.conf
orwezterm.lua
- Choose from popular themes like Dracula, Gruvbox, or Nord
- Ensure consistency across all terminal applications
Editor Themes:
- Neovim themes in
lua/theme.lua
- VS Code themes in
settings.json
- Consistent color schemes across all editors
- Reload shell:
source ~/.bashrc
- Edit Neovim config:
nvim ~/.config/nvim
- Update plugins:
nvim +Lazy +Mason
- Git status:
gs
(alias forgit status
) - New terminal:
Ctrl+Shift+T
(most terminals)
- Bash config:
~/.dotfiles/.config/bash/bashrc
- Neovim config:
~/.dotfiles/.config/nvim/
- Git config:
~/.dotfiles/.config/git/.gitconfig
- Terminal configs:
~/.dotfiles/.config/kitty/
or~/.dotfiles/.config/wezterm/
- Each
.config/
subdirectory contains a comprehensiveREADME.md
- Run
<leader>?
in Neovim for which-key help - Use
man
pages for terminal tools:man tmux
,man git
- Check application documentation:
:help
in Neovim,git help <command>
Feedback and Contributions Welcome!
- Issues: Report bugs or suggest improvements via GitHub issues
- Pull Requests: Submit improvements with clear descriptions
- Discussions: Share your own customizations and workflows
- Documentation: Help improve these guides
Contribution Guidelines:
- Test changes on multiple platforms when possible
- Update relevant README.md files
- Follow existing code style and organization
- Document new features and configurations
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
You are free to:
- Use these configurations for personal or commercial purposes
- Modify and adapt to your needs
- Distribute and share with others
Attribution appreciated but not required!
For detailed keybinding information for each tool, refer to their respective README.md files:
- Bash: Custom aliases and functions (
.config/bash/README.md
) - Neovim: Comprehensive keymap system (
.config/nvim/README.md
) - Kitty: Terminal shortcuts and features (
.config/kitty/README.md
) - WezTerm: Leader-based terminal navigation (
.config/wezterm/README.md
) - Tmux: Session and window management (
.config/tmux/README.md
) - LazyGit: Git workflow shortcuts (
.config/lazygit/README.md
) - VS Code: Vim integration keybindings (
.config/.vscode/README.md
) - IntelliJ: IdeaVim configuration (
.config/.idea/README.md
)
- Clone repository to
~/.dotfiles
- Run appropriate setup script for your platform
- Restart terminal or source
~/.bashrc
- Open Neovim and let plugins install
- Test keybindings in different applications
- Customize themes and personal preferences
- Backup original configurations (if any)
- Read individual README.md files for detailed usage
Welcome to a more productive development environment! ๐ฏ
Tip: Start with the automated setup script, then gradually customize each component to match your personal workflow and preferences!