{
  inputs.nixpkgs.url = "nixpkgs";
  inputs.flake-utils.url = "github:numtide/flake-utils";
  inputs.deno-flake = {
    url = "path:./nix/deno-flake";
    inputs.nixpkgs.follows = "nixpkgs";
  };
  inputs.fenix = {
    url = "github:nix-community/fenix";
    inputs.nixpkgs.follows = "nixpkgs";
  };
  inputs.crane = {
    url = "github:ipetkov/crane";
    inputs.nixpkgs.follows = "nixpkgs";
  };


  outputs = i:
    i.flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = i.nixpkgs.legacyPackages.${system};
        pkgsDeno = i.deno-flake.packages.${system};
        pkgsFenix = i.fenix.packages.${system};
        minimal = pkgsFenix.minimal;
        complete = pkgsFenix.complete;
        stable = pkgsFenix.stable;
      in {
        devShells.default = pkgs.mkShell {
          packages = [
            pkgsDeno.deno-latest
            (pkgs.sqlite.override { interactive = true; })
            pkgs.unzip
            pkgs.entr
            pkgs.gnumake
            pkgs.fd

            (pkgsFenix.combine [
              (complete.withComponents [ "rust-src" "rust-analyzer" "rustfmt" "clippy" ])
              (minimal.withComponents [ "cargo" "rustc" "rust-std" ])
            ])

            pkgs.cargo-watch
          ];
        };
      });
}
