unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Reorganizing guix package commands
@ 2016-04-18  8:57 Alex Kost
  2016-04-18 16:10 ` John Darrington
                   ` (2 more replies)
  0 siblings, 3 replies; 39+ messages in thread
From: Alex Kost @ 2016-04-18  8:57 UTC (permalink / raw)
  To: guix-devel

I've just sent a message to bug#22587¹, but I realized it is better to
discuss it here in a separate thread.

So, I think there are inconsistencies in guix commands.  For example, we
have "guix system build" to build a system, but "guix build" to build a
package.  IMO "guix package build" would be a better choice.

In general, I think it would be good to move package commands inside
"guix package", e.g, to make "guix package lint", "guix package size",
etc.

Wouldn't it be great to make some breaking changes?  I mean if this or
any other proposal on "guix" command structure is reasonable, I think
it's just the time for it while Guix is still alpha/beta.  Otherwise,
the current command structure will never be changed.

¹ http://debbugs.gnu.org/cgi/bugreport.cgi?bug=22587#29

-- 
Alex

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-18  8:57 Reorganizing guix package commands Alex Kost
@ 2016-04-18 16:10 ` John Darrington
  2016-04-19  8:01   ` Alex Kost
  2016-04-18 17:20 ` Ludovic Courtès
  2016-04-18 21:13 ` Hartmut Goebel
  2 siblings, 1 reply; 39+ messages in thread
From: John Darrington @ 2016-04-18 16:10 UTC (permalink / raw)
  To: Alex Kost; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 1670 bytes --]

On Mon, Apr 18, 2016 at 11:57:59AM +0300, Alex Kost wrote:
     I've just sent a message to bug#22587??, but I realized it is better to
     discuss it here in a separate thread.
     
     So, I think there are inconsistencies in guix commands.  For example, we
     have "guix system build" to build a system, but "guix build" to build a
     package.  IMO "guix package build" would be a better choice.
     
     In general, I think it would be good to move package commands inside
     "guix package", e.g, to make "guix package lint", "guix package size",
     etc.

I'm not saying that you're wrong.  But I think the idea is that guix build
is a command for development, whereas guix package is a command for users.
I think the two need to be kept separate.


     Wouldn't it be great to make some breaking changes?  I mean if this or
     any other proposal on "guix" command structure is reasonable, I think
     it's just the time for it while Guix is still alpha/beta.  Otherwise,
     the current command structure will never be changed.


I wouldn't mind seeing a few of the more recent commands as options to 
(a possibly renamed) guix build.  For example it seems to me that guix
environment is specific to a package so perhaps that is a good candidate.

But I don't know.  Maybe it's still too early to make changes.  If such
changes are to be made, then we should get them right.

J'
     

-- 
Avoid eavesdropping.  Send strong encryted email.
PGP Public key ID: 1024D/2DE827B3 
fingerprint = 8797 A26D 0854 2EAB 0285  A290 8A67 719C 2DE8 27B3
See http://sks-keyservers.net or any PGP keyserver for public key.


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-18  8:57 Reorganizing guix package commands Alex Kost
  2016-04-18 16:10 ` John Darrington
@ 2016-04-18 17:20 ` Ludovic Courtès
  2016-04-18 21:50   ` myglc2
  2016-04-19  7:52   ` Alex Kost
  2016-04-18 21:13 ` Hartmut Goebel
  2 siblings, 2 replies; 39+ messages in thread
From: Ludovic Courtès @ 2016-04-18 17:20 UTC (permalink / raw)
  To: Alex Kost; +Cc: guix-devel

Alex Kost <alezost@gmail.com> skribis:

> I've just sent a message to bug#22587¹, but I realized it is better to
> discuss it here in a separate thread.
>
> So, I think there are inconsistencies in guix commands.  For example, we
> have "guix system build" to build a system, but "guix build" to build a
> package.  IMO "guix package build" would be a better choice.
>
> In general, I think it would be good to move package commands inside
> "guix package", e.g, to make "guix package lint", "guix package size",
> etc.

Why not consider “package” to be the default word?  :-)
I can see how adding “package” everywhere helps categorize things
mentally, but as a user interface, I think it would be rather bad.

Also, it’s not that simple: “guix size” can take a store item instead of
a package name, “guix graph” cannot do it yet but it would be useful if
it could (“guix graph -t references $(readlink -f /run/current-system)”),
etc.

I still think that having aliases like “guix install” as Andy proposed
long ago would be useful, though I never started working on it.

There are probably other improvements to do around “guix package” (maybe
turning some of its options into separate sub-commands as was suggested
before.)  All we need is a clear view of where we’re going and patches.  :-)

> Wouldn't it be great to make some breaking changes?  I mean if this or
> any other proposal on "guix" command structure is reasonable, I think
> it's just the time for it while Guix is still alpha/beta.  Otherwise,
> the current command structure will never be changed.

I agree, now is the right time to break everything!  ;-)

Ludo’.

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-18  8:57 Reorganizing guix package commands Alex Kost
  2016-04-18 16:10 ` John Darrington
  2016-04-18 17:20 ` Ludovic Courtès
@ 2016-04-18 21:13 ` Hartmut Goebel
  2 siblings, 0 replies; 39+ messages in thread
From: Hartmut Goebel @ 2016-04-18 21:13 UTC (permalink / raw)
  To: guix-devel

[-- Attachment #1: Type: text/plain, Size: 894 bytes --]

Am 18.04.2016 um 10:57 schrieb Alex Kost:
> In general, I think it would be good to move package commands inside
> "guix package", e.g, to make "guix package lint", "guix package size",
> etc.

When changing this, we could also think about making "options" into real
sub-commands, eg.
"guix package --install" into "guix package install". (Same for
uninstall/remove, upgrade(?), list-generations, etc.)

This would meed Ludo's idea of making "package" the default.

-- 
Schönen Gruß
Hartmut Goebel
Dipl.-Informatiker (univ), CISSP, CSSLP, ISO 27001 Lead Implementer
Information Security Management, Security Governance, Secure Software
Development

Goebel Consult, Landshut
http://www.goebel-consult.de

Blog:
http://www.goebel-consult.de/blog/bewertung-pgp-verschlusselung-bei-web.de-und-gmx

Kolumne: http://www.cissp-gefluester.de/2010-09-mut-zur-beschraenkung


[-- Attachment #2: Type: text/html, Size: 2042 bytes --]

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-18 17:20 ` Ludovic Courtès
@ 2016-04-18 21:50   ` myglc2
  2016-04-19  5:17     ` John Darrington
  2016-04-19 10:47     ` Alex Kost
  2016-04-19  7:52   ` Alex Kost
  1 sibling, 2 replies; 39+ messages in thread
From: myglc2 @ 2016-04-18 21:50 UTC (permalink / raw)
  To: guix-devel

ludo@gnu.org (Ludovic Courtès) writes:

> Alex Kost <alezost@gmail.com> skribis:
>
>> I've just sent a message to bug#22587¹, but I realized it is better to
>> discuss it here in a separate thread.
>>
>> So, I think there are inconsistencies in guix commands.  For example, we
>> have "guix system build" to build a system, but "guix build" to build a
>> package.  IMO "guix package build" would be a better choice.
>>
>> In general, I think it would be good to move package commands inside
>> "guix package", e.g, to make "guix package lint", "guix package size",
>> etc.
>
> Why not consider “package” to be the default word?  :-)
> I can see how adding “package” everywhere helps categorize things
> mentally, but as a user interface, I think it would be rather bad.
>
> Also, it’s not that simple: “guix size” can take a store item instead of
> a package name, “guix graph” cannot do it yet but it would be useful if
> it could (“guix graph -t references $(readlink -f /run/current-system)”),
> etc.
>
> I still think that having aliases like “guix install” as Andy proposed
> long ago would be useful, though I never started working on it.
>
> There are probably other improvements to do around “guix package” (maybe
> turning some of its options into separate sub-commands as was suggested
> before.)  All we need is a clear view of where we’re going and patches.  :-)
>

I replied to the bug earlier, relevant parts are restated below, and a
discussion added below that.

For overall Guix usability, the overloading of a single guix command for
everything is not so good. When you eventually create a man page, it
will be intimidating for someone just trying to do per-user package
management, which the majority of, and least sophisticated users, will
be trying to do.

On the other hand there are several "classes" of commands as reflected
by the guix CLI being described in several logically different parts of
the doc. This structure is not so evident in the CLI structure.

A possibly better approach would be to explicitly split the guix
command-verse into command classes to better match the structure of the
doc and/or the class of the user. For example, per-user ('guix ...'),
global-system ('guix-sys ...'), and developer ('guix-dev ...'), or
something similar.

Since the most frequently used commands will be per-user package
management, I suggest you replace 'guix package' with 'guix' and promote
the non-package commands to be hyphenated (ALA guix-daemon).

This would, in turn, give rise to emacs functions something like:

OLD                                    NEW
-------------------------------------------------------------------
user:
guix-edit                              guix-view-definition
guix-installed-packages                guix-installed-packages
guix-installed-user-packages           NA

admin:
guix-installed-system-packages         guix-sys-installed-packages

developer:
guix-hydra-build-list-latest-builds    guix-dev-hydra-build-list-latest-builds
guix-edit                              guix-dev-edit-definition

While this would be not-so-nice for a power emacs user, it would make it
easier for a less experienced user to find a relevant command in the sea
of 'M-x guix-' commands in the *Completions* buffer.  This kind of
naming may not be typical in emacs, but I think it is probably justified
considering the range of disparate functions provided by Guix, as
discussed below.

***

Regarding the bigger picture, and sorry this is so long, thinking more
deeply about the situation, IMO, Guix usability challenges stem mostly
from the fact that Guix provides an unexpectedly large range of
functions: a per-user package manager, an OS, a system configuration
tool, a packaging tool, a package editor, an installer, VM managers,
developer utilities, hydra managers, and maybe some other things ;)

Further, Guix behavior is modal, e.g., which functions work depend on
how Guix was installed and/or configured. For example, in a Guix/Debian
install, 'guix system reconfigure config.scm' churns away happily for 15
minutes and then produces the error, 'guix system: error: symlink:
Permission denied: "/var/guix/profiles/system-1-link"'

OTOH, other things you might not expect to work actually do, e.g.  "guix
init ..."  will "upgrade" your Debian OS install to GuixSD ;)

So, the problem goes well beyond function names. The underlying problem
is that grouping such a large and disparate set of functions together in
a single package is counter-intuitive. And further accessing them all
under a single CLI/UI is challenging, to say the least.

As a result, Guix is difficult to document and understand.  The low user
list activity is evidence that many potential users find the www doc
intimidating and bail out before downloading. This may actually be OK
since you are probably not ready for them anyhow.

But users that do get as far as installing are confronted by 8 guix INFO
entry points and 120+ "M-x guix-" functions.  The only users that can be
expected to work this way are Guix developers or, perhaps, hardened
emacs criminals ;-) Others have trouble finding the relevant entry
point, e.g,

http://lists.gnu.org/archive/html/help-guix/2016-04/msg00056.html

To summarize, Guix has a lot of functionality and complexity. So to be
successful, we must consider carefully how to package and describe it.

One way would be to split guix into ~three pieces.  We could do this by
clearly identifying the classes of users we expect to serve and then
splitting out functions by user class.  Something like sysadmin,
end-user, and developer. This would probably be the simplest solution
(for users, that is), but I imagine we don't want this.

Alternatively, if we continue on the current path, we need to describe
the new software paradigm that motivates placing these disparate
functions together.  We need to explain how the functions fit
together. And we need to provide a map that helps each class of new user
to find their way in.

A while ago I took a crack at this:

http://lists.gnu.org/archive/html/guix-devel/2016-03/msg00674.html

http://lists.gnu.org/archive/html/guix-devel/2016-03/pngM78VCHVVDp.png

And it probably needs more work along the lines of explaining and
motivating the paradigm. Ludo used a couple of ideas in this commit:

http://lists.gnu.org/archive/html/guix-devel/2016-03/msg01038.html

But I think we should revisit the original objective, which is to
provide a brief illustrated Guix overview as an entry to all of
Guix.

Ideally this would provide a reference point in thinking about the
questions raised above. - George

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-18 21:50   ` myglc2
@ 2016-04-19  5:17     ` John Darrington
  2016-04-19 12:57       ` myglc2
  2016-04-19 15:24       ` Ludovic Courtès
  2016-04-19 10:47     ` Alex Kost
  1 sibling, 2 replies; 39+ messages in thread
From: John Darrington @ 2016-04-19  5:17 UTC (permalink / raw)
  To: myglc2; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 3360 bytes --]

On Mon, Apr 18, 2016 at 05:50:14PM -0400, myglc2 wrote:
     ludo@gnu.org (Ludovic Court??s) writes:
     
     > Alex Kost <alezost@gmail.com> skribis:
     >
     >> I've just sent a message to bug#22587??, but I realized it is better to
     >> discuss it here in a separate thread.
     >>
     >> So, I think there are inconsistencies in guix commands.  For example, we
     >> have "guix system build" to build a system, but "guix build" to build a
     >> package.  IMO "guix package build" would be a better choice.
     >>
     >> In general, I think it would be good to move package commands inside
     >> "guix package", e.g, to make "guix package lint", "guix package size",
     >> etc.
     >
     > Why not consider ???package??? to be the default word?  :-)
     > I can see how adding ???package??? everywhere helps categorize things
     > mentally, but as a user interface, I think it would be rather bad.
     >
     > Also, it???s not that simple: ???guix size??? can take a store item instead of
     > a package name, ???guix graph??? cannot do it yet but it would be useful if
     > it could (???guix graph -t references $(readlink -f /run/current-system)???),
     > etc.
     >
     > I still think that having aliases like ???guix install??? as Andy proposed
     > long ago would be useful, though I never started working on it.
     >
     > There are probably other improvements to do around ???guix package??? (maybe
     > turning some of its options into separate sub-commands as was suggested
     > before.)  All we need is a clear view of where we???re going and patches.  :-)
     >
     
     I replied to the bug earlier, relevant parts are restated below, and a
     discussion added below that.
     
     For overall Guix usability, the overloading of a single guix command for
     everything is not so good. When you eventually create a man page, it
     will be intimidating for someone just trying to do per-user package
     management, which the majority of, and least sophisticated users, will
     be trying to do.
     
     On the other hand there are several "classes" of commands as reflected
     by the guix CLI being described in several logically different parts of
     the doc. This structure is not so evident in the CLI structure.

