My personal dotfiles for a consistent development environment across machines.
# Clone the repository
git clone git@github.com:gsantovena/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
# Run quality checks
make check
# Install dotfiles
make install- Shell Configuration: Zsh with oh-my-zsh, custom aliases and functions
- Editor Setup: Neovim-only configuration with lazy.nvim plugin management
- Git Configuration: Custom aliases and templates for efficient workflows
- Package Management: Comprehensive Brewfile for development tools
- Security: Proper secrets management and validation
- Testing: Automated installation validation and security checks
./install-dotfiles.sh# Dry run to see what will be changed
./scripts/install-enhanced.sh --dry-run
# Install with backup and validation
./scripts/install-enhanced.sh --backup --verbose
# Force installation (skip validation)
./scripts/install-enhanced.sh --forcemake install-dry # Dry run
make install # Full installation
make check # Run all quality checks
make quick-install # Run checks then installdotfiles/
βββ .github/workflows/ # CI/CD automation
βββ scripts/ # Installation and validation scripts
βββ tests/ # Automated tests
βββ aliases # Shell aliases
βββ bash_profile # Bash configuration
βββ exports # Environment variables
βββ functions # Shell functions
βββ git/ # Git templates and hooks
βββ gitconfig # Git configuration
βββ nvim/ # Neovim configuration
βββ zshrc # Zsh configuration
βββ Brewfile # Package management
βββ Makefile # Build automation
- Environment variables for sensitive data
- Encrypted storage support (GPG/age)
- Pre-commit secret detection
- Comprehensive .gitignore patterns
make security # Run security validation
./scripts/security-check.sh- No hardcoded credentials in version control
- Proper file permissions validation
- Email address externalization
- Secure backup procedures
make test # Run installation tests
make lint # Shell script linting
make check # Complete quality validation# Test installation in safe environment
./scripts/test-install.sh
# Validate configurations
git config --file gitconfig --list
zsh -n zshrc- Git: Version control
- Zsh: Modern shell (oh-my-zsh recommended)
- Homebrew: Package management (macOS)
- Neovim: Modern text editor
- shellcheck: Script linting
- bats: Testing framework
# macOS
brew install git zsh neovim shellcheck
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install git zsh neovim shellcheck
# Install oh-my-zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"This repository now uses Neovim as the only tracked editor configuration.
The active runtime lives under nvim/, with:
nvim/init.vimas the thin entrypointnvim/lua/config/*for general editor behaviornvim/lua/plugins/*for grouped lazy.nvim plugin specsnvim/coc-settings.jsonfor CoC settings
Supporting Neovim docs:
nvim/README.mdβ structure and ownershipnvim/PLUGIN_AUDIT.mdβ current plugin inventorynvim/PLUGIN_REEVALUATION.mdβ keep/remove/replace decisions
# Plugins are managed by lazy.nvim and install automatically
# Open Neovim to trigger plugin installation
nvim
# Or manually trigger lazy.nvim
nvim -c "Lazy install" -c "qa"- Better plugin support and performance
- Asynchronous processing
- Modern architecture
- Lua configuration support
- No split ownership between
nvim/and legacy Vim files
- Automated testing on multiple OS platforms
- Shell script linting with shellcheck
- Security scanning and validation
- Configuration syntax checking
- Installation validation
- Security compliance
- Cross-platform compatibility
- Performance checks
# Set environment-specific variables
export WORK_ENVIRONMENT="true" # in secrets file
# Use in configurations
if [[ "$WORK_ENVIRONMENT" == "true" ]]; then
# Work-specific settings
fi- Add the file to the repository
- Update
HOME_FILESorCONFIG_FILESin install scripts - Test with
make test - Document any dependencies
# Update packages
brew bundle --file=Brewfile
# Update plugins
nvim -c "Lazy update" -c "qa"
# Run health checks
make check# Create backup before changes
./scripts/install-enhanced.sh --backup
# Restore from backup
cp -r ~/.dotfiles-backup-YYYYMMDD_HHMMSS/.* ~/Installation fails with permission errors
# Fix ownership
sudo chown -R $USER:$USER ~/.dotfiles
# Check permissions
./scripts/security-check.shSymlinks not working
# Verify installation
./scripts/test-install.sh
# Manual verification
ls -la ~/.zshrc ~/.gitconfig ~/.config/nvimNeovim statusline icons look wrong
# Install a Nerd Font if needed
brew install --cask font-hack-nerd-fontThen select Hack Nerd Font in your terminal profile. In iTerm2: Settings β Profiles β Text β Font.
Oh-my-zsh not loading
# Install oh-my-zsh first
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# Restart shell
exec zsh- Check GitHub Issues for known problems
- Run
make checkfor comprehensive validation - Review logs in
~/.logs/directory
- Fork the repository
- Create a feature branch
- Make your changes
- Run quality checks:
make check - Submit a pull request
# Set up development environment
git clone your-fork
cd dotfiles
# Make changes
vim some-config-file
# Test changes
make test
# Run security checks
make security
# Commit and push
git add .
git commit -m "feat: add new configuration"
git push origin feature-branchMIT License - see LICENSE file for details.
- Oh-my-zsh community for shell enhancements
- Vim/Neovim community for editor excellence
- Homebrew maintainers for package management
- Open source contributors who make development better
Last updated: $(date) For DevOps recommendations and improvements, see DEVOPS_RECOMMENDATIONS.md