Первые модули
В этом разделе мы создадим модули для некоторых программ. Для начала создайте поддиректории programs
и services
в директории modules
.
Создание своих модулей практически не отличается от создания обычных модулей NixOS, поэтому опции NixOS можно искать здесь.
Git
Предположим, что у вас уже есть модуль констант. Создайте файл modules/programs/git.nix
со следующим содержанием:
nix
{delib, ...}:
delib.module {
name = "programs.git";
options = with delib; {
enable = boolOption true;
enableLFS = boolOption true;
};
home.ifEnabled.programs.git = {myconfig, cfg, ...}: {
enable = cfg.enable;
lfs.enable = cfg.enableLFS;
userName = myconfig.constants.username;
userEmail = myconfig.constants.useremail;
};
}
Объяснение кода:
enable
- опция для включения и отключения модуля полностью.enableLFS
- опция для включения Git Large File Storage.
Hyprland
Предположим, что в вашем хосте есть опции type
и isDesktop
. Создайте поддиректорию hyprland
в директории modules/programs/
, а в ней - файл default.nix
со следующим содержанием:
nix
{delib, ...}:
delib.module {
name = "programs.hyprland";
options = {myconfig, ...} @ args: delib.singleEnableOption myconfig.host.isDesktop args;
nixos.ifEnabled.programs.hyprland.enable = true;
home.ifEnabled.wayland.windowManager.hyprland.enable = true;
}
Также в этой директории создайте файл settings.nix
:
nix
{delib, ...}:
delib.module {
name = "programs.hyprland";
home.ifEnabled.wayland.windowManager.hyprland.settings = {
"$mod" = "SUPER";
general = {
gaps_in = 5;
gaps_out = 10;
};
};
}
И последний файл binds.nix
:
nix
{delib, ...}:
delib.module {
name = "programs.hyprland";
home.ifEnabled.wayland.windowManager.hyprland.settings = {
bindm = [
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
];
bind = [
"$mod, q, killactive,"
"CTRLALT, Delete, exit,"
"$mod, Return, exec, kitty" # ваш терминал
];
};
}
Мы создали небольшую конфигурацию Hyprland, которую можно расширить и добавить новые опции.