diff --git a/flake.lock b/flake.lock
index 516e6f1..60fcb0c 100644
--- a/flake.lock
+++ b/flake.lock
@@ -1,5 +1,21 @@
{
"nodes": {
+ "flake-compat": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1696426674,
+ "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
+ "owner": "edolstra",
+ "repo": "flake-compat",
+ "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
+ "type": "github"
+ },
+ "original": {
+ "owner": "edolstra",
+ "repo": "flake-compat",
+ "type": "github"
+ }
+ },
"home-manager": {
"inputs": {
"nixpkgs": [
@@ -211,13 +227,30 @@
"type": "github"
}
},
+ "nixpkgs_3": {
+ "locked": {
+ "lastModified": 1711163522,
+ "narHash": "sha256-YN/Ciidm+A0fmJPWlHBGvVkcarYWSC+s3NTPk/P+q3c=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "44d0940ea560dee511026a53f0e2e2cde489b4d4",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
"root": {
"inputs": {
"home-manager": "home-manager",
"hy3": "hy3",
"hyprland": "hyprland",
"nixos-hardware": "nixos-hardware",
- "nixpkgs": "nixpkgs_2"
+ "nixpkgs": "nixpkgs_2",
+ "waybar": "waybar"
}
},
"systems": {
@@ -250,6 +283,25 @@
"type": "github"
}
},
+ "waybar": {
+ "inputs": {
+ "flake-compat": "flake-compat",
+ "nixpkgs": "nixpkgs_3"
+ },
+ "locked": {
+ "lastModified": 1711628124,
+ "narHash": "sha256-dQW43ZxDrBvMCefvTCjaV3hEpYCU6KTJl/JxR8XZhwM=",
+ "owner": "Alexays",
+ "repo": "Waybar",
+ "rev": "ddc767cd815a7c429bc4dd7f185fad93e485271d",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Alexays",
+ "repo": "Waybar",
+ "type": "github"
+ }
+ },
"wlroots": {
"flake": false,
"locked": {
diff --git a/flake.nix b/flake.nix
index dfdf0ad..b37af40 100644
--- a/flake.nix
+++ b/flake.nix
@@ -14,8 +14,10 @@
inputs.hyprland.follows = "hyprland";
};
+ waybar.url = "github:Alexays/Waybar";
+
};
- outputs = { self, nixpkgs, nixos-hardware, home-manager, hyprland, hy3, ... }@inputs: {
+ outputs = { self, nixpkgs, nixos-hardware, home-manager, hyprland, hy3, waybar, ... }@inputs: {
nixosConfigurations = {
W530 = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
diff --git a/modules/packages.nix b/modules/packages.nix
index 64d683d..303e149 100644
--- a/modules/packages.nix
+++ b/modules/packages.nix
@@ -18,9 +18,6 @@
xidel # command line tool to download and extract data from html/xml pages as well as json apis
nvd # nix/nixos package version diff tool
inotify-tools # a c library and a set of command-line programs providing a simple interface to inotify
- ghostscript # postscript interpreter (mainline version)
- ventoy-full # bootable usb solution
- fio # flexible io tester - an io benchmark tool
] ++ lib.optionals (devenv.enable) [
# languages
gcc13
diff --git a/users/gandalf/default.nix b/users/gandalf/default.nix
index 7eb2933..6118837 100644
--- a/users/gandalf/default.nix
+++ b/users/gandalf/default.nix
@@ -1,4 +1,4 @@
-{ unstable, hyprland, hy3, ... }:
+{ unstable, hyprland, hy3, waybar, ... }:
let
aliases = import ../../modules/aliases.nix;
in
@@ -14,6 +14,7 @@ in
inherit unstable;
inherit hyprland;
inherit hy3;
+ inherit waybar;
};
home-manager.users.gandalf = { pkgs, ... }: {
diff --git a/users/gandalf/modules/gui/hyprland/default.nix b/users/gandalf/modules/gui/hyprland/default.nix
index f95d1d1..8093df9 100644
--- a/users/gandalf/modules/gui/hyprland/default.nix
+++ b/users/gandalf/modules/gui/hyprland/default.nix
@@ -1,4 +1,4 @@
-{ pkgs, lib, nixosConfig, hy3, ... }:
+{ pkgs, lib, nixosConfig, hy3, config, ... }:
let
common = (import ../common.nix) { pkgs = pkgs; lib = lib; };
@@ -32,8 +32,8 @@ let
in
{
imports = [
- ../sway/waybar.nix
../sway/wofi.nix
+ ../waybar.nix
];
home.packages = with pkgs; [
@@ -93,8 +93,8 @@ in
"_JAVA_OPTIONS,\"-Dawt.useSystemAAFontSettings=on\""
];
"exec-once" = with pkgs; [
+ "${config.programs.waybar.package}/bin/waybar -c ${config.xdg.configHome}/waybar/hyprbar.json -s ${config.xdg.configHome}/waybar/hyprbar.css"
"${swaybg}/bin/swaybg -m fill -i ${common.wallpaper}"
- "${waybar}/bin/waybar"
"${dbus}/bin/dbus-update-activation-environment --all"
"${kanshi}/bin/kanshi"
"${networkmanagerapplet}/bin/nm-applet"
diff --git a/users/gandalf/modules/gui/programs/alacritty.nix b/users/gandalf/modules/gui/programs/alacritty.nix
index 53b0b4b..10d1995 100644
--- a/users/gandalf/modules/gui/programs/alacritty.nix
+++ b/users/gandalf/modules/gui/programs/alacritty.nix
@@ -10,7 +10,7 @@ in
# Available themes:
# https://github.com/alacritty/alacritty-theme
- "${pkgs.alacritty-theme}/atom_one_light.toml"
+ "${pkgs.alacritty-theme}/alabaster.toml"
];
env.TERM = "xterm-256color";
font = {
diff --git a/users/gandalf/modules/gui/sway/default.nix b/users/gandalf/modules/gui/sway/default.nix
index 749c887..9046b8a 100644
--- a/users/gandalf/modules/gui/sway/default.nix
+++ b/users/gandalf/modules/gui/sway/default.nix
@@ -10,8 +10,8 @@ in
imports = [
./kanshi.nix
./swaync
- ./waybar.nix
./wofi.nix
+ ../waybar.nix
];
home.packages = with pkgs; [
@@ -275,7 +275,7 @@ in
};
bars = [
{
- command = "${pkgs.waybar}/bin/waybar";
+ command = "${config.programs.waybar.package}/bin/waybar -c ${config.xdg.configHome}/waybar/swaybar.json -s ${config.xdg.configHome}/waybar/swaybar.css";
}
];
};
diff --git a/users/gandalf/modules/gui/sway/waybar.nix b/users/gandalf/modules/gui/sway/waybar.nix
deleted file mode 100644
index 06644eb..0000000
--- a/users/gandalf/modules/gui/sway/waybar.nix
+++ /dev/null
@@ -1,354 +0,0 @@
-{ pkgs, ... }: {
- programs.waybar = {
- enable = true;
-
- settings.mainBar = {
- layer = "top";
- margin = "5 5 5 5";
- modules-left = [
- "sway/workspaces"
- "sway/window"
- "sway/mode"
- "hyprland/workspaces"
- "hyprland/window"
- ];
- modules-center = [ "clock" ];
- modules-right = [ "tray" "network" "pulseaudio" "custom/mem" "temperature" "backlight" "battery" ];
- "sway/workspaces" = {
- disable-scroll = true;
- persistent-workspaces = {
- "1" = [ ];
- "2" = [ ];
- "3" = [ ];
- "4" = [ ];
- };
- };
- "sway/window" = {
- format = "{title}";
- max-length = 43;
- };
- "sway/mode" = {
- format = "{}";
- };
- "hyprland/workspaces" = {
- disable-scroll = true;
- };
- "hyprland/window" = {
- format = "{title}";
- };
- clock = {
- timezones = [ "Europe/Berlin" ];
- tooltip-format = "{:%Y %B}\n{calendar}";
- format = "{:%a, %d %b, %H:%M}";
- actions = {
- on-click = "tz_up";
- };
- };
- network = {
- interval = 1;
- format = "{ifname}";
- format-wifi = "{signalStrength}% ";
- format-ethernet = "eth ";
- format-disconnected = ""; # An empty format will hide the module.
- tooltip-format = "{ifname} via {gwaddr} ";
- tooltip-format-wifi = "{essid} ({signalStrength}%) ";
- tooltip-format-ethernet = "{ifname} ";
- tooltip-format-disconnected = "Disconnected";
- };
- pulseaudio = {
- reverse-scrolling = 1;
- format = "{volume}% {icon} {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 = "${pkgs.pavucontrol}/bin/pavucontrol";
- min-length = 13;
- };
- "custom/mem" = {
- format = "{} ";
- interval = 3;
- exec = "free -h | awk '/Mem:/{printf $3}'";
- tooltip = false;
- };
- temperature = {
- critical-threshold = 80;
- format = "{temperatureC}°C {icon}";
- format-icons = [
- ""
- ""
- ""
- ""
- ""
- ];
- tooltip = false;
- };
- backlight = {
- device = "intel_backlight";
- format = "{percent}% {icon}";
- format-icons = [
- ""
- ""
- ""
- ""
- ""
- ""
- ""
- ""
- ""
- ""
- ""
- ];
- };
- battery = {
- states = {
- warning = 30;
- critical = 15;
- };
- format = "{capacity}% {icon}";
- format-charging = "{capacity}% ";
- format-plugged = "{capacity}% ";
- format-alt = "{time} {icon}";
- format-icons = [
- ""
- ""
- ""
- ""
- ""
- ""
- ""
- ""
- ""
- ""
- ""
- ];
- on-update = pkgs.writeShellScript "check-battery" ''
- bat=/sys/class/power_supply/BAT0
- CRIT=''${1:-15}
-
- FILE=~/.config/waybar/.notified.target
-
- stat=$(cat $bat/status)
- perc=$(cat $bat/capacity)
-
- if [[ $perc -le $CRIT ]] && [[ $stat == "Discharging" ]]; then
- if [[ ! -f "$FILE" ]]; then
- notify-send --urgency=critical --icon=dialog-warning "Battery Low" "Current charge: $perc%"
- touch $FILE
- fi
- elif [[ -f "$FILE" ]]; then
- rm $FILE
- fi
- '';
- };
- tray = {
- icon-size = 16;
- spacing = 0;
- };
- };
- style = ''
- @define-color bg-color #212529;
-
- * {
- border: none;
- border-radius: 0;
- font-family: DejaVuSansM Nerd Font;
- min-height: 20px;
- }
-
- window#waybar {
- background: transparent;
- }
-
- window#waybar.hidden {
- opacity: 0.2;
- }
-
- #workspaces {
- padding-left: 8px;
- padding-right: 8px;
- margin-right: 8px;
- border-radius: 10px;
- transition: none;
- background: @bg-color;
- }
-
- #workspaces button {
- transition: none;
- color: #7c818c;
- background: transparent;
- padding: 5px;
- font-size: 18px;
- }
-
- #workspaces button.persistent {
- color: #7c818c;
- font-size: 12px;
- }
-
- #workspaces button:hover {
- transition: none;
- box-shadow: inherit;
- text-shadow: inherit;
- border-radius: inherit;
- color: @bg-color;
- background: #7c818c;
- }
-
- #workspaces button.focused {
- color: white;
- }
-
- #workspaces button.visible {
- color: white;
- }
-
- #window {
- padding-left: 16px;
- padding-right: 16px;
- margin-right: 8px;
- border-radius: 10px 10px 10px 10px;
- transition: none;
- color: #ffffff;
- background: @bg-color;
- }
-
- #mode {
- padding-left: 16px;
- padding-right: 16px;
- border-radius: 10px;
- transition: none;
- color: #ffffff;
- background: @bg-color;
- }
-
- #clock {
- padding-left: 16px;
- padding-right: 16px;
- border-radius: 10px 10px 10px 10px;
- transition: none;
- color: #ffffff;
- background: @bg-color;
- }
-
- #network {
- margin-right: 8px;
- padding-left: 16px;
- padding-right: 16px;
- border-radius: 10px;
- transition: none;
- color: #ffffff;
- background: @bg-color;
- }
-
- #pulseaudio {
- margin-right: 8px;
- padding-left: 16px;
- padding-right: 16px;
- border-radius: 10px;
- transition: none;
- color: #ffffff;
- background: @bg-color;
- }
-
- #pulseaudio.muted {
- background-color: #90b1b1;
- color: #2a5c45;
- }
-
- #custom-mem {
- margin-right: 8px;
- padding-left: 16px;
- padding-right: 16px;
- border-radius: 10px;
- transition: none;
- color: #ffffff;
- background: @bg-color;
- }
-
- #temperature {
- margin-right: 8px;
- padding-left: 16px;
- padding-right: 16px;
- border-radius: 10px;
- transition: none;
- color: #ffffff;
- background: @bg-color;
- }
-
- #temperature.critical {
- background-color: #eb4d4b;
- }
-
- #backlight {
- margin-right: 8px;
- padding-left: 16px;
- padding-right: 16px;
- border-radius: 10px;
- transition: none;
- color: #ffffff;
- background: @bg-color;
- }
-
- #battery {
- padding-left: 16px;
- padding-right: 16px;
- border-radius: 10px;
- transition: none;
- color: #ffffff;
- background: @bg-color;
- }
-
- #battery.charging {
- color: #ffffff;
- background-color: #26A65B;
- }
-
- #battery.warning:not(.charging) {
- background-color: #ffbe61;
- color: black;
- }
-
- #battery.critical:not(.charging) {
- background-color: #f53c3c;
- color: #ffffff;
- animation-name: blink;
- animation-duration: 0.5s;
- animation-timing-function: linear;
- animation-iteration-count: infinite;
- animation-direction: alternate;
- }
-
- #tray {
- margin-right: 8px;
- padding-left: 16px;
- padding-right: 16px;
- border-radius: 10px;
- transition: none;
- color: #ffffff;
- background: @bg-color;
- }
-
- @keyframes blink {
- to {
- background-color: #ffffff;
- color: #000000;
- }
- }
- '';
- };
-}
diff --git a/users/gandalf/modules/gui/waybar.nix b/users/gandalf/modules/gui/waybar.nix
new file mode 100644
index 0000000..073acda
--- /dev/null
+++ b/users/gandalf/modules/gui/waybar.nix
@@ -0,0 +1,692 @@
+{ pkgs, waybar, ... }:
+let
+ check-battery = pkgs.writeShellScript "check-battery" ''
+ bat=/sys/class/power_supply/BAT0
+ CRIT=''${1:-15}
+
+ FILE=~/.config/waybar/.notified.target
+
+ stat=$(cat $bat/status)
+ perc=$(cat $bat/capacity)
+
+ if [[ $perc -le $CRIT ]] && [[ $stat == "Discharging" ]]; then
+ if [[ ! -f "$FILE" ]]; then
+ notify-send --urgency=critical --icon=dialog-warning "Battery Low" "Current charge: $perc%"
+ touch $FILE
+ fi
+ elif [[ -f "$FILE" ]]; then
+ rm $FILE
+ fi
+ '';
+in
+{
+ xdg.configFile = {
+ "waybar/swaybar.json".text = ''
+ [
+ {
+ "backlight": {
+ "device": "intel_backlight",
+ "format": "{percent}% {icon}",
+ "format-icons": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
+ },
+ "battery": {
+ "format": "{capacity}% {icon}",
+ "format-alt": "{time} {icon}",
+ "format-charging": "{capacity}% ",
+ "format-icons": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ],
+ "format-plugged": "{capacity}% ",
+ "on-update": "${check-battery}",
+ "states": {
+ "critical": 15,
+ "warning": 30
+ }
+ },
+ "clock": {
+ "actions": {
+ "on-click": "tz_up"
+ },
+ "format": "{:%a, %d %b, %H:%M}",
+ "timezones": [
+ "Europe/Berlin"
+ ],
+ "tooltip-format": "{:%Y %B}\n{calendar}"
+ },
+ "custom/mem": {
+ "exec": "free -h | awk '/Mem:/{printf $3}'",
+ "format": "{} ",
+ "interval": 3,
+ "tooltip": false
+ },
+ "layer": "top",
+ "margin": "5 5 5 5",
+ "modules-center": [
+ "clock"
+ ],
+ "modules-left": [
+ "sway/workspaces",
+ "sway/window",
+ "sway/mode"
+ ],
+ "modules-right": [
+ "tray",
+ "network",
+ "pulseaudio",
+ "custom/mem",
+ "temperature",
+ "backlight",
+ "battery"
+ ],
+ "name": "swaybar",
+ "network": {
+ "format": "{ifname}",
+ "format-disconnected": "",
+ "format-ethernet": "eth ",
+ "format-wifi": "{signalStrength}% ",
+ "interval": 1,
+ "tooltip-format": "{ifname} via {gwaddr} ",
+ "tooltip-format-disconnected": "Disconnected",
+ "tooltip-format-ethernet": "{ifname} ",
+ "tooltip-format-wifi": "{essid} ({signalStrength}%) "
+ },
+ "pulseaudio": {
+ "format": "{volume}% {icon} {format_source}",
+ "format-bluetooth": "{volume}% {icon} {format_source}",
+ "format-bluetooth-muted": " {icon} {format_source}",
+ "format-icons": {
+ "car": "",
+ "default": [
+ "",
+ "",
+ ""
+ ],
+ "hands-free": "",
+ "headphone": "",
+ "headset": "",
+ "phone": "",
+ "portable": ""
+ },
+ "format-muted": " {format_source}",
+ "format-source": "{volume}% ",
+ "format-source-muted": "",
+ "min-length": 13,
+ "on-click": "${pkgs.pavucontrol}/bin/pavucontrol",
+ "reverse-scrolling": 1
+ },
+ "sway/mode": {
+ "format": "{}"
+ },
+ "sway/window": {
+ "format": "{title}",
+ "max-length": 43
+ },
+ "sway/workspaces": {
+ "disable-scroll": true,
+ "persistent-workspaces": {
+ "1": [],
+ "2": [],
+ "3": [],
+ "4": []
+ }
+ },
+ "temperature": {
+ "critical-threshold": 80,
+ "format": "{temperatureC}°C {icon}",
+ "format-icons": [
+ "",
+ "",
+ "",
+ "",
+ ""
+ ],
+ "tooltip": false
+ },
+ "tray": {
+ "icon-size": 16,
+ "spacing": 0
+ }
+ }
+ ]
+ '';
+
+ "waybar/swaybar.css".text = ''
+ @define-color bg-color #212529;
+
+ window.swaybar,
+ window.swaybar * {
+ border: none;
+ border-radius: 0;
+ font-family: DejaVuSansM Nerd Font;
+ min-height: 20px;
+ }
+
+ window.swaybar#waybar {
+ background: transparent;
+ }
+
+ window.swaybar#waybar.hidden {
+ opacity: 0.2;
+ }
+
+ window.swaybar #workspaces {
+ padding-left: 8px;
+ padding-right: 8px;
+ margin-right: 8px;
+ border-radius: 10px;
+ transition: none;
+ background: @bg-color;
+ }
+
+ window.swaybar #workspaces button {
+ transition: none;
+ color: #7c818c;
+ background: transparent;
+ padding: 5px;
+ font-size: 18px;
+ }
+
+ window.swaybar #workspaces button.persistent {
+ color: #7c818c;
+ font-size: 12px;
+ }
+
+ window.swaybar #workspaces button:hover {
+ transition: none;
+ box-shadow: inherit;
+ text-shadow: inherit;
+ border-radius: inherit;
+ color: @bg-color;
+ background: #7c818c;
+ }
+
+ window.swaybar #workspaces button.focused {
+ color: white;
+ }
+
+ window.swaybar #workspaces button.visible {
+ color: white;
+ }
+
+ window.swaybar #window {
+ padding-left: 16px;
+ padding-right: 16px;
+ margin-right: 8px;
+ border-radius: 10px 10px 10px 10px;
+ transition: none;
+ color: #ffffff;
+ background: @bg-color;
+ }
+
+ window.swaybar #mode {
+ padding-left: 16px;
+ padding-right: 16px;
+ border-radius: 10px;
+ transition: none;
+ color: #ffffff;
+ background: @bg-color;
+ }
+
+ window.swaybar #clock {
+ padding-left: 16px;
+ padding-right: 16px;
+ border-radius: 10px 10px 10px 10px;
+ transition: none;
+ color: #ffffff;
+ background: @bg-color;
+ }
+
+ window.swaybar #network {
+ margin-right: 8px;
+ padding-left: 16px;
+ padding-right: 16px;
+ border-radius: 10px;
+ transition: none;
+ color: #ffffff;
+ background: @bg-color;
+ }
+
+ window.swaybar #pulseaudio {
+ margin-right: 8px;
+ padding-left: 16px;
+ padding-right: 16px;
+ border-radius: 10px;
+ transition: none;
+ color: #ffffff;
+ background: @bg-color;
+ }
+
+ window.swaybar #pulseaudio.muted {
+ background-color: #90b1b1;
+ color: #2a5c45;
+ }
+
+ window.swaybar #custom-mem {
+ margin-right: 8px;
+ padding-left: 16px;
+ padding-right: 16px;
+ border-radius: 10px;
+ transition: none;
+ color: #ffffff;
+ background: @bg-color;
+ }
+
+ window.swaybar #temperature {
+ margin-right: 8px;
+ padding-left: 16px;
+ padding-right: 16px;
+ border-radius: 10px;
+ transition: none;
+ color: #ffffff;
+ background: @bg-color;
+ }
+
+ window.swaybar #temperature.critical {
+ background-color: #eb4d4b;
+ }
+
+ window.swaybar #backlight {
+ margin-right: 8px;
+ padding-left: 16px;
+ padding-right: 16px;
+ border-radius: 10px;
+ transition: none;
+ color: #ffffff;
+ background: @bg-color;
+ }
+
+ window.swaybar #battery {
+ padding-left: 16px;
+ padding-right: 16px;
+ border-radius: 10px;
+ transition: none;
+ color: #ffffff;
+ background: @bg-color;
+ }
+
+ window.swaybar #battery.charging {
+ color: #ffffff;
+ background-color: #26A65B;
+ }
+
+ window.swaybar #battery.warning:not(.charging) {
+ background-color: #ffbe61;
+ color: black;
+ }
+
+ window.swaybar #battery.critical:not(.charging) {
+ background-color: #f53c3c;
+ color: #ffffff;
+ animation-name: blink;
+ animation-duration: 0.5s;
+ animation-timing-function: linear;
+ animation-iteration-count: infinite;
+ animation-direction: alternate;
+ }
+
+ window.swaybar #tray {
+ margin-right: 8px;
+ padding-left: 16px;
+ padding-right: 16px;
+ border-radius: 10px;
+ transition: none;
+ color: #ffffff;
+ background: @bg-color;
+ }
+
+ @keyframes blink {
+ to {
+ background-color: #ffffff;
+ color: #000000;
+ }
+ }
+ '';
+
+ "waybar/hyprbar.json".text = ''
+ [
+ {
+ "backlight": {
+ "device": "intel_backlight",
+ "format": "{percent}% {icon}",
+ "format-icons": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
+ },
+ "battery": {
+ "format": "{capacity}% {icon}",
+ "format-alt": "{time} {icon}",
+ "format-charging": "{capacity}% ",
+ "format-icons": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ],
+ "format-plugged": "{capacity}% ",
+ "on-update": "${check-battery}",
+ "states": {
+ "critical": 15,
+ "warning": 30
+ }
+ },
+ "clock": {
+ "format": "{:%a %b %d %H:%M}",
+ "timezones": [
+ "Europe/Berlin"
+ ],
+ "tooltip-format": "{:%Y %B}\n{calendar}"
+ },
+ "custom/mem": {
+ "exec": "free -h | awk '/Mem:/{printf $3}'",
+ "format": "{} ",
+ "interval": 3,
+ "tooltip": false
+ },
+ "hyprland/window": {
+ "format": "{title}",
+ "separate-outputs": true
+ },
+ "hyprland/workspaces": {
+ "disable-scroll": true,
+ "persistent-workspaces": {
+ "1": [],
+ "10": [],
+ "2": [],
+ "3": [],
+ "4": [],
+ "5": [],
+ "6": [],
+ "7": [],
+ "8": [],
+ "9": []
+ }
+ },
+ "layer": "top",
+ "margin": "5 5 5 5",
+ "modules-center": [],
+ "modules-left": [
+ "hyprland/workspaces",
+ "hyprland/window"
+ ],
+ "modules-right": [
+ "tray",
+ "network",
+ "pulseaudio",
+ "custom/mem",
+ "temperature",
+ "backlight",
+ "battery",
+ "clock"
+ ],
+ "name": "hyprbar",
+ "network": {
+ "format": "{ifname}",
+ "format-disconnected": "",
+ "format-ethernet": "eth ",
+ "format-wifi": "{signalStrength}% ",
+ "interval": 1,
+ "tooltip-format": "{ifname} via {gwaddr} ",
+ "tooltip-format-disconnected": "Disconnected",
+ "tooltip-format-ethernet": "{ifname} ",
+ "tooltip-format-wifi": "{essid} ({signalStrength}%) "
+ },
+ "pulseaudio": {
+ "format": "{volume}% {icon} {format_source}",
+ "format-bluetooth": "{volume}% {icon} {format_source}",
+ "format-bluetooth-muted": " {icon} {format_source}",
+ "format-icons": {
+ "car": "",
+ "default": [
+ "",
+ "",
+ ""
+ ],
+ "hands-free": "",
+ "headphone": "",
+ "headset": "",
+ "phone": "",
+ "portable": ""
+ },
+ "format-muted": " {format_source}",
+ "format-source": "{volume}% ",
+ "format-source-muted": "",
+ "min-length": 13,
+ "on-click": "${pkgs.pavucontrol}/bin/pavucontrol",
+ "reverse-scrolling": 1
+ },
+ "temperature": {
+ "critical-threshold": 80,
+ "format": "{temperatureC}°C {icon}",
+ "format-icons": [
+ "",
+ "",
+ "",
+ "",
+ ""
+ ],
+ "tooltip": false
+ },
+ "tray": {
+ "icon-size": 16,
+ "show-passive-items": true,
+ "spacing": 4
+ }
+ }
+ ]
+ '';
+
+ "waybar/hyprbar.css".text = ''
+ window.hyprbar,
+ window.hyprbar * {
+ border: none;
+ border-radius: 10px;
+ font-family: DejaVuSansM Nerd Font;
+ min-height: 20px;
+ }
+
+ window.hyprbar#waybar {
+ background: #ffffff;
+ }
+
+ window.hyprbar#waybar.hidden {
+ opacity: 0.2;
+ }
+
+ window.hyprbar #workspaces {
+ padding-left: 8px;
+ padding-right: 8px;
+ margin-right: 8px;
+ transition: none;
+ }
+
+ window.hyprbar #workspaces button {
+ transition: none;
+ color: black;
+ background: transparent;
+ padding: 5px;
+ font-size: 18px;
+ border-radius: 0px;
+ }
+
+ window.hyprbar #workspaces button.empty {
+ color: #7c818c;
+ }
+
+ window.hyprbar #workspaces button.persistent {
+ font-size: 12px;
+ }
+
+ window.hyprbar #workspaces button.visible {
+ color: black;
+ font-size: 18px;
+ }
+
+ window.hyprbar #workspaces button.visible.hosting-monitor {
+ background: lightgray;
+ }
+
+ window.hyprbar #workspaces button:hover {
+ color: white;
+ background: black;
+ }
+
+ window.hyprbar #window {
+ padding-left: 16px;
+ padding-right: 16px;
+ transition: none;
+ color: black;
+ background: transparent;
+ }
+
+ window.hyprbar #tray {
+ margin-right: 10px;
+ padding-left: 10px;
+ padding-right: 10px;
+ transition: none;
+ color: white;
+ background: rgb(66, 118, 185);
+ }
+
+ window.hyprbar #network {
+ /* margin-right: 4px; */
+ padding-left: 10px;
+ padding-right: 10px;
+ transition: none;
+ color: black;
+ background: transparent;
+ }
+
+ window.hyprbar #pulseaudio {
+ /* margin-right: 4px; */
+ padding-left: 10px;
+ padding-right: 10px;
+ transition: none;
+ color: black;
+ background: transparent;
+ }
+
+ window.hyprbar #pulseaudio.muted {
+ color: gray;
+ }
+
+ window.hyprbar #custom-mem {
+ /* margin-right: 8px; */
+ padding-left: 10px;
+ padding-right: 10px;
+ transition: none;
+ color: black;
+ background: transparent;
+ }
+
+ window.hyprbar #temperature {
+ /* margin-right: 8px; */
+ padding-left: 10px;
+ padding-right: 10px;
+ transition: none;
+ color: black;
+ background: transparent;
+ }
+
+ window.hyprbar #temperature.critical {
+ background-color: #eb4d4b;
+ }
+
+ window.hyprbar #backlight {
+ /* margin-right: 8px; */
+ padding-left: 10px;
+ padding-right: 10px;
+ transition: none;
+ color: black;
+ background: transparent;
+ }
+
+ window.hyprbar #battery {
+ padding-left: 10px;
+ padding-right: 10px;
+ transition: none;
+ color: black;
+ background: transparent;
+ }
+
+ window.hyprbar #battery.charging {
+ color: #ffffff;
+ background-color: #26a65b;
+ }
+
+ window.hyprbar #battery.warning:not(.charging) {
+ background-color: #ffbe61;
+ color: black;
+ }
+
+ window.hyprbar #battery.critical:not(.charging) {
+ background-color: #f53c3c;
+ color: #ffffff;
+ animation-name: blink;
+ animation-duration: 0.5s;
+ animation-timing-function: linear;
+ animation-iteration-count: infinite;
+ animation-direction: alternate;
+ }
+
+ window.hyprbar #clock {
+ padding-left: 10px;
+ padding-right: 16px;
+ transition: none;
+ color: black;
+ background: transparent;
+ }
+
+ @keyframes blink {
+ to {
+ background-color: #ffffff;
+ color: #000000;
+ }
+ }
+ '';
+ };
+
+ programs.waybar = {
+ enable = true;
+ # TODO replace with (un-)stable channel version once available
+ package = waybar.packages.x86_64-linux.default;
+ };
+}
diff --git a/users/gandalf/modules/packages.nix b/users/gandalf/modules/packages.nix
index 60aa545..34333cc 100644
--- a/users/gandalf/modules/packages.nix
+++ b/users/gandalf/modules/packages.nix
@@ -8,9 +8,14 @@
gdu # fast disk usage analyzer with console interface written in go
duf # disk usage/free utility - a better 'df' alternative
phoronix-test-suite # the phoronix test suite open-source, cross-platform automated testing/benchmarking software
+ stress # simple workload generator for posix systems. it imposes a configurable amount of cpu, memory, i/o, and disk stress on the system
+ s-tui # stress-terminal ui monitoring tool
+ fio # flexible io tester - an io benchmark tool
ffmpeg # complete, cross-platform solution to record, convert and stream audio and video
texliveFull # tex live environment
imagemagick # software suite to create, edit, compose, or convert bitmap images
+ ghostscript # postscript interpreter (mainline version)
+ ventoy-full # bootable usb solution
];
}