{
  description = "Master thesis - Decrypting the Overlay";

  inputs = {
    treefmt-nix.url = "github:qubasa/treefmt-nix";
    flake-parts.url = "github:hercules-ci/flake-parts";
    flake-parts.inputs.nixpkgs-lib.follows = "nixpkgs";
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
  };

  outputs =
    inputs@{ flake-parts, ... }:
    flake-parts.lib.mkFlake { inherit inputs; } {
      imports = [ ./treefmt.nix ];
      systems = [
        "x86_64-linux"
        "aarch64-linux"
      ];
      perSystem =
        {
          pkgs,
          ...
        }:
        let
          texlive = pkgs.texliveFull;
        in
        {
          packages.default = pkgs.stdenvNoCC.mkDerivation {
            pname = "master-thesis";
            version = "0.1.0";

            src = ./.;

            nativeBuildInputs = [
              texlive
              pkgs.inkscape
            ];

            buildPhase = ''
              export HOME=$(mktemp -d)
              latexmk -pdf -shell-escape -interaction=nonstopmode main.tex
            '';

            installPhase = ''
              mkdir -p $out
              cp main.pdf $out/
            '';
          };

          devShells.default = pkgs.mkShell {
            buildInputs = [
              pkgs.nodejs
              pkgs.vite
              texlive
              pkgs.pandoc
              pkgs.inkscape
              pkgs.python3
            ];
          };
        };
    };
}
