# This is a common user configuration.
{
	__findFile,
	config,
	const,
	lib,
	pkgs,
	util,
	...
} @args: let
	cfg = config.home.nixos;
	programs = import ./program args;
in {
	imports = (util.ls <user>);

	options.home.nixos = {
		enable = lib.mkEnableOption "the NixOS user setup.";
		users = lib.mkOption {
			default = [ ];
			type    = with lib.types; listOf attrs;
		};
	};

	config = lib.mkIf cfg.enable {
		home-manager = {
			backupFileExtension = "backup-" + pkgs.lib.readFile "${pkgs.runCommand "timestamp" { } "echo -n date '+%Y%m%d%H%M%S' > $out"}";
			users = builtins.foldl' (acc: user:
				acc // {
					${user.username} = {
						home = {
							inherit (const) stateVersion;
							inherit (user) username homeDirectory;
							file = import ./config args;
							sessionVariables = import ./variable args;

							# ISSUE: https://github.com/nix-community/home-manager/issues/5589
							extraActivationPath = with pkgs; [ openssh ];
						};
						xdg = import ./xdg { inherit (user) homeDirectory; };
						programs = with programs; core // desktop;
						dconf.settings = util.catSet (util.ls ./config/dconf) args;
					};
				}
			) { } cfg.users;
		};
	};
}