NixOS: установка канала по умолчанию в configuration.nix

Как мне установить канал по умолчанию в /etc/configuration.nix NixOS?

Есть команда, чтобы установить и перестроить с помощью

sudo nix-channel --add https://nixos.org/channels/nixpkgs-unstable
sudo nixos-rebuild switch -I nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixpkgs

но я бы хотел, чтобы это было настроено в configuration.nix, поэтому мне не нужно каждый раз помнить, как это делать. Спасибо!


person Jacob Wang    schedule 06.04.2016    source источник


Ответы (3)


system.autoUpgrade.channel это то, что вы, возможно, ищете

установите его на любой канал, например

system.autoUpgrade.channel = "https://nixos.org/channels/nixos-16.03-small/";

в документации говорится:

по умолчанию это канал, установленный с помощью nix-channel (запустите nix-channel --list, чтобы увидеть текущее значение)

Актуальный список каналов можно найти на https://nixos.org/channels/

ссылка: https://nixos.org/nixos/manual/options.html#opt-system.autoUpgrade.channel https://nixos.org/nixos/manual/index.html#idm140737317454064

person hash    schedule 14.05.2016
comment
Спасибо, это выглядит многообещающе. К сожалению, мои эксперименты с NixOS закончились, поэтому я не могу это проверить. Если кто-то может проверить, я выберу это в качестве ответа. - person Jacob Wang; 15.05.2016
comment
Допустим, у вас изначально была система 19.03, а затем вы установили этот канал автообновления на 19.09. Проходит автоматическое обновление, и все хорошо ... Но затем вы запускаете nixos-rebuild switch --upgrade и ... вы откатываетесь к предыдущей версии, верно? Это нехорошо ... - person hypersw; 30.10.2019
comment
К сожалению, в документации это не указано, но похоже, что если у вас более одного канала, по умолчанию используется первый в алфавитном порядке. Может кто-нибудь это подтвердить? - person l0b0; 31.10.2019

Установите nixPath = [ "nixpkgs=http://nixos.org/channels/nixos-unstable/nixexprs.tar.xz" ];, см. person iElectric    schedule 07.04.2016

comment
Я пробовал это, но похоже, что это не работает так же, как при использовании nix-channel, если я правильно понял, что происходит. Во-первых, при запуске nixos-rebuild switch он обновил nixpkgs, загрузив файл tar.xz. Во-вторых, почти (?) Каждый раз, когда требовался nixpkgs, он загружался. Как я могу получить такую ​​же функциональность, как при настройке с помощью nix-channel? То есть обновлять nixpkgs только по явному запросу. Тем не менее, канал можно было установить в configuration.nix. Имеет ли это смысл? - person Jaakko Luttinen; 31.10.2017
comment
@JaakkoLuttinen, вы можете использовать nixpkgs="${fetchTarball http://nixos.org/channels/nixos-unstable/nixexprs.tar.xz}", таким образом, выборка будет происходить только во время nixos-rebuild, а во время выполнения система увидит уже подключенный путь к хранилищу nix - person enobayram; 27.08.2018

Параметр nix.nixPath (ref) выглядит так, как будто он сделает то, что вам нужно.

Также канал nixos-unstable может быть более подходящим для вас, чем nixpkgs-unstable. Я считаю, что pkgs в канале nixpkgs протестированы и созданы для систем, отличных от nixOS, хотя на данный момент я не могу вспомнить ссылку на это.

nix-channel --add https://nixos.org/channels/nixos-unstable/ 
nix-channel --update nixos-unstable
# /etc/nixos/configuration.nix
# Put nixos-unstable at the front of nixPath
{ lib, ... }:
{
  nix.nixPath = lib.mkDefault (lib.mkBefore [ "nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos-unstable" ]);
}

Если вам нужны императивные команды nix-channel в вашем файле configuration.nix, вы можете написать для этого небольшую службу systemd, как показано здесь. Изменить: чтобы убедиться, что configuration.nix создан из последнего канала unstable, просто установите значение nixpkgs, как в ответе от @iElectric, и Nix будет использовать выражения, содержащиеся в этом URL-адресе всякий раз, когда он оценивает configuration.nix.

PS Я понял, что вы также можете просто указать путь nixos к каналу nixos-unstable, выполнив nix-channel --add https://nixos.org/channels/nixos-unstable/ nixos, но я думаю, что первое решение более ясное.

person brocking    schedule 06.04.2016
comment
Спасибо за советы. Похоже, это может заменить команду nixos-rebuild, однако как я могу добавить сам нестабильный канал в configuration.nix? - person Jacob Wang; 07.04.2016
comment
Предупреждение: это не работает из коробки (по крайней мере, больше): путь неверен, и он удаляет необходимые записи, такие как nixos-config ... - person olejorgenb; 09.06.2018
comment
@olejorgenb, значение nixPath может потребоваться заключить в lib.mkDefault, чтобы избежать замены значения nixos-config. Однако в настоящее время у меня нет установки NixOS, чтобы это проверить. Но в руководстве по NixOS по-прежнему есть опция nixPath, поэтому я думаю, что это подходящий вариант для использования. Я думаю, что этот путь тоже должен работать, хотя кажется, что я случайно пропустил начальный /, я исправлю это. - person brocking; 09.06.2018