Skip to content

Overview

This repository stores a personal development environment as code. It is a dotfiles project, which means it tracks configuration files that normally live inside your home directory, such as ~/.zshrc, ~/.tmux.conf, and ~/.config/nvim.

The goal is not to install a random set of tools. The goal is to create a repeatable workflow: open the terminal, navigate quickly, edit code efficiently, keep long-running work alive, and document the shortcuts that matter.

Built by Angel Gonzalez

This is Angel Gonzalez's personal terminal and workflow setup. It is open source so others can learn from it, adapt it, or contribute improvements.

Who This Is For

This project is useful if you:

You want to...This project helps by...
Set up a new Mac or Linux machine fasterProviding an interactive installer and documented packages.
Keep terminal configuration versionedStoring shared config in Git instead of only on one machine.
Work faster in the terminalProviding Neovim, tmux, WezTerm, and Zsh defaults.
Avoid forgetting shortcutsDocumenting the most used commands per app.
Share improvementsKeeping the project open source and contribution-friendly.

Managed Apps

GNU Stow is the installation layer rather than an end-user configuration package. Read its application guide to understand how repository files become live configuration.

AppPackageTargetMain benefit
NeovimnvimFiles inside ~/.config/nvimFast keyboard-first editing and project search.
WezTermwezterm~/.config/wezterm/wezterm.luaConsistent terminal UI.
tmuxtmux~/.tmux.conf, ~/.local/bin/tmux-*Persistent terminal workspaces.
Zshzsh~/.zshrcShell prompt, history, and local command path.

How The Tools Work Together

LayerToolResponsibility
Terminal applicationWezTermDraw the terminal window, tabs, fonts, colors, and native shortcuts.
Interactive shellZshRead commands, manage history, render the prompt, and expose local scripts.
Persistent workspacetmuxKeep sessions alive and organize shells into windows and panes.
EditorNeovimEdit files and search projects without leaving the terminal.
Link managerGNU StowConnect files in this repository to their expected paths under $HOME.

A typical session looks like this:

text
Open WezTerm
  -> Zsh loads prompt, history, and ~/.local/bin
  -> run tmux-dev or tmux-agent
  -> open Neovim in one pane
  -> run tests, servers, or Git in the other panes
  -> detach from tmux and return later without losing the workspace

Two different kinds of tabs

WezTerm tabs belong to the terminal application and disappear when the app closes. tmux windows belong to a persistent tmux session and can survive a closed terminal. Neovim's top bar shows editor buffers, which are open files.

How It Works

The repo uses GNU Stow. Each package mirrors the final path it should have from $HOME.

text
nvim/.config/nvim/init.lua       -> ~/.config/nvim/init.lua
wezterm/.config/wezterm/wezterm.lua -> ~/.config/wezterm/wezterm.lua
tmux/.tmux.conf           -> ~/.tmux.conf
tmux/.local/bin/          -> ~/.local/bin
zsh/.zshrc                -> ~/.zshrc

When installed, Stow creates file-level symlinks from your home directory to this repo. That means the live config and the versioned config are the same file, while unrelated files can remain in the surrounding directory.

Why symlinks matter

If you edit ~/.tmux.conf, you are really editing ~/.config/dotfiles/tmux/.tmux.conf. Git can then show, commit, and push that change.

What Changes On Your Machine

Depending on what you choose during installation, the project can:

AreaPossible change
Apps/toolsInstall Stow, Neovim 0.10+, ripgrep, tmux, Zsh, WezTerm, a Nerd Font, Oh My Zsh, and suggestions.
Config filesLink nvim, wezterm, tmux, and zsh configs into your home directory.
Existing filesMove only conflicting destination files to ~/.config/bbldr/backups/dotfiles/<timestamp>/.
Shell behaviorAdd ~/.local/bin to PATH and show the 👼 prompt icon.
tmux workflowAdd tmux-dev and tmux-agent workspace commands.
SafetyRecord every target and provide a package-aware restore command.

Package Configuration Summary

PackageMain configuration applied
nvimCatppuccin theme, relative numbers, smart-case search, Snacks pickers, Lualine, and a custom buffer line.
weztermNerd Font, Catppuccin colors, opacity, padding, native macOS controls, custom tabs, and tab navigation.
tmuxCtrl+a prefix, pane/window shortcuts, Vi copy mode, persistent layouts, and a system status bar.
zshOh My Zsh theme, angel prompt, shared history, Git plugin, suggestions, Homebrew activation, and local overrides.

Platform Support

PlatformAutomated dependenciesConfig support
macOSHomebrewFull
Ubuntu/DebianAPT and official releasesFull
Other LinuxManualStow packages can be linked after dependencies are installed

macOS-specific blur and title buttons are enabled only on macOS. Linux uses portable WezTerm decorations and reads tmux system information from /proc and /sys when available.

Exact tested versions and runtime boundaries are recorded in Compatibility.

What Stays Out

The repo intentionally avoids machine-specific or private state.

Do not commit:

text
credentials
tokens
API keys
local databases
logs
caches
generated dependency folders
machine-specific SDK paths

Use ~/.zshrc.local for private shell exports and machine-specific paths.

Project Values

ValueMeaning
ReproducibleA new machine should be easier to configure.
DocumentedShortcuts and install steps should be visible and searchable.
ConservativeOnly curated, safe-to-publish config belongs in Git.
OpenPeople can fork the project or propose changes with pull requests.