Обратите внимание, что по крайней мере с 30.03.2017 (соответствует каналу/выпуску 17.03 Nix/NixOS), насколько я понимаю, официальным, современным, поддерживаемым и предлагаемым решением является использование так называемых оверлеев .
См. главу "Наложения" в руководстве nixpkgs за хорошее руководство по использованию нового подхода.
Вкратце: вы можете поместить любое количество файлов с расширением .nix в каталог $HOME/.config/nixpkgs/overlays/
. Они будут обрабатываться в алфавитном порядке, и каждый из них может модифицировать набор доступных пакетов Nix. Каждый из файлов должен быть записан по следующему шаблону:
self: super:
{
boost = super.boost.override {
python = self.python3;
};
rr = super.callPackage ./pkgs/rr {
stdenv = self.stdenv_32bit;
};
}
Набор super
соответствует "старому" набору пакетов (до применения оверлея). Если вы хотите сослаться на старую версию пакета (как в boost
выше) или callPackage
, вы должны сослаться на нее через super
.
Набор self
соответствует возможному, «будущему» набору пакетов, представляющему окончательный результат после применения всех наложений. (Примечание: не пугайтесь, иногда их использование может быть отклонено Nix, так как это приведет к бесконечной рекурсии. Возможно, вам лучше просто использовать super
в таких случаях.)
Примечание: с приведенными выше изменениями решение, которое я упоминаю ниже в исходном ответе, теперь кажется «устаревшим» — я считаю, что оно должно работать по состоянию на апрель 2017 года, но я понятия не имею, как долго. Похоже, что он помечен как "устаревший" в nixpkgs. репозиторий.
Старый ответ до 17.03:
Предполагая, что вы хотите синхронизировать приложения для каждого пользователя (поскольку Nix, отличная от NixOS, сохраняет видимость приложений для каждого пользователя , а не для всей системы, насколько мне известно), можно сделать это декларативно. Это просто не очень хорошо рекламируется в руководстве, хотя, кажется, довольно популярно среди давних Nixers!
Вы должны создать текстовый файл по адресу: $HOME/.nixpkgs/config.nix
например:
$ mkdir -p ~/.nixpkgs
$ $EDITOR ~/.nixpkgs/config.nix
затем введите следующее содержимое:
{
packageOverrides = defaultPkgs: with defaultPkgs; {
home = with pkgs; buildEnv {
name = "home";
paths = [
nethack mc pstree #...your favourite pkgs here...
];
};
};
}
Затем вы сможете установить все перечисленные пакеты с помощью:
$ nix-env -i home
or:
$ nix-env -iA nixos.home # *much* faster than above
В paths
вы можете размещать вещи так же, как и в /etc/nixos/configuration.nix
на NixOS. Кроме того, home
на самом деле является "поддельным пакетом". Вы можете добавить рядом с ним дополнительные определения пользовательских пакетов, а затем включить их в свои «пути».
(Примечание: я надеюсь написать сообщение в блоге с тем, что я узнал о том, как именно это работает, а также показать, как расширить его с помощью дополнительных настроек. Я постараюсь не забыть связать это здесь если у меня получится.)
person
akavel
schedule
21.07.2016