{ description = "HdM Slides - Marp presentation builder with tools"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flake-utils }: flake-utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; # QR code generator script qr-gen = pkgs.writeShellScriptBin "qr" '' if [ -z "$1" ]; then echo "Usage: qr [output.png]" echo "" echo "Examples:" echo " qr https://example.com" echo " qr https://example.com my-qr.png" echo " qr 'https://librete.ch/hdm/223015b/' slides-qr.png" exit 1 fi URL="$1" OUTPUT="''${2:-qr-code.png}" ${pkgs.qrencode}/bin/qrencode -o "$OUTPUT" -s 10 -m 2 "$URL" echo "Generated: $OUTPUT" ''; # QR code for course slides qr-slides = pkgs.writeShellScriptBin "qr-slides" '' COURSE="''${1:-223015b}" OUTPUT="''${2:-build/$COURSE/qr-$COURSE.png}" mkdir -p "$(dirname "$OUTPUT")" ${pkgs.qrencode}/bin/qrencode -o "$OUTPUT" -s 10 -m 2 "https://librete.ch/hdm/$COURSE/" echo "Generated QR for $COURSE: $OUTPUT" ''; # Image optimizer script optimize-img = pkgs.writeShellScriptBin "optimize-img" '' if [ -z "$1" ]; then echo "Usage: optimize-img [max-width]" echo "" echo "Resizes images to max width (default: 1920px)" exit 1 fi TARGET="$1" MAX_WIDTH="''${2:-1920}" if [ -d "$TARGET" ]; then for img in "$TARGET"/*.{png,jpg,jpeg,webp} 2>/dev/null; do [ -f "$img" ] || continue echo "Optimizing: $(basename "$img")" ${pkgs.imagemagick}/bin/magick "$img" -resize "''${MAX_WIDTH}x>" -quality 85 "$img" done elif [ -f "$TARGET" ]; then echo "Optimizing: $TARGET" ${pkgs.imagemagick}/bin/magick "$TARGET" -resize "''${MAX_WIDTH}x>" -quality 85 "$TARGET" else echo "Error: $TARGET not found" exit 1 fi echo "Done!" ''; in { # Development shell with all tools devShells.default = pkgs.mkShell { buildInputs = with pkgs; [ nodejs_20 nodePackages.npm qrencode imagemagick gnumake ]; shellHook = '' echo "HdM Slides Development Environment" echo "" echo "Available commands:" echo " make dev-b - Start 223015b dev server (port 1312)" echo " make dev-c - Start 223015c dev server (port 1313)" echo " make build - Build all courses" echo " qr - Generate QR code" echo " qr-slides 223015b - Generate QR for course" echo " optimize-img - Optimize images" echo "" ''; }; # Standalone apps packages = { qr = qr-gen; qr-slides = qr-slides; optimize-img = optimize-img; default = qr-gen; }; # Direct runnable apps apps = { qr = { type = "app"; program = "${qr-gen}/bin/qr"; }; qr-slides = { type = "app"; program = "${qr-slides}/bin/qr-slides"; }; optimize-img = { type = "app"; program = "${optimize-img}/bin/optimize-img"; }; default = self.apps.${system}.qr; }; } ); }