diff --git a/.gitignore b/.gitignore
index 56fe045..aab53d0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,3 +25,4 @@
!systemd/
fish/fish_variables
waybar/fluxo-rs
+!fluxo/
diff --git a/fluxo/config.toml b/fluxo/config.toml
new file mode 100644
index 0000000..77b985d
--- /dev/null
+++ b/fluxo/config.toml
@@ -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 = ""
+format_inactive = ""
+
+[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 = ""
diff --git a/hypr/README.md b/hypr/README.md
new file mode 100644
index 0000000..69bfa93
--- /dev/null
+++ b/hypr/README.md
@@ -0,0 +1,83 @@
+
+
✦ Google-ish Hyprlock Theme ✦
+
+
+
+## ▶️ Preview
+
+ Without Profile & User Info
+
+
+
+ With Profile & User Info
+
+
+
+ With Profile & User Info [12H Format]
+
+
+
+## 📦 Installation
+>❗ This configuration is based on a 1080p display, if you are using a higher screen resolution,you may need to reconfigure the sizes and recoordinate all the components.
+
+Auto-Installation :
+```bash
+sh -c "$(curl -fsSL https://raw.githubusercontent.com/Tamarindtype/googlish-hyprlock-theme/main/install.sh)"
+```
+Manual Installation :
+```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/)|
\ No newline at end of file
diff --git a/hypr/hyprlock.conf b/hypr/hyprlock.conf
index 8f3f25f..c2e66f8 100644
--- a/hypr/hyprlock.conf
+++ b/hypr/hyprlock.conf
@@ -1,155 +1,538 @@
-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 {
- hide_cursor = true
- no_fade_in = false
- grace = 0
- disable_loading_bar = true
+ no_fade_in = true
+ grace = 1
+ disable_loading_bar = false
+ hide_cursor = true
+ ignore_empty_input = true
+ text_trim = true
}
-# BACKGROUND
+#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
+ monitor =
+ path = $wallpaper
+
+ blur_passes = $blur
+ contrast = 0.8916
+ brightness = 0.7172
+ vibrancy = 0.1696
+ vibrancy_darkness = 0
}
-# 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 {
- monitor =
- text = $TIME
- color = $text
- font_size = 120
- font_family = $font
- position = 0, 300
- halign = center
- valign = center
+ monitor =
+ text = cmd[update:1000] echo -e "$USER\n $($host)\n\n$(uname -r)\nPackages: $(pacman -Q | wc -l) pacman"
+
+ shadow_passes = 1
+ shadow_boost = 0.5
+
+ 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 = $USER
+ 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
+ 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
+ monitor =
+ 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)"'
+
+ shadow_passes = $text-shadow-pass
+ shadow_boost = $text-shadow-boost
+
+ color = $fg0
+ font_size = 14
+ font_family = $font-text
+
+ position = 0, -115
+ 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 = Logged in as $USER
- hide_input = false
- check_color = $accent
- fail_color = $red
- fail_text = $FAIL ($ATTEMPTS)
- 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)
+# BATTERY
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
+ monitor =
+ text = cmd[update:1000] echo -e "$($scrPath/battery.sh)"
+
+ color = $fg1
+ font_size = 12
+ font_family = $font-text
+
+ position = -37, 29
+ halign = right
+ valign = bottom
+ zindex = 5
}
-# --- 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)
+# NETWORK
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
+ monitor =
+ text = cmd[update:1000] echo -e "$($scrPath/network.sh)"
+
+ 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 {
+ monitor =
+ size = 90, 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 = right
+ valign = bottom
+ zindex = 1
+}
+
+# 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 {
+ monitor =
+ text = cmd[update:1000] echo "$($scrPath/playerctl.sh --title)"
+
+ color = $fg0
+ font_size = 14
+ font_family = $font-text
+
+ position = 0, -40%
+ halign = center
+ 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
+}
+
+
diff --git a/hypr/hyprlock.conf.bak b/hypr/hyprlock.conf.bak
new file mode 100644
index 0000000..8f3f25f
--- /dev/null
+++ b/hypr/hyprlock.conf.bak
@@ -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 = Logged in as $USER
+ hide_input = false
+ check_color = $accent
+ fail_color = $red
+ fail_text = $FAIL ($ATTEMPTS)
+ 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
+}
diff --git a/hypr/hyprlock/assets/profile-[1:1-500px].png b/hypr/hyprlock/assets/profile-[1:1-500px].png
new file mode 100644
index 0000000..1de98e7
Binary files /dev/null and b/hypr/hyprlock/assets/profile-[1:1-500px].png differ
diff --git a/hypr/hyprlock/assets/profile.jpg b/hypr/hyprlock/assets/profile.jpg
new file mode 100644
index 0000000..0f388ab
Binary files /dev/null and b/hypr/hyprlock/assets/profile.jpg differ
diff --git a/hypr/hyprlock/battery.sh b/hypr/hyprlock/battery.sh
new file mode 100755
index 0000000..e3e2606
--- /dev/null
+++ b/hypr/hyprlock/battery.sh
@@ -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"
diff --git a/hypr/hyprlock/bluetooth.sh b/hypr/hyprlock/bluetooth.sh
new file mode 100755
index 0000000..1686367
--- /dev/null
+++ b/hypr/hyprlock/bluetooth.sh
@@ -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
+
diff --git a/hypr/hyprlock/change_wallpaper.sh b/hypr/hyprlock/change_wallpaper.sh
new file mode 100755
index 0000000..fb78176
--- /dev/null
+++ b/hypr/hyprlock/change_wallpaper.sh
@@ -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
diff --git a/hypr/hyprlock/greeting.sh b/hypr/hyprlock/greeting.sh
new file mode 100755
index 0000000..1d17b85
--- /dev/null
+++ b/hypr/hyprlock/greeting.sh
@@ -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"
diff --git a/hypr/hyprlock/network.sh b/hypr/hyprlock/network.sh
new file mode 100755
index 0000000..c9b25cc
--- /dev/null
+++ b/hypr/hyprlock/network.sh
@@ -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
diff --git a/hypr/hyprlock/playerctl.sh b/hypr/hyprlock/playerctl.sh
new file mode 100755
index 0000000..0a1d13c
--- /dev/null
+++ b/hypr/hyprlock/playerctl.sh
@@ -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
diff --git a/hypr/hyprlock/weatherinfo.sh b/hypr/hyprlock/weatherinfo.sh
new file mode 100755
index 0000000..a41b4b2
--- /dev/null
+++ b/hypr/hyprlock/weatherinfo.sh
@@ -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
diff --git a/hypr/install.sh b/hypr/install.sh
new file mode 100644
index 0000000..31c0066
--- /dev/null
+++ b/hypr/install.sh
@@ -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\""
diff --git a/waybar/config.jsonc b/waybar/config.jsonc
index 73df0fc..3f98a33 100644
--- a/waybar/config.jsonc
+++ b/waybar/config.jsonc
@@ -72,7 +72,8 @@
"return-type": "json",
"exec": "fluxo-rs game",
"on-click": "~/.config/hypr/scripts/gamemode.sh",
- "signal": 7
+ "signal": 7,
+ "interval": 5
},
"custom/power_status": {
@@ -195,7 +196,8 @@
"return-type": "json",
"exec": "fluxo-rs dnd",
"on-click": "fluxo-rs dnd toggle",
- "signal": 13
+ "signal": 13,
+ "interval": 5
},
"custom/backlight": {
"format": "{}",