Introduction to Denix Rices
A rice is an attribute set returned by the function delib.rice, which enables or disables specific configurations depending on the value of the option ${myconfigName}.rice. It also passes the input attribute set of the delib.rice function to the ${myconfigName}.rice.${delib.rice :: name} option.
The term "rice" in slang refers to system settings, usually related to appearance. In the Denix context, a rice represents a configuration that can be applied to any host and will function correctly.
However, rices are not mandatory: to avoid using them, simply do not add the options ${myconfigName}.rices and ${myconfigName}.rice, and do not use the delib.rice function.
Inheritance
A rice can inherit all configurations of another rice via the inherits attribute. Additionally, you can set inheritanceOnly = true;, which will hide the rice from being generated in delib.configurations, leaving it only for inheritance.
Example of three rices, where the first two inherit all configurations from the "rounded" rice:
{delib, ...}:
delib.rice {
name = "black";
inherits = ["rounded"];
myconfig.colorscheme = "black";
}{delib, ...}:
delib.rice {
name = "light";
inherits = ["rounded"];
myconfig.colorscheme = "light";
}{delib, ...}:
delib.rice {
name = "rounded";
inheritanceOnly = true;
myconfig.hyprland.rounding = "6";
}Options
For rices to work, your configuration must include the options ${myconfigName}.rice and ${myconfigName}.rices, which you define yourself in one of the modules.
Example of a minimal recommended configuration for rices:
{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;
};
}More examples can be found in the Examples section.