{
  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs =
    inputs:
    {
      overlays.default = final: prev: {
        # {{{ Odin
        odin = prev.odin.overrideAttrs (_: {
          version = "unstable-2025-03-28";
          src = final.fetchFromGitHub {
            owner = "starlitcanopy";
            repo = "Odin";
            rev = "a1fc243f8df8b510e6de4f5e115fbfc09371cb9d";
            sha256 = "0fb8lk47nb7ln0skjn3lyfi499q3wlnzp6w3qc4wf4s5zj43d6zh";
          };
        });
        # }}}
        # {{{ OLS
        ols = prev.ols.overrideAttrs (_: {
          version = "unstable-2025-03-12";
          src = final.fetchFromGitHub {
            owner = "DanielGavin";
            repo = "ols";
            rev = "1e44e3d78ad8a74ef09c7f54a6f6d3f7df517f8e";
            sha256 = "16f7b8ijcaj5m2bdgbbl1q1mzgpgzzazrap2g17hkgy63aqq8qmf";
          };

          installPhase = ''
            runHook preInstall

            install -Dm755 ols odinfmt -t $out/bin/
            cp      -r     builtin        $out/bin/
            wrapProgram $out/bin/ols --set-default ODIN_ROOT ${final.odin}/share

            runHook postInstall
          '';
        });
        # }}}
      };
    }
    // inputs.flake-utils.lib.eachSystem (with inputs.flake-utils.lib.system; [ x86_64-linux ]) (
      system:
      let
        pkgs = inputs.nixpkgs.legacyPackages.${system}.extend inputs.self.overlays.default;
        raylib = pkgs.raylib.override { platform = "SDL"; };
        inherit (pkgs) lib;
      in
      {
        packages = { inherit (pkgs) odin; };

        # {{{ Shell
        devShell = pkgs.mkShell rec {
          nativeBuildInputs = [
            pkgs.pkg-config
            pkgs.entr # File change detection
            pkgs.odin # Compiler
            pkgs.mold # Linker
            pkgs.just # Script runner
            pkgs.samply # Profiler
            pkgs.ols # Language server
            pkgs.gdb # Debugger
            pkgs.seer # Debugger GUI
            pkgs.valgrind # Detect memory leaks
          ];

          buildInputs = [
            # pkgs.libGL
            # pkgs.libxkbcommon
            # pkgs.xorg.libXi
            # pkgs.xorg.libX11
            # pkgs.xorg.libXrandr
            # pkgs.xorg.libXinerama
            # pkgs.xorg.libXcursor
            # pkgs.wayland
            pkgs.sdl3
          ];

          LD_LIBRARY_PATH = with pkgs; lib.makeLibraryPath buildInputs;
        };
        # }}}
      }
    );
}