mirror of
https://github.com/prdlk/dotfiles.git
synced 2026-11-02 19:32:43 +00:00
feat(config): add Waybar, Hyprland monitors, update Gitea login
This commit is contained in:
1 parent
fd6b632a0d
commit
89d87579a0
7 files changed
+662
-2
No files matched your search
@@ -24,7 +24,7 @@ set -gx ANDROID_HOME $HOME/.local/share/android
|
|||||||
set -gx ANDROID_SDK_ROOT $ANDROID_HOME
|
set -gx ANDROID_SDK_ROOT $ANDROID_HOME
|
||||||
|
|
||||||
# Git hosts (non-secret; tokens are in secrets.fish)
|
# Git hosts (non-secret; tokens are in secrets.fish)
|
||||||
set -gx GITEA_LOGIN code.sonr.org
|
set -gx GITEA_LOGIN prad.codes
|
||||||
set -gx GITLAB_HOST git.sonr.org
|
set -gx GITLAB_HOST git.sonr.org
|
||||||
set -gx EDITOR nvim
|
set -gx EDITOR nvim
|
||||||
set -gx VISUAL nvim
|
set -gx VISUAL nvim
|
||||||
|
|||||||
@@ -7,6 +7,11 @@ local omarchy_monitor_scale = 2
|
|||||||
hl.env("GDK_SCALE", tostring(omarchy_gdk_scale))
|
hl.env("GDK_SCALE", tostring(omarchy_gdk_scale))
|
||||||
hl.monitor({ output = "", mode = "preferred", position = "auto", scale = omarchy_monitor_scale })
|
hl.monitor({ output = "", mode = "preferred", position = "auto", scale = omarchy_monitor_scale })
|
||||||
|
|
||||||
|
-- Apple Studio Display on the left, laptop panel (eDP-1) on the right.
|
||||||
|
-- Logical widths at scale 2: 5120/2 = 2560, so eDP-1 starts at x=2560.
|
||||||
|
hl.monitor({ output = "DP-4", mode = "5120x2880@60", position = "0x0", scale = 2 })
|
||||||
|
hl.monitor({ output = "eDP-1", mode = "2560x1600@180", position = "2560x0", scale = 2 })
|
||||||
|
|
||||||
-- Configure a specific monitor.
|
-- Configure a specific monitor.
|
||||||
-- hl.monitor({ output = "DP-2", mode = "2560x1440@144", position = "0x0", scale = 1 })
|
-- hl.monitor({ output = "DP-2", mode = "2560x1440@144", position = "0x0", scale = 1 })
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 366 KiB |
@@ -0,0 +1,327 @@
|
|||||||
|
{
|
||||||
|
"exclusive": true,
|
||||||
|
"reload_style_on_change": true,
|
||||||
|
"position": "bottom",
|
||||||
|
"fixed-center": true,
|
||||||
|
"spacing": 2,
|
||||||
|
"margin-top": 1,
|
||||||
|
"modules-left": [
|
||||||
|
"custom/separator",
|
||||||
|
"custom/omarchy",
|
||||||
|
"custom/separator",
|
||||||
|
"hyprland/workspaces",
|
||||||
|
"custom/separator",
|
||||||
|
"tray",
|
||||||
|
"custom/separator",
|
||||||
|
"custom/voxtype",
|
||||||
|
"custom/update",
|
||||||
|
"custom/screenrecording-indicator",
|
||||||
|
"custom/updatespacman",
|
||||||
|
"custom/separator",
|
||||||
|
"idle_inhibitor"
|
||||||
|
],
|
||||||
|
"modules-center": [
|
||||||
|
"custom/windowpill"
|
||||||
|
],
|
||||||
|
"modules-right": [
|
||||||
|
"group/right-group2",
|
||||||
|
"group/right-group1"
|
||||||
|
],
|
||||||
|
|
||||||
|
"group/right-group1": {
|
||||||
|
"orientation": "vertical",
|
||||||
|
"justify": "left",
|
||||||
|
"align": "left",
|
||||||
|
"modules": [
|
||||||
|
"group/right1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
"group/right-group2": {
|
||||||
|
"orientation": "vertical",
|
||||||
|
"justify": "left",
|
||||||
|
"align": "left",
|
||||||
|
"modules": [
|
||||||
|
"group/right2"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"group/right1":{
|
||||||
|
"orientation": "horizontal",
|
||||||
|
"modules": ["clock"]
|
||||||
|
},
|
||||||
|
"group/right2":{
|
||||||
|
"orientation": "horizontal",
|
||||||
|
"modules": [
|
||||||
|
"group/tray-expander",
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"hyprland/workspaces": {
|
||||||
|
"on-click": "activate",
|
||||||
|
"cursor": true,
|
||||||
|
"format": "{icon}",
|
||||||
|
"persistent-workspaces": {
|
||||||
|
"1": [],
|
||||||
|
"2": [],
|
||||||
|
"3": [],
|
||||||
|
"4": [],
|
||||||
|
"5": [],
|
||||||
|
"7": [],
|
||||||
|
"8": [],
|
||||||
|
"9": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"custom/separator": {
|
||||||
|
"format": "|",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/separator2": {
|
||||||
|
"format": "|",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/separator3": {
|
||||||
|
"format": "|",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/omarchy": {
|
||||||
|
"format": "<span font='omarchy'>\ue900</span>",
|
||||||
|
"on-click": "omarchy-menu",
|
||||||
|
"on-click-right": "xdg-terminal-exec",
|
||||||
|
"tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
|
||||||
|
},
|
||||||
|
"custom/update": {
|
||||||
|
"format": "",
|
||||||
|
"exec": "omarchy-update-available",
|
||||||
|
"on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-update",
|
||||||
|
"tooltip-format": "Omarchy update available",
|
||||||
|
"signal": 7,
|
||||||
|
"interval": 21600
|
||||||
|
},
|
||||||
|
"custom/voxtype": {
|
||||||
|
"exec": "omarchy-voxtype-status",
|
||||||
|
"return-type": "json",
|
||||||
|
"format": "{icon}",
|
||||||
|
"format-icons": {
|
||||||
|
"idle": "",
|
||||||
|
"recording": "",
|
||||||
|
"transcribing": ""
|
||||||
|
},
|
||||||
|
"tooltip": true,
|
||||||
|
"on-click-right": "omarchy-voxtype-config",
|
||||||
|
"on-click": "omarchy-voxtype-model"
|
||||||
|
},
|
||||||
|
"power-profiles-daemon": {
|
||||||
|
"format": "{icon}",
|
||||||
|
"tooltip-format": "Power profile: {profile}\nDriver: {driver}",
|
||||||
|
"tooltip": true,
|
||||||
|
"format-icons": {
|
||||||
|
"performance": "",
|
||||||
|
"balanced": "",
|
||||||
|
"power-saver": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"idle_inhibitor": {
|
||||||
|
"format": "{icon}",
|
||||||
|
"format-icons": {
|
||||||
|
"activated": "",
|
||||||
|
"deactivated": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"custom/windowpill": {
|
||||||
|
"format": "{}",
|
||||||
|
"exec": "~/.config/waybar/window_pill.py",
|
||||||
|
"return-type": "json",
|
||||||
|
"restart-interval": 1,
|
||||||
|
"align": "center",
|
||||||
|
"justify": "center"
|
||||||
|
},
|
||||||
|
"cpu": {
|
||||||
|
"interval": 10,
|
||||||
|
"format": " {usage}%",
|
||||||
|
"on-click": "omarchy-launch-or-focus-tui btop"
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"interval": 2,
|
||||||
|
"format": " {used:0.1f}G",
|
||||||
|
"on-click": "omarchy-launch-or-focus-tui btop"
|
||||||
|
},
|
||||||
|
"backlight": {
|
||||||
|
"device": "intel_backlight",
|
||||||
|
"format": "{icon}",
|
||||||
|
"tooltip-format": "{percent}%",
|
||||||
|
"format-icons": [
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
""
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"clock": {
|
||||||
|
"justify": "right",
|
||||||
|
"format": "{:%H:%M\n%d/%m/%Y}",
|
||||||
|
"format-alt": "{:%H:%M - %d/%m/%Y}",
|
||||||
|
"tooltip-format": "<span>{calendar}</span>",
|
||||||
|
"calendar": {
|
||||||
|
"mode": "month",
|
||||||
|
"mode-mon-col": 3,
|
||||||
|
"on-click-right": "mode",
|
||||||
|
"format": {
|
||||||
|
"month": "<span color='#ffead3'><b>{}</b></span>",
|
||||||
|
"weekdays": "<span color='#ffcc66'><b>{}</b></span>",
|
||||||
|
"today": "<span color='#ff6699'><b>{}</b></span>",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"on-click-right": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select"
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"format-icons": [
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"format": "{icon}",
|
||||||
|
"format-wifi": "{icon}",
|
||||||
|
"format-ethernet": "",
|
||||||
|
"format-disconnected": "",
|
||||||
|
"tooltip-format-wifi": "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
|
||||||
|
"tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
|
||||||
|
"tooltip-format-disconnected": "Disconnected",
|
||||||
|
"interval": 3,
|
||||||
|
"spacing": 1,
|
||||||
|
"on-click": "omarchy-launch-wifi"
|
||||||
|
},
|
||||||
|
"battery": {
|
||||||
|
"format": "{capacity}% {icon}",
|
||||||
|
"format-discharging": "{capacity}% {icon}",
|
||||||
|
"format-charging": "{capacity}% {icon}",
|
||||||
|
"format-plugged": "",
|
||||||
|
"format-icons": {
|
||||||
|
"charging": [
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"default": [
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
""
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"format-full": " {capacity}%",
|
||||||
|
"tooltip-format-discharging": "{timeTo}",
|
||||||
|
"tooltip-format-charging": "{timeTo}",
|
||||||
|
"interval": 5,
|
||||||
|
"on-click": "omarchy-menu power",
|
||||||
|
"on-click-right": "notify-send -u low \"$(omarchy-battery-status)\"",
|
||||||
|
"states": {
|
||||||
|
"warning": 20,
|
||||||
|
"critical": 10
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bluetooth": {
|
||||||
|
"format": "",
|
||||||
|
"format-disabled": "",
|
||||||
|
"format-connected": "",
|
||||||
|
"tooltip-format": "Devices connected: {num_connections}",
|
||||||
|
"on-click": "omarchy-launch-bluetooth"
|
||||||
|
},
|
||||||
|
"pulseaudio#input": {
|
||||||
|
"format-source": "",
|
||||||
|
"format-source-muted": "",
|
||||||
|
"format": "{format_source}",
|
||||||
|
"tooltip-format": "{format_source} {source_volume}%",
|
||||||
|
"scroll-step": 1,
|
||||||
|
"smooth-scrolling-threshold": 1,
|
||||||
|
"max-volume": 100,
|
||||||
|
"on-click": "omarchy-launch-audio",
|
||||||
|
"on-click-right": "pamixer -t",
|
||||||
|
"on-scroll-up": "pactl set-source-volume @DEFAULT_SOURCE@ +1%",
|
||||||
|
"on-scroll-down": "pactl set-source-volume @DEFAULT_SOURCE@ -1%",
|
||||||
|
},
|
||||||
|
"pulseaudio#output": {
|
||||||
|
"format": "{icon}",
|
||||||
|
"tooltip-format": "{icon} {volume}%",
|
||||||
|
"format-muted": "",
|
||||||
|
"format-icons": {
|
||||||
|
"headphone": "",
|
||||||
|
"default": ["", "", ""]
|
||||||
|
},
|
||||||
|
"max-volume": 100,
|
||||||
|
"scroll-step": 2,
|
||||||
|
"smooth-scrolling-threshold": 1,
|
||||||
|
"on-click": "omarchy-launch-audio",
|
||||||
|
"on-click-right": "pamixer -t"
|
||||||
|
},
|
||||||
|
"custom/updatespacman": {
|
||||||
|
"format": "{}{icon}",
|
||||||
|
"return-type": "json",
|
||||||
|
"format-icons": {
|
||||||
|
"has-updates": " ",
|
||||||
|
"updated": ""
|
||||||
|
},
|
||||||
|
"exec-if": "which waybar-module-pacman-updates",
|
||||||
|
"exec": "waybar-module-pacman-updates --no-zero-output"
|
||||||
|
},
|
||||||
|
"custom/screenrecording-indicator": {
|
||||||
|
"on-click": "omarchy-capture-screenrecording",
|
||||||
|
"exec": "$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh",
|
||||||
|
"signal": 8,
|
||||||
|
"return-type": "json"
|
||||||
|
},
|
||||||
|
"group/tray-expander": {
|
||||||
|
"orientation": "inherit",
|
||||||
|
"drawer": {
|
||||||
|
"transition-duration": 600,
|
||||||
|
"children-class": "tray-group-item"
|
||||||
|
},
|
||||||
|
"modules": [
|
||||||
|
"custom/expand-icon",
|
||||||
|
"backlight",
|
||||||
|
"bluetooth",
|
||||||
|
"pulseaudio#output",
|
||||||
|
"pulseaudio#input",
|
||||||
|
"power-profiles-daemon",
|
||||||
|
"network",
|
||||||
|
"memory",
|
||||||
|
"cpu",
|
||||||
|
"battery"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"custom/expand-icon": {
|
||||||
|
"format": "",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"tray": {
|
||||||
|
"icon-size": 12,
|
||||||
|
"spacing": 5,
|
||||||
|
"cursor": true,
|
||||||
|
"show-passive-items": true
|
||||||
|
},
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,237 @@
|
|||||||
|
@import "/home/prad/.local/state/omarchy/current/theme/waybar.css";
|
||||||
|
|
||||||
|
|
||||||
|
* {
|
||||||
|
/* background-color: @background; */
|
||||||
|
/* color: @foreground; */
|
||||||
|
|
||||||
|
border-radius: 0;
|
||||||
|
border: none;
|
||||||
|
text-shadow: none;
|
||||||
|
padding: 0;
|
||||||
|
min-height: 0;
|
||||||
|
font-family: 'CaskaydiaCove Nerd Font Propo';
|
||||||
|
}
|
||||||
|
|
||||||
|
#waybar {
|
||||||
|
background-color: @transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#waybar > box {
|
||||||
|
color: @foreground;
|
||||||
|
background-color: @background;
|
||||||
|
margin: 2px 6px 2px 6px;
|
||||||
|
padding: 0px;
|
||||||
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 1);
|
||||||
|
border-radius: 4px;
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 12px;
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: .5s;
|
||||||
|
min-height: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modules-left {
|
||||||
|
margin-left: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modules-right {
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#right2 {
|
||||||
|
margin-right: 4px;
|
||||||
|
padding-top: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces {
|
||||||
|
padding: 0 0px;
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button {
|
||||||
|
all: initial;
|
||||||
|
padding: 0 1px;
|
||||||
|
margin: 0 3px;
|
||||||
|
opacity: 0.55;
|
||||||
|
color: @foreground;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.active {
|
||||||
|
color: @foreground;
|
||||||
|
opacity: 1.0;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.empty {
|
||||||
|
opacity: 0.2;
|
||||||
|
font-size: 12px;
|
||||||
|
color: @foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.empty.active {
|
||||||
|
font-size: 12px;
|
||||||
|
color: @foreground;
|
||||||
|
opacity: 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#custom-expand-icon,
|
||||||
|
#tray,
|
||||||
|
#cpu,
|
||||||
|
#memory,
|
||||||
|
#battery,
|
||||||
|
#backlight,
|
||||||
|
#network,
|
||||||
|
#bluetooth,
|
||||||
|
#pulseaudio,
|
||||||
|
#power-profiles-daemon,
|
||||||
|
#idle_inhibitor,
|
||||||
|
#custom-windowpill,
|
||||||
|
#group-tray-expander,
|
||||||
|
#custom-update,
|
||||||
|
#custom-voxtype,
|
||||||
|
#custom-voxtype.recording,
|
||||||
|
#custom-voxtype.transcribing,
|
||||||
|
#custom-expand-icon,
|
||||||
|
#custom-omarchy,
|
||||||
|
#custom-updatespacman,
|
||||||
|
#custom-screenrecording-indicator {
|
||||||
|
min-width: 12px;
|
||||||
|
padding-left: 6px;
|
||||||
|
padding-right: 6px;
|
||||||
|
margin: 1px 1px 1px 1px;
|
||||||
|
padding-top: 0px;
|
||||||
|
padding-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock{
|
||||||
|
padding-top: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
tooltip {
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-omarchy {
|
||||||
|
padding-top: 2px;
|
||||||
|
padding-left: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-update {
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-expand-icon {
|
||||||
|
margin-right: 0px;
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray {
|
||||||
|
background-color: @background;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray > .passive {
|
||||||
|
-gtk-icon-effect: dim;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray > .needs-attention {
|
||||||
|
-gtk-icon-effect: highlight;
|
||||||
|
background-color: @background;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hidden {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#power-profiles-daemon,
|
||||||
|
#power-profiles-daemon.performance,
|
||||||
|
#power-profiles-daemon.balanced,
|
||||||
|
#power-profiles-daemon.power-saver {
|
||||||
|
margin: 0;
|
||||||
|
padding-left: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-updatespacman {
|
||||||
|
opacity: 0.55;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-separator {
|
||||||
|
opacity: 0.25;
|
||||||
|
padding-left: 2px;
|
||||||
|
padding-right: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-separator3 {
|
||||||
|
opacity: 0.25;
|
||||||
|
padding-left: 2px;
|
||||||
|
padding-right: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
tooltip {
|
||||||
|
padding: 4px;
|
||||||
|
background: @background;
|
||||||
|
font-size: 12px;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1.5px solid rgba(255, 255, 255, 0.25);
|
||||||
|
}
|
||||||
|
tooltip label {
|
||||||
|
color: @foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Specific animation Module */
|
||||||
|
|
||||||
|
#custom-screenrecording-indicator {
|
||||||
|
animation-timing-function: linear;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
animation-direction: alternate;
|
||||||
|
color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-screenrecording-indicator.active {
|
||||||
|
color: #eb7087;
|
||||||
|
animation-name: blink-recording;
|
||||||
|
animation-duration: 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink-recording {
|
||||||
|
to {
|
||||||
|
color: @background;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-voxtype {
|
||||||
|
min-width: 12px;
|
||||||
|
margin: 0px 0 0 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-voxtype.recording {
|
||||||
|
color: #a55555;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.warning {
|
||||||
|
color: #c95d0f;
|
||||||
|
background-color: @background;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink2 {
|
||||||
|
to {
|
||||||
|
background-color: @background;
|
||||||
|
color: #f53c3c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.critical:not(.charging) {
|
||||||
|
background-color: transparent;
|
||||||
|
color: #e6d8ba;
|
||||||
|
animation-name: blink2;
|
||||||
|
animation-duration: 0.5s;
|
||||||
|
animation-timing-function: steps(12);
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
animation-direction: alternate;
|
||||||
|
}
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
import os
|
||||||
|
import socket
|
||||||
|
import sys
|
||||||
|
import json
|
||||||
|
import subprocess
|
||||||
|
import html
|
||||||
|
import re
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
MAX_TITLE_LEN = 80
|
||||||
|
|
||||||
|
def get_hyprland_data(command):
|
||||||
|
try:
|
||||||
|
output = subprocess.check_output(["hyprctl", command, "-j"], text=True)
|
||||||
|
return json.loads(output)
|
||||||
|
except Exception:
|
||||||
|
return {}
|
||||||
|
|
||||||
|
def print_status():
|
||||||
|
# 1. Get Active Window
|
||||||
|
window = get_hyprland_data("activewindow")
|
||||||
|
|
||||||
|
# Defaults for "Desktop" state
|
||||||
|
top_line = "Desktop"
|
||||||
|
bottom_line = ""
|
||||||
|
|
||||||
|
# 2. Determine State
|
||||||
|
if window and window.get("address"):
|
||||||
|
# CASE A: Window is active
|
||||||
|
top_line = window.get("class", "Unknown") or "Unknown"
|
||||||
|
|
||||||
|
title = window.get("title", "") or ""
|
||||||
|
|
||||||
|
# Safely get class (Hyprland may return null)
|
||||||
|
app_class = (window.get("class") or "").lower()
|
||||||
|
|
||||||
|
# Remove Discord/Vesktop unread counter like "(209) "
|
||||||
|
if "discord" in app_class or "vesktop" in app_class:
|
||||||
|
title = re.sub(r"^\(\d+\)\s*", "", title)
|
||||||
|
title = re.sub(r"^Discord\s*\|\s*", "", title)
|
||||||
|
|
||||||
|
if len(title) > MAX_TITLE_LEN:
|
||||||
|
title = title[:MAX_TITLE_LEN - 3]
|
||||||
|
|
||||||
|
bottom_line = title
|
||||||
|
|
||||||
|
else:
|
||||||
|
# CASE B: Desktop / Empty Workspace
|
||||||
|
workspace = get_hyprland_data("activeworkspace")
|
||||||
|
ws_id = workspace.get("id", "1")
|
||||||
|
top_line = f"Workspace {ws_id}"
|
||||||
|
bottom_line = "\u00A0"
|
||||||
|
|
||||||
|
# 3. Sanitize for Pango
|
||||||
|
top_line = html.escape(top_line)
|
||||||
|
bottom_line = html.escape(bottom_line)
|
||||||
|
|
||||||
|
# 4. Format with Pango Markup
|
||||||
|
text = (
|
||||||
|
f"<span size='small' foreground='#a6adc8' rise='-2000'>{top_line}</span>\n "
|
||||||
|
f"<span size='11000' weight='bold' foreground='#ffffff'>{bottom_line}</span>"
|
||||||
|
)
|
||||||
|
|
||||||
|
# 5. Output JSON
|
||||||
|
print(json.dumps({
|
||||||
|
"text": text,
|
||||||
|
"class": "custom-window",
|
||||||
|
"tooltip": f"{top_line}: {bottom_line}"
|
||||||
|
}), flush=True)
|
||||||
|
|
||||||
|
# Initial Run
|
||||||
|
print_status()
|
||||||
|
|
||||||
|
# Listen to Hyprland Socket for instant updates
|
||||||
|
hypr_sig = os.getenv("HYPRLAND_INSTANCE_SIGNATURE")
|
||||||
|
if not hypr_sig:
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
socket_path = f"/tmp/hypr/{hypr_sig}/.socket2.sock"
|
||||||
|
|
||||||
|
if os.path.exists(socket_path):
|
||||||
|
with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as client:
|
||||||
|
client.connect(socket_path)
|
||||||
|
while True:
|
||||||
|
data = client.recv(1024).decode("utf-8", errors="ignore")
|
||||||
|
if not data:
|
||||||
|
break
|
||||||
|
if "activewindow>>" in data or "workspace>>" in data:
|
||||||
|
print_status()
|
||||||
@@ -6,6 +6,7 @@ use = "cyberdream"
|
|||||||
|
|
||||||
prepend_dirs = [
|
prepend_dirs = [
|
||||||
{ name = "Applications", text = "" },
|
{ name = "Applications", text = "" },
|
||||||
|
{ name = "Code", text = "" },
|
||||||
{ name = "Desktop", text = "" },
|
{ name = "Desktop", text = "" },
|
||||||
{ name = "Developer", text = "" },
|
{ name = "Developer", text = "" },
|
||||||
{ name = "github.com", text = "" },
|
{ name = "github.com", text = "" },
|
||||||
@@ -22,7 +23,7 @@ prepend_dirs = [
|
|||||||
{ name = "tex", text = "" },
|
{ name = "tex", text = "" },
|
||||||
{ name = "md", text = "" },
|
{ name = "md", text = "" },
|
||||||
{ name = "docs", text = "" },
|
{ name = "docs", text = "" },
|
||||||
{name = "prad.codes", text = ""}
|
{ name = "prad.codes", text = "" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user