summaryrefslogtreecommitdiff
path: root/home-modules/desktop/wayland/waybar.nix
blob: 6088cee2addf2ef6d8a6efdd9da756684cf2ba8c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
{
  pkgs,
  hostconfig,
  lib,
  config,
  ...
}:
{
  options.homeprogs.waybar.enable = lib.mkEnableOption "Enable waybar";

  config = lib.mkIf config.homeprogs.waybar.enable {
    programs.waybar = {
      enable = true;
      settings = [
        {
          layer = "top";
          position = "top";
          height = 30;
          spacing = 6;
          modules-left = [
            "hyprland/workspaces"
            "hyprland/window"
          ];

          modules-center = [
            "clock"
            "hyprland/language"
            "tray"
            "battery"
          ];

          modules-right = [
            "idle_inhibitor"
            "wireplumber"
            "network"
            "cpu"
            "memory"
            "disk"
            "temperature"
            "backlight"
          ];
          wireplumber = {
            scroll-step = 1; # %, can be a float
            format = "{volume}% ";
            format-muted = "Muted";
            on-click = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
            on-click-right = "pavucontrol";
          };

          network = {
            # interface = "wlp2*"; # (Optional) To force the use of this interface
            format-wifi = "({signalStrength}%) ";
            format-ethernet = "{ifname} ";
            tooltip-format = "{ifname} via {gwaddr} ";
            format-linked = "{ifname} (No IP) ";
            format-disconnected = "Disconnected ⚠";
            format-alt = "{essid}: {ipaddr}/{cidr}";
          };

          "hyprland/workspaces" = {
            all-outputs = false;
            active-only = false;
            format = "{name}";
            format-icons = {
              urgent = "";
              focused = "";
              default = "";
            };
          };

          "hyprland/window" = {
            max-length = 200;
            separate-outputs = true;
          };

          keyboard-state = {
            numlock = false;
            format = "{name} {icon}";
            format-icons = {
              locked = "";
              unlocked = "";
            };
          };
          idle_inhibitor = {
            format = "{icon}";
            format-icons = {
              activated = "";
              deactivated = "";
            };
          };
          tray = {
            icon-size = 21;
            spacing = 10;
          };
          clock = {
            timezone = "Europe/Amsterdam";
            tooltip-format = "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>";
            format-alt = "{:%Y-%m-%d}";
          };
          cpu = {
            format = "{usage}% ";
            tooltip = false;
          };
          memory = {
            format = "{}% ";
          };
          temperature = {
            thermal-zone = 1;
            # hwmon-path = "/sys/class/hwmon/hwmon2/temp1_input";
            critical-threshold = 80;
            # format-critical = "{temperatureC}°C {icon}";
            format = "{temperatureC}°C {icon}";
            format-icons = [
              ""
              ""
              ""
            ];
          };
          "backlight" = {
            # device = "acpi_video1";
            format = "{percent}{icon}";
            format-icons = [
              ""
              ""
              ""
              ""
              ""
              ""
              ""
              ""
              ""
            ];
          };
          battery = {
            states = {
              # good = 95;
              warning = 30;
              critical = 15;
            };
            format = "{capacity}% {icon}";
            format-charging = "{capacity}% ";
            format-plugged = "{capacity}% ";
            format-alt = "{time} {icon}";
            # format-good = ""; // An empty format will hide the module
            # format-full = "";
            format-icons = [
              ""
              ""
              ""
              ""
              ""
            ];
          };
        }
      ];
      style = ./waybar.css;
    };
  };
}