Dots started as a shell config and kept growing. At some point it became a Python script, and eventually it made more sense to rewrite the whole thing as a proper Rust tool — a single static binary with an interactive TUI, a symlink engine, and everything built in.

dots manages symlinks (GNU Stow–style), installs tools via your system package manager, applies premade app configs, manages shell aliases, and updates itself — all from one binary with no runtime dependencies.

The TUI

dots opens an interactive dashboard built on ratatui. Six panes give you a live view of symlink health, installed tools, shell plugins, app configs, available updates, and network status. Dedicated screens let you repair links, install missing tools, manage aliases, apply themes, and import/export portable profiles.

Everything the TUI does is also available as CLI subcommands, so dots works well in scripts and setup flows.

Design goals

Fast installs. Cross-platform support (macOS and Linux). A symlink engine that backs up existing files before replacing them. Premade configs compiled into the binary so they're always available offline. And a self-update mechanism that re-repairs symlinks after pulling.

Package tiers

Dependencies are split into three tiers — Required, Optional, and Dev — so you only install what's relevant to you. The same dependency list works across Homebrew (macOS), apt (Debian/Ubuntu), and dnf (Fedora), with per-platform package name resolution.

Theme

This site uses the noir-cat color palette — a dark theme based on Catppuccin Mocha with a neutral gray background. The terminal and site share the same color scheme.