diff --git a/.gitignore b/.gitignore index a136337..079dad0 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ *.pdf +__pycache__ diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..2155089 --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1758427187, + "narHash": "sha256-pHpxZ/IyCwoTQPtFIAG2QaxuSm8jWzrzBGjwQZIttJc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "554be6495561ff07b6c724047bdd7e0716aa7b46", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix index 917110b..ef747b6 100644 --- a/flake.nix +++ b/flake.nix @@ -7,14 +7,53 @@ nixpkgs, } @ inputs: let system = "x86_64-linux"; - pkgs = nixpkgs.legacyPackages."${system}"; + pkgs = import nixpkgs { + inherit system; + config.allowUnfree = true; + }; in { - packages."${system}".default = pkgs.writeShellApplication { - name = "hello_world"; + devShells.${system}.default = pkgs.mkShell { + packages = with pkgs; [ + python313 + python313Packages.flask + python313Packages.waitress + ]; - runtimeInputs = with pkgs; [sane-backends brscan5 ghostscript]; + shellHook = '' + python --version + exec zsh + ''; + }; + packages.${system} = let + scanbuddy = pkgs.writeShellApplication { + name = "scanbuddy-script"; - text = builtins.readFile ./scanbuddy.bash; + runtimeInputs = with pkgs; [sane-backends brscan5 ghostscript]; + + text = builtins.readFile ./scanbuddy.bash; + }; + wrapper = pkgs.writeShellApplication { + name = "scanbuddy-wrapper"; + + text = + /* + bash + */ + '' + #!/usr/bin/env bash + readarray -d '_' args < <(printf "%s" "$1") + + scanbuddy "''${args[@]}" + ''; + }; + package = pkgs.symlinkJoin { + name = "scanbuddy"; + paths = [scanbuddy wrapper]; + }; + in { + default = package; + inherit scanbuddy; + inherit wrapper; }; }; } diff --git a/scanbuddy.bash b/scanbuddy.bash index 54b57e0..0fd8e4c 100755 --- a/scanbuddy.bash +++ b/scanbuddy.bash @@ -103,9 +103,9 @@ case "$1" in "${PAPERLESS_URL}/api/documents/post_document/") || FAILED=1 if [ -v FAILED ]; then - echo "Paperless failed with message:\n$PAPERLESS_STATUS" + printf "Paperless failed with message:\n%s" "$PAPERLESS_STATUS" else - echo "Paperless consumption job: '$PAPERLESS_STATUS'" + printf "Paperless consumption job: %s\n" "$PAPERLESS_STATUS" fi ;; *) diff --git a/server.py b/server.py new file mode 100755 index 0000000..ba2632b --- /dev/null +++ b/server.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 + +# Run this stuff with `waitress-serve --port=5000 --call server:create_app` + +import os +import subprocess +from flask import Flask, request + +app = Flask(__name__) + +@app.route("/") +def hello_world(): + return "Hello, World! Yoyoyo" + +@app.route("/scan") +def scan(): + command = ["bash", f"{os.getcwd()}/scanbuddy.bash", "scan"] + + command += ["-d"] if (request.args.get("duplex", "n") == 'y') else [] + + result = subprocess.run(command, stdout=subprocess.PIPE, text=True) + output = result.stdout.strip() + + print("Scanbuddy output: ") + print(output) + + return output + # return f"Scanning {'duplex' if duplex == 'y' else ''}..." + +@app.route("/dispatch") +def dispatch(): + command = ["bash", f"{os.getcwd()}/scanbuddy.bash", "dispatch"] + user = request.args.get("user", "") + + result = subprocess.run(command, stdout=subprocess.PIPE, text=True) + output = result.stdout.strip() + + print("Scanbuddy output: ") + print(output) + + return "Dispatching..." + +@app.route("/unscan") +def unscan(): + return "Unscanning..." + +def create_app(): + return app + +if __name__=='__main__': + from waitress import serve + serve(app, host="0.0.0.0", port=8080)