Files
org-notes-quartz/flake.nix
Ignacio Ballesteros 3738d1d7d8 initial version
2026-02-14 09:09:54 +01:00

103 lines
2.9 KiB
Nix

{
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";
};
};
}
);
}