119 lines
3.1 KiB
Markdown
119 lines
3.1 KiB
Markdown
# 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.
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
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:**
|
|
```bash
|
|
docker volume rm arch-dev_arch-dev-home
|
|
docker compose run --rm arch-dev
|
|
```
|
|
|
|
**Or roll back inside the container:**
|
|
```bash
|
|
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)
|