Compare commits

..

No commits in common. "6e27e32a7a496dd1a3ea311b886edcf623287e00" and "1e204760c4d73b6d153942eba5553e08d705bfdf" have entirely different histories.

10 changed files with 10867 additions and 18 deletions

File diff suppressed because it is too large Load diff

View file

@ -50,6 +50,10 @@ main() {
} }
autotype(){ autotype(){
if pgrep qutebrowser >/dev/null; then
qutebrowser ":mode-enter insert"
fi
env wtype -s 100 "$username" env wtype -s 100 "$username"
env wtype -s 100 -k tab env wtype -s 100 -k tab
env wtype -s 100 "$password" env wtype -s 100 "$password"

View file

@ -1,18 +1,13 @@
{ pkgs, lib, ... }: # Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{ config, pkgs, ... }:
{ {
services.xserver = { # Enable the X11 windowing system.
enable = true; services.xserver.enable = true;
desktopManager.gnome = { # Enable the GNOME Desktop Environment.
enable = true; services.xserver.displayManager.gdm.enable = true;
# Enable VRR (Variable Refresh Rate) services.xserver.desktopManager.gnome.enable = true;
extraGSettingsOverridePackages = with pkgs; [ gnome.mutter ];
extraGSettingsOverrides = ''
[org.gnome.mutter]
experimental-features=['variable-refresh-rate', 'scale-monitor-framebuffer']
'';
};
displayManager.gdm.enable = true;
};
# Workaround for https://github.com/NixOS/nixpkgs/issues/103746 # Workaround for https://github.com/NixOS/nixpkgs/issues/103746
systemd.services."getty@tty1".enable = false; systemd.services."getty@tty1".enable = false;
@ -28,8 +23,6 @@
package = pkgs.gnomeExtensions.gsconnect; package = pkgs.gnomeExtensions.gsconnect;
}; };
hardware.opentabletdriver.enable = lib.mkForce false;
# services.xserver.displayManager.autologin.user = "lelgenio"; # services.xserver.displayManager.autologin.user = "lelgenio";
environment.systemPackages = environment.systemPackages =
with pkgs; with pkgs;

View file

@ -49,6 +49,15 @@ lib.mkIf (pkgs.uservars.desktop == "gnome") {
}; };
xdg.defaultApplications = { xdg.defaultApplications = {
enable = lib.mkForce false; enable = true;
text-editor = "codium.desktop";
image-viewer = "org.gnome.eog.desktop";
video-player = "org.gnome.Totem.desktop";
web-browser = "firefox.desktop";
document-viewer = "org.gnome.Evince.desktop";
file-manager = "org.gnome.Nautilus.desktop";
archive-manager = "org.gnome.FileRoller.desktop;";
email-client = "thunderbird.desktop";
torrent-client = "torrent.desktop";
}; };
} }

View file

@ -19,6 +19,7 @@
./alacritty.nix ./alacritty.nix
./git.nix ./git.nix
./ssh.nix ./ssh.nix
./qutebrowser
./gpg.nix ./gpg.nix
./rofi.nix ./rofi.nix
./mpv.nix ./mpv.nix
@ -156,7 +157,13 @@
text-editor = lib.mkDefault "kak.desktop"; text-editor = lib.mkDefault "kak.desktop";
image-viewer = lib.mkDefault "pqiv.desktop"; image-viewer = lib.mkDefault "pqiv.desktop";
video-player = lib.mkDefault "mpv.desktop"; video-player = lib.mkDefault "mpv.desktop";
web-browser = lib.mkDefault "firefox.desktop"; web-browser = lib.mkDefault (
{
firefox = lib.mkDefault "firefox.desktop";
qutebrowser = lib.mkDefault "org.qutebrowser.qutebrowser.desktop";
}
.${pkgs.uservars.browser}
);
document-viewer = lib.mkDefault "org.pwmt.zathura.desktop"; document-viewer = lib.mkDefault "org.pwmt.zathura.desktop";
file-manager = lib.mkDefault "thunar.desktop"; file-manager = lib.mkDefault "thunar.desktop";
archive-manager = "engrampa.desktop"; archive-manager = "engrampa.desktop";

261
user/qutebrowser/colors.nix Normal file
View file

