{ description = "paper — download papers by DOI and convert to markdown"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; flake-utils.url = "github:numtide/flake-utils"; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, flake-utils, rust-overlay }: flake-utils.lib.eachDefaultSystem (system: let overlays = [ (import rust-overlay) ]; pkgs = import nixpkgs { inherit system overlays; }; rust-nightly = pkgs.rust-bin.nightly.latest.default.override { extensions = [ "rust-src" "rust-analyzer" ]; }; marker = import ./nix/marker.nix { inherit pkgs; }; # Pre-download the font marker needs so it doesn't try to write # into the read-only nix store at runtime. marker-font = pkgs.fetchurl { url = "https://models.datalab.to/artifacts/GoNotoCurrent-Regular.ttf"; hash = "sha256-iCr7q5ZWCMLSvGJ/2AFrliqlpr4tNY+d4kp7WWfFYy4="; }; marker-font-dir = pkgs.runCommand "marker-font-dir" {} '' mkdir -p $out ln -s ${marker-font} $out/GoNotoCurrent-Regular.ttf ''; paper = pkgs.rustPlatform.buildRustPackage { pname = "paper"; version = "0.1.0"; src = pkgs.lib.cleanSource ./.; cargoLock.lockFile = ./Cargo.lock; }; # Wrap the paper binary so marker_single is on PATH paper-wrapped = pkgs.symlinkJoin { name = "paper-${paper.version}"; paths = [ paper ]; nativeBuildInputs = [ pkgs.makeWrapper ]; postBuild = '' wrapProgram $out/bin/paper \ --prefix PATH : ${pkgs.lib.makeBinPath [ marker.markerEnv pkgs.poppler-utils ]} \ --set FONT_DIR "${marker-font-dir}" \ --set FONT_PATH "${marker-font-dir}/GoNotoCurrent-Regular.ttf" ''; }; in { packages = { default = paper-wrapped; unwrapped = paper; }; devShells.default = pkgs.mkShell { buildInputs = [ rust-nightly marker.markerEnv pkgs.poppler-utils ]; }; }); }