lean-tui 1.1.1

Standalone TUI infoview for Lean 4 theorem prover
{
  nixConfig = {
    extra-substituters = [ "https://wvhulle.cachix.org" ];
    extra-trusted-public-keys = [ "wvhulle.cachix.org-1:heXx8DZMiRsKUx6l1TxNoF+Nmtmz66QEdsonQzc1ir0=" ];
  };

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    crane.url = "github:ipetkov/crane";
    rust-overlay = {
      url = "github:oxalica/rust-overlay";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    lean4-nix = {
      url = "github:lenianiva/lean4-nix";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    lean-prism.url = "git+https://codeberg.org/wvhulle/lean-prism?ref=main";
  };

  outputs =
    {
      nixpkgs,
      crane,
      rust-overlay,
      lean4-nix,
      lean-prism,
      ...
    }:
    let
      inherit (nixpkgs) lib;
      perSystem = lib.genAttrs [ "x86_64-linux" "aarch64-linux" ] (
        system:
        let
          pkgs = import nixpkgs {
            inherit system;
            overlays = [ (import rust-overlay) ];
          };
          toolchains = import ./nix/toolchains.nix { inherit pkgs crane; };
          lean-tui = import ./nix/package.nix {
            inherit (pkgs) lib;
            inherit (toolchains) craneLib;
            inherit lean-prism;
          };
          xtask = import ./nix/xtask.nix {
            inherit (toolchains) craneLib;
            inherit lean-tui;
          };
          xtaskTool = import ./nix/xtask-tool.nix { inherit pkgs xtask; };
        in
        {
          inherit pkgs toolchains lean-tui;
          checks = import ./nix/checks.nix {
            inherit (toolchains) craneLib rustfmtCrane;
            inherit pkgs lean-tui xtask;
          };
          release = import ./nix/release.nix {
            inherit (toolchains) nightlyWithTargets;
            inherit
              pkgs
              crane
              xtaskTool
              lean-tui
              ;
          };
          ci = import ./nix/ci.nix { inherit pkgs xtaskTool; };
          recordings = import ./recordings {
            inherit
              pkgs
              lean4-nix
              xtaskTool
              lean-tui
              ;
            lean-prism-server = lean-prism.packages.${system}.lean-prism;
          };
        }
      );
      mkApp = program: {
        type = "app";
        program = lib.getExe program;
      };
    in
    {
      packages = builtins.mapAttrs (
        _: system:
        {
          default = system.lean-tui;
          inherit (system) lean-tui;
          inherit (system.recordings) record-scene;
          recording-project = system.recordings.project;
          recordings = system.recordings.all;
          inherit (system.release) dist;
          x86_64-linux-musl = system.release.muslPackages.x86_64;
          aarch64-linux-musl = system.release.muslPackages.aarch64;
        }
        // lib.mapAttrs' (
          scene: recording: lib.nameValuePair "recording-${scene}" recording
        ) system.recordings.scenes
      ) perSystem;
      checks = builtins.mapAttrs (_: system: system.checks) perSystem;
      apps = builtins.mapAttrs (_: system: {
        release = mkApp system.release.release;
        release-pr = mkApp system.release.release-pr;
        upload-release-assets = mkApp system.release.upload-release-assets;
        cached-build = mkApp system.ci.cached-build;
        check-commits = mkApp system.ci.check-commits;
        publish-screenshots = mkApp system.recordings.publish-screenshots;
      }) perSystem;
      devShells = builtins.mapAttrs (_: system: {
        default = system.toolchains.devCrane.devShell {
          packages = [
            system.pkgs.elan
            system.pkgs.release-plz
            system.pkgs.convco
            system.pkgs.git-cliff
          ];
          MATHLIB_NO_CACHE_ON_UPDATE = "1";
          LEAN_DAG_SCHEMA = "${lean-prism}/protocol-schema.json";
        };
      }) perSystem;
    };
}