{
  pkgs,
  lib,
  config,
  osConfig,
  ...
}: let
  fsss = with pkgs;
    writeShellApplication {
      name = "fsss";
      runtimeInputs = [flameshot curl xsel];
      text = ''
        flameshot gui -r -s > /tmp/ss.png;if [ ! -s /tmp/ss.png ]; then
          exit 1
        fi
        AUTH=$(cat ${config.sops.secrets.zipline-auth.path})
        curl -H "authorization: $AUTH" https://share.muon.host/api/upload -F file=@/tmp/ss.png -H "Content-Type: multipart/form-data" -H "Format: date" -H "Image-Compression-Percent: 90" -H "No-JSON: true" | tr -d '\n' | xsel -ib;
      '';
    };
  zmenu = with pkgs;
    writeShellApplication {
      name = "zmenu";
      runtimeInputs = [zellij zoxide wmctrl i3 rofi alacritty zsh];
      text = ''
        ZPATH=$(zoxide query -l | sed -e "s|$HOME/||g" | rofi -dmenu)
        [[ -z "$ZPATH" ]] && exit
        ZSESH=$(echo "$ZPATH" | tr / -)
        ZWIND=$(wmctrl -l | grep "$ZSESH$" || echo "")
        cd "$ZPATH"
        if [[ -z "$ZWIND" ]]; then
          alacritty -T "$ZSESH" -e zsh -c "zellij -s $ZSESH -n dev || zellij a $ZSESH"
        else
          wmctrl -a "$ZSESH"
        fi
      '';
    };
in
  with lib; {
    options.mods.i3.enable = mkEnableOption "enables i3";
    options.mods.battery.enable = mkEnableOption "enables battery";

    config = mkIf config.mods.i3.enable {
      services.unclutter.enable = true;
      programs.rofi.enable = true;

      programs.i3status-rust = {
        enable = true;
        bars.default = lib.mkMerge [
          {
            blocks = lib.mkBefore [
              {
                block = "privacy";
                driver = [{name = "v4l";} {name = "pipewire";}];
              }
              # {
              #   block = "net";
              #   format = " $icon  ";
              #   inactive_format = " $icon ";
              # }
            ];
          }
          (lib.mkIf config.mods.battery.enable {
            blocks = [
              {
                block = "battery";
                format = " $icon $percentage ";
                # format_alt =
                #   " $icon $percentage {$time_remaining.dur(hms:true, min_unit:m) |}";
              }
            ];
          })
          {
            settings.theme.overrides = lib.mkMerge [
              {separator = "";}
              config.lib.stylix.i3status-rust.bar
            ];
            icons = "awesome5";
            blocks = lib.mkAfter [
              {
                block = "sound";
                format = " $icon {$volume |} ";
                click = [
                  {
                    button = "left";
                    cmd = "${lib.getExe pkgs.pavucontrol}";
                  }
                ];
              }
              {
                block = "time";
                format = "$icon $timestamp.datetime(f:'%Y-%m-%d %a %H:%M:%S') ";
                # format_alt = "$icon $timestamp.datetime(f:'%Y-%m-%d %H:%M') ";
                interval = 1;
              }
            ];
          }
        ];
      };

      xsession.windowManager.i3 = let
        modifier = "Mod4";
        wsAmount = 10;
        genSpaces = f: map builtins.toString (builtins.genList f wsAmount);
        workspaces = genSpaces (x: x + 1);
      in {
        enable = true;
        config = {
          modifier = modifier;
          terminal = "alacritty";
          menu = "rofi -show drun";

          window = {
            titlebar = false;
            hideEdgeBorders = "smart";
          };

          floating.criteria = [
            {title = "^Cheat$";}
          ];

          defaultWorkspace = "workspace number 1";
          workspaceAutoBackAndForth = true;
          focus.wrapping = "yes";

          # startup = [ ] ++ lib.optionals config.mods.social.enable [{
          #   command = "exec vesktop";
          # }];

          assigns = {
            "2" = [{class = "Vesktop";}];
            "3" = [{class = "^Steam$";}];
          };

          keybindings = let
            # modKeyComb: string -> valueAction: string
            # -> keys: [string] -> values: [string]
            # -> keybindings: attrSet { string -> string }
            zipBinds = comb: action: keys: values: (builtins.listToAttrs (zipListsWith (k: v: {
                name = "${modifier}${comb}${k}";
                value = "${action} ${v}";
              })
              keys
              values));

            moveKeys = ["h" "j" "k" "l"];
            moveDirs = ["left" "down" "up" "right"];

            workspKeys = genSpaces (x: mod (x + 1) wsAmount);
          in
            mkOptionDefault ((zipBinds "+" "focus" moveKeys moveDirs)
              // (zipBinds "+Shift+" "move" moveKeys moveDirs)
              // (zipBinds "+" "workspace number" workspKeys workspaces)
              // (zipBinds "+Shift+" "move container to workspace number" workspKeys
                workspaces)
              // {
                "XF86AudioRaiseVolume" = "exec --no-startup-id pactl set-sink-volume 0 +2%";
                "XF86AudioLowerVolume" = "exec --no-startup-id pactl set-sink-volume 0 -2%";
                "Print" = "exec ${getExe fsss}";
                "${modifier}+z" = "exec ${getExe zmenu}";
                "${modifier}+y" = "sticky toggle";
                "${modifier}+g" = "floating toggle";
              });

          bars = let
            status_conf = "${config.xdg.configHome}/i3status-rust/config-default.toml";
            stylix_bar =
              {
                mode = "dock";
                hiddenState = "hide";
                position = "bottom";
                statusCommand = "${getExe pkgs.i3status-rust} ${status_conf}";
                command = "${pkgs.i3}/bin/i3bar";
                workspaceButtons = true;
                workspaceNumbers = true;
                trayOutput = "primary";
              }
              // config.stylix.targets.i3.exportedBarConfig;
          in [stylix_bar];
        };
      };
    };
  }
