From 762b2b0a5c72f008f8f2a2f5b2882b618a0447f8 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Wed, 13 May 2026 15:38:41 -0500 Subject: build(deps): install pdftools so every project can edit PDFs poppler (pdftoppm/pdftotext) plus a dedicated Python venv at ~/.local/venvs/pdftools with pypdf, reportlab, and pillow. Every project session can now stamp checkboxes, dates, and text overlays onto flattened PDFs through that venv, without each project re-wiring the toolchain. The package name for poppler diverges across distros (poppler-utils on Debian/Ubuntu, poppler on Arch and Homebrew), so the install branch handles each manager inline rather than going through install_pkg. PDFTOOLS_VENV is overridable via env if a machine needs a different path. --- Makefile | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c0e27be..38d5151 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,7 @@ OPTIN_HOOKS := hooks/destructive-bash-confirm.py DEFAULT_HOOKS := $(filter-out $(OPTIN_HOOKS),$(HOOKS)) CLAUDE_CONFIG := $(wildcard .claude/*.json) $(wildcard .claude/.*.json) LANGUAGES := $(notdir $(wildcard languages/*)) +PDFTOOLS_VENV ?= $(HOME)/.local/venvs/pdftools # LANG is also the standard POSIX locale env var. Make inherits env vars into # its variable namespace, so $(LANG) would silently expand to "en_US.UTF-8" (or @@ -74,7 +75,7 @@ help: ## Show this help ##@ Dependencies -deps: ## Install required tools (claude, node, jq, fzf, ripgrep, emacs, playwright) +deps: ## Install required tools (claude, node, jq, fzf, ripgrep, emacs, playwright, pdftools) @echo "Checking dependencies..." @command -v claude >/dev/null 2>&1 && echo " claude: installed" || \ { echo " claude: installing via npm..."; npm install -g @anthropic-ai/claude-code; } @@ -99,6 +100,24 @@ deps: ## Install required tools (claude, node, jq, fzf, ripgrep, emacs, playwrig && uv run --quiet --with textstat python -c "" >/dev/null 2>&1 \ && echo " textstat: cached (scripts/readability)" \ || echo " textstat: skipped (uv missing or offline)" + @# pdftools: poppler (pdftoppm for coordinate-finding) plus a venv with + @# pypdf/reportlab/pillow for overlay/stamp edits on flattened PDFs — + @# the use case is court forms and the like with no AcroForm fields. + @command -v pdftoppm >/dev/null 2>&1 && echo " poppler: installed" || { \ + echo " poppler: installing..."; \ + if command -v brew >/dev/null 2>&1; then brew install poppler; \ + elif command -v apt-get >/dev/null 2>&1; then sudo apt-get install -y poppler-utils; \ + elif command -v pacman >/dev/null 2>&1; then sudo pacman -S --noconfirm poppler; \ + else echo " poppler: ERROR — no supported package manager (brew/apt-get/pacman)"; exit 1; \ + fi; \ + } + @if [ -d "$(PDFTOOLS_VENV)" ]; then \ + echo " pdftools: installed ($(PDFTOOLS_VENV))"; \ + else \ + echo " pdftools: creating venv + installing pypdf/reportlab/pillow..."; \ + python3 -m venv "$(PDFTOOLS_VENV)"; \ + "$(PDFTOOLS_VENV)/bin/pip" install --quiet --upgrade pip pypdf reportlab pillow; \ + fi @if [ -d "$(CURDIR)/playwright-js" ]; then \ if [ -d "$(CURDIR)/playwright-js/node_modules/playwright" ]; then \ echo " playwright (js): installed (skill node_modules present)"; \ -- cgit v1.2.3