{ config, lib, pkgs, ... }:

with lib;

{
  config = {
    programs.i3status-rust = {
      enable = true;
      bars = {
        extra-settings = {
          blocks = [
            {
              block = "disk_space";
              path = "/";
              alias = "/";
              info_type = "available";
              unit = "GB";
              interval = 60;
              warning = 20.0;
              alert = 10.0;
            }
            {
              block = "memory";
              display_type = "memory";
              format_mem = "{Mug}GB ({Mup}%)";
              format_swap = "{SUp}%";
            }
            {
              block = "cpu";
              interval = 1;
              format = "{barchart}";
            }
            {
              block = "load";
              interval = 1;
              format = "{1m} {5m}";
            }
            {
              block = "temperature";
              collapsed = true;
              interval = 10;
              format = "{min}° min, {max}° max, {average}° avg";
              chip = "*-isa-*";
            }
            {
              block = "networkmanager";
              ap_format = "{ssid} @ {strength}%";
              on_click = "kcmshell5 kcm_networkmanagement";
            }
            {
              block = "net";
              device = "enp9s0u2u1u2c2";
              speed_up = true;
              interval = 5;
            }
            {
              block = "speedtest";
              bytes = true;
            }
            {
              block = "xrandr";
              interval =
                6000; # Because running the commands causes screen lag, see https://github.com/greshake/i3status-rust/issues/668
            }
            {
              block = "sound";
              format = "{output_name} {volume}%";
              on_click = "pavucontrol --tab=3";
              mappings = {
                "alsa_output.pci-0000_00_1f.3.analog-stereo" = "";
                "bluez_sink.70_26_05_DA_27_A4.a2dp_sink" = "";
              };
            }
            {
              block = "music";
              player = "spotify";
              buttons = [ "play" "prev" "next" ];
              on_collapsed_click = "i3-msg '[class=Spotify] focus'";
            }
            {
              block = "time";
              interval = 60;
              format = "%a %d.%m %R";
            }
            { block = "battery"; }
          ];

          icons = "awesome5";

          settings = {
            theme = {
              name = "solarized-dark";
              overrides = {
                idle_bg = "#123456";
                idle_fg = "#abcdef";
              };
            };
          };

          theme = "gruvbox-dark";
        };
      };
    };

    test.stubs.i3status-rust = { };

    nmt.script = ''
      assertFileExists home-files/.config/i3status-rust/config-extra-settings.toml 
      assertFileContent home-files/.config/i3status-rust/config-extra-settings.toml \
        ${
          pkgs.writeText "i3status-rust-expected-config" ''
            icons = "awesome5"
            [[block]]
            alert = 10
            alias = "/"
            block = "disk_space"
            info_type = "available"
            interval = 60
            path = "/"
            unit = "GB"
            warning = 20

            [[block]]
            block = "memory"
            display_type = "memory"
            format_mem = "{Mug}GB ({Mup}%)"
            format_swap = "{SUp}%"

            [[block]]
            block = "cpu"
            format = "{barchart}"
            interval = 1

            [[block]]
            block = "load"
            format = "{1m} {5m}"
            interval = 1

            [[block]]
            block = "temperature"
            chip = "*-isa-*"
            collapsed = true
            format = "{min}° min, {max}° max, {average}° avg"
            interval = 10

            [[block]]
            ap_format = "{ssid} @ {strength}%"
            block = "networkmanager"
            on_click = "kcmshell5 kcm_networkmanagement"

            [[block]]
            block = "net"
            device = "enp9s0u2u1u2c2"
            interval = 5
            speed_up = true

            [[block]]
            block = "speedtest"
            bytes = true

            [[block]]
            block = "xrandr"
            interval = 6000

            [[block]]
            block = "sound"
            format = "{output_name} {volume}%"
            on_click = "pavucontrol --tab=3"

            [block.mappings]
            "alsa_output.pci-0000_00_1f.3.analog-stereo" = ""
            "bluez_sink.70_26_05_DA_27_A4.a2dp_sink" = ""

            [[block]]
            block = "music"
            buttons = ["play", "prev", "next"]
            on_collapsed_click = "i3-msg '[class=Spotify] focus'"
            player = "spotify"

            [[block]]
            block = "time"
            format = "%a %d.%m %R"
            interval = 60

            [[block]]
            block = "battery"

            [theme]
            name = "solarized-dark"

            [theme.overrides]
            idle_bg = "#123456"
            idle_fg = "#abcdef"
                                              ''
        }
    '';
  };
}