At the risk of taking this thread in a tanget ...

I don't think the doc is particularly well structured, and will soon need a major
overhaul.  

So I don't think it is a good model upon which to base the user interface..

While we're thinking about user interfaces, I believe a more abstract approach
would be  better at this stage:    What types of person are going to be 
interacting with Guix?  Developers?  Users?  Curious Bystanders?  Some other 
category of person?  --- Each of those are probably going to have a core set
of commands which they use regualarly,  a few which they use occasionally and
some never.  Identifying those sets (which may intersect) is the first step
to designing a good user interface.  That would help for both CLI and GUI.


J'
     

-- 
Avoid eavesdropping.  Send strong encryted email.
PGP Public key ID: 1024D/2DE827B3 
fingerprint = 8797 A26D 0854 2EAB 0285  A290 8A67 719C 2DE8 27B3
See http://sks-keyservers.net or any PGP keyserver for public key.


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-18 17:20 ` Ludovic Courtès
  2016-04-18 21:50   ` myglc2
@ 2016-04-19  7:52   ` Alex Kost
  2016-04-19  9:17     ` Taylan Ulrich Bayırlı/Kammer
                       ` (4 more replies)
  1 sibling, 5 replies; 39+ messages in thread
From: Alex Kost @ 2016-04-19  7:52 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

Ludovic Courtès (2016-04-18 20:20 +0300) wrote:

> Alex Kost <alezost@gmail.com> skribis:
>
>> I've just sent a message to bug#22587¹, but I realized it is better to
>> discuss it here in a separate thread.
>>
>> So, I think there are inconsistencies in guix commands.  For example, we
>> have "guix system build" to build a system, but "guix build" to build a
>> package.  IMO "guix package build" would be a better choice.
>>
>> In general, I think it would be good to move package commands inside
>> "guix package", e.g, to make "guix package lint", "guix package size",
>> etc.
>
> Why not consider “package” to be the default word?  :-)

Interesting, but why do we need to have "guix package" at all?  Let's
just use "guix --install", etc.  (This is not what I suggest :-))

> I can see how adding “package” everywhere helps categorize things
> mentally, but as a user interface, I think it would be rather bad.

As a user, I think it would be rather good.  (This is just my user opinion)

> Also, it’s not that simple: “guix size” can take a store item instead of
> a package name, “guix graph” cannot do it yet but it would be useful if
> it could (“guix graph -t references $(readlink -f /run/current-system)”),
> etc.

Hm, OK, I'm not sure, but let's leave "graph" and "size" alone for now.

> I still think that having aliases like “guix install” as Andy proposed
> long ago would be useful, though I never started working on it.

I agree!  Except I think they should be inside "guix package":

  guix package install ...
  guix package remove ...

As for the transactional operations (I mean remove/install in one
command), I think we can do it in a separate "guix profile" command:

  guix profile --install ... --remove ...

> There are probably other improvements to do around “guix package” (maybe
> turning some of its options into separate sub-commands as was suggested
> before.)  All we need is a clear view of where we’re going and patches.  :-)

Here is the summary of the changes I think it would be good to have:

| Replace this:                     | With this:                        |
|-----------------------------------+-----------------------------------|
| guix build                        | guix package build                |
| guix edit                         | guix package definition¹          |
| guix import                       | guix package import               |
| guix lint                         | guix package lint                 |
| guix refresh                      | guix package refresh              |
| guix package --show               | guix package show                 |
| guix package --search             | guix package search               |
| guix package --list-available     | guix package list                 |
|-----------------------------------+-----------------------------------|
| guix package --list-generations   | guix profile --list-generations   |
| guix package --list-installed     | guix profile --list-installed     |
| guix package --delete-generations | guix profile --delete-generations |
| guix package --switch-generations | guix profile --switch-generations |
| guix package --roll-back          | guix profile --roll-back          |
| guix package --manifest           | guix profile --manifest           |

¹ "edit" name is confusing: <http://bugs.gnu.org/22587>

Maybe instead of --list-generations and others, these options should
transform into subcommands (list-generations) of "guix profile".

-- 
Alex

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-18 16:10 ` John Darrington
@ 2016-04-19  8:01   ` Alex Kost
  0 siblings, 0 replies; 39+ messages in thread
From: Alex Kost @ 2016-04-19  8:01 UTC (permalink / raw)
  To: John Darrington; +Cc: guix-devel

John Darrington (2016-04-18 19:10 +0300) wrote:

> On Mon, Apr 18, 2016 at 11:57:59AM +0300, Alex Kost wrote:
>      I've just sent a message to bug#22587??, but I realized it is better to
>      discuss it here in a separate thread.
>
>      So, I think there are inconsistencies in guix commands.  For example, we
>      have "guix system build" to build a system, but "guix build" to build a
>      package.  IMO "guix package build" would be a better choice.
>
>      In general, I think it would be good to move package commands inside
>      "guix package", e.g, to make "guix package lint", "guix package size",
>      etc.
>
> I'm not saying that you're wrong.  But I think the idea is that guix build
> is a command for development, whereas guix package is a command for users.
> I think the two need to be kept separate.

Sorry, I don't understand this point: we all are users of "guix"
command.  It looks natural to me that when you want to build a system,
you write "guix system build", and when you want to build a package, you
write "guix package build"; when you want to install a package, you
can write "guix package install".  Why a user wouldn't want just to
build a package?  For example, I do it all the time when I want just to
try a package without installing.

>      Wouldn't it be great to make some breaking changes?  I mean if this or
>      any other proposal on "guix" command structure is reasonable, I think
>      it's just the time for it while Guix is still alpha/beta.  Otherwise,
>      the current command structure will never be changed.
>
>
> I wouldn't mind seeing a few of the more recent commands as options to
> (a possibly renamed) guix build.  For example it seems to me that guix
> environment is specific to a package so perhaps that is a good candidate.

Wow, I have a reverse impression: I think "guix environment" is the
worst candidate for moving elsewhere (I mean it is good as it is now)
and it should stay as a stand-alone command.

-- 
Alex

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19  7:52   ` Alex Kost
@ 2016-04-19  9:17     ` Taylan Ulrich Bayırlı/Kammer
  2016-04-19 10:37       ` Alex Kost
  2016-04-19  9:23     ` Hartmut Goebel
                       ` (3 subsequent siblings)
  4 siblings, 1 reply; 39+ messages in thread
From: Taylan Ulrich Bayırlı/Kammer @ 2016-04-19  9:17 UTC (permalink / raw)
  To: Alex Kost; +Cc: guix-devel

Alex Kost <alezost@gmail.com> writes:

> Here is the summary of the changes I think it would be good to have:
>
> | Replace this:                     | With this:                        |
> |-----------------------------------+-----------------------------------|
> | guix build                        | guix package build                |
> | guix edit                         | guix package definition¹          |
> | guix import                       | guix package import               |
> | guix lint                         | guix package lint                 |
> | guix refresh                      | guix package refresh              |
> | guix package --show               | guix package show                 |
> | guix package --search             | guix package search               |
> | guix package --list-available     | guix package list                 |
> |-----------------------------------+-----------------------------------|
> | guix package --list-generations   | guix profile --list-generations   |
> | guix package --list-installed     | guix profile --list-installed     |
> | guix package --delete-generations | guix profile --delete-generations |
> | guix package --switch-generations | guix profile --switch-generations |
> | guix package --roll-back          | guix profile --roll-back          |
> | guix package --manifest           | guix profile --manifest           |
>
> ¹ "edit" name is confusing: <http://bugs.gnu.org/22587>

How about "view"?  ("Definition" is so long.)

> Maybe instead of --list-generations and others, these options should
> transform into subcommands (list-generations) of "guix profile".

Yeah, seems more consistent.


I don't have a strong opinion on this whole thing but I think a clear
and logical categorization like the above would be a good base.  One
could then add abbreviations on top of it like:

    guix install -> guix package install

Hmm, or does 'install' belong to 'profile'?  Or should the whole thing
be called 'guix profile add'?  "Install" kinda implies that something
new will be installed into the system, rather than just some symlinks
shuffled.  (One can see the building or downloading as a special case /
transparent handling of the case where the package to be added to the
profile is not in the store yet.)

BTW if it is to become e.g. 'guix profile add', then combining an
add/remove in one transaction (if it's important to keep that feature)
could look like:

    guix package add foo bar -- remove baz bat

/bikeshedding :-)

Taylan

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19  7:52   ` Alex Kost
  2016-04-19  9:17     ` Taylan Ulrich Bayırlı/Kammer
@ 2016-04-19  9:23     ` Hartmut Goebel
  2016-04-19 10:16       ` Alex Kost
  2016-04-19 14:39       ` John Darrington
  2016-04-19 13:00     ` myglc2
                       ` (2 subsequent siblings)
  4 siblings, 2 replies; 39+ messages in thread
From: Hartmut Goebel @ 2016-04-19  9:23 UTC (permalink / raw)
  To: guix-devel

Am 19.04.2016 um 09:52 schrieb Alex Kost:

I like you suggestion, except for these:
> Here is the summary of the changes I think it would be good to have:
>
> [...]
> |-----------------------------------+-----------------------------------|
> | guix package --list-generations   | guix profile --list-generations   |

Why no replace the dashes here, too? This would IMHO be more consistent
to the package sub-command?

-- 
Regards
Hartmut Goebel

| Hartmut Goebel          | h.goebel@crazy-compilers.com               |
| www.crazy-compilers.com | compilers which you thought are impossible |

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19  9:23     ` Hartmut Goebel
@ 2016-04-19 10:16       ` Alex Kost
  2016-04-19 14:39       ` John Darrington
  1 sibling, 0 replies; 39+ messages in thread
From: Alex Kost @ 2016-04-19 10:16 UTC (permalink / raw)
  To: Hartmut Goebel; +Cc: guix-devel

Hartmut Goebel (2016-04-19 12:23 +0300) wrote:

> Am 19.04.2016 um 09:52 schrieb Alex Kost:
>
> I like you suggestion, except for these:
>> Here is the summary of the changes I think it would be good to have:
>>
>> [...]
>> |-----------------------------------+-----------------------------------|
>> | guix package --list-generations   | guix profile --list-generations   |
>
> Why no replace the dashes here, too? This would IMHO be more consistent
> to the package sub-command?

I agree, especially taking into account that there is "guix system
list-generations".  Then the same should probably be done with other
things (list-installed, roll-back, ...)

-- 
Alex

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19  9:17     ` Taylan Ulrich Bayırlı/Kammer
@ 2016-04-19 10:37       ` Alex Kost
  0 siblings, 0 replies; 39+ messages in thread
From: Alex Kost @ 2016-04-19 10:37 UTC (permalink / raw)
  To: Taylan Ulrich "Bayırlı/Kammer"; +Cc: guix-devel

Taylan Ulrich "Bayırlı/Kammer" (2016-04-19 12:17 +0300) wrote:

> Alex Kost <alezost@gmail.com> writes:
>
>> Here is the summary of the changes I think it would be good to have:
>>
>> | Replace this:                     | With this:                        |
>> |-----------------------------------+-----------------------------------|
>> | guix build                        | guix package build                |
>> | guix edit                         | guix package definition¹          |
>> | guix import                       | guix package import               |
>> | guix lint                         | guix package lint                 |
>> | guix refresh                      | guix package refresh              |
>> | guix package --show               | guix package show                 |
>> | guix package --search             | guix package search               |
>> | guix package --list-available     | guix package list                 |
>> |-----------------------------------+-----------------------------------|
>> | guix package --list-generations   | guix profile --list-generations   |
>> | guix package --list-installed     | guix profile --list-installed     |
>> | guix package --delete-generations | guix profile --delete-generations |
>> | guix package --switch-generations | guix profile --switch-generations |
>> | guix package --roll-back          | guix profile --roll-back          |
>> | guix package --manifest           | guix profile --manifest           |
>>
>> ¹ "edit" name is confusing: <http://bugs.gnu.org/22587>
>
> How about "view"?  ("Definition" is so long.)

I prefer "definition", but it's just my opinion.  Maybe we can use the
same feature as some other software use, like you can write: "ip
address" or "ip addr" or even "ip a".  I.e., if some portion of
characters defines a subcommand name unambiguously, it's ok to use.  So
this could become "guix package def" or "guix package d" if there will
be no other subcommands beginning with "d".

