normcap: fix on GNOME wayland when used via keybind or alt-f2 (#351763)
[NixPkgs.git] / nixos / modules / services / networking / realm.nix
blob2eba0ed3149ff221d46bfe83bcbfaec0c5850fe5
2   config,
3   lib,
4   pkgs,
5   ...
6 }:
7 let
8   cfg = config.services.realm;
9   configFormat = pkgs.formats.json { };
10   configFile = configFormat.generate "config.json" cfg.config;
11   inherit (lib)
12     mkEnableOption
13     mkPackageOption
14     mkOption
15     mkIf
16     types
17     getExe
18     ;
22   meta.maintainers = with lib.maintainers; [ ocfox ];
24   options = {
25     services.realm = {
26       enable = mkEnableOption "A simple, high performance relay server written in rust";
27       package = mkPackageOption pkgs "realm" { };
28       config = mkOption {
29         type = types.submodule {
30           freeformType = configFormat.type;
31         };
32         default = { };
33         description = ''
34           The realm configuration, see <https://github.com/zhboner/realm#overview> for documentation.
35         '';
36       };
37     };
38   };
40   config = mkIf cfg.enable {
41     systemd.services.realm = {
42       serviceConfig = {
43         DynamicUser = true;
44         MemoryDenyWriteExecute = true;
45         PrivateDevices = true;
46         ProtectClock = true;
47         ProtectKernelLogs = true;
48         ProtectKernelModules = true;
49         ProtectProc = "invisible";
50         ProtectKernelTunables = true;
51         ExecStart = "${getExe cfg.package} --config ${configFile}";
52         AmbientCapabilities = [
53           "CAP_NET_ADMIN"
54           "CAP_NET_BIND_SERVICE"
55         ];
56       };
57       wantedBy = [ "multi-user.target" ];
58     };
59   };