Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 667e42ba15 | |||
| 5e6d48b30a | |||
| 9e8411a176 | |||
| 6d5d2caeca | |||
| 86c964c274 | |||
| 7958f17951 | |||
| 9365615f06 | |||
| f910af8dce | |||
| 74945d45e9 | |||
| eadaaa5d52 | |||
| 70842dc108 | |||
| 1e811035a5 | |||
| 9dda38ceee | |||
| f2c432ff2c | |||
| 233ef1e291 | |||
| db7d5d17a6 | |||
| 70de42923c | |||
| dae66e3608 | |||
| 2fb95b16e8 | |||
| 89ce9ab548 | |||
| 146429f594 | |||
| 13bc86f713 | |||
| e8ef6712af | |||
| d7c1b0e733 | |||
| 20ea9cc4d1 |
@@ -24,3 +24,5 @@
|
||||
!wireplumber/
|
||||
!systemd/
|
||||
fish/fish_variables
|
||||
waybar/fluxo-rs
|
||||
!fluxo/
|
||||
|
||||
@@ -22,3 +22,6 @@
|
||||
[submodule "fuzzel/catppuccin-fuzzel"]
|
||||
path = fuzzel/catppuccin-fuzzel
|
||||
url = https://github.com/catppuccin/fuzzel.git
|
||||
[submodule "nvim"]
|
||||
path = nvim
|
||||
url = https://git.narl.io/nvrl/nvim-config.git
|
||||
|
||||
@@ -26,8 +26,8 @@ lines = 24
|
||||
|
||||
## Blank space added around the window in pixels.
|
||||
[window.padding]
|
||||
x = 30
|
||||
y = 30
|
||||
x = 3
|
||||
y = 0
|
||||
|
||||
## SCROLLING ------------------------------------------------------
|
||||
[scrolling]
|
||||
@@ -104,3 +104,8 @@ ipc_socket = true
|
||||
|
||||
## Import additional configuration files.
|
||||
import = ["~/.config/alacritty/colors.toml", "~/.config/alacritty/fonts.toml"]
|
||||
|
||||
[[keyboard.bindings]]
|
||||
key = "Return"
|
||||
mods = "Shift"
|
||||
chars = "\u001B\r"
|
||||
|
||||
+1
-1
@@ -56,7 +56,7 @@ graph_symbol_proc = "default"
|
||||
shown_boxes = "cpu mem net proc"
|
||||
|
||||
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
|
||||
update_ms = 2000
|
||||
update_ms = 1000
|
||||
|
||||
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
|
||||
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
|
||||
|
||||
+2
-2
@@ -1,10 +1,10 @@
|
||||
[global]
|
||||
corner_radius = 4
|
||||
transparency = 90
|
||||
frame_color = "#94e2d5"
|
||||
frame_color = "#f38ba8"
|
||||
frame_width = 1
|
||||
separator_color= frame
|
||||
highlight = "#89b4fa"
|
||||
highlight = "#89dceb"
|
||||
|
||||
[urgency_low]
|
||||
background = "#1e1e2e"
|
||||
|
||||
@@ -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 = "{name} {volume:>3}% <span size='large'> {icon}</span>"
|
||||
format_sink_muted = "{name} <span size='large'> {icon}</span>"
|
||||
format_source_unmuted = "{name} {volume:>3}% <span size='large'> {icon}</span>"
|
||||
format_source_muted = "{name} <span size='large'> {icon}</span>"
|
||||
|
||||
[bt]
|
||||
format_plugin = "{alias} [{left}|{right}] {anc} <span size='large'> </span>"
|
||||
format_connected = "{alias} <span size='large'> </span>"
|
||||
format_disconnected = "Disconnected <span size='large'> </span>"
|
||||
format_disabled = "<span size='large'></span>"
|
||||
|
||||
[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 = "<span size='large'></span>"
|
||||
format_normal = "<span size='large'></span>"
|
||||
+20
-5
@@ -1,13 +1,28 @@
|
||||
include=~/.config/fuzzel/catppuccin-fuzzel/themes/catppuccin-mocha/mauve.ini
|
||||
include=~/.config/fuzzel/catppuccin-fuzzel/themes/catppuccin-mocha/red.ini
|
||||
include=~/.config/fuzzel/catppuccin-fuzzel/themes/catppuccin-mocha/red.ini
|
||||
|
||||
[main]
|
||||
font=FiraCode Nerd Font:size=14
|
||||
terminal=alacritty
|
||||
dpi-aware=no
|
||||
prompt="> "
|
||||
icon-theme=Papirus-Dark
|
||||
show-actions=yes
|
||||
|
||||
width=45
|
||||
lines=8
|
||||
horizontal-pad=20
|
||||
vertical-pad=20
|
||||
inner-pad=10
|
||||
|
||||
prompt=" "
|
||||
|
||||
show-actions=no
|
||||
layer=overlay
|
||||
|
||||
[border]
|
||||
radius=4
|
||||
radius=12
|
||||
width=2
|
||||
|
||||
[colors]
|
||||
background=1e1e2e80
|
||||
# Matches the background so the counter becomes invisible for a cleaner look
|
||||
counter=1e1e2eff
|
||||
border=f38ba8ff
|
||||
|
||||
@@ -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/)|
|
||||
+507
-62
@@ -1,100 +1,545 @@
|
||||
source = $HOME/.config/hypr/catppuccin-hyprland/themes/mocha.conf
|
||||
# For more information visit https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/
|
||||
|
||||
source = ~/.config/hypr/catppuccin-hyprland/themes/mocha.conf
|
||||
|
||||
$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($baseAlpha80)
|
||||
$border-color = rgba($mauveAlpha80)
|
||||
|
||||
# Colors
|
||||
$clock-color = $text
|
||||
$fg0 = $text
|
||||
$fg1 = $base
|
||||
$shape-col0 = $mauve
|
||||
$shape-col1 = rgba($surface0Alpha80)
|
||||
$shape-col2 = rgba($surface1Alpha80)
|
||||
$shadow-pass = 2
|
||||
$shadow-size = 3
|
||||
$shadow-color = $crust
|
||||
$shadow-boost = 1.2
|
||||
$text-shadow-pass = 1
|
||||
$text-shadow-boost = 0.5
|
||||
|
||||
|
||||
$accent = $mauve
|
||||
$accentAlpha = $mauveAlpha
|
||||
$font = JetBrainsMono Nerd Font
|
||||
|
||||
# GENERAL
|
||||
general {
|
||||
no_fade_in = true
|
||||
grace = 1
|
||||
disable_loading_bar = false
|
||||
hide_cursor = true
|
||||
ignore_empty_input = true
|
||||
text_trim = true
|
||||
}
|
||||
|
||||
#BACKGROUND
|
||||
background {
|
||||
monitor =
|
||||
path = $HOME/Pictures/mandelbrot.png
|
||||
blur_passes = 0
|
||||
color = $base
|
||||
path = $wallpaper
|
||||
|
||||
blur_passes = $blur
|
||||
contrast = 0.8916
|
||||
brightness = 0.7172
|
||||
vibrancy = 0.1696
|
||||
vibrancy_darkness = 0
|
||||
}
|
||||
|
||||
# LAYOUT
|
||||
# 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
|
||||
border_color = $mauve
|
||||
rotate = 0 # degrees, counter-clockwise
|
||||
|
||||
position = 20, -20
|
||||
halign = left
|
||||
valign = top
|
||||
zindex = 1
|
||||
}
|
||||
|
||||
# USER INFO
|
||||
label {
|
||||
monitor =
|
||||
text = Layout: $LAYOUT
|
||||
color = $text
|
||||
font_size = 25
|
||||
font_family = $font
|
||||
position = 30, -30
|
||||
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
|
||||
}
|
||||
|
||||
# TIME
|
||||
# WEATHERCAST & LOCATION
|
||||
label {
|
||||
monitor =
|
||||
text = $TIME
|
||||
color = $text
|
||||
font_size = 90
|
||||
font_family = $font
|
||||
position = -30, 0
|
||||
halign = right
|
||||
valign = top
|
||||
}
|
||||
text = cmd[update:1000] echo "$(bash $scrPath/weatherinfo.sh)"
|
||||
|
||||
# DATE
|
||||
label {
|
||||
monitor =
|
||||
text = cmd[update:43200000] date +"%A, %d %B %Y"
|
||||
color = $text
|
||||
font_size = 25
|
||||
font_family = $font
|
||||
position = -30, -150
|
||||
halign = right
|
||||
valign = top
|
||||
}
|
||||
shadow_passes = 1
|
||||
shadow_boost = 0.5
|
||||
|
||||
# FINGERPRINT
|
||||
{
|
||||
monitor = "";
|
||||
text = "$FPRINTPROMPT";
|
||||
color = "$text";
|
||||
font_size = 14;
|
||||
font_family = $font;
|
||||
position = "0, -107";
|
||||
halign = "center";
|
||||
valign = "center";
|
||||
}
|
||||
color = $fg0
|
||||
font_size = 11
|
||||
font_family = $font-text
|
||||
|
||||
# USER AVATAR
|
||||
image {
|
||||
monitor =
|
||||
path = $HOME/.face
|
||||
size = 100
|
||||
border_color = $accent
|
||||
position = 0, 75
|
||||
position = 0, -20
|
||||
halign = center
|
||||
valign = center
|
||||
valign = top
|
||||
}
|
||||
|
||||
# INPUT FIELD
|
||||
input-field {
|
||||
monitor =
|
||||
size = 300, 60
|
||||
outline_thickness = 4
|
||||
dots_size = 0.2
|
||||
dots_spacing = 0.2
|
||||
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
|
||||
outer_color = $accent
|
||||
inner_color = $surface0
|
||||
font_color = $text
|
||||
|
||||
inner_color = $inner-color
|
||||
font_color = $fg0
|
||||
fade_on_empty = false
|
||||
placeholder_text = <span foreground="##$textAlpha"><i> Logged in as </i><span foreground="##$accentAlpha">$USER</span></span>
|
||||
|
||||
font_family = $font-text
|
||||
placeholder_text = <span foreground="##$textAlpha"> $USER</span>
|
||||
hide_input = false
|
||||
check_color = $accent
|
||||
check_color = $mauve
|
||||
fail_color = $red
|
||||
fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i>
|
||||
capslock_color = $yellow
|
||||
position = 0, -47
|
||||
|
||||
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: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
|
||||
}
|
||||
|
||||
# BATTERY
|
||||
label {
|
||||
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
|
||||
}
|
||||
|
||||
# NETWORK
|
||||
label {
|
||||
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($subtext0Alpha99)
|
||||
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($subtext0Alpha99)
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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 |
Executable
+33
@@ -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"
|
||||
Executable
+47
@@ -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
|
||||
|
||||
Executable
+22
@@ -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
|
||||
Executable
+32
@@ -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"
|
||||
Executable
+65
@@ -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
|
||||
Executable
+116
@@ -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
|
||||
Executable
+39
@@ -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
|
||||
+4
-2
@@ -1,5 +1,7 @@
|
||||
wallpaper {
|
||||
monitor =
|
||||
path = ~/Pictures/mandelbrot.png
|
||||
fit_mode = fill
|
||||
path = ~/Pictures/reze/reze.png
|
||||
fit_mode = cover
|
||||
}
|
||||
|
||||
splash = false
|
||||
|
||||
@@ -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\""
|
||||
@@ -0,0 +1 @@
|
||||
monitor=eDP-1, disable
|
||||
@@ -1,8 +1,8 @@
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Environment-variables/
|
||||
|
||||
env = INTEL_DEBUG,noccs
|
||||
env = WLR_DRM_NO_ATOMIC,1
|
||||
# env = INTEL_DEBUG,noccs
|
||||
# env = WLR_DRM_NO_ATOMIC,1
|
||||
env = HYPRCURSOR_THEME,Bibata-Modern-Classic
|
||||
env = HYPRCURSOR_SIZE,24
|
||||
env = XCURSOR_SIZE,24
|
||||
@@ -10,7 +10,8 @@ env = XCURSOR_THEME,Bibata-Modern-Classic
|
||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
||||
# env = debug:full_cm_proto,true
|
||||
env = QT_QPA_PLATFORMTHEME,qt6ct
|
||||
# env = LIBVA_DRIVER_NAME,radeonsi
|
||||
# env = VDPAU_DRIVER,radeonsi
|
||||
env = LIBVA_DRIVER_NAME,radeonsi
|
||||
env = VDPAU_DRIVER,radeonsi
|
||||
env = MOZ_ENABLE_WAYLAND,1
|
||||
env = ELECTRON_OZONE_PLATFORM_HINT,wayland
|
||||
env = EDITOR,nvim
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#input
|
||||
input {
|
||||
kb_layout = us
|
||||
kb_layout = us,us
|
||||
kb_variant = dvorak-intl, intl
|
||||
# kb_variant = intl
|
||||
kb_model =
|
||||
|
||||
@@ -6,11 +6,13 @@ bindl=,switch:off:Lid Switch,exec,~/.config/hypr/scripts/lid_handler.sh open
|
||||
|
||||
bindr = ALT, m, exec, cliphist list | fuzzel --dmenu | cliphist decode | wl-copy
|
||||
bind = , PRINT, exec, grim -g "$(slurp)" - | wl-copy
|
||||
bind = SHIFT, PRINT, exec, grim -g "$(slurp)" ~/Pictures/Screenshots/$(date +'%Y-%m-%d_%H-%M-%S').png
|
||||
bindr = ALT SHIFT, z, exec, ~/.config/hypr/scripts/replay-ctrl.sh save
|
||||
bindr = ALT, z, exec, ~/.config/hypr/scripts/replay-ctrl.sh toggle
|
||||
bindr = ALT SHIFT, c, exec, ~/.config/hypr/scripts/droidcam-ctrl.sh toggle
|
||||
|
||||
# general binds
|
||||
bind = $mainMod, B, exec, fluxo bt menu
|
||||
bind = $mainMod, RETURN, exec, $terminal
|
||||
bind = $mainMod SHIFT, Q, killactive,
|
||||
bind = $mainMod CTRL, L, exec, hyprlock
|
||||
@@ -77,17 +79,15 @@ bindm = $mainMod, mouse:272, movewindow
|
||||
bindm = $mainMod, mouse:273, resizewindow
|
||||
|
||||
# Laptop multimedia keys for volume and LCD brightness
|
||||
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+
|
||||
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
||||
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
||||
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
|
||||
bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+
|
||||
bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-
|
||||
bindel = ,XF86AudioRaiseVolume, exec, fluxo vol up 5
|
||||
bindel = ,XF86AudioLowerVolume, exec, fluxo vol down 5
|
||||
bindel = ,XF86AudioMute, exec, fluxo vol mute
|
||||
bindel = ,XF86AudioMicMute, exec, fluxo mic mute
|
||||
bindel = ,XF86MonBrightnessUp, exec, brightnessctl s +10%
|
||||
bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%-
|
||||
|
||||
# Requires playerctl
|
||||
bindl = , XF86AudioNext, exec, playerctl next
|
||||
bindl = , XF86AudioPause, exec, playerctl play-pause
|
||||
bindl = , XF86AudioPlay, exec, playerctl play-pause
|
||||
bindl = , XF86AudioPrev, exec, playerctl previous
|
||||
bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+
|
||||
bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%-
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
|
||||
# monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 2560x1440@90, 0x-1440, 1
|
||||
# monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 2560x1440@90, 0x-1440, 1, bitdepth, 10
|
||||
monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 1920x1080@75, 0x-1080, 1
|
||||
# monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 1920x1080@60, 0x-1080, 1
|
||||
# monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 1280x720@240, 0x-720, 1
|
||||
# laptop screen
|
||||
monitor = eDP-1, 1920x1080@60, 0x0, 1
|
||||
# samsung home monitor
|
||||
monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 2560x1440@144, 0x-1440, 1
|
||||
# monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 1920x1080@144, 0x-1080, 1
|
||||
# monitor = desc:Samsung Electric Company LC27G7xT H4ZRA00734, 2560x1440@60, 0x-1440, 1
|
||||
|
||||
|
||||
# lid_state fallback
|
||||
source = ~/.config/hypr/lid_state.conf
|
||||
|
||||
+34
-13
@@ -12,23 +12,22 @@ general {
|
||||
border_size = 3
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
|
||||
# col.active_border = rgba(cba6f7ee) rgba(f38ba8ee) 45deg
|
||||
col.active_border = rgb($mauveAlpha) rgb($blueAlpha) 30deg
|
||||
col.active_border = $mauve $lavender 45deg
|
||||
col.inactive_border = rgb($surface2Alpha)
|
||||
|
||||
# Set to true enable resizing windows by clicking and dragging on borders and gaps
|
||||
resize_on_border = false
|
||||
|
||||
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
||||
allow_tearing = true
|
||||
allow_tearing = false
|
||||
|
||||
layout = dwindle
|
||||
}
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#decoration
|
||||
decoration {
|
||||
rounding = 4
|
||||
rounding_power = 1
|
||||
rounding = 12
|
||||
rounding_power = 3
|
||||
|
||||
# Change transparency of focused and unfocused windows
|
||||
active_opacity = 1.0
|
||||
@@ -96,18 +95,40 @@ master {
|
||||
misc {
|
||||
force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers
|
||||
disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :(
|
||||
vrr = 0
|
||||
vrr = 1
|
||||
font_family = FiraCode Nerd Font
|
||||
}
|
||||
|
||||
group {
|
||||
# The border around the grouped windows
|
||||
col.border_active = $mauve $lavender 45deg
|
||||
col.border_inactive = $surface1
|
||||
|
||||
groupbar {
|
||||
font_size = 14
|
||||
text_color = $text
|
||||
text_color_inactive = $text
|
||||
col.active = $maroon
|
||||
col.inactive = $surface2
|
||||
font_family = JetBrainsMono Nerd Font
|
||||
font_size = 11
|
||||
|
||||
# Increase the height so the text has room to breathe
|
||||
height = 24
|
||||
|
||||
# Disable the default 3D gradient for a modern flat look
|
||||
gradients = false
|
||||
|
||||
# --- Active Tab ---
|
||||
# Bright background with very dark text for perfect readability
|
||||
col.active = $mauve
|
||||
text_color = $crust
|
||||
|
||||
# --- Inactive Tab ---
|
||||
# Dark surface background with dimmed, soft text
|
||||
col.inactive = $surface0
|
||||
text_color_inactive = $subtext0
|
||||
height = 1
|
||||
font_size = 11
|
||||
# about half the indicator height
|
||||
text_offset = -7
|
||||
|
||||
# Make the indicator tall enough to render text inside
|
||||
indicator_height = 15
|
||||
}
|
||||
col.border_active = $maroon $teal 30deg
|
||||
col.border_inactive = $surface2
|
||||
}
|
||||
|
||||
@@ -1,6 +1,21 @@
|
||||
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
||||
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
|
||||
|
||||
# ==========================================
|
||||
# VARIABLES
|
||||
# ==========================================
|
||||
# Dialogs and utility apps that should float in the center
|
||||
$dialog_titles = ^(Open Form|Open File|Select a File|Choose a file|Open Workspace|Choose Directory.*|Save As.*|Save File.*|branchdialog|pinentry-gtk-2|Confirm to replace files|File Operation Progress|Open Files.*|Anmelden.*|File Upload.*|TRuDI-Export laden)$
|
||||
$dialog_classes = ^(pavucontrol|blueman-manager|nm-connection-editor|org.pulseaudio.pavucontrol)$
|
||||
|
||||
# App classes
|
||||
$steam = ^(steam)$
|
||||
$gamescope = ^(gamescope)$
|
||||
|
||||
|
||||
# ==========================================
|
||||
# GENERAL & FIXES
|
||||
# ==========================================
|
||||
# Ignore maximize requests from apps. You'll probably like this.
|
||||
# windowrule = suppress_event maximize, match:class .*
|
||||
|
||||
@@ -9,45 +24,66 @@
|
||||
windowrule = no_blur 1, match:class ^$, match:title ^$
|
||||
|
||||
|
||||
# games for tearing add the immediate rule
|
||||
# ==========================================
|
||||
# FLOATING & CENTERED DIALOGS
|
||||
# ==========================================
|
||||
# Make them float
|
||||
windowrule = float 1, match:title $dialog_titles
|
||||
windowrule = float 1, match:class $dialog_classes
|
||||
|
||||
# Float Windows
|
||||
windowrule = float 1, match:title ^(Open File|Select a File|Select Folder|Choose a file|Open Form|Open Workspace|Choose Directory|Save As|Save File|branchdialog|pinentry-gtk-2|Confirm to replace files|File Operation Progress)$
|
||||
windowrule = float 1, match:class ^(pavucontrol|blueman-manager|nm-connection-editor)$
|
||||
# Set to 800x600
|
||||
windowrule = size 800 600, match:title $dialog_titles
|
||||
windowrule = size 800 600, match:class $dialog_classes
|
||||
|
||||
# Center and Resize Windows
|
||||
windowrule = size 800 600, match:title ^(Open Form|Open File|Select a File|Choose a file|Open Workspace|Choose Directory|Save As|Save File|branchdialog|pinentry-gtk-2|Confirm to replace files|File Operation Progress)$
|
||||
windowrule = size 800 600, match:class ^(pavucontrol|blueman-manager|nm-connection-editor)$
|
||||
# Center them on the screen
|
||||
windowrule = center 1, match:title $dialog_titles
|
||||
windowrule = center 1, match:class $dialog_classes
|
||||
|
||||
windowrule = center 1, match:title ^(Open Form|Open File|Select a File|Choose a file|Open Workspace|Choose Directory|Save As|Save File|branchdialog|pinentry-gtk-2|Confirm to replace files|File Operation Progress)$
|
||||
windowrule = center 1, match:class ^(pavucontrol|blueman-manager|nm-connection-editor)$
|
||||
# Disable blur
|
||||
windowrule = no_blur 1, match:title $dialog_titles
|
||||
windowrule = no_blur 1, match:class $dialog_classes
|
||||
|
||||
windowrule = no_blur 1, match:title ^(Open Form|Open File|Select a File|Choose a file|Open Workspace|Choose Directory|Save As|Save File|branchdialog|pinentry-gtk-2|Confirm to replace files|File Operation Progress)$
|
||||
windowrule = no_blur 1, match:class ^(pavucontrol|blueman-manager|nm-connection-editor)$
|
||||
|
||||
# Workspace Rules
|
||||
# ==========================================
|
||||
# WORKSPACE ASSIGNMENTS
|
||||
# ==========================================
|
||||
# Normal Workspaces
|
||||
# windowrule = workspace 1, match:class ^(firefox)$
|
||||
# windowrule = workspace 2, match:class ^(kitty)$
|
||||
# windowrule = workspace 3, match:class ^(Code)$
|
||||
windowrule = workspace 1, match:class $gamescope
|
||||
|
||||
|
||||
# Special Workspaces
|
||||
windowrule = workspace special:virtual, match:class ^(Spotify|spotify)$
|
||||
windowrule = workspace special:discord, match:class ^(discord|vesktop)$
|
||||
|
||||
# steam rules
|
||||
|
||||
windowrule = workspace 3 silent, match:class ^(steam)$, match:title ^(Steam)$
|
||||
windowrule = workspace 4, match:class ^(gamescope)$
|
||||
# ==========================================
|
||||
# APP-SPECIFIC RULES: STEAM & GAMING
|
||||
# ==========================================
|
||||
# windowrule = workspace 3 silent, match:class $steam, match:title ^(Steam)$
|
||||
|
||||
# fixed sizes for different windows
|
||||
windowrule = size 400 800, match:title ^(Friends List)$, match:class ^(steam)$
|
||||
windowrule = size 1000 800, match:title ^(Steam Settings)$, match:class ^(steam)$
|
||||
windowrule = size 1000 800, match:title ^(Add Non-Steam Game)$, match:class ^(steam)$
|
||||
# Fixed sizes for specific Steam windows
|
||||
windowrule = size 400 800, match:title ^(Friends List)$, match:class $steam
|
||||
windowrule = size 1000 800, match:title ^(Steam Settings)$, match:class $steam
|
||||
windowrule = size 1000 800, match:title ^(Add Non-Steam Game)$, match:class $steam
|
||||
|
||||
# float windows that arent the main steam window
|
||||
windowrule = float 1, match:class ^(steam)$, match:title negative:^(Steam)$
|
||||
windowrule = no_blur 1, match:class ^(steam)$, match:title negative:^(Steam)$
|
||||
# windowrule = center 1, match:class ^(steam)$, match:title negative:^(Steam)$
|
||||
# Float and disable blur for Steam windows that aren't the main window
|
||||
windowrule = float 1, match:class $steam, match:title negative:^(Steam)$
|
||||
windowrule = no_blur 1, match:class $steam, match:title negative:^(Steam)$
|
||||
# windowrule = center 1, match:class $steam, match:title negative:^(Steam)$
|
||||
|
||||
# allow tearing for games started with gamescope
|
||||
windowrule = immediate 1, match:class ^(gamescope)$
|
||||
# Allow tearing for games started with Gamescope
|
||||
windowrule = immediate 1, match:class $gamescope
|
||||
|
||||
|
||||
# Layer rules
|
||||
|
||||
# waybar blur
|
||||
layerrule = blur on, match:namespace bottom
|
||||
layerrule = blur on, match:namespace top
|
||||
layerrule = ignore_alpha 0.5, match:namespace bottom
|
||||
layerrule = ignore_alpha 0.5, match:namespace top
|
||||
# launcher blur
|
||||
layerrule = blur on, match:namespace launcher
|
||||
layerrule = ignore_alpha 0.5, match:namespace launcher
|
||||
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
url=$(playerctl metadata mpris:artUrl 2>/dev/null)
|
||||
if [[ "$url" == file://* ]]; then
|
||||
cp "${url#file://}" /tmp/hyprlock_art.png
|
||||
echo "/tmp/hyprlock_art.png"
|
||||
elif [[ "$url" == http* ]]; then
|
||||
curl -s "$url" -o /tmp/hyprlock_art.png
|
||||
echo "/tmp/hyprlock_art.png"
|
||||
else
|
||||
echo "$HOME/.config/hypr/catppuccin-hyprland/assets/mocha.webp"
|
||||
fi
|
||||
+45
-11
@@ -1,19 +1,53 @@
|
||||
#!/bin/bash
|
||||
# ~/.config/hypr/scripts/lid_handler.sh
|
||||
|
||||
if [[ "$1" == "close" ]]; then
|
||||
# Lid closed: disable laptop screen if any DP-* monitor is present
|
||||
# Using 'all' to detect monitors even if they are currently disabled
|
||||
if hyprctl monitors all | grep -q "Monitor DP-"; then
|
||||
hyprctl keyword monitor "eDP-1, disable" # Disable laptop display
|
||||
# The file that tells Hyprland to keep the lid off during reloads
|
||||
LID_STATE_FILE="$HOME/.config/hypr/lid_state.conf"
|
||||
|
||||
# Enable all detected DP-* monitors
|
||||
for monitor in $(hyprctl monitors all | grep "Monitor DP-" | awk '{print $2}'); do
|
||||
hyprctl keyword monitor "$monitor, enable"
|
||||
restart_ui() {
|
||||
# Spawn in background and detach
|
||||
systemctl restart --user waybar hyprpaper
|
||||
}
|
||||
|
||||
if [[ "$1" == "close" ]]; then
|
||||
# Check if ANY external monitor is connected and active
|
||||
if hyprctl monitors all | grep -qE "Monitor (DP|HDMI|Type-C)-"; then
|
||||
|
||||
# Prevent laptop screen from turning on during manual config reloads
|
||||
echo "monitor=eDP-1, disable" > "$LID_STATE_FILE"
|
||||
|
||||
# Extract the CURRENT live settings of all external monitors using jq
|
||||
# This grabs the active resolution, refresh rate, position, and scale.
|
||||
LIVE_MONITORS=$(hyprctl -j monitors | jq -c '.[] | select(.name != "eDP-1")')
|
||||
|
||||
# 3. Disable the laptop screen
|
||||
hyprctl keyword monitor "eDP-1, disable"
|
||||
|
||||
# 4. Re-apply the live settings to external monitors so they don't reset
|
||||
echo "$LIVE_MONITORS" | while read -r mon_json; do
|
||||
NAME=$(echo "$mon_json" | jq -r '.name')
|
||||
WIDTH=$(echo "$mon_json" | jq -r '.width')
|
||||
HEIGHT=$(echo "$mon_json" | jq -r '.height')
|
||||
REFRESH=$(echo "$mon_json" | jq -r '.refreshRate')
|
||||
X=$(echo "$mon_json" | jq -r '.x')
|
||||
Y=$(echo "$mon_json" | jq -r '.y')
|
||||
SCALE=$(echo "$mon_json" | jq -r '.scale')
|
||||
|
||||
# Formats it exactly as Hyprland expects: DP-1, 1920x1080@240, 0x0, 1
|
||||
hyprctl keyword monitor "$NAME, ${WIDTH}x${HEIGHT}@${REFRESH}, ${X}x${Y}, $SCALE"
|
||||
done
|
||||
systemd-run --user --on-active=5s systemctl --user restart waybar.service hyprpaper.service
|
||||
|
||||
# restart ui
|
||||
restart_ui
|
||||
fi
|
||||
|
||||
elif [[ "$1" == "open" ]]; then
|
||||
# Lid opened: re-enable laptop screen
|
||||
hyprctl keyword monitor "eDP-1, enable"
|
||||
# Clear the override file so the laptop screen is allowed to turn on again
|
||||
echo "" > "$LID_STATE_FILE"
|
||||
|
||||
# Let Hyprland reload itself.
|
||||
# This automatically re-enables eDP-1 based on your hardcoded hyprland.conf!
|
||||
hyprctl reload
|
||||
|
||||
restart_ui
|
||||
fi
|
||||
|
||||
Executable
+13
@@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
status=$(playerctl status 2>/dev/null)
|
||||
if [ "$status" = "Playing" ] || [ "$status" = "Paused" ]; then
|
||||
title=$(playerctl metadata title | sed 's/&/\&/g; s/</\</g; s/>/\>/g')
|
||||
artist=$(playerctl metadata artist | sed 's/&/\&/g; s/</\</g; s/>/\>/g')
|
||||
if [ ${#title} -gt 25 ]; then title="${title:0:22}..."; fi
|
||||
if [ ${#artist} -gt 25 ]; then artist="${artist:0:22}..."; fi
|
||||
echo "<span weight='bold' foreground='#cba6f7'>$title</span>"
|
||||
echo "<span foreground='#bac2de' size='small'>$artist</span>"
|
||||
else
|
||||
echo "<span weight='bold' foreground='#cdd6f4'>No Media</span>"
|
||||
echo "<span size='small' foreground='#a6adc8'>Idling</span>"
|
||||
fi
|
||||
Executable
+14
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
# 1. Network
|
||||
net=$(nmcli -t -f active,ssid dev wifi | grep '^yes' | cut -d: -f2 || echo 'Offline')
|
||||
if [ ${#net} -gt 15 ]; then net="${net:0:12}..."; fi
|
||||
# 2. Battery
|
||||
bat_cap=$(cat /sys/class/power_supply/BAT0/capacity)
|
||||
bat_stat=$(cat /sys/class/power_supply/BAT0/status)
|
||||
if [ "$bat_stat" = "Charging" ]; then icon=""; else icon=""; fi
|
||||
# 3. Load
|
||||
cpu=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}' | cut -d. -f1)
|
||||
# Output 3 lines for the vertical stack
|
||||
echo " $net"
|
||||
echo "$icon $bat_cap% ($bat_stat)"
|
||||
echo " Load: $cpu%"
|
||||
@@ -16,6 +16,9 @@ x-scheme-handler/about=google-chrome.desktop
|
||||
x-scheme-handler/unknown=google-chrome.desktop
|
||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop
|
||||
x-scheme-handler/ror2mm=r2modman.desktop
|
||||
image/webp=feh.desktop
|
||||
x-scheme-handler/claude-cli=claude-code-url-handler.desktop
|
||||
x-scheme-handler/msteams=teams-for-linux.desktop
|
||||
|
||||
[Added Associations]
|
||||
application/pdf=org.pwmt.zathura-pdf-poppler.desktop;
|
||||
@@ -26,3 +29,4 @@ x-scheme-handler/https=zen.desktop;
|
||||
text/html=zen.desktop;
|
||||
x-scheme-handler/chrome=zen.desktop;
|
||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop;
|
||||
image/webp=feh.desktop;
|
||||
|
||||
Submodule
+1
Submodule nvim added at 8d657d0f8d
-403
@@ -1,403 +0,0 @@
|
||||
vim.o.number = true
|
||||
vim.o.wrap = false
|
||||
vim.o.tabstop = 4
|
||||
vim.o.shiftwidth = 4
|
||||
vim.o.smartcase = true
|
||||
vim.o.ignorecase = true
|
||||
vim.o.hlsearch = false
|
||||
vim.o.signcolumn = 'yes'
|
||||
vim.o.clipboard = 'unnamedplus'
|
||||
vim.o.undofile = true
|
||||
vim.o.undodir = '/home/narl/.cache/nvim-undodir'
|
||||
|
||||
vim.g.mapleader = ','
|
||||
|
||||
-- Set up 'mini.deps' (customize to your liking)
|
||||
require('mini.deps').setup()
|
||||
|
||||
local add = MiniDeps.add
|
||||
|
||||
add({
|
||||
source = 'chomosuke/typst-preview.nvim'
|
||||
})
|
||||
add({
|
||||
source = 'williamboman/mason.nvim'
|
||||
})
|
||||
|
||||
add({
|
||||
source = 'stevearc/conform.nvim'
|
||||
})
|
||||
|
||||
add({
|
||||
source = 'williamboman/mason-lspconfig.nvim'
|
||||
})
|
||||
|
||||
add({
|
||||
source = 'mfussenegger/nvim-lint'
|
||||
})
|
||||
|
||||
add({
|
||||
source = 'akinsho/toggleterm.nvim'
|
||||
})
|
||||
|
||||
-- Add to current session (install if absent)
|
||||
add({
|
||||
source = 'neovim/nvim-lspconfig',
|
||||
-- Supply dependencies near target plugin
|
||||
depends = { 'williamboman/mason.nvim' },
|
||||
})
|
||||
|
||||
add({
|
||||
source = 'seblyng/roslyn.nvim',
|
||||
})
|
||||
|
||||
add({
|
||||
source = 'tris203/rzls.nvim',
|
||||
})
|
||||
|
||||
add({
|
||||
source = 'nvim-treesitter/nvim-treesitter',
|
||||
-- Use 'master' while monitoring updates in 'main'
|
||||
checkout = 'master',
|
||||
monitor = 'main',
|
||||
-- Perform action after every checkout
|
||||
hooks = { post_checkout = function() vim.cmd('TSUpdate') end },
|
||||
})
|
||||
|
||||
add({
|
||||
-- Completion framework:
|
||||
source = 'hrsh7th/nvim-cmp',
|
||||
|
||||
-- LSP completion source:
|
||||
depends = {'hrsh7th/cmp-nvim-lsp',
|
||||
'hrsh7th/cmp-nvim-lua',
|
||||
'hrsh7th/cmp-nvim-lsp-signature-help',
|
||||
'hrsh7th/cmp-vsnip',
|
||||
'hrsh7th/cmp-path',
|
||||
'hrsh7th/cmp-buffer',
|
||||
'hrsh7th/vim-vsnip',
|
||||
},
|
||||
})
|
||||
|
||||
add({ source = "catppuccin/nvim", name = "catppuccin" })
|
||||
|
||||
require('mini.files').setup({
|
||||
mappings = {
|
||||
show_help = 'gh',
|
||||
},
|
||||
})
|
||||
require('mini.icons').setup({style = 'ascii'})
|
||||
require('mini.pick').setup({})
|
||||
require('mini.snippets').setup({})
|
||||
require('mini.notify').setup({})
|
||||
require('mini.statusline').setup({})
|
||||
require('mini.tabline').setup({})
|
||||
require('mini.git').setup({})
|
||||
local imap_expr = function(lhs, rhs)
|
||||
vim.keymap.set('i', lhs, rhs, { expr = true })
|
||||
end
|
||||
imap_expr('<Tab>', [[pumvisible() ? "\<C-n>" : "\<Tab>"]])
|
||||
imap_expr('<S-Tab>', [[pumvisible() ? "\<C-p>" : "\<S-Tab>"]])
|
||||
_G.cr_action = function()
|
||||
-- If there is selected item in popup, accept it with <C-y>
|
||||
if vim.fn.complete_info()['selected'] ~= -1 then return '\25' end
|
||||
-- Fall back to plain `<CR>`. You might want to customize this
|
||||
-- according to other plugins. For example if 'mini.pairs' is set up, replace
|
||||
-- next line with `return MiniPairs.cr()`
|
||||
return '\r'
|
||||
end
|
||||
|
||||
vim.keymap.set('i', '<CR>', 'v:lua.cr_action()', { expr = true })
|
||||
require("toggleterm").setup{
|
||||
size = function(term)
|
||||
if term.direction == "horizontal" then
|
||||
return 30
|
||||
elseif term.direction == "vertical" then
|
||||
return 69
|
||||
end
|
||||
end,
|
||||
open_mapping = [[<c-\>]],
|
||||
hide_numbers = true,
|
||||
shade_terminals = true,
|
||||
persist_size = true,
|
||||
direction = 'float',
|
||||
close_on_exit = true,
|
||||
shell = vim.o.shell,
|
||||
}
|
||||
|
||||
require('nvim-treesitter.configs').setup {
|
||||
ensure_installed = { "lua", "rust", "toml", "c_sharp" },
|
||||
auto_install = true,
|
||||
highlight = {
|
||||
enable = true,
|
||||
additional_vim_regex_highlighting=false,
|
||||
},
|
||||
ident = { enable = true },
|
||||
rainbow = {
|
||||
enable = true,
|
||||
extended_mode = true,
|
||||
max_file_lines = nil,
|
||||
}
|
||||
}
|
||||
require("mason").setup({
|
||||
registries = {
|
||||
"github:mason-org/mason-registry",
|
||||
"github:Crashdummyy/mason-registry",
|
||||
},
|
||||
ui = {
|
||||
icons = {
|
||||
package_installed = "✓",
|
||||
package_pending = "➜",
|
||||
package_uninstalled = "✗"
|
||||
}
|
||||
}
|
||||
})
|
||||
require("mason-lspconfig").setup()
|
||||
vim.lsp.config('rust_analyzer', {
|
||||
-- Server-specific settings. See `:help lsp-quickstart`
|
||||
settings = {
|
||||
['rust-analyzer'] = {},
|
||||
},
|
||||
})
|
||||
|
||||
require('roslyn').setup({
|
||||
config = {
|
||||
-- the rest of your Roslyn configuration
|
||||
handlers = require("rzls.roslyn_handlers"),
|
||||
},
|
||||
})
|
||||
|
||||
require("catppuccin").setup({
|
||||
flavour = "auto", -- latte, frappe, macchiato, mocha
|
||||
background = { -- :h background
|
||||
light = "latte",
|
||||
dark = "mocha",
|
||||
},
|
||||
transparent_background = false, -- disables setting the background color.
|
||||
show_end_of_buffer = false, -- shows the '~' characters after the end of buffers
|
||||
term_colors = false, -- sets terminal colors (e.g. `g:terminal_color_0`)
|
||||
dim_inactive = {
|
||||
enabled = false, -- dims the background color of inactive window
|
||||
shade = "dark",
|
||||
percentage = 0.15, -- percentage of the shade to apply to the inactive window
|
||||
},
|
||||
no_italic = false, -- Force no italic
|
||||
no_bold = false, -- Force no bold
|
||||
no_underline = false, -- Force no underline
|
||||
styles = { -- Handles the styles of general hi groups (see `:h highlight-args`):
|
||||
comments = { "italic" }, -- Change the style of comments
|
||||
conditionals = { "italic" },
|
||||
loops = {},
|
||||
functions = {},
|
||||
keywords = {},
|
||||
strings = {},
|
||||
variables = {},
|
||||
numbers = {},
|
||||
booleans = {},
|
||||
properties = {},
|
||||
types = {},
|
||||
operators = {},
|
||||
-- miscs = {}, -- Uncomment to turn off hard-coded styles
|
||||
},
|
||||
color_overrides = {},
|
||||
custom_highlights = {},
|
||||
default_integrations = true,
|
||||
integrations = {
|
||||
cmp = true,
|
||||
gitsigns = true,
|
||||
nvimtree = true,
|
||||
treesitter = true,
|
||||
notify = false,
|
||||
mini = {
|
||||
enabled = true,
|
||||
indentscope_color = "",
|
||||
},
|
||||
-- For more plugins integrations please scroll down (https://github.com/catppuccin/nvim#integrations)
|
||||
},
|
||||
})
|
||||
|
||||
local sign = function(opts)
|
||||
vim.fn.sign_define(opts.name, {
|
||||
texthl = opts.name,
|
||||
text = opts.text,
|
||||
numhl = ''
|
||||
})
|
||||
end
|
||||
|
||||
sign({name = 'DiagnosticSignError', text = ''})
|
||||
sign({name = 'DiagnosticSignWarn', text = ''})
|
||||
sign({name = 'DiagnosticSignHint', text = ''})
|
||||
sign({name = 'DiagnosticSignInfo', text = ''})
|
||||
--Set completeopt to have a better completion experience
|
||||
-- :help completeopt
|
||||
-- menuone: popup even when there's only one match
|
||||
-- noinsert: Do not insert text until a selection is made
|
||||
-- noselect: Do not select, force to select one from the menu
|
||||
-- shortness: avoid showing extra messages when using completion
|
||||
-- updatetime: set updatetime for CursorHold
|
||||
vim.opt.completeopt = {'menuone', 'noselect', 'noinsert'}
|
||||
vim.opt.shortmess = vim.opt.shortmess + { c = true}
|
||||
vim.api.nvim_set_option('updatetime', 300)
|
||||
|
||||
-- Fixed column for diagnostics to appear
|
||||
-- Show autodiagnostic popup on cursor hover_range
|
||||
-- Goto previous / next diagnostic warning / error
|
||||
-- Show inlay_hints more frequently
|
||||
vim.cmd([[
|
||||
set signcolumn=yes
|
||||
autocmd CursorHold * lua vim.diagnostic.open_float(nil, { focusable = false })
|
||||
]])
|
||||
|
||||
vim.diagnostic.config({
|
||||
virtual_text = false,
|
||||
signs = true,
|
||||
update_in_insert = true,
|
||||
underline = true,
|
||||
severity_sort = false,
|
||||
float = {
|
||||
border = 'rounded',
|
||||
source = 'always',
|
||||
header = '',
|
||||
prefix = '',
|
||||
},
|
||||
})
|
||||
|
||||
-- setup must be called before loading
|
||||
vim.cmd.colorscheme "catppuccin"
|
||||
|
||||
vim.keymap.set('n', '<leader>w', '<cmd>write<cr>', {desc = 'Save file'})
|
||||
vim.keymap.set('n', '<leader>q', '<cmd>quitall<cr>', {desc = 'Exit vim'})
|
||||
|
||||
-- Simplified clipboard mappings
|
||||
-- vim.keymap.set({'n', 'x', 'o'}, '<leader>y', '"+y', {desc = 'Copy to clipboard'})
|
||||
-- vim.keymap.set({'n', 'x'}, '<leader>p', '"+p', {desc = 'Paste from clipboard'})
|
||||
|
||||
vim.keymap.set('n', '<leader>e', '<cmd>lua MiniFiles.open()<cr>', {desc = 'File explorer'})
|
||||
vim.keymap.set('n', '<leader><space>', '<cmd>Pick buffers<cr>', {desc = 'Search open files'})
|
||||
vim.keymap.set('n', '<leader>ff', '<cmd>Pick files<cr>', {desc = 'Search all files'})
|
||||
vim.keymap.set('n', '<leader>fh', '<cmd>Pick help<cr>', {desc = 'Search help tags'})
|
||||
|
||||
vim.keymap.set('n', '<leader>h', '<cmd>wincmd h<cr>')
|
||||
vim.keymap.set('n', '<leader>l', '<cmd>wincmd l<cr>')
|
||||
vim.keymap.set('n', '<leader>j', '<cmd>wincmd j<cr>')
|
||||
vim.keymap.set('n', '<leader>k', '<cmd>wincmd k<cr>')
|
||||
|
||||
require 'typst-preview'.setup {
|
||||
-- Setting this true will enable logging debug information to
|
||||
-- `vim.fn.stdpath 'data' .. '/typst-preview/log.txt'`
|
||||
debug = false,
|
||||
|
||||
-- Custom format string to open the output link provided with %s
|
||||
-- Example: open_cmd = 'firefox %s -P typst-preview --class typst-preview'
|
||||
open_cmd = nil,
|
||||
|
||||
-- Custom port to open the preview server. Default is random.
|
||||
-- Example: port = 8000
|
||||
port = 0,
|
||||
|
||||
-- Custom host to bind the preview server to.
|
||||
-- Note that '0.0.0.0' is not supported and [won't be](https://github.com/Myriad-Dreamin/tinymist/issues/2105)
|
||||
-- Example: host = '192.168.0.10'
|
||||
host = '127.0.0.1',
|
||||
|
||||
-- Setting this to 'always' will invert black and white in the preview
|
||||
-- Setting this to 'auto' will invert depending if the browser has enable
|
||||
-- dark mode
|
||||
-- Setting this to '{"rest": "<option>","image": "<option>"}' will apply
|
||||
-- your choice of color inversion to images and everything else
|
||||
-- separately.
|
||||
invert_colors = 'never',
|
||||
|
||||
-- Whether the preview will follow the cursor in the source file
|
||||
follow_cursor = true,
|
||||
|
||||
-- Provide the path to binaries for dependencies.
|
||||
-- Setting this will skip the download of the binary by the plugin.
|
||||
-- Warning: Be aware that your version might be older than the one
|
||||
-- required.
|
||||
dependencies_bin = {
|
||||
['tinymist'] = '/home/narl/.local/share/nvim/mason/bin/tinymist',
|
||||
['websocat'] = '/usr/bin/websocat'
|
||||
},
|
||||
|
||||
-- A list of extra arguments (or nil) to be passed to previewer.
|
||||
-- For example, extra_args = { "--input=ver=draft", "--ignore-system-fonts" }
|
||||
extra_args = nil,
|
||||
|
||||
-- This function will be called to determine the root of the typst project
|
||||
get_root = function(path_of_main_file)
|
||||
local root = os.getenv 'TYPST_ROOT'
|
||||
if root then
|
||||
return root
|
||||
end
|
||||
|
||||
-- Look for a project marker so imports from parent dirs stay inside root
|
||||
local main_dir = vim.fs.dirname(vim.fn.fnamemodify(path_of_main_file, ':p'))
|
||||
local found = vim.fs.find({ 'typst.toml', '.git' }, { path = main_dir, upward = true })
|
||||
if #found > 0 then
|
||||
return vim.fs.dirname(found[1])
|
||||
end
|
||||
|
||||
return main_dir
|
||||
end,
|
||||
|
||||
-- This function will be called to determine the main file of the typst
|
||||
-- project.
|
||||
get_main_file = function(path_of_buffer)
|
||||
return path_of_buffer
|
||||
end,
|
||||
}
|
||||
|
||||
-- Rust
|
||||
|
||||
local cmp = require'cmp'
|
||||
cmp.setup({
|
||||
-- Enable LSP snippets
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
vim.fn["vsnip#anonymous"](args.body)
|
||||
end,
|
||||
},
|
||||
mapping = {
|
||||
['<C-p>'] = cmp.mapping.select_prev_item(),
|
||||
['<C-n>'] = cmp.mapping.select_next_item(),
|
||||
-- Add tab support
|
||||
['<S-Tab>'] = cmp.mapping.select_prev_item(),
|
||||
['<Tab>'] = cmp.mapping.select_next_item(),
|
||||
['<C-S-f>'] = cmp.mapping.scroll_docs(-4),
|
||||
['<C-f>'] = cmp.mapping.scroll_docs(4),
|
||||
['<C-Space>'] = cmp.mapping.complete(),
|
||||
['<C-e>'] = cmp.mapping.close(),
|
||||
['<CR>'] = cmp.mapping.confirm({
|
||||
behavior = cmp.ConfirmBehavior.Insert,
|
||||
select = true,
|
||||
})
|
||||
},
|
||||
-- Installed sources:
|
||||
sources = {
|
||||
{ name = 'path' }, -- file paths
|
||||
{ name = 'nvim_lsp', keyword_length = 3 }, -- from language server
|
||||
{ name = 'nvim_lsp_signature_help'}, -- display function signatures with current parameter emphasized
|
||||
{ name = 'nvim_lua', keyword_length = 2}, -- complete neovim's Lua runtime API such vim.lsp.*
|
||||
{ name = 'buffer', keyword_length = 2 }, -- source current buffer
|
||||
{ name = 'vsnip', keyword_length = 2 }, -- nvim-cmp source for vim-vsnip
|
||||
{ name = 'calc'}, -- source for math calculation
|
||||
},
|
||||
window = {
|
||||
completion = cmp.config.window.bordered(),
|
||||
documentation = cmp.config.window.bordered(),
|
||||
},
|
||||
formatting = {
|
||||
fields = {'menu', 'abbr', 'kind'},
|
||||
format = function(entry, item)
|
||||
local menu_icon ={
|
||||
nvim_lsp = 'λ',
|
||||
vsnip = '⋗',
|
||||
buffer = 'Ω',
|
||||
path = '🖫',
|
||||
}
|
||||
item.menu = menu_icon[entry.source.name]
|
||||
return item
|
||||
end,
|
||||
},
|
||||
})
|
||||
Submodule nvim/pack/nvim/start/mini.nvim deleted from 432a0614f8
Submodule nvim/pack/nvim/start/nvim-lspconfig deleted from f47cd681d7
@@ -0,0 +1,17 @@
|
||||
[Unit]
|
||||
Description=Fluxo — high-performance Waybar module daemon
|
||||
Documentation=https://github.com/narl/fluxo-rs
|
||||
PartOf=graphical-session.target
|
||||
After=graphical-session.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=%h/.cargo/bin/fluxo daemon
|
||||
Restart=on-failure
|
||||
RestartSec=3
|
||||
|
||||
# Ensure the daemon can reach the user's D-Bus session and Wayland/Hyprland sockets.
|
||||
Slice=app-graphical.slice
|
||||
|
||||
[Install]
|
||||
WantedBy=graphical-session.target
|
||||
@@ -9,7 +9,7 @@ After=network-online.target
|
||||
# The command to start the mount.
|
||||
# Replace "my-remote:" and "/path/to/local/mount" accordingly.
|
||||
# The flags below are highly recommended for a good experience.
|
||||
ExecStart=rclone mount google_drive: %h/gdrive \
|
||||
ExecStart=rclone mount google_drive: %h/remote/gdrive \
|
||||
--vfs-cache-mode writes \
|
||||
--log-file /tmp/rclone.log \
|
||||
--log-level INFO
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
/home/narl/.config/systemd/user/fluxo.service
|
||||
@@ -9,7 +9,7 @@ After=network-online.target
|
||||
# The command to start the mount.
|
||||
# Replace "my-remote:" and "/path/to/local/mount" accordingly.
|
||||
# The flags below are highly recommended for a good experience.
|
||||
ExecStart=sshfs -f -p 420 narl@narl.io:/opt %h/narl_io
|
||||
ExecStart=sshfs -f -p 420 narl@narl.io:/opt %h/remote/narl.io
|
||||
|
||||
# The command to unmount gracefully.
|
||||
ExecStop=fusermount -u %h/narl_io
|
||||
|
||||
@@ -10,7 +10,7 @@ After=network-online.target
|
||||
# The command to start the mount.
|
||||
# Replace "my-remote:" and "/path/to/local/mount" accordingly.
|
||||
# The flags below are highly recommended for a good experience.
|
||||
ExecStart=sshfs -f narl@vh3.narl.io:/opt/minecraft_vaulthunters %h/vaulthunters_server/
|
||||
ExecStart=sshfs -f -p 420 narl@vh3.narl.io:/opt/minecraft_vaulthunters %h/remote/vh3.narl.io
|
||||
|
||||
# The command to unmount gracefully.
|
||||
ExecStop=fusermount -u %h/vaulthunters_server
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
/usr/lib/systemd/user/sunshine.service
|
||||
+140
-121
@@ -1,192 +1,211 @@
|
||||
// ~/.config/waybar/config.jsonc
|
||||
[
|
||||
{
|
||||
"name": "top",
|
||||
"layer": "top",
|
||||
"position": "top",
|
||||
// "output": "eDP-1",
|
||||
"height": 30,
|
||||
"modules-left": ["hyprland/workspaces"],
|
||||
"modules-center": [],
|
||||
"height": 39,
|
||||
"spacing": 4,
|
||||
"margin-top": 6,
|
||||
"margin-left": 10,
|
||||
"margin-right": 10,
|
||||
|
||||
"modules-left": [
|
||||
"group/spaces"
|
||||
],
|
||||
"modules-center": [
|
||||
"group/center"
|
||||
],
|
||||
"modules-right": [
|
||||
// "custom/pixelbuds_pro",
|
||||
"custom/network",
|
||||
"custom/mem",
|
||||
"custom/cpu",
|
||||
"custom/tlp",
|
||||
"custom/volume",
|
||||
"custom/mic",
|
||||
"tray",
|
||||
"clock"
|
||||
"group/powertray"
|
||||
],
|
||||
|
||||
// --- Standard Modules ---
|
||||
"hyprland/workspaces": {
|
||||
"format": "{icon}",
|
||||
"on-click": "activate"
|
||||
},
|
||||
"hyprland/window": {
|
||||
"format": "{}",
|
||||
"max-length": 35
|
||||
"max-length": 50
|
||||
},
|
||||
"clock": {
|
||||
"format": "{:%a %d %b %H:%M}",
|
||||
"format-alt": false,
|
||||
"on-click-right": "xdg-open https://calendar.proton.me/u/0/month &> /dev/null & disown",
|
||||
"tooltip": false,
|
||||
"tooltip": false
|
||||
},
|
||||
"cpu": {
|
||||
"format": "CPU: {usage}%",
|
||||
"tooltip": true,
|
||||
"interval": 1
|
||||
},
|
||||
"memory": {
|
||||
"format": "MEM: {used}/{total}GB",
|
||||
"interval": 3
|
||||
},
|
||||
"network": {
|
||||
"format-wifi": "{essid} ({signalStrength}%): {ipaddr}",
|
||||
"format-ethernet": "{ifname}: {ipaddr}",
|
||||
"format-disconnected": "Disconnected",
|
||||
"tooltip-format": "{ifname} via {gwaddr}"
|
||||
},
|
||||
"custom/volume": {
|
||||
"custom/mpris": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs vol",
|
||||
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
|
||||
"on-scroll-up": "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+",
|
||||
"on-scroll-down": "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-",
|
||||
"on-click-right": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs vol --cycle",
|
||||
"on-click-middle": "pavucontrol",
|
||||
"interval": 2
|
||||
},
|
||||
"custom/mic": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs mic",
|
||||
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle",
|
||||
"on-scroll-up": "wpctl set-volume @DEFAULT_AUDIO_SOURCE@ 5%+",
|
||||
"on-scroll-down": "wpctl set-volume @DEFAULT_AUDIO_SOURCE@ 5%-",
|
||||
"on-click-right": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs mic --cycle",
|
||||
"on-click-middle": "pavucontrol",
|
||||
"interval": 2
|
||||
},
|
||||
"custom/bluetooth-audio": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs bt",
|
||||
"interval": 3,
|
||||
"on-click": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs bt disconnect"
|
||||
"exec": "fluxo mpris",
|
||||
"on-click": "playerctl play-pause",
|
||||
"signal": 11
|
||||
},
|
||||
"tray": {
|
||||
"icon-size": 18,
|
||||
"spacing": 6
|
||||
"spacing": 10
|
||||
},
|
||||
"custom/power": {
|
||||
"format": "",
|
||||
"tooltip": false,
|
||||
"on-click": "~/.config/hypr/scripts/powermenu.sh & disown"
|
||||
},
|
||||
"custom/tlp": {
|
||||
"custom/dnd": {
|
||||
"format": "{}",
|
||||
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs power",
|
||||
"return-type": "json",
|
||||
"exec": "fluxo dnd",
|
||||
"on-click": "dunstctl set-paused toggle",
|
||||
"signal": 13,
|
||||
"interval": 5
|
||||
},
|
||||
"battery": {
|
||||
"states": {
|
||||
"warning": 30,
|
||||
"critical": 15
|
||||
"group/spaces": {
|
||||
"orientation": "horizontal",
|
||||
"modules": [
|
||||
"hyprland/workspaces",
|
||||
"hyprland/window"
|
||||
]
|
||||
},
|
||||
"format": "{capacity}%",
|
||||
"format-charging": "{capacity}%",
|
||||
"format-plugged": "{capacity}%",
|
||||
"format-alt": "{time} {icon}",
|
||||
"format-full": "{capacity}%",
|
||||
"format-icons": ["", "", "", "", ""]
|
||||
"group/powertray": {
|
||||
"orientation": "horizontal",
|
||||
"modules": [
|
||||
"custom/dnd",
|
||||
"tray",
|
||||
"custom/gamemode",
|
||||
"custom/power_status"
|
||||
]
|
||||
},
|
||||
"custom/pixelbuds_pro": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs buds",
|
||||
"interval": 5,
|
||||
"on-click": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs buds connect & disown",
|
||||
"on-click-right": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs buds cycle_anc & disown"
|
||||
"group/center": {
|
||||
"orientation": "horizontal",
|
||||
"modules": [
|
||||
"custom/mpris",
|
||||
"clock"
|
||||
]
|
||||
},
|
||||
"custom/gamemode": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs game",
|
||||
"on-click": "~/.config/hypr/scripts/gamemode.sh & disown",
|
||||
"interval": 1
|
||||
"exec": "fluxo game",
|
||||
"on-click": "~/.config/hypr/scripts/gamemode.sh",
|
||||
"signal": 7,
|
||||
"interval": 5
|
||||
},
|
||||
"custom/gpu-screen-recorder": {
|
||||
|
||||
"custom/power_status": {
|
||||
"format": "{} ",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/scripts/gpu-screen-recorder-status.sh",
|
||||
"on-click-right": "~/.config/hypr/scripts/replay-ctrl.sh save & disown",
|
||||
"on-click-middle": "nautilus ~/Videos/replay & disown",
|
||||
"on-click": "~/.config/waybar/scripts/toggle-replay.sh & disown",
|
||||
"interval": 1
|
||||
"exec": "fluxo power",
|
||||
"on-click": "~/.config/hypr/scripts/powermenu.sh & disown",
|
||||
"signal": 10,
|
||||
"interval": 5
|
||||
}
|
||||
},
|
||||
"custom/gpu": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs gpu",
|
||||
"on-click": "lact gui & disown",
|
||||
"interval": 3
|
||||
{
|
||||
"name": "bottom",
|
||||
"layer": "top",
|
||||
"position": "bottom",
|
||||
"height": 35,
|
||||
"spacing": 4,
|
||||
"margin-bottom": 6,
|
||||
"margin-left": 10,
|
||||
"margin-right": 10,
|
||||
|
||||
"modules-left": [
|
||||
"group/hardware"
|
||||
],
|
||||
"group/hardware": {
|
||||
"orientation": "horizontal",
|
||||
"modules": [
|
||||
"custom/sys",
|
||||
"custom/cpu",
|
||||
"custom/mem",
|
||||
"custom/disk-root",
|
||||
"custom/network",
|
||||
"custom/backlight"
|
||||
]
|
||||
},
|
||||
"modules-center": [
|
||||
],
|
||||
"modules-right": [
|
||||
"custom/bluetooth-audio",
|
||||
"custom/volume",
|
||||
"custom/mic"
|
||||
],
|
||||
|
||||
// --- fluxo System & Hardware ---
|
||||
"custom/sys": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs sys",
|
||||
"exec": "fluxo sys",
|
||||
"signal": 5,
|
||||
"interval": 5
|
||||
},
|
||||
"custom/cpu": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs cpu",
|
||||
"exec": "fluxo cpu",
|
||||
"on-click": "zenmonitor & disown",
|
||||
"interval": 3
|
||||
"signal": 2
|
||||
},
|
||||
"custom/mem": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs mem",
|
||||
"interval": 3
|
||||
"exec": "fluxo mem",
|
||||
"signal": 3
|
||||
},
|
||||
"custom/btrfs": {
|
||||
"custom/gpu": {
|
||||
"format": "{}",
|
||||
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs pool",
|
||||
"return-type": "json",
|
||||
"interval": 30
|
||||
"exec": "fluxo gpu",
|
||||
"signal": 4
|
||||
},
|
||||
"custom/network": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "fluxo net",
|
||||
"signal": 1
|
||||
},
|
||||
|
||||
"custom/disk-root": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs disk",
|
||||
"interval": 30
|
||||
"exec": "fluxo disk /",
|
||||
"signal": 6
|
||||
},
|
||||
"custom/disk-gdrive": {
|
||||
|
||||
// --- fluxo Audio & BT ---
|
||||
"custom/volume": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs disk ~/gdrive",
|
||||
"interval": 30
|
||||
"exec": "fluxo vol",
|
||||
"on-click": "fluxo vol mute",
|
||||
"on-scroll-up": "fluxo vol up 5",
|
||||
"on-scroll-down": "fluxo vol down 5",
|
||||
"on-click-right": "fluxo vol cycle",
|
||||
"on-click-middle": "pavucontrol",
|
||||
"signal": 8
|
||||
},
|
||||
"custom/disk-data": {
|
||||
"custom/mic": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs disk ~/data",
|
||||
"interval": 30
|
||||
"exec": "fluxo mic",
|
||||
"on-click": "fluxo mic mute",
|
||||
"on-scroll-up": "fluxo mic up 5",
|
||||
"on-scroll-down": "fluxo mic down 5",
|
||||
"on-click-right": "fluxo mic cycle",
|
||||
"on-click-middle": "pavucontrol",
|
||||
"signal": 8
|
||||
},
|
||||
"custom/disk-games": {
|
||||
"custom/bluetooth-audio": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs disk ~/games",
|
||||
"interval": 30
|
||||
"exec": "fluxo bt",
|
||||
"on-click": "fluxo bt menu",
|
||||
"on-click-right": "fluxo bt cycle",
|
||||
"on-click-middle": "fluxo bt cycle_mode",
|
||||
"signal": 9,
|
||||
"tooltip": true
|
||||
},
|
||||
"custom/network": {
|
||||
"exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs net",
|
||||
"interval": 2, // in seconds
|
||||
"custom/backlight": {
|
||||
"format": "{}",
|
||||
"return-type": "json"
|
||||
"return-type": "json",
|
||||
"exec": "fluxo backlight",
|
||||
"on-scroll-up": "brightnessctl s +10%",
|
||||
"on-scroll-down": "brightnessctl s 10%-",
|
||||
"signal": 12
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,202 +0,0 @@
|
||||
// ~/.config/waybar/config.jsonc
|
||||
{
|
||||
"layer": "top",
|
||||
"position": "top",
|
||||
"height": 36,
|
||||
"modules-left": [
|
||||
"hyprland/workspaces"
|
||||
],
|
||||
"modules-center": [
|
||||
],
|
||||
"modules-right": [
|
||||
// "custom/bluetooth-audio",
|
||||
// "custom/pixelbuds_pro",
|
||||
"custom/mem",
|
||||
"custom/cpu",
|
||||
"custom/gpu",
|
||||
"custom/disk-root",
|
||||
"custom/disk-gdrive",
|
||||
"custom/disk-data",
|
||||
"custom/disk-games",
|
||||
// "network",
|
||||
"custom/audio-output",
|
||||
"wireplumber",
|
||||
"tray",
|
||||
"custom/gpu-screen-recorder",
|
||||
"custom/gamemode",
|
||||
"clock"
|
||||
],
|
||||
"hyprland/workspaces": {
|
||||
"format": "{icon}",
|
||||
"on-click": "activate"
|
||||
},
|
||||
"hyprland/window": {
|
||||
"format": "{}",
|
||||
"max-length": 35
|
||||
},
|
||||
"clock": {
|
||||
"format": "{:%a %d %b %H:%M}",
|
||||
"format-alt": false,
|
||||
"on-click-right": "xdg-open https://calendar.proton.me/u/0/month &> /dev/null & disown",
|
||||
"tooltip": false,
|
||||
},
|
||||
"cpu": {
|
||||
"format": "CPU: {usage}%",
|
||||
"tooltip": true,
|
||||
"interval": 1
|
||||
},
|
||||
"memory": {
|
||||
"format": "MEM: {used}/{total}GB",
|
||||
"interval": 3
|
||||
},
|
||||
"network": {
|
||||
"format-wifi": "{essid} ({signalStrength}%): {ipaddr}",
|
||||
"format-ethernet": "{ifname}: {ipaddr}",
|
||||
"format-disconnected": "Disconnected",
|
||||
"tooltip-format": "{ifname} via {gwaddr}"
|
||||
},
|
||||
"wireplumber": {
|
||||
"format": "{volume}% {icon}",
|
||||
"format-muted": "--- ",
|
||||
"format-icons": {
|
||||
"headphone": "",
|
||||
"hands-free": "",
|
||||
"default": ["", "", ""]
|
||||
},
|
||||
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
|
||||
"on-click-right": "~/.config/waybar/scripts/audio.sh cycle",
|
||||
"on-click-middle": "pavucontrol",
|
||||
"scroll-step": 1
|
||||
},
|
||||
|
||||
"custom/bluetooth-audio": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/scripts/bluetooth_audio.sh",
|
||||
"interval": 3,
|
||||
"on-click": "~/.config/waybar/scripts/bluetooth_audio.sh disconnect & disown"
|
||||
},
|
||||
|
||||
"pulseaudio": {
|
||||
"format": "{icon} {volume}%",
|
||||
"format-muted": " Muted",
|
||||
"format-icons": {
|
||||
"headphone": "",
|
||||
"hands-free": "",
|
||||
"headset": "",
|
||||
"phone": "",
|
||||
"portable": "",
|
||||
"car": "",
|
||||
"default": ["", ""]
|
||||
},
|
||||
"on-click": "pavucontrol & disown"
|
||||
},
|
||||
"tray": {
|
||||
"icon-size": 18,
|
||||
"spacing": 10
|
||||
},
|
||||
"custom/power": {
|
||||
"format": "",
|
||||
"tooltip": false,
|
||||
"on-click": "~/.config/hypr/scripts/powermenu.sh & disown"
|
||||
},
|
||||
"custom/tlp": {
|
||||
"format": "{}",
|
||||
"exec": "~/.config/waybar/scripts/tlp-profile.sh",
|
||||
"return-type": "json",
|
||||
"interval": 5
|
||||
},
|
||||
"battery": {
|
||||
"states": {
|
||||
"warning": 30,
|
||||
"critical": 15
|
||||
},
|
||||
"format": "{capacity}%",
|
||||
"format-charging": "{capacity}%",
|
||||
"format-plugged": "{capacity}%",
|
||||
"format-alt": "{time} {icon}",
|
||||
"format-full": "{capacity}%",
|
||||
"format-icons": ["", "", "", "", ""]
|
||||
},
|
||||
"custom/pixelbuds_pro": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/scripts/pixelbuds_pro_control.sh",
|
||||
"interval": 5,
|
||||
"on-click": "~/.config/waybar/scripts/pixelbuds_pro_control.sh connect & disown",
|
||||
"on-click-right": "~/.config/waybar/scripts/pixelbuds_pro_control.sh cycle_anc & disown"
|
||||
},
|
||||
"custom/audio-output": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "/home/narl/.config/waybar/scripts/audio.sh show",
|
||||
"on-click": "/home/narl/.config/waybar/scripts/audio.sh cycle & disown",
|
||||
"interval": 1
|
||||
},
|
||||
"custom/gamemode": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/scripts/gamemode_status.sh",
|
||||
"on-click": "~/.config/hypr/scripts/gamemode.sh & disown",
|
||||
"interval": 1
|
||||
},
|
||||
"custom/gpu-screen-recorder": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/scripts/gpu-screen-recorder-status.sh",
|
||||
"on-click-right": "~/.config/hypr/scripts/replay-ctrl.sh save & disown",
|
||||
"on-click-middle": "nautilus ~/Videos/replay & disown",
|
||||
"on-click": "~/.config/waybar/scripts/toggle-replay.sh & disown",
|
||||
"interval": 1
|
||||
},
|
||||
"custom/gpu": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/scripts/gpu_info.sh",
|
||||
"on-click": "lact gui & disown",
|
||||
"interval": 3
|
||||
},
|
||||
"custom/cpu": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/scripts/cpu_info.sh",
|
||||
"on-click": "zenmonitor & disown",
|
||||
"interval": 3
|
||||
},
|
||||
"custom/mem": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/scripts/memory.sh",
|
||||
"interval": 3
|
||||
},
|
||||
"custom/btrfs": {
|
||||
"format": "{}",
|
||||
"exec": "~/.config/waybar/scripts/btrfs.sh",
|
||||
"return-type": "json",
|
||||
"interval": 30
|
||||
},
|
||||
"custom/disk-root": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/scripts/disk_info.sh /",
|
||||
"interval": 30
|
||||
},
|
||||
"custom/disk-gdrive": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/scripts/disk_info.sh ~/gdrive",
|
||||
"interval": 30
|
||||
},
|
||||
"custom/disk-data": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/scripts/disk_info.sh ~/data",
|
||||
"interval": 30
|
||||
},
|
||||
"custom/disk-games": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"exec": "~/.config/waybar/scripts/disk_info.sh ~/games",
|
||||
"interval": 30
|
||||
}
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
#!/bin/bash
|
||||
DEFAULT_SINK=$(pactl info | grep 'Default Sink' | cut -d ' ' -f3)
|
||||
DESCRIPTION=$(pactl list sinks | grep -A2 "Name: $DEFAULT_SINK" | grep "Description:" | cut -d ' ' -f2-)
|
||||
|
||||
|
||||
case $1 in
|
||||
cycle)
|
||||
SINKS=($(pactl list short sinks | awk '{print $2}'))
|
||||
NUM_SINKS=${#SINKS[@]}
|
||||
CURRENT_SINK=$(pactl info | grep 'Default Sink' | cut -d ' ' -f3)
|
||||
|
||||
for i in "${!SINKS[@]}"; do
|
||||
if [[ "${SINKS[$i]}" == "$CURRENT_SINK" ]]; then
|
||||
NEXT_INDEX=$(( (i + 1) % NUM_SINKS ))
|
||||
pactl set-default-sink "${SINKS[$NEXT_INDEX]}"
|
||||
exit 0
|
||||
fi
|
||||
done
|
||||
;;
|
||||
show)
|
||||
TEXT=$(echo "$DESCRIPTION" | cut -c -20)
|
||||
if [ -z "$DESCRIPTION" ]; then
|
||||
DESCRIPTION=$DEFAULT_SINK
|
||||
fi
|
||||
CLASS=""
|
||||
case $(pactl get-sink-mute @DEFAULT_SINK@ | awk '{print $2}') in
|
||||
yes)
|
||||
CLASS="muted"
|
||||
;;
|
||||
no)
|
||||
CLASS="unmuted"
|
||||
;;
|
||||
esac
|
||||
|
||||
printf '{"text": "%s", "tooltip": "%s", "class": "%s"}' "$TEXT" "$DESCRIPTION" "$CLASS"
|
||||
;;
|
||||
*)
|
||||
echo "usage audio.sh {cycle|show}"
|
||||
;;
|
||||
esac
|
||||
@@ -1,118 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
bt-audio-info() {
|
||||
# Check if a MAC address was provided as the first argument.
|
||||
if [ -z "$1" ]; then
|
||||
echo "Usage: $0 <MAC_ADDRESS>"
|
||||
echo "Example: $0 00:11:22:33:AA:BB"
|
||||
exit 1
|
||||
fi
|
||||
MAC_ADDRESS="$1"
|
||||
|
||||
# --- Main Logic ---
|
||||
|
||||
# Construct the PipeWire sink name from the MAC address.
|
||||
# The format is typically: bluez_output.XX_XX_XX_XX_XX_XX.a2dp_sink
|
||||
# We replace colons with underscores for the format.
|
||||
SINK_IDENTIFIER="bluez_output.$(echo "$MAC_ADDRESS" | tr ':' '_')"
|
||||
|
||||
# Use pactl to get the full details for all sinks, then find the one
|
||||
# that contains our device's identifier. We use awk to print the
|
||||
# entire block of text for that specific sink.
|
||||
# We check for a partial match on the sink identifier because the profile
|
||||
# (e.g., .a2dp_sink) can change.
|
||||
sink_info=$(pactl list sinks | awk -v id="$SINK_IDENTIFIER" '/Sink #/ {p=0} $0 ~ "Name: " id {p=1} p')
|
||||
|
||||
# If sink_info is empty, the device might not be an audio sink or isn't connected.
|
||||
if [ -z "$sink_info" ]; then
|
||||
echo "Error: Could not find an active audio sink for MAC ${MAC_ADDRESS}"
|
||||
echo "Please ensure the device is connected and is an audio output device."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Get the full block of info for the device from bluetoothctl.
|
||||
device_info=$(bluetoothctl info "$MAC_ADDRESS")
|
||||
|
||||
# --- Parse Information ---
|
||||
|
||||
# Parse bluetoothctl output for general device details.
|
||||
alias=$(echo "$device_info" | rg "Alias:" | cut -d ' ' -f 2-)
|
||||
trusted=$(echo "$device_info" | rg "Trusted:" | awk '{print $2}')
|
||||
battery_raw=$(echo "$device_info" | rg "Battery Percentage:" | awk -F'[()]' '{print $2}')
|
||||
|
||||
# Parse pactl output for audio-specific details.
|
||||
volume=$(echo "$sink_info" | rg "Volume:" | head -n1 | awk '{print $5}')
|
||||
codec=$(echo "$sink_info" | rg -e 'bluetooth.codec|api.bluez5.codec' | awk -F'"' '{print $2}')
|
||||
|
||||
# --- Build and Display Compact Output ---
|
||||
|
||||
# Build the output string with all the information.
|
||||
output_string="${alias} | MAC: ${MAC_ADDRESS}\n"
|
||||
output_string+="Trusted: ${trusted}"
|
||||
|
||||
# Append battery info if available, otherwise show N/A.
|
||||
if [ -n "$battery_raw" ]; then
|
||||
output_string+=" | Bat: ${battery_raw}%"
|
||||
else
|
||||
output_string+=" | Bat: N/A"
|
||||
fi
|
||||
|
||||
output_string+=" | Vol: ${volume} | Codec: ${codec:-N/A}"
|
||||
|
||||
# Print the final, single-line string.
|
||||
echo "$output_string"
|
||||
}
|
||||
|
||||
# Find the MAC address of the first connected device that is an audio sink
|
||||
find_audio_device() {
|
||||
default_sink_name=$(pactl get-default-sink)
|
||||
|
||||
# Check if the default sink is a Bluetooth device. Their names typically
|
||||
# start with "bluez_output.". If not, print a message and exit.
|
||||
if [[ "$default_sink_name" == bluez_output* ]]; then
|
||||
# Extract the MAC address from the sink name.
|
||||
# The format is bluez_output.XX_XX_XX_XX_XX_XX.profile
|
||||
# We extract the middle part and replace underscores with colons.
|
||||
mac_with_underscores=$(echo "$default_sink_name" | cut -d '.' -f 2)
|
||||
mac=$(echo "$mac_with_underscores" | tr '_' ':')
|
||||
echo "$mac"
|
||||
return
|
||||
fi
|
||||
|
||||
# else look for the first bluetooth device that provides a sink
|
||||
bluetoothctl devices Connected | rg '^Device ' | awk '{print $2}' | while read -r mac;
|
||||
do
|
||||
# Check if the device provides the "Audio Sink" service
|
||||
if bluetoothctl info "$mac" | rg -q "0000110b-0000-1000-8000-00805f9b34fb"; then
|
||||
echo "$mac"
|
||||
# If you only want the first audio device found, you can 'break' or 'exit' here.
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# If the script is called with "disconnect"
|
||||
if [ "$1" == "disconnect" ]; then
|
||||
device_mac=$(find_audio_device)
|
||||
if [ -n "$device_mac" ]; then
|
||||
bluetoothctl disconnect "$device_mac"
|
||||
fi
|
||||
echo "{}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Main logic to display the device name
|
||||
device_mac=$(find_audio_device)
|
||||
|
||||
if [ -n "$device_mac" ]; then
|
||||
# Get the device alias (name)
|
||||
device_name=$(bluetoothctl info "$device_mac" | rg "Alias:" | cut -d ' ' -f 2-)
|
||||
# Output in Waybar's JSON format
|
||||
tooltip=$(bt-audio-info $device_mac)
|
||||
echo "{\"text\": \"$device_name <span size='large'></span>\", \"tooltip\": \"$tooltip\"}"
|
||||
else
|
||||
# Output empty string when no device is connected
|
||||
echo "{}"
|
||||
fi
|
||||
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Get BTRFS filesystems
|
||||
btrfs_filesystems=$(df -hT | grep btrfs)
|
||||
|
||||
# Initialize variables
|
||||
total_used=0
|
||||
total_size=0
|
||||
|
||||
# Process each BTRFS filesystem
|
||||
while read -r line; do
|
||||
size_str=$(echo "$line" | awk '{print $3}')
|
||||
used_str=$(echo "$line" | awk '{print $4}')
|
||||
|
||||
size=$(echo "$size_str" | sed 's/[GT]//')
|
||||
used=$(echo "$used_str" | sed 's/[GT]//')
|
||||
|
||||
if [[ $size_str == *T ]]; then
|
||||
size=$(awk -v s="$size" 'BEGIN {print s*1024}')
|
||||
fi
|
||||
if [[ $used_str == *T ]]; then
|
||||
used=$(awk -v u="$used" 'BEGIN {print u*1024}')
|
||||
fi
|
||||
|
||||
total_size=$(awk -v total="$total_size" -v size="$size" 'BEGIN {print total+size}')
|
||||
total_used=$(awk -v total="$total_used" -v used="$used" 'BEGIN {print total+used}')
|
||||
|
||||
done <<< "$btrfs_filesystems"
|
||||
|
||||
# Calculate usage percentage
|
||||
usage_percentage=$(awk -v used="$total_used" -v total="$total_size" 'BEGIN {printf "%.0f", (used/total)*100}')
|
||||
|
||||
# Set class based on usage
|
||||
if [ "$usage_percentage" -gt 95 ]; then
|
||||
class="max"
|
||||
elif [ "$usage_percentage" -gt 80 ]; then
|
||||
class="high"
|
||||
else
|
||||
class="normal"
|
||||
fi
|
||||
|
||||
text="$(printf "%.0f" $total_used)G / $(printf "%.0f" $total_size)G"
|
||||
|
||||
# Manually construct the JSON output
|
||||
echo "{\"text\": \"$text\", \"tooltip\": \"\", \"class\": \"$class\"}"
|
||||
@@ -1,22 +0,0 @@
|
||||
#!/bin/bash
|
||||
USAGE=$(mpstat 1 1 | awk '/Average:/ {print 100 - $12}')
|
||||
TEMP=$(cat /sys/class/hwmon/hwmon6/temp1_input)
|
||||
TEXT="$(printf "%.1f" $(echo "$USAGE"))% $(printf "%.1f" $(echo "scale=2; $TEMP"/1000 | bc -l))C"
|
||||
CPU=$(lscpu | grep 'Model name' | awk -F': ' '{print $2}' | sed 's/^[ \t]*//')
|
||||
# TOOLTIP=$(ps -eo %cpu,comm --sort=-%cpu | head -n 6 | sed '1d' | awk '{output = output sprintf("%.1f%%\t%s\\n", $1, $2)} END {printf "%s", output}')
|
||||
# TOOLTIP=$(ps -eo %cpu,comm --sort=-%cpu | head -n 6 | sed '1d' | awk -v ncores=$(nproc) '{printf "%.1f%%\t%s\n", $1/ncores, $2}')
|
||||
# TOOLTIP=$(ps -eo %cpu,comm --sort=-%cpu | head -n 6 | sed '1d' | awk -v ncores=$(nproc) '{printf "%.1f%%\t%s\\n", $1/ncores, $2}')
|
||||
# TOOLTIP=$(top -b -n 1 | sed '1,7d' | head -n 5 | awk '{output = output sprintf("%.1f%%\t%s\\n", $9, $12)} END {printf "%s", output}')
|
||||
|
||||
CLASS=""
|
||||
|
||||
if (( $(echo "$USAGE > 95" | bc -l) )); then
|
||||
CLASS="max"
|
||||
elif (( $(echo "$USAGE > 75" | bc -l) )); then
|
||||
CLASS="high"
|
||||
else
|
||||
CLASS="normal"
|
||||
fi
|
||||
|
||||
# echo "{\"text\":\"CPU: $TEXT\", \"tooltip\": \"$TOOLTIP\", \"class\":\"$CLASS\"}"
|
||||
echo "{\"text\":\"CPU: $TEXT\", \"class\":\"$CLASS\"}"
|
||||
@@ -1,45 +0,0 @@
|
||||
#!/bin/bash
|
||||
DEFAULT_SOURCE=$(pactl info | grep 'Default Source' | cut -d ' ' -f3)
|
||||
DESCRIPTION=$(pactl list sources | grep -A2 "Name: $DEFAULT_SOURCE" | grep "Description:" | cut -d ' ' -f2-)
|
||||
|
||||
|
||||
case $1 in
|
||||
cycle)
|
||||
# Filter out monitor sources
|
||||
SOURCES=($(pactl list short sources | awk '{print $2}' | grep -v ".monitor"))
|
||||
NUM_SOURCES=${#SOURCES[@]}
|
||||
CURRENT_SOURCE=$(pactl info | grep 'Default Source' | cut -d ' ' -f3)
|
||||
|
||||
for i in "${!SOURCES[@]}"; do
|
||||
if [[ "${SOURCES[$i]}" == "$CURRENT_SOURCE" ]]; then
|
||||
NEXT_INDEX=$(( (i + 1) % NUM_SOURCES ))
|
||||
pactl set-default-source "${SOURCES[$NEXT_INDEX]}"
|
||||
exit 0
|
||||
fi
|
||||
done
|
||||
# If current source was a monitor or not in list, just pick the first one
|
||||
if [ $NUM_SOURCES -gt 0 ]; then
|
||||
pactl set-default-source "${SOURCES[0]}"
|
||||
fi
|
||||
;;
|
||||
show)
|
||||
TEXT=$(echo "$DESCRIPTION" | cut -c -20)
|
||||
if [ -z "$DESCRIPTION" ]; then
|
||||
DESCRIPTION=$DEFAULT_SOURCE
|
||||
fi
|
||||
CLASS=""
|
||||
case $(pactl get-source-mute @DEFAULT_SOURCE@ | awk '{print $2}') in
|
||||
yes)
|
||||
CLASS="muted"
|
||||
;;
|
||||
no)
|
||||
CLASS="unmuted"
|
||||
;;
|
||||
esac
|
||||
|
||||
printf '{"text": "%s", "tooltip": "%s", "class": "%s"}' "$TEXT" "$DESCRIPTION" "$CLASS"
|
||||
;;
|
||||
*)
|
||||
echo "usage cycle_input.sh {cycle|show}"
|
||||
;;
|
||||
esac
|
||||
@@ -1,31 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
echo "Usage: $0 <mountpoint>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
MOUNTPOINT=$1
|
||||
|
||||
# Get disk usage info
|
||||
USED=$(df -h --output=used "$MOUNTPOINT" | sed '1d' | awk '{print $1}')
|
||||
TOTAL=$(df -h --output=size "$MOUNTPOINT" | sed '1d' | awk '{print $1}')
|
||||
PERCENTAGE=$(df --output=pcent "$MOUNTPOINT" | sed '1d' | tr -d '%' | awk '{print $1}')
|
||||
|
||||
# Set class based on usage
|
||||
CLASS="normal"
|
||||
if [ "$PERCENTAGE" -gt 95 ]; then
|
||||
CLASS="max"
|
||||
elif [ "$PERCENTAGE" -gt 80 ]; then
|
||||
CLASS="high"
|
||||
fi
|
||||
|
||||
# Create tooltip with more details
|
||||
TOOLTIP=$(df -h "$MOUNTPOINT" | sed '1d' | awk '{printf "Used: %s\nTotal: %s\nFree: %s", $3, $2, $4}')
|
||||
|
||||
# Output JSON for Waybar using jq
|
||||
jq -n -c \
|
||||
--arg text "$1 $USED/$TOTAL" \
|
||||
--arg tooltip "$TOOLTIP" \
|
||||
--arg class "$CLASS" \
|
||||
'{"text": $text, "tooltip": $tooltip, "class": $class}'
|
||||
@@ -1,10 +0,0 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
FORMAT_ACTIVATED="<span size='large'></span>"
|
||||
FORMAT_DEACTIVATED="<span size='large'></span>"
|
||||
HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}')
|
||||
if [ "$HYPRGAMEMODE" = 1 ] ; then
|
||||
printf "{\"text\": \"$FORMAT_DEACTIVATED\", \"tooltip\": \"Gamemode deactivated\"}"
|
||||
else
|
||||
printf "{\"text\": \"$FORMAT_ACTIVATED\", \"tooltip\": \"Gamemode activated\", \"class\": \"active\"}"
|
||||
fi
|
||||
@@ -1,22 +0,0 @@
|
||||
#!/bin/bash
|
||||
USAGE=$(cat /sys/class/drm/card1/device/gpu_busy_percent)
|
||||
MEM_USED=$(cat /sys/class/drm/card1/device/mem_info_vram_used)
|
||||
MEM_TOTAL=$(cat /sys/class/drm/card1/device/mem_info_vram_total)
|
||||
EDGE_TEMP=$(cat /sys/class/drm/card1/device/hwmon/hwmon2/temp1_input)
|
||||
JUNC_TEMP=$(cat /sys/class/drm/card1/device/hwmon/hwmon2/temp2_input)
|
||||
MEM_TEMP=$(cat /sys/class/drm/card1/device/hwmon/hwmon2/temp3_input)
|
||||
GPU=$(/opt/rocm/bin/rocm-smi --showproductname | grep "Card Series" | awk -F':' '{print $3}' | xargs)
|
||||
TEXT="$USAGE% $(printf "%.1f" $(echo "scale=2; $MEM_USED/1024/1024/1024" | bc -l))/$(printf "%.1f" $(echo "scale=2; $MEM_TOTAL/1024/1024/1024" | bc -l))GB $(printf "%.1f" $(echo "scale=2; $EDGE_TEMP/1000" | bc -l))/$(printf "%.1f" $(echo "scale=2; $MEM_TEMP/1000" | bc -l))C"
|
||||
RATIO=$(echo "$MEM_USED/ $MEM_TOTAL" | bc -l)
|
||||
|
||||
CLASS=""
|
||||
|
||||
if (( $(echo "$USAGE > 95" | bc -l) )); then
|
||||
CLASS="max"
|
||||
elif (( $(echo "$USAGE > 75" | bc -l) )); then
|
||||
CLASS="high"
|
||||
else
|
||||
CLASS="normal"
|
||||
fi
|
||||
|
||||
echo "{\"text\":\"GPU: $TEXT\", \"tooltip\": \"$GPU\", \"class\":\"$CLASS\"}"
|
||||
@@ -1,19 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# TOOLTIP=$(ps -eo rss,comm --sort=-rss | head -n 6 | sed '1d' | awk '{output = output sprintf("%.2f GB\t%s\\n", $1/1024/1024, $2)} END {printf "%s", output}')
|
||||
TOTAL=$(awk '/MemTotal/ {printf "%.2f\n", $2/1024/1024}' /proc/meminfo)
|
||||
USED=$(awk '/MemTotal/ {total=$2} /MemAvailable/ {available=$2} END {printf "%.2f\n", (total-available)/1024/1024}' /proc/meminfo)
|
||||
RATIO=$(echo "$USED/ $TOTAL" | bc -l)
|
||||
|
||||
CLASS=""
|
||||
|
||||
if (( $(echo "$RATIO> 95" | bc -l) )); then
|
||||
CLASS="max"
|
||||
elif (( $(echo "$RATIO> 75" | bc -l) )); then
|
||||
CLASS="high"
|
||||
else
|
||||
CLASS="normal"
|
||||
fi
|
||||
|
||||
# printf '{"text": "%s/%sGB", "tooltip": "%s", "class": "%s"}' "$USED" "$TOTAL" "$TOOLTIP" "$CLASS"
|
||||
printf '{"text": "%s/%sGB", "class": "%s"}' "$USED" "$TOTAL" "$CLASS"
|
||||
@@ -1,62 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Path for the temporary file to store previous stats
|
||||
STATS_FILE="/tmp/waybar_net_stats"
|
||||
|
||||
# Find the primary default network interface by sorting routing metrics.
|
||||
# This correctly prioritizes a VPN connection when it's active.
|
||||
INTERFACE_INFO=$(ip route list | grep '^default' | sort -k 9 -n | head -n1)
|
||||
INTERFACE=$(echo "$INTERFACE_INFO" | awk '{print $5}')
|
||||
|
||||
# Exit if no active interface is found
|
||||
if [ -z "$INTERFACE" ]; then
|
||||
echo "{\"text\": \"No connection\"}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Get the IP address for the interface
|
||||
IP_ADDR=$(ip -4 addr show "$INTERFACE" | grep -oP 'inet \K[\d.]+')
|
||||
|
||||
# Get current time and byte counts
|
||||
TIME_NOW=$(date +%s)
|
||||
RX_BYTES_NOW=$(cat "/sys/class/net/$INTERFACE/statistics/rx_bytes")
|
||||
TX_BYTES_NOW=$(cat "/sys/class/net/$INTERFACE/statistics/tx_bytes")
|
||||
|
||||
# Initialize speeds to 0
|
||||
RX_MBPS="0.00"
|
||||
TX_MBPS="0.00"
|
||||
|
||||
# Read previous values if the stats file exists
|
||||
if [ -f "$STATS_FILE" ]; then
|
||||
source "$STATS_FILE" # This loads PREV_TIME, PREV_RX_BYTES, PREV_TX_BYTES
|
||||
fi
|
||||
|
||||
# Calculate speed if we have previous data and time has passed
|
||||
if [ -n "$PREV_TIME" ] && [ "$TIME_NOW" -gt "$PREV_TIME" ]; then
|
||||
TIME_DIFF=$((TIME_NOW - PREV_TIME))
|
||||
|
||||
RX_BPS=$(( (RX_BYTES_NOW - PREV_RX_BYTES) / TIME_DIFF ))
|
||||
TX_BPS=$(( (TX_BYTES_NOW - PREV_TX_BYTES) / TIME_DIFF ))
|
||||
|
||||
# Using printf for better formatting (forces two decimal places)
|
||||
RX_MBPS=$(printf "%.2f" "$(echo "$RX_BPS / 1024 / 1024" | bc -l)")
|
||||
TX_MBPS=$(printf "%.2f" "$(echo "$TX_BPS / 1024 / 1024" | bc -l)")
|
||||
fi
|
||||
|
||||
# Save current values for the next run
|
||||
echo "PREV_TIME=$TIME_NOW" > "$STATS_FILE"
|
||||
echo "PREV_RX_BYTES=$RX_BYTES_NOW" >> "$STATS_FILE"
|
||||
echo "PREV_TX_BYTES=$TX_BYTES_NOW" >> "$STATS_FILE"
|
||||
|
||||
# Format the main output string
|
||||
OUTPUT_TEXT="$INTERFACE ($IP_ADDR): ${RX_MBPS} MB/s ${TX_MBPS} MB/s"
|
||||
|
||||
# Prepend a VPN icon if a common VPN interface is active
|
||||
case "$INTERFACE" in
|
||||
tun*|wg*|ppp*|pvpn*)
|
||||
OUTPUT_TEXT=" $OUTPUT_TEXT"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Output JSON for Waybar
|
||||
echo "{\"text\": \"$OUTPUT_TEXT\"}"
|
||||
@@ -1,126 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# --- CONFIGURATION ---
|
||||
# Your Pixel Buds Pro's MAC Address
|
||||
MAC_ADDRESS="B4:23:A2:09:D3:53"
|
||||
# --- END CONFIGURATION ---
|
||||
|
||||
not_connected() {
|
||||
printf "{\"text\": \"<span size='large'></span>\", \"tooltip\": \"Pixel Buds Pro 2 not connected\", \"class\": \"disconnected\"}\n"
|
||||
exit
|
||||
}
|
||||
|
||||
# This function gets the current status and formats it for Waybar.
|
||||
get_status() {
|
||||
# Get all info from pbpctrl in one go. Redirect errors to null.
|
||||
battery_output=$(pbpctrl show battery 2>/dev/null)
|
||||
|
||||
# Fallback: If pbpctrl fails or returns 'unknown', hide the module.
|
||||
if [[ $? -ne 0 || -z "$battery_output" ]]; then
|
||||
not_connected
|
||||
fi
|
||||
|
||||
# --- PARSE BATTERY INFO ---
|
||||
left_bud=$(echo "$battery_output" | grep "left bud:" | awk '{print $3}')
|
||||
right_bud=$(echo "$battery_output" | grep "right bud:" | awk '{print $3}')
|
||||
|
||||
if ([[ "$left_bud" == "unknown" ]] && [[ "$right_bud" == "unknown" ]]) || \
|
||||
[[ -z "$left_bud" && -z "$right_bud" ]]; then
|
||||
echo "{}"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ "$left_bud" == "unknown" ]]; then
|
||||
left_display="L: ---"
|
||||
else
|
||||
left_display="L: $left_bud"
|
||||
fi
|
||||
|
||||
if [[ "$right_bud" == "unknown" ]]; then
|
||||
right_display="R: ---"
|
||||
else
|
||||
right_display="R: $right_bud"
|
||||
fi
|
||||
|
||||
# --- PARSE ANC INFO ---
|
||||
current_mode=$(pbpctrl get anc 2>/dev/null)
|
||||
|
||||
case "$current_mode" in
|
||||
"active")
|
||||
anc_icon="ANC"
|
||||
class="anc-active"
|
||||
;;
|
||||
"aware")
|
||||
anc_icon="Aware"
|
||||
class="anc-aware"
|
||||
;;
|
||||
"off")
|
||||
anc_icon="Off"
|
||||
class="anc-off"
|
||||
;;
|
||||
*)
|
||||
anc_icon="?"
|
||||
class="anc-unknown"
|
||||
;;
|
||||
esac
|
||||
|
||||
# --- FORMAT OUTPUT ---
|
||||
printf '{"text": "%s | %s | %s", "tooltip": "Pixel Buds Pro 2", "class": "%s"}\n' \
|
||||
"$left_display" "$right_display" "$anc_icon" "$class"
|
||||
exit
|
||||
}
|
||||
|
||||
status() {
|
||||
# First, check if the device is connected using bluetoothctl.
|
||||
if bluetoothctl info "$MAC_ADDRESS" | grep -q "Connected: yes"; then
|
||||
# --- DEVICE IS CONNECTED ---
|
||||
get_status
|
||||
else
|
||||
# --- DEVICE IS NOT CONNECTED ---
|
||||
not_connected
|
||||
fi
|
||||
}
|
||||
|
||||
# Handle click actions passed from Waybar.
|
||||
case "$1" in
|
||||
cycle_anc)
|
||||
current_mode=$(pbpctrl get anc 2>/dev/null)
|
||||
next_mode="active"
|
||||
case "$current_mode" in
|
||||
active)
|
||||
next_mode="aware"
|
||||
;;
|
||||
aware)
|
||||
next_mode="off"
|
||||
;;
|
||||
off)
|
||||
next_mode="active"
|
||||
;;
|
||||
esac
|
||||
pbpctrl set anc "$next_mode"
|
||||
sleep 0.1
|
||||
exit
|
||||
;;
|
||||
connect)
|
||||
if bluetoothctl info "$MAC_ADDRESS" | grep -q "Connected: yes"; then
|
||||
notify-send "Pixel Buds Pro 2 are already connected"
|
||||
exit
|
||||
else
|
||||
bluetoothctl connect "$MAC_ADDRESS"
|
||||
exit
|
||||
fi
|
||||
;;
|
||||
disconnect)
|
||||
if bluetoothctl info "$MAC_ADDRESS" | grep -q "Connected: yes"; then
|
||||
bluetoothctl disconnect "$MAC_ADDRESS"
|
||||
exit
|
||||
else
|
||||
notify-send "Pixel Buds Pro 2 aren't connected"
|
||||
exit
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
status
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
@@ -1,54 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# --- Configuration ---
|
||||
CRITICAL_THRESHOLD=15
|
||||
WARNING_THRESHOLD=50
|
||||
# ---------------------
|
||||
|
||||
# Get the battery path from upower
|
||||
battery_path=$(upower -e | grep 'BAT')
|
||||
|
||||
# Handle case where no battery is found
|
||||
if [ -z "$battery_path" ]; then
|
||||
# Check if we are on AC power anyway
|
||||
if [[ $(tlp-stat -s | grep "Power source" | awk '{print $4}') == "AC" ]]; then
|
||||
printf '{"text": "", "tooltip": "AC Power (No Battery)", "class": "ac"}\n'
|
||||
else
|
||||
printf '{"text": "", "tooltip": "Error: Battery not found", "class": "unknown"}\n'
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Get battery percentage and state
|
||||
percentage=$(upower -i "$battery_path" | grep "percentage" | awk '{print $2}' | tr -d '%')
|
||||
state=$(upower -i "$battery_path" | grep "state" | awk '{print $2}')
|
||||
tlp_profile=$(tlp-stat -s | grep "Power source" | awk '{print $4}')
|
||||
|
||||
# Set icon, class, and tooltip based on state and percentage
|
||||
if [ "$state" == "charging" ] || [ "$tlp_profile" == "AC" ]; then
|
||||
icon=""
|
||||
class="charging"
|
||||
tooltip="TLP: AC | Charging at ${percentage}%"
|
||||
elif [ "$state" == "discharging" ]; then
|
||||
tooltip="TLP: Battery | Discharging at ${percentage}%"
|
||||
if [ "$percentage" -le "$CRITICAL_THRESHOLD" ]; then
|
||||
icon="" # Very low
|
||||
class="critical"
|
||||
elif [ "$percentage" -le "$WARNING_THRESHOLD" ]; then
|
||||
icon="" # Low
|
||||
class="warning"
|
||||
elif [ "$percentage" -le 85 ]; then
|
||||
icon="" # Healthy
|
||||
class="bat"
|
||||
else
|
||||
icon="" # Full
|
||||
class="bat"
|
||||
fi
|
||||
else # Fallback for "fully-charged", "pending-charge", etc.
|
||||
icon=""
|
||||
class="charging"
|
||||
tooltip="TLP: AC | Fully Charged at ${percentage}%"
|
||||
fi
|
||||
|
||||
# Output JSON for Waybar
|
||||
printf '{"text": "%s%% %s", "tooltip": "%s", "class": "%s"}\n' "$percentage" "$icon" "$tooltip" "$class"
|
||||
@@ -1,37 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
TYPE=$1 # "mic" for source, empty for sink
|
||||
|
||||
if [ "$TYPE" == "mic" ]; then
|
||||
TARGET="@DEFAULT_AUDIO_SOURCE@"
|
||||
else
|
||||
TARGET="@DEFAULT_AUDIO_SINK@"
|
||||
fi
|
||||
|
||||
# Get volume and mute status from wpctl
|
||||
OUTPUT=$(wpctl get-volume $TARGET)
|
||||
VOLUME_RAW=$(echo "$OUTPUT" | awk '{print $2}')
|
||||
VOLUME=$(echo "$VOLUME_RAW * 100 / 1" | bc)
|
||||
MUTE=$(echo "$OUTPUT" | grep -c "MUTED")
|
||||
|
||||
if [ "$MUTE" -eq 1 ]; then
|
||||
if [ "$TYPE" == "mic" ]; then
|
||||
ICON=""
|
||||
else
|
||||
ICON=""
|
||||
fi
|
||||
printf '{"text": "%s", "class": "muted", "percentage": %d}' "$ICON" "$VOLUME"
|
||||
else
|
||||
if [ "$TYPE" == "mic" ]; then
|
||||
ICON=""
|
||||
else
|
||||
if [ "$VOLUME" -le 30 ]; then
|
||||
ICON=""
|
||||
elif [ "$VOLUME" -le 60 ]; then
|
||||
ICON=""
|
||||
else
|
||||
ICON=""
|
||||
fi
|
||||
fi
|
||||
printf '{"text": "%d%% %s", "class": "unmuted", "percentage": %d}' "$VOLUME" "$ICON" "$VOLUME"
|
||||
fi
|
||||
@@ -1,64 +0,0 @@
|
||||
import subprocess
|
||||
import json
|
||||
import sys
|
||||
|
||||
def get_wpctl_status(target):
|
||||
try:
|
||||
output = subprocess.check_output(["wpctl", "get-volume", target], text=True)
|
||||
parts = output.strip().split()
|
||||
if len(parts) < 2:
|
||||
return 0, False
|
||||
vol = int(float(parts[1]) * 100)
|
||||
muted = "[MUTED]" in output
|
||||
return vol, muted
|
||||
except:
|
||||
return 0, False
|
||||
|
||||
def get_pactl_description(target_type):
|
||||
try:
|
||||
cmd_info = ["pactl", "info"]
|
||||
info = subprocess.check_output(cmd_info, text=True)
|
||||
search_key = "Default Sink" if target_type == "sink" else "Default Source"
|
||||
default_dev = next(line.split(": ")[1] for line in info.splitlines() if search_key in line)
|
||||
|
||||
cmd_list = ["pactl", "list", "sinks" if target_type == "sink" else "sources"]
|
||||
output = subprocess.check_output(cmd_list, text=True)
|
||||
|
||||
blocks = output.split("\n\n")
|
||||
for block in blocks:
|
||||
if f"Name: {default_dev}" in block:
|
||||
for line in block.splitlines():
|
||||
if "Description:" in line:
|
||||
desc = line.split(": ")[1].strip()
|
||||
# Add a small hint if it is a monitor, though cycle_input should prevent it
|
||||
if ".monitor" in default_dev:
|
||||
return "Monitor: " + desc[:11]
|
||||
return desc[:20]
|
||||
except:
|
||||
pass
|
||||
return "Unknown"
|
||||
|
||||
try:
|
||||
target_type = sys.argv[1] if len(sys.argv) > 1 else "sink"
|
||||
target = "@DEFAULT_AUDIO_SINK@" if target_type == "sink" else "@DEFAULT_AUDIO_SOURCE@"
|
||||
|
||||
vol, muted = get_wpctl_status(target)
|
||||
name = get_pactl_description(target_type)
|
||||
|
||||
if muted:
|
||||
icon = "" if target_type == "sink" else ""
|
||||
text = f"{name} {icon}"
|
||||
cls = "muted"
|
||||
else:
|
||||
if target_type == "sink":
|
||||
if vol <= 30: icon = ""
|
||||
elif vol <= 60: icon = ""
|
||||
else: icon = ""
|
||||
else:
|
||||
icon = ""
|
||||
text = f"{name} {vol}% {icon}"
|
||||
cls = "unmuted"
|
||||
|
||||
print(json.dumps({"text": text, "class": cls, "percentage": vol}))
|
||||
except Exception as e:
|
||||
print(json.dumps({"text": "Error", "class": "error"}))
|
||||
+177
-214
@@ -1,255 +1,218 @@
|
||||
/* ~/.config/waybar/style.css */
|
||||
@import "./catppuccin-waybar/themes/mocha.css";
|
||||
|
||||
/* ==========================================================================
|
||||
Global Reset & Bar
|
||||
========================================================================== */
|
||||
* {
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
border-radius: 12px;
|
||||
min-height: 0;
|
||||
font-family: JetBrainsMono Nerd Font;
|
||||
font-size: 13px;
|
||||
font-family: "JetBrainsMono Nerd Font", sans-serif;
|
||||
font-size: 12px;
|
||||
transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
|
||||
}
|
||||
|
||||
window#waybar {
|
||||
background-color: alpha(@base, 0.4);
|
||||
padding: 4px;
|
||||
transition-property: background-color;
|
||||
transition-duration: 0.5s;
|
||||
background-color: transparent;
|
||||
color: @text;
|
||||
}
|
||||
|
||||
window#waybar.hidden {
|
||||
opacity: 0.5;
|
||||
/* ==========================================================================
|
||||
Base Islands (Containers)
|
||||
========================================================================== */
|
||||
/* Groups and standalone modules receive the floating island styling */
|
||||
#spaces,
|
||||
#powertray,
|
||||
#hardware,
|
||||
#center,
|
||||
#custom-bluetooth-audio,
|
||||
#custom-volume,
|
||||
#custom-buds,
|
||||
#custom-mic {
|
||||
background-color: alpha(@surface0, 0.8);
|
||||
margin: 4px 6px;
|
||||
padding: 4px 16px;
|
||||
border: 1px solid alpha(@surface1, 0.5);
|
||||
box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.15);
|
||||
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 {
|
||||
padding: 0px 8px; /* Override the inner item padding */
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
all: initial;
|
||||
/* Remove GTK theme values (waybar #1351) */
|
||||
min-width: 0;
|
||||
/* Fix weird spacing in materia (waybar #450) */
|
||||
box-shadow: inset 0 -3px transparent;
|
||||
/* Use box-shadow instead of border so the text isn't offset */
|
||||
padding: 0px 12px;
|
||||
margin: 0px 3px;
|
||||
border-radius: 10px;
|
||||
background-color: @base;
|
||||
color: @subtext0;
|
||||
padding: 0;
|
||||
margin: 4px;
|
||||
min-width: 12px;
|
||||
min-height: 12px;
|
||||
background-color: @subtext0;
|
||||
color: transparent;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
#workspaces button.active {
|
||||
color: @text;
|
||||
border-bottom: 3px solid @blue;
|
||||
#workspaces button.active,
|
||||
#workspaces button.active:hover {
|
||||
min-width: 30px;
|
||||
background-color: @mauve;
|
||||
}
|
||||
|
||||
#workspaces button:hover {
|
||||
box-shadow: inherit;
|
||||
text-shadow: inherit;
|
||||
background-color: @surface0;
|
||||
color: @text;
|
||||
background-color: @lavender;
|
||||
min-width: 20px;
|
||||
}
|
||||
|
||||
#workspaces button.urgent {
|
||||
border-bottom: 3px solid @maroon;
|
||||
background-color: @red;
|
||||
}
|
||||
|
||||
#memory,
|
||||
#cpu,
|
||||
#custom-gpu,
|
||||
#custom-cpu,
|
||||
#custom-mem,
|
||||
#custom-power,
|
||||
#custom-gamemode,
|
||||
#custom-tlp,
|
||||
#battery,
|
||||
#backlight,
|
||||
#wireplumber,
|
||||
#custom-volume,
|
||||
#custom-mic,
|
||||
#custom-network,
|
||||
#network,
|
||||
#clock,
|
||||
#tray,
|
||||
#custom-disk-root,
|
||||
#custom-disk-gdrive,
|
||||
#custom-disk-games,
|
||||
#custom-disk-data,
|
||||
#custom-pixelbuds_pro,
|
||||
#custom-bluetooth-audio,
|
||||
#custom-btrfs,
|
||||
#custom-gpu-screen-recorder {
|
||||
border-radius: 10px;
|
||||
margin: 0px 2px;
|
||||
padding: 0px 10px;
|
||||
background-color: @base;
|
||||
color: @text;
|
||||
}
|
||||
/* --- Hardware Semantic Alerts --- */
|
||||
.normal { color: @mauve; }
|
||||
.high { color: @peach; }
|
||||
.max { color: @red; }
|
||||
|
||||
#wireplumber.muted, #custom-pixelbuds_pro, #custom-volume.muted, #custom-mic.muted {
|
||||
background-color: @base;
|
||||
color: @subtext1;
|
||||
border-bottom: 3px solid @subtext1;
|
||||
}
|
||||
#custom-network { color: @mauve; }
|
||||
#custom-gamemode.active { color: @mauve; }
|
||||
|
||||
#custom-pixelbuds_pro.disconnected {
|
||||
padding-right: 10px;
|
||||
padding-left: 8px;
|
||||
}
|
||||
|
||||
#custom-gpu-screen-recorder,
|
||||
#custom-gpu-screen-recorder.recording {
|
||||
padding-right: 12px;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
#custom-gamemode {
|
||||
padding-right: 9px;
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
#custom-pixelbuds_pro.anc-active {
|
||||
color: @sapphire;
|
||||
border-bottom: 3px solid @sapphire;
|
||||
}
|
||||
|
||||
#custom-bluetooth-audio {
|
||||
color: @sapphire;
|
||||
border-bottom: 3px solid @sapphire;
|
||||
}
|
||||
|
||||
#custom-pixelbuds_pro.anc-aware {
|
||||
color: @sapphire;
|
||||
border-bottom: 3px solid @sapphire;
|
||||
}
|
||||
|
||||
#custom-pixelbuds_pro.anc-off {
|
||||
color: @text;
|
||||
border-bottom: 3px solid @text;
|
||||
}
|
||||
|
||||
#custom-gpu-screen-recorder,
|
||||
#custom-gamemode {
|
||||
background-color: @base;
|
||||
color: @subtext1;
|
||||
border-bottom: 3px solid @subtext1;
|
||||
}
|
||||
|
||||
#custom-power {
|
||||
color: @maroon;
|
||||
}
|
||||
|
||||
#custom-gpu-screen-recorder.recording,
|
||||
#custom-gamemode.active {
|
||||
color: @maroon;
|
||||
border-bottom: 3px solid @maroon;
|
||||
}
|
||||
|
||||
#custom-tlp {
|
||||
padding: 0 10px;
|
||||
min-width: 10px;
|
||||
}
|
||||
|
||||
#custom-tlp.charging {
|
||||
/* --- Media / Controls --- */
|
||||
#custom-volume.unmuted,
|
||||
#custom-mic.unmuted {
|
||||
color: @mauve;
|
||||
border-bottom: 3px solid @mauve;
|
||||
}
|
||||
#custom-volume.muted,
|
||||
#custom-mic.muted {
|
||||
color: @overlay1;
|
||||
}
|
||||
|
||||
#custom-tlp.bat {
|
||||
color: @sapphire;
|
||||
border-bottom: 3px solid @sapphire;
|
||||
/* --- Bluetooth Audio --- */
|
||||
#custom-bluetooth-audio.disabled,
|
||||
#custom-bluetooth-audio.disconnected {
|
||||
color: @overlay1;
|
||||
}
|
||||
|
||||
#custom-tlp.warning {
|
||||
color: @yellow;
|
||||
border-bottom: 3px solid @yellow;
|
||||
#custom-bluetooth-audio.connected {
|
||||
color: @blue;
|
||||
}
|
||||
|
||||
#custom-tlp.critical {
|
||||
/* 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 --- */
|
||||
#custom-power_status.charging { color: @green; }
|
||||
#custom-power_status.warning { color: @peach; }
|
||||
#custom-power_status.critical {
|
||||
color: @red;
|
||||
border-bottom: 3px solid @red;
|
||||
animation-name: blink;
|
||||
animation-duration: 0.8s;
|
||||
animation-timing-function: linear;
|
||||
animation-iteration-count: infinite;
|
||||
animation-direction: alternate;
|
||||
animation: blink 1s infinite alternate;
|
||||
}
|
||||
|
||||
|
||||
/* Interactive Hover States for Standalone Modules */
|
||||
#custom-volume:hover,
|
||||
#custom-buds:hover,
|
||||
#custom-mic:hover,
|
||||
#custom-bluetooth-audio:hover,
|
||||
#custom-power_status:hover {
|
||||
background-color: @surface1;
|
||||
color: @mauve;
|
||||
}
|
||||
|
||||
|
||||
/* ==========================================================================
|
||||
Tooltips & Animations
|
||||
========================================================================== */
|
||||
tooltip {
|
||||
background-color: alpha(@base, 0.9);
|
||||
border: 1px solid @surface1;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
tooltip label {
|
||||
color: @text;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
to {
|
||||
color: @yellow;
|
||||
border-bottom: 3px solid @yellow;
|
||||
opacity: 0.6;
|
||||
color: @base;
|
||||
background-color: @red;
|
||||
}
|
||||
}
|
||||
|
||||
#custom-gpu.max,
|
||||
#custom-cpu.max,
|
||||
#custom-mem.max,
|
||||
#custom-btrfs.max,
|
||||
#custom-disk-root.max,
|
||||
#custom-disk-gdrive.max,
|
||||
#custom-disk-games.max,
|
||||
#custom-disk-data.max {
|
||||
color: @maroon;
|
||||
/* border-bottom: 3px solid @maroon; */
|
||||
}
|
||||
|
||||
#custom-gpu.high,
|
||||
#custom-gpu.high,
|
||||
#custom-cpu.high,
|
||||
#custom-mem.high,
|
||||
#custom-btrfs.high,
|
||||
#custom-disk-root.high,
|
||||
#custom-disk-gdrive.high,
|
||||
#custom-disk-games.high,
|
||||
#custom-disk-data.high {
|
||||
color: @yellow;
|
||||
/* border-bottom: 3px solid @yellow; */
|
||||
}
|
||||
|
||||
#memory,
|
||||
#cpu,
|
||||
#disk,
|
||||
#network,
|
||||
#custom-network,
|
||||
#custom-gpu.normal,
|
||||
#custom-cpu.normal,
|
||||
#custom-mem.normal,
|
||||
#custom-btrfs.normal,
|
||||
#custom-disk-root.normal,
|
||||
#custom-disk-gdrive.normal,
|
||||
#custom-disk-games.normal,
|
||||
#custom-disk-data.normal {
|
||||
color: @blue;
|
||||
/* border-bottom: 3px solid @mauve; */
|
||||
}
|
||||
|
||||
|
||||
#backlight {
|
||||
color: @mauve;
|
||||
}
|
||||
|
||||
#custom-volume.muted, #custom-mic.muted {
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
#custom-volume.unmuted, #custom-mic.unmuted, #wireplumber {
|
||||
color: @mauve;
|
||||
border-bottom: 3px solid @mauve;
|
||||
}
|
||||
|
||||
#clock {
|
||||
color: @mauve;
|
||||
}
|
||||
|
||||
#network {
|
||||
}
|
||||
|
||||
tooltip {
|
||||
border-radius: 10px;
|
||||
padding: 9px;
|
||||
background-color: @base;
|
||||
}
|
||||
|
||||
tooltip label {
|
||||
padding: 5px;
|
||||
background-color: @base;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user