qutebrowser: remeber dark theme preference

This commit is contained in:
Leonardo Eugênio 2023-05-12 12:11:46 -03:00
parent d32bd28650
commit f1cbae7b53
4 changed files with 107 additions and 71 deletions

View file

@ -158,75 +158,20 @@ in
# Dark theme # Dark theme
######################################################## ########################################################
webpage = lib.mkIf (color.type == "dark") { # webpage = lib.mkIf (color.type == "dark") {
bg = color.bg; # bg = color.bg;
preferred_color_scheme = "dark"; # preferred_color_scheme = "dark";
darkmode = { # darkmode = {
enabled = false; # enabled = false;
threshold = { # threshold = {
text = 150; # text = 150;
background = 205; # background = 205;
}; # };
}; # };
}; # };
}; };
}; };
home.file = { home.file = {
# For some stupid reason qutebrowser crashes if this dir does not exist
".config/qutebrowser/greasemonkey/darkreader.js".text = ''
// ==UserScript==
// @name Dark Reader (Unofficial)
// @icon https://darkreader.org/images/darkreader-icon-256x256.png
// @namespace DarkReader
// @description Inverts the brightness of pages to reduce eye strain
// @version 4.7.15
// @author https://github.com/darkreader/darkreader#contributors
// @homepageURL https://darkreader.org/ | https://github.com/darkreader/darkreader
// @run-at document-end
// @grant none
// @include http*
// @require https://cdn.jsdelivr.net/npm/darkreader/darkreader.min.js
// @noframes
// ==/UserScript==
DarkReader.setFetchMethod(window.fetch)
if ("${color.type}" != "dark") {
DarkReader.disable();
return;
}
const ignore_list = [
"askubuntu.com",
"mathoverflow.com",
"mathoverflow.net",
"serverfault.com",
"stackapps.com",
"stackexchange.com",
"stackoverflow.com",
"superuser.com",
"hub.docker.com",
];
for (let item of ignore_list) {
if (window.location.origin.indexOf(item) >= 0) {
console.log("URL matched dark-mode ignore list");
return;
}
}
DarkReader.enable({
brightness: 100,
contrast: 100,
sepia: 0,
darkSchemeBackgroundColor: "${color.bg}",
darkSchemeTextColor: "${color.txt}",
lightSchemeBackgroundColor: "${color.bg}",
lightSchemeTextColor: "${color.txt}",
});
'';
".config/qutebrowser/style.css".text = '' ".config/qutebrowser/style.css".text = ''
${lib.optionalString (color.type == "dark") '' ${lib.optionalString (color.type == "dark") ''
button, button,

View file

@ -0,0 +1,90 @@
{ config, pkgs, lib, font, ... }:
let
inherit (pkgs.uservars) theme;
inherit (theme) color;
# ".config/qutebrowser/greasemonkey/darkreader.js".text =
darkThemeUserscript = enabled: pkgs.writeText "darkreader.js" ''
// ==UserScript==
// @name Dark Reader (Unofficial)
// @icon https://darkreader.org/images/darkreader-icon-256x256.png
// @namespace DarkReader
// @description Inverts the brightness of pages to reduce eye strain
// @version 4.7.15
// @author https://github.com/darkreader/darkreader#contributors
// @homepageURL https://darkreader.org/ | https://github.com/darkreader/darkreader
// @run-at document-end
// @grant none
// @include http*
// @require https://cdn.jsdelivr.net/npm/darkreader/darkreader.min.js
// @noframes
// ==/UserScript==
DarkReader.setFetchMethod(window.fetch)
if (${if enabled then "false" else "true"}) {
DarkReader.disable();
return;
}
const ignore_list = [
"askubuntu.com",
"mathoverflow.com",
"mathoverflow.net",
"serverfault.com",
"stackapps.com",
"stackexchange.com",
"stackoverflow.com",
"superuser.com",
"hub.docker.com",
];
for (let item of ignore_list) {
if (window.location.origin.indexOf(item) >= 0) {
console.log("URL matched dark-mode ignore list");
return;
}
}
DarkReader.enable({
brightness: 100,
contrast: 100,
sepia: 0,
darkSchemeBackgroundColor: "${color.bg}",
darkSchemeTextColor: "${color.txt}",
lightSchemeBackgroundColor: "${color.bg}",
lightSchemeTextColor: "${color.txt}",
});
'';
in
{
programs.qutebrowser.keyBindings = {
normal = {
"K" = "spawn --userscript toggle-dark-theme";
};
};
home.file = {
".local/share/qutebrowser/userscripts/toggle-dark-theme".executable = true;
".local/share/qutebrowser/userscripts/toggle-dark-theme".text = ''
#!/bin/sh
DARK_READER_SCRIPT="$HOME/.config/qutebrowser/greasemonkey/darkreader.js"
MARKER="$HOME/.config/qutebrowser/is-dark-mode"
if test -f "$MARKER"
then
rm -f "$MARKER"
cp -f ${darkThemeUserscript false} "$DARK_READER_SCRIPT"
echo "jseval --world main DarkReader.disable()" >> "$QUTE_FIFO"
else
touch "$MARKER"
cp -f ${darkThemeUserscript true} "$DARK_READER_SCRIPT"
echo "jseval --world main DarkReader.enable()" >> "$QUTE_FIFO"
fi
if test -n "$QUTE_FIFO"; then
echo "greasemonkey-reload --quiet" >> "$QUTE_FIFO"
fi
'';
};
}

View file

@ -1,10 +1,11 @@
{ config, pkgs, lib, font, ... }: { config, pkgs, lib, font, ... }:
let let
inherit (pkgs.uservars) key font browser editor; inherit (pkgs.uservars) key browser editor;
in in
{ {
imports = [ imports = [
./colors.nix ./colors.nix
./dark-theme.nix
./fonts.nix ./fonts.nix
]; ];
@ -43,7 +44,7 @@ in
"co" = "tab-only --pinned keep"; "co" = "tab-only --pinned keep";
"K" = "jseval --world main if (DarkReader.isEnabled()) {DarkReader.disable()} else {DarkReader.enable()}"; # "K" = "jseval --world main if (DarkReader.isEnabled()) {DarkReader.disable()} else {DarkReader.enable()}";
}; };
insert = { insert = {
# quit insert mode # quit insert mode

View file

@ -23,9 +23,9 @@ in
category = BIG_INTER; category = BIG_INTER;
}; };
messages = { messages = {
error = BIG_INTER; error = DEF_INTER;
info = BIG_INTER; info = DEF_INTER;
warning = BIG_INTER; warning = DEF_INTER;
}; };
tabs = { tabs = {
selected = BIG_INTER; selected = BIG_INTER;