A comprehensive dotfiles repository that automates the setup of a complete development environment using Ansible playbooks. This configuration provides a consistent, reproducible development setup across different machines with LazyVim-based Neovim configuration, ZSH shell customization, and automated package management.
# Clone the repository
git clone <repository-url> ~/.dotfiles
cd ~/.dotfiles
# Run the complete setup
ansible-playbook main.yml
# Or run specific components
ansible-playbook main.yml --tags packages
ansible-playbook main.yml --tags dotfiles
ansible-playbook main.yml --tags shell
ansible-playbook main.yml --tags vim- π§ Neovim Configuration: LazyVim-based setup with extensive plugin ecosystem
- π Shell Environment: ZSH with custom plugins and enhanced productivity features
- π¦ Package Management: Cross-platform automated installation of development tools
- βοΈ Dotfile Management: Template-based configuration file deployment
- Languages: TypeScript, Vue.js, Python, Go, Rust, .NET Core
- Version Control: Git with optimized configuration
- Terminal: Tmux with tmuxinator for session management
- AI Integration: GitHub Copilot and ChatGPT plugins for Neovim
- Code Quality: Stylua, ESLint, and language-specific linters
The setup is orchestrated by four core roles executed in sequence:
packages- Installs system packages (apt/homebrew/pip/debs)dotfiles- Deploys configuration files from templatesshell- Configures ZSH environment with custom pluginsvim- Sets up Neovim with LazyVim distribution
lazy/
βββ lua/config/ # Core LazyVim configuration
β βββ lazy.lua # Plugin manager bootstrap
β βββ keymaps.lua # Custom key mappings
β βββ options.lua # Editor options
β βββ autocmds.lua # Auto commands
βββ lua/plugins/ # Plugin customizations
β βββ lsp-config.lua # Language server configuration
β βββ telescope.lua # Fuzzy finder setup
β βββ chatgpt.lua # AI integration
β βββ ...
βββ stylua.toml # Lua formatter configuration
Centralized package definitions support multiple package managers:
packages- APT packages for Ubuntu/Debiancasks- Homebrew packages for macOSdebs- Direct .deb package downloadspips- Python packages via pip
# Run all tests
make test
# Format Lua code
make format
# Run specific test file
nvim --headless --noplugin -u nvim/tests/minimal_init.vim -c "PlenaryBustedFile nvim/tests/st1/utils/init_spec.lua {minimal_init = 'nvim/tests/minimal_init.vim'}"Edit roles/packages/defaults/main.yml and add packages to the appropriate list:
packagesfor APT packagescasksfor Homebrew packagesdebsfor direct downloadspipsfor Python packages
- Core config: Modify files in
lazy/lua/config/ - Plugin overrides: Add/edit files in
lazy/lua/plugins/ - New tests: Create test files in
nvim/tests/st1/
.
βββ main.yml # Main Ansible playbook
βββ Makefile # Development commands
βββ CLAUDE.md # AI assistant instructions
βββ roles/ # Ansible roles
β βββ packages/ # Package installation
β βββ dotfiles/ # Configuration file management
β βββ shell/ # ZSH setup
β βββ vim/ # Neovim installation
βββ lazy/ # LazyVim configuration
β βββ lua/config/ # Core configuration
β βββ lua/plugins/ # Plugin customizations
βββ .vendor/ # Git submodules for dependencies
- TypeScript/JavaScript: Full LSP support with Vue.js integration
- Python: Development environment with testing frameworks
- Go: Complete toolchain with debugging support
- Rust: Cargo integration with rustup management
- .NET: Multi-version SDK support (6.0, 7.0, 8.0)
- Lua: Lua support with LuaRocks
- Fuzzy Finding: Telescope integration for files, commands, and symbols
- Git Integration: Advanced Git workflows with GitHub CLI
- Terminal Integration: Seamless tmux navigation and session management
- AI Assistance: Built-in ChatGPT and Copilot integration
- Code Formatting: Automatic formatting with language-specific tools
- Linux: APT package management for Ubuntu/Debian systems
- macOS: Homebrew integration for package installation
- Consistent Environment: Same configuration across all platforms
# Update only packages
ansible-playbook main.yml --tags packages
# Update only dotfiles
ansible-playbook main.yml --tags dotfiles
# Update shell configuration
ansible-playbook main.yml --tags shell
# Update Neovim setup
ansible-playbook main.yml --tags vim# Lint Ansible playbooks
ansible-lint main.yml
# Test Neovim configuration
make test
# Format all Lua code
make formatThis is a personal dotfiles repository, but the structure and automation patterns can serve as inspiration for your own setup. Key principles:
- Automation First: Everything should be reproducible via Ansible
- Cross-Platform: Support both Linux and macOS environments
- Modular Design: Each component (packages, dotfiles, shell, vim) is independent
- Testing: Neovim configuration includes comprehensive test coverage
- Documentation: Clear instructions and architectural decisions
- Ansible: For automation and orchestration
- Git: For version control and submodule management
- Python 3: For Ansible and various development tools
All development tools are automatically installed via the playbooks:
- Neovim with LazyVim distribution
- ZSH with custom configuration
- Tmux and tmuxinator
- Language servers and development tools
- Package managers (npm, cargo, pip, etc.)
This dotfiles repository represents a battle-tested development environment optimized for modern software development workflows. The automation ensures consistency and reduces setup time when configuring new development machines.