guix shell --container from Shepherd to run a service

2025-04-06 Thread Attila Lendvai
dear Guix,

my ultimate goal is to run Home Assistant (a python based service) from 
Shepherd.

packaging it seems to be too much effort, so i looked into running it in a 
`guix shell --container`. it works fine when done from the terminal:

$ su - hass
$ guix shell --manifest=manifest.scm --container --emulate-fhs --network 
--share=/srv/hass 
$ cd /srv/hass && source bin/activate && LD_LIBRARY_PATH=/lib:/lib64 hass 2>&1 
| tee /var/log/home-assistant.log

(specifications->manifest
  '("python"
"python-virtualenv"
"python-pytzdata"
"autoconf"
"openssl"
"libxml2"
"libxslt"
"libjpeg"
"libffi"
"eudev"
"zlib"
"pkg-config"
"ffmpeg"
"gcc-toolchain"

"git"
))

now, i've converted this to a Shepherd service like this:

(simple-service
 'home-assistant
 shepherd-root-service-type
 (list
  (shepherd-service
   (requirement '(file-systems networking guix-daemon))
   (provision '(home-assistant))
   (documentation "")
   ;; TODO herd stop doesn't work
   (start
#~(lambda _
(fork+exec-command
 (list #$(file-append guix "/bin/guix")
   "shell"
   "--manifest=manifest.scm"
   "--container"
   "--emulate-fhs"
   "--network"
   "--share=/srv/hass"
   "--"
   #$(file-append bash "/bin/bash")
   "-c" "cd /srv/hass && source bin/activate && 
LD_LIBRARY_PATH=/lib:/lib64 hass")
 #:log-file "/var/log/home-assistant.log"
 #:user  '#$(user-account-name  *hass-user*)
 #:group '#$(user-account-group *hass-user*)
 #:supplementary-groups
 '#$(user-account-supplementary-groups *hass-user*)
 #:environment-variables
 (list (string-append "HOME=/home/"
  #$(user-account-name *hass-user*)


but this errors out:

guix shell: error: mkdir: Permission denied: 
"/tmp/guix-directory.sfpIhA/real-root"

should this work, or am i holding it wrong?

or should it be done some other way? any examples around?

if it should work, then any hints on what to look at for a fix? grepping for 
'real-root' brings up MOUNT-FILE-SYSTEMS in linux-container.scm, but i couldn't 
find anything obviously broken there.

sidenote: debugging this would be a lot easier if the error wasn't reduced to 
the above line, but instead a general error handler printed a backtrace.

-- 
• attila lendvai
• PGP: 963F 5D5F 45C7 DFCD 0A39
--
“When men yield up the privilege of thinking, the last shadow of liberty quits 
the horizon.”
— Thomas Paine (1737–1809)




Re: guix shell --container from Shepherd to run a service

2025-04-06 Thread Attila Lendvai
> I have no idea it this is the cause, but the immediate difference I see
> between the terminal (working) and shepherd service (not working) is the
> current working directory. In the former case it would be ~hass, in the
> latter case it would be /. Guix shell defaults to making CWD available
> in the container, so it in the service case (I am guessing) mounts /
> onto / of the containers which might mess up some permissions.
> 
> You might try setting #:directory if you need the $HOME accessible, or
> pass --no-cwd if you do not.


excellent tips Tomas, thank you!

i think the essential part was specifying #:directory "/srv/hass".

FTR, this is what i ended up with:

(simple-service
 'home-assistant
 shepherd-root-service-type
 (list
  (shepherd-service
   (requirement '(file-systems networking guix-daemon))
   (provision '(home-assistant))
   (documentation "")
   ;; TODO herd stop doesn't work. it leaves the process
   ;; running without any errors.
   (start
#~(lambda _
(fork+exec-command
 (list #$(file-append guix "/bin/guix")
   "shell"
   "--manifest=/srv/hass/manifest.scm"
   "--container"
   "--emulate-fhs"
   "--network"
   "--share=/srv/hass"
   "--no-cwd"
   "--expose=/gnu"
   "--expose=/run/current-system"
   "--"
   #$(file-append bash "/bin/bash")
   "-c" "cd /srv/hass && source bin/activate && 
LD_LIBRARY_PATH=/lib:/lib64 hass --config=/srv/hass/config")
 #:log-file "/var/log/home-assistant.log"
 #:user  '#$(user-account-name  *hass-user*)
 #:group '#$(user-account-group *hass-user*)
 #:directory "/srv/hass"
 #:supplementary-groups
 '#$(user-account-supplementary-groups *hass-user*)
 #:environment-variables
 (list (string-append "HOME=/home/"
  #$(user-account-name *hass-user*)

notice that --expose=/gnu was needed, and possibly 
--expose=/run/current-system, too, but i didn't double check every change.

this way the `guix shell` call will get the versions from the hass user's pull 
state; i.e. i can independently decide when to upgrade the guix environment of 
the hass user and process.

it's a relatively painless escape hatch to run even a non-trivial service 
without packaging the app and writing the necessary service code.

-- 
• attila lendvai
• PGP: 963F 5D5F 45C7 DFCD 0A39
--
“An extreme optimist is a man who believes that humanity will probably survive 
even if it doesn't take his advice.”
— John McCarthy (1927–2011), father of Lisp




Re: guix pull from private ssh server fails

2025-04-06 Thread Matthew Todd
Hi Guix, Christoph,

I can confirm that the patch Christoph links upthread 
(https://issues.guix.gnu.org/77154) fixes the problem I ran into.


Test steps:
* Create custom libssh2-1.11.1 package, that inherits Guix channel libssh2 and 
applies Christoph's fixes.
* Build and install the libssh2-1.11.1 package.
* Install transformed libgit2 package to link against libss2-1.11-1 with the 
"--with-input=libssh2=libssh2@1.11.1" option
** I used git2 command line previously to reproduce / test the issue. This 
fixed that particular error, although I ran into another one.
* Install transformed guix package to link against libssh2-1.11.1
* guix pull worked

Cheers,
Matthew Todd
matt...@zerobitcoder.net



Re: guix shell --container from Shepherd to run a service

2025-04-06 Thread Tomas Volf
Hello Attila,

Attila Lendvai  writes:

> dear Guix,
>
> my ultimate goal is to run Home Assistant (a python based service) from 
> Shepherd.
>
> packaging it seems to be too much effort, so i looked into running it in a 
> `guix shell --container`. it works fine when done from the terminal:
>
> $ su - hass
> $ guix shell --manifest=manifest.scm --container --emulate-fhs --network 
> --share=/srv/hass 
> $ cd /srv/hass && source bin/activate && LD_LIBRARY_PATH=/lib:/lib64 hass 
> 2>&1 | tee /var/log/home-assistant.log
>
> (specifications->manifest
>   '("python"
> "python-virtualenv"
> "python-pytzdata"
> "autoconf"
> "openssl"
> "libxml2"
> "libxslt"
> "libjpeg"
> "libffi"
> "eudev"
> "zlib"
> "pkg-config"
> "ffmpeg"
> "gcc-toolchain"
>
> "git"
> ))
>
> now, i've converted this to a Shepherd service like this:
>
> (simple-service
>  'home-assistant
>  shepherd-root-service-type
>  (list
>   (shepherd-service
>(requirement '(file-systems networking guix-daemon))
>(provision '(home-assistant))
>(documentation "")
>;; TODO herd stop doesn't work
>(start
> #~(lambda _
> (fork+exec-command
>  (list #$(file-append guix "/bin/guix")
>"shell"
>"--manifest=manifest.scm"
>"--container"
>"--emulate-fhs"
>"--network"
>"--share=/srv/hass"
>"--"
>#$(file-append bash "/bin/bash")
>"-c" "cd /srv/hass && source bin/activate && 
> LD_LIBRARY_PATH=/lib:/lib64 hass")
>  #:log-file "/var/log/home-assistant.log"
>  #:user  '#$(user-account-name  *hass-user*)
>  #:group '#$(user-account-group *hass-user*)
>  #:supplementary-groups
>  '#$(user-account-supplementary-groups *hass-user*)
>  #:environment-variables
>  (list (string-append "HOME=/home/"
>   #$(user-account-name *hass-user*)
>
>
> but this errors out:
>
> guix shell: error: mkdir: Permission denied: 
> "/tmp/guix-directory.sfpIhA/real-root"
>
> should this work, or am i holding it wrong?
>
> or should it be done some other way? any examples around?
>
> if it should work, then any hints on what to look at for a fix? grepping for 
> 'real-root' brings up MOUNT-FILE-SYSTEMS in linux-container.scm, but i 
> couldn't find anything obviously broken there.
>
> sidenote: debugging this would be a lot easier if the error wasn't
> reduced to the above line, but instead a general error handler printed
> a backtrace.

I have no idea it this is the cause, but the immediate difference I see
between the terminal (working) and shepherd service (not working) is the
current working directory.  In the former case it would be ~hass, in the
latter case it would be /.  Guix shell defaults to making CWD available
in the container, so it in the service case (I am guessing) mounts /
onto / of the containers which might mess up some permissions.

You might try setting #:directory if you need the $HOME accessible, or
pass --no-cwd if you do not.

I am unsure this will solve your problem, but I hope it at least helps.

Have a nice day,
Tomas

-- 
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.



Re: Emacs dependent package input question

2025-04-06 Thread Nicolas Graves
On 2025-04-05 16:55, Ian Eure wrote:

>> I'd argue sometimes it's indeed the better solution, especially 
>> when
>> the core of the package needs the binary to work properly, not 
>> when it's
>> an additional option or feature.  I'll refer to that as 
>> "essential
>> binary" in the rest.
>
> I appreciate this line of thinking, but suspect that whether a 
> binary is essential or not depends on the user’s usecase, which is 
> unknowable at package build time.  For a user using EMMS to play 
> MP3s, flac isn’t essential, and mpg321 is; for someone using it to 
> play FLACs, the inverse is true.
>
>> (This is the case where not having the binary is absurd because 
>> it
>> renders the emacs package unusable).
>
> I think it’s important to distinguish between "unusable" and "not 
> usable unless the user takes some action."

In those cases, maybe we could have -minimal variants?

>> I agree this is nice, but maybe it's enough to do that in Emacs 
>> packages
>> themselves (ensuring they suggest the missing binary when it's 
>> not
>> found) rather than in Guix Home itself.
>
> I also like this idea; do you have an idea what an implementation 
> for that would look like?  Presumably upstream package authors 
> wouldn’t want Guix-specific stuff in packages that need to work on 
> any OS/distro.

Indeed, I don't mean plainly writing "Guix profile" in Emacs packages,
but ensuring for instance that we have a proper error message explaining
that the package is not in the PATH.  I guess something like "Unable to
find xxx, ensure it is installed on your system." is clear enough.

A recent example that happened to me (not a binary though but a
guix-related bug):
https://github.com/anticomputer/age.el/issues/15 was fixed with
https://github.com/anticomputer/age.el/pull/16/commits/a1c9d0a7911e603e6574daf1ee6d602d1e932842

Not writing "Guix" anywhere, but it makes it clear that something is
missing on the system.

-- 
Best regards,
Nicolas Graves



Re: guix shell --container from Shepherd to run a service

2025-04-06 Thread reza
Hi Attila

> dear Guix,
>
> my ultimate goal is to run Home Assistant (a python based service)
> from Shepherd.

I have a not yet running attempt of home assistant packaged, maybe you
would like to have a stab at it?

> packaging it seems to be too much effort, so i looked into running it in a 
> `guix shell --container`. it works fine when done from the terminal:
>
> $ su - hass
> $ guix shell --manifest=manifest.scm --container --emulate-fhs --network 
> --share=/srv/hass 
> $ cd /srv/hass && source bin/activate && LD_LIBRARY_PATH=/lib:/lib64 hass 
> 2>&1 | tee /var/log/home-assistant.log
>
> (specifications->manifest
>   '("python"
> "python-virtualenv"
> "python-pytzdata"
> "autoconf"
> "openssl"
> "libxml2"
> "libxslt"
> "libjpeg"
> "libffi"
> "eudev"
> "zlib"
> "pkg-config"
> "ffmpeg"
> "gcc-toolchain"
>
> "git"
> ))
>
> now, i've converted this to a Shepherd service like this:
>
> (simple-service
>  'home-assistant
>  shepherd-root-service-type
>  (list
>   (shepherd-service
>(requirement '(file-systems networking guix-daemon))
>(provision '(home-assistant))
>(documentation "")
>;; TODO herd stop doesn't work
>(start
> #~(lambda _
> (fork+exec-command
>  (list #$(file-append guix "/bin/guix")
>"shell"
>"--manifest=manifest.scm"
>"--container"
>"--emulate-fhs"
>"--network"
>"--share=/srv/hass"
>"--"
>#$(file-append bash "/bin/bash")
>"-c" "cd /srv/hass && source bin/activate && 
> LD_LIBRARY_PATH=/lib:/lib64 hass")
>  #:log-file "/var/log/home-assistant.log"
>  #:user  '#$(user-account-name  *hass-user*)
>  #:group '#$(user-account-group *hass-user*)
>  #:supplementary-groups
>  '#$(user-account-supplementary-groups *hass-user*)
>  #:environment-variables
>  (list (string-append "HOME=/home/"
>   #$(user-account-name *hass-user*)
>
>
> but this errors out:
>
> guix shell: error: mkdir: Permission denied: 
> "/tmp/guix-directory.sfpIhA/real-root"
>
> should this work, or am i holding it wrong?
>
> or should it be done some other way? any examples around?
>
> if it should work, then any hints on what to look at for a fix? grepping for 
> 'real-root' brings up MOUNT-FILE-SYSTEMS in linux-container.scm, but i 
> couldn't find anything obviously broken there.
>
> sidenote: debugging this would be a lot easier if the error wasn't reduced to 
> the above line, but instead a general error handler printed a backtrace.
>
> -- 
> • attila lendvai
> • PGP: 963F 5D5F 45C7 DFCD 0A39
> --
> “When men yield up the privilege of thinking, the last shadow of liberty 
> quits the horizon.”
>   — Thomas Paine (1737–1809)




Re: Emacs dependent package input question

2025-04-06 Thread Sergio Pastor Pérez
Liliana Marie Prikler  writes:
> Am Samstag, dem 05.04.2025 um 09:38 -0700 schrieb Ian Eure:
>> Hi Guixers,
>> 
>> I’ve seen a few patches for Emacs packages lately which have the 
>> form:
>> 
>>     (package emacs-whatever
>>   (name "emacs-whatever")
>>   (description "Emacs interface for Whatever")
>>   (inputs (list whatever))
>>   (arguments
>>    (list
>>     #:phases
>>     (modify-phases %standard-phases
>>   (add-after 'unpack 'set-whatever-path
>>     (lambda (#:key inputs #:allow-other-keys)
>>   (emacs-substitute-variables "whatever.el"
>>     ("emacs-whatever-program"
>>  (search-inputs-file inputs 
>>  "/bin/whatever")
> Side note: the ordering of fields here looks rather displeasing.
>
>> ...and looking in emacs-xyz.scm, many packages do this.  I 
>> understand why this pattern exists -- making the inferior an input 
>> means that installing the Emacs package Just Works -- but it also 
>> means increased disk consumption and somewhat less user 
>> flexibility.
>> 
>> On the flexibility side, it means that if you install 
>> emacs-whatever and my-personal-whatever-fork, emacs-whatever will 
>> continue using the stock whatever, not your fork; making this work 
>> requires transforming emacs-whatever to replace the input.  I 
>> think that because this behavior is so different from how most 
>> other operating systems work, it’s surprising, and the solution 
>> isn’t obvious.
> You obviously can still customize it to use a PATH lookup.  You are
> wasting disk space if you do so.  Alternatively, input rewriting such
> as the --with-input command line flag replace whatever with your-
> personal-whatever-fork and thus do exactly what you want.
>
>> […]
>> I’m not sure how to do that, though.  I can think of a few 
>> options:
>> 
>>  a) Leave it as is.  Don’t love it, but if there’s concensus that 
>>  this is the right way, then okay.
>> 
>>  b) Make packages that align better with specific usecases, 
>>  ex. emacs-emacsql-sqlite, -mysql, etc.  This feels fraught to me, 
>>  and I don’t think it works if you get emacs-emacsql-sqlite as an 
>>  input to some other emacs-* package, but want emacs-emacsql-mysql 
>>  as a user.  Perhaps metapackages which only exist to combine 
>>  dependencies would make this a workable approach.
>> 
>>  c) Don’t set them at all, and use the same $PATH late binding as 
>>  is typical of other Emacs setups.  This would mean that 
>>  installing Emacs packages wouldn’t Just Work, and users would 
>>  have to install the inferiors (and know what packages those are 
>>  in) themselves.
>> 
>>  d) Have some better policies around when to use inputs and when 
>>  not to.  This might be the most pragmatic approach, though it 
>>  means inconsistency from package to package.
>> 
>>  e) Build a suggested package mechanism into Guix.  This has been 
>>  floated a couple times before.  If it defaults to not installing 
>>  suggested packages, but telling the user about them, this would 
>>  be like option C, but making it easier to find which packages you 
>>  might need; if it installs them by default, it would work like 
>>  the current setup, but give users some kind of out to avoid the 
>>  extra bandwidth/disk usage.  I don’t know how this would work for 
>>  declarative package setups -- how would I express to Guix Home 
>>  that it should install emacs-emms with flac (for metaflac), but 
>>  without mpg321, vorbis-tools, and mp3info?
> f) Implement parametrized packages 😉

Hello!

Do you know where can we find the parameterized packages code? The
original blog that documented the developments has been down for a long
time now.

[1] https://blog.lispy.tech

The author, Sarthak, said that an issue will be opened to track the
developments, but I'm not aware if it has already been created.


Best regards,
Sergio.



Re: emacs-git-email: Guix policy for dealing with abandoned packages with active forks

2025-04-06 Thread Suhail Singh
Kierin Bell  writes:

> Am I missing something, or would the code below do the same thing as
> 'emacs-git-email'?

Based only on the docstring (haven't reviewed the code), _some_ of the
things emacs-git-email does are accounted for.  However, it's not clear
how some situations are handled:

1. Do patch series pose a complication or they're handled naturally?
   I'm unfamiliar with 'vc-prepare-patch', so this may be an obvious
   question.
2. Is there a way to associate a branch with an issue-specific email
   address?  This can be useful for future revisions.
3. Some of the git-format-patch defaults are set in a manner assuming
   its use with git-send-mail.  As such, these defaults are unsuitable
   when the patches are sent without git-send-mail.  Are such issues
   corrected for?  I'm aware of one such option, but unsure if there are
   others.  Specifically, the --thread option in git-format-patch.  This
   is not an issue in the guix repo due to ./etc/git/gitconfig , but is
   something that comes up generally.

There are some other minor conveniences that emacs-git-email adds, but
they have more to do with its integration with magit and thus may not be
suitable for addition to core.  E.g., ability to review and set the
sendemail.to setting for the repository.

> Could we submit a patch upstream to Emacs to make sending patches to
> projects like Guix easier?

Regardless of above, and without speaking for the Emacs maintainers, I
think such patches to core would be a useful addition from a user's
perspective.

-- 
Suhail



Re: A different way to build GCC to overcome issues, especially with C++ for embedded systems

2025-04-06 Thread Stefan
Hi Sergio!If you have since we last spoke made a public repository, I would loveto check it out.Thanks for your interest. Indeed, I created a repository meanwhile: < https://git.pub.solar/stefan/embedded-channel >.Hm, I should push my local changes – that repository is already pretty old, but I wouldn’t say outdated.The multilib issues I mentioned before are already solved there and it’s using GCC 14.2 with picolibc. ZMK is still at 2024-04-28.There is still no channel.scm, I still use guix build with the -L option, sorry.Locally I have a recent ZMK already with the new mouse emulation and I think GCC 15 with a newer picolibc. Stay tuned …ByeStefan

Re: A different way to build GCC to overcome issues, especially with C++ for embedded systems

2025-04-06 Thread Sergio Pastor Pérez
Stefan  writes:
> Hi Sergio!
>
>> I'm very interested in the code for ZMK provided in this thread[1].
>> I've tried it locally and it compiles successfully. 
>
> That's nice to hear!
>
>> Does anyone know if this is available in a public repository? Or if it has 
>> been moved forward?
>
> There is no public repository for it. I moved it a bit further. There is now a
> GCC with picolibc. GCC in general is more self-contained and is completely
> usable by itself (including paths to specs; Attila, this may solve the issue 
> you
> were facing). There is no real need for GCC-toolchain packages anymore. 
> However,
> as some projects invoke programs of Binutils directly and because of locales,
> there are still GCC-toolchain packages. The Binutils for arm-none-eabi get 
> build
> separately as well now, as the one from Guix has failing tests (if activated)
> due to the selected configure flags. GCC is bumped to 13.2.0. Zephyr is 
> updated
> to 3.5 and ZMK to end of April. There is also more ZMK support for combos,
> conditional-layers and a bit more.
>
> A problem I figured for arm-none-eabi-g++ is that it always links the generic 
> libstdc++.a, instead of the existing CPU and FPU specific multilib variant 
> from a sub-directory. I'd appreciate any GCC configuration hint to solve this.

Hello Stefan. Its been some time since you sent this message.

I'm trying to test the example you attached and I cannot get it to build
the custom GCC@13. Please, could you provide the `channels.scm` you use
to compile it?

I have the original code that you submitted in this repository[1], this
one is no longer compiling from Guix at commit
`1436165c2f0adbb44d3f033c54db692167591248`. Sadly, when I initially
tested it, I forgot to save the `channels.scm` that made it compile. I
will update the repository to your latest changes and add the
`channels.scm` when I get it to compile.

If you have since we last spoke made a public repository, I would love
to check it out.

[1] https://codeberg.org/pastor/guix-zmk

If anyone has interest in having a community managed ZMK channel for
Guix, please do not hesitate to join the conversation.


Best regards,
Sergio.



Re: guix shell --container from Shepherd to run a service

2025-04-06 Thread Attila Lendvai
> I have a not yet running attempt of home assistant packaged, maybe you
> would like to have a stab at it?


thanks for the heads up, but i'm no expert of the python ecosystem. that's why 
i decided to first try it this way, instead of attempting to package it.

also, HA is updated rather regularly. i don't want to lag behind too much, and 
guix package updates are more headache than a `pip install --upgrade` in the 
container (including reconfiguring into my own fork of guix while the patches 
are waiting in the queue).

-- 
• attila lendvai
• PGP: 963F 5D5F 45C7 DFCD 0A39
--
“The way you treat yourself is ultimately how you will treat those you love 
most.”
— Paul Conti




Re: guix shell --container from Shepherd to run a service

2025-04-06 Thread Rutherther


Hello Attila,

>
> (simple-service
>  'home-assistant
>  shepherd-root-service-type
>  (list
>   (shepherd-service
>(requirement '(file-systems networking guix-daemon))
>(provision '(home-assistant))
>(documentation "")
>;; TODO herd stop doesn't work. it leaves the process
>;; running without any errors.
>(start
> #~(lambda _
> (fork+exec-command
>  (list #$(file-append guix "/bin/guix")
>"shell"
>"--manifest=/srv/hass/manifest.scm"
>"--container"
>"--emulate-fhs"
>"--network"
>"--share=/srv/hass"
>"--no-cwd"
>"--expose=/gnu"
>"--expose=/run/current-system"
>"--"
>#$(file-append bash "/bin/bash")
>"-c" "cd /srv/hass && source bin/activate && 
> LD_LIBRARY_PATH=/lib:/lib64 hass --config=/srv/hass/config")
>  #:log-file "/var/log/home-assistant.log"
>  #:user  '#$(user-account-name  *hass-user*)
>  #:group '#$(user-account-group *hass-user*)
>  #:directory "/srv/hass"
>  #:supplementary-groups
>  '#$(user-account-supplementary-groups *hass-user*)
>  #:environment-variables
>  (list (string-append "HOME=/home/"
>   #$(user-account-name *hass-user*)
>
> notice that --expose=/gnu was needed, and possibly 
> --expose=/run/current-system, too, but i didn't double check every change.
>
> this way the `guix shell` call will get the versions from the hass user's 
> pull state; i.e. i can independently decide when to upgrade the guix 
> environment of the hass user and process.

It's hard to judge well without the full source code, but the way you
have it written seems more like that you're using the guix package
declared in the channel rather than the user's guix. (if you weren't, I
wouldn't expect file-append at all, but just something like
"/home/*hass-user*/.config/guix/current/bin/guix"...) Meaning that user's
pull state is irrelevant as the reference to guix is directly to the
store. Also the reference would be to the pinned guix package in guix
channel that you're probably not really using on your system.

But all this is based on some assumptions of the code and how you use
your system, so I totally might be wrong.

Regards,
Rutherther



Re: Emacs dependent package input question

2025-04-06 Thread Sarthak Shah
Hi Sergio,


I've moved domain names, the final post is at
https://blog.coldboot.org/parameterized-packages-the-project-completion-update.html
You can find code for the project in this repository:
https://notabug.org/cel7t/guix-parameters
Additionally, the project completion report:
https://github.com/matchcase/parameterized-packages.org


I haven't been able to make an issue for this project because I'll need to
update bits of the code to ensure that it is working smoothly before
creating an issue and unfortunately I'm a bit occupied at the moment as I'm
writing my graduation thesis.

Best,
Sarthak.

On Sun, 6 Apr 2025, 19:16 Sergio Pastor Pérez, 
wrote:

> Liliana Marie Prikler  writes:
> > Am Samstag, dem 05.04.2025 um 09:38 -0700 schrieb Ian Eure:
> >> Hi Guixers,
> >>
> >> I’ve seen a few patches for Emacs packages lately which have the
> >> form:
> >>
> >> (package emacs-whatever
> >>   (name "emacs-whatever")
> >>   (description "Emacs interface for Whatever")
> >>   (inputs (list whatever))
> >>   (arguments
> >>(list
> >> #:phases
> >> (modify-phases %standard-phases
> >>   (add-after 'unpack 'set-whatever-path
> >> (lambda (#:key inputs #:allow-other-keys)
> >>   (emacs-substitute-variables "whatever.el"
> >> ("emacs-whatever-program"
> >>  (search-inputs-file inputs
> >>  "/bin/whatever")
> > Side note: the ordering of fields here looks rather displeasing.
> >
> >> ...and looking in emacs-xyz.scm, many packages do this.  I
> >> understand why this pattern exists -- making the inferior an input
> >> means that installing the Emacs package Just Works -- but it also
> >> means increased disk consumption and somewhat less user
> >> flexibility.
> >>
> >> On the flexibility side, it means that if you install
> >> emacs-whatever and my-personal-whatever-fork, emacs-whatever will
> >> continue using the stock whatever, not your fork; making this work
> >> requires transforming emacs-whatever to replace the input.  I
> >> think that because this behavior is so different from how most
> >> other operating systems work, it’s surprising, and the solution
> >> isn’t obvious.
> > You obviously can still customize it to use a PATH lookup.  You are
> > wasting disk space if you do so.  Alternatively, input rewriting such
> > as the --with-input command line flag replace whatever with your-
> > personal-whatever-fork and thus do exactly what you want.
> >
> >> […]
> >> I’m not sure how to do that, though.  I can think of a few
> >> options:
> >>
> >>  a) Leave it as is.  Don’t love it, but if there’s concensus that
> >>  this is the right way, then okay.
> >>
> >>  b) Make packages that align better with specific usecases,
> >>  ex. emacs-emacsql-sqlite, -mysql, etc.  This feels fraught to me,
> >>  and I don’t think it works if you get emacs-emacsql-sqlite as an
> >>  input to some other emacs-* package, but want emacs-emacsql-mysql
> >>  as a user.  Perhaps metapackages which only exist to combine
> >>  dependencies would make this a workable approach.
> >>
> >>  c) Don’t set them at all, and use the same $PATH late binding as
> >>  is typical of other Emacs setups.  This would mean that
> >>  installing Emacs packages wouldn’t Just Work, and users would
> >>  have to install the inferiors (and know what packages those are
> >>  in) themselves.
> >>
> >>  d) Have some better policies around when to use inputs and when
> >>  not to.  This might be the most pragmatic approach, though it
> >>  means inconsistency from package to package.
> >>
> >>  e) Build a suggested package mechanism into Guix.  This has been
> >>  floated a couple times before.  If it defaults to not installing
> >>  suggested packages, but telling the user about them, this would
> >>  be like option C, but making it easier to find which packages you
> >>  might need; if it installs them by default, it would work like
> >>  the current setup, but give users some kind of out to avoid the
> >>  extra bandwidth/disk usage.  I don’t know how this would work for
> >>  declarative package setups -- how would I express to Guix Home
> >>  that it should install emacs-emms with flac (for metaflac), but
> >>  without mpg321, vorbis-tools, and mp3info?
> > f) Implement parametrized packages 😉
>
> Hello!
>
> Do you know where can we find the parameterized packages code? The
> original blog that documented the developments has been down for a long
> time now.
>
> [1] https://blog.lispy.tech
>
> The author, Sarthak, said that an issue will be opened to track the
> developments, but I'm not aware if it has already been created.
>
>
> Best regards,
> Sergio.
>


Re: guix shell --container from Shepherd to run a service

2025-04-06 Thread Attila Lendvai
> It's hard to judge well without the full source code, but the way you
> have it written seems more like that you're using the guix package
> declared in the channel rather than the user's guix. (if you weren't, I
> wouldn't expect file-append at all, but just something like
> "/home/hass-user/.config/guix/current/bin/guix"...) Meaning that user's
> pull state is irrelevant as the reference to guix is directly to the
> store. Also the reference would be to the pinned guix package in guix
> channel that you're probably not really using on your system.


you're right. apparently i still don't understand profiles deep enough to avoid 
such thinkos.

i've changed the way i refer to the guix binary to use the path you suggested.

thank you Rutherther!

-- 
• attila lendvai
• PGP: 963F 5D5F 45C7 DFCD 0A39
--
“Each individual best promotes his own self-interest by peaceful, social 
cooperation as in the free market. Indeed, the more I make of myself the more 
are others served by my existence […] The way to assume 'social responsibility' 
is for the individual to rise […] as far as possible.”
— Leonard E. Read (1898–1983), 'Let Freedom Reign' (1969)