{
  description = "xeals's Nix repository";

  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 = import nixpkgs { inherit system; };
        in
        {
          packages = import ./pkgs/top-level { localSystem = system; inherit pkgs; };

          formatter = pkgs.writeShellScriptBin "nur-packages-fmt" ''
            ${pkgs.nixpkgs-fmt}/bin/nixpkgs-fmt .
            ${pkgs.deadnix}/bin/deadnix -e .
          '';

          checks = {
            # Ensures that the NUR bot can evaluate and find all our packages.
            # Normally we'd also run with `--option restrict-eval true`, but
            # this is incompatible with flakes because reasons.
            nur = pkgs.writeShellScriptBin "nur-check" ''
              # Prefer nixpkgs channel (actual build), otherwise read from flake.lock (CI)
              if ! nixpkgs=$(nix-instantiate --find-file nixpkgs 2>/dev/null); then
                _rev=$(${pkgs.jq}/bin/jq -r .nodes.nixpkgs.locked.rev flake.lock)
                nixpkgs="https://github.com/nixos/nixpkgs/archive/''${_rev}.tar.gz"
              fi
              nix-env -f . -qa \* --meta \
                --allowed-uris https://static.rust-lang.org \
                --option allow-import-from-derivation true \
                --drv-path --show-trace \
                -I nixpkgs="$nixpkgs" \
                -I ./ \
                --json | ${pkgs.jq}/bin/jq -r 'values | .[].name'
            '';
          };

          devShells.ci = pkgs.mkShellNoCC {
            buildInputs = [ pkgs.nix-build-uncached ];
          };
        })
    // {
      nixosModules = nixpkgs.lib.mapAttrs (_: path: import path) (import ./modules) // {
        default = {
          imports = nixpkgs.lib.attrValues self.nixosModules;
        };
      };

      overlays = import ./overlays // {
        pkgs = _: prev: import ./pkgs/top-level/all-packages.nix { pkgs = prev; };
        default = _: _: { xeals = nixpkgs.lib.composeExtensions self.overlays.pkgs; };
      };
    };
}