panama update: one command, no questions, and no gap it cannot see
Claude-Session: https://claude.ai/code/session_01Ms2FbjQy31TVf3CEvQhGM8
This commit is contained in:
@@ -18,7 +18,16 @@ git clone https://git.gbrown.org/gib/Panama.git ~/.local/share/Panama
|
||||
```
|
||||
|
||||
Both are safe to run again: an existing clone is fast-forwarded rather than
|
||||
replaced, and `install` is the upgrade path.
|
||||
replaced. Once a machine exists, though, the command that keeps it current is
|
||||
`panama update` — one command, and it never asks you anything:
|
||||
|
||||
```sh
|
||||
panama update
|
||||
```
|
||||
|
||||
It pulls, applies any repairs this machine has not had, and runs the stages
|
||||
below that need no answers. `./install` remains what it is: how a machine is
|
||||
built, and how you change an answer you gave.
|
||||
|
||||
`install` asks its questions first and then runs the stages in `setup/scripts/`
|
||||
in order, without stopping again:
|
||||
@@ -190,21 +199,39 @@ name it; **Open Project** lays it out again.
|
||||
Workspaces are recorded as positions rather than numbers, and opening a project
|
||||
claims free ones, so it never lands on top of what you are already doing. An
|
||||
application that refuses to open twice — Slack, Thunderbird, the browser — is
|
||||
moved into place rather than launched again. Saved layouts are listed on the
|
||||
Desktop settings page, which is also where they are removed.
|
||||
moved into place rather than launched again. Saved layouts are listed on
|
||||
Shell › Workspaces in Settings, which is also where they are removed.
|
||||
|
||||
## The `panama` command
|
||||
|
||||
```sh
|
||||
panama update # review, commit and sync this repo
|
||||
panama update # bring this machine up to date; asks nothing
|
||||
panama sync # review, commit and push your changes to this repo
|
||||
panama edit # open it in Neovim
|
||||
panama doctor # what is actually running, not what was installed
|
||||
panama test # every contract, or a subset by pattern
|
||||
panama upgrade # re-run ./install from anywhere
|
||||
panama migrate # apply repairs this machine has not had yet
|
||||
panama upgrade # re-run ./install from anywhere, interview and all
|
||||
panama apps # choose applications to install, by category
|
||||
panama app # applications no repository carries; build one by name
|
||||
```
|
||||
|
||||
`panama update` and `panama sync` are separate verbs on purpose. One acts on
|
||||
the machine, the other on the repository. A single command that chose between
|
||||
them by checking whether the working tree happened to be dirty would do a
|
||||
different job depending on state nobody can see — and, worse, would never
|
||||
update a machine belonging to somebody who had left a file edited.
|
||||
|
||||
`panama update` stashes uncommitted work across the pull and restores it
|
||||
afterwards. If restoring conflicts it resets the checkout and leaves the work
|
||||
in the stash, saying so at the end of the run: every dotfile here is a symlink
|
||||
into this repository, so a conflict marker is not a thing to fix at leisure. It
|
||||
is live in `~/.config` the moment it is written.
|
||||
|
||||
Only two things still need `./install`: a machine that does not exist yet, and
|
||||
an answer you want to change. Adding a package to a list you already have is
|
||||
`panama update`; adding an optional category is `panama apps`.
|
||||
|
||||
`panama apps` is the optional-application catalog, opened after the fact. The
|
||||
interview offers the same categories during `./install`, whole; this picks a
|
||||
category and then the applications inside it, so a machine can acquire Slack in
|
||||
|
||||
Reference in New Issue
Block a user