Skip to content

Commit 19a334b

Browse files
committed
tttool: add package 1.11, built from source
Uses haskell.packages.ghc9103.callCabal2nix with doJailbreak and a postPatch to fix three API incompatibilities with nixpkgs 26.05: - MonadFix removed from mtl 2.3 re-exports (GMEWriter.hs) - HPDF >= 1.5 changed PDFFont to require AnyFont (OidTable.hs) - HPDF >= 1.7 changed txt/author fields to Data.Text.Text (OidTable.hs)
1 parent 8562468 commit 19a334b

2 files changed

Lines changed: 47 additions & 0 deletions

File tree

flake.nix

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
sonnenbatterie-exporter = pkgs.callPackage ./pkgs/sonnenbatterie-exporter { };
104104
tod0 = pkgs.callPackage ./pkgs/tod0 { };
105105
tplink-switch-exporter = pkgs.callPackage ./pkgs/tplink-switch-exporter { };
106+
tttool = pkgs.callPackage ./pkgs/tttool { };
106107
tz-cli = pkgs.callPackage ./pkgs/tz-cli { };
107108
vim-markdown-composer = pkgs.callPackage ./pkgs/vim-markdown-composer { };
108109
yasdi = pkgs.callPackage ./pkgs/yasdi { };
@@ -233,6 +234,7 @@
233234
sonnenbatterie-exporter = pkgs.sonnenbatterie-exporter;
234235
tod0 = pkgs.tod0;
235236
tplink-switch-exporter = pkgs.tplink-switch-exporter;
237+
tttool = pkgs.tttool;
236238
tz-cli = pkgs.tz-cli;
237239
vim-markdown-composer = pkgs.vim-markdown-composer;
238240
yasdi = pkgs.yasdi;

pkgs/tttool/default.nix

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
{
2+
lib,
3+
haskell,
4+
fetchFromGitHub,
5+
}:
6+
let
7+
hpkgs = haskell.packages.ghc9103;
8+
9+
src = fetchFromGitHub {
10+
owner = "entropia";
11+
repo = "tip-toi-reveng";
12+
rev = "1.11";
13+
hash = "sha256-4IsSghGX8Pc3S2DamOFuDkd+twMBwpE1C3tGS6pBJNM=";
14+
};
15+
16+
tttool = haskell.lib.compose.doJailbreak (
17+
haskell.lib.overrideCabal (hpkgs.callCabal2nix "tttool" src { }) (_: {
18+
postPatch = ''
19+
# mtl >= 2.3: MonadFix no longer re-exported from Control.Monad.Writer.Lazy
20+
sed -i 's/import Control.Monad.Writer.Lazy/import Control.Monad.Fix\nimport Control.Monad.Writer.Lazy/' src/GMEWriter.hs
21+
22+
# HPDF >= 1.5: PDFFont takes AnyFont (not FontName); author field is Text.
23+
# Load the embedded Helvetica font once via unsafePerformIO (safe: constant data).
24+
sed -i 's/import Graphics.PDF$/import Graphics.PDF\nimport Graphics.PDF.Fonts.StandardFont (mkStdFont, FontName(..))\nimport Data.Text (pack)\nimport System.IO.Unsafe (unsafePerformIO)/' src/OidTable.hs
25+
sed -i 's/author=toPDFString \$/author=pack $/' src/OidTable.hs
26+
sed -i '/^import Types$/a \\n{-# NOINLINE helveticaFont #-}\nhelveticaFont :: AnyFont\nhelveticaFont = unsafePerformIO $ mkStdFont Helvetica >>= either (error . show) return' src/OidTable.hs
27+
sed -i 's/PDFFont Helvetica/PDFFont helveticaFont/g' src/OidTable.hs
28+
# HPDF >= 1.7: txt now takes Data.Text.Text instead of String
29+
sed -i 's/paragraph \$ txt title/paragraph $ txt (pack title)/' src/OidTable.hs
30+
sed -i 's/paragraph \$ txt \$ "Created by tttool-"/paragraph $ txt $ pack $ "Created by tttool-"/' src/OidTable.hs
31+
sed -i 's/paragraph \$ txt e$/paragraph $ txt (pack e)/' src/OidTable.hs
32+
sed -i 's/paragraph \$ txt \$ printf/paragraph $ txt $ pack $ printf/' src/OidTable.hs
33+
'';
34+
})
35+
);
36+
in
37+
(haskell.lib.compose.justStaticExecutables tttool).overrideAttrs (_: {
38+
meta = {
39+
description = "Tool to work with files for the Ravensburger TipToi pen";
40+
homepage = "https://github.com/entropia/tip-toi-reveng";
41+
license = lib.licenses.mit;
42+
mainProgram = "tttool";
43+
platforms = lib.platforms.unix;
44+
};
45+
})

0 commit comments

Comments
 (0)