{
  description = "Verteilte Anwedungen -- Solo Projekt";

  inputs = {
    flake-parts.url = "github:hercules-ci/flake-parts";
    nixpkgs.url = "github:NixOS/nixpkgs/9da7f1cf7f8a6e2a7cb3001b048546c92a8258b4";
  };

  outputs = inputs @ {
    flake-parts,
    self,
    ...
  }:
    flake-parts.lib.mkFlake {inherit inputs;} {
      imports = [];
      systems = ["x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86_64-darwin"];
      perSystem = {
        config,
        self',
        inputs',
        pkgs,
        system,
        ...
      }:
        with pkgs.lib; let
          latexPackages = with pkgs; [
            latexrun
            (texlive.withPackages
              (ps:
                with ps; [
                  amsmath
                  biber
                  biblatex
                  changepage
                  csquotes
                  enumitem
                  fontaxes
                  latexmk
                  listings
                  minted
                  newtx
                  newtxsf
                  newtxtt
                  scheme-medium
                  textpos
                  times
                  titlesec
                  transparent
                  upquote
                  tocloft
                  makecell
                  appendix
                  apa
                ]))
          ];
        in {
          # Per-system attributes can be defined here. The self' and inputs'
          # module parameters provide easy access to attributes of the same
          # system.
          packages = with pkgs; {
            default = stdenvNoCC.mkDerivation rec {
              name = "seriousgames-seminar";
              version = "1.0.0";
              src = ./.;
              buildInputs = latexPackages;
              buildPhase =
                # sh
                ''
                  cd .

                  build() {
                    latexmk \
                      -pdf \
                      -l -dir-report -file-line-error -verbose \
                      -interaction=nonstopmode \
                      "main.tex"
                  }

                  build || true
                  build
                '';
              installPhase =
                # sh
                ''
                  mkdir -p $out/share $out/log $out/artifacts
                  cp out/main.pdf "$out/share/seriousgames-telemetry.pdf"
                  cp out/*.log $out/log/
                  cp -r out/* $out/artifacts
                '';
            };
          };

          devShells.default = with pkgs;
            mkShell {
              nativeBuildInputs = [];
              packages = [mermaid-cli] ++ latexPackages;

              shellHook =
                # bash
                ''
                  export PATH="$PATH:bin/"
                '';
            };
        };
      flake = {
        # The usual flake attributes can be defined here, including system-
        # agnostic ones like nixosModule and system-enumerating ones, although
        # those are more easily expressed in perSystem.
      };
    };
}
