{ lib, pkgs, ... }:

{
  programs.qutebrowser = {
    enable = true;

    enableDefaultBindings = false;

    keyBindings = {
      normal = {
        ":" = null;
        "<Ctrl-v>" = "spawn mpv {url}";
        ",l" = ''config-cycle spellcheck.languages ["en-GB"] ["en-US"]'';
        "<F1>" = lib.mkMerge [
          "config-cycle tabs.show never always"
          "config-cycle statusbar.show in-mode always"
          "config-cycle scrolling.bar never always"
        ];
      };
      prompt = {
        "<Ctrl-y>" = "prompt-yes";
      };
    };
  };

  nmt.script =
    let
      qutebrowserConfig =
        if pkgs.stdenv.hostPlatform.isDarwin then
          ".qutebrowser/config.py"
        else
          ".config/qutebrowser/config.py";
    in
    ''
      assertFileContent \
        home-files/${qutebrowserConfig} \
        ${builtins.toFile "qutebrowser-expected-config.py" ''
          config.load_autoconfig(False)
          c.bindings.default = {}
          config.bind(",l", "config-cycle spellcheck.languages [\"en-GB\"] [\"en-US\"]", mode="normal")
          config.unbind(":", mode="normal")
          config.bind("<Ctrl-v>", "spawn mpv {url}", mode="normal")
          config.bind("<F1>", "config-cycle tabs.show never always ;; config-cycle statusbar.show in-mode always ;; config-cycle scrolling.bar never always", mode="normal")
          config.bind("<Ctrl-y>", "prompt-yes", mode="prompt")''}
    '';
}
