# https://nixos.wiki/wiki/NixOS_modules

# This module can be used as follows:
# {
#   imports = [ ./module.nix ];
#   services.example = {
#     enable = true;
#     message = "Hello :)";
#   };
# }

{ lib, config, options, pkgs, modulesPath, ... }:
with lib;
let
  # cfg is a typical convention.
  cfg = config.services.example;
in
{
  imports = [
    # Paths to other modules.
    # Compose this module out of smaller ones.
  ];

  options = {
    # Option declarations.
    # Declare what settings a user of this module module can set.
    # Usually this includes an "enable" option to let a user of this module choose.

    services.example = {
      enable = mkEnableOption "example service";
      message = mkOption {
        type = types.str;
        default = "Hello, world!";
        example = "Hi!";
        # A textual description of the option, in DocBook format.
        description = ''
          You can set any message you want here.
        '';
      };
    };
  };

  config = mkIf cfg.enable {
    # Option definitions.
    # Define what other settings, services and resources should be active.
    # These are depend on whether a user of this module chose to "enable" it using the "option" above.
    # You also set options here for modules that you imported in "imports".
  };
}