From a175be0e7e06c2404d25777e9e8c8fa6ebee376d Mon Sep 17 00:00:00 2001 From: Linus Heckemann Date: Wed, 21 Jul 2021 18:03:57 +0200 Subject: [PATCH] nixos/meshcentral: init module --- nixos/modules/module-list.nix | 1 + nixos/modules/services/admin/meshcentral.nix | 53 ++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 nixos/modules/services/admin/meshcentral.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 4d1700ed99af..899b05cf190e 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -236,6 +236,7 @@ ./security/doas.nix ./security/systemd-confinement.nix ./security/tpm2.nix + ./services/admin/meshcentral.nix ./services/admin/oxidized.nix ./services/admin/salt/master.nix ./services/admin/salt/minion.nix diff --git a/nixos/modules/services/admin/meshcentral.nix b/nixos/modules/services/admin/meshcentral.nix new file mode 100644 index 000000000000..ae7b6edda7d5 --- /dev/null +++ b/nixos/modules/services/admin/meshcentral.nix @@ -0,0 +1,53 @@ +{ config, pkgs, lib, ... }: +let + cfg = config.services.meshcentral; + configFormat = pkgs.formats.json {}; + configFile = configFormat.generate "meshcentral-config.json" cfg.settings; +in with lib; { + options.services.meshcentral = with types; { + enable = mkEnableOption "MeshCentral computer management server"; + package = mkOption { + description = "MeshCentral package to use. Replacing this may be necessary to add dependencies for extra functionality."; + type = types.package; + default = pkgs.meshcentral; + defaultText = "pkgs.meshcentral"; + }; + settings = mkOption { + description = '' + Settings for MeshCentral. Refer to upstream documentation for details: + + + JSON Schema definition + simple sample configuration + complex sample configuration + Old homepage) with documentation link + + ''; + type = types.submodule { + freeformType = configFormat.type; + }; + example = { + settings = { + WANonly = true; + Cert = "meshcentral.example.com"; + TlsOffload = "10.0.0.2,fd42::2"; + Port = 4430; + }; + domains."".certUrl = "https://meshcentral.example.com/"; + }; + }; + }; + config = mkIf cfg.enable { + services.meshcentral.settings.settings.autoBackup.backupPath = lib.mkDefault "/var/lib/meshcentral/backups"; + systemd.services.meshcentral = { + wantedBy = ["multi-user.target"]; + serviceConfig = { + ExecStart = "${cfg.package}/bin/meshcentral --datapath /var/lib/meshcentral --configfile ${configFile}"; + DynamicUser = true; + StateDirectory = "meshcentral"; + CacheDirectory = "meshcentral"; + }; + }; + }; + meta.maintainers = [ maintainers.lheckemann ]; +}