159 lines
4.1 KiB
Nix
159 lines
4.1 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}: let
|
|
inherit
|
|
(lib)
|
|
lists
|
|
mkIf
|
|
mkOption
|
|
optional
|
|
types
|
|
;
|
|
|
|
isEnabled = config.my.home.x.enable;
|
|
i3BarTheme = config.my.theme.i3BarTheme;
|
|
cfg = config.my.home.x.i3bar;
|
|
in {
|
|
options.my.home.x.i3bar = {
|
|
temperature.chip = mkOption {
|
|
type = types.str;
|
|
example = "coretemp-isa-*";
|
|
default = "";
|
|
};
|
|
temperature.inputs = mkOption {
|
|
type = types.listOf types.str;
|
|
example = ["Core 0" "Core 1" "Core 2" "Core 3"];
|
|
default = "";
|
|
};
|
|
|
|
networking.throughput_interfaces = mkOption {
|
|
type = types.listOf types.str;
|
|
example = ["wlp1s0"];
|
|
default = [];
|
|
};
|
|
};
|
|
|
|
config = mkIf isEnabled {
|
|
home.packages = builtins.attrValues {
|
|
inherit
|
|
(pkgs)
|
|
# FIXME: is this useful?
|
|
|
|
font-awesome
|
|
;
|
|
};
|
|
|
|
programs.i3status-rust = {
|
|
enable = true;
|
|
|
|
bars = {
|
|
top = {
|
|
icons = "awesome5";
|
|
settings.theme = {
|
|
theme = i3BarTheme.theme.name;
|
|
overrides = i3BarTheme.theme.overrides;
|
|
};
|
|
|
|
blocks =
|
|
[
|
|
{
|
|
block = "pomodoro";
|
|
notify_cmd = "i3nag";
|
|
blocking_cmd = true;
|
|
}
|
|
{
|
|
block = "disk_space";
|
|
path = "/";
|
|
info_type = "available";
|
|
interval = 60;
|
|
warning = 20.0;
|
|
alert = 10.0;
|
|
alert_unit = "GB";
|
|
}
|
|
{
|
|
block = "memory";
|
|
format = " $icon $mem_used.eng(prefix:G)/$mem_total.eng(prefix:G) ";
|
|
warning_mem = 70.0;
|
|
critical_mem = 90.0;
|
|
}
|
|
{
|
|
block = "cpu";
|
|
interval = 1;
|
|
format = " $icon $barchart ";
|
|
}
|
|
{
|
|
block = "temperature";
|
|
interval = 10;
|
|
format = " $icon $max ";
|
|
chip = cfg.temperature.chip;
|
|
inputs = cfg.temperature.inputs;
|
|
}
|
|
{
|
|
block = "custom";
|
|
# TODO: get service name programmatically somehow
|
|
command = let
|
|
systemctl = lib.getExe' pkgs.systemd "systemctl";
|
|
in
|
|
pkgs.writeShellScript "check-restic.sh" ''
|
|
BACKUP_STATUS=Good
|
|
if ${systemctl} is-failed --quiet restic-backups-backblaze.service; then
|
|
BACKUP_STATUS=Critical
|
|
fi
|
|
echo "{\"state\": \"$BACKUP_STATUS\", \"text\": \"Backup\"}"
|
|
'';
|
|
json = true;
|
|
interval = 60;
|
|
}
|
|
]
|
|
++ (
|
|
lists.optionals ((builtins.length cfg.networking.throughput_interfaces) != 0)
|
|
(map
|
|
(interface: {
|
|
block = "net";
|
|
device = interface;
|
|
interval = 1;
|
|
missing_format = "";
|
|
})
|
|
cfg.networking.throughput_interfaces)
|
|
)
|
|
++ [
|
|
{
|
|
block = "net";
|
|
format = " $icon {$ip|} {SSID: $ssid|}";
|
|
theme_overrides = {
|
|
idle_bg = {link = "good_bg";};
|
|
idle_fg = {link = "good_fg";};
|
|
};
|
|
}
|
|
{
|
|
block = "sound";
|
|
driver = "pulseaudio";
|
|
}
|
|
]
|
|
++ (
|
|
optional config.my.home.laptop.enable
|
|
{
|
|
block = "battery";
|
|
format = " $icon $percentage ($power) ";
|
|
}
|
|
)
|
|
++ [
|
|
# {
|
|
# block = "notify";
|
|
# }
|
|
{
|
|
block = "time";
|
|
interval = 5;
|
|
format = " $icon $timestamp.datetime(f:'%a %d/%m %T', l:fr_FR) ";
|
|
timezone = "Europe/Paris";
|
|
}
|
|
];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|