{ description = "org-to-quartz: Convert org notes to Quartz-compatible markdown"; 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}; python = pkgs.python311; pythonPackages = python.pkgs; org-to-quartz = pythonPackages.buildPythonApplication { pname = "org-to-quartz"; version = "0.1.0"; format = "pyproject"; src = ./.; nativeBuildInputs = [ pythonPackages.setuptools pythonPackages.wheel ]; propagatedBuildInputs = [ pythonPackages.pybtex pythonPackages.requests pythonPackages.pyyaml pkgs.pandoc ]; # Make pandoc available at runtime makeWrapperArgs = [ "--prefix" "PATH" ":" "${pkgs.pandoc}/bin" ]; meta = { description = "Convert org notes to Quartz-compatible markdown"; mainProgram = "org-to-quartz"; }; }; # Script to serve quartz with converted notes quartz-serve = pkgs.writeShellScriptBin "quartz-serve" '' set -e NOTES_DIR="''${1:-.}" PORT="''${2:-8080}" WORK_DIR=$(mktemp -d) echo "Cloning Quartz..." ${pkgs.git}/bin/git clone --depth 1 https://github.com/jackyzha0/quartz.git "$WORK_DIR/quartz" 2>/dev/null echo "Installing dependencies..." cd "$WORK_DIR/quartz" ${pkgs.nodejs}/bin/npm install --silent echo "Converting org notes from $NOTES_DIR..." ${org-to-quartz}/bin/org-to-quartz "$NOTES_DIR" "$WORK_DIR/quartz/content" -v # Enable OxHugo plugin ${pkgs.gnused}/bin/sed -i 's/Plugin.GitHubFlavoredMarkdown()/Plugin.OxHugoFlavouredMarkdown(),\n Plugin.GitHubFlavoredMarkdown()/' quartz.config.ts echo "" echo "Starting Quartz on http://localhost:$PORT" ${pkgs.nodejs}/bin/npx quartz build --serve --port "$PORT" ''; in { packages = { default = org-to-quartz; org-to-quartz = org-to-quartz; }; devShells.default = pkgs.mkShell { buildInputs = [ python pythonPackages.pybtex pythonPackages.requests pythonPackages.pyyaml pythonPackages.pytest pkgs.pandoc pkgs.nodejs ]; }; apps = { default = { type = "app"; program = "${org-to-quartz}/bin/org-to-quartz"; }; serve = { type = "app"; program = "${quartz-serve}/bin/quartz-serve"; }; }; } ); }