diff --git a/example/default.nix b/example/default.nix index 914f0dc..9690262 100644 --- a/example/default.nix +++ b/example/default.nix @@ -6,6 +6,9 @@ with pkgs.lib; src = ./.; name = "example-presentation"; # reveal version can be changed with revealJS - # 3.5.0 is used by default + # 3.7.0 is used by default revealVersion = "3.4.0"; + extraPandocVariables = { + theme = "sky"; + }; } diff --git a/mkPresentation.nix b/mkPresentation.nix index 505a760..0f2b98e 100644 --- a/mkPresentation.nix +++ b/mkPresentation.nix @@ -4,31 +4,38 @@ pkgs , src , name -, revealVersion ? "3.5.0" +, revealVersion ? "3.7.0" +, selfContained ? false # extra dependencies - ,extraBuildInputs ? [] - # assets to include in the result packages, typically examples - ,assets ? [] +, extraBuildInputs ? [] +, extraPandocVariables ? {} }: + +with pkgs; +with pkgs.lib; + let revealJS = fetchTarball "https://github.com/hakimel/reveal.js/archive/${revealVersion}.tar.gz"; + + extraVars = vars: + builtins.concatStringsSep "" (mapAttrsToList (name: value: "--variable " + name + "=" + value) vars); in -pkgs.stdenv.mkDerivation rec { +stdenv.mkDerivation rec { inherit name src; preferLocalBuild = true; allowSubstitutes = false; # dependencies declaration - buildInputs = with pkgs; [ pandoc ] ++ extraBuildInputs; + buildInputs = [ pandoc ] ++ extraBuildInputs; installPhase = '' - mkdir $out for presentation in $(find . -name "*\.md"); do - id=$(basename $presentation ".md") - pandoc -t revealjs -s -o $out/"$id".html "$id".md + id="$(basename "$presentation" ".md")" + path="$(dirname "$presentation")" + mkdir -p "$out/$path" + pandoc --to=revealjs --variable revealjs-url=${revealJS} ${extraVars extraPandocVariables} --resource-path="$src/$path" --standalone ${optionalString selfContained "--self-contained"} --out="$out/$path/$id.html" "$presentation" done - ln -s ${revealJS} $out/reveal.js ''; } diff --git a/readme.md b/readme.md index bd606fe..a122f62 100644 --- a/readme.md +++ b/readme.md @@ -5,5 +5,9 @@ example slides are in example/presentation.md. Can be built by running: ```sh -$ nix-build example +$ nix-build --option build-use-sandbox false example ``` + +NOTE that `--option build-use-sandbox false` is required when using a +different theme than the default one and when `selfContained` is enabled +because Pandoc needs network access.