Compare commits

...

3 Commits

Author SHA1 Message Date
nvrl 6d5d2caeca added fluxo and hyprlock conf 2026-04-04 16:44:12 +02:00
nvrl 86c964c274 fixed style css and updated config 2026-04-04 14:42:56 +02:00
nvrl 7958f17951 updated waybar + fluxo 2026-04-04 14:07:35 +02:00
18 changed files with 1471 additions and 308 deletions
+1
View File
@@ -25,3 +25,4 @@
!systemd/ !systemd/
fish/fish_variables fish/fish_variables
waybar/fluxo-rs waybar/fluxo-rs
!fluxo/
+85
View File
@@ -0,0 +1,85 @@
# fluxo-rs configuration
# Location: ~/.config/fluxo/config.toml
[general]
menu_command = "fuzzel --dmenu --prompt \"$FLUXO_PROMPT\""
[signals]
network = 1
cpu = 2
memory = 3
gpu = 4
sys = 5
disk = 6
game = 7
audio = 8
bt = 9
power = 10
mpris = 11
backlight = 12
dnd = 13
[network]
format = "{interface} ({ip}):  {rx:^4.1} MB/s  {tx:^4.1} MB/s"
[cpu]
format = "CPU: {usage:^4.1}% {temp:^4.1}C"
[memory]
format = "MEM: {used:^4.1}/{total:^4.1}GB"
[sys]
format = "UP: {uptime} LOAD: {load1:^3.1} "
[disk]
format = "{mount} {used:^3.0}/{total:^3.0}G"
[power]
format = "{percentage:>3}% {icon}"
[audio]
format_sink_unmuted = " {icon} {name} {volume:>3}%"
format_sink_muted = " {icon} {name}"
format_source_unmuted = "{icon} {name} {volume:>3}%"
format_source_muted = "{icon} {name}"
[bt]
format_plugin = "󰂰 {alias} [{left}|{right}] {anc}"
format_connected = "󰂰 {alias}"
format_disconnected = "󰂯 Disconnected"
format_disabled = "󰂲 Off"
[game]
format_active = "<span size='large'>󰊖</span>"
format_inactive = "<span size='large'></span>"
[mpris]
format = "{artist} - {title}"
max_length = 20
scroll = true
scroll_speed = 500
scroll_separator = " /// "
[pool]
enabled = false
format = "{used:>4.0}G / {total:>4.0}G"
[gpu]
enabled = false
format_amd = "AMD: {usage:>3.0}% {vram_used:>4.1}/{vram_total:>4.1}GB {temp:>4.1}C"
format_intel = "iGPU: {usage:>3.0}%"
format_nvidia = "NV: {usage:>3.0}% {vram_used:>4.1}/{vram_total:>4.1}GB {temp:>4.1}C"
[keyboard]
enabled = false
format = "{layout}"
[backlight]
enable = true
format = " {icon} {percentage}"
[dnd]
enabled = true
format_dnd = "󰂛"
format_normal = "󰂚"
+83
View File
@@ -0,0 +1,83 @@
<div align="center">
<h1>✦ Google-ish Hyprlock Theme ✦</h1>
<h3></h3>
</div>
## ▶️ Preview
<details>
<summary><b>Without Profile & User Info</b></summary>
<img src="https://github.com/user-attachments/assets/7bbacd47-b0d7-4132-9951-53dc0ead604c" alt="Hyprlock-Without-Profile" width="1280">
</details>
<details>
<summary><b>With Profile & User Info</b></summary>
<img src="https://github.com/user-attachments/assets/9a58a6e2-a71f-4b28-998a-8a45c8950aaf" alt="Hyprlock-With-Profile" width="1280">
</details>
<details>
<summary><b>With Profile & User Info [12H Format]</b></summary>
<img src="https://github.com/user-attachments/assets/e0049860-7511-432e-8814-8d17d448182b" alt="Hyprlock-With-Profile" width="1280">
</details>
## 📦 Installation
><i><b>❗ This configuration is based on a 1080p display, if you are using a higher screen resolution,</br>you may need to reconfigure the sizes and recoordinate all the components.</b></i>
<b>Auto-Installation :</b>
```bash
sh -c "$(curl -fsSL https://raw.githubusercontent.com/Tamarindtype/googlish-hyprlock-theme/main/install.sh)"
```
</br><b>Manual Installation :</b>
```bash
# Backup your current Hyprlock config first!
# Clone the repository
git clone https://github.com/Tamarindtype/googlish-hyprlock-theme.git
# Move all the files to the hyprland config folder
mv ./googlish-hyprlock-theme/* ~/.config/hypr/
# Go to script folder
cd $HOME/.config/hypr/hyprlock/
# Change all the scripts permission to make them executable
chmod +x *.sh
# Run the Hyprlock
hyprlock
```
## 🗄️ Directory Structure
```md
$HOME
└── .config
└── hypr
├── hyprlock
│ ├── assets
│ ├── battery.sh
│ ├── bluetooth.sh
│ ├── change_wallpaper.sh
│ ├── greeting.sh
│ ├── network.sh
│ ├── medianotif.sh
│ └── weatherinfo.sh
└── hyprlock.conf
```
## 🗨️ FAQ
| Question | Answer |
| --- | --- |
| Profile & User info does not appear? | By default, it set without profile and user info. You can enable it by uncomment the `image` @PROFILE PICTURE and `label` @USER INFO in `hyprlock.conf` |
| Battery percentage number does not appear? | Change your battery module in `battery.sh`. The default is `BAT0`, you can check it by running this command `ls /sys/class/power_supply/` |
| How to change the 24H Format to 12H Format? | Comment the 24H format and uncomment the 12H format. also uncomment the AM/PM `label` & `shape` in `hyprlock.conf` |
| null location or Unable to determine your location? | Change the IP Geolocation provider in `weatherinfo.sh` |
## 🏅 Recommendations
| Type | Name | Links |
| --- | --- | --- |
| Regular | PP Neue Machina | [Pangram Pangram](https://pangrampangram.com/products/neue-machina) |
| Nerd Font | Geist & Space Mono | [Nerd Fonts](https://github.com/ryanoasis/nerd-fonts/releases) |
| Emoji | Apple Emoji | [apple-emoji-linux](https://github.com/samuelngs/apple-emoji-linux) |
## ✨ Special Thanks & Credits
| Details | Credit |
| --- | --- |
| Battery & Playerctl Widget Scripts | @ashish-kus [minimal Hyprlock](https://gist.github.com/ashish-kus/dd562b0bf5e8488a09e0b9c289f4574c) |
| Helped Me Create Dynamic WiFi, Bluetooth, Weathercast and Greeting Widget | @OPENAI [ChatGPT](https://chatgpt.com/)|
+494 -111
View File
@@ -1,39 +1,264 @@
source = $HOME/.config/hypr/catppuccin-hyprland/themes/mocha.conf # For more information visit https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/
$scrPath = ~/.config/hypr/hyprlock/
$imgPath = ~/.config/hypr/hyprlock/assets/
$USER = narl # Your Alias
$host = uname -n #Your Alias
$wifi-mode = false # Change the WiFi output. true = show SSID, false = Connected.
$bt-mode = false # Change the Bluetooth output. true = show Device name, false = Connected.
# Default geolocation provider is IP-API.COM, hardcode it if the location does not match the current location.
# Hardcode your location (If hardcode does not recognize your City, change it to IP Geolocation provider in weatherinfo.sh)
$CITY =
$COUNTRY =
# WALLPAPER
# Just comment and uncomment to select
$wallpaper = screenshot
#$wallpaper = ~/your/wallpaper-path.png
$blur = 2
# ADJUST HERE
$rounding = 12
$shape-rd = -1
$font-text = GeistMono Nerd Font Bold
$font-text0 = GeistMono Nerd Font
$font-display = PP Neue Machina Ultra-Bold
$font-symbol = JetBrainsMono Nerd Font Mono
# Input Var
$weight = 2
$inner-color = rgba(0, 0, 0, 0.5)
$border-color = rgba(255, 255, 255, 0.15)
# Colors
$clock-color = rgba(255, 255, 255, 1)
$fg0 = rgba(255, 255, 255, 1)
$fg1 = rgba(0, 0, 0, 1)
$shape-col0 = rgba(255, 255, 255, 1)
$shape-col1 = rgba(0, 0, 0, 0.25)
$shape-col2 = rgba(255, 255, 255, 0.25)
$shadow-pass = 2
$shadow-size = 3
$shadow-color = rgb(0,0,0)
$shadow-boost = 1.2
$text-shadow-pass = 1
$text-shadow-boost = 0.5
$accent = $mauve
$accentAlpha = $mauveAlpha
$font = JetBrainsMono Nerd Font
# GENERAL # GENERAL
general { general {
no_fade_in = true
grace = 1
disable_loading_bar = false
hide_cursor = true hide_cursor = true
no_fade_in = false ignore_empty_input = true
grace = 0 text_trim = true
disable_loading_bar = true
} }
#BACKGROUND #BACKGROUND
background { background {
monitor = monitor =
path = $HOME/Pictures/reze/reze.png path = $wallpaper
blur_passes = 3
blur_size = 7 blur_passes = $blur
noise = 0.0117
contrast = 0.8916 contrast = 0.8916
brightness = 0.8172 brightness = 0.7172
vibrancy = 0.1696 vibrancy = 0.1696
vibrancy_darkness = 0.0 vibrancy_darkness = 0
color = $base
} }
# TIME # PROFILE PICTURE
image {
monitor =
path = $imgPath/profile.jpg
size = 120 # lesser side if not 1:1 ratio
opacity = 0.25
shadow_pass = $shadow-pass
shadow_size = $shadow-size
shadow_color = $shadow-color
shadow_boost = $shadow-boost
rounding = $rounding # negative values mean circle
border_size = 4
rotate = 0 # degrees, counter-clockwise
position = 20, -20
halign = left
valign = top
zindex = 1
}
# USER INFO
label { label {
monitor = monitor =
text = $TIME text = cmd[update:1000] echo -e "$USER\n󰁥 $($host)\n\n$(uname -r)\nPackages: $(pacman -Q | wc -l) pacman"
color = $text
font_size = 120 shadow_passes = 1
font_family = $font shadow_boost = 0.5
position = 0, 300
color = $fg0
font_size = 11
font_family = $font-text
position = 170, -35
halign = left
valign = top
}
# WEATHERCAST & LOCATION
label {
monitor =
text = cmd[update:1000] echo "$(bash $scrPath/weatherinfo.sh)"
shadow_passes = 1
shadow_boost = 0.5
color = $fg0
font_size = 11
font_family = $font-text
position = 0, -20
halign = center
valign = top
}
# INPUT FIELD
input-field {
monitor =
size = 275, 55
rounding = $rounding
outline_thickness = $weight
outer_color = $border-color
dots_size = 0.1 # Scale of input-field height, 0.2 - 0.8
dots_spacing = 1 # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true
inner_color = $inner-color
font_color = $fg0
fade_on_empty = false
font_family = $font-text
placeholder_text = <span>󰢏 $USER</span>
hide_input = false
position = 0, -240
halign = center
valign = center
zindex = 10
}
# TIME HR
label {
monitor =
text = cmd[update:1000] echo -e "$(date +"%H")" # 24-Hour Format
#text = cmd[update:1000] echo -e "$(date +"%I")" # 12-Hour Format
color = $clock-color
shadow_pass = $shadow-pass
shadow_size = $shadow-size
shadow_color = $shadow-color
shadow_boost = $shadow-boost
font_size = 150
font_family = $font-display
position = 0, -155
halign = center
valign = top
}
# TIME MM
label {
monitor =
text = cmd[update:1000] echo -e "$(date +"%M")"
color = $clock-color
shadow_pass = $shadow-pass
shadow_size = $shadow-size
shadow_color = $shadow-color
shadow_boost = $shadow-boost
font_size = 150
font_family = $font-display
position = 0, -325
halign = center
valign = top
}
# AM/PM for 12-Hour Format
#label {
monitor =
text = cmd[update:1000] echo -e "$(date +"%p")"
color = $clock-color
shadow_pass = $shadow-pass
shadow_size = $shadow-size
shadow_color = $shadow-color
shadow_boost = $shadow-boost
font_size = 16
font_family = $font-display
position = 0, 17
halign = center
valign = center
zindex = 5
}
# AM/PM BG
#shape {
monitor =
size = 70, 40
shadow_passes = $text-shadow-pass
shadow_boost = $text-shadow-boost
color = $shape-col2
rounding = $rounding
border_size =
border_color =
position = 0, 20
halign = center
valign = center
zindex = 1
}
# GREETING
label {
monitor =
text = cmd[update:1000] echo "$(bash $scrPath/greeting.sh)"
shadow_passes = $text-shadow-pass
shadow_boost = $text-shadow-boost
color = $fg0
font_size = 11
font_family = $font-text
position = 0, -55
halign = center
valign = center
}
# TODAY IS
label {
monitor =
text = cmd[update:1000] bash -c 'day=$(date +%A); echo "Today is $day"'
shadow_passes = $text-shadow-pass
shadow_boost = $text-shadow-boost
color = $fg0
font_size = 11
font_family = $font-text
position = 0, -75
halign = center halign = center
valign = center valign = center
} }
@@ -41,115 +266,273 @@ label {
# DATE # DATE
label { label {
monitor = monitor =
text = cmd[update:43200000] date +"%A, %d %B %Y" text = cmd[update:1000] bash -c 'day=$(date +%d); case "$day" in 1) suffix="st";; 2) suffix="nd";; 3) suffix="rd";; *) suffix="th";; esac; echo -e "$(date +"%B %e")'$day'$suffix, $(date +%Y)"'
color = $text
font_size = 30 shadow_passes = $text-shadow-pass
font_family = $font shadow_boost = $text-shadow-boost
position = 0, 200
color = $fg0
font_size = 14
font_family = $font-text
position = 0, -115
halign = center halign = center
valign = center valign = center
} }
# USER AVATAR (Center) # BATTERY
image {
monitor =
path = $HOME/.face
size = 120
border_color = rgba(255, 255, 255, 0.1)
position = 0, 50
halign = center
valign = center
}
# INPUT FIELD (Center)
input-field {
monitor =
size = 300, 60
outline_thickness = 2
dots_size = 0.2
dots_spacing = 0.2
dots_center = true
outer_color = rgba(255, 255, 255, 0.1)
inner_color = rgba(0, 0, 0, 0.2)
font_color = $text
fade_on_empty = false
placeholder_text = <span foreground="##$textAlpha"><i>󰌾 Logged in as </i><span foreground="##$accentAlpha">$USER</span></span>
hide_input = false
check_color = $accent
fail_color = $red
fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i>
capslock_color = $yellow
position = 0, -60
halign = center
valign = center
}
# --- MUSIC DASHBOARD (TOP RIGHT) ---
# ALBUM ART (At the very top right, 80px high, adjusted -3px for perfect alignment)
image {
monitor =
path = /tmp/hyprlock_art.png
size = 80
rounding = 15
border_color = rgba(255, 255, 255, 0.1)
reload_time = 2
reload_cmd = ~/.config/hypr/scripts/album_art.sh
position = -20, -17
halign = right
valign = top
}
# MUSIC TEXT BOX (To the left of the image, same height)
shape {
monitor =
size = 300, 80
color = rgba(0, 0, 0, 0.3)
rounding = 15
border_size = 1
border_color = rgba(255, 255, 255, 0.1)
position = -110, -20
halign = right
valign = top
}
# MUSIC TEXT (Right aligned and vertically centered inside the 80px box)
label { label {
monitor = monitor =
text = cmd[update:1000] ~/.config/hypr/scripts/songdetail.sh text = cmd[update:1000] echo -e "$($scrPath/battery.sh)"
color = $text
font_size = 14 color = $fg1
font_family = $font font_size = 12
position = -125, -37 font_family = $font-text
position = -37, 29
halign = right halign = right
valign = top valign = bottom
text_align = right zindex = 5
} }
# --- STATUS DASHBOARD (BOTTOM RIGHT) --- # NETWORK
label {
monitor =
text = cmd[update:1000] echo -e "$($scrPath/network.sh)"
# SYSTEM INFO BOX (Vertical stack container) color = $fg1
font_size = 12
font_family = $font-text
position = 37, 29
halign = left
valign = bottom
zindex = 5
}
# BLUETOOTH
label {
monitor =
text = cmd[update:1000] echo -e "$(~/.config/hypr/hyprlock/bluetooth.sh)"
color = $fg1
font_size = 12
font_family = $font-text
position = 37, 85
halign = left
valign = bottom
zindex = 5
}
# BATTERY BG
shape { shape {
monitor = monitor =
size = 300, 100 size = 90, 40
color = rgba(0, 0, 0, 0.3)
rounding = 15 shadow_passes = $text-shadow-pass
border_size = 1 shadow_boost = $text-shadow-boost
border_color = rgba(255, 255, 255, 0.1)
color = $shape-col0
rounding = $shape-rd
border_size =
border_color =
position = -20, 20 position = -20, 20
halign = right halign = right
valign = bottom valign = bottom
zindex = 1
} }
# SYSTEM INFO TEXT (3 lines, top of each other, right aligned) # NETWORK BG
shape {
monitor =
size = 150, 40
shadow_passes = $text-shadow-pass
shadow_boost = $text-shadow-boost
color = $shape-col0
rounding = $shape-rd
border_size =
border_color =
position = 20, 20
halign = left
valign = bottom
zindex = 1
}
# BLUETOOTH BG
shape {
monitor =
size = 150, 40
shadow_passes = $text-shadow-pass
shadow_boost = $text-shadow-boost
color = $shape-col0
rounding = $shape-rd
border_size =
border_color =
position = 20, 75
halign = left
valign = bottom
zindex = 1
}
# MEDIA BG
image {
monitor =
path = $imgPath/media-bg-dark-25.png
size = 8%
opacity = 0.25
rounding = 5
border_size = 0
rotate = 0
position = 0, -10%
halign = center
valign = center
zindex = 1
}
shape {
monitor =
size = 35%, 8%
shadow_passes = $text-shadow-pass
shadow_boost = $text-shadow-boost
color = $shape-col1
rounding = $rounding
border_size =
border_color =
position = 0, 5%
halign = center
valign = bottom
zindex = 1
}
# PLAYER TITLE
label { label {
monitor = monitor =
text = cmd[update:5000] ~/.config/hypr/scripts/status_info.sh text = cmd[update:1000] echo "$($scrPath/playerctl.sh --title)"
color = $text
color = $fg0
font_size = 14 font_size = 14
font_family = $font font_family = $font-text
position = -35, 35
halign = right position = 0, -40%
valign = bottom halign = center
text_align = right valign = center
zindex = 5
} }
# PLAYER ARTIST
label {
monitor =
text = cmd[update:1000] echo "$($scrPath/playerctl.sh --artist)"
color = $fg0
font_size = 11
font_family = $font-text
position = 0, -42%
halign = center
valign = center
zindex = 5
}
# PLAYER ALBUM
label {
monitor =
text = cmd[update:1000] echo "$($scrPath/playerctl.sh --album)"
color = $fg0
font_size = 11
font_family = $font-text0
position = 0, -44%
halign = center
valign = center
zindex = 5
}
# PLAYER STATUS SYMBOL
label {
monitor =
text = cmd[update:1000] echo "$($scrPath/playerctl.sh --status-symbol)"
color = $fg0
font_size = 16
font_family = $font-symbol
position = 33.5%, -38%
halign = left
valign = center
zindex = 5
}
# PLAYER STATUS
label {
monitor =
text = cmd[update:1000] echo "$($scrPath/playerctl.sh --status)"
color = $fg0
font_size = 10
font_family = $font-text
position = 35%, -38%
halign = left
valign = center
zindex = 5
}
# PLAYER SOURCE SYMBOL
label {
monitor =
text = cmd[update:1000] echo "$($scrPath/playerctl.sh --source-symbol)"
color = rgba(255, 255, 255, 0.6)
font_size = 16
font_family = $font-symbol
position = -33.5%, -38%
halign = right
valign = center
zindex = 5
}
# PLAYER SOURCE
label {
monitor =
text = cmd[update:1000] echo "$($scrPath/playerctl.sh --source)"
color = rgba(255, 255, 255, 0.6)
font_size = 10
font_family = $font-text
position = -35%, -38%
halign = right
valign = center
zindex = 5
}
label {
monitor =
text =
color = $fg0
font_size = 24
font_family = $font-symbol
position = 0, 1%
halign = center
valign = bottom
}
+155
View File
@@ -0,0 +1,155 @@
source = $HOME/.config/hypr/catppuccin-hyprland/themes/mocha.conf
$accent = $mauve
$accentAlpha = $mauveAlpha
$font = JetBrainsMono Nerd Font
# GENERAL
general {
hide_cursor = true
no_fade_in = false
grace = 0
disable_loading_bar = true
}
# BACKGROUND
background {
monitor =
path = $HOME/Pictures/reze/reze.png
blur_passes = 3
blur_size = 7
noise = 0.0117
contrast = 0.8916
brightness = 0.8172
vibrancy = 0.1696
vibrancy_darkness = 0.0
color = $base
}
# TIME
label {
monitor =
text = $TIME
color = $text
font_size = 120
font_family = $font
position = 0, 300
halign = center
valign = center
}
# DATE
label {
monitor =
text = cmd[update:43200000] date +"%A, %d %B %Y"
color = $text
font_size = 30
font_family = $font
position = 0, 200
halign = center
valign = center
}
# USER AVATAR (Center)
image {
monitor =
path = $HOME/.face
size = 120
border_color = rgba(255, 255, 255, 0.1)
position = 0, 50
halign = center
valign = center
}
# INPUT FIELD (Center)
input-field {
monitor =
size = 300, 60
outline_thickness = 2
dots_size = 0.2
dots_spacing = 0.2
dots_center = true
outer_color = rgba(255, 255, 255, 0.1)
inner_color = rgba(0, 0, 0, 0.2)
font_color = $text
fade_on_empty = false
placeholder_text = <span foreground="##$textAlpha"><i>󰌾 Logged in as </i><span foreground="##$accentAlpha">$USER</span></span>
hide_input = false
check_color = $accent
fail_color = $red
fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i>
capslock_color = $yellow
position = 0, -60
halign = center
valign = center
}
# --- MUSIC DASHBOARD (TOP RIGHT) ---
# ALBUM ART (At the very top right, 80px high, adjusted -3px for perfect alignment)
image {
monitor =
path = /tmp/hyprlock_art.png
size = 80
rounding = 15
border_color = rgba(255, 255, 255, 0.1)
reload_time = 2
reload_cmd = ~/.config/hypr/scripts/album_art.sh
position = -20, -17
halign = right
valign = top
}
# MUSIC TEXT BOX (To the left of the image, same height)
shape {
monitor =
size = 300, 80
color = rgba(0, 0, 0, 0.3)
rounding = 15
border_size = 1
border_color = rgba(255, 255, 255, 0.1)
position = -110, -20
halign = right
valign = top
}
# MUSIC TEXT (Right aligned and vertically centered inside the 80px box)
label {
monitor =
text = cmd[update:1000] ~/.config/hypr/scripts/songdetail.sh
color = $text
font_size = 14
font_family = $font
position = -125, -37
halign = right
valign = top
text_align = right
}
# --- STATUS DASHBOARD (BOTTOM RIGHT) ---
# SYSTEM INFO BOX (Vertical stack container)
shape {
monitor =
size = 300, 100
color = rgba(0, 0, 0, 0.3)
rounding = 15
border_size = 1
border_color = rgba(255, 255, 255, 0.1)
position = -20, 20
halign = right
valign = bottom
}
# SYSTEM INFO TEXT (3 lines, top of each other, right aligned)
label {
monitor =
text = cmd[update:5000] ~/.config/hypr/scripts/status_info.sh
color = $text
font_size = 14
font_family = $font
position = -35, 35
halign = right
valign = bottom
text_align = right
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

+33
View File
@@ -0,0 +1,33 @@
#!/bin/bash
# Get the current battery percentage
battery_percentage=$(cat /sys/class/power_supply/BAT0/capacity)
# Get the battery status (Charging or Discharging)
battery_status=$(cat /sys/class/power_supply/BAT0/status)
# Define the battery icons for each 10% segment
battery_icons=("󰂃" "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰁹")
# Define the charging icon
charging_icon="󰂄"
# Calculate the index for the icon array
# Ensure the index is within bounds (0 to 9) for battery percentages 0 to 100
icon_index=$((battery_percentage / 10))
# If the battery is 100%, use the last icon (index 9)
if [ "$battery_percentage" -eq 100 ]; then
icon_index=9
fi
# Get the corresponding icon
battery_icon=${battery_icons[$icon_index]}
# Check if the battery is charging
if [ "$battery_status" = "Charging" ]; then
battery_icon="$charging_icon"
fi
# Output the battery percentage and icon
echo "$battery_percentage% $battery_icon"
+47
View File
@@ -0,0 +1,47 @@
#!/bin/bash
# Path to the Hyprland configuration file
config_file="$HOME/.config/hypr/hyprlock.conf"
# Read the bt-mode value from the configuration file
bt_mode=$(grep -oP '^\$bt-mode\s*=\s*\K\S+' ~/.config/hypr/hyprlock.conf)
# Get Bluetooth power status
bluetooth_status=$(bluetoothctl show | grep "Powered:" | awk '{print $2}')
# Check if Bluetooth is powered on
if [ "$bluetooth_status" != "yes" ]; then
echo "󰂯 Bluetooth Off"
exit 0
fi
# Initialize connected devices
connected_devices=$(echo "$connected_devices" | sed 's/[[:space:]]*$//')
# Process Bluetooth devices
while read -r line; do
echo "Processing line: $line" >&2
device_mac=$(echo "$line" | awk '{print $2}')
device_name=$(echo "$line" | cut -d' ' -f3-)
echo "Device MAC: $device_mac" >&2
echo "Device Name: $device_name" >&2
if bluetoothctl info "$device_mac" | grep -q "Connected: yes"; then
connected_devices+="$device_name "
fi
echo "Finished processing $device_mac" >&2
echo "---" >&2
done < <(bluetoothctl devices)
# If no connected devices, show "No Devices"
if [ -z "$connected_devices" ]; then
echo "󰂲 No Devices"
exit 0
fi
# Display output based on bt-mode
if [ "$bt_mode" = "true" ]; then
echo "󰂯 $connected_devices"
else
echo "󰂯 Connected"
fi
+22
View File
@@ -0,0 +1,22 @@
#!/bin/bash
# Only works if you use SWWW for your wallpapers
SWWW_DIR="$HOME/.cache/swww/"
HYPRLOCK="$HOME/.config/hypr/hyprlock.conf"
# Get a Monitor Cache File
FIRST_FILE=$(find "$SWWW_DIR" -type f | head -n 1)
# Check if SWWW file exists
if [ -n "$FIRST_FILE" ] && [ -f "$FIRST_FILE" ]; then
WALLPAPER=$(sed -n '2p' "$FIRST_FILE")
sed -i "s|^\(\$wallpaper[[:space:]]*=[[:space:]]*\).*|\1$WALLPAPER # (screenshot or /path/to/your/wallpaper.jpg)|" "$HYPRLOCK"
echo "Wallpaper path updated to $WALLPAPER"
exit 0
fi
# Error
echo "Fehler: kein Wallpaper gefunden."
exit 1
+32
View File
@@ -0,0 +1,32 @@
#!/bin/bash
# Set your Username
# username="TamarindX"
# Read the username alias from hyprlock.conf
username=$(grep -oP '^\$USER\s*=\s*\K\S+' ~/.config/hypr/hyprlock.conf)
# Check if the username was successfully extracted
if [ -z "$username" ]; then
echo "Username not found in hyprlock.conf."
exit 1
fi
# Get the current hour
hour=$(date +%H)
# Determine the greeting based on the time
if [ "$hour" -ge 5 ] && [ "$hour" -lt 12 ]; then
greeting="Good Morning"
elif [ "$hour" -ge 12 ] && [ "$hour" -lt 17 ]; then
greeting="Good Afternoon"
elif [ "$hour" -ge 17 ] && [ "$hour" -lt 21 ]; then
greeting="Good Evening"
elif [ "$hour" -ge 21 ] && [ "$hour" -lt 24 ]; then
greeting="Good Night"
else
greeting="GO TO SLEEP!"
fi
# Output the combined text
echo -e "Hello, $username! $greeting"
+65
View File
@@ -0,0 +1,65 @@
#!/bin/bash
# Set this variable to control the output
# Set to "true" to show SSID, "false" to show "Connected"
# show_ssid=false
# Read the wifi-mode alias from hyprlock.conf
show_ssid=$(grep -oP '^\$wifi-mode\s*=\s*\K\S+' ~/.config/hypr/hyprlock.conf)
# Check if the SSID was successfully extracted else fallback?!
if [ -z "$show_ssid" ]; then
show_ssid=false
fi
# Check if any Ethernet connection is active
ethernet_connected=$(nmcli -t -f DEVICE,TYPE,STATE dev | grep -E 'ethernet:connected')
# If Ethernet
if [ -n "$ethernet_connected" ]; then
echo "󰈀 Ethernet"
exit 0
fi
# Get Wi-Fi connection status
wifi_status=$(nmcli -t -f WIFI g)
# Check if Wi-Fi is enabled
if [ "$wifi_status" != "enabled" ]; then
echo "󰤮 Wi-Fi Off"
exit 0
fi
# Get active Wi-Fi connection details
wifi_info=$(nmcli -t -f ACTIVE,SSID,SIGNAL dev wifi | grep '^yes')
# If no active connection, show "Disconnected"
if [ -z "$wifi_info" ]; then
echo "󰤮 No Wi-Fi"
exit 0
fi
# Extract SSID
ssid=$(echo "$wifi_info" | cut -d':' -f2)
# Extract signal strength
signal_strength=$(echo "$wifi_info" | cut -d':' -f3)
# Define Wi-Fi icons based on signal strength
wifi_icons=("󰤯" "󰤟" "󰤢" "󰤥" "󰤨") # From low to high signal
# Clamp signal strength between 0 and 100
signal_strength=$((signal_strength < 0 ? 0 : (signal_strength > 100 ? 100 : signal_strength)))
# Calculate the icon index based on signal strength
icon_index=$((signal_strength / 25))
# Get the corresponding icon
wifi_icon=${wifi_icons[$icon_index]}
# Output based on show_ssid variable
if [ "$show_ssid" = true ]; then
echo "$wifi_icon $ssid"
else
echo "$wifi_icon Connected"
fi
+116
View File
@@ -0,0 +1,116 @@
#!/bin/bash
if [ $# -eq 0 ]; then
echo "Usage: $0 --title | --artist | --album | --source | --source-symbol"
exit 1
fi
# Function to get metadata using playerctl
get_metadata() {
key=$1
playerctl metadata --player=%any,chromium,firefox --format "{{ $key }}" 2>/dev/null
}
# Check for arguments
# Function to determine the source and return an icon and text
get_source_info_symbol() {
trackid=$(get_metadata "mpris:trackid")
if [[ "$trackid" == *"firefox"* ]]; then
echo -e "󰈹"
elif [[ "$trackid" == *"spotify"* ]]; then
echo -e ""
elif [[ "$trackid" == *"chromium"* ]]; then
echo -e ""
else
echo ""
fi
}
get_source_info() {
trackid=$(get_metadata "mpris:trackid")
if [[ "$trackid" == *"firefox"* ]]; then
echo -e "Firefox"
elif [[ "$trackid" == *"spotify"* ]]; then
echo -e "Spotify"
elif [[ "$trackid" == *"chromium"* ]]; then
echo -e "Chrome"
else
echo ""
fi
}
# Function to truncate text with ellipsis if necessary
truncate_with_ellipsis() {
text=$1
max_length=$2
if [ ${#text} -gt $max_length ]; then
echo "${text:0:$((max_length - 3))}..."
else
echo "$text"
fi
}
# Parse the argument
case "$1" in
--title)
title=$(get_metadata "xesam:title")
if [ -z "$title" ]; then
echo ""
else
truncate_with_ellipsis "$title" 28 # Limit the output to 50 characters
fi
;;
--artist)
artist=$(get_metadata "xesam:artist")
if [ -z "$artist" ]; then
echo ""
else
truncate_with_ellipsis "$artist" 28 # Limit the output to 50 characters
fi
;;
--status-symbol)
status=$(playerctl status 2>/dev/null)
if [[ $status == "Playing" ]]; then
echo "󰎆"
elif [[ $status == "Paused" ]]; then
echo "󰏥"
else
echo ""
fi
;;
--status)
status=$(playerctl status 2>/dev/null)
if [[ $status == "Playing" ]]; then
echo "Playing Now"
elif [[ $status == "Paused" ]]; then
echo "Paused"
else
echo ""
fi
;;
--album)
album=$(playerctl metadata --player=%any,chromium,firefox --format "{{ xesam:album }}" 2>/dev/null)
if [[ -n $album ]]; then
echo "$album"
else
status=$(playerctl status 2>/dev/null)
if [[ -n $status ]]; then
echo "Not album"
else
truncate_with_ellipsis "$album" 28 # Limit the output to 50 characters
fi
fi
;;
--source-symbol)
get_source_info_symbol
;;
--source)
get_source_info
;;
*)
echo "Invalid option: $1"
echo "Usage: $0 --title | --artist | --album | --source | --source-symbol"
exit 1
;;
esac
+39
View File
@@ -0,0 +1,39 @@
#!/bin/bash
# Get location data using IP Geolocation
# Recommended with API, but you can try w/o API [IPINFO.IO]
# API_TOKEN="YOUR_API_TOKEN"
# location_data=$(curl -s "https://ipinfo.io?token=$API_TOKEN" 2>/dev/null)
# location_data=$(curl -s https://ipinfo.io 2>/dev/null) #[Limited requests. Require API to send 50k request/month]
# Extract city and country code (ISO 3166-1 alpha-2 code)
# CITY=$(echo "$location_data" | jq -r '.city // empty')
# COUNTRY=$(echo "$location_data" | jq -r '.country // empty')
# IPINFO Alternative [IP-API.COM]
location_data=$(curl -s "http://ip-api.com/json/" 2>/dev/null)
# Extract city and country code
CITY=$(echo "$location_data" | jq -r '.city // empty')
COUNTRY=$(echo "$location_data" | jq -r '.countryCode // empty')
# Visit http://ip-api.com/json/ to find other variables
# HARDCODE Location
# CITY=$(grep -oP '^\$CITY\s*=\s*\K.+' ~/.config/hypr/hyprlock.conf)
# COUNTRY=$(grep -oP '^\$COUNTRY\s*=\s*\K.+' ~/.config/hypr/hyprlock.conf)
# Check if CITY and COUNTRY are valid
if [[ -n "$CITY" && -n "$COUNTRY" ]]; then
# Fetch weather info for the detected city from wttr.in
weather_info=$(curl -s "wttr.in/$CITY?format=%c+%C+%t" 2>/dev/null)
# Check if the weather info is valid
if [[ -n "$weather_info" ]]; then
echo "$COUNTRY, $CITY: $weather_info"
else
echo "Weather info unavailable for $COUNTRY, $CITY"
fi
else
echo "Unable to determine your location"
fi
+1 -1
View File
@@ -1,6 +1,6 @@
wallpaper { wallpaper {
monitor = monitor =
path = ~/Pictures/reze/reze.png path = ~/Pictures/rem/rem-oled.png
fit_mode = cover fit_mode = cover
} }
+97
View File
@@ -0,0 +1,97 @@
#!/bin/bash
# Set paths
CONFIG_DIR="$HOME/.config/hypr"
BACKUP_DIR="$CONFIG_DIR/hyprlock-backup-$(date +%Y%m%d%H%M%S)"
REPO_URL="https://github.com/Tamarindtype/googlish-hyprlock-theme.git"
TEMP_DIR="$(mktemp -d)"
read -p "Do you want to see every command executed? [y/N]: " choice
choice=${choice,,}
if [[ "$choice" == "y" ]]; then
SHOW_COMMANDS=true
else
SHOW_COMMANDS=false
fi
run_cmd() {
local desc="$1"
local cmd="$2"
if [[ "$SHOW_COMMANDS" == true ]]; then
echo -e "\n$desc"
echo "-> $cmd"
read -p "Run command? [Y/n]: " confirm
confirm=${confirm,,}
if [[ "$confirm" == "n" ]]; then
echo "⏭ Skipped."
else
eval "$cmd"
fi
else
eval "$cmd"
fi
}
# Backup existing config
if [ -d "$CONFIG_DIR/hyprlock" ] || [ -f "$CONFIG_DIR/hyprlock.conf" ]; then
read -p "Do you want to create a backup of your config? [Y/n]: " choice
choice=${choice,,}
if [[ "$choice" != "n" ]]; then
run_cmd "Creating backup folder" "mkdir -p \"$BACKUP_DIR\""
if [ -d "$CONFIG_DIR/hyprlock" ]; then
run_cmd "Backing up folder" "mv \"$CONFIG_DIR/hyprlock\" \"$BACKUP_DIR/\""
fi
if [ -f "$CONFIG_DIR/hyprlock.conf" ]; then
run_cmd "Backing up file" "mv \"$CONFIG_DIR/hyprlock.conf\" \"$BACKUP_DIR/\""
fi
fi
else
echo "No existing hyprlock config found. Skipping backup."
fi
# Clone the repo
run_cmd "Cloning repository..." "git clone \"$REPO_URL\" \"$TEMP_DIR\""
# Move files
run_cmd "Creating config directory" "mkdir -p \"$CONFIG_DIR\""
if [ -d "$TEMP_DIR/hyprlock" ]; then
run_cmd "Moving hyprlock folder" "mv \"$TEMP_DIR/hyprlock\" \"$CONFIG_DIR/\""
fi
if [ -f "$TEMP_DIR/hyprlock.conf" ]; then
run_cmd "Moving hyprlock.conf" "mv \"$TEMP_DIR/hyprlock.conf\" \"$CONFIG_DIR/\""
fi
# Make scripts executable
if [ -d "$CONFIG_DIR/hyprlock" ]; then
run_cmd "Making scripts executable..." "chmod +x \"$CONFIG_DIR/hyprlock\"/*.sh"
fi
# Optional: Run hyprlock
run_cmd "Running Hyprlock" "hyprlock"
read -p "Do you want to install the 'hyprlock-change-wallpaper' command? [Y/n]: " choice
choice=${choice,,}
if [[ "$choice" != "n" ]]; then
run_cmd "Installing hyprlock-change-wallpaper shortcut" "sudo ln -sf $CONFIG_DIR/hyprlock/change_wallpaper.sh /usr/local/bin/hyprlock-change-wallpaper"
run_cmd "Make command runable" "chmod +x $CONFIG_DIR/hyprlock/change_wallpaper.sh"
if command -v hyprlock-change-wallpaper &>/dev/null; then
echo "hyprlock-change-wallpaper was succesfully installed"
else
echo "Error while installing hyprlock-change-wallpaper."
fi
else
echo "⏭ installation of hyprlock-change-wallpaper skipped"
fi
# Cleanup
run_cmd "Cleaning up temp files..." "rm -rf \"$TEMP_DIR\""
+41 -29
View File
@@ -11,16 +11,13 @@
"margin-right": 10, "margin-right": 10,
"modules-left": [ "modules-left": [
"hyprland/workspaces", "group/spaces"
"hyprland/window"
], ],
"modules-center": [ "modules-center": [
"group/center" "group/center"
], ],
"modules-right": [ "modules-right": [
"tray", "group/powertray"
"custom/gamemode",
"custom/power_status"
], ],
// --- Standard Modules --- // --- Standard Modules ---
@@ -41,20 +38,33 @@
"return-type": "json", "return-type": "json",
"exec": "fluxo-rs mpris", "exec": "fluxo-rs mpris",
"on-click": "playerctl play-pause", "on-click": "playerctl play-pause",
"signal": 11, "signal": 11
"interval": 0
}, },
"tray": { "tray": {
"icon-size": 18, "icon-size": 18,
"spacing": 10 "spacing": 10
}, },
"group/spaces": {
"orientation": "horizontal",
"modules": [
"hyprland/workspaces",
"hyprland/window"
]
},
"group/powertray": {
"orientation": "horizontal",
"modules": [
"tray",
"custom/dnd",
"custom/gamemode",
"custom/power_status"
]
},
"group/center": { "group/center": {
"orientation": "horizontal", "orientation": "horizontal",
"modules": [ "modules": [
"custom/mpris", "custom/mpris",
"clock" "clock"
// "custom/dnd"
] ]
}, },
"custom/gamemode": { "custom/gamemode": {
@@ -95,7 +105,8 @@
"custom/cpu", "custom/cpu",
"custom/mem", "custom/mem",
"custom/disk-root", "custom/disk-root",
"custom/network" "custom/network",
"custom/backlight"
] ]
}, },
"modules-center": [ "modules-center": [
@@ -112,44 +123,39 @@
"return-type": "json", "return-type": "json",
"exec": "fluxo-rs sys", "exec": "fluxo-rs sys",
"signal": 5, "signal": 5,
"interval": 1 "interval": 5
}, },
"custom/cpu": { "custom/cpu": {
"format": "{}", "format": "{}",
"return-type": "json", "return-type": "json",
"exec": "fluxo-rs cpu", "exec": "fluxo-rs cpu",
"on-click": "zenmonitor & disown", "on-click": "zenmonitor & disown",
"signal": 2, "signal": 2
"interval": 1
}, },
"custom/mem": { "custom/mem": {
"format": "{}", "format": "{}",
"return-type": "json", "return-type": "json",
"exec": "fluxo-rs mem", "exec": "fluxo-rs mem",
"signal": 3, "signal": 3
"interval": 1
}, },
"custom/gpu": { "custom/gpu": {
"format": "{}", "format": "{}",
"return-type": "json", "return-type": "json",
"exec": "fluxo-rs gpu", "exec": "fluxo-rs gpu",
"signal": 4, "signal": 4
"interval": 1
}, },
"custom/network": { "custom/network": {
"format": "{}", "format": "{}",
"return-type": "json", "return-type": "json",
"exec": "fluxo-rs net", "exec": "fluxo-rs net",
"signal": 1, "signal": 1
"interval": 1
}, },
"custom/disk-root": { "custom/disk-root": {
"format": "{}", "format": "{}",
"return-type": "json", "return-type": "json",
"exec": "fluxo-rs disk /", "exec": "fluxo-rs disk /",
"signal": 6, "signal": 6
"interval": 1
}, },
// --- Fluxo-rs Audio & BT --- // --- Fluxo-rs Audio & BT ---
@@ -162,8 +168,7 @@
"on-scroll-down": "fluxo-rs vol down 5", "on-scroll-down": "fluxo-rs vol down 5",
"on-click-right": "fluxo-rs vol cycle", "on-click-right": "fluxo-rs vol cycle",
"on-click-middle": "pavucontrol", "on-click-middle": "pavucontrol",
"signal": 8, "signal": 8
"interval": 1
}, },
"custom/mic": { "custom/mic": {
"format": "{}", "format": "{}",
@@ -174,17 +179,16 @@
"on-scroll-down": "fluxo-rs mic down 5", "on-scroll-down": "fluxo-rs mic down 5",
"on-click-right": "fluxo-rs mic cycle", "on-click-right": "fluxo-rs mic cycle",
"on-click-middle": "pavucontrol", "on-click-middle": "pavucontrol",
"signal": 8, "signal": 8
"interval": 1
}, },
"custom/bluetooth-audio": { "custom/bluetooth-audio": {
"format": "{}", "format": "{}",
"return-type": "json", "return-type": "json",
"exec": "fluxo-rs bt", "exec": "fluxo-rs bt",
"on-click": "fluxo-rs bt menu", "on-click": "fluxo-rs bt menu",
"on-click-right": "fluxo-rs bt cycle_mode", "on-click-right": "fluxo-rs bt cycle",
"on-click-middle": "fluxo-rs bt cycle_mode",
"signal": 9, "signal": 9,
"interval": 1,
"tooltip": true "tooltip": true
}, },
"custom/dnd": { "custom/dnd": {
@@ -192,8 +196,16 @@
"return-type": "json", "return-type": "json",
"exec": "fluxo-rs dnd", "exec": "fluxo-rs dnd",
"on-click": "fluxo-rs dnd toggle", "on-click": "fluxo-rs dnd toggle",
"signal": 14, "signal": 13,
"interval": 0 "interval": 5
},
"custom/backlight": {
"format": "{}",
"return-type": "json",
"exec": "fluxo-rs backlight",
"on-scroll-up": "brightnessctl s +10%",
"on-scroll-down": "brightnessctl s 10%",
"signal": 12
} }
} }
] ]
+137 -144
View File
@@ -1,55 +1,107 @@
/* ~/.config/waybar/style.css */ /* ~/.config/waybar/style.css */
@import "./catppuccin-waybar/themes/mocha.css"; @import "./catppuccin-waybar/themes/mocha.css";
/* --- Global Reset --- */ /* ==========================================================================
Global Reset & Bar
========================================================================== */
* { * {
border: none; border: none;
border-radius: 12px; border-radius: 12px;
min-height: 0; min-height: 0;
font-family: JetBrainsMono Nerd Font, sans-serif; font-family: "JetBrainsMono Nerd Font", sans-serif;
font-size: 12px; font-size: 12px;
transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
} }
/* --- Bar Background (Floating Island Style) --- */
window#waybar { window#waybar {
background-color: transparent; background-color: transparent;
color: @text; color: @text;
} }
/* --- Top Bar Special Handling --- */ /* ==========================================================================
window#waybar.top { Base Islands (Containers)
margin-top: 6px; ========================================================================== */
} /* Groups and standalone modules receive the floating island styling */
#spaces,
/* --- Bottom Bar Special Handling --- */ #powertray,
window#waybar.bottom {
margin-bottom: 6px;
}
/* --- Shared Island Styling --- */
#workspaces,
#window,
#tray,
#hardware, #hardware,
#center,
#custom-bluetooth-audio, #custom-bluetooth-audio,
#custom-volume, #custom-volume,
#custom-buds, #custom-buds,
#custom-mic, #custom-mic {
#custom-dnd,
#custom-gamemode,
#custom-power_status {
background-color: alpha(@surface0, 0.8); background-color: alpha(@surface0, 0.8);
margin: 4px 6px; margin: 4px 6px;
padding: 4px 16px; padding: 4px 16px;
border: 1px solid alpha(@surface1, 0.5); border: 1px solid alpha(@surface1, 0.5);
box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.15); box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.15);
color: @text; /* Unifies all standard text to the soft Catppuccin white */ color: @text;
} }
/* Group-specific sizing overrides */
#hardware,
#powertray,
#spaces {
border-radius: 24px;
padding: 4px 10px;
}
/* Center Pill (Clock + MPRIS) Override */
#center {
background: linear-gradient(45deg, @mauve, @lavender);
color: @surface0;
font-weight: 900;
padding: 4px 20px;
}
/* ==========================================================================
Grouped Modules (Inner Items)
========================================================================== */
/* Strip backgrounds and borders from items that live inside groups */
#workspaces,
#window,
#custom-cpu,
#custom-mem,
#custom-sys,
#custom-gpu,
#custom-disk-root,
#custom-mpris,
#custom-network,
#custom-backlight,
#clock,
#tray,
#custom-gamemode,
#custom-dnd,
#custom-power_status {
background-color: transparent;
border: none;
box-shadow: none;
margin: 0;
padding: 0 8px;
}
/* Subtle vertical separator line between inner items */
#custom-cpu,
#custom-mem,
#custom-sys,
#custom-gpu,
#custom-disk-root,
#custom-mpris,
#custom-network,
#tray,
#custom-gamemode,
#custom-dnd {
border-right: 1px solid alpha(@surface1, 0.5);
border-radius: 0;
}
/* ==========================================================================
Specific Module Overrides & Alerts
========================================================================== */
/* --- Workspaces --- */ /* --- Workspaces --- */
#workspaces { #workspaces {
padding: 2px 8px; padding: 0px 8px; /* Override the inner item padding */
} }
#workspaces button { #workspaces button {
@@ -57,19 +109,17 @@ window#waybar.bottom {
margin: 4px; margin: 4px;
min-width: 12px; min-width: 12px;
min-height: 12px; min-height: 12px;
background-color: @subtext0; /* Subtle dark gray for inactive */ background-color: @subtext0;
color: transparent; color: transparent;
border-radius: 12px; border-radius: 12px;
transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
} }
#workspaces button.active { #workspaces button.active,
#workspaces button.active:hover {
min-width: 30px; min-width: 30px;
background-color: @mauve; /* Signature Catppuccin accent */ background-color: @mauve;
} }
#workspaces button.active:hover { min-width: 30px; background-color: @mauve; }
#workspaces button:hover { #workspaces button:hover {
background-color: @lavender; background-color: @lavender;
min-width: 20px; min-width: 20px;
@@ -79,139 +129,76 @@ window#waybar.bottom {
background-color: @red; background-color: @red;
} }
/* --- Clock (Centered Pill) --- */ /* --- Hardware Semantic Alerts --- */
#center { .normal { color: @mauve; }
background: linear-gradient(45deg, @mauve, @lavender); /* Cohesive pastel gradient */ .high { color: @peach; }
color: @surface0; .max { color: @red; }
font-weight: 900;
margin: 4px 6px; #custom-network { color: @mauve; }
padding: 4px 20px; #custom-gamemode.active { color: @mauve; }
border-radius: 12px;
box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.15); /* --- Media / Controls --- */
#custom-volume.unmuted,
#custom-mic.unmuted {
color: @mauve;
}
#custom-volume.muted,
#custom-mic.muted {
color: @overlay1;
}
/* --- Bluetooth Audio --- */
#custom-bluetooth-audio.disabled,
#custom-bluetooth-audio.disconnected {
color: @overlay1;
}
#custom-bluetooth-audio.connected {
color: @blue;
}
/* ANC States */
#custom-bluetooth-audio.anc-active,
#custom-bluetooth-audio.connected.anc-active,
#custom-bluetooth-audio.connected\ anc-active {
color: @mauve;
}
#custom-bluetooth-audio.anc-aware,
#custom-bluetooth-audio.connected.anc-aware,
#custom-bluetooth-audio.connected\ anc-aware {
color: @green;
}
#custom-bluetooth-audio.anc-off,
#custom-bluetooth-audio.connected.anc-off,
#custom-bluetooth-audio.connected\ anc-off {
color: @blue;
} }
/* --- Power Status --- */ /* --- Power Status --- */
#custom-power_status { #custom-power_status.charging { color: @green; }
font-weight: bold; #custom-power_status.warning { color: @peach; }
}
#custom-power_status.charging {
color: @green;
}
#custom-power_status.warning {
color: @peach;
}
#custom-power_status.critical { #custom-power_status.critical {
color: @red; color: @red;
animation: blink 1s infinite alternate; animation: blink 1s infinite alternate;
} }
@keyframes blink {
to {
color: @base;
background-color: @red;
}
}
/* --- Hardware Group (Left Bottom) --- */ /* Interactive Hover States for Standalone Modules */
#hardware {
border-radius: 24px;
padding: 4px 10px;
}
/* Strip backgrounds and borders from the items inside the group */
#custom-cpu,
#custom-mem,
#custom-network
#custom-sys,
#custom-gpu,
#custom-disk-root,
#custom-mpris,
#clock,
#custom-dnd {
background-color: transparent;
border: none;
box-shadow: none;
margin: 0;
padding: 0 8px;
}
/* Subtle vertical separator line between them */
#custom-cpu,
#custom-mem,
#custom-sys,
#custom-gpu,
#custom-disk-root,
#custom-mpris
/* #clock */ {
border-right: 1px solid alpha(@surface1, 0.5);
border-radius: 0;
}
#custom-network {
padding-left: 8px;
color: @mauve;
}
/* Hardware Semantic Alerts */
.normal { color: @mauve; }
.high { color: @peach; }
.max { color: @red; }
/* Stale Data Warning (Module in backoff/failure state) */
/* .warning {
color: @peach;
opacity: 0.6;
} */
/* --- Center Bottom Utilities --- */
#custom-gamemode.active {
color: @mauve; /* Matches the workspace accent */
/* padding-left: 9px; */
}
/* --- Right Bottom Controls Semantic Alerts --- */
#custom-volume.muted,
#custom-mic.muted {
color: @overlay1; /* Dims when muted */
}
#custom-bluetooth-audio.disabled {
color: @overlay1; /* Green for active ANC */
}
#custom-bluetooth-audio.connected {
color: @blue; /* Green for active ANC */
}
#custom-bluetooth-audio.anc-off {
color: @blue; /* Green for active ANC */
}
#custom-bluetooth-audio.anc-active {
color: @blue; /* Green for active ANC */
}
#custom-bluetooth-audio.anc-aware {
color: @blue; /* Yellow for transparency mode */
}
#custom-bluetooth-audio.disconnected {
color: @text; /* Gray when off */
}
/* --- Hover States --- */
#custom-volume:hover, #custom-volume:hover,
#custom-buds:hover, #custom-buds:hover,
#custom-mic:hover, #custom-mic:hover,
#custom-bluetooth-audio:hover, #custom-bluetooth-audio:hover,
#custom-power_status:hover { #custom-power_status:hover {
background-color: @surface1; background-color: @surface1;
color: @mauve; /* Subtle accent color on hover instead of jarring borders */ color: @mauve;
} }
/* --- Tooltip --- */ /* ==========================================================================
Tooltips & Animations
========================================================================== */
tooltip { tooltip {
background-color: alpha(@base, 0.9); background-color: alpha(@base, 0.9);
border: 1px solid @surface1; border: 1px solid @surface1;
@@ -223,3 +210,9 @@ tooltip label {
padding: 8px; padding: 8px;
} }
@keyframes blink {
to {
color: @base;
background-color: @red;
}
}