# Non-module arguments # These are separate from the module arguments to avoid implicit dependencies. # This makes service modules self-contains, allowing mixing of Nixpkgs versions. { pkgs }: # The module { lib, ... }: let inherit (lib) mkOption types; pathOrStr = types.coercedTo types.path (x: "${x}") types.str; in { # https://nixos.org/manual/nixos/unstable/#modular-services _class = "service"; imports = [ ../../../../../modules/generic/meta-maintainers.nix ../../../misc/assertions.nix (lib.modules.importApply ./config-data.nix { inherit pkgs; }) ]; options = { services = mkOption { type = types.attrsOf ( types.submoduleWith { modules = [ (lib.modules.importApply ./service.nix { inherit pkgs; }) ]; } ); description = '' A collection of [modular services](https://nixos.org/manual/nixos/unstable/#modular-services) that are configured in one go. You could consider the sub-service relationship to be an ownership relation. It **does not** automatically create any other relationship between services (e.g. systemd slices), unless perhaps such a behavior is explicitly defined and enabled in another option. ''; default = { }; visible = "shallow"; }; process = { argv = lib.mkOption { type = types.listOf pathOrStr; example = lib.literalExpression ''[ (lib.getExe config.package) "--nobackground" ]''; description = '' Command filename and arguments for starting this service. This is a raw command-line that should not contain any shell escaping. If expansion of environmental variables is required then use a shell script or `importas` from `pkgs.execline`. ''; }; }; }; }