Initial commit
This commit is contained in:
commit
cf83801dd1
5 changed files with 110 additions and 0 deletions
1
.envrc
Normal file
1
.envrc
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
use flake
|
||||||
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
.direnv
|
||||||
|
GoCalTui
|
||||||
|
bin
|
||||||
|
result
|
||||||
|
data
|
||||||
27
flake.lock
generated
Normal file
27
flake.lock
generated
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1735563628,
|
||||||
|
"narHash": "sha256-OnSAY7XDSx7CtDoqNh8jwVwh4xNL/2HaJxGjryLWzX8=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "b134951a4c9f3c995fd7be05f3243f8ecd65d798",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-24.05",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
||||||
50
flake.nix
Normal file
50
flake.nix
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
# flake.nix
|
||||||
|
{
|
||||||
|
description = "Dev shell + runnable app for merge_pdfs.py";
|
||||||
|
|
||||||
|
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05";
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs }:
|
||||||
|
let
|
||||||
|
systems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
|
||||||
|
forEachSystem = f: nixpkgs.lib.genAttrs systems (system:
|
||||||
|
let
|
||||||
|
pkgs = import nixpkgs { inherit system; };
|
||||||
|
python = pkgs.python311.withPackages (ps: [ ps.pypdf2 ]);
|
||||||
|
# Small wrapper so `nix run` works: it uses the Python with PyPDF2 and your script.
|
||||||
|
merge-pdfs = pkgs.writeShellScriptBin "merge-pdfs" ''
|
||||||
|
exec ${python}/bin/python ${./merge_pdfs.py} "$@"
|
||||||
|
'';
|
||||||
|
in f pkgs python merge-pdfs
|
||||||
|
);
|
||||||
|
in {
|
||||||
|
devShells = forEachSystem (pkgs: python: merge-pdfs: {
|
||||||
|
default = pkgs.mkShell {
|
||||||
|
packages = [
|
||||||
|
python # Python 3.11 with PyPDF2
|
||||||
|
pkgs.ruff # optional: linter
|
||||||
|
pkgs.pyright # optional: type checker
|
||||||
|
];
|
||||||
|
shellHook = ''
|
||||||
|
echo "✅ Dev shell ready. Try:"
|
||||||
|
echo " python merge_pdfs.py output.pdf a.pdf b.pdf"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
# `nix run` makes it easy to use from anywhere:
|
||||||
|
apps = forEachSystem (pkgs: python: merge-pdfs: {
|
||||||
|
default = {
|
||||||
|
type = "app";
|
||||||
|
program = "${merge-pdfs}/bin/merge-pdfs";
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
# expose the tiny wrapper as a package if you want `nix build .#merge-pdfs`
|
||||||
|
packages = forEachSystem (pkgs: python: merge-pdfs: {
|
||||||
|
default = merge-pdfs;
|
||||||
|
merge-pdfs = merge-pdfs;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
27
merge_pdfs.py
Normal file
27
merge_pdfs.py
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import sys
|
||||||
|
from PyPDF2 import PdfMerger
|
||||||
|
|
||||||
|
def merge_pdfs(output_path, input_paths):
|
||||||
|
merger = PdfMerger()
|
||||||
|
for pdf in input_paths:
|
||||||
|
try:
|
||||||
|
merger.append(pdf)
|
||||||
|
print(f"Added: {pdf}")
|
||||||
|
except FileNotFoundError:
|
||||||
|
print(f"Error: File not found - {pdf}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error adding {pdf}: {e}")
|
||||||
|
merger.write(output_path)
|
||||||
|
merger.close()
|
||||||
|
print(f"Merged PDF saved as: {output_path}")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if len(sys.argv) < 4:
|
||||||
|
print("Usage: python merge_pdfs.py output.pdf file1.pdf file2.pdf [file3.pdf ...]")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
output_pdf = sys.argv[1]
|
||||||
|
input_pdfs = sys.argv[2:]
|
||||||
|
merge_pdfs(output_pdf, input_pdfs)
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue