334 lines
8.5 KiB
Nix
Executable File
334 lines
8.5 KiB
Nix
Executable File
{ lib, namespace, ... }:
|
|
with lib;
|
|
let
|
|
inherit (types)
|
|
str
|
|
int
|
|
bool
|
|
listOf
|
|
attrs
|
|
path
|
|
nullOr
|
|
submodule
|
|
;
|
|
in
|
|
{
|
|
options.${namespace}.programs.waybar = {
|
|
enable = mkEnableOption "Waybar status bar";
|
|
|
|
# Legacy/compat options (kept for backwards compatibility)
|
|
layer = mkOption {
|
|
type = str;
|
|
default = "top";
|
|
description = "Waybar layer (compat). Prefer layout + feature flags.";
|
|
};
|
|
|
|
extraModules = mkOption {
|
|
type = attrs;
|
|
default = { };
|
|
description = "Extra settings bars at top-level (compat with older module).";
|
|
};
|
|
|
|
extraModulesStyle = mkOption {
|
|
type = str;
|
|
default = "";
|
|
description = "Extra CSS appended (compat). Prefer extra.style.";
|
|
};
|
|
|
|
windowOffset = mkOption {
|
|
type = int;
|
|
default = 4;
|
|
description = "Right margin offset for the hyprland/window module (in rem).";
|
|
};
|
|
|
|
# Layout
|
|
layout = mkOption {
|
|
type = submodule {
|
|
options = {
|
|
left = mkOption {
|
|
type = listOf str;
|
|
default = [ "hyprland/workspaces" ];
|
|
description = "Modules shown on the left.";
|
|
};
|
|
center = mkOption {
|
|
type = listOf str;
|
|
default = [ "hyprland/window" ];
|
|
description = "Modules shown in the center.";
|
|
};
|
|
right = mkOption {
|
|
type = listOf str;
|
|
default = [
|
|
"tray"
|
|
"custom/left-end"
|
|
"temperature"
|
|
"temperature#gpu"
|
|
"keyboard-state#capslock"
|
|
"keyboard-state#numlock"
|
|
"wireplumber#sink"
|
|
"bluetooth"
|
|
"network"
|
|
"idle_inhibitor"
|
|
"custom/right-end"
|
|
"custom/left-end"
|
|
"clock"
|
|
"battery"
|
|
"custom/notifications"
|
|
"custom/weather"
|
|
"custom/power"
|
|
"custom/right-end"
|
|
];
|
|
description = "Modules shown on the right.";
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
description = "Waybar module layout.";
|
|
};
|
|
|
|
# Network
|
|
network = mkOption {
|
|
type = submodule {
|
|
options = {
|
|
interface = mkOption {
|
|
type = str;
|
|
default = "wlan0";
|
|
description = "Primary network interface name.";
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
description = "Network configuration.";
|
|
};
|
|
|
|
# Temperatures
|
|
temperature = mkOption {
|
|
type = submodule {
|
|
options = {
|
|
cpu = mkOption {
|
|
type = submodule {
|
|
options = {
|
|
enable = mkOption {
|
|
type = bool;
|
|
default = true;
|
|
description = "Enable CPU temperature module.";
|
|
};
|
|
hwmonPath = mkOption {
|
|
type = str;
|
|
default = "/sys/devices/pci0000:00/0000:00:18.3/hwmon";
|
|
description = "CPU temperature hwmon path.";
|
|
};
|
|
hwmonFile = mkOption {
|
|
type = str;
|
|
default = "temp1_input";
|
|
description = "CPU temperature hwmon file.";
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
};
|
|
|
|
gpu = mkOption {
|
|
type = submodule {
|
|
options = {
|
|
enable = mkOption {
|
|
type = bool;
|
|
default = true;
|
|
description = "Enable GPU temperature module.";
|
|
};
|
|
hwmonPath = mkOption {
|
|
type = str;
|
|
default = "/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:00.0/0000:03:00.0/hwmon";
|
|
description = "GPU temperature hwmon path.";
|
|
};
|
|
hwmonFile = mkOption {
|
|
type = str;
|
|
default = "temp1_input";
|
|
description = "GPU temperature hwmon file.";
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
description = "Temperature module configuration.";
|
|
};
|
|
|
|
# Features
|
|
features = mkOption {
|
|
type = submodule {
|
|
options = {
|
|
tray = mkOption {
|
|
type = submodule {
|
|
options = {
|
|
enable = mkOption {
|
|
type = bool;
|
|
default = true;
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
};
|
|
|
|
bluetooth = mkOption {
|
|
type = submodule {
|
|
options = {
|
|
enable = mkOption {
|
|
type = bool;
|
|
default = true;
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
};
|
|
|
|
idleInhibitor = mkOption {
|
|
type = submodule {
|
|
options = {
|
|
enable = mkOption {
|
|
type = bool;
|
|
default = true;
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
};
|
|
|
|
keyboardIndicators = mkOption {
|
|
type = submodule {
|
|
options = {
|
|
enable = mkOption {
|
|
type = bool;
|
|
default = true;
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
};
|
|
|
|
audio = mkOption {
|
|
type = submodule {
|
|
options = {
|
|
sink = mkOption {
|
|
type = submodule {
|
|
options = {
|
|
enable = mkOption {
|
|
type = bool;
|
|
default = true;
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
};
|
|
source = mkOption {
|
|
type = submodule {
|
|
options = {
|
|
enable = mkOption {
|
|
type = bool;
|
|
default = false;
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
};
|
|
|
|
weather = mkOption {
|
|
type = submodule {
|
|
options = {
|
|
enable = mkOption {
|
|
type = bool;
|
|
default = true;
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
};
|
|
|
|
hass = mkOption {
|
|
type = submodule {
|
|
options = {
|
|
enable = mkOption {
|
|
type = bool;
|
|
default = false;
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
};
|
|
|
|
clock = mkOption {
|
|
type = submodule {
|
|
options = {
|
|
enable = mkOption {
|
|
type = bool;
|
|
default = true;
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
};
|
|
|
|
battery = mkOption {
|
|
type = submodule {
|
|
options = {
|
|
enable = mkOption {
|
|
type = bool;
|
|
default = true;
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
description = "Toggle optional Waybar features.";
|
|
};
|
|
|
|
# Styling
|
|
style = mkOption {
|
|
type = submodule {
|
|
options = {
|
|
file = mkOption {
|
|
type = nullOr path;
|
|
default = null;
|
|
description = "Optional external CSS file to use instead of the inline style.";
|
|
};
|
|
fragmentsDir = mkOption {
|
|
type = nullOr path;
|
|
default = null;
|
|
description = "Optional directory of CSS fragments to append.";
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
description = "Styling configuration.";
|
|
};
|
|
|
|
# Extra overrides
|
|
extra = mkOption {
|
|
type = submodule {
|
|
options = {
|
|
settings = mkOption {
|
|
type = attrs;
|
|
default = { };
|
|
description = "Extra settings merged into settings.mainBar.";
|
|
};
|
|
style = mkOption {
|
|
type = str;
|
|
default = "";
|
|
description = "Extra CSS appended to the computed style.";
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
description = "Extra settings/style hooks.";
|
|
};
|
|
};
|
|
}
|