{
	pkgs,
	lib,
	...
}: let
	config = {
		background_update        = true;
		base_10_sizes            = true;
		check_temp               = true;
		clock_format             = "%X";
		color_theme              = "/usr/share/btop/themes/gruvbox_material_dark.theme";
		cpu_bottom               = false;
		cpu_core_map             = "";
		cpu_graph_lower          = "total";
		cpu_graph_upper          = "total";
		cpu_invert_lower         = true;
		cpu_sensor               = "Auto";
		cpu_single_graph         = false;
		custom_cpu_name          = "";
		custom_gpu_name0         = "";
		custom_gpu_name1         = "";
		custom_gpu_name2         = "";
		custom_gpu_name3         = "";
		custom_gpu_name4         = "";
		custom_gpu_name5         = "";
		disk_free_priv           = false;
		disks_filter             = "exclude = /boot /boot/efi";
		force_tty                = false;
		gpu_mirror_graph         = true;
		graph_symbol             = "braille";
		graph_symbol_cpu         = "default";
		graph_symbol_gpu         = "default";
		graph_symbol_mem         = "default";
		graph_symbol_net         = "default";
		graph_symbol_proc        = "default";
		io_graph_combined        = false;
		io_graph_speeds          = "";
		io_mode                  = false;
		log_level                = "WARNING";
		mem_below_net            = false;
		mem_graphs               = true;
		net_auto                 = true;
		net_download             = 100;
		net_iface                = "";
		net_sync                 = true;
		net_upload               = 100;
		nvml_measure_pcie_speeds = true;
		only_physical            = true;
		presets                  = "";
		proc_aggregate           = true;
		proc_colors              = true;
		proc_cpu_graphs          = true;
		proc_filter_kernel       = true;
		proc_gradient            = false;
		proc_info_smaps          = false;
		proc_left                = true;
		proc_mem_bytes           = true;
		proc_per_core            = true;
		proc_reversed            = false;
		proc_sorting             = "memory";
		proc_tree                = false;
		rounded_corners          = true;
		selected_battery         = "Auto";
		show_battery             = true;
		show_coretemp            = true;
		show_cpu_freq            = true;
		show_disks               = true;
		show_gpu_info            = "Auto";
		show_io_stat             = true;
		show_swap                = true;
		show_uptime              = true;
		shown_boxes              = "cpu mem net proc";
		swap_disk                = false;
		temp_scale               = "celsius";
		theme_background         = false;
		truecolor                = true;
		update_ms                = 2000;
		use_fstab                = true;
		vim_keys                 = true;
		zfs_arc_cached           = true;
		zfs_hide_datasets        = false;
	};

	mkOption = k: v: lib.generators.mkKeyValueDefault { } " = " k v;
in {
	file = pkgs.writeText "BtopConfig" (
		builtins.foldl' (acc: line: acc + "${line}\n") "" (
			lib.mapAttrsToList (k: v: let
					value = if builtins.isString v then
						"\"${v}\""
					else if builtins.isBool v then
						if v then "True" else "False"
					else
						v
					;
				in mkOption k value
			) config
		)
	);
}