diff options
Diffstat (limited to 'beamer/flake.nix')
-rw-r--r-- | beamer/flake.nix | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/beamer/flake.nix b/beamer/flake.nix new file mode 100644 index 0000000..3bfc9b3 --- /dev/null +++ b/beamer/flake.nix | |||
@@ -0,0 +1,105 @@ | |||
1 | { | ||
2 | description = "My epic presentation"; | ||
3 | |||
4 | inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; | ||
5 | inputs.beamertheme-metropolis = { | ||
6 | url = "github:matze/mtheme"; | ||
7 | flake = false; | ||
8 | }; | ||
9 | inputs.draculaTheme = { | ||
10 | url = "github:dracula/pygments"; | ||
11 | flake = false; | ||
12 | }; | ||
13 | |||
14 | outputs = { self, nixpkgs, beamertheme-metropolis, draculaTheme, }: | ||
15 | let | ||
16 | pkgs = nixpkgs.legacyPackages.x86_64-linux; | ||
17 | in | ||
18 | { | ||
19 | |||
20 | packages.x86_64-linux.pygments = pkgs.python3Packages.pygments.overrideAttrs (oldAttrs: { | ||
21 | postPatch = '' | ||
22 | cp ${draculaTheme}/dracula.py pygments/styles/ | ||
23 | sed -i 's/bg:.\+ //' pygments/styles/inkpot.py | ||
24 | ''; | ||
25 | }); | ||
26 | |||
27 | defaultPackage.x86_64-linux = | ||
28 | let | ||
29 | beamertheme-metropolis' = pkgs.stdenvNoCC.mkDerivation { | ||
30 | pname = "texlive-beamertheme-metropolis"; | ||
31 | version = "${builtins.substring 0 8 beamertheme-metropolis.lastModifiedDate}-${beamertheme-metropolis.shortRev or "dirty"}"; | ||
32 | |||
33 | src = beamertheme-metropolis; | ||
34 | |||
35 | outputs = [ "out" "doc" ]; | ||
36 | |||
37 | nativeBuildInputs = with pkgs; [ | ||
38 | (texlive.combine { | ||
39 | inherit (texlive) | ||
40 | scheme-small | ||
41 | enumitem | ||
42 | fileinfo | ||
43 | latexmk; | ||
44 | }) | ||
45 | ]; | ||
46 | |||
47 | passthru = { | ||
48 | pname = "beamertheme-metropolis"; | ||
49 | tlType = "run"; | ||
50 | }; | ||
51 | |||
52 | DESTDIR = placeholder "out"; | ||
53 | |||
54 | dontConfigure = true; | ||
55 | }; | ||
56 | in | ||
57 | pkgs.runCommand "slides" | ||
58 | { | ||
59 | src = ./.; | ||
60 | nativeBuildInputs = with pkgs; [ | ||
61 | pandoc | ||
62 | self.packages.x86_64-linux.pygments | ||
63 | fira-code | ||
64 | which | ||
65 | (texlive.combine { | ||
66 | inherit (texlive) | ||
67 | scheme-medium | ||
68 | latexmk | ||
69 | |||
70 | beamercolorthemeowl | ||
71 | |||
72 | fvextra pgfopts minted catchfile upquote xstring framed; | ||
73 | beamertheme-metropolis = { pkgs = [ beamertheme-metropolis' ]; }; | ||
74 | }) | ||
75 | ]; | ||
76 | |||
77 | FONTCONFIG_FILE = pkgs.makeFontsConf { | ||
78 | fontDirectories = with pkgs; [ lmodern freefont_ttf fira fira-code ]; | ||
79 | }; | ||
80 | } '' | ||
81 | unpackFile $src | ||
82 | cd */ | ||
83 | chmod -R u+w . | ||
84 | |||
85 | pandoc slides.md -t beamer -so slides.tex \ | ||
86 | --template=template.latex \ | ||
87 | --lua-filter=${pkgs.pandoc-lua-filters}/share/pandoc/filters/minted.lua \ | ||
88 | --pdf-engine=xelatex \ | ||
89 | --pdf-engine-opt=-aux-directory=./build \ | ||
90 | --pdf-engine-opt=-shell-escape | ||
91 | |||
92 | latexmk \ | ||
93 | -shell-escape \ | ||
94 | -xelatex \ | ||
95 | -8bit \ | ||
96 | -interaction=nonstopmode \ | ||
97 | -verbose \ | ||
98 | -file-line-error \ | ||
99 | -output-directory=./build slides | ||
100 | |||
101 | cp build/slides.pdf $out | ||
102 | ''; | ||
103 | # TODO: diagram-generator? | ||
104 | }; | ||
105 | } | ||