# How can i improve performance?

**URL:** <https://forum.systemcrafters.net/t/how-can-i-improve-performance/1725>\
**Category:** Guix\
**Created:** [July 17, 2025, 10:45pm UTC](https://forum.systemcrafters.net/t/how-can-i-improve-performance/1725 "2025-07-17T22:45:54Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![iser](https://avatars.discourse-cdn.com/v4/letter/i/d07c76/32.png) [@iser](https://forum.systemcrafters.net/u/iser)\
**Post date:** [July 17, 2025, 10:45pm UTC](https://forum.systemcrafters.net/t/how-can-i-improve-performance/1725/1 "2025-07-17T22:45:54Z")

</div>

Guix is painfully slow for me. Everytime i run `guix system reconfigure` i can put my notebook on the side and do something else for 15 minutes to an hour. Eventually i will get back to a command prompt after that time, but that it is really not fun when trying things out and experimenting with new stuff. What are things that i can do to improve speed?  
I already changed the guix channel from savannah to codeberg, configured substituters for all the channels that i pull from, but it is still soooo slow. Should i put more things into the home configuration? Also maybe im blindsided by the console not giving any output for long periods during that process. Can i maybe make it more verbose so i know and get a glimpse into what is going on?

---

<div class="post-metadata">

**Author:** ![Kratacoa](https://avatars.discourse-cdn.com/v4/letter/k/b5ac83/32.png) [@Kratacoa](https://forum.systemcrafters.net/u/Kratacoa)\
**Post date:** [July 20, 2025, 12:05am UTC](https://forum.systemcrafters.net/t/how-can-i-improve-performance/1725/2 "2025-07-20T00:05:25Z")

</div>

A lot of testing can be done by combining `guix shell` and `guix repl`. Have you considered this option and found it not ergonomic enough?

---

<div class="post-metadata">

**Author:** ![iser](https://avatars.discourse-cdn.com/v4/letter/i/d07c76/32.png) [@iser](https://forum.systemcrafters.net/u/iser)\
**Post date:** [July 21, 2025, 1:44am UTC](https://forum.systemcrafters.net/t/how-can-i-improve-performance/1725/3 "2025-07-21T01:44:34Z")

</div>

Oh interesting, i was reading the manual for setting up channels, packages and services so far. Thanks, I will try them out!

---

<div class="post-metadata">

**Author:** ![wegei8](https://avatars.discourse-cdn.com/v4/letter/w/53a042/32.png) [@wegei8](https://forum.systemcrafters.net/u/wegei8)\
**Post date:** [July 27, 2025, 6:33am UTC](https://forum.systemcrafters.net/t/how-can-i-improve-performance/1725/4 "2025-07-27T06:33:00Z")

</div>

Maybe this is too complicated of a solution, but maybe it’s relevant?

> **[Speeding up Guix with a local caching substitution server](https://www.futurile.net/2023/05/01/guix-publish-caching-substitution-server/)**

> We can speed up the downloading, building and updating of Guix packages by running a caching substitution server on the local network.

---

<div class="post-metadata">

**Author:** ![wegei8](https://avatars.discourse-cdn.com/v4/letter/w/53a042/32.png) [@wegei8](https://forum.systemcrafters.net/u/wegei8)\
**Post date:** [July 27, 2025, 7:16am UTC](https://forum.systemcrafters.net/t/how-can-i-improve-performance/1725/5 "2025-07-27T07:16:33Z")

</div>

> [@iser](#):
>
> I already changed the guix channel from savannah to codeberg

Also, how did you do that?

---

<div class="post-metadata">

**Author:** ![iser](https://avatars.discourse-cdn.com/v4/letter/i/d07c76/32.png) [@iser](https://forum.systemcrafters.net/u/iser)\
**Post date:** [August 1, 2025, 8:16pm UTC](https://forum.systemcrafters.net/t/how-can-i-improve-performance/1725/6 "2025-08-01T20:16:57Z")

</div>

> how did you do that?

I defined a new variable called override-channels in my `/etc/config.scm`

```scheme
(define override-channels
  (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"))))
    (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"))))))

```

And then i used that in my os configuration

```scheme
(operating-system
  ...
  (services
        (append
          (list
            (service openssh-service-type)
            ...
          (modify-services %desktop-services
            (guix-service-type
              config => (guix-configuration
                (inherit config)
                (channels override-channels)
                (guix (guix-for-channels override-channels))

```

see [Customizing the System-Wide Guix (GNU Guix Reference Manual)](https://guix.gnu.org/manual/devel/en/html_node/Customizing-the-System_002dWide-Guix.html) for more on that

Beware, classic hen-egg problem, once you changed your config, you need to rebuild guix with `guix system reconfigure` first, before adding new packages from those channels. Only after that will guix use the new channels. Then you can do guix pull, add your new stuff to your config and then it will get its packages from those channels.

Also thanks for the suggestion, i will add local caching substituters next.

---

<div class="post-metadata">

**Author:** ![wegei8](https://avatars.discourse-cdn.com/v4/letter/w/53a042/32.png) [@wegei8](https://forum.systemcrafters.net/u/wegei8)\
**Post date:** [August 2, 2025, 7:17am UTC](https://forum.systemcrafters.net/t/how-can-i-improve-performance/1725/7 "2025-08-02T07:17:39Z")

</div>

Ah, all we have to do is change that URL. Oook.

For me, I didn’t need system-wide channel configuration. I updated my `~/.config/guix/channels.scm` to a new URL.

```scheme
(list (channel
        (name 'nonguix)
        (url "https://gitlab.com/nonguix/nonguix")
        (branch "master")
        (introduction
          (make-channel-introduction
            "897c1a470da759236cc11798f4e0a5f7d4d59fbc"
            (openpgp-fingerprint
              "2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5"))))
      (channel
        (name 'guix)
        (url "https://git.guix.gnu.org/guix.git")
        (branch "master")
        (introduction
          (make-channel-introduction
            "9edb3f66fd807b096b48283debdcddccfea34bad"
            (openpgp-fingerprint
              "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA")))))

```

By the way, [guix/guix: Transactional package manager, declarative GNU/Linux distribution, reproducible deployment tool, and more! - Codeberg.org](https://git.guix.gnu.org/guix.git) points to Codeberg. I think the idea is that `git.guix.gnu.org` will point to wherever the current Guix repo is. This way we don’t have to update the URL in the future.

* * *

Also, I learned about different substitute servers from here: [Group:Guix/Mirrors - LibrePlanet](https://libreplanet.org/wiki/Group:Guix/Mirrors)

They only have a few, but I was able to pick a server that was closer to me.

(Someone needs to make a tool like [reflector](https://wiki.archlinux.org/title/Reflector), but for Guix…)

Then I updated my system config, as documented here: [Getting Substitutes from Other Servers (GNU Guix Reference Manual)](https://guix.gnu.org/manual/en/html_node/Getting-Substitutes-from-Other-Servers.html)

```scheme
(operating-system
  ;; …
  (services
    ;; Assume we're starting from '%desktop-services'. Replace it
    ;; with the list of services you're actually using.
    (modify-services %desktop-services
      (guix-service-type config =>
                        (guix-configuration
                          (inherit config)
                          (substitute-urls
                            (append (list "https://guix.example.org")
                                    %default-substitute-urls))
                          (authorized-keys
                            (append (list (local-file "./key.pub"))
                                    %default-authorized-guix-keys)))))))

```

Honestly, still slow tho. 😹

---

<div class="post-metadata">

**Author:** ![Kratacoa](https://avatars.discourse-cdn.com/v4/letter/k/b5ac83/32.png) [@Kratacoa](https://forum.systemcrafters.net/u/Kratacoa)\
**Post date:** [August 8, 2025, 11:29am UTC](https://forum.systemcrafters.net/t/how-can-i-improve-performance/1725/8 "2025-08-08T11:29:25Z")

</div>

I would recommend appending `nonguix` to `%default-channels` in your channels rather than managing the official Guix channels manually

---

<div class="post-metadata">

**Author:** ![wegei8](https://avatars.discourse-cdn.com/v4/letter/w/53a042/32.png) [@wegei8](https://forum.systemcrafters.net/u/wegei8)\
**Post date:** [October 9, 2025, 5:24am UTC](https://forum.systemcrafters.net/t/how-can-i-improve-performance/1725/9 "2025-10-09T05:24:57Z")

</div>

Btw, here’s a more realistic `services` block.

```scheme
  (services
   (modify-services (append (list (service gnome-desktop-service-type)
                                  (service cups-service-type)
                                  (set-xorg-configuration
                                   (xorg-configuration (keyboard-layout
                                                        keyboard-layout))))

                            ;; This is the default list of services we
                            ;; are appending to.
                            %desktop-services)
     (guix-service-type config =>
                        (guix-configuration (inherit config)
                                            (substitute-urls (append (list
                                                                      "https://bordeaux-us-east-mirror.cbaines.net"
                                                                      "https://substitutes.nonguix.org")
                                                              %default-substitute-urls))
                                            (authorized-keys (append (list (plain-file
                                                                            "non-guix.pub"
                                                                            "(public-key (ecc (curve Ed25519) (q #C1FD53E5D4CE971933EC50C9F307AE2171A2D3B52C804642A7A35F84F3A4EA98#)))"))
                                                              %default-authorized-guix-keys))))))

```
