guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: A new paradigm for modifying operating system declarations


From: raid5atemyhomework
Subject: Re: A new paradigm for modifying operating system declarations
Date: Tue, 05 Jan 2021 00:46:45 +0000

Hi Jan,

>
> Better but still don't like it.
> Can't we put the os declaration into a variable and then pass it to a
> procedure?
> Say:
>
> >     (define OS
> >       (operating-system
> >         (kernel linux-libre-5.4)
> >         ; ... other fields ...
> >         ))
> >
> >     (install-zfs OS)
> >     (install-foo OS)
> >     (install-bar OS)
> >     (install-something OS)
> >
> >

No, because `<operating-system>` objects are not mutable (or at least their 
formal interface doesn't expose any mutation).

What we could do would be:

```scheme
(define os
  (operating-system
    (kernel linux-libre-5.4)
    #;...))

(set! os (install-zfs os))
(set! os (install-foo os))
(set! os (install-bar os))

os
```

However, in many examples I've seen, the `configuration.scm` file looks like 
this:

```scheme
(use-modules (gnu))
(use-package-modules #;...)
(use-service-modules #;...)

(operating-system
  (host-name "my-system")
  (timezone "Europe/Paris")
  (locale "en_US,utf-8")
  (kernel linux-libre-5.4)
  #;...)
```

What I want to avoid would be to have to nest the existing, usually 
screens-long, `operating-system` form.

So compare:

```scheme
(use-modules (gnu))
(use-package-modules #;...)
(use-service-modules #;...)

(decorate (install-zfs
           install-foo
           install-bar
           operating-system)
  (host-name "my-system")
  (timezone "Europe/Paris")
  (locale "en_US,utf-8")
  (kernel linux-libre-5.4)
  #;...)
```

versus:

```scheme
(use-modules (gnu))
(use-package-modules #;...)
(use-service-modules #;...)

(define os
  (operating-system
    (host-name "my-system")
    (timezone "Europe/Paris")
    (locale "en_US,utf-8")
    (kernel linux-libre-5.4)
    #;...))
(set! os (install-zfs os))
(set! os (install-foo os))
(set! os (install-bar os))
os
```

I feel the former is better and requires less boilerplate.

Now of course, I ***have*** seen examples as well where the `operating-system` 
is put in a `define` form as well, but those are rare and the default stuff 
that come with Guix tend not to use this, and we should consider that new Guix 
sysads might not be comfortable working with EMACS and prefer nano, so adding 
even just *one* additional layer of nestedness to a long `operating-system` 
form is not easy.  Of course, such a sysad might then consider not indenting it 
correctly.

Thanks
raid5atemyhomework



reply via email to

[Prev in Thread] Current Thread [Next in Thread]