at 23.11-pre 1.9 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 cfg = config.services.vdr; 7 libDir = "/var/lib/vdr"; 8in { 9 10 ###### interface 11 12 options = { 13 14 services.vdr = { 15 enable = mkEnableOption (lib.mdDoc "VDR. Please put config into ${libDir}"); 16 17 package = mkOption { 18 type = types.package; 19 default = pkgs.vdr; 20 defaultText = literalExpression "pkgs.vdr"; 21 example = literalExpression "pkgs.wrapVdr.override { plugins = with pkgs.vdrPlugins; [ hello ]; }"; 22 description = lib.mdDoc "Package to use."; 23 }; 24 25 videoDir = mkOption { 26 type = types.path; 27 default = "/srv/vdr/video"; 28 description = lib.mdDoc "Recording directory"; 29 }; 30 31 extraArguments = mkOption { 32 type = types.listOf types.str; 33 default = []; 34 description = lib.mdDoc "Additional command line arguments to pass to VDR."; 35 }; 36 37 enableLirc = mkEnableOption (lib.mdDoc "LIRC"); 38 }; 39 }; 40 41 ###### implementation 42 43 config = mkIf cfg.enable (mkMerge [{ 44 systemd.tmpfiles.rules = [ 45 "d ${cfg.videoDir} 0755 vdr vdr -" 46 "Z ${cfg.videoDir} - vdr vdr -" 47 ]; 48 49 systemd.services.vdr = { 50 description = "VDR"; 51 wantedBy = [ "multi-user.target" ]; 52 serviceConfig = { 53 ExecStart = '' 54 ${cfg.package}/bin/vdr \ 55 --video="${cfg.videoDir}" \ 56 --config="${libDir}" \ 57 ${escapeShellArgs cfg.extraArguments} 58 ''; 59 User = "vdr"; 60 CacheDirectory = "vdr"; 61 StateDirectory = "vdr"; 62 Restart = "on-failure"; 63 }; 64 }; 65 66 users.users.vdr = { 67 group = "vdr"; 68 home = libDir; 69 isSystemUser = true; 70 }; 71 72 users.groups.vdr = {}; 73 } 74 75 (mkIf cfg.enableLirc { 76 services.lirc.enable = true; 77 users.users.vdr.extraGroups = [ "lirc" ]; 78 services.vdr.extraArguments = [ 79 "--lirc=${config.passthru.lirc.socket}" 80 ]; 81 })]); 82}