[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