diff options
| author | ryukamish <[email protected]> | 2026-03-17 20:36:12 +0530 |
|---|---|---|
| committer | ryukamish <[email protected]> | 2026-03-17 20:36:12 +0530 |
| commit | 6c197cfb233f595d8fe464b232f1d725261a5b4f (patch) | |
| tree | e4200fa0c221f02f74f0d1c8f7913b2ae654b577 /waybar | |
| parent | 5742fc100ef25cda9b6a0bc3f3bee7e8f1df5e34 (diff) | |
add: waybar for niri with colorscheme
Diffstat (limited to 'waybar')
| -rw-r--r-- | waybar/colors.css | 1 | ||||
| -rw-r--r-- | waybar/config.jsonc | 223 | ||||
| -rwxr-xr-x | waybar/scripts/mediaplayer.py | 143 | ||||
| -rwxr-xr-x | waybar/scripts/uptime.sh | 6 | ||||
| -rw-r--r-- | waybar/style.css | 127 | ||||
| -rw-r--r-- | waybar/themes/blacklotus.css | 8 | ||||
| -rw-r--r-- | waybar/themes/catppuccin-mocha.css | 12 | ||||
| -rw-r--r-- | waybar/themes/dracula.css | 8 | ||||
| -rw-r--r-- | waybar/themes/gruvbox-dark.css | 12 | ||||
| -rw-r--r-- | waybar/themes/kanagawa.css | 7 | ||||
| -rw-r--r-- | waybar/themes/rose-pine.css | 13 | ||||
| -rw-r--r-- | waybar/themes/tokyonight.css | 6 |
12 files changed, 566 insertions, 0 deletions
diff --git a/waybar/colors.css b/waybar/colors.css new file mode 100644 index 0000000..9e5f3fb --- /dev/null +++ b/waybar/colors.css @@ -0,0 +1 @@ +@import 'themes/tokyonight.css'; diff --git a/waybar/config.jsonc b/waybar/config.jsonc new file mode 100644 index 0000000..9bd4776 --- /dev/null +++ b/waybar/config.jsonc @@ -0,0 +1,223 @@ +// _*_ mode: jsonc _*_ +{ + "reload_style_on_change": true, + "layer": "top", + "position": "bottom", + "modules-left": [ + "niri/workspaces", + "custom/uptime", + "backlight", + "group/network", + ], + "modules-center": [], + "modules-right": [ + "group/expand-tray", + "group/hardware", + "group/audio", + "group/powerofmachine", + "clock" + ], + "niri/workspaces": { + "on-click": "activate", + "format": "{icon}", + "format-icons": { + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9", + "10": "10" + } + }, + // module groups + "group/hardware": { + "orientation": "horizontal", + "modules": [ + "cpu", + "memory", + "temperature" + ] + }, + "group/audio": { + "orientation": "horizontal", + "modules": [ + "bluetooth", + "pulseaudio" + ] + }, + "group/network": { + "orientation": "horizontal", + "modules": [ + "network", + "custom/vpn" + ] + }, + "group/powerofmachine": { + "orientation": "horizontal", + "modules": [ + "battery" + ] + }, + "group/expand-tray": { + "orientation": "inherit", + "drawer": { + "transition-duration": 600, + "children-class": "tray-group-item" + }, + "modules": [ + "custom/expand-icon", + "tray" + ] + }, + // Individual modules + "clock": { + "interval": 60, + "tooltip": true, + "format": " {:%R %d/%m}", + "tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>", + "format-alt": " {:%a, %d, %b %Y}" + }, + "memory": { + "interval": 12, + "format": " {}%" + }, + "cpu": { + "interval": 5, + "format": " {usage}%", + "on-click": "alacritty --class TUI.float -e btop" + }, + "temperature": { + // The thermal zone for CPU changes from time to time on MSI Laptops + "thermal-zone": 5, + "critical-threshold": 80, + "format": " {temperatureC}°C" + }, + "network": { + "interface": "wlan0", + "family": "ipv4", + "format": "{ifname}", + "format-wifi": "{icon} {essid}", + "format-ethernet": " {ipaddr}/<span color='#aaaaaa'>{cidr}</span>", + "format-disconnected": " DC'D", + "format-icons": [ + "", + "", + "", + "", + "" + ], + "tooltip-format": "{ifname} via {gwaddr}", + "tooltip-format-wifi": "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}", + "tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}", + "tooltip-format-disconnected": "Disconnected", + "interval": 5, + "on-click": "alacritty --class TUI.float -e wifitui", + "on-click-right": "rfkill toggle wlan" + }, + "backlight": { + "device": "intel_backlight", + "format": "{icon} {percent}%", + "format-icons": [ + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "bluetooth": { + "format": " {num_connections}", + "format-disabled": "<span color='#aaaaaa'></span>", + "format-connected": " {num_connections}", + "tooltip-format": "Devices connected: {num_connections}\n{device_alias} at {device_battery_percentage}%", + "on-click": "alacritty --class=TUI.float -e bluetui", + "on-click-right": "rfkill toggle bluetooth" + }, + "pulseaudio": { + "format": "{icon} {volume}%", + "on-click": "alacritty --class TUI.float -e wiremix", + "tooltip-format": "{desc}", + "scroll-step": 5, + "format-muted": "<span color='#aaaaaa' </span>", + "format-icons": { + "headphone": "", + "default": [ + "", + "", + "" + ] + } + }, + "battery": { + "format": "{capacity}% {icon}", + "format-discharging": "{icon} {capacity}%", + "format-charging": "{icon} {capacity}%", + "format-plugged": " {capacity}%", + "format-full": " {capacity}%", + "format-icons": { + "charging": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ], + "default": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "interval": 5, + "states": { + "warning": 20, + "critical": 10 + } + }, + // Tray + "tray": { + "icon-size": 10, + "spacing": 10 + }, + // Custom modules + "custom/vpn": { + "format": " VPN", + "exec": "echo '{\"class\": \"connected\"}'", + "exec-if": "test -d /proc/sys/net/ipv4/conf/proton0", + "return-type": "json", + "interval": 5 + }, + "custom/expand-icon": { + "format": " ", + "tooltip": false + }, + "custom/uptime": { + "format": "{}", + "format-icon": [ + "" + ], + "tooltip": false, + "interval": 1600, + "exec": "~/.config/waybar/scripts/uptime.sh" + } +} diff --git a/waybar/scripts/mediaplayer.py b/waybar/scripts/mediaplayer.py new file mode 100755 index 0000000..870eabf --- /dev/null +++ b/waybar/scripts/mediaplayer.py @@ -0,0 +1,143 @@ +#!/usr/bin/env python3 +import argparse +import logging +import sys +import signal +import gi +import json + +gi.require_version("Playerctl", "2.0") +from gi.repository import Playerctl, GLib + +logger = logging.getLogger(__name__) + + +def write_output(text, player): + logger.info("Writing output") + + output = { + "text": text, + "class": "custom-" + player.props.player_name, + "alt": player.props.player_name, + } + + sys.stdout.write(json.dumps(output) + "\n") + sys.stdout.flush() + + +def on_play(player, status, manager): + logger.info("Received new playback status") + on_metadata(player, player.props.metadata, manager) + + +def on_metadata(player, metadata, manager): + logger.info("Received new metadata") + track_info = "" + + if ( + player.props.player_name == "spotify" + and "mpris:trackid" in metadata.keys() + and ":ad:" in player.props.metadata["mpris:trackid"] + ): + track_info = "AD PLAYING" + elif player.get_artist() != "" and player.get_title() != "": + track_info = "{artist} - {title}".format( + artist=player.get_artist(), title=player.get_title() + ) + else: + track_info = player.get_title() + + if player.props.status != "Playing" and track_info: + track_info = " " + track_info + write_output(track_info, player) + + +def on_player_appeared(manager, player, selected_player=None): + if player is not None and ( + selected_player is None or player.name == selected_player + ): + init_player(manager, player) + else: + logger.debug("New player appeared, but it's not the selected player, skipping") + + +def on_player_vanished(manager, player): + logger.info("Player has vanished") + sys.stdout.write("\n") + sys.stdout.flush() + + +def init_player(manager, name): + logger.debug("Initialize player: {player}".format(player=name.name)) + player = Playerctl.Player.new_from_name(name) + player.connect("playback-status", on_play, manager) + player.connect("metadata", on_metadata, manager) + manager.manage_player(player) + on_metadata(player, player.props.metadata, manager) + + +def signal_handler(sig, frame): + logger.debug("Received signal to stop, exiting") + sys.stdout.write("\n") + sys.stdout.flush() + # loop.quit() + sys.exit(0) + + +def parse_arguments(): + parser = argparse.ArgumentParser() + + # Increase verbosity with every occurrence of -v + parser.add_argument("-v", "--verbose", action="count", default=0) + + # Define for which player we're listening + parser.add_argument("--player") + + return parser.parse_args() + + +def main(): + arguments = parse_arguments() + + # Initialize logging + logging.basicConfig( + stream=sys.stderr, + level=logging.DEBUG, + format="%(name)s %(levelname)s %(message)s", + ) + + # Logging is set by default to WARN and higher. + # With every occurrence of -v it's lowered by one + logger.setLevel(max((3 - arguments.verbose) * 10, 0)) + + # Log the sent command line arguments + logger.debug("Arguments received {}".format(vars(arguments))) + + manager = Playerctl.PlayerManager() + loop = GLib.MainLoop() + + manager.connect( + "name-appeared", lambda *args: on_player_appeared(*args, arguments.player) + ) + manager.connect("player-vanished", on_player_vanished) + + signal.signal(signal.SIGINT, signal_handler) + signal.signal(signal.SIGTERM, signal_handler) + signal.signal(signal.SIGPIPE, signal.SIG_DFL) + + for player in manager.props.player_names: + if arguments.player is not None and arguments.player != player.name: + logger.debug( + "{player} is not the filtered player, skipping it".format( + player=player.name + ) + ) + continue + + init_player(manager, player) + + loop.run() + + +if __name__ == "__main__": + main() diff --git a/waybar/scripts/uptime.sh b/waybar/scripts/uptime.sh new file mode 100755 index 0000000..786561f --- /dev/null +++ b/waybar/scripts/uptime.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +UPTIME_PRETTY=$(uptime -p) + +UPTIME_FORMATTED=$(echo "$UPTIME_PRETTY" | sed 's/^up //;s/,*$//;s/minute/m/; s/hour/h/; s/day/d/; s/s//g') + +echo " $UPTIME_FORMATTED" diff --git a/waybar/style.css b/waybar/style.css new file mode 100644 index 0000000..cda8a00 --- /dev/null +++ b/waybar/style.css @@ -0,0 +1,127 @@ +@import "colors.css"; + +* { + border: none; + font-family: "MesloLGLDZ Nerd Font Propo, sans-serif"; + font-size: 12px; + font-weight: bold; + min-height: 0; +} + +/* Keyframe animations */ +@keyframes urgent-blink { + 0% { + color: #eb4d4b; + } + + 50% { + color: #ffffff; + } + + 100% { + color: #eb4d4b; + } +} + +window#waybar { + background-color: @background; + color: @foreground; +} + +/* Workspaces */ +#workspaces { + margin-right: 0.75rem; +} + +#workspaces button.active { + color: @color1; +} + +#workspaces button.empty.active { + color: @color2; + /* opacity: 1; */ +} + +/* #workspaces button.empty { */ +/* opacity: 0.2; */ +/* } */ + +/* #workspaces button:not(.empty) { */ +/* opacity: 0.7; */ +/* } */ + +#workspaces button.urgent { + color: #ffffff; + background-color: rgba(255, 0, 0, 0.5); + border-radius: 0; +} + +/* Modules */ +#battery, +#clock { + margin: 0 0.45rem; +} + +#backlight, +#bluetooth, +#cpu, +#temperature, +#memory, +#pulseaudio { + margin: 0 0.45rem; +} + +#tray { + margin-left: 0.25rem; +} + +#bluetooth.connected { + color: @color1; +} + +#battery:not(.charging).warning { + color: #FFA500; +} + +#battery:not(.charging).critical { + color: #FF0000; +} + +#network.disconnected { + color: #FF0000; +} + +/* Groups */ +#audio, +#expand-tray, +#hardware, +#powerofmachine, +#network { + margin: 0 0.55rem; +} + +#power-profiles-daemon.power-saver { + color: rgba(0, 250, 0, 1); +} + +#power-profiles-daemon.performance { + color: rgba(200, 0, 0, 1); +} + +/* Custom modules */ +#custom-screenrecording-indicator { + color: #ff0000; + animation-name: urgent-blink; + animation-duration: 1s; + animation-timing-function: steps(18); + animation-iteration-count: infinite; + animation-direction: alternate; +} + +#custom-uptime { + margin: 0 0.55rem; +} + +#custom-pomodoro { + margin: 0 0.55rem; +} diff --git a/waybar/themes/blacklotus.css b/waybar/themes/blacklotus.css new file mode 100644 index 0000000..0add7da --- /dev/null +++ b/waybar/themes/blacklotus.css @@ -0,0 +1,8 @@ +/* BlackLotus Colorscheme */ +@define-color background #0B0A0F; +@define-color foreground #D7D2E9; + +@define-color color1 #A277FF; +@define-color color3 #E363C9; +@define-color color2 #6E8CFF; +@define-color color4 #2EE2D0; diff --git a/waybar/themes/catppuccin-mocha.css b/waybar/themes/catppuccin-mocha.css new file mode 100644 index 0000000..19296d5 --- /dev/null +++ b/waybar/themes/catppuccin-mocha.css @@ -0,0 +1,12 @@ +/* +* Variant: Catppuccin Mocha +* Maintainer: https://github.com/catppuccin/waybar.git +*/ + +@define-color background #1e1e2e; +@define-color foreground #cdd6f4; + +@define-color color1 #fab387; +@define-color color2 #f5e0dc; +@define-color color3 #74c7ec; +@define-color color4 #f9e2af; diff --git a/waybar/themes/dracula.css b/waybar/themes/dracula.css new file mode 100644 index 0000000..42f7cce --- /dev/null +++ b/waybar/themes/dracula.css @@ -0,0 +1,8 @@ +@define-color background #282a36; +@define-color selection #44475a; +@define-color foreground #f8f8f2; + +@define-color color1 #bd93f9; +@define-color color2 #ffb86c; +@define-color color3 #ff5555; +@define-color color4 #50fa7b; diff --git a/waybar/themes/gruvbox-dark.css b/waybar/themes/gruvbox-dark.css new file mode 100644 index 0000000..5dcf4c6 --- /dev/null +++ b/waybar/themes/gruvbox-dark.css @@ -0,0 +1,12 @@ +/* Gruvbox Dark Hard – only 8 colors you’ll ever need */ +@define-color background #1d2021; /* darkest */ +@define-color background0 #282828; /* main background */ +@define-color background1 #3c3836; /* statusbars, selected lines */ +@define-color background2 #504945; /* subtle highlights */ +@define-color foreground #ebdbb2; /* main text */ +@define-color foreground0 #fbf1c7; /* brightest text (rarely used) */ +@define-color accent #fe8019; /* bright orange – main accent */ +@define-color color1 #cc241d; /* dark red */ +@define-color color2 #98971a; /* dark green */ +@define-color color3 #d79921; /* dark yellow */ +@define-color color4 #458588; /* dark blue */ diff --git a/waybar/themes/kanagawa.css b/waybar/themes/kanagawa.css new file mode 100644 index 0000000..2a5c343 --- /dev/null +++ b/waybar/themes/kanagawa.css @@ -0,0 +1,7 @@ +@define-color foreground #DCD7BA; +@define-color background #1F1F28; + +@define-color color1 #FF5D62; +@define-color color2 #7AA89F; +@define-color color3 #E6C384; +@define-color color4 #7E9CD8; diff --git a/waybar/themes/rose-pine.css b/waybar/themes/rose-pine.css new file mode 100644 index 0000000..e323881 --- /dev/null +++ b/waybar/themes/rose-pine.css @@ -0,0 +1,13 @@ +/* +* Variant: Rosé Pine +* Maintainer: DankChoir +* Modified for few colors +*/ + +@define-color background #191724; +@define-color foreground #1f1d2e; + +@define-color color1 #eb6f92; +@define-color color2 #f6c177; +@define-color color3 #ebbcba; +@define-color color4 #31748f; diff --git a/waybar/themes/tokyonight.css b/waybar/themes/tokyonight.css new file mode 100644 index 0000000..2f2dcf5 --- /dev/null +++ b/waybar/themes/tokyonight.css @@ -0,0 +1,6 @@ +@define-color background #1a1b26; +@define-color foreground #c0caf5; + +@define-color color1 #7dcfff; +@define-color color2 #f7768e; +@define-color color3 #7aa2f7; |
