{
  description = "A basic flake with a shell";
  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
  inputs.flake-utils.url = "github:numtide/flake-utils";

  outputs = { self, nixpkgs, flake-utils }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = nixpkgs.legacyPackages.${system};
      in
      {
        devShell = pkgs.mkShell {
          nativeBuildInputs = [ pkgs.bashInteractive ];
          buildInputs = with pkgs; [
            # building
            gcc
            cmake
            ninja
            sccache

            # dependencies
            qt6.full 
            libGL

            # presentation
            pandoc
            texlive.combined.scheme-full
            noto-fonts
            latexrun
            entr

            # pre-commit
            pre-commit
            commitizen
          ];

          shellHook = ''
            pre-commit install --allow-missing-config --hook-type pre-commit --hook-type commit-msg
          '';
        };
      }
    );
}
