103 lines
2.9 KiB
Nix
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";
|
|
};
|
|
};
|
|
}
|
|
);
|
|
}
|