nix-configs

Personal NixOS and home-manager configuration files
Log | Files | Refs

tank-sort.nix (1941B)


      1 { pkgs, ... }:
      2 
      3 let
      4   media-sort = pkgs.callPackage ../common/media-sort.nix {};
      5 
      6   tank-sort = pkgs.writeShellScriptBin "tank-sort" ''
      7 	set -euo pipefail  # Exit on any error
      8 
      9 	# variables
     10 	temp_mount="$(mktemp -d)"
     11 	rclone_remote="seedbox:"
     12 	destination_tvshows="/tank/media/videos/television"
     13 	template_tvshows="{{ .Name }}/{{ .Name }} S{{ printf \"%02d\" .Season }}E{{ printf \"%02d\" .Episode }}{{ if ne .ExtraEpisode -1 }}-{{ printf \"%02d\" .ExtraEpisode }}{{end}}.{{ .Ext }}"
     14 	destination_movies="/tank/media/videos/movies"
     15 	template_movies="{{ .Name }} ({{ .Year }})/{{ .Name }}.{{ .Ext }}"
     16 
     17 	# Cleanup function
     18 	cleanup() {
     19 	  echo "Cleaning up..."
     20 	  if mountpoint -q "$temp_mount" 2>/dev/null; then
     21 		fusermount -uz "$temp_mount" 2>/dev/null || true
     22 	  fi
     23 	  if [ -d "$temp_mount" ]; then
     24 		rmdir "$temp_mount" 2>/dev/null || true
     25 	  fi
     26 	}
     27 	trap cleanup EXIT
     28 
     29 	# mount remote
     30 	echo "Mounting rclone remote..."
     31 	if ! ${pkgs.rclone}/bin/rclone mount "$rclone_remote" "$temp_mount" \
     32 		--vfs-cache-mode writes \
     33 		--daemon-timeout 10s \
     34 		--daemon; then
     35 	  echo "ERROR: Failed to mount rclone remote"
     36 	  exit 1
     37 	fi
     38 
     39 	# Wait for mount to be ready
     40 	echo "Waiting for mount to be ready..."
     41 	for i in {1..30}; do
     42 	  if mountpoint -q "$temp_mount" 2>/dev/null; then
     43 		echo "Mount is ready"
     44 		break
     45 	  fi
     46 	  if [ $i -eq 30 ]; then
     47 		echo "ERROR: Mount failed to become ready within 30 seconds"
     48 		exit 1
     49 	  fi
     50 	  sleep 1
     51 	done
     52 
     53 	# sorting process
     54 	echo "Starting media sort..."
     55 	${media-sort}/bin/media-sort \
     56 	  --action copy \
     57 	  --concurrency 1 \
     58 	  --accuracy-threshold 90 \
     59 	  --tv-dir "$destination_tvshows" \
     60 	  --movie-dir "$destination_movies" \
     61 	  --tv-template "$template_tvshows" \
     62 	  --movie-template "$template_movies" \
     63 	  --recursive \
     64 	  --overwrite-if-larger \
     65 	  --extensions "mp4,m4v,mkv" \
     66 	  "$temp_mount"
     67 
     68 	echo "Media sort completed successfully"
     69   '';
     70 in {
     71   environment.systemPackages = [tank-sort media-sort];
     72 }