emby service: new service

+67
+2
nixos/modules/misc/ids.nix
··· 263 263 caddy = 239; 264 264 taskd = 240; 265 265 factorio = 241; 266 + emby = 242; 266 267 267 268 # When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399! 268 269 ··· 497 498 caddy = 239; 498 499 taskd = 240; 499 500 factorio = 241; 501 + emby = 242; 500 502 501 503 # When adding a gid, make sure it doesn't match an existing 502 504 # uid. Users and groups with the same name should have equal
+1
nixos/modules/module-list.nix
··· 216 216 ./services/misc/dictd.nix 217 217 ./services/misc/disnix.nix 218 218 ./services/misc/docker-registry.nix 219 + ./services/misc/emby.nix 219 220 ./services/misc/etcd.nix 220 221 ./services/misc/felix.nix 221 222 ./services/misc/folding-at-home.nix
+64
nixos/modules/services/misc/emby.nix
··· 1 + { config, pkgs, lib, mono, ... }: 2 + 3 + with lib; 4 + 5 + let 6 + cfg = config.services.emby; 7 + emby = pkgs.emby; 8 + in 9 + { 10 + options = { 11 + services.emby = { 12 + enable = mkEnableOption "Emby Media Server"; 13 + 14 + user = mkOption { 15 + type = types.str; 16 + default = "emby"; 17 + description = "User account under which Emby runs."; 18 + }; 19 + 20 + group = mkOption { 21 + type = types.str; 22 + default = "emby"; 23 + description = "Group under which emby runs."; 24 + }; 25 + }; 26 + }; 27 + 28 + config = mkIf cfg.enable { 29 + systemd.services.emby = { 30 + description = "Emby Media Server"; 31 + after = [ "network.target" ]; 32 + wantedBy = [ "multi-user.target" ]; 33 + preStart = '' 34 + test -d /var/lib/emby/ProgramData-Server || { 35 + echo "Creating initial Emby data directory in /var/lib/emby/ProgramData-Server" 36 + mkdir -p /var/lib/emby/ProgramData-Server 37 + chown -R ${cfg.user}:${cfg.group} /var/lib/emby/ProgramData-Server 38 + } 39 + ''; 40 + 41 + serviceConfig = { 42 + Type = "simple"; 43 + User = cfg.user; 44 + Group = cfg.group; 45 + PermissionsStartOnly = "true"; 46 + ExecStart = "${pkgs.mono}/bin/mono ${pkgs.emby}/bin/MediaBrowser.Server.Mono.exe"; 47 + Restart = "on-failure"; 48 + }; 49 + }; 50 + 51 + users.extraUsers = mkIf (cfg.user == "emby") { 52 + emby = { 53 + group = cfg.group; 54 + uid = config.ids.uids.emby; 55 + }; 56 + }; 57 + 58 + users.extraGroups = mkIf (cfg.group == "emby") { 59 + emby = { 60 + gid = config.ids.gids.emby; 61 + }; 62 + }; 63 + }; 64 + }