diff --git a/.config/bat/config b/.config/bat/config
new file mode 100644
index 0000000..b2fe4f8
--- /dev/null
+++ b/.config/bat/config
@@ -0,0 +1 @@
+--theme="rose-pine-dawn"
diff --git a/.config/bat/themes/rose-pine-dawn.tmTheme b/.config/bat/themes/rose-pine-dawn.tmTheme
new file mode 100644
index 0000000..bf3f90e
--- /dev/null
+++ b/.config/bat/themes/rose-pine-dawn.tmTheme
@@ -0,0 +1,329 @@
+
+
+
+
+ name
+ Rosé Pine Dawn
+ settings
+
+
+ settings
+
+ background
+ #faf4ed
+ caret
+ #cecacd
+ foreground
+ #575279
+ invisibles
+ #fffaf3
+ lineHighlight
+ #f4ede8
+ selection
+ #dfdad9
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #797593
+
+
+
+ name
+ String
+ scope
+ string, punctuation.definition.string
+ settings
+
+ foreground
+ #ea9d34
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #ea9d34
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #ea9d34
+
+
+
+ name
+ User-defined constant
+ scope
+ constant.character, constant.other
+ settings
+
+ foreground
+ #ea9d34
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #575279
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #286983
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+
+ foreground
+ #56949f
+
+
+
+ name
+ Storage type
+ scope
+ storage.type
+ settings
+
+ fontStyle
+
+ foreground
+ #56949f
+
+
+
+ name
+ Class name
+ scope
+ entity.name.class, entity.name
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #286983
+
+
+
+ name
+ Headings
+ scope
+ markup.heading
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #d7827e
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #286983
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #d7827e
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+
+ foreground
+ #907aa9
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #286983
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ fontStyle
+
+ foreground
+ #907aa9
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #d7827e
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #ea9d34
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #56949f
+
+
+
+ name
+ Library variable
+ scope
+ support.other.variable
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #b4637a
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #b4637a
+ fontStyle
+
+ foreground
+ #575279
+
+
+
+ name
+ Invalid deprecated
+ scope
+ invalid.deprecated
+ settings
+
+ background
+ #907aa9
+ foreground
+ #575279
+
+
+
+ name
+ Punctuation, Operators
+ scope
+ punctuation, keyword.operator
+ settings
+
+ foreground
+ #797593
+
+
+
+ colorSpaceName
+ sRGB
+ semanticClass
+ theme.light.rose-pine-dawn
+ author
+ arrrgi
+ comment
+ All natural pine, faux fur and a bit of soho vibes for the classy minimalist
+ uuid
+ BB4B4616-E742-41D5-BB5B-63D45FA614F
+
+
diff --git a/.config/bat/themes/rose-pine-moon.tmTheme b/.config/bat/themes/rose-pine-moon.tmTheme
new file mode 100644
index 0000000..c5c939c
--- /dev/null
+++ b/.config/bat/themes/rose-pine-moon.tmTheme
@@ -0,0 +1,329 @@
+
+
+
+
+ name
+ Rosé Pine Moon
+ settings
+
+
+ settings
+
+ background
+ #232136
+ caret
+ #56526e
+ foreground
+ #e0def4
+ invisibles
+ #2a273f
+ lineHighlight
+ #2a283e
+ selection
+ #44415a
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #908caa
+
+
+
+ name
+ String
+ scope
+ string, punctuation.definition.string
+ settings
+
+ foreground
+ #f6c177
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #f6c177
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #f6c177
+
+
+
+ name
+ User-defined constant
+ scope
+ constant.character, constant.other
+ settings
+
+ foreground
+ #f6c177
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #e0def4
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #3e8fb0
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+
+ foreground
+ #9ccfd8
+
+
+
+ name
+ Storage type
+ scope
+ storage.type
+ settings
+
+ fontStyle
+
+ foreground
+ #9ccfd8
+
+
+
+ name
+ Class name
+ scope
+ entity.name.class, entity.name
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #3e8fb0
+
+
+
+ name
+ Headings
+ scope
+ markup.heading
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #ea9a97
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #3e8fb0
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #ea9a97
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+
+ foreground
+ #c4a7e7
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #3e8fb0
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ fontStyle
+
+ foreground
+ #c4a7e7
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #ea9a97
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #f6c177
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #9ccfd8
+
+
+
+ name
+ Library variable
+ scope
+ support.other.variable
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #eb6f92
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #eb6f92
+ fontStyle
+
+ foreground
+ #e0def4
+
+
+
+ name
+ Invalid deprecated
+ scope
+ invalid.deprecated
+ settings
+
+ background
+ #c4a7e7
+ foreground
+ #e0def4
+
+
+
+ name
+ Punctuation, Operators
+ scope
+ punctuation, keyword.operator
+ settings
+
+ foreground
+ #908caa
+
+
+
+ colorSpaceName
+ sRGB
+ semanticClass
+ theme.dark.rose-pine-moon
+ author
+ arrrgi
+ comment
+ All natural pine, faux fur and a bit of soho vibes for the classy minimalist
+ uuid
+ CC28B8FB-96BA-43EB-B71F-5AA3D3EBB0BB
+
+
diff --git a/.config/bat/themes/rose-pine.tmTheme b/.config/bat/themes/rose-pine.tmTheme
new file mode 100644
index 0000000..3be026c
--- /dev/null
+++ b/.config/bat/themes/rose-pine.tmTheme
@@ -0,0 +1,329 @@
+
+
+
+
+ name
+ Rosé Pine
+ settings
+
+
+ settings
+
+ background
+ #191724
+ caret
+ #524f67
+ foreground
+ #e0def4
+ invisibles
+ #1f1d2e
+ lineHighlight
+ #21202e
+ selection
+ #403d52
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #908caa
+
+
+
+ name
+ String
+ scope
+ string, punctuation.definition.string
+ settings
+
+ foreground
+ #f6c177
+
+
+
+ name
+ Number
+ scope
+ constant.numeric
+ settings
+
+ foreground
+ #f6c177
+
+
+
+ name
+ Built-in constant
+ scope
+ constant.language
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #f6c177
+
+
+
+ name
+ User-defined constant
+ scope
+ constant.character, constant.other
+ settings
+
+ foreground
+ #f6c177
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #e0def4
+
+
+
+ name
+ Keyword
+ scope
+ keyword
+ settings
+
+ foreground
+ #31748f
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+
+ foreground
+ #9ccfd8
+
+
+
+ name
+ Storage type
+ scope
+ storage.type
+ settings
+
+ fontStyle
+
+ foreground
+ #9ccfd8
+
+
+
+ name
+ Class name
+ scope
+ entity.name.class, entity.name
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #31748f
+
+
+
+ name
+ Headings
+ scope
+ markup.heading
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #ebbcba
+
+
+
+ name
+ Inherited class
+ scope
+ entity.other.inherited-class
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #31748f
+
+
+
+ name
+ Function name
+ scope
+ entity.name.function
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #ebbcba
+
+
+
+ name
+ Function argument
+ scope
+ variable.parameter
+ settings
+
+ fontStyle
+
+ foreground
+ #c4a7e7
+
+
+
+ name
+ Tag name
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #31748f
+
+
+
+ name
+ Tag attribute
+ scope
+ entity.other.attribute-name
+ settings
+
+ fontStyle
+
+ foreground
+ #c4a7e7
+
+
+
+ name
+ Library function
+ scope
+ support.function
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #ebbcba
+
+
+
+ name
+ Library constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #f6c177
+
+
+
+ name
+ Library class/type
+ scope
+ support.type, support.class
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #9ccfd8
+
+
+
+ name
+ Library variable
+ scope
+ support.other.variable
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #eb6f92
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #eb6f92
+ fontStyle
+
+ foreground
+ #e0def4
+
+
+
+ name
+ Invalid deprecated
+ scope
+ invalid.deprecated
+ settings
+
+ background
+ #c4a7e7
+ foreground
+ #e0def4
+
+
+
+ name
+ Punctuation, Operators
+ scope
+ punctuation, keyword.operator
+ settings
+
+ foreground
+ #908caa
+
+
+
+ colorSpaceName
+ sRGB
+ semanticClass
+ theme.dark.rose-pine
+ author
+ arrrgi
+ comment
+ All natural pine, faux fur and a bit of soho vibes for the classy minimalist
+ uuid
+ 14991673-80EB-41A2-BEFF-03216A233730
+
+
diff --git a/.config/btop/btop.conf b/.config/btop/btop.conf
new file mode 100644
index 0000000..3ae5b7b
--- /dev/null
+++ b/.config/btop/btop.conf
@@ -0,0 +1,286 @@
+#? Config file for btop v.1.4.7
+
+#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
+#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
+color_theme = "/home/geoff/.config/btop/themes/rose-pine-dawn.theme"
+
+#* If the theme set background should be shown, set to False if you want terminal background transparency.
+theme_background = false
+
+#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
+truecolor = true
+
+#* Set to true to force tty mode regardless if a real tty has been detected or not.
+#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
+force_tty = false
+
+#* Option to disable presets. Either the default preset, custom presets, or all presets.
+#* "Off" All presets are enabled.
+#* "Default" preset is disabled.#* "Custom" presets are disabled.#* "All" presets are disabled.
+disable_presets = "Off"
+
+#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
+#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
+#* Use whitespace " " as separator between different presets.
+#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
+presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
+
+#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
+#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
+vim_keys = false
+
+#* Disable all mouse events.
+disable_mouse = false
+
+#* Rounded corners on boxes, is ignored if TTY mode is ON.
+rounded_corners = true
+
+#* Use terminal synchronized output sequences to reduce flickering on supported terminals.
+terminal_sync = true
+
+#* Default symbols to use for graph creation, "braille", "block" or "tty".
+#* "braille" offers the highest resolution but might not be included in all fonts.
+#* "block" has half the resolution of braille but uses more common characters.
+#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
+#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
+graph_symbol = "block"
+
+# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
+graph_symbol_cpu = "default"
+
+# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty".
+graph_symbol_gpu = "default"
+
+# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
+graph_symbol_mem = "default"
+
+# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
+graph_symbol_net = "default"
+
+# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
+graph_symbol_proc = "default"
+
+#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
+shown_boxes = "proc net mem cpu gpu0"
+
+#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
+update_ms = 2000
+
+#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
+#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
+proc_sorting = "user"
+
+#* Reverse sorting order, True or False.
+proc_reversed = false
+
+#* Show processes as a tree.
+proc_tree = false
+
+#* Use the cpu graph colors in the process list.
+proc_colors = true
+
+#* Use a darkening gradient in the process list.
+proc_gradient = true
+
+#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
+proc_per_core = false
+
+#* Show process memory as bytes instead of percent.
+proc_mem_bytes = true
+
+#* Show cpu graph for each process.
+proc_cpu_graphs = true
+
+#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
+proc_info_smaps = false
+
+#* Show proc box on left side of screen instead of right.
+proc_left = false
+
+#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
+proc_filter_kernel = false
+
+#* Should the process list follow the selected process when detailed view is open.
+proc_follow_detailed = true
+
+#* In tree-view, always accumulate child process resources in the parent process.
+proc_aggregate = false
+
+#* Should cpu and memory usage display be preserved for dead processes when paused.
+keep_dead_proc_usage = false
+
+#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
+#* Select from a list of detected attributes from the options menu.
+cpu_graph_upper = "Auto"
+
+#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
+#* Select from a list of detected attributes from the options menu.
+cpu_graph_lower = "Auto"
+
+#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off".
+show_gpu_info = "Auto"
+
+#* Toggles if the lower CPU graph should be inverted.
+cpu_invert_lower = true
+
+#* Set to True to completely disable the lower CPU graph.
+cpu_single_graph = false
+
+#* Show cpu box at bottom of screen instead of top.
+cpu_bottom = false
+
+#* Shows the system uptime in the CPU box.
+show_uptime = true
+
+#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo.
+show_cpu_watts = true
+
+#* Show cpu temperature.
+check_temp = true
+
+#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
+cpu_sensor = "Auto"
+
+#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
+show_coretemp = true
+
+#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
+#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
+#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
+#* Example: "4:0 5:1 6:3"
+cpu_core_map = ""
+
+#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
+temp_scale = "celsius"
+
+#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
+base_10_sizes = false
+
+#* Show CPU frequency.
+show_cpu_freq = true
+
+#* How to calculate CPU frequency, available values: "first", "range", "lowest", "highest" and "average".
+freq_mode = "first"
+
+#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
+#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
+clock_format = "%X"
+
+#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
+background_update = true
+
+#* Custom cpu model name, empty string to disable.
+custom_cpu_name = ""
+
+#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
+#* Only disks matching the filter will be shown. Prepend exclude= to only show disks not matching the filter. Examples: disk_filter="/boot /home/user", disks_filter="exclude=/boot /home/user"
+disks_filter = ""
+
+#* Show graphs instead of meters for memory values.
+mem_graphs = true
+
+#* Show mem box below net box instead of above.
+mem_below_net = false
+
+#* Count ZFS ARC in cached and available memory.
+zfs_arc_cached = true
+
+#* If swap memory should be shown in memory box.
+show_swap = true
+
+#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
+swap_disk = true
+
+#* If mem box should be split to also show disks info.
+show_disks = true
+
+#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
+only_physical = true
+
+#* Read disks list from /etc/fstab. This also disables only_physical.
+use_fstab = true
+
+#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
+zfs_hide_datasets = false
+
+#* Set to true to show available disk space for privileged users.
+disk_free_priv = false
+
+#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
+show_io_stat = true
+
+#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
+io_mode = false
+
+#* Set to True to show combined read/write io graphs in io mode.
+io_graph_combined = false
+
+#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
+#* Example: "/mnt/media:100 /:20 /boot:1".
+io_graph_speeds = ""
+
+#* Swap the positions of the upload and download speed graphs. When true, upload will be on top.
+swap_upload_download = false
+
+#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
+net_download = 100
+
+net_upload = 100
+
+#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
+net_auto = true
+
+#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
+net_sync = true
+
+#* Starts with the Network Interface specified here.
+net_iface = ""
+
+#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes.
+base_10_bitrate = "Auto"
+
+#* Show battery stats in top right if battery is present.
+show_battery = true
+
+#* Which battery to use if multiple are present. "Auto" for auto detection.
+selected_battery = "Auto"
+
+#* Show power stats of battery next to charge indicator.
+show_battery_watts = true
+
+#* Set loglevel for "~/.local/state/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
+#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
+log_level = "WARNING"
+
+#* Automatically save current settings to config file on exit.
+save_config_on_exit = true
+
+#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
+nvml_measure_pcie_speeds = true
+
+#* Measure PCIe throughput on AMD cards, may impact performance on certain cards.
+rsmi_measure_pcie_speeds = true
+
+#* Horizontally mirror the GPU graph.
+gpu_mirror_graph = true
+
+#* Set which GPU vendors to show. Available values are "nvidia amd intel apple"
+shown_gpus = "nvidia amd intel"
+
+#* Custom gpu0 model name, empty string to disable.
+custom_gpu_name0 = "3080 ti"
+
+#* Custom gpu1 model name, empty string to disable.
+custom_gpu_name1 = ""
+
+#* Custom gpu2 model name, empty string to disable.
+custom_gpu_name2 = ""
+
+#* Custom gpu3 model name, empty string to disable.
+custom_gpu_name3 = ""
+
+#* Custom gpu4 model name, empty string to disable.
+custom_gpu_name4 = ""
+
+#* Custom gpu5 model name, empty string to disable.
+custom_gpu_name5 = ""
diff --git a/.config/btop/themes/rose-pine-dawn.theme b/.config/btop/themes/rose-pine-dawn.theme
new file mode 100644
index 0000000..4ff7da8
--- /dev/null
+++ b/.config/btop/themes/rose-pine-dawn.theme
@@ -0,0 +1,89 @@
+# Main background, empty for terminal default, need to be empty if you want transparent background
+theme[main_bg]="#faf4ed"
+
+# Main text color
+theme[main_fg]="#575279"
+
+# Title color for boxes
+theme[title]="#797593"
+
+# Highlight color for keyboard shortcuts
+theme[hi_fg]="#575279"
+
+# Background color of selected item in processes box
+theme[selected_bg]="#cecacd"
+
+# Foreground color of selected item in processes box
+theme[selected_fg]="#ea9d34"
+
+# Color of inactive/disabled text
+theme[inactive_fg]="#dfdad9"
+
+# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
+theme[graph_text]="#56949f"
+
+# Background color of the percentage meters
+theme[meter_bg]="#56949f"
+
+# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
+theme[proc_misc]="#907aa9"
+
+# Cpu box outline color
+theme[cpu_box]="#d7827e"
+
+# Memory/disks box outline color
+theme[mem_box]="#286983"
+
+# Net up/down box outline color
+theme[net_box]="#907aa9"
+
+# Processes box outline color
+theme[proc_box]="#b4637a"
+
+# Box divider line and small boxes line color
+theme[div_line]="#9893a5"
+
+# Temperature graph colors
+theme[temp_start]="#d7827e"
+theme[temp_mid]="#ea9d34"
+theme[temp_end]="#b4637a"
+
+# CPU graph colors
+theme[cpu_start]="#ea9d34"
+theme[cpu_mid]="#d7827e"
+theme[cpu_end]="#b4637a"
+
+# Mem/Disk free meter
+theme[free_start]="#b4637a"
+theme[free_mid]="#b4637a"
+theme[free_end]="#b4637a"
+
+# Mem/Disk cached meter
+theme[cached_start]="#907aa9"
+theme[cached_mid]="#907aa9"
+theme[cached_end]="#907aa9"
+
+# Mem/Disk available meter
+theme[available_start]="#286983"
+theme[available_mid]="#286983"
+theme[available_end]="#286983"
+
+# Mem/Disk used meter
+theme[used_start]="#d7827e"
+theme[used_mid]="#d7827e"
+theme[used_end]="#d7827e"
+
+# Download graph colors
+theme[download_start]="#286983"
+theme[download_mid]="#56949f"
+theme[download_end]="#56949f"
+
+# Upload graph colors
+theme[upload_start]="#d7827e"
+theme[upload_mid]="#b4637a"
+theme[upload_end]="#b4637a"
+
+# Process box color gradient for threads, mem and cpu usage
+theme[process_start]="#286983"
+theme[process_mid]="#56949f"
+theme[process_end]="#56949f"
diff --git a/.config/cava/config b/.config/cava/config
new file mode 100644
index 0000000..876a277
--- /dev/null
+++ b/.config/cava/config
@@ -0,0 +1,330 @@
+## Configuration file for CAVA.
+# Remove the ; to change parameters.
+
+
+[general]
+
+# Auto reload config if the configuration file has changed. 1 = on, 0 = off.
+; live-config = 0
+
+# Smoothing mode. Can be 'normal', 'scientific' or 'waves'. DEPRECATED as of 0.6.0
+; mode = normal
+
+# Accepts only non-negative values.
+; framerate = 60
+
+# 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off
+# new as of 0.6.0 autosens of low values (dynamic range)
+# 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens. DEPRECATED as of 0.6.0
+; autosens = 1
+; overshoot = 20
+
+# Manual sensitivity in %. If autosens is enabled, this will only be the initial value.
+# 200 means double height. Accepts only non-negative values.
+; sensitivity = 100
+
+# The number of bars (0-512). 0 sets it to auto (fill up console).
+# Bars' width and space between bars in number of characters.
+; bars = 0
+; bar_width = 2
+; bar_spacing = 1
+# bar_height is only used for output in "noritake" format
+; bar_height = 32
+
+# For SDL width and space between bars is in pixels, defaults are:
+; bar_width = 20
+; bar_spacing = 5
+
+# sdl_glsl have these default values, they are only used to calculate max number of bars.
+; bar_width = 1
+; bar_spacing = 0
+
+# ceter bars in terminal, if there is space.
+; center_align = 1
+
+# max height of bars in terminal, in percent of terminal height.
+; max_height = 100
+
+
+# Lower and higher cutoff frequencies for lowest and highest bars
+# the bandwidth of the visualizer.
+# Note: there is a minimum total bandwidth of 43Mhz x number of bars.
+# Cava will automatically increase the higher cutoff frequency if needed to satisfy the minimum bandwidth.
+; lower_cutoff_freq = 50
+; higher_cutoff_freq = 10000
+
+
+# Seconds with no input before cava goes to sleep mode. Cava will not perform FFT or drawing and
+# only check for input once per second. Cava will wake up once input is detected. 0 = disable.
+; sleep_timer = 0
+
+
+[input]
+
+# Audio capturing method. Possible methods are: 'fifo', 'portaudio', 'pipewire', 'alsa', 'pulse', 'sndio', 'oss', 'jack' or 'shmem'
+# Defaults to 'oss', 'pipewire', 'sndio', 'jack', 'pulse', 'alsa', 'portaudio' or 'fifo', in that order, dependent on what support cava was built with.
+# On Mac it defaults to 'portaudio' or 'fifo'
+# On windows this is automatic and no input settings are needed.
+#
+# All input methods uses the same config variable 'source'
+# to define where it should get the audio.
+#
+# For pulseaudio and pipewire 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink
+# (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them).
+#
+# For pipewire 'source' will be the object name or object.serial of the device to capture from.
+# Both input and output devices are supported. To capture the monitor source of a sink node, append '.monitor' to the sink's object name.
+#
+# For alsa 'source' will be the capture device.
+# For fifo 'source' will be the path to fifo-file.
+# For shmem 'source' will be /squeezelite-AA:BB:CC:DD:EE:FF where 'AA:BB:CC:DD:EE:FF' will be squeezelite's MAC address
+#
+# For sndio 'source' will be a raw recording audio descriptor or a monitoring sub-device, e.g. 'rsnd/2' or 'snd/1'. Default: 'default'.
+# README.md contains further information on how to setup CAVA for sndio.
+#
+# For oss 'source' will be the path to a audio device, e.g. '/dev/dsp2'. Default: '/dev/dsp', i.e. the default audio device.
+# README.md contains further information on how to setup CAVA for OSS on FreeBSD.
+#
+# For jack 'source' will be the name of the JACK server to connect to, e.g. 'foobar'. Default: 'default'.
+# README.md contains further information on how to setup CAVA for JACK.
+#
+; method = pulse
+; source = auto
+
+; method = pipewire
+; source = auto
+
+; method = alsa
+; source = hw:Loopback,1
+
+; method = fifo
+; source = /tmp/mpd.fifo
+
+; method = shmem
+; source = /squeezelite-AA:BB:CC:DD:EE:FF
+
+; method = portaudio
+; source = auto
+
+; method = sndio
+; source = default
+
+; method = oss
+; source = /dev/dsp
+
+; method = jack
+; source = default
+
+# The options 'sample_rate', 'sample_bits', 'channels' and 'autoconnect' can be configured for some input methods:
+# sample_rate: fifo, pipewire, sndio, oss
+# sample_bits: fifo, pipewire, sndio, oss
+# channels: sndio, oss, jack
+# autoconnect: jack
+# Other methods ignore these settings.
+# For pipewire, sample_rate will default to 48000, for all other input methods, sample_rate will default to 44100.
+#
+# For 'sndio' and 'oss' they are only preferred values, i.e. if the values are not supported
+# by the chosen audio device, the device will use other supported values instead.
+# Example: 48000, 32 and 2, but the device only supports 44100, 16 and 1, then it
+# will use 44100, 16 and 1.
+#
+#
+# The 'pipewire' input method has three options to control linking and mixing:
+# active: Force the node to always process. Useful for monitoring sources when no other application is active.
+# remix: Allow pipewire to remix audio channels to match cava's channel count. Useful for surround sound.
+# virtual: Set the node to virtual, to avoid recording notifications from the DE.
+#
+; sample_rate = 44100
+; sample_bits = 16
+; channels = 2
+; autoconnect = 2
+; active = 1
+; remix = 1
+; virtual = 1
+
+
+[output]
+
+# Output method. Can be 'ncurses', 'noncurses', 'raw', 'noritake', 'sdl'
+# or 'sdl_glsl'.
+# 'noncurses' (default) uses a buffer and cursor movements to only print
+# changes from frame to frame in the terminal. Uses less resources and is less
+# prone to tearing (vsync issues) than 'ncurses'.
+#
+# 'raw' is an 8 or 16 bit (configurable via the 'bit_format' option) data
+# stream of the bar heights that can be used to send to other applications.
+# 'raw' defaults to 1024 bars stereo (512 bars mono), which can be adjusted in the 'bars' option above.
+#
+# 'noritake' outputs a bitmap in the format expected by a Noritake VFD display
+# in graphic mode. It only support the 3000 series graphical VFDs for now.
+#
+# 'sdl' uses the Simple DirectMedia Layer to render in a graphical context.
+# 'sdl_glsl' uses SDL to create an OpenGL context. Write your own shaders or
+# use one of the predefined ones.
+; method = noncurses
+
+# Orientation of the visualization. Can be 'bottom', 'top', 'left', 'right' or
+# 'horizontal'. Default is 'bottom'. 'left and 'right' are only supported on sdl
+# and ncruses output. 'horizontal' (bars go up and down from center) is only supported
+# on noncurses output.
+# Note: many fonts have weird or missing glyphs for characters used in orientations
+# other than 'bottom', which can make output not look right.
+; orientation = bottom
+
+# Visual channels. Can be 'stereo' or 'mono'.
+# 'stereo' mirrors both channels with low frequencies in center.
+# 'mono' outputs left to right lowest to highest frequencies.
+# 'mono_option' set mono to either take input from 'left', 'right' or 'average'.
+# set 'reverse' to 1 to display frequencies the other way around.
+; channels = stereo
+; mono_option = average
+; reverse = 0
+
+# Only valid if orientation is set to 'horizontal'.
+# Set 'horizontal_stereo' to 1 to have left channel bars at top and right channel at bottom.
+# Set 'left_bottom' to 0 to have right channel at top and left channel at bottom.
+; horizontal_stereo = 0
+; left_bottom = 1
+
+# Raw output target.
+# On Linux, a fifo will be created if target does not exist.
+# On Windows, a named pipe will be created if target does not exist.
+; raw_target = /dev/stdout
+
+# Raw data format. Can be 'binary' or 'ascii'.
+; data_format = binary
+
+# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530).
+; bit_format = 16bit
+
+# Ascii max value. In 'ascii' mode range will run from 0 to value specified here
+; ascii_max_range = 1000
+
+# Ascii delimiters. In ascii format each bar and frame is separated by a delimiters.
+# Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)).
+; bar_delimiter = 59
+; frame_delimiter = 10
+
+# sdl window size and position. -1,-1 is centered.
+; sdl_width = 1024
+; sdl_height = 512
+; sdl_x = -1
+; sdl_y= -1
+; sdl_full_screen = 0
+
+# set label on bars on the x-axis. Can be 'frequency' or 'none'. Default: 'none'
+# 'frequency' displays the lower cut off frequency of the bar above.
+# Only supported on ncurses and noncurses output.
+; xaxis = none
+
+# enable synchronized sync. 1 = on, 0 = off
+# removes flickering in alacritty terminal emulator.
+# defaults to off since the behaviour in other terminal emulators is unknown
+; synchronized_sync = 0
+
+# Shaders for sdl_glsl, located in $HOME/.config/cava/shaders
+; vertex_shader = pass_through.vert
+; fragment_shader = bar_spectrum.frag
+
+; for glsl output mode, keep rendering even if no audio
+; continuous_rendering = 0
+
+# disable console blank (screen saver) in tty
+# (Not supported on FreeBSD)
+; disable_blanking = 0
+
+# show a flat bar at the bottom of the screen when idle, 1 = on, 0 = off
+; show_idle_bar_heads = 1
+
+# show waveform instead of frequency spectrum, 1 = on, 0 = off
+; waveform = 0
+
+[color]
+
+# Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow.
+# Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires
+# a terminal that can change color definitions such as Gnome-terminal or rxvt.
+# default is to keep current terminal color
+; background = default
+; foreground = default
+
+# SDL and sdl_glsl only support hex code colors, these are the default:
+; background = '#111111'
+; foreground = '#33ffff'
+
+
+# Gradient mode, only hex defined colors are supported,
+# background must also be defined in hex or remain commented out. 1 = on, 0 = off.
+# You can define as many as 8 different colors. They range from bottom to top of screen
+; gradient = 0
+; gradient_color_1 = '#59cc33'
+; gradient_color_2 = '#80cc33'
+; gradient_color_3 = '#a6cc33'
+; gradient_color_4 = '#cccc33'
+; gradient_color_5 = '#cca633'
+; gradient_color_6 = '#cc8033'
+; gradient_color_7 = '#cc5933'
+; gradient_color_8 = '#cc3333'
+
+
+# Horizontal is only supported on noncurses output.
+# Only one color will be calculated per bar.
+; horizontal_gradient = 0
+; horizontal_gradient_color_1 = '#c45161'
+; horizontal_gradient_color_2 = '#e094a0'
+; horizontal_gradient_color_3 = '#f2b6c0'
+; horizontal_gradient_color_4 = '#f2dde1'
+; horizontal_gradient_color_5 = '#cbc7d8'
+; horizontal_gradient_color_6 = '#8db7d2'
+; horizontal_gradient_color_7 = '#5e62a9'
+; horizontal_gradient_color_8 = '#434279'
+
+
+# If both vertical and horizontal gradient is enabled, vertical will be blended in this direction.
+# Can be 'up', 'down', 'left' or 'right'. 'up' means the vertical gradient will be blended in from
+# bottom to top. I.e. the bottom will be only the horizontal
+# and top will be only the color of the vertical gradient.
+; blend_direction = 'up'
+
+# use theme file instead of defining colors in this file
+# themes are located in $HOME/.config/cava/themes
+; theme = 'none'
+
+
+[smoothing]
+
+# Percentage value for integral smoothing. Takes values from 0 - 100.
+# Higher values means smoother, but less precise. 0 to disable.
+# DEPRECATED as of 0.8.0, use noise_reduction instead
+; integral = 77
+
+# Disables or enables the so-called "Monstercat smoothing" with or without "waves". Set to 0 to disable.
+; monstercat = 0
+; waves = 0
+
+# Set gravity percentage for "drop off". Higher values means bars will drop faster.
+# Accepts only non-negative values. 50 means half gravity, 200 means double. Set to 0 to disable "drop off".
+# DEPRECATED as of 0.8.0, use noise_reduction instead
+; gravity = 100
+
+
+# In bar height, bars that would have been lower that this will not be drawn.
+# DEPRECATED as of 0.8.0
+; ignore = 0
+
+# Noise reduction, int 0 - 100. default 77
+# the raw visualization is very noisy, this factor adjusts the integral and gravity filters to keep the signal smooth
+# 100 will be very slow and smooth, 0 will be fast but noisy.
+; noise_reduction = 77
+
+
+[eq]
+
+# This one is tricky. You can have as much keys as you want.
+# Remember to uncomment more than one key! More keys = more precision.
+# Look at readme.md on github for further explanations and examples.
+; 1 = 1 # bass
+; 2 = 1
+; 3 = 1 # midtone
+; 4 = 1
+; 5 = 1 # treble
diff --git a/.config/cava/shaders/bar_spectrum.frag b/.config/cava/shaders/bar_spectrum.frag
new file mode 100644
index 0000000..473301c
--- /dev/null
+++ b/.config/cava/shaders/bar_spectrum.frag
@@ -0,0 +1,73 @@
+#version 330
+
+in vec2 fragCoord;
+out vec4 fragColor;
+
+// bar values. defaults to left channels first (low to high), then right (high to low).
+uniform float bars[512];
+
+uniform int bars_count; // number of bars (left + right) (configurable)
+uniform int bar_width; // bar width (configurable), not used here
+uniform int bar_spacing; // space between bars (configurable)
+
+uniform vec3 u_resolution; // window resolution
+
+// colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
+uniform vec3 bg_color; // background color
+uniform vec3 fg_color; // foreground color
+
+uniform int gradient_count;
+uniform vec3 gradient_colors[8]; // gradient colors
+
+uniform float shader_time; // shader execution time s (not used here)
+
+uniform sampler2D inputTexture; // Texture from the last render pass (not used here)
+
+vec3 normalize_C(float y, vec3 col_1, vec3 col_2, float y_min, float y_max) {
+ // create color based on fraction of this color and next color
+ float yr = (y - y_min) / (y_max - y_min);
+ return col_1 * (1.0 - yr) + col_2 * yr;
+}
+
+void main() {
+ // find which bar to use based on where we are on the x axis
+ float x = u_resolution.x * fragCoord.x;
+ int bar = int(bars_count * fragCoord.x);
+
+ // calculate a bar size
+ float bar_size = u_resolution.x / bars_count;
+
+ // the y coordinate and bar values are the same
+ float y = bars[bar];
+
+ // make sure there is a thin line at bottom
+ if (y * u_resolution.y < 1.0) {
+ y = 1.0 / u_resolution.y;
+ }
+
+ // draw the bar up to current height
+ if (y > fragCoord.y) {
+ // make some space between bars basen on settings
+ if (x > (bar + 1) * (bar_size)-bar_spacing) {
+ fragColor = vec4(bg_color, 1.0);
+ } else {
+ if (gradient_count == 0) {
+ fragColor = vec4(fg_color, 1.0);
+ } else {
+ // find which color in the configured gradient we are at
+ int color = int((gradient_count - 1) * fragCoord.y);
+
+ // find where on y this and next color is supposed to be
+ float y_min = color / (gradient_count - 1.0);
+ float y_max = (color + 1.0) / (gradient_count - 1.0);
+
+ // make color
+ fragColor = vec4(normalize_C(fragCoord.y, gradient_colors[color],
+ gradient_colors[color + 1], y_min, y_max),
+ 1.0);
+ }
+ }
+ } else {
+ fragColor = vec4(bg_color, 1.0);
+ }
+}
diff --git a/.config/cava/shaders/eye_of_phi.frag b/.config/cava/shaders/eye_of_phi.frag
new file mode 100644
index 0000000..b66b607
--- /dev/null
+++ b/.config/cava/shaders/eye_of_phi.frag
@@ -0,0 +1,117 @@
+#version 330
+
+// this shader was stolen from shadertoy user ChunderFPV
+
+#define SCALE 8.0
+#define PI radians(180.0)
+#define TAU (PI * 2.0)
+#define CS(a) vec2(cos(a), sin(a))
+#define PT(u, r) smoothstep(0.0, r, r - length(u))
+
+in vec2 fragCoord;
+out vec4 fragColor;
+
+uniform float bars[512];
+
+uniform int bars_count; // number of bars (left + right) (configurable)
+uniform float shader_time; // shader execution time s
+uniform int bar_width; // bar width (configurable), not used here
+uniform int bar_spacing; // space between bars (configurable)
+
+uniform vec3 u_resolution; // window resolution
+
+// colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
+uniform vec3 bg_color; // background color
+uniform vec3 fg_color; // foreground color
+
+uniform int gradient_count;
+uniform vec3 gradient_colors[8]; // gradient colors
+
+// gradient map ( color, equation, time, width, shadow, reciprocal )
+vec3 gm(vec3 c, float n, float t, float w, float d, bool i) {
+ float g = min(abs(n), 1.0 / abs(n));
+ float s = abs(sin(n * PI - t));
+ if (i)
+ s = min(s, abs(sin(PI / n + t)));
+ return (1.0 - pow(abs(s), w)) * c * pow(g, d) * 6.0;
+}
+
+// denominator spiral, use 1/n for numerator
+// ( screen xy, spiral exponent, decimal, line width, hardness, rotation )
+float ds(vec2 u, float e, float n, float w, float h, float ro) {
+ float ur = length(u); // unit radius
+ float sr = pow(ur, e); // spiral radius
+ float a = round(sr) * n * TAU; // arc
+ vec2 xy = CS(a + ro) * ur; // xy coords
+ float l = PT(u - xy, w); // line
+ float s = mod(sr + 0.5, 1.0); // gradient smooth
+ s = min(s, 1.0 - s); // darken filter
+ return l * s * h;
+}
+
+void main() {
+ float t = shader_time / PI * 2.0;
+ vec4 m = vec4(0, 0, 0, 0); // iMouse;
+ m.xy = m.xy * 2.0 / u_resolution.xy - 1.0; // ±1x, ±1y
+ if (m.z > 0.0)
+ t += m.y * SCALE; // move time with mouse y
+ float z = (m.z > 0.0) ? pow(1.0 - abs(m.y), sign(m.y)) : 1.0; // zoom (+)
+ float e = (m.z > 0.0) ? pow(1.0 - abs(m.x), -sign(m.x))
+ : 1.0; // screen exponent (+)
+ float se = (m.z > 0.0) ? e * -sign(m.y) : 1.0; // spiral exponent
+ vec3 bg = vec3(0); // black background
+
+ float aa = 3.0; // anti-aliasing
+
+ for (float j = 0.0; j < aa; j++)
+ for (float k = 0.0; k < aa; k++) {
+ vec3 c = vec3(0);
+ vec2 o = vec2(j, k) / aa;
+ vec2 uv = (fragCoord * u_resolution.xy - 0.5 * u_resolution.xy + o) /
+ u_resolution.y * SCALE * z; // apply cartesian, scale and zoom
+ if (m.z > 0.0)
+ uv =
+ exp(log(abs(uv)) * e) * sign(uv); // warp screen space with exponent
+
+ float px = length(fwidth(uv)); // pixel width
+ float x = uv.x; // every pixel on x
+ float y = uv.y; // every pixel on y
+ float l = length(uv); // hypot of xy: sqrt(x*x+y*y)
+
+ float mc = (x * x + y * y - 1.0) / y; // metallic circle at xy
+ float g = min(abs(mc), 1.0 / abs(mc)); // gradient
+ vec3 gold = vec3(1.0, 0.6, 0.0) * g * l;
+ vec3 blue = vec3(0.3, 0.5, 0.9) * (1.0 - g);
+ vec3 rgb = max(gold, blue);
+
+ float w = 0.1; // line width
+ float d = 0.4; // shadow depth
+ c = max(c, gm(rgb, mc, -t, w * bars[0], d, false)); // metallic
+ c = max(c, gm(rgb, abs(y / x) * sign(y), -t, w * bars[1], d,
+ false)); // tangent
+ c = max(c, gm(rgb, (x * x) / (y * y) * sign(y), -t, w * bars[2], d,
+ false)); // sqrt cotangent
+ c = max(c, gm(rgb, (x * x) + (y * y), t, w * bars[3], d,
+ true)); // sqrt circles
+
+ c += rgb * ds(uv, se, t / TAU, px * 2.0 * bars[4], 2.0, 0.0); // spiral 1a
+ c += rgb * ds(uv, se, t / TAU, px * 2.0 * bars[5], 2.0, PI); // spiral 1b
+ c +=
+ rgb * ds(uv, -se, t / TAU, px * 2.0 * bars[6], 2.0, 0.0); // spiral 2a
+ c += rgb * ds(uv, -se, t / TAU, px * 2.0 * bars[7], 2.0, PI); // spiral 2b
+ c = max(c, 0.0); // clear negative color
+
+ c += pow(max(1.0 - l, 0.0), 3.0 / z); // center glow
+
+ if (m.z > 0.0) // display grid on click
+ {
+ vec2 xyg = abs(fract(uv + 0.5) - 0.5) / px; // xy grid
+ c.gb += 0.2 * (1.0 - min(min(xyg.x, xyg.y), 1.0));
+ }
+ bg += c;
+ }
+ bg /= aa * aa;
+ bg *= sqrt(bg) * 1.5;
+
+ fragColor = vec4(bg, 1.0);
+}
diff --git a/.config/cava/shaders/northern_lights.frag b/.config/cava/shaders/northern_lights.frag
new file mode 100644
index 0000000..ecd859a
--- /dev/null
+++ b/.config/cava/shaders/northern_lights.frag
@@ -0,0 +1,34 @@
+#version 330
+
+in vec2 fragCoord;
+out vec4 fragColor;
+
+// bar values. defaults to left channels first (low to high), then right (high to low).
+uniform float bars[512];
+
+uniform int bars_count; // number of bars (left + right) (configurable)
+
+uniform vec3 u_resolution; // window resolution, not used here
+
+//colors, configurable in cava config file
+uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here
+uniform vec3 fg_color; // foreground color, not used here
+
+void main()
+{
+ // find which bar to use based on where we are on the x axis
+ int bar = int(bars_count * fragCoord.x);
+
+ float bar_y = 1.0 - abs((fragCoord.y - 0.5)) * 2.0;
+ float y = (bars[bar]) * bar_y;
+
+ float bar_x = (fragCoord.x - float(bar) / float(bars_count)) * bars_count;
+ float bar_r = 1.0 - abs((bar_x - 0.5)) * 2;
+
+ bar_r = bar_r * bar_r * 2;
+
+ // set color
+ fragColor.r = fg_color.x * y * bar_r;
+ fragColor.g = fg_color.y * y * bar_r;
+ fragColor.b = fg_color.z * y * bar_r;
+}
diff --git a/.config/cava/shaders/pass_through.vert b/.config/cava/shaders/pass_through.vert
new file mode 100644
index 0000000..a4f20e5
--- /dev/null
+++ b/.config/cava/shaders/pass_through.vert
@@ -0,0 +1,14 @@
+#version 330
+
+
+// Input vertex data, different for all executions of this shader.
+layout(location = 0) in vec3 vertexPosition_modelspace;
+
+// Output data ; will be interpolated for each fragment.
+out vec2 fragCoord;
+
+void main()
+{
+ gl_Position = vec4(vertexPosition_modelspace,1);
+ fragCoord = (vertexPosition_modelspace.xy+vec2(1,1))/2.0;
+}
diff --git a/.config/cava/shaders/spectrogram.frag b/.config/cava/shaders/spectrogram.frag
new file mode 100644
index 0000000..18afbe3
--- /dev/null
+++ b/.config/cava/shaders/spectrogram.frag
@@ -0,0 +1,53 @@
+#version 330
+
+in vec2 fragCoord;
+out vec4 fragColor;
+
+// bar values. defaults to left channels first (low to high), then right (high
+// to low).
+uniform float bars[512];
+
+uniform int bars_count; // number of bars (left + right) (configurable)
+uniform int bar_width; // bar width (configurable), not used here
+uniform int bar_spacing; // space between bars (configurable)
+
+uniform vec3 u_resolution; // window resolution
+
+// colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
+uniform vec3 bg_color; // background color
+uniform vec3 fg_color; // foreground color
+
+uniform int gradient_count;
+uniform vec3 gradient_colors[8]; // gradient colors
+
+uniform sampler2D inputTexture; // Texture from the last render pass
+
+vec3 normalize_C(float y, vec3 col_1, vec3 col_2, float y_min, float y_max) {
+ // create color based on fraction of this color and next color
+ float yr = (y - y_min) / (y_max - y_min);
+ return col_1 * (1.0 - yr) + col_2 * yr;
+}
+
+void main() {
+ // find which bar to use based on where we are on the y axis
+ int bar = int(bars_count * fragCoord.y);
+ float y = bars[bar];
+ float band_size = 1.0 / float(bars_count);
+ float current_band_min = bar * band_size;
+ float current_band_max = (bar + 1) * band_size;
+
+ int hist_length = 512;
+ float win_size = 1.0 / hist_length;
+
+ if (fragCoord.x > 1.0 - win_size) {
+
+ if (fragCoord.y > current_band_min && fragCoord.y < current_band_max) {
+
+ fragColor = vec4(fg_color * y, 1.0);
+ }
+ } else {
+ vec2 offsetCoord = fragCoord;
+ offsetCoord.x += float(win_size);
+ fragColor = texture(inputTexture, offsetCoord);
+ }
+}
diff --git a/.config/cava/shaders/winamp_line_style_spectrum.frag b/.config/cava/shaders/winamp_line_style_spectrum.frag
new file mode 100644
index 0000000..3bcc24a
--- /dev/null
+++ b/.config/cava/shaders/winamp_line_style_spectrum.frag
@@ -0,0 +1,112 @@
+#version 330
+
+// Emulate the "line style" spectrum analyzer from Winamp 2.
+// Try this config for a demonstration:
+
+/*
+[general]
+bar_width = 2
+bar_spacing = 0
+higher_cutoff_freq = 22000
+
+[output]
+method = sdl_glsl
+channels = mono
+fragment_shader = winamp_line_style_spectrum.frag
+
+[color]
+background = '#000000'
+gradient = 1
+gradient_color_1 = '#319C08'
+gradient_color_2 = '#29CE10'
+gradient_color_3 = '#BDDE29'
+gradient_color_4 = '#DEA518'
+gradient_color_5 = '#D66600'
+gradient_color_6 = '#CE2910'
+
+[smoothing]
+noise_reduction = 10
+*/
+
+in vec2 fragCoord;
+out vec4 fragColor;
+
+// bar values. defaults to left channels first (low to high), then right (high to low).
+uniform float bars[512];
+
+uniform int bars_count; // number of bars (left + right) (configurable)
+uniform int bar_width; // bar width (configurable), not used here
+uniform int bar_spacing; // space between bars (configurable)
+
+uniform vec3 u_resolution; // window resolution
+
+//colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
+uniform vec3 bg_color; // background color
+uniform vec3 fg_color; // foreground color
+
+uniform int gradient_count;
+uniform vec3 gradient_colors[8]; // gradient colors
+
+vec3 normalize_C(float y,vec3 col_1, vec3 col_2, float y_min, float y_max)
+{
+ //create color based on fraction of this color and next color
+ float yr = (y - y_min) / (y_max - y_min);
+ return col_1 * (1.0 - yr) + col_2 * yr;
+}
+
+void main()
+{
+ // find which bar to use based on where we are on the x axis
+ float x = u_resolution.x * fragCoord.x;
+ int bar = int(bars_count * fragCoord.x);
+
+ //calculate a bar size
+ float bar_size = u_resolution.x / bars_count;
+
+ //the y coordinate is stretched by 4X to resemble Winamp
+ float y = min(bars[bar] * 4.0, 1.0);
+
+ // make sure there is a thin line at bottom
+ if (y * u_resolution.y < 1.0)
+ {
+ y = 1.0 / u_resolution.y;
+ }
+
+ vec4 bar_color;
+
+ if (gradient_count == 0)
+ {
+ bar_color = vec4(fg_color,1.0);
+ }
+ else
+ {
+ //find color in the configured gradient for the top of the bar
+ int color = int((gradient_count - 1) * y);
+
+ //find where on y this and next color is supposed to be
+ float y_min = float(color) / (gradient_count - 1.0);
+ float y_max = float(color + 1) / (gradient_count - 1.0);
+
+ //make a solid color for the entire bar
+ bar_color = vec4(normalize_C(y, gradient_colors[color], gradient_colors[color + 1], y_min, y_max), 1.0);
+ }
+
+
+ //draw the bar up to current height
+ if (y > fragCoord.y)
+ {
+ //make some space between bars based on settings
+ if (x > (bar + 1) * (bar_size) - bar_spacing)
+ {
+ fragColor = vec4(bg_color,1.0);
+ }
+ else
+ {
+ fragColor = bar_color;
+ }
+ }
+ else
+ {
+ fragColor = vec4(bg_color,1.0);
+ }
+}
diff --git a/.config/cava/themes/solarized_dark b/.config/cava/themes/solarized_dark
new file mode 100644
index 0000000..200057c
--- /dev/null
+++ b/.config/cava/themes/solarized_dark
@@ -0,0 +1,15 @@
+[color]
+background = '#001e26'
+foreground = '#708183'
+
+gradient = 1
+gradient_color_1 = '#268bd2'
+gradient_color_2 = '#6c71c4'
+gradient_color_3 = '#cb4b16'
+
+horizontal_gradient = 1
+horizontal_gradient_color_1 = '#586e75'
+horizontal_gradient_color_2 = '#b58900'
+horizontal_gradient_color_3 = '#839496'
+
+blend_direction = 'up'
\ No newline at end of file
diff --git a/.config/cava/themes/tricolor b/.config/cava/themes/tricolor
new file mode 100644
index 0000000..b908137
--- /dev/null
+++ b/.config/cava/themes/tricolor
@@ -0,0 +1,10 @@
+[color]
+horizontal_gradient = 1
+horizontal_gradient_color_1 = '#c45161'
+horizontal_gradient_color_2 = '#e094a0'
+horizontal_gradient_color_3 = '#f2b6c0'
+horizontal_gradient_color_4 = '#f2dde1'
+horizontal_gradient_color_5 = '#cbc7d8'
+horizontal_gradient_color_6 = '#8db7d2'
+horizontal_gradient_color_7 = '#5e62a9'
+horizontal_gradient_color_8 = '#434279'
\ No newline at end of file