From 46f265557a987e4bba710b4b7edb66163e0b7c71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9ana=20=E6=B1=9F?= Date: Sun, 1 Feb 2026 16:50:16 +0100 Subject: [PATCH] package with cabal --- nix/packages/by-name/easyscan/.gitignore | 1 + nix/packages/by-name/easyscan/easyscan.sh | 61 ------------------- nix/packages/by-name/easyscan/package.nix | 23 +++---- .../easyscan/{easyscan.hs => src/Main.hs} | 11 +--- .../by-name/easyscan/src/easyscan.cabal | 24 ++++++++ 5 files changed, 35 insertions(+), 85 deletions(-) create mode 100644 nix/packages/by-name/easyscan/.gitignore delete mode 100644 nix/packages/by-name/easyscan/easyscan.sh rename nix/packages/by-name/easyscan/{easyscan.hs => src/Main.hs} (90%) create mode 100644 nix/packages/by-name/easyscan/src/easyscan.cabal diff --git a/nix/packages/by-name/easyscan/.gitignore b/nix/packages/by-name/easyscan/.gitignore new file mode 100644 index 00000000..c33954f5 --- /dev/null +++ b/nix/packages/by-name/easyscan/.gitignore @@ -0,0 +1 @@ +dist-newstyle/ diff --git a/nix/packages/by-name/easyscan/easyscan.sh b/nix/packages/by-name/easyscan/easyscan.sh deleted file mode 100644 index 633c7686..00000000 --- a/nix/packages/by-name/easyscan/easyscan.sh +++ /dev/null @@ -1,61 +0,0 @@ -# This is here because scanimage's batch mode is broken for my scanner - -OUTPUT_FILE="${1:-./scan_"$(date)".pdf}" - -if [ -e "$OUTPUT_FILE" ]; then - echo "$OUTPUT_FILE" already exists, you are probably making a mistake! - exit 1 -fi - -tempdir="$(mktemp -d)" -filenames=() -counter=1 - -function clean() { - # Make sure I don't remove things other than pdf - rm "$tempdir/"*.pdf - rm -d "$tempdir" -} -trap clean EXIT - -while :; do - ok="true" - echo "Scanning page $counter" - - CUR_FNAME="$tempdir/easyscan_$counter.pdf" - - # If no size is set, the output will be wonky-sized - # 210,297 is the size of A4 - scanimage -x 210 -y 297 --resolution 300 -o "$CUR_FNAME" >/dev/null 2>&1 || - { - echo "Failed to scan page..." - ok="false" - } - - if $ok; then - counter=$((counter += 1)) - filenames+=("$CUR_FNAME") - fi - - IFS= read -r -p "Continue scanning? [Y/n] " cont - case "$cont" in - [nN]) - echo "Exiting..." - break - ;; - [yY] | *) ;; - esac -done - -# Multiple files are scanned, join them -# -# Note: do NOT use the * glob, because bash orders lexicographically and not -# numerically, the merged ordering will be wrong. -merged_filename="$tempdir/easyscan_final.pdf" -pdfunite "${filenames[@]}" "$merged_filename" - -# Copy scan to current directory -mkdir -p "$(dirname "$OUTPUT_FILE")" -cp "$merged_filename" "$OUTPUT_FILE" - -clean diff --git a/nix/packages/by-name/easyscan/package.nix b/nix/packages/by-name/easyscan/package.nix index 3cd88e89..d1ab7854 100644 --- a/nix/packages/by-name/easyscan/package.nix +++ b/nix/packages/by-name/easyscan/package.nix @@ -1,19 +1,10 @@ { - writeShellApplication, - sane-backends, - poppler-utils, - fzf, - ghostscript, + haskellPackages, + haskell, }: -writeShellApplication { - name = "easyscan"; +let + inherit (haskell.lib.compose) justStaticExecutables; - runtimeInputs = [ - sane-backends - poppler-utils - fzf - ghostscript - ]; - - text = builtins.readFile ./easyscan.sh; -} + drv = haskellPackages.callCabal2nix "easyscan" ./src { }; +in +justStaticExecutables drv diff --git a/nix/packages/by-name/easyscan/easyscan.hs b/nix/packages/by-name/easyscan/src/Main.hs similarity index 90% rename from nix/packages/by-name/easyscan/easyscan.hs rename to nix/packages/by-name/easyscan/src/Main.hs index 614cb57a..7b82e8c3 100755 --- a/nix/packages/by-name/easyscan/easyscan.hs +++ b/nix/packages/by-name/easyscan/src/Main.hs @@ -5,20 +5,15 @@ import Control.Monad import Data.Char -import Data.List (dropWhileEnd) import System.Directory import System.Environment import System.Exit import System.FilePath -import System.Posix.Files import System.Posix.Temp import System.IO import System.Process -data ScanState = ScanState - { sExitCode :: Maybe ExitCode - , sNumbering :: Word - } +data ScanState = ScanState (Maybe ExitCode) Word defaultScanimageArgs :: [String] defaultScanimageArgs = @@ -54,14 +49,14 @@ main = do putStrLn "No file was scanned, exiting." exitWith (ExitFailure 1) else do - readProcessWithExitCodeTraced "pdfunite" (allFiles ++ [ mergedFilename ]) "" + () <$ readProcessWithExitCodeTraced "pdfunite" (allFiles ++ [ mergedFilename ]) "" copyFile mergedFilename targetFile removeDirectoryRecursive workingDir -- TODO: help page _ -> exitWith (ExitFailure 1) where - loop :: forall s. IO Bool -> (s -> IO s) -> s -> IO s + loop :: IO Bool -> (s -> IO s) -> s -> IO s loop cond action state0 = do x <- action state0 c <- cond diff --git a/nix/packages/by-name/easyscan/src/easyscan.cabal b/nix/packages/by-name/easyscan/src/easyscan.cabal new file mode 100644 index 00000000..e2d8734e --- /dev/null +++ b/nix/packages/by-name/easyscan/src/easyscan.cabal @@ -0,0 +1,24 @@ +cabal-version: 3.0 +name: easyscan +version: 0.1.0.0 +description: scanimage helper +author: Léana 江 +maintainer: leana.jiang+git@icloud.com +build-type: Simple + +common common + ghc-options: + -Wall -Wcompat -Widentities -Wincomplete-record-updates + -Wincomplete-patterns -Wincomplete-uni-patterns + -Wredundant-constraints -Werror=missing-fields + build-depends: base + default-language: Haskell2010 + +executable manage + import: common + main-is: ./Main.hs + build-depends: + , filepath + , directory + , process + , unix