{
  description = "My nix setup";
  inputs = {
    nixpkgs.url = github:nixos/nixpkgs/nixos-unstable;
    home-manager.url = github:nix-community/home-manager;
    hyprland.url = github:hyprwm/Hyprland;
    sops-nix.url = github:Mic92/sops-nix;
    nix-colors.url = github:Misterio77/nix-colors;
    hyprpaper.url = github:hyprwm/hyprpaper;

    home-manager.inputs.nixpkgs.follows = "nixpkgs";
    hyprland.inputs.nixpkgs.follows = "nixpkgs";
    hyprpaper.inputs.nixpkgs.follows = "nixpkgs";
    sops-nix.inputs.nixpkgs.follows = "nixpkgs";
  };

  outputs = { self, nixpkgs, home-manager, hyprland, hyprpaper, sops-nix, nix-colors }@attrs: {
    formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixpkgs-fmt;
    nixosConfigurations = {
      thinkpad = nixpkgs.lib.nixosSystem {
        system = "x86_64-linux";
        specialArgs.inputs = attrs;
        modules = [
          ./hosts/thinkpad
          ./users/rouven
          home-manager.nixosModules.home-manager
          sops-nix.nixosModules.sops
          {
            home-manager.extraSpecialArgs = attrs;
            home-manager.users.rouven = {
              imports = [
                nix-colors.homeManagerModule
                hyprland.homeManagerModules.default
              ];
              config = {
                colorScheme = nix-colors.colorSchemes.dracula;
              };
            };
          }
        ];
      };
      nuc = nixpkgs.lib.nixosSystem {
        system = "x86_64-linux";
        specialArgs.inputs = attrs;
        modules = [
          ./hosts/nuc
          sops-nix.nixosModules.sops
        ];
      };
    };
  };
}
