wip
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -65,6 +65,9 @@ swaylock/*
|
||||
swayidle/*
|
||||
!swayidle/config
|
||||
|
||||
!waybar
|
||||
!bin
|
||||
|
||||
# flameshot
|
||||
!flameshot
|
||||
flameshot/*
|
||||
|
||||
34
bin/waybar-custom-cider.sh
Executable file
34
bin/waybar-custom-cider.sh
Executable file
@@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
url="http://localhost:10767/api/v1/playback"
|
||||
|
||||
status_raw=$(curl -s --max-time 2 "$url/is-playing")
|
||||
|
||||
# CASE 1: API is totally unreachable (App closed)
|
||||
if [[ -z "$status_raw" ]]; then
|
||||
echo '{"text": "offline", "class": "offline", "alt": "offline"}'
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Extract playing status, defaulting to false if null
|
||||
is_playing=$(echo "$status_raw" | jq -r '.is_playing // false')
|
||||
|
||||
# 2. Get song info
|
||||
info_raw=$(curl -s --max-time 2 "$url/now-playing")
|
||||
|
||||
# CASE 2 & 3: Handle empty metadata vs. active metadata
|
||||
echo "$info_raw" | jq -c \
|
||||
--argjson is_playing "$is_playing" \
|
||||
'
|
||||
# Helper function to escape & for Pango
|
||||
def pango_escape: sub("&"; "&"; "g");
|
||||
|
||||
if (.info.name == null or .info.name == "") then
|
||||
{text: "idle", class: "paused"}
|
||||
else
|
||||
{
|
||||
text: "\(.info.name | pango_escape) - \(.info.artistName | pango_escape)",
|
||||
tooltip: "\(.info.albumName | pango_escape // "Unknown")",
|
||||
class: (if $is_playing then "playing" else "paused" end)
|
||||
}
|
||||
end'
|
||||
201
waybar/config.jsonc
Normal file
201
waybar/config.jsonc
Normal file
@@ -0,0 +1,201 @@
|
||||
{
|
||||
"layer": "top",
|
||||
"position": "top",
|
||||
"height": 45,
|
||||
"spacing": 1,
|
||||
"margin": 0,
|
||||
"modules-left": [
|
||||
"clock",
|
||||
],
|
||||
"modules-center": [
|
||||
"sway/workspaces",
|
||||
"sway/mode",
|
||||
"sway/scratchpad",
|
||||
],
|
||||
"modules-right": [
|
||||
"custom/cider",
|
||||
"pulseaudio",
|
||||
"network",
|
||||
"power-profiles-daemon",
|
||||
"cpu",
|
||||
"memory",
|
||||
"temperature",
|
||||
"backlight",
|
||||
"battery",
|
||||
"tray",
|
||||
"custom/notification"
|
||||
],
|
||||
// Modules configuration
|
||||
"sway/workspaces": {
|
||||
"disable-scroll": true,
|
||||
// "all-outputs": true,
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"1": "I",
|
||||
"2": "II",
|
||||
"3": "III",
|
||||
"4": "IV",
|
||||
"5": "V",
|
||||
"6": "VI",
|
||||
"7": "VII",
|
||||
"8": "VIII",
|
||||
"9": "IX",
|
||||
"10": "X",
|
||||
}
|
||||
|
||||
},
|
||||
"sway/mode": {
|
||||
"format": "<span style=\"italic\">{}</span>"
|
||||
},
|
||||
"sway/scratchpad": {
|
||||
"format": "{icon} {count}",
|
||||
"show-empty": false,
|
||||
"format-icons": ["", ""],
|
||||
"tooltip": true,
|
||||
"tooltip-format": "{app}: {title}"
|
||||
},
|
||||
"custom/cider": {
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"max-length": 18,
|
||||
"interval": 1,
|
||||
"tooltip": true,
|
||||
"exec": "~/.config/bin/waybar-custom-cider.sh",
|
||||
"on-click": "curl -s -X POST http://localhost:10767/api/v1/playback/playpause",
|
||||
"on-click-right": "curl -s -X POST http://localhost:10767/api/v1/playback/next",
|
||||
},
|
||||
"tray": {
|
||||
"icon-size": 18,
|
||||
"spacing": 10
|
||||
},
|
||||
"clock": {
|
||||
"interval": 1,
|
||||
"format": "{:%Y/%m/%d %H:%M:%S}",
|
||||
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
|
||||
},
|
||||
"cpu": {
|
||||
"format": "cpu:{usage}%",
|
||||
"tooltip": false,
|
||||
"on-click": "ghostty -e htop"
|
||||
},
|
||||
"memory": {
|
||||
"interval": 10,
|
||||
"format": "ram:{}%",
|
||||
"tooltip-format": "total: {total:0.2f}GiB\nused: {used:0.2f}GiB\navailable: {avail:0.2f}GiB\nswap: {swapUsed:0.2f}/{swapTotal:0.2f}GiB",
|
||||
"on-click": "ghostty -e htop"
|
||||
},
|
||||
"temperature": {
|
||||
// "thermal-zone": 2,
|
||||
// "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
|
||||
"critical-threshold": 80,
|
||||
// "format-critical": "{temperatureC}°C {icon}",
|
||||
"format": "{temperatureC}°C {icon}",
|
||||
"format-icons": ["", "", ""],
|
||||
"on-click": "ghostty -e s-tui",
|
||||
"tooltip": false
|
||||
},
|
||||
"backlight": {
|
||||
// "device": "acpi_video1",
|
||||
"format": "{percent}% {icon}",
|
||||
"format-icons": ["", "", "", "", "", "", "", "", ""],
|
||||
"tooltip": false
|
||||
},
|
||||
"battery": {
|
||||
"states": {
|
||||
// "good": 95,
|
||||
"warning": 30,
|
||||
"critical": 15
|
||||
},
|
||||
"format": "{capacity}% {icon}",
|
||||
"format-full": "{capacity}% {icon}",
|
||||
"format-charging": "{capacity}% ",
|
||||
"format-plugged": "{capacity}% ",
|
||||
"format-alt": "{time} {icon}",
|
||||
// "format-good": "", // An empty format will hide the module
|
||||
// "format-full": "",
|
||||
"format-icons": ["", "", "", "", ""]
|
||||
},
|
||||
"power-profiles-daemon": {
|
||||
"format": "{icon}",
|
||||
"tooltip-format": "Power profile: {profile}\nDriver: {driver}",
|
||||
"tooltip": true,
|
||||
"format-icons": {
|
||||
"default": "",
|
||||
"performance": "",
|
||||
"balanced": "",
|
||||
"power-saver": ""
|
||||
}
|
||||
},
|
||||
"network": {
|
||||
// "interface": "wlp2*", // (Optional) To force the use of this interface
|
||||
"format-wifi": "{essid} ({signalStrength}%) ",
|
||||
"format-ethernet": "ipv4:{ipaddr}/{cidr}",
|
||||
"tooltip-format": "{ifname} via {gwaddr} ",
|
||||
"format-linked": "{ifname} (No IP) ",
|
||||
"format-disconnected": "Disconnected ⚠",
|
||||
"format-alt": "{ifname}: {ipaddr}/{cidr}"
|
||||
},
|
||||
"pulseaudio": {
|
||||
// "scroll-step": 1, // %, can be a float
|
||||
"format": "vol:{volume}%/{format_source}",
|
||||
"format-bluetooth": "{volume}% {icon} {format_source}",
|
||||
"format-bluetooth-muted": " {icon} {format_source}",
|
||||
"format-muted": " {format_source}",
|
||||
"format-source": "{volume}%",
|
||||
"format-source-muted": "",
|
||||
"format-icons": {
|
||||
"headphone": "",
|
||||
"hands-free": "",
|
||||
"headset": "",
|
||||
"phone": "",
|
||||
"portable": "",
|
||||
"car": "",
|
||||
"default": ["", "", ""]
|
||||
},
|
||||
"on-click": "pavucontrol"
|
||||
},
|
||||
"custom/media": {
|
||||
"format": "{icon} {text}",
|
||||
"return-type": "json",
|
||||
"max-length": 40,
|
||||
"format-icons": {
|
||||
"spotify": "",
|
||||
"default": "🎜"
|
||||
},
|
||||
"escape": true,
|
||||
"exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder
|
||||
// "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name
|
||||
},
|
||||
"custom/power": {
|
||||
"format" : "⏻ ",
|
||||
"tooltip": false,
|
||||
"menu": "on-click",
|
||||
"menu-file": "$HOME/.config/waybar/power_menu.xml", // Menu file in resources folder
|
||||
"menu-actions": {
|
||||
"shutdown": "shutdown",
|
||||
"reboot": "reboot",
|
||||
"suspend": "systemctl suspend",
|
||||
"hibernate": "systemctl hibernate"
|
||||
}
|
||||
},
|
||||
"custom/notification": {
|
||||
"tooltip": true,
|
||||
"format": "<span size='16pt'>{0} {icon} </span>",
|
||||
"format-icons": {
|
||||
"notification": "",
|
||||
"none": "",
|
||||
"dnd-notification": "",
|
||||
"dnd-none": "",
|
||||
"inhibited-notification": "",
|
||||
"inhibited-none": "",
|
||||
"dnd-inhibited-notification": "",
|
||||
"dnd-inhibited-none": ""
|
||||
},
|
||||
"return-type": "json",
|
||||
"exec-if": "which swaync-client",
|
||||
"exec": "swaync-client -swb",
|
||||
"on-click": "swaync-client -t -sw",
|
||||
"on-click-right": "swaync-client -d -sw",
|
||||
"escape": true
|
||||
}
|
||||
}
|
||||
330
waybar/style.css
Normal file
330
waybar/style.css
Normal file
@@ -0,0 +1,330 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Gruvbox Material Dark Palette
|
||||
* ----------------------------------------------------------------------------- */
|
||||
@define-color background #282828;
|
||||
@define-color background-light #3c3836;
|
||||
@define-color foreground #d4be98;
|
||||
@define-color black #1d2021;
|
||||
@define-color gray #928374;
|
||||
@define-color red #ea6962;
|
||||
@define-color green #a9b665;
|
||||
@define-color yellow #d8a657;
|
||||
@define-color blue #7daea3;
|
||||
@define-color magenta #d3869b;
|
||||
@define-color cyan #89b482;
|
||||
@define-color white #ddc7a1;
|
||||
@define-color orange #e78a4e;
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Module Colors (Neovim/Muted Style)
|
||||
* ----------------------------------------------------------------------------- */
|
||||
@define-color workspaces-color @gray;
|
||||
@define-color workspaces-focused-bg @background-light;
|
||||
@define-color workspaces-focused-fg @foreground;
|
||||
@define-color workspaces-urgent-bg @red;
|
||||
@define-color workspaces-urgent-fg @background;
|
||||
|
||||
@define-color cider-color @red;
|
||||
@define-color clock-color @foreground;
|
||||
@define-color pulseaudio-color @blue;
|
||||
@define-color pulseaudio-muted-color @gray;
|
||||
@define-color network-color @magenta;
|
||||
@define-color network-disconnected-color @red;
|
||||
@define-color cpu-color @orange;
|
||||
@define-color memory-color @cyan;
|
||||
@define-color temperature-color @yellow;
|
||||
@define-color temperature-critical-color @red;
|
||||
@define-color backlight-color @white;
|
||||
@define-color battery-color @foreground;
|
||||
@define-color battery-charging-color @green;
|
||||
@define-color battery-warning-color @yellow;
|
||||
@define-color battery-critical-color @red;
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Global Setup
|
||||
* ----------------------------------------------------------------------------- */
|
||||
* {
|
||||
font-family: "JetBrainsMono Nerd Font";
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
window#waybar {
|
||||
background-color: transparent;
|
||||
font-weight: bold;
|
||||
color: #ffffff;
|
||||
transition-property: background-color;
|
||||
transition-duration: .5s;
|
||||
}
|
||||
|
||||
window#waybar.hidden {
|
||||
opacity: 0.2;
|
||||
}
|
||||
|
||||
/* This targets every module */
|
||||
#waybar .module {
|
||||
background-color: #1e1e2e; /* Your desired module color */
|
||||
border-radius: 7px;
|
||||
border: 2px solid #d4be98;
|
||||
}
|
||||
|
||||
/* Specific grouping (Optional: if you want modules to stick together in islands) */
|
||||
.modules-left, .modules-center, .modules-right {
|
||||
background: transparent;
|
||||
margin: 12px 10px 5px 10px;
|
||||
}
|
||||
|
||||
button {
|
||||
box-shadow: none;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background: inherit;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Workspaces
|
||||
* ----------------------------------------------------------------------------- */
|
||||
#workspaces button {
|
||||
padding: 0 8px;
|
||||
background-color: transparent;
|
||||
color: @workspaces-color;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#workspaces button:hover {
|
||||
background: @background-light;
|
||||
color: @foreground;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
/* The "Neovim Buffer" Look:
|
||||
Active workspace is lighter background + cream text.
|
||||
No flashy underlines. */
|
||||
#workspaces button.focused {
|
||||
background-color: @background-light;
|
||||
color: @workspaces-focused-fg;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
#workspaces button.urgent {
|
||||
background-color: @workspaces-urgent-bg;
|
||||
color: @workspaces-urgent-fg;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Modules
|
||||
* ----------------------------------------------------------------------------- */
|
||||
#mode,
|
||||
#clock,
|
||||
#battery,
|
||||
#cpu,
|
||||
#memory,
|
||||
#disk,
|
||||
#temperature,
|
||||
#backlight,
|
||||
#network,
|
||||
#pulseaudio,
|
||||
#wireplumber,
|
||||
#custom-media,
|
||||
#tray,
|
||||
#idle_inhibitor,
|
||||
#scratchpad,
|
||||
#power-profiles-daemon,
|
||||
#mpd,
|
||||
#custom-cider {
|
||||
color: @clock-color;
|
||||
font-weight: bold;
|
||||
padding: 0 10px;
|
||||
margin: 0 2px;
|
||||
background-color: transparent;
|
||||
border: none; /* Removed the underlines for a cleaner look */
|
||||
}
|
||||
|
||||
#window,
|
||||
#workspaces {
|
||||
margin: 0 4px;
|
||||
}
|
||||
|
||||
.modules-left > widget:first-child > #workspaces { margin-left: 0; }
|
||||
.modules-right > widget:last-child > #workspaces { margin-right: 0; }
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Module Specifics
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#battery {
|
||||
color: @battery-color;
|
||||
}
|
||||
|
||||
#battery.charging, #battery.plugged {
|
||||
color: @battery-charging-color;
|
||||
}
|
||||
|
||||
#battery.warning:not(.charging) {
|
||||
color: @battery-warning-color;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
to {
|
||||
background-color: @red;
|
||||
color: @background;
|
||||
}
|
||||
}
|
||||
|
||||
#battery.critical:not(.charging) {
|
||||
color: @battery-critical-color;
|
||||
animation-name: blink;
|
||||
animation-duration: 0.5s;
|
||||
animation-timing-function: steps(12);
|
||||
animation-iteration-count: infinite;
|
||||
animation-direction: alternate;
|
||||
}
|
||||
|
||||
/* #cpu { */
|
||||
/* color: @cpu-color; */
|
||||
/* } */
|
||||
/**/
|
||||
/* #memory { */
|
||||
/* color: @memory-color; */
|
||||
/* } */
|
||||
/**/
|
||||
/* #disk { */
|
||||
/* color: @yellow; */
|
||||
/* } */
|
||||
/**/
|
||||
/* #backlight { */
|
||||
/* color: @backlight-color; */
|
||||
/* } */
|
||||
/**/
|
||||
/* #network { */
|
||||
/* color: @network-color; */
|
||||
/* } */
|
||||
/**/
|
||||
/* #network.disconnected { */
|
||||
/* color: @network-disconnected-color; */
|
||||
/* } */
|
||||
/**/
|
||||
/* #pulseaudio { */
|
||||
/* color: @pulseaudio-color; */
|
||||
/* } */
|
||||
/**/
|
||||
/* #pulseaudio.muted { */
|
||||
/* color: @pulseaudio-muted-color; */
|
||||
/* } */
|
||||
/**/
|
||||
/* #wireplumber { */
|
||||
/* color: @foreground; */
|
||||
/* } */
|
||||
/**/
|
||||
/* #wireplumber.muted { */
|
||||
/* color: @red; */
|
||||
/* } */
|
||||
|
||||
#custom-media {
|
||||
color: @green;
|
||||
min-width: 100px;
|
||||
}
|
||||
|
||||
#temperature {
|
||||
color: @temperature-color;
|
||||
}
|
||||
|
||||
#temperature.critical {
|
||||
color: @temperature-critical-color;
|
||||
}
|
||||
|
||||
#tray {
|
||||
background-color: @background-light;
|
||||
border-radius: 4px; /* Slight roundness for the tray container */
|
||||
padding: 0 8px;
|
||||
}
|
||||
|
||||
#tray > .passive {
|
||||
-gtk-icon-effect: dim;
|
||||
}
|
||||
|
||||
#tray > .needs-attention {
|
||||
-gtk-icon-effect: highlight;
|
||||
color: @red;
|
||||
}
|
||||
|
||||
#idle_inhibitor {
|
||||
color: @gray;
|
||||
}
|
||||
|
||||
#idle_inhibitor.activated {
|
||||
color: @foreground;
|
||||
}
|
||||
|
||||
#mpd {
|
||||
color: @green;
|
||||
}
|
||||
|
||||
#mpd.disconnected {
|
||||
color: @red;
|
||||
}
|
||||
|
||||
#mpd.stopped {
|
||||
color: @gray;
|
||||
}
|
||||
|
||||
#mpd.paused {
|
||||
color: @blue;
|
||||
}
|
||||
|
||||
#language {
|
||||
background: @background-light;
|
||||
color: @foreground;
|
||||
padding: 0 5px;
|
||||
margin: 0 5px;
|
||||
min-width: 16px;
|
||||
}
|
||||
|
||||
#keyboard-state {
|
||||
color: @foreground;
|
||||
padding: 0 0px;
|
||||
margin: 0 5px;
|
||||
min-width: 16px;
|
||||
}
|
||||
|
||||
#keyboard-state > label.locked {
|
||||
color: @red;
|
||||
}
|
||||
|
||||
#scratchpad {
|
||||
background: transparent;
|
||||
color: @gray;
|
||||
}
|
||||
|
||||
#scratchpad.empty {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
#privacy {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#privacy-item {
|
||||
padding: 0 5px;
|
||||
color: @foreground;
|
||||
}
|
||||
|
||||
#privacy-item.screenshare {
|
||||
color: @orange;
|
||||
}
|
||||
|
||||
#privacy-item.audio-in {
|
||||
color: @green;
|
||||
}
|
||||
|
||||
#privacy-item.audio-out {
|
||||
color: @blue;
|
||||
}
|
||||
|
||||
/* #custom-cider { */
|
||||
/* color: @cider-color; */
|
||||
/* } */
|
||||
Reference in New Issue
Block a user