{ 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"; } ]; }; }; }; }; }