{
  description = "Flake for mc rust proxy";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
    rust-overlay = {
      url = "github:oxalica/rust-overlay";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs = {
    self,
    nixpkgs,
    rust-overlay,
  }: let
    # rust-overlay = import rust-overlay;
    system = "x86_64-linux";
    pkgs =
      import nixpkgs
      {
        inherit system;
        overlays = [rust-overlay.overlays.default];
      };
  in {
    devShells.${system}.default = pkgs.mkShell {
      buildInputs = with pkgs; [
        rust-bin.nightly.latest.default
        rust-analyzer
      ];

      # shellHook = ''
      #   echo "Hello from nix dev shell"
      # '';
    };
    formatter.${system} = pkgs.alejandra;
    packages.${system}.default = pkgs.rustPlatform.buildRustPackage rec {
      pname = "webbisitey-${version}";
      version = "0.1.0";

      src = ./src/..;
      runtime = ./public;

      # Cargo cant download dependencies at build time, so this downloads them through nix
      cargoDeps = pkgs.rustPlatform.importCargoLock {
        lockFile = "${src}/Cargo.lock";
      };

      # we need rust to compile
      nativeBuildInputs = [
        pkgs.makeWrapper
        pkgs.rust-bin.nightly.latest.default
      ];

      # build the thing
      buildPhase = ''
        runHook preBuild
        cargo build -r
        mkdir -p $out/bin
        cp target/release/webbisitey $out/bin
        runHook postBuild
      '';

      # move the files
      installPhase = ''
        makeWrapper  $out/bin/webbisitey $out/bin/webbisitey-wrapped --run 'cd $(dirname $0)'; # im too lazy to add a path argument so cd into the correct folder so it can serve files.
        cp -r $runtime $out/bin/public
        substituteInPlace $out/bin/public/index.html --replace "{{{VERSION}}}" "Built $(date +%Y-%m-%d\ %H:%M:%S)"
      '';

      meta = {
        description = "Website server backend";
        license = pkgs.lib.licenses.mit;
        mainProgram = "webbisitey-wrapped"; # we want to run the wrapped version
      };
    };
  };
}
