Welcome to my personal dotfiles repository! 🎉 This collection is designed to streamline and automate the setup of my development environment on Ubuntu LTS machines.
Recently migrated from Ansible, this repository now uses shell scripts + GNU Stow for a faster, simpler, and more robust configuration experience. These dotfiles are the blueprint for a consistent, efficient, and delightful computing experience. Say goodbye to manual setups and hello to instant productivity!
- 🚀 Features at a Glance
- 🚀 Getting Started
- 📂 Architecture & Project Structure
- 🔧 Conventions & Customization
- 🤝 Contributing
This repository automates the installation and configuration of a wide array of essential tools and applications:
- Languages: Node.js (via
fnm), Python (viapyenv), Go, PHP, and Ruby. - Docker: Containerization for modern application deployment.
- AI CLIs: Tools for interacting with Anthropic's Claude and Google's Gemini models.
- Cloud CLIs:
gcloudCLI for Google Cloud Platform management.
zsh: A powerful shell, supercharged withsheldonfor lightning-fast plugin management.tmux: Boost your terminal productivity with persistent sessions and window management.git& Utilities: Enhanced Git configurations,gitui, and fuzzy matching tools.rg(Ripgrep) &fd: Blazing-fast search and find tools.- Terminal Emulators: Core terminal configurations and
urxvtsetup.
neovim: Built from source and heavily customized for an unparalleled editing experience.
i3&rofi: My preferred configuration for the i3 tiling window manager and application launcher.- Fonts: Beautiful UI and terminal fonts, including Hack Nerd Font.
- Desktop Apps: Slack, ActivityWatch, and other essential desktop utilities.
Ready to transform your development environment? Follow these simple steps:
- A fresh or existing Ubuntu LTS installation.
gitinstalled to clone the repository.make(optional, for convenience).
-
Clone the repository:
git clone https://github.com/phux/.dotfiles.git cd .dotfiles -
Run the full installation:
This command will execute all installation phases sequentially, installing packages and applying your dotfiles using GNU Stow.
make # or ./install.sh -
Run a specific phase (optional):
If you only want to apply symlinks or install specific tools, you can run individual scripts instead of the full installer:
# Apply dotfiles only (stow symlinks) bash scripts/01-stow.sh # Install just development tools bash scripts/03-dev-tools.sh
This project uses a clean, three-layer system to keep everything organized and idempotent:
install.sh— The main entry point. Iterates and executes all scripts inscripts/sequentially.lib/helpers.sh— Shared, idempotent helper functions (e.g.,install_packages,clone_or_update_repo, formatting tools) to prevent raw apt/echo usage.scripts/— Numbered phases executed in order:00-core.sh— Sudo keepalive, apt update, base dependencies.01-stow.sh— Symlinks all packages instow/to your home directory using GNU Stow with backup-based conflict resolution.02-shell.sh— Zsh, tmux, CLI tools, sheldon, TPM.03-dev-tools.sh— Languages, Docker, neovim from source, AI CLIs.04-desktop.sh— i3, rofi, desktop apps, ActivityWatch, Slack.05-fonts.sh— Hack Nerd Font installation.
stow/ — Each subdirectory is a Stow package mirroring your home directory ~. All packages are applied at once via stow -t ~ -d ./stow */.
These dotfiles are designed to be flexible and safe to re-run!
- Idempotency: All scripts must be safe to re-run. Use helper functions like
pkg_installedandclone_or_update_reporather than raw install commands. - Adding Configurations: New tool configurations go in
stow/<toolname>/mirroring the home directory path (e.g.,stow/foo/.config/foo/config). - Extending Installation: New installation phases get a new numbered script in
scripts/. Always use helper functions fromlib/helpers.shfor logging and package management.
While these are personal dotfiles, I welcome suggestions and improvements! If you have ideas for enhancements or find issues, feel free to open an issue or submit a pull request. Let's make our development environments even better together!