Hello swedebugia, Sorry for the late reply!
swedebugia <swedebu...@riseup.net> 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), hmm… > 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 <https://lists.gnu.org/archive/html/guix-devel/2018-11/msg00285.html>, 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 <https://git.savannah.gnu.org/cgit/guix/guix-artwork.git/tree/website/posts>. 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! Ludo’.