all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: ludo@gnu.org (Ludovic Courtès)
To: Ricardo Wurmus <rekado@elephly.net>
Cc: Daniel Pimentel <d4n1@d4n1.org>, help-guix@gnu.org
Subject: Re: udev rules and system configuration
Date: Tue, 05 Jul 2016 10:34:37 +0200	[thread overview]
Message-ID: <8737no1o0y.fsf@gnu.org> (raw)
In-Reply-To: <87twg5qnxf.fsf@elephly.net> (Ricardo Wurmus's message of "Mon, 04 Jul 2016 20:05:16 +0200")

Hello!

Ricardo Wurmus <rekado@elephly.net> skribis:

> Ludovic Courtès <ludo@gnu.org> writes:
>
>> Ricardo Wurmus <rekado@elephly.net> skribis:
>
>>> Here’s an idea, which might be bad: how about adding a feature to load
>>> and merge a directory tree of configuration files as they are?  For
>>> example, if I had a directory “/etc/guix/system/udev/rules.d” then all
>>> files therein would automatically be considered part of the system
>>> configuration, maybe after adding “/etc/guix/system” as a prefix path to
>>> some new field in the “operating-system” declaration.
>>>
>>> I have a feeling that this will be considered a bad idea, but it also
>>> seems to me that it would make the configuration of some parts of the
>>> system easier than embedding file contents as strings in variables in
>>> “/etc/config.scm” and modifying services manually.

[...]

> These files are not loaded at system runtime but upon running “guix
> system reconfigure”.  Their contents *at that time* would be embedded in
> the configuration.  Their state *at runtime* would not matter (just like
> the contents of “config.scm” don’t matter at runtime).
>
> The files would become part of the configuration in the store.  Changing
> them would always require the additional step of reconfiguring the
> system.

OK, I had misunderstood your suggestion.  It doesn’t have the drawbacks
I mentioned.

However, I don’t like the idea of having special directories that are
automatically scanned.  In my mind, it’s a problem similar to “macro
hygiene”: we should not scan files whose name does not appear in
config.scm.

>> However, what we can do is improve the interface.  Things that come to
>> mind:
>>
>>   1. Change or remove the ‘udev-rule’ procedure; we should be using
>>      file-like objects instead, so one could store them alongside
>>      config.scm and write:
>>
>>        (local-file "./my-udev-rule")
>
> Is this really so different from the bad idea I proposed?  As soon as we
> load files outside of “config.scm” users would need to copy more than
> just the GuixSD config file to duplicate the system state on another
> machine.  In this example we would need both “config.scm” and
> “my-udev-rule” in the same directory.

It’s similar to your idea, except that the file is explicitly named in
the <operating-system> object.

If that helps, we could also allow users to specify a directory
containing several rules, instead of just a single rule:

  (local-file "./my-udev-rule-directory")

>>   2. Add a ‘extra-udev-rule’ procedure that you could use like this:
>>
>>        (operating-system
>>          ;; …
>>          (services (extra-udev-rule (local-file "./my-udev-rule"))
>>                    …))
>>
>>      thus avoiding the verbose ‘modify-services’ stanza.
>>
>>   3. (Instead of #2) Introduce a ‘udev-rules’ field in
>>      ‘operating-system’, just like we do for firmware.
>>
>> WDYT?
>
> I don’t know.  Although this would simplify configuration I don’t really
> like either of them for somewhat conflicting reasons.  #3 gives special
> treatment to udev rules (“What about Xorg config snippets?”), and with
> #2 it seems like an unnecessary implementation detail that this
> “extra-udev-rule” procedure is inside of the “services” field (“How come
> this is a service?”).
>
> I also feel that we should avoid adding “special” syntax.  Actually, I
> really like how generic this whole “modify-services” business is.  It’s
> just a little too verbose to be user-friendly, in my opinion.

I sympathize with that.

In fact, <operating-system> translates to a <service> graph.  The whole
<operating-system> thing is just “syntax.”

I would like to have a more formal way to describe this translation.  I
think this would allow us to fearlessly add or remove fields to
<operating-system>.  But I don’t know how to achieve it.

In the meantime, we should still address the usability issue that you
raised, which is why I made these suggestions.

Thoughts?

Thank you,
Ludo’.

  reply	other threads:[~2016-07-05  8:34 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-03 22:12 Microscheme failed Daniel Pimentel
2016-07-04  6:14 ` Ricardo Wurmus
2016-07-04  8:10   ` Ludovic Courtès
2016-07-04 14:55     ` udev rules and system configuration (was: Microscheme failed) Ricardo Wurmus
2016-07-04 15:46       ` udev rules and system configuration Ludovic Courtès
2016-07-04 18:05         ` Ricardo Wurmus
2016-07-05  8:34           ` Ludovic Courtès [this message]
2016-07-14 14:22     ` Microscheme failed Daniel Pimentel
2016-07-04 12:30   ` Daniel Pimentel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8737no1o0y.fsf@gnu.org \
    --to=ludo@gnu.org \
    --cc=d4n1@d4n1.org \
    --cc=help-guix@gnu.org \
    --cc=rekado@elephly.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.