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?

Reply via email to