diff --git a/hosts/fae/paperless.nix b/hosts/fae/paperless.nix index ce4fc447..9f94c33d 100644 --- a/hosts/fae/paperless.nix +++ b/hosts/fae/paperless.nix @@ -13,33 +13,6 @@ with lib; let backupDir = "${xdg.dataHome}/PaperlessBackup"; consumptionDir = "/home/${psCfg.user.name}/.local/share/scandir"; - scan2paperless = with pkgs; writeShellScriptBin "scan2paperless" '' - DEVICE=$1 - NUM_PAGES=$2 - NAME=$3 - - if [ -z "''${DEVICE}" ] || [ -z "''${NUM_PAGES}" ] || [ -z "''${NAME}" ]; then - echo "Usage: scan2paperless " - exit 1 - fi - - tmpDir=$(${coreutils}/bin/mktemp -d) - files=() - - for i in $(seq 1 $NUM_PAGES); do - fileName=$(${openssl}/bin/openssl rand -hex 12) - file="$tmpDir/$fileName.jpg" - echo "Start scanning page $i/$NUM_PAGES"; - ${sane-backends}/bin/scanimage -d $DEVICE --format=jpeg --resolution 300 --progress -o $file - echo "Finished scanning page $i"; - files+=($file) - done - - pdf="${consumptionDir}/$NAME.pdf" - ${python3Packages.img2pdf}/bin/img2pdf --output $pdf ''${files[@]} - - echo "PDF written to $pdf" - ''; in { services.paperless = { enable = true; @@ -60,11 +33,6 @@ in { #brscan5.enable = true; }; - users.users."${psCfg.user.name}".packages = with pkgs; [ - scan2paperless - python3Packages.img2pdf - ]; - home-manager.users."${psCfg.user.name}" = { home.sessionVariables = { SCANNER_OUTPUT_DIR = consumptionDir; diff --git a/pkgs/default.nix b/pkgs/default.nix index 2bb49d52..2187b152 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -13,6 +13,7 @@ with prev; { psos = writeShellScriptBin "psos" (import ./psos.nix final); psos-docs = import ./psos-docs.nix final; s = writeShellScriptBin "s" (import ./s.nix final); + scan2paperless = writeShellScriptBin "scan2paperless" (import ./scan2paperless.nix final); sway-launcher = writeScriptBin "sway-launcher" (import ./sway-launcher.nix final); swaylock-bg = writeShellScriptBin "swaylock-bg" (import ./swaylock-bg.nix final); toggle-kbd-layout = writeShellScriptBin "toggle-kbd-layout" (import ./toggle-kbd-layout.nix final); diff --git a/pkgs/scan2paperless.nix b/pkgs/scan2paperless.nix new file mode 100644 index 00000000..106ebf33 --- /dev/null +++ b/pkgs/scan2paperless.nix @@ -0,0 +1,59 @@ +self: +with self; '' + echo "$@" + DUPLEX=,Duplex + removeempty="true" + + [[ $1 == "-s" ]] && { + DUPLEX="" + removeempty=false + shift + } + + [[ $1 == "-a" ]] && { + DUPLEX=,Duplex + removeempty="true" + shift + } + + [[ $1 == "-d" ]] && { + DUPLEX=,Duplex + shift + } + + cleanup() { + echo finalizing pdf file. + ${img2pdf}/bin/img2pdf --pdfa --output /tmp/scan2paperless_$$.pdf /tmp/scan2paperless_$$_*.png && \ + rm -f /tmp/scan2paperless_$$_*.png + + scp /tmp/scan2paperless_$$.pdf pub-solar@paperless.faenix.eu:~/.local/share/scandir \ + && rm -f /tmp/scan2paperless_$$* \ + || echo upload failed, retaining file /tmp/scan2paperless_$$.pdf >&2 + } + + trap 'cleanup; exit 1' EXIT + + ${sane-backends}/bin/scanimage --device 'brother5:bus1;dev5' --format=png --resolution 300 --batch=/tmp/scan2paperless_$$_%d.png --AutoDeskew=yes --batch-start=10 --source="Automatic Document Feeder(left aligned''${DUPLEX})" -x 210 -y 297 + + if $removeempty + then + threshold=99 + images=( ) + values=( ) + for f in /tmp/scan2paperless_$$_*.png + do + images[''${#images[@]}]=$f + values[''${#values[@]}]=$(${imagemagick}/bin/convert "$f" -fuzz 02% -fill black +opaque white -fill white -opaque white -format "%[fx:100*mean]" info:) + done + + for ((i=0;i<''${#images[@]};i++)) + do + if [[ $(echo "''${values[i]} > $threshold" | ${bc}/bin/bc -l) == "1" ]] + then + # bc will output 1 if the comparison is true, 0 otherwise + echo image "''${images[i]}" was found to be mostly white, removing. + rm "''${images[i]}" + fi + done + fi +'' diff --git a/users/teutat3s/home.nix b/users/teutat3s/home.nix index 41df0be0..13ee1bea 100644 --- a/users/teutat3s/home.nix +++ b/users/teutat3s/home.nix @@ -80,6 +80,7 @@ in { age-plugin-yubikey #cockroach-bin obs-studio + scan2paperless wlvncc ]; programs.bash.initExtra = ''