I think it would be a great feature (I already wish to write "guix env"
or "guix sy re" :-)).  I think it is for a separate thread though.

>> Maybe instead of --list-generations and others, these options should
>> transform into subcommands (list-generations) of "guix profile".
>
> Yeah, seems more consistent.
>
> I don't have a strong opinion on this whole thing but I think a clear
> and logical categorization like the above would be a good base.  One
> could then add abbreviations on top of it like:
>
>     guix install -> guix package install
>
> Hmm, or does 'install' belong to 'profile'?  Or should the whole thing
> be called 'guix profile add'?  "Install" kinda implies that something
> new will be installed into the system, rather than just some symlinks
> shuffled.  (One can see the building or downloading as a special case /
> transparent handling of the case where the package to be added to the
> profile is not in the store yet.)

Yes, this is controversial.  I think it would be clean to separate
profile stuff into a separate command ("guix profile").  As for adding
"guix package install/remove", I don't really know.

> BTW if it is to become e.g. 'guix profile add', then combining an
> add/remove in one transaction (if it's important to keep that feature)

I think this is a very important feature.

> could look like:
>
>     guix package add foo bar -- remove baz bat

To be honest I don't like it.  There is also "upgrade" which can be
performed along with install and remove.

But I like "--add" instead of or along with (as they may just co-exist
and do the same thing) "--install" in a potential "guix profile"
command.

-- 
Alex

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-18 21:50   ` myglc2
  2016-04-19  5:17     ` John Darrington
@ 2016-04-19 10:47     ` Alex Kost
  2016-04-19 10:58       ` Ricardo Wurmus
  2016-04-19 12:45       ` myglc2
  1 sibling, 2 replies; 39+ messages in thread
From: Alex Kost @ 2016-04-19 10:47 UTC (permalink / raw)
  To: myglc2; +Cc: guix-devel

myglc2 (2016-04-19 00:50 +0300) wrote:

> For overall Guix usability, the overloading of a single guix command for
> everything is not so good. When you eventually create a man page, it
> will be intimidating for someone just trying to do per-user package
> management, which the majority of, and least sophisticated users, will
> be trying to do.
>
> On the other hand there are several "classes" of commands as reflected
> by the guix CLI being described in several logically different parts of
> the doc. This structure is not so evident in the CLI structure.
>
> A possibly better approach would be to explicitly split the guix
> command-verse into command classes to better match the structure of the
> doc and/or the class of the user. For example, per-user ('guix ...'),
> global-system ('guix-sys ...'), and developer ('guix-dev ...'), or
> something similar.

Sorry, but I can't agree with this.  I don't see a difference between
"simple users" and developers.  Guix provides many tools indeed, but I
don't think they should be organized in groups depending on "user
classes".

I like that all the tools are placed in a single "guix" command, I just
would like to reorganize it a bit (or a lot :-)).

-- 
Alex

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19 10:47     ` Alex Kost
@ 2016-04-19 10:58       ` Ricardo Wurmus
  2016-04-19 12:45       ` myglc2
  1 sibling, 0 replies; 39+ messages in thread
From: Ricardo Wurmus @ 2016-04-19 10:58 UTC (permalink / raw)
  To: Alex Kost; +Cc: guix-devel, myglc2


Alex Kost <alezost@gmail.com> writes:

> myglc2 (2016-04-19 00:50 +0300) wrote:
>
>> For overall Guix usability, the overloading of a single guix command for
>> everything is not so good. When you eventually create a man page, it
>> will be intimidating for someone just trying to do per-user package
>> management, which the majority of, and least sophisticated users, will
>> be trying to do.
>>
>> On the other hand there are several "classes" of commands as reflected
>> by the guix CLI being described in several logically different parts of
>> the doc. This structure is not so evident in the CLI structure.
>>
>> A possibly better approach would be to explicitly split the guix
>> command-verse into command classes to better match the structure of the
>> doc and/or the class of the user. For example, per-user ('guix ...'),
>> global-system ('guix-sys ...'), and developer ('guix-dev ...'), or
>> something similar.
>
> Sorry, but I can't agree with this.  I don't see a difference between
> "simple users" and developers.  Guix provides many tools indeed, but I
> don't think they should be organized in groups depending on "user
> classes".

I agree with Alex.  In tools like Emacs we also don’t see this arbitrary
distinction between simple users and advanced users or developers.
That’s the same spirit in Guix.

I do agree that the documentation needs reorganization, and there have
been proposals for that already. 

> I like that all the tools are placed in a single "guix" command, I just
> would like to reorganize it a bit (or a lot :-)).

I agree, but since I don’t have any well-thought-out proposals on how to
improve I’m just quietly following this conversation.

~~ Ricardo

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19 10:47     ` Alex Kost
  2016-04-19 10:58       ` Ricardo Wurmus
@ 2016-04-19 12:45       ` myglc2
  1 sibling, 0 replies; 39+ messages in thread
From: myglc2 @ 2016-04-19 12:45 UTC (permalink / raw)
  To: guix-devel

Alex Kost <alezost@gmail.com> writes:

> myglc2 (2016-04-19 00:50 +0300) wrote:
>
>> For overall Guix usability, the overloading of a single guix command for
>> everything is not so good. When you eventually create a man page, it
>> will be intimidating for someone just trying to do per-user package
>> management, which the majority of, and least sophisticated users, will
>> be trying to do.
>>
>> On the other hand there are several "classes" of commands as reflected
>> by the guix CLI being described in several logically different parts of
>> the doc. This structure is not so evident in the CLI structure.
>>
>> A possibly better approach would be to explicitly split the guix
>> command-verse into command classes to better match the structure of the
>> doc and/or the class of the user. For example, per-user ('guix ...'),
>> global-system ('guix-sys ...'), and developer ('guix-dev ...'), or
>> something similar.
>
> Sorry, but I can't agree with this.  I don't see a difference between
> "simple users" and developers.  Guix provides many tools indeed, but I
> don't think they should be organized in groups depending on "user
> classes".
>
> I like that all the tools are placed in a single "guix" command, I just
> would like to reorganize it a bit (or a lot :-)).

Yes, of course, you have reacted as I predicted ...

>> While this would be not-so-nice for a power emacs user, ...

But user interface design involves trade-offs. If you design the
interface only for power users that is all you will ever have.

The adjustments I have suggested are easily accommodated by a power user
and meanwhile make Guix much more approachable for a novice.

The problem you face as you set the Guix interface in stone is that you
have inadequate representation of novices in the discussion.

If you are not careful you will harden Guix into a ninja tool and this
will severely limit it's adoption.

You need to remember that, at the end of the day, how important Guix is
will depend on how many users it has.

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19  5:17     ` John Darrington
@ 2016-04-19 12:57       ` myglc2
  2016-04-19 13:03         ` Thompson, David
  2016-04-19 15:24       ` Ludovic Courtès
  1 sibling, 1 reply; 39+ messages in thread
From: myglc2 @ 2016-04-19 12:57 UTC (permalink / raw)
  To: guix-devel

John Darrington <john@darrington.wattle.id.au> writes:

> On Mon, Apr 18, 2016 at 05:50:14PM -0400, myglc2 wrote:
>      ludo@gnu.org (Ludovic Court??s) writes:
>      
>      > Alex Kost <alezost@gmail.com> skribis:
>      >
>      >> I've just sent a message to bug#22587??, but I realized it is better to
>      >> discuss it here in a separate thread.
>      >>
>      >> So, I think there are inconsistencies in guix commands.  For example, we
>      >> have "guix system build" to build a system, but "guix build" to build a
>      >> package.  IMO "guix package build" would be a better choice.
>      >>
>      >> In general, I think it would be good to move package commands inside
>      >> "guix package", e.g, to make "guix package lint", "guix package size",
>      >> etc.
>      >
>      > Why not consider ???package??? to be the default word?  :-)
>      > I can see how adding ???package??? everywhere helps categorize things
>      > mentally, but as a user interface, I think it would be rather bad.
>      >
>      > Also, it???s not that simple: ???guix size??? can take a store item instead of
>      > a package name, ???guix graph??? cannot do it yet but it would be useful if
>      > it could (???guix graph -t references $(readlink -f /run/current-system)???),
>      > etc.
>      >
>      > I still think that having aliases like ???guix install??? as Andy proposed
>      > long ago would be useful, though I never started working on it.
>      >
>      > There are probably other improvements to do around ???guix package??? (maybe
>      > turning some of its options into separate sub-commands as was suggested
>      > before.)  All we need is a clear view of where we???re going and patches.  :-)
>      >
>      
>      I replied to the bug earlier, relevant parts are restated below, and a
>      discussion added below that.
>      
>      For overall Guix usability, the overloading of a single guix command for
>      everything is not so good. When you eventually create a man page, it
>      will be intimidating for someone just trying to do per-user package
>      management, which the majority of, and least sophisticated users, will
>      be trying to do.
>      
>      On the other hand there are several "classes" of commands as reflected
>      by the guix CLI being described in several logically different parts of
>      the doc. This structure is not so evident in the CLI structure.
>
> At the risk of taking this thread in a tanget ...
>
> I don't think the doc is particularly well structured, and will soon need a major
> overhaul.

Agreed

> So I don't think it is a good model upon which to base the user interface..

Agreed^2. I was just using the fact of the doc structure to illustrate
that guix use is structured in ways not captured by $ guix ...

> While we're thinking about user interfaces, I believe a more abstract approach
> would be  better at this stage:    What types of person are going to be 
> interacting with Guix?  Developers?  Users?  Curious Bystanders?  Some other 
> category of person?  --- Each of those are probably going to have a core set
> of commands which they use regualarly,  a few which they use occasionally and
> some never.  Identifying those sets (which may intersect) is the first step
> to designing a good user interface.  That would help for both CLI and GUI.
>
>
> J'

This is not a tangent at all. The time to think user classes through and
adjust the interface is now. Otherwise we will be stuck with an
novice-overwhelming sea of functions that severely limits the adoption of
Guix.

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19  7:52   ` Alex Kost
  2016-04-19  9:17     ` Taylan Ulrich Bayırlı/Kammer
  2016-04-19  9:23     ` Hartmut Goebel
@ 2016-04-19 13:00     ` myglc2
  2016-04-19 13:43       ` Ricardo Wurmus
  2016-04-19 13:55     ` Ricardo Wurmus
  2016-04-19 15:52     ` Ludovic Courtès
  4 siblings, 1 reply; 39+ messages in thread
From: myglc2 @ 2016-04-19 13:00 UTC (permalink / raw)
  To: guix-devel

Alex Kost <alezost@gmail.com> writes:

> Ludovic Courtès (2016-04-18 20:20 +0300) wrote:
>
>> Alex Kost <alezost@gmail.com> skribis:
>>
>>> I've just sent a message to bug#22587¹, but I realized it is better to
>>> discuss it here in a separate thread.
>>>
>>> So, I think there are inconsistencies in guix commands.  For example, we
>>> have "guix system build" to build a system, but "guix build" to build a
>>> package.  IMO "guix package build" would be a better choice.
>>>
>>> In general, I think it would be good to move package commands inside
>>> "guix package", e.g, to make "guix package lint", "guix package size",
>>> etc.
>>
>> Why not consider “package” to be the default word?  :-)
>
> Interesting, but why do we need to have "guix package" at all?  Let's
> just use "guix --install", etc.  (This is not what I suggest :-))
>
>> I can see how adding “package” everywhere helps categorize things
>> mentally, but as a user interface, I think it would be rather bad.
>
> As a user, I think it would be rather good.  (This is just my user opinion)
>
>> Also, it’s not that simple: “guix size” can take a store item instead of
>> a package name, “guix graph” cannot do it yet but it would be useful if
>> it could (“guix graph -t references $(readlink -f /run/current-system)”),
>> etc.
>
> Hm, OK, I'm not sure, but let's leave "graph" and "size" alone for now.
>
>> I still think that having aliases like “guix install” as Andy proposed
>> long ago would be useful, though I never started working on it.
>
> I agree!  Except I think they should be inside "guix package":
>
>   guix package install ...
>   guix package remove ...
>
> As for the transactional operations (I mean remove/install in one
> command), I think we can do it in a separate "guix profile" command:
>
>   guix profile --install ... --remove ...
>
>> There are probably other improvements to do around “guix package” (maybe
>> turning some of its options into separate sub-commands as was suggested
>> before.)  All we need is a clear view of where we’re going and patches.  :-)
>
> Here is the summary of the changes I think it would be good to have:
>
> | Replace this:                     | With this:                        |
> |-----------------------------------+-----------------------------------|
> | guix build                        | guix package build                |
> | guix edit                         | guix package definition¹          |
> | guix import                       | guix package import               |
> | guix lint                         | guix package lint                 |
> | guix refresh                      | guix package refresh              |
> | guix package --show               | guix package show                 |
> | guix package --search             | guix package search               |
> | guix package --list-available     | guix package list                 |
> |-----------------------------------+-----------------------------------|
> | guix package --list-generations   | guix profile --list-generations   |
> | guix package --list-installed     | guix profile --list-installed     |
> | guix package --delete-generations | guix profile --delete-generations |
> | guix package --switch-generations | guix profile --switch-generations |
> | guix package --roll-back          | guix profile --roll-back          |
> | guix package --manifest           | guix profile --manifest           |
>
> ¹ "edit" name is confusing: <http://bugs.gnu.org/22587>
>
> Maybe instead of --list-generations and others, these options should
> transform into subcommands (list-generations) of "guix profile".

