mirror of
https://github.com/szymon-jozef/amazing-dotfiles.git
synced 2026-09-07 12:10:45 +02:00
344 lines
9.9 KiB
Nix
344 lines
9.9 KiB
Nix
{
|
|
pkgs,
|
|
isNixOS,
|
|
...
|
|
}:
|
|
|
|
{
|
|
programs.waybar = {
|
|
enable = true;
|
|
package =
|
|
if isNixOS then pkgs.waybar else (pkgs.writeShellScriptBin "waybar" "exec /usr/bin/waybar \"$@\"");
|
|
settings = {
|
|
mainBar = {
|
|
layer = "top";
|
|
position = "right";
|
|
spacing = 4;
|
|
margin-top = 10;
|
|
margin-bottom = 10;
|
|
margin-left = 8;
|
|
margin-right = 8;
|
|
mode = "dock";
|
|
reload_style_on_change = true;
|
|
width = 70;
|
|
output = [
|
|
"DP-1"
|
|
"eDP-1"
|
|
"LVDS-1"
|
|
];
|
|
|
|
modules-left = [
|
|
"clock"
|
|
"custom/notifications"
|
|
"privacy"
|
|
"custom/spotify"
|
|
"pulseaudio"
|
|
];
|
|
modules-center = [
|
|
"hyprland/workspaces"
|
|
];
|
|
modules-right = [
|
|
"battery"
|
|
"tray"
|
|
];
|
|
|
|
"hyprland/workspaces" = {
|
|
format = "{} - {icon}";
|
|
on-click = "activate";
|
|
on-click-right = "close";
|
|
all-outputs = true;
|
|
active-only = false;
|
|
sort-by-number = true;
|
|
format-icons = {
|
|
"1" = "";
|
|
"2" = "";
|
|
"3" = "";
|
|
"4" = "";
|
|
"5" = "";
|
|
"6" = "";
|
|
"7" = "";
|
|
"8" = "";
|
|
"9" = "";
|
|
"10" = "";
|
|
default = "";
|
|
};
|
|
};
|
|
|
|
tray = {
|
|
spacing = 10;
|
|
};
|
|
|
|
clock = {
|
|
format = "<big>{:%R}</big>";
|
|
format-alt = "<small>{:%d.%m.%Y}</small>";
|
|
tooltip-format = "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>";
|
|
calendar = {
|
|
mode = "year";
|
|
mode-mon-col = 3;
|
|
weeks-pos = "right";
|
|
on-scroll = 1;
|
|
format = {
|
|
months = "<span color='#ffead3'><b>{}</b></span>";
|
|
days = "<span color='#ecc6d9'><b>{}</b></span>";
|
|
weeks = "<span color='#99ffdd'><b>W{}</b></span>";
|
|
weekdays = "<span color='#ffcc66'><b>{}</b></span>";
|
|
today = "<span color='#ff6699'><b><u>{}</u></b></span>";
|
|
};
|
|
actions = {
|
|
on-click-right = "mode";
|
|
on-scroll-up = "tz_up";
|
|
on-scroll-down = "tz_down";
|
|
};
|
|
};
|
|
};
|
|
|
|
network = {
|
|
format-wifi = " ({signalStrength}%) ";
|
|
format-ethernet = "";
|
|
tooltip-format = "{ifname} via {gwaddr} with {ipaddr}/{cidr} ";
|
|
format-linked = "{ifname} (No IP) ";
|
|
format-disconnected = "Disconnected ⚠";
|
|
on-click = "kitty nmtui";
|
|
};
|
|
|
|
pulseaudio = {
|
|
format = "{volume}% {icon}";
|
|
format-bluetooth = "{volume}% {icon} {format_source}";
|
|
format-bluetooth-muted = " {icon} {format_source}";
|
|
format-muted = " ";
|
|
format-source = " {volume}% ";
|
|
format-source-muted = " ";
|
|
format-icons = {
|
|
headphone = "";
|
|
hands-free = " ";
|
|
headset = " ";
|
|
phone = " ";
|
|
portable = " ";
|
|
car = " ";
|
|
default = [
|
|
""
|
|
""
|
|
""
|
|
];
|
|
};
|
|
on-click = "pavucontrol -t 3";
|
|
on-click-right = "pactl set-sink-mute @DEFAULT_SINK@ toggle";
|
|
};
|
|
|
|
"custom/spotify" = {
|
|
format = "{}";
|
|
return-type = "json";
|
|
on-click = "playerctl play-pause --player spotify";
|
|
on-click-right = "killall spotify";
|
|
on-scroll-up = "playerctl next --player spotify";
|
|
on-scroll-down = "playerctl previous --player spotify";
|
|
restart-interval = 0;
|
|
hide-empty-text = true;
|
|
justify = "center";
|
|
max-length = 40;
|
|
exec =
|
|
let
|
|
playerctl = "${pkgs.playerctl}/bin/playerctl";
|
|
jq = "${pkgs.jq}/bin/jq";
|
|
pkill = "${pkgs.procps}/bin/pkill";
|
|
|
|
mediaPlayerScript = pkgs.writeShellScript "mediaplayer" ''
|
|
if [ -z "$1" ]; then
|
|
echo "Użycie: $0 <nazwa_odtwarzacza>"
|
|
exit 1
|
|
fi
|
|
|
|
player="$1"
|
|
|
|
${playerctl} -p "$player" metadata --format "{{status}} {{artist}} - {{title}}" --follow | while read -r line; do
|
|
# Nix wymaga ''${ dla zmiennych basha w stringach nixowych
|
|
current_status=$(${playerctl} --player="$player" status 2>/dev/null)
|
|
|
|
case "$current_status" in
|
|
"Playing")
|
|
icon=""
|
|
;;
|
|
"Paused")
|
|
icon=""
|
|
;;
|
|
*)
|
|
icon=""
|
|
;;
|
|
esac
|
|
|
|
tooltip=$(${playerctl} --player="$player" metadata --format "{{artist}} - {{title}}" 2>/dev/null)
|
|
|
|
${jq} -nc --arg text "$icon" --arg tooltip "$tooltip" \
|
|
'{"text": $text, "tooltip": $tooltip}'
|
|
|
|
if [[ -n "$icon" ]]; then
|
|
${pkill} -SIGRTMIN+1 waybar
|
|
fi
|
|
done
|
|
'';
|
|
in
|
|
"${mediaPlayerScript} spotify";
|
|
};
|
|
|
|
"custom/notifications" = {
|
|
format = "<big>{text}</big>";
|
|
on-click-right = "~/.local/bin/check-do-not-disturb.sh change";
|
|
exec = "~/.local/bin/check-do-not-disturb.sh show";
|
|
exec-on-event = "~/.local/bin/check-do-not-disturb.sh show";
|
|
tooltip = false;
|
|
return-type = "text";
|
|
signal = 2;
|
|
};
|
|
};
|
|
};
|
|
|
|
style = ''
|
|
@define-color rosewater #f5e0dc;
|
|
@define-color flamingo #f2cdcd;
|
|
@define-color pink #f5c2e7;
|
|
@define-color mauve #cba6f7;
|
|
@define-color red #f38ba8;
|
|
@define-color maroon #eba0ac;
|
|
@define-color peach #fab387;
|
|
@define-color yellow #f9e2af;
|
|
@define-color green #a6e3a1;
|
|
@define-color teal #94e2d5;
|
|
@define-color sky #89dceb;
|
|
@define-color sapphire #74c7ec;
|
|
@define-color blue #89b4fa;
|
|
@define-color lavender #b4befe;
|
|
@define-color text #cdd6f4;
|
|
@define-color subtext1 #bac2de;
|
|
@define-color subtext0 #a6adc8;
|
|
@define-color overlay2 #9399b2;
|
|
@define-color overlay1 #7f849c;
|
|
@define-color overlay0 #6c7086;
|
|
@define-color surface2 #585b70;
|
|
@define-color surface1 #45475a;
|
|
@define-color surface0 #313244;
|
|
@define-color base #1e1e2e;
|
|
@define-color mantle #181825;
|
|
@define-color crust #11111b;
|
|
|
|
/* Global styles */
|
|
* {
|
|
transition: 0.2s all ease-in-out;
|
|
font-size: 14px;
|
|
font-family: inherit;
|
|
padding: 3px;
|
|
margin: 1px 2px;
|
|
color: @text;
|
|
border-radius: 12px;
|
|
}
|
|
|
|
*:hover {
|
|
text-shadow: none;
|
|
}
|
|
|
|
/* Window */
|
|
window#waybar {
|
|
background-color: @base;
|
|
border-radius: 15px;
|
|
}
|
|
|
|
/* Workspaces */
|
|
#workspaces button {
|
|
padding: 2px;
|
|
margin: 1px;
|
|
background: transparent;
|
|
color: @lavender;
|
|
box-shadow: inset 0 1.5px;
|
|
}
|
|
|
|
#workspaces button:hover {
|
|
background-color: @surface1;
|
|
box-shadow: inset 2px 5px;
|
|
}
|
|
|
|
#workspaces button.active {
|
|
background-color: @surface0;
|
|
box-shadow: inset 1px 4px 0 1px;
|
|
}
|
|
|
|
#workspaces button.urgent {
|
|
background-color: @red;
|
|
animation-name: blink;
|
|
animation-duration: 1s;
|
|
animation-timing-function: steps(12);
|
|
animation-iteration-count: infinite;
|
|
animation-direction: alternate;
|
|
}
|
|
|
|
/* Clock */
|
|
#clock {
|
|
font-style: oblique;
|
|
opacity: 1;
|
|
}
|
|
|
|
/* Modules */
|
|
.modules-left,
|
|
.modules-right,
|
|
.modules-center {
|
|
background-color: @crust;
|
|
}
|
|
|
|
/* Tray */
|
|
#tray>.needs-attention {
|
|
background-color: @red;
|
|
}
|
|
|
|
/* Custom */
|
|
#custom-spotify:hover {
|
|
background-color: @green;
|
|
}
|
|
|
|
#network:hover {
|
|
background-color: @sky;
|
|
}
|
|
|
|
#custom-notifications:hover {
|
|
background-color: @sapphire;
|
|
}
|
|
|
|
/* Battery */
|
|
#battery {
|
|
background-color: @base;
|
|
}
|
|
|
|
#battery.warning:not(.charging) {
|
|
background: @yellow;
|
|
color: @foreground;
|
|
animation-name: blink;
|
|
animation-duration: 1s;
|
|
animation-timing-function: steps(12);
|
|
animation-iteration-count: infinite;
|
|
animation-direction: alternate;
|
|
}
|
|
|
|
#battery.charging,
|
|
#battery.plugged {
|
|
color: @foreground;
|
|
background-color: @green;
|
|
}
|
|
|
|
#battery.critical:not(.charging) {
|
|
background-color: @red;
|
|
color: @foreground;
|
|
animation-name: blink;
|
|
animation-duration: 1s;
|
|
animation-timing-function: steps(12);
|
|
animation-iteration-count: infinite;
|
|
animation-direction: alternate;
|
|
}
|
|
|
|
@keyframes blink {
|
|
to {
|
|
background-color: #ff0000;
|
|
color: #000000;
|
|
}
|
|
}
|
|
'';
|
|
|
|
};
|
|
}
|