vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / config / fanout.nix
blobf775d2e9f22d77ff62c5d30e3cc5ab04d64ba105
1 { config, lib, pkgs, ... }:
2 let
3   cfg = config.services.fanout;
4   mknodCmds = n: lib.lists.imap0 (i: s:
5     "mknod /dev/fanout${builtins.toString i} c $MAJOR ${builtins.toString i}"
6   ) (lib.lists.replicate n "");
7 in
9   options.services.fanout = {
10     enable = lib.mkEnableOption "fanout";
11     fanoutDevices = lib.mkOption {
12       type = lib.types.int;
13       default = 1;
14       description = "Number of /dev/fanout devices";
15     };
16     bufferSize = lib.mkOption {
17       type = lib.types.int;
18       default = 16384;
19       description = "Size of /dev/fanout buffer in bytes";
20     };
21   };
23   config = lib.mkIf cfg.enable {
24     boot.extraModulePackages = [ config.boot.kernelPackages.fanout.out ];
26     boot.kernelModules = [ "fanout" ];
28     boot.extraModprobeConfig = ''
29       options fanout buffersize=${builtins.toString cfg.bufferSize}
30     '';
32     systemd.services.fanout = {
33       description = "Bring up /dev/fanout devices";
34       script = ''
35         MAJOR=$(${pkgs.gnugrep}/bin/grep fanout /proc/devices | ${pkgs.gawk}/bin/awk '{print $1}')
36         ${lib.strings.concatLines (mknodCmds cfg.fanoutDevices)}
37       '';
39       wantedBy = [ "multi-user.target" ];
41       serviceConfig = {
42         Type = "oneshot";
43         User = "root";
44         RemainAfterExit = "yes";
45         Restart = "no";
46       };
47     };
48   };