vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / networking / realm.nix
blob5b0c34ac825ff2349b57f24305db53bd6270d679
1 { config
2 , lib
3 , pkgs
4 , ...
5 }:
6 let
7   cfg = config.services.realm;
8   configFormat = pkgs.formats.json { };
9   configFile = configFormat.generate "config.json" cfg.config;
10   inherit (lib)
11     mkEnableOption mkPackageOption mkOption mkIf types getExe;
15   meta.maintainers = with lib.maintainers; [ ocfox ];
17   options = {
18     services.realm = {
19       enable = mkEnableOption "A simple, high performance relay server written in rust";
20       package = mkPackageOption pkgs "realm" { };
21       config = mkOption {
22         type = types.submodule {
23           freeformType = configFormat.type;
24         };
25         default = { };
26         description = ''
27           The realm configuration, see <https://github.com/zhboner/realm#overview> for documentation.
28         '';
29       };
30     };
31   };
33   config = mkIf cfg.enable {
34     systemd.services.realm = {
35       serviceConfig = {
36         DynamicUser = true;
37         MemoryDenyWriteExecute = true;
38         PrivateDevices = true;
39         ProtectClock = true;
40         ProtectKernelLogs = true;
41         ProtectKernelModules = true;
42         ProtectProc = "invisible";
43         ProtectKernelTunables = true;
44         ExecStart = "${getExe cfg.package} --config ${configFile}";
45         AmbientCapabilities = [ "CAP_NET_ADMIN" "CAP_NET_BIND_SERVICE" ];
46       };
47       wantedBy = [ "multi-user.target" ];
48     };
49   };