aboutsummaryrefslogtreecommitdiff
path: root/_posts/2018-07-17-running-guix-on-nixos.md
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2020-02-06 03:58:52 -0300
committerEuAndreh <eu@euandre.org>2020-02-06 03:58:52 -0300
commitccadc0bdf0436cefe76318567d358f27a46bf3e5 (patch)
tree58d52309b1ea2b6b7c3a08feed04deb5d64b83d2 /_posts/2018-07-17-running-guix-on-nixos.md
parentAdd code metadata annotation (diff)
parentSetup publish environment variables (diff)
downloadeuandre.org-ccadc0bdf0436cefe76318567d358f27a46bf3e5.tar.gz
euandre.org-ccadc0bdf0436cefe76318567d358f27a46bf3e5.tar.xz
Merge branch 'jekyll'
Diffstat (limited to '')
-rw-r--r--_posts/2018-07-17-running-guix-on-nixos.md (renamed from site/posts/2018-07-17-running-guix-on-nixos.org)102
1 files changed, 74 insertions, 28 deletions
diff --git a/site/posts/2018-07-17-running-guix-on-nixos.org b/_posts/2018-07-17-running-guix-on-nixos.md
index d28b8d2..e409f3c 100644
--- a/site/posts/2018-07-17-running-guix-on-nixos.org
+++ b/_posts/2018-07-17-running-guix-on-nixos.md
@@ -1,15 +1,30 @@
---
title: Running Guix on NixOS
date: 2018-07-17
+layout: post
+lang: en
+ref: running-guix-on-nixos
---
-I wanted to run Guix on a NixOS machine. Even though the Guix manual explains how to do it [[https://www.gnu.org/software/guix/manual/en/html_node/Binary-Installation.html#Binary-Installation][step by step]], I needed a few extra ones to make it work properly.
+I wanted to run
+Guix on a NixOS machine. Even though the Guix manual explains how to do it
+[step by step][0], I needed a few extra ones to make it work properly.
-I couldn't just install GuixSD because my wireless network card doesn't have any free/libre drivers (yet).
-** Creating =guixbuilder= users
-Guix requires you to create non-root users that will be used to perform the builds in the isolated environments.
+[0]: https://www.gnu.org/software/guix/manual/en/html_node/Binary-Installation.html#Binary-Installation
-The [[https://www.gnu.org/software/guix/manual/en/html_node/Build-Environment-Setup.html#Build-Environment-Setup][manual]] already provides you with a ready to run (as root) command for creating the build users:
-#+BEGIN_SRC bash -n
+I couldn't just install GuixSD because my wireless network card
+doesn't have any free/libre drivers (yet).
+
+## Creating `guixbuilder` users
+
+Guix requires you to create non-root users that will be used to perform
+the builds in the isolated environments.
+
+The [manual][1] already provides you with a ready to run (as root) command for
+creating the build users:
+
+[1]: https://www.gnu.org/software/guix/manual/en/html_node/Build-Environment-Setup.html#Build-Environment-Setup
+
+```bash
groupadd --system guixbuild
for i in `seq -w 1 10`;
do
@@ -18,9 +33,15 @@ do
-c "Guix build user $i" --system \
guixbuilder$i;
done
-#+END_SRC
-However, In my personal NixOS I have disabled [[https://nixos.org/nixos/manual/index.html#sec-user-management][=users.mutableUsers=]], which means that even if I run the above command it means that they'll be removed once I rebuild my OS:
-#+BEGIN_SRC shell -n
+```
+
+However, In my personal NixOS I have disabled [`users.mutableUsers`][2], which
+means that even if I run the above command it means that they'll be removed once
+I rebuild my OS:
+
+[2]: https://nixos.org/nixos/manual/index.html#sec-user-management
+
+```shell
$ sudo nixos-rebuild switch
(...)
removing user ‘guixbuilder7’
@@ -34,9 +55,12 @@ removing user ‘guixbuilder2’
removing user ‘guixbuilder8’
removing user ‘guixbuilder5’
(...)
-#+END_SRC
-Instead of enabling =users.mutableUsers= I could add the Guix users by adding them to my system configuration:
-#+BEGIN_SRC nix -n
+```
+
+Instead of enabling `users.mutableUsers` I could add the Guix users by
+adding them to my system configuration:
+
+```nix
{ config, pkgs, ...}:
{
@@ -77,15 +101,26 @@ Instead of enabling =users.mutableUsers= I could add the Guix users by adding th
};
};
}
-#+END_SRC
-Here I used =fold= and the =//= operator to merge all of the configuration sets into a single =extraUsers= value.
-** Creating the =systemd= service
-One other thing missing was the =systemd= service.
+```
+
+Here I used `fold` and the `//` operator to merge all of the
+configuration sets into a single `extraUsers` value.
-First I couldn't just copy the =.service= file to =/etc= since in NixOS that folder isn't writable. But also I wanted the service to be better integrated with the OS.
+## Creating the `systemd` service
-That was a little easier than creating the users, all I had to do was translate the provided [[https://git.savannah.gnu.org/cgit/guix.git/tree/etc/guix-daemon.service.in?id=00c86a888488b16ce30634d3a3a9d871ed6734a2][=guix-daemon.service.in=]] configuration to an equivalent Nix expression
-#+BEGIN_SRC ini -n
+One other thing missing was the `systemd` service.
+
+First I couldn't just copy the `.service` file to `/etc` since in NixOS
+that folder isn't writable. But also I wanted the service to be better
+integrated with the OS.
+
+That was a little easier than creating the users, all I had to do was translate
+the provided [`guix-daemon.service.in`][3] configuration to an equivalent Nix
+expression
+
+[3]: https://git.savannah.gnu.org/cgit/guix.git/tree/etc/guix-daemon.service.in?id=00c86a888488b16ce30634d3a3a9d871ed6734a2
+
+```ini
# This is a "service unit file" for the systemd init system to launch
# 'guix-daemon'. Drop it in /etc/systemd/system or similar to have
# 'guix-daemon' automatically started.
@@ -107,9 +142,11 @@ TasksMax=8192
[Install]
WantedBy=multi-user.target
-#+END_SRC
-This sample =systemd= configuration file became:
-#+BEGIN_SRC nix -n
+```
+
+This sample `systemd` configuration file became:
+
+```nix
guix-daemon = {
enable = true;
description = "Build daemon for GNU Guix";
@@ -123,9 +160,12 @@ guix-daemon = {
};
wantedBy = [ "multi-user.target" ];
};
-#+END_SRC
-There you go! After running =sudo nixos-rebuild switch= I could get Guix up and running:
-#+BEGIN_SRC bash -n
+```
+
+There you go! After running `sudo nixos-rebuild switch` I could get Guix
+up and running:
+
+```bash
$ guix package -i hello
The following package will be installed:
hello 2.10 /gnu/store/bihfrh609gkxb9dp7n96wlpigiv3krfy-hello-2.10
@@ -142,9 +182,15 @@ Creating manual page database...
2 packages in profile
$ hello
Hello, world!
-#+END_SRC
+```
+
Some improvements to this approach are:
-1. looking into [[https://nixos.org/nixos/manual/index.html#sec-writing-modules][NixOS modules]] and trying to bundle everything together into a single logical unit;
-2. [[https://www.gnu.org/software/guix/manual/en/html_node/Requirements.html#Requirements][build Guix from source]] and share the Nix store and daemon with Guix.
+
+1. looking into [NixOS modules][4] and trying to bundle everything together
+ into a single logical unit;
+2. [build Guix from source][5] and share the Nix store and daemon with Guix.
Happy Guix/Nix hacking!
+
+[4]: https://nixos.org/nixos/manual/index.html#sec-writing-modules
+[5]: https://www.gnu.org/software/guix/manual/en/html_node/Requirements.html#Requirements