The term 'profile' is used at user- and system- levels:

3.1 Features
============
[...]
   Instead of referring to these directories, users have their own
“profile”, which points to the packages that they actually want to use.
These profiles are stored within each user’s home directory, at
‘$HOME/.guix-profile’.

7.2.2 ‘operating-system’ Reference
----------------------------------
     ‘packages’ (default: %BASE-PACKAGES)
          The set of packages installed in the global profile, which is
          accessible at ‘/run/current-system/profile’.

... and in home directories:

/home/user1/.guix-profile -> /var/guix/profiles/per-user/user1/guix-profile
/home/user1/.profile

Making the use of 'profile' here ambiguous. So I suggest that you change
'guix profile ...' to 'guix user ...' like so:

|-----------------------------------+--------------------------------|
| guix package --list-generations   | guix user --list-generations   |
| guix package --list-installed     | guix user --list-installed     |
| guix package --delete-generations | guix user --delete-generations |
| guix package --switch-generations | guix user --switch-generations |
| guix package --roll-back          | guix user --roll-back          |
| guix package --manifest           | guix user --manifest           |

and similarly, the above ...

>   guix package install ...
>   guix package remove ...

... would become ...

guix user install ...
guix user remove ...

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19 12:57       ` myglc2
@ 2016-04-19 13:03         ` Thompson, David
  2016-04-19 13:35           ` John Darrington
  2016-04-19 13:51           ` myglc2
  0 siblings, 2 replies; 39+ messages in thread
From: Thompson, David @ 2016-04-19 13:03 UTC (permalink / raw)
  To: myglc2; +Cc: guix-devel

I'm with Ricardo.  Separating things into things for "users" and
things for "developers" just re-establishes the dichotomy that we
intend to blur, and insist isn't really there in the first place.  We
want to encourage users to hack the system, not cordon off a section
of tools and say "these aren't for you."  Surely there are
improvements that can be made without sacrificing this.  The
conventional school of usability is not focused on making users more
computer literate, so we need to take a different route.

- Dave

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19 13:03         ` Thompson, David
@ 2016-04-19 13:35           ` John Darrington
  2016-04-19 13:51           ` myglc2
  1 sibling, 0 replies; 39+ messages in thread
From: John Darrington @ 2016-04-19 13:35 UTC (permalink / raw)
  To: Thompson, David; +Cc: guix-devel, myglc2

[-- Attachment #1: Type: text/plain, Size: 1306 bytes --]

On Tue, Apr 19, 2016 at 09:03:30AM -0400, Thompson, David wrote:
     I'm with Ricardo.  Separating things into things for "users" and
     things for "developers" just re-establishes the dichotomy that we
     intend to blur, and insist isn't really there in the first place.  We
     want to encourage users to hack the system, not cordon off a section
     of tools and say "these aren't for you."  Surely there are
     improvements that can be made without sacrificing this.  The
     conventional school of usability is not focused on making users more
     computer literate, so we need to take a different route.
     
I do take your point here, and I am fully in agreement that the distinction
between users and developers is an artificial one which we should not maintain.
But there are always going to be categories of tasks which are closely related
to one another, other tasks which are only loosely related and some which are
not related at all.

The idea is to make the user interface intuitive, not to dissuade people from 
using them.

J'

-- 
Avoid eavesdropping.  Send strong encryted email.
PGP Public key ID: 1024D/2DE827B3 
fingerprint = 8797 A26D 0854 2EAB 0285  A290 8A67 719C 2DE8 27B3
See http://sks-keyservers.net or any PGP keyserver for public key.


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19 13:00     ` myglc2
@ 2016-04-19 13:43       ` Ricardo Wurmus
  2016-04-19 14:29         ` myglc2
  0 siblings, 1 reply; 39+ messages in thread
From: Ricardo Wurmus @ 2016-04-19 13:43 UTC (permalink / raw)
  To: myglc2; +Cc: guix-devel


myglc2 <myglc2@gmail.com> writes:

> Alex Kost <alezost@gmail.com> writes:
>
>> Ludovic Courtès (2016-04-18 20:20 +0300) wrote:
>>
>>> Alex Kost <alezost@gmail.com> skribis:
>>>
>>>> I've just sent a message to bug#22587¹, but I realized it is better to
>>>> discuss it here in a separate thread.
>>>>
>>>> So, I think there are inconsistencies in guix commands.  For example, we
>>>> have "guix system build" to build a system, but "guix build" to build a
>>>> package.  IMO "guix package build" would be a better choice.
>>>>
>>>> In general, I think it would be good to move package commands inside
>>>> "guix package", e.g, to make "guix package lint", "guix package size",
>>>> etc.
>>>
>>> Why not consider “package” to be the default word?  :-)
>>
>> Interesting, but why do we need to have "guix package" at all?  Let's
>> just use "guix --install", etc.  (This is not what I suggest :-))
>>
>>> I can see how adding “package” everywhere helps categorize things
>>> mentally, but as a user interface, I think it would be rather bad.
>>
>> As a user, I think it would be rather good.  (This is just my user opinion)
>>
>>> Also, it’s not that simple: “guix size” can take a store item instead of
>>> a package name, “guix graph” cannot do it yet but it would be useful if
>>> it could (“guix graph -t references $(readlink -f /run/current-system)”),
>>> etc.
>>
>> Hm, OK, I'm not sure, but let's leave "graph" and "size" alone for now.
>>
>>> I still think that having aliases like “guix install” as Andy proposed
>>> long ago would be useful, though I never started working on it.
>>
>> I agree!  Except I think they should be inside "guix package":
>>
>>   guix package install ...
>>   guix package remove ...
>>
>> As for the transactional operations (I mean remove/install in one
>> command), I think we can do it in a separate "guix profile" command:
>>
>>   guix profile --install ... --remove ...
>>
>>> There are probably other improvements to do around “guix package” (maybe
>>> turning some of its options into separate sub-commands as was suggested
>>> before.)  All we need is a clear view of where we’re going and patches.  :-)
>>
>> Here is the summary of the changes I think it would be good to have:
>>
>> | Replace this:                     | With this:                        |
>> |-----------------------------------+-----------------------------------|
>> | guix build                        | guix package build                |
>> | guix edit                         | guix package definition¹          |
>> | guix import                       | guix package import               |
>> | guix lint                         | guix package lint                 |
>> | guix refresh                      | guix package refresh              |
>> | guix package --show               | guix package show                 |
>> | guix package --search             | guix package search               |
>> | guix package --list-available     | guix package list                 |
>> |-----------------------------------+-----------------------------------|
>> | guix package --list-generations   | guix profile --list-generations   |
>> | guix package --list-installed     | guix profile --list-installed     |
>> | guix package --delete-generations | guix profile --delete-generations |
>> | guix package --switch-generations | guix profile --switch-generations |
>> | guix package --roll-back          | guix profile --roll-back          |
>> | guix package --manifest           | guix profile --manifest           |
>>
>> ¹ "edit" name is confusing: <http://bugs.gnu.org/22587>
>>
>> Maybe instead of --list-generations and others, these options should
>> transform into subcommands (list-generations) of "guix profile".
>
> The term 'profile' is used at user- and system- levels:
>
> 3.1 Features
> ============
> [...]
>    Instead of referring to these directories, users have their own
> “profile”, which points to the packages that they actually want to use.
> These profiles are stored within each user’s home directory, at
> ‘$HOME/.guix-profile’.
>
> 7.2.2 ‘operating-system’ Reference
> ----------------------------------
>      ‘packages’ (default: %BASE-PACKAGES)
>           The set of packages installed in the global profile, which is
>           accessible at ‘/run/current-system/profile’.
>
> ... and in home directories:
>
> /home/user1/.guix-profile -> /var/guix/profiles/per-user/user1/guix-profile
> /home/user1/.profile
>
> Making the use of 'profile' here ambiguous. So I suggest that you change
> 'guix profile ...' to 'guix user ...' like so:

I don’t think it’s ambiguous at all.  The system profile is a profile
like any other, so you can, for example, list installed packages like
this:

    guix package -p /run/booted-system/profile \
      --list-installed

What doesn’t work is to operate on generations because the booted-system
profile is a direct link to a store item; there is no indirection.  You
also cannot use “--manifest” on it because the profile contents are
controlled via “guix system reconfigure /path/to/config.scm”.

Rather than making the differences bigger, I think we should unify
profile management, i.e. make more of the commands for regular profiles
work with the system profile (provided a user has root privileges).

> |-----------------------------------+--------------------------------|
> | guix package --list-generations   | guix user --list-generations   |
> | guix package --list-installed     | guix user --list-installed     |
> | guix package --delete-generations | guix user --delete-generations |
> | guix package --switch-generations | guix user --switch-generations |
> | guix package --roll-back          | guix user --roll-back          |
> | guix package --manifest           | guix user --manifest           |
>
> and similarly, the above ...
>
>>   guix package install ...
>>   guix package remove ...
>
> ... would become ...
>
> guix user install ...
> guix user remove ...

I don’t think this is a good idea.  In addition to the reasons I stated
above “user” is even more vague than “package” is.  The proposal to use
“profile” for profile-related operations is a very natural one.

Here at the MDC we are using many different profiles on a regular
basis.  Multiple profiles is a common use-case.  Operating on profiles
with “guix profile” seems really appropriate; doing this via “guix user”
is confusing to me.  I don’t know what “user” stands for.

~~ Ricardo

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19 13:03         ` Thompson, David
  2016-04-19 13:35           ` John Darrington
@ 2016-04-19 13:51           ` myglc2
  1 sibling, 0 replies; 39+ messages in thread
From: myglc2 @ 2016-04-19 13:51 UTC (permalink / raw)
  To: guix-devel

"Thompson, David" <dthompson2@worcester.edu> writes:

> I'm with Ricardo.  Separating things into things for "users" and
> things for "developers" just re-establishes the dichotomy that we
> intend to blur, and insist isn't really there in the first place.  We
> want to encourage users to hack the system, not cordon off a section
> of tools and say "these aren't for you."

On this point you Guix developers are so didactic that you run a real
risk of making Guix adoption self-limiting :-(

And you misunderstand what I am proposing. Instead I am saying that
restructuring the interface can make it easier for a novice to find
their way in. Once this novice is using Guix, the same structuring will
help them find and use other parts of Guix.

This actually advances your objective because it brings more potential
"system hackers" into the user base.  How is this bad?

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19  7:52   ` Alex Kost
                       ` (2 preceding siblings ...)
  2016-04-19 13:00     ` myglc2
@ 2016-04-19 13:55     ` Ricardo Wurmus
  2016-04-19 15:52     ` Ludovic Courtès
  4 siblings, 0 replies; 39+ messages in thread
From: Ricardo Wurmus @ 2016-04-19 13:55 UTC (permalink / raw)
  To: Alex Kost; +Cc: guix-devel


Alex Kost <alezost@gmail.com> writes:

> Here is the summary of the changes I think it would be good to have:
>
> | Replace this:                     | With this:                        |
> |-----------------------------------+-----------------------------------|
> | guix build                        | guix package build                |
> | guix edit                         | guix package definition¹          |
> | guix import                       | guix package import               |
> | guix lint                         | guix package lint                 |
> | guix refresh                      | guix package refresh              |
> | guix package --show               | guix package show                 |
> | guix package --search             | guix package search               |
> | guix package --list-available     | guix package list                 |
> |-----------------------------------+-----------------------------------|
> | guix package --list-generations   | guix profile --list-generations   |
> | guix package --list-installed     | guix profile --list-installed     |
> | guix package --delete-generations | guix profile --delete-generations |
> | guix package --switch-generations | guix profile --switch-generations |
> | guix package --roll-back          | guix profile --roll-back          |
> | guix package --manifest           | guix profile --manifest           |
>
> ¹ "edit" name is confusing: <http://bugs.gnu.org/22587>

This looks like a good list of changes, especially the “profile” stuff.
I’ve often written “guix profile” only to backtrack and write “package”
when my mind was set on manipulating profiles.

When operating on profiles other than the default this may look a bit
ugly:

    guix profile --profile /path/to/profile --manifest

I agree that “edit” may be confusing, and it seems that others feel that
way too, judging from the requests for help on the mailing lists and the
IRC channel.  Although “definition” isn’t pretty it is probably better
than “view” as that would collide with “show”.

~~ Ricardo

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19 13:43       ` Ricardo Wurmus
@ 2016-04-19 14:29         ` myglc2
  0 siblings, 0 replies; 39+ messages in thread
From: myglc2 @ 2016-04-19 14:29 UTC (permalink / raw)
  To: guix-devel

Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de> writes:

