- Lucas Vienna's Dotfiles
A comprehensive developer environment setup that gets you from zero to productive in minutes. These dotfiles automate the installation and configuration of modern development tools across macOS, Debian, Ubuntu, and WSL 2.
One command installs and configures:
- Shell: Zsh with Oh-My-Zsh, custom plugins, and productivity aliases
- Terminal Multiplexer: Tmux with sensible defaults and TPM plugin manager
- Editor: Neovim with LazyVim framework, LSP support, and custom configurations
- Modern CLI Tools: ripgrep, fd, fzf, btop, lazygit, delta, and more
- Development: Node, Python, Go, Rust, Bun via Mise runtime manager
- Security: SSH/GPG key generation and Git commit signing
- Theming: System-wide theme switching across all applications
Platform Support: macOS, Debian, Ubuntu, WSL 2
You'll need curl and Bash 4+ installed:
Debian/Ubuntu:
apt-get update && apt-get install -y curlmacOS (Apple Silicon):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" \
&& eval "$(/opt/homebrew/bin/brew shellenv)" \
&& brew install bash \
&& bashmacOS (Intel):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" \
&& eval "$(/usr/local/bin/brew shellenv)" \
&& brew install bash \
&& bashRun this one-liner to bootstrap your entire development environment:
BOOTSTRAP=1 bash <(curl -sS https://raw.githubusercontent.com/lucasvienna/dotfiles/master/install)The script is idempotent and safe to run multiple times. It will:
- Prompt before overwriting existing configs
- Let you review package lists before installation
- Allow you to choose the installation directory
- Set up everything in ~5 minutes
Skip system packages (if you want to handle them manually):
BOOTSTRAP=1 bash <(curl -sS https://raw.githubusercontent.com/lucasvienna/dotfiles/master/install) --skip-system-packagesTest drive without touching your system:
docker container run --rm -it -e "IN_CONTAINER=1" -v "${PWD}:/app" -w /app debian:stable-slim bash
# Inside the container:
apt-get update && apt-get install -y curl \
&& bash <(curl -sS https://raw.githubusercontent.com/lucasvienna/dotfiles/master/install) \
&& zsh -c ". ~/.config/zsh/.zprofile && . ~/.config/zsh/.zshrc; zsh -i"Switch between included themes with a single command:
# List available themes
dot-theme-set --list
# Set a specific theme
dot-theme-set tokyonight-moon
# Random theme
dot-theme-setThemes update automatically across Neovim, tmux, fzf, btop, Ghostty, and gitui.
- Tokyonight Moon: High contrast, excellent for recordings
- Gruvbox Dark: Warm colors, easy on the eyes
- Dracula Pro: Modern dark theme with vibrant accents
Add your own themes by creating a new directory in themes/ with configs for
each app.
Once installed, manage your dotfiles with these commands:
cd "${DOTFILES_PATH}"
# Update everything (packages, configs, plugins)
./install
# Update configs only (skip packages)
./install --skip-system-packages
# Pull latest changes without installing
./install --pull
# Pull and install in one command
./install --update
# Compare your config with the example
./install --diff-config
# Preview incoming changes
./install --diff
# View available updates
./install --new-commitsCopy install-config.example to install-config and customize:
# Add extra packages
export BREW_PACKAGES_EXTRAS="package1 package2"
# Add programming languages
export MISE_LANGUAGES_EXTRAS["ruby"]="[email protected]"
# Pre-fill your git config
export YOUR_NAME="Your Name"
export YOUR_EMAIL="[email protected]"The install-config file is git-ignored, so your customizations persist across
updates.
These files are sourced but never tracked:
.config/zsh/.zshrc.local- Shell customizations.config/zsh/.aliases.local- Custom aliases.config/git/config.local- Git configuration
For major customizations:
git checkout -b my-customizations
# Make your changes
git commit -am "Personalize setup"
# Merge upstream updates
git pull origin main
git rebase mainThe install script automatically:
- Configures
/etc/wsl.conffor optimal performance - Copies
.wslconfigto your Windows user directory - Sets up clipboard sharing via WSLg
After installation, restart WSL from PowerShell:
wsl --shutdownNote: Systemd is intentionally disabled to avoid the 10-15 second startup delay.
.config/ # Application configurations
├── nvim/ # Neovim (LazyVim)
├── tmux/ # Tmux with TPM
├── zsh/ # Zsh with Oh-My-Zsh
├── git/ # Git with delta, signing
├── ghostty/ # Terminal emulator
├── fzf/ # Fuzzy finder
└── btop/ # System monitor
.local/bin/ # Custom scripts
├── dot-theme-set # Theme switcher
├── clip-copy # Cross-platform clipboard
├── clip-paste # Clipboard utilities
└── mkscript # Script generator
themes/ # System-wide themes
install # Main installation script
install-config # Your customizations (git-ignored)
- Zsh 5.0+
- Tmux 3.1+
- Neovim 0.11+
- Git 2.0+
The install script handles all dependencies automatically.
For detailed information about the architecture, customization options, and troubleshooting, check out CLAUDE.md.
MIT - Feel free to use any part of this configuration.
Lucas Vienna Developer & DevOps Engineer
These dotfiles power my daily development workflow across multiple machines and environments. They're battle-tested through years of professional development work.
Questions? Issues? Feel free to open an issue or submit a PR.
This repository is a fork of Nick Janetakis' dotfiles. Huge thanks to Nick for creating such a comprehensive and well-documented foundation that made this setup possible. His original work includes excellent blog posts and videos about the various configurations if you want to dive deeper into the implementation details.