{ config, lib, pkgs, utils, ... }: let inherit (lib) mkDefault mkEnableOption mkIf mkOption types literalExample; cfg = config.services.engelsystem; in { options = { services.engelsystem = { enable = mkOption { default = false; example = true; description = '' Whether to enable engelsystem, an online tool for coordinating helpers and shifts on large events. ''; type = lib.types.bool; }; domain = mkOption { type = types.str; example = "engelsystem.example.com"; description = "Domain to serve on."; }; package = mkOption { type = types.package; example = literalExample "pkgs.engelsystem"; description = "Engelsystem package used for the service."; default = pkgs.engelsystem; }; createDatabase = mkOption { type = types.bool; default = true; description = '' Whether to create a local database automatically. This will override every database setting in . ''; }; }; services.engelsystem.config = mkOption { type = types.attrs; default = { database = { host = "localhost"; database = "engelsystem"; username = "engelsystem"; }; }; example = { maintenance = false; database = { host = "database.example.com"; database = "engelsystem"; username = "engelsystem"; password._secret = "/var/keys/engelsystem/database"; }; email = { driver = "smtp"; host = "smtp.example.com"; port = 587; from.address = "engelsystem@example.com"; from.name = "example engelsystem"; encryption = "tls"; username = "engelsystem@example.com"; password._secret = "/var/keys/engelsystem/mail"; }; autoarrive = true; min_password_length = 6; default_locale = "de_DE"; }; description = '' Options to be added to config.php, as a nix attribute set. Options containing secret data should be set to an attribute set containing the attribute _secret - a string pointing to a file containing the value the option should be set to. See the example to get a better picture of this: in the resulting config.php file, the email.password key will be set to the contents of the /var/keys/engelsystem/mail file. See https://engelsystem.de/doc/admin/configuration/ for available options. Note that the admin user login credentials cannot be set here - they always default to admin:asdfasdf. Log in and change them immediately. ''; }; }; config = mkIf cfg.enable { # create database services.mysql = mkIf cfg.createDatabase { enable = true; package = mkDefault pkgs.mysql; ensureUsers = [{ name = "engelsystem"; ensurePermissions = { "engelsystem.*" = "ALL PRIVILEGES"; }; }]; ensureDatabases = [ "engelsystem" ]; }; environment.etc."engelsystem/config.php".source = pkgs.writeText "config.php" ''