> myglc2 <myglc2@gmail.com> writes:
>
>> Alex Kost <alezost@gmail.com> writes:
>>
>>> Ludovic Courtès (2016-04-18 20:20 +0300) wrote:
>>>
>>>> Alex Kost <alezost@gmail.com> skribis:
>>>>
>>>>> I've just sent a message to bug#22587¹, but I realized it is better to
>>>>> discuss it here in a separate thread.
>>>>>
>>>>> So, I think there are inconsistencies in guix commands.  For example, we
>>>>> have "guix system build" to build a system, but "guix build" to build a
>>>>> package.  IMO "guix package build" would be a better choice.
>>>>>
>>>>> In general, I think it would be good to move package commands inside
>>>>> "guix package", e.g, to make "guix package lint", "guix package size",
>>>>> etc.
>>>>
>>>> Why not consider “package” to be the default word?  :-)
>>>
>>> Interesting, but why do we need to have "guix package" at all?  Let's
>>> just use "guix --install", etc.  (This is not what I suggest :-))
>>>
>>>> I can see how adding “package” everywhere helps categorize things
>>>> mentally, but as a user interface, I think it would be rather bad.
>>>
>>> As a user, I think it would be rather good.  (This is just my user opinion)
>>>
>>>> Also, it’s not that simple: “guix size” can take a store item instead of
>>>> a package name, “guix graph” cannot do it yet but it would be useful if
>>>> it could (“guix graph -t references $(readlink -f /run/current-system)”),
>>>> etc.
>>>
>>> Hm, OK, I'm not sure, but let's leave "graph" and "size" alone for now.
>>>
>>>> I still think that having aliases like “guix install” as Andy proposed
>>>> long ago would be useful, though I never started working on it.
>>>
>>> I agree!  Except I think they should be inside "guix package":
>>>
>>>   guix package install ...
>>>   guix package remove ...
>>>
>>> As for the transactional operations (I mean remove/install in one
>>> command), I think we can do it in a separate "guix profile" command:
>>>
>>>   guix profile --install ... --remove ...
>>>
>>>> There are probably other improvements to do around “guix package” (maybe
>>>> turning some of its options into separate sub-commands as was suggested
>>>> before.)  All we need is a clear view of where we’re going and patches.  :-)
>>>
>>> Here is the summary of the changes I think it would be good to have:
>>>
>>> | Replace this:                     | With this:                        |
>>> |-----------------------------------+-----------------------------------|
>>> | guix build                        | guix package build                |
>>> | guix edit                         | guix package definition¹          |
>>> | guix import                       | guix package import               |
>>> | guix lint                         | guix package lint                 |
>>> | guix refresh                      | guix package refresh              |
>>> | guix package --show               | guix package show                 |
>>> | guix package --search             | guix package search               |
>>> | guix package --list-available     | guix package list                 |
>>> |-----------------------------------+-----------------------------------|
>>> | guix package --list-generations   | guix profile --list-generations   |
>>> | guix package --list-installed     | guix profile --list-installed     |
>>> | guix package --delete-generations | guix profile --delete-generations |
>>> | guix package --switch-generations | guix profile --switch-generations |
>>> | guix package --roll-back          | guix profile --roll-back          |
>>> | guix package --manifest           | guix profile --manifest           |
>>>
>>> ¹ "edit" name is confusing: <http://bugs.gnu.org/22587>
>>>
>>> Maybe instead of --list-generations and others, these options should
>>> transform into subcommands (list-generations) of "guix profile".
>>
>> The term 'profile' is used at user- and system- levels:
>>
>> 3.1 Features
>> ============
>> [...]
>>    Instead of referring to these directories, users have their own
>> “profile”, which points to the packages that they actually want to use.
>> These profiles are stored within each user’s home directory, at
>> ‘$HOME/.guix-profile’.
>>
>> 7.2.2 ‘operating-system’ Reference
>> ----------------------------------
>>      ‘packages’ (default: %BASE-PACKAGES)
>>           The set of packages installed in the global profile, which is
>>           accessible at ‘/run/current-system/profile’.
>>
>> ... and in home directories:
>>
>> /home/user1/.guix-profile -> /var/guix/profiles/per-user/user1/guix-profile
>> /home/user1/.profile
>>
>> Making the use of 'profile' here ambiguous. So I suggest that you change
>> 'guix profile ...' to 'guix user ...' like so:
>
> I don’t think it’s ambiguous at all.  The system profile is a profile
> like any other, so you can, for example, list installed packages like
> this:
>
>     guix package -p /run/booted-system/profile \
>       --list-installed
>
> What doesn’t work is to operate on generations because the booted-system
> profile is a direct link to a store item; there is no indirection.  You
> also cannot use “--manifest” on it because the profile contents are
> controlled via “guix system reconfigure /path/to/config.scm”.
>
> Rather than making the differences bigger, I think we should unify
> profile management, i.e. make more of the commands for regular profiles
> work with the system profile (provided a user has root privileges).

I don't think this is a good idea. The more general purpose you make a
command the more situational the results are and the more skillful the
user has to be to use it.

As an example: You can replace matches and flame throwers with a single
tool, the flamethrower. If everybody discussing the idea is a
flamethrower operator, it probably sounds like a good idea ;-)

>> |-----------------------------------+--------------------------------|
>> | guix package --list-generations   | guix user --list-generations   |
>> | guix package --list-installed     | guix user --list-installed     |
>> | guix package --delete-generations | guix user --delete-generations |
>> | guix package --switch-generations | guix user --switch-generations |
>> | guix package --roll-back          | guix user --roll-back          |
>> | guix package --manifest           | guix user --manifest           |
>>
>> and similarly, the above ...
>>
>>>   guix package install ...
>>>   guix package remove ...
>>
>> ... would become ...
>>
>> guix user install ...
>> guix user remove ...
>
> I don’t think this is a good idea.  In addition to the reasons I stated
> above “user” is even more vague than “package” is.  The proposal to use
> “profile” for profile-related operations is a very natural one.
>
> Here at the MDC we are using many different profiles on a regular
> basis.  Multiple profiles is a common use-case.  Operating on profiles
> with “guix profile” seems really appropriate; doing this via “guix user”
> is confusing to me.  I don’t know what “user” stands for.

"user" is short for "per-user-profile", as in ...

3.1 Features
============
[...]
The ‘guix package’ command is the central tool to manage packages
(*note Invoking guix package::).  It operates on the per-user profiles,
and can be used _with normal user privileges_.

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19  9:23     ` Hartmut Goebel
  2016-04-19 10:16       ` Alex Kost
@ 2016-04-19 14:39       ` John Darrington
  1 sibling, 0 replies; 39+ messages in thread
From: John Darrington @ 2016-04-19 14:39 UTC (permalink / raw)
  To: Hartmut Goebel; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 1354 bytes --]

On Tue, Apr 19, 2016 at 11:23:43AM +0200, Hartmut Goebel wrote:
     Am 19.04.2016 um 09:52 schrieb Alex Kost:
     
     I like you suggestion, except for these:
     > Here is the summary of the changes I think it would be good to have:
     >
     > [...]
     > |-----------------------------------+-----------------------------------|
     > | guix package --list-generations   | guix profile --list-generations   |
     
     Why no replace the dashes here, too? This would IMHO be more consistent
     to the package sub-command?
     
I beleive the dashes should be removed, since list-generations is a requested 
action, not an option.  In Unix like systems we have the commands rm, ls, mv; NOT 
file --remove, file --list and file --move

But I know that some people like to use options for commands.

One possibility would be to have a set of standard aliases.  Then people who like
guix package --list-generations ; or
guix system --frobnicate
can use that.

Others can use

guixp-lg ; or
guixs-fb

This was the method used by aegis for many years and kept most people happy.

J'

-- 
Avoid eavesdropping.  Send strong encryted email.
PGP Public key ID: 1024D/2DE827B3 
fingerprint = 8797 A26D 0854 2EAB 0285  A290 8A67 719C 2DE8 27B3
See http://sks-keyservers.net or any PGP keyserver for public key.


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19  5:17     ` John Darrington
  2016-04-19 12:57       ` myglc2
@ 2016-04-19 15:24       ` Ludovic Courtès
  1 sibling, 0 replies; 39+ messages in thread
From: Ludovic Courtès @ 2016-04-19 15:24 UTC (permalink / raw)
  To: John Darrington; +Cc: guix-devel, myglc2

John Darrington <john@darrington.wattle.id.au> skribis:

> While we're thinking about user interfaces, I believe a more abstract approach
> would be  better at this stage:    What types of person are going to be 
> interacting with Guix?  Developers?  Users?  Curious Bystanders?  Some other 
> category of person?  --- Each of those are probably going to have a core set
> of commands which they use regualarly,  a few which they use occasionally and
> some never.  Identifying those sets (which may intersect) is the first step
> to designing a good user interface.  That would help for both CLI and GUI.

I and others tried to start each of the “Invoking” sections with a
sentence clarifying the intended audience of the command.

Probably we should try to reflect it more in the manual’s structure, so
it’s not clear to me exactly how.

Ludo’.

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19  7:52   ` Alex Kost
                       ` (3 preceding siblings ...)
  2016-04-19 13:55     ` Ricardo Wurmus
@ 2016-04-19 15:52     ` Ludovic Courtès
  2016-04-19 19:56       ` Christopher Allan Webber
                         ` (3 more replies)
  4 siblings, 4 replies; 39+ messages in thread
From: Ludovic Courtès @ 2016-04-19 15:52 UTC (permalink / raw)
  To: Alex Kost; +Cc: guix-devel

Alex Kost <alezost@gmail.com> skribis:

> Ludovic Courtès (2016-04-18 20:20 +0300) wrote:

[...]

>> I can see how adding “package” everywhere helps categorize things
>> mentally, but as a user interface, I think it would be rather bad.
>
> As a user, I think it would be rather good.  (This is just my user opinion)

To clarify, what I meant is that forcing users to type an additional
word for common operations just for the beauty of categorization sounds
unwise to me.

For instance, I’m happy I can type ‘ls’ rather than ‘gnu core file list’.
:-)

Similarly, it’s not immediately obvious to me that something like “guix
package edit” and “guix package install” would help newcomers.

On the contrary, they would likely violate the rule of least surprise:
most other tools provide sub-commands like “install”, some provide
“edit” and “build” as well, without further categorization.

>> Also, it’s not that simple: “guix size” can take a store item instead of
>> a package name, “guix graph” cannot do it yet but it would be useful if
>> it could (“guix graph -t references $(readlink -f /run/current-system)”),
>> etc.
>
> Hm, OK, I'm not sure, but let's leave "graph" and "size" alone for now.

But there are many other similar cases.  For instance, ‘guix build’ can
be passed a .drv; ‘guix archive’ can be passed a package name or a store
file name, etc.

Passing package names is a mere convenience for many of these commands;
fundamentally, many operate on store items, derivations, etc.

This requires careful consideration.

>> I still think that having aliases like “guix install” as Andy proposed
>> long ago would be useful, though I never started working on it.
>
> I agree!  Except I think they should be inside "guix package":
>
>   guix package install ...
>   guix package remove ...

As I view it, the sole purpose of “guix install” and similar is to make
it easier for newcomers to get started (see <http://xkcd.com/1654/>),
and to allow users in general to type less.

Adding “package” in the middle would probably defeat that goal.

> As for the transactional operations (I mean remove/install in one
> command), I think we can do it in a separate "guix profile" command:
>
>   guix profile --install ... --remove ...

This sounds good to me.

>> There are probably other improvements to do around “guix package” (maybe
>> turning some of its options into separate sub-commands as was suggested
>> before.)  All we need is a clear view of where we’re going and patches.  :-)
>
> Here is the summary of the changes I think it would be good to have:
>
> | Replace this:                     | With this:                        |
> |-----------------------------------+-----------------------------------|
> | guix build                        | guix package build                |

I don’t like this one, for the reasons given above.

> | guix edit                         | guix package definition¹          |
> | guix import                       | guix package import               |
> | guix lint                         | guix package lint                 |
> | guix refresh                      | guix package refresh              |

I suppose the benefit would be that users can type ‘guix package help’
and see all the sub-commands that relate to packages, right?

> | guix package --show               | guix package show                 |
> | guix package --search             | guix package search               |
> | guix package --list-available     | guix package list                 |

Or just ‘guix show’, ‘guix search’, etc.?

> |-----------------------------------+-----------------------------------|
> | guix package --list-generations   | guix profile --list-generations   |
> | guix package --list-installed     | guix profile --list-installed     |
> | guix package --delete-generations | guix profile --delete-generations |
> | guix package --switch-generations | guix profile --switch-generations |
> | guix package --roll-back          | guix profile --roll-back          |
> | guix package --manifest           | guix profile --manifest           |

> ¹ "edit" name is confusing: <http://bugs.gnu.org/22587>
>
> Maybe instead of --list-generations and others, these options should
> transform into subcommands (list-generations) of "guix profile".

I agree.  But what should we do of transactions?

Thoughts?

Ludo’.

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19 15:52     ` Ludovic Courtès
@ 2016-04-19 19:56       ` Christopher Allan Webber
  2016-04-20  3:45       ` myglc2
                         ` (2 subsequent siblings)
  3 siblings, 0 replies; 39+ messages in thread
From: Christopher Allan Webber @ 2016-04-19 19:56 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel, Alex Kost

Ludovic Courtès writes:

> Alex Kost <alezost@gmail.com> skribis:
>
>> Ludovic Courtès (2016-04-18 20:20 +0300) wrote:
>
> [...]
>
>>> I can see how adding “package” everywhere helps categorize things
>>> mentally, but as a user interface, I think it would be rather bad.
>>
>> As a user, I think it would be rather good.  (This is just my user opinion)
>
> To clarify, what I meant is that forcing users to type an additional
> word for common operations just for the beauty of categorization sounds
> unwise to me.
>
> For instance, I’m happy I can type ‘ls’ rather than ‘gnu core file list’.
> :-)
>
> Similarly, it’s not immediately obvious to me that something like “guix
> package edit” and “guix package install” would help newcomers.
>
> On the contrary, they would likely violate the rule of least surprise:
> most other tools provide sub-commands like “install”, some provide
> “edit” and “build” as well, without further categorization.

