{ description = "A Typst project"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; typix = { url = "github:loqusion/typix"; inputs.nixpkgs.follows = "nixpkgs"; }; flake-utils.url = "github:numtide/flake-utils"; # Example of downloading icons from a non-flake source # font-awesome = { # url = "github:FortAwesome/Font-Awesome"; # flake = false; # }; cl-dates = { url = "git+https://git.alandaniels.dev/aland/cl-dates.git"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = inputs @ { nixpkgs, typix, flake-utils, ... }: flake-utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; inherit (pkgs) lib; sbcl = pkgs.sbcl.withPackages (ps: [ ps.str ps.cl-heap ps.alexandria inputs.cl-dates.packages.x86_64-linux.default ]); typixLib = typix.lib.${system}; src = typixLib.cleanTypstSource ./.; commonArgs = { typstSource = "main.typ"; fontPaths = [ # Add paths to fonts here # "${pkgs.roboto}/share/fonts/truetype" ]; virtualPaths = [ # Add paths that must be locally accessible to typst here # { # dest = "icons"; # src = "${inputs.font-awesome}/svgs/regular"; # } ]; }; # Compile a Typst project, *without* copying the result # to the current directory build-drv = typixLib.buildTypstProject (commonArgs // { preBuild = '' ${sbcl}/bin/sbcl --script ${./cal.lisp} ''; inherit src; }); # Compile a Typst project, and then copy the result # to the current directory build-script = typixLib.buildTypstProjectLocal (commonArgs // { inherit src; }); # Watch a project and recompile on changes watch-script = typixLib.watchTypstProject commonArgs; in { checks = { inherit build-drv build-script watch-script; }; packages.default = build-drv; apps = rec { default = watch; build = flake-utils.lib.mkApp { drv = build-script; }; watch = flake-utils.lib.mkApp { drv = watch-script; }; }; devShells.default = typixLib.devShell { inherit (commonArgs) fontPaths virtualPaths; packages = [ # WARNING: Don't run `typst-build` directly, instead use `nix run .#build` # See https://github.com/loqusion/typix/issues/2 # build-script watch-script # More packages can be added here, like typstfmt # pkgs.typstfmt sbcl ]; }; }); }