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

{
  config = {
    programs.i3status-rust = {
      enable = true;
      bars = {
        custom = {
          blocks = [
            {
              block = "disk_space";
              path = "/";
              info_type = "available";
              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 = " $icon $barchart ";
            }
            {
              block = "load";
              interval = 1;
              format = " $icon $1m $5m ";
            }
            {
              block = "temperature";
              interval = 10;
              format = "$icon $min min, $max max, $average avg";
              chip = "*-isa-*";
            }
            {
              block = "net";
              device = "enp9s0u2u1u2c2";
              interval = 5;
            }
            {
              block = "speedtest";
              format = " ^icon_ping $ping ";
            }
            {
              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}%";
              click = [{
                button = "left";
                cmd = "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" ];
              click = [
                {
                  button = "play";
                  action = "music_play";
                }
                {
                  button = "prev";
                  action = "music_prev";
                }
                {
                  button = "next";
                  action = "music_next";
                }
              ];
            }
            {
              block = "time";
              interval = 60;
              format = " $timestamp.datetime(f:'%a %d/%m %R') ";
            }
            { block = "battery"; }
          ];

          icons = "awesome5";

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

    test.stubs.i3status-rust = { version = "0.30.0"; };

    nmt.script = ''
      assertFileExists home-files/.config/i3status-rust/config-custom.toml
      assertFileContent home-files/.config/i3status-rust/config-custom.toml \
        ${
          pkgs.writeText "i3status-rust-expected-config" ''
            [[block]]
            alert = 10.0
            block = "disk_space"
            info_type = "available"
            interval = 60
            path = "/"
            warning = 20.0

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

            [[block]]
            block = "cpu"
            format = " $icon $barchart "
            interval = 1

            [[block]]
            block = "load"
            format = " $icon $1m $5m "
            interval = 1

            [[block]]
            block = "temperature"
            chip = "*-isa-*"
            format = "$icon $min min, $max max, $average avg"
            interval = 10

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

            [[block]]
            block = "speedtest"
            format = " ^icon_ping $ping "

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

            [[block]]
            block = "sound"
            format = "{output_name} {volume}%"

            [[block.click]]
            button = "left"
            cmd = "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"]
            player = "spotify"

            [[block.click]]
            action = "music_play"
            button = "play"

            [[block.click]]
            action = "music_prev"
            button = "prev"

            [[block.click]]
            action = "music_next"
            button = "next"

            [[block]]
            block = "time"
            format = " $timestamp.datetime(f:'%a %d/%m %R') "
            interval = 60

            [[block]]
            block = "battery"

            [icons]
            icons = "awesome5"

            [theme]
            theme = "gruvbox-dark"
          ''
        }
    '';
  };
}