Guix

Setup / install

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
gpg --keyserver keys.gnupg.net --recv-keys 3D9AEBB5

wget ftp://alpha.gnu.org/gnu/guix/guix-binary-0.10.0.i686-linux.tar.xz
wget ftp://alpha.gnu.org/gnu/guix/guix-binary-0.10.0.i686-linux.tar.xz.sig
gpg --verify guix-binary-0.10.0.i686-linux.tar.xz.sig

su

cd /tmp
tar --warning=no-timestamp -xf /home/pl/guix-binary-0.10.0.i686-linux.tar.xz
mv var/guix /var/ && mv gnu /

ln -sf /var/guix/profiles/per-user/root/guix-profile \
~root/.guix-profile


cp ~root/.guix-profile/lib/systemd/system/guix-daemon.service \
/etc/systemd/system/
systemctl start guix-daemon && systemctl enable guix-daemon

mkdir -p /usr/local/bin
cd /usr/local/bin
ln -s /var/guix/profiles/per-user/root/guix-profile/bin/guix

mkdir -p /usr/local/share/info
cd /usr/local/share/info
for i in /var/guix/profiles/per-user/root/guix-profile/share/info/* ;
do ln -s $i ; done

guix archive --authorize < ~root/.guix-profile/share/guix/hydra.gnu.org.pub


Install (and start) the nscd name service recommended for foreign distro use of guix

\#apt-get install nscd

# to upgrade the system daemon on foreign distro

https://guix.gnu.org/manual/en/html_node/Upgrading-Guix.html#Upgrading-Guix

\#guix pull
\#systemctl restart guix-daemon.service


# groupadd --system guixbuild
for i in `seq -w 1 10`;
do
useradd -g guixbuild -G guixbuild \
-d /var/empty -s `which nologin` \
-c "Guix build user $i" --system \
guixbuilder$i;
done


# export PATH="/root/.guix-profile/bin:/root/.guix-profile/sbin"


As a user

$ guix package -i glibc-locales
$ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
$ guix package -i font-adobe-source-han-sans:cn


# guix-daemon --build-users-group=guixbuild

EMACS

1
2
3
guix package -i emacs.
guix package -i geiser
guix package -i guix

~/.bashrc

.bashrc
1
2
3
4
5
6
7
8

export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale"
export GUILE_LOAD_COMPILED_PATH="/home/pl/.guix-profile/lib/guile/2.0/ccache:/home/pl/.guix-profile/share/guile/site/2.0"
export INFOPATH="/home/pl/.guix-profile/share/info"
export LC_ALL="en_US"
export PATH="/home/pl/.guix-profile/bin:/home/pl/.guix-profile/sbin:$PATH"
export GUILE_LOAD_PATH="/home/pl/.guix-profile/share/guile/site/2.0"
export R_LIBS_SITE="/home/pl/.guix-profile/site-library/"

Note that the PATH must start with /home/pl/.guix-profile/bin

Purge the system Guile with:

.bashrc
1
2
3
$ export PATH=/home/mbc/.config/guix/current/bin:$PATH
$hash guix ;;to invalidate your shell's cache for the guix binary location.
$type guix ;;must return ~/.config/guix/current/bin/guix

An example .scm for packaging guile-json:

guile-json.scm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
(use-modules (guix packages)
(guix download)
(guix build-system gnu)
(guix licenses)
(gnu packages pkg-config)
(gnu packages guile) )


(package
(name "guile-json")
(version "4.3.2")
(home-page "https://github.com/aconchillo/guile-json")
(source (origin
(method url-fetch)
(uri (string-append "mirror://savannah/guile-json/guile-json-"
version ".tar.gz"))
(sha256
(base32
"0255c7f053z4p9mqzhpxwbfx3y47j9nfvlgnm8xasdclyzmjl9y2"))))
(build-system gnu-build-system)
(native-inputs `(("pkg-config" ,pkg-config)
))
(inputs `(("guile" ,guile-3.0)))
(synopsis "JSON module for Guile")
(description
"Guile-JSON supports parsing and building JSON documents according to the
specification. These are the main features:

@itemize
@item Strictly complies to @uref{http://json.org, specification}.
@item Build JSON documents programmatically via macros.
@item Unicode support for strings.
@item Allows JSON pretty printing.
@end itemize\n")

;; Version 1.2.0 switched to GPLv3+ (from LGPLv3+).
(license gpl3+))

To get some recipes of use from store:

.bashrc
1
2
3
4
5
$guix edit guile-json

$guix package --install-from-file=./Downloads/guile-json/guile-json.scm
$guix package -s guile-json

Configure EMACS/Geiser

look at the file ~/.configure/guix/current/bin which will provide you with the guix/guile binary path and the recipe for %load-path.

In EMACS configure Geiser with the above executable, and for the load path entry (which requests a file) use the ~/.configure/guix/current/bin file.

Share