2024-08-25 19:10:52 +02:00
|
|
|
|
{ ... }: { config, lib, pkgs, ... }@args:
|
|
|
|
|
let
|
|
|
|
|
osConfig = args.osConfig or { };
|
|
|
|
|
|
2024-08-25 19:30:47 +02:00
|
|
|
|
brightnessctl = lib.getExe pkgs.brightnessctl;
|
2024-08-25 19:10:52 +02:00
|
|
|
|
busctl = osConfig.systemd.package + /bin/busctl;
|
|
|
|
|
gammarelay = lib.getExe pkgs.wl-gammarelay-rs;
|
|
|
|
|
pwvucontrol = lib.getExe pkgs.pwvucontrol;
|
2024-08-27 10:14:09 +02:00
|
|
|
|
rfkill = pkgs.util-linux + /bin/rfkill;
|
2024-08-25 19:10:52 +02:00
|
|
|
|
wpctl = osConfig.services.pipewire.wireplumber.package + /bin/wpctl;
|
2024-08-27 10:14:09 +02:00
|
|
|
|
wttrbar = pkgs.wttrbar + /bin/wttrbar;
|
2024-08-25 19:10:52 +02:00
|
|
|
|
|
|
|
|
|
gr = cmd: "${busctl} --user -- ${cmd} rs.wl-gammarelay / rs.wl.gammarelay";
|
|
|
|
|
gr-set = gr "set-property";
|
|
|
|
|
gr-call = gr "call";
|
|
|
|
|
in lib.mkIf (osConfig.hardware.graphics.enable or false) {
|
|
|
|
|
programs.waybar = {
|
|
|
|
|
enable = true;
|
2024-08-26 21:58:18 +02:00
|
|
|
|
systemd.enable = true;
|
|
|
|
|
|
2024-08-25 19:10:52 +02:00
|
|
|
|
package = pkgs.waybar.override {
|
|
|
|
|
cavaSupport = false;
|
|
|
|
|
hyprlandSupport = false;
|
|
|
|
|
jackSupport = false;
|
|
|
|
|
mpdSupport = false;
|
|
|
|
|
sndioSupport = false;
|
|
|
|
|
};
|
|
|
|
|
|
2024-08-26 19:45:44 +02:00
|
|
|
|
style = pkgs.writeText "waybar-style.css"
|
|
|
|
|
(with config.lib.stylix.colors.withHashtag; ''
|
|
|
|
|
* {
|
|
|
|
|
font: 600 12pt sans-serif;
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-27 10:14:09 +02:00
|
|
|
|
window > box {
|
|
|
|
|
padding: 1.5mm 3mm;
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-26 19:45:44 +02:00
|
|
|
|
window, tooltip {
|
|
|
|
|
background: ${base00};
|
|
|
|
|
color: ${base05};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tooltip {
|
|
|
|
|
border-color: ${base0D};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
label.module {
|
2024-08-27 10:14:09 +02:00
|
|
|
|
padding: 0 3mm;
|
2024-08-26 19:45:44 +02:00
|
|
|
|
min-width: 5mm;
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-27 11:43:06 +02:00
|
|
|
|
#battery.warning {
|
|
|
|
|
color: ${yellow};
|
2024-08-26 19:45:44 +02:00
|
|
|
|
}
|
|
|
|
|
|
2024-08-27 11:43:06 +02:00
|
|
|
|
#battery.critical {
|
|
|
|
|
color: ${red};
|
2024-08-26 19:45:44 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#temperature.critical {
|
|
|
|
|
color: ${red};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#idle_inhibitor.activated {
|
|
|
|
|
color: ${yellow};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#pulseaudio.muted {
|
|
|
|
|
color: ${base03};
|
|
|
|
|
}
|
|
|
|
|
'') |> lib.mkForce;
|
|
|
|
|
|
2024-08-25 19:10:52 +02:00
|
|
|
|
settings = {
|
|
|
|
|
main = {
|
|
|
|
|
layer = "top";
|
|
|
|
|
position = "bottom";
|
2024-08-27 10:14:09 +02:00
|
|
|
|
spacing = 0;
|
2024-08-25 19:10:52 +02:00
|
|
|
|
|
2024-08-27 10:14:09 +02:00
|
|
|
|
modules-left = [ "tray" ];
|
|
|
|
|
modules-center = [ "mpris" ];
|
2024-08-25 19:10:52 +02:00
|
|
|
|
modules-right = [
|
2024-08-27 10:14:09 +02:00
|
|
|
|
"idle_inhibitor"
|
|
|
|
|
"network"
|
2024-08-25 19:10:52 +02:00
|
|
|
|
"bluetooth"
|
2024-08-27 10:14:09 +02:00
|
|
|
|
"temperature"
|
2024-08-25 19:10:52 +02:00
|
|
|
|
"cpu"
|
|
|
|
|
"memory"
|
|
|
|
|
"disk"
|
2024-08-25 19:30:47 +02:00
|
|
|
|
"backlight"
|
|
|
|
|
"custom/gammarelay"
|
2024-08-25 19:10:52 +02:00
|
|
|
|
"pulseaudio#sink"
|
|
|
|
|
"pulseaudio#source"
|
2024-08-27 10:14:09 +02:00
|
|
|
|
"battery"
|
|
|
|
|
"custom/weather"
|
2024-08-25 19:10:52 +02:00
|
|
|
|
"clock"
|
|
|
|
|
];
|
|
|
|
|
|
2024-08-27 10:14:09 +02:00
|
|
|
|
mpris = {
|
|
|
|
|
interval = 1;
|
|
|
|
|
format = "{status_icon} {dynamic} {player_icon}";
|
|
|
|
|
dynamic-order = [ "title" "artist" "position" "length" ];
|
|
|
|
|
dynamic-separator = " – ";
|
|
|
|
|
ellipsis = "…";
|
|
|
|
|
|
|
|
|
|
player-icons = {
|
|
|
|
|
default = "";
|
|
|
|
|
mopidy = "";
|
|
|
|
|
mpv = "";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
status-icons = {
|
|
|
|
|
playing = "";
|
|
|
|
|
paused = "";
|
|
|
|
|
stopped = "";
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
idle_inhibitor = {
|
|
|
|
|
format = "{icon}";
|
|
|
|
|
format-icons = {
|
|
|
|
|
activated = "";
|
|
|
|
|
deactivated = "";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
timeout = 15.0;
|
2024-08-25 19:10:52 +02:00
|
|
|
|
};
|
|
|
|
|
|
2024-08-27 15:48:18 +02:00
|
|
|
|
network = {
|
2024-08-27 10:14:09 +02:00
|
|
|
|
interval = 10;
|
|
|
|
|
format = "{icon} {bandwidthDownBytes} {bandwidthUpBytes}";
|
|
|
|
|
format-icons = {
|
|
|
|
|
disconnected = "";
|
|
|
|
|
linked = "";
|
|
|
|
|
ethernet = "";
|
|
|
|
|
wifi = [ "" "" "" "" "" ];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
tooltip-format = "{ifname}";
|
|
|
|
|
tooltip-format-wifi = "{essid} ({signalStrength} %)";
|
2024-08-25 19:10:52 +02:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
bluetooth = {
|
2024-08-27 10:14:09 +02:00
|
|
|
|
format = "";
|
|
|
|
|
format-off = "";
|
|
|
|
|
format-on = "";
|
|
|
|
|
format-connected = "";
|
|
|
|
|
format-connected-battery = " {device_battery_percentage} %";
|
|
|
|
|
|
|
|
|
|
on-click-right = "${rfkill} toggle bluetooth";
|
|
|
|
|
|
2024-08-25 19:10:52 +02:00
|
|
|
|
tooltip-format-connected-battery = "{device_enumerate}";
|
|
|
|
|
tooltip-format-enumerate-connected-battery = "{device_alias}\t{device_battery_percentage} %";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
cpu = {
|
|
|
|
|
format = " {usage} %";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
memory = {
|
2024-08-27 10:14:09 +02:00
|
|
|
|
format = " {percentage} % {swapPercentage} %";
|
|
|
|
|
tooltip-format = "{used:0.1f} / {total:0.1f} GiB\n{swapUsed:0.1f} / {swapTotal:0.1f} GiB";
|
2024-08-26 19:45:44 +02:00
|
|
|
|
states = {
|
|
|
|
|
warning = 96;
|
|
|
|
|
critical = 99;
|
|
|
|
|
};
|
2024-08-25 19:10:52 +02:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
temperature = let
|
|
|
|
|
fmt = "{temperatureC} °C";
|
|
|
|
|
in {
|
|
|
|
|
format = " ${fmt}";
|
|
|
|
|
format-critical = " ${fmt}";
|
|
|
|
|
tooltip-format = fmt;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
disk = {
|
|
|
|
|
format = " {percentage_used} %";
|
|
|
|
|
path = "/home";
|
|
|
|
|
tooltip-format = "{used} / {total}";
|
|
|
|
|
};
|
|
|
|
|
|
2024-08-27 10:14:09 +02:00
|
|
|
|
"backlight" = let
|
|
|
|
|
fmt = "{percent} %";
|
|
|
|
|
in {
|
|
|
|
|
format = "{icon} ${fmt}";
|
|
|
|
|
format-icons = [ "" "" "" "" "" "" "" "" "" "" "" ];
|
2024-08-25 19:10:52 +02:00
|
|
|
|
|
2024-08-27 10:14:09 +02:00
|
|
|
|
on-click = "${brightnessctl} set 100%";
|
|
|
|
|
on-click-right = "${brightnessctl} set 5%";
|
2024-08-25 19:30:47 +02:00
|
|
|
|
on-scroll-up = "${brightnessctl} set +1%";
|
|
|
|
|
on-scroll-down = "${brightnessctl} set 1%-";
|
2024-08-27 10:14:09 +02:00
|
|
|
|
|
|
|
|
|
tooltip-format = fmt;
|
2024-08-25 19:30:47 +02:00
|
|
|
|
};
|
|
|
|
|
|
2024-08-27 10:14:09 +02:00
|
|
|
|
"custom/gammarelay" = let
|
|
|
|
|
fmt = "{} K";
|
|
|
|
|
in {
|
|
|
|
|
format = " ${fmt}";
|
2024-08-25 19:10:52 +02:00
|
|
|
|
exec = "${gammarelay} watch {t}";
|
2024-08-27 10:14:09 +02:00
|
|
|
|
|
|
|
|
|
on-click = "${gr-set} Temperature q 6500";
|
|
|
|
|
on-click-right = "${gr-set} Temperature q 4500";
|
2024-08-25 19:10:52 +02:00
|
|
|
|
on-scroll-up = "${gr-call} UpdateTemperature n +100";
|
|
|
|
|
on-scroll-down = "${gr-call} UpdateTemperature n -100";
|
|
|
|
|
|
2024-08-27 10:14:09 +02:00
|
|
|
|
tooltip-format = fmt;
|
|
|
|
|
};
|
2024-08-25 19:10:52 +02:00
|
|
|
|
|
2024-08-27 10:14:09 +02:00
|
|
|
|
battery = {
|
2024-08-27 11:43:06 +02:00
|
|
|
|
states = {
|
|
|
|
|
warning = 25;
|
|
|
|
|
critical = 15;
|
|
|
|
|
};
|
|
|
|
|
|
2024-08-27 10:14:09 +02:00
|
|
|
|
format = "{icon} {capacity} %";
|
|
|
|
|
format-icons = {
|
|
|
|
|
full = "";
|
|
|
|
|
plugged = "";
|
|
|
|
|
charging = [ "" "" "" "" "" "" "" "" "" "" "" ];
|
|
|
|
|
discharging = [ "" "" "" "" "" "" "" "" "" "" "" ];
|
2024-08-25 19:10:52 +02:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
format-time = "{H}:{M}";
|
|
|
|
|
weighted-average = true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
"pulseaudio#sink" = let
|
|
|
|
|
fmt = "{volume} %";
|
|
|
|
|
in {
|
|
|
|
|
format = "{icon} ${fmt}";
|
|
|
|
|
format-bluetooth = " ${fmt}";
|
|
|
|
|
format-muted = " ${fmt}";
|
|
|
|
|
|
|
|
|
|
format-icons = {
|
|
|
|
|
headphone = "";
|
|
|
|
|
default = [ "" "" ];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
on-click = pwvucontrol;
|
|
|
|
|
on-click-right = "${wpctl} set-mute @DEFAULT_AUDIO_SINK@ toggle";
|
|
|
|
|
on-scroll-up = "${wpctl} set-volume @DEFAULT_AUDIO_SINK@ 1%+";
|
|
|
|
|
on-scroll-down = "${wpctl} set-volume @DEFAULT_AUDIO_SINK@ 1%-";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
"pulseaudio#source" = let
|
|
|
|
|
fmt = "{volume} %";
|
|
|
|
|
in {
|
|
|
|
|
format = "{format_source}";
|
|
|
|
|
format-source = " ${fmt}";
|
|
|
|
|
format-source-muted = " ${fmt}";
|
|
|
|
|
|
|
|
|
|
on-click = pwvucontrol;
|
|
|
|
|
on-click-right = "${wpctl} set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
|
|
|
|
|
on-scroll-up = "${wpctl} set-volume @DEFAULT_AUDIO_SOURCE@ 1%+";
|
|
|
|
|
on-scroll-down = "${wpctl} set-volume @DEFAULT_AUDIO_SOURCE@ 1%-";
|
|
|
|
|
};
|
|
|
|
|
|
2024-08-27 10:14:09 +02:00
|
|
|
|
"custom/weather" = {
|
|
|
|
|
exec = "${wttrbar} --hide-conditions --custom-indicator '{ICON} {temp_C} °C'";
|
|
|
|
|
return-type = "json";
|
|
|
|
|
interval = 900;
|
|
|
|
|
};
|
|
|
|
|
|
2024-08-25 19:10:52 +02:00
|
|
|
|
clock = {
|
2024-08-27 10:14:09 +02:00
|
|
|
|
interval = 1;
|
|
|
|
|
format = " {:%H:%M:%S %Z}";
|
|
|
|
|
format-alt = " {:%Y-%m-%d}";
|
|
|
|
|
|
2024-08-25 19:10:52 +02:00
|
|
|
|
tooltip-format = "<tt><small>{calendar}</small></tt>";
|
|
|
|
|
calendar = {
|
|
|
|
|
mode = "month";
|
|
|
|
|
weeks-pos = "left";
|
|
|
|
|
on-scroll = 1;
|
|
|
|
|
format = {
|
|
|
|
|
weeks = "{:%W}";
|
|
|
|
|
};
|
|
|
|
|
};
|
2024-08-27 10:14:09 +02:00
|
|
|
|
|
|
|
|
|
actions = {
|
|
|
|
|
on-scroll-up = "shift_up";
|
|
|
|
|
on-scroll-down = "shift_down";
|
|
|
|
|
};
|
2024-08-25 19:10:52 +02:00
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
systemd.user.targets = {
|
|
|
|
|
tray = {
|
|
|
|
|
Unit = {
|
2024-08-26 21:58:18 +02:00
|
|
|
|
BindsTo = [ "waybar.service" ];
|
|
|
|
|
After = [ "waybar.service" ];
|
2024-08-25 19:10:52 +02:00
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
}
|