forked from sile-typesetter/sile
-
Notifications
You must be signed in to change notification settings - Fork 0
/
flake.nix
160 lines (157 loc) · 5.54 KB
/
flake.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
{
description = "Simon’s Improved Layout Engine";
# To make user overrides of the nixpkgs flake not take effect
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
inputs.flake-utils.url = "github:numtide/flake-utils";
inputs.gitignore = {
url = "github:hercules-ci/gitignore.nix";
inputs.nixpkgs.follows = "nixpkgs";
};
# TODO: Should this be replaced with libtexpdf package from nixpkgs? or
# should we keep it that way, so that it'd be easy to test new versions
# of libtexpdf when developing?
inputs.libtexpdf-src = {
url = "github:sile-typesetter/libtexpdf";
flake = false;
};
# https://nixos.wiki/wiki/Flakes#Using_flakes_project_from_a_legacy_Nix
inputs.flake-compat = {
url = "github:edolstra/flake-compat";
flake = false;
};
outputs = { self
, nixpkgs
, flake-utils
, flake-compat
, gitignore
, libtexpdf-src
}:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
};
inherit (gitignore.lib) gitignoreSource;
# https://discourse.nixos.org/t/passing-git-commit-hash-and-tag-to-build-with-flakes/11355/2
version_rev = if (self ? rev) then (builtins.substring 0 7 self.rev) else "dirty";
# Prepare a different luaEnv to be used in the overridden expression,
# this is also the place to choose a different lua interpreter, such as
# lua5_4 or luajit
luaEnv = pkgs.lua5_3.withPackages(ps: with ps; [
cassowary
cldr
cosmo
fluent
linenoise
loadkit
lpeg
lua-zlib
lua_cliargs
luaepnf
luaexpat
luafilesystem
luarepl
luasec
luasocket
luautf8
penlight
vstruct
# lua packages needed for testing
busted
luacheck
# If we want to test things with lua5.2 or an even older lua, we uncomment these
#bit32
#compat53
]);
# Use the expression from Nixpkgs instead of rewriting it here.
sile = pkgs.sile.overrideAttrs(oldAttr: rec {
version = "${(pkgs.lib.importJSON ./package.json).version}-${version_rev}-flake";
src = pkgs.lib.cleanSourceWith {
# Ignore many files that gitignoreSource doesn't ignore, see:
# https://github.com/hercules-ci/gitignore.nix/issues/9#issuecomment-635458762
filter = path: type:
! (builtins.any (r: (builtins.match r (builtins.baseNameOf path)) != null) [
# Nix files
"flake.nix"
"flake.lock"
"default.nix"
"shell.nix"
# git commit and editing format files
".commitlintrc.yml"
"package.json"
".husky"
".editorconfig"
# CI files
".cirrus.yml"
".github"
"action.yml"
"azure-pipelines.yml"
"Dockerfile"
# Git files
".gitattributes"
".git"
]);
src = gitignoreSource ./.;
};
# Add the libtexpdf src instead of the git submodule.
# Also pretend to be a tarball release so sile --version will not say `vUNKNOWN`.
preAutoreconf = ''
rm -rf ./libtexpdf
# From some reason without this flag, libtexpdf/ is unwriteable
cp --no-preserve=mode -r ${libtexpdf-src} ./libtexpdf/
echo ${version} > .tarball-version
'';
# Don't build the manual as it's time consuming, and it requires fonts
# that are not available in the sandbox due to internet connection
# missing.
configureFlags = pkgs.lib.lists.remove "--with-manual" oldAttr.configureFlags;
nativeBuildInputs = oldAttr.nativeBuildInputs ++ [
pkgs.autoreconfHook
];
buildInputs = [
# Add here inputs needed for development, and not for Nixpkgs' build.
pkgs.libarchive
pkgs.perl
# This line, along with the `pkgs.list.drop 1` line afterwards,
# replaces the luaEnv originated in `oldAttr.buildInputs`.
luaEnv
] ++ (
# Add all buildInputs from Nixpkgs' derivation, besides the 1st
# one, which is Nixpkgs' luaEnv. NOTE it's not mandatory to `drop`
# the first buildInput of `oldAttr` as so, because the first `lua`
# interpreter that would have been found otherwise would have been
# the one belonging to the first `luaEnv` of the final
# `buildInputs`. However, we'd like to keep the `buildInputs` clean
# never the less.
pkgs.lib.lists.drop 1 oldAttr.buildInputs
);
meta = oldAttr.meta // {
changelog = "https://github.com/sile-typesetter/sile/raw/master/CHANGELOG.md";
};
});
in rec {
devShells = {
default = pkgs.mkShell {
inherit (sile) checkInputs buildInputs FONTCONFIG_FILE;
configureFlags = sile.configureFlags ++ [ "--enable-developer" ];
nativeBuildInputs = sile.nativeBuildInputs ++ [ pkgs.luarocks-nix ];
# This is written in Nixpkgs' expression as well, but we need to write
# this here so that the overridden luaEnv will be used instead.
passthru = {
inherit luaEnv;
};
};
};
packages.sile = sile;
defaultPackage = sile;
apps = rec {
default = sile;
sile = {
type = "app";
program = "${self.defaultPackage.${system}}/bin/sile";
};
};
defaultApp = apps.sile;
}
);
}