Files
nixos/modules/applications/waybar.nix
T

717 lines
20 KiB
Nix

_: {
flake.homeModules.waybar = _: {
# replaced by caelestia
programs.waybar = {
enable = true;
settings = [
{
layer = "top";
position = "left";
margin = "5 2 5 0";
reload_style_on_change = true;
modules-left = [
"hyprland/workspaces"
"group/info"
"group/power"
];
modules-center = [
];
modules-right = [
"hyprland/window"
"group/brightness"
"group/sound"
"group/connection"
"group/together"
"tray"
"battery"
];
# groups settings are organized by alphabetical order
"group/audio" = {
orientation = "inherit";
drawer = {
transition-duration = 500;
transition-left-to-right = false;
};
modules = [
"pulseaudio"
"pulseaudio#mic"
"pulseaudio/slider"
];
};
"group/bluetooth" = {
orientation = "inherit";
drawer = {
transition-duration = 500;
transition-left-to-right = true;
};
modules = [
"bluetooth"
"bluetooth#status"
];
};
"group/brightness" = {
orientation = "inherit";
drawer = {
transition-duration = 500;
transition-left-to-right = false;
};
modules = [
"backlight"
"backlight/slider"
];
};
"group/connection" = {
orientation = "inherit";
modules = ["group/network"];
};
"group/gcpu" = {
orientation = "inherit";
modules = [
"custom/cpu-icon"
"temperature"
"cpu"
];
};
"group/info" = {
orientation = "inherit";
modules = [
"group/gcpu"
"memory"
"disk"
];
};
"group/network" = {
orientation = "inherit";
drawer = {
transition-duration = 500;
transition-left-to-right = true;
};
modules = [
"network"
"network#speed"
];
};
"group/power" = {
orientation = "inherit";
modules = [
"battery#w"
"battery#powerdraw"
];
};
"group/sound" = {
orientation = "inherit";
modules = [
"group/audio"
"custom/notification"
];
};
"group/together" = {
orientation = "inherit";
modules = [
"group/utils"
"clock"
];
};
"group/utils" = {
orientation = "inherit";
drawer = {
transition-duration = 500;
transition-left-to-right = true;
};
modules = [
"custom/weather"
"custom/colorpicker"
];
};
# modules settings are organized by alphabetical order
backlight = {
device = "intel_backlight"; # my laptop is amd and it works
format = "{icon}";
format-icons = [
""
""
""
""
""
""
""
""
""
""
""
""
""
""
""
];
on-scroll-down = "brightnessctl s 5%-";
on-scroll-up = "brightness s +5%";
tooltip = true;
tooltip-format = "Brightness: {percent}%";
smooth-scrolling-threshold = 1;
};
"backlight/slider" = {
min = 5;
max = 100;
orientation = "vertical";
device = "intel_backlight";
};
battery = {
#rotate = 90;
interval = 30;
states = {
good = 95;
warning = 20;
critical = 15;
};
format = "{icon} {capacity}";
format-charging = "<b>{icon} {capacity}% </b>";
format-full = "<span color='#82A55F'><b>{icon}</b></span>";
format-icons = [
"󰁻"
"󰁼"
"󰁾"
"󰂀"
"󰂂"
"󰁹"
];
tooltip-format = "{timeTo} {capacity} %";
};
"battery#powerdraw" = {
rotate = 90;
interval = 10;
format = "{power:.0001f}";
};
"battery#w" = {
rotate = 90;
interval = 100000;
format = "W";
};
bluetooth = {
format-on = "";
format-off = "󰂲";
format-disabled = "";
format-connected = "<b></b>";
tooltip-format = "{controller_alias}\t{controller_address}\n\n{num_connections} connected";
tooltip-format-connected = "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}";
tooltip-format-enumerate-connected = "{device_alias}\t{device_address}";
tooltip-format-enumerate-connected-battery = "{device_alias}\t{device_address}\t{device_battery_percentage}%";
};
"bluetooth#status" = {
format-on = "";
format-off = "";
format-disabled = "";
format-connected = "<b>{num_connections}</b>";
format-connected-battery = "<small><b>{device_battery_percentage}%</b></small>";
tooltip-format = "{controller_alias}\t{controller_address}\n\n{num_connections} connected";
tooltip-format-connected = "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}";
tooltip-format-enumerate-connected = "{device_alias}\t{device_address}";
tooltip-format-enumerate-connected-battery = "{device_alias}\t{device_address}\t{device_battery_percentage}%";
};
clock = {
format = "{:%H\n%M}";
tooltip-format = "<tt><small>{calendar}</small></tt>";
calendar = {
mode = "month";
mode-mon-col = 3;
weeks-pos = "right";
on-scroll = 1;
on-click-right = "mode";
format = {
today = "<span color='#d65d0e'><b><u>{}</u></b></span>";
};
};
};
cpu = {
format = "<b>{usage}%</b>";
};
"custom/colorpicker" = {
format = "";
on-click = "hyprpicker | tee >(wl-copy) | cliphist store";
};
"custom/cpu-icon" = {
format = "󰻠";
tooltip = false;
};
"custom/mark" = {
format = "";
tooltip = false;
};
"custom/weather" = {
format = "{}";
interval = 3600;
exec = "custom-weatherwaybar";
return-type = "json";
};
disk = {
interval = 600;
format = "<b> 󰋊 \n{percentage_used}󱉸</b>";
path = "/"; #maybe we should subtract ~/kdrive if it is counted
};
"hyprland/window" = {
format = "{class}";
rotate = 90;
};
"hyprland/workspaces" = {
format = "{icon}";
format-icons = {
"1" = "";
"2" = "";
"3" = "";
"4" = "";
"5" = "";
"6" = "";
"7" = "";
"8" = "";
"9" = "";
"10" = "";
"active" = "";
"default" = "";
};
persistent-workspaces = {
"*" = [1 2 3 4 5 6 7 8 9 10];
};
};
idle_inhibitor = {
format = "{icon}";
tooltip-format-activated = "Idle Inhibitor is active";
tooltip-format-deactivated = "Idle Inhibitor is not active";
format-icons = {
activated = "󰔡";
deactivated = "󰔢";
};
};
memory = {
format = "<b>  \n{:2}󱉸</b>";
};
network = {
format = "{icon}";
format-icons = {
wifi = ["󰤨"];
ethernet = ["󰈀"];
disconnected = ["󰖪"];
};
format-wifi = "󰤨";
format-ethernet = "󰈀";
format-disconnected = "󰖪";
format-linked = "󰈁";
tooltip = false;
};
"network#speed" = {
format = " {bandwidthDownBits} ";
rotate = 90;
interval = 5;
tooltip-format = "{ipaddr}";
tooltip-format-wifi = "{essid} ({signalStrength}%)  \n{ipaddr} | {frequency} MHz{icon} ";
tooltip-format-ethernet = "{ifname} 󰈀 \n{ipaddr} | {frequency} MHz{icon} ";
tooltip-format-disconnected = "Not Connected to any type of Network";
tooltip = true;
};
power-profiles-daemon = {
format = "{icon}";
tooltip-format = "Power profile: {profile}\nDriver: {driver}";
tooltip = true;
format-icons = {
default = "";
performance = "<span color='#B37F34'><small></small></span>";
balanced = "<span><small> </small></span>";
power-saver = "<span color='#a6e3a1'><small></small></span>";
};
};
pulseaudio = {
format = "{icon}";
format-bluetooth = "{icon}";
tooltip-format = "{volume}% {icon} | {desc}";
format-muted = "󰖁";
format-icons = {
headphones = "󰋌";
handsfree = "󰋌";
headset = "󰋌";
phone = "";
portable = "";
car = " ";
default = [
"󰕿"
"󰖀"
"󰕾"
];
};
on-click = "volume mute";
on-click-middle = "pavucontrol";
on-scroll-up = "pactl set-sink-volume @DEFAULT_SINK@ +5%";
on-scroll-down = "pactl set-sink-volume @DEFAULT_SINK@ -5%";
smooth-scrolling-threshold = 1;
};
"pulseaudio#mic" = {
format = "{format_source}";
format-source = "";
format-source-muted = "";
tooltip-format = "{volume}% {format_source}";
on-click = "pactl set-source-mute 0 toggle";
on-scroll-down = "pactl set-source-volume 0 -1%";
on-scroll-up = "pactl set-source-volume 0 +1%";
};
"pulseaudio/slider" = {
min = 0;
max = 140;
orientation = "vertical";
};
temperature = {
format = "{temperatureC}°C";
format-critical = "{temperatureC}°C";
interval = 10;
};
tray = {
icon-size = 18;
spacing = 10;
};
}
]; # home-manager wants the whole config as a list of bars
style = ''
@define-color foreground #c5c5c5;
@define-color background #191919;
@define-color cursor #c5c5c5;
@define-color color0 #191919;
@define-color color1 #3a3632;
@define-color color2 #582c1e;
@define-color color3 #423f39;
@define-color color4 #50473c;
@define-color color5 #634723;
@define-color color6 #BAA470;
@define-color color7 #8c8c8c;
@define-color color8 #525252;
@define-color color9 #4e4843;
@define-color color10 #763b28;
@define-color color11 #59554c;
@define-color color12 #6b5f51;
@define-color color13 #855f2f;
@define-color color14 #796d62;
@define-color color15 #c5c5c5;
@define-color active @color6;
* {
font-size: 23px;
font-family: "0xProto Nerd Font";
min-width: 8px;
min-height: 0px;
border: none;
border-radius: 0;
box-shadow: none;
text-shadow: none;
padding: 0px;
margin: 0px;
}
window#waybar {
transition-property: background-color;
transition-duration: 0.5s;
border-radius: 8px;
border: 2px solid @active;
background: @background;
background: alpha(@background, 0.7);
color: lighter(@active);
}
menu,
tooltip {
border-radius: 8px;
padding: 2px;
border: 1px solid lighter(@active);
background: alpha(@background, 0.6);
color: lighter(@active);
}
menu label,
tooltip label {
font-size: 20px;
color: lighter(@active);
}
#submap,
#tray>.needs-attention {
animation-name: blink-active;
animation-duration: 1s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
.modules-right {
margin: 0px 6px 6px 6px;
border-radius: 4px;
background: alpha(@background, 0.4);
color: lighter(@active);
}
.modules-left {
transition-property: background-color;
transition-duration: 0.5s;
margin: 6px 6px 6px 6px;
border-radius: 4px;
background: alpha(@background, 0.4);
color: lighter(@active);
}
#gcpu,
#custom-github,
#memory,
#disk,
#together,
#submap,
#custom-weather {
font-size: 17px;
}
#custom-recorder,
#connection,
#cnoti,
#brightness,
#power,
#custom-updates,
#tray,
#audio,
#privacy,
#sound {
border-radius: 4px;
margin: 2px 2px 4px 2px;
background: alpha(darker(@active), 0.3);
}
#custom-notifications {
padding-left: 4px;
}
#custom-hotspot,
#custom-github,
#custom-notifications {
font-size: 20px;
}
#custom-hotspot {
padding-right: 2px;
}
#custom-vpn,
#custom-hotspot {
background: alpha(darker(@active), 0.3);
}
#privacy-item {
padding: 6px 0px 6px 6px;
}
#gcpu {
padding: 8px 0px 8px 0px;
}
#custom-cpu-icon {
font-size: 36px;
}
#custom-cputemp,
#temperature {
font-size: 17px;
}
#disk,
#memory,
#cpu {
font-size: 20px;
font-weight: bold;
}
#custom-github {
padding-top: 2px;
padding-right: 4px;
}
#custom-dmark {
color: alpha(@foreground, 0.3);
}
#submap {
margin-bottom: 0px;
}
#hyprland.window {
margin-left: 20px;
}
#workspaces {
margin: 0px 2px;
padding: 4px 0px 0px 0px;
border-radius: 8px;
}
#workspaces button {
transition-property: background-color;
transition-duration: 0.5s;
color: @foreground;
background: transparent;
border-radius: 4px;
color: alpha(@foreground, 0.3);
}
#workspaces button.urgent {
font-weight: bold;
color: @foreground;
}
#workspaces button.active {
padding: 4px 2px;
background: alpha(@active, 0.4);
color: lighter(@active);
border-radius: 4px;
}
#network.wifi {
padding-right: 4px;
}
#submap {
min-width: 0px;
margin: 4px 6px 4px 6px;
}
#tray {
padding: 0px 0px 0px 0px;
}
#bluetooth {
padding-top: 2px;
}
#window {
border-radius: 8px;
padding: 4px 14px;
margin: 4px 2px 4px 2px;
}
#battery {
font-size: 17px;
border-radius: 8px;
padding: 4px 0px;
margin: 4px 2px 4px 2px;
}
#battery.discharging.warning {
animation-name: blink-yellow;
animation-duration: 1s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#battery.discharging.critical {
animation-name: blink-red;
animation-duration: 1s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#battery.powerdraw {
font-size: 17px;
padding: 0;
margin-right: -20px;
margin-left: -20px;
}
#battery.w {
font-size: 17px;
padding: 0;
margin-left: -20px;
margin-right: -20px;
}
#clock {
font-weight: bold;
padding: 4px 2px 2px 2px;
}
#pulseaudio.mic {
border-radius: 4px;
color: @background;
background: alpha(darker(@foreground), 0.6);
padding-left: 4px;
}
#backlight-slider slider,
#pulseaudio-slider slider {
background-color: transparent;
box-shadow: none;
}
#backlight-slider trough,
#pulseaudio-slider trough {
margin-top: 4px;
min-width: 6px;
min-height: 60px;
border-radius: 8px;
background-color: alpha(@background, 0.6);
}
#backlight-slider highlight,
#pulseaudio-slider highlight {
border-radius: 8px;
background-color: lighter(@active);
}
#bluetooth.discoverable,
#bluetooth.discovering,
#bluetooth.pairable {
border-radius: 8px;
animation-name: blink-active;
animation-duration: 1s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
@keyframes blink-active {
to {
background-color: @active;
color: @foreground;
}
}
@keyframes blink-red {
to {
background-color: #c64d4f;
color: @foreground;
}
}
@keyframes blink-yellow {
to {
background-color: #cf9022;
color: @foreground;
}
}
'';
};
};
perSystem = {pkgs, ...}: {
packages.custom-weatherwaybar = pkgs.writeShellApplication {
name = "custom-weatherwaybar";
runtimeInputs = with pkgs; [
curl
];
text = ''
PATTERN="C"
PATTERN2=" "
TEXT1="''$(curl -s "https://wttr.in/?format=%c")"
TEXT1=''${TEXT1/$PATTERN2/}
TEXT2="''$(curl -s "https://wttr.in/?format=%t")"
TEXT2=''${TEXT2/$PATTERN/}
TEXT3="''$(curl -s "https://wttr.in/?format=%f")"
TEXT3=''${TEXT3/$PATTERN/}
printf '{"text":" %s\\n %s\\n %s", "tooltip": false, "class": "weather"}\\n' \
"$TEXT1" "$TEXT2" "$TEXT3"
'';
};
};
}