# This is an example of a blank module. { config, lib, ... }: let cfg = config.aux.system.services.myModule; in { options = { aux.system.services.myModule = { enable = lib.mkEnableOption "Enables this example module."; attributes = lib.mkOption { default = { }; type = lib.types.attrs; description = "An example of an attributes option."; }; string = lib.mkOption { default = ""; type = lib.types.str; description = "An example of a string option."; }; list = lib.mkOption { default = [ ]; type = lib.types.listOf lib.types.int; description = "An example of a list (of integers) option."; }; enum = mkOption { default = "one"; type = types.enum [ "one" "two" ]; description = "An example of an enum option."; }; }; }; config = lib.mkIf cfg.enable { # Add changes applied by this module here. }; systemd.services = { # Forces systemd to wait for the module's configuration directory to be available before starting the service. myModule.unitConfig.RequiresMountsFor = cfg.home; # Tells Nginx to wait for the service to be available before coming online. nginx.wants = [ config.systemd.services.myModule.name ]; }; }