[Top][All Lists]

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

Re: Article: Playing with Guix REPL from scratch

From: Ludovic Courtès
Subject: Re: Article: Playing with Guix REPL from scratch
Date: Sat, 05 Jan 2019 18:37:10 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux)

Hello swedebugia,

Sorry for the late reply!

swedebugia <address@hidden> skribis:

> Today I wrote this draft blog post while playing around:
> Playing with Guix REPL from scratch

That sounds like a great topic for a blog post!

I would suggest adding a bit of context: what does “REPL” mean? what are
the possible use cases? how does it differ from what other package
managers provide? etc.

> This is a small example of how to quickly get an environment to play
> with Guix in guile.
> First setup your environment.
> I choose a x86_64 PC and booted up the installer from an usb stick.

That’s an option, but you could mention that one can install Guix or
GuixSD and run ‘guix repl’ from there.

> This is a nice environment because it already is running GuixSD in a
> console and you have are in Guix land with 8500 packages at your
> fingertips.
> I started by installing a sensible array of packages:
>  $ guix package -i emacs-no-x lynx git-minimal guile-readline
> guile-colorized emacs-paredit nss-certs
> To set this up as intended then run:
>  $ export
> GUILE_LOAD_PATH=$HOME/.guix-profile/share/guile/site/2.2:/run/current-system/profile/share/guile/site/2.2
>  $ export SSL_CERT_DIR=/root/.guix-profile/etc/ssl/certs

I don’t think GUILE_LOAD_PATH is needed if you use ‘guix repl’.

> Now fire up the guix repl with
>  $guix repl
> Load e.g. this to start hacking on package records:
> (use-modules
>       (guix packages)
>       (guix import utils)
>       (gnu)
>       (gnu packages sync))

I’d suggest (guix) instead of (guix packages).

> Now you can start hacking on all packages in sync.scm using Scheme
> procedures from (gnu packages) (see the source of this module for
> details or guess and press tab)
> E.g. (package<TAB><TAB> shows this list of nice procedures availiable:
> package
> package->cross-derivation


> What can we do with this you might ask?

You could show ,describe and ,apropos at the REPL:

--8<---------------cut here---------------start------------->8---
scheme@(guix-user)> ,describe package-derivation
Return the <derivation> object of PACKAGE for SYSTEM.
scheme@(guix-user)> ,a origin
(guix packages): origin-patch-guile
(guix packages): origin-method
(guix packages): origin-patch-inputs
(guix packages): origin-patch-flags
(guix packages): origin-patches
(guix packages): origin->derivation     #<procedure origin->derivation (origin 
#:optional system)>
(guix packages): origin-snippet
(guix packages): origin-modules
(guix packages): origin-actual-file-name        #<procedure 
origin-actual-file-name (origin)>
(guix packages): origin
(guix packages): origin-uri
(guix packages): origin?
(guix packages): origin-file-name
(guix packages): origin-sha256
--8<---------------cut here---------------end--------------->8---

Though for some reason ,a doesn’t seem to work if you only use (guix),

> scheme@(guile-user)> (define snakes
>                        (fold-packages
>                             (lambda (package lst)
>                                       (if (string-prefix? "python"
>                                       (package-name package))
>                                      (cons (origin-url package) lst)
>                            lst))
>                       '()))

‘origin-url’ does not exist.  :-)  Make sure all the examples work so
that users are not disappointed.  It may be worth explaining how
‘fold-packages’ works as it may be the first encounter of ‘fold’ for
someone not familiar with functional programming.

Perhaps you could give another examples or two such as using
‘package-derivation’ and ‘build-derivations’, or integration with (guix
swh) as sketched at
or uses of ‘package-input-rewriting’, just to give a feel that it’s
actually useful.  ;-)

For the blog we write text in Markdown and there’s markup to get proper
syntax highlighting for Scheme.  See the .md files at

Also I think it’s a good idea to add links to the relevant parts of the
Guix and Guile manuals so that interested readers know where to find
more info about each topic.

Thanks for working on it!


reply via email to

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