129 lines
3.6 KiB
Nix
129 lines
3.6 KiB
Nix
{
|
|
inputs = {
|
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
|
|
|
crane = {
|
|
url = "github:ipetkov/crane";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
systems.url = "github:nix-systems/default";
|
|
};
|
|
|
|
outputs = inputs@{ flake-parts, crane, nixpkgs, self, ... }: flake-parts.lib.mkFlake { inherit inputs; } {
|
|
systems = import inputs.systems;
|
|
|
|
imports = [
|
|
inputs.flake-parts.flakeModules.easyOverlay
|
|
];
|
|
|
|
perSystem = { self', pkgs, lib, ... }:
|
|
let
|
|
# Generate the typst package for the given nixpkgs instance.
|
|
packageFor = pkgs:
|
|
let
|
|
inherit (lib)
|
|
importTOML
|
|
optionals
|
|
sourceByRegex
|
|
;
|
|
Cargo-toml = importTOML ./Cargo.toml;
|
|
|
|
pname = "typst";
|
|
version = Cargo-toml.workspace.package.version;
|
|
|
|
# Crane-based Nix flake configuration.
|
|
# Based on https://github.com/ipetkov/crane/blob/master/examples/trunk-workspace/flake.nix
|
|
craneLib = crane.mkLib pkgs;
|
|
|
|
# Typst files to include in the derivation.
|
|
# Here we include Rust files, docs and tests.
|
|
src = sourceByRegex ./. [
|
|
"(docs|crates|tests)(/.*)?"
|
|
''Cargo\.(toml|lock)''
|
|
''build\.rs''
|
|
];
|
|
|
|
# Typst derivation's args, used within crane's derivation generation
|
|
# functions.
|
|
commonCraneArgs = {
|
|
inherit src pname version;
|
|
|
|
buildInputs = (optionals pkgs.stdenv.isDarwin [
|
|
pkgs.darwin.apple_sdk.frameworks.CoreServices
|
|
pkgs.libiconv
|
|
]) ++ [
|
|
pkgs.openssl
|
|
];
|
|
|
|
nativeBuildInputs = [
|
|
pkgs.installShellFiles
|
|
pkgs.pkg-config
|
|
pkgs.openssl.dev
|
|
];
|
|
};
|
|
|
|
# Derivation with just the dependencies, so we don't have to keep
|
|
# re-building them.
|
|
cargoArtifacts = craneLib.buildDepsOnly commonCraneArgs;
|
|
in
|
|
craneLib.buildPackage (commonCraneArgs // {
|
|
inherit cargoArtifacts;
|
|
|
|
postInstall = ''
|
|
installManPage crates/typst-cli/artifacts/*.1
|
|
installShellCompletion \
|
|
crates/typst-cli/artifacts/typst.{bash,fish} \
|
|
--zsh crates/typst-cli/artifacts/_typst
|
|
'';
|
|
|
|
GEN_ARTIFACTS = "artifacts";
|
|
TYPST_VERSION =
|
|
let
|
|
rev = self.shortRev or "dirty";
|
|
version = (builtins.fromTOML (builtins.readFile ./Cargo.toml)).workspace.package.version;
|
|
in
|
|
"${version} (${rev})";
|
|
|
|
meta.mainProgram = "typst";
|
|
});
|
|
|
|
typst = packageFor pkgs;
|
|
in
|
|
{
|
|
formatter = pkgs.nixpkgs-fmt;
|
|
|
|
packages = {
|
|
default = typst;
|
|
typst-dev = self'.packages.default;
|
|
};
|
|
|
|
overlayAttrs = builtins.removeAttrs self'.packages [ "default" ];
|
|
|
|
apps.default = {
|
|
type = "app";
|
|
program = lib.getExe typst;
|
|
};
|
|
|
|
devShells.default = pkgs.mkShell {
|
|
packages = with pkgs; [
|
|
rustc
|
|
cargo
|
|
];
|
|
|
|
buildInputs = (lib.optionals pkgs.stdenv.isDarwin [
|
|
pkgs.darwin.apple_sdk.frameworks.CoreServices
|
|
pkgs.libiconv
|
|
]) ++ [
|
|
pkgs.openssl
|
|
];
|
|
|
|
nativeBuildInputs = [
|
|
pkgs.pkg-config
|
|
pkgs.openssl.dev
|
|
];
|
|
};
|
|
};
|
|
};
|
|
}
|