{
  description = "Compiling work in 2024 in a reproducible manner";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";

    typix = {
      url = "github:loqusion/typix";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    flake-parts.url = "github:hercules-ci/flake-parts";

    typst-packages = {
      url = "github:typst/packages";
      flake = false;
    };

    zen-typ.url = "github:youwen5/zen.typ";

    # Example of downloading icons from a non-flake source
    # font-awesome = {
    #   url = "github:FortAwesome/Font-Awesome";
    #   flake = false;
    # };
  };

  outputs =
    inputs@{
      flake-parts,
      self,
      typix,
      typst-packages,
      ...
    }:
    flake-parts.lib.mkFlake { inherit inputs; } {
      systems = [
        "x86_64-linux"
        "aarch64-linux"
        "x86_64-darwin"
        "aarch64-darwin"
      ];
      flake = {
        hydraJobs = {
          legacyPackages."x86_64-linux" = self.legacyPackages."x86_64-linux";
        };
      };
      perSystem =
        {
          pkgs,
          system,
          ...
        }:
        let
          typstPackagesSrc = "${typst-packages}/packages";

          typstPackagesCache = pkgs.stdenv.mkDerivation {
            name = "typst-packages-cache";
            src = typstPackagesSrc;
            dontBuild = true;
            installPhase = ''
              mkdir -p "$out/typst/packages/youwen/zen/0.1.0"
              cp -LR --reflink=auto --no-preserve=mode -t "$out/typst/packages" "$src"/*
              cp -LR --reflink=auto --no-preserve=mode -t "$out/typst/packages/youwen/zen/0.1.0" "${inputs.zen-typ}/typst"/*
            '';
          };
          typixLib = typix.lib.${system};
        in
        let
          alexandriaLib = import ./nix/lib {
            inherit pkgs typixLib typstPackagesCache;
            flakeSelf = self;
          };

        in
        {
          legacyPackages = (
            (alexandriaLib.indexByName ./by-name) // (alexandriaLib.indexByCourse ./by-course)
          );
          # 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.typstyle
          #   ];
          # };
          formatter = pkgs.nixfmt-rfc-style;
        };
      # // {
    };
}