nixos-config/user/qutebrowser/default.nix
2024-05-30 16:55:59 -03:00

160 lines
4.9 KiB
Nix

{
config,
pkgs,
lib,
font,
...
}:
let
inherit (pkgs.uservars) key browser editor;
in
{
imports = [
./colors.nix
./dark-theme.nix
./fonts.nix
];
config = {
programs.qutebrowser = lib.mkIf (browser == "qutebrowser") {
enable = true;
# enableDefaultBindings = false;
keyBindings = {
normal = {
# basic movent
"${key.left}" = "scroll left";
"${key.down}" = "scroll down";
"${key.up}" = "scroll up";
"${key.right}" = "scroll right";
"${lib.toUpper key.up}" = "scroll-px 0 -100";
"${lib.toUpper key.down}" = "scroll-px 0 100";
"${lib.toUpper key.left}" = "back";
"${lib.toUpper key.right}" = "forward";
"${lib.toUpper key.tabL}" = "tab-prev";
"${lib.toUpper key.tabR}" = "tab-next";
"${key.next}" = "search-next";
"${lib.toUpper key.next}" = "search-prev";
"${key.insertMode}" = "mode-enter insert";
# ":" = "mode-enter command";
"t" = "hint all";
"h" = "set-cmd-text -s :open";
"T" = "hint all tab";
"H" = "set-cmd-text -s :open -t";
"<Ctrl-${lib.toLower key.tabL}>" = "tree-tab-promote";
"<Ctrl-${lib.toLower key.tabR}>" = "tree-tab-demote";
"co" = "tab-only --pinned keep";
# "K" = "jseval --world main if (DarkReader.isEnabled()) {DarkReader.disable()} else {DarkReader.enable()}";
};
insert = {
# quit insert mode
"<Alt-k>" = "mode-enter normal";
};
caret = {
# basic movent
"${key.left}" = "move-to-prev-char";
"${key.down}" = "move-to-next-line";
"${key.up}" = "move-to-prev-line";
"${key.right}" = "move-to-next-char";
"${key.insertMode}" = "mode-enter insert";
};
};
settings = {
tabs.tree_tabs = true;
tabs.position = "right";
tabs.pinned.shrink = false;
tabs.title.format = "{tree}{collapsed}{audio}{index}: {current_title}";
tabs.title.format_pinned = "{tree}{collapsed}{audio}{index} 🔒: {current_title}";
session.lazy_restore = true;
auto_save.session = true;
hints.chars = key.hints;
editor.command = [
"terminal"
"-e"
{
kakoune = "kak";
helix = "hx";
}
.${editor}
"{file}"
"+{line}"
];
input.insert_mode.auto_leave = false;
content.autoplay = false;
content.blocking.adblock.lists = [
"https://easylist.to/easylist/easylist.txt"
"https://easylist.to/easylist/easyprivacy.txt"
"https://easylist-downloads.adblockplus.org/easylistdutch.txt"
"https://easylist-downloads.adblockplus.org/abp-filters-anti-cv.txt"
"https://www.i-dont-care-about-cookies.eu/abp/"
"https://secure.fanboy.co.nz/fanboy-cookiemonster.txt"
];
};
extraConfig = ''
config.load_autoconfig()
config.set("content.notifications.enabled", True, "https://web.whatsapp.com")
'';
};
systemd.user.services = lib.mkIf (browser == "qutebrowser") {
qutebrowser = {
Unit = {
Description = "Qutebrowser Web client";
PartOf = [ "graphical-session.target" ];
After = [ "graphical-session.target" ];
};
Service = {
ExecStartPre = "/usr/bin/env sleep 10s";
ExecStart = "${pkgs.qutebrowser}/bin/qutebrowser";
Restart = "on-failure";
};
Install = {
WantedBy = [ "sway-session.target" ];
};
};
};
home.file = {
# For some stupid reason qutebrowser crashes if this dir does not exist
".local/share/qutebrowser/greasemonkey/.keep".text = "";
".config/qutebrowser/greasemonkey/youtube.js".text = ''
// ==UserScript==
// @name Auto Skip YouTube Ads
// @version 1.0.2
// @description Speed up and skip YouTube ads automatically
// @author codiac-killer
// @match *://*.youtube.com/*
// @exclude *://*.youtube.com/subscribe_embed?*
// ==/UserScript==
let main = new MutationObserver(() => {
// Get skip button and click it
let btn = document.getElementsByClassName("ytp-ad-skip-button ytp-button").item(0)
if (btn) {
btn.click()
}
// (unskipable ads) If skip button didn't exist / was not clicked speed up video
const ad = [...document.querySelectorAll('.ad-showing')][0];
if (ad) {
// Speed up and mute
document.querySelector('video').playbackRate = 16;
document.querySelector('video').muted = true;
}
})
main.observe(document.getElementsByClassName("video-ads ytp-ad-module").item(0), {attributes: true, characterData: true, childList: true})
'';
};
};
}