From mboxrd@z Thu Jan 1 00:00:00 1970 From: swedebugia Subject: Article: Playing with Guix REPL from scratch Date: Tue, 25 Dec 2018 12:47:49 +0100 Message-ID: <815ec957-58a6-1b17-646a-457217ea7851@riseup.net> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Return-path: Received: from eggs.gnu.org ([208.118.235.92]:38414) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gbl5Z-0001rD-Mk for guix-devel@gnu.org; Tue, 25 Dec 2018 06:41:35 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gbl5V-0000vS-JN for guix-devel@gnu.org; Tue, 25 Dec 2018 06:41:33 -0500 Received: from mx1.riseup.net ([198.252.153.129]:55637) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gbl5T-0000es-Hu for guix-devel@gnu.org; Tue, 25 Dec 2018 06:41:28 -0500 Received: from cotinga.riseup.net (cotinga-pn.riseup.net [10.0.1.164]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client CN "*.riseup.net", Issuer "COMODO RSA Domain Validation Secure Server CA" (verified OK)) by mx1.riseup.net (Postfix) with ESMTPS id B7F181A09D8 for ; Tue, 25 Dec 2018 03:41:11 -0800 (PST) Received: from [127.0.0.1] (localhost [127.0.0.1]) by cotinga.riseup.net with ESMTPSA id F3849105A92 for ; Tue, 25 Dec 2018 03:41:10 -0800 (PST) Content-Language: en-US List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: guix-devel Hi people Today I wrote this draft blog post while playing around: Playing with Guix REPL from scratch 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. 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 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)) 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 shows this list of nice procedures availiable: package package->cross-derivation package->definition package->derivation package-build-system package-cross-build-system-error? package-cross-derivation package-derivation package-description package-direct-inputs package-direct-sources package-error-invalid-input package-error-package package-error? package-field-location package-file package-full-name package-grafts package-home-page package-input-error? package-input-rewriting package-inputs package-license package-location package-maintainers package-mapping package-name package-native-inputs package-native-search-paths package-output package-outputs package-patched-vulnerabilities package-propagated-inputs package-properties package-search-paths package-source package-source-derivation package-superseded package-supported-systems package-synopsis package-transitive-inputs package-transitive-native-inputs package-transitive-native-search-paths package-transitive-propagated-inputs package-transitive-sources package-transitive-supported-systems package-transitive-target-inputs package-upstream-name package-version package/inherit package? In addition to this there are the following origin-record-procedures: E.g. (origin shows this list origin origin->derivation origin-actual-file-name origin-file-name origin-method origin-modules origin-patch-flags origin-patch-guile origin-patch-inputs origin-patches origin-sha256 origin-snippet origin-uri origin? What can we do with this you might ask? Well how about getting the url of a specific package? scheme@(guix-user)> (origin-uri (package-source lsyncd)) $4 = "https://github.com/axkibe/lsyncd/archive/release-2.2.2.tar.gz" Fetching it? scheme@(guix-user)> (url-fetch (origin-uri (package-source lsyncd)) "temp") Starting download of temp From https://github.com/axkibe/lsyncd/archive/release-2.2.2.tar.gz... following redirection to `https://codeload.github.com/axkibe/lsyncd/tar.gz/release-2.2.2'... release-2.2.2.tar.gz 253KiB/s 00:00 | 80KiB transferred $3 = "temp" With fold-packages you can walk through the whole stack of package records if you would like and count say the number of packages with the prefix "python-": scheme@(guile-user)> (define snakes (fold-packages (lambda (package lst) (if (string-prefix? "python" (package-name package)) (cons package lst) lst)) '())) Now we can work on this list. As of writing this we have this many items in the list: scheme@(guix-user)> (length snakes) $5 = 1532 scheme@(guile-user)> (define snakes (fold-packages (lambda (package lst) (if (string-prefix? "python" (package-name package)) (cons (origin-url package) lst) lst)) '())) If you create something worth saving, mount an USB stick or a harddisk partition and save it there. -- Cheers Swedebugia