From 3433206e51766b4164dad368a81325efbf343fbe Mon Sep 17 00:00:00 2001 From: sisyphushappy Date: Wed, 18 Oct 2023 16:56:15 -0400 Subject: [PATCH] qutebrowser: add greasemonkey userscript option Co-authored-by: Ivar Scholten --- modules/programs/qutebrowser.nix | 35 +++++++++++++++++++ .../modules/programs/qutebrowser/default.nix | 3 +- .../programs/qutebrowser/greasemonkey.nix | 34 ++++++++++++++++++ 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 tests/modules/programs/qutebrowser/greasemonkey.nix diff --git a/modules/programs/qutebrowser.nix b/modules/programs/qutebrowser.nix index 4de6f3e0..b6cc41ea 100644 --- a/modules/programs/qutebrowser.nix +++ b/modules/programs/qutebrowser.nix @@ -239,6 +239,28 @@ in { ''; }; + greasemonkey = mkOption { + type = types.listOf types.package; + default = [ ]; + example = literalExpression '' + [ + (pkgs.fetchurl { + url = "https://raw.githubusercontent.com/afreakk/greasemonkeyscripts/1d1be041a65c251692ee082eda64d2637edf6444/youtube_sponsorblock.js"; + sha256 = "sha256-e3QgDPa3AOpPyzwvVjPQyEsSUC9goisjBUDMxLwg8ZE="; + }) + (pkgs.writeText "some-script.js" ''' + // ==UserScript== + // @name Some Greasemonkey script + // ==/UserScript== + ''') + ] + ''; + description = '' + Greasemonkey userscripts to add to qutebrowser's {file}`greasemonkey` + directory. + ''; + }; + extraConfig = mkOption { type = types.lines; default = ""; @@ -265,6 +287,9 @@ in { quickmarksFile = optionals (cfg.quickmarks != { }) concatStringsSep "\n" ((mapAttrsToList formatQuickmarks cfg.quickmarks)); + + greasemonkeyDir = optionals (cfg.greasemonkey != [ ]) pkgs.linkFarmFromDrvs + "greasemonkey-userscripts" cfg.greasemonkey; in mkIf cfg.enable { home.packages = [ cfg.package ]; @@ -300,5 +325,15 @@ in { mkIf (cfg.quickmarks != { } && pkgs.stdenv.hostPlatform.isLinux) { text = quickmarksFile; }; + + home.file.".qutebrowser/greasemonkey" = + mkIf (cfg.greasemonkey != [ ] && pkgs.stdenv.hostPlatform.isDarwin) { + source = greasemonkeyDir; + }; + + xdg.configFile."qutebrowser/greasemonkey" = + mkIf (cfg.greasemonkey != [ ] && pkgs.stdenv.hostPlatform.isLinux) { + source = greasemonkeyDir; + }; }; } diff --git a/tests/modules/programs/qutebrowser/default.nix b/tests/modules/programs/qutebrowser/default.nix index 8c23515c..20b76337 100644 --- a/tests/modules/programs/qutebrowser/default.nix +++ b/tests/modules/programs/qutebrowser/default.nix @@ -1,5 +1,6 @@ { - qutebrowser-settings = ./settings.nix; + qutebrowser-greasemonkey = ./greasemonkey.nix; qutebrowser-keybindings = ./keybindings.nix; qutebrowser-quickmarks = ./quickmarks.nix; + qutebrowser-settings = ./settings.nix; } diff --git a/tests/modules/programs/qutebrowser/greasemonkey.nix b/tests/modules/programs/qutebrowser/greasemonkey.nix new file mode 100644 index 00000000..d6e8713c --- /dev/null +++ b/tests/modules/programs/qutebrowser/greasemonkey.nix @@ -0,0 +1,34 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + greasemonkeyScript = pkgs.writeText "qutebrowser-greasemonkey.js" '' + // ==UserScript== + // @name foo + // @namespace foo + // @match https://example.com/* + // @grant none + // ==/UserScript== + ''; + +in { + programs.qutebrowser = { + enable = true; + greasemonkey = [ greasemonkeyScript ]; + }; + + test.stubs.qutebrowser = { }; + + nmt.script = let + scriptDir = if pkgs.stdenv.hostPlatform.isDarwin then + ".qutebrowser/greasemonkey" + else + ".config/qutebrowser/greasemonkey"; + in '' + assertFileContent \ + home-files/${scriptDir}/qutebrowser-greasemonkey.js \ + ${greasemonkeyScript} + ''; +}