neovim-ide/README.md

3.1 KiB

arch-dev v1.7

Riced Neovim IDE · Arch Linux · Stateful · Mobile-Aware

"Like Gentoo without the compiling." Kanagawa Wave · rolling release · AUR-powered · git-snapshotted home


What's new in v1.7

  • Stateful /home/dev — your shell history, plugin state, and config tweaks survive container exit
  • Git-backed snapshot system — commit good states, roll back when things break
  • Auto-snapshot on dotfile updates — image upgrades preserve your history
  • Mobile improvements — bufferline disabled on mobile, dashboard uses thin-line ASCII

The Snapshot System

Your /home/dev is a git repo (state in ~/.arch-dev-state/). When something works, snapshot it. When something breaks, roll back.

# Working state — save it
snap node-working "NodeJS env with nvm + pnpm"

# List your snapshots
snaps

# See what's changed since last snapshot
snapd

# Try something risky, breaks things... no problem
snapr node-working

# Show what's in a snapshot
show-snapshot node-working

# Remove a snapshot you don't need
unsnapshot old-thing

What's tracked: dotfiles, configs, neovim plugins, anything in ~. What's ignored: .cache, .zsh_history, build artifacts, log files.

Snapshots use real git so you can:

  • Branch (_archdev_git checkout -b experimenting)
  • Push to remote (_archdev_git remote add origin git@...)
  • Diff between snapshots (_archdev_git diff snap-a snap-b)

Quick Start

docker compose build
docker compose run --rm arch-dev

First run seeds the home volume from a baked-in skeleton and creates a skeleton tag you can always roll back to.


Volume Architecture

Path Type Purpose
/workspace bind mount → ./workspace Project files, host-visible
/home/dev named volume arch-dev-home Stateful user home, survives --rm
/etc/skel-arch-dev/ image layer Read-only template, used to seed and update

Reset home to factory:

docker volume rm arch-dev_arch-dev-home
docker compose run --rm arch-dev

Or roll back inside the container:

rollback skeleton

Image Updates

When you rebuild the image with new dotfiles:

  1. Container starts, entrypoint compares image dotfiles to home
  2. If image is newer, takes an auto-snapshot of current home
  3. Updates dotfiles, leaving user data alone (history, project state)
  4. You can rollback to the auto-snapshot if you don't like the new dotfiles

Known Caveats

  • AUR/pacman packages are NOT in snapshots (they live in /usr/, not ~)
  • Docker volume size grows with snapshots — _archdev_git gc periodically
  • First snap after major changes can take a few seconds (lots to hash)

Mobile (Termius)

MOBILE=1 activates:

  • Minimal starship prompt
  • Auto-attach screen on connect
  • Bufferline disabled (was showing as purple bar)
  • Habamax colorscheme (kanagawa needs truecolor which Termius mangles)

v2 Roadmap

  • nvm + nodejs (snapshot it after install!)
  • gemini-cli for AI in the terminal
  • copilot.nvim or avante.nvim
  • nvim-dap (debugger)