Hi Yarl
On 2026-02-21 11:06, Yarl wrote:
I think that since a GCD is necessary, we should take this opportunity
to carry out a complete restructuring. This would allow us to
standardize the user interface once and for all. What do you think?
This is the current state:
━━━━━━━━━━━━━━━━━━━━━━━━━━
archive
build
challenge
container
copy
deploy
describe
download
edit
environment (deprecated)
gc
git
graph
hash
home
import
install
lint
locate
pack
package
processes
publish
pull
refresh
remove
repl
search
shell
show
size
style
system
time-machine
upgrade
weather
━━━━━━━━━━━━━━━━━━━━━━━━━━
Table 1: User commands
━━━━━━━━━━━━━━━━━━
authenticate
discover
offload
perform-download
substitute
━━━━━━━━━━━━━━━━━━
Table 2: Internal commands
What follows is a *rough* proposal, intended to raise the right
questions and get things started.
Group related commands/actions under a common domain or
subdomain. e.g. *guix domain action*.
With that in mind, we avoid overly long command lines.
e.g. *guix domain subdomain subsubdomain … action*.
Flags should not represent actions but options.
Goal:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
build
deploy
describe
home build
container
delete-generations
describe
edit
extension-graph
import
list-generations
reconfigure
roll-back
search
shepherd-graph
switch-generation
package edit
import
lint
list-available
locate
refresh
search
search-paths
show
style
processes
profile delete-generations
export-channels
export-manifest
install
list-generations
list-installed
list-profiles
manifest
remove
roll-back
switch-generation
upgrade
pull
repl
shell
store archive export
extract
generate-key
import
list
missing
authorize
copy
derivers
diff
download
gc
list-busy
list-dead
list-failures
list-live
list-roots
optimize
pack
publish
references
referrers
requisites
vacuum-database
verify
system build
container
delete-generations
describe
docker-image
edit
extension-graph
image
import
init
installer
list-generations
reconfigure
roll-back
search
shepherd-graph
switch-generation
vm
time-machine
tool challenge
container-exec
download
git-authenticate
graph
hash
size
weather
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Table 3: Futur
yarl
About this, I always hated that `guix package` and `guix sytem|home` use
different pattern for things like `delete-generations` (in package it's
`--delete-generations=[PATTERN]`, which is an option, not a sub-command).
Also I see that `guix system delete-generations -h` shows the help of
the `system` subcommand, not of the `delete-generations` subcommand.
I hate to change user experience, but... being uniform and predictable
is very important so people can apply what they learn in one command to
others.
Maybe we should do a full review of the commands and options and make
them more uniform?
What do you think?