{nixpkgs-unstable, ...} @ inputs: let
  mkTree = inputs.tree-input.tree;
  metaTree = mkTree ((import ../treeConfig.nix {}) // {inherit inputs;});
  tree = metaTree.impure;

  patchedInputs =
    inputs
    // {
      # set these to the correct versions from inputs
      nixpkgs = inputs.nixpkgs-unstable;
      home-manager = inputs.home-manager-unstable;
    };

  defaultSpecialArgs = {
    tree = metaTree.impure;
    pureTree = metaTree.pure;
    inputs = patchedInputs;
  };

  defaultModules = [
    # NO_INLINE
    tree.profiles.base
    inputs.home-manager-unstable.nixosModules.home-manager
    inputs.gitlab_artifacts_sync.nixosModule

    inputs.nur.nixosModules.nur

    tree.modules.nixos.rclone-serve
    tree.modules.nixos.rclone-sync
    tree.modules.nixos.secrets
  ];

  nixosUnstableSystem = nixpkgs-unstable.lib.nixosSystem;
in {
  tablet = nixosUnstableSystem {
    specialArgs = defaultSpecialArgs;
    system = "x86_64-linux";
    modules = defaultModules ++ [./tablet/tablet.nix ./tablet/hardware.nix];
  };

  hetzner-vm = nixosUnstableSystem {
    specialArgs = defaultSpecialArgs;
    system = "x86_64-linux";
    modules = defaultModules ++ [./hetzner-vm/hetzner-vm.nix];
  };

  vault = nixosUnstableSystem {
    specialArgs = defaultSpecialArgs;
    system = "x86_64-linux";
    modules = defaultModules ++ [./vault/vault.nix];
  };

  buildbox = nixosUnstableSystem {
    specialArgs = defaultSpecialArgs;
    system = "x86_64-linux";
    modules = defaultModules ++ [./buildbox/buildbox.nix];
  };

  # nix build .#nixosConfigurations.nixos-live-x86_64.config.system.build.isoImage
  nixos-live-x86_64 = nixosUnstableSystem {
    specialArgs = defaultSpecialArgs;
    system = "x86_64-linux";
    modules = defaultModules ++ [./nixos-live/nixos-live.nix];
  };

  # nix --no-sandbox build .#nixosConfigurations.raspberry.config.system.build.sdImage
  raspberry = nixosUnstableSystem {
    specialArgs = defaultSpecialArgs;
    system = "aarch64-linux";
    modules = defaultModules ++ [./raspberry/raspberry.nix];
  };
}