at 23.11-beta 1.3 kB view raw
1{ config 2, pkgs 3, lib 4, ... 5}: 6 7let 8 cfg = config.services.homepage-dashboard; 9in 10{ 11 options = { 12 services.homepage-dashboard = { 13 enable = lib.mkEnableOption (lib.mdDoc "Homepage Dashboard"); 14 15 package = lib.mkPackageOptionMD pkgs "homepage-dashboard" { }; 16 17 openFirewall = lib.mkOption { 18 type = lib.types.bool; 19 default = false; 20 description = lib.mdDoc "Open ports in the firewall for Homepage."; 21 }; 22 23 listenPort = lib.mkOption { 24 type = lib.types.int; 25 default = 8082; 26 description = lib.mdDoc "Port for Homepage to bind to."; 27 }; 28 }; 29 }; 30 31 config = lib.mkIf cfg.enable { 32 systemd.services.homepage-dashboard = { 33 description = "Homepage Dashboard"; 34 after = [ "network.target" ]; 35 wantedBy = [ "multi-user.target" ]; 36 37 environment = { 38 HOMEPAGE_CONFIG_DIR = "/var/lib/homepage-dashboard"; 39 PORT = "${toString cfg.listenPort}"; 40 }; 41 42 serviceConfig = { 43 Type = "simple"; 44 DynamicUser = true; 45 StateDirectory = "homepage-dashboard"; 46 ExecStart = "${lib.getExe cfg.package}"; 47 Restart = "on-failure"; 48 }; 49 }; 50 51 networking.firewall = lib.mkIf cfg.openFirewall { 52 allowedTCPPorts = [ cfg.listenPort ]; 53 }; 54 }; 55}