{ description = "Youwen Wu's CV"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; typix = { url = "github:loqusion/typix"; inputs.nixpkgs.follows = "nixpkgs"; }; flake-utils.url = "github:numtide/flake-utils"; font-awesome = { url = "github:FortAwesome/Font-Awesome"; flake = false; }; typst-packages = { url = "github:typst/packages"; flake = false; }; }; outputs = inputs@{ nixpkgs, typix, flake-utils, self, ... }: flake-utils.lib.eachDefaultSystem ( system: let pkgs = nixpkgs.legacyPackages.${system}; inherit (pkgs) lib; typixLib = typix.lib.${system}; src = typixLib.cleanTypstSource ./.; commonArgs = { typstSource = "cv.typ"; fontPaths = [ # Add paths to fonts here # "${pkgs.roboto}/share/fonts/truetype" "${inputs.font-awesome}/otfs" ]; virtualPaths = [ # Add paths that must be locally accessible to typst here { dest = "icons"; src = "${inputs.font-awesome}/svgs/regular"; } ]; typstOpts = { input = ''GIT_REV=${if (self ? rev) then self.rev else "GIT_UNSTABLE_DONT_USE"}''; }; }; typstPackagesSrc = "${inputs.typst-packages}/packages"; typstPackagesCache = pkgs.stdenvNoCC.mkDerivation { name = "typst-packages-cache"; src = typstPackagesSrc; dontBuild = true; installPhase = '' mkdir -p "$out/typst/packages" cp -LR --reflink=auto --no-preserve=mode -t "$out/typst/packages" "$src"/* ''; }; # Compile a Typst project, *without* copying the result # to the current directory build-drv = typixLib.buildTypstProject ( commonArgs // { inherit src; XDG_CACHE_HOME = typstPackagesCache; SOURCE_DATE_EPOCH = builtins.toString self.lastModified; } ); # Compile a Typst project, and then copy the result # to the current directory build-script = typixLib.buildTypstProjectLocal ( commonArgs // { inherit src; XDG_CACHE_HOME = typstPackagesCache; SOURCE_DATE_EPOCH = builtins.toString self.lastModified; preBuild = if (self ? rev) then '' echo ${self.rev} >> .rev '' else ""; } ); # 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 ]; }; } ); }