forked from jan-leila/nix-config
		
	
		
			
				
	
	
		
			82 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| {
 | |
|   config,
 | |
|   lib,
 | |
|   pkgs,
 | |
|   ...
 | |
| }:
 | |
| with lib; let
 | |
|   cfg = config.services.filebot-cleanup;
 | |
| in {
 | |
|   options.services.filebot-cleanup = {
 | |
|     enable = mkEnableOption "Filebot cleanup service";
 | |
| 
 | |
|     licenseFile = mkOption {
 | |
|       type = types.nullOr types.path;
 | |
|       default = null;
 | |
|       description = "Path to the Filebot license file";
 | |
|     };
 | |
| 
 | |
|     cleanupDirectory = mkOption {
 | |
|       type = types.str;
 | |
|       default = "/srv/jellyfin/filebot_cleanup";
 | |
|       description = "Directory where cleaned up media files are stored";
 | |
|     };
 | |
|   };
 | |
| 
 | |
|   config = mkIf cfg.enable {
 | |
|     users.groups.filebot_cleanup = {};
 | |
|     users.users.filebot_cleanup = {
 | |
|       isSystemUser = true;
 | |
|       group = "filebot_cleanup";
 | |
|       extraGroups = ["jellyfin_media"];
 | |
|       home = cfg.cleanupDirectory;
 | |
|       createHome = true;
 | |
|     };
 | |
| 
 | |
|     nixpkgs.config.allowUnfreePredicate = pkg:
 | |
|       builtins.elem (lib.getName pkg) [
 | |
|         "filebot"
 | |
|       ];
 | |
| 
 | |
|     environment.systemPackages = with pkgs; [
 | |
|       filebot
 | |
|     ];
 | |
| 
 | |
|     systemd.services.filebot-cleanup = {
 | |
|       description = "Filebot media cleanup service";
 | |
|       serviceConfig = {
 | |
|         Type = "simple";
 | |
|         User = "filebot_cleanup";
 | |
|         Group = "filebot_cleanup";
 | |
|         ExecStart = pkgs.writeShellScript "filebot-cleanup" ''
 | |
|           ${optionalString (cfg.licenseFile != null) ''
 | |
|             ${pkgs.filebot}/bin/filebot --license "${cfg.licenseFile}"
 | |
|           ''}
 | |
|           ${pkgs.filebot}/bin/filebot -rename -r "/srv/jellyfin/media/Movies/" --output "${cfg.cleanupDirectory}/" --format "{jellyfin}" -non-strict --action move
 | |
|           ${pkgs.filebot}/bin/filebot -rename -r "/srv/jellyfin/media/Shows/" --output "${cfg.cleanupDirectory}/" --format "{jellyfin}" -non-strict --action move
 | |
|         '';
 | |
|         StandardOutput = "journal";
 | |
|         StandardError = "journal";
 | |
|       };
 | |
|       wantedBy = ["multi-user.target"];
 | |
|     };
 | |
| 
 | |
|     environment.persistence = lib.mkIf config.host.impermanence.enable {
 | |
|       "/persist/system/filebot_cleanup" = {
 | |
|         enable = true;
 | |
|         hideMounts = true;
 | |
|         files = [
 | |
|           cfg.licenseFile
 | |
|         ];
 | |
|         directories = [
 | |
|           {
 | |
|             directory = cfg.cleanupDirectory;
 | |
|             user = "filebot_cleanup";
 | |
|             group = "filebot_cleanup";
 | |
|             mode = "1770";
 | |
|           }
 | |
|         ];
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| }
 |