From 0042568e345742dde094859e92e40ead4b8669ef Mon Sep 17 00:00:00 2001 From: Stephan Date: Fri, 28 Nov 2025 13:20:58 -0800 Subject: [PATCH] rearrange hyprland config; change back to old waybar: adjust waybar colors; add btop --- .gitignore | 8 + btop/btop.conf | 257 ++++++++ btop/themes/mytheme.theme | 83 +++ btop/themes/orange.theme | 165 +++++ ghostty/config | 57 ++ ghostty/themes/gruvbox_dark.conf | 49 ++ ghostty/themes/theme | 11 + hypr/hyprland.conf | 324 +--------- hypr/hyprland/animations.conf | 34 + hypr/hyprland/autostart.conf | 15 + hypr/hyprland/bindings.conf | 94 +++ hypr/hyprland/env.conf | 32 + hypr/hyprland/input.conf | 40 ++ hypr/hyprland/looknfeel.conf | 73 +++ hypr/hyprland/monitors.conf | 9 + hypr/hyprland/windowrules.conf | 11 + rofi/bluetooth-menu.rasi | 96 +++ rofi/power-menu.rasi | 69 +++ rofi/theme.rasi | 45 ++ rofi/themes/catppuccin-frappe.rasi | 45 ++ rofi/themes/catppuccin-latte.rasi | 45 ++ rofi/themes/catppuccin-macchiato.rasi | 45 ++ rofi/themes/catppuccin-mocha.rasi | 45 ++ rofi/themes/gruvbox-dark.rasi | 45 ++ rofi/themes/gruvbox-light.rasi | 45 ++ rofi/wifi-menu.rasi | 96 +++ swaync/config.json | 60 ++ swaync/style.css | 265 ++++++++ waybar/.github/README.md | 126 ---- waybar/.github/assets/catppuccin-frappe.png | Bin 24234 -> 0 bytes waybar/.github/assets/catppuccin-latte.png | Bin 22231 -> 0 bytes .../.github/assets/catppuccin-macchiato.png | Bin 23498 -> 0 bytes waybar/.github/assets/catppuccin-mocha.png | Bin 23887 -> 0 bytes waybar/LICENSE | 21 - waybar/config.jsonc | 582 ++++++++++++++---- waybar/config.jsonc.backup | 489 +++++++++++++++ waybar/config.jsonc.original | 478 ++++++++++++++ waybar/install.sh | 54 -- waybar/modules/backlight.jsonc | 32 - waybar/modules/battery.jsonc | 45 -- waybar/modules/bluetooth.jsonc | 38 -- waybar/modules/clock.jsonc | 71 --- waybar/modules/cpu.jsonc | 27 - waybar/modules/custom/distro.jsonc | 33 - waybar/modules/custom/dividers.jsonc | 79 --- waybar/modules/custom/power_menu.jsonc | 33 - waybar/modules/custom/system_update.jsonc | 33 - waybar/modules/custom/user.jsonc | 83 --- waybar/modules/extras/taskbar.jsonc | 21 - waybar/modules/extras/tray.jsonc | 13 - waybar/modules/extras/wireplumber.jsonc | 82 --- waybar/modules/hyprland/window.jsonc | 19 - waybar/modules/hyprland/windowcount.jsonc | 12 - waybar/modules/hyprland/workspaces.jsonc | 38 -- waybar/modules/idle_inhibitor.jsonc | 30 - waybar/modules/memory.jsonc | 31 - waybar/modules/mpris.jsonc | 36 -- waybar/modules/network.jsonc | 40 -- waybar/modules/pulseaudio.jsonc | 96 --- waybar/modules/temperature.jsonc | 35 -- waybar/scripts/backlight.sh | 66 -- waybar/scripts/battery-level.sh | 80 +++ waybar/scripts/battery-state.sh | 50 ++ waybar/scripts/bluetooth-menu.sh | 106 ++++ waybar/scripts/bluetooth.sh | 120 ---- waybar/scripts/brightness-control.sh | 92 +++ waybar/scripts/cpu-temp.sh | 67 ++ waybar/scripts/current-theme.sh | 24 + waybar/scripts/fzf-colors.sh | 82 --- waybar/scripts/network.sh | 99 --- waybar/scripts/power-menu.sh | 69 +-- waybar/scripts/system-update.sh | 163 ++--- waybar/scripts/theme-switcher.sh | 54 ++ waybar/scripts/volume-control.sh | 123 ++++ waybar/scripts/volume.sh | 159 ----- waybar/scripts/wifi-menu.sh | 126 ++++ waybar/scripts/wifi-status.sh | 84 +++ waybar/style.css | 482 ++++++++++++++- waybar/styles/fonts.css | 28 - waybar/styles/global.css | 38 -- waybar/styles/modules-center.css | 119 ---- waybar/styles/modules-left.css | 31 - waybar/styles/modules-right.css | 59 -- waybar/styles/states.css | 37 -- waybar/theme.css | 108 ++-- waybar/themes/catppuccin-frappe.css | 63 -- waybar/themes/catppuccin-latte.css | 63 -- waybar/themes/catppuccin-macchiato.css | 63 -- waybar/themes/catppuccin-mocha.css | 63 -- waybar/themes/css/catppuccin-frappe.css | 75 +++ waybar/themes/css/catppuccin-latte.css | 75 +++ waybar/themes/css/catppuccin-macchiato.css | 75 +++ waybar/themes/css/catppuccin-mocha.css | 75 +++ waybar/themes/{ => css}/gruvbox-dark.css | 3 +- waybar/themes/css/gruvbox-light.css | 75 +++ waybar/themes/current-theme | 1 + waybar/themes/gruvbox-theme.css | 75 +++ waybar/themes/jsonc/catppuccin-frappe.jsonc | 478 ++++++++++++++ waybar/themes/jsonc/catppuccin-latte.jsonc | 478 ++++++++++++++ .../themes/jsonc/catppuccin-macchiato.jsonc | 478 ++++++++++++++ waybar/themes/jsonc/catppuccin-mocha.jsonc | 478 ++++++++++++++ waybar/themes/jsonc/gruvbox-dark.jsonc | 478 ++++++++++++++ waybar/themes/jsonc/gruvbox-light.jsonc | 478 ++++++++++++++ 103 files changed, 8055 insertions(+), 2825 deletions(-) create mode 100644 btop/btop.conf create mode 100644 btop/themes/mytheme.theme create mode 100644 btop/themes/orange.theme create mode 100644 ghostty/config create mode 100644 ghostty/themes/gruvbox_dark.conf create mode 100644 ghostty/themes/theme create mode 100644 hypr/hyprland/animations.conf create mode 100644 hypr/hyprland/autostart.conf create mode 100644 hypr/hyprland/bindings.conf create mode 100644 hypr/hyprland/env.conf create mode 100644 hypr/hyprland/input.conf create mode 100644 hypr/hyprland/looknfeel.conf create mode 100644 hypr/hyprland/monitors.conf create mode 100644 hypr/hyprland/windowrules.conf create mode 100644 rofi/bluetooth-menu.rasi create mode 100644 rofi/power-menu.rasi create mode 100644 rofi/theme.rasi create mode 100644 rofi/themes/catppuccin-frappe.rasi create mode 100644 rofi/themes/catppuccin-latte.rasi create mode 100644 rofi/themes/catppuccin-macchiato.rasi create mode 100644 rofi/themes/catppuccin-mocha.rasi create mode 100644 rofi/themes/gruvbox-dark.rasi create mode 100644 rofi/themes/gruvbox-light.rasi create mode 100644 rofi/wifi-menu.rasi create mode 100644 swaync/config.json create mode 100644 swaync/style.css delete mode 100644 waybar/.github/README.md delete mode 100644 waybar/.github/assets/catppuccin-frappe.png delete mode 100644 waybar/.github/assets/catppuccin-latte.png delete mode 100644 waybar/.github/assets/catppuccin-macchiato.png delete mode 100644 waybar/.github/assets/catppuccin-mocha.png delete mode 100644 waybar/LICENSE create mode 100644 waybar/config.jsonc.backup create mode 100644 waybar/config.jsonc.original delete mode 100755 waybar/install.sh delete mode 100644 waybar/modules/backlight.jsonc delete mode 100644 waybar/modules/battery.jsonc delete mode 100644 waybar/modules/bluetooth.jsonc delete mode 100644 waybar/modules/clock.jsonc delete mode 100644 waybar/modules/cpu.jsonc delete mode 100644 waybar/modules/custom/distro.jsonc delete mode 100644 waybar/modules/custom/dividers.jsonc delete mode 100644 waybar/modules/custom/power_menu.jsonc delete mode 100644 waybar/modules/custom/system_update.jsonc delete mode 100644 waybar/modules/custom/user.jsonc delete mode 100644 waybar/modules/extras/taskbar.jsonc delete mode 100644 waybar/modules/extras/tray.jsonc delete mode 100644 waybar/modules/extras/wireplumber.jsonc delete mode 100644 waybar/modules/hyprland/window.jsonc delete mode 100644 waybar/modules/hyprland/windowcount.jsonc delete mode 100644 waybar/modules/hyprland/workspaces.jsonc delete mode 100644 waybar/modules/idle_inhibitor.jsonc delete mode 100644 waybar/modules/memory.jsonc delete mode 100644 waybar/modules/mpris.jsonc delete mode 100644 waybar/modules/network.jsonc delete mode 100644 waybar/modules/pulseaudio.jsonc delete mode 100644 waybar/modules/temperature.jsonc delete mode 100755 waybar/scripts/backlight.sh create mode 100755 waybar/scripts/battery-level.sh create mode 100755 waybar/scripts/battery-state.sh create mode 100755 waybar/scripts/bluetooth-menu.sh delete mode 100755 waybar/scripts/bluetooth.sh create mode 100755 waybar/scripts/brightness-control.sh create mode 100755 waybar/scripts/cpu-temp.sh create mode 100755 waybar/scripts/current-theme.sh delete mode 100755 waybar/scripts/fzf-colors.sh delete mode 100755 waybar/scripts/network.sh create mode 100755 waybar/scripts/theme-switcher.sh create mode 100755 waybar/scripts/volume-control.sh delete mode 100755 waybar/scripts/volume.sh create mode 100755 waybar/scripts/wifi-menu.sh create mode 100755 waybar/scripts/wifi-status.sh delete mode 100644 waybar/styles/fonts.css delete mode 100644 waybar/styles/global.css delete mode 100644 waybar/styles/modules-center.css delete mode 100644 waybar/styles/modules-left.css delete mode 100644 waybar/styles/modules-right.css delete mode 100644 waybar/styles/states.css delete mode 100644 waybar/themes/catppuccin-frappe.css delete mode 100644 waybar/themes/catppuccin-latte.css delete mode 100644 waybar/themes/catppuccin-macchiato.css delete mode 100644 waybar/themes/catppuccin-mocha.css create mode 100644 waybar/themes/css/catppuccin-frappe.css create mode 100644 waybar/themes/css/catppuccin-latte.css create mode 100644 waybar/themes/css/catppuccin-macchiato.css create mode 100644 waybar/themes/css/catppuccin-mocha.css rename waybar/themes/{ => css}/gruvbox-dark.css (96%) create mode 100644 waybar/themes/css/gruvbox-light.css create mode 100644 waybar/themes/current-theme create mode 100644 waybar/themes/gruvbox-theme.css create mode 100644 waybar/themes/jsonc/catppuccin-frappe.jsonc create mode 100644 waybar/themes/jsonc/catppuccin-latte.jsonc create mode 100644 waybar/themes/jsonc/catppuccin-macchiato.jsonc create mode 100644 waybar/themes/jsonc/catppuccin-mocha.jsonc create mode 100644 waybar/themes/jsonc/gruvbox-dark.jsonc create mode 100644 waybar/themes/jsonc/gruvbox-light.jsonc diff --git a/.gitignore b/.gitignore index d2631ad..e6f286a 100644 --- a/.gitignore +++ b/.gitignore @@ -2,15 +2,23 @@ * # Then selectively include the directories you want to keep +!btop/ !hypr/ +!ghostty/ !kitty/ !nvim/ +!swaync/ !waybar/ +!rofi/ !wofi/ +!btop/** !hypr/** +!ghostty/** !kitty/** !nvim/** +!swaync/** !waybar/** +!rofi/** !wofi/** diff --git a/btop/btop.conf b/btop/btop.conf new file mode 100644 index 0000000..417efe3 --- /dev/null +++ b/btop/btop.conf @@ -0,0 +1,257 @@ +#? Config file for btop v. 1.4.5 + +#* 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 = "mytheme" + +#* If the theme set background should be shown, set to False if you want terminal background transparency. +theme_background = True + +#* 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 + +#* 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 + +#* Rounded corners on boxes, is ignored if TTY mode is ON. +rounded_corners = 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 = "braille" + +# 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 = "cpu mem net proc" + +#* 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 = "cpu lazy" + +#* 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 + +#* In tree-view, always accumulate child process resources in the parent process. +proc_aggregate = 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 + +#* 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 = "" + +#* 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 "~/.config/btop/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" + +#* 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 + +#* Custom gpu0 model name, empty string to disable. +custom_gpu_name0 = "" + +#* 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/btop/themes/mytheme.theme b/btop/themes/mytheme.theme new file mode 100644 index 0000000..7c38bc7 --- /dev/null +++ b/btop/themes/mytheme.theme @@ -0,0 +1,83 @@ +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="##1c1c1f" + +# Main text color +theme[main_fg]="#9d8462" + +# Title color for boxes +theme[title]="#ff9100" + +# Highlight color for keyboard shortcuts +theme[hi_fg]="#ff9100" + +# Background color of selected item in processes box +theme[selected_bg]="#ff9100" + +# Foreground color of selected item in processes box +theme[selected_fg]="#000000" + +# Color of inactive/disabled text +theme[inactive_fg]="#9d8462" + +# Color of text appearing on top of graphs, i.e uptime and current network graph scaling +theme[graph_text]="#ff9100" + +# Background color of the percentage meters +theme[meter_bg]="#303340" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#9d8462" + +# CPU, Memory, Network, Proc box outline colors +theme[cpu_box]="#9d8462" +theme[mem_box]="#9d8462" +theme[net_box]="#9d8462" +theme[proc_box]="#9d8462" + +# Box divider line and small boxes line color +theme[div_line]="#9d8462" + +# Temperature graph color (Green -> Yellow -> Red) +theme[temp_start]="#9d8462" +theme[temp_mid]="#ff9100" +theme[temp_end]="#ff0000" + +# CPU graph colors (Teal -> Lavender) +theme[cpu_start]="#9d8462" +theme[cpu_mid]="#ff9100" +theme[cpu_end]="#ff0000" + +# Mem/Disk free meter (Mauve -> Lavender -> Blue) +theme[free_start]="#9d8462" +theme[free_mid]="#ff9100" +theme[free_end]="#ff0000" + +# Mem/Disk cached meter (Sapphire -> Lavender) +theme[cached_start]="#9d8462" +theme[cached_mid]="#ff9100" +theme[cached_end]="#ff0000" + +# Mem/Disk available meter ( -> ) +theme[available_start]="#9d8462" +theme[available_mid]="#ff9100" +theme[available_end]="#ff0000" + +# Mem/Disk used meter (-> ) +theme[used_start]="#9d8462" +theme[used_mid]="#ff9100" +theme[used_end]="#ff0000" + +# Download graph colors (Peach -> Red) +theme[download_start]="#9d8462" +theme[download_mid]="#ff9100" +theme[download_end]="#ff0000" + +# Upload graph colors (Green -> Sky) +theme[upload_start]="#9d8462" +theme[upload_mid]="#ff9100" +theme[upload_end]="#ff0000" + +# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve) +theme[process_start]="#9d8462" +theme[process_mid]="#ff9100" +theme[process_end]="#ff0000" diff --git a/btop/themes/orange.theme b/btop/themes/orange.theme new file mode 100644 index 0000000..c26cfca --- /dev/null +++ b/btop/themes/orange.theme @@ -0,0 +1,165 @@ +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="##1c1c1f" + +# Main text color +theme[main_fg]="#a1a1a1" + +# Title color for boxes +theme[title]="#ff9100" + +# Highlight color for keyboard shortcuts +theme[hi_fg]="#ff9100" + +# Background color of selected item in processes box +theme[selected_bg]="#ff9100" + +# Foreground color of selected item in processes box +theme[selected_fg]="#000000" + +# Color of inactive/disabled text +theme[inactive_fg]="#51576d" + +# Color of text appearing on top of graphs, i.e uptime and current network graph scaling +theme[graph_text]="#ff9100" + +# Background color of the percentage meters +theme[meter_bg]="#51576d" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#51576d" + +# CPU, Memory, Network, Proc box outline colors +theme[cpu_box]="#51576d" +theme[mem_box]="#51576d" +theme[net_box]="#51576d" +theme[proc_box]="#51576d" + +# Box divider line and small boxes line color +theme[div_line]="#51576d" + +# Temperature graph color (Green -> Yellow -> Red) +theme[temp_start]="#51576d" +theme[temp_mid]="#ff9100" +theme[temp_end]="#ff0000" + +# CPU graph colors (Teal -> Lavender) +theme[cpu_start]="#51576d" +theme[cpu_mid]="#ff9100" +theme[cpu_end]="#ff0000" + +# Mem/Disk free meter (Mauve -> Lavender -> Blue) +theme[free_start]="#51576d" +theme[free_mid]="#ff9100" +theme[free_end]="#ff0000" + +# Mem/Disk cached meter (Sapphire -> Lavender) +theme[cached_start]="#51576d" +theme[cached_mid]="#ff9100" +theme[cached_end]="#ff0000" + +# Mem/Disk available meter ( -> ) +theme[available_start]="#51576d" +theme[available_mid]="#ff9100" +theme[available_end]="#ff0000" + +# Mem/Disk used meter (-> ) +theme[used_start]="#51576d" +theme[used_mid]="#ff9100" +theme[used_end]="#ff0000" + +# Download graph colors (Peach -> Red) +theme[download_start]="#51576d" +theme[download_mid]="#ff9100" +theme[download_end]="#ff0000" + +# Upload graph colors (Green -> Sky) +theme[upload_start]="#51576d" +theme[upload_mid]="#ff9100" +theme[upload_end]="#ff0000" + +# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve) +theme[process_start]="#51576d" +theme[process_mid]="#ff9100" +theme[process_end]="#ff0000"# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="##1c1c1f" + +# Main text color +theme[main_fg]="#51576d" + +# Title color for boxes +theme[title]="#ff9100" + +# Highlight color for keyboard shortcuts +theme[hi_fg]="#ff9100" + +# Background color of selected item in processes box +theme[selected_bg]="#ff9100" + +# Foreground color of selected item in processes box +theme[selected_fg]="#000000" + +# Color of inactive/disabled text +theme[inactive_fg]="#51576d" + +# Color of text appearing on top of graphs, i.e uptime and current network graph scaling +theme[graph_text]="#ff9100" + +# Background color of the percentage meters +theme[meter_bg]="#51576d" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#51576d" + +# CPU, Memory, Network, Proc box outline colors +theme[cpu_box]="#51576d" +theme[mem_box]="#51576d" +theme[net_box]="#51576d" +theme[proc_box]="#51576d" + +# Box divider line and small boxes line color +theme[div_line]="#51576d" + +# Temperature graph color (Green -> Yellow -> Red) +theme[temp_start]="#51576d" +theme[temp_mid]="#ff9100" +theme[temp_end]="#ff0000" + +# CPU graph colors (Teal -> Lavender) +theme[cpu_start]="#51576d" +theme[cpu_mid]="#ff9100" +theme[cpu_end]="#ff0000" + +# Mem/Disk free meter (Mauve -> Lavender -> Blue) +theme[free_start]="#51576d" +theme[free_mid]="#ff9100" +theme[free_end]="#ff0000" + +# Mem/Disk cached meter (Sapphire -> Lavender) +theme[cached_start]="#51576d" +theme[cached_mid]="#ff9100" +theme[cached_end]="#ff0000" + +# Mem/Disk available meter ( -> ) +theme[available_start]="#51576d" +theme[available_mid]="#ff9100" +theme[available_end]="#ff0000" + +# Mem/Disk used meter (-> ) +theme[used_start]="#51576d" +theme[used_mid]="#ff9100" +theme[used_end]="#ff0000" + +# Download graph colors (Peach -> Red) +theme[download_start]="#51576d" +theme[download_mid]="#ff9100" +theme[download_end]="#ff0000" + +# Upload graph colors (Green -> Sky) +theme[upload_start]="#51576d" +theme[upload_mid]="#ff9100" +theme[upload_end]="#ff0000" + +# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve) +theme[process_start]="#51576d" +theme[process_mid]="#ff9100" +theme[process_end]="#ff0000" diff --git a/ghostty/config b/ghostty/config new file mode 100644 index 0000000..1ef8d82 --- /dev/null +++ b/ghostty/config @@ -0,0 +1,57 @@ +# This is the configuration file for Ghostty. +# +# This template file has been automatically created at the following +# path since Ghostty couldn't find any existing config files on your system: +# +# /home/saeijou/.config/ghostty/config +# +# The template does not set any default options, since Ghostty ships +# with sensible defaults for all options. Users should only need to set +# options that they want to change from the default. +# +# Run `ghostty +show-config --default --docs` to view a list of +# all available config options and their default values. +# +# Additionally, each config option is also explained in detail +# on Ghostty's website, at https://ghostty.org/docs/config. +# +# Ghostty can reload the configuration while running by using the menu +# options or the bound key (default: Command + Shift + comma on macOS and +# Control + Shift + comma on other platforms). Not all config options can be +# reloaded while running; some only apply to new windows and others may require +# a full restart to take effect. + +# Config syntax crash course +# ========================== +# # The config file consists of simple key-value pairs, +# # separated by equals signs. +# font-family = Iosevka +# window-padding-x = 2 +# +# # Spacing around the equals sign does not matter. +# # All of these are identical: +# key=value +# key= value +# key =value +# key = value +# +# # Any line beginning with a # is a comment. It's not possible to put +# # a comment after a config option, since it would be interpreted as a +# # part of the value. For example, this will have a value of "#123abc": +# background = #123abc +# +# # Empty values are used to reset config keys to default. +# key = +# +# # Some config options have unique syntaxes for their value, +# # which is explained in the docs for that config option. +# # Just for example: +# resize-overlay-duration = 4s 200ms +# +# Font +font-family = "JetBrainsMono Nerd Font" +font-style = Regular +font-size = 12 + +#Theme +config-file=themes/theme diff --git a/ghostty/themes/gruvbox_dark.conf b/ghostty/themes/gruvbox_dark.conf new file mode 100644 index 0000000..369da8d --- /dev/null +++ b/ghostty/themes/gruvbox_dark.conf @@ -0,0 +1,49 @@ +# gruvbox dark by morhetz, https://github.com/morhetz/gruvbox +# This work is licensed under the terms of the MIT license. +# For a copy, see https://opensource.org/licenses/MIT. + +background #282828 +foreground #ebdbb2 + +cursor #928374 + +selection_foreground #928374 +selection_background #3c3836 + +color0 #282828 +color8 #928374 + +# red +color1 #cc241d +# light red +color9 #fb4934 + +# green +color2 #98971a +# light green +color10 #b8bb26 + +# yellow +color3 #d79921 +# light yellow +color11 #fabd2d + +# blue +color4 #458588 +# light blue +color12 #83a598 + +# magenta +color5 #b16286 +# light magenta +color13 #d3869b + +# cyan +color6 #689d6a +# lighy cyan +color14 #8ec07c + +# light gray +color7 #a89984 +# dark gray +color15 #928374 diff --git a/ghostty/themes/theme b/ghostty/themes/theme new file mode 100644 index 0000000..92fa166 --- /dev/null +++ b/ghostty/themes/theme @@ -0,0 +1,11 @@ +# Background and Foreground +background = 1c1c1f +foreground = 9d8462 + +# Cursor +cursor-color = ff9100 +cursor-text = 000000 + +# Selection +selection-background = ff9100 +selection-foreground = 000000 diff --git a/hypr/hyprland.conf b/hypr/hyprland.conf index ebfd7a0..b9bcb92 100644 --- a/hypr/hyprland.conf +++ b/hypr/hyprland.conf @@ -1,317 +1,25 @@ - -# ####################################################################################### -# AUTOGENERATED HYPRLAND CONFIG. -# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hyprland.conf AND EDIT IT, -# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS. -# ####################################################################################### - -# This is an example Hyprland config file. -# Refer to the wiki for more information. -# https://wiki.hyprland.org/Configuring/ - -# Please note not all available settings / options are set here. -# For a full list, see the wiki - -# You can split this configuration into multiple files -# Create your files separately and then link them to this file like this: -# source = ~/.config/hypr/myColors.conf - -################ -### MONITORS ### -################ - -# See https://wiki.hyprland.org/Configuring/Monitors/ -#monitor = , preferred, auto, 1 - - +#██ ██ ██ ██ █████▄ █████▄ ██ ▄████▄ ███ ██ ████▄ +#██████ ▀██▀ ██▄▄█▀ ██▄▄██▄ ██ ██▄▄██ ██ ▀▄██ ██ ██ +#██ ██ ██ ██ ██ ██ ██████ ██ ██ ██ ██ ████▀ + ################### ### MY PROGRAMS ### ################### -# See https://wiki.hyprland.org/Configuring/Keywords/ - -# Set programs that you use $terminal = ghostty $fileManager = thunar -$menu = wofi --show drun +$menu = rofi -show drun +$browser = librewolf +$browser2 = google-chrome-stable +# Configurations -################# -### AUTOSTART ### -################# +source = ~/.config/hypr/hyprland/animations.conf +source = ~/.config/hypr/hyprland/autostart.conf +source = ~/.config/hypr/hyprland/bindings.conf +source = ~/.config/hypr/hyprland/env.conf +source = ~/.config/hypr/hyprland/input.conf +source = ~/.config/hypr/hyprland/looknfeel.conf +source = ~/.config/hypr/hyprland/monitors.conf +source = ~/.config/hypr/hyprland/windowrules.conf -# Autostart necessary processes (like notifications daemons, status bars, etc.) -# Or execute your favorite apps at launch like this: -# exec-once = $terminal -# exec-once = nm-applet & -exec-once = wl-paste --type text --watch cliphist store -exec-once = wl-paste --type image --watch cliphist store -exec-once = waybar & disown -exec-once = librewolf & disown -exec-once = swaync & disown -exec-once = hypridle & disown -exec-once = seventeenlands & disown -#exec-once = ~/.config/hypr/scripts/monitor_setup.sh -exec-once = hyprctl dispatch exec [workspace 3 silent] signal-desktop -exec-once = hyprctl dispatch exec [workspace 3 silent] discord -exec-once = hyprctl dispatch exec [workspace 3 silent] thunderbird -#exec-once = hyprctl dispatch exec "[workspace 5 silent] steam" - -############################# -### ENVIRONMENT VARIABLES ### -############################# - -# See https://wiki.hyprland.org/Configuring/Environment-variables/ - -env = XCURSOR_SIZE,20 -env = HYPRCURSOR_SIZE,20 -env = LANG,en_US.UTF-8 -env = LC_ALL,en_US.UTF-8 -env = LANGUAGE,en_US.UTF-8 - -##################### -### LOOK AND FEEL ### -##################### - -# Refer to https://wiki.hyprland.org/Configuring/Variables/ - -# https://wiki.hyprland.org/Configuring/Variables/#general -general { - gaps_in = 0 - gaps_out = 0 - - border_size = 1 - - # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors - col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg - col.inactive_border = rgba(595959aa) - - # Set to true enable resizing windows by clicking and dragging on borders and gaps - resize_on_border = false - - # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on - allow_tearing = false - - layout = dwindle -} - -# https://wiki.hyprland.org/Configuring/Variables/#decoration -decoration { - rounding = 10 - rounding_power = 2 - - # Change transparency of focused and unfocused windows - active_opacity = 1.0 - inactive_opacity = 0.9 - - shadow { - enabled = false - range = 4 - render_power = 3 - color = rgba(1a1a1aee) - } - - # https://wiki.hyprland.org/Configuring/Variables/#blur - blur { - enabled = true - size = 3 - passes = 1 - - vibrancy = 0.1696 - } -} - -# https://wiki.hyprland.org/Configuring/Variables/#animations -animations { - enabled = no - - # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more - - bezier = easeOutQuint,0.23,1,0.32,1 - bezier = easeInOutCubic,0.65,0.05,0.36,1 - bezier = linear,0,0,1,1 - bezier = almostLinear,0.5,0.5,0.75,1.0 - bezier = quick,0.15,0,0.1,1 - - animation = global, 1, 10, default - animation = border, 1, 5.39, easeOutQuint - animation = windows, 1, 4.79, easeOutQuint - animation = windowsIn, 1, 4.1, easeOutQuint, popin 87% - animation = windowsOut, 1, 1.49, linear, popin 87% - animation = fadeIn, 1, 1.73, almostLinear - animation = fadeOut, 1, 1.46, almostLinear - animation = fade, 1, 3.03, quick - animation = layers, 1, 3.81, easeOutQuint - animation = layersIn, 1, 4, easeOutQuint, fade - animation = layersOut, 1, 1.5, linear, fade - animation = fadeLayersIn, 1, 1.79, almostLinear - animation = fadeLayersOut, 1, 1.39, almostLinear -} - -# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/ -# "Smart gaps" / "No gaps when only" -# uncomment all if you wish to use that. -# workspace = w[tv1], gapsout:0, gapsin:0 -# workspace = f[1], gapsout:0, gapsin:0 -# windowrule = bordersize 0, floating:0, onworkspace:w[tv1] -# windowrule = rounding 0, floating:0, onworkspace:w[tv1] -# windowrule = bordersize 0, floating:0, onworkspace:f[1] -# windowrule = rounding 0, floating:0, onworkspace:f[1] - -# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more -dwindle { - pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below - preserve_split = true # You probably want this -} - -# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more -master { - new_status = master -} - -# https://wiki.hyprland.org/Configuring/Variables/#misc -misc { - force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers - disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :( -} - - -############# -### INPUT ### -############# - -# https://wiki.hyprland.org/Configuring/Variables/#input -input { - kb_layout = us - kb_variant = - kb_model = - kb_options = - kb_rules = - - follow_mouse = 1 - - sensitivity = 0 # -1.0 - 1.0, 0 means no modification. - - touchpad { - natural_scroll = false - } -} - -# https://wiki.hyprland.org/Configuring/Variables/#gestures -#gestures { -# workspace_swipe = false -#} - -# Example per-device config -# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more -device { - name = epic-mouse-v1 - sensitivity = -0.5 -} - - -################### -### KEYBINDINGS ### -################### - -# See https://wiki.hyprland.org/Configuring/Keywords/ -$mainMod = SUPER # Sets "Windows" key as main modifier - -# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more -bind = $mainMod, return, exec, $terminal -bind = $mainMod, C, killactive, -bind = $mainMod, M, exit, -bind = $mainMod, E, exec, $fileManager -bind = $mainMod, F, togglefloating, -bind = $mainMod, space, exec, $menu -bind = $mainMod, P, pseudo, # dwindle -bind = $mainMod, J, togglesplit, # dwindle -bind = $mainMod, B, exec, killall waybar && waybar & -bind = $mainMod SHIFT, S, exec, hyprshot -m region --clipboard-only, -bind = $mainMod, L, exec, hyprlock -bind = $mainMod, backslash, exec, ~/.config/hypr/scripts/monitor_setup.sh -bind = SUPER, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy - -# Move focus with mainMod + arrow keys -bind = $mainMod, left, movefocus, l -bind = $mainMod, right, movefocus, r -bind = $mainMod, up, movefocus, u -bind = $mainMod, down, movefocus, d - -# Switch workspaces with mainMod + [0-9] -bind = $mainMod, 1, workspace, 1 -bind = $mainMod, 2, workspace, 2 -bind = $mainMod, 3, workspace, 3 -bind = $mainMod, 4, workspace, 4 -bind = $mainMod, 5, workspace, 5 -bind = $mainMod, 6, workspace, 6 -bind = $mainMod, 7, workspace, 7 -bind = $mainMod, 8, workspace, 8 -bind = $mainMod, 9, workspace, 9 -bind = $mainMod, 0, workspace, 10 - -# Move active window to a workspace with mainMod + SHIFT + [0-9] -bind = $mainMod SHIFT, 1, movetoworkspacesilent, 1 -bind = $mainMod SHIFT, 2, movetoworkspacesilent, 2 -bind = $mainMod SHIFT, 3, movetoworkspacesilent, 3 -bind = $mainMod SHIFT, 4, movetoworkspacesilent, 4 -bind = $mainMod SHIFT, 5, movetoworkspacesilent, 5 -bind = $mainMod SHIFT, 6, movetoworkspacesilent, 6 -bind = $mainMod SHIFT, 7, movetoworkspacesilent, 7 -bind = $mainMod SHIFT, 8, movetoworkspacesilent, 8 -bind = $mainMod SHIFT, 9, movetoworkspacesilent, 9 -bind = $mainMod SHIFT, 0, movetoworkspacesilent, 10 - -# Example special workspace (scratchpad) -#bind = $mainMod, S, togglespecialworkspace, magic -#bind = $mainMod SHIFT, S, movetoworkspace, special:magic - -bind = SUPER_ALT_CTRL, L, exec, hyprctl keyword monitor "eDP-1,preferred,auto,1" - -#Mouse Key Assignements -#bind = , code:191, exec, $terminal -#bind = , code:198, exec, $terminal - - -# Lid Open & Closed -#bindl = , switch:off:Lid Switch, exec, ~/.config/hypr/scripts/monitor_setup.sh -# trigger when the switch is turning on -#bindl = , switch:on:Lid Switch, exec, ~/.config/hypr/scripts/monitor_setup.sh - -# Scroll through existing workspaces with mainMod + scroll -bind = $mainMod, mouse_down, workspace, e+1 -bind = $mainMod, mouse_up, workspace, e-1 - -# Move/resize windows with mainMod + LMB/RMB and dragging -bindm = $mainMod, mouse:272, movewindow -bindm = $mainMod, mouse:273, resizewindow - -# Laptop multimedia keys for volume and LCD brightness -bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ -bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- -bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle -bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle -bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+ -bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%- - -# Requires playerctl -bindl = , XF86AudioNext, exec, playerctl next -bindl = , XF86AudioPause, exec, playerctl play-pause -bindl = , XF86AudioPlay, exec, playerctl play-pause -bindl = , XF86AudioPrev, exec, playerctl previous - -############################## -### WINDOWS AND WORKSPACES ### -############################## - -# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more -# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules - -# Example windowrule -# windowrule = float,class:^(kitty)$,title:^(kitty)$ - -# Ignore maximize requests from apps. You'll probably like this. -windowrule = suppressevent maximize, class:.* - -# Fix some dragging issues with XWayland -windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 diff --git a/hypr/hyprland/animations.conf b/hypr/hyprland/animations.conf new file mode 100644 index 0000000..b5cc7a7 --- /dev/null +++ b/hypr/hyprland/animations.conf @@ -0,0 +1,34 @@ +#▄████▄ ███ ██ ██ ██▄ ▄██ ▄████▄ ██████ ██ ▄████▄ ███ ██ ▄█████ +#██▄▄██ ██ ▀▄██ ██ ██ ▀▀ ██ ██▄▄██ ██ ██ ██ ██ ██ ▀▄██ ▀▀▀▄▄▄ +#██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ▀████▀ ██ ██ █████▀ + +animations { + + enabled = true + + bezier = water, 0.22, 0.9, 0.36, 1.0 + bezier = flow, 0.25, 0.1, 0.25, 1.0 + bezier = ripple, 0.33, 0.0, 0.2, 1.0 + bezier = stream, 0.4, 0.0, 0.4, 1.0 + bezier = cascade, 0.19, 1.0, 0.22, 1.0 + bezier = md3_standard, 0.2, 0, 0, 1 + bezier = md3_accel, 0.3, 0, 0.8, 0.15 + bezier = overshot, 0.05, 0.9, 0.1, 1.05 + + animation = windows, 1, 3.0, water + animation = windowsIn, 1, 2.5, cascade,slide + animation = windowsOut, 1, 2.4, stream,slide + animation = windowsMove,1, 1.6, flow + animation = fade, 1, 2.4, water + animation = fadeIn, 1, 2.0, cascade + animation = fadeOut, 1, 1.8, ripple + animation = fadeDim, 1, 2.0, water + animation = fadeSwitch, 1, 1.4, flow + animation = layersIn, 1, 1.5, overshot, popin 80% + animation = layersOut, 1, 1.3, md3_accel, popin 90% + animation = layers, 1, 1.5, md3_standard + animation = workspaces, 1, 1.5, flow + animation = specialWorkspace, 1, 2.5, water + animation = border, 1, 2.9, water + animation = borderangle,1, 3.5, flow +} diff --git a/hypr/hyprland/autostart.conf b/hypr/hyprland/autostart.conf new file mode 100644 index 0000000..9f94ff2 --- /dev/null +++ b/hypr/hyprland/autostart.conf @@ -0,0 +1,15 @@ +#▄████▄ ██ ██ ██████ ▄████▄ ▄█████ ██████ ▄████▄ █████▄ ██████ +#██▄▄██ ██ ██ ██ ██ ██ ▀▀▀▄▄▄ ██ ██▄▄██ ██▄▄██▄ ██ +#██ ██ ▀████▀ ██ ▀████▀ █████▀ ██ ██ ██ ██ ██ ██ + +exec-once = wl-paste --type text --watch cliphist store +exec-once = wl-paste --type image --watch cliphist store +exec-once = waybar & disown +exec-once = librewolf & disown +exec-once = swaync & disown +exec-once = hypridle & disown +exec-once = seventeenlands & disown +exec-once = hyprctl dispatch exec [workspace 3 silent] signal-desktop +exec-once = hyprctl dispatch exec [workspace 3 silent] discord +exec-once = hyprctl dispatch exec [workspace 3 silent] thunderbird +#exec-once = hyprctl dispatch exec "[workspace 5 silent] steam" diff --git a/hypr/hyprland/bindings.conf b/hypr/hyprland/bindings.conf new file mode 100644 index 0000000..d059c2d --- /dev/null +++ b/hypr/hyprland/bindings.conf @@ -0,0 +1,94 @@ +#██ ▄█▀ ██████ ██ ██ █████▄ ██ ███ ██ ████▄ ██ ███ ██ ▄████ ▄█████ +#████ ██▄▄ ▀██▀ ██▄▄██ ██ ██ ▀▄██ ██ ██ ██ ██ ▀▄██ ██ ▄▄▄ ▀▀▀▄▄▄ +#██ ▀█▄ ██▄▄▄▄ ██ ██▄▄█▀ ██ ██ ██ ████▀ ██ ██ ██ ▀███▀ █████▀ + +# See https://wiki.hyprland.org/Configuring/Keywords/ +$mainMod = SUPER # Sets "Windows" key as main modifier + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, B, exec, $browser +bind = $mainModu SHIFT, B, exec, $browser2 +bind = $mainMod, C, killactive, +bind = $mainMod, E, exec, $fileManager +bind = $mainMod, F, togglefloating, +bind = $mainMod, J, togglesplit, # dwindle +bind = $mainMod, L, exec, hyprlock +bind = $mainMod, M, exit, +bind = $mainMod, N, exec, swaync-client -t -sw +bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod SHIFT, S, exec, hyprshot -m region --clipboard-only, +bind = $mainMod, V, exec, cliphist list | rofi -dmenu | cliphist decode | wl-copy +bind = $mainMod, W, exec, killall waybar && waybar & +bind = $mainMod, return, exec, $terminal +bind = $mainMod, space, exec, $menu +bind = $mainMod, backslash, exec, ~/.config/hypr/scripts/monitor_setup.sh +bind = $mainMod, slash, exec, $terminal -e btop + + +# Move focus with mainMod + arrow keys +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +# Switch workspaces with mainMod + [0-9] +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +bind = $mainMod SHIFT, 1, movetoworkspacesilent, 1 +bind = $mainMod SHIFT, 2, movetoworkspacesilent, 2 +bind = $mainMod SHIFT, 3, movetoworkspacesilent, 3 +bind = $mainMod SHIFT, 4, movetoworkspacesilent, 4 +bind = $mainMod SHIFT, 5, movetoworkspacesilent, 5 +bind = $mainMod SHIFT, 6, movetoworkspacesilent, 6 +bind = $mainMod SHIFT, 7, movetoworkspacesilent, 7 +bind = $mainMod SHIFT, 8, movetoworkspacesilent, 8 +bind = $mainMod SHIFT, 9, movetoworkspacesilent, 9 +bind = $mainMod SHIFT, 0, movetoworkspacesilent, 10 + +# Example special workspace (scratchpad) +#bind = $mainMod, S, togglespecialworkspace, magic +#bind = $mainMod SHIFT, S, movetoworkspace, special:magic + +bind = SUPER_ALT_CTRL, L, exec, hyprctl keyword monitor "eDP-1,preferred,auto,1" + +#Mouse Key Assignements +#bind = , code:191, exec, $terminal +#bind = , code:198, exec, $terminal + + +# Lid Open & Closed +#bindl = , switch:off:Lid Switch, exec, ~/.config/hypr/scripts/monitor_setup.sh +# trigger when the switch is turning on +#bindl = , switch:on:Lid Switch, exec, ~/.config/hypr/scripts/monitor_setup.sh + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + +# Laptop multimedia keys for volume and LCD brightness +bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ +bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle +bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle +bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+ +bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%- + +# Requires playerctl +bindl = , XF86AudioNext, exec, playerctl next +bindl = , XF86AudioPause, exec, playerctl play-pause +bindl = , XF86AudioPlay, exec, playerctl play-pause +bindl = , XF86AudioPrev, exec, playerctl previou diff --git a/hypr/hyprland/env.conf b/hypr/hyprland/env.conf new file mode 100644 index 0000000..a5f68ec --- /dev/null +++ b/hypr/hyprland/env.conf @@ -0,0 +1,32 @@ +#██████ ███ ██ ██ ██ ██ ██ ▄████▄ █████▄ ██ ▄████▄ █████▄ ██ ██████ ▄█████ +#██▄▄ ██ ▀▄██ ██▄▄██ ██▄▄██ ██▄▄██ ██▄▄██▄ ██ ██▄▄██ ██▄▄██ ██ ██▄▄ ▀▀▀▄▄▄ +#██▄▄▄▄ ██ ██ ▀██▀ ▀██▀ ██ ██ ██ ██ ██ ██ ██ ██▄▄█▀ ██████ ██▄▄▄▄ █████▀ + +# GTK Theme +env = GTK_THEME,adw-gtk3-dark + +# Cursor size +env = XCURSOR_SIZE,20 +env = HYPRCURSOR_SIZE,20 + +# Language Settings +env = LANG,en_US.UTF-8 +env = LC_ALL,en_US.UTF-8 +env = LANGUAGE,en_US.UTF-8 + +# Editor +env = EDITOR,nvim + +# Force all apps to use Wayland +env = GDK_BACKEND,wayland,x11 +env = QT_QPA_PLATFORM,wayland;xcb +env = QT_STYLE_OVERRIDE,kvantum +env = SDL_VIDEODRIVER,wayland +env = MOZ_ENABLE_WAYLAND,1 +env = ELECTRON_OZONE_PLATFORM_HINT,wayland +env = OZONE_PLATFORM,wayland +env = XDG_SESSION_TYPE,wayland + +# Allow better support for screen sharing (Google Meet, Discord, etc) +env = XDG_CURRENT_DESKTOP,Hyprland +env = XDG_SESSION_DESKTOP,Hyprland diff --git a/hypr/hyprland/input.conf b/hypr/hyprland/input.conf new file mode 100644 index 0000000..2e36236 --- /dev/null +++ b/hypr/hyprland/input.conf @@ -0,0 +1,40 @@ +#██ ███ ██ █████▄ ██ ██ ██████ +#██ ██ ▀▄██ ██▄▄█▀ ██ ██ ██ +#██ ██ ██ ██ ▀████▀ ██ + +# hide cursor after n sec +cursor { + inactive_timeout = 5 +} + +input { + kb_options = caps:none #deactivate capslock + + # Change speed of keyboard repeat + # repeat_rate = 40 + # repeat_delay = 600 + + follow_mouse = 1 + numlock_by_default = true + + # Increase sensitity for mouse/trackpack (default: 0) + sensitivity = 0 #0.35 + + touchpad { + # Use natural (inverse) scrolling + natural_scroll = false #true + + # Use two-finger clicks for right-click instead of lower-right corner + clickfinger_behavior = true + + # Control the speed of your scrolling + scroll_factor = 0.4 + } +} + +misc { + key_press_enables_dpms = true # key press will trigger wake + mouse_move_enables_dpms = true # mouse move will trigger wake +} + + diff --git a/hypr/hyprland/looknfeel.conf b/hypr/hyprland/looknfeel.conf new file mode 100644 index 0000000..575a2c9 --- /dev/null +++ b/hypr/hyprland/looknfeel.conf @@ -0,0 +1,73 @@ +#██ ▄████▄ ▄████▄ ██ ▄█▀ ▄▀▀▄ ██████ ██████ ██████ ██ +#██ ██ ██ ██ ██ ████ ▄▀▀▄ ▄ ██▄▄ ██▄▄ ██▄▄ ██ +#██████ ▀████▀ ▀████▀ ██ ▀█▄ ▀▄▄▀▀▄ ██ ██▄▄▄▄ ██▄▄▄▄ ██████ + +general { + gaps_in = 0 + gaps_out = 0 + + border_size = 1 + + # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors + col.active_border = rgba(ff9100ff) + col.inactive_border = rgba(595959aa) + + # Set to true enable resizing windows by clicking and dragging on borders and gaps + resize_on_border = false + + # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = false + + layout = dwindle +} + +# https://wiki.hyprland.org/Configuring/Variables/#decoration +decoration { + rounding = 10 + rounding_power = 2 + + # Change transparency of focused and unfocused windows + active_opacity = 1.0 + inactive_opacity = 0.9 + + shadow { + enabled = false + range = 4 + render_power = 3 + color = rgba(1a1a1aee) + } + + # https://wiki.hyprland.org/Configuring/Variables/#blur + blur { + enabled = true + size = 7 + passes = 4 + ignore_opacity = true + noise = 0.0117 + contrast = 0.8916 + brightness = 0.8172 + xray = false + new_optimizations = true + special = true + popups = true + } +} + +# App launcher +layerrule = blur, rofi +layerrule = ignorezero, rofi +layerrule = animation slide bottom, rofi + +# Top bar +layerrule = blur, waybar +layerrule = ignorezero, waybar + +dwindle { + pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = true # You probably want this +} + +misc { + force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers + disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :( +} diff --git a/hypr/hyprland/monitors.conf b/hypr/hyprland/monitors.conf new file mode 100644 index 0000000..f52f480 --- /dev/null +++ b/hypr/hyprland/monitors.conf @@ -0,0 +1,9 @@ +#██▄ ▄██ ▄████▄ ███ ██ ██ ██████ ▄████▄ █████▄ ▄█████ +#██ ▀▀ ██ ██ ██ ██ ▀▄██ ██ ██ ██ ██ ██▄▄██▄ ▀▀▀▄▄▄ +#██ ██ ▀████▀ ██ ██ ██ ██ ▀████▀ ██ ██ █████▀ + +monitor = , preferred, auto, 1 + +# Lid switch bindings +bindl = , switch:on:Lid Switch, exec, hyprctl keyword monitor "eDP-1, disable" +bindl = , switch:off:Lid Switch, exec, hyprctl keyword monitor "eDP-1, preferred, auto, 1 diff --git a/hypr/hyprland/windowrules.conf b/hypr/hyprland/windowrules.conf new file mode 100644 index 0000000..0553559 --- /dev/null +++ b/hypr/hyprland/windowrules.conf @@ -0,0 +1,11 @@ +#██ ██ ██ ███ ██ ████▄ ▄████▄ ██ ██ █████▄ ██ ██ ██ ██████ ▄█████ +#██ ▄█▄ ██ ██ ██ ▀▄██ ██ ██ ██ ██ ██ ▄█▄ ██ ██▄▄██▄ ██ ██ ██ ██▄▄ ▀▀▀▄▄▄ +# ▀██▀██▀ ██ ██ ██ ████▀ ▀████▀ ▀██▀██▀ ██ ██ ▀████▀ ██████ ██▄▄▄▄ █████▀ + +# Ignore maximize requests from apps. You'll probably like this. +windowrule = suppressevent maximize, class:.* + +# Fix some dragging issues with XWayland +windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 + + diff --git a/rofi/bluetooth-menu.rasi b/rofi/bluetooth-menu.rasi new file mode 100644 index 0000000..3a02cf2 --- /dev/null +++ b/rofi/bluetooth-menu.rasi @@ -0,0 +1,96 @@ +/* Bluetooth menu */ + +@theme "~/.config/rofi/theme.rasi" + +configuration { + font: "JetBrainsMono Nerd Font 8"; +} + +/* Window */ + +window { + location: north; + anchor: south; + y-offset: 3px; + width: 240px; + border: 3px; + border-radius: 10px; + border-color: @main-br; + background-color: @main-bg; + children: [ mainbox ]; +} + +mainbox { + spacing: 0; + background-color: @main-br; + text-color: @main-fg; + children: [ textbox-custom, listview, inputbar ]; +} + +textbox-custom { + font: "JetBrainsMono Nerd Font Bold 8"; + horizontal-align: 0.5; + padding: 1px 0; + expand: false; + background-color: @select-bg; + text-color: @select-fg; + expand: false; + content: "󰂴 Bluetooth"; +} + +/* Input */ + +inputbar { + margin: -32px 6px 6px; + border-radius: 6px; + spacing: inherit; + background-color: @input-bg; + text-color: inherit; + children: [ prompt, entry ]; +} +prompt { + padding: 6px 6px 6px 12px; + background-color: inherit; + text-color: inherit; +} +entry { + placeholder: "Search"; + padding: 6px 0; + cursor: text; + background-color: inherit; + text-color: inherit; +} + +/* List */ + +listview { + border: 2px 0 0 0; + border-radius: 8px; + border-color: @main-br; + lines: 6; + fixed-height: false; + dynamic: false; + cycle: false; + margin: 0 0 -2px; + padding: 6px 6px 40px; + background-color: @main-bg; +} + +element { + padding: 6px; + cursor: pointer; + background-color: inherit; + text-color: @main-fg; +} +element selected active, +element selected normal { + border-radius: 6px; + background-color: @select-bg; + text-color: @select-fg; +} +element-text { + padding: 0 6px; + cursor: inherit; + background-color: inherit; + text-color: inherit; +} diff --git a/rofi/power-menu.rasi b/rofi/power-menu.rasi new file mode 100644 index 0000000..2f8fff8 --- /dev/null +++ b/rofi/power-menu.rasi @@ -0,0 +1,69 @@ +/* Power menu */ + +@theme "~/.config/rofi/theme.rasi" + +configuration { + font: "JetBrainsMono Nerd Font 8"; +} + +/* Window */ + +window { + location: northeast; + anchor: north; + x-offset: -3px; + y-offset: 3px; + width: 150px; + border: 3px; + border-radius: 10px; + border-color: @main-br; + background-color: @main-bg; + children: [ mainbox ]; +} + +mainbox { + spacing: 0; + background-color: @main-br; + text-color: @main-fg; + children: [ textbox-custom, listview ]; +} + +textbox-custom { + font: "JetBrainsMono Nerd Font Bold 8"; + horizontal-align: 0.5; + padding: 1px 0; + expand: false; + background-color: @select-bg; + text-color: @select-fg; + expand: false; + content: " Power"; +} + +/* List */ + +listview { + border: 2px 0 0 0; + border-radius: 8px; + border-color: @main-br; + lines: 6; + padding: 6px; + background-color: @main-bg; +} + +element { + padding: 6px; + cursor: pointer; + background-color: inherit; + text-color: @main-fg; +} +element selected.normal { + border-radius: 6px; + background-color: @select-bg; + text-color: @select-fg; +} +element-text { + padding: 0 6px; + cursor: inherit; + background-color: inherit; + text-color: inherit; +} diff --git a/rofi/theme.rasi b/rofi/theme.rasi new file mode 100644 index 0000000..044f436 --- /dev/null +++ b/rofi/theme.rasi @@ -0,0 +1,45 @@ +/* Catppuccin Macchiato */ + +* { + rosewater: #f4dbd6; + flamingo: #f0c6c6; + pink: #f5bde6; + mauve: #c6a0f6; + red: #ed8796; + maroon: #ee99a0; + peach: #f5a97f; + yellow: #eed49f; + green: #a6da95; + teal: #8bd5ca; + sky: #91d7e3; + sapphire: #7dc4e4; + blue: #8aadf4; + lavender: #b7bdf8; + text: #cad3f5; + subtext1: #b8c0e0; + subtext0: #a5adcb; + overlay2: #939ab7; + overlay1: #8087a2; + overlay0: #6e738d; + surface2: #5b6078; + surface1: #494d64; + surface0: #363a4f; + base: #24273a; + mantle: #1e2030; + crust: #181926; +} + +/* + bg - background + fg - foreground + br - border +*/ + +* { + main-bg: @crust; + main-fg: @text; + main-br: @overlay2; + input-bg: @mantle; + select-bg: @overlay2; + select-fg: @crust; +} diff --git a/rofi/themes/catppuccin-frappe.rasi b/rofi/themes/catppuccin-frappe.rasi new file mode 100644 index 0000000..2377415 --- /dev/null +++ b/rofi/themes/catppuccin-frappe.rasi @@ -0,0 +1,45 @@ +/* Catppuccin Frappe */ + +* { + rosewater: #f2d5cf; + flamingo: #eebebe; + pink: #f4b8e4; + mauve: #ca9ee6; + red: #e78284; + maroon: #ea999c; + peach: #ef9f76; + yellow: #e5c890; + green: #a6d189; + teal: #81c8be; + sky: #99d1db; + sapphire: #85c1dc; + blue: #8caaee; + lavender: #babbf1; + text: #c6d0f5; + subtext1: #b5bfe2; + subtext0: #a5adce; + overlay2: #949cbb; + overlay1: #838ba7; + overlay0: #737994; + surface2: #626880; + surface1: #51576d; + surface0: #414559; + base: #303446; + mantle: #292c3c; + crust: #232634; +} + +/* + bg - background + fg - foreground + br - border +*/ + +* { + main-bg: @crust; + main-fg: @text; + main-br: @overlay2; + input-bg: @mantle; + select-bg: @overlay2; + select-fg: @crust; +} diff --git a/rofi/themes/catppuccin-latte.rasi b/rofi/themes/catppuccin-latte.rasi new file mode 100644 index 0000000..9460b95 --- /dev/null +++ b/rofi/themes/catppuccin-latte.rasi @@ -0,0 +1,45 @@ +/* Catppuccin Latte */ + +* { + rosewater: #dc8a78; + flamingo: #dd7878; + pink: #ea76cb; + mauve: #8839ef; + red: #d20f39; + maroon: #e64553; + peach: #fe640b; + yellow: #df8e1d; + green: #40a02b; + teal: #179299; + sky: #04a5e5; + sapphire: #209fb5; + blue: #1e66f5; + lavender: #7287fd; + text: #4c4f69; + subtext1: #5c5f77; + subtext0: #6c6f85; + overlay2: #7c7f93; + overlay1: #8c8fa1; + overlay0: #9ca0b0; + surface2: #acb0be; + surface1: #bcc0cc; + surface0: #ccd0da; + base: #eff1f5; + mantle: #e6e9ef; + crust: #dce0e8; +} + +/* + bg - background + fg - foreground + br - border +*/ + +* { + main-bg: @crust; + main-fg: @text; + main-br: @overlay2; + input-bg: @mantle; + select-bg: @overlay2; + select-fg: @crust; +} diff --git a/rofi/themes/catppuccin-macchiato.rasi b/rofi/themes/catppuccin-macchiato.rasi new file mode 100644 index 0000000..044f436 --- /dev/null +++ b/rofi/themes/catppuccin-macchiato.rasi @@ -0,0 +1,45 @@ +/* Catppuccin Macchiato */ + +* { + rosewater: #f4dbd6; + flamingo: #f0c6c6; + pink: #f5bde6; + mauve: #c6a0f6; + red: #ed8796; + maroon: #ee99a0; + peach: #f5a97f; + yellow: #eed49f; + green: #a6da95; + teal: #8bd5ca; + sky: #91d7e3; + sapphire: #7dc4e4; + blue: #8aadf4; + lavender: #b7bdf8; + text: #cad3f5; + subtext1: #b8c0e0; + subtext0: #a5adcb; + overlay2: #939ab7; + overlay1: #8087a2; + overlay0: #6e738d; + surface2: #5b6078; + surface1: #494d64; + surface0: #363a4f; + base: #24273a; + mantle: #1e2030; + crust: #181926; +} + +/* + bg - background + fg - foreground + br - border +*/ + +* { + main-bg: @crust; + main-fg: @text; + main-br: @overlay2; + input-bg: @mantle; + select-bg: @overlay2; + select-fg: @crust; +} diff --git a/rofi/themes/catppuccin-mocha.rasi b/rofi/themes/catppuccin-mocha.rasi new file mode 100644 index 0000000..c2b8954 --- /dev/null +++ b/rofi/themes/catppuccin-mocha.rasi @@ -0,0 +1,45 @@ +/* Catppuccin Mocha */ + +* { + rosewater: #f5e0dc; + flamingo: #f2cdcd; + pink: #f5c2e7; + mauve: #cba6f7; + red: #f38ba8; + maroon: #eba0ac; + peach: #fab387; + yellow: #f9e2af; + green: #a6e3a1; + teal: #94e2d5; + sky: #89dceb; + sapphire: #74c7ec; + blue: #89b4fa; + lavender: #b4befe; + text: #cdd6f4; + subtext1: #bac2de; + subtext0: #a6adc8; + overlay2: #9399b2; + overlay1: #7f849c; + overlay0: #6c7086; + surface2: #585b70; + surface1: #45475a; + surface0: #313244; + base: #1e1e2e; + mantle: #181825; + crust: #11111b; +} + +/* + bg - background + fg - foreground + br - border +*/ + +* { + main-bg: @crust; + main-fg: @text; + main-br: @overlay2; + input-bg: @mantle; + select-bg: @overlay2; + select-fg: @crust; +} diff --git a/rofi/themes/gruvbox-dark.rasi b/rofi/themes/gruvbox-dark.rasi new file mode 100644 index 0000000..fccdc27 --- /dev/null +++ b/rofi/themes/gruvbox-dark.rasi @@ -0,0 +1,45 @@ +/* Gruvbox Dark */ + +* { + bg0h: #1d2021; + bg0: #282828; + bg1: #3c3836; + bg2: #504945; + bg3: #665c54; + bg4: #7c6f64; + gray: #928374; + fg4: #a89984; + fg3: #bdae93; + fg2: #d5c4a1; + fg1: #ebdbb2; + fg0: #fbf1c7; + red: #cc241d; + brightred: #fb4934; + green: #98971a; + brightgreen: #b8bb26; + yellow: #d79921; + brightyellow: #fabd2f; + blue: #458588; + brightblue: #83a598; + purple: #b16286; + brightpurple: #d3869b; + aqua: #689d6a; + brightaqua: #8ec07c; + orange: #d65d0e; + brightorange: #fe8019; +} + +/* + bg - background + fg - foreground + br - border +*/ + +* { + main-bg: @bg0h; + main-fg: @fg0; + main-br: @yellow; + input-bg: @bg1; + select-bg: @yellow; + select-fg: @bg0h; +} diff --git a/rofi/themes/gruvbox-light.rasi b/rofi/themes/gruvbox-light.rasi new file mode 100644 index 0000000..aa48597 --- /dev/null +++ b/rofi/themes/gruvbox-light.rasi @@ -0,0 +1,45 @@ +/* Gruvbox Dark */ + +* { + bg0h: #f9f5d7; + bg0: #fbf1c7; + bg1: #ebdbb2; + bg2: #d5c4a1; + bg3: #bdae93; + bg4: #a89984; + gray: #928374; + fg4: #7c6f64; + fg3: #665c54; + fg2: #504945; + fg1: #3c3836; + fg0: #282828; + red: #cc241d; + brightred: #9d0006; + green: #98971a; + brightgreen: #79740e; + yellow: #d79921; + brightyellow: #b57614; + blue: #458588; + brightblue: #076678; + purple: #b16286; + brightpurple: #8f3f71; + aqua: #689d6a; + brightaqua: #427b58; + orange: #d65d0e; + brightorange: #af3a03; +} + +/* + bg - background + fg - foreground + br - border +*/ + +* { + main-bg: @bg0h; + main-fg: @fg0; + main-br: @brightyellow; + input-bg: @bg1; + select-bg: @brightyellow; + select-fg: @bg0h; +} diff --git a/rofi/wifi-menu.rasi b/rofi/wifi-menu.rasi new file mode 100644 index 0000000..ca8663d --- /dev/null +++ b/rofi/wifi-menu.rasi @@ -0,0 +1,96 @@ +/* WiFi menu */ + +@theme "~/.config/rofi/theme.rasi" + +configuration { + font: "JetBrainsMono Nerd Font 8"; +} + +/* Window */ + +window { + location: north; + anchor: south; + y-offset: 3px; + width: 240px; + border: 3px; + border-radius: 10px; + border-color: @main-br; + background-color: @main-bg; + children: [ mainbox ]; +} + +mainbox { + spacing: 0; + background-color: @main-br; + text-color: @main-fg; + children: [ textbox-custom, listview, inputbar ]; +} + +textbox-custom { + font: "JetBrainsMono Nerd Font Bold 8"; + horizontal-align: 0.5; + padding: 1px 0; + expand: false; + background-color: @select-bg; + text-color: @select-fg; + expand: false; + content: "󰖩 Wi-Fi"; +} + +/* Input */ + +inputbar { + margin: -32px 6px 6px; + border-radius: 6px; + spacing: inherit; + background-color: @input-bg; + text-color: inherit; + children: [ prompt, entry ]; +} +prompt { + padding: 6px 6px 6px 12px; + background-color: inherit; + text-color: inherit; +} +entry { + placeholder: "Search"; + padding: 6px 0; + cursor: text; + background-color: inherit; + text-color: inherit; +} + +/* List */ + +listview { + border: 2px 0 0 0; + border-radius: 8px; + border-color: @main-br; + lines: 6; + fixed-height: false; + dynamic: false; + cycle: false; + margin: 0 0 -2px; + padding: 6px 6px 40px; + background-color: @main-bg; +} + +element { + padding: 6px; + cursor: pointer; + background-color: inherit; + text-color: @main-fg; +} +element selected active, +element selected normal { + border-radius: 6px; + background-color: @select-bg; + text-color: @select-fg; +} +element-text { + padding: 0 6px; + cursor: inherit; + background-color: inherit; + text-color: inherit; +} diff --git a/swaync/config.json b/swaync/config.json new file mode 100644 index 0000000..87a7120 --- /dev/null +++ b/swaync/config.json @@ -0,0 +1,60 @@ +{ + "$schema": "/etc/xdg/swaync/configSchema.json", + "ignore-gtk-theme": true, + "positionX": "left", + "positionY": "top", + "layer": "overlay", + "control-center-layer": "top", + "layer-shell": true, + "layer-shell-cover-screen": true, + "cssPriority": "user", + "control-center-margin-top": 7, + "control-center-margin-bottom": 0, + "control-center-margin-right": 7, + "control-center-margin-left": 0, + "notification-2fa-action": true, + "notification-inline-replies": false, + "notification-body-image-height": 150, + "notification-body-image-width": 700, + "timeout": 0, + "timeout-low": 0, + "timeout-critical": 0, + "fit-to-screen": false, + "relative-timestamps": true, + "control-center-width": 350, + "control-center-height": 800, + "notification-window-width": 350, + "keyboard-shortcuts": true, + "notification-grouping": true, + "image-visibility": "when-available", + "transition-time": 200, + "hide-on-clear": false, + "hide-on-action": true, + "text-empty": "No Notifications", + "script-fail-notify": true, + "widgets": [ + "mpris", + "dnd", + "title", + "notifications" + ], + "widget-config": { + "notifications": { + "vexpand": true + }, + "title": { + "text": "Notifications", + "clear-all-button": true, + "button-text": "Clear All" + }, + "dnd": { + "text": "" + }, + "mpris": { + "blacklist": [], + "autohide": false, + "show-album-art": "always", + "loop-carousel": false + } + } +} diff --git a/swaync/style.css b/swaync/style.css new file mode 100644 index 0000000..bc121fc --- /dev/null +++ b/swaync/style.css @@ -0,0 +1,265 @@ +/* Universal swaync - theme-independent, optimized for blur */ +:root { + --cc-bg: rgba(20, 20, 20, 0.70); /* rgba(18, 18, 22, 0.70) */ + --noti-bg: rgba(28, 28, 28, 0.72); /* rgba(28, 28, 32, 0.72) */ + --noti-bg-hover: rgba(38, 38, 38, 0.75); /* rgba(38, 38, 44, 0.75) */ + --noti-bg-focus: rgba(48, 48, 48, 0.78); /* rgba(48, 48, 54, 0.78) */ + --noti-bg-floating: rgba(22, 22, 22, 0.74); /* rgba(22, 22, 26, 0.74) */ + --noti-border-color: rgba(255, 255, 255, 0.10); + --noti-border-hover: rgba(255, 255, 255, 0.15); + --noti-border-focus: rgba(255, 255, 255, 0.20); + --button-bg: rgba(255, 255, 255, 0.10); + --button-hover: rgba(255, 255, 255, 0.15); + --button-active: rgba(255, 255, 255, 0.20); + --close-bg: rgba(255, 255, 255, 0.10); + --close-hover: rgba(255, 70, 70, 0.35); + --text-primary: rgba(255, 255, 255, 0.97); + --text-secondary: rgba(210, 210, 220, 0.88); + --text-disabled: rgba(160, 160, 170, 0.68); + --border-radius: 10px; + --transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); +} + +.notification-window, .blank-window { background: transparent; } + +.control-center { + background: var(--cc-bg); + border-radius: var(--border-radius); + border: 1px solid var(--noti-border-color); + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5); + padding: 2px; +} + +.control-center scrollbar, .control-center scrollbar slider { + background: transparent; + opacity: 0; +} + +/* MPRIS */ +.widget-mpris { margin: 6px 6px 4px 6px; } +.widget-mpris > box > box { + background: var(--noti-bg); + border-radius: var(--border-radius); + border: 1px solid var(--noti-border-color); + padding: 10px; +} +.mpris-album-art { + border-radius: 6px; + margin-right: 10px; + min-width: 56px; + min-height: 56px; +} +.mpris-title { + font-size: 14px; + font-weight: 600; + color: var(--text-primary); + margin-bottom: 2px; +} +.mpris-artist { + font-size: 13px; + color: var(--text-secondary); + margin-bottom: 6px; +} +.mpris-controls button { + background: var(--button-bg); + border: none; + border-radius: 6px; + color: var(--text-primary); + min-width: 32px; + min-height: 32px; + margin: 0 3px; + transition: var(--transition); +} +.mpris-controls button:hover { + background: var(--button-hover); + transform: scale(1.05); +} +.mpris-controls button:active { + background: var(--button-active); + transform: scale(0.98); +} + +/* Title */ +.widget-title { margin: 4px 6px 4px 6px; } +.widget-title > box { padding: 6px; } +.widget-title > box > label { + font-size: 14px; + font-weight: 700; + color: var(--text-primary); +} +.widget-title > box > button { + background: var(--button-bg); + border: 1px solid var(--noti-border-color); + border-radius: 6px; + padding: 4px 10px; + font-size: 12px; + color: var(--text-primary); + transition: var(--transition); +} +.widget-title > box > button:hover { + background: var(--button-hover); + border-color: var(--noti-border-hover); + transform: scale(1.02); +} +.widget-title > box > button:active { + background: var(--button-active); + border-color: var(--noti-border-focus); +} + +/* DND */ +.widget-dnd { + margin: 4px 6px 4px 6px; + /* REMOVED: text-align - not supported in GTK CSS */ +} +.widget-dnd label { + /* REMOVED: display: none - use opacity instead */ + opacity: 0; + min-width: 0; + min-height: 0; +} +.widget-dnd switch { + background: rgba(40, 40, 45, 0.6); + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 10px; + min-height: 24px; + min-width: 44px; +} +.widget-dnd switch:checked { + background: rgba(100, 120, 140, 0.35); + border-color: rgba(120, 140, 160, 0.4); +} +.widget-dnd switch slider { + background: rgba(200, 200, 210, 0.9); + border-radius: 50%; + min-width: 18px; + min-height: 18px; + margin: 3px; +} +.widget-dnd switch:checked slider { background: rgba(140, 160, 180, 1); } + +/* Notifications */ +.widget-notifications { margin: 2px; } +.notification-row { + background: none; + outline: none; +} +.notification-row .notification-background { padding: 3px; } +.notification-row .notification-background .notification { + background: var(--noti-bg); + border-radius: var(--border-radius); + border: 1px solid var(--noti-border-color); + margin: 3px 0; + transition: var(--transition); + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); +} +.notification-row .notification-background .notification:hover { + background: var(--noti-bg-hover); + border-color: var(--noti-border-hover); + box-shadow: 0 3px 10px rgba(0, 0, 0, 0.35); + transform: translateY(-1px); +} +.notification-row .notification-background .notification .notification-default-action { + padding: 10px; + color: var(--text-primary); + border-radius: var(--border-radius); +} + +/* Floating */ +.floating-notifications .notification { + background: var(--noti-bg-floating) !important; + border-radius: var(--border-radius); + border: 1px solid var(--noti-border-color); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.6); + padding: 10px; +} + +/* Content */ +.notification .notification-content { padding: 3px; } +.notification .summary { + font-size: 14px; + font-weight: 600; + color: var(--text-primary); + margin-bottom: 3px; +} +.notification .body { + font-size: 13px; + color: var(--text-secondary); + margin-bottom: 3px; +} +.notification .time { + font-size: 11px; + color: var(--text-disabled); +} +.notification image { + border-radius: 6px; + margin-right: 10px; + min-width: 44px; + min-height: 44px; +} +.notification .body-image { + border-radius: 6px; + margin-top: 6px; +} + +/* Close */ +.close-button { + background: var(--close-bg); + color: var(--text-primary); + border-radius: 100%; + min-width: 22px; + min-height: 22px; + margin: 6px; + transition: var(--transition); +} +.close-button:hover { + background: var(--close-hover); + transform: scale(1.1); +} +.close-button:active { transform: scale(0.95); } + +/* Groups */ +.notification-group { + margin: 3px; +} +.notification-group.collapsed { + background: var(--noti-bg); + border-radius: var(--border-radius); + border: 1px solid var(--noti-border-color); + margin: 3px 0; + transition: var(--transition); +} +.notification-group.collapsed:hover { + background: var(--noti-bg-hover); + border-color: var(--noti-border-hover); + transform: translateY(-1px); + box-shadow: 0 3px 10px rgba(0, 0, 0, 0.35); +} +.notification-group.collapsed .notification { + /* REMOVED: display: none - use opacity instead */ + opacity: 0; + min-height: 0; + min-width: 0; +} +.notification-group-headers { + padding: 10px 12px; + margin: 0; + /* REMOVED: cursor - not supported in GTK CSS */ +} +.notification-group-headers .notification-group-icon, +.notification-group-headers .notification-group-header { + color: var(--text-primary); + font-weight: 600; + font-size: 13px; +} +.notification-group-headers .notification-group-count { + color: var(--text-secondary); + font-size: 12px; + font-weight: 500; +} + +/* Empty */ +.blank-window label { + color: var(--text-disabled); + font-size: 13px; + font-style: italic; +} diff --git a/waybar/.github/README.md b/waybar/.github/README.md deleted file mode 100644 index f3e8b31..0000000 --- a/waybar/.github/README.md +++ /dev/null @@ -1,126 +0,0 @@ -
- -## 🤖 mechabar - -A mecha-themed, modular Waybar configuration. - -| ![Mechabar](assets/catppuccin-mocha.png) | -| :--------------------------------------: | - -
-Themes -
- -**Catppuccin:** - -| Mocha _(default)_ | -| :----------------------------------------------: | -| ![Catppuccin Mocha](assets/catppuccin-mocha.png) | - -| Macchiato | -| :------------------------------------------------------: | -| ![Catppuccin Macchiato](assets/catppuccin-macchiato.png) | - -| Frappe | -| :------------------------------------------------: | -| ![Catppuccin Frappe](assets/catppuccin-frappe.png) | - -| Latte | -| :----------------------------------------------: | -| ![Catppuccin Latte](assets/catppuccin-latte.png) | - -
-
- -# - -### Requirements - -1. [Waybar](https://github.com/Alexays/Waybar) - -> [!WARNING] -> **Version 0.14.0** has an [issue](https://github.com/Alexays/Waybar/issues/4354) with wildcard includes. -> Use the `fix/v0.14.0` branch as a temporary workaround. - -2. A terminal emulator _(default: **Kitty**)_ - -> [!IMPORTANT] -> If you use a different terminal emulator (e.g., **Ghostty**), -> you need to replace all instances of `kitty` with your terminal command: -> -> ```diff -> - "on-click": "kitty -e ..." -> + "on-click": "ghostty -e ..." -> ``` - -# - -### Installation - -1. Back up your current configuration: - - ```bash - mv ~/.config/waybar{,.bak} - ``` - -2. Clone the repository: - - ```bash - git clone https://github.com/sejjy/mechabar.git ~/.config/waybar - ``` - - For **Waybar v0.14.0**: - - ```bash - git clone -b fix/v0.14.0 https://github.com/sejjy/mechabar.git ~/.config/waybar - ``` - -3. Run the [install script](/install.sh): - - ```bash - ~/.config/waybar/install.sh - ``` - - This makes the [scripts](/scripts/) executable and installs all dependencies listed below: - - | Package | Description | - | --------------------------------: | ------------------------------------------------------------------------------ | - | `bluez` | Daemons for the bluetooth protocol stack | - | _(bluetoothctl)_ `bluez-utils` | Development and debugging utilities for the bluetooth protocol stack | - | `brightnessctl` | Lightweight brightness control tool | - | `fzf` | Command-line fuzzy finder | - | _(nmcli)_ `networkmanager` | Network connection manager and user applications | - | _(checkupdates)_ `pacman-contrib` | Contributed scripts and tools for pacman systems | - | `pipewire-pulse` | Low-latency audio/video router and processor - PulseAudio replacement | - | `ttf-0xproto-nerd` | Patched font 0xProto from nerd fonts library | - -# - -### Customization - -- To change the theme, copy the file with your preferred theme (e.g., `catppuccin-latte.css`) to `theme.css`: - - ```bash - cd ~/.config/waybar - cp themes/catppuccin-latte.css theme.css - ``` - -# - -### Documentation - -- [Waybar wiki](https://github.com/Alexays/Waybar/wiki) - -- Man page: - - ```bash - man waybar - ``` - -# - -### Credits - -- Font: [0xProto](https://github.com/0xType/0xProto) -- Icons: [Nerd Fonts](https://github.com/ryanoasis/nerd-fonts) -- Themes: [Catppuccin](https://github.com/catppuccin/waybar) diff --git a/waybar/.github/assets/catppuccin-frappe.png b/waybar/.github/assets/catppuccin-frappe.png deleted file mode 100644 index 30640f664ffc3bdfa5cbb52007e99e4e9fe45e4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24234 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 diff --git a/waybar/.github/assets/catppuccin-macchiato.png b/waybar/.github/assets/catppuccin-macchiato.png deleted file mode 100644 index 6dbb31277e956e4a51a99430ca49db79e61e3325..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23498 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 Zk-+dN`siy6o2>sHr6i{=TO(~A`afHhG?xGX diff --git a/waybar/.github/assets/catppuccin-mocha.png b/waybar/.github/assets/catppuccin-mocha.png deleted file mode 100644 index 2138776152aa9920a5b92483fb554116d57ca026..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23887 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 - "include": [ - // modules-left - "~/.config/waybar/modules/custom/user.jsonc", - "~/.config/waybar/modules/hyprland/workspaces.jsonc", - "~/.config/waybar/modules/hyprland/window.jsonc", + "modules-left": [ + "custom/ws", // window icon + "custom/left1", - // modules-center - "~/.config/waybar/modules/hyprland/windowcount.jsonc", - "~/.config/waybar/modules/temperature.jsonc", - "~/.config/waybar/modules/memory.jsonc", - "~/.config/waybar/modules/cpu.jsonc", - "~/.config/waybar/modules/custom/distro.jsonc", - "~/.config/waybar/modules/idle_inhibitor.jsonc", - "~/.config/waybar/modules/clock.jsonc", - "~/.config/waybar/modules/network.jsonc", - "~/.config/waybar/modules/bluetooth.jsonc", - "~/.config/waybar/modules/custom/system_update.jsonc", + "hyprland/workspaces", // workspaces + "custom/right1", - // modules-right - "~/.config/waybar/modules/mpris.jsonc", - "~/.config/waybar/modules/pulseaudio.jsonc", - "~/.config/waybar/modules/backlight.jsonc", - "~/.config/waybar/modules/battery.jsonc", - "~/.config/waybar/modules/custom/power_menu.jsonc", + "custom/paddw", + "hyprland/window" // window title + ], - "~/.config/waybar/modules/custom/dividers.jsonc" + "modules-center": [ + "custom/paddc", + "custom/left2", + "custom/temperature", // temperature - // modules that are not included by default: - // "~/.config/waybar/modules/extras/taskbar.jsonc", - // "~/.config/waybar/modules/extras/tray.jsonc", - // "~/.config/waybar/modules/extras/wireplumber.jsonc" - ], + "custom/left3", + "memory", // memory - /*------------ - layout - ------------*/ + "custom/left4", + "cpu", // cpu + "custom/leftin1", - "modules-left": [ - "group/user", - "custom/left_div#1", - "hyprland/workspaces", - "custom/right_div#1", - "hyprland/window" - ], - "modules-center": [ - "hyprland/windowcount", - "custom/left_div#2", - "temperature", - "custom/left_div#3", - "memory", - "custom/left_div#4", - "cpu", - "custom/left_inv#1", - "custom/left_div#5", - "custom/distro", - "custom/right_div#2", - "custom/right_inv#1", - "idle_inhibitor", - "clock#time", - "custom/right_div#3", - "clock#date", - "custom/right_div#4", - "network", - "bluetooth", - "custom/system_update", - "custom/right_div#5" - ], - "modules-right": [ - "mpris", - "custom/left_div#6", - "group/pulseaudio", - "custom/left_div#7", - "backlight", - "custom/left_div#8", - "battery", - "custom/left_inv#2", - "custom/power_menu" - ], + "custom/left5", + "custom/distro", // distro icon + "custom/right2", - /*------------- - options - -------------*/ + "custom/rightin1", + "idle_inhibitor", // idle inhibitor + "clock#time", // time + "custom/right3", - // "expand-center": - // "expand-left": - // "expand-right": - "layer": "top", - // "output": - // "position": - "height": 0, - "width": 0, - "margin": 0, - // "margin-top": - // "margin-left": - // "margin-bottom": - // "margin-right": - // "no-center": - "spacing": 0, - // "name": - "mode": "dock", - // "start_hidden": - // "modifier-reset": - // "exclusive": - // "fixed-center": - // "passthrough": - // "ipc": - // "id": - "reload_style_on_change": true - // "on-sigusr1": - // "on-sigusr2": + "clock#date", // date + "custom/right4", + + "custom/wifi", // wi-fi + "custom/wireguard", // wireguard + "bluetooth", // bluetooth + "custom/update", // system update + "custom/right5" + ], + + "modules-right": [ + "mpris", // media info + + "custom/left6", + "pulseaudio", // output device + + "custom/left7", + "backlight", // brightness + + "custom/left8", + "battery", // battery + + "custom/leftin2", + "custom/power" // power button + ], + + // <<--< Modules >-->> + + "custom/ws": { + "exec": "~/.config/waybar/scripts/current-theme.sh", + "return-type": "json", + "format": " 󰤕 ", + "on-click": "~/.config/waybar/scripts/theme-switcher.sh", + "min-length": 3, + "max-length": 3 + }, + + "hyprland/workspaces": { + "persistent-workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [] + } + }, + + "hyprland/window": { + "format": "{}", + "tooltip": false, + "min-length": 5, + + "rewrite": { + // Desktop + "": + " Hyprland", + + // Terminal + "~": " Terminal", + "zsh": " Terminal", + "kitty": " Terminal", + + "tmux(.*)": + " Tmux", + + // Browser + + "(.*)Mozilla Firefox": + "󰈹 Firefox", + "(.*) — Mozilla Firefox": + "󰈹 $1", + + "(.*)Zen Browser": + "󰺕 Zen Browser", + "(.*) — Zen Browser": + "󰺕 $1", + + // Development + + "(.*) - Visual Studio Code": + "󰨞 $1", + "(.*)Visual Studio Code": + "󰨞 Visual Studio Code", + + "nvim": + " Neovim", + "nvim (.*)": + " $1", + + "vim": + " Vim", + "vim (.*)": + " $1", + + // Media + "OBS(.*)": + " OBS Studio", + + "VLC media player": + "󰕼 VLC Media Player", + "(.*) - VLC media player": + "󰕼 $1", + + "(.*) - mpv": + " $1", + + "qView": " qView", + + "(.*).jpg": " $1.jpg", + "(.*).png": " $1.png", + "(.*).svg": " $1.svg", + + // Social + + "• Discord(.*)": "Discord$1", + "(.*)Discord(.*)": + " $1Discord$2", + + // Documents + + "ONLYOFFICE Desktop Editors": + " OnlyOffice Desktop", + + "(.*).docx": + " $1.docx", + "(.*).xlsx": + " $1.xlsx", + "(.*).pptx": + " $1.pptx", + "(.*).pdf": + " $1.pdf", + + // System + "Authenticate": " Authenticate" + } + }, + + "custom/temperature": { + "exec": "~/.config/waybar/scripts/cpu-temp.sh", + "return-type": "json", + "format": "{}", + "interval": 5, + "min-length": 8, + "max-length": 8 + }, + + "memory": { + "states": { + "warning": 75, + "critical": 90 + }, + + "format": "󰘚 {percentage}%", + "format-critical": "󰀦 {percentage}%", + "tooltip": false, + // "tooltip-format": "Memory Used: {used:0.1f} GB / {total:0.1f} GB", + "interval": 5, + "min-length": 7, + "max-length": 7 + }, + + "cpu": { + "format": "󰻠 {usage}%", + "tooltip": false, + "interval": 5, + "min-length": 6, + "max-length": 6 + }, + + "custom/distro": { + "format": " ", + "tooltip": false + }, + + "idle_inhibitor": { + "format": "{icon}", + + "format-icons": { + "activated": "󰈈 ", + "deactivated": "󰈉 " + }, + + "tooltip-format-activated": "Presentation Mode", + "tooltip-format-deactivated": "Idle Mode", + "start-activated": false + }, + + "clock#time": { + "format": "{:%H:%M}", + "tooltip": false, + // "tooltip-format": "Standard Time: {:%I:%M %p}", + "min-length": 6, + "max-length": 6 + }, + + "clock#date": { + "format": "󰨳 {:%m-%d}", + "tooltip-format": "{calendar}", + + "calendar": { + "mode": "month", + "mode-mon-col": 6, + "weeks-pos": "right", + "on-click-right": "mode", + + "format": { + "months": + "{}", + "weekdays": + "{}", + "today": + "{}" + } + }, + + "actions": { + "on-click": "mode", + "on-click-right": "mode" + }, + + "min-length": 8, + "max-length": 8 + }, + + "custom/wifi": { + "exec": "~/.config/waybar/scripts/wifi-status.sh", + "return-type": "json", + "format": "{}", + "on-click": "~/.config/waybar/scripts/wifi-menu.sh", + "on-click-right": "kitty --title '󰤨 Network Manager TUI' bash -c nmtui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/wireguard": { + "format": "{}", + "return-type": "json", + "interval": 10, + "exec": "~/.config/waybar/scripts/wireguard-status.sh", + "tooltip": true + }, + + + "bluetooth": { + "format": "󰂰", + "format-disabled": "󰂲", + "format-connected": "󰂱", + "format-connected-battery": "󰂱", + + "tooltip-format": + "{num_connections} connected", + "tooltip-format-disabled": + "Bluetooth Disabled", + "tooltip-format-connected": + "{device_enumerate}", + "tooltip-format-enumerate-connected": + "{device_alias}", + "tooltip-format-enumerate-connected-battery": + ":: {device_alias}: 󱊣 {device_battery_percentage}%", + + "on-click": "~/.config/waybar/scripts/bluetooth-menu.sh", + "on-click-right": "kitty --title '󰂯 Bluetooth TUI' bash -c bluetui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/update": { + "exec": "~/.config/waybar/scripts/system-update.sh", + "return-type": "json", + "format": "{}", + "on-click": "hyprctl dispatch exec '~/.config/waybar/scripts/system-update.sh up'", + "interval": 180, + "min-length": 1, + "max-length": 1 + }, + + "mpris": { + "format": "{player_icon} {title} - {artist}", + "format-paused": "{status_icon} {title} - {artist}", + + "player-icons": { + "default": "󰝚 ", + "spotify": "󰓇 ", + "firefox": "󰗃 " + }, + "status-icons": { + "paused": "\u200A\u200A󰏤\u2009\u2009" + }, + + "tooltip-format": "Playing: {title} - {artist}", + "tooltip-format-paused": "Paused: {title} - {artist}", + "min-length": 5, + "max-length": 35 + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-muted": "󰝟 {volume}%", + + "format-icons": { + "default": ["󰕿", "󰖀", "󰕾"], + "headphone": "󰋋", + "headset": "󰋋" + }, + + "tooltip-format": "Device: {desc}", + "on-click": "~/.config/waybar/scripts/volume-control.sh -o m", + "on-scroll-up": "~/.config/waybar/scripts/volume-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/volume-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "backlight": { + "format": "{icon} {percent}%", + "format-icons": ["", "", "", "", "", "", "", "", ""], + "tooltip": false, + "on-scroll-up": "~/.config/waybar/scripts/brightness-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/brightness-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "battery": { + "states": { + "warning": 20, + "critical": 10 + }, + + "format": "{icon} {capacity}%", + "format-icons": ["󰂎", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"], + "format-charging": " {capacity}%", + + "tooltip-format": "Discharging: {time}", + "tooltip-format-charging": "Charging: {time}", + "interval": 1, + "min-length": 6, + "max-length": 6 + }, + + "custom/power": { + "format": " ", + "tooltip": false, + // "tooltip-format": "Power Menu", + "on-click": "~/.config/waybar/scripts/power-menu.sh" + }, + + // <<--< Padding >-->> + + "custom/paddw": { + "format": " ", + "tooltip": false + }, + + "custom/paddc": { + "format": " ", + "tooltip": false + }, + + // Left Arrows + + "custom/left1": { + "format": "", + "tooltip": false + }, + "custom/left2": { + "format": "", + "tooltip": false + }, + "custom/left3": { + "format": "", + "tooltip": false + }, + "custom/left4": { + "format": "", + "tooltip": false + }, + "custom/left5": { + "format": "", + "tooltip": false + }, + "custom/left6": { + "format": "", + "tooltip": false + }, + "custom/left7": { + "format": "", + "tooltip": false + }, + "custom/left8": { + "format": "", + "tooltip": false + }, + + // Right Arrows + + "custom/right1": { + "format": "", + "tooltip": false + }, + "custom/right2": { + "format": "", + "tooltip": false + }, + "custom/right3": { + "format": "", + "tooltip": false + }, + "custom/right4": { + "format": "", + "tooltip": false + }, + "custom/right5": { + "format": "", + "tooltip": false + }, + + // Left Inverse + + "custom/leftin1": { + "format": "", + "tooltip": false + }, + "custom/leftin2": { + "format": "", + "tooltip": false + }, + + // Right Inverse + + "custom/rightin1": { + "format": "", + "tooltip": false + } } diff --git a/waybar/config.jsonc.backup b/waybar/config.jsonc.backup new file mode 100644 index 0000000..fc9305c --- /dev/null +++ b/waybar/config.jsonc.backup @@ -0,0 +1,489 @@ +{ + "layer": "top", + "position": "top", + "mode": "dock", + "reload_style_on_change": true, + "gtk-layer-shell": true, + + // <<--< Positions >-->> + + "modules-left": [ + "custom/ws", // window icon + "custom/left1", + + "hyprland/workspaces", // workspaces + "custom/right1", + + "custom/paddw", + "hyprland/window" // window title + ], + + "modules-center": [ + "custom/paddc", + "custom/left2", + "custom/temperature", // temperature + + "custom/left3", + "memory", // memory + + "custom/left4", + "cpu", // cpu + "custom/leftin1", + + "custom/left5", + "custom/distro", // distro icon + "custom/right2", + + "custom/rightin1", + "idle_inhibitor", // idle inhibitor + "clock#time", // time + "custom/right3", + + "clock#date", // date + "custom/right4", + + "custom/wifi", // wi-fi + "custom/wireguard", // wireguard + "bluetooth", // bluetooth + "custom/update", // system update + "custom/right5" + ], + + "modules-right": [ + "mpris", // media info + + "custom/left6", + "pulseaudio", // output device + + "custom/left7", + "backlight", // brightness + + "custom/left8", + "battery", // battery + + "custom/leftin2", + "custom/power" // power button + ], + + // <<--< Modules >-->> + + "custom/ws": { + "exec": "~/.config/waybar/scripts/current-theme.sh", + "return-type": "json", + "format": " 󰤕 ", + "on-click": "~/.config/waybar/scripts/theme-switcher.sh", + "min-length": 3, + "max-length": 3 + }, + + "hyprland/workspaces": { + "on-scroll-up": "hyprctl dispatch workspace -1", + "on-scroll-down": "hyprctl dispatch workspace +1", + "persistent-workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [] + } + }, + + "hyprland/window": { + "format": "{}", + "tooltip": false, + "min-length": 5, + + "rewrite": { + // Desktop + "": + " Hyprland", + + // Terminal + "~": " Terminal", + "zsh": " Terminal", + "kitty": " Terminal", + + "tmux(.*)": + " Tmux", + + // Browser + + "(.*)Mozilla Firefox": + "󰈹 Firefox", + "(.*) — Mozilla Firefox": + "󰈹 $1", + + "(.*)Zen Browser": + "󰺕 Zen Browser", + "(.*) — Zen Browser": + "󰺕 $1", + + // Development + + "(.*) - Visual Studio Code": + "󰨞 $1", + "(.*)Visual Studio Code": + "󰨞 Visual Studio Code", + + "nvim": + " Neovim", + "nvim (.*)": + " $1", + + "vim": + " Vim", + "vim (.*)": + " $1", + + // Media + + "(.*)Spotify": + " Spotify", + "(.*)Spotify Premium": + " Spotify Premium", + + "OBS(.*)": + " OBS Studio", + + "VLC media player": + "󰕼 VLC Media Player", + "(.*) - VLC media player": + "󰕼 $1", + + "(.*) - mpv": + " $1", + + "qView": " qView", + + "(.*).jpg": " $1.jpg", + "(.*).png": " $1.png", + "(.*).svg": " $1.svg", + + // Social + + "vesktop": + " Discord", + + "• Discord(.*)": "Discord$1", + "(.*)Discord(.*)": + " $1Discord$2", + + // Documents + + "ONLYOFFICE Desktop Editors": + " OnlyOffice Desktop", + + "(.*).docx": + " $1.docx", + "(.*).xlsx": + " $1.xlsx", + "(.*).pptx": + " $1.pptx", + "(.*).pdf": + " $1.pdf", + + // System + "Authenticate": " Authenticate" + } + }, + + "custom/temperature": { + "exec": "~/.config/waybar/scripts/cpu-temp.sh", + "return-type": "json", + "format": "{}", + "interval": 5, + "min-length": 8, + "max-length": 8 + }, + + "memory": { + "states": { + "warning": 75, + "critical": 90 + }, + + "format": "󰘚 {percentage}%", + "format-critical": "󰀦 {percentage}%", + "tooltip": false, + // "tooltip-format": "Memory Used: {used:0.1f} GB / {total:0.1f} GB", + "interval": 5, + "min-length": 7, + "max-length": 7 + }, + + "cpu": { + "format": "󰻠 {usage}%", + "tooltip": false, + "interval": 5, + "min-length": 6, + "max-length": 6 + }, + + "custom/distro": { + "format": " ", + "tooltip": false + }, + + "idle_inhibitor": { + "format": "{icon}", + + "format-icons": { + "activated": "󰈈 ", + "deactivated": "󰈉 " + }, + + "tooltip-format-activated": "Presentation Mode", + "tooltip-format-deactivated": "Idle Mode", + "start-activated": false + }, + + "clock#time": { + "format": "{:%H:%M}", + "tooltip": false, + // "tooltip-format": "Standard Time: {:%I:%M %p}", + "min-length": 6, + "max-length": 6 + }, + + "clock#date": { + "format": "󰨳 {:%m-%d}", + "tooltip-format": "{calendar}", + + "calendar": { + "mode": "month", + "mode-mon-col": 6, + "weeks-pos": "right", + "on-click-right": "mode", + + "format": { + "months": + "{}", + "weekdays": + "{}", + "today": + "{}" + } + }, + + "actions": { + "on-click": "mode", + "on-click-right": "mode" + }, + + "min-length": 8, + "max-length": 8 + }, + + "custom/wifi": { + "exec": "~/.config/waybar/scripts/wifi-status.sh", + "return-type": "json", + "format": "{}", + "on-click": "~/.config/waybar/scripts/wifi-menu.sh", + "on-click-right": "kitty --title '󰤨 Network Manager TUI' bash -c nmtui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/wireguard": { + "format": "{}", + "return-type": "json", + "interval": 10, + "exec": "~/.config/waybar/scripts/wireguard-status.sh", + "tooltip": true + }, + + + "bluetooth": { + "format": "󰂰", + "format-disabled": "󰂲", + "format-connected": "󰂱", + "format-connected-battery": "󰂱", + + "tooltip-format": + "{num_connections} connected", + "tooltip-format-disabled": + "Bluetooth Disabled", + "tooltip-format-connected": + "{device_enumerate}", + "tooltip-format-enumerate-connected": + "{device_alias}", + "tooltip-format-enumerate-connected-battery": + ":: {device_alias}: 󱊣 {device_battery_percentage}%", + + "on-click": "~/.config/waybar/scripts/bluetooth-menu.sh", + "on-click-right": "kitty --title '󰂯 Bluetooth TUI' bash -c bluetui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/update": { + "exec": "~/.config/waybar/scripts/system-update.sh", + "return-type": "json", + "format": "{}", + "on-click": "hyprctl dispatch exec '~/.config/waybar/scripts/system-update.sh up'", + "interval": 180, + "min-length": 1, + "max-length": 1 + }, + + "mpris": { + "format": "{player_icon} {title} - {artist}", + "format-paused": "{status_icon} {title} - {artist}", + + "player-icons": { + "default": "󰝚 ", + "spotify": "󰓇 ", + "firefox": "󰗃 " + }, + "status-icons": { + "paused": "\u200A\u200A󰏤\u2009\u2009" + }, + + "tooltip-format": "Playing: {title} - {artist}", + "tooltip-format-paused": "Paused: {title} - {artist}", + "min-length": 5, + "max-length": 35 + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-muted": "󰝟 {volume}%", + + "format-icons": { + "default": ["󰕿", "󰖀", "󰕾"], + "headphone": "󰋋", + "headset": "󰋋" + }, + + "tooltip-format": "Device: {desc}", + "on-click": "~/.config/waybar/scripts/volume-control.sh -o m", + "on-scroll-up": "~/.config/waybar/scripts/volume-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/volume-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "backlight": { + "format": "{icon} {percent}%", + "format-icons": ["", "", "", "", "", "", "", "", ""], + "tooltip": false, + "on-scroll-up": "~/.config/waybar/scripts/brightness-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/brightness-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "battery": { + "states": { + "warning": 20, + "critical": 10 + }, + + "format": "{icon} {capacity}%", + "format-icons": ["󰂎", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"], + "format-charging": " {capacity}%", + + "tooltip-format": "Discharging: {time}", + "tooltip-format-charging": "Charging: {time}", + "interval": 1, + "min-length": 6, + "max-length": 6 + }, + + "custom/power": { + "format": " ", + "tooltip": false, + // "tooltip-format": "Power Menu", + "on-click": "~/.config/waybar/scripts/power-menu.sh" + }, + + // <<--< Padding >-->> + + "custom/paddw": { + "format": " ", + "tooltip": false + }, + + "custom/paddc": { + "format": " ", + "tooltip": false + }, + + // Left Arrows + + "custom/left1": { + "format": "", + "tooltip": false + }, + "custom/left2": { + "format": "", + "tooltip": false + }, + "custom/left3": { + "format": "", + "tooltip": false + }, + "custom/left4": { + "format": "", + "tooltip": false + }, + "custom/left5": { + "format": "", + "tooltip": false + }, + "custom/left6": { + "format": "", + "tooltip": false + }, + "custom/left7": { + "format": "", + "tooltip": false + }, + "custom/left8": { + "format": "", + "tooltip": false + }, + + // Right Arrows + + "custom/right1": { + "format": "", + "tooltip": false + }, + "custom/right2": { + "format": "", + "tooltip": false + }, + "custom/right3": { + "format": "", + "tooltip": false + }, + "custom/right4": { + "format": "", + "tooltip": false + }, + "custom/right5": { + "format": "", + "tooltip": false + }, + + // Left Inverse + + "custom/leftin1": { + "format": "", + "tooltip": false + }, + "custom/leftin2": { + "format": "", + "tooltip": false + }, + + // Right Inverse + + "custom/rightin1": { + "format": "", + "tooltip": false + } +} diff --git a/waybar/config.jsonc.original b/waybar/config.jsonc.original new file mode 100644 index 0000000..86194e0 --- /dev/null +++ b/waybar/config.jsonc.original @@ -0,0 +1,478 @@ +{ + "layer": "top", + "position": "top", + "mode": "dock", + "reload_style_on_change": true, + "gtk-layer-shell": true, + + // <<--< Positions >-->> + + "modules-left": [ + "custom/ws", // window icon + "custom/left1", + + "hyprland/workspaces", // workspaces + "custom/right1", + + "custom/paddw", + "hyprland/window" // window title + ], + + "modules-center": [ + "custom/paddc", + "custom/left2", + "custom/temperature", // temperature + + "custom/left3", + "memory", // memory + + "custom/left4", + "cpu", // cpu + "custom/leftin1", + + "custom/left5", + "custom/distro", // distro icon + "custom/right2", + + "custom/rightin1", + "idle_inhibitor", // idle inhibitor + "clock#time", // time + "custom/right3", + + "clock#date", // date + "custom/right4", + + "custom/wifi", // wi-fi + "bluetooth", // bluetooth + "custom/update", // system update + "custom/right5" + ], + + "modules-right": [ + "mpris", // media info + + "custom/left6", + "pulseaudio", // output device + + "custom/left7", + "backlight", // brightness + + "custom/left8", + "battery", // battery + + "custom/leftin2", + "custom/power" // power button + ], + + // <<--< Modules >-->> + + "custom/ws": { + "exec": "~/.config/waybar/scripts/current-theme.sh", + "return-type": "json", + "format": " 󰤕 ", + "on-click": "~/.config/waybar/scripts/theme-switcher.sh", + "min-length": 3, + "max-length": 3 + }, + + "hyprland/workspaces": { + "on-scroll-up": "hyprctl dispatch workspace -1", + "on-scroll-down": "hyprctl dispatch workspace +1", + "persistent-workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [] + } + }, + + "hyprland/window": { + "format": "{}", + "tooltip": false, + "min-length": 5, + + "rewrite": { + // Desktop + "": + " Hyprland", + + // Terminal + "~": " Terminal", + "zsh": " Terminal", + "kitty": " Terminal", + + "tmux(.*)": + " Tmux", + + // Browser + + "(.*)Mozilla Firefox": + "󰈹 Firefox", + "(.*) — Mozilla Firefox": + "󰈹 $1", + + "(.*)Zen Browser": + "󰺕 Zen Browser", + "(.*) — Zen Browser": + "󰺕 $1", + + // Development + + "(.*) - Visual Studio Code": + "󰨞 $1", + "(.*)Visual Studio Code": + "󰨞 Visual Studio Code", + + "nvim": + " Neovim", + "nvim (.*)": + " $1", + + "vim": + " Vim", + "vim (.*)": + " $1", + + // Media + + "(.*)Spotify": + " Spotify", + "(.*)Spotify Premium": + " Spotify Premium", + + "OBS(.*)": + " OBS Studio", + + "VLC media player": + "󰕼 VLC Media Player", + "(.*) - VLC media player": + "󰕼 $1", + + "(.*) - mpv": + " $1", + + "qView": " qView", + + "(.*).jpg": " $1.jpg", + "(.*).png": " $1.png", + "(.*).svg": " $1.svg", + + // Social + + "vesktop": + " Discord", + + "• Discord(.*)": "Discord$1", + "(.*)Discord(.*)": + " $1Discord$2", + + // Documents + + "ONLYOFFICE Desktop Editors": + " OnlyOffice Desktop", + + "(.*).docx": + " $1.docx", + "(.*).xlsx": + " $1.xlsx", + "(.*).pptx": + " $1.pptx", + "(.*).pdf": + " $1.pdf", + + // System + "Authenticate": " Authenticate" + } + }, + + "custom/temperature": { + "exec": "~/.config/waybar/scripts/cpu-temp.sh", + "return-type": "json", + "format": "{}", + "interval": 5, + "min-length": 8, + "max-length": 8 + }, + + "memory": { + "states": { + "warning": 75, + "critical": 90 + }, + + "format": "󰘚 {percentage}%", + "format-critical": "󰀦 {percentage}%", + "tooltip": false, + // "tooltip-format": "Memory Used: {used:0.1f} GB / {total:0.1f} GB", + "interval": 5, + "min-length": 7, + "max-length": 7 + }, + + "cpu": { + "format": "󰻠 {usage}%", + "tooltip": false, + "interval": 5, + "min-length": 6, + "max-length": 6 + }, + + "custom/distro": { + "format": " ", + "tooltip": false + }, + + "idle_inhibitor": { + "format": "{icon}", + + "format-icons": { + "activated": "󰈈 ", + "deactivated": "󰈉 " + }, + + "tooltip-format-activated": "Presentation Mode", + "tooltip-format-deactivated": "Idle Mode", + "start-activated": false + }, + + "clock#time": { + "format": "{:%H:%M}", + "tooltip": false, + // "tooltip-format": "Standard Time: {:%I:%M %p}", + "min-length": 6, + "max-length": 6 + }, + + "clock#date": { + "format": "󰨳 {:%m-%d}", + "tooltip-format": "{calendar}", + + "calendar": { + "mode": "month", + "mode-mon-col": 6, + "on-click-right": "mode", + + "format": { + "months": + "{}", + "weekdays": + "{}", + "today": + "{}" + } + }, + + "actions": { + "on-click": "mode", + "on-click-right": "mode" + }, + + "min-length": 8, + "max-length": 8 + }, + + "custom/wifi": { + "exec": "~/.config/waybar/scripts/wifi-status.sh", + "return-type": "json", + "format": "{}", + "on-click": "~/.config/waybar/scripts/wifi-menu.sh", + "on-click-right": "kitty --title '󰤨 Network Manager TUI' bash -c nmtui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "bluetooth": { + "format": "󰂰", + "format-disabled": "󰂲", + "format-connected": "󰂱", + "format-connected-battery": "󰂱", + + "tooltip-format": + "{num_connections} connected", + "tooltip-format-disabled": + "Bluetooth Disabled", + "tooltip-format-connected": + "{device_enumerate}", + "tooltip-format-enumerate-connected": + "{device_alias}", + "tooltip-format-enumerate-connected-battery": + ":: {device_alias}: 󱊣 {device_battery_percentage}%", + + "on-click": "~/.config/waybar/scripts/bluetooth-menu.sh", + "on-click-right": "kitty --title '󰂯 Bluetooth TUI' bash -c bluetui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/update": { + "exec": "~/.config/waybar/scripts/system-update.sh", + "return-type": "json", + "format": "{}", + "on-click": "hyprctl dispatch exec '~/.config/waybar/scripts/system-update.sh up'", + "interval": 30, + "min-length": 1, + "max-length": 1 + }, + + "mpris": { + "format": "{player_icon} {title} - {artist}", + "format-paused": "{status_icon} {title} - {artist}", + + "player-icons": { + "default": "󰝚 ", + "spotify": "󰓇 ", + "firefox": "󰗃 " + }, + "status-icons": { + "paused": "\u200A\u200A󰏤\u2009\u2009" + }, + + "tooltip-format": "Playing: {title} - {artist}", + "tooltip-format-paused": "Paused: {title} - {artist}", + "min-length": 5, + "max-length": 35 + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-muted": "󰝟 {volume}%", + + "format-icons": { + "default": ["󰕿", "󰖀", "󰕾"], + "headphone": "󰋋", + "headset": "󰋋" + }, + + "tooltip-format": "Device: {desc}", + "on-click": "~/.config/waybar/scripts/volume-control.sh -o m", + "on-scroll-up": "~/.config/waybar/scripts/volume-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/volume-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "backlight": { + "format": "{icon} {percent}%", + "format-icons": ["", "", "", "", "", "", "", "", ""], + "tooltip": false, + "on-scroll-up": "~/.config/waybar/scripts/brightness-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/brightness-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "battery": { + "states": { + "warning": 20, + "critical": 10 + }, + + "format": "{icon} {capacity}%", + "format-icons": ["󰂎", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"], + "format-charging": " {capacity}%", + + "tooltip-format": "Discharging: {time}", + "tooltip-format-charging": "Charging: {time}", + "interval": 1, + "min-length": 6, + "max-length": 6 + }, + + "custom/power": { + "format": " ", + "tooltip": false, + // "tooltip-format": "Power Menu", + "on-click": "~/.config/waybar/scripts/power-menu.sh" + }, + + // <<--< Padding >-->> + + "custom/paddw": { + "format": " ", + "tooltip": false + }, + + "custom/paddc": { + "format": " ", + "tooltip": false + }, + + // Left Arrows + + "custom/left1": { + "format": "", + "tooltip": false + }, + "custom/left2": { + "format": "", + "tooltip": false + }, + "custom/left3": { + "format": "", + "tooltip": false + }, + "custom/left4": { + "format": "", + "tooltip": false + }, + "custom/left5": { + "format": "", + "tooltip": false + }, + "custom/left6": { + "format": "", + "tooltip": false + }, + "custom/left7": { + "format": "", + "tooltip": false + }, + "custom/left8": { + "format": "", + "tooltip": false + }, + + // Right Arrows + + "custom/right1": { + "format": "", + "tooltip": false + }, + "custom/right2": { + "format": "", + "tooltip": false + }, + "custom/right3": { + "format": "", + "tooltip": false + }, + "custom/right4": { + "format": "", + "tooltip": false + }, + "custom/right5": { + "format": "", + "tooltip": false + }, + + // Left Inverse + + "custom/leftin1": { + "format": "", + "tooltip": false + }, + "custom/leftin2": { + "format": "", + "tooltip": false + }, + + // Right Inverse + + "custom/rightin1": { + "format": "", + "tooltip": false + } +} diff --git a/waybar/install.sh b/waybar/install.sh deleted file mode 100755 index 70a5095..0000000 --- a/waybar/install.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env bash - -RED='\033[1;31m' -GRN='\033[1;32m' -BLU='\033[1;34m' -RST='\033[0m' - -DEPS=( - bluez - bluez-utils # bluetoothctl - brightnessctl - fzf - networkmanager # nmcli - pacman-contrib # checkupdates - pipewire-pulse - ttf-0xproto-nerd -) - -main() { - printf '%bInstalling dependencies...%b\n' "$BLU" "$RST" - - local package - local errors=0 - for package in "${DEPS[@]}"; do - if pacman -Qi "$package" > /dev/null; then - printf '[%b/%b] %s\n' "$GRN" "$RST" "$package" - else - printf '[ ] %s...\n' "$package" - - if sudo pacman -S --noconfirm "$package"; then - printf '[%b+%b] %s\n' "$GRN" "$RST" "$package" - else - printf '[%bx%b] %s\n' "$RED" "$RST" "$package" - ((errors++)) - fi - fi - done - - printf '\n%bMaking scripts executable...%b\n' "$BLU" "$RST" - chmod -v +x ~/.config/waybar/scripts/*.sh - - pkill waybar - waybar &> /dev/null & - disown - - if ((errors > 0)); then - printf '\nInstallation completed with %b%d errors%b\n' \ - "$RED" "$errors" "$RST" - else - printf '\n%bInstallation complete!%b\n' "$GRN" "$RST" - fi -} - -main diff --git a/waybar/modules/backlight.jsonc b/waybar/modules/backlight.jsonc deleted file mode 100644 index d5b53fc..0000000 --- a/waybar/modules/backlight.jsonc +++ /dev/null @@ -1,32 +0,0 @@ -{ - "backlight": { - // "interval": - "format": "{icon} {percent}%", - "format-icons": [ - "", "", "", "", "", "", "", "", "" - ], - "min-length": 7, - "max-length": 7, - // "align": - // "justify": - // "rotate": - // "states": - // "on-click": - // "on-click-middle": - // "on-click-right": - // "on-update": - "on-scroll-up": "~/.config/waybar/scripts/backlight.sh up", - "on-scroll-down": "~/.config/waybar/scripts/backlight.sh down", - // "smooth-scrolling-threshold": - // "reverse-scrolling": - // "reverse-mouse-scrolling": - // "scroll-step": - // "min-brightness": - "tooltip": false - // "tooltip-format": - // "menu": - // "menu-file": - // "menu-actions": - // "expand": - } -} diff --git a/waybar/modules/battery.jsonc b/waybar/modules/battery.jsonc deleted file mode 100644 index 1df2f70..0000000 --- a/waybar/modules/battery.jsonc +++ /dev/null @@ -1,45 +0,0 @@ -{ - "battery": { - // "bat": - // "adapter": - // "design-capacity": - // "full-at": - // "interval": - "states": { - "warning": 20, - "critical": 10 - }, - "format": "{icon} {capacity}%", - "format-time": "{H} hr {M} min", - "format-icons": [ - "󰂎", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹" - ], - "format-charging": "󰉁 {capacity}%", - "min-length": 7, - "max-length": 7, - // "align": - // "justify": - // "rotate": - // "on-click": - // "on-click-middle": - // "on-click-right": - // "on-update": - // "on-scroll-up": - // "on-scroll-down": - // "smooth-scrolling-threshold": - // "tooltip": - "tooltip-format": "Discharging: {time}", - "tooltip-format-charging": "Charging: {time}", - // "weighted-average": - // "bat-compatibility": - // "menu": - // "menu-file": - // "menu-actions": - // "expand": - "events": { - "on-discharging-warning": "notify-send 'Battery Low (20%)' -i 'battery-020'", - "on-discharging-critical": "notify-send 'Battery Critical (10%)' -u critical -i 'battery-010'", - "on-charging-100": "notify-send 'Battery Full (100%)' -i 'battery-100-charged'" - } - } -} diff --git a/waybar/modules/bluetooth.jsonc b/waybar/modules/bluetooth.jsonc deleted file mode 100644 index 3113870..0000000 --- a/waybar/modules/bluetooth.jsonc +++ /dev/null @@ -1,38 +0,0 @@ -{ - "bluetooth": { - // "controller": - // "format-device-preference": - "format": "󰂯", - "format-disabled": "󰂲", - "format-off": "󰂲", - "format-on": "󰂰", - "format-connected": "󰂱", - // "format-connected-battery": - // "format-no-controller": - // "format-icons": - // "rotate": - "min-length": 2, - "max-length": 2, - // "align": - // "justify": - "on-click": "kitty -e ~/.config/waybar/scripts/bluetooth.sh", - // "on-click-middle": - "on-click-right": "bluetoothctl power off && notify-send 'Bluetooth Off' -i 'network-bluetooth-inactive' -r 1925", - // "on-scroll-up": - // "on-scroll-down": - // "smooth-scrolling-threshold": - // "tooltip": - "tooltip-format": "Device Addr: {device_address}", - "tooltip-format-disabled": "Bluetooth Disabled", - "tooltip-format-off": "Bluetooth Off", - "tooltip-format-on": "Bluetooth Disconnected", - "tooltip-format-connected": "Device: {device_alias}", - "tooltip-format-enumerate-connected": "Device: {device_alias}", - "tooltip-format-connected-battery": "Device: {device_alias}\nBattery: {device_battery_percentage}%", - "tooltip-format-enumerate-connected-battery": "Device: {device_alias}\nBattery: {device_battery_percentage}%" - // "menu": - // "menu-file": - // "menu-actions": - // "expand": - } -} diff --git a/waybar/modules/clock.jsonc b/waybar/modules/clock.jsonc deleted file mode 100644 index 13c7edf..0000000 --- a/waybar/modules/clock.jsonc +++ /dev/null @@ -1,71 +0,0 @@ -{ - "clock#time": { - // "interval": - "format": "{:%H:%M}", - // "timezone": - // "timezones": - // "locale": - "min-length": 5, - "max-length": 5, - // "rotate": 0, - // "on-click": - // "on-click-middle": - // "on-click-right": - // "on-scroll-up": - // "on-scroll-down": - // "smooth-scrolling-threshold": - // "tooltip": - "tooltip-format": "Standard Time: {:%I:%M %p}" - // "menu": - // "menu-file": - // "menu-actions": - // "expand": - }, - - /*-------------- - calendar - --------------*/ - - "clock#date": { - // "interval": - "format": "󰸗 {:%m-%d}", - // "timezone": - // "timezones": - // "locale": - "min-length": 8, - "max-length": 8, - // "rotate": - // "on-click": - // "on-click-middle": - // "on-click-right": - // "on-scroll-up": - // "on-scroll-down": - // "smooth-scrolling-threshold": - // "tooltip": - "tooltip-format": "{calendar}", - // "menu": - // "menu-file": - // "menu-actions": - // "expand": - "calendar": { - "mode": "month", - "mode-mon-col": 6, - // "week-pos": - // "on-scroll": - "format": { - "months": "{}", - "days": "{}", - // "weeks": - "weekdays": "{}", - "today": "{}" - } - }, - "actions": { - "on-click": "mode" - // "on-click-middle": - // "on-click-right": - // "on-scroll-up": - // "on-scroll-down": - } - } -} diff --git a/waybar/modules/cpu.jsonc b/waybar/modules/cpu.jsonc deleted file mode 100644 index 67ac8a5..0000000 --- a/waybar/modules/cpu.jsonc +++ /dev/null @@ -1,27 +0,0 @@ -{ - "cpu": { - "interval": 10, - "format": "󰍛 {usage}%", - "format-warning": "󰀨 {usage}%", - "format-critical": "󰀨 {usage}%", - // "format-icons": - "min-length": 7, - "max-length": 7, - // "align": - // "justify": - // "rotate": - "states": { - "warning": 75, - "critical": 90 - }, - // "on-click": - // "on-click-middle": - // "on-click-right": - // "on-update": - // "on-scroll-up": - // "on-scroll-down": - // "smooth-scrolling-threshold": - "tooltip": false - // "expand": - } -} diff --git a/waybar/modules/custom/distro.jsonc b/waybar/modules/custom/distro.jsonc deleted file mode 100644 index 62c86ea..0000000 --- a/waybar/modules/custom/distro.jsonc +++ /dev/null @@ -1,33 +0,0 @@ -{ - "custom/distro": { - // "exec": - // "exec-if": - // "exec-on-event": - // "hide-empty-text": - // "return-type": - // "interval": - // "restart-interval": - // "signal": - "format": "󰣇", - // "format-icons": - // "rotate": - // "min-length": - // "max-length": - // "align": - // "justify": - // "on-click": - // "on-click-middle": - // "on-click-right": - // "on-update": - // "on-scroll-up": - // "on-scroll-down": - // "smooth-scrolling-threshold": - "tooltip": false - // "tooltip-format": - // "escape": - // "menu": - // "menu-file": - // "menu-actions": - // "expand": - } -} diff --git a/waybar/modules/custom/dividers.jsonc b/waybar/modules/custom/dividers.jsonc deleted file mode 100644 index b1944a0..0000000 --- a/waybar/modules/custom/dividers.jsonc +++ /dev/null @@ -1,79 +0,0 @@ -{ - /*------------------- - left dividers - -------------------*/ - - "custom/left_div#1": { - "format": "", - "tooltip": false - }, - "custom/left_div#2": { - "format": "", - "tooltip": false - }, - "custom/left_div#3": { - "format": "", - "tooltip": false - }, - "custom/left_div#4": { - "format": "", - "tooltip": false - }, - "custom/left_div#5": { - "format": "", - "tooltip": false - }, - "custom/left_div#6": { - "format": "", - "tooltip": false - }, - "custom/left_div#7": { - "format": "", - "tooltip": false - }, - "custom/left_div#8": { - "format": "", - "tooltip": false - }, - - // inverse - "custom/left_inv#1": { - "format": "", - "tooltip": false - }, - "custom/left_inv#2": { - "format": "", - "tooltip": false - }, - - /*-------------------- - right dividers - --------------------*/ - - "custom/right_div#1": { - "format": "", - "tooltip": false - }, - "custom/right_div#2": { - "format": "", - "tooltip": false - }, - "custom/right_div#3": { - "format": "", - "tooltip": false - }, - "custom/right_div#4": { - "format": "", - "tooltip": false - }, - "custom/right_div#5": { - "format": "", - "tooltip": false - }, - - // inverse - "custom/right_inv#1": { - "format": "", - "tooltip": false - } -} diff --git a/waybar/modules/custom/power_menu.jsonc b/waybar/modules/custom/power_menu.jsonc deleted file mode 100644 index c438735..0000000 --- a/waybar/modules/custom/power_menu.jsonc +++ /dev/null @@ -1,33 +0,0 @@ -{ - "custom/power_menu": { - // "exec": - // "exec-if": - // "exec-on-event": - // "hide-empty-text": - // "return-type": - // "interval": - // "restart-interval": - // "signal": - "format": "󰤄", - // "format-icons": - // "rotate": - // "min-length": - // "max-length": - // "align": - // "justify": - "on-click": "kitty -e ~/.config/waybar/scripts/power-menu.sh", - // "on-click-middle": - // "on-click-right": - // "on-update": - // "on-scroll-up": - // "on-scroll-down": - // "smooth-scrolling-threshold": - // "tooltip": - "tooltip-format": "Power Menu" - // "escape": - // "menu": - // "menu-file": - // "menu-actions": - // "expand": - } -} diff --git a/waybar/modules/custom/system_update.jsonc b/waybar/modules/custom/system_update.jsonc deleted file mode 100644 index b3106cf..0000000 --- a/waybar/modules/custom/system_update.jsonc +++ /dev/null @@ -1,33 +0,0 @@ -{ - "custom/system_update": { - "exec": "~/.config/waybar/scripts/system-update.sh module", - // "exec-if": - // "exec-on-event": - // "hide-empty-text": - "return-type": "json", - "interval": 3600, - // "restart-interval": - "signal": 1, - "format": "{}", - // "format-icons": - // "rotate": - // "align": - // "justify": - "min-length": 2, - "max-length": 2, - "on-click": "kitty -e ~/.config/waybar/scripts/system-update.sh" - // "on-click-middle": - // "on-click-right": - // "on-update": - // "on-scroll-up": - // "on-scroll-down": - // "smooth-scrolling-threshold": - // "tooltip": - // "tooltip-format": - // "escape": - // "menu": - // "menu-file": - // "menu-actions": - // "expand": - } -} diff --git a/waybar/modules/custom/user.jsonc b/waybar/modules/custom/user.jsonc deleted file mode 100644 index 9046dfe..0000000 --- a/waybar/modules/custom/user.jsonc +++ /dev/null @@ -1,83 +0,0 @@ -{ - "group/user": { - "orientation": "horizontal", - "modules": [ - "custom/trigger", - "custom/user" - ], - "drawer": { - // "transition-duration": - // "transition-left-to-right": - // "children-class": - // "click-to-reveal": - } - }, - - "custom/trigger": { - // "exec": - // "exec-if": - // "exec-on-event": - // "hide-empty-text": - // "return-type": - // "interval": - // "restart-interval": - // "signal": - "format": "󰍜", - // "format-icons": - // "rotate": - "min-length": 4, - "max-length": 4, - // "align": - // "justify": - // "on-click": - // "on-click-middle": - // "on-click-right": - // "on-update": - // "on-scroll-up": - // "on-scroll-down": - // "smooth-scrolling-threshold": - "tooltip": false - // "tooltip-format": - // "escape": - // "menu": - // "menu-file": - // "menu-actions": - // "expand": - }, - - /*-------------- - username - --------------*/ - - "custom/user": { - "exec": "id -un", - // "exec-if": - // "exec-on-event": - // "hide-empty-text": - // "return-type": - // "interval": - // "restart-interval": - // "signal": - "format": "{}", - // "format-icons": - // "rotate": - // "min-length": - // "max-length": - // "align": - // "justify": - // "on-click": - // "on-click-middle": - // "on-click-right": - // "on-update": - // "on-scroll-up": - // "on-scroll-down": - // "smooth-scrolling-threshold": - "tooltip": false - // "tooltip-format": - // "escape": - // "menu": - // "menu-file": - // "menu-actions": - // "expand": - } -} diff --git a/waybar/modules/extras/taskbar.jsonc b/waybar/modules/extras/taskbar.jsonc deleted file mode 100644 index 245ca32..0000000 --- a/waybar/modules/extras/taskbar.jsonc +++ /dev/null @@ -1,21 +0,0 @@ -{ - "wlr/taskbar": { - // "all-outputs": - // "format": - // "icon-theme": - // "icon-size": - // "markup": - // "tooltip": - // "tooltip-format": - // "active-first": - // "sort-by-app-id": - "on-click": "activate", - // "on-click-middle": - // "on-click-right": - // "on-update": - "ignore-list": [ "kitty" ], - // "app_ids-mapping": - // "rewrite": - "cursor": true - } -} diff --git a/waybar/modules/extras/tray.jsonc b/waybar/modules/extras/tray.jsonc deleted file mode 100644 index c576fdb..0000000 --- a/waybar/modules/extras/tray.jsonc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "tray": { - "icon-size": 16, - // "show-passive-items": - // "smooth-scrolling-threshold": - "spacing": 12, - // "reverse-direction": - // "on-update": - // "expand": - // "icons": - "cursor": true - } -} diff --git a/waybar/modules/extras/wireplumber.jsonc b/waybar/modules/extras/wireplumber.jsonc deleted file mode 100644 index 7bfc14e..0000000 --- a/waybar/modules/extras/wireplumber.jsonc +++ /dev/null @@ -1,82 +0,0 @@ -{ - "group/wireplumber": { - "orientation": "horizontal", - "modules": [ - "wireplumber#output", - "wireplumber#input" - ], - "drawer": { - // "transition-duration": - "transition-left-to-right": false - // "children-class": - // "click-to-reveal": - } - }, - - /*------------------- - output device - -------------------*/ - - "wireplumber#output": { - "format": "{icon} {volume}%", - "format-muted": "󰝟 {volume}%", - // "format-source": - // "format-source-muted": - "format-icons": [ - "󰕿", "󰖀", "󰕾" - ], - // "rotate": - // "states": - "min-length": 7, - "max-length": 7, - // "align": - // "justify": - // "scroll-step": - "on-click": "~/.config/waybar/scripts/volume.sh output mute", - // "on-click-middle": - // "on-click-right": - // "on-update": - "on-scroll-up": "~/.config/waybar/scripts/volume.sh output raise", - "on-scroll-down": "~/.config/waybar/scripts/volume.sh output lower", - // "tooltip": - "tooltip-format": "Device: {node_name}", - // "max-volume": - // "reverse-scrolling": - "node-type": "Audio/Sink" - // "menu": - // "menu-file": - // "menu-actions": - }, - - /*---------------- - microphone - ----------------*/ - - "wireplumber#input": { - "format": "󰍬 {volume}%", - "format-muted": "󰍭 {volume}%", - // "format-source": - // "format-source-muted": - // "rotate": - // "states": - "min-length": 7, - "max-length": 7, - // "align": - // "justify": - // "scroll-step": - "on-click": "~/.config/waybar/scripts/volume.sh input mute", - // "on-click-middle": - // "on-click-right": - // "on-update": - "on-scroll-up": "~/.config/waybar/scripts/volume.sh input raise", - "on-scroll-down": "~/.config/waybar/scripts/volume.sh input lower", - // "tooltip": - "tooltip-format": "Device: {node_name}", - // "max-volume": - // "reverse-scrolling": - "node-type": "Audio/Source" - // "menu": - // "menu-file": - // "menu-actions": - } -} diff --git a/waybar/modules/hyprland/window.jsonc b/waybar/modules/hyprland/window.jsonc deleted file mode 100644 index caca1cd..0000000 --- a/waybar/modules/hyprland/window.jsonc +++ /dev/null @@ -1,19 +0,0 @@ -{ - "hyprland/window": { - "format": "{}", - "rewrite": { - "": "Desktop", - "kitty": "Terminal", - "zsh": "Terminal", - "~": "Terminal" - }, - // "separate-outputs": - // "icon": - // "icon-size": - // "min-length": - // "max-length": - // "tooltip": - "swap-icon-label": false - // "expand": - } -} diff --git a/waybar/modules/hyprland/windowcount.jsonc b/waybar/modules/hyprland/windowcount.jsonc deleted file mode 100644 index 65e959d..0000000 --- a/waybar/modules/hyprland/windowcount.jsonc +++ /dev/null @@ -1,12 +0,0 @@ -{ - "hyprland/windowcount": { - "format": "[{}]", - // "format-empty": - // "format-windowed": - // "format-fullscreen": - // "separate-outputs": - // "min-length": - // "max-length": - "swap-icon-label": false - } -} diff --git a/waybar/modules/hyprland/workspaces.jsonc b/waybar/modules/hyprland/workspaces.jsonc deleted file mode 100644 index 864fcac..0000000 --- a/waybar/modules/hyprland/workspaces.jsonc +++ /dev/null @@ -1,38 +0,0 @@ -{ - "hyprland/workspaces": { - // "active-only": - // "hide-active": - // "all-outputs": - "format": "{icon}", - "format-icons": { - "active": "", - "default": "" - }, - "persistent-workspaces": { - "*": 5 - }, - // "persistent-only": - // "show-special": - // "special-visible-only": - // "sort-by": - // "window-rewrite": - // "window-rewrite-default": - // "format-window-separator": - "workspace-taskbar": { - // "enable": - // "update-active-window": - // "format": - // "icon-size": - // "icon-theme": - // "orientation": - // "ignore-list": - // "on-click-window": - }, - // "move-to-monitor": - // "ignore-workspaces": - "on-scroll-up": "hyprctl dispatch workspace +1", - "on-scroll-down": "hyprctl dispatch workspace -1", - // "expand": - "cursor": true - } -} diff --git a/waybar/modules/idle_inhibitor.jsonc b/waybar/modules/idle_inhibitor.jsonc deleted file mode 100644 index 36f3186..0000000 --- a/waybar/modules/idle_inhibitor.jsonc +++ /dev/null @@ -1,30 +0,0 @@ -{ - "idle_inhibitor": { - "format": "{icon}", - "format-icons": { - "activated": "󰈈", - "deactivated": "󰈉" - }, - // "rotate": - "min-length": 3, - "max-length": 3, - // "align": - // "justify": - // "on-click": - // "on-click-middle": - // "on-click-right": - // "on-update": - // "on-scroll-up": - // "on-scroll-down": - // "smooth-scrolling-threshold": - // "tooltip": - "tooltip-format-activated": "Keep Screen On: {status}", - "tooltip-format-deactivated": "Keep Screen On: {status}", - "start-activated": false - // "timeout": - // "menu": - // "menu-file": - // "menu-actions": - // "expand": - } -} diff --git a/waybar/modules/memory.jsonc b/waybar/modules/memory.jsonc deleted file mode 100644 index e9d6ab8..0000000 --- a/waybar/modules/memory.jsonc +++ /dev/null @@ -1,31 +0,0 @@ -{ - "memory": { - "interval": 10, - "format": "󰘚 {percentage}%", - "format-warning": "󰀧 {percentage}%", - "format-critical": "󰀧 {percentage}%", - // "format-icons": - // "rotate": - "states": { - "warning": 75, - "critical": 90 - }, - "min-length": 7, - "max-length": 7, - // "align": - // "justify": - // "on-click": - // "on-click-middle": - // "on-click-right": - // "on-update": - // "on-scroll-up": - // "on-scroll-down": - // "smooth-scrolling-threshold": - // "tooltip": - "tooltip-format": "Memory Used: {used:0.1f} GB / {total:0.1f} GB" - // "menu": - // "menu-file": - // "menu-actions": - // "expand": - } -} diff --git a/waybar/modules/mpris.jsonc b/waybar/modules/mpris.jsonc deleted file mode 100644 index 51218b4..0000000 --- a/waybar/modules/mpris.jsonc +++ /dev/null @@ -1,36 +0,0 @@ -{ - "mpris": { - // "player": - // "ignored-players": - // "interval": - "format": "{player_icon} {title} - {artist}", - "format-paused": "{status_icon} {title} - {artist}", - "tooltip-format": "Playing: {title} - {artist}", - "tooltip-format-paused": "Paused: {title} - {artist}", - // "enable-tooltip-len-limits": - // "on-click": - // "on-click-middle": - // "on-click-right": - "player-icons": { - "default": "󰐊" - }, - "status-icons": { - "paused": "󰏤" - }, - // "artist-len": - // "album-len": - // "title-len": - // "dynamic-len": - // "dynamic-order": - // "dynamic-separator": - // "dynamic-importance-order": - // "truncate-hours": - // "ellipsis": - // "rotate": - // "min-length": - "max-length": 1000 - // "align": - // "justify": - // "expand": - } -} diff --git a/waybar/modules/network.jsonc b/waybar/modules/network.jsonc deleted file mode 100644 index 5095e90..0000000 --- a/waybar/modules/network.jsonc +++ /dev/null @@ -1,40 +0,0 @@ -{ - "network": { - // "interface": - // "rfkill": - "interval": 10, - // "family": - "format": "󰤨", - "format-ethernet": "󰈀", - "format-wifi": "{icon}", - // "format-linked": - "format-disconnected": "󰤯", - "format-disabled": "󰤮", - // "format-alt": - "format-icons": [ - "󰤟", "󰤢", "󰤥", "󰤨" - ], - // "rotate": - "min-length": 2, - "max-length": 2, - // "align": - // "justify": - "on-click": "kitty -e ~/.config/waybar/scripts/network.sh", - // "on-click-middle": - "on-click-right": "nmcli radio wifi off && notify-send 'Wi-Fi Disabled' -i 'network-wireless-off' -r 1125", - // "on-update": - // "on-scroll-up": - // "on-scroll-down": - // "smooth-scrolling-threshold": - // "tooltip": - "tooltip-format": "Gateway: {gwaddr}", - "tooltip-format-ethernet": "Interface: {ifname}", - "tooltip-format-wifi": "Network: {essid}\nIP Addr: {ipaddr}/{cidr}\nStrength: {signalStrength}%\nFrequency: {frequency} GHz", - "tooltip-format-disconnected": "Wi-Fi Disconnected", - "tooltip-format-disabled": "Wi-Fi Disabled" - // "menu": - // "menu-file": - // "menu-actions": - // "expand": - } -} diff --git a/waybar/modules/pulseaudio.jsonc b/waybar/modules/pulseaudio.jsonc deleted file mode 100644 index b32c9e2..0000000 --- a/waybar/modules/pulseaudio.jsonc +++ /dev/null @@ -1,96 +0,0 @@ -{ - "group/pulseaudio": { - "orientation": "horizontal", - "modules": [ - "pulseaudio#output", - "pulseaudio#input" - ], - "drawer": { - // "transition-duration": - "transition-left-to-right": false - // "children-class": - // "click-to-reveal": - } - }, - - /*------------------- - output device - -------------------*/ - - "pulseaudio#output": { - "format": "{icon} {volume}%", - // "format-bluetooth": - "format-muted": "{icon} {volume}%", - // "format-source": - // "format-source-muted": - "format-icons": { - "default": [ "󰕿", "󰖀", "󰕾" ], - "default-muted": "󰝟", - "headphone": "󰋋", - "headphone-muted": "󰟎", - "headset": "󰋎", - "headset-muted": "󰋐" - }, - // "rotate": - // "states": - "min-length": 7, - "max-length": 7, - // "align": - // "justify": - // "scroll-step": - "on-click": "~/.config/waybar/scripts/volume.sh output mute", - // "on-click-middle": - // "on-click-right": - // "on-update": - "on-scroll-up": "~/.config/waybar/scripts/volume.sh output raise", - "on-scroll-down": "~/.config/waybar/scripts/volume.sh output lower", - // "smooth-scrolling-threshold": - // "tooltip": - "tooltip-format": "Output Device: {desc}" - // "max-volume": - // "ignored-sinks": - // "reverse-scrolling": - // "reverse-mouse-scrolling": - // "menu": - // "menu-file": - // "menu-actions": - // "expand": - }, - - /*---------------- - microphone - ----------------*/ - - "pulseaudio#input": { - "format": "{format_source}", - // "format-bluetooth": - // "format-muted": - "format-source": "󰍬 {volume}%", - "format-source-muted": "󰍭 {volume}%", - // "format-icons": - // "rotate": - // "states": - "min-length": 7, - "max-length": 7, - // "align": - // "justify": - // "scroll-step": - "on-click": "~/.config/waybar/scripts/volume.sh input mute", - // "on-click-middle": - // "on-click-right": - // "on-update": - "on-scroll-up": "~/.config/waybar/scripts/volume.sh input raise", - "on-scroll-down": "~/.config/waybar/scripts/volume.sh input lower", - // "smooth-scrolling-threshold": - // "tooltip": - "tooltip-format": "Input Device: {desc}" - // "max-volume": - // "ignored-sinks": - // "reverse-scrolling": - // "reverse-mouse-scrolling": - // "menu": - // "menu-file": - // "menu-actions": - // "expand": - } -} diff --git a/waybar/modules/temperature.jsonc b/waybar/modules/temperature.jsonc deleted file mode 100644 index 9c7b0d1..0000000 --- a/waybar/modules/temperature.jsonc +++ /dev/null @@ -1,35 +0,0 @@ -{ - "temperature": { - "thermal-zone": 0, - // "hwmon-path": - // "hwmon-path-abs": - // "input-filename": - // "warning-threshold": - "critical-threshold": 90, - "interval": 10, - // "format-warning": - "format-critical": "󰀦 {temperatureC}°C", - "format": "{icon} {temperatureC}°C", - "format-icons": [ - "󱃃", "󰔏", "󱃂" - ], - // "rotate": - "min-length": 8, - "max-length": 8, - // "align": - // "justify": - // "on-click": - // "on-click-middle": - // "on-click-right": - // "on-update": - // "on-scroll-up": - // "on-scroll-down": - // "smooth-scrolling-threshold": - // "tooltip": - "tooltip-format": "Temp in Fahrenheit: {temperatureF}°F" - // "menu": - // "menu-file": - // "menu-actions": - // "expand": - } -} diff --git a/waybar/scripts/backlight.sh b/waybar/scripts/backlight.sh deleted file mode 100755 index bba254a..0000000 --- a/waybar/scripts/backlight.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env bash -# -# Adjust screen brightness and send a notification with the current level -# -# Requirements: -# - brightnessctl -# - notify-send (libnotify) -# -# Author: Jesse Mirabel -# Created: August 28, 2025 -# License: MIT - -VALUE=1 - -print-usage() { - local script=${0##*/} - - cat <<- EOF - USAGE: $script [OPTIONS] - - Adjust screen brightness and send a notification with the current level - - OPTIONS: - up Increase brightness by - down Decrease brightness by - Default value: $VALUE - - EXAMPLES: - Increase brightness: - $ $script up - - Decrease brightness by 5: - $ $script down 5 - EOF - - exit 1 -} - -set-brightness() { - local op - case $action in - 'up') op='+' ;; - 'down') op='-' ;; - esac - - brightnessctl -n set "${value}%${op}" &> /dev/null - - local level - level=$(brightnessctl -m | awk -F ',' '{print $4}') - - notify-send "Brightness: $level" -h int:value:"$level" -i 'contrast' -r 2825 -} - -main() { - action=$1 - value=${2:-$VALUE} - - ! ((value > 0)) && print-usage - - case $action in - 'up' | 'down') set-brightness ;; - *) print-usage ;; - esac -} - -main "$@" diff --git a/waybar/scripts/battery-level.sh b/waybar/scripts/battery-level.sh new file mode 100755 index 0000000..ddde6ea --- /dev/null +++ b/waybar/scripts/battery-level.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash + +# Original script by Eric Murphy +# https://github.com/ericmurphyxyz/dotfiles/blob/master/.local/bin/battery-alert +# +# Modified by Jesse Mirabel (@sejjy) +# https://github.com/sejjy/mechabar + +# This script sends a notification when the battery is full, low, or critical. +# icon theme used: tela-circle-icon-theme-dracula +# +# (see the bottom of the script for more information) + +export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus" + +# battery levels +WARNING_LEVEL=20 +CRITICAL_LEVEL=10 + +# get the battery state and percentage using upower (waybar dependency) +BAT_PATH=$(upower -e | grep BAT | head -n 1) +BATTERY_STATE=$(upower -i "$BAT_PATH" | awk '/state:/ {print $2}') +BATTERY_LEVEL=$(upower -i "$BAT_PATH" | awk '/percentage:/ {print $2}' | tr -d '%') + +# prevent multiple notifications +FILE_FULL=/tmp/battery-full +FILE_WARNING=/tmp/battery-warning +FILE_CRITICAL=/tmp/battery-critical + +# remove the files if the battery is no longer in that state +if [ "$BATTERY_STATE" == "discharging" ]; then + rm -f $FILE_FULL +elif [ "$BATTERY_STATE" == "charging" ]; then + rm -f "$FILE_WARNING" "$FILE_CRITICAL" +fi + +# if the battery is full and is plugged in +if [ "$BATTERY_LEVEL" -eq 100 ] && [ "$BATTERY_STATE" == "fully-charged" ] && [ ! -f $FILE_FULL ]; then + notify-send -a "state" "Battery Charged (${BATTERY_LEVEL}%)" "You might want to unplug your PC." -i "battery-full" -r 9991 + touch $FILE_FULL + +# if the battery is low and is discharging +elif [ "$BATTERY_LEVEL" -le $WARNING_LEVEL ] && [ "$BATTERY_STATE" == "discharging" ] && [ ! -f $FILE_WARNING ]; then + notify-send -a "state" "Battery Low (${BATTERY_LEVEL}%)" "You might want to plug in your PC." -u critical -i "battery-caution" -r 9991 -h string:fgcolor:\#fab387 -h string:frcolor:\#fab387 + touch $FILE_WARNING + +# if the battery is critical and is discharging +elif [ "$BATTERY_LEVEL" -le $CRITICAL_LEVEL ] && [ "$BATTERY_STATE" == "discharging" ] && [ ! -f $FILE_CRITICAL ]; then + notify-send -a "state" "Battery Critical (${BATTERY_LEVEL}%)" "Plug in your PC now." -u critical -i "battery-empty" -r 9991 + touch $FILE_CRITICAL +fi + +# systemd service +# Add the following to ~/.config/systemd/user/battery-level.service: + +# [Unit] +# Description=Battery Level Checker +# After=graphical.target +# +# [Service] +# ExecStart=%h/.config/waybar/scripts/battery-level.sh +# Type=oneshot + +# systemd timer +# Add the following to ~/.config/systemd/user/battery-level.timer: + +# [Unit] +# Description=Run Battery Level Checker +# +# [Timer] +# OnBootSec=1min +# OnUnitActiveSec=1min +# Unit=battery-level.service +# +# [Install] +# WantedBy=timers.target + +# enable the timer by running the following commands: +# systemctl --user daemon-reload +# systemctl --user enable --now battery-level.timer diff --git a/waybar/scripts/battery-state.sh b/waybar/scripts/battery-state.sh new file mode 100755 index 0000000..d7cf5fc --- /dev/null +++ b/waybar/scripts/battery-state.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash + +# Original script by Eric Murphy +# https://github.com/ericmurphyxyz/dotfiles/blob/master/.local/bin/battery-alert +# +# Modified by Jesse Mirabel (@sejjy) +# https://github.com/sejjy/mechabar + +# This script sends a notification when the battery is charging or discharging. +# icon theme used: tela-circle-icon-theme-dracula +# +# (see the bottom of the script for more information) + +export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus" + +# get the battery state from the udev rule +BATTERY_STATE=$1 + +# get the battery percentage using upower (waybar dependency) +BAT_PATH=$(upower -e | grep BAT | head -n 1) +BATTERY_LEVEL=$(upower -i "$BAT_PATH" | awk '/percentage:/ {print $2}' | tr -d '%') + +# set the battery charging state and icon +case "$BATTERY_STATE" in +"charging") + BATTERY_CHARGING="Charging" + BATTERY_ICON="090-charging" + ;; +"discharging") + BATTERY_CHARGING="Disharging" + BATTERY_ICON="090" + ;; +esac + +# send the notification +notify-send -a "state" "Battery ${BATTERY_CHARGING} (${BATTERY_LEVEL}%)" -u normal -i "battery-${BATTERY_ICON}" -r 9991 + +# udev rule +# Add the following to /etc/udev/rules.d/60-power.rules: + +# ACTION=="change", SUBSYSTEM=="power_supply", ATTR{type}=="Mains", ATTR{online}=="0", ENV{DISPLAY}=":0", RUN+="/usr/bin/su -c '$HOME/.config/waybar/scripts/battery-state.sh discharging'" +# ACTION=="change", SUBSYSTEM=="power_supply", ATTR{type}=="Mains", ATTR{online}=="1", ENV{DISPLAY}=":0", RUN+="/usr/bin/su -c '$HOME/.config/waybar/scripts/battery-state.sh charging'" + +# the number 60 in the udev rule can be changed to any number between 0 and 99. +# the lower the number, the higher the priority. +# +# $USER does not work, so you have to replace "" with your username. + +# reload udev rules by running the following command: +# sudo udevadm control --reload-rules diff --git a/waybar/scripts/bluetooth-menu.sh b/waybar/scripts/bluetooth-menu.sh new file mode 100755 index 0000000..40642fd --- /dev/null +++ b/waybar/scripts/bluetooth-menu.sh @@ -0,0 +1,106 @@ +#!/usr/bin/env bash + +# Author: Jesse Mirabel (@sejjy) +# GitHub: https://github.com/sejjy/mechabar + +# Rofi config +config="$HOME/.config/rofi/bluetooth-menu.rasi" + +# Rofi window override +override_disabled="mainbox { children: [ textbox-custom, listview ]; } listview { lines: 1; padding: 6px 6px 8px; }" + +get_device_icon() { + local device_mac=$1 + device_info=$(bluetoothctl info "$device_mac") + device_icon=$(echo "$device_info" | grep "Icon:" | awk '{print $2}') + + case "$device_icon" in + "audio-headphones" | "audio-headset") echo "󰋋 " ;; # Headphones + "video-display" | "computer") echo "󰍹 " ;; # Monitor + "audio-input-microphone") echo "󰍬 " ;; # Microphone + "input-keyboard") echo "󰌌 " ;; # Keyboard + "audio-speakers") echo "󰓃 " ;; # Speakers + "input-mouse") echo "󰍽 " ;; # Mouse + "phone") echo "󰏲 " ;; # Phone + *) + echo "󰂱 " # Default + ;; + esac +} + +while true; do + # Get list of paired devices + bluetooth_devices=$(bluetoothctl devices | while read -r line; do + device_mac=$(echo "$line" | awk '{print $2}') + device_name=$(echo "$line" | awk '{$1=$2=""; print substr($0, 3)}') + icon=$(get_device_icon "$device_mac") + echo "$icon $device_name" + done) + + options=$( + echo "󰏌 Scan for devices" + echo "󰂲 Disable Bluetooth" + echo "$bluetooth_devices" + ) + option="󰂯 Enable Bluetooth" + + # Get Bluetooth status + bluetooth_status=$(bluetoothctl show | grep "Powered:" | awk '{print $2}') + + if [[ "$bluetooth_status" == "yes" ]]; then + selected_option=$(echo -e "$options" | rofi -dmenu -i -selected-row 1 -config "${config}" -p " " || pkill -x rofi) + else + selected_option=$(echo -e "$option" | rofi -dmenu -i -selected-row 1 -config "${config}" -theme-str "${override_disabled}" -p " " || pkill -x rofi) + fi + + # Exit if no option is selected + if [ -z "$selected_option" ]; then + exit + fi + + # Actions based on selected option + case "$selected_option" in + *"Enable Bluetooth") + notify-send "Bluetooth Enabled" -i "package-installed-outdated" + rfkill unblock bluetooth + bluetoothctl power on + sleep 1 + ;; + *"Disable Bluetooth") + notify-send "Bluetooth Disabled" -i "package-broken" + rfkill block bluetooth + bluetoothctl power off + exit + ;; + *"Scan for devices") + notify-send "Press '?' to show help." -i "package-installed-outdated" + kitty --title '󰂱 Bluetooth TUI' bash -c "bluetui" # Launch bluetui + ;; + *) + # Extract device name + device_name="${selected_option#* }" + device_name="${device_name## }" + + if [[ -n "$device_name" ]]; then + # Get MAC address + device_mac=$(bluetoothctl devices | grep "$device_name" | awk '{print $2}') + + # Trust and pair device + bluetoothctl trust "$device_mac" >/dev/null 2>&1 + bluetoothctl pair "$device_mac" >/dev/null 2>&1 + + # Connect to device + bluetoothctl connect "$device_mac" & + sleep 3 + connection_status=$(bluetoothctl info "$device_mac" | grep "Connected:" | awk '{print $2}') + + if [[ "$connection_status" == "yes" ]]; then + notify-send "Connected to \"$device_name\"." -i "package-installed-outdated" + exit + else + notify-send "Failed to connect to \"$device_name\"." -i "package-broken" + fi + fi + ;; + esac +done diff --git a/waybar/scripts/bluetooth.sh b/waybar/scripts/bluetooth.sh deleted file mode 100755 index 5037204..0000000 --- a/waybar/scripts/bluetooth.sh +++ /dev/null @@ -1,120 +0,0 @@ -#!/usr/bin/env bash -# -# Scan, select, pair, and connect to Bluetooth devices -# -# Requirements: -# - bluetoothctl (bluez-utils) -# - fzf -# - notify-send (libnotify) -# -# Author: Jesse Mirabel -# Created: August 19, 2025 -# License: MIT - -RED='\033[1;31m' -RST='\033[0m' - -TIMEOUT=10 - -get-device-list() { - bluetoothctl --timeout $TIMEOUT scan on > /dev/null & - - local i num - for ((i = 1; i <= TIMEOUT; i++)); do - printf '\rScanning for devices... (%d/%d)' $i $TIMEOUT - printf '\n%bPress [q] to stop%b\n\n' "$RED" "$RST" - - num=$(bluetoothctl devices | grep -c Device) - - printf '\rDevices: %s' "$num" - printf '\033[3A' # move cursor up 3 lines - - read -rs -n 1 -t 1 - [[ $REPLY == [Qq] ]] && break - done - - printf '\n%bScanning stopped.%b\n\n' "$RED" "$RST" - - list=$(bluetoothctl devices | grep Device | cut -d ' ' -f 2-) - - if [[ -z $list ]]; then - notify-send 'Bluetooth' 'No devices found' -i 'package-broken' - return 1 - fi -} - -select-device() { - local header - header=$(printf '%-17s %s' 'Address' 'Name') - - # shellcheck disable=SC1090 - . ~/.config/waybar/scripts/fzf-colors.sh 2> /dev/null - - local opts=( - --border=sharp - --border-label=' Bluetooth Devices ' - --ghost='Search' - --header="$header" - --height=~100% - --highlight-line - --info=inline-right - --pointer= - --reverse - "${COLORS[@]}" - ) - - address=$(fzf "${opts[@]}" <<< "$list" | awk '{print $1}') - - [[ -z $address ]] && return 1 - - local connected - connected=$(bluetoothctl info "$address" | grep Connected | - awk '{print $2}') - - if [[ $connected == 'yes' ]]; then - notify-send 'Bluetooth' 'Already connected to this device' \ - -i 'package-install' - return 1 - fi -} - -pair-and-connect() { - local paired - paired=$(bluetoothctl info "$address" | grep Paired | awk '{print $2}') - - if [[ $paired == 'no' ]]; then - printf 'Pairing...' - - if ! timeout $TIMEOUT bluetoothctl pair "$address" > /dev/null; then - notify-send 'Bluetooth' 'Failed to pair' -i 'package-purge' - return 1 - fi - fi - - printf '\nConnecting...' - - if timeout $TIMEOUT bluetoothctl connect "$address" > /dev/null; then - notify-send 'Bluetooth' 'Successfully connected' -i 'package-install' - else - notify-send 'Bluetooth' 'Failed to connect' -i 'package-purge' - fi -} - -main() { - local status - status=$(bluetoothctl show | grep PowerState | awk '{print $2}') - - if [[ $status == 'off' ]]; then - bluetoothctl power on > /dev/null - notify-send 'Bluetooth On' -i 'network-bluetooth-activated' -r 1925 - fi - - tput civis # make cursor invisible - get-device-list || exit 1 - tput cnorm # make cursor visible - - select-device || exit 1 - pair-and-connect || exit 1 -} - -main diff --git a/waybar/scripts/brightness-control.sh b/waybar/scripts/brightness-control.sh new file mode 100755 index 0000000..28fa223 --- /dev/null +++ b/waybar/scripts/brightness-control.sh @@ -0,0 +1,92 @@ +#!/usr/bin/env bash + +# Print error message for invalid arguments +print_error() { + cat <<"EOF" +Usage: ./brightnesscontrol.sh +Valid actions are: + i -- ncrease brightness [+2%] + d -- ecrease brightness [-2%] +EOF +} + +# Send a notification with brightness info +send_notification() { + brightness=$(brightnessctl info | grep -oP "(?<=\()\d+(?=%)") + notify-send -a "state" -r 91190 -i "gpm-brightness-lcd" -h int:value:"$brightness" "Brightness: ${brightness}%" -u low +} + +# Get the current brightness percentage and device name +get_brightness() { + brightness=$(brightnessctl -m | grep -o '[0-9]\+%' | head -c-2) + device=$(brightnessctl -m | head -n 1 | awk -F',' '{print $1}' | sed 's/_/ /g; s/\<./\U&/g') # Get device name + current_brightness=$(brightnessctl -m | head -n 1 | awk -F',' '{print $3}') # Get current brightness + max_brightness=$(brightnessctl -m | head -n 1 | awk -F',' '{print $5}') # Get max brightness +} +get_brightness + +# Handle options +while getopts o: opt; do + case "${opt}" in + o) + case $OPTARG in + i) # Increase brightness + if [[ $brightness -lt 10 ]]; then + brightnessctl set +1% + else + brightnessctl set +2% + fi + send_notification + ;; + d) # Decrease brightness + if [[ $brightness -le 1 ]]; then + brightnessctl set 1% + elif [[ $brightness -le 10 ]]; then + brightnessctl set 1%- + else + brightnessctl set 2%- + fi + send_notification + ;; + *) + print_error + ;; + esac + ;; + *) + print_error + ;; + esac +done + +# Determine the icon based on brightness level +get_icon() { + if ((brightness <= 5)); then + icon="" + elif ((brightness <= 15)); then + icon="" + elif ((brightness <= 30)); then + icon="" + elif ((brightness <= 45)); then + icon="" + elif ((brightness <= 55)); then + icon="" + elif ((brightness <= 65)); then + icon="" + elif ((brightness <= 80)); then + icon="" + elif ((brightness <= 95)); then + icon="" + else + icon="" + fi +} + +# Backlight module and tooltip +get_icon +module="${icon} ${brightness}%" + +tooltip="Device Name: ${device}" +tooltip+="\nBrightness: ${current_brightness} / ${max_brightness}" + +echo "{\"text\": \"${module}\", \"tooltip\": \"${tooltip}\"}" diff --git a/waybar/scripts/cpu-temp.sh b/waybar/scripts/cpu-temp.sh new file mode 100755 index 0000000..b6f2355 --- /dev/null +++ b/waybar/scripts/cpu-temp.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash + +model=$(awk -F ': ' '/model name/{print $2}' /proc/cpuinfo | head -n 1 | sed 's/@.*//; s/ *\((R)\|(TM)\)//g; s/^[ \t]*//; s/[ \t]*$//') + +# get CPU clock speeds +get_cpu_frequency() { + freqlist=$(awk '/cpu MHz/ {print $4}' /proc/cpuinfo) + maxfreq=$(sed 's/...$//' /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq) + if [ -z "$freqlist" ] || [ -z "$maxfreq" ]; then + echo "--" + return + fi + average_freq=$(echo "$freqlist" | tr ' ' '\n' | awk "{sum+=\$1} END {printf \"%.0f/%s MHz\", sum/NR, $maxfreq}") + echo "$average_freq" +} + +# get CPU temp +get_cpu_temperature() { + temp=$(sensors | awk '/Package id 0/ {print $4}' | awk -F '[+.]' '{print $2}') + if [[ -z "$temp" ]]; then + temp=$(sensors | awk '/Tctl/ {print $2}' | tr -d '+°C') + fi + if [[ -z "$temp" ]]; then + temp="--" + temp_f="--" + else + temp=${temp%.*} + temp_f=$(awk "BEGIN {printf \"%.1f\", ($temp * 9 / 5) + 32}") + fi + # Celsius and Fahrenheit + echo "${temp:---} ${temp_f:---}" +} + +get_temperature_icon() { + temp_value=$1 + if [ "$temp_value" = "--" ]; then + icon="󱔱" # none + elif [ "$temp_value" -ge 80 ]; then + icon="󰸁" # high + elif [ "$temp_value" -ge 70 ]; then + icon="󱃂" # medium + elif [ "$temp_value" -ge 60 ]; then + icon="󰔏" # normal + else + icon="󱃃" # low + fi + echo "$icon" +} + +cpu_frequency=$(get_cpu_frequency) +read -r temp_info < <(get_cpu_temperature) +temp=$(echo "$temp_info" | awk '{print $1}') +temp_f=$(echo "$temp_info" | awk '{print $2}') +thermo_icon=$(get_temperature_icon "$temp") + +# high temp warning +if [ "$temp" == "--" ] || [ "$temp" -ge 80 ]; then + text_output="${thermo_icon} ${temp}°C" +else + text_output="${thermo_icon} ${temp}°C" +fi + +tooltip=":: ${model}\n" +tooltip+="Clock Speed: ${cpu_frequency}\nTemperature: ${temp_f}°F" + +# module and tooltip +echo "{\"text\": \"$text_output\", \"tooltip\": \"$tooltip\"}" diff --git a/waybar/scripts/current-theme.sh b/waybar/scripts/current-theme.sh new file mode 100755 index 0000000..b7d5db6 --- /dev/null +++ b/waybar/scripts/current-theme.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +CURRENT_THEME_FILE="$HOME/.config/waybar/themes/current-theme" + +# Get the current theme +current_theme=$(cat "$CURRENT_THEME_FILE" 2>/dev/null || echo "") +current_theme_name="Default" + +# Get the theme name +if [[ -n "$current_theme" ]]; then + current_theme_name=$(basename "$current_theme" .css) + + # Convert "theme-name" to "Theme Name" + formatted_theme_name="${current_theme_name//-/ }" + formatted_theme_name=$(echo "$formatted_theme_name" | awk '{for(i=1;i<=NF;i++) $i=toupper(substr($i,1,1)) substr($i,2)}1') +else + formatted_theme_name="Default" +fi + +tooltip="Theme: $formatted_theme_name" +tooltip+="\nStyle: Classic" # hard-coded for now + +# Tooltip +echo "{\"tooltip\": \"$tooltip\"}" diff --git a/waybar/scripts/fzf-colors.sh b/waybar/scripts/fzf-colors.sh deleted file mode 100755 index ae577ba..0000000 --- a/waybar/scripts/fzf-colors.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env bash -# -# NOTE: -# The names, maps, and COLORS arrays are all parallel: -# - names[i]: the color name as defined in theme.css -# - maps[i]: variable to store the hex value -# - COLORS: color config passed to fzf -# -# Add themes by defining the names array in def-colors(). - -FILE="$XDG_CONFIG_HOME/waybar/theme.css" - -def-colors() { - local theme - theme=$(sed 1q "$FILE") - - declare -ga names - - # Add themes here: - if [[ $theme == *"catppuccin"* ]]; then - names=( - 'surface0' 'base' 'rosewater' - 'red' 'text' 'red' - 'mauve' 'rosewater' 'lavender' - 'text' 'mauve' 'red' - 'surface1' 'overlay0' 'text' - ) - fi -} - -get-hex() { - local defs - defs=$(sed -n '3,28p' "$FILE") - - local n hex - declare -gA colors - - for n in "${names[@]}"; do - read -r _ _ hex < <(grep " $n " <<< "$defs") - hex=${hex%;} - - colors[$n]=$hex - done -} - -map-colors() { - local -a maps=( - '_cur_bg' '_bg' '_spinner' - '_hl' '_fg' '_header' - '_info' '_pointer' '_marker' - '_cur_fg' '_prompt' '_cur_hl' - '_sel_bg' '_border' '_label' - ) - - local n - local i=0 - - for n in "${names[@]}"; do - declare -g "${maps[i]}"="${colors[$n]}" - ((i++)) - done -} - -main() { - def-colors - get-hex - map-colors - - # shellcheck disable=SC2154 - # These variables are defined dynamically - declare -ga COLORS=( - "--color= bg+:$_cur_bg, bg:$_bg, spinner:$_spinner" - "--color= hl:$_hl, fg:$_fg, header:$_header" - "--color= info:$_info, pointer:$_pointer, marker:$_marker" - "--color= fg+:$_cur_fg, prompt:$_prompt, hl+:$_cur_hl" - "--color=selected-bg:$_sel_bg, border:$_border, label:$_label" - ) - - export COLORS -} - -main diff --git a/waybar/scripts/network.sh b/waybar/scripts/network.sh deleted file mode 100755 index db34eec..0000000 --- a/waybar/scripts/network.sh +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/env bash -# -# Scan, select, and connect to Wi-Fi networks -# -# Requirements: -# - nmcli (networkmanager) -# - fzf -# - notify-send (libnotify) -# -# Author: Jesse Mirabel -# Created: August 11, 2025 -# License: MIT - -RED='\033[1;31m' -RST='\033[0m' - -TIMEOUT=5 - -get-network-list() { - nmcli device wifi rescan 2> /dev/null - - local i - for ((i = 1; i <= TIMEOUT; i++)); do - printf '\rScanning for networks... (%d/%d)' $i $TIMEOUT - printf '\033[1A' # move cursor up 1 line - - list=$(timeout 1 nmcli device wifi list) - networks=$(tail -n +2 <<< "$list" | awk '$2 != "--"') - - [[ -n $networks ]] && break - done - - printf '\n%bScanning stopped.%b\n\n' "$RED" "$RST" - - if [[ -z $networks ]]; then - notify-send 'Wi-Fi' 'No networks found' -i 'package-broken' - return 1 - fi -} - -select-network() { - local header - header=$(head -n 1 <<< "$list") - - # shellcheck disable=SC1090 - . ~/.config/waybar/scripts/fzf-colors.sh 2> /dev/null - - local opts=( - --border=sharp - --border-label=' Wi-Fi Networks ' - --ghost='Search' - --header="$header" - --height=~100% - --highlight-line - --info=inline-right - --pointer= - --reverse - "${COLORS[@]}" - ) - - bssid=$(fzf "${opts[@]}" <<< "$networks" | awk '{print $1}') - - if [[ -z $bssid ]]; then - return 1 - elif [[ $bssid == '*' ]]; then - notify-send 'Wi-Fi' 'Already connected to this network' \ - -i 'package-install' - return 1 - fi -} - -connect-to-network() { - printf 'Connecting...\n' - - if nmcli --ask device wifi connect "$bssid"; then - notify-send 'Wi-Fi' 'Successfully connected' -i 'package-install' - else - notify-send 'Wi-Fi' 'Failed to connect' -i 'package-purge' - fi -} - -main() { - local status - status=$(nmcli radio wifi) - - if [[ $status == 'disabled' ]]; then - nmcli radio wifi on - notify-send 'Wi-Fi Enabled' -i 'network-wireless-on' -r 1125 - fi - - tput civis # make cursor invisible - get-network-list || exit 1 - tput cnorm # make cursor visible - - select-network || exit 1 - connect-to-network -} - -main diff --git a/waybar/scripts/power-menu.sh b/waybar/scripts/power-menu.sh index b1430fd..ae971c9 100755 --- a/waybar/scripts/power-menu.sh +++ b/waybar/scripts/power-menu.sh @@ -1,49 +1,30 @@ #!/usr/bin/env bash -# -# Display a power menu to perform system actions -# -# Requirements: -# - fzf -# -# Author: Jesse Mirabel -# Created: August 19, 2025 -# License: MIT -LIST=( - 'Lock' - 'Shutdown' - 'Reboot' - 'Logout' - 'Hibernate' - 'Suspend' -) +config="$HOME/.config/rofi/power-menu.rasi" -main() { - # shellcheck disable=SC1090 - . ~/.config/waybar/scripts/fzf-colors.sh 2> /dev/null +actions=$(echo -e " Lock\n Shutdown\n Reboot\n Suspend\n Hibernate\n󰞘 Logout") - local opts=( - --border=sharp - --border-label=' Power Menu ' - --height=~100% - --highlight-line - --no-input - --pointer= - --reverse - "${COLORS[@]}" - ) +# Display logout menu +selected_option=$(echo -e "$actions" | rofi -dmenu -i -config "${config}" || pkill -x rofi) - local selected - selected=$(printf '%s\n' "${LIST[@]}" | fzf "${opts[@]}") - - case $selected in - 'Lock') loginctl lock-session ;; - 'Shutdown') systemctl poweroff ;; - 'Reboot') systemctl reboot ;; - 'Logout') loginctl terminate-session "$XDG_SESSION_ID" ;; - 'Hibernate') systemctl hibernate ;; - 'Suspend') systemctl suspend ;; - esac -} - -main +# Perform actions based on the selected option +case "$selected_option" in +*Lock) + loginctl lock-session + ;; +*Shutdown) + systemctl poweroff + ;; +*Reboot) + systemctl reboot + ;; +*Suspend) + systemctl suspend + ;; +*Hibernate) + systemctl hibernate + ;; +*Logout) + loginctl kill-session "$XDG_SESSION_ID" + ;; +esac diff --git a/waybar/scripts/system-update.sh b/waybar/scripts/system-update.sh index 35c4cf9..f68cbbf 100755 --- a/waybar/scripts/system-update.sh +++ b/waybar/scripts/system-update.sh @@ -1,82 +1,107 @@ #!/usr/bin/env bash -# -# Check for available updates and optionally upgrade packages on Arch Linux. -# -# Requirements: -# - checkupdates (pacman-contrib) -# - notify-send (libnotify) -# - optional: an AUR helper (aura, paru, pikaur, trizen, yay) -# -# Author: Jesse Mirabel -# Created: August 16, 2025 -# License: MIT +# Check release +if [ ! -f /etc/arch-release ]; then + exit 0 +fi -GRN='\033[1;32m' -BLU='\033[1;34m' -RST='\033[0m' - -TIMEOUT=5 - -check-updates() { - repo=$(timeout $TIMEOUT checkupdates 2> /dev/null | wc -l) - - if [[ -n $helper ]]; then - aur=$(timeout $TIMEOUT "$helper" -Quaq 2> /dev/null | wc -l) - fi +pkg_installed() { + local pkg=$1 + if pacman -Qi "${pkg}" &>/dev/null; then + return 0 + elif command -v "${pkg}" &>/dev/null; then + return 0 + else + return 1 + fi } -update-packages() { - printf '\n%bUpdating pacman packages...%b\n' "$BLU" "$RST" - sudo pacman -Syu - - printf '\n%bUpdating AUR packages...%b\n' "$BLU" "$RST" - "$helper" -Syu - - # use signal to update the module - pkill -RTMIN+1 waybar - - notify-send 'Update Complete' -i 'package-install' - printf '\n%bUpdate Complete!%b\n' "$GRN" "$RST" - read -rs -n 1 -p 'Press any key to exit...' +get_aur_helper() { + if command -v yay &>/dev/null; then + aur_helper="yay" + elif command -v paru &>/dev/null; then + aur_helper="paru" + else + aur_helper="" + fi } -display-module() { - local tooltip="Official: $repo" +get_aur_helper - if [[ -n $helper ]]; then - tooltip+="\nAUR($helper): $aur" - fi +# Trigger upgrade +if [ "$1" == "up" ]; then + trap 'pkill -RTMIN+20 waybar' EXIT + command=" + echo 'Starting system update...' + $0 upgrade + if [ -n '$aur_helper' ]; then + echo 'Running AUR update with $aur_helper...' + $aur_helper -Syu + else + echo 'Running official repository update...' + sudo pacman -Syu + fi + if command -v flatpak &>/dev/null; then + echo 'Running Flatpak update...' + flatpak update -y + fi + echo '' + echo 'Update complete! Press Enter to close...' + read -r + " + ghostty -e bash -c "${command}" + exit 0 +fi - local total=$((repo + aur)) +# Check for official repository updates with timeout +official_updates=$( + (timeout 10 bash -c 'while pgrep -x checkupdates >/dev/null; do sleep 1; done') 2>/dev/null + checkupdates 2>/dev/null | wc -l +) +official_updates=$((official_updates + 0)) - if ((total == 0)); then - echo "{ \"text\": \"󰸟\", \"tooltip\": \"No updates available\" }" - else - echo "{ \"text\": \"\", \"tooltip\": \"$tooltip\" }" - fi -} +# Check for AUR updates with timeout +if [ -n "$aur_helper" ]; then + aur_updates=$(timeout 10 $aur_helper -Qua 2>/dev/null | wc -l) + aur_updates=$((aur_updates + 0)) +else + aur_updates=0 +fi -main() { - local arg=$1 - local helpers=(aura paru pikaur trizen yay) - local bin +# Check for Flatpak updates with timeout +if pkg_installed flatpak; then + flatpak_updates=$(timeout 10 flatpak remote-ls --updates 2>/dev/null | wc -l) + flatpak_updates=$((flatpak_updates + 0)) +else + flatpak_updates=0 +fi - bin=$(command -v "${helpers[@]}" | head -n 1) - helper=${bin##*/} - repo=0 - aur=0 +# Calculate total available updates +total_updates=$((official_updates + aur_updates + flatpak_updates)) - case $arg in - 'module') - check-updates - display-module - ;; - *) - printf '%bChecking for updates...%b' "$BLU" "$RST" - check-updates - update-packages - ;; - esac -} +# Handle upgrade info display +if [ "${1}" == "upgrade" ]; then + if [ "$aur_helper" == "yay" ]; then + printf "Official: %s\nAUR ($aur_helper): %s\nFlatpak: %s\n\n" "$official_updates" "$aur_updates" "$flatpak_updates" + elif [ "$aur_helper" == "paru" ]; then + printf "Official: %s\nAUR ($aur_helper): %s\nFlatpak: %s\n\n" "$official_updates" "$aur_updates" "$flatpak_updates" + else + printf "Official: %s\nFlatpak: %s\n\n" "$official_updates" "$flatpak_updates" + fi + exit 0 +fi -main "$@" +# Create tooltip text +if [ "$aur_helper" == "yay" ]; then + tooltip="Official: $official_updates\nAUR ($aur_helper): $aur_updates\nFlatpak: $flatpak_updates" +elif [ "$aur_helper" == "paru" ]; then + tooltip="Official: $official_updates\nAUR ($aur_helper): $aur_updates\nFlatpak: $flatpak_updates" +else + tooltip="Official: $official_updates\nFlatpak: $flatpak_updates" +fi + +# Output compact JSON for Waybar +if [ $total_updates -eq 0 ]; then + echo '{"text":"󰸟","tooltip":"Packages are up to date"}' +else + printf '{"text":" %s","tooltip":"%s"}\n' "$total_updates" "$tooltip" +fi diff --git a/waybar/scripts/theme-switcher.sh b/waybar/scripts/theme-switcher.sh new file mode 100755 index 0000000..d5f1aca --- /dev/null +++ b/waybar/scripts/theme-switcher.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash + +WAYBAR_CSS_DIR="$HOME/.config/waybar/themes/css" +WAYBAR_CSS_FILE="$HOME/.config/waybar/theme.css" +WAYBAR_JSONC_DIR="$HOME/.config/waybar/themes/jsonc" +WAYBAR_JSONC_FILE="$HOME/.config/waybar/config.jsonc" +ROFI_THEMES_DIR="$HOME/.config/rofi/themes" +ROFI_THEME_FILE="$HOME/.config/rofi/theme.rasi" +CURRENT_THEME_FILE="$HOME/.config/waybar/themes/current-theme" + +for dir in "$WAYBAR_CSS_DIR" "$WAYBAR_JSONC_DIR" "$ROFI_THEMES_DIR"; do + [[ ! -d "$dir" ]] && echo "Error: $dir not found" && exit 1 +done + +# Get all themes +waybar_css=("$WAYBAR_CSS_DIR"/*.css) +waybar_jsonc=("$WAYBAR_JSONC_DIR"/*.jsonc) +rofi_themes=("$ROFI_THEMES_DIR"/*.rasi) + +if [[ ${#waybar_css[@]} -eq 0 || ${#waybar_jsonc[@]} -eq 0 || ${#rofi_themes[@]} -eq 0 ]]; then + echo "Error: No themes found in one of the directories" + exit 1 +fi + +# Get the current theme +current_theme=$(cat "$CURRENT_THEME_FILE" 2>/dev/null || echo "") + +# Find the index of the current theme +next_theme_index=0 +for i in "${!waybar_css[@]}"; do + [[ "${waybar_css[$i]}" == "$current_theme" ]] && next_theme_index=$(((i + 1) % ${#waybar_css[@]})) && break +done + +# Get the new theme +new_waybar_css="${waybar_css[$next_theme_index]}" +new_waybar_jsonc="${waybar_jsonc[$next_theme_index]}" +new_rofi_theme="${rofi_themes[$next_theme_index]}" + +# Save the new theme +echo "$new_waybar_css" >"$CURRENT_THEME_FILE" + +declare -A theme_files=( + ["$new_waybar_css"]="$WAYBAR_CSS_FILE" + ["$new_waybar_jsonc"]="$WAYBAR_JSONC_FILE" + ["$new_rofi_theme"]="$ROFI_THEME_FILE" +) + +for src in "${!theme_files[@]}"; do + cp "$src" "${theme_files[$src]}" +done + +# Restart Waybar to apply changes +killall waybar || true +nohup waybar --config "$HOME/.config/waybar/config.jsonc" --style "$HOME/.config/waybar/style.css" >/dev/null 2>&1 & diff --git a/waybar/scripts/volume-control.sh b/waybar/scripts/volume-control.sh new file mode 100755 index 0000000..76bb2f7 --- /dev/null +++ b/waybar/scripts/volume-control.sh @@ -0,0 +1,123 @@ +#!/usr/bin/env bash + +# Define functions +print_error() { + cat <<"EOF" +Usage: ./volumecontrol.sh -[device] +...valid devices are... + i -- input device + o -- output device + p -- player application +...valid actions are... + i -- increase volume [+2] + d -- decrease volume [-2] + m -- mute [x] +EOF + exit 1 +} + +icon() { + vol=$(pactl get-sink-volume @DEFAULT_SINK@ | awk '{print $5}' | sed 's/%//') + mute=$(pactl get-sink-mute @DEFAULT_SINK@ | awk '{print $2}') + + if [ "$mute" = "yes" ] || [ "$vol" -eq 0 ]; then + icon="volume-level-muted" + elif [ "$vol" -lt 33 ]; then + icon="volume-level-low" + elif [ "$vol" -lt 66 ]; then + icon="volume-level-medium" + else + icon="volume-level-high" + fi +} + +send_notification() { + icon + notify-send -a "state" -r 91190 -i "$icon" -h int:value:"$vol" "Volume: ${vol}%" -u low +} + +notify_mute() { + mute=$(pactl get-sink-mute @DEFAULT_SINK@ | awk '{print $2}') + if [ "$mute" = "yes" ]; then + notify-send -a "state" -r 91190 -i "volume-level-muted" "Volume: Muted" -u low + else + icon + notify-send -a "state" -r 91190 -i "$icon" "Volume: Unmuted" -u low + fi +} + +action_volume() { + case "${1}" in + i) + # Increase volume if below 100 + current_vol=$(pactl get-sink-volume @DEFAULT_SINK@ | awk '{print $5}' | sed 's/%//') + if [ "$current_vol" -lt 100 ]; then + new_vol=$((current_vol + 2)) + [ "$new_vol" -gt 100 ] && new_vol=100 + pactl set-sink-volume @DEFAULT_SINK@ "${new_vol}%" + fi + ;; + d) + # Decrease volume if above 0 + current_vol=$(pactl get-sink-volume @DEFAULT_SINK@ | awk '{print $5}' | sed 's/%//') + new_vol=$((current_vol - 2)) + [ "$new_vol" -lt 0 ] && new_vol=0 + pactl set-sink-volume @DEFAULT_SINK@ "${new_vol}%" + ;; + esac +} + +select_output() { + if [ "$@" ]; then + desc="$*" + device=$(pactl list sinks | grep -C2 -F "Description: $desc" | grep Name | cut -d: -f2 | xargs) + if pactl set-default-sink "$device"; then + notify-send -r 91190 "Activated: $desc" + else + notify-send -r 91190 "Error activating $desc" + fi + else + pactl list sinks | grep -ie "Description:" | awk -F ': ' '{print $2}' | sort + fi +} + +# Evaluate device option +while getopts iops: DeviceOpt; do + case "${DeviceOpt}" in + i) + nsink=$(pactl list sources short | awk '{print $2}') + [ -z "${nsink}" ] && echo "ERROR: Input device not found..." && exit 0 + srce="--default-source" + ;; + o) + nsink=$(pactl list sinks short | awk '{print $2}') + [ -z "${nsink}" ] && echo "ERROR: Output device not found..." && exit 0 + srce="" + ;; + p) + nsink=$(playerctl --list-all | grep -w "${OPTARG}") + [ -z "${nsink}" ] && echo "ERROR: Player ${OPTARG} not active..." && exit 0 + # shellcheck disable=SC2034 + srce="${nsink}" + ;; + s) + # Select an output device + select_output "$@" + exit + ;; + *) print_error ;; + esac +done + +# Set default variables +shift $((OPTIND - 1)) + +# Execute action +case "${1}" in +i) action_volume i ;; +d) action_volume d ;; +m) pactl set-sink-mute @DEFAULT_SINK@ toggle && notify_mute && exit 0 ;; +*) print_error ;; +esac + +send_notification diff --git a/waybar/scripts/volume.sh b/waybar/scripts/volume.sh deleted file mode 100755 index 7105acf..0000000 --- a/waybar/scripts/volume.sh +++ /dev/null @@ -1,159 +0,0 @@ -#!/usr/bin/env bash -# -# Adjust default device volume and send a notification with the current level -# -# Requirements: -# - pactl (libpulse) -# - notify-send (libnotify) -# -# Author: Jesse Mirabel -# Created: September 07, 2025 -# License: MIT - -VALUE=1 -MIN=0 -MAX=100 -ID=2425 - -print-usage() { - local script=${0##*/} - - cat <<- EOF - USAGE: $script [OPTIONS] - - Adjust default device volume and send a notification with the current level - - OPTIONS: - input Set device as '@DEFAULT_SOURCE@' - output Set device as '@DEFAULT_SINK@' - - mute Toggle device mute - - raise Raise volume by - lower Lower volume by - Default value: $VALUE - - EXAMPLES: - Toggle microphone mute: - $ $script input mute - - Raise speaker volume: - $ $script output raise - - Lower speaker volume by 5: - $ $script output lower 5 - EOF - - exit 1 -} - -check-muted() { - local muted - muted=$(pactl "get-$dev_mute" "$dev" | awk '{print $2}') - - local state - case $muted in - 'yes') state='Muted' ;; - 'no') state='Unmuted' ;; - esac - - echo "$state" -} - -get-volume() { - local vol - vol=$(pactl "get-$dev_vol" "$dev" | awk '{print $5}' | tr -d '%') - - echo "$vol" -} - -get-icon() { - local state vol - state=$(check-muted) - vol=$(get-volume) - - local icon - local new_vol=${1:-$vol} - - if [[ $state == 'Muted' ]]; then - icon="$dev_icon-muted" - else - if ((new_vol < ((MAX * 33) / 100))); then - icon="$dev_icon-low" - elif ((new_vol < ((MAX * 66) / 100))); then - icon="$dev_icon-medium" - else - icon="$dev_icon-high" - fi - fi - - echo "$icon" -} - -toggle-mute() { - pactl "set-$dev_mute" "$dev" toggle - - local state icon - state=$(check-muted) - icon=$(get-icon) - - notify-send "$title: $state" -i "$icon" -r $ID -} - -set-volume() { - local vol - vol=$(get-volume) - - local new_vol - case $action in - 'raise') - new_vol=$((vol + value)) - ((new_vol > MAX)) && new_vol=$MAX - ;; - 'lower') - new_vol=$((vol - value)) - ((new_vol < MIN)) && new_vol=$MIN - ;; - esac - - pactl "set-$dev_vol" "$dev" "${new_vol}%" - - local icon - icon=$(get-icon "$new_vol") - - notify-send "$title: ${new_vol}%" -h int:value:$new_vol -i "$icon" -r $ID -} - -main() { - device=$1 - action=$2 - value=${3:-$VALUE} - - ! ((value > 0)) && print-usage - - case $device in - 'input') - dev='@DEFAULT_SOURCE@' - dev_mute='source-mute' - dev_vol='source-volume' - dev_icon='mic-volume' - title='Microphone' - ;; - 'output') - dev='@DEFAULT_SINK@' - dev_mute='sink-mute' - dev_vol='sink-volume' - dev_icon='audio-volume' - title='Volume' - ;; - *) print-usage ;; - esac - - case $action in - 'mute') toggle-mute ;; - 'raise' | 'lower') set-volume ;; - *) print-usage ;; - esac -} - -main "$@" diff --git a/waybar/scripts/wifi-menu.sh b/waybar/scripts/wifi-menu.sh new file mode 100755 index 0000000..470722c --- /dev/null +++ b/waybar/scripts/wifi-menu.sh @@ -0,0 +1,126 @@ +#!/usr/bin/env bash + +# Author: Jesse Mirabel (@sejjy) +# GitHub: https://github.com/sejjy/mechabar + +# Rofi config +config="$HOME/.config/rofi/wifi-menu.rasi" + +options=$( + echo " Manual Entry" + echo "󰤮 Disable Wi-Fi" +) +option_disabled="󰤥 Enable Wi-Fi" + +# Rofi window override +override_ssid="entry { placeholder: \"Enter SSID\"; } listview { lines: 0; padding: 20px 6px; }" +override_password="entry { placeholder: \"Enter password\"; } listview { lines: 0; padding: 20px 6px; }" +override_disabled="mainbox { children: [ textbox-custom, listview ]; } listview { lines: 1; padding: 6px 6px 8px; }" + +# Prompt for password +get_password() { + rofi -dmenu -password -config "${config}" -theme-str "${override_password}" -p " " || pkill -x rofi +} + +while true; do + wifi_list() { + nmcli --fields "SECURITY,SSID" device wifi list | + tail -n +2 | # Skip the header line from nmcli output + sed 's/ */ /g' | # Replace multiple spaces with a single space + sed -E "s/WPA*.?\S/󰤪 /g" | # Replace 'WPA*' with a Wi-Fi lock icon + sed "s/^--/󰤨 /g" | # Replace '--' (open networks) with an open Wi-Fi icon + sed "s/󰤪 󰤪/󰤪/g" | # Remove duplicate Wi-Fi lock icons + sed "/--/d" | # Remove lines containing '--' (empty SSIDs) + awk '!seen[$0]++' # Filter out duplicate SSIDs + } + + # Get Wi-Fi status + wifi_status=$(nmcli -fields WIFI g) + + case "$wifi_status" in + *"enabled"*) + selected_option=$(echo "$options"$'\n'"$(wifi_list)" | + rofi -dmenu -i -selected-row 1 -config "${config}" -p " " || pkill -x rofi) + ;; + *"disabled"*) + selected_option=$(echo "$option_disabled" | + rofi -dmenu -i -config "${config}" -theme-str "${override_disabled}" || pkill -x rofi) + ;; + esac + + # Extract selected SSID + read -r selected_ssid <<<"${selected_option:3}" + + # Actions based on selected option + case "$selected_option" in + "") + exit + ;; + *"Enable Wi-Fi") + notify-send "Scanning for networks..." -i "package-installed-outdated" + nmcli radio wifi on + nmcli device wifi rescan + sleep 3 + ;; + *"Disable Wi-Fi") + notify-send "Wi-Fi Disabled" -i "package-broken" + nmcli radio wifi off + exit + ;; + *"Manual Entry") + # Prompt for SSID + manual_ssid=$(rofi -dmenu -config "${config}" -theme-str "${override_ssid}" -p " " || pkill -x rofi) + + # Exit if no option is selected + if [ -z "$manual_ssid" ]; then + exit + fi + + # Prompt for Wi-Fi password + wifi_password=$(get_password) + + if [ -z "$wifi_password" ]; then + # Without password + if nmcli device wifi connect "$manual_ssid" | grep -q "successfully"; then + notify-send "Connected to \"$manual_ssid\"." -i "package-installed-outdated" + exit + else + notify-send "Failed to connect to \"$manual_ssid\"." -i "package-broken" + fi + else + # With password + if nmcli device wifi connect "$manual_ssid" password "$wifi_password" | grep -q "successfully"; then + notify-send "Connected to \"$manual_ssid\"." -i "package-installed-outdated" + exit + else + notify-send "Failed to connect to \"$manual_ssid\"." -i "package-broken" + fi + fi + ;; + *) + # Get saved connections + saved_connections=$(nmcli -g NAME connection) + + if echo "$saved_connections" | grep -qw "$selected_ssid"; then + if nmcli connection up id "$selected_ssid" | grep -q "successfully"; then + notify-send "Connected to \"$selected_ssid\"." -i "package-installed-outdated" + exit + else + notify-send "Failed to connect to \"$selected_ssid\"." -i "package-broken" + fi + else + # Handle secure network connection + if [[ "$selected_option" =~ ^"󰤪" ]]; then + wifi_password=$(get_password) + fi + + if nmcli device wifi connect "$selected_ssid" password "$wifi_password" | grep -q "successfully"; then + notify-send "Connected to \"$selected_ssid\"." -i "package-installed-outdated" + exit + else + notify-send "Failed to connect to \"$selected_ssid\"." -i "package-broken" + fi + fi + ;; + esac +done diff --git a/waybar/scripts/wifi-status.sh b/waybar/scripts/wifi-status.sh new file mode 100755 index 0000000..8e52bca --- /dev/null +++ b/waybar/scripts/wifi-status.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash + +if ! command -v nmcli &>/dev/null; then + echo "{\"text\": \"󰤫\", \"tooltip\": \"nmcli utility is missing\"}" + exit 1 +fi + +# Check if Wi-Fi is enabled +wifi_status=$(nmcli radio wifi 2>/dev/null) + +if [ "$wifi_status" = "disabled" ]; then + echo "{\"text\": \"󰤮\", \"tooltip\": \"Wi-Fi Disabled\"}" + exit 0 +fi + +# Initialize variables with defaults +essid="No Connection" +signal=0 +tooltip="No Wi-Fi Connection" +ip_address="Not Connected" +security="None" +chan="N/A" + +wifi_info=$(nmcli -t -f active,ssid,signal,security dev wifi 2>/dev/null | grep "^yes" | head -1) + +if [ -n "$wifi_info" ]; then + # Parse the wifi info with error handling + essid=$(echo "$wifi_info" | awk -F: '{print $2}') + signal=$(echo "$wifi_info" | awk -F: '{print $3}') + security=$(echo "$wifi_info" | awk -F: '{print $4}') + + # Set defaults if parsing failed + [ -z "$essid" ] && essid="Unknown" + [ -z "$signal" ] && signal=0 + [ -z "$security" ] && security="None" + + # Get active WiFi device, ignoring WireGuard interfaces + active_device=$(nmcli -t -f DEVICE,TYPE,STATE device status 2>/dev/null | + grep -E 'wifi:connected$' | + grep -v -E '^(wg0|wg1|wg2):' | + awk -F: '{print $1}' | head -1) + + if [ -n "$active_device" ]; then + # Get IP address with error handling + ip_output=$(nmcli -e no -g ip4.address device show "$active_device" 2>/dev/null | head -1) + [ -n "$ip_output" ] && ip_address="$ip_output" + + # Get channel and frequency info + wifi_details=$(nmcli -e no -t -f active,bssid,chan,freq device wifi 2>/dev/null | grep "^yes" | head -1) + if [ -n "$wifi_details" ]; then + chan_temp=$(echo "$wifi_details" | awk -F: '{print $8}') + freq_temp=$(echo "$wifi_details" | awk -F: '{print $9}') + [ -n "$chan_temp" ] && [ -n "$freq_temp" ] && chan="$chan_temp ($freq_temp)" + fi + + # Build tooltip with proper formatting + tooltip="SSID: ${essid}" + tooltip+="\\nIP Address: ${ip_address}" + tooltip+="\\nSecurity: ${security}" + tooltip+="\\nChannel: ${chan}" + tooltip+="\\nStrength: ${signal}/100" + else + tooltip="Connected to: ${essid}\\nStrength: ${signal}/100\\nSecurity: ${security}" + fi +fi + +# Ensure signal is a number for comparison +signal=$((signal + 0)) + +# Determine Wi-Fi icon based on signal strength +if [ "$signal" -ge 80 ]; then + icon="󰤨" # Strong signal +elif [ "$signal" -ge 60 ]; then + icon="󰤥" # Good signal +elif [ "$signal" -ge 40 ]; then + icon="󰤢" # Weak signal +elif [ "$signal" -ge 20 ]; then + icon="󰤟" # Very weak signal +else + icon="󰤯" # No signal +fi + +# Output JSON with proper escaping +echo "{\"text\": \"${icon}\", \"tooltip\": \"${tooltip}\"}" diff --git a/waybar/style.css b/waybar/style.css index d988247..0a44cfe 100644 --- a/waybar/style.css +++ b/waybar/style.css @@ -1,12 +1,476 @@ -/* ignore GTK theme */ +@import "theme.css"; + * { - all: initial; + min-height: 0; + border: none; + margin: 0; + padding: 0; } -@import "theme.css"; -@import "styles/fonts.css"; -@import "styles/global.css"; -@import "styles/modules-center.css"; -@import "styles/modules-left.css"; -@import "styles/modules-right.css"; -@import "styles/states.css"; +/* ----------------------------------------------------- MAIN BACKGROUND --- */ + +window#waybar>box { + background: @main-bg; + margin: 2px; +} + +/* --------------------------------------------------------- DROP SHADOW --- */ + +window#waybar { + background: @shadow; +} + +/* ------------------------------------------------------------ TOOLTIPS --- */ + +tooltip { + background: @main-bg; + border: 1.5px solid @main-br; + border-radius: 8px; +} + +tooltip label { + color: @main-fg; + margin: -1.5px 3px; +} + +/* ---------------------------------------- WORKSPACE BUTTONS and LABELS --- */ + +#workspaces button { + color: @module-fg; + border-radius: 8px; + box-shadow: none; + margin: 2px 0; + padding: 0 2px; + transition: none; +} + +#workspaces button:hover { + color: @hover-fg; + background: @hover-bg; + text-shadow: none; +} + +#workspaces button.active { + color: @active-fg; + background: @active-bg; + text-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.4); + margin: 2px; + padding: 0 6px; +} + +/* ------------------------------------------------------------- GENERAL --- */ + +#custom-ws, +#workspaces, +#window, +#custom-temperature, +#memory, +#cpu, +#idle_inhibitor, +#clock, +#custom-wifi, +#custom-wireguard, +#bluetooth, +#custom-update, +#mpris, +#pulseaudio, +#backlight, +#battery, +#custom-power { + opacity: 1; + color: @module-fg; + padding: 0 4px; +} + +#custom-left1, +#custom-left2, +#custom-left3, +#custom-left4, +#custom-left5, +#custom-left6, +#custom-left7, +#custom-left8 { + margin-bottom: 0; + text-shadow: -2px 0 2px rgba(0, 0, 0, 0.5); +} + +#custom-right1, +#custom-right2, +#custom-right3, +#custom-right4, +#custom-right5 { + margin-bottom: 0; + padding-right: 3px; + text-shadow: 2px 0 2px rgba(0, 0, 0, 0.5); +} + +/* ------------------------------------------------------------- MODULES --- */ + +/* --------------------------------------------------------- window icon --- */ + +#custom-ws { + background: @main-bg; +} + +#custom-ws:hover { + color: @hover-fg; +} + +/* ---------------------------------------------------------- workspaces --- */ + +#custom-left1 { + color: @workspaces; + background: @main-bg; + margin-bottom: 0; + padding-left: 2px; +} + +#workspaces { + background: @workspaces; +} + +#custom-right1 { + color: @workspaces; + background: @main-bg; + text-shadow: 3px 0 2px rgba(0, 0, 0, 0.4); + margin-bottom: 0; +} + +/* --------------------------------------------------------- temperature --- */ + +#custom-paddc { + padding-right: 22px; +} + +#custom-left2 { + color: @temperature; + background: @main-bg; + padding-left: 3px; +} + +#custom-temperature { + background: @temperature; + padding: 0 0 0 1px; +} + +/* -------------------------------------------------------------- memory --- */ + +#custom-left3 { + color: @memory; + background: @temperature; + padding-left: 3px; +} + +#memory { + background: @memory; + padding: 0 0 0 1px; +} + +#memory.warning { + color: @warning; +} + +#memory.critical { + color: @critical; +} + +/* ----------------------------------------------------------------- cpu --- */ + +#custom-left4 { + color: @cpu; + background: @memory; + padding-left: 3px; +} + +#cpu { + background: @cpu; +} + +#custom-leftin1 { + color: @cpu; + margin-bottom: -1px; +} + +/* --------------------------------------------------------- distro icon --- */ + +#custom-left5 { + color: @distro-bg; + background: @main-bg; + text-shadow: none; + margin-bottom: -2px; + padding-left: 3px; +} + +#custom-distro { + color: @distro-fg; + background: @distro-bg; + margin: 0 -1px -2px 0; + padding: 0 0 0 3px; + text-shadow: 0 0 1.5px rgba(0, 0, 0, 1); +} + +#custom-right2 { + color: @distro-bg; + background: @main-bg; + text-shadow: none; + margin-bottom: -2px; +} + +/* ---------------------------------------------------------------- time --- */ + +#custom-rightin1 { + color: @time; + margin-bottom: -1px; +} + +#idle_inhibitor { + background: @time; + padding: 0 0 0 7px; +} + +#idle_inhibitor:hover { + color: @hover-fg; +} + +#clock.time { + background: @time; + margin-left: -2px; + padding: 0 3px 0 0; +} + +#custom-right3 { + color: @time; + background: @date; +} + +/* ---------------------------------------------------------------- date --- */ + +#clock.date { + background: @date; +} + +#clock.date:hover { + color: @hover-fg; +} + +#custom-right4 { + color: @date; + background: @tray; +} + +/* ---------------------------------------------------------------- tray --- */ + +#custom-wifi { + background: @tray; + padding: 0 8px 0 5px; +} + +#custom-wifi:hover { + color: @hover-fg; +} + +#custom-wireguard { + background: @tray; + padding: 0 8px 0 5px; +} + +#custom-wireguard:hover { + color: @hover-fg; +} + +#bluetooth { + background: @tray; + padding-right: 5px; +} + +#bluetooth:hover { + color: @hover-fg; +} + +#custom-update { + padding-right: 8px; + background: @tray; +} + +#custom-update:hover { + color: @hover-fg; +} + +#custom-right5 { + color: @tray; + background: @main-bg; +} + +/* ---------------------------------------------------------- media info --- */ + +#mpris { + background: @main-bg; + padding: 0 8px 0; +} + +#mpris:hover { + color: @hover-fg; +} + +/* + output device +*/ + +#custom-left6 { + color: @pulseaudio; + background: @main-bg; + padding-left: 3px; +} + +#pulseaudio { + background: @pulseaudio; +} + +#pulseaudio:hover { + color: @hover-fg; +} + +/* ---------------------------------------------------------- brightness --- */ + +#custom-left7 { + color: @backlight; + background: @pulseaudio; + padding-left: 2px; +} + +#backlight { + background: @backlight; +} + +/* ------------------------------------------------------------- battery --- */ + +#custom-left8 { + color: @battery; + background: @backlight; + padding-left: 2px; +} + +#battery { + color: @module-fg; + background: @battery; +} + +#battery.warning { + color: @warning; +} + +#battery.critical { + color: @critical; +} + +#battery.charging { + color: @charging; +} + +/* -------------------------------------------------------- power button --- */ + +#custom-leftin2 { + color: @battery; + background: @main-bg; + margin-bottom: -1px; +} + +#custom-power { + color: @main-bg; + background: @power; + text-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.6); + border-radius: 10px; + margin: 2px 4px 2px 0; + padding: 0 6px 0 9px; +} + +#custom-power:hover { + color: @hover-fg; + background: @hover-bg; + text-shadow: none; + box-shadow: none; +} + +/* ---------------------------------------------------------- FONT SIZES --- */ + +/* + NOTE: Be careful when changing font sizes, as they + can affect alignment. + + Try adjusting whole numbers first, then refine with + decimals. + + If you increase or decrease a value, make the same + change to all properties in this section to keep + the layout consistent. +*/ + +* { + font-family: "JetBrainsMono Nerd Font"; + font-size: 10px; + font-weight: bold; +} + +tooltip label, +#window label, +#mpris { + font-weight: normal; +} + +/* ----------------------------------------------- left and right arrows --- */ + +#custom-left1, +#custom-left2, +#custom-left3, +#custom-left4, +#custom-left5, +#custom-left6, +#custom-left7, +#custom-left8, +#custom-right1, +#custom-right2, +#custom-right3, +#custom-right4, +#custom-right5 { + font-size: 14.68px; +} + +/* ---------------------------------------------- left and right inverse --- */ + +#custom-leftin1, +#custom-leftin2, +#custom-rightin1 { + font-size: 15.5px; +} + +/* -------------------------------------------------------------- distro --- */ + +#custom-distro { + font-size: 14.6px; +} + +#custom-left5, +#custom-right2 { + font-size: 15.68px; +} + +/* + Adjust these properties as well to keep the design + consistent. +*/ + +#workspaces button { + border-radius: 8px; + padding: 0 2px; +} + +#workspaces button.active { + padding: 0 6px; +} + +#custom-power { + border-radius: 10px; + padding: 0 6px 0 9px; +} diff --git a/waybar/styles/fonts.css b/waybar/styles/fonts.css deleted file mode 100644 index 0fd69f9..0000000 --- a/waybar/styles/fonts.css +++ /dev/null @@ -1,28 +0,0 @@ -* { - font-family: "0xProto Nerd Font"; - font-weight: bold; - font-size: 16px; -} - -#custom-user, -#window label, -#mpris, -tooltip label { - font-weight: normal; -} - -#workspaces button.active label, -#custom-distro { - font-size: 22px; -} - -#custom-power_menu { - font-size: 19px; -} - -#custom-left_div, -#custom-left_inv, -#custom-right_div, -#custom-right_inv { - font-size: 22px; -} diff --git a/waybar/styles/global.css b/waybar/styles/global.css deleted file mode 100644 index e0d2daf..0000000 --- a/waybar/styles/global.css +++ /dev/null @@ -1,38 +0,0 @@ -* { - color: @main-fg; -} - -#waybar { - background-color: @outline; -} -#waybar > box { - margin: 4px; - background-color: @main-bg; -} - -button { - border-radius: 16px; - min-width: 16px; - padding: 0 10px; -} -button:hover { - background-color: @hover-bg; - color: @hover-fg; -} - -tooltip { - border: 2px solid @main-br; - border-radius: 10px; - background-color: @main-bg; -} -tooltip > box { - padding: 0 6px; -} - -.module, -#custom-left_div, -#custom-left_inv, -#custom-right_div, -#custom-right_inv { - margin-bottom: -1px; -} diff --git a/waybar/styles/modules-center.css b/waybar/styles/modules-center.css deleted file mode 100644 index 8647310..0000000 --- a/waybar/styles/modules-center.css +++ /dev/null @@ -1,119 +0,0 @@ -/*------------------ - window count -------------------*/ - -#windowcount { - margin-right: 12px; -} -#windowcount label { - color: @hover-fg; -} - -/*----------------- - temperature ------------------*/ - -#custom-left_div.2 { - color: @temperature; -} -#temperature { - background-color: @temperature; -} - -/*------------ - memory -------------*/ - -#custom-left_div.3 { - background-color: @temperature; - color: @memory; -} -#memory { - background-color: @memory; -} - -/*--------- - cpu ----------*/ - -#custom-left_div.4 { - background-color: @memory; - color: @cpu; -} -#cpu { - background-color: @cpu; -} -#custom-left_inv.1 { - color: @cpu; -} - -/*----------------- - distro icon ------------------*/ - -#custom-left_div.5, -#custom-right_div.2 { - color: @accent; -} -#custom-distro { - padding: 0 10px 0 5px; - background-color: @accent; - color: @main-bg; -} - -/*-------------------- - idle inhibitor ---------------------*/ - -#custom-right_inv.1 { - color: @time; -} -#idle_inhibitor { - background-color: @time; -} - -/*---------- - time -----------*/ - -#clock.time { - padding-right: 6px; - background-color: @time; -} -#custom-right_div.3 { - background-color: @date; - color: @time; -} - -/*---------- - date -----------*/ - -#clock.date { - padding-left: 6px; - background-color: @date; -} -#custom-right_div.4 { - background-color: @tray; - color: @date; -} - -/*----------------- - system tray ------------------*/ - -#network { - background-color: @tray; - padding: 0 6px 0 4px; -} -#bluetooth { - background-color: @tray; - padding: 0 5px; -} -#custom-system_update { - background-color: @tray; - padding: 0 8px 0 2px; -} -#custom-right_div.5 { - color: @tray; -} diff --git a/waybar/styles/modules-left.css b/waybar/styles/modules-left.css deleted file mode 100644 index 45b2959..0000000 --- a/waybar/styles/modules-left.css +++ /dev/null @@ -1,31 +0,0 @@ -/*-------------- - username ---------------*/ - -#custom-user { - padding-right: 12px; -} - -/*---------------- - workspaces -----------------*/ - -#custom-left_div.1, -#custom-right_div.1 { - color: @workspaces; -} -#workspaces { - padding: 0 1px; - background-color: @workspaces; -} -#workspaces button.active label { - color: @accent; -} - -/*------------------ - window title -------------------*/ - -#window { - margin-left: 12px; -} diff --git a/waybar/styles/modules-right.css b/waybar/styles/modules-right.css deleted file mode 100644 index 50f2598..0000000 --- a/waybar/styles/modules-right.css +++ /dev/null @@ -1,59 +0,0 @@ -/*---------------- - media info -----------------*/ - -#mpris { - padding: 0 12px; -} - -/*------------ - volume -------------*/ - -#custom-left_div.6 { - color: @volume; -} -#pulseaudio, -#wireplumber { - background-color: @volume; -} - -/*---------------- - brightness -----------------*/ - -#custom-left_div.7 { - background-color: @volume; - color: @backlight; -} -#backlight { - background-color: @backlight; -} - -/*------------- - battery --------------*/ - -#custom-left_div.8 { - background-color: @backlight; - color: @battery; -} -#battery { - background-color: @battery; -} -#custom-left_inv.2 { - color: @battery; -} - -/*---------------- - power menu -----------------*/ - -#custom-power_menu { - border-radius: 16px; - padding: 0 19px 0 16px; - color: @accent; -} -#custom-power_menu:hover { - background-color: @hover-bg; -} diff --git a/waybar/styles/states.css b/waybar/styles/states.css deleted file mode 100644 index a1c52f8..0000000 --- a/waybar/styles/states.css +++ /dev/null @@ -1,37 +0,0 @@ -#custom-trigger:hover, -#idle_inhibitor:hover, -#clock.date:hover, -#network:hover, -#bluetooth:hover, -#custom-system_update:hover, -#mpris:hover, -#pulseaudio:hover, -#wireplumber:hover { - color: @hover-fg; -} - -/* inactive state */ -#idle_inhibitor.deactivated, -#mpris.paused, -#pulseaudio.output.muted, -#pulseaudio.input.source-muted, -#wireplumber.muted { - color: @hover-fg; -} - -#memory.warning, -#cpu.warning, -#battery.warning { - color: @warning; -} - -#temperature.critical, -#memory.critical, -#cpu.critical, -#battery.critical { - color: @critical; -} - -#battery.charging { - color: @charging; -} diff --git a/waybar/theme.css b/waybar/theme.css index 7e5a575..881c68e 100644 --- a/waybar/theme.css +++ b/waybar/theme.css @@ -1,32 +1,30 @@ -/* Gruvbox Dark */ - -@define-color bg0_h #1d2021; -@define-color bg0 #282828; -@define-color bg1 #3c3836; -@define-color bg2 #504945; -@define-color bg3 #665c54; -@define-color bg4 #7c6f64; -@define-color gray #928374; -@define-color fg4 #a89984; -@define-color fg3 #bdae93; -@define-color fg2 #d5c4a1; -@define-color fg1 #ebdbb2; -@define-color fg0 #fbf1c7; -@define-color red #cc241d; -@define-color bright_red #fb4934; -@define-color green #98971a; -@define-color bright_green #b8bb26; -@define-color yellow #d79921; -@define-color bright_yellow #fabd2f; -@define-color blue #458588; -@define-color bright_blue #83a598; -@define-color purple #b16286; -@define-color bright_purple #d3869b; -@define-color aqua #689d6a; -@define-color bright_aqua #8ec07c; -@define-color orange #d65d0e; -@define-color bright_orange #fe8019; - +/* Custom Theme - Warm Muted with Orange Accents */ +@define-color bg0_h #1c1c1f; +@define-color bg0 #1c1c1f; +@define-color bg1 #252529; +@define-color bg2 #2d2d33; +@define-color bg3 #35353d; +@define-color bg4 #3d3d47; +@define-color gray #6d6860; +@define-color fg4 #7d7972; +@define-color fg3 #8a8580; +@define-color fg2 #ff9100; +@define-color fg1 #b39a76; +@define-color fg0 #c9b08a; +@define-color red #ff0000; +@define-color bright_red #ff0000; +@define-color green #ff9100; +@define-color bright_green #b39a76; +@define-color yellow #ff9100; +@define-color bright_yellow #ff9100; +@define-color blue #ff9100; +@define-color bright_blue #b39a76; +@define-color purple #ff9100; +@define-color bright_purple #b39a76; +@define-color aqua #ff9100; +@define-color bright_aqua #b39a76; +@define-color orange #ff9100; +@define-color bright_orange #ff9100; @define-color white #ffffff; @define-color black #000000; @@ -37,40 +35,32 @@ */ /* Main Colors */ - -@define-color outline shade(@bg0_h, 0.5); -@define-color accent @orange; -@define-color main-fg @fg0; +@define-color shadow shade(@bg0_h, 0.5); +@define-color main-fg @fg2; @define-color main-bg @bg0_h; -@define-color main-br @fg0; - -@define-color active-bg @yellow; -@define-color active-fg @bg0_h; - +@define-color main-br @fg2; +@define-color active-bg @orange; +@define-color active-fg @black; @define-color hover-bg @bg2; -@define-color hover-fg alpha(@fg0, 0.75); +@define-color hover-fg @fg1; /* Module Colors */ - -@define-color module-fg @fg0; -@define-color workspaces @bg0; - -@define-color temperature @bg0; -@define-color memory @bg1; -@define-color cpu @bg2; +@define-color module-fg @fg2; +@define-color workspaces @bg1; +@define-color temperature @bg1; +@define-color memory @bg2; +@define-color cpu @bg3; @define-color distro-fg @black; -@define-color distro-bg @yellow; -@define-color time @bg2; -@define-color date @bg1; -@define-color tray @bg0; - -@define-color pulseaudio @bg0; -@define-color backlight @bg1; -@define-color battery @bg2; -@define-color power @yellow; +@define-color distro-bg @orange; +@define-color time @bg3; +@define-color date @bg2; +@define-color tray @bg1; +@define-color pulseaudio @bg1; +@define-color backlight @bg2; +@define-color battery @bg3; +@define-color power @orange; /* State Colors */ - -@define-color warning @bright_orange; -@define-color critical @bright_red; -@define-color charging @fg0; +@define-color warning @orange; +@define-color critical @red; +@define-color charging @fg2; diff --git a/waybar/themes/catppuccin-frappe.css b/waybar/themes/catppuccin-frappe.css deleted file mode 100644 index d83c7bd..0000000 --- a/waybar/themes/catppuccin-frappe.css +++ /dev/null @@ -1,63 +0,0 @@ -/* catppuccin-frappe */ - -@define-color rosewater #f2d5cf; -@define-color flamingo #eebebe; -@define-color pink #f4b8e4; -@define-color mauve #ca9ee6; -@define-color red #e78284; -@define-color maroon #ea999c; -@define-color peach #ef9f76; -@define-color yellow #e5c890; -@define-color green #a6d189; -@define-color teal #81c8be; -@define-color sky #99d1db; -@define-color sapphire #85c1dc; -@define-color blue #8caaee; -@define-color lavender #babbf1; -@define-color text #c6d0f5; -@define-color subtext1 #b5bfe2; -@define-color subtext0 #a5adce; -@define-color overlay2 #949cbb; -@define-color overlay1 #838ba7; -@define-color overlay0 #737994; -@define-color surface2 #626880; -@define-color surface1 #51576d; -@define-color surface0 #414559; -@define-color base #303446; -@define-color mantle #292c3c; -@define-color crust #232634; - -/* - br - border - bg - background - fg - foreground -*/ - -/* main colors */ - -@define-color accent @lavender; -@define-color main-br @subtext0; -@define-color main-bg @crust; -@define-color main-fg @text; -@define-color hover-bg @base; -@define-color hover-fg alpha(@main-fg, 0.75); -@define-color outline shade(@main-bg, 0.5); - -/* module colors */ - -@define-color workspaces @mantle; -@define-color temperature @mantle; -@define-color memory @base; -@define-color cpu @surface0; -@define-color time @surface0; -@define-color date @base; -@define-color tray @mantle; -@define-color volume @mantle; -@define-color backlight @base; -@define-color battery @surface0; - -/* state colors */ - -@define-color warning @yellow; -@define-color critical @red; -@define-color charging @green; diff --git a/waybar/themes/catppuccin-latte.css b/waybar/themes/catppuccin-latte.css deleted file mode 100644 index fa1aaf8..0000000 --- a/waybar/themes/catppuccin-latte.css +++ /dev/null @@ -1,63 +0,0 @@ -/* catppuccin-latte */ - -@define-color rosewater #dc8a78; -@define-color flamingo #dd7878; -@define-color pink #ea76cb; -@define-color mauve #8839ef; -@define-color red #d20f39; -@define-color maroon #e64553; -@define-color peach #fe640b; -@define-color yellow #df8e1d; -@define-color green #40a02b; -@define-color teal #179299; -@define-color sky #04a5e5; -@define-color sapphire #209fb5; -@define-color blue #1e66f5; -@define-color lavender #7287fd; -@define-color text #4c4f69; -@define-color subtext1 #5c5f77; -@define-color subtext0 #6c6f85; -@define-color overlay2 #7c7f93; -@define-color overlay1 #8c8fa1; -@define-color overlay0 #9ca0b0; -@define-color surface2 #acb0be; -@define-color surface1 #bcc0cc; -@define-color surface0 #ccd0da; -@define-color base #eff1f5; -@define-color mantle #e6e9ef; -@define-color crust #dce0e8; - -/* - br - border - bg - background - fg - foreground -*/ - -/* main colors */ - -@define-color accent @lavender; -@define-color main-br @subtext0; -@define-color main-bg @crust; -@define-color main-fg @text; -@define-color hover-bg @base; -@define-color hover-fg alpha(@main-fg, 0.75); -@define-color outline shade(@main-bg, 0.5); - -/* module colors */ - -@define-color workspaces @mantle; -@define-color temperature @mantle; -@define-color memory @base; -@define-color cpu @surface0; -@define-color time @surface0; -@define-color date @base; -@define-color tray @mantle; -@define-color volume @mantle; -@define-color backlight @base; -@define-color battery @surface0; - -/* state colors */ - -@define-color warning @yellow; -@define-color critical @red; -@define-color charging @green; diff --git a/waybar/themes/catppuccin-macchiato.css b/waybar/themes/catppuccin-macchiato.css deleted file mode 100644 index 97b3be9..0000000 --- a/waybar/themes/catppuccin-macchiato.css +++ /dev/null @@ -1,63 +0,0 @@ -/* catppuccin-macchiato */ - -@define-color rosewater #f4dbd6; -@define-color flamingo #f0c6c6; -@define-color pink #f5bde6; -@define-color mauve #c6a0f6; -@define-color red #ed8796; -@define-color maroon #ee99a0; -@define-color peach #f5a97f; -@define-color yellow #eed49f; -@define-color green #a6da95; -@define-color teal #8bd5ca; -@define-color sky #91d7e3; -@define-color sapphire #7dc4e4; -@define-color blue #8aadf4; -@define-color lavender #b7bdf8; -@define-color text #cad3f5; -@define-color subtext1 #b8c0e0; -@define-color subtext0 #a5adcb; -@define-color overlay2 #939ab7; -@define-color overlay1 #8087a2; -@define-color overlay0 #6e738d; -@define-color surface2 #5b6078; -@define-color surface1 #494d64; -@define-color surface0 #363a4f; -@define-color base #24273a; -@define-color mantle #1e2030; -@define-color crust #181926; - -/* - br - border - bg - background - fg - foreground -*/ - -/* main colors */ - -@define-color accent @lavender; -@define-color main-br @subtext0; -@define-color main-bg @crust; -@define-color main-fg @text; -@define-color hover-bg @base; -@define-color hover-fg alpha(@main-fg, 0.75); -@define-color outline shade(@main-bg, 0.5); - -/* module colors */ - -@define-color workspaces @mantle; -@define-color temperature @mantle; -@define-color memory @base; -@define-color cpu @surface0; -@define-color time @surface0; -@define-color date @base; -@define-color tray @mantle; -@define-color volume @mantle; -@define-color backlight @base; -@define-color battery @surface0; - -/* state colors */ - -@define-color warning @yellow; -@define-color critical @red; -@define-color charging @green; diff --git a/waybar/themes/catppuccin-mocha.css b/waybar/themes/catppuccin-mocha.css deleted file mode 100644 index 68f2927..0000000 --- a/waybar/themes/catppuccin-mocha.css +++ /dev/null @@ -1,63 +0,0 @@ -/* catppuccin-mocha */ - -@define-color rosewater #f5e0dc; -@define-color flamingo #f2cdcd; -@define-color pink #f5c2e7; -@define-color mauve #cba6f7; -@define-color red #f38ba8; -@define-color maroon #eba0ac; -@define-color peach #fab387; -@define-color yellow #f9e2af; -@define-color green #a6e3a1; -@define-color teal #94e2d5; -@define-color sky #89dceb; -@define-color sapphire #74c7ec; -@define-color blue #89b4fa; -@define-color lavender #b4befe; -@define-color text #cdd6f4; -@define-color subtext1 #bac2de; -@define-color subtext0 #a6adc8; -@define-color overlay2 #9399b2; -@define-color overlay1 #7f849c; -@define-color overlay0 #6c7086; -@define-color surface2 #585b70; -@define-color surface1 #45475a; -@define-color surface0 #313244; -@define-color base #1e1e2e; -@define-color mantle #181825; -@define-color crust #11111b; - -/* - br - border - bg - background - fg - foreground -*/ - -/* main colors */ - -@define-color accent @lavender; -@define-color main-br @subtext0; -@define-color main-bg @crust; -@define-color main-fg @text; -@define-color hover-bg @base; -@define-color hover-fg alpha(@main-fg, 0.75); -@define-color outline shade(@main-bg, 0.5); - -/* module colors */ - -@define-color workspaces @mantle; -@define-color temperature @mantle; -@define-color memory @base; -@define-color cpu @surface0; -@define-color time @surface0; -@define-color date @base; -@define-color tray @mantle; -@define-color volume @mantle; -@define-color backlight @base; -@define-color battery @surface0; - -/* state colors */ - -@define-color warning @yellow; -@define-color critical @red; -@define-color charging @green; diff --git a/waybar/themes/css/catppuccin-frappe.css b/waybar/themes/css/catppuccin-frappe.css new file mode 100644 index 0000000..a079f18 --- /dev/null +++ b/waybar/themes/css/catppuccin-frappe.css @@ -0,0 +1,75 @@ +/* Catppuccin Frappe */ + +@define-color rosewater #f2d5cf; +@define-color flamingo #eebebe; +@define-color pink #f4b8e4; +@define-color mauve #ca9ee6; +@define-color red #e78284; +@define-color maroon #ea999c; +@define-color peach #ef9f76; +@define-color yellow #e5c890; +@define-color green #a6d189; +@define-color teal #81c8be; +@define-color sky #99d1db; +@define-color sapphire #85c1dc; +@define-color blue #8caaee; +@define-color lavender #babbf1; +@define-color text #c6d0f5; +@define-color subtext1 #b5bfe2; +@define-color subtext0 #a5adce; +@define-color overlay2 #949cbb; +@define-color overlay1 #838ba7; +@define-color overlay0 #737994; +@define-color surface2 #626880; +@define-color surface1 #51576d; +@define-color surface0 #414559; +@define-color base #303446; +@define-color mantle #292c3c; +@define-color crust #232634; + +@define-color white #ffffff; +@define-color black #000000; + +/* + bg - background + fg - foreground + br - border +*/ + +/* Main Colors */ + +@define-color shadow shade(@crust, 0.5); +@define-color main-fg @text; +@define-color main-bg @crust; +@define-color main-br @text; + +@define-color active-bg @overlay2; +@define-color active-fg @crust; + +@define-color hover-bg @surface0; +@define-color hover-fg alpha(@text, 0.75); + +/* Module Colors */ + +@define-color module-fg @text; +@define-color workspaces @mantle; + +@define-color temperature @mantle; +@define-color memory @base; +@define-color cpu @surface0; +@define-color distro-fg @black; +@define-color distro-bg @overlay2; +@define-color time @surface0; +@define-color date @base; +@define-color tray @mantle; + +@define-color pulseaudio @mantle; +@define-color backlight @base; +@define-color battery @surface0; +@define-color power @overlay2; + +/* State Colors */ + +@define-color warning @yellow; +@define-color critical @red; +@define-color charging @text; diff --git a/waybar/themes/css/catppuccin-latte.css b/waybar/themes/css/catppuccin-latte.css new file mode 100644 index 0000000..ecd734f --- /dev/null +++ b/waybar/themes/css/catppuccin-latte.css @@ -0,0 +1,75 @@ +/* Catppuccin Latte */ + +@define-color rosewater #dc8a78; +@define-color flamingo #dd7878; +@define-color pink #ea76cb; +@define-color mauve #8839ef; +@define-color red #d20f39; +@define-color maroon #e64553; +@define-color peach #fe640b; +@define-color yellow #df8e1d; +@define-color green #40a02b; +@define-color teal #179299; +@define-color sky #04a5e5; +@define-color sapphire #209fb5; +@define-color blue #1e66f5; +@define-color lavender #7287fd; +@define-color text #4c4f69; +@define-color subtext1 #5c5f77; +@define-color subtext0 #6c6f85; +@define-color overlay2 #7c7f93; +@define-color overlay1 #8c8fa1; +@define-color overlay0 #9ca0b0; +@define-color surface2 #acb0be; +@define-color surface1 #bcc0cc; +@define-color surface0 #ccd0da; +@define-color base #eff1f5; +@define-color mantle #e6e9ef; +@define-color crust #dce0e8; + +@define-color white #ffffff; +@define-color black #000000; + +/* + bg - background + fg - foreground + br - border +*/ + +/* Main Colors */ + +@define-color shadow shade(@crust, 0.5); +@define-color main-fg @text; +@define-color main-bg @crust; +@define-color main-br @text; + +@define-color active-bg @overlay2; +@define-color active-fg @crust; + +@define-color hover-bg @surface0; +@define-color hover-fg alpha(@text, 0.75); + +/* Module Colors */ + +@define-color module-fg @text; +@define-color workspaces @mantle; + +@define-color temperature @mantle; +@define-color memory @base; +@define-color cpu @surface0; +@define-color distro-fg @black; +@define-color distro-bg @overlay2; +@define-color time @surface0; +@define-color date @base; +@define-color tray @mantle; + +@define-color pulseaudio @mantle; +@define-color backlight @base; +@define-color battery @surface0; +@define-color power @overlay2; + +/* State Colors */ + +@define-color warning @yellow; +@define-color critical @red; +@define-color charging @text; diff --git a/waybar/themes/css/catppuccin-macchiato.css b/waybar/themes/css/catppuccin-macchiato.css new file mode 100644 index 0000000..cdc4737 --- /dev/null +++ b/waybar/themes/css/catppuccin-macchiato.css @@ -0,0 +1,75 @@ +/* Catppuccin Macchiato */ + +@define-color rosewater #f4dbd6; +@define-color flamingo #f0c6c6; +@define-color pink #f5bde6; +@define-color mauve #c6a0f6; +@define-color red #ed8796; +@define-color maroon #ee99a0; +@define-color peach #f5a97f; +@define-color yellow #eed49f; +@define-color green #a6da95; +@define-color teal #8bd5ca; +@define-color sky #91d7e3; +@define-color sapphire #7dc4e4; +@define-color blue #8aadf4; +@define-color lavender #b7bdf8; +@define-color text #cad3f5; +@define-color subtext1 #b8c0e0; +@define-color subtext0 #a5adcb; +@define-color overlay2 #939ab7; +@define-color overlay1 #8087a2; +@define-color overlay0 #6e738d; +@define-color surface2 #5b6078; +@define-color surface1 #494d64; +@define-color surface0 #363a4f; +@define-color base #24273a; +@define-color mantle #1e2030; +@define-color crust #181926; + +@define-color white #ffffff; +@define-color black #000000; + +/* + bg - background + fg - foreground + br - border +*/ + +/* Main Colors */ + +@define-color shadow shade(@crust, 0.5); +@define-color main-fg @text; +@define-color main-bg @crust; +@define-color main-br @text; + +@define-color active-bg @overlay2; +@define-color active-fg @crust; + +@define-color hover-bg @surface0; +@define-color hover-fg alpha(@text, 0.75); + +/* Module Colors */ + +@define-color module-fg @text; +@define-color workspaces @mantle; + +@define-color temperature @mantle; +@define-color memory @base; +@define-color cpu @surface0; +@define-color distro-fg @black; +@define-color distro-bg @overlay2; +@define-color time @surface0; +@define-color date @base; +@define-color tray @mantle; + +@define-color pulseaudio @mantle; +@define-color backlight @base; +@define-color battery @surface0; +@define-color power @overlay2; + +/* State Colors */ + +@define-color warning @yellow; +@define-color critical @red; +@define-color charging @text; diff --git a/waybar/themes/css/catppuccin-mocha.css b/waybar/themes/css/catppuccin-mocha.css new file mode 100644 index 0000000..244598f --- /dev/null +++ b/waybar/themes/css/catppuccin-mocha.css @@ -0,0 +1,75 @@ +/* Catppuccin Mocha */ + +@define-color rosewater #f5e0dc; +@define-color flamingo #f2cdcd; +@define-color pink #f5c2e7; +@define-color mauve #cba6f7; +@define-color red #f38ba8; +@define-color maroon #eba0ac; +@define-color peach #fab387; +@define-color yellow #f9e2af; +@define-color green #a6e3a1; +@define-color teal #94e2d5; +@define-color sky #89dceb; +@define-color sapphire #74c7ec; +@define-color blue #89b4fa; +@define-color lavender #b4befe; +@define-color text #cdd6f4; +@define-color subtext1 #bac2de; +@define-color subtext0 #a6adc8; +@define-color overlay2 #9399b2; +@define-color overlay1 #7f849c; +@define-color overlay0 #6c7086; +@define-color surface2 #585b70; +@define-color surface1 #45475a; +@define-color surface0 #313244; +@define-color base #1e1e2e; +@define-color mantle #181825; +@define-color crust #11111b; + +@define-color white #ffffff; +@define-color black #000000; + +/* + bg - background + fg - foreground + br - border +*/ + +/* Main Colors */ + +@define-color shadow shade(@crust, 0.5); +@define-color main-fg @text; +@define-color main-bg @crust; +@define-color main-br @text; + +@define-color active-bg @overlay2; +@define-color active-fg @crust; + +@define-color hover-bg @surface0; +@define-color hover-fg alpha(@text, 0.75); + +/* Module Colors */ + +@define-color module-fg @text; +@define-color workspaces @mantle; + +@define-color temperature @mantle; +@define-color memory @base; +@define-color cpu @surface0; +@define-color distro-fg @black; +@define-color distro-bg @overlay2; +@define-color time @surface0; +@define-color date @base; +@define-color tray @mantle; + +@define-color pulseaudio @mantle; +@define-color backlight @base; +@define-color battery @surface0; +@define-color power @overlay2; + +/* State Colors */ + +@define-color warning @yellow; +@define-color critical @red; +@define-color charging @text; diff --git a/waybar/themes/gruvbox-dark.css b/waybar/themes/css/gruvbox-dark.css similarity index 96% rename from waybar/themes/gruvbox-dark.css rename to waybar/themes/css/gruvbox-dark.css index 7e5a575..32ce8d7 100644 --- a/waybar/themes/gruvbox-dark.css +++ b/waybar/themes/css/gruvbox-dark.css @@ -38,8 +38,7 @@ /* Main Colors */ -@define-color outline shade(@bg0_h, 0.5); -@define-color accent @orange; +@define-color shadow shade(@bg0_h, 0.5); @define-color main-fg @fg0; @define-color main-bg @bg0_h; @define-color main-br @fg0; diff --git a/waybar/themes/css/gruvbox-light.css b/waybar/themes/css/gruvbox-light.css new file mode 100644 index 0000000..01db6d1 --- /dev/null +++ b/waybar/themes/css/gruvbox-light.css @@ -0,0 +1,75 @@ +/* Gruvbox Light */ + +@define-color bg0_h #f9f5d7; +@define-color bg0 #fbf1c7; +@define-color bg1 #ebdbb2; +@define-color bg2 #d5c4a1; +@define-color bg3 #bdae93; +@define-color bg4 #a89984; +@define-color gray #928374; +@define-color fg4 #7c6f64; +@define-color fg3 #665c54; +@define-color fg2 #504945; +@define-color fg1 #3c3836; +@define-color fg0 #282828; +@define-color red #cc241d; +@define-color bright_red #9d0006; +@define-color green #98971a; +@define-color bright_green #79740e; +@define-color yellow #d79921; +@define-color bright_yellow #b57614; +@define-color blue #458588; +@define-color bright_blue #076678; +@define-color purple #b16286; +@define-color bright_purple #8f3f71; +@define-color aqua #689d6a; +@define-color bright_aqua #427b58; +@define-color orange #d65d0e; +@define-color bright_orange #af3a03; + +@define-color white #ffffff; +@define-color black #000000; + +/* + bg - background + fg - foreground + br - border +*/ + +/* Main Colors */ + +@define-color shadow shade(@bg0_h, 0.5); +@define-color main-fg @fg0; +@define-color main-bg @bg0_h; +@define-color main-br @fg0; + +@define-color active-bg @yellow; +@define-color active-fg @bg0_h; + +@define-color hover-bg @bg2; +@define-color hover-fg alpha(@fg0, 0.75); + +/* Module Colors */ + +@define-color module-fg @fg0; +@define-color workspaces @bg0; + +@define-color temperature @bg0; +@define-color memory @bg1; +@define-color cpu @bg2; +@define-color distro-fg @black; +@define-color distro-bg @yellow; +@define-color time @bg2; +@define-color date @bg1; +@define-color tray @bg0; + +@define-color pulseaudio @bg0; +@define-color backlight @bg1; +@define-color battery @bg2; +@define-color power @yellow; + +/* State Colors */ + +@define-color warning @bright_orange; +@define-color critical @bright_red; +@define-color charging @fg0; diff --git a/waybar/themes/current-theme b/waybar/themes/current-theme new file mode 100644 index 0000000..6a7a63c --- /dev/null +++ b/waybar/themes/current-theme @@ -0,0 +1 @@ +/home/saeijou/.config/waybar/themes/css/gruvbox-dark.css diff --git a/waybar/themes/gruvbox-theme.css b/waybar/themes/gruvbox-theme.css new file mode 100644 index 0000000..32ce8d7 --- /dev/null +++ b/waybar/themes/gruvbox-theme.css @@ -0,0 +1,75 @@ +/* Gruvbox Dark */ + +@define-color bg0_h #1d2021; +@define-color bg0 #282828; +@define-color bg1 #3c3836; +@define-color bg2 #504945; +@define-color bg3 #665c54; +@define-color bg4 #7c6f64; +@define-color gray #928374; +@define-color fg4 #a89984; +@define-color fg3 #bdae93; +@define-color fg2 #d5c4a1; +@define-color fg1 #ebdbb2; +@define-color fg0 #fbf1c7; +@define-color red #cc241d; +@define-color bright_red #fb4934; +@define-color green #98971a; +@define-color bright_green #b8bb26; +@define-color yellow #d79921; +@define-color bright_yellow #fabd2f; +@define-color blue #458588; +@define-color bright_blue #83a598; +@define-color purple #b16286; +@define-color bright_purple #d3869b; +@define-color aqua #689d6a; +@define-color bright_aqua #8ec07c; +@define-color orange #d65d0e; +@define-color bright_orange #fe8019; + +@define-color white #ffffff; +@define-color black #000000; + +/* + bg - background + fg - foreground + br - border +*/ + +/* Main Colors */ + +@define-color shadow shade(@bg0_h, 0.5); +@define-color main-fg @fg0; +@define-color main-bg @bg0_h; +@define-color main-br @fg0; + +@define-color active-bg @yellow; +@define-color active-fg @bg0_h; + +@define-color hover-bg @bg2; +@define-color hover-fg alpha(@fg0, 0.75); + +/* Module Colors */ + +@define-color module-fg @fg0; +@define-color workspaces @bg0; + +@define-color temperature @bg0; +@define-color memory @bg1; +@define-color cpu @bg2; +@define-color distro-fg @black; +@define-color distro-bg @yellow; +@define-color time @bg2; +@define-color date @bg1; +@define-color tray @bg0; + +@define-color pulseaudio @bg0; +@define-color backlight @bg1; +@define-color battery @bg2; +@define-color power @yellow; + +/* State Colors */ + +@define-color warning @bright_orange; +@define-color critical @bright_red; +@define-color charging @fg0; diff --git a/waybar/themes/jsonc/catppuccin-frappe.jsonc b/waybar/themes/jsonc/catppuccin-frappe.jsonc new file mode 100644 index 0000000..d740ef9 --- /dev/null +++ b/waybar/themes/jsonc/catppuccin-frappe.jsonc @@ -0,0 +1,478 @@ +{ + "layer": "top", + "position": "top", + "mode": "dock", + "reload_style_on_change": true, + "gtk-layer-shell": true, + + // <<--< Positions >-->> + + "modules-left": [ + "custom/ws", // window icon + "custom/left1", + + "hyprland/workspaces", // workspaces + "custom/right1", + + "custom/paddw", + "hyprland/window" // window title + ], + + "modules-center": [ + "custom/paddc", + "custom/left2", + "custom/temperature", // temperature + + "custom/left3", + "memory", // memory + + "custom/left4", + "cpu", // cpu + "custom/leftin1", + + "custom/left5", + "custom/distro", // distro icon + "custom/right2", + + "custom/rightin1", + "idle_inhibitor", // idle inhibitor + "clock#time", // time + "custom/right3", + + "clock#date", // date + "custom/right4", + + "custom/wifi", // wi-fi + "bluetooth", // bluetooth + "custom/update", // system update + "custom/right5" + ], + + "modules-right": [ + "mpris", // media info + + "custom/left6", + "pulseaudio", // output device + + "custom/left7", + "backlight", // brightness + + "custom/left8", + "battery", // battery + + "custom/leftin2", + "custom/power" // power button + ], + + // <<--< Modules >-->> + + "custom/ws": { + "exec": "~/.config/waybar/scripts/current-theme.sh", + "return-type": "json", + "format": " 󰤕 ", + "on-click": "~/.config/waybar/scripts/theme-switcher.sh", + "min-length": 3, + "max-length": 3 + }, + + "hyprland/workspaces": { + "on-scroll-up": "hyprctl dispatch workspace -1", + "on-scroll-down": "hyprctl dispatch workspace +1", + "persistent-workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [] + } + }, + + "hyprland/window": { + "format": "{}", + "tooltip": false, + "min-length": 5, + + "rewrite": { + // Desktop + "": + " Hyprland", + + // Terminal + "~": " Terminal", + "zsh": " Terminal", + "kitty": " Terminal", + + "tmux(.*)": + " Tmux", + + // Browser + + "(.*)Mozilla Firefox": + "󰈹 Firefox", + "(.*) — Mozilla Firefox": + "󰈹 $1", + + "(.*)Zen Browser": + "󰺕 Zen Browser", + "(.*) — Zen Browser": + "󰺕 $1", + + // Development + + "(.*) - Visual Studio Code": + "󰨞 $1", + "(.*)Visual Studio Code": + "󰨞 Visual Studio Code", + + "nvim": + " Neovim", + "nvim (.*)": + " $1", + + "vim": + " Vim", + "vim (.*)": + " $1", + + // Media + + "(.*)Spotify": + " Spotify", + "(.*)Spotify Premium": + " Spotify Premium", + + "OBS(.*)": + " OBS Studio", + + "VLC media player": + "󰕼 VLC Media Player", + "(.*) - VLC media player": + "󰕼 $1", + + "(.*) - mpv": + " $1", + + "qView": " qView", + + "(.*).jpg": " $1.jpg", + "(.*).png": " $1.png", + "(.*).svg": " $1.svg", + + // Social + + "vesktop": + " Discord", + + "• Discord(.*)": "Discord$1", + "(.*)Discord(.*)": + " $1Discord$2", + + // Documents + + "ONLYOFFICE Desktop Editors": + " OnlyOffice Desktop", + + "(.*).docx": + " $1.docx", + "(.*).xlsx": + " $1.xlsx", + "(.*).pptx": + " $1.pptx", + "(.*).pdf": + " $1.pdf", + + // System + "Authenticate": " Authenticate" + } + }, + + "custom/temperature": { + "exec": "~/.config/waybar/scripts/cpu-temp.sh", + "return-type": "json", + "format": "{}", + "interval": 5, + "min-length": 8, + "max-length": 8 + }, + + "memory": { + "states": { + "warning": 75, + "critical": 90 + }, + + "format": "󰘚 {percentage}%", + "format-critical": "󰀦 {percentage}%", + "tooltip": false, + // "tooltip-format": "Memory Used: {used:0.1f} GB / {total:0.1f} GB", + "interval": 5, + "min-length": 7, + "max-length": 7 + }, + + "cpu": { + "format": "󰻠 {usage}%", + "tooltip": false, + "interval": 5, + "min-length": 6, + "max-length": 6 + }, + + "custom/distro": { + "format": " ", + "tooltip": false + }, + + "idle_inhibitor": { + "format": "{icon}", + + "format-icons": { + "activated": "󰈈 ", + "deactivated": "󰈉 " + }, + + "tooltip-format-activated": "Presentation Mode", + "tooltip-format-deactivated": "Idle Mode", + "start-activated": false + }, + + "clock#time": { + "format": "{:%H:%M}", + "tooltip": false, + // "tooltip-format": "Standard Time: {:%I:%M %p}", + "min-length": 6, + "max-length": 6 + }, + + "clock#date": { + "format": "󰨳 {:%m-%d}", + "tooltip-format": "{calendar}", + + "calendar": { + "mode": "month", + "mode-mon-col": 6, + "on-click-right": "mode", + + "format": { + "months": + "{}", + "weekdays": + "{}", + "today": + "{}" + } + }, + + "actions": { + "on-click": "mode", + "on-click-right": "mode" + }, + + "min-length": 8, + "max-length": 8 + }, + + "custom/wifi": { + "exec": "~/.config/waybar/scripts/wifi-status.sh", + "return-type": "json", + "format": "{}", + "on-click": "~/.config/waybar/scripts/wifi-menu.sh", + "on-click-right": "kitty --title '󰤨 Network Manager TUI' bash -c nmtui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "bluetooth": { + "format": "󰂰", + "format-disabled": "󰂲", + "format-connected": "󰂱", + "format-connected-battery": "󰂱", + + "tooltip-format": + "{num_connections} connected", + "tooltip-format-disabled": + "Bluetooth Disabled", + "tooltip-format-connected": + "{device_enumerate}", + "tooltip-format-enumerate-connected": + "{device_alias}", + "tooltip-format-enumerate-connected-battery": + ":: {device_alias}: 󱊣 {device_battery_percentage}%", + + "on-click": "~/.config/waybar/scripts/bluetooth-menu.sh", + "on-click-right": "kitty --title '󰂯 Bluetooth TUI' bash -c bluetui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/update": { + "exec": "~/.config/waybar/scripts/system-update.sh", + "return-type": "json", + "format": "{}", + "on-click": "hyprctl dispatch exec '~/.config/waybar/scripts/system-update.sh up'", + "interval": 30, + "min-length": 1, + "max-length": 1 + }, + + "mpris": { + "format": "{player_icon} {title} - {artist}", + "format-paused": "{status_icon} {title} - {artist}", + + "player-icons": { + "default": "󰝚 ", + "spotify": "󰓇 ", + "firefox": "󰗃 " + }, + "status-icons": { + "paused": "\u200A\u200A󰏤\u2009\u2009" + }, + + "tooltip-format": "Playing: {title} - {artist}", + "tooltip-format-paused": "Paused: {title} - {artist}", + "min-length": 5, + "max-length": 35 + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-muted": "󰝟 {volume}%", + + "format-icons": { + "default": ["󰕿", "󰖀", "󰕾"], + "headphone": "󰋋", + "headset": "󰋋" + }, + + "tooltip-format": "Device: {desc}", + "on-click": "~/.config/waybar/scripts/volume-control.sh -o m", + "on-scroll-up": "~/.config/waybar/scripts/volume-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/volume-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "backlight": { + "format": "{icon} {percent}%", + "format-icons": ["", "", "", "", "", "", "", "", ""], + "tooltip": false, + "on-scroll-up": "~/.config/waybar/scripts/brightness-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/brightness-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "battery": { + "states": { + "warning": 20, + "critical": 10 + }, + + "format": "{icon} {capacity}%", + "format-icons": ["󰂎", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"], + "format-charging": " {capacity}%", + + "tooltip-format": "Discharging: {time}", + "tooltip-format-charging": "Charging: {time}", + "interval": 1, + "min-length": 6, + "max-length": 6 + }, + + "custom/power": { + "format": " ", + "tooltip": false, + // "tooltip-format": "Power Menu", + "on-click": "~/.config/waybar/scripts/power-menu.sh" + }, + + // <<--< Padding >-->> + + "custom/paddw": { + "format": " ", + "tooltip": false + }, + + "custom/paddc": { + "format": " ", + "tooltip": false + }, + + // Left Arrows + + "custom/left1": { + "format": "", + "tooltip": false + }, + "custom/left2": { + "format": "", + "tooltip": false + }, + "custom/left3": { + "format": "", + "tooltip": false + }, + "custom/left4": { + "format": "", + "tooltip": false + }, + "custom/left5": { + "format": "", + "tooltip": false + }, + "custom/left6": { + "format": "", + "tooltip": false + }, + "custom/left7": { + "format": "", + "tooltip": false + }, + "custom/left8": { + "format": "", + "tooltip": false + }, + + // Right Arrows + + "custom/right1": { + "format": "", + "tooltip": false + }, + "custom/right2": { + "format": "", + "tooltip": false + }, + "custom/right3": { + "format": "", + "tooltip": false + }, + "custom/right4": { + "format": "", + "tooltip": false + }, + "custom/right5": { + "format": "", + "tooltip": false + }, + + // Left Inverse + + "custom/leftin1": { + "format": "", + "tooltip": false + }, + "custom/leftin2": { + "format": "", + "tooltip": false + }, + + // Right Inverse + + "custom/rightin1": { + "format": "", + "tooltip": false + } +} diff --git a/waybar/themes/jsonc/catppuccin-latte.jsonc b/waybar/themes/jsonc/catppuccin-latte.jsonc new file mode 100644 index 0000000..a76e81f --- /dev/null +++ b/waybar/themes/jsonc/catppuccin-latte.jsonc @@ -0,0 +1,478 @@ +{ + "layer": "top", + "position": "top", + "mode": "dock", + "reload_style_on_change": true, + "gtk-layer-shell": true, + + // <<--< Positions >-->> + + "modules-left": [ + "custom/ws", // window icon + "custom/left1", + + "hyprland/workspaces", // workspaces + "custom/right1", + + "custom/paddw", + "hyprland/window" // window title + ], + + "modules-center": [ + "custom/paddc", + "custom/left2", + "custom/temperature", // temperature + + "custom/left3", + "memory", // memory + + "custom/left4", + "cpu", // cpu + "custom/leftin1", + + "custom/left5", + "custom/distro", // distro icon + "custom/right2", + + "custom/rightin1", + "idle_inhibitor", // idle inhibitor + "clock#time", // time + "custom/right3", + + "clock#date", // date + "custom/right4", + + "custom/wifi", // wi-fi + "bluetooth", // bluetooth + "custom/update", // system update + "custom/right5" + ], + + "modules-right": [ + "mpris", // media info + + "custom/left6", + "pulseaudio", // output device + + "custom/left7", + "backlight", // brightness + + "custom/left8", + "battery", // battery + + "custom/leftin2", + "custom/power" // power button + ], + + // <<--< Modules >-->> + + "custom/ws": { + "exec": "~/.config/waybar/scripts/current-theme.sh", + "return-type": "json", + "format": " 󰤕 ", + "on-click": "~/.config/waybar/scripts/theme-switcher.sh", + "min-length": 3, + "max-length": 3 + }, + + "hyprland/workspaces": { + "on-scroll-up": "hyprctl dispatch workspace -1", + "on-scroll-down": "hyprctl dispatch workspace +1", + "persistent-workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [] + } + }, + + "hyprland/window": { + "format": "{}", + "tooltip": false, + "min-length": 5, + + "rewrite": { + // Desktop + "": + " Hyprland", + + // Terminal + "~": " Terminal", + "zsh": " Terminal", + "kitty": " Terminal", + + "tmux(.*)": + " Tmux", + + // Browser + + "(.*)Mozilla Firefox": + "󰈹 Firefox", + "(.*) — Mozilla Firefox": + "󰈹 $1", + + "(.*)Zen Browser": + "󰺕 Zen Browser", + "(.*) — Zen Browser": + "󰺕 $1", + + // Development + + "(.*) - Visual Studio Code": + "󰨞 $1", + "(.*)Visual Studio Code": + "󰨞 Visual Studio Code", + + "nvim": + " Neovim", + "nvim (.*)": + " $1", + + "vim": + " Vim", + "vim (.*)": + " $1", + + // Media + + "(.*)Spotify": + " Spotify", + "(.*)Spotify Premium": + " Spotify Premium", + + "OBS(.*)": + " OBS Studio", + + "VLC media player": + "󰕼 VLC Media Player", + "(.*) - VLC media player": + "󰕼 $1", + + "(.*) - mpv": + " $1", + + "qView": " qView", + + "(.*).jpg": " $1.jpg", + "(.*).png": " $1.png", + "(.*).svg": " $1.svg", + + // Social + + "vesktop": + " Discord", + + "• Discord(.*)": "Discord$1", + "(.*)Discord(.*)": + " $1Discord$2", + + // Documents + + "ONLYOFFICE Desktop Editors": + " OnlyOffice Desktop", + + "(.*).docx": + " $1.docx", + "(.*).xlsx": + " $1.xlsx", + "(.*).pptx": + " $1.pptx", + "(.*).pdf": + " $1.pdf", + + // System + "Authenticate": " Authenticate" + } + }, + + "custom/temperature": { + "exec": "~/.config/waybar/scripts/cpu-temp.sh", + "return-type": "json", + "format": "{}", + "interval": 5, + "min-length": 8, + "max-length": 8 + }, + + "memory": { + "states": { + "warning": 75, + "critical": 90 + }, + + "format": "󰘚 {percentage}%", + "format-critical": "󰀦 {percentage}%", + "tooltip": false, + // "tooltip-format": "Memory Used: {used:0.1f} GB / {total:0.1f} GB", + "interval": 5, + "min-length": 7, + "max-length": 7 + }, + + "cpu": { + "format": "󰻠 {usage}%", + "tooltip": false, + "interval": 5, + "min-length": 6, + "max-length": 6 + }, + + "custom/distro": { + "format": " ", + "tooltip": false + }, + + "idle_inhibitor": { + "format": "{icon}", + + "format-icons": { + "activated": "󰈈 ", + "deactivated": "󰈉 " + }, + + "tooltip-format-activated": "Presentation Mode", + "tooltip-format-deactivated": "Idle Mode", + "start-activated": false + }, + + "clock#time": { + "format": "{:%H:%M}", + "tooltip": false, + // "tooltip-format": "Standard Time: {:%I:%M %p}", + "min-length": 6, + "max-length": 6 + }, + + "clock#date": { + "format": "󰨳 {:%m-%d}", + "tooltip-format": "{calendar}", + + "calendar": { + "mode": "month", + "mode-mon-col": 6, + "on-click-right": "mode", + + "format": { + "months": + "{}", + "weekdays": + "{}", + "today": + "{}" + } + }, + + "actions": { + "on-click": "mode", + "on-click-right": "mode" + }, + + "min-length": 8, + "max-length": 8 + }, + + "custom/wifi": { + "exec": "~/.config/waybar/scripts/wifi-status.sh", + "return-type": "json", + "format": "{}", + "on-click": "~/.config/waybar/scripts/wifi-menu.sh", + "on-click-right": "kitty --title '󰤨 Network Manager TUI' bash -c nmtui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "bluetooth": { + "format": "󰂰", + "format-disabled": "󰂲", + "format-connected": "󰂱", + "format-connected-battery": "󰂱", + + "tooltip-format": + "{num_connections} connected", + "tooltip-format-disabled": + "Bluetooth Disabled", + "tooltip-format-connected": + "{device_enumerate}", + "tooltip-format-enumerate-connected": + "{device_alias}", + "tooltip-format-enumerate-connected-battery": + ":: {device_alias}: 󱊣 {device_battery_percentage}%", + + "on-click": "~/.config/waybar/scripts/bluetooth-menu.sh", + "on-click-right": "kitty --title '󰂯 Bluetooth TUI' bash -c bluetui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/update": { + "exec": "~/.config/waybar/scripts/system-update.sh", + "return-type": "json", + "format": "{}", + "on-click": "hyprctl dispatch exec '~/.config/waybar/scripts/system-update.sh up'", + "interval": 30, + "min-length": 1, + "max-length": 1 + }, + + "mpris": { + "format": "{player_icon} {title} - {artist}", + "format-paused": "{status_icon} {title} - {artist}", + + "player-icons": { + "default": "󰝚 ", + "spotify": "󰓇 ", + "firefox": "󰗃 " + }, + "status-icons": { + "paused": "\u200A\u200A󰏤\u2009\u2009" + }, + + "tooltip-format": "Playing: {title} - {artist}", + "tooltip-format-paused": "Paused: {title} - {artist}", + "min-length": 5, + "max-length": 35 + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-muted": "󰝟 {volume}%", + + "format-icons": { + "default": ["󰕿", "󰖀", "󰕾"], + "headphone": "󰋋", + "headset": "󰋋" + }, + + "tooltip-format": "Device: {desc}", + "on-click": "~/.config/waybar/scripts/volume-control.sh -o m", + "on-scroll-up": "~/.config/waybar/scripts/volume-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/volume-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "backlight": { + "format": "{icon} {percent}%", + "format-icons": ["", "", "", "", "", "", "", "", ""], + "tooltip": false, + "on-scroll-up": "~/.config/waybar/scripts/brightness-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/brightness-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "battery": { + "states": { + "warning": 20, + "critical": 10 + }, + + "format": "{icon} {capacity}%", + "format-icons": ["󰂎", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"], + "format-charging": " {capacity}%", + + "tooltip-format": "Discharging: {time}", + "tooltip-format-charging": "Charging: {time}", + "interval": 1, + "min-length": 6, + "max-length": 6 + }, + + "custom/power": { + "format": " ", + "tooltip": false, + // "tooltip-format": "Power Menu", + "on-click": "~/.config/waybar/scripts/power-menu.sh" + }, + + // <<--< Padding >-->> + + "custom/paddw": { + "format": " ", + "tooltip": false + }, + + "custom/paddc": { + "format": " ", + "tooltip": false + }, + + // Left Arrows + + "custom/left1": { + "format": "", + "tooltip": false + }, + "custom/left2": { + "format": "", + "tooltip": false + }, + "custom/left3": { + "format": "", + "tooltip": false + }, + "custom/left4": { + "format": "", + "tooltip": false + }, + "custom/left5": { + "format": "", + "tooltip": false + }, + "custom/left6": { + "format": "", + "tooltip": false + }, + "custom/left7": { + "format": "", + "tooltip": false + }, + "custom/left8": { + "format": "", + "tooltip": false + }, + + // Right Arrows + + "custom/right1": { + "format": "", + "tooltip": false + }, + "custom/right2": { + "format": "", + "tooltip": false + }, + "custom/right3": { + "format": "", + "tooltip": false + }, + "custom/right4": { + "format": "", + "tooltip": false + }, + "custom/right5": { + "format": "", + "tooltip": false + }, + + // Left Inverse + + "custom/leftin1": { + "format": "", + "tooltip": false + }, + "custom/leftin2": { + "format": "", + "tooltip": false + }, + + // Right Inverse + + "custom/rightin1": { + "format": "", + "tooltip": false + } +} diff --git a/waybar/themes/jsonc/catppuccin-macchiato.jsonc b/waybar/themes/jsonc/catppuccin-macchiato.jsonc new file mode 100644 index 0000000..86194e0 --- /dev/null +++ b/waybar/themes/jsonc/catppuccin-macchiato.jsonc @@ -0,0 +1,478 @@ +{ + "layer": "top", + "position": "top", + "mode": "dock", + "reload_style_on_change": true, + "gtk-layer-shell": true, + + // <<--< Positions >-->> + + "modules-left": [ + "custom/ws", // window icon + "custom/left1", + + "hyprland/workspaces", // workspaces + "custom/right1", + + "custom/paddw", + "hyprland/window" // window title + ], + + "modules-center": [ + "custom/paddc", + "custom/left2", + "custom/temperature", // temperature + + "custom/left3", + "memory", // memory + + "custom/left4", + "cpu", // cpu + "custom/leftin1", + + "custom/left5", + "custom/distro", // distro icon + "custom/right2", + + "custom/rightin1", + "idle_inhibitor", // idle inhibitor + "clock#time", // time + "custom/right3", + + "clock#date", // date + "custom/right4", + + "custom/wifi", // wi-fi + "bluetooth", // bluetooth + "custom/update", // system update + "custom/right5" + ], + + "modules-right": [ + "mpris", // media info + + "custom/left6", + "pulseaudio", // output device + + "custom/left7", + "backlight", // brightness + + "custom/left8", + "battery", // battery + + "custom/leftin2", + "custom/power" // power button + ], + + // <<--< Modules >-->> + + "custom/ws": { + "exec": "~/.config/waybar/scripts/current-theme.sh", + "return-type": "json", + "format": " 󰤕 ", + "on-click": "~/.config/waybar/scripts/theme-switcher.sh", + "min-length": 3, + "max-length": 3 + }, + + "hyprland/workspaces": { + "on-scroll-up": "hyprctl dispatch workspace -1", + "on-scroll-down": "hyprctl dispatch workspace +1", + "persistent-workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [] + } + }, + + "hyprland/window": { + "format": "{}", + "tooltip": false, + "min-length": 5, + + "rewrite": { + // Desktop + "": + " Hyprland", + + // Terminal + "~": " Terminal", + "zsh": " Terminal", + "kitty": " Terminal", + + "tmux(.*)": + " Tmux", + + // Browser + + "(.*)Mozilla Firefox": + "󰈹 Firefox", + "(.*) — Mozilla Firefox": + "󰈹 $1", + + "(.*)Zen Browser": + "󰺕 Zen Browser", + "(.*) — Zen Browser": + "󰺕 $1", + + // Development + + "(.*) - Visual Studio Code": + "󰨞 $1", + "(.*)Visual Studio Code": + "󰨞 Visual Studio Code", + + "nvim": + " Neovim", + "nvim (.*)": + " $1", + + "vim": + " Vim", + "vim (.*)": + " $1", + + // Media + + "(.*)Spotify": + " Spotify", + "(.*)Spotify Premium": + " Spotify Premium", + + "OBS(.*)": + " OBS Studio", + + "VLC media player": + "󰕼 VLC Media Player", + "(.*) - VLC media player": + "󰕼 $1", + + "(.*) - mpv": + " $1", + + "qView": " qView", + + "(.*).jpg": " $1.jpg", + "(.*).png": " $1.png", + "(.*).svg": " $1.svg", + + // Social + + "vesktop": + " Discord", + + "• Discord(.*)": "Discord$1", + "(.*)Discord(.*)": + " $1Discord$2", + + // Documents + + "ONLYOFFICE Desktop Editors": + " OnlyOffice Desktop", + + "(.*).docx": + " $1.docx", + "(.*).xlsx": + " $1.xlsx", + "(.*).pptx": + " $1.pptx", + "(.*).pdf": + " $1.pdf", + + // System + "Authenticate": " Authenticate" + } + }, + + "custom/temperature": { + "exec": "~/.config/waybar/scripts/cpu-temp.sh", + "return-type": "json", + "format": "{}", + "interval": 5, + "min-length": 8, + "max-length": 8 + }, + + "memory": { + "states": { + "warning": 75, + "critical": 90 + }, + + "format": "󰘚 {percentage}%", + "format-critical": "󰀦 {percentage}%", + "tooltip": false, + // "tooltip-format": "Memory Used: {used:0.1f} GB / {total:0.1f} GB", + "interval": 5, + "min-length": 7, + "max-length": 7 + }, + + "cpu": { + "format": "󰻠 {usage}%", + "tooltip": false, + "interval": 5, + "min-length": 6, + "max-length": 6 + }, + + "custom/distro": { + "format": " ", + "tooltip": false + }, + + "idle_inhibitor": { + "format": "{icon}", + + "format-icons": { + "activated": "󰈈 ", + "deactivated": "󰈉 " + }, + + "tooltip-format-activated": "Presentation Mode", + "tooltip-format-deactivated": "Idle Mode", + "start-activated": false + }, + + "clock#time": { + "format": "{:%H:%M}", + "tooltip": false, + // "tooltip-format": "Standard Time: {:%I:%M %p}", + "min-length": 6, + "max-length": 6 + }, + + "clock#date": { + "format": "󰨳 {:%m-%d}", + "tooltip-format": "{calendar}", + + "calendar": { + "mode": "month", + "mode-mon-col": 6, + "on-click-right": "mode", + + "format": { + "months": + "{}", + "weekdays": + "{}", + "today": + "{}" + } + }, + + "actions": { + "on-click": "mode", + "on-click-right": "mode" + }, + + "min-length": 8, + "max-length": 8 + }, + + "custom/wifi": { + "exec": "~/.config/waybar/scripts/wifi-status.sh", + "return-type": "json", + "format": "{}", + "on-click": "~/.config/waybar/scripts/wifi-menu.sh", + "on-click-right": "kitty --title '󰤨 Network Manager TUI' bash -c nmtui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "bluetooth": { + "format": "󰂰", + "format-disabled": "󰂲", + "format-connected": "󰂱", + "format-connected-battery": "󰂱", + + "tooltip-format": + "{num_connections} connected", + "tooltip-format-disabled": + "Bluetooth Disabled", + "tooltip-format-connected": + "{device_enumerate}", + "tooltip-format-enumerate-connected": + "{device_alias}", + "tooltip-format-enumerate-connected-battery": + ":: {device_alias}: 󱊣 {device_battery_percentage}%", + + "on-click": "~/.config/waybar/scripts/bluetooth-menu.sh", + "on-click-right": "kitty --title '󰂯 Bluetooth TUI' bash -c bluetui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/update": { + "exec": "~/.config/waybar/scripts/system-update.sh", + "return-type": "json", + "format": "{}", + "on-click": "hyprctl dispatch exec '~/.config/waybar/scripts/system-update.sh up'", + "interval": 30, + "min-length": 1, + "max-length": 1 + }, + + "mpris": { + "format": "{player_icon} {title} - {artist}", + "format-paused": "{status_icon} {title} - {artist}", + + "player-icons": { + "default": "󰝚 ", + "spotify": "󰓇 ", + "firefox": "󰗃 " + }, + "status-icons": { + "paused": "\u200A\u200A󰏤\u2009\u2009" + }, + + "tooltip-format": "Playing: {title} - {artist}", + "tooltip-format-paused": "Paused: {title} - {artist}", + "min-length": 5, + "max-length": 35 + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-muted": "󰝟 {volume}%", + + "format-icons": { + "default": ["󰕿", "󰖀", "󰕾"], + "headphone": "󰋋", + "headset": "󰋋" + }, + + "tooltip-format": "Device: {desc}", + "on-click": "~/.config/waybar/scripts/volume-control.sh -o m", + "on-scroll-up": "~/.config/waybar/scripts/volume-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/volume-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "backlight": { + "format": "{icon} {percent}%", + "format-icons": ["", "", "", "", "", "", "", "", ""], + "tooltip": false, + "on-scroll-up": "~/.config/waybar/scripts/brightness-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/brightness-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "battery": { + "states": { + "warning": 20, + "critical": 10 + }, + + "format": "{icon} {capacity}%", + "format-icons": ["󰂎", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"], + "format-charging": " {capacity}%", + + "tooltip-format": "Discharging: {time}", + "tooltip-format-charging": "Charging: {time}", + "interval": 1, + "min-length": 6, + "max-length": 6 + }, + + "custom/power": { + "format": " ", + "tooltip": false, + // "tooltip-format": "Power Menu", + "on-click": "~/.config/waybar/scripts/power-menu.sh" + }, + + // <<--< Padding >-->> + + "custom/paddw": { + "format": " ", + "tooltip": false + }, + + "custom/paddc": { + "format": " ", + "tooltip": false + }, + + // Left Arrows + + "custom/left1": { + "format": "", + "tooltip": false + }, + "custom/left2": { + "format": "", + "tooltip": false + }, + "custom/left3": { + "format": "", + "tooltip": false + }, + "custom/left4": { + "format": "", + "tooltip": false + }, + "custom/left5": { + "format": "", + "tooltip": false + }, + "custom/left6": { + "format": "", + "tooltip": false + }, + "custom/left7": { + "format": "", + "tooltip": false + }, + "custom/left8": { + "format": "", + "tooltip": false + }, + + // Right Arrows + + "custom/right1": { + "format": "", + "tooltip": false + }, + "custom/right2": { + "format": "", + "tooltip": false + }, + "custom/right3": { + "format": "", + "tooltip": false + }, + "custom/right4": { + "format": "", + "tooltip": false + }, + "custom/right5": { + "format": "", + "tooltip": false + }, + + // Left Inverse + + "custom/leftin1": { + "format": "", + "tooltip": false + }, + "custom/leftin2": { + "format": "", + "tooltip": false + }, + + // Right Inverse + + "custom/rightin1": { + "format": "", + "tooltip": false + } +} diff --git a/waybar/themes/jsonc/catppuccin-mocha.jsonc b/waybar/themes/jsonc/catppuccin-mocha.jsonc new file mode 100644 index 0000000..4125b3d --- /dev/null +++ b/waybar/themes/jsonc/catppuccin-mocha.jsonc @@ -0,0 +1,478 @@ +{ + "layer": "top", + "position": "top", + "mode": "dock", + "reload_style_on_change": true, + "gtk-layer-shell": true, + + // <<--< Positions >-->> + + "modules-left": [ + "custom/ws", // window icon + "custom/left1", + + "hyprland/workspaces", // workspaces + "custom/right1", + + "custom/paddw", + "hyprland/window" // window title + ], + + "modules-center": [ + "custom/paddc", + "custom/left2", + "custom/temperature", // temperature + + "custom/left3", + "memory", // memory + + "custom/left4", + "cpu", // cpu + "custom/leftin1", + + "custom/left5", + "custom/distro", // distro icon + "custom/right2", + + "custom/rightin1", + "idle_inhibitor", // idle inhibitor + "clock#time", // time + "custom/right3", + + "clock#date", // date + "custom/right4", + + "custom/wifi", // wi-fi + "bluetooth", // bluetooth + "custom/update", // system update + "custom/right5" + ], + + "modules-right": [ + "mpris", // media info + + "custom/left6", + "pulseaudio", // output device + + "custom/left7", + "backlight", // brightness + + "custom/left8", + "battery", // battery + + "custom/leftin2", + "custom/power" // power button + ], + + // <<--< Modules >-->> + + "custom/ws": { + "exec": "~/.config/waybar/scripts/current-theme.sh", + "return-type": "json", + "format": " 󰤕 ", + "on-click": "~/.config/waybar/scripts/theme-switcher.sh", + "min-length": 3, + "max-length": 3 + }, + + "hyprland/workspaces": { + "on-scroll-up": "hyprctl dispatch workspace -1", + "on-scroll-down": "hyprctl dispatch workspace +1", + "persistent-workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [] + } + }, + + "hyprland/window": { + "format": "{}", + "tooltip": false, + "min-length": 5, + + "rewrite": { + // Desktop + "": + " Hyprland", + + // Terminal + "~": " Terminal", + "zsh": " Terminal", + "kitty": " Terminal", + + "tmux(.*)": + " Tmux", + + // Browser + + "(.*)Mozilla Firefox": + "󰈹 Firefox", + "(.*) — Mozilla Firefox": + "󰈹 $1", + + "(.*)Zen Browser": + "󰺕 Zen Browser", + "(.*) — Zen Browser": + "󰺕 $1", + + // Development + + "(.*) - Visual Studio Code": + "󰨞 $1", + "(.*)Visual Studio Code": + "󰨞 Visual Studio Code", + + "nvim": + " Neovim", + "nvim (.*)": + " $1", + + "vim": + " Vim", + "vim (.*)": + " $1", + + // Media + + "(.*)Spotify": + " Spotify", + "(.*)Spotify Premium": + " Spotify Premium", + + "OBS(.*)": + " OBS Studio", + + "VLC media player": + "󰕼 VLC Media Player", + "(.*) - VLC media player": + "󰕼 $1", + + "(.*) - mpv": + " $1", + + "qView": " qView", + + "(.*).jpg": " $1.jpg", + "(.*).png": " $1.png", + "(.*).svg": " $1.svg", + + // Social + + "vesktop": + " Discord", + + "• Discord(.*)": "Discord$1", + "(.*)Discord(.*)": + " $1Discord$2", + + // Documents + + "ONLYOFFICE Desktop Editors": + " OnlyOffice Desktop", + + "(.*).docx": + " $1.docx", + "(.*).xlsx": + " $1.xlsx", + "(.*).pptx": + " $1.pptx", + "(.*).pdf": + " $1.pdf", + + // System + "Authenticate": " Authenticate" + } + }, + + "custom/temperature": { + "exec": "~/.config/waybar/scripts/cpu-temp.sh", + "return-type": "json", + "format": "{}", + "interval": 5, + "min-length": 8, + "max-length": 8 + }, + + "memory": { + "states": { + "warning": 75, + "critical": 90 + }, + + "format": "󰘚 {percentage}%", + "format-critical": "󰀦 {percentage}%", + "tooltip": false, + // "tooltip-format": "Memory Used: {used:0.1f} GB / {total:0.1f} GB", + "interval": 5, + "min-length": 7, + "max-length": 7 + }, + + "cpu": { + "format": "󰻠 {usage}%", + "tooltip": false, + "interval": 5, + "min-length": 6, + "max-length": 6 + }, + + "custom/distro": { + "format": " ", + "tooltip": false + }, + + "idle_inhibitor": { + "format": "{icon}", + + "format-icons": { + "activated": "󰈈 ", + "deactivated": "󰈉 " + }, + + "tooltip-format-activated": "Presentation Mode", + "tooltip-format-deactivated": "Idle Mode", + "start-activated": false + }, + + "clock#time": { + "format": "{:%H:%M}", + "tooltip": false, + // "tooltip-format": "Standard Time: {:%I:%M %p}", + "min-length": 6, + "max-length": 6 + }, + + "clock#date": { + "format": "󰨳 {:%m-%d}", + "tooltip-format": "{calendar}", + + "calendar": { + "mode": "month", + "mode-mon-col": 6, + "on-click-right": "mode", + + "format": { + "months": + "{}", + "weekdays": + "{}", + "today": + "{}" + } + }, + + "actions": { + "on-click": "mode", + "on-click-right": "mode" + }, + + "min-length": 8, + "max-length": 8 + }, + + "custom/wifi": { + "exec": "~/.config/waybar/scripts/wifi-status.sh", + "return-type": "json", + "format": "{}", + "on-click": "~/.config/waybar/scripts/wifi-menu.sh", + "on-click-right": "kitty --title '󰤨 Network Manager TUI' bash -c nmtui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "bluetooth": { + "format": "󰂰", + "format-disabled": "󰂲", + "format-connected": "󰂱", + "format-connected-battery": "󰂱", + + "tooltip-format": + "{num_connections} connected", + "tooltip-format-disabled": + "Bluetooth Disabled", + "tooltip-format-connected": + "{device_enumerate}", + "tooltip-format-enumerate-connected": + "{device_alias}", + "tooltip-format-enumerate-connected-battery": + ":: {device_alias}: 󱊣 {device_battery_percentage}%", + + "on-click": "~/.config/waybar/scripts/bluetooth-menu.sh", + "on-click-right": "kitty --title '󰂯 Bluetooth TUI' bash -c bluetui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/update": { + "exec": "~/.config/waybar/scripts/system-update.sh", + "return-type": "json", + "format": "{}", + "on-click": "hyprctl dispatch exec '~/.config/waybar/scripts/system-update.sh up'", + "interval": 30, + "min-length": 1, + "max-length": 1 + }, + + "mpris": { + "format": "{player_icon} {title} - {artist}", + "format-paused": "{status_icon} {title} - {artist}", + + "player-icons": { + "default": "󰝚 ", + "spotify": "󰓇 ", + "firefox": "󰗃 " + }, + "status-icons": { + "paused": "\u200A\u200A󰏤\u2009\u2009" + }, + + "tooltip-format": "Playing: {title} - {artist}", + "tooltip-format-paused": "Paused: {title} - {artist}", + "min-length": 5, + "max-length": 35 + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-muted": "󰝟 {volume}%", + + "format-icons": { + "default": ["󰕿", "󰖀", "󰕾"], + "headphone": "󰋋", + "headset": "󰋋" + }, + + "tooltip-format": "Device: {desc}", + "on-click": "~/.config/waybar/scripts/volume-control.sh -o m", + "on-scroll-up": "~/.config/waybar/scripts/volume-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/volume-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "backlight": { + "format": "{icon} {percent}%", + "format-icons": ["", "", "", "", "", "", "", "", ""], + "tooltip": false, + "on-scroll-up": "~/.config/waybar/scripts/brightness-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/brightness-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "battery": { + "states": { + "warning": 20, + "critical": 10 + }, + + "format": "{icon} {capacity}%", + "format-icons": ["󰂎", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"], + "format-charging": " {capacity}%", + + "tooltip-format": "Discharging: {time}", + "tooltip-format-charging": "Charging: {time}", + "interval": 1, + "min-length": 6, + "max-length": 6 + }, + + "custom/power": { + "format": " ", + "tooltip": false, + // "tooltip-format": "Power Menu", + "on-click": "~/.config/waybar/scripts/power-menu.sh" + }, + + // <<--< Padding >-->> + + "custom/paddw": { + "format": " ", + "tooltip": false + }, + + "custom/paddc": { + "format": " ", + "tooltip": false + }, + + // Left Arrows + + "custom/left1": { + "format": "", + "tooltip": false + }, + "custom/left2": { + "format": "", + "tooltip": false + }, + "custom/left3": { + "format": "", + "tooltip": false + }, + "custom/left4": { + "format": "", + "tooltip": false + }, + "custom/left5": { + "format": "", + "tooltip": false + }, + "custom/left6": { + "format": "", + "tooltip": false + }, + "custom/left7": { + "format": "", + "tooltip": false + }, + "custom/left8": { + "format": "", + "tooltip": false + }, + + // Right Arrows + + "custom/right1": { + "format": "", + "tooltip": false + }, + "custom/right2": { + "format": "", + "tooltip": false + }, + "custom/right3": { + "format": "", + "tooltip": false + }, + "custom/right4": { + "format": "", + "tooltip": false + }, + "custom/right5": { + "format": "", + "tooltip": false + }, + + // Left Inverse + + "custom/leftin1": { + "format": "", + "tooltip": false + }, + "custom/leftin2": { + "format": "", + "tooltip": false + }, + + // Right Inverse + + "custom/rightin1": { + "format": "", + "tooltip": false + } +} diff --git a/waybar/themes/jsonc/gruvbox-dark.jsonc b/waybar/themes/jsonc/gruvbox-dark.jsonc new file mode 100644 index 0000000..64dad16 --- /dev/null +++ b/waybar/themes/jsonc/gruvbox-dark.jsonc @@ -0,0 +1,478 @@ +{ + "layer": "top", + "position": "top", + "mode": "dock", + "reload_style_on_change": true, + "gtk-layer-shell": true, + + // <<--< Positions >-->> + + "modules-left": [ + "custom/ws", // window icon + "custom/left1", + + "hyprland/workspaces", // workspaces + "custom/right1", + + "custom/paddw", + "hyprland/window" // window title + ], + + "modules-center": [ + "custom/paddc", + "custom/left2", + "custom/temperature", // temperature + + "custom/left3", + "memory", // memory + + "custom/left4", + "cpu", // cpu + "custom/leftin1", + + "custom/left5", + "custom/distro", // distro icon + "custom/right2", + + "custom/rightin1", + "idle_inhibitor", // idle inhibitor + "clock#time", // time + "custom/right3", + + "clock#date", // date + "custom/right4", + + "custom/wifi", // wi-fi + "bluetooth", // bluetooth + "custom/update", // system update + "custom/right5" + ], + + "modules-right": [ + "mpris", // media info + + "custom/left6", + "pulseaudio", // output device + + "custom/left7", + "backlight", // brightness + + "custom/left8", + "battery", // battery + + "custom/leftin2", + "custom/power" // power button + ], + + // <<--< Modules >-->> + + "custom/ws": { + "exec": "~/.config/waybar/scripts/current-theme.sh", + "return-type": "json", + "format": " 󰤕 ", + "on-click": "~/.config/waybar/scripts/theme-switcher.sh", + "min-length": 3, + "max-length": 3 + }, + + "hyprland/workspaces": { + "on-scroll-up": "hyprctl dispatch workspace -1", + "on-scroll-down": "hyprctl dispatch workspace +1", + "persistent-workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [] + } + }, + + "hyprland/window": { + "format": "{}", + "tooltip": false, + "min-length": 5, + + "rewrite": { + // Desktop + "": + " Hyprland", + + // Terminal + "~": " Terminal", + "zsh": " Terminal", + "kitty": " Terminal", + + "tmux(.*)": + " Tmux", + + // Browser + + "(.*)Mozilla Firefox": + "󰈹 Firefox", + "(.*) — Mozilla Firefox": + "󰈹 $1", + + "(.*)Zen Browser": + "󰺕 Zen Browser", + "(.*) — Zen Browser": + "󰺕 $1", + + // Development + + "(.*) - Visual Studio Code": + "󰨞 $1", + "(.*)Visual Studio Code": + "󰨞 Visual Studio Code", + + "nvim": + " Neovim", + "nvim (.*)": + " $1", + + "vim": + " Vim", + "vim (.*)": + " $1", + + // Media + + "(.*)Spotify": + " Spotify", + "(.*)Spotify Premium": + " Spotify Premium", + + "OBS(.*)": + " OBS Studio", + + "VLC media player": + "󰕼 VLC Media Player", + "(.*) - VLC media player": + "󰕼 $1", + + "(.*) - mpv": + " $1", + + "qView": " qView", + + "(.*).jpg": " $1.jpg", + "(.*).png": " $1.png", + "(.*).svg": " $1.svg", + + // Social + + "vesktop": + " Discord", + + "• Discord(.*)": "Discord$1", + "(.*)Discord(.*)": + " $1Discord$2", + + // Documents + + "ONLYOFFICE Desktop Editors": + " OnlyOffice Desktop", + + "(.*).docx": + " $1.docx", + "(.*).xlsx": + " $1.xlsx", + "(.*).pptx": + " $1.pptx", + "(.*).pdf": + " $1.pdf", + + // System + "Authenticate": " Authenticate" + } + }, + + "custom/temperature": { + "exec": "~/.config/waybar/scripts/cpu-temp.sh", + "return-type": "json", + "format": "{}", + "interval": 5, + "min-length": 8, + "max-length": 8 + }, + + "memory": { + "states": { + "warning": 75, + "critical": 90 + }, + + "format": "󰘚 {percentage}%", + "format-critical": "󰀦 {percentage}%", + "tooltip": false, + // "tooltip-format": "Memory Used: {used:0.1f} GB / {total:0.1f} GB", + "interval": 5, + "min-length": 7, + "max-length": 7 + }, + + "cpu": { + "format": "󰻠 {usage}%", + "tooltip": false, + "interval": 5, + "min-length": 6, + "max-length": 6 + }, + + "custom/distro": { + "format": " ", + "tooltip": false + }, + + "idle_inhibitor": { + "format": "{icon}", + + "format-icons": { + "activated": "󰈈 ", + "deactivated": "󰈉 " + }, + + "tooltip-format-activated": "Presentation Mode", + "tooltip-format-deactivated": "Idle Mode", + "start-activated": false + }, + + "clock#time": { + "format": "{:%H:%M}", + "tooltip": false, + // "tooltip-format": "Standard Time: {:%I:%M %p}", + "min-length": 6, + "max-length": 6 + }, + + "clock#date": { + "format": "󰨳 {:%m-%d}", + "tooltip-format": "{calendar}", + + "calendar": { + "mode": "month", + "mode-mon-col": 6, + "on-click-right": "mode", + + "format": { + "months": + "{}", + "weekdays": + "{}", + "today": + "{}" + } + }, + + "actions": { + "on-click": "mode", + "on-click-right": "mode" + }, + + "min-length": 8, + "max-length": 8 + }, + + "custom/wifi": { + "exec": "~/.config/waybar/scripts/wifi-status.sh", + "return-type": "json", + "format": "{}", + "on-click": "~/.config/waybar/scripts/wifi-menu.sh", + "on-click-right": "kitty --title '󰤨 Network Manager TUI' bash -c nmtui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "bluetooth": { + "format": "󰂰", + "format-disabled": "󰂲", + "format-connected": "󰂱", + "format-connected-battery": "󰂱", + + "tooltip-format": + "{num_connections} connected", + "tooltip-format-disabled": + "Bluetooth Disabled", + "tooltip-format-connected": + "{device_enumerate}", + "tooltip-format-enumerate-connected": + "{device_alias}", + "tooltip-format-enumerate-connected-battery": + ":: {device_alias}: 󱊣 {device_battery_percentage}%", + + "on-click": "~/.config/waybar/scripts/bluetooth-menu.sh", + "on-click-right": "kitty --title '󰂯 Bluetooth TUI' bash -c bluetui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/update": { + "exec": "~/.config/waybar/scripts/system-update.sh", + "return-type": "json", + "format": "{}", + "on-click": "hyprctl dispatch exec '~/.config/waybar/scripts/system-update.sh up'", + "interval": 30, + "min-length": 1, + "max-length": 1 + }, + + "mpris": { + "format": "{player_icon} {title} - {artist}", + "format-paused": "{status_icon} {title} - {artist}", + + "player-icons": { + "default": "󰝚 ", + "spotify": "󰓇 ", + "firefox": "󰗃 " + }, + "status-icons": { + "paused": "\u200A\u200A󰏤\u2009\u2009" + }, + + "tooltip-format": "Playing: {title} - {artist}", + "tooltip-format-paused": "Paused: {title} - {artist}", + "min-length": 5, + "max-length": 35 + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-muted": "󰝟 {volume}%", + + "format-icons": { + "default": ["󰕿", "󰖀", "󰕾"], + "headphone": "󰋋", + "headset": "󰋋" + }, + + "tooltip-format": "Device: {desc}", + "on-click": "~/.config/waybar/scripts/volume-control.sh -o m", + "on-scroll-up": "~/.config/waybar/scripts/volume-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/volume-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "backlight": { + "format": "{icon} {percent}%", + "format-icons": ["", "", "", "", "", "", "", "", ""], + "tooltip": false, + "on-scroll-up": "~/.config/waybar/scripts/brightness-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/brightness-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "battery": { + "states": { + "warning": 20, + "critical": 10 + }, + + "format": "{icon} {capacity}%", + "format-icons": ["󰂎", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"], + "format-charging": " {capacity}%", + + "tooltip-format": "Discharging: {time}", + "tooltip-format-charging": "Charging: {time}", + "interval": 1, + "min-length": 6, + "max-length": 6 + }, + + "custom/power": { + "format": " ", + "tooltip": false, + // "tooltip-format": "Power Menu", + "on-click": "~/.config/waybar/scripts/power-menu.sh" + }, + + // <<--< Padding >-->> + + "custom/paddw": { + "format": " ", + "tooltip": false + }, + + "custom/paddc": { + "format": " ", + "tooltip": false + }, + + // Left Arrows + + "custom/left1": { + "format": "", + "tooltip": false + }, + "custom/left2": { + "format": "", + "tooltip": false + }, + "custom/left3": { + "format": "", + "tooltip": false + }, + "custom/left4": { + "format": "", + "tooltip": false + }, + "custom/left5": { + "format": "", + "tooltip": false + }, + "custom/left6": { + "format": "", + "tooltip": false + }, + "custom/left7": { + "format": "", + "tooltip": false + }, + "custom/left8": { + "format": "", + "tooltip": false + }, + + // Right Arrows + + "custom/right1": { + "format": "", + "tooltip": false + }, + "custom/right2": { + "format": "", + "tooltip": false + }, + "custom/right3": { + "format": "", + "tooltip": false + }, + "custom/right4": { + "format": "", + "tooltip": false + }, + "custom/right5": { + "format": "", + "tooltip": false + }, + + // Left Inverse + + "custom/leftin1": { + "format": "", + "tooltip": false + }, + "custom/leftin2": { + "format": "", + "tooltip": false + }, + + // Right Inverse + + "custom/rightin1": { + "format": "", + "tooltip": false + } +} diff --git a/waybar/themes/jsonc/gruvbox-light.jsonc b/waybar/themes/jsonc/gruvbox-light.jsonc new file mode 100644 index 0000000..42e5f7d --- /dev/null +++ b/waybar/themes/jsonc/gruvbox-light.jsonc @@ -0,0 +1,478 @@ +{ + "layer": "top", + "position": "top", + "mode": "dock", + "reload_style_on_change": true, + "gtk-layer-shell": true, + + // <<--< Positions >-->> + + "modules-left": [ + "custom/ws", // window icon + "custom/left1", + + "hyprland/workspaces", // workspaces + "custom/right1", + + "custom/paddw", + "hyprland/window" // window title + ], + + "modules-center": [ + "custom/paddc", + "custom/left2", + "custom/temperature", // temperature + + "custom/left3", + "memory", // memory + + "custom/left4", + "cpu", // cpu + "custom/leftin1", + + "custom/left5", + "custom/distro", // distro icon + "custom/right2", + + "custom/rightin1", + "idle_inhibitor", // idle inhibitor + "clock#time", // time + "custom/right3", + + "clock#date", // date + "custom/right4", + + "custom/wifi", // wi-fi + "bluetooth", // bluetooth + "custom/update", // system update + "custom/right5" + ], + + "modules-right": [ + "mpris", // media info + + "custom/left6", + "pulseaudio", // output device + + "custom/left7", + "backlight", // brightness + + "custom/left8", + "battery", // battery + + "custom/leftin2", + "custom/power" // power button + ], + + // <<--< Modules >-->> + + "custom/ws": { + "exec": "~/.config/waybar/scripts/current-theme.sh", + "return-type": "json", + "format": " 󰤕 ", + "on-click": "~/.config/waybar/scripts/theme-switcher.sh", + "min-length": 3, + "max-length": 3 + }, + + "hyprland/workspaces": { + "on-scroll-up": "hyprctl dispatch workspace -1", + "on-scroll-down": "hyprctl dispatch workspace +1", + "persistent-workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [] + } + }, + + "hyprland/window": { + "format": "{}", + "tooltip": false, + "min-length": 5, + + "rewrite": { + // Desktop + "": + " Hyprland", + + // Terminal + "~": " Terminal", + "zsh": " Terminal", + "kitty": " Terminal", + + "tmux(.*)": + " Tmux", + + // Browser + + "(.*)Mozilla Firefox": + "󰈹 Firefox", + "(.*) — Mozilla Firefox": + "󰈹 $1", + + "(.*)Zen Browser": + "󰺕 Zen Browser", + "(.*) — Zen Browser": + "󰺕 $1", + + // Development + + "(.*) - Visual Studio Code": + "󰨞 $1", + "(.*)Visual Studio Code": + "󰨞 Visual Studio Code", + + "nvim": + " Neovim", + "nvim (.*)": + " $1", + + "vim": + " Vim", + "vim (.*)": + " $1", + + // Media + + "(.*)Spotify": + " Spotify", + "(.*)Spotify Premium": + " Spotify Premium", + + "OBS(.*)": + " OBS Studio", + + "VLC media player": + "󰕼 VLC Media Player", + "(.*) - VLC media player": + "󰕼 $1", + + "(.*) - mpv": + " $1", + + "qView": " qView", + + "(.*).jpg": " $1.jpg", + "(.*).png": " $1.png", + "(.*).svg": " $1.svg", + + // Social + + "vesktop": + " Discord", + + "• Discord(.*)": "Discord$1", + "(.*)Discord(.*)": + " $1Discord$2", + + // Documents + + "ONLYOFFICE Desktop Editors": + " OnlyOffice Desktop", + + "(.*).docx": + " $1.docx", + "(.*).xlsx": + " $1.xlsx", + "(.*).pptx": + " $1.pptx", + "(.*).pdf": + " $1.pdf", + + // System + "Authenticate": " Authenticate" + } + }, + + "custom/temperature": { + "exec": "~/.config/waybar/scripts/cpu-temp.sh", + "return-type": "json", + "format": "{}", + "interval": 5, + "min-length": 8, + "max-length": 8 + }, + + "memory": { + "states": { + "warning": 75, + "critical": 90 + }, + + "format": "󰘚 {percentage}%", + "format-critical": "󰀦 {percentage}%", + "tooltip": false, + // "tooltip-format": "Memory Used: {used:0.1f} GB / {total:0.1f} GB", + "interval": 5, + "min-length": 7, + "max-length": 7 + }, + + "cpu": { + "format": "󰻠 {usage}%", + "tooltip": false, + "interval": 5, + "min-length": 6, + "max-length": 6 + }, + + "custom/distro": { + "format": " ", + "tooltip": false + }, + + "idle_inhibitor": { + "format": "{icon}", + + "format-icons": { + "activated": "󰈈 ", + "deactivated": "󰈉 " + }, + + "tooltip-format-activated": "Presentation Mode", + "tooltip-format-deactivated": "Idle Mode", + "start-activated": false + }, + + "clock#time": { + "format": "{:%H:%M}", + "tooltip": false, + // "tooltip-format": "Standard Time: {:%I:%M %p}", + "min-length": 6, + "max-length": 6 + }, + + "clock#date": { + "format": "󰨳 {:%m-%d}", + "tooltip-format": "{calendar}", + + "calendar": { + "mode": "month", + "mode-mon-col": 6, + "on-click-right": "mode", + + "format": { + "months": + "{}", + "weekdays": + "{}", + "today": + "{}" + } + }, + + "actions": { + "on-click": "mode", + "on-click-right": "mode" + }, + + "min-length": 8, + "max-length": 8 + }, + + "custom/wifi": { + "exec": "~/.config/waybar/scripts/wifi-status.sh", + "return-type": "json", + "format": "{}", + "on-click": "~/.config/waybar/scripts/wifi-menu.sh", + "on-click-right": "kitty --title '󰤨 Network Manager TUI' bash -c nmtui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "bluetooth": { + "format": "󰂰", + "format-disabled": "󰂲", + "format-connected": "󰂱", + "format-connected-battery": "󰂱", + + "tooltip-format": + "{num_connections} connected", + "tooltip-format-disabled": + "Bluetooth Disabled", + "tooltip-format-connected": + "{device_enumerate}", + "tooltip-format-enumerate-connected": + "{device_alias}", + "tooltip-format-enumerate-connected-battery": + ":: {device_alias}: 󱊣 {device_battery_percentage}%", + + "on-click": "~/.config/waybar/scripts/bluetooth-menu.sh", + "on-click-right": "kitty --title '󰂯 Bluetooth TUI' bash -c bluetui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/update": { + "exec": "~/.config/waybar/scripts/system-update.sh", + "return-type": "json", + "format": "{}", + "on-click": "hyprctl dispatch exec '~/.config/waybar/scripts/system-update.sh up'", + "interval": 30, + "min-length": 1, + "max-length": 1 + }, + + "mpris": { + "format": "{player_icon} {title} - {artist}", + "format-paused": "{status_icon} {title} - {artist}", + + "player-icons": { + "default": "󰝚 ", + "spotify": "󰓇 ", + "firefox": "󰗃 " + }, + "status-icons": { + "paused": "\u200A\u200A󰏤\u2009\u2009" + }, + + "tooltip-format": "Playing: {title} - {artist}", + "tooltip-format-paused": "Paused: {title} - {artist}", + "min-length": 5, + "max-length": 35 + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-muted": "󰝟 {volume}%", + + "format-icons": { + "default": ["󰕿", "󰖀", "󰕾"], + "headphone": "󰋋", + "headset": "󰋋" + }, + + "tooltip-format": "Device: {desc}", + "on-click": "~/.config/waybar/scripts/volume-control.sh -o m", + "on-scroll-up": "~/.config/waybar/scripts/volume-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/volume-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "backlight": { + "format": "{icon} {percent}%", + "format-icons": ["", "", "", "", "", "", "", "", ""], + "tooltip": false, + "on-scroll-up": "~/.config/waybar/scripts/brightness-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/brightness-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "battery": { + "states": { + "warning": 20, + "critical": 10 + }, + + "format": "{icon} {capacity}%", + "format-icons": ["󰂎", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"], + "format-charging": " {capacity}%", + + "tooltip-format": "Discharging: {time}", + "tooltip-format-charging": "Charging: {time}", + "interval": 1, + "min-length": 6, + "max-length": 6 + }, + + "custom/power": { + "format": " ", + "tooltip": false, + // "tooltip-format": "Power Menu", + "on-click": "~/.config/waybar/scripts/power-menu.sh" + }, + + // <<--< Padding >-->> + + "custom/paddw": { + "format": " ", + "tooltip": false + }, + + "custom/paddc": { + "format": " ", + "tooltip": false + }, + + // Left Arrows + + "custom/left1": { + "format": "", + "tooltip": false + }, + "custom/left2": { + "format": "", + "tooltip": false + }, + "custom/left3": { + "format": "", + "tooltip": false + }, + "custom/left4": { + "format": "", + "tooltip": false + }, + "custom/left5": { + "format": "", + "tooltip": false + }, + "custom/left6": { + "format": "", + "tooltip": false + }, + "custom/left7": { + "format": "", + "tooltip": false + }, + "custom/left8": { + "format": "", + "tooltip": false + }, + + // Right Arrows + + "custom/right1": { + "format": "", + "tooltip": false + }, + "custom/right2": { + "format": "", + "tooltip": false + }, + "custom/right3": { + "format": "", + "tooltip": false + }, + "custom/right4": { + "format": "", + "tooltip": false + }, + "custom/right5": { + "format": "", + "tooltip": false + }, + + // Left Inverse + + "custom/leftin1": { + "format": "", + "tooltip": false + }, + "custom/leftin2": { + "format": "", + "tooltip": false + }, + + // Right Inverse + + "custom/rightin1": { + "format": "", + "tooltip": false + } +}