diff --git a/.config/hypr/conf.d/theme.conf b/.config/hypr/conf.d/theme.conf
index 4b2c6ba..887dd0e 100644
--- a/.config/hypr/conf.d/theme.conf
+++ b/.config/hypr/conf.d/theme.conf
@@ -33,8 +33,8 @@ decoration {
rounding_power = 10
# Change transparency of focused and unfocused windows
- active_opacity = 0.85
- inactive_opacity = 0.85
+ active_opacity = 0.9
+ inactive_opacity = 0.9
shadow {
enabled = true
diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf
index 6e703d5..0344f52 100644
--- a/.config/hypr/hyprland.conf
+++ b/.config/hypr/hyprland.conf
@@ -17,7 +17,7 @@ monitor=,preferred,auto,1.566667
# Set programs that you use
$terminal = kitty
$filemanager = kitty -e yazi
-$menu = wofi --show drun
+$menu = rofi -show drun
$powerMenu = bash ~/.config/wofi/wofi-powermenu.sh
$browser = firefox
$email = thunderbird
@@ -30,7 +30,7 @@ $lockscreen = hyprlock
#################
# Autostart necessary processes (like notifications daemons, status bars, etc.)
-exec-once = waybar
+#exec-once = waybar
exec-once = hyprpaper & hypridle & $lockscreen
exec-once = dunst
exec-once = [workspace 2 silent] $browser
diff --git a/.config/rofi/bluetooth-menu.rasi b/.config/rofi/bluetooth-menu.rasi
new file mode 100644
index 0000000..f4fafb0
--- /dev/null
+++ b/.config/rofi/bluetooth-menu.rasi
@@ -0,0 +1,99 @@
+/* Bluetooth menu */
+
+@theme "~/.config/rofi/theme.rasi"
+
+configuration {
+ font: "JetBrainsMono Nerd Font 8";
+ hover-select: true;
+ me-select-entry: "MousePrimary";
+ me-accept-entry: "!MousePrimary";
+}
+
+/* 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/.config/rofi/config.rasi b/.config/rofi/config.rasi
new file mode 100644
index 0000000..e334cdd
--- /dev/null
+++ b/.config/rofi/config.rasi
@@ -0,0 +1,171 @@
+configuration {
+/* modes: "window,drun,run,ssh";*/
+/* font: "mono 12";*/
+/* location: 0;*/
+/* yoffset: 0;*/
+/* xoffset: 0;*/
+/* fixed-num-lines: true;*/
+/* show-icons: false;*/
+/* preview-cmd: ;*/
+/* on-selection-changed: ;*/
+/* on-mode-changed: ;*/
+/* on-entry-accepted: ;*/
+/* on-menu-canceled: ;*/
+/* on-menu-error: ;*/
+/* on-screenshot-taken: ;*/
+/* terminal: "rofi-sensible-terminal";*/
+/* ssh-client: "ssh";*/
+/* ssh-command: "{terminal} -e {ssh-client} {host} [-p {port}]";*/
+/* run-command: "{cmd}";*/
+/* run-list-command: "";*/
+/* run-shell-command: "{terminal} -e {cmd}";*/
+/* window-command: "wmctrl -i -R {window}";*/
+/* window-match-fields: "all";*/
+/* icon-theme: ;*/
+/* drun-match-fields: "name,generic,exec,categories,keywords";*/
+/* drun-categories: ;*/
+/* drun-show-actions: false;*/
+/* drun-display-format: "{name} [({generic})]";*/
+/* drun-url-launcher: "xdg-open";*/
+/* disable-history: false;*/
+/* ignored-prefixes: "";*/
+/* sort: false;*/
+/* sorting-method: "normal";*/
+/* case-sensitive: false;*/
+/* case-smart: false;*/
+/* cycle: true;*/
+/* sidebar-mode: false;*/
+/* hover-select: false;*/
+/* eh: 1;*/
+/* auto-select: false;*/
+/* parse-hosts: false;*/
+/* parse-known-hosts: true;*/
+/* combi-modes: "window,run";*/
+/* matching: "normal";*/
+/* tokenize: true;*/
+/* m: "-5";*/
+/* filter: ;*/
+/* dpi: -1;*/
+/* threads: 0;*/
+/* scroll-method: 0;*/
+/* window-format: "{w} {c} {t}";*/
+/* click-to-exit: true;*/
+/* global-kb: false;*/
+/* max-history-size: 25;*/
+/* combi-hide-mode-prefix: false;*/
+/* combi-display-format: "{mode} {text}";*/
+/* matching-negate-char: '-' /* unsupported */;*/
+/* cache-dir: ;*/
+/* window-thumbnail: false;*/
+/* drun-use-desktop-cache: false;*/
+/* drun-reload-desktop-cache: false;*/
+/* normalize-match: false;*/
+/* steal-focus: false;*/
+/* application-fallback-icon: ;*/
+/* refilter-timeout-limit: 300;*/
+/* xserver-i300-workaround: false;*/
+/* completer-mode: "filebrowser";*/
+/* pid: "/run/user/1000/rofi.pid";*/
+/* display-window: ;*/
+/* display-run: ;*/
+/* display-ssh: ;*/
+/* display-drun: ;*/
+/* display-combi: ;*/
+/* display-keys: ;*/
+/* display-filebrowser: ;*/
+/* display-recursivebrowser: ;*/
+/* kb-primary-paste: "Control+V,Shift+Insert";*/
+/* kb-secondary-paste: "Control+v,Insert";*/
+/* kb-secondary-copy: "Control+c";*/
+/* kb-clear-line: "Control+w";*/
+/* kb-move-front: "Control+a";*/
+/* kb-move-end: "Control+e";*/
+/* kb-move-word-back: "Alt+b,Control+Left";*/
+/* kb-move-word-forward: "Alt+f,Control+Right";*/
+/* kb-move-char-back: "Left,Control+b";*/
+/* kb-move-char-forward: "Right,Control+f";*/
+/* kb-remove-word-back: "Control+Alt+h,Control+BackSpace";*/
+/* kb-remove-word-forward: "Control+Alt+d";*/
+/* kb-remove-char-forward: "Delete,Control+d";*/
+/* kb-remove-char-back: "BackSpace,Shift+BackSpace,Control+h";*/
+/* kb-remove-to-eol: "Control+k";*/
+/* kb-remove-to-sol: "Control+u";*/
+/* kb-accept-entry: "Control+j,Control+m,Return,KP_Enter";*/
+/* kb-accept-custom: "Control+Return";*/
+/* kb-accept-custom-alt: "Control+Shift+Return";*/
+/* kb-accept-alt: "Shift+Return";*/
+/* kb-delete-entry: "Shift+Delete";*/
+/* kb-mode-next: "Shift+Right,Control+Tab";*/
+/* kb-mode-previous: "Shift+Left,Control+ISO_Left_Tab";*/
+/* kb-mode-complete: "Control+l";*/
+/* kb-row-left: "Control+Page_Up";*/
+/* kb-row-right: "Control+Page_Down";*/
+/* kb-row-up: "Up,Control+p";*/
+/* kb-row-down: "Down,Control+n";*/
+/* kb-row-tab: "";*/
+/* kb-element-next: "Tab";*/
+/* kb-element-prev: "ISO_Left_Tab";*/
+/* kb-page-prev: "Page_Up";*/
+/* kb-page-next: "Page_Down";*/
+/* kb-row-first: "Home,KP_Home";*/
+/* kb-row-last: "End,KP_End";*/
+/* kb-row-select: "Control+space";*/
+/* kb-screenshot: "Alt+S";*/
+/* kb-ellipsize: "Alt+period";*/
+/* kb-toggle-case-sensitivity: "grave,dead_grave";*/
+/* kb-toggle-sort: "Alt+grave";*/
+/* kb-cancel: "Escape,Control+g,Control+bracketleft";*/
+/* kb-custom-1: "Alt+1";*/
+/* kb-custom-2: "Alt+2";*/
+/* kb-custom-3: "Alt+3";*/
+/* kb-custom-4: "Alt+4";*/
+/* kb-custom-5: "Alt+5";*/
+/* kb-custom-6: "Alt+6";*/
+/* kb-custom-7: "Alt+7";*/
+/* kb-custom-8: "Alt+8";*/
+/* kb-custom-9: "Alt+9";*/
+/* kb-custom-10: "Alt+0";*/
+/* kb-custom-11: "Alt+exclam";*/
+/* kb-custom-12: "Alt+at";*/
+/* kb-custom-13: "Alt+numbersign";*/
+/* kb-custom-14: "Alt+dollar";*/
+/* kb-custom-15: "Alt+percent";*/
+/* kb-custom-16: "Alt+dead_circumflex";*/
+/* kb-custom-17: "Alt+ampersand";*/
+/* kb-custom-18: "Alt+asterisk";*/
+/* kb-custom-19: "Alt+parenleft";*/
+/* kb-select-1: "Super+1";*/
+/* kb-select-2: "Super+2";*/
+/* kb-select-3: "Super+3";*/
+/* kb-select-4: "Super+4";*/
+/* kb-select-5: "Super+5";*/
+/* kb-select-6: "Super+6";*/
+/* kb-select-7: "Super+7";*/
+/* kb-select-8: "Super+8";*/
+/* kb-select-9: "Super+9";*/
+/* kb-select-10: "Super+0";*/
+/* kb-entry-history-up: "Control+Up";*/
+/* kb-entry-history-down: "Control+Down";*/
+/* kb-matcher-up: "Super+equal";*/
+/* kb-mather-down: "Super+minus";*/
+/* ml-row-left: "ScrollLeft";*/
+/* ml-row-right: "ScrollRight";*/
+/* ml-row-up: "ScrollUp";*/
+/* ml-row-down: "ScrollDown";*/
+/* me-select-entry: "MousePrimary";*/
+/* me-accept-entry: "MouseDPrimary";*/
+/* me-accept-custom: "Control+MouseDPrimary";*/
+ timeout {
+ action: "kb-cancel";
+ delay: 0;
+ }
+ filebrowser {
+ directories-first: true;
+ sorting-method: "name";
+ }
+ modes: "drun";
+}
+
+//@theme "/usr/share/rofi/themes/gruvbox-dark-soft.rasi"
+
+@theme "/usr/share/rofi/themes/gruvbox-dark.rasi"
diff --git a/.config/rofi/power-menu.rasi b/.config/rofi/power-menu.rasi
new file mode 100644
index 0000000..29fa61f
--- /dev/null
+++ b/.config/rofi/power-menu.rasi
@@ -0,0 +1,72 @@
+/* Power menu */
+
+@theme "~/.config/rofi/theme.rasi"
+
+configuration {
+ font: "JetBrainsMono Nerd Font 8";
+ hover-select: true;
+ me-select-entry: "MousePrimary";
+ me-accept-entry: "!MousePrimary";
+}
+
+/* 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 2";
+ horizontal-align: 0.5;
+ padding: 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/.config/rofi/theme.rasi b/.config/rofi/theme.rasi
new file mode 100644
index 0000000..fccdc27
--- /dev/null
+++ b/.config/rofi/theme.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/.config/rofi/theme.rasi.disabled b/.config/rofi/theme.rasi.disabled
new file mode 100644
index 0000000..830705f
--- /dev/null
+++ b/.config/rofi/theme.rasi.disabled
@@ -0,0 +1,106 @@
+/* ==========================================================================
+ Rofi color theme
+
+ Based on the Gruvbox color scheme for Vim by morhetz
+ https://github.com/morhetz/gruvbox
+
+ File: gruvbox-dark.rasi
+ Desc: Gruvbox dark color theme for Rofi
+ Author: bardisty
+ Source: https://github.com/bardisty/gruvbox-rofi
+ Modified: Mon Feb 12 2018 04:08:43 PST -0800
+ ========================================================================== */
+
+* {
+ /* Theme settings */
+ highlight: bold italic;
+ scrollbar: false;
+
+ /* Gruvbox dark colors */
+ gruvbox-dark-bg0: #1d2021;
+ gruvbox-dark-bg0-soft: #282828;
+ gruvbox-dark-bg3: #665c54;
+ gruvbox-dark-fg0: #fbf1c7;
+ gruvbox-dark-fg1: #ebdbb2;
+ gruvbox-dark-red-dark: #cc241d;
+ gruvbox-dark-red-light: #fb4934;
+ gruvbox-dark-yellow-dark: #d79921;
+ gruvbox-dark-yellow-light: #fabd2f;
+ gruvbox-dark-gray: #928374;
+
+ /* Theme colors */
+ background: @gruvbox-dark-bg0;
+ background-color: @background;
+ foreground: @gruvbox-dark-fg1;
+ border-color: @gruvbox-dark-gray;
+ separatorcolor: @border-color;
+ scrollbar-handle: @border-color;
+
+ normal-background: @background;
+ normal-foreground: @foreground;
+ alternate-normal-background: @gruvbox-dark-bg0-soft;
+ alternate-normal-foreground: @foreground;
+ selected-normal-background: @gruvbox-dark-bg3;
+ selected-normal-foreground: @gruvbox-dark-fg0;
+
+ active-background: @gruvbox-dark-yellow-dark;
+ active-foreground: @background;
+ alternate-active-background: @active-background;
+ alternate-active-foreground: @active-foreground;
+ selected-active-background: @gruvbox-dark-yellow-light;
+ selected-active-foreground: @active-foreground;
+
+ urgent-background: @gruvbox-dark-red-dark;
+ urgent-foreground: @background;
+ alternate-urgent-background: @urgent-background;
+ alternate-urgent-foreground: @urgent-foreground;
+ selected-urgent-background: @gruvbox-dark-red-light;
+ selected-urgent-foreground: @urgent-foreground;
+}
+
+* {
+ 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;
+}
+
+@import "gruvbox-common"
+
diff --git a/.config/rofi/wifi-menu.rasi b/.config/rofi/wifi-menu.rasi
new file mode 100644
index 0000000..287e707
--- /dev/null
+++ b/.config/rofi/wifi-menu.rasi
@@ -0,0 +1,99 @@
+/* WiFi menu */
+
+@theme "~/.config/rofi/theme.rasi"
+
+configuration {
+ font: "JetBrainsMono Nerd Font 8";
+ hover-select: true;
+ me-select-entry: "MousePrimary";
+ me-accept-entry: "!MousePrimary";
+}
+
+/* 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/.config/waybar/backup.css b/.config/waybar/backup.css
new file mode 100644
index 0000000..d364235
--- /dev/null
+++ b/.config/waybar/backup.css
@@ -0,0 +1,368 @@
+/* =============================================================================
+ *
+ * Waybar configuration
+ *
+ * Configuration reference: https://github.com/Alexays/Waybar/wiki/Configuration
+ *
+ * =========================================================================== */
+
+/* -----------------------------------------------------------------------------
+ * Keyframes
+ * -------------------------------------------------------------------------- */
+
+@import "machiatto.css";
+
+/*
+ Polar Night
+ nord0 #2e3440
+ nord1 #3b4252
+ nord2 #434c5e
+ nord3 #4c566a
+ Snow Storm
+ nord4 #d8dee9
+ nord5 #e5e9f0
+ nord6 #eceff4
+ Frost
+ nord7 #8fbcbb
+ nord8 #88c0d0
+ nord9 #81a1c1
+ nord10 #5e81ac
+ Aurora
+ nord11 #bf616a
+ nord12 #d08770
+ nord13 #ebcb8b
+ nord14 #a3be8c
+ nord15 #b48ead
+ */
+
+/* -----------------------------------------------------------------------------
+ * Base styles
+ * -------------------------------------------------------------------------- */
+
+/* Reset all styles */
+
+* {
+ color: @lavender;
+ border: 0;
+ padding: 0 0;
+ font-family: UbuntuMono;
+ /* font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; */
+ /* font-family: "Hack Nerd Font"; */
+ font-size: 18px;
+ font-weight: bold;
+ /* padding-bottom:4px;
+ padding-top: 4px; */
+}
+
+window#waybar {
+ border-bottom: 2px solid @mauve;
+ /* border-radius: 10px; */
+ /* background:#2d2a2e; */
+ /* background-color: rgba(36, 39, 58, 0.85); */
+ /* background-color: rgba(0, 0, 0, 0); */
+ background-color: shade(#1e1e2e, 0.95);
+}
+
+#workspaces button {
+ color: @base;
+ border-radius: 50%;
+ /* background-color: @base; */
+ margin: 0px 0px;
+ padding: 2 3 2 3;
+}
+
+#workspaces * {
+ color: whitesmoke;
+}
+
+#workspaces {
+ border-style: solid;
+ background-color: @base;
+ opacity: 1;
+ border-radius: 10px;
+ margin: 8px 0px;
+
+}
+
+#workspaces button.focused {
+ color: @flamingo;
+ border-radius: 20px;
+ /* background-color: @flamingo; */
+}
+
+#workspaces button.focused * {
+ color: @flamingo;
+}
+
+#mode {
+ color: #ebcb8b;
+}
+
+#clock,
+#custom-swap,
+#custom-background,
+#custom-cava-internal,
+#battery,
+#cpu,
+#memory,
+#idle_inhibitor,
+#temperature,
+#custom-keyboard-layout,
+#backlight,
+#network,
+#pulseaudio,
+#mode,
+#tray,
+#custom-power,
+#custom-pacman {
+ padding: 5px 14px;
+ border-style: solid;
+ background-color: shade(@base, 1.1);
+ opacity: 1;
+ margin: 8px 0;
+}
+
+/* -----------------------------------------------------------------------------
+ * Module styles
+ * -------------------------------------------------------------------------- */
+#custom-cava-internal {
+ border-radius: 10px;
+ color: @mauve;
+}
+
+#custom-swap {
+ border-radius: 10px;
+ color: white;
+ margin-left: 15px;
+}
+
+#custom-background {
+ border-radius: 0px 10px 10px 0px;
+ background-color: @base;
+ color: white;
+ padding: 5px 14px 5px 5px;
+}
+
+#clock {
+ /* background-color:#a3be8c; */
+ color: @sky;
+ border-radius: 10px;
+ margin: 8px 10px;
+}
+
+#backlight {
+ color: @yellow;
+ /* border-bottom: 2px solid @yellow; */
+ border-radius: 10px 0 0 10px;
+}
+
+#battery {
+ color: #d8dee9;
+ /* border-bottom: 2px solid #d8dee9; */
+ border-radius: 0 10px 10px 0;
+ margin-right: 10px;
+}
+
+#battery.charging {
+ color: #81a1c1;
+ /* border-bottom: 2px solid #81a1c1; */
+}
+
+@keyframes blink {
+ to {
+ color: @red;
+ /* border-bottom: 2px solid @red; */
+ }
+}
+
+#battery.critical:not(.charging) {
+ color: #bf616a;
+ /* border-bottom: 2px solid #bf616a; */
+ animation-name: blink;
+ animation-duration: 0.5s;
+ animation-timing-function: linear;
+ animation-iteration-count: infinite;
+ animation-direction: alternate;
+}
+
+#cpu {
+ color: @sky;
+ /* border-bottom: 2px solid @sky; */
+}
+
+#cpu #cpu-icon {
+ color: @sky;
+}
+
+#memory {
+ background-color: #d3869b;
+ color: @base;
+}
+
+#network.disabled {
+ color: #bf616a;
+ /* border-bottom: 2px solid #bf616a; */
+}
+
+#network {
+ color: @green;
+ /* border-bottom: 2px solid @green; */
+ border-radius: 10px;
+ margin-right: 5px;
+}
+
+#network.disconnected {
+ color: #bf616a;
+ /* border-bottom: 2px solid #bf616a; */
+}
+
+#pulseaudio {
+ color: @flamingo;
+ /* border-bottom: 2px solid @flamingo; */
+}
+
+#pulseaudio.muted {
+ color: #3b4252;
+ /* border-bottom: 2px solid #3b4252; */
+}
+
+#temperature {
+ color: @teal;
+ /* border-bottom: 2px solid @teal; */
+ border-radius: 10px 0 0 10px;
+}
+
+#temperature.critical {
+ color: @red;
+ /* border-bottom: 2px solid @red; */
+}
+
+#idle_inhibitor {
+ background-color: #ebcb8b;
+ color: @base;
+}
+
+#tray {
+ /* background-color: @base; */
+ margin: 8px 10px;
+ border-radius: 10px;
+}
+
+#custom-launcher,
+#custom-power {}
+
+#custom-launcher {
+ background-color: @mauve;
+ color: @base;
+ border-radius: 0px 15px 0px 0px;
+ padding: 5px 5px 5px 15px;
+}
+
+#custom-power {
+ color: @base;
+ background-color: @red;
+ border-radius: 10px;
+ margin-left: 5px;
+ margin-right: 15px;
+ padding: 5px 10px;
+}
+
+#window {
+ border-style: hidden;
+ margin-left: 10px;
+ /* margin-top:1px;
+ padding: 8px 1rem; */
+ margin-right: 10px;
+ color: #eceff4;
+}
+
+#mode {
+ margin-bottom: 3px;
+}
+
+#custom-keyboard-layout {
+ color: @peach;
+ /* border-bottom: 2px solid @peach; */
+ border-radius: 0 10px 10px 0;
+ margin-right: 10px;
+}
+
+
+
+/* window#waybar {
+ background: #2d2a2e;
+ }
+
+ * {
+ color: #c8b9a9;
+ font-family: Ubuntu Mono, sans-serif;
+ font-size: 12px;
+ }
+
+ #workspaces button.focused {
+ color: #f2e5bc;
+ }
+
+ #workspaces button {
+ color: #c8b9a9;
+ }
+
+ .separator {
+ background-color: #c8b9a9;
+ }
+
+ #mode {
+ color: #ebcb8b;
+ }
+
+ #clock {
+ color: #a3be8c;
+ }
+
+ #battery {
+ color: #d8dee9;
+ }
+
+ #battery.charging {
+ color: #b48ead;
+ }
+
+ #battery.critical:not(.charging) {
+ color: #bf616a;
+ }
+
+ #cpu {
+ color: #a3be8c;
+ }
+
+ #memory {
+ color: #d3869b;
+ }
+
+ #network {
+ color: #8fbcbb;
+ }
+
+ #network.disabled {
+ color: #bf616a;
+ }
+
+ #network.disconnected {
+ color: #bf616a;
+ }
+
+ #pulseaudio {
+ color: #b48ead;
+ }
+
+ #pulseaudio.muted {
+ color: #bf616a;
+ }
+
+ #temperature {
+ color: #8fbcbb;
+ }
+
+ #temperature.critical {
+ color: #bf616a;
+ } */
\ No newline at end of file
diff --git a/.config/waybar/config.jsonc b/.config/waybar/config.jsonc
new file mode 100644
index 0000000..8194582
--- /dev/null
+++ b/.config/waybar/config.jsonc
@@ -0,0 +1,400 @@
+{
+ // ─────────────────────────────────────────────────────────────┤ header ├───
+
+ "layer": "top",
+ "position": "top",
+ "mode": "dock",
+ "reload_style_on_change": true,
+ "gtk-layer-shell": true,
+
+ // ──────────────────────────────────────────────────────────┤ positions ├───
+
+ "modules-left": [
+ "custom/left1",
+
+ "hyprland/workspaces", // workspaces
+ "custom/right1",
+
+ "custom/paddw",
+ "mpris" // media info
+ ],
+
+ "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": [
+
+ "custom/left6",
+ "pulseaudio", // output device
+
+ "custom/left7",
+ "backlight", // brightness
+
+ "custom/left8",
+ "battery", // battery
+
+ "custom/leftin2",
+ "custom/power" // power button
+ ],
+
+ // ─────────────────────────────────────────────────────────┤ workspaces ├───
+
+ "hyprland/workspaces": {
+ "on-scroll-up": "hyprctl dispatch workspace -1",
+ "on-scroll-down": "hyprctl dispatch workspace +1",
+ "persistent-workspaces": {
+ "1": [],
+ "2": [],
+ "3": [],
+ "4": [],
+ "5": []
+ }
+ },
+
+ // ────────────────────────────────────────────────────────┤ temperature ├───
+
+ "custom/temperature": {
+ "exec": "~/.config/waybar/scripts/cpu-temp.sh",
+ "return-type": "json",
+ "format": "{}",
+ "interval": 5,
+ "min-length": 8,
+ "max-length": 8
+ },
+
+ // ─────────────────────────────────────────────────────────────┤ memory ├───
+
+ "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 ├───
+
+ "cpu": {
+ "format": " {usage}%",
+ "tooltip": false,
+ "interval": 5,
+ "min-length": 6,
+ "max-length": 6
+ },
+
+ // ─────────────────────────────────────────────────────────────┤ distro ├───
+
+ "custom/distro": {
+ "format": " ",
+ "tooltip": false
+ },
+
+ // ─────────────────────────────────────────────────────┤ idle inhibitor ├───
+
+ "idle_inhibitor": {
+ "format": "{icon}",
+
+ "format-icons": {
+ "activated": " ",
+ "deactivated": " "
+ },
+
+ "tooltip-format-activated": "Presentation Mode",
+ "tooltip-format-deactivated": "Idle Mode",
+ "start-activated": false
+ },
+
+ // ───────────────────────────────────────────────────────────────┤ time ├───
+
+ "clock#time": {
+ "format": "{:%H:%M}",
+ "tooltip": false,
+ // "tooltip-format": "Standard Time: {:%I:%M %p}",
+ "min-length": 6,
+ "max-length": 6
+ },
+
+ // ───────────────────────────────────────────────────────────────┤ date ├───
+
+ "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
+ },
+
+ // ──────────────────────────────────────────────────────────────┤ wi-fi ├───
+
+ "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 ├───
+
+ "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
+ },
+
+ // ──────────────────────────────────────────────────────┤ system update ├───
+
+ "custom/update": {
+ "exec": "~/.config/waybar/scripts/system-update.sh",
+ "return-type": "json",
+ "format": "{}",
+ "on-click": "~/.config/waybar/scripts/system-update.sh up",
+ "interval": 30,
+ "min-length": 1,
+ "max-length": 1
+ },
+
+ // ─────────────────────────────────────────────────────────┤ media info ├───
+
+ "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
+ },
+
+ // ──────────────────────────────────────────────────────┤ output device ├───
+
+ "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
+ },
+
+ // ─────────────────────────────────────────────────────────┤ brightness ├───
+
+ "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 ├───
+
+ "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
+ },
+
+ // ───────────────────────────────────────────────────────┤ power button ├───
+
+ "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/.config/waybar/machiatto.css b/.config/waybar/machiatto.css
new file mode 100644
index 0000000..6880473
--- /dev/null
+++ b/.config/waybar/machiatto.css
@@ -0,0 +1,37 @@
+/*
+*
+* Catppuccin Macchiato palette
+* Maintainer: rubyowo
+*
+*/
+
+@define-color base #24273a;
+@define-color mantle #1e2030;
+@define-color crust #181926;
+
+@define-color text #cad3f5;
+@define-color subtext0 #a5adcb;
+@define-color subtext1 #b8c0e0;
+
+@define-color surface0 #363a4f;
+@define-color surface1 #494d64;
+@define-color surface2 #5b6078;
+
+@define-color overlay0 #6e738d;
+@define-color overlay1 #8087a2;
+@define-color overlay2 #939ab7;
+
+@define-color blue #8aadf4;
+@define-color lavender #b7bdf8;
+@define-color sapphire #7dc4e4;
+@define-color sky #91d7e3;
+@define-color teal #8bd5ca;
+@define-color green #a6da95;
+@define-color yellow #eed49f;
+@define-color peach #f5a97f;
+@define-color maroon #ee99a0;
+@define-color red #ed8796;
+@define-color mauve #c6a0f6;
+@define-color pink #f5bde6;
+@define-color flamingo #f0c6c6;
+@define-color rosewater #f4dbd6;
diff --git a/.config/waybar/scripts/battery-level.sh b/.config/waybar/scripts/battery-level.sh
new file mode 100755
index 0000000..ddde6ea
--- /dev/null
+++ b/.config/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/.config/waybar/scripts/battery-state.sh b/.config/waybar/scripts/battery-state.sh
new file mode 100755
index 0000000..d7cf5fc
--- /dev/null
+++ b/.config/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/.config/waybar/scripts/bluetooth-menu.sh b/.config/waybar/scripts/bluetooth-menu.sh
new file mode 100755
index 0000000..40642fd
--- /dev/null
+++ b/.config/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/.config/waybar/scripts/brightness-control.sh b/.config/waybar/scripts/brightness-control.sh
new file mode 100755
index 0000000..28fa223
--- /dev/null
+++ b/.config/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/.config/waybar/scripts/check_updates.sh b/.config/waybar/scripts/check_updates.sh
new file mode 100755
index 0000000..e050f40
--- /dev/null
+++ b/.config/waybar/scripts/check_updates.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+i="$(checkupdates)"
+printf "%b%b" "$i" "${i:+\n}" |wc -l; echo "$i" |column -t #|tr '\n' '\r'
diff --git a/.config/waybar/scripts/cpu-temp.sh b/.config/waybar/scripts/cpu-temp.sh
new file mode 100755
index 0000000..b6f2355
--- /dev/null
+++ b/.config/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/.config/waybar/scripts/current-theme.sh b/.config/waybar/scripts/current-theme.sh
new file mode 100755
index 0000000..b7d5db6
--- /dev/null
+++ b/.config/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/.config/waybar/scripts/keyhint.sh b/.config/waybar/scripts/keyhint.sh
new file mode 100755
index 0000000..a8a927d
--- /dev/null
+++ b/.config/waybar/scripts/keyhint.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+yad --title="Garuda Sway-WM keybindings:" --no-buttons --geometry=400x345-15-400 --list --column=key: --column=description: --column=command: "ESC" "close this app" "" "=" "modkey" "(set mod Mod4)" "+enter" "Terminal" "(termite)" "+d" "Application Menu" "(wofi)" "+Shift+d" "Full Launcher" "(nwggrid)" "+p" "Activities" "(wofi)" "+o" "" "Open Broswer" "+n" "" "Open Files" "+q" "close focused app" "(kill)" "[Shift]+Print-key" "screenshot" "(grim)" "+Shift+e" "power-menu" "(wofi)" "+Shift+p" "open keybinding helper" "full list"
diff --git a/.config/waybar/scripts/power-menu.sh b/.config/waybar/scripts/power-menu.sh
new file mode 100755
index 0000000..ae971c9
--- /dev/null
+++ b/.config/waybar/scripts/power-menu.sh
@@ -0,0 +1,30 @@
+#!/usr/bin/env bash
+
+config="$HOME/.config/rofi/power-menu.rasi"
+
+actions=$(echo -e " Lock\n Shutdown\n Reboot\n Suspend\n Hibernate\n Logout")
+
+# Display logout menu
+selected_option=$(echo -e "$actions" | rofi -dmenu -i -config "${config}" || pkill -x rofi)
+
+# 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/.config/waybar/scripts/system-update.sh b/.config/waybar/scripts/system-update.sh
new file mode 100755
index 0000000..2c3c62b
--- /dev/null
+++ b/.config/waybar/scripts/system-update.sh
@@ -0,0 +1,86 @@
+#!/usr/bin/env bash
+
+# Check release
+if [ ! -f /etc/arch-release ]; then
+ exit 0
+fi
+
+pkg_installed() {
+ local pkg=$1
+
+ if pacman -Qi "${pkg}" &>/dev/null; then
+ return 0
+ elif pacman -Qi "flatpak" &>/dev/null && flatpak info "${pkg}" &>/dev/null; then
+ return 0
+ elif command -v "${pkg}" &>/dev/null; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+get_aur_helper() {
+ if pkg_installed yay; then
+ aur_helper="yay"
+ elif pkg_installed paru; then
+ aur_helper="paru"
+ fi
+}
+
+get_aur_helper
+export -f pkg_installed
+
+# Trigger upgrade
+if [ "$1" == "up" ]; then
+ trap 'pkill -RTMIN+20 waybar' EXIT
+ command="
+ $0 upgrade
+ ${aur_helper} -Syu
+ if pkg_installed flatpak; then flatpak update; fi
+ printf '\n'
+ read -n 1 -p 'Press any key to continue...'
+ "
+ kitty --title " System Update" sh -c "${command}"
+fi
+
+# Check for AUR updates
+if [ -n "$aur_helper" ]; then
+ aur_updates=$(${aur_helper} -Qua | grep -c '^')
+else
+ aur_updates=0
+fi
+
+# Check for official repository updates
+official_updates=$(
+ (while pgrep -x checkupdates >/dev/null; do sleep 1; done)
+ checkupdates | grep -c '^'
+)
+
+# Check for Flatpak updates
+if pkg_installed flatpak; then
+ flatpak_updates=$(flatpak remote-ls --updates | grep -c '^')
+else
+ flatpak_updates=0
+fi
+
+# Calculate total available updates
+total_updates=$((official_updates + aur_updates + flatpak_updates))
+
+# Handle formatting based on AUR helper
+if [ "$aur_helper" == "yay" ]; then
+ [ "${1}" == upgrade ] && printf "Official: %-10s\nAUR ($aur_helper): %-10s\nFlatpak: %-10s\n\n" "$official_updates" "$aur_updates" "$flatpak_updates" && exit
+
+ tooltip="Official: $official_updates\nAUR ($aur_helper): $aur_updates\nFlatpak: $flatpak_updates"
+
+elif [ "$aur_helper" == "paru" ]; then
+ [ "${1}" == upgrade ] && printf "Official: %-10s\nAUR ($aur_helper): %-10s\nFlatpak: %-10s\n\n" "$official_updates" "$aur_updates" "$flatpak_updates" && exit
+
+ tooltip="Official: $official_updates\nAUR ($aur_helper): $aur_updates\nFlatpak: $flatpak_updates"
+fi
+
+# Module and tooltip
+if [ $total_updates -eq 0 ]; then
+ echo "{\"text\":\"\", \"tooltip\":\"Packages are up to date\"}"
+else
+ echo "{\"text\":\"\", \"tooltip\":\"${tooltip//\"/\\\"}\"}"
+fi
diff --git a/.config/waybar/scripts/volume-control.sh b/.config/waybar/scripts/volume-control.sh
new file mode 100755
index 0000000..76bb2f7
--- /dev/null
+++ b/.config/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/.config/waybar/scripts/wifi-menu.sh b/.config/waybar/scripts/wifi-menu.sh
new file mode 100755
index 0000000..470722c
--- /dev/null
+++ b/.config/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/.config/waybar/scripts/wifi-status.sh b/.config/waybar/scripts/wifi-status.sh
new file mode 100755
index 0000000..f854914
--- /dev/null
+++ b/.config/waybar/scripts/wifi-status.sh
@@ -0,0 +1,176 @@
+#!/usr/bin/env bash
+
+# This script gathers detailed Wi-Fi connection information.
+# It collects the following fields:
+#
+# - SSID (Service Set Identifier): The name of the Wi-Fi network you
+# are currently connected to. Example: "My_Network"
+#
+# - IP Address: The IP address assigned to the device by the router.
+# This is typically a private IP within the local network. Example:
+# "192.168.1.29/24" (with subnet mask)
+#
+# - Router (Gateway): The IP address of the router (default gateway)
+# that your device uses to communicate outside the local network.
+# Example: "192.168.1.1"
+#
+# - MAC Address: The unique Media Access Control address of the local
+# device's Wi-Fi adapter. Example: "F8:34:41:07:1B:65"
+#
+# - Security: The encryption protocol being used to secure your Wi-Fi
+# connection. Common security protocols include:
+# - WPA2 (Wi-Fi Protected Access 2): The most commonly used security
+# standard, offering strong encryption (AES).
+# - WPA3: The latest version, providing even stronger security,
+# especially in public or open networks.
+# - WEP (Wired Equivalent Privacy): An outdated and insecure protocol
+# that should not be used.
+# Example: "WPA2" indicates that the connection is secured using WPA2
+# with AES encryption.
+#
+# - BSSID (Basic Service Set Identifier): The MAC address of the Wi-Fi
+# access point you are connected to. Example: "A4:22:49:DA:91:A0"
+#
+# - Channel: The wireless channel your Wi-Fi network is using. This is
+# associated with the frequency band. Example: "100 (5500 MHz)"
+# indicates the channel number (100) and the frequency (5500 MHz),
+# which is within the 5 GHz band.
+#
+# - RSSI (Received Signal Strength Indicator): The strength of the
+# Wi-Fi signal, typically in dBm (decibels relative to 1 milliwatt).
+# Closer to 0 means stronger signal, with values like -40 dBm being
+# very good. Example: "-40 dBm"
+#
+# - Signal: The signal quality, which is represented as a percentage,
+# where higher numbers mean better signal. Example: "100"
+# indicates perfect signal strength.
+#
+# - Rx Rate (Receive Rate): The maximum data rate (in Mbit/s) at which
+# the device can receive data from the Wi-Fi access point. Example:
+# "866.7 MBit/s" indicates a high-speed connection on a modern
+# standard.
+#
+# - Tx Rate (Transmit Rate): The maximum data rate (in Mbit/s) at
+# which the device can send data to the Wi-Fi access point. Example:
+# "866.7 MBit/s"
+#
+# - PHY Mode (Physical Layer Mode): The Wi-Fi protocol or standard in
+# use. Common modes include 802.11n, 802.11ac, and 802.11ax (Wi-Fi
+# 6). Example: "802.11ac" indicates you're using the 5 GHz band with
+# a modern high-speed standard.
+
+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)
+
+if [ "$wifi_status" = "disabled" ]; then
+ echo "{\"text\": \"\", \"tooltip\": \"Wi-Fi Disabled\"}"
+ exit 0
+fi
+
+wifi_info=$(nmcli -t -f active,ssid,signal,security dev wifi | grep "^yes")
+
+# If no ESSID is found, set a default value
+if [ -z "$wifi_info" ]; then
+ essid="No Connection"
+ signal=0
+ tooltip="No Connection"
+else
+ # Some defaults
+ ip_address="127.0.0.1"
+ # gateway="127.0.0.1"
+ # mac_address="N/A"
+ security=$(echo "$wifi_info" | awk -F: '{print $4}')
+ # bssid="N/A"
+ chan="N/A"
+ # rssi="N/A"
+ # rx_bitrate=""
+ # tx_bitrate=""
+ # phy_mode=""
+ signal=$(echo "$wifi_info" | awk -F: '{print $3}')
+
+ active_device=$(nmcli -t -f DEVICE,STATE device status |
+ grep -w "connected" |
+ grep -v -E "^(dummy|lo:|virbr0)" |
+ awk -F: '{print $1}')
+
+ if [ -n "$active_device" ]; then
+ output=$(nmcli -e no -g ip4.address,ip4.gateway,general.hwaddr device show "$active_device")
+
+ ip_address=$(echo "$output" | sed -n '1p')
+ # gateway=$(echo "$output" | sed -n '2p')
+ # mac_address=$(echo "$output" | sed -n '3p')
+
+ line=$(nmcli -e no -t -f active,bssid,chan,freq device wifi | grep "^yes")
+
+ # bssid=$(echo "$line" | awk -F':' '{print $2":"$3":"$4":"$5":"$6":"$7}')
+ chan=$(echo "$line" | awk -F':' '{print $8}')
+ freq=$(echo "$line" | awk -F':' '{print $9}')
+ chan="$chan ($freq)"
+
+ # if command -v iw &>/dev/null; then
+ # iw_output=$(iw dev "$active_device" station dump)
+ # rssi=$(echo "$iw_output" | grep "signal:" | awk '{print $2 " dBm"}')
+
+ # Upload speed
+ # rx_bitrate=$(echo "$iw_output" | grep "rx bitrate:" | awk '{print $3 " " $4}')
+
+ # Download speed
+ # tx_bitrate=$(echo "$iw_output" | grep "tx bitrate:" | awk '{print $3 " " $4}')
+
+ # Physical Layer Mode
+ # if echo "$iw_output" | grep -E -q "rx bitrate:.* VHT"; then
+ # phy_mode="802.11ac" # Wi-Fi 5
+ # elif echo "$iw_output" | grep -E -q "rx bitrate:.* HT"; then
+ # phy_mode="802.11n" # Wi-Fi 4
+ # elif echo "$iw_output" | grep -E -q "rx bitrate:.* HE"; then
+ # phy_mode="802.11ax" # Wi-Fi 6
+ # fi
+ # fi
+
+ # Get the current Wi-Fi ESSID
+ essid=$(echo "$wifi_info" | awk -F: '{print $2}')
+
+ tooltip=":: ${essid}"
+ tooltip+="\nIP Address: ${ip_address}"
+ # tooltip+="\nRouter: ${gateway}"
+ # tooltip+="\nMAC Address: ${mac_address}"
+ tooltip+="\nSecurity: ${security}"
+ # tooltip+="\nBSSID: ${bssid}"
+ tooltip+="\nChannel: ${chan}"
+ # tooltip+="\nRSSI: ${rssi}"
+ tooltip+="\nStrength: ${signal} / 100"
+
+ # if [ -n "$rx_bitrate" ]; then
+ # tooltip+="\nRx Rate: ${rx_bitrate}"
+ # fi
+
+ # if [ -n "$tx_bitrate" ]; then
+ # tooltip+="\nTx Rate: ${tx_bitrate}"
+ # fi
+
+ # if [ -n "$phy_mode" ]; then
+ # tooltip+="\nPHY Mode: ${phy_mode}"
+ # fi
+ fi
+fi
+
+# 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
+
+# Module and tooltip
+echo "{\"text\": \"${icon}\", \"tooltip\": \"${tooltip}\"}"
diff --git a/.config/waybar/style-background.css b/.config/waybar/style-background.css
new file mode 100644
index 0000000..fad0610
--- /dev/null
+++ b/.config/waybar/style-background.css
@@ -0,0 +1,418 @@
+/* =============================================================================
+ *
+ * Waybar configuration
+ *
+ * Configuration reference: https://github.com/Alexays/Waybar/wiki/Configuration
+ *
+ * =========================================================================== */
+
+/* -----------------------------------------------------------------------------
+ * Keyframes
+ * -------------------------------------------------------------------------- */
+
+@import "machiatto.css";
+
+/*
+ Polar Night
+ nord0 #2e3440
+ nord1 #3b4252
+ nord2 #434c5e
+ nord3 #4c566a
+ Snow Storm
+ nord4 #d8dee9
+ nord5 #e5e9f0
+ nord6 #eceff4
+ Frost
+ nord7 #8fbcbb
+ nord8 #88c0d0
+ nord9 #81a1c1
+ nord10 #5e81ac
+ Aurora
+ nord11 #bf616a
+ nord12 #d08770
+ nord13 #ebcb8b
+ nord14 #a3be8c
+ nord15 #b48ead
+ */
+
+/* -----------------------------------------------------------------------------
+ * Base styles
+ * -------------------------------------------------------------------------- */
+
+/* Reset all styles */
+
+* {
+ color: @lavender;
+ border: 0;
+ padding: 0 0;
+ font-family: UbuntuMono;
+ /* font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; */
+ /* font-family: "Hack Nerd Font"; */
+ font-size: 18px;
+ font-weight: bold;
+ /* padding-bottom:4px;
+ padding-top: 4px; */
+ transition: all 0.5s ease;
+}
+
+window#waybar {
+ border-bottom: 4px solid shade(@base, 1.1);
+ /* border-radius: 10px; */
+ /* background:#2d2a2e; */
+ /* background-color: rgba(36, 39, 58, 0.85); */
+ /* background-color: rgba(0, 0, 0, 0); */
+ background-color: shade(#1e1e2e, 0.95);
+}
+
+#workspaces button {
+ color: @base;
+ border-radius: 50%;
+ /* background-color: @base; */
+ margin: 0px 0px;
+ padding: 2 6 2 0;
+}
+
+#workspaces button:hover * {
+ color: @mauve;
+}
+
+#workspaces button:hover {
+ color: @mauve;
+ box-shadow: none;
+ /* Remove predefined box-shadow */
+ text-shadow: none;
+ /* Remove predefined text-shadow */
+ border: 0px;
+ background: none;
+}
+
+#workspaces * {
+ color: whitesmoke;
+}
+
+#workspaces {
+ border-style: solid;
+ background-color: @base;
+ opacity: 1;
+ border-radius: 10px;
+ margin: 8px 0px 8px 8px;
+}
+
+#workspaces button.focused {
+ color: @mauve;
+ border-radius: 20px;
+ /* background-color: @flamingo; */
+}
+
+#workspaces button.focused * {
+ color: @mauve;
+}
+
+#mode {
+ color: #ebcb8b;
+}
+
+#clock,
+#custom-swap,
+#custom-background,
+#custom-cava-internal,
+#battery,
+#cpu,
+#memory,
+#idle_inhibitor,
+#temperature,
+#custom-keyboard-layout,
+#backlight,
+#network,
+#pulseaudio,
+#mode,
+#tray,
+#custom-power,
+#custom-pacman,
+#mpd {
+ padding: 5px 8px;
+ border-style: solid;
+ background-color: shade(@base, 1.1);
+ opacity: 1;
+ margin: 8px 0;
+}
+
+/* -----------------------------------------------------------------------------
+ * Module styles
+ * -------------------------------------------------------------------------- */
+
+#mode {
+ border-radius: 10px;
+ color: @mauve;
+ margin-right: 5px;
+}
+
+#custom-cava-internal {
+ border-radius: 10px;
+ color: @mauve;
+}
+
+#mpd {
+ border-radius: 10px;
+ color: @mauve;
+ margin-left: 5px;
+ background-color: rgba(0, 0, 0, 0);
+}
+
+#mpd.2 {
+ border-radius: 10px 0px 0px 10px;
+ margin: 8px 0px 8px 6px;
+ padding: 4px 12px 4px 10px;
+}
+
+#mpd.3 {
+ border-radius: 0px 0px 0px 0px;
+ margin: 8px 0px 8px 0px;
+ padding: 4px;
+}
+
+#mpd.4 {
+ border-radius: 0px 10px 10px 0px;
+ margin: 8px 0px 8px 0px;
+ padding: 4px 10px 4px 14px;
+}
+
+#mpd.2,
+#mpd.3,
+#mpd.4 {
+ background-color: @base;
+ font-size: 14px;
+}
+
+#custom-swap {
+ border-radius: 10px;
+ color: @base;
+ margin-left: 10px;
+ background-color: @mauve;
+}
+
+#custom-background {
+ border-radius: 0px 10px 10px 0px;
+ background-color: @base;
+ color: white;
+ padding: 5px 14px 5px 5px;
+}
+
+#clock {
+ /* background-color:#a3be8c; */
+ color: @sky;
+ border-radius: 10px;
+ margin: 8px 10px;
+}
+
+#backlight {
+ color: @yellow;
+ /* border-bottom: 2px solid @yellow; */
+ border-radius: 10px 0 0 10px;
+}
+
+#battery {
+ color: #d8dee9;
+ /* border-bottom: 2px solid #d8dee9; */
+ border-radius: 0 10px 10px 0;
+ margin-right: 10px;
+}
+
+#battery.charging {
+ color: #81a1c1;
+ /* border-bottom: 2px solid #81a1c1; */
+}
+
+@keyframes blink {
+ to {
+ color: @red;
+ /* border-bottom: 2px solid @red; */
+ }
+}
+
+#battery.critical:not(.charging) {
+ color: #bf616a;
+ /* border-bottom: 2px solid #bf616a; */
+ animation-name: blink;
+ animation-duration: 0.5s;
+ animation-timing-function: linear;
+ animation-iteration-count: infinite;
+ animation-direction: alternate;
+}
+
+#cpu {
+ color: @sky;
+ /* border-bottom: 2px solid @sky; */
+}
+
+#cpu #cpu-icon {
+ color: @sky;
+}
+
+#memory {
+ color: @sky;
+}
+
+#network.disabled {
+ color: #bf616a;
+ /* border-bottom: 2px solid #bf616a; */
+}
+
+#network {
+ color: @green;
+ /* border-bottom: 2px solid @green; */
+ border-radius: 10px;
+ margin-right: 5px;
+}
+
+#network.disconnected {
+ color: #bf616a;
+ /* border-bottom: 2px solid #bf616a; */
+}
+
+#pulseaudio {
+ color: @flamingo;
+ /* border-bottom: 2px solid @flamingo; */
+}
+
+#pulseaudio.muted {
+ color: #3b4252;
+ /* border-bottom: 2px solid #3b4252; */
+}
+
+#temperature {
+ color: @teal;
+ /* border-bottom: 2px solid @teal; */
+ border-radius: 10px 0 0 10px;
+}
+
+#temperature.critical {
+ color: @red;
+ /* border-bottom: 2px solid @red; */
+}
+
+#idle_inhibitor {
+ background-color: #ebcb8b;
+ color: @base;
+}
+
+#tray {
+ /* background-color: @base; */
+ margin: 8px 10px;
+ border-radius: 10px;
+}
+
+#custom-launcher,
+#custom-power {}
+
+#custom-launcher {
+ background-color: shade(@base, 1.1);
+ color: @mauve;
+ border-radius: 0px 15px 0px 0px;
+ padding: 5px 10px 5px 10px;
+}
+
+#custom-power {
+ color: @base;
+ background-color: @red;
+ border-radius: 10px;
+ margin-left: 5px;
+ margin-right: 15px;
+ padding: 5px 10px;
+}
+
+#window {
+ border-style: hidden;
+ margin-left: 10px;
+ /* margin-top:1px;
+ padding: 8px 1rem; */
+ margin-right: 10px;
+ color: #eceff4;
+}
+
+#custom-keyboard-layout {
+ color: @peach;
+ /* border-bottom: 2px solid @peach; */
+ border-radius: 0 10px 10px 0;
+ margin-right: 10px;
+}
+
+
+
+/* window#waybar {
+ background: #2d2a2e;
+ }
+
+ * {
+ color: #c8b9a9;
+ font-family: Ubuntu Mono, sans-serif;
+ font-size: 12px;
+ }
+
+ #workspaces button.focused {
+ color: #f2e5bc;
+ }
+
+ #workspaces button {
+ color: #c8b9a9;
+ }
+
+ .separator {
+ background-color: #c8b9a9;
+ }
+
+ #mode {
+ color: #ebcb8b;
+ }
+
+ #clock {
+ color: #a3be8c;
+ }
+
+ #battery {
+ color: #d8dee9;
+ }
+
+ #battery.charging {
+ color: #b48ead;
+ }
+
+ #battery.critical:not(.charging) {
+ color: #bf616a;
+ }
+
+ #cpu {
+ color: #a3be8c;
+ }
+
+ #memory {
+ color: #d3869b;
+ }
+
+ #network {
+ color: #8fbcbb;
+ }
+
+ #network.disabled {
+ color: #bf616a;
+ }
+
+ #network.disconnected {
+ color: #bf616a;
+ }
+
+ #pulseaudio {
+ color: #b48ead;
+ }
+
+ #pulseaudio.muted {
+ color: #bf616a;
+ }
+
+ #temperature {
+ color: #8fbcbb;
+ }
+
+ #temperature.critical {
+ color: #bf616a;
+ } */
\ No newline at end of file
diff --git a/.config/waybar/style.css b/.config/waybar/style.css
new file mode 100644
index 0000000..46770ed
--- /dev/null
+++ b/.config/waybar/style.css
@@ -0,0 +1,466 @@
+@import "theme.css";
+
+/* ───────────────────────────────────────────────────────────────┤ global ├───
+*/
+* {
+ min-height: 0;
+ border: none;
+ margin: 0;
+ padding: 0;
+}
+
+/* ──────────────────────────────────────────────────────────┤ drop shadow ├───
+*/
+window#waybar {
+ background: @shadow;
+}
+
+/* ───────────────────────────────────────────────────────────┤ background ├───
+*/
+window#waybar > box {
+ background: @main-bg;
+ margin: 2px;
+}
+
+/* ─────────────────────────────────────────────────────────────┤ tooltips ├───
+*/
+tooltip {
+ background: @main-bg;
+ border: 1.5px solid @main-br;
+ border-radius: 8px;
+}
+
+tooltip label {
+ color: @main-fg;
+ margin: -1.5px 3px;
+}
+
+/* ──────────────────────────────────────────────────────────────┤ general ├───
+*/
+#custom-ws,
+#workspaces,
+#window,
+#custom-temperature,
+#memory,
+#cpu,
+#idle_inhibitor,
+#clock,
+#custom-wifi,
+#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);
+}
+
+/* ──────────────────────────────────────────────────────────┤ 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;
+}
+
+#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;
+}
+
+#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;
+}
+
+/* ────────────────────────────────────────────────────────────────┤ wi-fi ├───
+*/
+#custom-wifi {
+ background: @tray;
+ padding: 0 8px 0 5px;
+}
+
+#custom-wifi:hover {
+ color: @hover-fg;
+}
+
+/* ────────────────────────────────────────────────────────────┤ bluetooth ├───
+*/
+#bluetooth {
+ background: @tray;
+ padding-right: 5px;
+}
+
+#bluetooth:hover {
+ color: @hover-fg;
+}
+
+/* ────────────────────────────────────────────────────────┤ system update ├───
+*/
+#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: 13px;
+ font-weight: normal;
+}
+
+tooltip label,
+#window label,
+#mpris {
+ font-weight: normal;
+}
+
+/* ──────────────────────────────────────────────────┤ left & 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: 16.68px;
+}
+
+/* ─────────────────────────────────────────────────┤ left & right inverse ├───
+*/
+#custom-leftin1,
+#custom-leftin2,
+#custom-rightin1 {
+ font-size: 18.5px;
+}
+
+/* ──────────────────────────────────────────────────────────┤ distro icon ├───
+*/
+#custom-distro {
+ font-size: 17.6px;
+}
+
+#custom-left5,
+#custom-right2 {
+ font-size: 18.68px;
+}
+
+/*
+ Adjust these properties as well to keep the design consistent.
+*/
+
+/* ───────────────────────────────────────────────────────────┤ workspaces ├───
+*/
+#workspaces button {
+ border-radius: 8px;
+ padding: 0 2px;
+}
+
+#workspaces button.active {
+ padding: 0 6px;
+}
+
+/* ─────────────────────────────────────────────────────────┤ power button ├───
+*/
+#custom-power {
+ border-radius: 10px;
+ padding: 0 6px 0 9px;
+}
diff --git a/.config/waybar/theme.css b/.config/waybar/theme.css
new file mode 100644
index 0000000..221575f
--- /dev/null
+++ b/.config/waybar/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 @blue;
+@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/.config/wofi/config b/.config/wofi/config
index 2346006..e801531 100644
--- a/.config/wofi/config
+++ b/.config/wofi/config
@@ -1,6 +1,7 @@
allow_images=true
-gtk-dark=true
-image_size=20
-width=25%
-hide-scroll=true
lines=7
+no_actions=true
+hide_scroll=true
+width=45%
+height=45%
+hide-scroll=true
diff --git a/.config/wofi/icons/lock.svg b/.config/wofi/icons/lock.svg
new file mode 100644
index 0000000..251feff
--- /dev/null
+++ b/.config/wofi/icons/lock.svg
@@ -0,0 +1,3 @@
+
diff --git a/.config/wofi/icons/power.svg b/.config/wofi/icons/power.svg
new file mode 100644
index 0000000..693fee3
--- /dev/null
+++ b/.config/wofi/icons/power.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/.config/wofi/icons/reboot.svg b/.config/wofi/icons/reboot.svg
new file mode 100644
index 0000000..c1c06a6
--- /dev/null
+++ b/.config/wofi/icons/reboot.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/.config/wofi/icons/suspend.svg b/.config/wofi/icons/suspend.svg
new file mode 100644
index 0000000..02eb927
--- /dev/null
+++ b/.config/wofi/icons/suspend.svg
@@ -0,0 +1,3 @@
+
diff --git a/.config/wofi/scripts/powermenu.sh b/.config/wofi/scripts/powermenu.sh
new file mode 100644
index 0000000..c3dac70
--- /dev/null
+++ b/.config/wofi/scripts/powermenu.sh
@@ -0,0 +1,34 @@
+WOFI_CONFIG_PATH=$HOME/.config/wofi
+
+menu="img:$WOFI_CONFIG_PATH/icons/power.svg:text:Power Off\nimg:$WOFI_CONFIG_PATH/icons/reboot.svg:text:Reboot\nimg:$WOFI_CONFIG_PATH/icons/lock.svg:text:Lock Screen\nimg:$WOFI_CONFIG_PATH/icons/suspend.svg:text:Suspend"
+
+get_menu() {
+ echo -e "$menu"
+}
+
+exec_commmand() {
+ cmd_str=$(echo "$1" | awk -F'text:' '{print $2}')
+
+ if [[ "$cmd_str" == "Power Off" ]]; then
+ systemctl poweroff
+ elif [[ "$cmd_str" == "Reboot" ]]; then
+ systemctl reboot
+ elif [[ "$cmd_str" == "Suspend" ]]; then
+ systemctl suspend
+ elif [[ "$cmd_str" == "Lock Screen" ]]; then
+ hyprlock
+ fi
+}
+
+
+# Show menu and execute command
+menu_selected=""
+if [[ "$1" == "--list" ]]; then
+ menu_selected="$(get_menu | wofi -d)"
+elif [[ "$1" == "--grid" ]]; then
+ menu_selected="$(get_menu | wofi -d --columns=2)"
+fi
+
+if [[ "$menu_selected" != "" ]]; then
+ exec_commmand "$menu_selected"
+fi
\ No newline at end of file
diff --git a/.config/wofi/style.css b/.config/wofi/style.css
index 9f0a82b..9d69f18 100644
--- a/.config/wofi/style.css
+++ b/.config/wofi/style.css
@@ -1,39 +1,45 @@
-window {
-margin: 25px;
-#border: 1px solid #bd93f9;
-background-color: #282a36;
-}
-
-#input {
-margin: 15px;
-border: none;
-color: #f8f8f2;
-background-color: #44475a;
-}
-
-#inner-box {
-margin: 15px;
-border: none;
-background-color: #282a36;
+#window {
+ background-color: transparent;
}
#outer-box {
-margin: 5px;
-border: none;
-background-color: #282a36;
+ border-radius: 14px;
+ background-color: #0d1117;
+}
+
+#input {
+ padding: 4px;
+ border-radius: 14px 14px 0 0;
+ font-size: 16px;
+ background-color: #0d1117;
+ border: none;
+ color: #ecf2f8;
+}
+
+#input:focus {
+ box-shadow: none;
}
#scroll {
-margin: 5px;
-border: none;
+ border-radius: 14px;
+ background-color: #161b22;
+ margin: 0 12px 12px;
}
-#text {
-margin: 5px;
-border: none;
-color: #f8f8f2;
-}
+#inner-box {
+ border-radius: 14px;
+ padding: 12px;
+}
+
+#entry {
+ padding: 8px;
+}
#entry:selected {
-background-color: #44475a;
+ border-radius: 8px;
+ background-color: #21262d;
}
+
+#entry image {
+ margin-right: 8px;
+}
\ No newline at end of file
diff --git a/.config/wofi/wofi-powermenu.sh b/.config/wofi/wofi-powermenu.sh
deleted file mode 100755
index 789a070..0000000
--- a/.config/wofi/wofi-powermenu.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-
-entries="⇠ Logout\n⏾ Suspend\n⭮ Reboot\n⏻ Shutdown"
-
-selected=$(echo -e $entries|wofi --width 250 --height 240 --dmenu --cache-file /dev/null | awk '{print tolower($2)}')
-
-case $selected in
- logout)
- pkill -u kia;;
- suspend)
- exec systemctl suspend;;
- reboot)
- exec systemctl reboot;;
- shutdown)
- exec systemctl poweroff;;
- # it used to be poweroff -i
-esac
diff --git a/install.bash b/install.bash
index cb2bd61..850a2d9 100644
--- a/install.bash
+++ b/install.bash
@@ -7,10 +7,8 @@
# SYMBOLIC LINKS
###################################################################
-ln -s ~/dotfiles/.conf/hypr ~/.config/hypr
-ln -s ~/dotfiles/.conf/hyprpaper ~/.config/hyprpaper
-ln -s ~/dotfiles/.conf/fastfetch ~/.config/fastfetch
-ln -s ~/dotfiles/.conf/mimeapps.list ~/.config/mimeapps.list
+# Copy everything from .config
+
ln -s ~/dotfiles/wallpapers ~/wallpapers
ln -s ~/dotfiles/.fonts ~/.fonts
@@ -43,6 +41,9 @@ pacman -S btop ripgrep bat neovim nano grim slurp dust fastfetch imv wl-clipboar
# Bash prompt bar
pacman -S starship
+# Additional Pacman utils like "checkupdates"
+sudo pacman -S pacman-contrib
+
# Networking
# For connecting to eduroam install config with this script: https://cat.eduroam.org/
# wpa_supplicant is dependency of networkmanager that was not installed for some reason.
@@ -60,3 +61,8 @@ echo '[Service]\nExecStart=\nExecStart=-/sbin/agetty --noreset --noclear --autol
# MANUAL CONFIGURATION REQUIRED
###################################################################
+# Waybar: https://github.com/sejjy/mechabar/tree/classic
+# Dependencies:
+# wireplumber is Session/policy manager implementation for PipeWire
+pacman -S cava bluez-utils pipewire-pulse ttf-jetbrains-mono-nerd wireplumber
+yay -S bluetui rofi-lbonn-wayland-git