{ lib, pkgs, config, ... }: let inherit (lib) mkIf mkDefault; inherit (lib.my) mkOpt' mkBoolOpt'; cfg = config.services.wastebin; in { options.services.wastebin = with lib.types; { enable = mkBoolOpt' false "Whether to enable wastebin."; package = mkOpt' package pkgs.wastebin "Package to use."; settings = mkOpt' (attrsOf str) { } "Environment variable settings."; extraSettingsFile = mkOpt' (nullOr str) null "Extra environment file (e.g. for signing key)."; }; config = mkIf cfg.enable { services.wastebin.settings = { WASTEBIN_ADDRESS_PORT = mkDefault "[::]:8088"; WASTEBIN_DATABASE_PATH = mkDefault "/var/lib/wastebin/db.sqlite3"; }; systemd.services.wastebin = { description = "wastebin minimal pastebin"; after = [ "network.target" ]; environment = cfg.settings; serviceConfig = { EnvironmentFile = mkIf (cfg.extraSettingsFile != null) cfg.extraSettingsFile; DynamicUser = true; StateDirectory = "wastebin"; ExecStart = "${cfg.package}/bin/wastebin"; }; wantedBy = [ "multi-user.target" ]; }; }; }