Skip to content
Saim Hashmi

LazyDots

2025-11

A lazygit-style TUI for dotfiles in Go: see symlink status at a glance and link or unlink files with one key. Works with existing Stow-style repos.

LazyDots TUI
ROLE
Solo: design and implementation
RESULT
Symlink status and one-key linking for Stow-style dotfile repos, installable with go install
STATUS
Work in progress, core symlink management works
STACK
GoBubbleteaLipglossYAML

Quest briefing

Problem

Managing dotfiles by hand is tedious. Symlinks are easy to get wrong, and keeping track of what is linked is hard to do in your head. GNU Stow creates the links but does not show their current state.

LazyDots TUI interface preview

What I built

  • A Bubbletea/Lipgloss TUI that reads Stow-style package directories and shows per-file symlink state: linked, missing, or conflicting.
  • One-key linking: press space to link or unlink an individual file.
  • Safe operations: it never overwrites existing files, and only removes symlinks that point back into your repo.
  • A first-run setup wizard and a --no-splash flag; installs with go install.

Roadmap

Not built yet: batch link/unlink per package, Git status and commit/push/pull from the TUI, per-machine profiles, and a conflict-resolution UI (diff, backup, overwrite).

Loot (what was learned)

  • Bubbletea's Elm architecture fits terminal UIs well: state, update, view.
  • Symlink edge cases pile up: broken links, nested directories, and files that exist but are not links. The safety checks were worth the effort.
  • Designing a tool you use daily gives the fastest feedback loop there is.

That's the whole story.

Liked it?

Say hi, I'm open to new-grad roles from summer 2027.

Something off?

Tell me and it gets fixed tonight.

← All work