LINUX.ORG.RU

Туториал по жизни с Nix/Guix для простого юзера

 ,


0

4

Решил, наконец, разобраться с nix/guix, и не очень понял, как с ним жить. :)

И на первой же задаче - сконфигурировать vim - понял, что мне непонятно, как это сделать. Мануалы прочёл, увидел там пример описания нового пакета на основе других пакетов. Нашёл вики https://nixos.wiki/wiki/Vim . Но не нашёл нигде каких-то базовых описаний: как составить выражение, использующее тот же vim_configurable, в какой файл его в ~/ поместить (home-manager`ами не хочу пользоваться) и т.д.

Хочется базовых вещей: как-то описать, что мне нужен vim с такими-то интерпретаторами, и с такими-то модулями для питона.

Если это важно, то буду использовать не в качестве системной ОС, а просто из под пользователя (окей, в /etc разве что настройки для демона будут).

Так вот, если такой сабж туториал есть, поделитесь, пожалуйста ссылкой. Или какие разделы мануала надо читать?

Про вим там прям в вики есть ссылка на то, как оверрайднуть vim_configurable. https://www.mpscholten.de/nixos/2016/04/11/setting-up-vim-on-nixos.html

home-manager`ами не хочу пользоваться

ССЗБ.

в какой файл его в ~/ поместить

В .config/nixpkgs/overlays/vim.nix например, с примерно таким содержимым

self: super: {
  vim_configurable = vim_configurable.customize {
    name = "vim";
    vimrcConfig.customRC = ''
      # Here one can specify what usually goes into `~/.vimrc` 
      # Use emacs instead if you actually need to work
    '';
  }
}

И потом любым способом установить vim_configurable.

balsoft ★★ ()
Последнее исправление: balsoft (всего исправлений: 1)

И на первой же задаче - сконфигурировать vim - понял, что мне непонятно, как это сделать.

Готовых примеров на все случаи жизни хоть жопой жри завались!

init_6 ★★★★★ ()
Ответ на: комментарий от balsoft

Спасибо за наводку. Странно что в man nix-env, например вообще нет упоминания overlay .

Но пока не взлетело:

error: undefined variable 'vim_configurable' at /home/XXX/.config/nixpkgs/overlays/vim.nix:2:22

Добавил

with import <nixpkgs> {};

теперь ошибка:

error: infinite recursion encountered

И ещё, мне не столько .vimrc надо настроить, сколько просто сказать: а собери-ка мне vim с нужной версией python, и сделай доступными из vim плагины (к примеру, sexpdata). А в упомянутой по ссылке статье только про плагины vim…

… а vimrc я буду таскать свой - пока буду его шарить между хостами с nix и где его ещё нет.

В общем, не хватает знаний nix language и общей архитектуры, что бы понять, ЧЯДНТ…

allter149 ()
Ответ на: комментарий от init_6

Например, где их можно посмотреть?.. Я видел примеры готовых конфигов целых систем, в частности от уважаемых участников выше, но для меня пока там слишком много непонятных букв.

allter149 ()
Ответ на: комментарий от allter149

А, да, точно,

self: super: {
  vim_configurable = super.vim_configurable.customize {
    name = "vim";
    vimrcConfig.customRC = ''
      # Here one can specify what usually goes into `~/.vimrc` 
      # Use emacs instead if you actually need to work
    '';
  }
}

Скопипастил неудачно…

вообще нет упоминания overlay

Потому что nix-env к оверлеям имеет слабое отношение, нужно мануал по nixpkgs курить. https://nixos.org/nixpkgs/manual/#chap-overlays

balsoft ★★ ()
Последнее исправление: balsoft (всего исправлений: 1)
Ответ на: комментарий от balsoft

Ещё, похоже, для оверлеев вместо customize надо override (а customize это для выражений для дериваций).

И всё-таки я в резульатте не понял, как мне ещё питоновские модули указать. В отдельном файле в ~/.config/nixpkgs/overlays/XXX.nix ?

Причём я так понимаю, что тут надо как-то сказать, что модули должны быть собраны с тем же интерпретатором питона, с которым собран vim?

Ещё не понял, откуда идёт (где определён) config в nixpkgs/pkgs/applications/editors/vim/configurable.nix - ?

И ещё вопрос: как вы добавляете новые фичи/утилиты в окружение? Пишете .nix код и применяете? Или как-то сначала итеративно в хомяке, а когда довольны результатом, добавляете в .nix и пересобираете?

allter149 ()
Ответ на: комментарий от allter149

Ещё, похоже, для оверлеев вместо customize надо override (а customize это для выражений для дериваций).

Да нет, оверлею плевать, override там или customize. У vim_configurable конфиг меняется именно с помощью customize

И всё-таки я в резульатте не понял, как мне ещё питоновские модули указать. В отдельном файле в ~/.config/nixpkgs/overlays/XXX.nix ?

Можно в том же файле, никсу пофиг. Не пофиг вам, так что разделяйте по логике.

Ещё не понял, откуда идёт (где определён) config в nixpkgs/pkgs/applications/editors/vim/configurable.nix - ?

Аргумент к nixpkgs.

И ещё вопрос: как вы добавляете новые фичи/утилиты в окружение? Пишете .nix код и применяете? Или как-то сначала итеративно в хомяке, а когда довольны результатом, добавляете в .nix и пересобираете?

Пишу nix код в конфиг, применяю. Если там что-то не работает, то итеративно правлю ручками, рабочую версию закидываю обратно в конфиг.

balsoft ★★ ()
Ответ на: комментарий от balsoft

Что-то у меня с customize не работает:

$ nix-env --dry-run -i vim_configurable
(dry run; not doing anything)
error: selector 'vim_configurable' matches no derivations

А если я добавляю в customize строчки вида «perlSupport = true;», то ругается:

$ nix-env --dry-run -i vim_configurable
(dry run; not doing anything)
error: 'customize' at /nix/store/h72vjc749d8l7zp65nm061sn1sd6p6pv-nixpkgs-20.03pre204216.cc6cf0a96a6/nixpkgs/pkgs/misc/vim-plugins/vim-utils.nix:399:17 called with unexpected argument 'perlSupport', at /home/allter/.config/nixpkgs/overlays/vim.nix:15:22

А c override (как в описании оверлеев) такого нет.

allter149 ()
Ответ на: комментарий от allter149

nix-env -iA vim_configurable , потому что у вас имя деривации будет не vim_configurable а какое-то другое (не знаю какое), а вот аттрибут будет именно vim_configurable.

И да, очевидно, что customize не кушает perlSupport, у него аргументы только такие

nix-repl> builtins.attrNames (builtins.functionArgs vim_configurable.customize)  
[ "gvimExecutableName" "name" "vimExecutableName" "vimrcConfig" "wrapGui" "wrapManual" ]
balsoft ★★ ()
Последнее исправление: balsoft (всего исправлений: 2)

Не осиливаю. Не понимаю, как мне скомбинировать vim с питоном. :( В Nixpkgs manual добавление пакетов питона описано для окружения, а мне надо(?) для оверлея.

Написали бы где-то, как вообще это принято. Это же по идее такая частая задача должна быть.

Вот этот нагугленный gist вроде похоже на то, что мне нужно, но не пойму, как правильно подсовывать его: https://gist.github.com/aaronlevin/9a933624d3fda83b01b06acb2aeea0a6

В man nix-env в FILES указан только ~/.nix-defexpr Пробовал и так, и так - не получается. :(

allter149 ()

В общем, поразбирался. Оказывается, готовый фреймворк для упрощения того, что я хотел, есть, но он есть только для neovim, а не для vim_configurable :( Кроме того, я не смог собрать vim_configurable с поддержкой perl, что не удивительно, ибо он по умолчанию выключен, а значит на дефолтной сборке ошибка не отловится. Но неприятно. Надо будет попробовать с более старой версией perl (только надо будет разобраться, как это сделать).

Итак, просто кладём файл со следующим содержимым в .config/nixpkgs/overlays/my_overlay_name.nix :

self: super:

{
  neovim = super.neovim.override {
    configure = {
      plug.plugins = with super.vimPlugins; [
        coc-nvim # нужные модули
      ];
    };
  };
}

Для neovim все манипуляции с зависимостями происходят в nix-файлах в nixpkgs/pkgs/applications/editors/neovim/ и в nixpkgs/pkgs/misc/vim-plugins/ . Соответственно, для vim придётся это всё реализовывать вручную.

Сейчас бы ещё понять, как сделать следующее: coc-nvim требует бинарь node (nodejs). Хочу, что бы из nvim (neovim) этот бинарь всегда был доступен из стора. Сейчас пришлось сделать nix-env -i neovim nodejs, т.е. node берётся из окружения. А хочется, что бы вне зависимости, какой node в моём окружении, в nvim всегда был бы доступен node, описанный в .nix.

Правильно ли я понимаю, что мне для этого нужно описать пакет, который будет зависеть от nodejs и neovim и который будет формировать шелл-санк, просто добавляющий ${nodejs}/bin в PATH и вызывающий ${neovim}/bin/nvim ? Сходу не нашёл билдеров(?) для таких штук, наверняка есть такие?

allter149 ()
Последнее исправление: allter149 (всего исправлений: 1)