{ lib, config, pkgs, pkgs-kabbone, ... }: let cfg = config.services.corosync-qnetd; dataDir = "/var/run/corosync-qnetd"; in { # interface options.services.corosync-qnetd = { enable = lib.mkEnableOption "corosync-qnetd"; package = lib.mkPackageOption pkgs-kabbone "corosync-qdevice" { }; extraOptions = lib.mkOption { type = with lib.types; listOf str; default = [ ]; description = "Additional options with which to start corosync-qnetd."; }; }; # implementation # implementation config = lib.mkIf cfg.enable { environment.systemPackages = [ cfg.package ]; users.users.coroqnetd = { isSystemUser = true; group = "coroqnetd"; home = dataDir; description = "Corosync-qnetd Service User"; }; users.groups.coroqnetd = { }; # environment.etc."corosync/corosync-qnetd.conf".text = '' # totem { # version: 2 # secauth: on # cluster_name: ${cfg.clusterName} # transport: knet # } # logging { # to_syslog: yes # } # ''; systemd.packages = [ cfg.package ]; systemd.services.corosync-qnetd = { serviceConfig = { User = "coroqnetd"; StateDirectory = "corosync-qnetd"; StateDirectoryMode = "0700"; }; }; environment.etc."sysconfig/corosync-qnetd".text = lib.optionalString (cfg.extraOptions != [ ]) '' COROSYNC-QNETD_OPTIONS="${lib.escapeShellArgs cfg.extraOptions}" ''; }; meta = { #buildDocsInSandbox = false; #doc = ./mautrix-whatsapp.md; maintainers = with lib.maintainers; [ kabbone ]; }; }