because i prefer to have a functional system that isn't a 20 year old thinkpad, this page contains blasphemy against free software. Do not bring these methods up to people who care that much about it that much (official IRC rooms/mailing lists).
by default, the guix system installation ISO allows installing either the `linux-libre` kernel or the GNU Hurd kernel, which both do not contain any non-free firmware such as some modern WiFi drivers and CPU microcode (examples from my own use case, at least). WiFi drivers are needed to, well, download the rest of the system.
there are pre-built images by several community members, which for some reason didn't work for me. you can try those for a basic installation.
hako's live ISO'ssystemCrafters' ISO's (seem old and with failing builds?)
i built the image because those didn't work for me, and for learning purposes, but if you are only a little curious to try it, it's almost always better off finding if an existing installation ISO that works.
the basic steps for installing the guix system on a modern incompatible machine would be:
1. building an ISO that contains non-free drivers and linux kernel from the channel.
2. going through the interactive installer until the last step
3. completing the installation manually by supplying your own configs (since the installer is still the vanilla Guix System one).
nonguix channel
1. build the ISO
i had a collection of weird and inconsistently appearing issues when building from guix in a foreign system, which somehow didn't show up when building in a virtual machine. building from a VM turned out to be the smoothest process I found.
create an environment for building an ISO, download and install the system ISO in a VM
guix downloads
most things will work inside the VM so no worries about the default configurations, you can select a desktop environment if that makes things easier.
note: plasma didn't boot for me, so i used xfce. just thought it might be valuable to note that.
once you're there in the newly installed system, you'll need to add the necessary channel for the build process. go to
~/.config/guix/channels.scm
and add the proper channel configurations
(list (channel (name 'guix) (url "https://git.savannah.gnu.org/git/guix.git") (introduction (make-channel-introduction "9edb3f66fd807b096b48283debdcddccfea34bad" (openpgp-fingerprint "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA")))) (channel (name 'nonguix) (url "https://gitlab.com/nonguix/nonguix") (introduction (make-channel-introduction "897c1a470da759236cc11798f4e0a5f7d4d59fbc" (openpgp-fingerprint "2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5")))))
once that's done, refresh the channel and install git:
guix pull guix install git hash guix
add the guix packages to your $PATH by pasting the two lines shown after the install
GUIX_PROFILE="$HOME/.config/guix/current" . "$GUIX_PROFILE/etc/profile"
note: from the docs they make it sound like guix system should do it on its own? (4 Getting Started, p. 33) though for me i had to set it on both the VM and the completed install.
once you have git, go ahead and clone the nonguix repository, it should be in a nonguix folder
git clone https://gitlab.com/nonguix/nonguix.git
now begin creating the image.
guix system image \ --image-type=iso9660 \ --load-path=./nonguix \ --substitute-urls="https://ci.guix.gnu.org https://bordeaux.guix.gnu.org https://substitutes.nonguix.org" \ ./nonguix/nongnu/system/install.scm
this process will take a while, especially on a virtual machine.
substitutes listed here are helpful if you have a weaker machine and decent connection, but you might face some downtime or just unavailability of builds.
gnu's servers are damn slow, and nonguix might not always have substitutes.
regardless it will try to build packages anyways if no substitutes are avaliable.
after that's all done, and no errors came out screaming, you will see something along the lines of
/gnu/store/abcdef...123456-image.iso
which is the path for your built image. get it out of the virtual machine (if you used one) and write it to a flash drive.
2. installation process
so the idea here is that we'll go through the setup, but hijack it before it begins installing with our own configuration file that has the nonfree kernel. you can modify the configuration generated by the installer to include the neccessary drivers, or you can supply your own, i did the former method in my first install but for subsequent installs, any configuration file will work (though you might need another way to supply it, like another drive or remotely fetching it).
once you boot into the usb with the image, go through the graphical installer normally. it might complain about an unsupported networking card but you can ignore that as it assumes you are using the free image and not out deviously-built non-free image.
you can verify if networking works by reaching the network setup portion of the installer and hitting
besides the drive partitioning section (which i'm just too unsure about right now) i don't believe any of the changes here are persistent, but it's still a good idea to map out the proper details, especially if you don't plan to supply your own configuration as it will configure the partition IDs for you.
i'm going to be honest, i don't exactly remember the steps for intial setups. most installs i did used a pre-made configuration file. i know this set of steps will work but it's more manual labor and i don't recall a simpler way.
you need two components:
- the channels configuration. it's the same used in the install, copy to /root/.config/guix/channels.scm
- your system configuration. it can be anywhere, you'll have to point at it anyways, but you should move it to the /etc directory on the mounted partition (should be on /mnt/etc/)
if you have a pre-made config, and checked that it has the proper partitioning (correct UUIDs for at least UEFI+root) you can carry on with the install.
the partitions configured in the partitioning step will be mounted directly on /mnt. if not, mount them as you want and run
herd start cow-store /mnt # if you need to check # $ herd status cow-store # if for some reason you need to stop it # $ herd stop cow-store
you can check [3.6.2 Proceeding with the Installation, p. 30] in the manual for more details information on these portions.
pull to fetch the nonguix channel
guix pull hash guix
then you can begin the system installation with
guix system init /mnt/etc/config.scm /mnt # or wherever you put your config.scm # $ guix system init /path/to/config.scm /mnt # just know while the install will use it, the file might not be there on the final system (haven't personally checked, i assume it will just copy over the stock config?)
manual configuration editing
if you're modifying the generated config, these are the specific changes you want to make for the nonfree essential components. (again, i don't recall exactly what you'll need to do for it.)
(use-modules ... (nongnu packages linux) (nongnu system linux-initrd)) # import modules for the nonfree components (operating-system (kernel linux) # nonfree kernel (initrd microcode-initrd) # CPU microcode (firmware (list linux-firmware ...)) # firmware selection (you can add more if you need. e.g. sof-firmware for sound) ...)
3. post install configuration
you CAN configure an intitial password with (user-account (password (crypt ...))) but i never tried it since i never saw a use for declaratively setting a password in my use case. the one-time setup was acceptable [see Chapter 11: System Configuration, p. 269]
at least during my incredibly hacky and suboptimal setup, users couldn't be accessed graphically and root had no password.
if you configured a desktop environment, drop to a tty with [Ctrl+Alt+(fn+)F3] and enter root. it should be accessible without a password.
your user should be there as per the config, just set it a password with passwd, then configure the passwd for root. (in that order, just for safety from softlocks)
i had issues with GDM as i was trying to crawl back out of the tty. i found rebooting through root to be easier.