This makes sense to me.

I think it's also worth noting that this is prime ground for bikeshed[0]
territory.  So it's worth discussing and making changes, but not losing
hair over.

 - Chris

[0] http://shed.bike/

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19 15:52     ` Ludovic Courtès
  2016-04-19 19:56       ` Christopher Allan Webber
@ 2016-04-20  3:45       ` myglc2
  2016-04-20  5:34         ` John Darrington
  2016-04-20  8:29       ` Alex Kost
  2016-04-20  9:29       ` Taylan Ulrich Bayırlı/Kammer
  3 siblings, 1 reply; 39+ messages in thread
From: myglc2 @ 2016-04-20  3:45 UTC (permalink / raw)
  To: guix-devel

ludo@gnu.org (Ludovic Courtès) writes:

> Alex Kost <alezost@gmail.com> skribis:
>
>> Ludovic Courtès (2016-04-18 20:20 +0300) wrote:
>
> [...]
>
>>> I can see how adding “package” everywhere helps categorize things
>>> mentally, but as a user interface, I think it would be rather bad.
>>
>> As a user, I think it would be rather good.  (This is just my user opinion)
>
> To clarify, what I meant is that forcing users to type an additional
> word for common operations just for the beauty of categorization sounds
> unwise to me.
>
> For instance, I’m happy I can type ‘ls’ rather than ‘gnu core file list’.
> :-)
>
> Similarly, it’s not immediately obvious to me that something like “guix
> package edit” and “guix package install” would help newcomers.
>
> On the contrary, they would likely violate the rule of least surprise:
> most other tools provide sub-commands like “install”, some provide
> “edit” and “build” as well, without further categorization.

For the record, my original beef with guix edit, which seems to have
started all of this, is that, in a vanilla install, it opens an editor
on a file that the user cannot edit. So I suggested that we rename it
'guix view'.  Ironically, since then, I switched to guix git checkout,
so now I like "guix edit" just fine ;-)

>>> Also, it’s not that simple: “guix size” can take a store item instead of
>>> a package name, “guix graph” cannot do it yet but it would be useful if
>>> it could (“guix graph -t references $(readlink -f /run/current-system)”),
>>> etc.
>>
>> Hm, OK, I'm not sure, but let's leave "graph" and "size" alone for now.
>
> But there are many other similar cases.  For instance, ‘guix build’ can
> be passed a .drv; ‘guix archive’ can be passed a package name or a store
> file name, etc.
>
> Passing package names is a mere convenience for many of these commands;
> fundamentally, many operate on store items, derivations, etc.
>
> This requires careful consideration.
>
>>> I still think that having aliases like “guix install” as Andy proposed
>>> long ago would be useful, though I never started working on it.
>>
>> I agree!  Except I think they should be inside "guix package":
>>
>>   guix package install ...
>>   guix package remove ...
>
> As I view it, the sole purpose of “guix install” and similar is to make
> it easier for newcomers to get started (see <http://xkcd.com/1654/>),
> and to allow users in general to type less.
>
> Adding “package” in the middle would probably defeat that goal.
>
>> As for the transactional operations (I mean remove/install in one
>> command), I think we can do it in a separate "guix profile" command:
>>
>>   guix profile --install ... --remove ...
>
> This sounds good to me.
>
>>> There are probably other improvements to do around “guix package” (maybe
>>> turning some of its options into separate sub-commands as was suggested
>>> before.)  All we need is a clear view of where we’re going and patches.  :-)
>>
>> Here is the summary of the changes I think it would be good to have:
>>
>> | Replace this:                     | With this:                        |
>> |-----------------------------------+-----------------------------------|
>> | guix build                        | guix package build                |
>
> I don’t like this one, for the reasons given above.
>
>> | guix edit                         | guix package definition¹          |
>> | guix import                       | guix package import               |
>> | guix lint                         | guix package lint                 |
>> | guix refresh                      | guix package refresh              |
>
> I suppose the benefit would be that users can type ‘guix package help’
> and see all the sub-commands that relate to packages, right?

Also these  commands would no longer clutter up 'guix help'.

>> | guix package --show               | guix package show                 |
>> | guix package --search             | guix package search               |
>> | guix package --list-available     | guix package list                 |
>
> Or just ‘guix show’, ‘guix search’, etc.?

I also like these better, see analysis below.

>> |-----------------------------------+-----------------------------------|
>> | guix package --list-generations   | guix profile --list-generations   |
>> | guix package --list-installed     | guix profile --list-installed     |
>> | guix package --delete-generations | guix profile --delete-generations |
>> | guix package --switch-generations | guix profile --switch-generations |
>> | guix package --roll-back          | guix profile --roll-back          |
>> | guix package --manifest           | guix profile --manifest           |
>
>> ¹ "edit" name is confusing: <http://bugs.gnu.org/22587>
>>
>> Maybe instead of --list-generations and others, these options should
>> transform into subcommands (list-generations) of "guix profile".
>
> I agree.  But what should we do of transactions?
>
> Thoughts?
>
> Ludo’.

After seeing and contributing to the chaos this post generated I felt
guilty because my 'guix edit' complaint started it all.  So I made an
effort to step back and see the big picture. The table below summarizes
the Guix commands as I understand them. Columns 3 and 4 show which
commands modify user and system profiles, respectively. Columns 5, 6, 7
and 8 show commands used by different user types. Column 9 indicates
whether SUDO is required.

Table 1: command summary
========================
| column: 1        | 2                                      | 3   | 4   | 5   | 6   | 7   | 8   | 9   |
|                  |                                        | +/- | +/- | new | typ | sys |     |     |
| command          | usage                                  | usr | sys | usr | usr | adm | dev | su? |
|                  |                                        | prf | prf |     |     |     |     |     |
|------------------+----------------------------------------+-----+-----+-----+-----+-----+-----+-----+
| guix archive     | [OPTION]... PACKAGE...                 |     |     |     |     |     | x   |     |
| guix build       | [OPTION]... PACKAGE-OR-DERIVATION...   |     |     |     |     |     | x   |     |
| guix challenge   | [PACKAGE...]                           |     |     |     | x   |     | x   |     |
| guix container   | exec ARGS...                           |     |     |     |     | x   | x   |     |
| guix download    | [OPTION] URL                           |     |     |     | x   |     | x   |     |
| guix edit        | PACKAGE...                             |     |     |     | x   |     | x   |     |
| guix environment | [OPTION]... PACKAGE... [-- COMMAND...] |     |     |     | x   |     | x   |     |
| guix gc          | [OPTION]... PATHS...                   |     |     |     | x   | x   | x   |     |
| guix graph       | PACKAGE...                             |     |     |     |     |     | x   |     |
| guix hash        | [OPTION] FILE                          |     |     |     |     |     | x   |     |
| guix import      | IMPORTER ARGS ...                      |     |     |     |     |     | x   |     |
| guix lint        | [OPTION]... [PACKAGE]...               |     |     |     |     |     | x   |     |
| guix package     | --list-available[=REGEXP]              |     |     | x   | x   | x   | x   |     |
| guix package     | --install PACKAGE                      | x   |     | x   | x   |     | x   |     |
| guix package     | --upgrade PACKAGE                      | x   |     |     | x   |     | x   |     |
| guix package     | --remove PACKAGE                       | x   |     | x   | x   |     | x   |     |
| guix package     | --manifest MANIFEST                    | x   |     |     | x   |     | x   |     |
| guix package     | --list-installed[=REGEXP]              |     |     | x   | x   |     | x   |     |
| guix package     | --list-generations[=PATTERN]           |     |     |     | x   |     | x   |     |
| guix package     | --roll-back                            | x   |     | x   | x   |     | x   |     |
| guix package     | --delete-generations                   | x   |     |     | x   |     | x   |     |
| guix package     | --switch-generations                   | x   |     |     | x   |     | x   |     |
| guix package     | --search=REGEXP                        | x   |     |     | x   |     | x   |     |
| guix package     | --list-available[=REGEXP]              |     |     |     |     |     | x   |     |
| guix package     | --show=PACKAGE                         |     |     |     |     |     | X   |     |
| guix package     | [OPTION]...                            |     |     |     |     |     | x   |     |
| guix publish     | [OPTION]...                            |     |     |     |     | x   | x   | Y   |
| guix pull        | [OPTION]...                            |     |     | x   | x   | x   | x   |     |
| guix refresh     | [OPTION]... PACKAGE...                 |     |     |     |     |     | x   |     |
| guix size        | [OPTION]... PACKAGE...                 |     |     |     |     |     | x   |     |
| guix system      | [OPTION] reconfigure [FILE]            |     | x   | x   | x   | x   | x   | Y   |
| guix system      | [OPTION] list-generations [FILE]       |     |     |     | x   | x   | x   |     |
| guix system      | [OPTION] build [FILE]                  |     |     |     |     |     | x   |     |
| guix system      | [OPTION] container [FILE]              |     |     |     |     |     | x   |     |
| guix system      | [OPTION] vm [FILE]                     |     |     |     |     | x   | x   |     |
| guix system      | [OPTION] vm-image [FILE]               |     |     |     |     |     | x   |     |
| guix system      | [OPTION] disk-image [FILE]             |     |     |     |     |     | x   |     |
| guix system      | [OPTION] init [FILE]                   |     |     |     |     | x   | x   | Y   |
| guix system      | [OPTION] extension-graph [FILE]        |     |     |     |     |     | x   |     |
| guix system      | [OPTION] shepherd-graph [FILE]         |     |     |     |     |     | x   |     |


Looking at the table, my major puzzles are:

- 'guix package' specifies actions with _OPTION_ but guix system uses
  _ACTION_.

- The small set of commands (column 3) that a new user needs are
  buried. That is, 'guix help' does not show them because they are
  implemented as OPTIONs and ACTIONs. Instead it shows mostly developer
  utilities.

- guix package modifies and reports on the per-user-profile but doesn't
  actually do anything "to" packages other than show what is available.

- Several other guix commands do things "to" packages.

We could debate how to resolve these puzzles, but as you know, what I
care most about is to make Guix easier for new users.  Here are the
minimum changes that I suggest for that:

Table 2: Novice-friendly Commands
=================================
| existing command                       | new command           |
|----------------------------------------+-----------------------|
| guix package --list-available[=REGEXP] | guix available REGEXP |
| guix package --search=REGEXP           | guix find REGEXP      |
| guix package --show=PACKAGE            | guix show PACKAGE     |
| guix package --install PACKAGE         | guix install PACKAGE  |
| guix package --remove PACKAGE          | guix remove PACKAGE   |
| guix package --list-installed[=REGEXP] | guix list             |
| guix package --roll-back               | guix roll-back        |

This makes the most important new user commands simpler and it makes
them appear in "guix help". IMO, this will go a long way to improving
the novice user's experience.

- George

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-20  3:45       ` myglc2
@ 2016-04-20  5:34         ` John Darrington
  2016-04-20  8:52           ` Alex Kost
  0 siblings, 1 reply; 39+ messages in thread
From: John Darrington @ 2016-04-20  5:34 UTC (permalink / raw)
  To: myglc2; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 1862 bytes --]

On Tue, Apr 19, 2016 at 11:45:26PM -0400, myglc2 wrote:

     Table 2: Novice-friendly Commands
     =================================
     | existing command                       | new command           |
     |----------------------------------------+-----------------------|
     | guix package --list-available[=REGEXP] | guix available REGEXP |
     | guix package --search=REGEXP           | guix find REGEXP      |
     | guix package --show=PACKAGE            | guix show PACKAGE     |
     | guix package --install PACKAGE         | guix install PACKAGE  |
     | guix package --remove PACKAGE          | guix remove PACKAGE   |
     | guix package --list-installed[=REGEXP] | guix list             |
     | guix package --roll-back               | guix roll-back        |
     
     This makes the most important new user commands simpler and it makes
     them appear in "guix help". IMO, this will go a long way to improving
     the novice user's experience.
     
I agree this would make more sense.

1. I never did understand why we use so many  -- flags.  Options are supposed
   to be just that:  Options to affect nuances about how the command should be
   executed. Eg "ls --color" (We don't type "file --list")  Options should not
   normally be used for selecting a command to run.

2. However, I wonder if such an arrangement could come back and bite us?  For
   example there are a number of other things that one might want to remove, list, show or find - 
   not just packages;  Profiles, services for example.  How would doing that fit 
   into the above scheme?

J'
     

-- 
Avoid eavesdropping.  Send strong encryted email.
PGP Public key ID: 1024D/2DE827B3 
fingerprint = 8797 A26D 0854 2EAB 0285  A290 8A67 719C 2DE8 27B3
See http://sks-keyservers.net or any PGP keyserver for public key.


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19 15:52     ` Ludovic Courtès
  2016-04-19 19:56       ` Christopher Allan Webber
  2016-04-20  3:45       ` myglc2
