{
  description = "Windows XP Theme flake";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";

    home-manager = {
      url = "github:nix-community/home-manager";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    nixos-generators = {
      url = "github:nix-community/nixos-generators";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs = { self, nixpkgs, ... }@inputs:
    let
      system = "x86_64-linux";
      pkgs = import nixpkgs { inherit system; };
      windows-theme = inputs.self;
    in
    {
      nixosConfigurations =
        {
          nixp = nixpkgs.lib.nixosSystem {
            inherit system;
            specialArgs = { inherit inputs system windows-theme; };
            modules = [
              ./hosts/configuration.nix
              self.nixosModules.default
              inputs.home-manager.nixosModules.home-manager
            ];
          };

          default = self.nixosConfigurations.nixp;
        };

      packages.${system} = {
        windows-xp-icons = pkgs.callPackage ./packages/windows-xp-icons.nix { };
        windows-xp-theme = pkgs.callPackage ./packages/windows-xp-theme.nix { };
        windows-xp-cursor = pkgs.callPackage ./packages/windows-xp-cursor.nix { };
        windows-xp-plymouth = pkgs.callPackage ./packages/windows-xp-plymouth.nix { };
        windows-xp-grub = pkgs.callPackage ./packages/windows-xp-grub.nix { };
        #windows-xp-login = pkgs.callPackage ./windows-xp-login.nix { };

        vm = inputs.nixos-generators.nixosGenerate {
          inherit system;
          specialArgs = { inherit inputs system windows-theme; };
          modules = [
            ./hosts/configuration.nix
            self.nixosModules.default
            inputs.home-manager.nixosModules.home-manager
          ];

          format = "vm";
        };

        install-iso = inputs.nixos-generators.nixosGenerate {
          inherit system;
          specialArgs = { inherit inputs system windows-theme; };
          modules = [
            ./hosts/configuration.nix
            self.nixosModules.default
            inputs.home-manager.nixosModules.home-manager
          ];

          format = "install-iso";
        };

        default = self.packages.${system}.vm;
      };

      nixosModules = {
        default = self.nixosModules.mate-xp-config;
        mate-xp-config = import ./modules/mate-xp-config.nix;
      };

      homeModules = {
        default = self.homeModules.mate-xp-home;
        mate-xp-home = import ./modules/mate-xp-home.nix;
      };
    };
}
