ŹRÓDŁO Aby móc wykorzystywać gałęzie testowe repozytoriów kanałów Guix konieczne jest wykorzystanie pliku kanałów. Nie istnieje żaden inny sposób na nadpisanie systemowej listy kanałów. Służy do tego opcja -C lub --channels polecenia guix pull. Plik kanałów Guix powinien zawierać listę wszystkich używanych kanałów, wskazujących na testowe gałęzie odpowiednich repozytoriów. Dzięki temu nie będzie potrzebna modyfikacja tego pliku w ramach testowania zmian w różnych kanałach. Wystarczy tylko odpowiednie ustawianie wskaźnika gałęzi testowej repozytoriów. Modyfikacja tego pliku będzie natomiast konieczna przy dodawaniu lub usuwaniu samych kanałów.

ŹRÓDŁO Kanonicznym sposobem na dodanie pliku kanałów w celu testowania zmian jest wykorzystanie zmiennej home-files-service-type z modułu (gnu home services). Ta zmienna definiuje listę plików załączanych do struktury katalogu domowego. Aby dodać plik do tej listy należy użyć simple-service w celu jej rozszerzenia zamiast nadpisania.


Aby upewnić się, że dobrze rozumiem działanie usługi home-files-service-type, definiuję pusty plik channels.scm i sprawdzam czy pojawia się on w katalogu domowym po rekonfiguracji użytkownika. Po usunięciu szeregu błędów programowania osiągam pożądany efekt.

lrwxrwxrwx  1 marek users      56 10-10 14:22 channels.scm -> /gnu/store/nn3rdi5xdz5ng5j2byax8n7pyhmc3jyg-channels.scm

Aby ukryć i lepiej określić ten plik, zmieniam jego nazwę na .test-channels.scm. Następnie definiuję w nim testowe warianty kanałów.

(define-module (users uid1000-test-channels)
  #:use-module ( (guix channels)
                 #:prefix guix:channels:)
  #:use-module ( (sovereign channels)
                 #:prefix sovereign:channels:))

(define test-deployment-channel
  (guix:channels:channel
    (inherit sovereign:channels:deployment-channel)
    (url     "file:///home/marek/Szablony/deployment")
    (branch  "test")))

(define test-guix-channel
  (guix:channels:channel
    (inherit sovereign:channels:default-guix-channel)
    (url     "file:///home/marek/Szablony/guix")
    (branch  "test")))

(define test-guix-rust-past-crates-channel
  (guix:channels:channel
    (inherit sovereign:channels:guix-rust-past-crates-channel)
    (url     "file:///home/marek/Szablony/guix-rust-past-crates")
    (branch  "test")))

(define test-nonguix-channel
  (guix:channels:channel
    (inherit sovereign:channels:nonguix-channel)
    (url     "file:///home/marek/Szablony/nonguix")
    (branch  "test")))

(define test-sovereign-channel
  (guix:channels:channel
    (inherit sovereign:channels:sovereign-channel)
    (url     "file:///home/marek/Szablony/sovereign")
    (branch  "test")))

(list test-deployment-channel
      test-guix-channel
      test-guix-rust-past-crates-channel
      test-nonguix-channel
      test-sovereign-channel)

Modyfikuję alias test-system aby używać wyłącznie nowo utworzonego pliku kanałów. Musiałem dodać gałąź testową do lokalnych kopp repozytoriów zewnętrznych kanałów.

alias test-system='guix pull --fallback --allow-downgrades --disable-authentication --channels=/home/marek/.test-channels.scm ;
sudo guix system reconfigure -e "(@ (deployment systems rakan) operating-system*)" --fallback --allow-downgrades'