some things to make guix (system) less painful
I’m grateful to Nemin for writing about his experiences with Guix! I’ve been thinking about it for months at this stage, and have an aarch64 VM from the 1.5.0 release. It’s felt awkward and I haven’t known how to get started, particularly because of how slow things seem to be.
Some things that have really helped me speed things up:
Use Guix Moe’s substitutes
“Guix Moe”: Build farm and mirrors for community channels introduces it. You may be wondering where exactly to put the (simple-service 'guix-moe …) stanza.
Wonder no more. Your /etc/config.scm will have a (services …) declaration. There will probably be a list of (service …) declarations in a list inside that. Add it there. Mine looks like this:
[…]
;; Uncomment the line below to add an SSH server.
(service openssh-service-type)
;; Add support for the SPICE protocol, which enables dynamic
;; resizing of the guest screen resolution, clipboard
;; integration with the host, etc.
(service spice-vdagent-service-type)
;; Use the DHCP client service rather than NetworkManager.
(service dhcpcd-service-type)
(simple-service 'guix-moe guix-service-type
(guix-extension (authorized-keys (list (plain-file
"guix-moe-old.pub"
"(public-key (ecc (curve Ed25519) (q #374EC58F5F2EC0412431723AF2D527AD626B049D657B5633AAAEBC694F3E33F9#)))")
;; New key since 2025-10-29.
(plain-file
"guix-moe.pub"
"(public-key (ecc (curve Ed25519) (q #552F670D5005D7EB6ACF05284A1066E52156B51D75DE3EBD3030CD046675D543#)))")))
(substitute-urls '("https://cache-cdn.guix.moe")))))
;; Remove some services that don't make sense in a VM.
(remove (lambda (service)
(let ((type (service-kind service)))
[…]
I’ve included lots of context so you don’t get lost. This gets you some more pre-built packages. sudo guix system reconfigure /etc/config.scm.
Change your guix channel source to Codeberg
I could die and git.guix.gnu.org wouldn’t notice. Get acquainted with Guix Home. We’ll be customising the Guix channel itself per 6.2 Using a Custom Guix Channel, and doing it in Guix Home per 13.3.9 Guix Home Services.
Because we’re replacing the default, we don’t want to just add a channel. Add this service to your home-environment, similar to above:
(service home-channels-service-type
(list (channel
(name 'guix)
(url "https://codeberg.org/guix/guix.git")
(branch "master")
(introduction
(make-channel-introduction
"9edb3f66fd807b096b48283debdcddccfea34bad"
(openpgp-fingerprint
"BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"))))
; any other channels here
))
I pulled that introduction from https://hpc.guix.info/static/doc/complex-deployment/channels.scm. Looks safe to me!
guix home reconfigure blah.scm.
Hey, saayix has some nice software
I really wanted Ghostty, and it turns out someone’s got it packaged and up-to-date! https://codeberg.org/look/saayix/src/commit/b9b22f9ca03a452c4d8801b200da0095f54090e8/modules/saayix/packages/terminals.scm
You can add one of the channel declarations directly where indicated above. Then guix home reconfigure again (you can see the result in ~/.config/guix/channels.scm), and then guix pull to fetch the channel. Now you can e.g. #:use-module (saayix packages terminals) and add ghostty to your (packages …) list!
