{ pkgs, inputs, const, style, util, key, setting, ... } @args: let
	homePath   = "/data/data/com.termux.nix/files/home";
	tmux       = import ./common/tmux/Init.nix args;
	tmuxScript = pkgs.writeShellScriptBin "tmux_script" tmux.script;
	bash       = import ./common/bash/Init.nix args;
	nvim       = import ./common/nvim/Init.nix args;
	ssh        = import ./common/ssh/Init.nix  args;
	font = pkgs.runCommandNoCC "font" {} ''
		cp ${pkgs.nerdfonts.override { fonts = [ "Terminus" ]; }}/share/fonts/truetype/NerdFonts/TerminessNerdFontMono-Regular.ttf $out
	'';
	colors = ''
		background=#${style.color.bg.dark}
		foreground=#${style.color.fg.light}
	'';
in {
	# NOTE: Split into modules?
	environment.packages = with pkgs; [
		android-tools
		binwalk
		coreutils
		curl
		diffutils
		ffmpeg
		file
		findutils
		gawk
		gcc
		gdu
		git
		gnugrep
		gnumake
		gnused
		gnutar
		gzip
		hostname
		imagemagick
		jq
		lsof
		man
		neofetch
		nmap
		openssh
		parallel
		pv
		ripgrep
		rsync
		sqlite
		pkgs.tmux tmuxScript
		tree
		utillinux
		wget
		xz
		yt-dlp
		zip unzip
	];

	time.timeZone = const.timeZone;
	nix.extraOptions = ''
		experimental-features = nix-command flakes
	'';

	home-manager.config = {
		home.stateVersion = const.droidStateVersion;
		home.file = {
			".dotfiles".source = inputs.self;
			".ssh/config".text = ssh.config;
			".termux/_font.ttf".source = font;
			".termux/_colors.properties".text = colors;
		};
		home.sessionVariables = {
			EDITOR               = "nvim";
			MANPAGER             = "nvim +Man!";
			NIXPKGS_ALLOW_UNFREE = "1";
			NIX_CURRENT_SYSTEM   = "${pkgs.stdenv.system}";
			TERM                 = "xterm-256color";
		};
		programs.bash = {
			enable = true;
			bashrcExtra = bash.config + ''
				[[ -f ~/.termux/font.ttf ]] || {
					cp ~/.termux/_font.ttf ~/.termux/font.ttf
					cp ~/.termux/_colors.properties ~/.termux/colors.properties
					_warn "Termux config installed, please restart."
				};
			'';
		};
		programs.tmux = {
			enable = true;
			extraConfig = tmux.config;
		};
		programs.git = {
			enable = true;
			extraConfig = {
				credential.helper    = "store";
				init.defaultBranch   = "main";
				pull.rebase          = true;
				push.autoSetupRemote = true;
				rebase.autoStash     = true;
			};
		};
		programs.neovim = {
			enable   = true;
			viAlias  = true;
			vimAlias = true;
			extraConfig = nvim.config;
		};
	};
}