{
  inputs = {
    nixpkgs.url = "github:radvendii/nixpkgs/nixos_rebuild_tests";
    nixpkgs-latest.url = "github:nixos/nixpkgs";
    pixelfed = {
      url = "github:pixelfed/pixelfed?ref=v0.12.3";
      flake = false;
    };
    disko.url = "github:nix-community/disko";
  };

  outputs = { self, nixpkgs, nixpkgs-latest, pixelfed, disko }:
  let
    system = "x86_64-linux";
    lib = nixpkgs.lib;
    pkgs = nixpkgs.legacyPackages.${system};
    pkgsLatest = nixpkgs-latest.legacyPackages.${system};
    bleedingFediverseOverlay = (self: super: {
      pixelfed = pkgsLatest.pixelfed.overrideAttrs (old: {
        src = pixelfed;
        patches = (old.patches or [ ]) ++ [ ./fediversity/pixelfed-group-permissions.patch ];
      });
      ## TODO: give mastodon, peertube the same treatment
    });
  in {
    nixosModules = {
      ## Bleeding-edge fediverse packages
      bleedingFediverse = {
        nixpkgs.overlays = [ bleedingFediverseOverlay ];
      };
      ## Fediversity modules
      fediversity = import ./fediversity;

      ## VM-specific modules
      interactive-vm = import ./vm/interactive-vm.nix;
      garage-vm = import ./vm/garage-vm.nix;
      mastodon-vm = import ./vm/mastodon-vm.nix;
      peertube-vm = import ./vm/peertube-vm.nix;
      pixelfed-vm = import ./vm/pixelfed-vm.nix;

      disk-layout = import ./disk-layout.nix;
    };

    nixosConfigurations = {
      mastodon = nixpkgs.lib.nixosSystem {
        inherit system;
        modules = with self.nixosModules; [
          disko.nixosModules.default
          disk-layout
          bleedingFediverse
          fediversity
          interactive-vm
          garage-vm
          mastodon-vm
        ];
      };

      peertube = nixpkgs.lib.nixosSystem {
        inherit system;
        modules = with self.nixosModules; [
          disko.nixosModules.default
          disk-layout
          bleedingFediverse
          fediversity
          interactive-vm
          garage-vm
          peertube-vm
        ];
      };

      pixelfed = nixpkgs.lib.nixosSystem {
        inherit system;
        modules = with self.nixosModules; [
          disko.nixosModules.default
          disk-layout
          bleedingFediverse
          fediversity
          interactive-vm
          garage-vm
          pixelfed-vm
        ];
      };

      all = nixpkgs.lib.nixosSystem {
        inherit system;
        modules = with self.nixosModules; [
          disko.nixosModules.default
          disk-layout
          bleedingFediverse
          fediversity
          interactive-vm
          garage-vm
          peertube-vm
          pixelfed-vm
          mastodon-vm
        ];
      };
    };

    ## Fully-feature ISO installer
    mkInstaller = import ./installer.nix;
    installers = lib.mapAttrs (_: config: self.mkInstaller nixpkgs config) self.nixosConfigurations;

    deploy =
      let
        deployCommand = (pkgs.callPackage ./deploy.nix { });
      in
      lib.mapAttrs (name: config: deployCommand name config) self.nixosConfigurations;

    checks.${system} = {
      mastodon-garage = import ./tests/mastodon-garage.nix { inherit pkgs self; };
      pixelfed-garage = import ./tests/pixelfed-garage.nix { inherit pkgs self; };
    };

    devShells.${system}.default = pkgs.mkShell {
      inputs = with pkgs; [
        nil
      ];
    };
  };
}