Skip to content

Latest commit

 

History

History
127 lines (97 loc) · 5.29 KB

File metadata and controls

127 lines (97 loc) · 5.29 KB

ImBIOS Environment

Platform: Linux Shell: Zsh Package Manager: apt Prompt: Starship License: MIT

Portable Zsh dotfiles, shell configuration, and system package tracking for Ubuntu/Debian.

Inspired by thdxr/environment. Uses GNU Stow to manage dotfiles, modular shell scripts for Zsh configuration, and per-machine package lists for reproducible Ubuntu setups across multiple servers and workstations.

Features

  • Modular Zsh setup -- shell config split into small, composable files under custom/
  • System package tracking -- record which apt packages belong to each machine, install them reproducibly
  • Multi-machine support -- shared package groups (base, dev, network, desktop) plus per-machine overrides
  • Zero bloat -- no frameworks, no oh-my-zsh, no heavy plugins. Just Zsh + zplug + Starship
  • Secrets separated -- tokens and machine-specific config live in ~/.zshrc.local (gitignored)
  • One-command bootstrap -- install script handles dependencies and deploys dotfiles

Structure

environment/
├── home/                    # Dotfiles managed with GNU Stow (symlinked to ~)
│   ├── .zshrc               # Clean, modular zshrc
│   ├── .gitconfig           # Git config
│   └── .config/
│       └── starship.toml    # Starship prompt theme
├── custom/                  # Modular shell config sourced by .zshrc (in order)
│   ├── 00-environment       # PATH, env vars (Go, Bun, pnpm, fnm, etc.)
│   ├── 01-history           # History settings
│   ├── 02-aliases           # General aliases
│   ├── 03-git               # Git shortcuts
│   ├── 04-functions         # Shell functions
│   └── 05-completions       # SDKMAN, Conda, Homebrew, etc.
├── packages/                # System package tracking per machine
│   ├── install              # Install all tracked packages for a host
│   ├── analyze              # Find installed packages not in any group
│   ├── clean                # Remove orphaned dependencies
│   └── group/               # Package lists by group and machine codename
│       ├── base             # Core packages (all machines)
│       ├── dev              # Development tools
│       ├── network          # Cloud/networking tools
│       ├── desktop          # GUI packages
│       ├── baltimore/       # Laptop (x86_64)
│       └── enterprise/      # ARM dev server
├── install                  # Bootstrap script (installs deps + deploys dotfiles)
└── .gitignore

Quick Start

git clone git@github.com:ImBIOS/environment.git ~/dev/environment
~/dev/environment/install
# Edit ~/.zshrc.local with your secrets and machine-specific config
source ~/.zshrc

The install script handles everything:

  • Installs system dependencies (stow, zsh, zplug, fzf, starship, fnm, bun, pnpm, uv, rustup, gh, and more)
  • Deploys dotfiles to your home directory via stow
  • Creates a ~/.zshrc.local template for your secrets if it doesn't exist

Package Management

Track and reproduce apt packages across machines.

# Install all tracked packages for current machine
~/dev/environment/packages/install

# Install for a specific machine by codename
~/dev/environment/packages/install enterprise

# Find installed packages not tracked in any group
~/dev/environment/packages/analyze

# Remove orphaned dependencies
~/dev/environment/packages/clean

Adding a New Machine

  1. Create a group directory with its codename:

    mkdir ~/dev/environment/packages/group/<codename>
  2. Run analyze on that machine to find untracked packages

  3. Add the codename to the table below

Machine Codenames

Codename Machine Arch Role
baltimore Local laptop x86_64 Desktop + development
enterprise Oracle ARM server aarch64 Dev server + Docker Swarm manager

Secrets

Secrets and machine-specific config go in ~/.zshrc.local (not tracked in git). The install script creates a template if it doesn't exist.

Included Tools

Tool Purpose
Zsh Shell
zplug Zsh plugin manager
Starship Cross-shell prompt
fzf Fuzzy finder
GNU Stow Dotfile symlinks
fnm Node.js version manager
Bun JavaScript runtime
pnpm Node package manager
uv Python package manager
Rustup Rust toolchain installer

License

MIT