guix-devel
[Top][All Lists]
Advanced

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

Re: Article: Playing with Guix REPL from scratch


From: swedebugia
Subject: Re: Article: Playing with Guix REPL from scratch
Date: Sun, 06 Jan 2019 04:24:33 +0100

"Ludovic Courtès" <address@hidden> skrev: (5 januari 2019 18:37:10 CET)
>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),
>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’.

Wow, thanks a lot for the suggestions. I did not know about apropos and I found 
the tab-completion by accident. 
I still got much to learn about the repl which seem to have all kinds of neat 
(a bit hidden) eggs 😃

An ideas pop to mind:
1) the repl could hint at startup about some feature

A question too:
2) are there ways to hinder gnutls from flooding the ,trace of e.g. import 
commands?
-- 
Sent from my p≡p for Android.

Attachment: pEpkey.asc
Description: application/pgp-keys


reply via email to

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