@ -0,0 +1,261 @@
{
config,
pkgs,
lib,
font,
...
}:
let
inherit (pkgs.uservars)
key
theme
accent
font
browser
;
inherit (theme) color;
in
{
programs.qutebrowser.settings = {
hints.border = "2px solid ${accent.color}";
content.user_stylesheets = "style.css";
colors = {
########################################################
# Tabs
########################################################
tabs =
let
tabs_defaults = {
odd = {
fg = color.txt;
bg = color.bg;
};
even = {
fg = color.txt;
bg = color.bg_dark;
};
selected = {
odd = {
fg = accent.fg;
bg = accent.color;
};
even = {
fg = accent.fg;
bg = accent.color;
};
};
};
in
{
bar = {
bg = color.bg;
};
pinned = tabs_defaults;
}
// tabs_defaults;
########################################################
# Completion for urls and commands
########################################################
completion = {
fg = color.txt;
even = {
bg = color.bg;
};
odd = {
bg = color.bg;
};
scrollbar = {
bg = color.bg_dark;
};
match = {
fg = accent.color;
};
category = {
fg = color.txt;
bg = color.bg_dark;
border = {
top = color.bg_dark;
bottom = color.bg_dark;
};
};
item = {
selected = {
fg = accent.fg;
bg = accent.color;
border = {
top = color.bg_dark;
bottom = color.bg_dark;
};
match = {
fg = color.txt;
};
};
};
};
########################################################
# Statusbar
########################################################
statusbar = {
normal = {
fg = color.txt;
bg = color.bg;
};
insert = {
fg = color.normal.green;
bg = color.bg;
};
passthrough = {
fg = color.normal.blue;
bg = color.bg;
};
command = {
fg = color.txt;
bg = color.bg;
};
caret = {
selection = {
fg = accent.fg;
bg = accent.color;
};
};
url = {
success = {
https = {
fg = color.txt;
};
http = {
fg = color.normal.red;
};
};
hover = {
fg = color.normal.cyan;
};
};
};
########################################################
# Downloads
########################################################
downloads = {
start = {
bg = color.normal.blue;
};
stop = {
bg = color.normal.green;
};
bar = {
bg = color.bg;
};
};
########################################################
# Choice of what element should be clicked
########################################################
hints = {
fg = color.txt;
bg = color.bg;
match = {
fg = accent.color;
};
};
########################################################
# List of what each keybinding does
########################################################
keyhint = {
fg = color.txt;
bg = color.bg;
suffix = {
fg = accent.color;
};
};
########################################################
# Right click menu
########################################################
contextmenu = {
menu = {
fg = color.txt;
bg = color.bg;
};
selected = {
fg = accent.fg;
bg = accent.color;
};
disabled = {
fg = color.bg_light;
};
};
########################################################
# Dark theme
########################################################
# webpage = lib.mkIf (color.type == "dark") {
# bg = color.bg;
# preferred_color_scheme = "dark";
# darkmode = {
# enabled = false;
# threshold = {
# text = 150;
# background = 205;
# };
# };
# };
};
};
home.file = {
".config/qutebrowser/style.css".text = ''
${lib.optionalString (color.type == "dark") ''
button,
input[type="button"] {
color: unset;
background-color: unset;
}
.bg-gradient-to-b,
body {
background-image: none !important;
}
/***************************
* Remove borked ellements *
***************************/
.search-filters-wrap:before, .search-filters-wrap:after {
display: none;
}
''}
/*****************
* Hide some ads *
*****************/
/*Reddit*/
#sr-header-area .redesign-beta-optin,
.link.promotedlink.promoted,
.spacer:empty,
.spacer .premium-banner-outer,
.ad-container,
/*Youtube*/
div#masthead-ad ,
.video-ads,
#player-ads,
ytd-popup-container {
display: none !important;
}
'';
};
}

View file

@ -0,0 +1,97 @@
{
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

@ -0,0 +1,159 @@
{
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})
'';
};
};
}

View file

@ -0,0 +1,35 @@
{ pkgs, ... }:
let
inherit (pkgs.uservars) font;
in
{
programs.qutebrowser.settings.fonts =
let
mkFont = name: size: "${toString size}px ${name}";
DEF_MONO = mkFont font.mono font.size.medium;
BIG_MONO = mkFont font.mono font.size.big;
DEF_INTER = mkFont font.interface font.size.medium;
BIG_INTER = mkFont font.interface font.size.big;
in
{
debug_console = BIG_INTER;
downloads = BIG_INTER;
hints = "bold " + BIG_MONO;
keyhint = BIG_INTER;
prompts = BIG_INTER;
statusbar = DEF_MONO;
completion = {
entry = BIG_INTER;
category = BIG_INTER;
};
messages = {
error = DEF_INTER;
info = DEF_INTER;
warning = DEF_INTER;
};
tabs = {
selected = BIG_INTER;
unselected = BIG_INTER;
};
};
}

View file

@ -17,6 +17,8 @@ in
wayland.windowManager.sway.config = { wayland.windowManager.sway.config = {
assigns = { assigns = {
"2" = [ "2" = [
{ class = "qutebrowser"; }
{ app_id = "qutebrowser"; }
{ class = "firefox"; } { class = "firefox"; }
{ app_id = "firefox"; } { app_id = "firefox"; }
{ class = "Chromium"; } { class = "Chromium"; }