{lib, ...}: let # a function that will append a list of groups if they exist in config.users.groups ifTheyExist = config: groups: builtins.filter (group: builtins.hasAttr group config.users.groups) groups; # a function that returns a boolean based on whether or not the groups exist ifGroupsExist = config: groups: lib.any (group: builtins.hasAttr group config.users.groups) groups; # convenience function check if the declared device type is of an accepted type # takes config and a list of accepted device types # `isAcceptedDevice osConfig ["foo" "bar"];` isAcceptedDevice = conf: list: builtins.elem conf.modules.device.type list; # assert if the device is wayland-ready by checking sys.video and env.isWayland options # `(lib.isWayland config)` where config is in scope # `isWayland osConfig` -> true isWayland = conf: conf.modules.system.video.enable && conf.modules.usrEnv.isWayland; # ifOneEnabled takes a parent option and 3 child options and checks if at least one of them is enabled # `ifOneEnabled config.modules.services "service1" "service2" "service3"` ifOneEnabled = cfg: a: b: c: (cfg.a || cfg.b || cfg.c); in { inherit ifTheyExist ifGroupsExist isAcceptedDevice isWayland ifOneEnabled; }