@ 2016-04-20  8:29       ` Alex Kost
  2016-04-20  9:46         ` Taylan Ulrich Bayırlı/Kammer
  2016-04-20  9:29       ` Taylan Ulrich Bayırlı/Kammer
  3 siblings, 1 reply; 39+ messages in thread
From: Alex Kost @ 2016-04-20  8:29 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

Ludovic Courtès (2016-04-19 18:52 +0300) wrote:

> Alex Kost <alezost@gmail.com> skribis:
>
>> Ludovic Courtès (2016-04-18 20:20 +0300) wrote:
>
> [...]
>
>>> I can see how adding “package” everywhere helps categorize things
>>> mentally, but as a user interface, I think it would be rather bad.
>>
>> As a user, I think it would be rather good.  (This is just my user opinion)
>
> To clarify, what I meant is that forcing users to type an additional
> word for common operations just for the beauty of categorization sounds
> unwise to me.

OK, I don't see it as "additional words", rather as "required words".
Typing "guix lint" for me is the same as "ip add".  It doesn't make
sense: "add" what?  It should be "ip address add"! (and "guix package
lint").

> For instance, I’m happy I can type ‘ls’ rather than ‘gnu core file list’.
> :-)

But we have a single "guix" command, while coreutils has many of them.
It is probably a matter of taste: I prefer to use a single and complex
"ip" command instead of route/ifconfig/netstat/...

> Similarly, it’s not immediately obvious to me that something like “guix
> package edit” and “guix package install” would help newcomers.
>
> On the contrary, they would likely violate the rule of least surprise:
> most other tools provide sub-commands like “install”, some provide
> “edit” and “build” as well, without further categorization.

It's because the other tools are poor, unfeatureful and unorganized :-)
I see "guix" as a more general tool than most others: it does not
operates only on packages, it does many other things, so it should have
reasonable subgroups, and (IMO) there shouldn't be such things as "guix
install" or "guix edit".

>>> Also, it’s not that simple: “guix size” can take a store item instead of
>>> a package name, “guix graph” cannot do it yet but it would be useful if
>>> it could (“guix graph -t references $(readlink -f /run/current-system)”),
>>> etc.
>>
>> Hm, OK, I'm not sure, but let's leave "graph" and "size" alone for now.
>
> But there are many other similar cases.  For instance, ‘guix build’ can
> be passed a .drv; ‘guix archive’ can be passed a package name or a store
> file name, etc.
>
> Passing package names is a mere convenience for many of these commands;
> fundamentally, many operate on store items, derivations, etc.
>
> This requires careful consideration.

Definitely, I just raised some concerns and inconveniences I have using
"guix" command in a hope that it will lead to something productive.

OK, (although I still think that "guix package build" is better than
"guix build"), what about moving to "guix package" only those actions
that operate only on packages ("edit", "lint" and "refresh") or relate
only to packages ("import")?

>>> I still think that having aliases like “guix install” as Andy proposed
>>> long ago would be useful, though I never started working on it.
>>
>> I agree!  Except I think they should be inside "guix package":
>>
>>   guix package install ...
>>   guix package remove ...
>
> As I view it, the sole purpose of “guix install” and similar is to make
> it easier for newcomers to get started (see <http://xkcd.com/1654/>),
> and to allow users in general to type less.
>
> Adding “package” in the middle would probably defeat that goal.

OK, I see; then I don't like it.  Actually I don't really like to
duplicate (make aliases for) commands.  So if there will be "guix
profile remove", then I wouldn't like to have "guix package remove" or
"guix remove".

>> As for the transactional operations (I mean remove/install in one
>> command), I think we can do it in a separate "guix profile" command:
>>
>>   guix profile --install ... --remove ...
>
> This sounds good to me.
>
>>> There are probably other improvements to do around “guix package” (maybe
>>> turning some of its options into separate sub-commands as was suggested
>>> before.)  All we need is a clear view of where we’re going and patches.  :-)
>>
>> Here is the summary of the changes I think it would be good to have:
>>
>> | Replace this:                     | With this:                        |
>> |-----------------------------------+-----------------------------------|
>> | guix build                        | guix package build                |
>
> I don’t like this one, for the reasons given above.

OK.

>> | guix edit                         | guix package definition¹          |
>> | guix import                       | guix package import               |
>> | guix lint                         | guix package lint                 |
>> | guix refresh                      | guix package refresh              |
>
> I suppose the benefit would be that users can type ‘guix package help’
> and see all the sub-commands that relate to packages, right?

I didn't have this in mind, but it would be a good thing indeed.  As I
wrote above, these commands relate only to packages, you lint/edit a
*package*, and you import a *package* definition.

>> | guix package --show               | guix package show                 |
>> | guix package --search             | guix package search               |
>> | guix package --list-available     | guix package list                 |
>
> Or just ‘guix show’, ‘guix search’, etc.?

As for me, this would be worse than it is now.  You show/search
packages, not systems or licenses or whatever, so I think such things
should be subcommands for "guix package".

>> |-----------------------------------+-----------------------------------|
>> | guix package --list-generations   | guix profile --list-generations   |
>> | guix package --list-installed     | guix profile --list-installed     |
>> | guix package --delete-generations | guix profile --delete-generations |
>> | guix package --switch-generations | guix profile --switch-generations |
>> | guix package --roll-back          | guix profile --roll-back          |
>> | guix package --manifest           | guix profile --manifest           |
>
>> ¹ "edit" name is confusing: <http://bugs.gnu.org/22587>
>>
>> Maybe instead of --list-generations and others, these options should
>> transform into subcommands (list-generations) of "guix profile".
>
> I agree.  But what should we do of transactions?

Yes, that's a problem.  I don't have a clean picture of this.  Maybe
this:

  guix profile list-packages
  guix profile list-generations
  guix profile delete-generations
  guix profile switch-generation
  guix profile roll-back
  guix profile upgrade

For simple installing/removing:

  guix profile {add/install} PACKAGES...
  guix profile remove PACKAGES...

Complex transactions may be put in another subcommand, e.g.:

  guix profile manifest --install=PACKAGES,... --remove=PACKAGES,...

For manifest from file:

  guix profile manifest --file=...

Actually I don't really like all this, but I don't have better ideas, so
a simple decision for now (if it's reasonable) would be just separating
profile-related commands.  I mean moving the mentioned options from
"guix package" to "guix profile".

-- 
Alex

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-20  5:34         ` John Darrington
@ 2016-04-20  8:52           ` Alex Kost
  2016-04-20 17:05             ` myglc2
  0 siblings, 1 reply; 39+ messages in thread
From: Alex Kost @ 2016-04-20  8:52 UTC (permalink / raw)
  To: John Darrington; +Cc: guix-devel, myglc2

John Darrington (2016-04-20 08:34 +0300) wrote:

> On Tue, Apr 19, 2016 at 11:45:26PM -0400, myglc2 wrote:
>
>      Table 2: Novice-friendly Commands
>      =================================
>      | existing command                       | new command           |
>      |----------------------------------------+-----------------------|
>      | guix package --list-available[=REGEXP] | guix available REGEXP |
>      | guix package --search=REGEXP           | guix find REGEXP      |
>      | guix package --show=PACKAGE            | guix show PACKAGE     |
>      | guix package --install PACKAGE         | guix install PACKAGE  |
>      | guix package --remove PACKAGE          | guix remove PACKAGE   |
>      | guix package --list-installed[=REGEXP] | guix list             |
>      | guix package --roll-back               | guix roll-back        |
>
>      This makes the most important new user commands simpler and it makes
>      them appear in "guix help". IMO, this will go a long way to improving
>      the novice user's experience.
>
> I agree this would make more sense.

Oh, no!  I had an opposite idea: I think there should be only
unambiguous subcommands!

