141 lines
5.0 KiB
Nix
141 lines
5.0 KiB
Nix
{
|
|
pkgs,
|
|
...
|
|
}:
|
|
{
|
|
options =
|
|
let
|
|
inherit (pkgs) lib;
|
|
inherit (lib) types mkOption;
|
|
serviceConfig =
|
|
with types;
|
|
submodule {
|
|
options = {
|
|
pkg = mkOption {
|
|
type = package;
|
|
description = "Package to use for service.";
|
|
example = "pkgs.caddy";
|
|
};
|
|
exec = mkOption {
|
|
type = str;
|
|
description = "Alternative executable name to use from `pkg`.";
|
|
example = "caddy";
|
|
default = "";
|
|
};
|
|
args = mkOption {
|
|
type = str;
|
|
description = "Arguments to supply to the service binary. Writing %CFG% in this will template to your config location.";
|
|
example = "run -c %CFG% --adapter caddyfile";
|
|
default = "";
|
|
};
|
|
socket = mkOption {
|
|
type = attrsOf (listOf str);
|
|
description = "List of socket options for the unit (see `man systemd.socket`) - supplied as a list due to some options allowing duplicates.";
|
|
example = {
|
|
ListenStream = [ "/run/user/1000/myapp.sock" ];
|
|
};
|
|
default = { };
|
|
};
|
|
path = mkOption {
|
|
type = attrsOf (listOf str);
|
|
description = "List of path options for the unit (see `man systemd.path`) - supplied as a list due to some options allowing duplicates.";
|
|
example = {
|
|
PathModified = [ "/some/path" ];
|
|
};
|
|
default = { };
|
|
};
|
|
timer = mkOption {
|
|
type = attrsOf (listOf str);
|
|
description = "List of timer options for the unit (see `man systemd.path`) - supplied as a list due to some options allowing duplicates.";
|
|
example = {
|
|
OnActiveSec = [ 50 ];
|
|
};
|
|
default = { };
|
|
};
|
|
config = mkOption {
|
|
description = "Options for setting the service's configuration.";
|
|
default = { };
|
|
type = submodule {
|
|
options = {
|
|
text = mkOption {
|
|
type = str;
|
|
default = "";
|
|
description = "Plaintext configuration to use.";
|
|
example = ''
|
|
http://*:8080 {
|
|
respond "hello"
|
|
}
|
|
'';
|
|
};
|
|
ext = mkOption {
|
|
type = str;
|
|
default = "";
|
|
description = "If your service config requires a file extension, set it here. This overrides `format`'s output path'.";
|
|
example = "json";
|
|
};
|
|
file = mkOption {
|
|
type = nullOr path;
|
|
description = "Path to config file. This overrides all other values.";
|
|
example = "./configs/my-config.ini";
|
|
default = null;
|
|
};
|
|
content = mkOption {
|
|
type = nullOr attrs;
|
|
description = "Attributes that define your config values.";
|
|
default = null;
|
|
example = {
|
|
this = "that";
|
|
};
|
|
};
|
|
format = mkOption {
|
|
type = nullOr (enum [
|
|
"java"
|
|
"json"
|
|
"yaml"
|
|
"toml"
|
|
"ini"
|
|
"xml"
|
|
"php"
|
|
]);
|
|
description = "Config output format.\nOne of:\n`java json yaml toml ini xml php`.";
|
|
example = "json";
|
|
default = null;
|
|
};
|
|
formatter = mkOption {
|
|
type = types.anything;
|
|
description = "Serialisation/writer function to apply to `content`.\n`format` will auto-apply the correct format if the option value is valid.\nShould take `path: attrs:` and return a storepath.";
|
|
example = "pkgs.formats.yaml {}.generate";
|
|
default = null;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
in
|
|
{
|
|
serviceDefs = mkOption {
|
|
type = types.attrsOf serviceConfig;
|
|
description = "Concrete service definitions, as per submodule options.\nPlease put service-related options into `options.services` instead, and use this to implement those options.";
|
|
};
|
|
|
|
auto = mkOption {
|
|
type = types.bool;
|
|
description = "Whether to autostart ides services at devshell instantiation.";
|
|
default = true;
|
|
};
|
|
|
|
# to prevent generating docs for this option; see https://github.com/NixOS/nixpkgs/issues/293510
|
|
_module.args = mkOption {
|
|
internal = true;
|
|
};
|
|
|
|
# for internal use
|
|
_buildIdes = mkOption {
|
|
type = types.attrs;
|
|
internal = true;
|
|
};
|
|
};
|
|
|
|
}
|