{
    inputs = {
        nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
        home-manager = {
            url = "github:nix-community/home-manager";
            inputs.nixpkgs.follows = "nixpkgs";
        };
        nur.url = "github:nix-community/NUR";
        fzgo.url = "git+https://git.thomasave.be/thomasave/fzgo.git";
        ags.url = "github:aylur/ags";
        worktimer = {
            type = "git";
            url = "https://git.thomasave.be/thomasave/WorkTimer";
            ref = "cli";
        };
        nixos-06cb-009a-fingerprint-sensor = {
            url = "github:ahbnr/nixos-06cb-009a-fingerprint-sensor?ref=24.11";
            inputs.nixpkgs.follows = "nixpkgs";
        };
    };

    outputs = { nixpkgs, home-manager, nur, nixos-06cb-009a-fingerprint-sensor, ... }@inputs:
        let
            system = "x86_64-linux";
            pkgs = nixpkgs.legacyPackages.${system};
            commonModules = host: user: [
                ./hosts/${host}/hardware-configuration.nix
                { nixpkgs.overlays = [
                    nur.overlays.default
                    (self: super: { utillinux = super.util-linux; })
                    # (final: prev: {
                    #     sunshine = prev.sunshine.overrideAttrs (old: {
                    #         src = prev.fetchFromGitHub {
                    #             owner = "LizardByte";
                    #             repo = "Sunshine";
                    #             rev = "64544e7960f5141f71438d72e5dedad81c03729c";
                    #             hash = "sha256-gDLV9GQ7mbPj1t6Bm4NyS49p4eKc66uAyhG4KmhD+fM=";
                    #             fetchSubmodules = true;
                    #         };
                    #         preferLocalBuild = true;
                    #         allowSubstitutes = false;
                    #         version = "64544e7960f5141f71438d72e5dedad81c03729c";
                    #     });
                    # })
                ]; }
                {
                    networking.hostName = host;
                    time.timeZone = "Europe/Brussels";
                    nix.settings = {
                        substituters = [
                            "https://nix-community.cachix.org"
                            "https://cuda-maintainers.cachix.org"
                        ];
                        trusted-public-keys = [
                            "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
                            "cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E="
                        ];
                        experimental-features = [ "nix-command" "flakes" ];
                        trusted-users = [ "root" user ];
                        auto-optimise-store = true;
                    };
                    users.users.${user} = {
                        isNormalUser = true;
                        extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user.
                        openssh.authorizedKeys.keys = [
                            "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKAa3tMzSCRuprEACrBsKI0F/o73o6J9L1qR3TaZn/N8 user@Kell"
                            "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIByLwLAdJbmoDV5sx4hg5NbzKbOh1GmWEhDOUJ1GQBhK user@Riva"
                            "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBxMq4kubz4wWr4S8xU3GRkPcn6XRS3y7IP+qylN5QAp user@Aloria"
                            "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOAhFTJI49o+eS1kHs5XRrpCLLuhAE+JUCffusudyR88 user@Arendia"
                            "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHtzTFdvLEvXpv69qAWLTipl4hgsKgRrRrWJRecsFthG user@Arch"
                            "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOxtJRtlAphl8euicVUR/6C7o+tyhpYmcbMBLHnldEIX server@mallorea"
                            "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILazQU/Y9I5PkMZoG/Lzc6mDR7s+aRHzqJoFUhYSse4P PocoF1"
                            "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOetfiPyIQ8hbU4t87E0ZrgLqFW9YW09+MNNiusXwW0C user@Asturia"
                            "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFoUYcVMsDw6tmjfdOuQkwaXx8fohKJs/6/5HoLzTP6x Tablet"
                        ];
                        shell = pkgs.zsh;
                    };
                    system.stateVersion = "23.11";
                }
                home-manager.nixosModules.home-manager
                {
                    home-manager = {
                        extraSpecialArgs = { inherit inputs; };
                        useGlobalPkgs = true;
                        useUserPackages = true;
                        users.${user} = { imports = [ ./home/${host}.nix ]; };
                        backupFileExtension = "bak";
                    };
                }
                ./hosts/${host}
            ];
            mkSystem = host: cfg:
                nixpkgs.lib.nixosSystem {
                    system = cfg.system or "x86_64-linux";
                    modules = (commonModules host cfg.user) ++ (cfg.modules or [ ]);
                    specialArgs = inputs;
                };
            systems = {
                Riva = { user = "user"; };
                Kell = { user = "user"; };
                Aloria = { user = "user"; };
                Arendia = { user = "user"; modules = [
                    nixos-06cb-009a-fingerprint-sensor.nixosModules."06cb-009a-fingerprint-sensor"
                ];};
                Asturia = { user = "user"; };
            };
        in
            { nixosConfigurations = nixpkgs.lib.mapAttrs mkSystem systems; };
}