grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / web-apps / guacamole-server.nix
blob6f6d12e9939fe2a1f77c19d8c75bbc91830374bc
1 { config
2 , lib
3 , pkgs
4 , ...
5 }:
6 let
7   cfg = config.services.guacamole-server;
8 in
10   options = {
11     services.guacamole-server = {
12       enable = lib.mkEnableOption "Apache Guacamole Server (guacd)";
13       package = lib.mkPackageOption pkgs "guacamole-server" { };
15       extraEnvironment = lib.mkOption {
16         type = lib.types.attrsOf lib.types.str;
17         default = { };
18         example = lib.literalExpression ''
19           {
20             ENVIRONMENT = "production";
21           }
22         '';
23         description = "Environment variables to pass to guacd.";
24       };
26       host = lib.mkOption {
27         default = "127.0.0.1";
28         description = ''
29           The host name or IP address the server should listen to.
30         '';
31         type = lib.types.str;
32       };
34       port = lib.mkOption {
35         default = 4822;
36         description = ''
37           The port the guacd server should listen to.
38         '';
39         type = lib.types.port;
40       };
42       logbackXml = lib.mkOption {
43         type = lib.types.nullOr lib.types.path;
44         default = null;
45         example = "/path/to/logback.xml";
46         description = ''
47           Configuration file that correspond to `logback.xml`.
48         '';
49       };
51       userMappingXml = lib.mkOption {
52         type = lib.types.nullOr lib.types.path;
53         default = null;
54         example = "/path/to/user-mapping.xml";
55         description = ''
56           Configuration file that correspond to `user-mapping.xml`.
57         '';
58       };
59     };
60   };
62   config = lib.mkIf cfg.enable {
63     # Setup configuration files.
64     environment.etc."guacamole/logback.xml" = lib.mkIf (cfg.logbackXml != null) { source = cfg.logbackXml; };
65     environment.etc."guacamole/user-mapping.xml" = lib.mkIf (cfg.userMappingXml != null) { source = cfg.userMappingXml; };
67     systemd.services.guacamole-server = {
68       description = "Apache Guacamole server (guacd)";
69       wantedBy = [ "multi-user.target" ];
70       after = [ "network.target" ];
71       environment = {
72         HOME = "/run/guacamole-server";
73       } // cfg.extraEnvironment;
74       serviceConfig = {
75         ExecStart = "${lib.getExe cfg.package} -f -b ${cfg.host} -l ${toString cfg.port}";
76         RuntimeDirectory = "guacamole-server";
77         DynamicUser = true;
78         PrivateTmp = "yes";
79         Restart = "on-failure";
80       };
81     };
82   };