# This is a common user configuration.
{ const
, homeDir
, key
, pkgs
, secret
, setting
, style
, username
, util
, ... } @args: let
	# Configuration modules.
	btop         = import ./top/btop     args;
	editorconfig = import ./editorconfig args;
	foot         = import ./foot         args;
	gtk3         = import ./gtk/3        args;
	htop         = import ./top/htop     args;
	keyd         = import ./keyd         args;
	mako         = import ./mako         args;
in {
	home-manager = {
		# If file exists, rename it with a new extension.
		backupFileExtension = "old";

		users.${username} = {
			home = {
				username      = username;
				homeDirectory = homeDir;
				stateVersion  = const.stateVersion;
				file = {
					".config/btop/btop.conf".text    = btop.config;
					".config/foot/foot.ini".text     = foot.config;
					".config/gtk-3.0/bookmarks".text = gtk3.bookmarks;
					".config/htop/htoprc".text       = htop.config;
					".config/keyd/app.conf".text     = keyd.config;
					".config/mako/config".text       = mako.config;
					".editorconfig".text             = editorconfig.config;
					".parallel/will-cite".text       = "";
					"media/template".source          = ./template;
				};
			};

			xdg.userDirs = {
				enable = true;
				createDirectories = true;
				desktop     = "${homeDir}/";
				documents   = "${homeDir}/document/";
				download    = "${homeDir}/download/";
				music       = "${homeDir}/media/music/";
				pictures    = "${homeDir}/media/picture/";
				publicShare = "${homeDir}/media/share/";
				templates   = "${homeDir}/media/template/";
				videos      = "${homeDir}/media/video/";
				extraConfig = {
					XDG_TMP_DIR = "${homeDir}/tmp/";
				};
			};

			programs = {
				home-manager.enable = true;
				gpg = {
					enable = true;
					publicKeys = secret.crypto.publicKeys;
				};
			};
		};
	};
}