mirror of
https://codeberg.org/leana8959/.files.git
synced 2026-02-04 16:07:59 +00:00
package with cabal
This commit is contained in:
parent
81bb6fad24
commit
46f265557a
5 changed files with 35 additions and 85 deletions
1
nix/packages/by-name/easyscan/.gitignore
vendored
Normal file
1
nix/packages/by-name/easyscan/.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
dist-newstyle/
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -1,19 +1,10 @@
|
||||||
{
|
{
|
||||||
writeShellApplication,
|
haskellPackages,
|
||||||
sane-backends,
|
haskell,
|
||||||
poppler-utils,
|
|
||||||
fzf,
|
|
||||||
ghostscript,
|
|
||||||
}:
|
}:
|
||||||
writeShellApplication {
|
let
|
||||||
name = "easyscan";
|
inherit (haskell.lib.compose) justStaticExecutables;
|
||||||
|
|
||||||
runtimeInputs = [
|
drv = haskellPackages.callCabal2nix "easyscan" ./src { };
|
||||||
sane-backends
|
in
|
||||||
poppler-utils
|
justStaticExecutables drv
|
||||||
fzf
|
|
||||||
ghostscript
|
|
||||||
];
|
|
||||||
|
|
||||||
text = builtins.readFile ./easyscan.sh;
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -5,20 +5,15 @@
|
||||||
|
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import Data.Char
|
import Data.Char
|
||||||
import Data.List (dropWhileEnd)
|
|
||||||
import System.Directory
|
import System.Directory
|
||||||
import System.Environment
|
import System.Environment
|
||||||
import System.Exit
|
import System.Exit
|
||||||
import System.FilePath
|
import System.FilePath
|
||||||
import System.Posix.Files
|
|
||||||
import System.Posix.Temp
|
import System.Posix.Temp
|
||||||
import System.IO
|
import System.IO
|
||||||
import System.Process
|
import System.Process
|
||||||
|
|
||||||
data ScanState = ScanState
|
data ScanState = ScanState (Maybe ExitCode) Word
|
||||||
{ sExitCode :: Maybe ExitCode
|
|
||||||
, sNumbering :: Word
|
|
||||||
}
|
|
||||||
|
|
||||||
defaultScanimageArgs :: [String]
|
defaultScanimageArgs :: [String]
|
||||||
defaultScanimageArgs =
|
defaultScanimageArgs =
|
||||||
|
|
@ -54,14 +49,14 @@ main = do
|
||||||
putStrLn "No file was scanned, exiting."
|
putStrLn "No file was scanned, exiting."
|
||||||
exitWith (ExitFailure 1)
|
exitWith (ExitFailure 1)
|
||||||
else do
|
else do
|
||||||
readProcessWithExitCodeTraced "pdfunite" (allFiles ++ [ mergedFilename ]) ""
|
() <$ readProcessWithExitCodeTraced "pdfunite" (allFiles ++ [ mergedFilename ]) ""
|
||||||
copyFile mergedFilename targetFile
|
copyFile mergedFilename targetFile
|
||||||
removeDirectoryRecursive workingDir
|
removeDirectoryRecursive workingDir
|
||||||
|
|
||||||
-- TODO: help page
|
-- TODO: help page
|
||||||
_ -> exitWith (ExitFailure 1)
|
_ -> exitWith (ExitFailure 1)
|
||||||
where
|
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
|
loop cond action state0 = do
|
||||||
x <- action state0
|
x <- action state0
|
||||||
c <- cond
|
c <- cond
|
||||||
24
nix/packages/by-name/easyscan/src/easyscan.cabal
Normal file
24
nix/packages/by-name/easyscan/src/easyscan.cabal
Normal file
|
|
@ -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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue