Files
nix-config/modules/home/programs/waybar/options.nix
mjallen18 70002a19e2 hmm
2026-04-07 18:39:42 -05:00

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.";
};
};
}