A comprehensive dotfiles management system using PyInfra for automated setup and configuration of macOS and Arch Linux development environments.
This repository contains dotfiles and configuration management for a complete development environment setup. It automates the installation and configuration of development tools, shell environments, and applications using PyInfra deployment automation.
./bin/update.shThis single command will:
- Install Homebrew (if not present)
- Install rustup (if not present)
- Install uv Python package manager (if not present)
- Run the PyInfra deployment to configure your system
-
/bin/update.sh- Bootstrap script that:- Installs Homebrew package manager
- Installs rustup (Rust toolchain manager)
- Installs uv (fast Python package manager)
- Calls the install script
-
/bin/install.sh- Runs the PyInfra deployment:uv run pyinfra @local configure.py
-
configure.py- PyInfra deployment script that:- Links
.config/directory to~/.config/ - Links
home/directory contents to~/ - Installs and configures all development tools
- Links
.config/- Configuration files that get linked to~/.config/home/- Files that get linked to your home directory (~)bin/- Installation and update scriptsconfigure.py- PyInfra deployment configuration
- Go - Programming language
- Bun - JavaScript runtime
- Rust (via rustup) - Systems programming language
- Fish - Modern shell with autocompletion
- Starship - Cross-shell prompt
- Fisher - Fish plugin manager
- Tmux - Terminal multiplexer
- TPM (Tmux Plugin Manager) - Auto-installed for plugin management
- tmux-fzf - Fuzzy finder for sessions, windows, panes (prefix + Ctrl-f)
- Neovim - Modern Vim-based editor with full configuration
- ripgrep - Fast text search
- fd - Fast file finder
- fzf - Fuzzy finder
- gum - Glamorous shell scripts
- K9s - Kubernetes TUI
- Pulumi - Infrastructure as Code
- GitHub CLI - GitHub command line
- Lazygit - Git TUI
- Lazydocker - Docker TUI
- GnuPG - Encryption and signing
- pinentry-mac - macOS GPG passphrase entry
- Alacritty - GPU-accelerated terminal
- Slack - Team communication
- Spotify - Music streaming
- Obsidian - Note-taking and knowledge management
- LinearMouse - Mouse customization
- Bitwarden - Password manager
All tools come pre-configured through the linked configuration directories:
- Neovim: Full IDE setup with LSP, plugins, and keybindings
- Fish: Shell configuration with aliases and functions
- Tmux: Terminal multiplexer configuration
- Git: Version control settings
- And more: All configurations are automatically linked and ready to use
This dotfiles system includes several custom utilities for configuration and environment management:
adopt-dot- Interactive tool to adopt existing config files from~or~/.configinto your dotfiles repositoryedit-env- Create and edit environment variable groups in OpenBao KV
envl- Fish function to load OpenBao environment variables into your shell session- Includes related commands:
envsandenvls - Provides tab completion for environment group names
- Calls
env-selectinternally to fetch and load variables
- Includes related commands:
env-select- Fetch and select environment variable groups from OpenBao KV
These tools use OpenBao OIDC authentication and load secrets from the kv/env namespace.
TPM (Tmux Plugin Manager) is automatically installed by the dotfiles. On first setup, you'll need to install the configured plugins:
- Start tmux:
tmux - Press
prefix + I(capital i) to install plugins - Use
prefix + Ctrl-fto launch the tmux-fzf fuzzy finder for sessions/windows/panes
Press prefix + Ctrl-f to access:
- Session switching - Fuzzy find across all tmux sessions
- Window switching - Jump to any window in any session
- Pane switching - Navigate to any pane
- Additional tools - Commands, keybindings, clipboard, and process management
Run ./bin/update.sh anytime to:
- Update all package managers (Homebrew, rustup, uv)
- Re-run the deployment to catch any new configurations
- Upgrade all installed Homebrew packages
- Update TPM and tmux plugins (run
prefix + Uin tmux)
- macOS (tested on recent versions) or Arch Linux
- Internet connection for downloading tools
- Admin privileges for some installations
On Arch Linux bare metal systems, a complete Hyprland desktop environment is installed with the following components:
| Component | Tool | Description |
|---|---|---|
| Compositor | Hyprland | Dynamic tiling Wayland compositor |
| Status Bar | Waybar | Customizable status bar |
| Launcher | Fuzzel | Fast application launcher |
| Notifications | Mako | Lightweight notification daemon |
| Wallpaper | Hyprpaper | Wallpaper manager |
| Lock Screen | Hyprlock | GPU-accelerated screen locker |
| Idle Daemon | Hypridle | Idle management |
| File Manager | Yazi | Terminal-based file manager |
| Terminal | Ghostty | GPU-accelerated terminal |
| Keybind | Action |
|---|---|
SUPER + Return |
Open terminal (Ghostty) |
SUPER + D |
Open application launcher |
SUPER + E |
Open file manager (Yazi) |
SUPER + B |
Open browser (Firefox) |
SUPER + V |
Open clipboard history |
| Keybind | Action |
|---|---|
SUPER + Q |
Close window |
SUPER + SHIFT + Q |
Exit Hyprland |
SUPER + F |
Toggle fullscreen |
SUPER + Space |
Toggle floating |
SUPER + P |
Toggle pseudo-tile |
SUPER + S |
Toggle split direction |
| Keybind | Action |
|---|---|
SUPER + H |
Focus left |
SUPER + J |
Focus down |
SUPER + K |
Focus up |
SUPER + L |
Focus right |
| Keybind | Action |
|---|---|
SUPER + SHIFT + H |
Move left |
SUPER + SHIFT + J |
Move down |
SUPER + SHIFT + K |
Move up |
SUPER + SHIFT + L |
Move right |
| Keybind | Action |
|---|---|
SUPER + CTRL + H |
Shrink width |
SUPER + CTRL + L |
Grow width |
SUPER + CTRL + K |
Shrink height |
SUPER + CTRL + J |
Grow height |
| Keybind | Action |
|---|---|
SUPER + 1-9, 0 |
Switch to workspace 1-10 |
SUPER + SHIFT + 1-9 |
Move window to workspace |
SUPER + ] |
Next workspace |
SUPER + [ |
Previous workspace |
| `SUPER + `` | Toggle special workspace |
| `SUPER + SHIFT + `` | Move to special workspace |
| Keybind | Action |
|---|---|
Print |
Screenshot region to clipboard |
SHIFT + Print |
Screenshot screen to clipboard |
SUPER + Print |
Screenshot region to file |
SUPER + SHIFT + Print |
Screenshot screen to file |
| Keybind | Action |
|---|---|
SUPER + SHIFT + X |
Lock screen |
SUPER + SHIFT + C |
Color picker |
| Key | Action |
|---|---|
XF86AudioRaiseVolume |
Volume up |
XF86AudioLowerVolume |
Volume down |
XF86AudioMute |
Toggle mute |
XF86AudioMicMute |
Toggle mic mute |
XF86MonBrightnessUp |
Brightness up |
XF86MonBrightnessDown |
Brightness down |
XF86AudioPlay |
Play/Pause media |
XF86AudioNext |
Next track |
XF86AudioPrev |
Previous track |
| Keybind | Action |
|---|---|
SUPER + Left Click |
Move window |
SUPER + Right Click |
Resize window |
SUPER + Scroll |
Cycle workspaces |
All configuration files are located in ~/.config/:
| File | Purpose |
|---|---|
hypr/hyprland.conf |
Main Hyprland configuration |
hypr/hyprpaper.conf |
Wallpaper configuration |
hypr/hyprlock.conf |
Lock screen appearance |
hypr/hypridle.conf |
Idle timeout behavior |
waybar/config |
Status bar modules and layout |
waybar/style.css |
Status bar styling (Aura theme) |
fuzzel/fuzzel.ini |
Application launcher settings |
mako/config |
Notification daemon settings |
Edit ~/.config/hypr/hyprpaper.conf and uncomment/modify:
preload = ~/Pictures/Wallpapers/your-wallpaper.png
wallpaper = , ~/Pictures/Wallpapers/your-wallpaper.pngThe default idle configuration:
- 2.5 minutes: Screen dims to 30%
- 5 minutes: Screen locks
- 5.5 minutes: Display turns off
- 30 minutes: System suspends