Skip to content

Введение в райсы Denix

Райс (rice) - это attribute set, возвращаемый функцией delib.rice, который включает или отключает определенные конфигурации в зависимости от значения опции ${myconfigName}.rice. Также он передает входящий attribute set в функцию delib.rice в опцию ${myconfigName}.rice.${delib.rice :: name}.

Термин "райс" в жаргоне обозначает настройки системы, которые чаще всего связаны с внешним видом. В контексте Denix райс представляет собой конфигурацию, которую можно применить к любому хосту, и она будет работать корректно.

При этом райсы не являются обязательными - если вы не хотите их использовать, просто не добавляйте опции ${myconfigName}.rices и ${myconfigName}.rice, а также не вызывайте функцию delib.rice.

Наследование

Райс может наследовать все конфигурации другого райса через атрибут inherits. Кроме того, можно установить inheritanceOnly = true;, чтобы скрыть райс от генерации в delib.configurations, оставив его только для наследования.

Пример трех райсов, где первые два наследуют все конфигурации райса "rounded":

nix
{delib, ...}:
delib.rice {
  name = "black";
  inherits = ["rounded"];
  myconfig.colorscheme = "black";
}
nix
{delib, ...}:
delib.rice {
  name = "light";
  inherits = ["rounded"];
  myconfig.colorscheme = "light";
}
nix
{delib, ...}:
delib.rice {
  name = "rounded";
  inheritanceOnly = true;
  myconfig.hyprland.rounding = "6";
}

Опции

Для работы райсов ваша конфигурация должна включать опции ${myconfigName}.rice и ${myconfigName}.rices, которые вы задаете самостоятельно в одном из модулей.

Пример минимальной рекомендуемой конфигурации для райсов:

nix
{delib, ...}:
delib.module {
  name = "rices";

  options = with delib; let
    rice = {
      options = riceSubmoduleOptions;
    };
  in {
    rice = riceOption rice;
    rices = ricesOption rice;
  };

  home.always = {myconfig, ...}: {
    assertions = delib.riceNamesAssertions myconfig.rices;
  };
}

Другие примеры можно найти в разделе Примеры.