Add daily email for 07/04/25
This commit is contained in:
parent
a0d23ce355
commit
ad19947beb
1 changed files with 106 additions and 0 deletions
106
source/_daily_emails/2025-04-07.md
Normal file
106
source/_daily_emails/2025-04-07.md
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
---
|
||||||
|
title: Generating presentation slides with Nix and rst2pdf
|
||||||
|
date: 2025-04-07
|
||||||
|
permalink: daily/2025/04/07/nix-rst2pdf
|
||||||
|
tags:
|
||||||
|
- software-development
|
||||||
|
- linux
|
||||||
|
- nix
|
||||||
|
- rst2pdf
|
||||||
|
cta: ~
|
||||||
|
snippet: |
|
||||||
|
I've recently combined two of my favourite tools - rst2pdf for generating PDF documents, such as presentation slide decks, and Nix.
|
||||||
|
---
|
||||||
|
|
||||||
|
Since switching to Nix and NixOS, I've been looking for opportunities to use Nix more in addition to managing my laptop and server configurations and creating development shells for projects.
|
||||||
|
|
||||||
|
Nix is a build tool, so I've started to use it to build my slide decks which I create using rst2pdf.
|
||||||
|
|
||||||
|
I write the rst (reStructuredText) file and compile it to a PDF file.
|
||||||
|
|
||||||
|
I had a flake.nix file to add rst2pdf, pdfpc and other tools to my shell, but the compilation to a PDF file was done in a bash script which I've since removed.
|
||||||
|
|
||||||
|
Here's how my flake.nix file looks now:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
|
outputs = { nixpkgs, ... }:
|
||||||
|
let
|
||||||
|
system = "x86_64-linux";
|
||||||
|
pkgs = import nixpkgs { inherit system; };
|
||||||
|
|
||||||
|
inherit (nixpkgs.lib) makeOverridable;
|
||||||
|
inherit (pkgs.stdenvNoCC) mkDerivation;
|
||||||
|
|
||||||
|
shared = mkDerivation {
|
||||||
|
name = "talks-shared";
|
||||||
|
src = ./src;
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
mkdir $out
|
||||||
|
cp -r fonts styles $out
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
commonBuildInputs = with pkgs; [
|
||||||
|
(python310.withPackages (p: with p; [ rst2pdf ]))
|
||||||
|
];
|
||||||
|
|
||||||
|
mkTalk = makeOverridable ({ src }: mkDerivation {
|
||||||
|
inherit shared src;
|
||||||
|
|
||||||
|
name = builtins.head (builtins.attrNames talks);
|
||||||
|
|
||||||
|
buildInputs = commonBuildInputs;
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
runHook preBuild
|
||||||
|
|
||||||
|
mkdir $out
|
||||||
|
|
||||||
|
rst2pdf slides.rst \
|
||||||
|
--break-level 1 \
|
||||||
|
--fit-background-mode scale \
|
||||||
|
--font-path "${toString shared}/fonts" \
|
||||||
|
--output "$out/slides.pdf" \
|
||||||
|
--stylesheets bw,"${toString shared}/styles/opdavies-light"
|
||||||
|
|
||||||
|
runHook postBuild
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
|
||||||
|
talks = {
|
||||||
|
build-configs = mkTalk { src = ./src/building-build-configs; };
|
||||||
|
sculpin = mkTalk { src = ./src/building-static-websites-sculpin; };
|
||||||
|
tailwind-css = mkTalk { src = ./src/taking-flight-with-tailwind-css; };
|
||||||
|
test-driven-drupal = mkTalk { src = ./src/test-driven-drupal; };
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
devShells.${system}.default = with pkgs; mkShell {
|
||||||
|
packages = with pkgs; commonBuildInputs ++ [
|
||||||
|
ghostscript
|
||||||
|
just
|
||||||
|
pdfpc
|
||||||
|
texliveMedium # includes pdfjam
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
packages.${system} = {
|
||||||
|
inherit shared;
|
||||||
|
} // talks;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Each talk is its own derivation, so I can run `nix run .#test-driven-drupal` and it will generate the appropriate PDF file for me to present or share.
|
||||||
|
|
||||||
|
The source code is available at <https://code.oliverdavies.uk/opdavies/talks> if you want to see how I use rst2pdf to create my presentations and I've even [given a presentation about how I create presentations][0].
|
||||||
|
|
||||||
|
[0]: {{site.url}}/presentations/building-presenting-slide-decks-rst2pdf
|
Loading…
Add table
Add a link
Reference in a new issue