> 1. I never did understand why we use so many  -- flags.  Options are supposed
>    to be just that:  Options to affect nuances about how the command should be
>    executed. Eg "ls --color" (We don't type "file --list")  Options should not
>    normally be used for selecting a command to run.

I agree, I would prefer more actions/subcommands and less options/flags.

> 2. However, I wonder if such an arrangement could come back and bite us?  For
>    example there are a number of other things that one might want to remove, list, show or find -
>    not just packages;  Profiles, services for example.  How would doing that fit
>    into the above scheme?

This is exactly why I think these commands (show, install, list, etc.)
shouldn't be top-level.  IMO some of them should be inside "guix
package" and some inside "guix profile".

-- 
Alex

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-19 15:52     ` Ludovic Courtès
                         ` (2 preceding siblings ...)
  2016-04-20  8:29       ` Alex Kost
@ 2016-04-20  9:29       ` Taylan Ulrich Bayırlı/Kammer
  2016-04-21  2:49         ` Efraim Flashner
  3 siblings, 1 reply; 39+ messages in thread
From: Taylan Ulrich Bayırlı/Kammer @ 2016-04-20  9:29 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel, Alex Kost

ludo@gnu.org (Ludovic Courtès) writes:

>> Maybe instead of --list-generations and others, these options should
>> transform into subcommands (list-generations) of "guix profile".
>
> I agree.  But what should we do of transactions?

I'd like to re-propose the use of '--' to delineate the end of arguments
to a sub-command.  E.g.:

  guix install foo bar -- remove baz bat

(Leaving aside whether it's 'guix install', 'guix package install',
'guix profile add', or anything else.)

Taylan

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-20  8:29       ` Alex Kost
@ 2016-04-20  9:46         ` Taylan Ulrich Bayırlı/Kammer
  2016-04-20 21:45           ` Ludovic Courtès
  2016-04-21  5:20           ` John Darrington
  0 siblings, 2 replies; 39+ messages in thread
From: Taylan Ulrich Bayırlı/Kammer @ 2016-04-20  9:46 UTC (permalink / raw)
  To: Alex Kost; +Cc: guix-devel

Alex Kost <alezost@gmail.com> writes:

> Ludovic Courtès (2016-04-19 18:52 +0300) wrote:
>
>> Similarly, it’s not immediately obvious to me that something like “guix
>> package edit” and “guix package install” would help newcomers.
>>
>> On the contrary, they would likely violate the rule of least surprise:
>> most other tools provide sub-commands like “install”, some provide
>> “edit” and “build” as well, without further categorization.
>
> It's because the other tools are poor, unfeatureful and unorganized :-)
> I see "guix" as a more general tool than most others: it does not
> operates only on packages, it does many other things, so it should have
> reasonable subgroups, and (IMO) there shouldn't be such things as "guix
> install" or "guix edit".

While I agree with the categorization, I disagree on this.  Like the
others, I would expect there to be short aliases, at least so as not to
tire users.

And maybe to help newcomers, although I think it could be more
beneficial to start teaching in terms of the categories, so users
quickly get the underlying logic, and then just offer the aliases to
reassure the users that they needn't type verbose commands all the time.


As an example of the pedagogic benefit of categorizing the commands:
many users coming from other package managers are confused as to what
exactly "installing" a package is in Guix.  It actually consists of two
steps, 1. to ensure the package is in the store (by building or
downloading), and 2. adding it to the user's profile.  But the term
"install" doesn't reflect this, and makes users think in terms of
traditional package managers where installing a package means putting
its files into /usr.  Introducing newcomers to a command like 'guix
profile add' as the primary means of adding a package to their
environment, and briefly explaining the "transparently makes sure the
package is in the store" part, would have them immediately learn one of
the basic working principles of Guix.

But maybe it's unnecessary.  I still have no strong opinion. :-)

Taylan

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-20  8:52           ` Alex Kost
@ 2016-04-20 17:05             ` myglc2
  0 siblings, 0 replies; 39+ messages in thread
From: myglc2 @ 2016-04-20 17:05 UTC (permalink / raw)
  To: guix-devel

Alex Kost <alezost@gmail.com> writes:

> John Darrington (2016-04-20 08:34 +0300) wrote:
>
>> On Tue, Apr 19, 2016 at 11:45:26PM -0400, myglc2 wrote:
>>
>>      Table 2: Novice-friendly Commands
>>      =================================
>>      | existing command                       | new command           |
>>      |----------------------------------------+-----------------------|
>>      | guix package --list-available[=REGEXP] | guix available REGEXP |
>>      | guix package --search=REGEXP           | guix find REGEXP      |
>>      | guix package --show=PACKAGE            | guix show PACKAGE     |
>>      | guix package --install PACKAGE         | guix install PACKAGE  |
>>      | guix package --remove PACKAGE          | guix remove PACKAGE   |
>>      | guix package --list-installed[=REGEXP] | guix list             |
>>      | guix package --roll-back               | guix roll-back        |
>>
>>      This makes the most important new user commands simpler and it makes
>>      them appear in "guix help". IMO, this will go a long way to improving
>>      the novice user's experience.
>>
>> I agree this would make more sense.
>
> Oh, no!  I had an opposite idea: I think there should be only
> unambiguous subcommands!
>
>> 1. I never did understand why we use so many  -- flags.  Options are supposed
>>    to be just that:  Options to affect nuances about how the command should be
>>    executed. Eg "ls --color" (We don't type "file --list")  Options should not
>>    normally be used for selecting a command to run.
>
> I agree, I would prefer more actions/subcommands and less options/flags.
>
>> 2. However, I wonder if such an arrangement could come back and bite us?  For
>>    example there are a number of other things that one might want to remove, list, show or find -
>>    not just packages;  Profiles, services for example.  How would doing that fit
>>    into the above scheme?
>
> This is exactly why I think these commands (show, install, list, etc.)
> shouldn't be top-level.  IMO some of them should be inside "guix
> package" and some inside "guix profile".

Would we all agree with the following?

IMPLIED OBJECT (guix VERB ...)
PROS:
- less typing
CONS:
- each verb must be assigned to a single object type

EXPLICIT OBJECT (guix OBJECT VERB ...)
PROS:
- verb may be (re)used on multiple object types
CONS:
- more typing

For comparison, I tried to think of similarly complex command sets. For
example, I use 'git' and 'mdadm'. They both use a mixture of these
approaches that favors the implied object model.  mdadm mostly uses
options for actions and git mostly use sub-commands. IMO, both are
difficult to use.

It is not obvious to me that they would be improved by switching to a
pure explicit object model, but it would definitely mean more
typing. Looking at git help, the commands are grouped by pattern of use.
This seems like a good thing.

Re the EXPLICIT OBJECT model:

Elsewhere in this thread, Alex cites 'ip' as an example of a pure
explicit object command set. I don't use it enough to have an opinion,
but I see that 'ip help' does not show any VERBs (AKA COMMANDS), so I
don't know how I could actually do anything reading the ip help ;-(

Any other examples?

Based on this, my opinion is:

- we should use a mixture of the models. It might not be pure but it
  is a pattern that is familiar to users

- To increase ease of use, we should assign a one-to-one relationship
  between VERB <-> OBJECT for frequently used commands.

- I still like the original proposals above

New proposal: guix help should group commands by pattern of use.

Comments?

- George

***
git help
usage: git [--version] [--help] [-C <path>] [-c name=value]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
   clone      Clone a repository into a new directory
   init       Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
   add        Add file contents to the index
   mv         Move or rename a file, a directory, or a symlink
   reset      Reset current HEAD to the specified state
   rm         Remove files from the working tree and from the index

examine the history and state (see also: git help revisions)
   bisect     Use binary search to find the commit that introduced a bug
   grep       Print lines matching a pattern
   log        Show commit logs
   show       Show various types of objects
   status     Show the working tree status

grow, mark and tweak your common history
   branch     List, create, or delete branches
   checkout   Switch branches or restore working tree files
   commit     Record changes to the repository
   diff       Show changes between commits, commit and working tree, etc
   merge      Join two or more development histories together
   rebase     Forward-port local commits to the updated upstream head
   tag        Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
   fetch      Download objects and refs from another repository
   pull       Fetch from and integrate with another repository or a local branch
   push       Update remote refs along with associated objects

'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.

***
mdadm is used for building, managing, and monitoring
Linux md devices (aka RAID arrays)
Usage: mdadm --create device options...
            Create a new array from unused devices.
       mdadm --assemble device options...
            Assemble a previously created array.
       mdadm --build device options...
            Create or assemble an array without metadata.
       mdadm --manage device options...
            make changes to an existing array.
       mdadm --misc options... devices
            report on or modify various md related devices.
       mdadm --grow options device
            resize/reshape an active array
       mdadm --incremental device
            add/remove a device to/from an array as appropriate
       mdadm --monitor options...
            Monitor one or more array for significant changes.
       mdadm device options...
            Shorthand for --manage.
Any parameter that does not start with '-' is treated as a device name
or, for --examine-bitmap, a file name.
The first such name is often the name of an md device.  Subsequent
names are often names of component devices.

 For detailed help on the above major modes use --help after the mode
 e.g.
         mdadm --assemble --help
 For general help on options use
         mdadm --help-options

***
ip help
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
       ip [ -force ] -batch filename
where  OBJECT := { link | addr | addrlabel | route | rule | neigh | ntable |
                   tunnel | tuntap | maddr | mroute | mrule | monitor | xfrm |
                   netns | l2tp | tcp_metrics | token | netconf }
       OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
                    -f[amily] { inet | inet6 | ipx | dnet | bridge | link } |
                    -4 | -6 | -I | -D | -B | -0 |
                    -l[oops] { maximum-addr-flush-attempts } |
                    -o[neline] | -t[imestamp] | -b[atch] [filename] |
                    -rc[vbuf] [size]}

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-20  9:46         ` Taylan Ulrich Bayırlı/Kammer
@ 2016-04-20 21:45           ` Ludovic Courtès
  2016-04-21 12:34             ` myglc2
  2016-04-21  5:20           ` John Darrington
  1 sibling, 1 reply; 39+ messages in thread
From: Ludovic Courtès @ 2016-04-20 21:45 UTC (permalink / raw)
  To: Taylan Ulrich "Bayırlı/Kammer"; +Cc: guix-devel, Alex Kost

taylanbayirli@gmail.com (Taylan Ulrich "Bayırlı/Kammer") skribis:

> As an example of the pedagogic benefit of categorizing the commands:
> many users coming from other package managers are confused as to what
> exactly "installing" a package is in Guix.  It actually consists of two
> steps, 1. to ensure the package is in the store (by building or
> downloading), and 2. adding it to the user's profile.  But the term
> "install" doesn't reflect this, and makes users think in terms of
> traditional package managers where installing a package means putting
> its files into /usr.  Introducing newcomers to a command like 'guix
> profile add' as the primary means of adding a package to their
> environment, and briefly explaining the "transparently makes sure the
> package is in the store" part, would have them immediately learn one of
> the basic working principles of Guix.

Good point, I like it.  :-)

Ludo’.

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-20  9:29       ` Taylan Ulrich Bayırlı/Kammer
@ 2016-04-21  2:49         ` Efraim Flashner
  2016-04-21  7:10           ` Taylan Ulrich Bayırlı/Kammer
  0 siblings, 1 reply; 39+ messages in thread
From: Efraim Flashner @ 2016-04-21  2:49 UTC (permalink / raw)
  To: Taylan Ulrich Bayırlı/Kammer; +Cc: guix-devel, Alex Kost

[-- Attachment #1: Type: text/plain, Size: 1126 bytes --]

On Wed, Apr 20, 2016 at 11:29:25AM +0200, Taylan Ulrich Bayırlı/Kammer wrote:
> ludo@gnu.org (Ludovic Courtès) writes:
> 
> >> Maybe instead of --list-generations and others, these options should
> >> transform into subcommands (list-generations) of "guix profile".
> >
> > I agree.  But what should we do of transactions?
> 
> I'd like to re-propose the use of '--' to delineate the end of arguments
> to a sub-command.  E.g.:
> 
>   guix install foo bar -- remove baz bat
> 
> (Leaving aside whether it's 'guix install', 'guix package install',
> 'guix profile add', or anything else.)
> 
> Taylan
> 

Currently you can already call

    guix package -i foo bar -r baz

and it'll install and remove packages as you'd expect. Another option
that'll cut down on the length of the command but keep it obvious what's
going on is if it were changed to

    guix profile +foo +bar -baz

-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-20  9:46         ` Taylan Ulrich Bayırlı/Kammer
  2016-04-20 21:45           ` Ludovic Courtès
@ 2016-04-21  5:20           ` John Darrington
  1 sibling, 0 replies; 39+ messages in thread
From: John Darrington @ 2016-04-21  5:20 UTC (permalink / raw)
  To: Taylan Ulrich Bay??rl??/Kammer; +Cc: guix-devel, Alex Kost

[-- Attachment #1: Type: text/plain, Size: 1561 bytes --]

On Wed, Apr 20, 2016 at 11:46:20AM +0200, Taylan Ulrich Bay??rl??/Kammer wrote:
     
     As an example of the pedagogic benefit of categorizing the commands:
     many users coming from other package managers are confused as to what
     exactly "installing" a package is in Guix.  It actually consists of two
     steps, 1. to ensure the package is in the store (by building or
     downloading), and 2. adding it to the user's profile.  But the term
     "install" doesn't reflect this, and makes users think in terms of
     traditional package managers where installing a package means putting
     its files into /usr.  Introducing newcomers to a command like 'guix
     profile add' as the primary means of adding a package to their
     environment, and briefly explaining the "transparently makes sure the
     package is in the store" part, would have them immediately learn one of
     the basic working principles of Guix.
     

I think the last part of your suggestion is what is really important - 
     * explaining to the user what is going on *    

This is something where I think we can do better.

However if "guix profile add" adds a package to a user's profile,
what does "guix profile rm" do?   Does it remove  a package from the
profile, or does it remove the profile?

J'




-- 
Avoid eavesdropping.  Send strong encryted email.
PGP Public key ID: 1024D/2DE827B3 
fingerprint = 8797 A26D 0854 2EAB 0285  A290 8A67 719C 2DE8 27B3
See http://sks-keyservers.net or any PGP keyserver for public key.


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-21  2:49         ` Efraim Flashner
@ 2016-04-21  7:10           ` Taylan Ulrich Bayırlı/Kammer
  0 siblings, 0 replies; 39+ messages in thread
From: Taylan Ulrich Bayırlı/Kammer @ 2016-04-21  7:10 UTC (permalink / raw)
  To: Efraim Flashner; +Cc: guix-devel, Alex Kost

Efraim Flashner <efraim@flashner.co.il> writes:

> On Wed, Apr 20, 2016 at 11:29:25AM +0200, Taylan Ulrich Bayırlı/Kammer wrote:
>> ludo@gnu.org (Ludovic Courtès) writes:
>> 
>> >> Maybe instead of --list-generations and others, these options should
>> >> transform into subcommands (list-generations) of "guix profile".
>> >
>> > I agree.  But what should we do of transactions?
>> 
>> I'd like to re-propose the use of '--' to delineate the end of arguments
>> to a sub-command.  E.g.:
>> 
>>   guix install foo bar -- remove baz bat
>> 
>> (Leaving aside whether it's 'guix install', 'guix package install',
>> 'guix profile add', or anything else.)
>> 
>> Taylan
>> 
>
> Currently you can already call
>
>     guix package -i foo bar -r baz

Right, that works when install/remove are switches.  My proposal was
meant in the context of making them sub-commands instead of switches.

Taylan

^ permalink raw reply	[flat|nested] 39+ messages in thread

* Re: Reorganizing guix package commands
  2016-04-20 21:45           ` Ludovic Courtès
@ 2016-04-21 12:34             ` myglc2
  0 siblings, 0 replies; 39+ messages in thread
From: myglc2 @ 2016-04-21 12:34 UTC (permalink / raw)
  To: guix-devel

ludo@gnu.org (Ludovic Courtès) writes:

> taylanbayirli@gmail.com (Taylan Ulrich "Bayırlı/Kammer") skribis:
>
>> As an example of the pedagogic benefit of categorizing the commands:
>> many users coming from other package managers are confused as to what
>> exactly "installing" a package is in Guix.  It actually consists of two
>> steps, 1. to ensure the package is in the store (by building or
>> downloading), and 2. adding it to the user's profile.  But the term
>> "install" doesn't reflect this, and makes users think in terms of
>> traditional package managers where installing a package means putting
>> its files into /usr.  Introducing newcomers to a command like 'guix
>> profile add' as the primary means of adding a package to their
>> environment, and briefly explaining the "transparently makes sure the
>> package is in the store" part, would have them immediately learn one of
>> the basic working principles of Guix.
>
> Good point, I like it.  :-)
>
> Ludo’.

Yes, we should help newcomers delve into Guix.

But a strangely named install instruction is not an effective way to
accomplish this. We should find a better way.

How about an animation of the processes you describe on the status line?

Then a newcomer can learn while waiting for the software to install :-)

The best way to make it easy for newcomers to see this animation is to
give them what they expect -- an instruction named 'guix install'.

^ permalink raw reply	[flat|nested] 39+ messages in thread

end of thread, other threads:[~2016-04-21 12:35 UTC | newest]

Thread overview: 39+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-18  8:57 Reorganizing guix package commands Alex Kost
2016-04-18 16:10 ` John Darrington
2016-04-19  8:01   ` Alex Kost
2016-04-18 17:20 ` Ludovic Courtès
2016-04-18 21:50   ` myglc2
2016-04-19  5:17     ` John Darrington
2016-04-19 12:57       ` myglc2
2016-04-19 13:03         ` Thompson, David
2016-04-19 13:35           ` John Darrington
2016-04-19 13:51           ` myglc2
2016-04-19 15:24       ` Ludovic Courtès
2016-04-19 10:47     ` Alex Kost
2016-04-19 10:58       ` Ricardo Wurmus
2016-04-19 12:45       ` myglc2
2016-04-19  7:52   ` Alex Kost
2016-04-19  9:17     ` Taylan Ulrich Bayırlı/Kammer
2016-04-19 10:37       ` Alex Kost
2016-04-19  9:23     ` Hartmut Goebel
2016-04-19 10:16       ` Alex Kost
2016-04-19 14:39       ` John Darrington
2016-04-19 13:00     ` myglc2
2016-04-19 13:43       ` Ricardo Wurmus
2016-04-19 14:29         ` myglc2
2016-04-19 13:55     ` Ricardo Wurmus
2016-04-19 15:52     ` Ludovic Courtès
2016-04-19 19:56       ` Christopher Allan Webber
2016-04-20  3:45       ` myglc2
2016-04-20  5:34         ` John Darrington
2016-04-20  8:52           ` Alex Kost
2016-04-20 17:05             ` myglc2
2016-04-20  8:29       ` Alex Kost
2016-04-20  9:46         ` Taylan Ulrich Bayırlı/Kammer
2016-04-20 21:45           ` Ludovic Courtès
2016-04-21 12:34             ` myglc2
2016-04-21  5:20           ` John Darrington
2016-04-20  9:29       ` Taylan Ulrich Bayırlı/Kammer
2016-04-21  2:49         ` Efraim Flashner
2016-04-21  7:10           ` Taylan Ulrich Bayırlı/Kammer
2016-04-18 21:13 ` Hartmut Goebel

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).