nix-configs

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

scan-to-pdf.nix (1613B)


      1 { pkgs, ... }:
      2 
      3 {
      4   environment.systemPackages = [
      5     (pkgs.writeShellScriptBin "scan-to-pdf" ''
      6 		set -e
      7 
      8 		# Default values
      9 		MODE="Gray"
     10 		SOURCE="ADF Front"
     11 
     12 		# Parse arguments in any order
     13 		for arg in "$@"; do
     14 		  case "$arg" in
     15 			color)
     16 			  MODE="Color"
     17 			  ;;
     18 			duplex)
     19 			  SOURCE="ADF Duplex"
     20 			  ;;
     21 			*)
     22 			  echo "Unknown argument: $arg"
     23 			  echo "Usage: scan-to-pdf [color] [duplex]"
     24 			  exit 1
     25 			  ;;
     26 		  esac
     27 		done
     28 
     29 		# Display scanning mode
     30 		if [ "$MODE" = "Color" ]; then
     31 		  echo "Scanning in color mode"
     32 		else
     33 		  echo "Scanning in greyscale, add 'color' argument to scan in full color"
     34 		fi
     35 
     36 		if [ "$SOURCE" = "ADF Duplex" ]; then
     37 		  echo "Scanning both sides (duplex mode)"
     38 		else
     39 		  echo "Scanning single-sided, add 'duplex' argument to scan both sides"
     40 		fi
     41 
     42 		OUTPUT="output-$(date +%Y%m%d-%H%M%S).pdf"
     43 		TMPDIR=$(mktemp -d)
     44 
     45 		cleanup() {
     46 		  rm -rf "$TMPDIR"
     47 		}
     48 		trap cleanup EXIT
     49 
     50 		echo "Scanning pages..."
     51 		if ! ${pkgs.sane-backends}/bin/scanimage --format=tiff --resolution 300 --mode "$MODE" \
     52 		  --batch="$TMPDIR/page%d.tiff" --source "$SOURCE"; then
     53 		  echo "Error: Scanning failed. Is there paper in the ADF?"
     54 		  exit 1
     55 		fi
     56 
     57 		if ! ls "$TMPDIR"/*.tiff 1> /dev/null 2>&1; then
     58 		  echo "Error: No pages were scanned."
     59 		  exit 1
     60 		fi
     61 
     62 		echo "Converting to PDF..."
     63 		${pkgs.imagemagick}/bin/magick "$TMPDIR"/*.tiff "$TMPDIR/combined.pdf"
     64 
     65 		echo "Running OCR..."
     66 		${pkgs.ocrmypdf}/bin/ocrmypdf --deskew --rotate-pages --rotate-pages-threshold 0.5 \
     67 		  --optimize 1 "$TMPDIR/combined.pdf" "$OUTPUT"
     68 
     69 		echo "Done! Output saved to: $OUTPUT"
     70     '')
     71   ];
     72 }