From 3b0142cedcde39e4c2097ecd916a870a3ced5ec6 Mon Sep 17 00:00:00 2001 From: Vito Graffagnino Date: Tue, 8 Sep 2020 18:10:49 +0100 Subject: Added the relevent parts of the .config directory. Alss add ssh config --- .config/qutebrowser/Archive/alias.txt | 2 + .config/qutebrowser/Archive/search.txt | 2 + .config/qutebrowser/autoconfig.yml | 12 + .config/qutebrowser/bookmarks/urls | 272 ++ .config/qutebrowser/config.py | 1802 ++++++++++ .config/qutebrowser/jupyter-profile/autoconfig.yml | 7 + .config/qutebrowser/jupyter-profile/config.py | 1676 +++++++++ .../jupyter-profile/config/bookmarks/urls | 0 .../qutebrowser/jupyter-profile/config/quickmarks | 0 .config/qutebrowser/jupyter-profile/keys.conf | 709 ++++ .../jupyter-profile/nord-qutebrowser.py | 336 ++ .../qutebrowser/jupyter-profile/qutebrowser.conf | 1612 +++++++++ .config/qutebrowser/keys.conf | 709 ++++ .config/qutebrowser/misc/Makefile | 33 + .../qutebrowser/misc/apparmor/usr.bin.qutebrowser | 41 + .config/qutebrowser/misc/cheatsheet.svg | 3726 ++++++++++++++++++++ .config/qutebrowser/misc/qutebrowser.appdata.xml | 48 + .config/qutebrowser/misc/qutebrowser.desktop | 12 + .config/qutebrowser/misc/qutebrowser.nsi | 80 + .config/qutebrowser/misc/qutebrowser.rcc | 13 + .config/qutebrowser/misc/qutebrowser.spec | 76 + .config/qutebrowser/misc/requirements/README.md | 20 + .../requirements/requirements-check-manifest.txt | 3 + .../requirements-check-manifest.txt-raw | 1 + .../misc/requirements/requirements-codecov.txt | 9 + .../misc/requirements/requirements-codecov.txt-raw | 1 + .../misc/requirements/requirements-flake8.txt | 27 + .../misc/requirements/requirements-flake8.txt-raw | 23 + .../misc/requirements/requirements-pip.txt | 8 + .../misc/requirements/requirements-pyinstaller.txt | 7 + .../requirements/requirements-pyinstaller.txt-raw | 1 + .../requirements/requirements-pylint-master.txt | 19 + .../requirements-pylint-master.txt-raw | 11 + .../misc/requirements/requirements-pylint.txt | 19 + .../misc/requirements/requirements-pylint.txt-raw | 7 + .../misc/requirements/requirements-pyqt.txt | 4 + .../misc/requirements/requirements-pyqt.txt-raw | 1 + .../misc/requirements/requirements-pyroma.txt | 4 + .../misc/requirements/requirements-pyroma.txt-raw | 1 + .../requirements/requirements-qutebrowser.txt-raw | 7 + .../misc/requirements/requirements-tests-git.txt | 38 + .../misc/requirements/requirements-tests.txt | 42 + .../misc/requirements/requirements-tests.txt-raw | 21 + .../misc/requirements/requirements-tox.txt | 9 + .../misc/requirements/requirements-tox.txt-raw | 1 + .../misc/requirements/requirements-vulture.txt | 3 + .../misc/requirements/requirements-vulture.txt-raw | 1 + .config/qutebrowser/misc/userscripts/cast | 156 + .../qutebrowser/misc/userscripts/dmenu_qutebrowser | 48 + .config/qutebrowser/misc/userscripts/format_json | 42 + .config/qutebrowser/misc/userscripts/getbib | 69 + .config/qutebrowser/misc/userscripts/open_download | 115 + .config/qutebrowser/misc/userscripts/openfeeds | 40 + .config/qutebrowser/misc/userscripts/password_fill | 381 ++ .config/qutebrowser/misc/userscripts/qute-keepass | 261 ++ .config/qutebrowser/misc/userscripts/qute-lastpass | 172 + .config/qutebrowser/misc/userscripts/qute-pass | 207 ++ .config/qutebrowser/misc/userscripts/qutedmenu | 54 + .config/qutebrowser/misc/userscripts/readability | 41 + .config/qutebrowser/misc/userscripts/ripbang | 34 + .config/qutebrowser/misc/userscripts/rss | 122 + .config/qutebrowser/misc/userscripts/taskadd | 34 + .config/qutebrowser/misc/userscripts/tor_identity | 52 + .config/qutebrowser/misc/userscripts/view_in_mpv | 143 + .config/qutebrowser/nord-qutebrowser.py | 336 ++ .config/qutebrowser/qsettings/QtProject.conf | 8 + .config/qutebrowser/quickmarks | 1 + .config/qutebrowser/qutebrowser.conf | 1612 +++++++++ .config/qutebrowser/scripts/__init__.py | 3 + .config/qutebrowser/scripts/asciidoc2html.py | 303 ++ .config/qutebrowser/scripts/cycle-inputs.js | 46 + .config/qutebrowser/scripts/dev/Makefile-dmg | 71 + .config/qutebrowser/scripts/dev/__init__.py | 3 + .config/qutebrowser/scripts/dev/build_release.py | 419 +++ .config/qutebrowser/scripts/dev/check_coverage.py | 348 ++ .../qutebrowser/scripts/dev/check_doc_changes.py | 48 + .../qutebrowser/scripts/dev/ci/travis_backtrace.sh | 18 + .../qutebrowser/scripts/dev/ci/travis_install.sh | 108 + .config/qutebrowser/scripts/dev/ci/travis_run.sh | 32 + .config/qutebrowser/scripts/dev/cleanup.py | 69 + .../qutebrowser/scripts/dev/download_release.sh | 34 + .config/qutebrowser/scripts/dev/gen_resources.py | 26 + .config/qutebrowser/scripts/dev/gen_versioninfo.py | 85 + .../scripts/dev/get_coredumpctl_traces.py | 176 + .config/qutebrowser/scripts/dev/misc_checks.py | 163 + .../dev/pylint_checkers/qute_pylint/__init__.py | 1 + .../dev/pylint_checkers/qute_pylint/config.py | 84 + .../dev/pylint_checkers/qute_pylint/modeline.py | 63 + .../pylint_checkers/qute_pylint/openencoding.py | 83 + .../dev/pylint_checkers/qute_pylint/settrace.py | 49 + .../scripts/dev/pylint_checkers/setup.py | 25 + .../qutebrowser/scripts/dev/quit_segfault_test.sh | 14 + .../scripts/dev/recompile_requirements.py | 136 + .config/qutebrowser/scripts/dev/run_profile.py | 93 + .../qutebrowser/scripts/dev/run_pylint_on_tests.py | 79 + .config/qutebrowser/scripts/dev/run_vulture.py | 196 + .config/qutebrowser/scripts/dev/segfault_test.py | 120 + .config/qutebrowser/scripts/dev/src2asciidoc.py | 561 +++ .../scripts/dev/standardpaths_tester.py | 69 + .../qutebrowser/scripts/dev/strip_whitespace.sh | 10 + .config/qutebrowser/scripts/dev/ua_fetch.py | 122 + .config/qutebrowser/scripts/dev/update_3rdparty.py | 166 + .config/qutebrowser/scripts/dictcli.py | 283 ++ .config/qutebrowser/scripts/hist_importer.py | 174 + .config/qutebrowser/scripts/hostblock_blame.py | 55 + .config/qutebrowser/scripts/importer.py | 349 ++ .config/qutebrowser/scripts/keytester.py | 56 + .config/qutebrowser/scripts/link_pyqt.py | 233 ++ .../qutebrowser/scripts/open_url_in_instance.sh | 15 + .config/qutebrowser/scripts/setupcommon.py | 74 + .../scripts/testbrowser/cpp/webengine/main.cpp | 13 + .../testbrowser/cpp/webengine/testbrowser.pro | 6 + .../scripts/testbrowser/cpp/webkit/main.cpp | 13 + .../scripts/testbrowser/cpp/webkit/testbrowser.pro | 6 + .../scripts/testbrowser/testbrowser_webengine.py | 50 + .../scripts/testbrowser/testbrowser_webkit.py | 56 + .config/qutebrowser/scripts/utils.py | 103 + 117 files changed, 20693 insertions(+) create mode 100644 .config/qutebrowser/Archive/alias.txt create mode 100644 .config/qutebrowser/Archive/search.txt create mode 100644 .config/qutebrowser/autoconfig.yml create mode 100755 .config/qutebrowser/bookmarks/urls create mode 100644 .config/qutebrowser/config.py create mode 100644 .config/qutebrowser/jupyter-profile/autoconfig.yml create mode 100644 .config/qutebrowser/jupyter-profile/config.py create mode 100644 .config/qutebrowser/jupyter-profile/config/bookmarks/urls create mode 100644 .config/qutebrowser/jupyter-profile/config/quickmarks create mode 100755 .config/qutebrowser/jupyter-profile/keys.conf create mode 100644 .config/qutebrowser/jupyter-profile/nord-qutebrowser.py create mode 100755 .config/qutebrowser/jupyter-profile/qutebrowser.conf create mode 100755 .config/qutebrowser/keys.conf create mode 100644 .config/qutebrowser/misc/Makefile create mode 100644 .config/qutebrowser/misc/apparmor/usr.bin.qutebrowser create mode 100644 .config/qutebrowser/misc/cheatsheet.svg create mode 100644 .config/qutebrowser/misc/qutebrowser.appdata.xml create mode 100644 .config/qutebrowser/misc/qutebrowser.desktop create mode 100644 .config/qutebrowser/misc/qutebrowser.nsi create mode 100644 .config/qutebrowser/misc/qutebrowser.rcc create mode 100644 .config/qutebrowser/misc/qutebrowser.spec create mode 100644 .config/qutebrowser/misc/requirements/README.md create mode 100644 .config/qutebrowser/misc/requirements/requirements-check-manifest.txt create mode 100644 .config/qutebrowser/misc/requirements/requirements-check-manifest.txt-raw create mode 100644 .config/qutebrowser/misc/requirements/requirements-codecov.txt create mode 100644 .config/qutebrowser/misc/requirements/requirements-codecov.txt-raw create mode 100644 .config/qutebrowser/misc/requirements/requirements-flake8.txt create mode 100644 .config/qutebrowser/misc/requirements/requirements-flake8.txt-raw create mode 100644 .config/qutebrowser/misc/requirements/requirements-pip.txt create mode 100644 .config/qutebrowser/misc/requirements/requirements-pyinstaller.txt create mode 100644 .config/qutebrowser/misc/requirements/requirements-pyinstaller.txt-raw create mode 100644 .config/qutebrowser/misc/requirements/requirements-pylint-master.txt create mode 100644 .config/qutebrowser/misc/requirements/requirements-pylint-master.txt-raw create mode 100644 .config/qutebrowser/misc/requirements/requirements-pylint.txt create mode 100644 .config/qutebrowser/misc/requirements/requirements-pylint.txt-raw create mode 100644 .config/qutebrowser/misc/requirements/requirements-pyqt.txt create mode 100644 .config/qutebrowser/misc/requirements/requirements-pyqt.txt-raw create mode 100644 .config/qutebrowser/misc/requirements/requirements-pyroma.txt create mode 100644 .config/qutebrowser/misc/requirements/requirements-pyroma.txt-raw create mode 100644 .config/qutebrowser/misc/requirements/requirements-qutebrowser.txt-raw create mode 100644 .config/qutebrowser/misc/requirements/requirements-tests-git.txt create mode 100644 .config/qutebrowser/misc/requirements/requirements-tests.txt create mode 100644 .config/qutebrowser/misc/requirements/requirements-tests.txt-raw create mode 100644 .config/qutebrowser/misc/requirements/requirements-tox.txt create mode 100644 .config/qutebrowser/misc/requirements/requirements-tox.txt-raw create mode 100644 .config/qutebrowser/misc/requirements/requirements-vulture.txt create mode 100644 .config/qutebrowser/misc/requirements/requirements-vulture.txt-raw create mode 100755 .config/qutebrowser/misc/userscripts/cast create mode 100755 .config/qutebrowser/misc/userscripts/dmenu_qutebrowser create mode 100755 .config/qutebrowser/misc/userscripts/format_json create mode 100755 .config/qutebrowser/misc/userscripts/getbib create mode 100755 .config/qutebrowser/misc/userscripts/open_download create mode 100755 .config/qutebrowser/misc/userscripts/openfeeds create mode 100755 .config/qutebrowser/misc/userscripts/password_fill create mode 100755 .config/qutebrowser/misc/userscripts/qute-keepass create mode 100755 .config/qutebrowser/misc/userscripts/qute-lastpass create mode 100755 .config/qutebrowser/misc/userscripts/qute-pass create mode 100755 .config/qutebrowser/misc/userscripts/qutedmenu create mode 100755 .config/qutebrowser/misc/userscripts/readability create mode 100755 .config/qutebrowser/misc/userscripts/ripbang create mode 100755 .config/qutebrowser/misc/userscripts/rss create mode 100755 .config/qutebrowser/misc/userscripts/taskadd create mode 100755 .config/qutebrowser/misc/userscripts/tor_identity create mode 100755 .config/qutebrowser/misc/userscripts/view_in_mpv create mode 100644 .config/qutebrowser/nord-qutebrowser.py create mode 100644 .config/qutebrowser/qsettings/QtProject.conf create mode 100755 .config/qutebrowser/quickmarks create mode 100755 .config/qutebrowser/qutebrowser.conf create mode 100755 .config/qutebrowser/scripts/__init__.py create mode 100755 .config/qutebrowser/scripts/asciidoc2html.py create mode 100644 .config/qutebrowser/scripts/cycle-inputs.js create mode 100644 .config/qutebrowser/scripts/dev/Makefile-dmg create mode 100644 .config/qutebrowser/scripts/dev/__init__.py create mode 100755 .config/qutebrowser/scripts/dev/build_release.py create mode 100644 .config/qutebrowser/scripts/dev/check_coverage.py create mode 100755 .config/qutebrowser/scripts/dev/check_doc_changes.py create mode 100644 .config/qutebrowser/scripts/dev/ci/travis_backtrace.sh create mode 100644 .config/qutebrowser/scripts/dev/ci/travis_install.sh create mode 100644 .config/qutebrowser/scripts/dev/ci/travis_run.sh create mode 100755 .config/qutebrowser/scripts/dev/cleanup.py create mode 100644 .config/qutebrowser/scripts/dev/download_release.sh create mode 100644 .config/qutebrowser/scripts/dev/gen_resources.py create mode 100644 .config/qutebrowser/scripts/dev/gen_versioninfo.py create mode 100644 .config/qutebrowser/scripts/dev/get_coredumpctl_traces.py create mode 100644 .config/qutebrowser/scripts/dev/misc_checks.py create mode 100644 .config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/__init__.py create mode 100644 .config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/config.py create mode 100644 .config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/modeline.py create mode 100644 .config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/openencoding.py create mode 100644 .config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/settrace.py create mode 100644 .config/qutebrowser/scripts/dev/pylint_checkers/setup.py create mode 100755 .config/qutebrowser/scripts/dev/quit_segfault_test.sh create mode 100644 .config/qutebrowser/scripts/dev/recompile_requirements.py create mode 100755 .config/qutebrowser/scripts/dev/run_profile.py create mode 100644 .config/qutebrowser/scripts/dev/run_pylint_on_tests.py create mode 100755 .config/qutebrowser/scripts/dev/run_vulture.py create mode 100755 .config/qutebrowser/scripts/dev/segfault_test.py create mode 100755 .config/qutebrowser/scripts/dev/src2asciidoc.py create mode 100644 .config/qutebrowser/scripts/dev/standardpaths_tester.py create mode 100644 .config/qutebrowser/scripts/dev/strip_whitespace.sh create mode 100755 .config/qutebrowser/scripts/dev/ua_fetch.py create mode 100755 .config/qutebrowser/scripts/dev/update_3rdparty.py create mode 100755 .config/qutebrowser/scripts/dictcli.py create mode 100755 .config/qutebrowser/scripts/hist_importer.py create mode 100755 .config/qutebrowser/scripts/hostblock_blame.py create mode 100755 .config/qutebrowser/scripts/importer.py create mode 100755 .config/qutebrowser/scripts/keytester.py create mode 100755 .config/qutebrowser/scripts/link_pyqt.py create mode 100755 .config/qutebrowser/scripts/open_url_in_instance.sh create mode 100755 .config/qutebrowser/scripts/setupcommon.py create mode 100644 .config/qutebrowser/scripts/testbrowser/cpp/webengine/main.cpp create mode 100644 .config/qutebrowser/scripts/testbrowser/cpp/webengine/testbrowser.pro create mode 100644 .config/qutebrowser/scripts/testbrowser/cpp/webkit/main.cpp create mode 100644 .config/qutebrowser/scripts/testbrowser/cpp/webkit/testbrowser.pro create mode 100755 .config/qutebrowser/scripts/testbrowser/testbrowser_webengine.py create mode 100755 .config/qutebrowser/scripts/testbrowser/testbrowser_webkit.py create mode 100755 .config/qutebrowser/scripts/utils.py (limited to '.config/qutebrowser') diff --git a/.config/qutebrowser/Archive/alias.txt b/.config/qutebrowser/Archive/alias.txt new file mode 100644 index 0000000..a768263 --- /dev/null +++ b/.config/qutebrowser/Archive/alias.txt @@ -0,0 +1,2 @@ + c.aliases = { 'w': 'session-save', 'q': 'quit', 'wq': 'quit --save', 'qtb': 'open https://www.qutebrowser.org/', 'mbt': 'open t https://signin1.bt.com/login/emailloginform', 'Ombt': 'open -t https://signin1.bt.com/login/emailloginform', 'nx': 'open http://next-episode.net/', 'Onx': 'open -t http://next-episode.net/', 'gk': 'open https://gameknot.com/', 'Ogk': 'open -t https://gameknot.com/', 'yt': 'open https://youtube.com', 'Oyt': 'open -t https://youtube.com', 'Y': 'open http://www.cosmos.esa.int/web/xmm-newton/current-calibration-files', 'OY': 'open -t http://www.cosmos.esa.int/web/xmm-newton/current-calibration-files', '1337': 'open https://1337x.to/home', 'O1337': 'open -t https://1337x.to/home', 'ez': 'open https://eztv.ag', 'Oez': 'open -t https://eztv.ag', 'tz': 'open https://extratorrent.ag', 'Otz': 'open -t https://extratorrent.ag', 'tpb': 'open https://thepiratebay.org/', 'Otpb': 'open -t https://thepiratebay.org/', 'Nm': 'open https://netmail.herts.ac.uk/', 'ONm': 'open -t https://netmail.herts.ac.uk/' } + diff --git a/.config/qutebrowser/Archive/search.txt b/.config/qutebrowser/Archive/search.txt new file mode 100644 index 0000000..e91a46c --- /dev/null +++ b/.config/qutebrowser/Archive/search.txt @@ -0,0 +1,2 @@ + c.url.searchengines = { 'DEFAULT': 'https://duckduckgo.com/?q={}', 'aw': 'https://wiki.archlinux.org/?q={}', 'g': 'https://www.google.com/?q={}' } + diff --git a/.config/qutebrowser/autoconfig.yml b/.config/qutebrowser/autoconfig.yml new file mode 100644 index 0000000..b2419ef --- /dev/null +++ b/.config/qutebrowser/autoconfig.yml @@ -0,0 +1,12 @@ +# If a config.py file exists, this file is ignored unless it's explicitly loaded +# via config.load_autoconfig(). For more information, see: +# https://github.com/qutebrowser/qutebrowser/blob/master/doc/help/configuring.asciidoc#loading-autoconfigyml +# DO NOT edit this file by hand, qutebrowser will overwrite it. +# Instead, create a config.py - see :help for details. + +config_version: 2 +settings: + content.javascript.enabled: + '*://*.next-episode.net/*': false + content.notifications: + https://1337x.to: false diff --git a/.config/qutebrowser/bookmarks/urls b/.config/qutebrowser/bookmarks/urls new file mode 100755 index 0000000..1d2c584 --- /dev/null +++ b/.config/qutebrowser/bookmarks/urls @@ -0,0 +1,272 @@ +https://www.ifixit.com/Guide/HP+TouchPad+Battery+Replacement/6082 HP TouchPad Battery Replacement - iFixit +http://opensecuritytraining.info/LifeOfBinaries.html LifeOfBinaries +http://stackoverflow.com/questions/20027990/how-can-i-get-text-section-from-pe-file-using-pefile python - How can I get .text section from PE file using pefile - Stack Overflow +http://what-when-how.com/windows-forensic-analysis/executable-file-analysis-windows-forensic-analysis-part-2/ Executable File Analysis (Windows Forensic Analysis) Part 2 +http://stackoverflow.com/questions/2363483/python-slicing-a-very-large-binary-file Python: slicing a very large binary file - Stack Overflow +http://stackoverflow.com/questions/39312720/python-extract-text-from-struct-or-binary-file Python extract text from Struct, or binary file - Stack Overflow +https://www.poftut.com/use-linux-xxd-command-tutorial-hex-binary-operations-example/ How To Use Linux Xxd Command Tutorial For Hex and Binary Operations With Example? - Poftut +http://stackoverflow.com/questions/28627349/offset-when-reading-binary-file-in-python binaryfiles - Offset when reading binary file in python - Stack Overflow +http://stackoverflow.com/questions/18954596/python-reading-binary-file-with-offsets-and-structs Python - Reading binary file with offsets and structs - Stack Overflow +http://stackoverflow.com/questions/3299213/python-how-can-i-open-a-file-and-specify-the-offset-in-bytes Python - How can I open a file and specify the offset in bytes? - Stack Overflow +http://stackoverflow.com/questions/35883044/python-2-7-11-how-to-read-big-binary-file-from-at-hex-offset Python 2.7.11: How to read (big) binary file from/at hex offset - Stack Overflow +qute://help/commands.html#unbind Commands +https://askubuntu.com/questions/534187/where-is-the-login-screen-wallpaper-for-gdm-stored 14.04 - Where is the login screen wallpaper for GDM stored? - Ask Ubuntu +file://${HOME}/Documents/Personal/bookmarks.html Bookmarks +https://heasarc.gsfc.nasa.gov/ HEASARC: NASA's Archive of Data on Energetic Phenomena +https://netmail.herts.ac.uk/ecp/?rfr=owa&owaparam=modurl%3D0&p=organize/AutomaticReplies.slab automatic replies - Outlook Web App +http://localhost:8889/notebooks/Sandbox/Python/Untitled.ipynb# Untitled +https://ctftime.org/ CTFtime.org / All about CTF (Capture The Flag) +http://overthewire.org/wargames/ OverTheWire: Wargames +https://stackoverflow.com/questions/38580647/how-to-create-a-directory-search-and-replace-with-vimscript-and-fzf vim - How to create a directory search and replace with vimscript and fzf - Stack Overflow +https://superuser.com/questions/1314397/how-to-search-file-contents-grep-ag-rg-using-fzf How to search file *contents* (grep/ag/rg) using FZF? - Super User +https://news.ycombinator.com/item?id=15514589 FZF and RipGrep – Navigate with bash faster than ever before | Hacker News +https://vi.stackexchange.com/questions/14242/how-to-call-the-fzf-ag-command-with-multiple-arguments/14246 vimscript - How to call the fzf Ag command with multiple arguments? - Vi and Vim Stack Exchange +http://eradman.com/entrproject/ entr(1) +http://harmful.cat-v.org/software/ All software sucks +https://suckless.org/rocks/ Stuff that rocks | suckless.org software that sucks less +https://github.com/ranger/ranger/wiki/Official-user-guide Official user guide · ranger/ranger Wiki +https://turses.readthedocs.io/en/latest/user/configuration.html Configuration — turses 0.3.1 documentation +http://vimdoc.sourceforge.net/htmldoc/message.html Vim documentation: message +http://stevelosh.com/blog/2012/10/the-homely-mutt/ The Homely Mutt / Steve Losh +http://www.mutt.org/doc/manual/#sidebar The Mutt E-Mail Client +http://www.samlogic.net/articles/smtp-commands-reference.htm SMTP Commands Reference (covers HELO/EHLO, MAIL, RCPT, DATA, RSET, VRFY, AUTH, STARTTLS etc) +https://medium.com/@insecurity_92477/ssh-shenanigans-the-good-the-bad-and-the-evil-16945ca72596 SSH Shenanigans — The good, the bad, and the evil – PROJECT INSECURITY – Medium +https://dzone.com/articles/ssh-from-the-ground-up SSH From the Ground Up - DZone Performance +http://flask.pocoo.org/ Welcome | Flask (A Python Microframework) +https://netmail.herts.ac.uk/owa/#path=/mail Graffagnino, Vito - Outlook Web App +http://www.therandymon.com/woodnotes/mutt/node24.html Configuring Mutt +http://www.therandymon.com/woodnotes/mutt/using-mutt.html The Woodnotes Guide to the Mutt Email Client +http://www.grameen-info.org/windows-7-professional-product-key-free-for-you/ Windows 7 Professional Product Key Free | Grameen Bank - Bank For The Poor +https://www.itechgyan.com/windows-7-professional-product-key-32-64-bit/ Windows 7 Professional Product Key for 32/64- bit - iTechGyan.com +https://www.thewindowsclub.com/disable-auto-activation-feature-windows-7-8 Disable Automatic Windows Activation popup in Windows 10/8/7 +https://dotfiles.github.io/ GitHub does dotfiles - dotfiles.github.io +https://developer.atlassian.com/blog/2016/02/best-way-to-store-dotfiles-git-bare-repo/ The best way to store your dotfiles: A bare Git repository - Atlassian Developers +https://stackoverflow.com/questions/49658760/convert-json-format-file-to-tsv-using-python convert json format file to tsv using python - Stack Overflow +https://gitlab.com/dwt1/dotfiles/blob/master/.config/vifm/vifmrc .config/vifm/vifmrc · master · Derek Taylor / dotfiles · GitLab +https://guides.fixato.org/weechat/ FiXato's Guide to WeeChat +https://www.linode.com/docs/applications/messaging/using-weechat-for-irc/ Using WeeChat for Internet Relay Chat +https://hugo.md/post/the-perfect-weechat-setup-2/ The Perfect Weechat Setup · Hugo's Blog +https://weechat.org/files/doc/devel/weechat_faq.en.html#irc_ssl_connection WeeChat FAQ (Frequently Asked Questions) +https://forum.xda-developers.com/hp-touchpad/help/how-to-install-android-7-x-hp-touchpad-t3512182/post69927244#post69927244 [ROM GUIDE] How to Install Android 9.x/8.1.x… | HP TouchPad +https://kevin.deldycke.com/2012/08/gmail-backup-mbsync/ Keep a Local Backup of Gmail Thanks to Mbsync | Kevin Deldycke +https://forum.xda-developers.com/showpost.php?p=52922166&postcount=64 [TOOLS] Touchpad Toolbox (updated 2015-02-25) - Post #64 +https://forum.xda-developers.com/hp-touchpad/help/guide-video-how-to-bypass-webos-t3636750 [Guide+Video]How to bypass WebOS activation … | HP TouchPad +https://forum.xda-developers.com/hp-touchpad/development/luneos-webos-ports-t2851450 LuneOS (webOS Ports) | HP TouchPad +https://forum.xda-developers.com/showthread.php?t=1426244 [Guide] Factory condition restoration / Down… | HP TouchPad +https://haveibeenpwned.com/ Have I Been Pwned: Check if your email has been compromised in a data breach +https://forum.xda-developers.com/showthread.php?t=2761381 DebiAndroid [WIP] - Debian native/chroot for… | HP TouchPad +https://indico.ict.inaf.it/event/720/ X-RAY ASTRONOMY 2019 (8-13 September 2019) · INDICO @ INAF (Indico) +https://docs.google.com/forms/d/e/1FAIpQLSf388FvDduVVNT0lLpSz0KrvGjlfuALvv6jnoLBen4bEh26TQ/viewform Chandra/CIAO Workshop, Bologna, Italy, 2019 +https://www.manualslib.com/download/880661/Bmw-318i.html Download BMW 318i Owner's Handbook Manual +https://complaint.resolver.co.uk/#/dashboard Resolver +https://www.moneysavingexpert.com/reclaim/ppi-loan-insurance/#resolver Reclaim PPI for Free: How to claim £1000s - MoneySavingExpert +https://eztv.io/ EZTV - TV Torrents Online Series Download | Official +https://miloserdov.org/?p=1088 Fast and simple method to bypass Captive Portal (hotspot with authorization on the web-interface) - Ethical hacking and penetration testing +https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/img/cheatsheet-big.png cheatsheet-big.png (3342×2060) +https://jdhao.github.io/2018/12/24/centos_nvim_install_use_guide_en/ A Complete Guide for Installing and Setting up Neovim for Python Development - jdhao's blog +https://stackoverflow.com/questions/54429210/how-do-i-prevent-conda-from-activating-the-base-environment-by-default bash - How do I prevent Conda from activating the base environment by default? - Stack Overflow +https://stackoverflow.com/questions/32611932/how-can-i-switch-using-pip-between-system-and-anaconda python - How can I switch using pip between system and anaconda - Stack Overflow +http://docs.plasmapy.org/en/latest/auto_examples/plot_dispersion_function.html#sphx-glr-download-auto-examples-plot-dispersion-function-py The plasma dispersion function — PlasmaPy 0.2.0 documentation +http://docs.plasmapy.org/en/latest/development/install_dev.html#setting-up-an-environment-for-development Installing PlasmaPy for Development — PlasmaPy 0.2.0 documentation +https://linuxhint.com/arch-linux-docker-tutorial/ Arch Linux Docker Tutorial – Linux Hint +https://stackoverflow.com/questions/45692255/how-make-openvpn-work-with-docker debian - How make openvpn work with docker - Stack Overflow +https://wiki.archlinux.org/index.php/Docker Docker - ArchWiki +https://linuxhint.com/docker_arch_linux/ How to Use Docker on Arch Linux – Linux Hint +https://docs.docker.com/get-started/ Orientation and setup | Docker Documentation +https://news.ycombinator.com/item?id=11071754 I use: git init --bare $HOME/.myconf alias config='/usr/bin/git --git-d... | Hacker News +https://www.atlassian.com/git/tutorials/dotfiles How to store dotfiles | Atlassian Git Tutorial +https://www.cgsecurity.org/wiki/Advanced_Find_ext2_ext3_Backup_SuperBlock Advanced Find ext2 ext3 Backup SuperBlock - CGSecurity +http://stevelosh.com/blog/2012/10/the-homely-mutt/#installing-offlineimap The Homely Mutt / Steve Losh +https://wiki.archlinux.org/index.php/Isync isync - ArchWiki +https://forums.webosnation.com/hp-veer/313841-webos-2-2-4-doctor-veer-t-wr-13.html webOS 2.2.4 Doctor for Veer for AT&T or WR - Page 13 - webOS Nation Forums +https://www.webos-internals.org/ WebOS Internals +http://android-dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images#Unpacking.2C_Editing.2C_and_Re-Packing_the_images HOWTO: Unpack, Edit, and Re-Pack Boot Images - Android Wiki +https://github.com/webos-internals/meta-doctor/blob/master/scripts/meta-att-touchpad-3.0.4 meta-doctor/meta-att-touchpad-3.0.4 at master · webos-internals/meta-doctor · GitHub +https://www.webos-internals.org/wiki/WebOS_Doctor_Versions WebOS Doctor Versions - WebOS Internals +https://bostonenginerd.com/posts/notmuch-of-a-mail-setup-part-1-mbsync-msmtp-and-systemd/ Notmuch of a mail setup Part 1- mbsync, msmtp and systemd | Assorted Nerdery +https://blog.jpalardy.com/posts/my-best-awk-tricks/ My Best Awk Tricks | Jonathan Palardy's Blog +https://weechat.org/files/doc/devel/weechat_user.en.html#buffers_and_windows WeeChat user’s guide +https://www.irchelp.org/faq/irctutorial.html IRCHelp.org — An IRC Tutorial +http://learn.astropy.org/ Learn Astropy — astropy-tutorials v3.0.dev +https://unix.stackexchange.com/questions/315063/mount-wrong-fs-type-bad-option-bad-superblock ubuntu - mount: wrong fs type, bad option, bad superblock - Unix & Linux Stack Exchange +https://ubuntuforums.org/showthread.php?t=839579 [ubuntu] mount: wrong fs type, bad option, bad superblock on /dev/sdb1 +https://ubuntuforums.org/showthread.php?t=1245536&p=7822694#post7822694 [SOLVED] How to recover from a bad superblock +https://www.cyberciti.biz/tips/surviving-a-linux-filesystem-failures.html Surviving a Linux Filesystem Failures - nixCraft +https://major.io/2010/12/14/mounting-a-raw-partition-file-made-with-dd-or-dd_rescue-in-linux/ Mounting a raw partition file made with dd or dd_rescue in Linux :: major.io +http://www.garloff.de/kurt/linux/ddrescue/ dd_rescue +https://jcutrer.com/howto/how-to-install-youtube-dl-the-easy-way How to install youtube-dl (the easy way) - jcutrer.com +https://www.howtogeek.com/261591/how-to-create-and-run-bash-shell-scripts-on-windows-10/ How to Create and Run Bash Shell Scripts on Windows 10 +https://www.how2shout.com/how-to/install-youtube-dl-linux-macos.html How to install Youtube-dl on Linux and MacOS | H2S Media +https://overthewire.org/wargames/ OverTheWire: Wargames +https://wiki.webos-internals.org/wiki/Application:Navit Application:Navit - WebOS Internals +https://www.linux.com/tutorials/how-fix-mangled-partition-table-linux/ How to Fix a Mangled Partition Table on Linux - Linux.com +http://pragmaticemacs.com/emacs/migrating-from-offlineimap-to-mbsync-for-mu4e/ Migrating from offlineimap to mbsync for mu4e | Pragmatic Emacs +https://emacs-fu.blogspot.com/2012/08/introducing-mu4e-for-email.html emacs-fu: introducing mu4e, an e-mail client for emacs +http://cachestocaches.com/2017/3/complete-guide-email-emacs-using-mu-and-/ A Complete Guide to Email in Emacs using Mu and Mu4e +https://www.emacswiki.org/emacs/mu4e EmacsWiki: mu4e +https://pertuttirestaurant.co.uk/?utm_source=tripadvisor&utm_medium=referral Per Tutti Restaurant | Authentically Italian +https://www.tripadvisor.co.uk/Restaurant_Review-g186306-d732621-Reviews-La_Cosa_Nostra-St_Albans_Hertfordshire_England.html LA COSA NOSTRA, St Albans - Updated 2020 Restaurant Reviews, Photos & Phone Number - Tripadvisor +http://barmeze.co.uk/booking-confirmation.html Bar Meze - St Albans | Reservation confirmation +https://www.tripadvisor.co.uk/Restaurant_Review-g186306-d1742312-Reviews-L_Italiana-St_Albans_Hertfordshire_England.html L'ITALIANA, St Albans - Updated 2020 Restaurant Reviews, Menu & Prices - Tripadvisor +https://www.tripadvisor.co.uk/Restaurant_Review-g186306-d9990284-Reviews-Per_Tutti_St_Albans-St_Albans_Hertfordshire_England.html PER TUTTI ST ALBANS - Updated 2020 Restaurant Reviews, Menu & Prices - Tripadvisor +https://www.tripadvisor.co.uk/Restaurant_Review-g186306-d2318820-Reviews-Alloro-St_Albans_Hertfordshire_England.html ALLORO, St Albans - Updated 2020 Restaurant Reviews, Menu, Prices & Restaurant Reviews - Food Delivery & Takeaway - Tripadvisor +https://pertuttirestaurant.co.uk/book-berkhamsted/ BOOK BERKHAMSTED | Per Tutti Restaurant +https://www.tripadvisor.co.uk/Restaurant_Review-g186306-d11885339-Reviews-Carmelo_s-St_Albans_Hertfordshire_England.html CARMELO'S, St Albans - Updated 2020 Restaurant Reviews, Menu & Prices - Tripadvisor +https://dystroy.org/broot/ Broot +http://www.ss.ncu.edu.tw/~lyu/lecture_files_en/index.html lyu_lecture_ch +http://silas.psfc.mit.edu/introplasma/index.html Introduction to Plasma Physics +https://www.plasma-universe.com/ The Plasma Universe +http://farside.ph.utexas.edu/teaching/plasma/lectures/Plasmahtml.html Plasmahtml +https://spacephysics.ucla.edu/index.html UCLA IGPP Space Physics Exercises +https://www.slickremix.com/docs/get-api-key-for-youtube/# Get API Key for YouTube | SlickRemix +https://courses.edx.org/courses/course-v1:EPFLx+PlasmaIntroductionX+1T_2018/course/ Course | PlasmaIntroductionX | edX +https://www.justpark.com/dashboard/bookings/made/ Bookings | JustPark +https://homepages.spa.umn.edu/~kd/Ast4001-2015/NOTES/n052-saha-bradt.pdf +http://www.astro.wisc.edu/~townsend/resource/teaching/astro-310-F09/solutions-2009-10-05.pdf +http://www.astro.wisc.edu/~townsend/resource/teaching/astro-310-F11/solutions-2011-10-14.pdf +https://people.physics.tamu.edu/belyanin/astr314/lecture8.pdf +http://www.astro.umd.edu/~miller/teaching/astr601/lecture08.pdf +http://www.astro.caltech.edu/~jlc/ay123_2007/save_sol3_2007.pdf +https://leanpub.com/the-tao-of-tmux/read Read The Tao of tmux | Leanpub +https://www.datacamp.com/community/tutorials/tutorial-jupyter-notebook (Tutorial) Jupyter Notebook: The Definitive Guide - DataCamp +https://github.com/jakevdp/PythonDataScienceHandbook GitHub - jakevdp/PythonDataScienceHandbook: Python Data Science Handbook: full text in Jupyter Notebooks +https://jakevdp.github.io/PythonDataScienceHandbook/ Python Data Science Handbook | Python Data Science Handbook +https://irkernel.github.io/installation/#binary-panel Installation · IRkernel +https://nbviewer.jupyter.org/github/jrjohansson/scientific-python-lectures/blob/master/Lecture-4-Matplotlib.ipynb Jupyter Notebook Viewer +https://4dcombat.thinkific.com/courses/4dcombat-online 4D Combat - Online Course +https://www.linode.com/docs/applications/messaging/using-weechat-for-irc/# Using WeeChat for Internet Relay Chat | Linode +https://realpython.com/courses/functional-programming-python/ Functional Programming in Python – Real Python +https://realpython.com/courses/how-to-publish-your-own-python-package-pypi/ How to Publish Your Own Python Package to PyPI – Real Python +https://realpython.com/courses/traditional-face-detection-python/ Traditional Face Detection With Python – Real Python +https://realpython.com/courses/cool-new-features-python-38/ Cool New Features in Python 3.8 – Real Python +https://realpython.com/account/purchases/ Your Purchases – Real Python +https://weechat.org/files/doc/stable/weechat_user.en.html#usage WeeChat user’s guide +https://weechat.org/scripts/ WeeChat :: scripts +https://github.com/GermainZ/weechat-vimode GitHub - GermainZ/weechat-vimode: A WeeChat script that adds vi-like modes, commands and keybindings. +https://github.com/wee-slack/wee-slack GitHub - wee-slack/wee-slack: A WeeChat plugin for Slack.com. Supports threads and reactions, synchronizes read markers, provides typing notification, etc.. +http://nemrod.se/guides/install-rpm-packages-on-arch-linux/ Install RPM packages on Arch Linux | nemrod.se +https://github.com/jupyter/jupyter/wiki/Jupyter-kernels Jupyter kernels · jupyter/jupyter Wiki · GitHub +https://www.docker.com/get-started Get Started with Docker | Docker +https://neovim.io/doc/user/nvim_terminal_emulator.html Nvim documentation: nvim_terminal_emulator +https://neovim.io/doc/user/ Nvim documentation: help +https://github.com/seebye/ueberzug GitHub - seebye/ueberzug: ueberzug is an alternative for w3mimgdisplay +https://github.com/seebye/fmui GitHub - seebye/fmui: fzf mpd user interface +https://hertfordshire.voxcharta.org/?s=aurora Search results for 'aurora' (page 1 of 6)Vox Charta +https://casa.nrao.edu/casa_obtaining.shtml CASA +https://ads.readthedocs.io/en/latest/ The ads Python package — ads 0.12.2 documentation +https://ui.adsabs.harvard.edu/ NASA/ADS +https://wiki.vifm.info/index.php?title=Quickstart_Tutorial Quickstart Tutorial - Vifm Wiki +https://arxiv.org/help/api/index arXiv API | arXiv e-print repository +https://github.com/junegunn/fzf/wiki/examples#search-for-academic-pdfs-by-author-title-journal-institution Examples · junegunn/fzf Wiki +https://www.reddit.com/r/neovim/comments/fu1omj/help_request_getting_deoplete_and_ultisnips_to/ [Help request] Getting deoplete and ultisnips to share completion key. : neovim +https://github.com/junegunn/fzf#preview-window junegunn/fzf: A command-line fuzzy finder +https://blog.thegate.ai/posts/20191113_configuring-neomutt-for-a-local-email-setup/ TheGate.AI | Blog | Creating a local email setup with mbsync + msmtp + neomutt + notmuch. +https://bostonenginerd.com/posts/notmuch-of-a-mail-setup-part-2-notmuch-and-emacs/ Notmuch of mail a setup Part 2 - notmuch and Emacs | Assorted Nerdery +https://notmuchmail.org/mutttips/ mutttips +http://isync.sourceforge.net/ isync: free IMAP and MailDir mailbox synchronizer +https://notmuchmail.org/howto/ howto +https://neomutt.org/feature/notmuch Notmuch - NeoMutt +https://wiki.archlinux.org/index.php/Notmuch Notmuch - ArchWiki +https://guides.nyu.edu/c.php?g=601858&p=4168138 Templates - Getting Started with LaTeX - Research Guides at New York University +https://www.latex-tutorial.com/tutorials/bibtex/ Bibliography in LaTeX with Bibtex/Biblatex +https://www.math.ias.edu/computing/faq/local-latex-style-files Where can I put local latex style files and packages? | IAS School of Mathematics +https://en.wikibooks.org/wiki/LaTeX/Installing_Extra_Packages LaTeX/Installing Extra Packages - Wikibooks, open books for an open world +https://github.com/adsabs/adsabs-dev-api/blob/master/Search_API.ipynb adsabs-dev-api/Search_API.ipynb at master · adsabs/adsabs-dev-api +https://github.com/bibcure/bibcure bibcure/bibcure: Bibcure helps in boring tasks by keeping your bibfile up to date and normalized...also allows you to easily download all papers inside your bibtex +https://arxiv.org/help/api/index#using arXiv API | arXiv e-print repository +https://github.com/junegunn/fzf/wiki/examples#buku Examples · junegunn/fzf Wiki +https://pandoc.org/getting-started.html Pandoc - Getting started with pandoc +https://tmuxcheatsheet.com/ Tmux Cheat Sheet & Quick Reference +https://stackoverflow.com/questions/1550226/python-setup-py-uninstall python setup.py uninstall - Stack Overflow +https://notmuchmail.org/initial_tagging/ initial tagging +https://neomutt.org/guide/configuration.html#mbox-hook Configuration - NeoMutt +http://jazz-the-two-of-us.blogspot.com/ The Sound of Jazz : Download Jazz MP3 Album +http://cazadam.blogspot.com/p/blog-page.html CazAdam: Albums +https://listen-jazz-easily.blogspot.com/2009/01/charlie-parker-very-best.html#links Listen Jazz Easily : Download Jazz Album on Blogspot: Charlie Parker - The Very Best +https://catonmat.net/linux-and-vim-notes My Linux and Vim Notes +https://bestlifeonline.com/hilariously-silly-jokes/ 40 Hilarious Jokes You Can Tell Absolutely Anyone - Silly Jokes +https://null-byte.wonderhowto.com/ Null Byte — The aspiring white-hat hacker/security awareness playground « Null Byte :: WonderHowTo +https://www.alfashop.co.uk/ Home | AlfaShop +https://www.alfashop.co.uk/products/search?utf8=%E2%9C%93&f_search=manual&button= https://www.alfashop.co.uk/products/search?utf8=✓&f_search=manual&button= +https://www.aroc-uk.com/159-register/gallery 159 Register Gallery | Alfa Romeo Owners Club +http://www.ausalfa.com/viewtopic.php?f=4&t=9411#p157448 ausalfa.com • View topic - Installation of after-market head unit into 159/Brera/Spider +https://www.alfaowner.com/threads/head-unit-stereo-upgrade-instructions.931370/ Head Unit / stereo Upgrade Instructions | Alfa Romeo Forum +https://ntmlabs.com/w3m-tricks/ NTM Labs - W3M tricks of the trade +https://github.com/felipesaa/A-vim-like-firefox-like-configuration-for-w3m/blob/master/documentation/functions.txt A-vim-like-firefox-like-configuration-for-w3m/functions.txt at master · felipesaa/A-vim-like-firefox-like-configuration-for-w3m +https://shells.red-pill.eu/ Free Shell Accounts :: the biggest list on the net - Rankings - All Sites +https://sdf.org/ SDF Public Access UNIX System - Free Shell Account and Shell Access +http://www.nyx.net/ Nyx +https://www.chrisatmachine.com/ Christian Chiarulli +https://www.manualslib.com/manual/628233/Alfa-Romeo-159.html ALFA ROMEO 159 OWNER'S MANUAL Pdf Download. +https://www.howtogeek.com/358166/using-android-without-google-a-kind-of-guide/ Using Android without Google: A (Kind of) Guide +https://android.stackexchange.com/questions/91628/how-to-remove-all-google-specific-apps-from-a-rooted-android applications - How to remove all Google-specific apps from a rooted Android? - Android Enthusiasts Stack Exchange +https://www.ducksters.com/jokes/silly.php Jokes for kids: big list of clean silly jokes +https://www.vpscheap.net/pricing.aspx Unmetered SSD and Budget VPS Hosting | VPSCheap.NET +https://www.thinkmoney.co.uk/credit-card/ Credit Cards UK | Apply for a Credit Card Online +https://tablesgenerator.com/ Create LaTeX tables online – TablesGenerator.com +http://detexify.kirelabs.org/classify.html Detexify LaTeX handwritten symbol recognition +https://outlook.office.com/mail/inbox Email - Vito Graffagnino - Outlook +https://www.androidjungles.com/how-to-unlock-bootloader-on-samsung-phones/ How to Unlock Bootloader on Samsung Phones +https://forum.xda-developers.com/galaxy-j5/samsung-galaxy-j5-2016-roms-kernels-recoveries--other-development/rom-tw-wycked-os-v2-0-updated-11-05-2018-t3789168 [ROM TW][7.1.1][J5 2016] Wycked-OS v3.0 Fina… | Samsung Galaxy J5 +https://forum.xda-developers.com/galaxy-j5/samsung-galaxy-j5-2016-roms-kernels-recoveries--other-development/rom-resurrection-remix-j5-2016-t3955181 [ROM][9]Resurrection Remix For J5 2016 | Samsung Galaxy J5 +https://www.getdroidtips.com/samsung-galaxy-j5-2016-stock-firmware/ Samsung Galaxy J5 2016 Stock Firmware Collections +https://forum.xda-developers.com/galaxy-nexus/guide-phone-backup-unlock-root-t1420351 [GUIDE] Full Phone Backup without Unlock or … | +https://appuals.com/fix-downloading-not-turn-off-target/ Fix: Downloading... Do not turn off target - Appuals.com +https://awesomedetect.com/flash-recovery-samsung-j5-2016-nougat-7-1-1/ Flash TWRP recovery in Samsung J5 2016 Nougat 7.1.1 without root – Awesome detect +https://www.droidviews.com/how-to-extract-pit-file-from-samsung-galaxy-devices/ Download Samsung PIT Files and Extract Them on Samsung Devices +https://www.full-repair-firmware.com/2017/10/full-firmware-j510fn.html Full Firmware For Device Samsung Galaxy J5 2016 SM-J510FN +https://www.full-repair-firmware.com/p/pit-files.html Pit Files +https://gearallnews.com/how-to-root-galaxy-j5-2016-sm-j510fn-and-install-twrp/ How To Root Galaxy J5 2016 SM-J510FN and Install TWRP +https://www.androidjungles.com/how-to-boot-into-fastboot-mode-on-samsung-phone/ How to Boot Into Fastboot Mode on Samsung Phone +https://www.androidsage.com/2017/07/12/list-of-samsung-galaxy-country-specific-product-code-csc-and-country-region/ List of Samsung Galaxy CSC Country Specific Product code and region they belong to +https://www.droidwin.com/root-android-devices-without-twrp-recovery/ How to Root Android Devices Without TWRP Recovery +https://rootmygalaxy.net/download-odin-tool-samsung-galaxy-devices-versions/ Download Samsung Odin Flash Tool (All Versions) for Windows +https://www.getdroidtips.com/best-magisk-modules-2020/ Best Magisk Modules You Should Try in 2020 +https://android.gadgethacks.com/how-to/install-microg-replace-google-play-services-prevent-data-mining-0193787/ How to Install MicroG to Replace Google Play Services & Prevent Data Mining « Android :: Gadget Hacks +https://acmarket.net/ ACMarket - Cracked Apps, Games, Mods for Android +https://apkmody.io/apps/titanium-backup-pro Titanium Backup Pro APK 8.4.0.2 (MOD Unlocked) Download +https://microg.org/download.html Download - microG Project +http://hex.ro/wp/blog/removing-gapps-from-cyanogenmod-11/ Removing gapps from Cyanogenmod 11 – and thus goes by another day +https://www.coinbase.com/join/smith_5to1 Buy/Sell cryptocurrency - Coinbase +https://www.vultr.com/features/datacenter-locations/#locations-map Largest Cloud Server Network Available - Vultr.com +https://my.vultr.com/ Log In - Vultr.com +https://stackpointer.io/mobile/android-adb-backup-extract-restore-repack/372/ Android ADB Backup, Extract, Restore - Stack Pointer +https://www.reddit.com/r/linux/comments/13nuda/poor_mans_vpn_with_ssh/ Poor man's VPN with ssh : linux +https://www.reddit.com/r/linux/comments/13nuda/poor_mans_vpn_with_ssh/?sort=new Poor man's VPN with ssh : linux +https://appmaildev.com/en/dkim DKIM Test - DKIM Verify - DKIM Validator +https://www.williamjbowman.com/blog/2015/07/24/setting-up-webdav-caldav-and-carddav-servers/ Setting up WebDAV, CalDAV, and CardDAV servers +https://jonathantutorial.blogspot.com/2014/10/how-to-set-up-radicale.html Jonathan Tutorials: How to set up a private Calendar and Contacts server (Radicale) on Ubuntu 14.04 LTS +https://doom.fandom.com/wiki/Doom_cheat_codes Doom cheat codes | Doom Wiki | Fandom +https://www.reddit.com/r/Piracy/comments/baufql/youtubedl_the_easy_way_on_android/ YouTube-DL the easy way on Android : Piracy +https://wiki.termux.com/wiki/Graphical_Environment Graphical Environment - Termux Wiki +https://www.techncyber.com/2019/08/kali-nethunter-in-termux.html How To use Kali Nethunter in Termux +https://www.reddit.com/r/linux/comments/66fh4f/what_do_you_use_termux_on_android_for/ What do you use Termux on android for? : linux +https://build.nethunter.com/kalifs/kalifs-latest/ Index of /kalifs/kalifs-latest/ +https://github.com/hiway/python-qutescript hiway/python-qutescript: Painless userscripts for qutebrowser. +qute://help/userscripts.html Writing qutebrowser userscripts +https://newsboat.org/releases/2.20.1/docs/newsboat.html#_query_feeds The Newsboat RSS Feedreader +https://hiphish.github.io/blog/2020/05/31/macho-man-command-on-steroids/ HiPhish's Workshop +https://www.verizon.com/support/knowledge-base-221536/ Palm - Factory Data Reset (Powered Off) | Verizon +https://devhints.io/bash Bash scripting cheatsheet +https://forum.xda-developers.com/galaxy-j5/samsung-galaxy-j5-2016-roms-kernels-recoveries--other-development/patcher-dualbootpatcher-j510-t3614376/page7 [PATCHER] DualBootPatcher for J510 - Pg. 7 | Samsung Galaxy J5 +https://new.myhermes.co.uk/track.html#/parcel/8017376759340718/details Track a parcel - MyHermes +https://forum.xda-developers.com/galaxy-j5/samsung-galaxy-j5-2016-roms-kernels-recoveries--other-development/rom-skies-a5ux-port-j510xx-hpm8294-t3586467 | ROM | | 6.0.X - 7.X.X | | J5 2016 all vari… | Samsung Galaxy J5 +https://musicasacra.com/music/latin-settings/ Latin Chant and Choral Music for the Mass | Church Music Association of America +http://docs.adaptivecomputing.com/torque/3-0-5/commands/qdel.php qdel +http://docs.adaptivecomputing.com/maui/commands/mjobctl.php#jobexp docs.adaptivecomputing.com/maui/commands/mjobctl.php#jobexp +http://docs.adaptivecomputing.com/torque/2-5-12/help.htm#topics/commands/qdel.htm qdel +https://leathermissalcovers.co.uk/index.php?route=product/product&path=61&product_id=82&limit=100 zipped leather cover +https://webgefrickel.de/blog/a-modern-mutt-setup-part-two A modern mutt setup — part two | webgefrickel +https://outlook.office.com/mail/options/mail/automaticReplies/automaticRepliesOption Email - Vito Graffagnino - Outlook +http://joshwalawender.github.io/IRAFtutorial/index.html Introduction to IRAF +http://iraf.noao.edu/tutorials/tutorials.html IRAF TUTORIALS AND EXERCISES +https://mkiminki.github.io/notes/irafinstall.html How To Install IRAF | Megan Kiminki +http://iraf.noao.edu/docs/src/pcix/unixsmg-toc.html#TOC UNIX/IRAF Site Manager's Guide +https://karlcordes.com/coreboot-x220/ Karl Cordes - How to flash coreboot on Lenovo X220 +https://leathermissalcovers.co.uk/index.php?route=common/home Leather Missal Covers +https://www.ifixit.com/Device/Lenovo_Thinkpad_X220 Lenovo Thinkpad X220 - iFixit +https://twrp.me/faq/datamedia.html What is a data/media device? +https://forum.xda-developers.com/android/general/guide-degoogle-device-install-microg-t4058743 [GUIDE] DeGoogle any device and install Micr… | Android Development and Hacking +https://herts365.sharepoint.com/sites/Toolkits Toolkits - Home +https://www.jeffgeerling.com/blogs/jeff-geerling/push-your-git-repositories Push your Git repositories to a central server, in a bare repository | Jeff Geerling +https://python-gitlab.readthedocs.io/en/stable/cli.html gitlab CLI usage — python-gitlab 2.5.0 documentation diff --git a/.config/qutebrowser/config.py b/.config/qutebrowser/config.py new file mode 100644 index 0000000..742d6e1 --- /dev/null +++ b/.config/qutebrowser/config.py @@ -0,0 +1,1802 @@ +## Autogenerated config.py ## Documentation: ## qute://help/configuring.html ## qute://help/settings.html +# +# Read ~/.Xresources file for colours (see the help file listed above) +# import subprocess + +# def read_xresources(prefix): + # props = {} + # x=subprocess.run(['xrdb','-query'], stdout=subprocess.PIPE) + # lines = x.stdout.decode().split('\n') + # for line in filter(lambda l : l.startswith(prefix), lines): + # prop, _, value = line.partition(':\t') + # props[prop] = value + # return props + +# xresources = read_xresources('*') +# c.colors.statusbar.normal.bg = xresources['*.background'] + + +## This is here so configs done via the GUI are still loaded. +## Remove it to not load settings done via the GUI. +# config.load_autoconfig() + +## Aliases for commands. The keys of the given dictionary are the +## aliases, while the values are the commands they map to. +## Type: Dict + +c.aliases = {'w':'session-save', 'q':'quit', 'wq':'quit --save', + '1337':'open https://1337x.to/home/', + 'O1337':'open -t https://1337x.to/home/', + 'ads':'open https://ui.adsabs.harvard.edu/classic-form', + 'Oads':'open -t https://ui.adsabs.harvard.edu/classic-form', + 'an':'open https://neonalley.com', + 'Oan':'open -t https://neonalley.com', + 'am':'open https://amazon.co.uk', + 'Oam':'open -t https://amazon.co.uk', + 'bc':'open https://bitchute.com', + 'Obc':'open -t https://bitchute.com', + 'bs':'open https://brittssoulsp.blogspot.com', + 'Obs':'open -t https://brittssoulsp.blogspot.com', + 'bt':'open https://bitsnoop.com', + 'Obt':'open -t https://bitsnoop.com', + 'car':'open https://car.herts.ac.uk', + 'Ocar':'open -t https://car.herts.ac.uk', + 'cluster':'open https://uhhpc.herts.ac.uk/wiki/index.php/Main_Page', + 'Ocluster':'open -t https://uhhpc.herts.ac.uk/wiki/index.php/Main_Page', + 'cm':'open https://churchmilitant.com/ ;; fake-key --global tSH ;; fake-key --global tSH ', + 'Ocm':'open -t https://churchmilitant.com/ ;; fake-key --global tSH ;; fake-key --global tSH ', + 'do':'open https://www.divinumofficium.com/', + 'Odo':'open -t https://www.divinumofficium.com/', + 'eby':'open https://ebay.co.uk', + 'Oeby':'open -t https://ebay.co.uk', + 'epk':'open https://registrar.epik.com', + 'Oepk':'open -t https://registrar.epik.com', + 'ez':'open https://eztv.ag', + 'Oez':'open -t https://eztv.ag', + 'et':'open https://extratorrent.ag/', + 'Oet':'open -t https://extratorrent.ag/', + 'fp':'open https://fmapulse.com', + 'Ofp':'open -t https://fmapulse.com', + 'gh':'open https://geekprank.com/hacker/', + 'Ogh':'open -t https://geekprank.com/hacker/', + 'gfgf':'open https://www.giffgaff.com/auth/login', + 'Ogfgf':'open -t https://www.giffgaff.com/auth/login', + 'gk':'open https://gameknot.com/', + 'Ogk':'open -t https://gameknot.com/', + 'gn':'open https://uhhpc.herts.ac.uk/ganglia/', + 'Ogn':'open -t https://uhhpc.herts.ac.uk/ganglia/', + 'helpdesk':'open https://helpdesk.herts.ac.uk', + 'Ohelpdesk':'open -t https://helpdesk.herts.ac.uk', + 'hertshub':'open https://herts365.sharepoint.com/sites/HertsHub', + 'Ohertshub':'open -t https://herts365.sharepoint.com/sites/HertsHub', + 'hx':'open https://heasarc.gsfc.nasa.gov/', + 'Ohx':'open -t https://heasarc.gsfc.nasa.gov/', + 'ia':'open http://italiaautoparts.co.uk', + 'Oia':'open -t http://italiaautoparts.co.uk', + 'iso':'open https://isohunt.to', + 'Oiso':'open -t https://isohunt.to', + 'll':'open https://go.herts.ac.uk/LiL', + 'Oll':'open -t https://go.herts.ac.uk/LiL', + 'ls':'open https://lukesmith.xyz', + 'Ols':'open -t https://lukesmith.xyz', + 'lms':'open https://lms.org.uk', + 'Olms':'open -t https://lms.org.uk', + 'lt':'open https://www.limetorrents.cc', + 'Olt':'open -t https://www.limetorrents.cc', + 'mbt':'open https://signin1.bt.com/login/emailloginform', + 'Ombt':'open -t https://signin1.bt.com/login/emailloginform', + 'netgear':'open http://2.96.233.114:8080', + 'Onetgear':'open -t http://2.96.233.114:8080', + 'Nm':'open https://outlook.office365.com/', + 'ONm':'open -t https://outlook.office365.com/', + 'nx':'open https://next-episode.net/ ;; fake-key --global tSH ;; fake-key --global tSH ', + 'Onx':'open -t https://next-episode.net/ ;; fake-key --global tSH ;; fake-key --global tSH ', + 'pm':'open https://mail.protonmail.com/login', + 'Opm':'open -t https://mail.protonmail.com/login', + 'pv':'open https://www.pivotce.com/', + 'Opv':'open -t https://www.pivotce.com/', + 'qtb':'open https://www.qutebrowser.org/', + 'Oqtb':'open -t https://www.qutebrowser.org/', + 'qtc':'open https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/img/cheatsheet-big.png', + 'Oqtc':'open -t https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/img/cheatsheet-big.png', + 'rb':'open https://www.rarbg.to', + 'Orb':'open -t https://www.rarbg.to', + 'sms':'open https://freesmscode.com', + 'Osms':'open -t https://freesmscode.com', + 'sn':'open https://studynet.herts.ac.uk', + 'Osn':'open -t https://studynet.herts.ac.uk', + 'sp':'open https://stpaulcenter.com', + 'Osp':'open -t https://stpaulcenter.com', + 't1':'open https://uhfinance.t1cloud.com', + 'Ot1':'open -t https://uhfinance.t1cloud.com', + 'tb':'open https://www.torrentbit.net', + 'Otb':'open -t https://www.torrentbit.net', + 'tf':'open https://www.torrentfunk.com', + 'Otf':'open -t https://www.torrentfunk.com', + 'tl':'open https://www.torlock.com', + 'Otl':'open -t https://www.torlock.com', + 'tpb':'open https://thepiratebay.org/', + 'Otpb':'open -t https://thepiratebay.org/', + 'tz':'open https://torrentz2.eu/my', + 'Otz':'open -t https://torrentz2.eu/my', + 'vx':'open https://hertfordshire.voxcharta.org/', + 'Ovx':'open -t https://hertfordshire.voxcharta.org/', + 'vtr':'open https://my.vultr.com/', + 'Ovtr':'open -t https://my.vultr.com/', + 'wn':'open https://www.webosnation.com/', + 'Own':'open -t https://www.webosnation.com/', + 'Y':'open http://www.cosmos.esa.int/web/xmm-newton/current-calibration-files', + 'OY':'open -t http://www.cosmos.esa.int/web/xmm-newton/current-calibration-files', + 'yfy':'open https://yts.am/', + 'Oyfy':'open -t https://yts.am/', + 'ytn':'open https://youtube.com/?disable_polymer=1', + 'Oytn':'open -t https://youtube.com/?disable_polymer=1', + 'yt':'open https://youtube.com/', + 'Oyt':'open -t https://youtube.com/', + 'rtr':'open -t http://192.168.1.254/home.htm ;; fake-key --global tSH '} +# +## Time interval (in milliseconds) between auto-saves of +## config/cookies/etc. +## Type: Int +# c.auto_save.interval = 15000 + +## Always restore open sites when qutebrowser is reopened. +## Type: Bool +c.auto_save.session = True + +## Backend to use to display websites. qutebrowser supports two different +## web rendering engines / backends, QtWebKit and QtWebEngine. QtWebKit +## was discontinued by the Qt project with Qt 5.6, but picked up as a +## well maintained fork: https://github.com/annulen/webkit/wiki - +## qutebrowser only supports the fork. QtWebEngine is Qt's official +## successor to QtWebKit. It's slightly more resource hungry than +## QtWebKit and has a couple of missing features in qutebrowser, but is +## generally the preferred choice. +## Type: String +## Valid values: +## - webengine: Use QtWebEngine (based on Chromium). +## - webkit: Use QtWebKit (based on WebKit, similar to Safari). +# c.backend = 'webengine' + +## This setting can be used to map keys to other keys. When the key used +## as dictionary-key is pressed, the binding for the key used as +## dictionary-value is invoked instead. This is useful for global +## remappings of keys, for example to map Ctrl-[ to Escape. Note that +## when a key is bound (via `bindings.default` or `bindings.commands`), +## the mapping is ignored. +## Type: Dict +# c.bindings.key_mappings = {'': '', '': '', '': '', '': '', '': '', '': '', '': '', '': ''} +## Background color of the completion widget category headers. +## Type: QssColor +# c.colors.completion.category.bg = 'qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #888888, stop:1 #505050)' + +## Bottom border color of the completion widget category headers. +## Type: QssColor +# c.colors.completion.category.border.bottom = 'black' + +## Top border color of the completion widget category headers. +## Type: QssColor +# c.colors.completion.category.border.top = 'black' + +## Foreground color of completion widget category headers. +## Type: QtColor +# c.colors.completion.category.fg = 'white' + +## Background color of the completion widget for even rows. +## Type: QssColor +# c.colors.completion.even.bg = '#333333' + +## Text color of the completion widget. May be a single color to use for +## all columns or a list of three colors, one for each column. +## Type: List of QtColor, or QtColor +# c.colors.completion.fg = ['white', 'white', 'white'] + +## Background color of the selected completion item. +## Type: QssColor +# c.colors.completion.item.selected.bg = '#e8c000' + +## Bottom border color of the selected completion item. +## Type: QssColor +# c.colors.completion.item.selected.border.bottom = '#bbbb00' + +## Top border color of the completion widget category headers. +## Type: QssColor +# c.colors.completion.item.selected.border.top = '#bbbb00' + +## Foreground color of the selected completion item. +## Type: QtColor +# c.colors.completion.item.selected.fg = 'black' + +## Foreground color of the matched text in the completion. +## Type: QssColor +# c.colors.completion.match.fg = '#ff4444' + +## Background color of the completion widget for odd rows. +## Type: QssColor +# c.colors.completion.odd.bg = '#444444' + +## Color of the scrollbar in the completion view. +## Type: QssColor +# c.colors.completion.scrollbar.bg = '#333333' + +## Color of the scrollbar handle in the completion view. +## Type: QssColor +# c.colors.completion.scrollbar.fg = 'white' + +## Background color for the download bar. +## Type: QssColor +# c.colors.downloads.bar.bg = 'black' + +## Background color for downloads with errors. +## Type: QtColor +# c.colors.downloads.error.bg = 'red' + +## Foreground color for downloads with errors. +## Type: QtColor +# c.colors.downloads.error.fg = 'white' + +## Color gradient start for download backgrounds. +## Type: QtColor +# c.colors.downloads.start.bg = '#0000aa' + +## Color gradient start for download text. +## Type: QtColor +# c.colors.downloads.start.fg = 'white' + +## Color gradient stop for download backgrounds. +## Type: QtColor +# c.colors.downloads.stop.bg = '#00aa00' + +## Color gradient end for download text. +## Type: QtColor +# c.colors.downloads.stop.fg = 'white' + +## Color gradient interpolation system for download backgrounds. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +# c.colors.downloads.system.bg = 'rgb' + +## Color gradient interpolation system for download text. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +# c.colors.downloads.system.fg = 'rgb' + +## Background color for hints. Note that you can use a `rgba(...)` value +## for transparency. +## Type: QssColor +# c.colors.hints.bg = 'qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, 247, 133, 0.8), stop:1 rgba(255, 197, 66, 0.8))' + +## Font color for hints. +## Type: QssColor +# c.colors.hints.fg = 'black' + +## Font color for the matched part of hints. +## Type: QssColor +# c.colors.hints.match.fg = 'green' + +## Background color of the keyhint widget. +## Type: QssColor +# c.colors.keyhint.bg = 'rgba(0, 0, 0, 80%)' + +## Text color for the keyhint widget. +## Type: QssColor +# c.colors.keyhint.fg = '#FFFFFF' + +## Highlight color for keys to complete the current keychain. +## Type: QssColor +# c.colors.keyhint.suffix.fg = '#FFFF00' + +## Background color of an error message. +## Type: QssColor +# c.colors.messages.error.bg = 'red' + +## Border color of an error message. +## Type: QssColor +# c.colors.messages.error.border = '#bb0000' + +## Foreground color of an error message. +## Type: QssColor +# c.colors.messages.error.fg = 'white' + +## Background color of an info message. +## Type: QssColor +# c.colors.messages.info.bg = 'black' + +## Border color of an info message. +## Type: QssColor +# c.colors.messages.info.border = '#333333' + +## Foreground color of an info message. +## Type: QssColor +# c.colors.messages.info.fg = 'white' + +## Background color of a warning message. +## Type: QssColor +# c.colors.messages.warning.bg = 'darkorange' + +## Border color of a warning message. +## Type: QssColor +# c.colors.messages.warning.border = '#d47300' + +## Foreground color of a warning message. +## Type: QssColor +# c.colors.messages.warning.fg = 'white' + +## Background color for prompts. +## Type: QssColor +# c.colors.prompts.bg = '#444444' + +## Border used around UI elements in prompts. +## Type: String +# c.colors.prompts.border = '1px solid gray' + +## Foreground color for prompts. +## Type: QssColor +# c.colors.prompts.fg = 'white' + +## Background color for the selected item in filename prompts. +## Type: QssColor +# c.colors.prompts.selected.bg = 'grey' + +## Background color of the statusbar in caret mode. +## Type: QssColor +# c.colors.statusbar.caret.bg = 'purple' + +## Foreground color of the statusbar in caret mode. +## Type: QssColor +# c.colors.statusbar.caret.fg = 'white' + +## Background color of the statusbar in caret mode with a selection. +## Type: QssColor +# c.colors.statusbar.caret.selection.bg = '#a12dff' + +## Foreground color of the statusbar in caret mode with a selection. +## Type: QssColor +# c.colors.statusbar.caret.selection.fg = 'white' + +## Background color of the statusbar in command mode. +## Type: QssColor +# c.colors.statusbar.command.bg = 'black' + +## Foreground color of the statusbar in command mode. +## Type: QssColor +# c.colors.statusbar.command.fg = 'white' + +## Background color of the statusbar in private browsing + command mode. +## Type: QssColor +# c.colors.statusbar.command.private.bg = 'grey' + +## Foreground color of the statusbar in private browsing + command mode. +## Type: QssColor +# c.colors.statusbar.command.private.fg = 'white' + +## Background color of the statusbar in insert mode. +## Type: QssColor +# c.colors.statusbar.insert.bg = 'darkgreen' + +## Foreground color of the statusbar in insert mode. +## Type: QssColor +# c.colors.statusbar.insert.fg = 'white' + +## Background color of the statusbar. +## Type: QssColor +# c.colors.statusbar.normal.bg = 'black' + +## Foreground color of the statusbar. +## Type: QssColor +# c.colors.statusbar.normal.fg = 'white' + +## Background color of the statusbar in passthrough mode. +## Type: QssColor +# c.colors.statusbar.passthrough.bg = 'darkblue' + +## Foreground color of the statusbar in passthrough mode. +## Type: QssColor +# c.colors.statusbar.passthrough.fg = 'white' + +## Background color of the statusbar in private browsing mode. +## Type: QssColor +# c.colors.statusbar.private.bg = '#666666' + +## Foreground color of the statusbar in private browsing mode. +## Type: QssColor +# c.colors.statusbar.private.fg = 'white' + +## Background color of the progress bar. +## Type: QssColor +# c.colors.statusbar.progress.bg = 'white' + +## Foreground color of the URL in the statusbar on error. +## Type: QssColor +# c.colors.statusbar.url.error.fg = 'orange' + +## Default foreground color of the URL in the statusbar. +## Type: QssColor +# c.colors.statusbar.url.fg = 'white' + +## Foreground color of the URL in the statusbar for hovered links. +## Type: QssColor +# c.colors.statusbar.url.hover.fg = 'aqua' + +## Foreground color of the URL in the statusbar on successful load +## (http). +## Type: QssColor +# c.colors.statusbar.url.success.http.fg = 'white' + +## Foreground color of the URL in the statusbar on successful load +## (https). +## Type: QssColor +# c.colors.statusbar.url.success.https.fg = 'lime' + +## Foreground color of the URL in the statusbar when there's a warning. +## Type: QssColor +# c.colors.statusbar.url.warn.fg = 'yellow' + +## Background color of the tab bar. +## Type: QtColor +# c.colors.tabs.bar.bg = '#555555' + +## Background color of unselected even tabs. +## Type: QtColor +# c.colors.tabs.even.bg = 'darkgrey' + +## Foreground color of unselected even tabs. +## Type: QtColor +# c.colors.tabs.even.fg = 'white' + +## Color for the tab indicator on errors. +## Type: QtColor +# c.colors.tabs.indicator.error = '#ff0000' + +## Color gradient start for the tab indicator. +## Type: QtColor +# c.colors.tabs.indicator.start = '#0000aa' + +## Color gradient end for the tab indicator. +## Type: QtColor +# c.colors.tabs.indicator.stop = '#00aa00' + +## Color gradient interpolation system for the tab indicator. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +# c.colors.tabs.indicator.system = 'rgb' + +## Background color of unselected odd tabs. +## Type: QtColor +# c.colors.tabs.odd.bg = 'grey' + +## Foreground color of unselected odd tabs. +## Type: QtColor +# c.colors.tabs.odd.fg = 'white' + +## Background color of selected even tabs. +## Type: QtColor +# c.colors.tabs.selected.even.bg = 'black' + +## Foreground color of selected even tabs. +## Type: QtColor +# c.colors.tabs.selected.even.fg = 'white' + +## Background color of selected odd tabs. +## Type: QtColor +# c.colors.tabs.selected.odd.bg = 'black' + +## Foreground color of selected odd tabs. +## Type: QtColor +# c.colors.tabs.selected.odd.fg = 'white' + +## Background color for webpages if unset (or empty to use the theme's +## color). +## Type: QtColor +# c.colors.webpage.bg = 'white' + +## Number of commands to save in the command history. 0: no history / -1: +## unlimited +## Type: Int +# c.completion.cmd_history_max_items = 100 + +## Delay (in milliseconds) before updating completions after typing a +## character. +## Type: Int +# c.completion.delay = 0 + +## Height (in pixels or as percentage of the window) of the completion. +## Type: PercOrInt +# c.completion.height = '50%' + +## Minimum amount of characters needed to update completions. +## Type: Int +# c.completion.min_chars = 1 + +## Move on to the next part when there's only one possible completion +## left. +## Type: Bool +# c.completion.quick = True + +## Padding (in pixels) of the scrollbar handle in the completion window. +## Type: Int +# c.completion.scrollbar.padding = 2 + +## Width (in pixels) of the scrollbar in the completion window. +## Type: Int +# c.completion.scrollbar.width = 12 + +## When to show the autocompletion window. +## Type: String +## Valid values: +## - always: Whenever a completion is available. +## - auto: Whenever a completion is requested. +## - never: Never. +# c.completion.show = 'always' + +## Shrink the completion to be smaller than the configured size if there +## are no scrollbars. +## Type: Bool +# c.completion.shrink = False + +## Format of timestamps (e.g. for the history completion). +## Type: TimestampTemplate +# c.completion.timestamp_format = '%Y-%m-%d' + +## Execute the best-matching command on a partial match. +## Type: Bool +c.completion.use_best_match = True + +## Number of URLs to show in the web history. 0: no history / -1: +## unlimited +## Type: Int +# c.completion.web_history_max_items = -1 + +## Require a confirmation before quitting the application. +## Type: ConfirmQuit +## Valid values: +## - always: Always show a confirmation. +## - multiple-tabs: Show a confirmation if multiple tabs are opened. +## - downloads: Show a confirmation if downloads are running +## - never: Never show a confirmation. +# c.confirm_quit = ['never'] + +## Enable support for the HTML 5 web application cache feature. An +## application cache acts like an HTTP cache in some sense. For documents +## that use the application cache via JavaScript, the loader engine will +## first ask the application cache for the contents, before hitting the +## network. +## Type: Bool +# c.content.cache.appcache = True + +## Maximum number of pages to hold in the global memory page cache. The +## page cache allows for a nicer user experience when navigating forth or +## back to pages in the forward/back history, by pausing and resuming up +## to _n_ pages. For more information about the feature, please refer to: +## http://webkit.org/blog/427/webkit-page-cache-i-the-basics/ +## Type: Int +# c.content.cache.maximum_pages = 0 + +## Size (in bytes) of the HTTP network cache. Null to use the default +## value. With QtWebEngine, the maximum supported value is 2147483647 (~2 +## GB). +## Type: Int +# c.content.cache.size = None + +## Which cookies to accept. +## Type: String +## Valid values: +## - all: Accept all cookies. +## - no-3rdparty: Accept cookies from the same origin only. +## - no-unknown-3rdparty: Accept cookies from the same origin only, unless a cookie is already set for the domain. +## - never: Don't accept cookies at all. +# c.content.cookies.accept = 'no-3rdparty' + +## Store cookies. Note this option needs a restart with QtWebEngine on Qt +## < 5.9. +## Type: Bool +c.content.cookies.store = True + +## Default encoding to use for websites. The encoding must be a string +## describing an encoding such as _utf-8_, _iso-8859-1_, etc. +## Type: String +# c.content.default_encoding = 'iso-8859-1' + +## Enable extra tools for Web developers. This needs to be enabled for +## `:inspector` to work and also adds an _Inspect_ entry to the context +## menu. For QtWebEngine, see `--enable-webengine-inspector` in +## `qutebrowser --help` instead. +## Type: Bool +## c.content.developer_extras = True + +## Try to pre-fetch DNS entries to speed up browsing. +## Type: Bool +c.content.dns_prefetch = True + +## Expand each subframe to its contents. This will flatten all the frames +## to become one scrollable page. +## Type: Bool +# c.content.frame_flattening = False + +## Allow websites to request geolocations. +## Type: BoolAsk +## Valid values: +## - true +## - false +## - ask +c.content.geolocation = False + +## Value to send in the `Accept-Language` header. +## Type: String +# c.content.headers.accept_language = 'en-US,en' + +## Custom headers for qutebrowser HTTP requests. +## Type: Dict +# c.content.headers.custom = {} + +## Value to send in the `DNT` header. When this is set to true, +## qutebrowser asks websites to not track your identity. If set to null, +## the DNT header is not sent at all. +## Type: Bool +# c.content.headers.do_not_track = True + +## When to send the Referer header. The Referer header tells websites +## from which website you were coming from when visiting them. +## Type: String +## Valid values: +## - always: Always send the Referer. +## - never: Never send the Referer. This is not recommended, as some sites may break. +## - same-domain: Only send the Referer for the same domain. This will still protect your privacy, but shouldn't break any sites. +# c.content.headers.referer = 'same-domain' + +## User agent to send. Unset to send the default. +## Type: String +# c.content.headers.user_agent = None + +## Enable host blocking. +## Type: Bool +# c.content.host_blocking.enabled = True + +## List of URLs of lists which contain hosts to block. The file can be +## in one of the following formats: - An `/etc/hosts`-like file - One +## host per line - A zip-file of any of the above, with either only one +## file, or a file named `hosts` (with any extension). +## Type: List of Url +# c.content.host_blocking.lists = ['https://www.malwaredomainlist.com/hostslist/hosts.txt', 'http://someonewhocares.org/hosts/hosts', 'http://winhelp2002.mvps.org/hosts.zip', 'http://malwaredomains.lehigh.edu/files/justdomains.zip', 'https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext'] + +## List of domains that should always be loaded, despite being ad- +## blocked. Domains may contain * and ? wildcards and are otherwise +## required to exactly match the requested domain. Local domains are +## always exempt from hostblocking. +## Type: List of String +c.content.host_blocking.whitelist = ['piwik.org','next-episode.net','churchmilitant.com','churchmilitant.tv'] + +## Enable hyperlink auditing (``). +## Type: Bool +# c.content.hyperlink_auditing = False + +## Load images automatically in web pages. +## Type: Bool +# c.content.images = True + +## Show javascript alerts. +## Type: Bool +# c.content.javascript.alert = True + +## Allow JavaScript to read from or write to the clipboard. With +## QtWebEngine, writing the clipboard as response to a user interaction +## is always allowed. +## Type: Bool +# c.content.javascript.can_access_clipboard = False + +## Allow JavaScript to close tabs. +## Type: Bool +# c.content.javascript.can_close_tabs = False + +## Allow JavaScript to open new tabs without user interaction. +## Type: Bool +# c.content.javascript.can_open_tabs_automatically = False + +## Enable JavaScript. +## Type: Bool +c.content.javascript.enabled = True + +## Log levels to use for JavaScript console logging messages. When a +## JavaScript message with the level given in the dictionary key is +## logged, the corresponding dictionary value selects the qutebrowser +## logger to use. On QtWebKit, the "unknown" setting is always used. +## Type: Dict +# c.content.javascript.log = {'unknown': 'debug', 'info': 'debug', 'warning': 'debug', 'error': 'debug'} + +## Use the standard JavaScript modal dialog for `alert()` and +## `confirm()`. +## Type: Bool +# c.content.javascript.modal_dialog = False + +## Show javascript prompts. +## Type: Bool +# c.content.javascript.prompt = True + +## Allow locally loaded documents to access other local URLs. +## Type: Bool +# c.content.local_content_can_access_file_urls = True + +## Allow locally loaded documents to access remote URLs. +## Type: Bool +# c.content.local_content_can_access_remote_urls = False + +## Enable support for HTML 5 local storage and Web SQL. +## Type: Bool +# c.content.local_storage = True + +## Allow websites to record audio/video. +## Type: BoolAsk +## Valid values: +## - true +## - false +## - ask +# c.content.media_capture = 'ask' + +## Netrc-file for HTTP authentication. If unset, `~/.netrc` is used. +## Type: File +# c.content.netrc_file = None + +## Allow websites to show notifications. +## Type: BoolAsk +## Valid values: +## - true +## - false +## - ask +# c.content.notifications = 'ask' + +## Allow pdf.js to view PDF files in the browser. Note that the files can +## still be downloaded by clicking the download button in the pdf.js +## viewer. +## Type: Bool +# c.content.pdfjs = False + +## Enable plugins in Web pages. +## Type: Bool +# c.content.plugins = False vgg +c.content.plugins = True + +## Draw the background color and images also when the page is printed. +## Type: Bool +# c.content.print_element_backgrounds = True + +## Open new windows in private browsing mode which does not record +## visited pages. +## Type: Bool +# c.content.private_browsing = True + +## Proxy to use. In addition to the listed values, you can use a +## `socks://...` or `http://...` URL. +## Type: Proxy +## Valid values: +## - system: Use the system wide proxy. +## - none: Don't use any proxy +# c.content.proxy = 'system' + +## Send DNS requests over the configured proxy. +## Type: Bool +# c.content.proxy_dns_requests = True + +## Validate SSL handshakes. +## Type: BoolAsk +## Valid values: +## - true +## - false +## - ask +# c.content.ssl_strict = 'ask' + +## List of user stylesheet filenames to use. +## Type: List of File, or File +# c.content.user_stylesheets = [] + +## Enable WebGL. +## Type: Bool +# c.content.webgl = True + +## Limit fullscreen to the browser window (does not expand to fill the +## screen). +## Type: Bool +# c.content.windowed_fullscreen = False + +## Monitor load requests for cross-site scripting attempts. Suspicious +## scripts will be blocked and reported in the inspector's JavaScript +## console. Enabling this feature might have an impact on performance. +## Type: Bool +# c.content.xss_auditing = False + +## Directory to save downloads to. If unset, a sensible OS-specific +## default is used. +## Type: Directory +# c.downloads.location.directory = None + +## Prompt the user for the download location. If set to false, +## `downloads.location.directory` will be used. +## Type: Bool +# c.downloads.location.prompt = True + +## Remember the last used download directory. +## Type: Bool +# c.downloads.location.remember = True + +## What to display in the download filename input. +## Type: String +## Valid values: +## - path: Show only the download path. +## - filename: Show only download filename. +## - both: Show download path and filename. +# c.downloads.location.suggestion = 'path' + +## Default program used to open downloads. If null, the default internal +## handler is used. Any `{}` in the string will be expanded to the +## filename, else the filename will be appended. +## Type: String +# c.downloads.open_dispatcher = None + +## Where to show the downloaded files. +## Type: VerticalPosition +## Valid values: +## - top +## - bottom +# c.downloads.position = 'top' + +## Duration (in milliseconds) to wait before removing finished downloads. +## If set to -1, downloads are never removed. +## Type: Int +# c.downloads.remove_finished = -1 + +## Editor (and arguments) to use for the `open-editor` command. The +## following placeholders are defined: * `{file}`: Filename of the file +## to be edited. * `{line}`: Line in which the caret is found in the +## text. * `{column}`: Column in which the caret is found in the text. * +## `{line0}`: Same as `{line}`, but starting from index 0. * `{column0}`: +## Same as `{column}`, but starting from index 0. +## Type: ShellCommand +# c.editor.command = ['gvim', '-f', '{file}', '-c', 'normal {line}G{column0}l'] +c.editor.command = ["st", "-t", "qutebrowserSratchpad", "-g", "86x24+40+60", "-e", "nvim", "-f", "{}"] + +## Encoding to use for the editor. +## Type: Encoding +# c.editor.encoding = 'utf-8' + +## Font used in the completion categories. +## Type: Font +# c.fonts.completion.category = 'bold 10pt monospace' + +## Font used in the completion widget. +## Type: Font +# c.fonts.completion.entry = '10pt monospace' + +## Font used for the debugging console. +## Type: QtFont +# c.fonts.debug_console = '10pt monospace' + +## Font used for the downloadbar. +## Type: Font +# c.fonts.downloads = '10pt monospace' + +## Font used for the hints. +## Type: Font +c.fonts.hints = 'bold 8pt monospace' + +## Font used in the keyhint widget. +## Type: Font +# c.fonts.keyhint = '10pt monospace' + +## Font used for error messages. +## Type: Font +# c.fonts.messages.error = '10pt monospace' + +## Font used for info messages. +## Type: Font +# c.fonts.messages.info = '10pt monospace' + +## Font used for warning messages. +## Type: Font +# c.fonts.messages.warning = '10pt monospace' + +## Default monospace fonts. Whenever "monospace" is used in a font +## setting, it's replaced with the fonts listed here. +## Type: Font +# c.fonts.monospace = '"xos4 Terminus", Terminus, Monospace, "DejaVu Sans Mono", Monaco, "Bitstream Vera Sans Mono", "Andale Mono", "Courier New", Courier, "Liberation Mono", monospace, Fixed, Consolas, Terminal' + +## Font used for prompts. +## Type: Font +# c.fonts.prompts = '10pt sans-serif' + +## Font used in the statusbar. +## Type: Font +# c.fonts.statusbar = '10pt monospace' + +## Font used in the tab bar. +## Type: QtFont +# c.fonts.tabs = '10pt monospace' + +## Font family for cursive fonts. +## Type: FontFamily +# c.fonts.web.family.cursive = '' + +## Font family for fantasy fonts. +## Type: FontFamily +# c.fonts.web.family.fantasy = '' + +## Font family for fixed fonts. +## Type: FontFamily +# c.fonts.web.family.fixed = '' + +## Font family for sans-serif fonts. +## Type: FontFamily +# c.fonts.web.family.sans_serif = '' + +## Font family for serif fonts. +## Type: FontFamily +# c.fonts.web.family.serif = '' + +## Font family for standard fonts. +## Type: FontFamily +# c.fonts.web.family.standard = '' + +## Default font size (in pixels) for regular text. +## Type: Int +# c.fonts.web.size.default = 16 + +## Default font size (in pixels) for fixed-pitch text. +## Type: Int +# c.fonts.web.size.default_fixed = 13 + +## Hard minimum font size (in pixels). +## Type: Int +# c.fonts.web.size.minimum = 0 + +## Minimum logical font size (in pixels) that is applied when zooming +## out. +## Type: Int +# c.fonts.web.size.minimum_logical = 6 + +## When a hint can be automatically followed without pressing Enter. +## Type: String +## Valid values: +## - always: Auto-follow whenever there is only a single hint on a page. +## - unique-match: Auto-follow whenever there is a unique non-empty match in either the hint string (word mode) or filter (number mode). +## - full-match: Follow the hint when the user typed the whole hint (letter, word or number mode) or the element's text (only in number mode). +## - never: The user will always need to press Enter to follow a hint. +# c.hints.auto_follow = 'unique-match' + +## Duration (in milliseconds) to ignore normal-mode key bindings after a +## successful auto-follow. +## Type: Int +# c.hints.auto_follow_timeout = 0 + +## CSS border value for hints. +## Type: String +# c.hints.border = '1px solid #E3BE23' + +## Characters used for hint strings. +## Type: UniqueCharString +# c.hints.chars = 'asdfghjkl' + +## Dictionary file to be used by the word hints. +## Type: File +# c.hints.dictionary = '/usr/share/dict/words' + +## Which implementation to use to find elements to hint. +## Type: String +## Valid values: +## - javascript: Better but slower +## - python: Slightly worse but faster +# c.hints.find_implementation = 'python' + +## Hide unmatched hints in rapid mode. +## Type: Bool +# c.hints.hide_unmatched_rapid_hints = True + +## Minimum number of characters used for hint strings. +## Type: Int +# c.hints.min_chars = 1 + +## Mode to use for hints. +## Type: String +## Valid values: +## - number: Use numeric hints. (In this mode you can also type letters from the hinted element to filter and reduce the number of elements that are hinted.) +## - letter: Use the characters in the `hints.chars` setting. +## - word: Use hints words based on the html elements and the extra words. +c.hints.mode = 'number' + +## Comma-separated list of regular expressions to use for 'next' links. +## Type: List of Regex +# c.hints.next_regexes = ['\\bnext\\b', '\\bmore\\b', '\\bnewer\\b', '\\b[>→≫]\\b', '\\b(>>|»)\\b', '\\bcontinue\\b'] + +## Comma-separated list of regular expressions to use for 'prev' links. +## Type: List of Regex +# c.hints.prev_regexes = ['\\bprev(ious)?\\b', '\\bback\\b', '\\bolder\\b', '\\b[<←≪]\\b', '\\b(<<|«)\\b'] + +## Scatter hint key chains (like Vimium) or not (like dwb). Ignored for +## number hints. +## Type: Bool +# c.hints.scatter = True + +## Make characters in hint strings uppercase. +## Type: Bool +# c.hints.uppercase = False + +## Maximum time (in minutes) between two history items for them to be +## considered being from the same browsing session. Items with less time +## between them are grouped when being displayed in `:history`. Use -1 to +## disable separation. +## Type: Int +# c.history_gap_interval = 30 + +## Which unbound keys to forward to the webview in normal mode. +## Type: String +## Valid values: +## - all: Forward all unbound keys. +## - auto: Forward unbound non-alphanumeric keys. +## - none: Don't forward any keys. +# c.input.forward_unbound_keys = 'auto' + +## Enter insert mode if an editable element is clicked. +## Type: Bool +# c.input.insert_mode.auto_enter = True + +## Leave insert mode if a non-editable element is clicked. +## Type: Bool +# c.input.insert_mode.auto_leave = True + +## Automatically enter insert mode if an editable element is focused +## after loading the page. +## Type: Bool +# c.input.insert_mode.auto_load = False + +## Switch to insert mode when clicking flash and other plugins. +## Type: Bool +# c.input.insert_mode.plugins = False + +## Include hyperlinks in the keyboard focus chain when tabbing. +## Type: Bool +# c.input.links_included_in_focus_chain = True + +## Timeout (in milliseconds) for partially typed key bindings. If the +## current input forms only partial matches, the keystring will be +## cleared after this time. +## Type: Int +# c.input.partial_timeout = 5000 + +## Enable Opera-like mouse rocker gestures. This disables the context +## menu. +## Type: Bool +# c.input.rocker_gestures = False + +## Enable spatial navigation. Spatial navigation consists in the ability +## to navigate between focusable elements in a Web page, such as +## hyperlinks and form controls, by using Left, Right, Up and Down arrow +## keys. For example, if the user presses the Right key, heuristics +## determine whether there is an element he might be trying to reach +## towards the right and which element he probably wants. +## Type: Bool +# c.input.spatial_navigation = False + +## Keychains that shouldn't be shown in the keyhint dialog. Globs are +## supported, so `;*` will blacklist all keychains starting with `;`. Use +## `*` to disable keyhints. +## Type: List of String +# c.keyhint.blacklist = [] + +## Time (in milliseconds) from pressing a key to seeing the keyhint +## dialog. +## Type: Int +# c.keyhint.delay = 500 + +## Rounding radius (in pixels) for the edges of the keyhint dialog. +## Type: Int +# c.keyhint.radius = 6 + +## Duration (in milliseconds) to show messages in the statusbar for. Set +## to 0 to never clear messages. +## Type: Int +# c.messages.timeout = 2000 + +## How to open links in an existing instance if a new one is launched. +## This happens when e.g. opening a link from a terminal. See +## `new_instance_open_target_window` to customize in which window the +## link is opened in. +## Type: String +## Valid values: +## - tab: Open a new tab in the existing window and activate the window. +## - tab-bg: Open a new background tab in the existing window and activate the window. +## - tab-silent: Open a new tab in the existing window without activating the window. +## - tab-bg-silent: Open a new background tab in the existing window without activating the window. +## - window: Open in a new window. +# c.new_instance_open_target = 'tab' + +## Which window to choose when opening links as new tabs. When +## `new_instance_open_target` is not set to `window`, this is ignored. +## Type: String +## Valid values: +## - first-opened: Open new tabs in the first (oldest) opened window. +## - last-opened: Open new tabs in the last (newest) opened window. +## - last-focused: Open new tabs in the most recently focused window. +## - last-visible: Open new tabs in the most recently visible window. +# c.new_instance_open_target_window = 'last-focused' + +## Show a filebrowser in upload/download prompts. +## Type: Bool +# c.prompt.filebrowser = True + +## Rounding radius (in pixels) for the edges of prompts. +## Type: Int +# c.prompt.radius = 8 + +## Additional arguments to pass to Qt, without leading `--`. With +## QtWebEngine, some Chromium arguments (see +## https://peter.sh/experiments/chromium-command-line-switches/ for a +## list) will work. +## Type: List of String +# c.qt.args = [] + +## Force a Qt platform to use. This sets the `QT_QPA_PLATFORM` +## environment variable and is useful to force using the XCB plugin when +## running QtWebEngine on Wayland. +## Type: String +# c.qt.force_platform = None + +## Force software rendering for QtWebEngine. This is needed for +## QtWebEngine to work with Nouveau drivers. +## Type: Bool +# c.qt.force_software_rendering = False + +## Turn on Qt HighDPI scaling. This is equivalent to setting +## QT_AUTO_SCREEN_SCALE_FACTOR=1 in the environment. It's off by default +## as it can cause issues with some bitmap fonts. As an alternative to +## this, it's possible to set font sizes and the `zoom.default` setting. +## Type: Bool +# c.qt.highdpi = False + +## Show a scrollbar. +## Type: Bool +# c.scrolling.bar = False + +## Enable smooth scrolling for web pages. Note smooth scrolling does not +## work with the `:scroll-px` command. +## Type: Bool +# c.scrolling.smooth = False + +## When to find text on a page case-insensitively. +## Type: String +## Valid values: +## - always: Search case-insensitively. +## - never: Search case-sensitively. +## - smart: Search case-sensitively if there are capital characters. +# c.search.ignore_case = 'smart' + +## Find text on a page incrementally, renewing the search for each typed +## character. +## Type: Bool +# c.search.incremental = True + +## Name of the session to save by default. If this is set to null, the +## session which was last loaded is saved. +## Type: SessionName +# c.session.default_name = None + +## Load a restored tab as soon as it takes focus. +## Type: Bool +# c.session.lazy_restore = False + +## Languages to use for spell checking. You can check for available +## languages and install dictionaries using scripts/dictcli.py. Run the +## script with -h/--help for instructions. +## Type: List of String +## Valid values: +## - af-ZA: Afrikaans (South Africa) +## - bg-BG: Bulgarian (Bulgaria) +## - ca-ES: Catalan (Spain) +## - cs-CZ: Czech (Czech Republic) +## - da-DK: Danish (Denmark) +## - de-DE: German (Germany) +## - el-GR: Greek (Greece) +## - en-AU: English (Australia) +## - en-CA: English (Canada) +## - en-GB: English (United Kingdom) +## - en-US: English (United States) +## - es-ES: Spanish (Spain) +## - et-EE: Estonian (Estonia) +## - fa-IR: Farsi (Iran) +## - fo-FO: Faroese (Faroe Islands) +## - fr-FR: French (France) +## - he-IL: Hebrew (Israel) +## - hi-IN: Hindi (India) +## - hr-HR: Croatian (Croatia) +## - hu-HU: Hungarian (Hungary) +## - id-ID: Indonesian (Indonesia) +## - it-IT: Italian (Italy) +## - ko: Korean +## - lt-LT: Lithuanian (Lithuania) +## - lv-LV: Latvian (Latvia) +## - nb-NO: Norwegian (Norway) +## - nl-NL: Dutch (Netherlands) +## - pl-PL: Polish (Poland) +## - pt-BR: Portuguese (Brazil) +## - pt-PT: Portuguese (Portugal) +## - ro-RO: Romanian (Romania) +## - ru-RU: Russian (Russia) +## - sh: Serbo-Croatian +## - sk-SK: Slovak (Slovakia) +## - sl-SI: Slovenian (Slovenia) +## - sq: Albanian +## - sr: Serbian +## - sv-SE: Swedish (Sweden) +## - ta-IN: Tamil (India) +## - tg-TG: Tajik (Tajikistan) +## - tr-TR: Turkish (Turkey) +## - uk-UA: Ukrainian (Ukraine) +## - vi-VN: Vietnamese (Viet Nam) +# c.spellcheck.languages = [] + +## Hide the statusbar unless a message is shown. +## Type: Bool +# c.statusbar.hide = False + +## Padding (in pixels) for the statusbar. +## Type: Padding +# c.statusbar.padding = {'top': 1, 'bottom': 1, 'left': 0, 'right': 0} + +## Position of the status bar. +## Type: VerticalPosition +## Valid values: +## - top +## - bottom +# c.statusbar.position = 'bottom' + +## List of widgets displayed in the statusbar. +## Type: List of String +## Valid values: +## - url: Current page URL. +## - scroll: Percentage of the current page position like `10%`. +## - scroll_raw: Raw percentage of the current page position like `10`. +## - history: Display an arrow when possible to go back/forward in history. +## - tabs: Current active tab, e.g. `2`. +## - keypress: Display pressed keys when composing a vi command. +## - progress: Progress bar for the current page loading. +# c.statusbar.widgets = ['keypress', 'url', 'scroll', 'history', 'tabs', 'progress'] + +## Open new tabs (middleclick/ctrl+click) in the background. +## Type: Bool +# c.tabs.background = False + +## Mouse button with which to close tabs. +## Type: String +## Valid values: +## - right: Close tabs on right-click. +## - middle: Close tabs on middle-click. +## - none: Don't close tabs using the mouse. +# c.tabs.close_mouse_button = 'middle' + +## How to behave when the close mouse button is pressed on the tab bar. +## Type: String +## Valid values: +## - new-tab: Open a new tab. +## - close-current: Close the current tab. +## - close-last: Close the last tab. +## - ignore: Don't do anything. +# c.tabs.close_mouse_button_on_bar = 'new-tab' + +## Scaling factor for favicons in the tab bar. The tab size is unchanged, +## so big favicons also require extra `tabs.padding`. +## Type: Float +# c.tabs.favicons.scale = 1.0 + +## Show favicons in the tab bar. +## Type: Bool +# c.tabs.favicons.show = True + +## Padding (in pixels) for tab indicators. +## Type: Padding +# c.tabs.indicator.padding = {'top': 2, 'bottom': 2, 'left': 0, 'right': 4} + +## Width (in pixels) of the progress indicator (0 to disable). +## Type: Int +# c.tabs.indicator.width = 3 + +## How to behave when the last tab is closed. +## Type: String +## Valid values: +## - ignore: Don't do anything. +## - blank: Load a blank page. +## - startpage: Load the start page. +## - default-page: Load the default page. +## - close: Close the window. +# c.tabs.last_close = 'ignore' + +## When switching tabs, what input mode is applied. +## Type: String +## Valid values: +## - persist: Retain the current mode. +## - restore: Restore previously saved mode. +## - normal: Always revert to normal mode. +# c.tabs.mode_on_change = 'normal' + +## Switch between tabs using the mouse wheel. +## Type: Bool +# c.tabs.mousewheel_switching = True + +## Position of new tabs opened from another tab. +## Type: NewTabPosition +## Valid values: +## - prev: Before the current tab. +## - next: After the current tab. +## - first: At the beginning. +## - last: At the end. +# c.tabs.new_position.related = 'next' + +## Position of new tabs which aren't opened from another tab. +## Type: NewTabPosition +## Valid values: +## - prev: Before the current tab. +## - next: After the current tab. +## - first: At the beginning. +## - last: At the end. +# c.tabs.new_position.unrelated = 'last' + +## Padding (in pixels) around text for tabs. +## Type: Padding +# c.tabs.padding = {'top': 0, 'bottom': 0, 'left': 5, 'right': 5} + +## Shrink pinned tabs down to their contents. +## Type: Bool +# c.tabs.pinned.shrink = True + +## Position of the tab bar. +## Type: Position +## Valid values: +## - top +## - bottom +## - left +## - right +# c.tabs.position = 'top' + +## Which tab to select when the focused tab is removed. +## Type: SelectOnRemove +## Valid values: +## - prev: Select the tab which came before the closed one (left in horizontal, above in vertical). +## - next: Select the tab which came after the closed one (right in horizontal, below in vertical). +## - last-used: Select the previously selected tab. +# c.tabs.select_on_remove = 'next' + +## When to show the tab bar. +## Type: String +## Valid values: +## - always: Always show the tab bar. +## - never: Always hide the tab bar. +## - multiple: Hide the tab bar if only one tab is open. +## - switching: Show the tab bar when switching tabs. +# c.tabs.show = 'always' + +## Duration (in milliseconds) to show the tab bar before hiding it when +## tabs.show is set to 'switching'. +## Type: Int +# c.tabs.show_switching_delay = 800 + +## Open a new window for every tab. +## Type: Bool +# c.tabs.tabs_are_windows = False + +## Alignment of the text inside of tabs. +## Type: TextAlignment +## Valid values: +## - left +## - right +## - center +# c.tabs.title.alignment = 'left' + +## Format to use for the tab title. The following placeholders are +## defined: * `{perc}`: Percentage as a string like `[10%]`. * +## `{perc_raw}`: Raw percentage, e.g. `10`. * `{title}`: Title of the +## current web page. * `{title_sep}`: The string ` - ` if a title is set, +## empty otherwise. * `{index}`: Index of this tab. * `{id}`: Internal +## tab ID of this tab. * `{scroll_pos}`: Page scroll position. * +## `{host}`: Host of the current web page. * `{backend}`: Either +## ''webkit'' or ''webengine'' * `{private}`: Indicates when private mode +## is enabled. * `{current_url}`: URL of the current web page. * +## `{protocol}`: Protocol (http/https/...) of the current web page. +## Type: FormatString +# c.tabs.title.format = '{index}: {title}' + +## Format to use for the tab title for pinned tabs. The same placeholders +## like for `tabs.title.format` are defined. +## Type: FormatString +# c.tabs.title.format_pinned = '{index}' + +## Width (in pixels or as percentage of the window) of the tab bar if +## it's vertical. +## Type: PercOrInt +# c.tabs.width = '20%' + +## Wrap when changing tabs. +## Type: Bool +# c.tabs.wrap = True + +## What search to start when something else than a URL is entered. +## Type: String +## Valid values: +## - naive: Use simple/naive check. +## - dns: Use DNS requests (might be slow!). +## - never: Never search automatically. +# c.url.auto_search = 'naive' + +## Page to open if :open -t/-b/-w is used without URL. Use `about:blank` +## for a blank page. +## Type: FuzzyUrl +# c.url.default_page = 'https://start.duckduckgo.com/' + +## URL segments where `:navigate increment/decrement` will search for a +## number. +## Type: FlagList +## Valid values: +## - host +## - port +## - path +## - query +## - anchor +# c.url.incdec_segments = ['path', 'query'] + +## Search engines which can be used via the address bar. Maps a search +## engine name (such as `DEFAULT`, or `ddg`) to a URL with a `{}` +## placeholder. The placeholder will be replaced by the search term, use +## `{{` and `}}` for literal `{`/`}` signs. The search engine named +## `DEFAULT` is used when `url.auto_search` is turned on and something +## else than a URL was entered to be opened. Other search engines can be +## used by prepending the search engine name to the search term, e.g. +## `:open google qutebrowser`. +## Type: Dict + +c.url.searchengines = { 'DEFAULT':'https://duckduckgo.com/?q={}', + 'aio':'https://www.aiosearch.com/search?q={}', + 'aw':'https://wiki.archlinux.org/?q={}', + 'g':'https://www.google.com/?q={}', + 'git':'https://github.com/search?q={}', + 'imdb':'https://www.imdb.com/find?q={}', + 'red':'https://www.reddit.com/r/{}', + 'ub':'https://www.urbandictionary.com/define.php?term={}', + 'wiki':'https://en.wikipedia.org/wiki/?q={}', + 'yfs':'https://www.yifysubtitles.com/search?q={}', + 'yt':'https://www.youtube.com/results?search_query={}'} + +## Page(s) to open at the start. +## Type: List of FuzzyUrl, or FuzzyUrl +# c.url.start_pages = ['https://start.duckduckgo.com'] + +## URL parameters to strip with `:yank url`. +## Type: List of String +# c.url.yank_ignored_parameters = ['ref', 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'] + +## Hide the window decoration when using wayland. +## Type: Bool +# c.window.hide_wayland_decoration = False + +## Format to use for the window title. The same placeholders like for +## `tabs.title.format` are defined. +## Type: FormatString +# c.window.title_format = '{perc}{title}{title_sep}qutebrowser' + +## Default zoom level. +## Type: Perc +# c.zoom.default = '100%' + +## Available zoom levels. +## Type: List of Perc +# c.zoom.levels = ['25%', '33%', '50%', '67%', '75%', '90%', '100%', '110%', '125%', '150%', '175%', '200%', '250%', '300%', '400%', '500%'] + +## Number of zoom increments to divide the mouse wheel movements to. +## Type: Int +# c.zoom.mouse_divider = 512 + +## Apply the zoom factor on a frame only to the text or to all content. +## Type: Bool +# c.zoom.text_only = False + +## Bindings for normal mode +config.bind(',c', 'hint links spawn mpv --ytdl --ytdl-raw-options=username="v.graffagnino@btinternet.com",password="N9\Ch0n\H@n9" --cookies-file=~/.local/share/qutebrowser/webengine/Cookies {hint-url} --load-unsafe-playlists') +config.bind(',m', 'hint links spawn mpv --ytdl {hint-url} --load-unsafe-playlists') +#config.bind('m', 'hint links spawn mpv --ytdl -slang=en {hint-url} --load-unsafe-playlists') +config.bind('m', '/usr/bin/youtube-dl -x --restrict-filenames --audio-format="mp3" --audio-quality="128k" -o "%(artist)s-%(title)s.%(ext)s" {hint-url}') +config.bind(',M', 'hint links spawn umpv {hint-url}') +config.bind(',t', 'hint links spawn transmission-remote --add {hint-url}') +#config.bind(',y', 'hint links spawn /usr/local/bin/st -e tsp youtube-dl -b -o %(channel)s/%(title)s.%(ext)s {hint-url}') +#config.bind(',y', 'hint links spawn /usr/local/bin/st -e /usr/bin/tsp youtube-dl -b {hint-url}') +config.bind(',y', 'hint links spawn /usr/local/bin/st -e tsp youtube-dl --add-metadata -ic -f best {hint-url}') +config.bind(',Y', 'hint links spawn /usr/local/bin/st -e mpsyt dlurl {hint-url}') +config.bind(',q', 'hint links spawn echo "mpsyt dlurl {hint-url}" >> ~/ytdl.list') +config.bind(',p', 'spawn --userscript qute-pass --dmenu-invocation dmenu') +config.bind('xb', 'config-cycle statusbar.hide') +config.bind('xt', 'config-cycle tabs.show always switching') +config.bind('xx', 'config-cycle statusbar.hide ;; config-cycle tabs.show always switching') +config.bind('xp', 'set-cmd-text :set content.proxy socks://localhost:8765') +config.bind('Xp', 'set-cmd-text :config-unset content.proxy') +#config.bind('ua', 'set-cmd-text :set -u https://accounts.google.com/* content.headers.user_agent "Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0") + +# config.bind("'", 'enter-mode jump_mark') +# config.bind('+', 'zoom-in') +# config.bind('-', 'zoom-out') +# config.bind('.', 'repeat-command') +# config.bind('/', 'set-cmd-text /') +# config.bind(':', 'set-cmd-text :') +# config.bind(';I', 'hint images tab') +# config.bind(';O', 'hint links fill :open -t -r {hint-url}') +# config.bind(';R', 'hint --rapid links window') +# config.bind(';Y', 'hint links yank-primary') +# config.bind(';b', 'hint all tab-bg') +# config.bind(';d', 'hint links download') +# config.bind(';f', 'hint all tab-fg') +# config.bind(';h', 'hint all hover') +# config.bind(';i', 'hint images') +# config.bind(';o', 'hint links fill :open {hint-url}') +# config.bind(';r', 'hint --rapid links tab-bg') +# config.bind(';t', 'hint inputs') +# config.bind(';y', 'hint links yank') +# config.bind('', 'tab-focus 1') +# config.bind('', 'tab-focus 2') +# config.bind('', 'tab-focus 3') +# config.bind('', 'tab-focus 4') +# config.bind('', 'tab-focus 5') +# config.bind('', 'tab-focus 6') +# config.bind('', 'tab-focus 7') +# config.bind('', 'tab-focus 8') +# config.bind('', 'tab-focus -1') +# config.bind('', 'navigate increment') +# config.bind('', 'print') +# config.bind('', 'scroll-page 0 -1') +# config.bind('', 'scroll-page 0 0.5') +# config.bind('', 'reload -f') +# config.bind('', 'scroll-page 0 1') +# config.bind('', 'open -w') +# config.bind('', 'tab-next') +# config.bind('', 'tab-prev') +# config.bind('', 'quit') +# config.bind('', 'follow-selected -t') +# config.bind('', 'open -p') +# config.bind('', 'undo') +# config.bind('', 'close') +# config.bind('', 'open -t') +# config.bind('', 'tab-focus last') +# config.bind('', 'scroll-page 0 -0.5') +# config.bind('', 'enter-mode passthrough') +# config.bind('', 'tab-close') +# config.bind('', 'navigate decrement') +# config.bind('', 'tab-focus last') +# config.bind('', 'home') +# config.bind('', 'tab-pin') +# config.bind('', 'stop') +# config.bind('', 'clear-keychain ;; search ;; fullscreen --leave') +# config.bind('', 'fullscreen') +# config.bind('', 'reload') +# config.bind('', 'follow-selected') +# config.bind('', 'back') +# config.bind('', 'forward') +# config.bind('=', 'zoom') +# config.bind('?', 'set-cmd-text ?') +# config.bind('@', 'run-macro') +# config.bind('B', 'set-cmd-text -s :quickmark-load -t') +# config.bind('D', 'tab-close -o') +# config.bind('F', 'hint all tab') +# config.bind('G', 'scroll-to-perc') +# config.bind('H', 'back') +config.bind('J', 'tab-prev') +config.bind('K', 'tab-next') +# config.bind('L', 'forward') +# config.bind('M', 'bookmark-add') +# config.bind('N', 'search-prev') +# config.bind('O', 'set-cmd-text -s :open -t') +# config.bind('PP', 'open -t -- {primary}') +# config.bind('Pp', 'open -t -- {clipboard}') +# config.bind('R', 'reload -f') +# config.bind('Sb', 'open qute://bookmarks#bookmarks') +# config.bind('Sh', 'open qute://history') +# config.bind('Sq', 'open qute://bookmarks') +# config.bind('Ss', 'open qute://settings') +# config.bind('T', 'tab-focus') +# config.bind('ZQ', 'quit') +# config.bind('ZZ', 'quit --save') +# config.bind('[[', 'navigate prev') +# config.bind(']]', 'navigate next') +# config.bind('`', 'enter-mode set_mark') +# config.bind('ad', 'download-cancel') +# config.bind('b', 'set-cmd-text -s :quickmark-load') +# config.bind('cd', 'download-clear') +# config.bind('co', 'tab-only') +# config.bind('d', 'tab-close') +# config.bind('f', 'hint') +# config.bind('g$', 'tab-focus -1') +# config.bind('g0', 'tab-focus 1') +# config.bind('gB', 'set-cmd-text -s :bookmark-load -t') +# config.bind('gC', 'tab-clone') +# config.bind('gO', 'set-cmd-text :open -t -r {url:pretty}') +# config.bind('gU', 'navigate up -t') +# config.bind('g^', 'tab-focus 1') +# config.bind('ga', 'open -t') +# config.bind('gb', 'set-cmd-text -s :bookmark-load') +config.bind('gd', 'download') +config.bind('gf', 'view-source') +# config.bind('gg', 'scroll-to-perc 0') +# config.bind('gl', 'tab-move -') +# config.bind('gm', 'tab-move') +# config.bind('go', 'set-cmd-text :open {url:pretty}') +# config.bind('gr', 'tab-move +') +# config.bind('gt', 'set-cmd-text -s :buffer') +# config.bind('gu', 'navigate up') +# config.bind('h', 'scroll left') +# config.bind('i', 'enter-mode insert') +# config.bind('j', 'scroll down') +# config.bind('k', 'scroll up') +# config.bind('l', 'scroll right') +# config.bind('m', 'quickmark-save') +# config.bind('n', 'search-next') +# config.bind('o', 'set-cmd-text -s :open') +# config.bind('pP', 'open -- {primary}') +# config.bind('pp', 'open -- {clipboard}') +# config.bind('q', 'record-macro') +# config.bind('r', 'reload') +# config.bind('sf', 'save') +# config.bind('sk', 'set-cmd-text -s :bind') +# config.bind('sl', 'set-cmd-text -s :set -t') +# config.bind('ss', 'set-cmd-text -s :set') +# config.bind('tPH', 'config-cycle -p -u *://*.{url:host}/* content.plugins ;; reload') +# config.bind('tPh', 'config-cycle -p -u *://{url:host}/* content.plugins ;; reload') +# config.bind('tPu', 'config-cycle -p -u {url} content.plugins ;; reload') +config.bind('tSH', 'config-cycle -p -u *://*.{url:host}/* content.javascript.enabled ;; reload') +config.bind('tSh', 'config-cycle -p -u *://{url:host}/* content.javascript.enabled ;; reload') +config.bind('tSu', 'config-cycle -p -u {url} content.javascript.enabled ;; reload') +# config.bind('th', 'back -t') +# config.bind('tl', 'forward -t') +# config.bind('tpH', 'config-cycle -p -t -u *://*.{url:host}/* content.plugins ;; reload') +# config.bind('tph', 'config-cycle -p -t -u *://{url:host}/* content.plugins ;; reload') +# config.bind('tpu', 'config-cycle -p -t -u {url} content.plugins ;; reload') +# config.bind('tsH', 'config-cycle -p -t -u *://*.{url:host}/* content.javascript.enabled ;; reload') +# config.bind('tsh', 'config-cycle -p -t -u *://{url:host}/* content.javascript.enabled ;; reload') +# config.bind('tsu', 'config-cycle -p -t -u {url} content.javascript.enabled ;; reload') +# config.bind('u', 'undo') +# config.bind('v', 'enter-mode caret') +# config.bind('wB', 'set-cmd-text -s :bookmark-load -w') +# config.bind('wO', 'set-cmd-text :open -w {url:pretty}') +# config.bind('wP', 'open -w -- {primary}') +# config.bind('wb', 'set-cmd-text -s :quickmark-load -w') +# config.bind('wf', 'hint all window') +# config.bind('wh', 'back -w') +# config.bind('wi', 'inspector') +# config.bind('wl', 'forward -w') +# config.bind('wo', 'set-cmd-text -s :open -w') +# config.bind('wp', 'open -w -- {clipboard}') +# config.bind('xO', 'set-cmd-text :open -b -r {url:pretty}') +# config.bind('xo', 'set-cmd-text -s :open -b') +# config.bind('yD', 'yank domain -s') +# config.bind('yP', 'yank pretty-url -s') +# config.bind('yT', 'yank title -s') +# config.bind('yY', 'yank -s') +# config.bind('yd', 'yank domain') +# config.bind('yp', 'yank pretty-url') +# config.bind('yt', 'yank title') +# config.bind('yy', 'yank') +# config.bind('{{', 'navigate prev -t') +# config.bind('}}', 'navigate next -t') + +## Bindings for caret mode +# config.bind('$', 'move-to-end-of-line', mode='caret') +# config.bind('0', 'move-to-start-of-line', mode='caret') +# config.bind('', 'drop-selection', mode='caret') +# config.bind('', 'leave-mode', mode='caret') +# config.bind('', 'yank selection', mode='caret') +# config.bind('', 'toggle-selection', mode='caret') +# config.bind('G', 'move-to-end-of-document', mode='caret') +# config.bind('H', 'scroll left', mode='caret') +# config.bind('J', 'scroll down', mode='caret') +# config.bind('K', 'scroll up', mode='caret') +# config.bind('L', 'scroll right', mode='caret') +# config.bind('Y', 'yank selection -s', mode='caret') +# config.bind('[', 'move-to-start-of-prev-block', mode='caret') +# config.bind(']', 'move-to-start-of-next-block', mode='caret') +# config.bind('b', 'move-to-prev-word', mode='caret') +# config.bind('c', 'enter-mode normal', mode='caret') +# config.bind('e', 'move-to-end-of-word', mode='caret') +# config.bind('gg', 'move-to-start-of-document', mode='caret') +# config.bind('h', 'move-to-prev-char', mode='caret') +# config.bind('j', 'move-to-next-line', mode='caret') +# config.bind('k', 'move-to-prev-line', mode='caret') +# config.bind('l', 'move-to-next-char', mode='caret') +# config.bind('v', 'toggle-selection', mode='caret') +# config.bind('w', 'move-to-next-word', mode='caret') +# config.bind('y', 'yank selection', mode='caret') +# config.bind('{', 'move-to-end-of-prev-block', mode='caret') +# config.bind('}', 'move-to-end-of-next-block', mode='caret') + +## Bindings for command mode +# config.bind('', 'rl-backward-word', mode='command') +# config.bind('', 'rl-backward-kill-word', mode='command') +# config.bind('', 'rl-kill-word', mode='command') +# config.bind('', 'rl-forward-word', mode='command') +# config.bind('', 'rl-delete-char', mode='command') +# config.bind('', 'rl-beginning-of-line', mode='command') +# config.bind('', 'rl-backward-char', mode='command') +# config.bind('', 'completion-item-yank', mode='command') +# config.bind('', 'completion-item-del', mode='command') +# config.bind('', 'rl-end-of-line', mode='command') +# config.bind('', 'rl-forward-char', mode='command') +# config.bind('', 'rl-backward-delete-char', mode='command') +# config.bind('', 'rl-kill-line', mode='command') +# config.bind('', 'command-history-next', mode='command') +# config.bind('', 'command-history-prev', mode='command') +# config.bind('', 'command-accept --rapid', mode='command') +# config.bind('', 'completion-item-yank --sel', mode='command') +# config.bind('', 'completion-item-focus prev-category', mode='command') +# config.bind('', 'completion-item-focus next-category', mode='command') +# config.bind('', 'rl-unix-line-discard', mode='command') +# config.bind('', 'rl-unix-word-rubout', mode='command') +# config.bind('', 'rl-yank', mode='command') +# config.bind('', 'completion-item-focus --history next', mode='command') +# config.bind('', 'leave-mode', mode='command') +# config.bind('', 'command-accept', mode='command') +# config.bind('', 'completion-item-del', mode='command') +# config.bind('', 'completion-item-focus prev', mode='command') +# config.bind('', 'completion-item-focus next', mode='command') +# config.bind('', 'completion-item-focus --history prev', mode='command') + +## Bindings for hint mode +# config.bind('', 'hint all tab-bg', mode='hint') +# config.bind('', 'hint links', mode='hint') +# config.bind('', 'hint --rapid links tab-bg', mode='hint') +# config.bind('', 'leave-mode', mode='hint') +# config.bind('', 'follow-hint', mode='hint') + +## Bindings for insert mode +# config.bind('', 'open-editor', mode='insert') +# config.bind('', 'leave-mode', mode='insert') +# config.bind('', 'insert-text {primary}', mode='insert') +config.bind('', 'spawn --userscript qute-keepass -p ~/Documents/20151120.kdbx', mode='insert') + +## Bindings for passthrough mode +# config.bind('', 'leave-mode', mode='passthrough') + +## Bindings for prompt mode +# config.bind('', 'rl-backward-word', mode='prompt') +# config.bind('', 'rl-backward-kill-word', mode='prompt') +# config.bind('', 'rl-kill-word', mode='prompt') +# config.bind('', 'rl-forward-word', mode='prompt') +# config.bind('', 'prompt-yank --sel', mode='prompt') +# config.bind('', 'prompt-yank', mode='prompt') +# config.bind('', 'rl-delete-char', mode='prompt') +# config.bind('', 'rl-beginning-of-line', mode='prompt') +# config.bind('', 'rl-backward-char', mode='prompt') +# config.bind('', 'rl-end-of-line', mode='prompt') +# config.bind('', 'rl-forward-char', mode='prompt') +# config.bind('', 'rl-backward-delete-char', mode='prompt') +# config.bind('', 'rl-kill-line', mode='prompt') +# config.bind('', 'rl-unix-line-discard', mode='prompt') +# config.bind('', 'rl-unix-word-rubout', mode='prompt') +# config.bind('', 'prompt-open-download', mode='prompt') +# config.bind('', 'rl-yank', mode='prompt') +# config.bind('', 'prompt-item-focus next', mode='prompt') +# config.bind('', 'leave-mode', mode='prompt') +# config.bind('', 'prompt-accept', mode='prompt') +# config.bind('', 'prompt-item-focus prev', mode='prompt') +# config.bind('', 'prompt-item-focus next', mode='prompt') +# config.bind('', 'prompt-item-focus prev', mode='prompt') + +## Bindings for register mode +# config.bind('', 'leave-mode', mode='register') + +## Bindings for yesno mode +# config.bind('', 'prompt-yank --sel', mode='yesno') +# config.bind('', 'prompt-yank', mode='yesno') +# config.bind('', 'leave-mode', mode='yesno') +# config.bind('', 'prompt-accept', mode='yesno') +# config.bind('n', 'prompt-accept no', mode='yesno') +# config.bind('y', 'prompt-accept yes', mode='yesno') +config.source('nord-qutebrowser.py') diff --git a/.config/qutebrowser/jupyter-profile/autoconfig.yml b/.config/qutebrowser/jupyter-profile/autoconfig.yml new file mode 100644 index 0000000..bdf84b0 --- /dev/null +++ b/.config/qutebrowser/jupyter-profile/autoconfig.yml @@ -0,0 +1,7 @@ +# DO NOT edit this file by hand, qutebrowser will overwrite it. +# Instead, create a config.py - see :help for details. + +config_version: 2 +settings: + content.javascript.enabled: + '*://*.next-episode.net/*': false diff --git a/.config/qutebrowser/jupyter-profile/config.py b/.config/qutebrowser/jupyter-profile/config.py new file mode 100644 index 0000000..de9b2e7 --- /dev/null +++ b/.config/qutebrowser/jupyter-profile/config.py @@ -0,0 +1,1676 @@ +## Autogenerated config.py +## Documentation: +## qute://help/configuring.html +## qute://help/settings.html +# +# Read ~/.Xresources file for colours (see the help file listed above) +# import subprocess + +# def read_xresources(prefix): + # props = {} + # x=subprocess.run(['xrdb','-query'], stdout=subprocess.PIPE) + # lines = x.stdout.decode().split('\n') + # for line in filter(lambda l : l.startswith(prefix), lines): + # prop, _, value = line.partition(':\t') + # props[prop] = value + # return props + +# xresources = read_xresources('*') +# c.colors.statusbar.normal.bg = xresources['*.background'] + + +## This is here so configs done via the GUI are still loaded. +## Remove it to not load settings done via the GUI. +# config.load_autoconfig() + +## Aliases for commands. The keys of the given dictionary are the +## aliases, while the values are the commands they map to. +## Type: Dict +c.aliases = { 'w':'session-save', 'q':'quit', 'wq':'quit --save', 'qtb':'open https://www.qutebrowser.org/', 'mbt':'open https://signin1.bt.com/login/emailloginform', 'Ombt':'open -t https://signin1.bt.com/login/emailloginform', 'nx':'open https://next-episode.net/', 'Onx':'open -t https://next-episode.net/', 'gk':'open https://gameknot.com/', 'Ogk':'open -t https://gameknot.com/', 'yt':'open https://youtube.com', 'Oyt':'open -t https://youtube.com', 'Y':'open http://www.cosmos.esa.int/web/xmm-newton/current-calibration-files', 'hx':'open https://heasarc.gsfc.nasa.gov/', 'Ohx':'open -t https://heasarc.gsfc.nasa.gov/', 'yfy':'open https://yts.am/', '1337':'open https://1337x.to/home/', 'O1337':'open -t https://1337x.to/home/', 'ez':'open https://eztv.ag', 'Oez':'open -t https://eztv.ag', 'tz':'open https://extratorrent.ag', 'Otz':'open -t https://extratorrent.ag', 'tpb':'open https://thepiratebay.org/', 'Otpb':'open -t https://thepiratebay.org/', 'Nm':'open https://netmail.herts.ac.uk/', 'ONm':'open -t https://netmail.herts.ac.uk/', 'Oan':'open -t https://neonalley.com','Ocm':'open -t https://churchmilitant.com','Osp':'open -t https://stpaulcenter.com'} +# +## Time interval (in milliseconds) between auto-saves of +## config/cookies/etc. +## Type: Int +# c.auto_save.interval = 15000 + +## Always restore open sites when qutebrowser is reopened. +## Type: Bool +c.auto_save.session = True + +## Backend to use to display websites. qutebrowser supports two different +## web rendering engines / backends, QtWebKit and QtWebEngine. QtWebKit +## was discontinued by the Qt project with Qt 5.6, but picked up as a +## well maintained fork: https://github.com/annulen/webkit/wiki - +## qutebrowser only supports the fork. QtWebEngine is Qt's official +## successor to QtWebKit. It's slightly more resource hungry than +## QtWebKit and has a couple of missing features in qutebrowser, but is +## generally the preferred choice. +## Type: String +## Valid values: +## - webengine: Use QtWebEngine (based on Chromium). +## - webkit: Use QtWebKit (based on WebKit, similar to Safari). +# c.backend = 'webengine' + +## This setting can be used to map keys to other keys. When the key used +## as dictionary-key is pressed, the binding for the key used as +## dictionary-value is invoked instead. This is useful for global +## remappings of keys, for example to map Ctrl-[ to Escape. Note that +## when a key is bound (via `bindings.default` or `bindings.commands`), +## the mapping is ignored. +## Type: Dict +# c.bindings.key_mappings = {'': '', '': '', '': '', '': '', '': '', '': '', '': '', '': ''} + +## Background color of the completion widget category headers. +## Type: QssColor +# c.colors.completion.category.bg = 'qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #888888, stop:1 #505050)' + +## Bottom border color of the completion widget category headers. +## Type: QssColor +# c.colors.completion.category.border.bottom = 'black' + +## Top border color of the completion widget category headers. +## Type: QssColor +# c.colors.completion.category.border.top = 'black' + +## Foreground color of completion widget category headers. +## Type: QtColor +# c.colors.completion.category.fg = 'white' + +## Background color of the completion widget for even rows. +## Type: QssColor +# c.colors.completion.even.bg = '#333333' + +## Text color of the completion widget. May be a single color to use for +## all columns or a list of three colors, one for each column. +## Type: List of QtColor, or QtColor +# c.colors.completion.fg = ['white', 'white', 'white'] + +## Background color of the selected completion item. +## Type: QssColor +# c.colors.completion.item.selected.bg = '#e8c000' + +## Bottom border color of the selected completion item. +## Type: QssColor +# c.colors.completion.item.selected.border.bottom = '#bbbb00' + +## Top border color of the completion widget category headers. +## Type: QssColor +# c.colors.completion.item.selected.border.top = '#bbbb00' + +## Foreground color of the selected completion item. +## Type: QtColor +# c.colors.completion.item.selected.fg = 'black' + +## Foreground color of the matched text in the completion. +## Type: QssColor +# c.colors.completion.match.fg = '#ff4444' + +## Background color of the completion widget for odd rows. +## Type: QssColor +# c.colors.completion.odd.bg = '#444444' + +## Color of the scrollbar in the completion view. +## Type: QssColor +# c.colors.completion.scrollbar.bg = '#333333' + +## Color of the scrollbar handle in the completion view. +## Type: QssColor +# c.colors.completion.scrollbar.fg = 'white' + +## Background color for the download bar. +## Type: QssColor +# c.colors.downloads.bar.bg = 'black' + +## Background color for downloads with errors. +## Type: QtColor +# c.colors.downloads.error.bg = 'red' + +## Foreground color for downloads with errors. +## Type: QtColor +# c.colors.downloads.error.fg = 'white' + +## Color gradient start for download backgrounds. +## Type: QtColor +# c.colors.downloads.start.bg = '#0000aa' + +## Color gradient start for download text. +## Type: QtColor +# c.colors.downloads.start.fg = 'white' + +## Color gradient stop for download backgrounds. +## Type: QtColor +# c.colors.downloads.stop.bg = '#00aa00' + +## Color gradient end for download text. +## Type: QtColor +# c.colors.downloads.stop.fg = 'white' + +## Color gradient interpolation system for download backgrounds. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +# c.colors.downloads.system.bg = 'rgb' + +## Color gradient interpolation system for download text. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +# c.colors.downloads.system.fg = 'rgb' + +## Background color for hints. Note that you can use a `rgba(...)` value +## for transparency. +## Type: QssColor +# c.colors.hints.bg = 'qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, 247, 133, 0.8), stop:1 rgba(255, 197, 66, 0.8))' + +## Font color for hints. +## Type: QssColor +# c.colors.hints.fg = 'black' + +## Font color for the matched part of hints. +## Type: QssColor +# c.colors.hints.match.fg = 'green' + +## Background color of the keyhint widget. +## Type: QssColor +# c.colors.keyhint.bg = 'rgba(0, 0, 0, 80%)' + +## Text color for the keyhint widget. +## Type: QssColor +# c.colors.keyhint.fg = '#FFFFFF' + +## Highlight color for keys to complete the current keychain. +## Type: QssColor +# c.colors.keyhint.suffix.fg = '#FFFF00' + +## Background color of an error message. +## Type: QssColor +# c.colors.messages.error.bg = 'red' + +## Border color of an error message. +## Type: QssColor +# c.colors.messages.error.border = '#bb0000' + +## Foreground color of an error message. +## Type: QssColor +# c.colors.messages.error.fg = 'white' + +## Background color of an info message. +## Type: QssColor +# c.colors.messages.info.bg = 'black' + +## Border color of an info message. +## Type: QssColor +# c.colors.messages.info.border = '#333333' + +## Foreground color of an info message. +## Type: QssColor +# c.colors.messages.info.fg = 'white' + +## Background color of a warning message. +## Type: QssColor +# c.colors.messages.warning.bg = 'darkorange' + +## Border color of a warning message. +## Type: QssColor +# c.colors.messages.warning.border = '#d47300' + +## Foreground color of a warning message. +## Type: QssColor +# c.colors.messages.warning.fg = 'white' + +## Background color for prompts. +## Type: QssColor +# c.colors.prompts.bg = '#444444' + +## Border used around UI elements in prompts. +## Type: String +# c.colors.prompts.border = '1px solid gray' + +## Foreground color for prompts. +## Type: QssColor +# c.colors.prompts.fg = 'white' + +## Background color for the selected item in filename prompts. +## Type: QssColor +# c.colors.prompts.selected.bg = 'grey' + +## Background color of the statusbar in caret mode. +## Type: QssColor +# c.colors.statusbar.caret.bg = 'purple' + +## Foreground color of the statusbar in caret mode. +## Type: QssColor +# c.colors.statusbar.caret.fg = 'white' + +## Background color of the statusbar in caret mode with a selection. +## Type: QssColor +# c.colors.statusbar.caret.selection.bg = '#a12dff' + +## Foreground color of the statusbar in caret mode with a selection. +## Type: QssColor +# c.colors.statusbar.caret.selection.fg = 'white' + +## Background color of the statusbar in command mode. +## Type: QssColor +# c.colors.statusbar.command.bg = 'black' + +## Foreground color of the statusbar in command mode. +## Type: QssColor +# c.colors.statusbar.command.fg = 'white' + +## Background color of the statusbar in private browsing + command mode. +## Type: QssColor +# c.colors.statusbar.command.private.bg = 'grey' + +## Foreground color of the statusbar in private browsing + command mode. +## Type: QssColor +# c.colors.statusbar.command.private.fg = 'white' + +## Background color of the statusbar in insert mode. +## Type: QssColor +# c.colors.statusbar.insert.bg = 'darkgreen' + +## Foreground color of the statusbar in insert mode. +## Type: QssColor +# c.colors.statusbar.insert.fg = 'white' + +## Background color of the statusbar. +## Type: QssColor +# c.colors.statusbar.normal.bg = 'black' + +## Foreground color of the statusbar. +## Type: QssColor +# c.colors.statusbar.normal.fg = 'white' + +## Background color of the statusbar in passthrough mode. +## Type: QssColor +# c.colors.statusbar.passthrough.bg = 'darkblue' + +## Foreground color of the statusbar in passthrough mode. +## Type: QssColor +# c.colors.statusbar.passthrough.fg = 'white' + +## Background color of the statusbar in private browsing mode. +## Type: QssColor +# c.colors.statusbar.private.bg = '#666666' + +## Foreground color of the statusbar in private browsing mode. +## Type: QssColor +# c.colors.statusbar.private.fg = 'white' + +## Background color of the progress bar. +## Type: QssColor +# c.colors.statusbar.progress.bg = 'white' + +## Foreground color of the URL in the statusbar on error. +## Type: QssColor +# c.colors.statusbar.url.error.fg = 'orange' + +## Default foreground color of the URL in the statusbar. +## Type: QssColor +# c.colors.statusbar.url.fg = 'white' + +## Foreground color of the URL in the statusbar for hovered links. +## Type: QssColor +# c.colors.statusbar.url.hover.fg = 'aqua' + +## Foreground color of the URL in the statusbar on successful load +## (http). +## Type: QssColor +# c.colors.statusbar.url.success.http.fg = 'white' + +## Foreground color of the URL in the statusbar on successful load +## (https). +## Type: QssColor +# c.colors.statusbar.url.success.https.fg = 'lime' + +## Foreground color of the URL in the statusbar when there's a warning. +## Type: QssColor +# c.colors.statusbar.url.warn.fg = 'yellow' + +## Background color of the tab bar. +## Type: QtColor +# c.colors.tabs.bar.bg = '#555555' + +## Background color of unselected even tabs. +## Type: QtColor +# c.colors.tabs.even.bg = 'darkgrey' + +## Foreground color of unselected even tabs. +## Type: QtColor +# c.colors.tabs.even.fg = 'white' + +## Color for the tab indicator on errors. +## Type: QtColor +# c.colors.tabs.indicator.error = '#ff0000' + +## Color gradient start for the tab indicator. +## Type: QtColor +# c.colors.tabs.indicator.start = '#0000aa' + +## Color gradient end for the tab indicator. +## Type: QtColor +# c.colors.tabs.indicator.stop = '#00aa00' + +## Color gradient interpolation system for the tab indicator. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +# c.colors.tabs.indicator.system = 'rgb' + +## Background color of unselected odd tabs. +## Type: QtColor +# c.colors.tabs.odd.bg = 'grey' + +## Foreground color of unselected odd tabs. +## Type: QtColor +# c.colors.tabs.odd.fg = 'white' + +## Background color of selected even tabs. +## Type: QtColor +# c.colors.tabs.selected.even.bg = 'black' + +## Foreground color of selected even tabs. +## Type: QtColor +# c.colors.tabs.selected.even.fg = 'white' + +## Background color of selected odd tabs. +## Type: QtColor +# c.colors.tabs.selected.odd.bg = 'black' + +## Foreground color of selected odd tabs. +## Type: QtColor +# c.colors.tabs.selected.odd.fg = 'white' + +## Background color for webpages if unset (or empty to use the theme's +## color). +## Type: QtColor +# c.colors.webpage.bg = 'white' + +## Number of commands to save in the command history. 0: no history / -1: +## unlimited +## Type: Int +# c.completion.cmd_history_max_items = 100 + +## Delay (in milliseconds) before updating completions after typing a +## character. +## Type: Int +# c.completion.delay = 0 + +## Height (in pixels or as percentage of the window) of the completion. +## Type: PercOrInt +# c.completion.height = '50%' + +## Minimum amount of characters needed to update completions. +## Type: Int +# c.completion.min_chars = 1 + +## Move on to the next part when there's only one possible completion +## left. +## Type: Bool +# c.completion.quick = True + +## Padding (in pixels) of the scrollbar handle in the completion window. +## Type: Int +# c.completion.scrollbar.padding = 2 + +## Width (in pixels) of the scrollbar in the completion window. +## Type: Int +# c.completion.scrollbar.width = 12 + +## When to show the autocompletion window. +## Type: String +## Valid values: +## - always: Whenever a completion is available. +## - auto: Whenever a completion is requested. +## - never: Never. +# c.completion.show = 'always' + +## Shrink the completion to be smaller than the configured size if there +## are no scrollbars. +## Type: Bool +# c.completion.shrink = False + +## Format of timestamps (e.g. for the history completion). +## Type: TimestampTemplate +# c.completion.timestamp_format = '%Y-%m-%d' + +## Execute the best-matching command on a partial match. +## Type: Bool +c.completion.use_best_match = True + +## Number of URLs to show in the web history. 0: no history / -1: +## unlimited +## Type: Int +# c.completion.web_history_max_items = -1 + +## Require a confirmation before quitting the application. +## Type: ConfirmQuit +## Valid values: +## - always: Always show a confirmation. +## - multiple-tabs: Show a confirmation if multiple tabs are opened. +## - downloads: Show a confirmation if downloads are running +## - never: Never show a confirmation. +# c.confirm_quit = ['never'] + +## Enable support for the HTML 5 web application cache feature. An +## application cache acts like an HTTP cache in some sense. For documents +## that use the application cache via JavaScript, the loader engine will +## first ask the application cache for the contents, before hitting the +## network. +## Type: Bool +# c.content.cache.appcache = True + +## Maximum number of pages to hold in the global memory page cache. The +## page cache allows for a nicer user experience when navigating forth or +## back to pages in the forward/back history, by pausing and resuming up +## to _n_ pages. For more information about the feature, please refer to: +## http://webkit.org/blog/427/webkit-page-cache-i-the-basics/ +## Type: Int +# c.content.cache.maximum_pages = 0 + +## Size (in bytes) of the HTTP network cache. Null to use the default +## value. With QtWebEngine, the maximum supported value is 2147483647 (~2 +## GB). +## Type: Int +# c.content.cache.size = None + +## Which cookies to accept. +## Type: String +## Valid values: +## - all: Accept all cookies. +## - no-3rdparty: Accept cookies from the same origin only. +## - no-unknown-3rdparty: Accept cookies from the same origin only, unless a cookie is already set for the domain. +## - never: Don't accept cookies at all. +# c.content.cookies.accept = 'no-3rdparty' + +## Store cookies. Note this option needs a restart with QtWebEngine on Qt +## < 5.9. +## Type: Bool +c.content.cookies.store = True + +## Default encoding to use for websites. The encoding must be a string +## describing an encoding such as _utf-8_, _iso-8859-1_, etc. +## Type: String +# c.content.default_encoding = 'iso-8859-1' + +## Enable extra tools for Web developers. This needs to be enabled for +## `:inspector` to work and also adds an _Inspect_ entry to the context +## menu. For QtWebEngine, see `--enable-webengine-inspector` in +## `qutebrowser --help` instead. +## Type: Bool +## c.content.developer_extras = True + +## Try to pre-fetch DNS entries to speed up browsing. +## Type: Bool +# c.content.dns_prefetch = True + +## Expand each subframe to its contents. This will flatten all the frames +## to become one scrollable page. +## Type: Bool +# c.content.frame_flattening = False + +## Allow websites to request geolocations. +## Type: BoolAsk +## Valid values: +## - true +## - false +## - ask +# c.content.geolocation = 'ask' + +## Value to send in the `Accept-Language` header. +## Type: String +# c.content.headers.accept_language = 'en-US,en' + +## Custom headers for qutebrowser HTTP requests. +## Type: Dict +# c.content.headers.custom = {} + +## Value to send in the `DNT` header. When this is set to true, +## qutebrowser asks websites to not track your identity. If set to null, +## the DNT header is not sent at all. +## Type: Bool +# c.content.headers.do_not_track = True + +## When to send the Referer header. The Referer header tells websites +## from which website you were coming from when visiting them. +## Type: String +## Valid values: +## - always: Always send the Referer. +## - never: Never send the Referer. This is not recommended, as some sites may break. +## - same-domain: Only send the Referer for the same domain. This will still protect your privacy, but shouldn't break any sites. +# c.content.headers.referer = 'same-domain' + +## User agent to send. Unset to send the default. +## Type: String +# c.content.headers.user_agent = None + +## Enable host blocking. +## Type: Bool +# c.content.host_blocking.enabled = True + +## List of URLs of lists which contain hosts to block. The file can be +## in one of the following formats: - An `/etc/hosts`-like file - One +## host per line - A zip-file of any of the above, with either only one +## file, or a file named `hosts` (with any extension). +## Type: List of Url +# c.content.host_blocking.lists = ['https://www.malwaredomainlist.com/hostslist/hosts.txt', 'http://someonewhocares.org/hosts/hosts', 'http://winhelp2002.mvps.org/hosts.zip', 'http://malwaredomains.lehigh.edu/files/justdomains.zip', 'https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext'] + +## List of domains that should always be loaded, despite being ad- +## blocked. Domains may contain * and ? wildcards and are otherwise +## required to exactly match the requested domain. Local domains are +## always exempt from hostblocking. +## Type: List of String +c.content.host_blocking.whitelist = ['piwik.org','next-episode.net','churchmilitant.com','churchmilitant.tv'] + +## Enable hyperlink auditing (``). +## Type: Bool +# c.content.hyperlink_auditing = False + +## Load images automatically in web pages. +## Type: Bool +# c.content.images = True + +## Show javascript alerts. +## Type: Bool +# c.content.javascript.alert = True + +## Allow JavaScript to read from or write to the clipboard. With +## QtWebEngine, writing the clipboard as response to a user interaction +## is always allowed. +## Type: Bool +# c.content.javascript.can_access_clipboard = False + +## Allow JavaScript to close tabs. +## Type: Bool +# c.content.javascript.can_close_tabs = False + +## Allow JavaScript to open new tabs without user interaction. +## Type: Bool +# c.content.javascript.can_open_tabs_automatically = False + +## Enable JavaScript. +## Type: Bool +c.content.javascript.enabled = True + +## Log levels to use for JavaScript console logging messages. When a +## JavaScript message with the level given in the dictionary key is +## logged, the corresponding dictionary value selects the qutebrowser +## logger to use. On QtWebKit, the "unknown" setting is always used. +## Type: Dict +# c.content.javascript.log = {'unknown': 'debug', 'info': 'debug', 'warning': 'debug', 'error': 'debug'} + +## Use the standard JavaScript modal dialog for `alert()` and +## `confirm()`. +## Type: Bool +# c.content.javascript.modal_dialog = False + +## Show javascript prompts. +## Type: Bool +# c.content.javascript.prompt = True + +## Allow locally loaded documents to access other local URLs. +## Type: Bool +# c.content.local_content_can_access_file_urls = True + +## Allow locally loaded documents to access remote URLs. +## Type: Bool +# c.content.local_content_can_access_remote_urls = False + +## Enable support for HTML 5 local storage and Web SQL. +## Type: Bool +# c.content.local_storage = True + +## Allow websites to record audio/video. +## Type: BoolAsk +## Valid values: +## - true +## - false +## - ask +# c.content.media_capture = 'ask' + +## Netrc-file for HTTP authentication. If unset, `~/.netrc` is used. +## Type: File +# c.content.netrc_file = None + +## Allow websites to show notifications. +## Type: BoolAsk +## Valid values: +## - true +## - false +## - ask +# c.content.notifications = 'ask' + +## Allow pdf.js to view PDF files in the browser. Note that the files can +## still be downloaded by clicking the download button in the pdf.js +## viewer. +## Type: Bool +# c.content.pdfjs = False + +## Enable plugins in Web pages. +## Type: Bool +# c.content.plugins = False vgg +c.content.plugins = True + +## Draw the background color and images also when the page is printed. +## Type: Bool +# c.content.print_element_backgrounds = True + +## Open new windows in private browsing mode which does not record +## visited pages. +## Type: Bool +# c.content.private_browsing = False + +## Proxy to use. In addition to the listed values, you can use a +## `socks://...` or `http://...` URL. +## Type: Proxy +## Valid values: +## - system: Use the system wide proxy. +## - none: Don't use any proxy +# c.content.proxy = 'system' + +## Send DNS requests over the configured proxy. +## Type: Bool +# c.content.proxy_dns_requests = True + +## Validate SSL handshakes. +## Type: BoolAsk +## Valid values: +## - true +## - false +## - ask +# c.content.ssl_strict = 'ask' + +## List of user stylesheet filenames to use. +## Type: List of File, or File +# c.content.user_stylesheets = [] + +## Enable WebGL. +## Type: Bool +# c.content.webgl = True + +## Limit fullscreen to the browser window (does not expand to fill the +## screen). +## Type: Bool +# c.content.windowed_fullscreen = False + +## Monitor load requests for cross-site scripting attempts. Suspicious +## scripts will be blocked and reported in the inspector's JavaScript +## console. Enabling this feature might have an impact on performance. +## Type: Bool +# c.content.xss_auditing = False + +## Directory to save downloads to. If unset, a sensible OS-specific +## default is used. +## Type: Directory +# c.downloads.location.directory = None + +## Prompt the user for the download location. If set to false, +## `downloads.location.directory` will be used. +## Type: Bool +# c.downloads.location.prompt = True + +## Remember the last used download directory. +## Type: Bool +# c.downloads.location.remember = True + +## What to display in the download filename input. +## Type: String +## Valid values: +## - path: Show only the download path. +## - filename: Show only download filename. +## - both: Show download path and filename. +# c.downloads.location.suggestion = 'path' + +## Default program used to open downloads. If null, the default internal +## handler is used. Any `{}` in the string will be expanded to the +## filename, else the filename will be appended. +## Type: String +# c.downloads.open_dispatcher = None + +## Where to show the downloaded files. +## Type: VerticalPosition +## Valid values: +## - top +## - bottom +# c.downloads.position = 'top' + +## Duration (in milliseconds) to wait before removing finished downloads. +## If set to -1, downloads are never removed. +## Type: Int +# c.downloads.remove_finished = -1 + +## Editor (and arguments) to use for the `open-editor` command. The +## following placeholders are defined: * `{file}`: Filename of the file +## to be edited. * `{line}`: Line in which the caret is found in the +## text. * `{column}`: Column in which the caret is found in the text. * +## `{line0}`: Same as `{line}`, but starting from index 0. * `{column0}`: +## Same as `{column}`, but starting from index 0. +## Type: ShellCommand +# c.editor.command = ['gvim', '-f', '{file}', '-c', 'normal {line}G{column0}l'] +c.editor.command = ["urxvt", "-title", "qutebrowserSratchpad", "-geometry", "86x24+40+60", "-e", "vim", "-f", "{}"] + +## Encoding to use for the editor. +## Type: Encoding +# c.editor.encoding = 'utf-8' + +## Font used in the completion categories. +## Type: Font +# c.fonts.completion.category = 'bold 10pt monospace' + +## Font used in the completion widget. +## Type: Font +# c.fonts.completion.entry = '10pt monospace' + +## Font used for the debugging console. +## Type: QtFont +# c.fonts.debug_console = '10pt monospace' + +## Font used for the downloadbar. +## Type: Font +# c.fonts.downloads = '10pt monospace' + +## Font used for the hints. +## Type: Font +c.fonts.hints = 'bold 8pt monospace' + +## Font used in the keyhint widget. +## Type: Font +# c.fonts.keyhint = '10pt monospace' + +## Font used for error messages. +## Type: Font +# c.fonts.messages.error = '10pt monospace' + +## Font used for info messages. +## Type: Font +# c.fonts.messages.info = '10pt monospace' + +## Font used for warning messages. +## Type: Font +# c.fonts.messages.warning = '10pt monospace' + +## Default monospace fonts. Whenever "monospace" is used in a font +## setting, it's replaced with the fonts listed here. +## Type: Font +# c.fonts.monospace = '"xos4 Terminus", Terminus, Monospace, "DejaVu Sans Mono", Monaco, "Bitstream Vera Sans Mono", "Andale Mono", "Courier New", Courier, "Liberation Mono", monospace, Fixed, Consolas, Terminal' + +## Font used for prompts. +## Type: Font +# c.fonts.prompts = '10pt sans-serif' + +## Font used in the statusbar. +## Type: Font +# c.fonts.statusbar = '10pt monospace' + +## Font used in the tab bar. +## Type: QtFont +# c.fonts.tabs = '10pt monospace' + +## Font family for cursive fonts. +## Type: FontFamily +# c.fonts.web.family.cursive = '' + +## Font family for fantasy fonts. +## Type: FontFamily +# c.fonts.web.family.fantasy = '' + +## Font family for fixed fonts. +## Type: FontFamily +# c.fonts.web.family.fixed = '' + +## Font family for sans-serif fonts. +## Type: FontFamily +# c.fonts.web.family.sans_serif = '' + +## Font family for serif fonts. +## Type: FontFamily +# c.fonts.web.family.serif = '' + +## Font family for standard fonts. +## Type: FontFamily +# c.fonts.web.family.standard = '' + +## Default font size (in pixels) for regular text. +## Type: Int +# c.fonts.web.size.default = 16 + +## Default font size (in pixels) for fixed-pitch text. +## Type: Int +# c.fonts.web.size.default_fixed = 13 + +## Hard minimum font size (in pixels). +## Type: Int +# c.fonts.web.size.minimum = 0 + +## Minimum logical font size (in pixels) that is applied when zooming +## out. +## Type: Int +# c.fonts.web.size.minimum_logical = 6 + +## When a hint can be automatically followed without pressing Enter. +## Type: String +## Valid values: +## - always: Auto-follow whenever there is only a single hint on a page. +## - unique-match: Auto-follow whenever there is a unique non-empty match in either the hint string (word mode) or filter (number mode). +## - full-match: Follow the hint when the user typed the whole hint (letter, word or number mode) or the element's text (only in number mode). +## - never: The user will always need to press Enter to follow a hint. +# c.hints.auto_follow = 'unique-match' + +## Duration (in milliseconds) to ignore normal-mode key bindings after a +## successful auto-follow. +## Type: Int +# c.hints.auto_follow_timeout = 0 + +## CSS border value for hints. +## Type: String +# c.hints.border = '1px solid #E3BE23' + +## Characters used for hint strings. +## Type: UniqueCharString +# c.hints.chars = 'asdfghjkl' + +## Dictionary file to be used by the word hints. +## Type: File +# c.hints.dictionary = '/usr/share/dict/words' + +## Which implementation to use to find elements to hint. +## Type: String +## Valid values: +## - javascript: Better but slower +## - python: Slightly worse but faster +# c.hints.find_implementation = 'python' + +## Hide unmatched hints in rapid mode. +## Type: Bool +# c.hints.hide_unmatched_rapid_hints = True + +## Minimum number of characters used for hint strings. +## Type: Int +# c.hints.min_chars = 1 + +## Mode to use for hints. +## Type: String +## Valid values: +## - number: Use numeric hints. (In this mode you can also type letters from the hinted element to filter and reduce the number of elements that are hinted.) +## - letter: Use the characters in the `hints.chars` setting. +## - word: Use hints words based on the html elements and the extra words. +c.hints.mode = 'number' + +## Comma-separated list of regular expressions to use for 'next' links. +## Type: List of Regex +# c.hints.next_regexes = ['\\bnext\\b', '\\bmore\\b', '\\bnewer\\b', '\\b[>→≫]\\b', '\\b(>>|»)\\b', '\\bcontinue\\b'] + +## Comma-separated list of regular expressions to use for 'prev' links. +## Type: List of Regex +# c.hints.prev_regexes = ['\\bprev(ious)?\\b', '\\bback\\b', '\\bolder\\b', '\\b[<←≪]\\b', '\\b(<<|«)\\b'] + +## Scatter hint key chains (like Vimium) or not (like dwb). Ignored for +## number hints. +## Type: Bool +# c.hints.scatter = True + +## Make characters in hint strings uppercase. +## Type: Bool +# c.hints.uppercase = False + +## Maximum time (in minutes) between two history items for them to be +## considered being from the same browsing session. Items with less time +## between them are grouped when being displayed in `:history`. Use -1 to +## disable separation. +## Type: Int +# c.history_gap_interval = 30 + +## Which unbound keys to forward to the webview in normal mode. +## Type: String +## Valid values: +## - all: Forward all unbound keys. +## - auto: Forward unbound non-alphanumeric keys. +## - none: Don't forward any keys. +# c.input.forward_unbound_keys = 'auto' + +## Enter insert mode if an editable element is clicked. +## Type: Bool +# c.input.insert_mode.auto_enter = True + +## Leave insert mode if a non-editable element is clicked. +## Type: Bool +# c.input.insert_mode.auto_leave = True + +## Automatically enter insert mode if an editable element is focused +## after loading the page. +## Type: Bool +# c.input.insert_mode.auto_load = False + +## Switch to insert mode when clicking flash and other plugins. +## Type: Bool +# c.input.insert_mode.plugins = False + +## Include hyperlinks in the keyboard focus chain when tabbing. +## Type: Bool +# c.input.links_included_in_focus_chain = True + +## Timeout (in milliseconds) for partially typed key bindings. If the +## current input forms only partial matches, the keystring will be +## cleared after this time. +## Type: Int +# c.input.partial_timeout = 5000 + +## Enable Opera-like mouse rocker gestures. This disables the context +## menu. +## Type: Bool +# c.input.rocker_gestures = False + +## Enable spatial navigation. Spatial navigation consists in the ability +## to navigate between focusable elements in a Web page, such as +## hyperlinks and form controls, by using Left, Right, Up and Down arrow +## keys. For example, if the user presses the Right key, heuristics +## determine whether there is an element he might be trying to reach +## towards the right and which element he probably wants. +## Type: Bool +# c.input.spatial_navigation = False + +## Keychains that shouldn't be shown in the keyhint dialog. Globs are +## supported, so `;*` will blacklist all keychains starting with `;`. Use +## `*` to disable keyhints. +## Type: List of String +# c.keyhint.blacklist = [] + +## Time (in milliseconds) from pressing a key to seeing the keyhint +## dialog. +## Type: Int +# c.keyhint.delay = 500 + +## Rounding radius (in pixels) for the edges of the keyhint dialog. +## Type: Int +# c.keyhint.radius = 6 + +## Duration (in milliseconds) to show messages in the statusbar for. Set +## to 0 to never clear messages. +## Type: Int +# c.messages.timeout = 2000 + +## How to open links in an existing instance if a new one is launched. +## This happens when e.g. opening a link from a terminal. See +## `new_instance_open_target_window` to customize in which window the +## link is opened in. +## Type: String +## Valid values: +## - tab: Open a new tab in the existing window and activate the window. +## - tab-bg: Open a new background tab in the existing window and activate the window. +## - tab-silent: Open a new tab in the existing window without activating the window. +## - tab-bg-silent: Open a new background tab in the existing window without activating the window. +## - window: Open in a new window. +# c.new_instance_open_target = 'tab' + +## Which window to choose when opening links as new tabs. When +## `new_instance_open_target` is not set to `window`, this is ignored. +## Type: String +## Valid values: +## - first-opened: Open new tabs in the first (oldest) opened window. +## - last-opened: Open new tabs in the last (newest) opened window. +## - last-focused: Open new tabs in the most recently focused window. +## - last-visible: Open new tabs in the most recently visible window. +# c.new_instance_open_target_window = 'last-focused' + +## Show a filebrowser in upload/download prompts. +## Type: Bool +# c.prompt.filebrowser = True + +## Rounding radius (in pixels) for the edges of prompts. +## Type: Int +# c.prompt.radius = 8 + +## Additional arguments to pass to Qt, without leading `--`. With +## QtWebEngine, some Chromium arguments (see +## https://peter.sh/experiments/chromium-command-line-switches/ for a +## list) will work. +## Type: List of String +# c.qt.args = [] + +## Force a Qt platform to use. This sets the `QT_QPA_PLATFORM` +## environment variable and is useful to force using the XCB plugin when +## running QtWebEngine on Wayland. +## Type: String +# c.qt.force_platform = None + +## Force software rendering for QtWebEngine. This is needed for +## QtWebEngine to work with Nouveau drivers. +## Type: Bool +# c.qt.force_software_rendering = False + +## Turn on Qt HighDPI scaling. This is equivalent to setting +## QT_AUTO_SCREEN_SCALE_FACTOR=1 in the environment. It's off by default +## as it can cause issues with some bitmap fonts. As an alternative to +## this, it's possible to set font sizes and the `zoom.default` setting. +## Type: Bool +# c.qt.highdpi = False + +## Show a scrollbar. +## Type: Bool +# c.scrolling.bar = False + +## Enable smooth scrolling for web pages. Note smooth scrolling does not +## work with the `:scroll-px` command. +## Type: Bool +# c.scrolling.smooth = False + +## When to find text on a page case-insensitively. +## Type: String +## Valid values: +## - always: Search case-insensitively. +## - never: Search case-sensitively. +## - smart: Search case-sensitively if there are capital characters. +# c.search.ignore_case = 'smart' + +## Find text on a page incrementally, renewing the search for each typed +## character. +## Type: Bool +# c.search.incremental = True + +## Name of the session to save by default. If this is set to null, the +## session which was last loaded is saved. +## Type: SessionName +# c.session.default_name = None + +## Load a restored tab as soon as it takes focus. +## Type: Bool +# c.session.lazy_restore = False + +## Languages to use for spell checking. You can check for available +## languages and install dictionaries using scripts/dictcli.py. Run the +## script with -h/--help for instructions. +## Type: List of String +## Valid values: +## - af-ZA: Afrikaans (South Africa) +## - bg-BG: Bulgarian (Bulgaria) +## - ca-ES: Catalan (Spain) +## - cs-CZ: Czech (Czech Republic) +## - da-DK: Danish (Denmark) +## - de-DE: German (Germany) +## - el-GR: Greek (Greece) +## - en-AU: English (Australia) +## - en-CA: English (Canada) +## - en-GB: English (United Kingdom) +## - en-US: English (United States) +## - es-ES: Spanish (Spain) +## - et-EE: Estonian (Estonia) +## - fa-IR: Farsi (Iran) +## - fo-FO: Faroese (Faroe Islands) +## - fr-FR: French (France) +## - he-IL: Hebrew (Israel) +## - hi-IN: Hindi (India) +## - hr-HR: Croatian (Croatia) +## - hu-HU: Hungarian (Hungary) +## - id-ID: Indonesian (Indonesia) +## - it-IT: Italian (Italy) +## - ko: Korean +## - lt-LT: Lithuanian (Lithuania) +## - lv-LV: Latvian (Latvia) +## - nb-NO: Norwegian (Norway) +## - nl-NL: Dutch (Netherlands) +## - pl-PL: Polish (Poland) +## - pt-BR: Portuguese (Brazil) +## - pt-PT: Portuguese (Portugal) +## - ro-RO: Romanian (Romania) +## - ru-RU: Russian (Russia) +## - sh: Serbo-Croatian +## - sk-SK: Slovak (Slovakia) +## - sl-SI: Slovenian (Slovenia) +## - sq: Albanian +## - sr: Serbian +## - sv-SE: Swedish (Sweden) +## - ta-IN: Tamil (India) +## - tg-TG: Tajik (Tajikistan) +## - tr-TR: Turkish (Turkey) +## - uk-UA: Ukrainian (Ukraine) +## - vi-VN: Vietnamese (Viet Nam) +# c.spellcheck.languages = [] + +## Hide the statusbar unless a message is shown. +## Type: Bool +# c.statusbar.hide = False + +## Padding (in pixels) for the statusbar. +## Type: Padding +# c.statusbar.padding = {'top': 1, 'bottom': 1, 'left': 0, 'right': 0} + +## Position of the status bar. +## Type: VerticalPosition +## Valid values: +## - top +## - bottom +# c.statusbar.position = 'bottom' + +## List of widgets displayed in the statusbar. +## Type: List of String +## Valid values: +## - url: Current page URL. +## - scroll: Percentage of the current page position like `10%`. +## - scroll_raw: Raw percentage of the current page position like `10`. +## - history: Display an arrow when possible to go back/forward in history. +## - tabs: Current active tab, e.g. `2`. +## - keypress: Display pressed keys when composing a vi command. +## - progress: Progress bar for the current page loading. +# c.statusbar.widgets = ['keypress', 'url', 'scroll', 'history', 'tabs', 'progress'] + +## Open new tabs (middleclick/ctrl+click) in the background. +## Type: Bool +# c.tabs.background = False + +## Mouse button with which to close tabs. +## Type: String +## Valid values: +## - right: Close tabs on right-click. +## - middle: Close tabs on middle-click. +## - none: Don't close tabs using the mouse. +# c.tabs.close_mouse_button = 'middle' + +## How to behave when the close mouse button is pressed on the tab bar. +## Type: String +## Valid values: +## - new-tab: Open a new tab. +## - close-current: Close the current tab. +## - close-last: Close the last tab. +## - ignore: Don't do anything. +# c.tabs.close_mouse_button_on_bar = 'new-tab' + +## Scaling factor for favicons in the tab bar. The tab size is unchanged, +## so big favicons also require extra `tabs.padding`. +## Type: Float +# c.tabs.favicons.scale = 1.0 + +## Show favicons in the tab bar. +## Type: Bool +# c.tabs.favicons.show = True + +## Padding (in pixels) for tab indicators. +## Type: Padding +# c.tabs.indicator.padding = {'top': 2, 'bottom': 2, 'left': 0, 'right': 4} + +## Width (in pixels) of the progress indicator (0 to disable). +## Type: Int +# c.tabs.indicator.width = 3 + +## How to behave when the last tab is closed. +## Type: String +## Valid values: +## - ignore: Don't do anything. +## - blank: Load a blank page. +## - startpage: Load the start page. +## - default-page: Load the default page. +## - close: Close the window. +# c.tabs.last_close = 'ignore' + +## When switching tabs, what input mode is applied. +## Type: String +## Valid values: +## - persist: Retain the current mode. +## - restore: Restore previously saved mode. +## - normal: Always revert to normal mode. +# c.tabs.mode_on_change = 'normal' + +## Switch between tabs using the mouse wheel. +## Type: Bool +# c.tabs.mousewheel_switching = True + +## Position of new tabs opened from another tab. +## Type: NewTabPosition +## Valid values: +## - prev: Before the current tab. +## - next: After the current tab. +## - first: At the beginning. +## - last: At the end. +# c.tabs.new_position.related = 'next' + +## Position of new tabs which aren't opened from another tab. +## Type: NewTabPosition +## Valid values: +## - prev: Before the current tab. +## - next: After the current tab. +## - first: At the beginning. +## - last: At the end. +# c.tabs.new_position.unrelated = 'last' + +## Padding (in pixels) around text for tabs. +## Type: Padding +# c.tabs.padding = {'top': 0, 'bottom': 0, 'left': 5, 'right': 5} + +## Shrink pinned tabs down to their contents. +## Type: Bool +# c.tabs.pinned.shrink = True + +## Position of the tab bar. +## Type: Position +## Valid values: +## - top +## - bottom +## - left +## - right +# c.tabs.position = 'top' + +## Which tab to select when the focused tab is removed. +## Type: SelectOnRemove +## Valid values: +## - prev: Select the tab which came before the closed one (left in horizontal, above in vertical). +## - next: Select the tab which came after the closed one (right in horizontal, below in vertical). +## - last-used: Select the previously selected tab. +# c.tabs.select_on_remove = 'next' + +## When to show the tab bar. +## Type: String +## Valid values: +## - always: Always show the tab bar. +## - never: Always hide the tab bar. +## - multiple: Hide the tab bar if only one tab is open. +## - switching: Show the tab bar when switching tabs. +# c.tabs.show = 'always' + +## Duration (in milliseconds) to show the tab bar before hiding it when +## tabs.show is set to 'switching'. +## Type: Int +# c.tabs.show_switching_delay = 800 + +## Open a new window for every tab. +## Type: Bool +# c.tabs.tabs_are_windows = False + +## Alignment of the text inside of tabs. +## Type: TextAlignment +## Valid values: +## - left +## - right +## - center +# c.tabs.title.alignment = 'left' + +## Format to use for the tab title. The following placeholders are +## defined: * `{perc}`: Percentage as a string like `[10%]`. * +## `{perc_raw}`: Raw percentage, e.g. `10`. * `{title}`: Title of the +## current web page. * `{title_sep}`: The string ` - ` if a title is set, +## empty otherwise. * `{index}`: Index of this tab. * `{id}`: Internal +## tab ID of this tab. * `{scroll_pos}`: Page scroll position. * +## `{host}`: Host of the current web page. * `{backend}`: Either +## ''webkit'' or ''webengine'' * `{private}`: Indicates when private mode +## is enabled. * `{current_url}`: URL of the current web page. * +## `{protocol}`: Protocol (http/https/...) of the current web page. +## Type: FormatString +# c.tabs.title.format = '{index}: {title}' + +## Format to use for the tab title for pinned tabs. The same placeholders +## like for `tabs.title.format` are defined. +## Type: FormatString +# c.tabs.title.format_pinned = '{index}' + +## Width (in pixels or as percentage of the window) of the tab bar if +## it's vertical. +## Type: PercOrInt +# c.tabs.width = '20%' + +## Wrap when changing tabs. +## Type: Bool +# c.tabs.wrap = True + +## What search to start when something else than a URL is entered. +## Type: String +## Valid values: +## - naive: Use simple/naive check. +## - dns: Use DNS requests (might be slow!). +## - never: Never search automatically. +# c.url.auto_search = 'naive' + +## Page to open if :open -t/-b/-w is used without URL. Use `about:blank` +## for a blank page. +## Type: FuzzyUrl +# c.url.default_page = 'https://start.duckduckgo.com/' + +## URL segments where `:navigate increment/decrement` will search for a +## number. +## Type: FlagList +## Valid values: +## - host +## - port +## - path +## - query +## - anchor +# c.url.incdec_segments = ['path', 'query'] + +## Search engines which can be used via the address bar. Maps a search +## engine name (such as `DEFAULT`, or `ddg`) to a URL with a `{}` +## placeholder. The placeholder will be replaced by the search term, use +## `{{` and `}}` for literal `{`/`}` signs. The search engine named +## `DEFAULT` is used when `url.auto_search` is turned on and something +## else than a URL was entered to be opened. Other search engines can be +## used by prepending the search engine name to the search term, e.g. +## `:open google qutebrowser`. +## Type: Dict + +c.url.searchengines = { 'DEFAULT':'https://duckduckgo.com/?q={}', 'aw':'https://wiki.archlinux.org/?q={}', 'g':'https://www.google.com/?q={}'} + +## Page(s) to open at the start. +## Type: List of FuzzyUrl, or FuzzyUrl +# c.url.start_pages = ['https://start.duckduckgo.com'] + +## URL parameters to strip with `:yank url`. +## Type: List of String +# c.url.yank_ignored_parameters = ['ref', 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'] + +## Hide the window decoration when using wayland. +## Type: Bool +# c.window.hide_wayland_decoration = False + +## Format to use for the window title. The same placeholders like for +## `tabs.title.format` are defined. +## Type: FormatString +# c.window.title_format = '{perc}{title}{title_sep}qutebrowser' + +## Default zoom level. +## Type: Perc +# c.zoom.default = '100%' + +## Available zoom levels. +## Type: List of Perc +# c.zoom.levels = ['25%', '33%', '50%', '67%', '75%', '90%', '100%', '110%', '125%', '150%', '175%', '200%', '250%', '300%', '400%', '500%'] + +## Number of zoom increments to divide the mouse wheel movements to. +## Type: Int +# c.zoom.mouse_divider = 512 + +## Apply the zoom factor on a frame only to the text or to all content. +## Type: Bool +# c.zoom.text_only = False + +## Bindings for normal mode +config.bind(',c', 'hint links spawn mpv --ytdl --ytdl-raw-options=username="v.graffagnino@btinternet.com",password="N9\Ch0n\H@n9" --cookies-file=~/.local/share/qutebrowser/webengine/Cookies --ytdl-raw-options=username=v\.graffagnino\@btinternet\.com,password=N9\\Ch0n\\H\@n9 {hint-url}') +config.bind(',m', 'hint links spawn mpv --ytdl {hint-url} --load-unsafe-playlists') +config.bind('m', 'hint links spawn mpv --ytdl -slang=en {hint-url} --load-unsafe-playlists') +#config.bind('m', 'spawn umpv {url}') +config.bind(',M', 'hint links spawn umpv {hint-url}') +config.bind(',t', 'hint links spawn transmission-remote --add {hint-url}') +config.bind(',y', 'hint links spawn /usr/bin/ts youtube-dl {hint-url}') +config.bind(',Y', 'hint links spawn /usr/bin/urxvt -e mpsyt dlurl {hint-url}') +config.bind(',q', 'hint links spawn echo "mpsyt dlurl {hint-url}" >> ~/ytdl.list') +# config.bind("'", 'enter-mode jump_mark') +# config.bind('+', 'zoom-in') +# config.bind('-', 'zoom-out') +# config.bind('.', 'repeat-command') +# config.bind('/', 'set-cmd-text /') +# config.bind(':', 'set-cmd-text :') +# config.bind(';I', 'hint images tab') +# config.bind(';O', 'hint links fill :open -t -r {hint-url}') +# config.bind(';R', 'hint --rapid links window') +# config.bind(';Y', 'hint links yank-primary') +# config.bind(';b', 'hint all tab-bg') +# config.bind(';d', 'hint links download') +# config.bind(';f', 'hint all tab-fg') +# config.bind(';h', 'hint all hover') +# config.bind(';i', 'hint images') +# config.bind(';o', 'hint links fill :open {hint-url}') +# config.bind(';r', 'hint --rapid links tab-bg') +# config.bind(';t', 'hint inputs') +# config.bind(';y', 'hint links yank') +# config.bind('', 'tab-focus 1') +# config.bind('', 'tab-focus 2') +# config.bind('', 'tab-focus 3') +# config.bind('', 'tab-focus 4') +# config.bind('', 'tab-focus 5') +# config.bind('', 'tab-focus 6') +# config.bind('', 'tab-focus 7') +# config.bind('', 'tab-focus 8') +# config.bind('', 'tab-focus -1') +# config.bind('', 'navigate increment') +# config.bind('', 'print') +# config.bind('', 'scroll-page 0 -1') +# config.bind('', 'scroll-page 0 0.5') +# config.bind('', 'reload -f') +# config.bind('', 'scroll-page 0 1') +# config.bind('', 'open -w') +# config.bind('', 'tab-next') +# config.bind('', 'tab-prev') +# config.bind('', 'quit') +# config.bind('', 'follow-selected -t') +# config.bind('', 'open -p') +# config.bind('', 'undo') +# config.bind('', 'close') +# config.bind('', 'open -t') +# config.bind('', 'tab-focus last') +# config.bind('', 'scroll-page 0 -0.5') +# config.bind('', 'enter-mode passthrough') +# config.bind('', 'tab-close') +# config.bind('', 'navigate decrement') +# config.bind('', 'tab-focus last') +# config.bind('', 'home') +# config.bind('', 'tab-pin') +# config.bind('', 'stop') +# config.bind('', 'clear-keychain ;; search ;; fullscreen --leave') +# config.bind('', 'fullscreen') +# config.bind('', 'reload') +# config.bind('', 'follow-selected') +# config.bind('', 'back') +# config.bind('', 'forward') +# config.bind('=', 'zoom') +# config.bind('?', 'set-cmd-text ?') +# config.bind('@', 'run-macro') +# config.bind('B', 'set-cmd-text -s :quickmark-load -t') +# config.bind('D', 'tab-close -o') +# config.bind('F', 'hint all tab') +# config.bind('G', 'scroll-to-perc') +# config.bind('H', 'back') +config.bind('J', 'tab-prev') +config.bind('K', 'tab-next') +# config.bind('L', 'forward') +# config.bind('M', 'bookmark-add') +# config.bind('N', 'search-prev') +# config.bind('O', 'set-cmd-text -s :open -t') +# config.bind('PP', 'open -t -- {primary}') +# config.bind('Pp', 'open -t -- {clipboard}') +# config.bind('R', 'reload -f') +# config.bind('Sb', 'open qute://bookmarks#bookmarks') +# config.bind('Sh', 'open qute://history') +# config.bind('Sq', 'open qute://bookmarks') +# config.bind('Ss', 'open qute://settings') +# config.bind('T', 'tab-focus') +# config.bind('ZQ', 'quit') +# config.bind('ZZ', 'quit --save') +# config.bind('[[', 'navigate prev') +# config.bind(']]', 'navigate next') +# config.bind('`', 'enter-mode set_mark') +# config.bind('ad', 'download-cancel') +# config.bind('b', 'set-cmd-text -s :quickmark-load') +# config.bind('cd', 'download-clear') +# config.bind('co', 'tab-only') +# config.bind('d', 'tab-close') +# config.bind('f', 'hint') +# config.bind('g$', 'tab-focus -1') +# config.bind('g0', 'tab-focus 1') +# config.bind('gB', 'set-cmd-text -s :bookmark-load -t') +# config.bind('gC', 'tab-clone') +# config.bind('gO', 'set-cmd-text :open -t -r {url:pretty}') +# config.bind('gU', 'navigate up -t') +# config.bind('g^', 'tab-focus 1') +# config.bind('ga', 'open -t') +# config.bind('gb', 'set-cmd-text -s :bookmark-load') +config.bind('gd', 'download') +config.bind('gf', 'view-source') +# config.bind('gg', 'scroll-to-perc 0') +# config.bind('gl', 'tab-move -') +# config.bind('gm', 'tab-move') +# config.bind('go', 'set-cmd-text :open {url:pretty}') +# config.bind('gr', 'tab-move +') +# config.bind('gt', 'set-cmd-text -s :buffer') +# config.bind('gu', 'navigate up') +# config.bind('h', 'scroll left') +# config.bind('i', 'enter-mode insert') +# config.bind('j', 'scroll down') +# config.bind('k', 'scroll up') +# config.bind('l', 'scroll right') +# config.bind('m', 'quickmark-save') +# config.bind('n', 'search-next') +# config.bind('o', 'set-cmd-text -s :open') +# config.bind('pP', 'open -- {primary}') +# config.bind('pp', 'open -- {clipboard}') +# config.bind('q', 'record-macro') +# config.bind('r', 'reload') +# config.bind('sf', 'save') +# config.bind('sk', 'set-cmd-text -s :bind') +# config.bind('sl', 'set-cmd-text -s :set -t') +# config.bind('ss', 'set-cmd-text -s :set') +# config.bind('tPH', 'config-cycle -p -u *://*.{url:host}/* content.plugins ;; reload') +# config.bind('tPh', 'config-cycle -p -u *://{url:host}/* content.plugins ;; reload') +# config.bind('tPu', 'config-cycle -p -u {url} content.plugins ;; reload') +config.bind('tSH', 'config-cycle -p -u *://*.{url:host}/* content.javascript.enabled ;; reload') +config.bind('tSh', 'config-cycle -p -u *://{url:host}/* content.javascript.enabled ;; reload') +config.bind('tSu', 'config-cycle -p -u {url} content.javascript.enabled ;; reload') +# config.bind('th', 'back -t') +# config.bind('tl', 'forward -t') +# config.bind('tpH', 'config-cycle -p -t -u *://*.{url:host}/* content.plugins ;; reload') +# config.bind('tph', 'config-cycle -p -t -u *://{url:host}/* content.plugins ;; reload') +# config.bind('tpu', 'config-cycle -p -t -u {url} content.plugins ;; reload') +# config.bind('tsH', 'config-cycle -p -t -u *://*.{url:host}/* content.javascript.enabled ;; reload') +# config.bind('tsh', 'config-cycle -p -t -u *://{url:host}/* content.javascript.enabled ;; reload') +# config.bind('tsu', 'config-cycle -p -t -u {url} content.javascript.enabled ;; reload') +# config.bind('u', 'undo') +# config.bind('v', 'enter-mode caret') +# config.bind('wB', 'set-cmd-text -s :bookmark-load -w') +# config.bind('wO', 'set-cmd-text :open -w {url:pretty}') +# config.bind('wP', 'open -w -- {primary}') +# config.bind('wb', 'set-cmd-text -s :quickmark-load -w') +# config.bind('wf', 'hint all window') +# config.bind('wh', 'back -w') +# config.bind('wi', 'inspector') +# config.bind('wl', 'forward -w') +# config.bind('wo', 'set-cmd-text -s :open -w') +# config.bind('wp', 'open -w -- {clipboard}') +# config.bind('xO', 'set-cmd-text :open -b -r {url:pretty}') +# config.bind('xo', 'set-cmd-text -s :open -b') +# config.bind('yD', 'yank domain -s') +# config.bind('yP', 'yank pretty-url -s') +# config.bind('yT', 'yank title -s') +# config.bind('yY', 'yank -s') +# config.bind('yd', 'yank domain') +# config.bind('yp', 'yank pretty-url') +# config.bind('yt', 'yank title') +# config.bind('yy', 'yank') +# config.bind('{{', 'navigate prev -t') +# config.bind('}}', 'navigate next -t') + +## Bindings for caret mode +# config.bind('$', 'move-to-end-of-line', mode='caret') +# config.bind('0', 'move-to-start-of-line', mode='caret') +# config.bind('', 'drop-selection', mode='caret') +# config.bind('', 'leave-mode', mode='caret') +# config.bind('', 'yank selection', mode='caret') +# config.bind('', 'toggle-selection', mode='caret') +# config.bind('G', 'move-to-end-of-document', mode='caret') +# config.bind('H', 'scroll left', mode='caret') +# config.bind('J', 'scroll down', mode='caret') +# config.bind('K', 'scroll up', mode='caret') +# config.bind('L', 'scroll right', mode='caret') +# config.bind('Y', 'yank selection -s', mode='caret') +# config.bind('[', 'move-to-start-of-prev-block', mode='caret') +# config.bind(']', 'move-to-start-of-next-block', mode='caret') +# config.bind('b', 'move-to-prev-word', mode='caret') +# config.bind('c', 'enter-mode normal', mode='caret') +# config.bind('e', 'move-to-end-of-word', mode='caret') +# config.bind('gg', 'move-to-start-of-document', mode='caret') +# config.bind('h', 'move-to-prev-char', mode='caret') +# config.bind('j', 'move-to-next-line', mode='caret') +# config.bind('k', 'move-to-prev-line', mode='caret') +# config.bind('l', 'move-to-next-char', mode='caret') +# config.bind('v', 'toggle-selection', mode='caret') +# config.bind('w', 'move-to-next-word', mode='caret') +# config.bind('y', 'yank selection', mode='caret') +# config.bind('{', 'move-to-end-of-prev-block', mode='caret') +# config.bind('}', 'move-to-end-of-next-block', mode='caret') + +## Bindings for command mode +# config.bind('', 'rl-backward-word', mode='command') +# config.bind('', 'rl-backward-kill-word', mode='command') +# config.bind('', 'rl-kill-word', mode='command') +# config.bind('', 'rl-forward-word', mode='command') +# config.bind('', 'rl-delete-char', mode='command') +# config.bind('', 'rl-beginning-of-line', mode='command') +# config.bind('', 'rl-backward-char', mode='command') +# config.bind('', 'completion-item-yank', mode='command') +# config.bind('', 'completion-item-del', mode='command') +# config.bind('', 'rl-end-of-line', mode='command') +# config.bind('', 'rl-forward-char', mode='command') +# config.bind('', 'rl-backward-delete-char', mode='command') +# config.bind('', 'rl-kill-line', mode='command') +# config.bind('', 'command-history-next', mode='command') +# config.bind('', 'command-history-prev', mode='command') +# config.bind('', 'command-accept --rapid', mode='command') +# config.bind('', 'completion-item-yank --sel', mode='command') +# config.bind('', 'completion-item-focus prev-category', mode='command') +# config.bind('', 'completion-item-focus next-category', mode='command') +# config.bind('', 'rl-unix-line-discard', mode='command') +# config.bind('', 'rl-unix-word-rubout', mode='command') +# config.bind('', 'rl-yank', mode='command') +# config.bind('', 'completion-item-focus --history next', mode='command') +# config.bind('', 'leave-mode', mode='command') +# config.bind('', 'command-accept', mode='command') +# config.bind('', 'completion-item-del', mode='command') +# config.bind('', 'completion-item-focus prev', mode='command') +# config.bind('', 'completion-item-focus next', mode='command') +# config.bind('', 'completion-item-focus --history prev', mode='command') + +## Bindings for hint mode +# config.bind('', 'hint all tab-bg', mode='hint') +# config.bind('', 'hint links', mode='hint') +# config.bind('', 'hint --rapid links tab-bg', mode='hint') +# config.bind('', 'leave-mode', mode='hint') +# config.bind('', 'follow-hint', mode='hint') + +## Bindings for insert mode +# config.bind('', 'open-editor', mode='insert') +# config.bind('', 'leave-mode', mode='insert') +# config.bind('', 'insert-text {primary}', mode='insert') +config.bind('', 'spawn --userscript qute-keepass -p ~/Documents/20151120.kdbx', mode='insert') + +## Bindings for passthrough mode +# config.bind('', 'leave-mode', mode='passthrough') + +## Bindings for prompt mode +# config.bind('', 'rl-backward-word', mode='prompt') +# config.bind('', 'rl-backward-kill-word', mode='prompt') +# config.bind('', 'rl-kill-word', mode='prompt') +# config.bind('', 'rl-forward-word', mode='prompt') +# config.bind('', 'prompt-yank --sel', mode='prompt') +# config.bind('', 'prompt-yank', mode='prompt') +# config.bind('', 'rl-delete-char', mode='prompt') +# config.bind('', 'rl-beginning-of-line', mode='prompt') +# config.bind('', 'rl-backward-char', mode='prompt') +# config.bind('', 'rl-end-of-line', mode='prompt') +# config.bind('', 'rl-forward-char', mode='prompt') +# config.bind('', 'rl-backward-delete-char', mode='prompt') +# config.bind('', 'rl-kill-line', mode='prompt') +# config.bind('', 'rl-unix-line-discard', mode='prompt') +# config.bind('', 'rl-unix-word-rubout', mode='prompt') +# config.bind('', 'prompt-open-download', mode='prompt') +# config.bind('', 'rl-yank', mode='prompt') +# config.bind('', 'prompt-item-focus next', mode='prompt') +# config.bind('', 'leave-mode', mode='prompt') +# config.bind('', 'prompt-accept', mode='prompt') +# config.bind('', 'prompt-item-focus prev', mode='prompt') +# config.bind('', 'prompt-item-focus next', mode='prompt') +# config.bind('', 'prompt-item-focus prev', mode='prompt') + +## Bindings for register mode +# config.bind('', 'leave-mode', mode='register') + +## Bindings for yesno mode +# config.bind('', 'prompt-yank --sel', mode='yesno') +# config.bind('', 'prompt-yank', mode='yesno') +# config.bind('', 'leave-mode', mode='yesno') +# config.bind('', 'prompt-accept', mode='yesno') +# config.bind('n', 'prompt-accept no', mode='yesno') +# config.bind('y', 'prompt-accept yes', mode='yesno') +config.source('nord-qutebrowser.py') diff --git a/.config/qutebrowser/jupyter-profile/config/bookmarks/urls b/.config/qutebrowser/jupyter-profile/config/bookmarks/urls new file mode 100644 index 0000000..e69de29 diff --git a/.config/qutebrowser/jupyter-profile/config/quickmarks b/.config/qutebrowser/jupyter-profile/config/quickmarks new file mode 100644 index 0000000..e69de29 diff --git a/.config/qutebrowser/jupyter-profile/keys.conf b/.config/qutebrowser/jupyter-profile/keys.conf new file mode 100755 index 0000000..06fc600 --- /dev/null +++ b/.config/qutebrowser/jupyter-profile/keys.conf @@ -0,0 +1,709 @@ +# vim: ft=conf +# +# In this config file, qutebrowser's key bindings are configured. +# The format looks like this: +# +# [keymode] +# +# command +# keychain +# keychain2 +# ... +# +# All blank lines and lines starting with '#' are ignored. +# Inline-comments are not permitted. +# +# keymode is a comma separated list of modes in which the key binding should be +# active. If keymode starts with !, the key binding is active in all modes +# except the listed modes. +# +# For special keys (can't be part of a keychain), enclose them in `<`...`>`. +# For modifiers, you can use either `-` or `+` as delimiters, and these names: +# +# * Control: `Control`, `Ctrl` +# * Meta: `Meta`, `Windows`, `Mod4` +# * Alt: `Alt`, `Mod1` +# * Shift: `Shift` +# +# For simple keys (no `<>`-signs), a capital letter means the key is pressed +# with Shift. For special keys (with `<>`-signs), you need to explicitly add +# `Shift-` to match a key pressed with shift. +# +# Note that default keybindings are always bound, and need to be explicitly +# unbound if you wish to remove them: +# +# +# keychain +# keychain2 +# ... + +[!normal] + +leave-mode + + + +[normal] +# Keybindings for normal mode. + +clear-keychain ;; search ;; fullscreen --leave + + + +set-cmd-text -s :open + o + +set-cmd-text :open {url:pretty} + go + +set-cmd-text -s :open -t + O + +set-cmd-text :open -t -i {url:pretty} + gO + +set-cmd-text -s :open -b + xo + +set-cmd-text :open -b -i {url:pretty} + xO + +set-cmd-text -s :open -w + wo + +set-cmd-text :open -w {url:pretty} + wO + +set-cmd-text / + / + +set-cmd-text ? + ? + +set-cmd-text : + : + +open -t + ga + + +open -w + + +tab-close + d + + +tab-close -o + D + +tab-only + co + +tab-focus + T + +tab-move + gm + +tab-move - + gl + +tab-move + + gr + +tab-next + J + + +tab-prev + K + + +tab-clone + gC + +reload + r + + +reload -f + R + + +back + H + + +back -t + th + +back -w + wh + +forward + L + + +forward -t + tl + +forward -w + wl + +fullscreen + + +hint + f + +hint all tab + F + +hint all window + wf + +hint all tab-bg + ;b + +hint all tab-fg + ;f + +hint all hover + ;h + +hint images + ;i + +hint images tab + ;I + +hint links fill :open {hint-url} + ;o + +hint links fill :open -t -i {hint-url} + ;O + +hint links yank + ;y + +hint links yank-primary + ;Y + +hint --rapid links tab-bg + ;r + +hint --rapid links window + ;R + +hint links download + ;d + +hint inputs + ;t + +scroll left + h + +scroll down + j + +scroll up + k + +scroll right + l + +undo + u + + +scroll-perc 0 + gg + +scroll-perc + G + +search-next + n + +search-prev + N + +enter-mode insert + i + +enter-mode caret + v + +enter-mode set_mark + ` + +enter-mode jump_mark + ' + +yank + yy + +yank -s + yY + +yank title + yt + +yank title -s + yT + +yank domain + yd + +yank domain -s + yD + +yank pretty-url + yp + +yank pretty-url -s + yP + +open -- {clipboard} + pp + +open -- {primary} + pP + +open -t -- {clipboard} + Pp + +open -t -- {primary} + PP + +open -w -- {clipboard} + wp + +open -w -- {primary} + wP + +set-cmd-text -s :quickmark-load + b + +set-cmd-text -s :quickmark-load -t + B + +set-cmd-text -s :quickmark-load -w + wb + +set-cmd-text -s :bookmark-load + gb + +set-cmd-text -s :bookmark-load -t + gB + +set-cmd-text -s :bookmark-load -w + wB + +save + sf + +set-cmd-text -s :set + ss + +set-cmd-text -s :set -t + sl + +set-cmd-text -s :bind + sk + +zoom-out + - + +zoom-in + + + +zoom + = + +navigate prev + [[ + +navigate next + ]] + +navigate prev -t + {{ + +navigate next -t + }} + +navigate up + gu + +navigate up -t + gU + +navigate increment + + +navigate decrement + + +inspector + wi + +download + gd + +download-cancel + ad + +download-clear + cd + +view-source + gf + +set-cmd-text -s :buffer + gt + +tab-focus last + + +enter-mode passthrough + + +quit + + +scroll-page 0 1 + + +scroll-page 0 -1 + + +scroll-page 0 0.5 + + +scroll-page 0 -0.5 + + +tab-focus 1 + + +tab-focus 2 + + +tab-focus 3 + + +tab-focus 4 + + +tab-focus 5 + + +tab-focus 6 + + +tab-focus 7 + + +tab-focus 8 + + +tab-focus 9 + + +home + + +stop + + +print + + +open qute:settings + Ss + +follow-selected + + + + + + + +follow-selected -t + + + +repeat-command + . + +record-macro + q + +run-macro + @ + +spawn mpv {url} + mpv + m + +hint links spawn umpv {hint-urls} + MPV + +hint links spawn mpv {hint-url} + M + +spawn tsp-ytdl {hint-url} + ;M + +wq + ZZ + +tab-focus -1 + g$ + +tab-pin + + +[insert] +# Keybindings for insert mode. +# Since normal keypresses are passed through, only special keys are +# supported in this mode. +# Useful hidden commands to map in this section: +# * `open-editor`: Open a texteditor with the focused field. +# * `paste-primary`: Paste primary selection at cursor position. + +open-editor + + +insert-text {primary} + + +[hint] +# Keybindings for hint mode. +# Since normal keypresses are passed through, only special keys are +# supported in this mode. +# Useful hidden commands to map in this section: +# * `follow-hint`: Follow the currently selected hint. + +follow-hint + + + + + + + +hint --rapid links tab-bg + + +hint links + + +hint all tab-bg + + +[command] +# Keybindings for command mode. +# Since normal keypresses are passed through, only special keys are +# supported in this mode. +# Useful hidden commands to map in this section: +# * `command-history-prev`: Switch to previous command in history. +# * `command-history-next`: Switch to next command in history. +# * `completion-item-focus`: Select another item in completion. +# * `command-accept`: Execute the command currently in the commandline. + +command-history-prev + + +command-history-next + + +completion-item-focus prev + + + +completion-item-focus next + + + +completion-item-focus next-category + + +completion-item-focus prev-category + + +completion-item-del + + +command-accept + + + + + + + +[prompt] +# Keybindings for prompts in the status line. +# You can bind normal keys in this mode, but they will be only active +# when a yes/no-prompt is asked. For other prompt modes, you can only +# bind special keys. +# Useful hidden commands to map in this section: +# * `prompt-accept`: Confirm the entered value. +# * `prompt-accept yes`: Answer yes to a yes/no question. +# * `prompt-accept no`: Answer no to a yes/no question. + +prompt-accept + + + + + + + +prompt-accept yes + y + +prompt-accept no + n + +prompt-open-download + + +prompt-item-focus prev + + + +prompt-item-focus next + + + +[command,prompt] + +rl-backward-char + + +rl-forward-char + + +rl-backward-word + + +rl-forward-word + + +rl-beginning-of-line + + +rl-end-of-line + + +rl-unix-line-discard + + +rl-kill-line + + +rl-kill-word + + +rl-unix-word-rubout + + +rl-backward-kill-word + + +rl-yank + + +rl-delete-char + + +rl-backward-delete-char + + +[caret] + +toggle-selection + v + + +drop-selection + + +enter-mode normal + c + +move-to-next-line + j + +move-to-prev-line + k + +move-to-next-char + l + +move-to-prev-char + h + +move-to-end-of-word + e + +move-to-next-word + w + +move-to-prev-word + b + +move-to-start-of-next-block + ] + +move-to-start-of-prev-block + [ + +move-to-end-of-next-block + } + +move-to-end-of-prev-block + { + +move-to-start-of-line + 0 + +move-to-end-of-line + $ + +move-to-start-of-document + gg + +move-to-end-of-document + G + +yank selection -s + Y + +yank selection + y + + + + + + + +scroll left + H + +scroll down + J + +scroll up + K + +scroll right + L + diff --git a/.config/qutebrowser/jupyter-profile/nord-qutebrowser.py b/.config/qutebrowser/jupyter-profile/nord-qutebrowser.py new file mode 100644 index 0000000..9dd9064 --- /dev/null +++ b/.config/qutebrowser/jupyter-profile/nord-qutebrowser.py @@ -0,0 +1,336 @@ +nord = { + # Polar Night + 'nord0': '#2e3440', + 'nord1': '#3b4252', + 'nord2': '#434c5e', + 'nord3': '#4c566a', + # Snow Storm + 'nord4': '#d8dee9', + 'nord5': '#e5e9f0', + 'nord6': '#eceff4', + # Frost + 'nord7': '#8fbcbb', + 'nord8': '#88c0d0', + 'nord9': '#81a1c1', + 'nord10': '#5e81ac', + # Aurora + 'nord11': '#bf616a', + 'nord12': '#d08770', + 'nord13': '#ebcb8b', + 'nord14': '#a3be8c', + 'nord15': '#b48ead', +} + +## Background color of the completion widget category headers. +## Type: QssColor +c.colors.completion.category.bg = nord['nord0'] + +## Bottom border color of the completion widget category headers. +## Type: QssColor +c.colors.completion.category.border.bottom = nord['nord0'] + +## Top border color of the completion widget category headers. +## Type: QssColor +c.colors.completion.category.border.top = nord['nord0'] + +## Foreground color of completion widget category headers. +## Type: QtColor +c.colors.completion.category.fg = nord['nord5'] + +## Background color of the completion widget for even rows. +## Type: QssColor +c.colors.completion.even.bg = nord['nord1'] + +## Background color of the completion widget for odd rows. +## Type: QssColor +c.colors.completion.odd.bg = nord['nord1'] + +## Text color of the completion widget. +## Type: QtColor +c.colors.completion.fg = nord['nord4'] + +## Background color of the selected completion item. +## Type: QssColor +c.colors.completion.item.selected.bg = nord['nord3'] + +## Bottom border color of the selected completion item. +## Type: QssColor +c.colors.completion.item.selected.border.bottom = nord['nord3'] + +## Top border color of the completion widget category headers. +## Type: QssColor +c.colors.completion.item.selected.border.top = nord['nord3'] + +## Foreground color of the selected completion item. +## Type: QtColor +c.colors.completion.item.selected.fg = nord['nord6'] + +## Foreground color of the matched text in the completion. +## Type: QssColor +c.colors.completion.match.fg = nord['nord13'] + +## Color of the scrollbar in completion view +## Type: QssColor +c.colors.completion.scrollbar.bg = nord['nord1'] + +## Color of the scrollbar handle in completion view. +## Type: QssColor +c.colors.completion.scrollbar.fg = nord['nord5'] + +## Background color for the download bar. +## Type: QssColor +c.colors.downloads.bar.bg = nord['nord0'] + +## Background color for downloads with errors. +## Type: QtColor +c.colors.downloads.error.bg = nord['nord11'] + +## Foreground color for downloads with errors. +## Type: QtColor +c.colors.downloads.error.fg = nord['nord5'] + +## Color gradient stop for download backgrounds. +## Type: QtColor +c.colors.downloads.stop.bg = nord['nord15'] + +## Color gradient interpolation system for download backgrounds. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +c.colors.downloads.system.bg = 'none' + +## Background color for hints. Note that you can use a `rgba(...)` value +## for transparency. +## Type: QssColor +c.colors.hints.bg = nord['nord13'] + +## Font color for hints. +## Type: QssColor +c.colors.hints.fg = nord['nord0'] + +## Font color for the matched part of hints. +## Type: QssColor +c.colors.hints.match.fg = nord['nord10'] + +## Background color of the keyhint widget. +## Type: QssColor +c.colors.keyhint.bg = nord['nord1'] + +## Text color for the keyhint widget. +## Type: QssColor +c.colors.keyhint.fg = nord['nord5'] + +## Highlight color for keys to complete the current keychain. +## Type: QssColor +c.colors.keyhint.suffix.fg = nord['nord13'] + +## Background color of an error message. +## Type: QssColor +c.colors.messages.error.bg = nord['nord11'] + +## Border color of an error message. +## Type: QssColor +c.colors.messages.error.border = nord['nord11'] + +## Foreground color of an error message. +## Type: QssColor +c.colors.messages.error.fg = nord['nord5'] + +## Background color of an info message. +## Type: QssColor +c.colors.messages.info.bg = nord['nord8'] + +## Border color of an info message. +## Type: QssColor +c.colors.messages.info.border = nord['nord8'] + +## Foreground color an info message. +## Type: QssColor +c.colors.messages.info.fg = nord['nord5'] + +## Background color of a warning message. +## Type: QssColor +c.colors.messages.warning.bg = nord['nord12'] + +## Border color of a warning message. +## Type: QssColor +c.colors.messages.warning.border = nord['nord12'] + +## Foreground color a warning message. +## Type: QssColor +c.colors.messages.warning.fg = nord['nord5'] + +## Background color for prompts. +## Type: QssColor +c.colors.prompts.bg = nord['nord2'] + +# ## Border used around UI elements in prompts. +# ## Type: String +c.colors.prompts.border = '1px solid ' + nord['nord0'] + +## Foreground color for prompts. +## Type: QssColor +c.colors.prompts.fg = nord['nord5'] + +## Background color for the selected item in filename prompts. +## Type: QssColor +c.colors.prompts.selected.bg = nord['nord3'] + +## Background color of the statusbar in caret mode. +## Type: QssColor +c.colors.statusbar.caret.bg = nord['nord15'] + +## Foreground color of the statusbar in caret mode. +## Type: QssColor +c.colors.statusbar.caret.fg = nord['nord5'] + +## Background color of the statusbar in caret mode with a selection. +## Type: QssColor +c.colors.statusbar.caret.selection.bg = nord['nord15'] + +## Foreground color of the statusbar in caret mode with a selection. +## Type: QssColor +c.colors.statusbar.caret.selection.fg = nord['nord5'] + +## Background color of the statusbar in command mode. +## Type: QssColor +c.colors.statusbar.command.bg = nord['nord2'] + +## Foreground color of the statusbar in command mode. +## Type: QssColor +c.colors.statusbar.command.fg = nord['nord5'] + +## Background color of the statusbar in private browsing + command mode. +## Type: QssColor +c.colors.statusbar.command.private.bg = nord['nord2'] + +## Foreground color of the statusbar in private browsing + command mode. +## Type: QssColor +c.colors.statusbar.command.private.fg = nord['nord5'] + +## Background color of the statusbar in insert mode. +## Type: QssColor +c.colors.statusbar.insert.bg = nord['nord14'] + +## Foreground color of the statusbar in insert mode. +## Type: QssColor +c.colors.statusbar.insert.fg = nord['nord1'] + +## Background color of the statusbar. +## Type: QssColor +c.colors.statusbar.normal.bg = nord['nord0'] + +## Foreground color of the statusbar. +## Type: QssColor +c.colors.statusbar.normal.fg = nord['nord5'] + +## Background color of the statusbar in passthrough mode. +## Type: QssColor +c.colors.statusbar.passthrough.bg = nord['nord10'] + +## Foreground color of the statusbar in passthrough mode. +## Type: QssColor +c.colors.statusbar.passthrough.fg = nord['nord5'] + +## Background color of the statusbar in private browsing mode. +## Type: QssColor +c.colors.statusbar.private.bg = nord['nord3'] + +## Foreground color of the statusbar in private browsing mode. +## Type: QssColor +c.colors.statusbar.private.fg = nord['nord5'] + +## Background color of the progress bar. +## Type: QssColor +c.colors.statusbar.progress.bg = nord['nord5'] + +## Foreground color of the URL in the statusbar on error. +## Type: QssColor +c.colors.statusbar.url.error.fg = nord['nord11'] + +## Default foreground color of the URL in the statusbar. +## Type: QssColor +c.colors.statusbar.url.fg = nord['nord5'] + +## Foreground color of the URL in the statusbar for hovered links. +## Type: QssColor +c.colors.statusbar.url.hover.fg = nord['nord8'] + +## Foreground color of the URL in the statusbar on successful load +## (http). +## Type: QssColor +c.colors.statusbar.url.success.http.fg = nord['nord5'] + +## Foreground color of the URL in the statusbar on successful load +## (https). +## Type: QssColor +c.colors.statusbar.url.success.https.fg = nord['nord14'] + +## Foreground color of the URL in the statusbar when there's a warning. +## Type: QssColor +c.colors.statusbar.url.warn.fg = nord['nord12'] + +## Background color of the tab bar. +## Type: QtColor +c.colors.tabs.bar.bg = nord['nord3'] + +## Background color of unselected even tabs. +## Type: QtColor +c.colors.tabs.even.bg = nord['nord3'] + +## Foreground color of unselected even tabs. +## Type: QtColor +c.colors.tabs.even.fg = nord['nord5'] + +## Color for the tab indicator on errors. +## Type: QtColor +c.colors.tabs.indicator.error = nord['nord11'] + +## Color gradient start for the tab indicator. +## Type: QtColor +# c.colors.tabs.indicator.start = nord['violet'] + +## Color gradient end for the tab indicator. +## Type: QtColor +# c.colors.tabs.indicator.stop = nord['orange'] + +## Color gradient interpolation system for the tab indicator. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +c.colors.tabs.indicator.system = 'none' + +## Background color of unselected odd tabs. +## Type: QtColor +c.colors.tabs.odd.bg = nord['nord3'] + +## Foreground color of unselected odd tabs. +## Type: QtColor +c.colors.tabs.odd.fg = nord['nord5'] + +# ## Background color of selected even tabs. +# ## Type: QtColor +c.colors.tabs.selected.even.bg = nord['nord0'] + +# ## Foreground color of selected even tabs. +# ## Type: QtColor +c.colors.tabs.selected.even.fg = nord['nord5'] + +# ## Background color of selected odd tabs. +# ## Type: QtColor +c.colors.tabs.selected.odd.bg = nord['nord0'] + +# ## Foreground color of selected odd tabs. +# ## Type: QtColor +c.colors.tabs.selected.odd.fg = nord['nord5'] + +## Background color for webpages if unset (or empty to use the theme's +## color) +## Type: QtColor +# c.colors.webpage.bg = 'white' diff --git a/.config/qutebrowser/jupyter-profile/qutebrowser.conf b/.config/qutebrowser/jupyter-profile/qutebrowser.conf new file mode 100755 index 0000000..3fc85a8 --- /dev/null +++ b/.config/qutebrowser/jupyter-profile/qutebrowser.conf @@ -0,0 +1,1612 @@ +# vim: ft=dosini + +# Configfile for qutebrowser. +# +# This configfile is parsed by python's configparser in extended +# interpolation mode. The format is very INI-like, so there are +# categories like [general] with "key = value"-pairs. +# +# Note that you shouldn't add your own comments, as this file is +# regenerated every time the config is saved. +# +# Interpolation looks like ${value} or ${section:value} and will be +# replaced by the respective value. +# +# Some settings will expand environment variables. Note that, since +# interpolation is run first, you will need to escape the $ char as +# described below. +# +# This is the default config, so if you want to remove anything from +# here (as opposed to change/add), for example a key binding, set it to +# an empty value. +# +# You will need to escape the following values: +# - # at the start of the line (at the first position of the key) (\#) +# - $ in a value ($$) + + +# General/miscellaneous options. +[general] + +# ignore-case (IgnoreCase): +# Whether to find text on a page case-insensitively. +# true: Search case-insensitively +# false: Search case-sensitively +# smart: Search case-sensitively if there are capital chars +# Default: smart +ignore-case = smart + +# startpage (List of String): +# The default page(s) to open at the start, separated by commas. +# Default: https://start.duckduckgo.com +startpage = https://start.duckduckgo.com + +# yank-ignored-url-parameters (List of String): +# The URL parameters to strip with :yank url, separated by commas. +# Default: +# ref,utm_source,utm_medium,utm_campaign,utm_term,utm_content +yank-ignored-url-parameters = ref,utm_source,utm_medium,utm_campaign,utm_term,utm_content + +# default-open-dispatcher (String): +# The default program used to open downloads. Set to an empty string +# to use the default internal handler. +# Any {} in the string will be expanded to the filename, else the +# filename will be appended. +# Default: +default-open-dispatcher = + +# default-page (FuzzyUrl): +# The page to open if :open -t/-b/-w is used without URL. Use +# `about:blank` for a blank page. +# Default: ${startpage} +default-page = ${startpage} + +# auto-search (AutoSearch): +# Whether to start a search when something else than a URL is +# entered. +# naive: Use simple/naive check. +# dns: Use DNS requests (might be slow!). +# false: Never search automatically. +# Default: naive +auto-search = naive + +# auto-save-config (Bool): +# Whether to save the config automatically on quit. +# Valid values: true, false +# Default: true +auto-save-config = true + +# auto-save-interval (Int): +# How often (in milliseconds) to auto-save config/cookies/etc. +# Default: 15000 +auto-save-interval = 15000 + +# editor (ShellCommand): +# The editor (and arguments) to use for the `open-editor` command. +# The arguments get split like in a shell, so you can use `"` or `'` +# to quote them. +# `{}` gets replaced by the filename of the file to be edited. +# Default: gvim -f "{}" +editor = gvim -f "{}" + +# editor-encoding (Encoding): +# Encoding to use for editor. +# Default: utf-8 +editor-encoding = utf-8 + +# private-browsing (Bool): +# Open new windows in private browsing mode which does not record +# visited pages. +# Valid values: true, false +# Default: false +private-browsing = true + +# developer-extras (Bool): +# Enable extra tools for Web developers. +# This needs to be enabled for `:inspector` to work and also adds an +# _Inspect_ entry to the context menu. For QtWebEngine, see +# 'qutebrowser --help' instead. +# Valid values: true, false +# Default: false +developer-extras = true + +# print-element-backgrounds (Bool): +# Whether the background color and images are also drawn when the +# page is printed. +# This setting only works with Qt 5.8 or newer when using the +# QtWebEngine backend. +# Valid values: true, false +# Default: true +print-element-backgrounds = true + +# xss-auditing (Bool): +# Whether load requests should be monitored for cross-site scripting +# attempts. +# Suspicious scripts will be blocked and reported in the inspector's +# JavaScript console. Enabling this feature might have an impact on +# performance. +# Valid values: true, false +# Default: false +xss-auditing = false + +# default-encoding (String): +# Default encoding to use for websites. +# The encoding must be a string describing an encoding such as +# _utf-8_, _iso-8859-1_, etc. +# Default: iso-8859-1 +default-encoding = _utf-8_ + +# new-instance-open-target (String): +# How to open links in an existing instance if a new one is +# launched. +# tab: Open a new tab in the existing window and activate the +# window. +# tab-bg: Open a new background tab in the existing window and +# activate the window. +# tab-silent: Open a new tab in the existing window without +# activating the window. +# tab-bg-silent: Open a new background tab in the existing +# window without activating the window. +# window: Open in a new window. +# Default: tab +new-instance-open-target = tab + +# new-instance-open-target.window (String): +# Which window to choose when opening links as new tabs. +# first-opened: Open new tabs in the first (oldest) opened +# window. +# last-opened: Open new tabs in the last (newest) opened window. +# last-focused: Open new tabs in the most recently focused +# window. +# last-visible: Open new tabs in the most recently visible +# window. +# Default: last-focused +new-instance-open-target.window = last-focused + +# log-javascript-console (String): +# How to log javascript console messages. +# none: Don't log messages. +# debug: Log messages with debug level. +# info: Log messages with info level. +# Default: debug +log-javascript-console = debug + +# save-session (Bool): +# Whether to always save the open pages. +# Valid values: true, false +# Default: false +save-session = true + +# session-default-name (SessionName): +# The name of the session to save by default, or empty for the last +# loaded session. +# Default: +session-default-name = + +# url-incdec-segments (FlagList): +# The URL segments where `:navigate increment/decrement` will search +# for a number. +# Valid values: host, path, query, anchor +# Default: path,query +url-incdec-segments = path,query + + +# General options related to the user interface. +[ui] + +# history-session-interval (Int): +# The maximum time in minutes between two history items for them to +# be considered being from the same session. Use -1 to disable +# separation. +# Default: 30 +history-session-interval = 30 + +# zoom-levels (List of Perc): +# The available zoom levels, separated by commas. +# Default: +# 25%,33%,50%,67%,75%,90%,100%,110%,125%,150%,175%,200%,250%,300%,400%,500% +zoom-levels = 25%,33%,50%,67%,75%,90%,100%,110%,125%,150%,175%,200%,250%,300%,400%,500% + +# default-zoom (Perc): +# The default zoom level. +# Default: 100% +default-zoom = 100% + +# downloads-position (VerticalPosition): +# Where to show the downloaded files. +# Valid values: top, bottom +# Default: top +downloads-position = top + +# status-position (VerticalPosition): +# The position of the status bar. +# Valid values: top, bottom +# Default: bottom +status-position = bottom + +# message-timeout (Int): +# Time (in ms) to show messages in the statusbar for. +# Set to 0 to never clear messages. +# Default: 2000 +message-timeout = 2000 + +# message-unfocused (Bool): +# Whether to show messages in unfocused windows. +# Valid values: true, false +# Default: false +message-unfocused = false + +# confirm-quit (ConfirmQuit): +# Whether to confirm quitting the application. +# always: Always show a confirmation. +# multiple-tabs: Show a confirmation if multiple tabs are +# opened. +# downloads: Show a confirmation if downloads are running +# never: Never show a confirmation. +# Default: never +confirm-quit = never + +# zoom-text-only (Bool): +# Whether the zoom factor on a frame applies only to the text or to +# all content. +# Valid values: true, false +# Default: false +zoom-text-only = false + +# frame-flattening (Bool): +# Whether to expand each subframe to its contents. +# This will flatten all the frames to become one scrollable page. +# Valid values: true, false +# Default: false +frame-flattening = false + +# user-stylesheet (File): +# User stylesheet to use (absolute filename or filename relative to +# the config directory). Will expand environment variables. +# Default: +user-stylesheet = + +# hide-scrollbar (Bool): +# Hide the main scrollbar. +# Valid values: true, false +# Default: true +hide-scrollbar = true + +# smooth-scrolling (Bool): +# Whether to enable smooth scrolling for web pages. Note smooth +# scrolling does not work with the :scroll-px command. +# Valid values: true, false +# Default: false +smooth-scrolling = false + +# remove-finished-downloads (Int): +# Number of milliseconds to wait before removing finished downloads. +# Will not be removed if value is -1. +# Default: -1 +remove-finished-downloads = -1 + +# hide-statusbar (Bool): +# Whether to hide the statusbar unless a message is shown. +# Valid values: true, false +# Default: false +hide-statusbar = false + +# statusbar-padding (Padding): +# Padding for statusbar (top, bottom, left, right). +# Default: 1,1,0,0 +statusbar-padding = 1,1,0,0 + +# window-title-format (FormatString): +# The format to use for the window title. The following placeholders +# are defined: +# * `{perc}`: The percentage as a string like `[10%]`. +# * `{perc_raw}`: The raw percentage, e.g. `10` +# * `{title}`: The title of the current web page +# * `{title_sep}`: The string ` - ` if a title is set, empty +# otherwise. +# * `{id}`: The internal window ID of this window. +# * `{scroll_pos}`: The page scroll position. +# * `{host}`: The host of the current web page. +# * `{backend}`: Either 'webkit' or 'webengine' +# * `{private}` : Indicates when private mode is enabled. +# Default: {perc}{title}{title_sep}qutebrowser +window-title-format = {perc}{title}{title_sep}qutebrowser + +# modal-js-dialog (Bool): +# Use standard JavaScript modal dialog for alert() and confirm() +# Valid values: true, false +# Default: false +modal-js-dialog = false + +# hide-wayland-decoration (Bool): +# Hide the window decoration when using wayland (requires restart) +# Valid values: true, false +# Default: false +hide-wayland-decoration = false + +# keyhint-blacklist (List of String): +# Keychains that shouldn't be shown in the keyhint dialog +# Globs are supported, so ';*' will blacklist all keychainsstarting +# with ';'. Use '*' to disable keyhints +# Default: +keyhint-blacklist = + +# keyhint-delay (Int): +# Time from pressing a key to seeing the keyhint dialog (ms) +# Default: 500 +keyhint-delay = 500 + +# prompt-radius (Int): +# The rounding radius for the edges of prompts. +# Default: 8 +prompt-radius = 8 + +# prompt-filebrowser (Bool): +# Show a filebrowser in upload/download prompts. +# Valid values: true, false +# Default: true +prompt-filebrowser = true + + +# Settings related to the network. +[network] + +# do-not-track (Bool): +# Value to send in the `DNT` header. +# Valid values: true, false +# Default: true +do-not-track = true + +# accept-language (String): +# Value to send in the `accept-language` header. +# Default: en-US,en +accept-language = en-US,en;q=0.5 + +# referer-header (String): +# Send the Referer header +# always: Always send. +# never: Never send; this is not recommended, as some sites may +# break. +# same-domain: Only send for the same domain. This will still +# protect your privacy, but shouldn't break any sites. +# Default: same-domain +referer-header = same-domain + +# user-agent (UserAgent): +# User agent to send. Empty to send the default. +# Default: +user-agent = Mozilla/5.0 + +# proxy (Proxy): +# The proxy to use. +# In addition to the listed values, you can use a `socks://...` or +# `http://...` URL. +# system: Use the system wide proxy. +# none: Don't use any proxy +# Default: system +proxy = system + +# proxy-dns-requests (Bool): +# Whether to send DNS requests over the configured proxy. +# Valid values: true, false +# Default: true +proxy-dns-requests = true + +# ssl-strict (BoolAsk): +# Whether to validate SSL handshakes. +# Valid values: true, false, ask +# Default: ask +ssl-strict = ask + +# dns-prefetch (Bool): +# Whether to try to pre-fetch DNS entries to speed up browsing. +# Valid values: true, false +# Default: true +dns-prefetch = true + +# custom-headers (HeaderDict): +# Set custom headers for qutebrowser HTTP requests. +# Default: +custom-headers = + +# netrc-file (File): +# Set location of a netrc-file for HTTP authentication. If empty, +# ~/.netrc is used. +# Default: +netrc-file = + + +# Options related to completion and command history. +[completion] + +# show (String): +# When to show the autocompletion window. +# always: Whenever a completion is available. +# auto: Whenever a completion is requested. +# never: Never. +# Default: always +show = always + +# download-path-suggestion (String): +# What to display in the download filename input. +# path: Show only the download path. +# filename: Show only download filename. +# both: Show download path and filename. +# Default: path +download-path-suggestion = path + +# timestamp-format (TimestampTemplate): +# How to format timestamps (e.g. for history) +# Default: %Y-%m-%d +timestamp-format = %Y-%m-%d + +# height (PercOrInt): +# The height of the completion, in px or as percentage of the +# window. +# Default: 50% +height = 50% + +# cmd-history-max-items (Int): +# How many commands to save in the command history. +# 0: no history / -1: unlimited +# Default: 100 +cmd-history-max-items = 100 + +# web-history-max-items (Int): +# How many URLs to show in the web history. +# 0: no history / -1: unlimited +# Default: 1000 +web-history-max-items = 1000 + +# quick-complete (Bool): +# Whether to move on to the next part when there's only one possible +# completion left. +# Valid values: true, false +# Default: true +quick-complete = true + +# shrink (Bool): +# Whether to shrink the completion to be smaller than the configured +# size if there are no scrollbars. +# Valid values: true, false +# Default: false +shrink = false + +# scrollbar-width (Int): +# Width of the scrollbar in the completion window (in px). +# Default: 12 +scrollbar-width = 12 + +# scrollbar-padding (Int): +# Padding of scrollbar handle in completion window (in px). +# Default: 2 +scrollbar-padding = 2 + + +# Options related to input modes. +[input] + +# timeout (Int): +# Timeout (in milliseconds) for ambiguous key bindings. +# If the current input forms both a complete match and a partial +# match, the complete match will be executed after this time. +# Default: 500 +timeout = 500 + +# partial-timeout (Int): +# Timeout (in milliseconds) for partially typed key bindings. +# If the current input forms only partial matches, the keystring +# will be cleared after this time. +# Default: 5000 +partial-timeout = 5000 + +# insert-mode-on-plugins (Bool): +# Whether to switch to insert mode when clicking flash and other +# plugins. +# Valid values: true, false +# Default: false +insert-mode-on-plugins = false + +# auto-leave-insert-mode (Bool): +# Whether to leave insert mode if a non-editable element is clicked. +# Valid values: true, false +# Default: true +auto-leave-insert-mode = true + +# auto-insert-mode (Bool): +# Whether to automatically enter insert mode if an editable element +# is focused after page load. +# Valid values: true, false +# Default: false +auto-insert-mode = false + +# forward-unbound-keys (String): +# Whether to forward unbound keys to the webview in normal mode. +# all: Forward all unbound keys. +# auto: Forward unbound non-alphanumeric keys. +# none: Don't forward any keys. +# Default: auto +forward-unbound-keys = auto + +# spatial-navigation (Bool): +# Enables or disables the Spatial Navigation feature. +# Spatial navigation consists in the ability to navigate between +# focusable elements in a Web page, such as hyperlinks and form +# controls, by using Left, Right, Up and Down arrow keys. For +# example, if a user presses the Right key, heuristics determine +# whether there is an element he might be trying to reach towards +# the right and which element he probably wants. +# Valid values: true, false +# Default: false +spatial-navigation = false + +# links-included-in-focus-chain (Bool): +# Whether hyperlinks should be included in the keyboard focus chain. +# Valid values: true, false +# Default: true +links-included-in-focus-chain = true + +# rocker-gestures (Bool): +# Whether to enable Opera-like mouse rocker gestures. This disables +# the context menu. +# Valid values: true, false +# Default: false +rocker-gestures = false + +# mouse-zoom-divider (Int): +# How much to divide the mouse wheel movements to translate them +# into zoom increments. +# Default: 512 +mouse-zoom-divider = 512 + + +# Configuration of the tab bar. +[tabs] + +# background-tabs (Bool): +# Whether to open new tabs (middleclick/ctrl+click) in background. +# Valid values: true, false +# Default: false +background-tabs = false + +# select-on-remove (SelectOnRemove): +# Which tab to select when the focused tab is removed. +# prev: Select the tab which came before the closed one (left in +# horizontal, above in vertical). +# next: Select the tab which came after the closed one (right in +# horizontal, below in vertical). +# last-used: Select the previously selected tab. +# Default: next +select-on-remove = next + +# new-tab-position (NewTabPosition): +# How new tabs are positioned. +# prev: Before the current tab. +# next: After the current tab. +# first: At the beginning. +# last: At the end. +# Default: next +new-tab-position = next + +# new-tab-position-explicit (NewTabPosition): +# How new tabs opened explicitly are positioned. +# prev: Before the current tab. +# next: After the current tab. +# first: At the beginning. +# last: At the end. +# Default: last +new-tab-position-explicit = last + +# last-close (String): +# Behavior when the last tab is closed. +# ignore: Don't do anything. +# blank: Load a blank page. +# startpage: Load the start page. +# default-page: Load the default page. +# close: Close the window. +# Default: ignore +last-close = ignore + +# show (String): +# When to show the tab bar +# always: Always show the tab bar. +# never: Always hide the tab bar. +# multiple: Hide the tab bar if only one tab is open. +# switching: Show the tab bar when switching tabs. +# Default: always +show = always + +# show-switching-delay (Int): +# Time to show the tab bar before hiding it when tabs->show is set +# to 'switching'. +# Default: 800 +show-switching-delay = 800 + +# wrap (Bool): +# Whether to wrap when changing tabs. +# Valid values: true, false +# Default: true +wrap = true + +# movable (Bool): +# Whether tabs should be movable. +# Valid values: true, false +# Default: true +movable = true + +# close-mouse-button (String): +# On which mouse button to close tabs. +# right: Close tabs on right-click. +# middle: Close tabs on middle-click. +# none: Don't close tabs using the mouse. +# Default: middle +close-mouse-button = middle + +# position (Position): +# The position of the tab bar. +# Valid values: top, bottom, left, right +# Default: top +position = top + +# show-favicons (Bool): +# Whether to show favicons in the tab bar. +# Valid values: true, false +# Default: true +show-favicons = true + +# favicon-scale (Float): +# Scale for favicons in the tab bar. The tab size is unchanged, so +# big favicons also require extra `tabs->padding`. +# Default: 1.0 +favicon-scale = 1.0 + +# width (PercOrInt): +# The width of the tab bar if it's vertical, in px or as percentage +# of the window. +# Default: 20% +width = 20% + +# pinned-width (Int): +# The width for pinned tabs with a horizontal tabbar, in px. +# Default: 43 +pinned-width = 43 + +# indicator-width (Int): +# Width of the progress indicator (0 to disable). +# Default: 3 +indicator-width = 3 + +# tabs-are-windows (Bool): +# Whether to open windows instead of tabs. +# Valid values: true, false +# Default: false +tabs-are-windows = false + +# title-format (FormatString): +# The format to use for the tab title. The following placeholders +# are defined: +# * `{perc}`: The percentage as a string like `[10%]`. +# * `{perc_raw}`: The raw percentage, e.g. `10` +# * `{title}`: The title of the current web page +# * `{title_sep}`: The string ` - ` if a title is set, empty +# otherwise. +# * `{index}`: The index of this tab. +# * `{id}`: The internal tab ID of this tab. +# * `{scroll_pos}`: The page scroll position. +# * `{host}`: The host of the current web page. +# * `{backend}`: Either 'webkit' or 'webengine' +# * `{private}` : Indicates when private mode is enabled. +# Default: {index}: {title} +title-format = {index}: {title} + +# title-format-pinned (FormatString): +# The format to use for the tab title for pinned tabs. The same +# placeholders like for title-format are defined. +# Default: {index} +title-format-pinned = {index} + +# title-alignment (TextAlignment): +# Alignment of the text inside of tabs +# Valid values: left, right, center +# Default: left +title-alignment = left + +# mousewheel-tab-switching (Bool): +# Switch between tabs using the mouse wheel. +# Valid values: true, false +# Default: true +mousewheel-tab-switching = true + +# padding (Padding): +# Padding for tabs (top, bottom, left, right). +# Default: 0,0,5,5 +padding = 0,0,5,5 + +# indicator-padding (Padding): +# Padding for indicators (top, bottom, left, right). +# Default: 2,2,0,4 +indicator-padding = 2,2,0,4 + + +# Settings related to cache and storage. +[storage] + +# download-directory (Directory): +# The directory to save downloads to. An empty value selects a +# sensible os-specific default. Will expand environment variables. +# Default: +download-directory = + +# prompt-download-directory (Bool): +# Whether to prompt the user for the download location. +# If set to false, 'download-directory' will be used. +# Valid values: true, false +# Default: true +prompt-download-directory = true + +# remember-download-directory (Bool): +# Whether to remember the last used download directory. +# Valid values: true, false +# Default: true +remember-download-directory = true + +# maximum-pages-in-cache (Int): +# The maximum number of pages to hold in the global memory page +# cache. +# The Page Cache allows for a nicer user experience when navigating +# forth or back to pages in the forward/back history, by pausing and +# resuming up to _n_ pages. +# For more information about the feature, please refer to: +# http://webkit.org/blog/427/webkit-page-cache-i-the-basics/ +# Default: 0 +maximum-pages-in-cache = 0 + +# offline-web-application-cache (Bool): +# Whether support for the HTML 5 web application cache feature is +# enabled. +# An application cache acts like an HTTP cache in some sense. For +# documents that use the application cache via JavaScript, the +# loader engine will first ask the application cache for the +# contents, before hitting the network. +# The feature is described in details at: +# http://dev.w3.org/html5/spec/Overview.html#appcache +# Valid values: true, false +# Default: true +offline-web-application-cache = true + +# local-storage (Bool): +# Whether support for HTML 5 local storage and Web SQL is enabled. +# Valid values: true, false +# Default: true +local-storage = true + +# cache-size (Int): +# Size of the HTTP network cache. Empty to use the default value. +# Default: +cache-size = + + +# Loaded plugins/scripts and allowed actions. +[content] + +# allow-images (Bool): +# Whether images are automatically loaded in web pages. +# Valid values: true, false +# Default: true +allow-images = true + +# allow-javascript (Bool): +# Enables or disables the running of JavaScript programs. +# Valid values: true, false +# Default: true +allow-javascript = true + +# allow-plugins (Bool): +# Enables or disables plugins in Web pages. +# Qt plugins with a mimetype such as "application/x-qt-plugin" are +# not affected by this setting. +# Valid values: true, false +# Default: false +allow-plugins = true + +# webgl (Bool): +# Enables or disables WebGL. +# Valid values: true, false +# Default: true +webgl = true + +# hyperlink-auditing (Bool): +# Enable or disable hyperlink auditing (). +# Valid values: true, false +# Default: false +hyperlink-auditing = false + +# geolocation (BoolAsk): +# Allow websites to request geolocations. +# Valid values: true, false, ask +# Default: ask +geolocation = false + +# notifications (BoolAsk): +# Allow websites to show notifications. +# Valid values: true, false, ask +# Default: ask +notifications = ask + +# media-capture (BoolAsk): +# Allow websites to record audio/video. +# Valid values: true, false, ask +# Default: ask +media-capture = ask + +# javascript-can-open-windows-automatically (Bool): +# Whether JavaScript programs can open new windows without user +# interaction. +# Valid values: true, false +# Default: false +javascript-can-open-windows-automatically = true + +# javascript-can-close-windows (Bool): +# Whether JavaScript programs can close windows. +# Valid values: true, false +# Default: false +javascript-can-close-windows = true + +# javascript-can-access-clipboard (Bool): +# Whether JavaScript programs can read or write to the clipboard. +# With QtWebEngine, writing the clipboard as response to a user +# interaction is always allowed. +# Valid values: true, false +# Default: false +javascript-can-access-clipboard = true + +# ignore-javascript-prompt (Bool): +# Whether all javascript prompts should be ignored. +# Valid values: true, false +# Default: false +ignore-javascript-prompt = true + +# ignore-javascript-alert (Bool): +# Whether all javascript alerts should be ignored. +# Valid values: true, false +# Default: false +ignore-javascript-alert = true + +# local-content-can-access-remote-urls (Bool): +# Whether locally loaded documents are allowed to access remote +# urls. +# Valid values: true, false +# Default: false +local-content-can-access-remote-urls = false + +# local-content-can-access-file-urls (Bool): +# Whether locally loaded documents are allowed to access other local +# urls. +# Valid values: true, false +# Default: true +local-content-can-access-file-urls = true + +# cookies-accept (String): +# Control which cookies to accept. +# all: Accept all cookies. +# no-3rdparty: Accept cookies from the same origin only. +# no-unknown-3rdparty: Accept cookies from the same origin only, +# unless a cookie is already set for the domain. +# never: Don't accept cookies at all. +# Default: no-3rdparty +cookies-accept = all + +# cookies-store (Bool): +# Whether to store cookies. Note this option needs a restart with +# QtWebEngine on Qt < 5.9. +# Valid values: true, false +# Default: true +cookies-store = true + +# host-block-lists (List of Url): +# List of URLs of lists which contain hosts to block. +# The file can be in one of the following formats: +# - An '/etc/hosts'-like file +# - One host per line +# - A zip-file of any of the above, with either only one file, or a +# file named 'hosts' (with any extension). +# Default: +# https://www.malwaredomainlist.com/hostslist/hosts.txt,http://someonewhocares.org/hosts/hosts,http://winhelp2002.mvps.org/hosts.zip,http://malwaredomains.lehigh.edu/files/justdomains.zip,https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext +host-block-lists = https://www.malwaredomainlist.com/hostslist/hosts.txt,http://someonewhocares.org/hosts/hosts,http://winhelp2002.mvps.org/hosts.zip,http://malwaredomains.lehigh.edu/files/justdomains.zip,https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext + +# host-blocking-enabled (Bool): +# Whether host blocking is enabled. +# Valid values: true, false +# Default: true +host-blocking-enabled = false + +# host-blocking-whitelist (List of String): +# List of domains that should always be loaded, despite being +# ad-blocked. +# Domains may contain * and ? wildcards and are otherwise required +# to exactly match the requested domain. +# Local domains are always exempt from hostblocking. +# Default: piwik.org +host-blocking-whitelist = piwik.org,next-episode.net,churchmilitant.tv,load.sumome.com,s7.addthis.com,www.google-analytics.com,ssl.google-analytics.com,referrer.disqus.com,m.addthisedge.com,m.addthis.com,stats.g.doubleclick.net,*.addthis.com,lukesmith.xyz + +# enable-pdfjs (Bool): +# Enable pdf.js to view PDF files in the browser. +# Note that the files can still be downloaded by clicking the +# download button in the pdf.js viewer. +# Valid values: true, false +# Default: false +enable-pdfjs = false + + +# Hinting settings. +[hints] + +# border (String): +# CSS border value for hints. +# Default: 1px solid #E3BE23 +border = 1px solid #E3BE23 + +# mode (String): +# Mode to use for hints. +# number: Use numeric hints. (In this mode you can also type +# letters form the hinted element to filter and reduce the number of +# elements that are hinted.) +# letter: Use the chars in the hints -> chars setting. +# word: Use hints words based on the html elements and the extra +# words. +# Default: letter +mode = number + +# chars (UniqueCharString): +# Chars used for hint strings. +# Default: asdfghjkl +chars = asdfghjkl + +# min-chars (Int): +# Minimum number of chars used for hint strings. +# Default: 1 +min-chars = 1 + +# scatter (Bool): +# Whether to scatter hint key chains (like Vimium) or not (like +# dwb). Ignored for number hints. +# Valid values: true, false +# Default: true +scatter = true + +# uppercase (Bool): +# Make chars in hint strings uppercase. +# Valid values: true, false +# Default: false +uppercase = false + +# dictionary (File): +# The dictionary file to be used by the word hints. +# Default: /usr/share/dict/words +dictionary = /usr/share/dict/words + +# auto-follow (String): +# Controls when a hint can be automatically followed without the +# user pressing Enter. +# always: Auto-follow whenever there is only a single hint on a +# page. +# unique-match: Auto-follow whenever there is a unique non-empty +# match in either the hint string (word mode) or filter (number +# mode). +# full-match: Follow the hint when the user typed the whole hint +# (letter, word or number mode) or the element's text (only in +# number mode). +# never: The user will always need to press Enter to follow a +# hint. +# Default: unique-match +auto-follow = unique-match + +# auto-follow-timeout (Int): +# A timeout (in milliseconds) to inhibit normal-mode key bindings +# after a successful auto-follow. +# Default: 0 +auto-follow-timeout = 0 + +# next-regexes (List of Regex): +# A comma-separated list of regexes to use for 'next' links. +# Default: +# \bnext\b,\bmore\b,\bnewer\b,\b[>→≫]\b,\b(>>|»)\b,\bcontinue\b +next-regexes = \bnext\b,\bmore\b,\bnewer\b,\b[>→≫]\b,\b(>>|»)\b,\bcontinue\b + +# prev-regexes (List of Regex): +# A comma-separated list of regexes to use for 'prev' links. +# Default: \bprev(ious)?\b,\bback\b,\bolder\b,\b[<←≪]\b,\b(<<|«)\b +prev-regexes = \bprev(ious)?\b,\bback\b,\bolder\b,\b[<←≪]\b,\b(<<|«)\b + +# find-implementation (String): +# Which implementation to use to find elements to hint. +# javascript: Better but slower +# python: Slightly worse but faster +# Default: python +find-implementation = python + +# hide-unmatched-rapid-hints (Bool): +# Controls hiding unmatched hints in rapid mode. +# Valid values: true, false +# Default: true +hide-unmatched-rapid-hints = true + + +# Definitions of search engines which can be used via the address bar. +# The searchengine named `DEFAULT` is used when `general -> auto-search` +# is true and something else than a URL was entered to be opened. Other +# search engines can be used by prepending the search engine name to the +# search term, e.g. `:open google qutebrowser`. The string `{}` will be +# replaced by the search term, use `{{` and `}}` for literal `{`/`}` +# signs. +[searchengines] +DEFAULT = https://duckduckgo.com/?q={} + + +# Aliases for commands. +# By default, no aliases are defined. Example which adds a new command +# `:qtb` to open qutebrowsers website: +# `qtb = open https://www.qutebrowser.org/` +[aliases] +qtb = open https://www.qutebrowser.org/ +mbt = open t https://signin1.bt.com/login/emailloginform +Ombt = open -t https://signin1.bt.com/login/emailloginform +nx = open http://next-episode.net/ +Onx = open -t http://next-episode.net/ +gk = open https://gameknot.com/ +Ogk = open -t https://gameknot.com/ +yt = open https://youtube.com +Oyt = open -t https://youtube.com +Y = open http://www.cosmos.esa.int/web/xmm-newton/current-calibration-files +OY = open -t http://www.cosmos.esa.int/web/xmm-newton/current-calibration-files +1337 = open https://1337x.to/home +O1337 = open -t https://1337x.to/home +ez = open https://eztv.ag +Oez = open -t https://eztv.ag +tz = open https://extratorrent.ag +Otz = open -t https://extratorrent.ag +tpb = open https://thepiratebay.org/ +Otpb = open -t https://thepiratebay.org/ +Nm = open https://netmail.herts.ac.uk/owa/auth/logon.aspx?replaceCurrent=1&url=https%3a%2f%2fnetmail.herts.ac.uk%2fowa +ONm = open -t https://netmail.herts.ac.uk/owa/auth/logon.aspx?replaceCurrent=1&url=https%3a%2f%2fnetmail.herts.ac.uk%2fowa + + +# Colors used in the UI. +# A value can be in one of the following format: +# * `#RGB`/`#RRGGBB`/`#RRRGGGBBB`/`#RRRRGGGGBBBB` +# * An SVG color name as specified in http://www.w3.org/TR/SVG/types.html#ColorKeywords[the W3C specification]. +# * transparent (no color) +# * `rgb(r, g, b)` / `rgba(r, g, b, a)` (values 0-255 or percentages) +# * `hsv(h, s, v)` / `hsva(h, s, v, a)` (values 0-255, hue 0-359) +# * A gradient as explained in http://doc.qt.io/qt-5/stylesheet-reference.html#list-of-property-types[the Qt documentation] under ``Gradient''. +# A *.system value determines the color system to use for color +# interpolation between similarly-named *.start and *.stop entries, +# regardless of how they are defined in the options. Valid values are +# 'rgb', 'hsv', and 'hsl'. +# The `hints.*` values are a special case as they're real CSS colors, not Qt-CSS colors. There, for a gradient, you need to use `-webkit-gradient`, see https://www.webkit.org/blog/175/introducing-css-gradients/[the WebKit documentation]. +[colors] + +# completion.fg (QtColor): +# Text color of the completion widget. +# Default: white +completion.fg = white + +# completion.bg (QssColor): +# Background color of the completion widget. +# Default: #333333 +completion.bg = #333333 + +# completion.alternate-bg (QssColor): +# Alternating background color of the completion widget. +# Default: #444444 +completion.alternate-bg = #444444 + +# completion.category.fg (QtColor): +# Foreground color of completion widget category headers. +# Default: white +completion.category.fg = white + +# completion.category.bg (QssColor): +# Background color of the completion widget category headers. +# Default: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #888888, +# stop:1 #505050) +completion.category.bg = qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #888888, stop:1 #505050) + +# completion.category.border.top (QssColor): +# Top border color of the completion widget category headers. +# Default: black +completion.category.border.top = black + +# completion.category.border.bottom (QssColor): +# Bottom border color of the completion widget category headers. +# Default: ${completion.category.border.top} +completion.category.border.bottom = ${completion.category.border.top} + +# completion.item.selected.fg (QtColor): +# Foreground color of the selected completion item. +# Default: black +completion.item.selected.fg = black + +# completion.item.selected.bg (QssColor): +# Background color of the selected completion item. +# Default: #e8c000 +completion.item.selected.bg = #e8c000 + +# completion.item.selected.border.top (QssColor): +# Top border color of the completion widget category headers. +# Default: #bbbb00 +completion.item.selected.border.top = #bbbb00 + +# completion.item.selected.border.bottom (QssColor): +# Bottom border color of the selected completion item. +# Default: ${completion.item.selected.border.top} +completion.item.selected.border.bottom = ${completion.item.selected.border.top} + +# completion.match.fg (QssColor): +# Foreground color of the matched text in the completion. +# Default: #ff4444 +completion.match.fg = #ff4444 + +# completion.scrollbar.fg (QssColor): +# Color of the scrollbar handle in completion view. +# Default: ${completion.fg} +completion.scrollbar.fg = ${completion.fg} + +# completion.scrollbar.bg (QssColor): +# Color of the scrollbar in completion view +# Default: ${completion.bg} +completion.scrollbar.bg = ${completion.bg} + +# statusbar.fg (QssColor): +# Foreground color of the statusbar. +# Default: white +statusbar.fg = white + +# statusbar.bg (QssColor): +# Background color of the statusbar. +# Default: black +statusbar.bg = black + +# statusbar.fg.private (QssColor): +# Foreground color of the statusbar in private browsing mode. +# Default: ${statusbar.fg} +statusbar.fg.private = ${statusbar.fg} + +# statusbar.bg.private (QssColor): +# Background color of the statusbar in private browsing mode. +# Default: #666666 +statusbar.bg.private = #666666 + +# statusbar.fg.insert (QssColor): +# Foreground color of the statusbar in insert mode. +# Default: ${statusbar.fg} +statusbar.fg.insert = ${statusbar.fg} + +# statusbar.bg.insert (QssColor): +# Background color of the statusbar in insert mode. +# Default: darkgreen +statusbar.bg.insert = darkgreen + +# statusbar.fg.command (QssColor): +# Foreground color of the statusbar in command mode. +# Default: ${statusbar.fg} +statusbar.fg.command = ${statusbar.fg} + +# statusbar.bg.command (QssColor): +# Background color of the statusbar in command mode. +# Default: ${statusbar.bg} +statusbar.bg.command = ${statusbar.bg} + +# statusbar.fg.command.private (QssColor): +# Foreground color of the statusbar in private browsing + command +# mode. +# Default: ${statusbar.fg.private} +statusbar.fg.command.private = ${statusbar.fg.private} + +# statusbar.bg.command.private (QssColor): +# Background color of the statusbar in private browsing + command +# mode. +# Default: ${statusbar.bg.private} +statusbar.bg.command.private = ${statusbar.bg.private} + +# statusbar.fg.caret (QssColor): +# Foreground color of the statusbar in caret mode. +# Default: ${statusbar.fg} +statusbar.fg.caret = ${statusbar.fg} + +# statusbar.bg.caret (QssColor): +# Background color of the statusbar in caret mode. +# Default: purple +statusbar.bg.caret = purple + +# statusbar.fg.caret-selection (QssColor): +# Foreground color of the statusbar in caret mode with a selection +# Default: ${statusbar.fg} +statusbar.fg.caret-selection = ${statusbar.fg} + +# statusbar.bg.caret-selection (QssColor): +# Background color of the statusbar in caret mode with a selection +# Default: #a12dff +statusbar.bg.caret-selection = #a12dff + +# statusbar.progress.bg (QssColor): +# Background color of the progress bar. +# Default: white +statusbar.progress.bg = white + +# statusbar.url.fg (QssColor): +# Default foreground color of the URL in the statusbar. +# Default: ${statusbar.fg} +statusbar.url.fg = ${statusbar.fg} + +# statusbar.url.fg.success (QssColor): +# Foreground color of the URL in the statusbar on successful load +# (http). +# Default: white +statusbar.url.fg.success = white + +# statusbar.url.fg.success.https (QssColor): +# Foreground color of the URL in the statusbar on successful load +# (https). +# Default: lime +statusbar.url.fg.success.https = lime + +# statusbar.url.fg.error (QssColor): +# Foreground color of the URL in the statusbar on error. +# Default: orange +statusbar.url.fg.error = orange + +# statusbar.url.fg.warn (QssColor): +# Foreground color of the URL in the statusbar when there's a +# warning. +# Default: yellow +statusbar.url.fg.warn = yellow + +# statusbar.url.fg.hover (QssColor): +# Foreground color of the URL in the statusbar for hovered links. +# Default: aqua +statusbar.url.fg.hover = aqua + +# tabs.fg.odd (QtColor): +# Foreground color of unselected odd tabs. +# Default: white +tabs.fg.odd = white + +# tabs.bg.odd (QtColor): +# Background color of unselected odd tabs. +# Default: grey +tabs.bg.odd = grey + +# tabs.fg.even (QtColor): +# Foreground color of unselected even tabs. +# Default: white +tabs.fg.even = white + +# tabs.bg.even (QtColor): +# Background color of unselected even tabs. +# Default: darkgrey +tabs.bg.even = darkgrey + +# tabs.fg.selected.odd (QtColor): +# Foreground color of selected odd tabs. +# Default: white +tabs.fg.selected.odd = white + +# tabs.bg.selected.odd (QtColor): +# Background color of selected odd tabs. +# Default: black +tabs.bg.selected.odd = black + +# tabs.fg.selected.even (QtColor): +# Foreground color of selected even tabs. +# Default: ${tabs.fg.selected.odd} +tabs.fg.selected.even = ${tabs.fg.selected.odd} + +# tabs.bg.selected.even (QtColor): +# Background color of selected even tabs. +# Default: ${tabs.bg.selected.odd} +tabs.bg.selected.even = ${tabs.bg.selected.odd} + +# tabs.bg.bar (QtColor): +# Background color of the tab bar. +# Default: #555555 +tabs.bg.bar = #555555 + +# tabs.indicator.start (QtColor): +# Color gradient start for the tab indicator. +# Default: #0000aa +tabs.indicator.start = #0000aa + +# tabs.indicator.stop (QtColor): +# Color gradient end for the tab indicator. +# Default: #00aa00 +tabs.indicator.stop = #00aa00 + +# tabs.indicator.error (QtColor): +# Color for the tab indicator on errors.. +# Default: #ff0000 +tabs.indicator.error = #ff0000 + +# tabs.indicator.system (ColorSystem): +# Color gradient interpolation system for the tab indicator. +# rgb: Interpolate in the RGB color system. +# hsv: Interpolate in the HSV color system. +# hsl: Interpolate in the HSL color system. +# none: Don't show a gradient. +# Default: rgb +tabs.indicator.system = rgb + +# hints.fg (QssColor): +# Font color for hints. +# Default: black +hints.fg = black + +# hints.bg (QssColor): +# Background color for hints. Note that you can use a `rgba(...)` +# value for transparency. +# Default: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, +# 247, 133, 0.8), stop:1 rgba(255, 197, 66, 0.8)) +hints.bg = qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, 247, 133, 0.8), stop:1 rgba(255, 197, 66, 0.8)) + +# hints.fg.match (QssColor): +# Font color for the matched part of hints. +# Default: green +hints.fg.match = green + +# downloads.bg.bar (QssColor): +# Background color for the download bar. +# Default: black +downloads.bg.bar = black + +# downloads.fg.start (QtColor): +# Color gradient start for download text. +# Default: white +downloads.fg.start = white + +# downloads.bg.start (QtColor): +# Color gradient start for download backgrounds. +# Default: #0000aa +downloads.bg.start = #0000aa + +# downloads.fg.stop (QtColor): +# Color gradient end for download text. +# Default: ${downloads.fg.start} +downloads.fg.stop = ${downloads.fg.start} + +# downloads.bg.stop (QtColor): +# Color gradient stop for download backgrounds. +# Default: #00aa00 +downloads.bg.stop = #00aa00 + +# downloads.fg.system (ColorSystem): +# Color gradient interpolation system for download text. +# rgb: Interpolate in the RGB color system. +# hsv: Interpolate in the HSV color system. +# hsl: Interpolate in the HSL color system. +# none: Don't show a gradient. +# Default: rgb +downloads.fg.system = rgb + +# downloads.bg.system (ColorSystem): +# Color gradient interpolation system for download backgrounds. +# rgb: Interpolate in the RGB color system. +# hsv: Interpolate in the HSV color system. +# hsl: Interpolate in the HSL color system. +# none: Don't show a gradient. +# Default: rgb +downloads.bg.system = rgb + +# downloads.fg.error (QtColor): +# Foreground color for downloads with errors. +# Default: white +downloads.fg.error = white + +# downloads.bg.error (QtColor): +# Background color for downloads with errors. +# Default: red +downloads.bg.error = red + +# webpage.bg (QtColor): +# Background color for webpages if unset (or empty to use the +# theme's color) +# Default: white +webpage.bg = white + +# keyhint.fg (QssColor): +# Text color for the keyhint widget. +# Default: #FFFFFF +keyhint.fg = #FFFFFF + +# keyhint.fg.suffix (CssColor): +# Highlight color for keys to complete the current keychain +# Default: #FFFF00 +keyhint.fg.suffix = #FFFF00 + +# keyhint.bg (QssColor): +# Background color of the keyhint widget. +# Default: rgba(0, 0, 0, 80%) +keyhint.bg = rgba(0, 0, 0, 80%) + +# messages.fg.error (QssColor): +# Foreground color of an error message. +# Default: white +messages.fg.error = white + +# messages.bg.error (QssColor): +# Background color of an error message. +# Default: red +messages.bg.error = red + +# messages.border.error (QssColor): +# Border color of an error message. +# Default: #bb0000 +messages.border.error = #bb0000 + +# messages.fg.warning (QssColor): +# Foreground color a warning message. +# Default: white +messages.fg.warning = white + +# messages.bg.warning (QssColor): +# Background color of a warning message. +# Default: darkorange +messages.bg.warning = darkorange + +# messages.border.warning (QssColor): +# Border color of an error message. +# Default: #d47300 +messages.border.warning = #d47300 + +# messages.fg.info (QssColor): +# Foreground color an info message. +# Default: white +messages.fg.info = white + +# messages.bg.info (QssColor): +# Background color of an info message. +# Default: black +messages.bg.info = black + +# messages.border.info (QssColor): +# Border color of an info message. +# Default: #333333 +messages.border.info = #333333 + +# prompts.fg (QssColor): +# Foreground color for prompts. +# Default: white +prompts.fg = white + +# prompts.bg (QssColor): +# Background color for prompts. +# Default: darkblue +prompts.bg = darkblue + +# prompts.selected.bg (QssColor): +# Background color for the selected item in filename prompts. +# Default: #308cc6 +prompts.selected.bg = #308cc6 + + +# Fonts used for the UI, with optional style/weight/size. +# * Style: `normal`/`italic`/`oblique` +# * Weight: `normal`, `bold`, `100`..`900` +# * Size: _number_ `px`/`pt` +[fonts] + +# _monospace (Font): +# Default monospace fonts. +# Default: xos4 Terminus, Terminus, Monospace, "DejaVu Sans Mono", +# Monaco, "Bitstream Vera Sans Mono", "Andale Mono", "Courier New", +# Courier, "Liberation Mono", monospace, Fixed, Consolas, Terminal +_monospace = Terminus, Monospace, "DejaVu Sans Mono", Monaco, "Bitstream Vera Sans Mono", "Andale Mono", "Courier New", Courier, "Liberation Mono", monospace, Fixed, Consolas, Terminal + +# completion (Font): +# Font used in the completion widget. +# Default: 8pt ${_monospace} +completion = 8pt ${_monospace} + +# completion.category (Font): +# Font used in the completion categories. +# Default: bold ${completion} +completion.category = bold ${completion} + +# tabbar (QtFont): +# Font used in the tab bar. +# Default: 8pt ${_monospace} +tabbar = 8pt ${_monospace} + +# statusbar (Font): +# Font used in the statusbar. +# Default: 8pt ${_monospace} +statusbar = 8pt ${_monospace} + +# downloads (Font): +# Font used for the downloadbar. +# Default: 8pt ${_monospace} +downloads = 8pt ${_monospace} + +# hints (Font): +# Font used for the hints. +# Default: bold 13px ${_monospace} +hints = bold 13px ${_monospace} + +# debug-console (QtFont): +# Font used for the debugging console. +# Default: 8pt ${_monospace} +debug-console = 8pt ${_monospace} + +# web-family-standard (FontFamily): +# Font family for standard fonts. +# Default: +web-family-standard = + +# web-family-fixed (FontFamily): +# Font family for fixed fonts. +# Default: +web-family-fixed = + +# web-family-serif (FontFamily): +# Font family for serif fonts. +# Default: +web-family-serif = + +# web-family-sans-serif (FontFamily): +# Font family for sans-serif fonts. +# Default: +web-family-sans-serif = + +# web-family-cursive (FontFamily): +# Font family for cursive fonts. +# Default: +web-family-cursive = + +# web-family-fantasy (FontFamily): +# Font family for fantasy fonts. +# Default: +web-family-fantasy = + +# web-size-minimum (Int): +# The hard minimum font size. +# Default: 0 +web-size-minimum = 0 + +# web-size-minimum-logical (Int): +# The minimum logical font size that is applied when zooming out. +# Default: 6 +web-size-minimum-logical = 6 + +# web-size-default (Int): +# The default font size for regular text. +# Default: 16 +web-size-default = 16 + +# web-size-default-fixed (Int): +# The default font size for fixed-pitch text. +# Default: 13 +web-size-default-fixed = 13 + +# keyhint (Font): +# Font used in the keyhint widget. +# Default: 8pt ${_monospace} +keyhint = 8pt ${_monospace} + +# messages.error (Font): +# Font used for error messages. +# Default: 8pt ${_monospace} +messages.error = 8pt ${_monospace} + +# messages.warning (Font): +# Font used for warning messages. +# Default: 8pt ${_monospace} +messages.warning = 8pt ${_monospace} + +# messages.info (Font): +# Font used for info messages. +# Default: 8pt ${_monospace} +messages.info = 8pt ${_monospace} + +# prompts (Font): +# Font used for prompts. +# Default: 8pt sans-serif +prompts = 8pt sans-serif diff --git a/.config/qutebrowser/keys.conf b/.config/qutebrowser/keys.conf new file mode 100755 index 0000000..06fc600 --- /dev/null +++ b/.config/qutebrowser/keys.conf @@ -0,0 +1,709 @@ +# vim: ft=conf +# +# In this config file, qutebrowser's key bindings are configured. +# The format looks like this: +# +# [keymode] +# +# command +# keychain +# keychain2 +# ... +# +# All blank lines and lines starting with '#' are ignored. +# Inline-comments are not permitted. +# +# keymode is a comma separated list of modes in which the key binding should be +# active. If keymode starts with !, the key binding is active in all modes +# except the listed modes. +# +# For special keys (can't be part of a keychain), enclose them in `<`...`>`. +# For modifiers, you can use either `-` or `+` as delimiters, and these names: +# +# * Control: `Control`, `Ctrl` +# * Meta: `Meta`, `Windows`, `Mod4` +# * Alt: `Alt`, `Mod1` +# * Shift: `Shift` +# +# For simple keys (no `<>`-signs), a capital letter means the key is pressed +# with Shift. For special keys (with `<>`-signs), you need to explicitly add +# `Shift-` to match a key pressed with shift. +# +# Note that default keybindings are always bound, and need to be explicitly +# unbound if you wish to remove them: +# +# +# keychain +# keychain2 +# ... + +[!normal] + +leave-mode + + + +[normal] +# Keybindings for normal mode. + +clear-keychain ;; search ;; fullscreen --leave + + + +set-cmd-text -s :open + o + +set-cmd-text :open {url:pretty} + go + +set-cmd-text -s :open -t + O + +set-cmd-text :open -t -i {url:pretty} + gO + +set-cmd-text -s :open -b + xo + +set-cmd-text :open -b -i {url:pretty} + xO + +set-cmd-text -s :open -w + wo + +set-cmd-text :open -w {url:pretty} + wO + +set-cmd-text / + / + +set-cmd-text ? + ? + +set-cmd-text : + : + +open -t + ga + + +open -w + + +tab-close + d + + +tab-close -o + D + +tab-only + co + +tab-focus + T + +tab-move + gm + +tab-move - + gl + +tab-move + + gr + +tab-next + J + + +tab-prev + K + + +tab-clone + gC + +reload + r + + +reload -f + R + + +back + H + + +back -t + th + +back -w + wh + +forward + L + + +forward -t + tl + +forward -w + wl + +fullscreen + + +hint + f + +hint all tab + F + +hint all window + wf + +hint all tab-bg + ;b + +hint all tab-fg + ;f + +hint all hover + ;h + +hint images + ;i + +hint images tab + ;I + +hint links fill :open {hint-url} + ;o + +hint links fill :open -t -i {hint-url} + ;O + +hint links yank + ;y + +hint links yank-primary + ;Y + +hint --rapid links tab-bg + ;r + +hint --rapid links window + ;R + +hint links download + ;d + +hint inputs + ;t + +scroll left + h + +scroll down + j + +scroll up + k + +scroll right + l + +undo + u + + +scroll-perc 0 + gg + +scroll-perc + G + +search-next + n + +search-prev + N + +enter-mode insert + i + +enter-mode caret + v + +enter-mode set_mark + ` + +enter-mode jump_mark + ' + +yank + yy + +yank -s + yY + +yank title + yt + +yank title -s + yT + +yank domain + yd + +yank domain -s + yD + +yank pretty-url + yp + +yank pretty-url -s + yP + +open -- {clipboard} + pp + +open -- {primary} + pP + +open -t -- {clipboard} + Pp + +open -t -- {primary} + PP + +open -w -- {clipboard} + wp + +open -w -- {primary} + wP + +set-cmd-text -s :quickmark-load + b + +set-cmd-text -s :quickmark-load -t + B + +set-cmd-text -s :quickmark-load -w + wb + +set-cmd-text -s :bookmark-load + gb + +set-cmd-text -s :bookmark-load -t + gB + +set-cmd-text -s :bookmark-load -w + wB + +save + sf + +set-cmd-text -s :set + ss + +set-cmd-text -s :set -t + sl + +set-cmd-text -s :bind + sk + +zoom-out + - + +zoom-in + + + +zoom + = + +navigate prev + [[ + +navigate next + ]] + +navigate prev -t + {{ + +navigate next -t + }} + +navigate up + gu + +navigate up -t + gU + +navigate increment + + +navigate decrement + + +inspector + wi + +download + gd + +download-cancel + ad + +download-clear + cd + +view-source + gf + +set-cmd-text -s :buffer + gt + +tab-focus last + + +enter-mode passthrough + + +quit + + +scroll-page 0 1 + + +scroll-page 0 -1 + + +scroll-page 0 0.5 + + +scroll-page 0 -0.5 + + +tab-focus 1 + + +tab-focus 2 + + +tab-focus 3 + + +tab-focus 4 + + +tab-focus 5 + + +tab-focus 6 + + +tab-focus 7 + + +tab-focus 8 + + +tab-focus 9 + + +home + + +stop + + +print + + +open qute:settings + Ss + +follow-selected + + + + + + + +follow-selected -t + + + +repeat-command + . + +record-macro + q + +run-macro + @ + +spawn mpv {url} + mpv + m + +hint links spawn umpv {hint-urls} + MPV + +hint links spawn mpv {hint-url} + M + +spawn tsp-ytdl {hint-url} + ;M + +wq + ZZ + +tab-focus -1 + g$ + +tab-pin + + +[insert] +# Keybindings for insert mode. +# Since normal keypresses are passed through, only special keys are +# supported in this mode. +# Useful hidden commands to map in this section: +# * `open-editor`: Open a texteditor with the focused field. +# * `paste-primary`: Paste primary selection at cursor position. + +open-editor + + +insert-text {primary} + + +[hint] +# Keybindings for hint mode. +# Since normal keypresses are passed through, only special keys are +# supported in this mode. +# Useful hidden commands to map in this section: +# * `follow-hint`: Follow the currently selected hint. + +follow-hint + + + + + + + +hint --rapid links tab-bg + + +hint links + + +hint all tab-bg + + +[command] +# Keybindings for command mode. +# Since normal keypresses are passed through, only special keys are +# supported in this mode. +# Useful hidden commands to map in this section: +# * `command-history-prev`: Switch to previous command in history. +# * `command-history-next`: Switch to next command in history. +# * `completion-item-focus`: Select another item in completion. +# * `command-accept`: Execute the command currently in the commandline. + +command-history-prev + + +command-history-next + + +completion-item-focus prev + + + +completion-item-focus next + + + +completion-item-focus next-category + + +completion-item-focus prev-category + + +completion-item-del + + +command-accept + + + + + + + +[prompt] +# Keybindings for prompts in the status line. +# You can bind normal keys in this mode, but they will be only active +# when a yes/no-prompt is asked. For other prompt modes, you can only +# bind special keys. +# Useful hidden commands to map in this section: +# * `prompt-accept`: Confirm the entered value. +# * `prompt-accept yes`: Answer yes to a yes/no question. +# * `prompt-accept no`: Answer no to a yes/no question. + +prompt-accept + + + + + + + +prompt-accept yes + y + +prompt-accept no + n + +prompt-open-download + + +prompt-item-focus prev + + + +prompt-item-focus next + + + +[command,prompt] + +rl-backward-char + + +rl-forward-char + + +rl-backward-word + + +rl-forward-word + + +rl-beginning-of-line + + +rl-end-of-line + + +rl-unix-line-discard + + +rl-kill-line + + +rl-kill-word + + +rl-unix-word-rubout + + +rl-backward-kill-word + + +rl-yank + + +rl-delete-char + + +rl-backward-delete-char + + +[caret] + +toggle-selection + v + + +drop-selection + + +enter-mode normal + c + +move-to-next-line + j + +move-to-prev-line + k + +move-to-next-char + l + +move-to-prev-char + h + +move-to-end-of-word + e + +move-to-next-word + w + +move-to-prev-word + b + +move-to-start-of-next-block + ] + +move-to-start-of-prev-block + [ + +move-to-end-of-next-block + } + +move-to-end-of-prev-block + { + +move-to-start-of-line + 0 + +move-to-end-of-line + $ + +move-to-start-of-document + gg + +move-to-end-of-document + G + +yank selection -s + Y + +yank selection + y + + + + + + + +scroll left + H + +scroll down + J + +scroll up + K + +scroll right + L + diff --git a/.config/qutebrowser/misc/Makefile b/.config/qutebrowser/misc/Makefile new file mode 100644 index 0000000..210480e --- /dev/null +++ b/.config/qutebrowser/misc/Makefile @@ -0,0 +1,33 @@ +PYTHON = python3 +PREFIX = /usr/local +DESTDIR = +ICONSIZES = 16 24 32 48 64 128 256 512 + +SETUPTOOLSOPTIONS = +ifdef DESTDIR +SETUPTOOLSOPTS = --root="$(DESTDIR)" +endif + +.PHONY: install + +doc/qutebrowser.1.html: + a2x -f manpage doc/qutebrowser.1.asciidoc + +install: doc/qutebrowser.1.html + $(PYTHON) setup.py install --prefix="$(PREFIX)" --optimize=1 $(SETUPTOOLSOPTS) + install -Dm644 misc/qutebrowser.appdata.xml \ + "$(DESTDIR)$(PREFIX)/share/metainfo/qutebrowser.appdata.xml" + install -Dm644 doc/qutebrowser.1 \ + "$(DESTDIR)$(PREFIX)/share/man/man1/qutebrowser.1" + install -Dm644 misc/qutebrowser.desktop \ + "$(DESTDIR)$(PREFIX)/share/applications/qutebrowser.desktop" + $(foreach i,$(ICONSIZES),install -Dm644 "icons/qutebrowser-$(i)x$(i).png" \ + "$(DESTDIR)$(PREFIX)/share/icons/hicolor/$(i)x$(i)/apps/qutebrowser.png";) + install -Dm644 icons/qutebrowser.svg \ + "$(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/qutebrowser.svg" + install -Dm755 -t "$(DESTDIR)$(PREFIX)/share/qutebrowser/userscripts/" \ + $(wildcard misc/userscripts/*) + install -Dm755 -t "$(DESTDIR)$(PREFIX)/share/qutebrowser/scripts/" \ + $(filter-out scripts/__init__.py scripts/__pycache__ scripts/dev \ + scripts/testbrowser scripts/asciidoc2html.py scripts/setupcommon.py \ + scripts/link_pyqt.py,$(wildcard scripts/*)) diff --git a/.config/qutebrowser/misc/apparmor/usr.bin.qutebrowser b/.config/qutebrowser/misc/apparmor/usr.bin.qutebrowser new file mode 100644 index 0000000..b993e00 --- /dev/null +++ b/.config/qutebrowser/misc/apparmor/usr.bin.qutebrowser @@ -0,0 +1,41 @@ +# AppArmor profile for qutebrowser +# Tested on Debian jessie + +#include + +profile qutebrowser /usr/{local/,}bin/qutebrowser { + + #include + #include + #include + #include + #include + #include + #include + #include + #include + + capability dac_override, + + /usr/{local/,}bin/ r, + /usr/{local/,}bin/qutebrowser rix, + /usr/bin/python3.? r, + + /usr/lib/python3/ mr, + /usr/lib/python3/** mr, + /usr/lib/python3.?/ r, + /usr/lib/python3.?/** mr, + /usr/local/lib/python3.?/** r, + + /proc/*/mounts r, + owner /tmp/** rwkl, + owner /run/user/*/ rw, + owner /run/user/*/** krw, + + @{HOME}/.config/qutebrowser/** krw, + @{HOME}/.local/share/qutebrowser/** krw, + @{HOME}/.cache/qutebrowser/** krw, + @{HOME}/.gstreamer-0.10/* r, + +} + diff --git a/.config/qutebrowser/misc/cheatsheet.svg b/.config/qutebrowser/misc/cheatsheet.svg new file mode 100644 index 0000000..bb87142 --- /dev/null +++ b/.config/qutebrowser/misc/cheatsheet.svg @@ -0,0 +1,3726 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + Q + + R + + + W + q + w + + + + + + + + + + + + + + E + e + + r + t + y + u + i + o + p +   + + + + + + + + + A + F + S + a + s + + + + + + + + + + + + + + + D + d + f + g + h + j + k + + + + + + l + ; + + + + ' + + + + + + + + z + x + + + + + + + + + + + + + + + + + + + c + v + b + n + m + , + + + + + + . + / + + + + + + + + + + + + 1 + 2 + + + + + + + + + + + + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 0 + + + + + - + = + + Backspace + ! + @ + # + $ + % + ^ + & + * + ( + ) + + + Space + + Z + X + C + V + B + N + M + < + > + ? + G + H + J + K + L + : + T + Y + U + I + O + P + + + + + + + [ + ] + \ + { + } + | + '"l " + ` + ~ +  reload + TabTa Tab + + qutebrowser default bindings +  scrolldown +  scrollup +  nexttab +  previoustab +  scrollleft +  scrollright +   open (6) +  open innew tab(6) +  closetab +  hint(labellinks) (8) +  undoclosingtab +  insert-mode + _ + + +  zoomout +  zoomin + setzoomlevel + + Esc +  hint(newtab) +  back (7) +   forward(7) +   search +   cmdmode +  searchnext +  searchprev + savequick-mark +  yank/copy (1) +  paste(2) +   Website: https://www.qutebrowser.org/ IRC: #qutebrowser on FreenodeMailinglist: qutebrowser@lists.qutebrowser.org  scroll tobottom/perc.  +  loadquick-mark (8) +  loadquickm.(tab)  + (1) copying/yanking:yy - copy/yank URLyY - copy URL to selectionyt - copy title to clipboardyT - copy title to selection  (2) pasting:pp - open URL from clipboardpP - open URL from selectionPp - like pp, in new tabPP - like pP, in new tabwp - like pp, in new windowwP - like pP, in new window  (3) navigation:[[ - click "previous"-link on page]] - click "next"-link on page  {{ - like [[, in new tab}} - like ]], in new tab<Ctrl-A> - increment no. in URL<Ctrl-X> - decrement no. in URL  (3) + (3) + (3) + (3) + (4) scrolling:<Ctrl-F> - page down<Ctrl-B> - page up<Ctrl-D> - half page down<Ctrl-U> - half page up in prompt mode:Enter - accept prompty - answer yes to promptn - answer no to prompt  (6) opening:go - edit & open current URLgO - like  go, in new tabxO - like go, in bg. tabxo - open in background tabwo - open in new window   gg: (10)scrollto top  +  normalmode + (7) back/forward:th - back (in new tab)wh - back (in new window)tl - forward (in new tab)wl - forward (in new window)    ext.hints (9) + (8)prefix with w - in new window  (9) extended hint mode:;b - open hint in background tab;f - open hint in foreground tab;h - hover over hint (mouse-over);i - hint images;I - hint images in new tab;t - hint inputs;o - put hinted URL in cmd. line;O - like ;o, in new tab;y - yank hinted URL to clipboard;Y - yank hinted URL to selection;r - rapid hinting;R - like ;r, in new window;d - download hinted URL (10) misc. commands:gt - switch tabs by namegm/gl/gr - move tab (to index/left/right)gC - clone tab  gf - view page sourcegu - navigate up in URLgU - like gu, in new tabsf - save configss - set settingsl - set temp. settingsk - bind keySs - show settingswi - open web inspectorgd - download pagead - cancel downloadco - close other tabscd - clear downloads  (10) + (10) + (10) + (11) modifier commands:<Alt-num> - select tab<Ctrl-Tab> - select prev. tab<Ctrl-V> - passthrough mode<Ctrl-Q> - quit<Ctrl-H> - home<Ctrl-S> - stop loading<Ctrl-Alt-P> - printin insert mode:<Ctrl-E> - open editorin command mode:<Ctrl-P> - prev. history item<Ctrl-N> - next history item<Ctrl-D> - delete current item + + + + + Ctrl + (11) + + + Alt + (11) + + + Alt + (11) + + + Ctrl + (11) + +  selecttab + (10) +   searchbackw. +  paste(2) +  yank/copy (1) + (10) + blue keys can beprefixed by a count  reload (bypass cache) + visualmode +  jump toscrollmark + repeatcmd +  runmacro +  recordmacro +  setscrollmark + savebook-mark +  cyclecompletionitems +  toggle(12) + (12) toggling settings:tsh - toggle scripts for the current host (temporarily)tSh - like tsh, but permanentlytsH/tsu - like tsh, but including subdomains / with exact URLtph - toggle plugins + diff --git a/.config/qutebrowser/misc/qutebrowser.appdata.xml b/.config/qutebrowser/misc/qutebrowser.appdata.xml new file mode 100644 index 0000000..bdab55f --- /dev/null +++ b/.config/qutebrowser/misc/qutebrowser.appdata.xml @@ -0,0 +1,48 @@ + + + + org.qutebrowser.qutebrowser + CC-BY-SA-3.0 + GPL-3.0 + qutebrowser + A keyboard-driven web browser + +

+ qutebrowser is a keyboard-focused browser with a minimal GUI. + It was inspired by other browsers/addons like dwb and Vimperator/Pentadactyl, + and is based on Python and PyQt5. +

+
+ + Network + WebBrowser + + + qutebrowser + + qutebrowser.desktop + + + https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/img/main.png + + + https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/img/downloads.png + + + https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/img/completion.png + + + https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/img/hints.png + + + https://www.qutebrowser.org + https://qutebrowser.org/doc/faq.html + https://qutebrowser.org/doc/help/ + https://github.com/qutebrowser/qutebrowser/issues/ + https://github.com/qutebrowser/qutebrowser#donating + + + + + +
diff --git a/.config/qutebrowser/misc/qutebrowser.desktop b/.config/qutebrowser/misc/qutebrowser.desktop new file mode 100644 index 0000000..5243b0c --- /dev/null +++ b/.config/qutebrowser/misc/qutebrowser.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Name=qutebrowser +GenericName=Web Browser +Comment=A keyboard-driven, vim-like browser based on PyQt5 +Icon=qutebrowser +Type=Application +Categories=Network;WebBrowser; +Exec=qutebrowser %u +Terminal=false +StartupNotify=false +MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/qute; +Keywords=Browser diff --git a/.config/qutebrowser/misc/qutebrowser.nsi b/.config/qutebrowser/misc/qutebrowser.nsi new file mode 100644 index 0000000..76f459a --- /dev/null +++ b/.config/qutebrowser/misc/qutebrowser.nsi @@ -0,0 +1,80 @@ +Name "qutebrowser" + +Unicode true +RequestExecutionLevel admin +SetCompressor /solid lzma + +!ifdef X64 + OutFile "..\dist\qutebrowser-${VERSION}-amd64.exe" + InstallDir "$ProgramFiles64\qutebrowser" +!else + OutFile "..\dist\qutebrowser-${VERSION}-win32.exe" + InstallDir "$ProgramFiles\qutebrowser" +!endif + +;Default installation folder + +!include "MUI2.nsh" +;!include "MultiUser.nsh" + +!define MUI_ABORTWARNING +;!define MULTIUSER_MUI +;!define MULTIUSER_INSTALLMODE_COMMANDLINE +!define MUI_ICON "../icons/qutebrowser.ico" +!define MUI_UNICON "../icons/qutebrowser.ico" + +!insertmacro MUI_PAGE_LICENSE "..\LICENSE" +!insertmacro MUI_PAGE_DIRECTORY +!insertmacro MUI_PAGE_INSTFILES +!insertmacro MUI_UNPAGE_CONFIRM +!insertmacro MUI_UNPAGE_INSTFILES + +!insertmacro MUI_LANGUAGE "English" + +; depends on admin status +;SetShellVarContext current + + +Section "Install" + + ; Uninstall old versions + ExecWait 'MsiExec.exe /quiet /qn /norestart /X{633F41F9-FE9B-42D1-9CC4-718CBD01EE11}' + ExecWait 'MsiExec.exe /quiet /qn /norestart /X{9331D947-AC86-4542-A755-A833429C6E69}' + IfFileExists "$INSTDIR\uninst.exe" 0 +2 + ExecWait "$INSTDIR\uninst.exe /S _?=$INSTDIR" + CreateDirectory "$INSTDIR" + + SetOutPath "$INSTDIR" + + !ifdef X64 + file /r "..\dist\qutebrowser-${VERSION}-x64\*.*" + !else + file /r "..\dist\qutebrowser-${VERSION}-x86\*.*" + !endif + + SetShellVarContext all + CreateShortCut "$SMPROGRAMS\qutebrowser.lnk" "$INSTDIR\qutebrowser.exe" + + ;Create uninstaller + WriteUninstaller "$INSTDIR\uninst.exe" + + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\qutebrowser" "DisplayName" "qutebrowser" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\qutebrowser" "UninstallString" '"$INSTDIR\uninst.exe"' + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\qutebrowser" "QuietUninstallString" '"$INSTDIR\uninst.exe" /S' + +SectionEnd + +;-------------------------------- +;Uninstaller Section + +Section "Uninstall" + + SetShellVarContext all + Delete "$SMPROGRAMS\qutebrowser.lnk" + + RMDir /r "$INSTDIR\*.*" + RMDir "$INSTDIR" + + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\qutebrowser" + +SectionEnd diff --git a/.config/qutebrowser/misc/qutebrowser.rcc b/.config/qutebrowser/misc/qutebrowser.rcc new file mode 100644 index 0000000..2f73b37 --- /dev/null +++ b/.config/qutebrowser/misc/qutebrowser.rcc @@ -0,0 +1,13 @@ + + + icons/qutebrowser-16x16.png + icons/qutebrowser-24x24.png + icons/qutebrowser-32x32.png + icons/qutebrowser-48x48.png + icons/qutebrowser-64x64.png + icons/qutebrowser-96x96.png + icons/qutebrowser-128x128.png + icons/qutebrowser-256x256.png + icons/qutebrowser-512x512.png + + diff --git a/.config/qutebrowser/misc/qutebrowser.spec b/.config/qutebrowser/misc/qutebrowser.spec new file mode 100644 index 0000000..c886fb0 --- /dev/null +++ b/.config/qutebrowser/misc/qutebrowser.spec @@ -0,0 +1,76 @@ +# -*- mode: python -*- + +import sys +import os + +sys.path.insert(0, os.getcwd()) +from scripts import setupcommon + +block_cipher = None + + +def get_data_files(): + data_files = [ + ('../qutebrowser/html', 'html'), + ('../qutebrowser/img', 'img'), + ('../qutebrowser/javascript', 'javascript'), + ('../qutebrowser/html/doc', 'html/doc'), + ('../qutebrowser/git-commit-id', '.'), + ('../qutebrowser/config/configdata.yml', 'config'), + ] + + # if os.path.exists(os.path.join('qutebrowser', '3rdparty', 'pdfjs')): + # data_files.append(('../qutebrowser/3rdparty/pdfjs', '3rdparty/pdfjs')) + # else: + # print("Warning: excluding pdfjs as it's not present!") + + return data_files + + +setupcommon.write_git_file() + + +if os.name == 'nt': + icon = 'icons/qutebrowser.ico' +elif sys.platform == 'darwin': + icon = 'icons/qutebrowser.icns' +else: + icon = None + + +a = Analysis(['../qutebrowser/__main__.py'], + pathex=['misc'], + binaries=None, + datas=get_data_files(), + hiddenimports=['PyQt5.QtOpenGL', 'PyQt5._QOpenGLFunctions_2_0'], + hookspath=[], + runtime_hooks=[], + excludes=['tkinter'], + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=block_cipher) +pyz = PYZ(a.pure, a.zipped_data, + cipher=block_cipher) +exe = EXE(pyz, + a.scripts, + exclude_binaries=True, + name='qutebrowser', + icon=icon, + debug=False, + strip=False, + upx=False, + console=False, + version='misc/file_version_info.txt') +coll = COLLECT(exe, + a.binaries, + a.zipfiles, + a.datas, + strip=False, + upx=False, + name='qutebrowser') + +app = BUNDLE(coll, + name='qutebrowser.app', + icon=icon, + # https://github.com/pyinstaller/pyinstaller/blob/b78bfe530cdc2904f65ce098bdf2de08c9037abb/PyInstaller/hooks/hook-PyQt5.QtWebEngineWidgets.py#L24 + bundle_identifier='org.qt-project.Qt.QtWebEngineCore') diff --git a/.config/qutebrowser/misc/requirements/README.md b/.config/qutebrowser/misc/requirements/README.md new file mode 100644 index 0000000..6ae9862 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/README.md @@ -0,0 +1,20 @@ +This directory contains various `requirements` files which are used by `tox` to +have reproducible tests with pinned versions. + +The files are generated based on unpinned requirements in `*.txt-raw` files. + +Those files can also contain some special commands: + +- Add an additional comment to a line: `#@ comment: ` +- Filter a line for requirements.io: `#@ filter: ` +- Don't include a package in the output: `#@ ignore: ` (or multiple packages) +- Replace a part of a frozen package specification with another: `#@ replace ` + +Some examples: + +``` +#@ comment: mypkg blah blub +#@ filter: mypkg != 1.0.0 +#@ ignore: mypkg, otherpkg +#@ replace: foo bar +``` diff --git a/.config/qutebrowser/misc/requirements/requirements-check-manifest.txt b/.config/qutebrowser/misc/requirements/requirements-check-manifest.txt new file mode 100644 index 0000000..c11a3f7 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-check-manifest.txt @@ -0,0 +1,3 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +check-manifest==0.37 diff --git a/.config/qutebrowser/misc/requirements/requirements-check-manifest.txt-raw b/.config/qutebrowser/misc/requirements/requirements-check-manifest.txt-raw new file mode 100644 index 0000000..dcc0efe --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-check-manifest.txt-raw @@ -0,0 +1 @@ +check-manifest diff --git a/.config/qutebrowser/misc/requirements/requirements-codecov.txt b/.config/qutebrowser/misc/requirements/requirements-codecov.txt new file mode 100644 index 0000000..9fed7b3 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-codecov.txt @@ -0,0 +1,9 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +certifi==2018.4.16 +chardet==3.0.4 +codecov==2.0.15 +coverage==4.5.1 +idna==2.7 +requests==2.19.1 +urllib3==1.23 diff --git a/.config/qutebrowser/misc/requirements/requirements-codecov.txt-raw b/.config/qutebrowser/misc/requirements/requirements-codecov.txt-raw new file mode 100644 index 0000000..15f1c72 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-codecov.txt-raw @@ -0,0 +1 @@ +codecov diff --git a/.config/qutebrowser/misc/requirements/requirements-flake8.txt b/.config/qutebrowser/misc/requirements/requirements-flake8.txt new file mode 100644 index 0000000..b4f0045 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-flake8.txt @@ -0,0 +1,27 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +attrs==18.1.0 +flake8==3.5.0 +flake8-bugbear==18.2.0 +flake8-builtins==1.4.1 # rq.filter: != 1.4.0 +flake8-comprehensions==1.4.1 +flake8-copyright==0.2.0 +flake8-debugger==3.1.0 +flake8-deprecated==1.3 +flake8-docstrings==1.3.0 +flake8-future-import==0.4.5 +flake8-mock==0.3 +flake8-per-file-ignores==0.6 +flake8-polyfill==1.0.2 +flake8-string-format==0.2.3 +flake8-tidy-imports==1.1.0 +flake8-tuple==0.2.13 +mccabe==0.6.1 +pathmatch==0.2.1 +pep8-naming==0.7.0 +pycodestyle==2.3.1 # rq.filter: < 2.4.0 +pydocstyle==2.1.1 +pyflakes==2.0.0 +six==1.11.0 +snowballstemmer==1.2.1 +typing==3.6.4 diff --git a/.config/qutebrowser/misc/requirements/requirements-flake8.txt-raw b/.config/qutebrowser/misc/requirements/requirements-flake8.txt-raw new file mode 100644 index 0000000..7ccbbce --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-flake8.txt-raw @@ -0,0 +1,23 @@ +flake8 +flake8-bugbear +flake8-builtins!=1.4.0 +flake8-comprehensions +flake8-copyright +flake8-debugger +flake8-deprecated +flake8-docstrings +flake8-future-import +flake8-mock +flake8-per-file-ignores +flake8-string-format +flake8-tidy-imports +flake8-tuple +pep8-naming +pydocstyle +pyflakes + +# https://github.com/PyCQA/pycodestyle/issues/741 +#@ filter: pycodestyle < 2.4.0 + +# https://github.com/gforcada/flake8-builtins/issues/36 +#@ filter: flake8-builtins != 1.4.0 diff --git a/.config/qutebrowser/misc/requirements/requirements-pip.txt b/.config/qutebrowser/misc/requirements/requirements-pip.txt new file mode 100644 index 0000000..bf003fc --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pip.txt @@ -0,0 +1,8 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +appdirs==1.4.3 +packaging==17.1 +pyparsing==2.2.0 +setuptools==40.0.0 +six==1.11.0 +wheel==0.31.1 diff --git a/.config/qutebrowser/misc/requirements/requirements-pyinstaller.txt b/.config/qutebrowser/misc/requirements/requirements-pyinstaller.txt new file mode 100644 index 0000000..e916393 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pyinstaller.txt @@ -0,0 +1,7 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +altgraph==0.15 +future==0.16.0 +macholib==1.9 +pefile==2017.11.5 +PyInstaller==3.3.1 diff --git a/.config/qutebrowser/misc/requirements/requirements-pyinstaller.txt-raw b/.config/qutebrowser/misc/requirements/requirements-pyinstaller.txt-raw new file mode 100644 index 0000000..c313980 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pyinstaller.txt-raw @@ -0,0 +1 @@ +PyInstaller diff --git a/.config/qutebrowser/misc/requirements/requirements-pylint-master.txt b/.config/qutebrowser/misc/requirements/requirements-pylint-master.txt new file mode 100644 index 0000000..2df0736 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pylint-master.txt @@ -0,0 +1,19 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +-e git+https://github.com/PyCQA/astroid.git#egg=astroid +certifi==2018.4.16 +chardet==3.0.4 +github3.py==1.1.0 +idna==2.7 +isort==4.3.4 +lazy-object-proxy==1.3.1 +mccabe==0.6.1 +-e git+https://github.com/PyCQA/pylint.git#egg=pylint +python-dateutil==2.7.3 +./scripts/dev/pylint_checkers +requests==2.19.1 +six==1.11.0 +typed-ast==1.1.0 +uritemplate==3.0.0 +urllib3==1.23 +wrapt==1.10.11 diff --git a/.config/qutebrowser/misc/requirements/requirements-pylint-master.txt-raw b/.config/qutebrowser/misc/requirements/requirements-pylint-master.txt-raw new file mode 100644 index 0000000..405b0ab --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pylint-master.txt-raw @@ -0,0 +1,11 @@ +-e git+https://github.com/PyCQA/astroid.git#egg=astroid +-e git+https://github.com/PyCQA/pylint.git#egg=pylint +./scripts/dev/pylint_checkers +requests +github3.py + +# remove @commit-id for scm installs +#@ replace: @.*# # + +# fix qute-pylint location +#@ replace: qute-pylint==.* ./scripts/dev/pylint_checkers diff --git a/.config/qutebrowser/misc/requirements/requirements-pylint.txt b/.config/qutebrowser/misc/requirements/requirements-pylint.txt new file mode 100644 index 0000000..e78dfe2 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pylint.txt @@ -0,0 +1,19 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +astroid==2.0.1 +certifi==2018.4.16 +chardet==3.0.4 +github3.py==1.1.0 +idna==2.7 +isort==4.3.4 +lazy-object-proxy==1.3.1 +mccabe==0.6.1 +pylint==2.0.1 +python-dateutil==2.7.3 +./scripts/dev/pylint_checkers +requests==2.19.1 +six==1.11.0 +typed-ast==1.1.0 +uritemplate==3.0.0 +urllib3==1.23 +wrapt==1.10.11 diff --git a/.config/qutebrowser/misc/requirements/requirements-pylint.txt-raw b/.config/qutebrowser/misc/requirements/requirements-pylint.txt-raw new file mode 100644 index 0000000..37252ee --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pylint.txt-raw @@ -0,0 +1,7 @@ +pylint +./scripts/dev/pylint_checkers +requests +github3.py + +# fix qute-pylint location +#@ replace: qute-pylint==.* ./scripts/dev/pylint_checkers diff --git a/.config/qutebrowser/misc/requirements/requirements-pyqt.txt b/.config/qutebrowser/misc/requirements/requirements-pyqt.txt new file mode 100644 index 0000000..2878a55 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pyqt.txt @@ -0,0 +1,4 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +PyQt5==5.11.2 +PyQt5-sip==4.19.12 diff --git a/.config/qutebrowser/misc/requirements/requirements-pyqt.txt-raw b/.config/qutebrowser/misc/requirements/requirements-pyqt.txt-raw new file mode 100644 index 0000000..37a69c4 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pyqt.txt-raw @@ -0,0 +1 @@ +PyQt5 \ No newline at end of file diff --git a/.config/qutebrowser/misc/requirements/requirements-pyroma.txt b/.config/qutebrowser/misc/requirements/requirements-pyroma.txt new file mode 100644 index 0000000..6afd097 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pyroma.txt @@ -0,0 +1,4 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +docutils==0.14 +pyroma==2.3.1 diff --git a/.config/qutebrowser/misc/requirements/requirements-pyroma.txt-raw b/.config/qutebrowser/misc/requirements/requirements-pyroma.txt-raw new file mode 100644 index 0000000..5ddfb65 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pyroma.txt-raw @@ -0,0 +1 @@ +pyroma diff --git a/.config/qutebrowser/misc/requirements/requirements-qutebrowser.txt-raw b/.config/qutebrowser/misc/requirements/requirements-qutebrowser.txt-raw new file mode 100644 index 0000000..c66c65b --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-qutebrowser.txt-raw @@ -0,0 +1,7 @@ +Jinja2 +Pygments +pyPEG2 +PyYAML +colorama +cssutils +attrs diff --git a/.config/qutebrowser/misc/requirements/requirements-tests-git.txt b/.config/qutebrowser/misc/requirements/requirements-tests-git.txt new file mode 100644 index 0000000..ce00cd3 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-tests-git.txt @@ -0,0 +1,38 @@ +bzr+lp:beautifulsoup +git+https://github.com/cherrypy/cheroot.git +hg+https://bitbucket.org/ned/coveragepy +git+https://github.com/micheles/decorator.git +git+https://github.com/pallets/flask.git +git+https://github.com/miracle2k/python-glob2.git +git+https://github.com/HypothesisWorks/hypothesis-python.git +git+https://github.com/pallets/itsdangerous.git +git+https://bitbucket.org/zzzeek/mako.git +git+https://github.com/r1chardj0n3s/parse.git +git+https://github.com/jenisys/parse_type.git +hg+https://bitbucket.org/pytest-dev/py +git+https://github.com/pytest-dev/pytest.git@features +git+https://github.com/pytest-dev/pytest-bdd.git +git+https://github.com/pytest-dev/pytest-cov.git +git+https://github.com/pytest-dev/pytest-faulthandler.git +git+https://github.com/pytest-dev/pytest-instafail.git +git+https://github.com/pytest-dev/pytest-mock.git +git+https://github.com/pytest-dev/pytest-qt.git +git+https://github.com/pytest-dev/pytest-repeat.git +git+https://github.com/pytest-dev/pytest-rerunfailures.git +git+https://github.com/abusalimov/pytest-travis-fold.git +git+https://github.com/The-Compiler/pytest-xvfb.git +hg+https://bitbucket.org/gutworth/six +hg+https://bitbucket.org/jendrikseipp/vulture +git+https://github.com/pallets/werkzeug.git + + +## qutebrowser dependencies + +git+https://github.com/tartley/colorama.git +hg+https://bitbucket.org/cthedot/cssutils +git+https://github.com/pallets/jinja.git +git+https://github.com/pallets/markupsafe.git +hg+http://bitbucket.org/birkenfeld/pygments-main +hg+https://bitbucket.org/fdik/pypeg +git+https://github.com/python-attrs/attrs.git +git+https://github.com/yaml/pyyaml.git diff --git a/.config/qutebrowser/misc/requirements/requirements-tests.txt b/.config/qutebrowser/misc/requirements/requirements-tests.txt new file mode 100644 index 0000000..07b0378 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-tests.txt @@ -0,0 +1,42 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +atomicwrites==1.1.5 +attrs==18.1.0 +backports.functools-lru-cache==1.5 +beautifulsoup4==4.6.0 +cheroot==6.3.3 +click==6.7 +# colorama==0.3.9 +coverage==4.5.1 +EasyProcess==0.2.3 +fields==5.0.0 +Flask==1.0.2 +glob2==0.6 +hunter==2.0.2 +hypothesis==3.66.6 +itsdangerous==0.24 +# Jinja2==2.10 +Mako==1.0.7 +# MarkupSafe==1.0 +more-itertools==4.2.0 +parse==1.8.4 +parse-type==0.4.2 +pluggy==0.6.0 +py==1.5.4 +py-cpuinfo==4.0.0 +pytest==3.6.3 +pytest-bdd==2.21.0 +pytest-benchmark==3.1.1 +pytest-cov==2.5.1 +pytest-faulthandler==1.5.0 +pytest-instafail==0.4.0 +pytest-mock==1.10.0 +pytest-qt==3.0.0 +pytest-repeat==0.5.0 +pytest-rerunfailures==4.1 +pytest-travis-fold==1.3.0 +pytest-xvfb==1.1.0 +PyVirtualDisplay==0.2.1 +six==1.11.0 +vulture==0.28 +Werkzeug==0.14.1 diff --git a/.config/qutebrowser/misc/requirements/requirements-tests.txt-raw b/.config/qutebrowser/misc/requirements/requirements-tests.txt-raw new file mode 100644 index 0000000..1216899 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-tests.txt-raw @@ -0,0 +1,21 @@ +beautifulsoup4 +cheroot +coverage +Flask +hunter +hypothesis +pytest +pytest-bdd +pytest-benchmark +pytest-cov +pytest-faulthandler +pytest-instafail +pytest-mock +pytest-qt +pytest-repeat +pytest-rerunfailures +pytest-travis-fold +pytest-xvfb +vulture + +#@ ignore: Jinja2, MarkupSafe, colorama diff --git a/.config/qutebrowser/misc/requirements/requirements-tox.txt b/.config/qutebrowser/misc/requirements/requirements-tox.txt new file mode 100644 index 0000000..e8c660e --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-tox.txt @@ -0,0 +1,9 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +packaging==17.1 +pluggy==0.6.0 +py==1.5.4 +pyparsing==2.2.0 +six==1.11.0 +tox==3.1.2 +virtualenv==16.0.0 diff --git a/.config/qutebrowser/misc/requirements/requirements-tox.txt-raw b/.config/qutebrowser/misc/requirements/requirements-tox.txt-raw new file mode 100644 index 0000000..053148f --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-tox.txt-raw @@ -0,0 +1 @@ +tox diff --git a/.config/qutebrowser/misc/requirements/requirements-vulture.txt b/.config/qutebrowser/misc/requirements/requirements-vulture.txt new file mode 100644 index 0000000..c8a26e8 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-vulture.txt @@ -0,0 +1,3 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +vulture==0.28 diff --git a/.config/qutebrowser/misc/requirements/requirements-vulture.txt-raw b/.config/qutebrowser/misc/requirements/requirements-vulture.txt-raw new file mode 100644 index 0000000..a10f860 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-vulture.txt-raw @@ -0,0 +1 @@ +vulture diff --git a/.config/qutebrowser/misc/userscripts/cast b/.config/qutebrowser/misc/userscripts/cast new file mode 100755 index 0000000..f7b64df --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/cast @@ -0,0 +1,156 @@ +#!/usr/bin/env bash +# +# Behaviour +# Userscript for qutebrowser which casts the url passed in $1 to the default +# ChromeCast device in the network using the program `castnow` +# +# Usage +# You can launch the script from qutebrowser as follows: +# spawn --userscript ${PATH_TO_FILE} {url} +# +# Then, you can control the chromecast by launching the simple command +# `castnow` in a shell which will connect to the running castnow instance. +# +# For stopping the script, issue the command `pkill -f castnow` which would +# then let the rest of the userscript execute for cleaning temporary file. +# +# Thanks +# This userscript borrows Thorsten Wißmann's javascript code from his `mpv` +# userscript. +# +# Dependencies +# - castnow, https://github.com/xat/castnow +# +# Author +# Simon Désaulniers + +if [ -z "$QUTE_FIFO" ] ; then + cat 1>&2 <&2 + else + echo "message-$cmd '${msg//\'/\\\'}'" >> "$QUTE_FIFO" + fi +} + +js() { +cat < + The video is being cast on your ChromeCast device. +

+

+ In order to restore this particular video + click here. +

+ "; + replacement.style.position = "relative"; + replacement.style.zIndex = "100003000000"; + replacement.style.fontSize = "1rem"; + replacement.style.textAlign = "center"; + replacement.style.verticalAlign = "middle"; + replacement.style.height = "100%"; + replacement.style.background = "#101010"; + replacement.style.color = "white"; + replacement.style.border = "4px dashed #545454"; + replacement.style.padding = "2em"; + replacement.style.margin = "auto"; + App.all_replacements[i] = replacement; + App.backup_videos[i] = video; + video.parentNode.replaceChild(replacement, video); + } + + function restore_video(obj, index) { + obj = App.all_replacements[index]; + video = App.backup_videos[index]; + console.log(video); + obj.parentNode.replaceChild(video, obj); + } + + /** force repainting the video, thanks to: + * http://martinwolf.org/2014/06/10/force-repaint-of-an-element-with-javascript/ + */ + var siteHeader = document.getElementById('header'); + siteHeader.style.display='none'; + siteHeader.offsetHeight; // no need to store this anywhere, the reference is enough + siteHeader.style.display='block'; + +EOF +} + +printjs() { + js | sed 's,//.*$,,' | tr '\n' ' ' +} +echo "jseval -q $(printjs)" >> "$QUTE_FIFO" + +tmpdir=$(mktemp -d) +file_to_cast=${tmpdir}/qutecast +program_=$(command -v castnow) + +if [[ "${program_}" == "" ]]; then + msg error "castnow can't be found..." + exit 1 +fi + +# kill any running instance of castnow +pkill -f "${program_}" + +# start youtube download in stream mode (-o -) into temporary file +youtube-dl -qo - "$1" > "${file_to_cast}" & +ytdl_pid=$! + +msg info "Casting $1" >> "$QUTE_FIFO" +# start castnow in stream mode to cast on ChromeCast +tail -F "${file_to_cast}" | ${program_} - + +# cleanup remaining background process and file on disk +kill ${ytdl_pid} +rm -rf "${tmpdir}" diff --git a/.config/qutebrowser/misc/userscripts/dmenu_qutebrowser b/.config/qutebrowser/misc/userscripts/dmenu_qutebrowser new file mode 100755 index 0000000..82e6d2f --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/dmenu_qutebrowser @@ -0,0 +1,48 @@ +#!/usr/bin/env bash + +# Copyright 2015 Zach-Button +# Copyright 2015-2017 Florian Bruhin (The Compiler) +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see . + +# Pipes history, quickmarks, and URL into dmenu. +# +# If run from qutebrowser as a userscript, it runs :open on the URL +# If not, it opens a new qutebrowser window at the URL +# +# Ideal for use with tabs_are_windows. Set a hotkey to launch this script, then: +# :bind o spawn --userscript dmenu_qutebrowser +# +# Use the hotkey to open in new tab/window, press 'o' to open URL in current tab/window +# You can simulate "go" by pressing "o", as the current URL is always first in the list +# +# I personally use "o" to launch this script. For me, my workflow is: +# Default keys Keys with this script +# O o +# o o +# go o +# gO gC, then o +# (This is unnecessarily long. I use this rarely, feel free to make this script accept parameters.) +# + +[ -z "$QUTE_URL" ] && QUTE_URL='http://google.com' + +url=$(echo "$QUTE_URL" | cat - "$QUTE_CONFIG_DIR/quickmarks" "$QUTE_DATA_DIR/history" | dmenu -l 15 -p qutebrowser) +url=$(echo "$url" | sed -E 's/[^ ]+ +//g' | grep -E "https?:" || echo "$url") + +[ -z "${url// }" ] && exit + +echo "open $url" >> "$QUTE_FIFO" || qutebrowser "$url" diff --git a/.config/qutebrowser/misc/userscripts/format_json b/.config/qutebrowser/misc/userscripts/format_json new file mode 100755 index 0000000..0d476b3 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/format_json @@ -0,0 +1,42 @@ +#!/bin/sh +set -euo pipefail +# +# Behavior: +# Userscript for qutebrowser which will take the raw JSON text of the current +# page, format it using `jq`, will add syntax highlighting using `pygments`, +# and open the syntax highlighted pretty printed html in a new tab. If the file +# is larger than 10MB then this script will only indent the json and will forego +# syntax highlighting using pygments. +# +# In order to use this script, just start it using `spawn --userscript` from +# qutebrowser. I recommend using an alias, e.g. put this in the +# [alias]-section of qutebrowser.conf: +# +# json = spawn --userscript /path/to/json_format +# +# Note that the color style defaults to monokai, but a different pygments style +# can be passed as the first parameter to the script. A full list of the pygments +# styles can be found at: https://help.farbox.com/pygments.html +# +# Bryan Gilbert, 2017 + +# do not run pygmentize on files larger than this amount of bytes +MAX_SIZE_PRETTIFY=10485760 # 10 MB +# default style to monokai if none is provided +STYLE=${1:-monokai} + +TEMP_FILE="$(mktemp)" +jq . "$QUTE_TEXT" >"$TEMP_FILE" + +# try GNU stat first and then OSX stat if the former fails +FILE_SIZE=$( + stat --printf="%s" "$TEMP_FILE" 2>/dev/null || + stat -f%z "$TEMP_FILE" 2>/dev/null +) +if [ "$FILE_SIZE" -lt "$MAX_SIZE_PRETTIFY" ]; then + pygmentize -l json -f html -O full,style="$STYLE" <"$TEMP_FILE" >"${TEMP_FILE}_" + mv -f "${TEMP_FILE}_" "$TEMP_FILE" +fi + +# send the command to qutebrowser to open the new file containing the formatted json +echo "open -t file://$TEMP_FILE" >> "$QUTE_FIFO" diff --git a/.config/qutebrowser/misc/userscripts/getbib b/.config/qutebrowser/misc/userscripts/getbib new file mode 100755 index 0000000..22af7a8 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/getbib @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +"""Qutebrowser userscript scraping the current web page for DOIs and downloading +corresponding bibtex information. + +Set the environment variable 'QUTE_BIB_FILEPATH' to indicate the path to +download to. Otherwise, bibtex information is downloaded to '/tmp' and hence +deleted at reboot. + +Installation: see qute://help/userscripts.html + +Inspired by +https://ocefpaf.github.io/python4oceanographers/blog/2014/05/19/doi2bibtex/ +""" + +import os +import sys +import shutil +import re +from collections import Counter +from urllib import parse as url_parse +from urllib import request as url_request + + +FIFO_PATH = os.getenv("QUTE_FIFO") + +def message_fifo(message, level="warning"): + """Send message to qutebrowser FIFO. The level must be one of 'info', + 'warning' (default) or 'error'.""" + with open(FIFO_PATH, "w") as fifo: + fifo.write("message-{} '{}'".format(level, message)) + + +source = os.getenv("QUTE_TEXT") +with open(source) as f: + text = f.read() + +# find DOIs on page using regex +dval = re.compile(r'(10\.(\d)+/([^(\s\>\"\<)])+)') +# https://stackoverflow.com/a/10324802/3865876, too strict +# dval = re.compile(r'\b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?!["&\'<>])\S)+)\b') +dois = dval.findall(text) +dois = Counter(e[0] for e in dois) +try: + doi = dois.most_common(1)[0][0] +except IndexError: + message_fifo("No DOIs found on page") + sys.exit() +message_fifo("Found {} DOIs on page, selecting {}".format(len(dois), doi), + level="info") + +# get bibtex data corresponding to DOI +url = "http://dx.doi.org/" + url_parse.quote(doi) +headers = dict(Accept='text/bibliography; style=bibtex') +request = url_request.Request(url, headers=headers) +response = url_request.urlopen(request) +status_code = response.getcode() +if status_code >= 400: + message_fifo("Request returned {}".format(status_code)) + sys.exit() + +# obtain content and format it +bibtex = response.read().decode("utf-8").strip() +bibtex = bibtex.replace(" ", "\n ", 1).\ + replace("}, ", "},\n ").replace("}}", "}\n}") + +# append to file +bib_filepath = os.getenv("QUTE_BIB_FILEPATH", "/tmp/qute.bib") +with open(bib_filepath, "a") as f: + f.write(bibtex + "\n\n") diff --git a/.config/qutebrowser/misc/userscripts/open_download b/.config/qutebrowser/misc/userscripts/open_download new file mode 100755 index 0000000..8dbb113 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/open_download @@ -0,0 +1,115 @@ +#!/usr/bin/env bash +# Both standalone script and qutebrowser userscript that opens a rofi menu with +# all files from the download director and opens the selected file. It works +# both as a userscript and a standalone script that is called from outside of +# qutebrowser. +# +# Suggested keybinding (for "show downloads"): +# spawn --userscript ~/.config/qutebrowser/open_download +# sd +# +# Requirements: +# - rofi (in a recent version) +# - xdg-open and xdg-mime +# - You should configure qutebrowser to download files to a single directory +# - It comes in handy if you enable downloads.remove_finished. If you want to +# see the recent downloads, just press "sd". +# +# Thorsten Wißmann, 2015 (thorsten` on freenode) +# Any feedback is welcome! + +set -e + +# open a file from the download directory using rofi +DOWNLOAD_DIR=${DOWNLOAD_DIR:-$QUTE_DOWNLOAD_DIR} +DOWNLOAD_DIR=${DOWNLOAD_DIR:-$HOME/Downloads} +# the name of the rofi command +ROFI_CMD=${ROFI_CMD:-rofi} +ROFI_ARGS=${ROFI_ARGS:-} + +msg() { + local cmd="$1" + shift + local msg="$*" + if [ -z "$QUTE_FIFO" ] ; then + echo "$cmd: $msg" >&2 + else + echo "message-$cmd '${msg//\'/\\\'}'" >> "$QUTE_FIFO" + fi +} +die() { + msg error "$*" + if [ -n "$QUTE_FIFO" ] ; then + # when run as a userscript, the above error message already informs the + # user about the failure, and no additional "userscript exited with status + # 1" is needed. + exit 0; + else + exit 1; + fi +} + +if ! [ -d "$DOWNLOAD_DIR" ] ; then + die "Download directory »$DOWNLOAD_DIR« not found!" +fi +if ! command -v "${ROFI_CMD}" > /dev/null ; then + die "Rofi command »${ROFI_CMD}« not found in PATH!" +fi + +rofi_default_args=( + -monitor -2 # place above window + -location 6 # aligned at the bottom + -width 100 # use full window width + -i + -no-custom + -format i # make rofi return the index + -l 10 + -p 'Open download:' -dmenu + ) + +crop-first-column() { + local maxlength=${1:-40} + local expression='s|^\([^\t]\{0,'"$maxlength"'\}\)[^\t]*\t|\1\t|' + sed "$expression" +} + +ls-files() { + # add the slash at the end of the download dir enforces to follow the + # symlink, if the DOWNLOAD_DIR itself is a symlink + # shellcheck disable=SC2010 + ls -Q --quoting-style escape -h -o -1 -A -t "${DOWNLOAD_DIR}/" \ + | grep '^[-]' \ + | cut -d' ' -f3- \ + | sed 's,^\(.*[^\]\) \(.*\)$,\2\t\1,' \ + | sed 's,\\\(.\),\1,g' +} + +mapfile -t entries < <(ls-files) + +# we need to manually check that there are items, because rofi doesn't show up +# if there are no items and -no-custom is passed to rofi. +if [ "${#entries[@]}" -eq 0 ] ; then + die "Download directory »${DOWNLOAD_DIR}« empty" +fi + +line=$(printf '%s\n' "${entries[@]}" \ + | crop-first-column 55 \ + | column -s $'\t' -t \ + | $ROFI_CMD "${rofi_default_args[@]}" "$ROFI_ARGS") || true +if [ -z "$line" ]; then + exit 0 +fi + +file="${entries[$line]}" +file="${file%%$'\t'*}" +path="$DOWNLOAD_DIR/$file" +filetype=$(xdg-mime query filetype "$path") +application=$(xdg-mime query default "$filetype") + +if [ -z "$application" ] ; then + die "Do not know how to open »$file« of type $filetype" +fi + +msg info "Opening »$file« (of type $filetype) with ${application%.desktop}" + +xdg-open "$path" & diff --git a/.config/qutebrowser/misc/userscripts/openfeeds b/.config/qutebrowser/misc/userscripts/openfeeds new file mode 100755 index 0000000..4a1a942 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/openfeeds @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# Copyright 2015 jnphilipp +# Copyright 2016-2017 Florian Bruhin (The Compiler) +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see . + +# Opens all links to feeds defined in the head of a site +# +# Ideal for use with tabs_are_windows. Set a hotkey to launch this script, then: +# :bind gF spawn --userscript openfeeds +# +# Use the hotkey to open the feeds in new tab/window, press 'gF' to open +# + +import os +import re + +from bs4 import BeautifulSoup +from urllib.parse import urljoin + +with open(os.environ['QUTE_HTML'], 'r') as f: + soup = BeautifulSoup(f) +with open(os.environ['QUTE_FIFO'], 'w') as f: + for link in soup.find_all('link', rel='alternate', type=re.compile(r'application/((rss|rdf|atom)\+)?xml|text/xml')): + f.write('open -t %s\n' % urljoin(os.environ['QUTE_URL'], link.get('href'))) diff --git a/.config/qutebrowser/misc/userscripts/password_fill b/.config/qutebrowser/misc/userscripts/password_fill new file mode 100755 index 0000000..a61a42c --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/password_fill @@ -0,0 +1,381 @@ +#!/usr/bin/env bash +help() { + blink=$'\e[1;31m' reset=$'\e[0m' +cat < +In case of questions or suggestions, do not hesitate to send me an E-Mail or to +directly ask me via IRC (nickname thorsten\`) in #qutebrowser on freenode. + + $blink!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$reset + WARNING: the passwords are stored in qutebrowser's + debug log reachable via the url qute://log + $blink!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$reset + +Usage: run as a userscript form qutebrowser, e.g.: + spawn --userscript ~/.config/qutebrowser/password_fill + +Pass backend: (see also passwordstore.org) + This script expects pass to store the credentials of each page in an extra + file, where the filename (or filepath) contains the domain of the respective + page. The first line of the file must contain the password, the login name + must be contained in a later line beginning with "user:", "login:", or + "username:" (configurable by the user_pattern variable). + +Behavior: + It will try to find a username/password entry in the configured backend + (currently only pass) for the current website and will load that pair of + username and password to any form on the current page that has some password + entry field. If multiple entries are found, a zenity menu is offered. + + If no entry is found, then it crops subdomains from the url if at least one + entry is found in the backend. (In that case, it always shows a menu) + +Configuration: + This script loads the bash script ~/.config/qutebrowser/password_fill_rc (if + it exists), so you can change any configuration variable and overwrite any + function you like. + +EOF +} + +set -o errexit +set -o pipefail +shopt -s nocasematch # make regexp matching in bash case insensitive + +if [ -z "$QUTE_FIFO" ] ; then + help + exit +fi + +error() { + local msg="$*" + echo "message-error '${msg//\'/\\\'}'" >> "$QUTE_FIFO" +} +msg() { + local msg="$*" + echo "message-info '${msg//\'/\\\'}'" >> "$QUTE_FIFO" +} +die() { + error "$*" + exit 0 +} + +javascript_escape() { + # print the first argument in an escaped way, such that it can safely + # be used within javascripts double quotes + sed "s,[\\\\'\"],\\\\&,g" <<< "$1" +} + +# ======================================================= # +# CONFIGURATION +# ======================================================= # +# The configuration file is per default located in +# ~/.config/qutebrowser/password_fill_rc and is a bash script that is loaded +# later in the present script. So basically you can replace all of the +# following definitions and make them fit your needs. + +# The following simplifies a URL to the domain (e.g. "wiki.qutebrowser.org") +# which is later used to search the correct entries in the password backend. If +# you e.g. don't want the "www." to be removed or if you want to distinguish +# between different paths on the same domain. + +simplify_url() { + simple_url="${1##*://}" # remove protocol specification + simple_url="${simple_url%%\?*}" # remove GET parameters + simple_url="${simple_url%%/*}" # remove directory path + simple_url="${simple_url%:*}" # remove port + simple_url="${simple_url##www.}" # remove www. subdomain +} + +# no_entries_found() is called if the first query_entries() call did not find +# any matching entries. Multiple implementations are possible: +# The easiest behavior is to quit: +#no_entries_found() { +# if [ 0 -eq "${#files[@]}" ] ; then +# die "No entry found for »$simple_url«" +# fi +#} +# But you could also fill the files array with all entries from your pass db +# if the first db query did not find anything +# no_entries_found() { +# if [ 0 -eq "${#files[@]}" ] ; then +# query_entries "" +# if [ 0 -eq "${#files[@]}" ] ; then +# die "No entry found for »$simple_url«" +# fi +# fi +# } + +# Another behavior is to drop another level of subdomains until search hits +# are found: +no_entries_found() { + while [ 0 -eq "${#files[@]}" ] && [ -n "$simple_url" ]; do + shorter_simple_url=$(sed 's,^[^.]*\.,,' <<< "$simple_url") + if [ "$shorter_simple_url" = "$simple_url" ] ; then + # if no dot, then even remove the top level domain + simple_url="" + query_entries "$simple_url" + break + fi + simple_url="$shorter_simple_url" + query_entries "$simple_url" + #die "No entry found for »$simple_url«" + # enforce menu if we do "fuzzy" matching + menu_if_one_entry=1 + done + if [ 0 -eq "${#files[@]}" ] ; then + die "No entry found for »$simple_url«" + fi +} + +# Backend implementations tell, how the actual password store is accessed. +# Right now, there is only one fully functional password backend, namely for +# the program "pass". +# A password backend consists of three actions: +# - init() initializes backend-specific things and does sanity checks. +# - query_entries() is called with a simplified url and is expected to fill +# the bash array $files with the names of matching password entries. There +# are no requirements how these names should look like. +# - open_entry() is called with some specific entry of the $files array and is +# expected to write the username of that entry to the $username variable and +# the corresponding password to $password + +reset_backend() { + init() { true ; } + query_entries() { true ; } + open_entry() { true ; } +} + +# choose_entry() is expected to choose one entry from the array $files and +# write it to the variable $file. +choose_entry() { + choose_entry_zenity +} + +# The default implementation chooses a random entry from the array. So if there +# are multiple matching entries, multiple calls to this userscript will +# eventually pick the "correct" entry. I.e. if this userscript is bound to +# "zl", the user has to press "zl" until the correct username shows up in the +# login form. +choose_entry_random() { + local nr=${#files[@]} + file="${files[$((RANDOM % nr))]}" + # Warn user, that there might be other matching password entries + if [ "$nr" -gt 1 ] ; then + msg "Picked $file out of $nr entries: ${files[*]}" + fi +} + +# another implementation would be to ask the user via some menu (like rofi or +# dmenu or zenity or even qutebrowser completion in future?) which entry to +# pick +MENU_COMMAND=( head -n 1 ) +# whether to show the menu if there is only one entry in it +menu_if_one_entry=0 +choose_entry_menu() { + local nr=${#files[@]} + if [ "$nr" -eq 1 ] && ! ((menu_if_one_entry)) ; then + file="${files[0]}" + else + file=$( printf '%s\n' "${files[@]}" | "${MENU_COMMAND[@]}" ) + fi +} + +choose_entry_rofi() { + MENU_COMMAND=( rofi -p "qutebrowser> " -dmenu + -mesg $'Pick a password entry for '"${QUTE_URL//&/&}"'' ) + choose_entry_menu || true +} + +choose_entry_zenity() { + MENU_COMMAND=( zenity --list --title "qutebrowser password fill" + --text "Pick the password entry:" + --column "Name" ) + choose_entry_menu || true +} + +choose_entry_zenity_radio() { + zenity_helper() { + awk '{ print $0 ; print $0 }' \ + | zenity --list --radiolist \ + --title "qutebrowser password fill" \ + --text "Pick the password entry:" \ + --column " " --column "Name" + } + MENU_COMMAND=( zenity_helper ) + choose_entry_menu || true +} + +# ======================================================= +# backend: PASS + +# configuration options: +match_filename=1 # whether allowing entry match by filepath +match_line=0 # whether allowing entry match by URL-Pattern in file + # Note: match_line=1 gets very slow, even for small password stores! +match_line_pattern='^url: .*' # applied using grep -iE +user_pattern='^(user|username|login): ' + +GPG_OPTS=( "--quiet" "--yes" "--compress-algo=none" "--no-encrypt-to" ) +GPG="gpg" +export GPG_TTY="${GPG_TTY:-$(tty 2>/dev/null)}" +command -v gpg2 &>/dev/null && GPG="gpg2" +[[ -n $GPG_AGENT_INFO || $GPG == "gpg2" ]] && GPG_OPTS+=( "--batch" "--use-agent" ) + +pass_backend() { + init() { + PREFIX="${PASSWORD_STORE_DIR:-$HOME/.password-store}" + if ! [ -d "$PREFIX" ] ; then + die "Can not open password store dir »$PREFIX«" + fi + } + query_entries() { + local url="$1" + + if ((match_line)) ; then + # add entries with matching URL-tag + while read -r -d "" passfile ; do + if $GPG "${GPG_OPTS[@]}" -d "$passfile" \ + | grep --max-count=1 -iE "${match_line_pattern}${url}" > /dev/null + then + passfile="${passfile#$PREFIX}" + passfile="${passfile#/}" + files+=( "${passfile%.gpg}" ) + fi + done < <(find -L "$PREFIX" -iname '*.gpg' -print0) + fi + if ((match_filename)) ; then + # add entries with matching filepath + while read -r passfile ; do + passfile="${passfile#$PREFIX}" + passfile="${passfile#/}" + files+=( "${passfile%.gpg}" ) + done < <(find -L "$PREFIX" -iname '*.gpg' | grep "$url") + fi + } + open_entry() { + local path="$PREFIX/${1}.gpg" + password="" + local firstline=1 + while read -r line ; do + if ((firstline)) ; then + password="$line" + firstline=0 + else + if [[ $line =~ $user_pattern ]] ; then + # remove the matching prefix "user: " from the beginning of the line + username=${line#${BASH_REMATCH[0]}} + break + fi + fi + done < <($GPG "${GPG_OPTS[@]}" -d "$path" ) + } +} +# ======================================================= + +# ======================================================= +# backend: secret +secret_backend() { + init() { + return + } + query_entries() { + local domain="$1" + while read -r line ; do + if [[ "$line" == "attribute.username = "* ]] ; then + files+=("$domain ${line:21}") + fi + done < <( secret-tool search --unlock --all domain "$domain" 2>&1 ) + } + open_entry() { + local domain="${1%% *}" + username="${1#* }" + password=$(secret-tool lookup domain "$domain" username "$username") + } +} +# ======================================================= + +# load some sane default backend +reset_backend +pass_backend +# load configuration +QUTE_CONFIG_DIR=${QUTE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/qutebrowser/} +PWFILL_CONFIG=${PWFILL_CONFIG:-${QUTE_CONFIG_DIR}/password_fill_rc} +if [ -f "$PWFILL_CONFIG" ] ; then + # shellcheck source=/dev/null + source "$PWFILL_CONFIG" +fi +init + +simplify_url "$QUTE_URL" +query_entries "${simple_url}" +no_entries_found +# remove duplicates +mapfile -t files < <(printf '%s\n' "${files[@]}" | sort | uniq ) +choose_entry +if [ -z "$file" ] ; then + # choose_entry didn't want any of these entries + exit 0 +fi +open_entry "$file" +#username="$(date)" +#password="XYZ" +#msg "$username, ${#password}" + +[ -n "$username" ] || die "Username not set in entry $file" +[ -n "$password" ] || die "Password not set in entry $file" + +js() { +cat < 0 && elem.offsetHeight > 0; + }; + function hasPasswordField(form) { + var inputs = form.getElementsByTagName("input"); + for (var j = 0; j < inputs.length; j++) { + var input = inputs[j]; + if (input.type == "password") { + return true; + } + } + return false; + }; + function loadData2Form (form) { + var inputs = form.getElementsByTagName("input"); + for (var j = 0; j < inputs.length; j++) { + var input = inputs[j]; + if (isVisible(input) && (input.type == "text" || input.type == "email")) { + input.focus(); + input.value = "$(javascript_escape "${username}")"; + input.blur(); + } + if (input.type == "password") { + input.focus(); + input.value = "$(javascript_escape "${password}")"; + input.blur(); + } + } + }; + + var forms = document.getElementsByTagName("form"); + for (i = 0; i < forms.length; i++) { + if (hasPasswordField(forms[i])) { + loadData2Form(forms[i]); + } + } +EOF +} + +printjs() { + js | sed 's,//.*$,,' | tr '\n' ' ' +} +echo "jseval -q $(printjs)" >> "$QUTE_FIFO" diff --git a/.config/qutebrowser/misc/userscripts/qute-keepass b/.config/qutebrowser/misc/userscripts/qute-keepass new file mode 100755 index 0000000..a21ebc9 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/qute-keepass @@ -0,0 +1,261 @@ +#!/usr/bin/env python3 + +# Copyright 2018 Jay Kamat +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see . + +"""This userscript allows for insertion of usernames and passwords from keepass +databases using pykeepass. Since it is a userscript, it must be run from +qutebrowser. + +A sample invocation of this script is: + +:spawn --userscript qute-keepass -p ~/KeePassFiles/MainDatabase.kdbx + +And a sample binding + +:bind --mode=insert spawn --userscript qute-keepass -p ~/KeePassFiles/MainDatabase.kdbx + +-p or --path is a required argument. + +--keyfile-path allows you to specify a keepass keyfile. If you only use a +keyfile, also add --no-password as well. Specifying --no-password without +--keyfile-path will lead to an error. + +login information is inserted using :insert-text and :fake-key , which +means you must have a cursor in position before initiating this userscript. If +you do not do this, you will get 'element not editable' errors. + +If keepass takes a while to open the DB, you might want to consider reducing +the number of transform rounds in your database settings. + +Dependencies: pykeepass (in python3), PyQt5. Without pykeepass, you will get an +exit code of 100. + +********************!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!****************** + +WARNING: The login details are viewable as plaintext in qutebrowser's debug log +(qute://log) and could be compromised if you decide to submit a crash report! + +********************!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!****************** + +""" + +# pylint: disable=bad-builtin + +import argparse +import enum +import functools +import os +import shlex +import subprocess +import sys + +from PyQt5.QtCore import QUrl +from PyQt5.QtWidgets import QApplication, QInputDialog, QLineEdit + +try: + import pykeepass +except ImportError as e: + print("pykeepass not found: {}".format(str(e)), file=sys.stderr) + + # Since this is a common error, try to print it to the FIFO if we can. + if 'QUTE_FIFO' in os.environ: + with open(os.environ['QUTE_FIFO'], 'w') as fifo: + fifo.write('message-error "pykeepass failed to be imported."\n') + fifo.flush() + sys.exit(100) + +argument_parser = argparse.ArgumentParser( + description="Fill passwords using keepass.", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__) +argument_parser.add_argument('url', nargs='?', default=os.getenv('QUTE_URL')) +argument_parser.add_argument('--path', '-p', required=True, + help='Path to the keepass db.') +argument_parser.add_argument('--keyfile-path', '-k', default=None, + help='Path to a keepass keyfile') +argument_parser.add_argument( + '--no-password', action='store_true', + help='Supply if no password is required to unlock this database. ' + 'Only allowed with --keyfile-path') +argument_parser.add_argument( + '--dmenu-invocation', '-d', default='dmenu', + help='Invocation used to execute a dmenu-provider') +argument_parser.add_argument( + '--dmenu-format', '-f', default='{title}: {username}', + help='Format string for keys to display in dmenu.' + ' Must generate a unique string.') +argument_parser.add_argument( + '--no-insert-mode', '-n', dest='insert_mode', action='store_false', + help="Don't automatically enter insert mode") +argument_parser.add_argument( + '--io-encoding', '-i', default='UTF-8', + help='Encoding used to communicate with subprocesses') +group = argument_parser.add_mutually_exclusive_group() +group.add_argument('--username-fill-only', '-e', + action='store_true', help='Only insert username') +group.add_argument('--password-fill-only', '-w', + action='store_true', help='Only insert password') + +CMD_DELAY = 50 + + +class ExitCodes(enum.IntEnum): + """Stores various exit codes groups to use.""" + SUCCESS = 0 + FAILURE = 1 + # 1 is automatically used if Python throws an exception + NO_CANDIDATES = 2 + USER_QUIT = 3 + DB_OPEN_FAIL = 4 + + INTERNAL_ERROR = 10 + + +def qute_command(command): + with open(os.environ['QUTE_FIFO'], 'w') as fifo: + fifo.write(command + '\n') + fifo.flush() + + +def stderr(to_print): + """Extra functionality to echo out errors to qb ui.""" + print(to_print, file=sys.stderr) + qute_command('message-error "{}"'.format(to_print)) + + +def dmenu(items, invocation, encoding): + """Runs dmenu with given arguments.""" + command = shlex.split(invocation) + process = subprocess.run(command, input='\n'.join(items).encode(encoding), + stdout=subprocess.PIPE) + return process.stdout.decode(encoding).strip() + + +def get_password(): + """Get a keepass db password from user.""" + _app = QApplication(sys.argv) + text, ok = QInputDialog.getText( + None, "KeePass DB Password", + "Please enter your KeePass Master Password", + QLineEdit.Password) + if not ok: + stderr('Password Prompt Rejected.') + sys.exit(ExitCodes.USER_QUIT) + return text + + +def find_candidates(args, host): + """Finds candidates that match host""" + file_path = os.path.expanduser(args.path) + + # TODO find a way to keep the db open, so we don't open (and query + # password) it every time + + pw = None + if not args.no_password: + pw = get_password() + + kf = args.keyfile_path + if kf: + kf = os.path.expanduser(kf) + + try: + kp = pykeepass.PyKeePass(file_path, password=pw, keyfile=kf) + except Exception as e: + stderr("There was an error opening the DB: {}".format(str(e))) + + return kp.find_entries(url="{}{}{}".format(".*", host, ".*"), regex=True) + + +def candidate_to_str(args, candidate): + """Turns candidate into a human readable string for dmenu""" + return args.dmenu_format.format(title=candidate.title, + url=candidate.url, + username=candidate.username, + path=candidate.path, + uuid=candidate.uuid) + + +def candidate_to_secret(candidate): + """Turns candidate into a generic (user, password) tuple""" + return (candidate.username, candidate.password) + + +def run(args): + """Runs qute-keepass""" + if not args.url: + argument_parser.print_help() + return ExitCodes.FAILURE + + url_host = QUrl(args.url).host() + + if not url_host: + stderr('{} was not parsed as a valid URL!'.format(args.url)) + return ExitCodes.INTERNAL_ERROR + + # Find candidates matching the host of the given URL + candidates = find_candidates(args, url_host) + if not candidates: + stderr('No candidates for URL {!r} found!'.format(args.url)) + return ExitCodes.NO_CANDIDATES + + # Create a map so we can get turn the resulting string from dmenu back into + # a candidate + candidates_strs = list(map(functools.partial(candidate_to_str, args), + candidates)) + candidates_map = dict(zip(candidates_strs, candidates)) + + if len(candidates) == 1: + selection = candidates.pop() + else: + selection = dmenu(candidates_strs, + args.dmenu_invocation, + args.io_encoding) + + if selection not in candidates_map: + stderr("'{}' was not a valid entry!").format(selection) + return ExitCodes.USER_QUIT + + selection = candidates_map[selection] + + username, password = candidate_to_secret(selection) + + insert_mode = ';; enter-mode insert' if args.insert_mode else '' + if args.username_fill_only: + qute_command('insert-text {}{}'.format(username, insert_mode)) + elif args.password_fill_only: + qute_command('insert-text {}{}'.format(password, insert_mode)) + else: + # Enter username and password using insert-key and fake-key + # (which supports more passwords than fake-key only), then switch back + # into insert-mode, so the form can be directly submitted by hitting + # enter afterwards. It dosen't matter when we go into insert mode, but + # the other commands need to be be executed sequentially, so we add + # delays with later. + qute_command('insert-text {} ;;' + 'later {} fake-key ;;' + 'later {} insert-text {}{}' + .format(username, CMD_DELAY, + CMD_DELAY * 2, password, insert_mode)) + + return ExitCodes.SUCCESS + + +if __name__ == '__main__': + arguments = argument_parser.parse_args() + sys.exit(run(arguments)) diff --git a/.config/qutebrowser/misc/userscripts/qute-lastpass b/.config/qutebrowser/misc/userscripts/qute-lastpass new file mode 100755 index 0000000..ea88cf8 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/qute-lastpass @@ -0,0 +1,172 @@ +#!/usr/bin/env python3 + +# Copyright 2017 Chris Braun (cryzed) +# Adapted for LastPass by Wayne Cheng (welps) +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published bjy +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see . + +""" +Insert login information using lastpass CLI and a dmenu-compatible application (e.g. dmenu, rofi -dmenu, ...). +A short demonstration can be seen here: https://i.imgur.com/zA61NrF.gifv. +""" + +USAGE = """The domain of the site has to be in the name of the LastPass entry, for example: "github.com/cryzed" or +"websites/github.com". The login information is inserted by emulating key events using qutebrowser's fake-key command in this manner: +[USERNAME][PASSWORD], which is compatible with almost all login forms. + +You must log into LastPass CLI using `lpass login ` prior to use of this script. The LastPass CLI agent only holds your master password for an hour by default. If you wish to change this, please see `man lpass`. + +To use in qutebrowser, run: `spawn --userscript qute-lastpass` +""" + +EPILOG = """Dependencies: tldextract (Python 3 module), LastPass CLI (1.3 or newer) + +WARNING: The login details are viewable as plaintext in qutebrowser's debug log (qute://log) and might be shared if +you decide to submit a crash report!""" + +import argparse +import enum +import fnmatch +import functools +import os +import re +import shlex +import subprocess +import sys +import json +import tldextract + +argument_parser = argparse.ArgumentParser( + description=__doc__, usage=USAGE, epilog=EPILOG) +argument_parser.add_argument('url', nargs='?', default=os.getenv('QUTE_URL')) +argument_parser.add_argument('--dmenu-invocation', '-d', default='rofi -dmenu', + help='Invocation used to execute a dmenu-provider') +argument_parser.add_argument('--no-insert-mode', '-n', dest='insert_mode', action='store_false', + help="Don't automatically enter insert mode") +argument_parser.add_argument('--io-encoding', '-i', default='UTF-8', + help='Encoding used to communicate with subprocesses') +argument_parser.add_argument('--merge-candidates', '-m', action='store_true', + help='Merge pass candidates for fully-qualified and registered domain name') +group = argument_parser.add_mutually_exclusive_group() +group.add_argument('--username-only', '-e', + action='store_true', help='Only insert username') +group.add_argument('--password-only', '-w', + action='store_true', help='Only insert password') + +stderr = functools.partial(print, file=sys.stderr) + +class ExitCodes(enum.IntEnum): + SUCCESS = 0 + FAILURE = 1 + # 1 is automatically used if Python throws an exception + NO_PASS_CANDIDATES = 2 + COULD_NOT_MATCH_USERNAME = 3 + COULD_NOT_MATCH_PASSWORD = 4 + +def qute_command(command): + with open(os.environ['QUTE_FIFO'], 'w') as fifo: + fifo.write(command + '\n') + fifo.flush() + +def pass_(domain, encoding): + args = ['lpass', 'show', '-x', '-j', '-G', '.*{:s}.*'.format(domain)] + process = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + err = process.stderr.decode(encoding).strip() + if err: + msg = "LastPass CLI returned for {:s} - {:s}".format(domain, err) + stderr(msg) + return '[]' + + out = process.stdout.decode(encoding).strip() + + return out + +def dmenu(items, invocation, encoding): + command = shlex.split(invocation) + process = subprocess.run(command, input='\n'.join( + items).encode(encoding), stdout=subprocess.PIPE) + return process.stdout.decode(encoding).strip() + + +def fake_key_raw(text): + for character in text: + # Escape all characters by default, space requires special handling + sequence = '" "' if character == ' ' else '\{}'.format(character) + qute_command('fake-key {}'.format(sequence)) + + +def main(arguments): + if not arguments.url: + argument_parser.print_help() + return ExitCodes.FAILURE + + extract_result = tldextract.extract(arguments.url) + + # Try to find candidates using targets in the following order: fully-qualified domain name (includes subdomains), + # the registered domain name and finally: the IPv4 address if that's what + # the URL represents + candidates = [] + for target in filter(None, [extract_result.fqdn, extract_result.registered_domain, extract_result.subdomain + extract_result.domain, extract_result.domain, extract_result.ipv4]): + target_candidates = json.loads(pass_(target, arguments.io_encoding)) + if not target_candidates: + continue + + candidates = candidates + target_candidates + if not arguments.merge_candidates: + break + else: + if not candidates: + stderr('No pass candidates for URL {!r} found!'.format( + arguments.url)) + return ExitCodes.NO_PASS_CANDIDATES + + if len(candidates) == 1: + selection = candidates.pop() + else: + choices = ["{:s} | {:s} | {:s} | {:s}".format(c["id"], c["name"], c["url"], c["username"]) for c in candidates] + choice = dmenu(choices, arguments.dmenu_invocation, arguments.io_encoding) + choiceId = choice.split("|")[0].strip() + selection = next((c for (i, c) in enumerate(candidates) if c["id"] == choiceId), None) + + # Nothing was selected, simply return + if not selection: + return ExitCodes.SUCCESS + + username = selection["username"] + password = selection["password"] + + if arguments.username_only: + fake_key_raw(username) + elif arguments.password_only: + fake_key_raw(password) + else: + # Enter username and password using fake-key and (which seems to work almost universally), then switch + # back into insert-mode, so the form can be directly submitted by + # hitting enter afterwards + fake_key_raw(username) + qute_command('fake-key ') + fake_key_raw(password) + + if arguments.insert_mode: + qute_command('enter-mode insert') + + return ExitCodes.SUCCESS + + +if __name__ == '__main__': + arguments = argument_parser.parse_args() + sys.exit(main(arguments)) diff --git a/.config/qutebrowser/misc/userscripts/qute-pass b/.config/qutebrowser/misc/userscripts/qute-pass new file mode 100755 index 0000000..4f79e11 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/qute-pass @@ -0,0 +1,207 @@ +#!/usr/bin/env python3 + +# Copyright 2017 Chris Braun (cryzed) +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see . + +""" +Insert login information using pass and a dmenu-compatible application (e.g. dmenu, rofi -dmenu, ...). A short +demonstration can be seen here: https://i.imgur.com/KN3XuZP.gif. +""" + +USAGE = """The domain of the site has to appear as a segment in the pass path, for example: "github.com/cryzed" or +"websites/github.com". How the username and password are determined is freely configurable using the CLI arguments. The +login information is inserted by emulating key events using qutebrowser's fake-key command in this manner: +[USERNAME][PASSWORD], which is compatible with almost all login forms. + +Suggested bindings similar to Uzbl's `formfiller` script: + + config.bind('', 'spawn --userscript qute-pass') + config.bind('', 'spawn --userscript qute-pass --username-only') + config.bind('

', 'spawn --userscript qute-pass --password-only') + config.bind('', 'spawn --userscript qute-pass --otp-only') +""" + +EPILOG = """Dependencies: tldextract (Python 3 module), pass, pass-otp (optional). +For issues and feedback please use: https://github.com/cryzed/qutebrowser-userscripts. + +WARNING: The login details are viewable as plaintext in qutebrowser's debug log (qute://log) and might be shared if +you decide to submit a crash report!""" + +import argparse +import enum +import fnmatch +import functools +import os +import re +import shlex +import subprocess +import sys + +import tldextract + +argument_parser = argparse.ArgumentParser(description=__doc__, usage=USAGE, epilog=EPILOG) +argument_parser.add_argument('url', nargs='?', default=os.getenv('QUTE_URL')) +argument_parser.add_argument('--password-store', '-p', default=os.path.expanduser('~/.password-store'), + help='Path to your pass password-store') +argument_parser.add_argument('--username-pattern', '-u', default=r'.*/(.+)', + help='Regular expression that matches the username') +argument_parser.add_argument('--username-target', '-U', choices=['path', 'secret'], default='path', + help='The target for the username regular expression') +argument_parser.add_argument('--password-pattern', '-P', default=r'(.*)', + help='Regular expression that matches the password') +argument_parser.add_argument('--dmenu-invocation', '-d', default='rofi -dmenu', + help='Invocation used to execute a dmenu-provider') +argument_parser.add_argument('--no-insert-mode', '-n', dest='insert_mode', action='store_false', + help="Don't automatically enter insert mode") +argument_parser.add_argument('--io-encoding', '-i', default='UTF-8', + help='Encoding used to communicate with subprocesses') +argument_parser.add_argument('--merge-candidates', '-m', action='store_true', + help='Merge pass candidates for fully-qualified and registered domain name') +group = argument_parser.add_mutually_exclusive_group() +group.add_argument('--username-only', '-e', action='store_true', help='Only insert username') +group.add_argument('--password-only', '-w', action='store_true', help='Only insert password') +group.add_argument('--otp-only', '-o', action='store_true', help='Only insert OTP code') + +stderr = functools.partial(print, file=sys.stderr) + + +class ExitCodes(enum.IntEnum): + SUCCESS = 0 + FAILURE = 1 + # 1 is automatically used if Python throws an exception + NO_PASS_CANDIDATES = 2 + COULD_NOT_MATCH_USERNAME = 3 + COULD_NOT_MATCH_PASSWORD = 4 + + +def qute_command(command): + with open(os.environ['QUTE_FIFO'], 'w') as fifo: + fifo.write(command + '\n') + fifo.flush() + + +def find_pass_candidates(domain, password_store_path): + candidates = [] + for path, directories, file_names in os.walk(password_store_path, followlinks=True): + if directories or domain not in path.split(os.path.sep): + continue + + # Strip password store path prefix to get the relative pass path + pass_path = path[len(password_store_path) + 1:] + secrets = fnmatch.filter(file_names, '*.gpg') + candidates.extend(os.path.join(pass_path, os.path.splitext(secret)[0]) for secret in secrets) + return candidates + + +def _run_pass(command, encoding): + process = subprocess.run(command, stdout=subprocess.PIPE) + return process.stdout.decode(encoding).strip() + + +def pass_(path, encoding): + return _run_pass(['pass', path], encoding) + + +def pass_otp(path, encoding): + return _run_pass(['pass', 'otp', path], encoding) + + +def dmenu(items, invocation, encoding): + command = shlex.split(invocation) + process = subprocess.run(command, input='\n'.join(items).encode(encoding), stdout=subprocess.PIPE) + return process.stdout.decode(encoding).strip() + + +def fake_key_raw(text): + for character in text: + # Escape all characters by default, space requires special handling + sequence = '" "' if character == ' ' else '\{}'.format(character) + qute_command('fake-key {}'.format(sequence)) + + +def main(arguments): + if not arguments.url: + argument_parser.print_help() + return ExitCodes.FAILURE + + extract_result = tldextract.extract(arguments.url) + + # Expand potential ~ in paths, since this script won't be called from a shell that does it for us + password_store_path = os.path.expanduser(arguments.password_store) + + # Try to find candidates using targets in the following order: fully-qualified domain name (includes subdomains), + # the registered domain name and finally: the IPv4 address if that's what the URL represents + candidates = set() + for target in filter(None, [extract_result.fqdn, extract_result.registered_domain, extract_result.ipv4]): + target_candidates = find_pass_candidates(target, password_store_path) + if not target_candidates: + continue + + candidates.update(target_candidates) + if not arguments.merge_candidates: + break + else: + if not candidates: + stderr('No pass candidates for URL {!r} found!'.format(arguments.url)) + return ExitCodes.NO_PASS_CANDIDATES + + selection = candidates.pop() if len(candidates) == 1 else dmenu(sorted(candidates), arguments.dmenu_invocation, + arguments.io_encoding) + # Nothing was selected, simply return + if not selection: + return ExitCodes.SUCCESS + + secret = pass_(selection, arguments.io_encoding) + + # Match username + target = selection if arguments.username_target == 'path' else secret + match = re.match(arguments.username_pattern, target) + if not match: + stderr('Failed to match username pattern on {}!'.format(arguments.username_target)) + return ExitCodes.COULD_NOT_MATCH_USERNAME + username = match.group(1) + + # Match password + match = re.match(arguments.password_pattern, secret) + if not match: + stderr('Failed to match password pattern on secret!') + return ExitCodes.COULD_NOT_MATCH_PASSWORD + password = match.group(1) + + if arguments.username_only: + fake_key_raw(username) + elif arguments.password_only: + fake_key_raw(password) + elif arguments.otp_only: + otp = pass_otp(selection, arguments.io_encoding) + fake_key_raw(otp) + else: + # Enter username and password using fake-key and (which seems to work almost universally), then switch + # back into insert-mode, so the form can be directly submitted by hitting enter afterwards + fake_key_raw(username) + qute_command('fake-key ') + fake_key_raw(password) + + if arguments.insert_mode: + qute_command('enter-mode insert') + + return ExitCodes.SUCCESS + + +if __name__ == '__main__': + arguments = argument_parser.parse_args() + sys.exit(main(arguments)) diff --git a/.config/qutebrowser/misc/userscripts/qutedmenu b/.config/qutebrowser/misc/userscripts/qutedmenu new file mode 100755 index 0000000..de1b8d6 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/qutedmenu @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +# Handle open -s && open -t with bemenu + +#:bind o spawn --userscript /path/to/userscripts/qutedmenu open +#:bind O spawn --userscript /path/to/userscripts/qutedmenu tab + +# If you would like to set a custom colorscheme/font use these dirs. +# https://github.com/halfwit/dotfiles/blob/master/.config/dmenu/bemenucolors +readonly confdir=${XDG_CONFIG_HOME:-$HOME/.config} + +readonly optsfile=$confdir/dmenu/bemenucolors + +create_menu() { + # Check quickmarks + while read -r url; do + printf -- '%s\n' "$url" + done < "$QUTE_CONFIG_DIR"/quickmarks + + # Next bookmarks + while read -r url _; do + printf -- '%s\n' "$url" + done < "$QUTE_CONFIG_DIR"/bookmarks/urls + + # Finally history + while read -r _ url; do + printf -- '%s\n' "$url" + done < "$QUTE_DATA_DIR"/history + } + +get_selection() { + opts+=(-p qutebrowser) + #create_menu | dmenu -l 10 "${opts[@]}" + create_menu | bemenu -l 10 "${opts[@]}" +} + +# Main +# https://github.com/halfwit/dotfiles/blob/master/.config/dmenu/font +[[ -s $confdir/dmenu/font ]] && read -r font < "$confdir"/dmenu/font + +[[ $font ]] && opts+=(-fn "$font") + +# shellcheck source=/dev/null +[[ -s $optsfile ]] && source "$optsfile" + +url=$(get_selection) +url=${url/*http/http} + +# If no selection is made, exit (escape pressed, e.g.) +[[ ! $url ]] && exit 0 + +case $1 in + open) printf '%s' "open $url" >> "$QUTE_FIFO" || qutebrowser "$url" ;; + tab) printf '%s' "open -t $url" >> "$QUTE_FIFO" || qutebrowser "$url" ;; +esac diff --git a/.config/qutebrowser/misc/userscripts/readability b/.config/qutebrowser/misc/userscripts/readability new file mode 100755 index 0000000..d0ef437 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/readability @@ -0,0 +1,41 @@ +#!/usr/bin/env python +# +# Executes python-readability on current page and opens the summary as new tab. +# +# Depends on the python-readability package, or its fork: +# +# - https://github.com/buriy/python-readability +# - https://github.com/bookieio/breadability +# +# Usage: +# :spawn --userscript readability +# +from __future__ import absolute_import +import codecs, os + +tmpfile = os.path.join( + os.environ.get('QUTE_DATA_DIR', + os.path.expanduser('~/.local/share/qutebrowser')), + 'userscripts/readability.html') + +if not os.path.exists(os.path.dirname(tmpfile)): + os.makedirs(os.path.dirname(tmpfile)) + +with codecs.open(os.environ['QUTE_HTML'], 'r', 'utf-8') as source: + data = source.read() + + try: + from breadability.readable import Article as reader + doc = reader(data) + content = doc.readable + except ImportError: + from readability import Document + doc = Document(data) + content = doc.summary().replace('', '%s' % doc.title()) + + with codecs.open(tmpfile, 'w', 'utf-8') as target: + target.write('') + target.write(content) + + with open(os.environ['QUTE_FIFO'], 'w') as fifo: + fifo.write('open -t %s' % tmpfile) diff --git a/.config/qutebrowser/misc/userscripts/ripbang b/.config/qutebrowser/misc/userscripts/ripbang new file mode 100755 index 0000000..b35ff77 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/ripbang @@ -0,0 +1,34 @@ +#!/usr/bin/env python +# +# Adds DuckDuckGo bang as searchengine. +# +# Usage: +# :spawn --userscript ripbang [bang]... +# +# Example: +# :spawn --userscript ripbang amazon maps +# + +from __future__ import print_function +import os, re, requests, sys + +try: + from urllib.parse import unquote +except ImportError: + from urllib import unquote + +for argument in sys.argv[1:]: + bang = '!' + argument + r = requests.get('https://duckduckgo.com/', + params={'q': bang + ' SEARCHTEXT'}) + + searchengine = unquote(re.search("url=[^']+", r.text).group(0)) + searchengine = searchengine.replace('url=', '') + searchengine = searchengine.replace('/l/?kh=-1&uddg=', '') + searchengine = searchengine.replace('SEARCHTEXT', '{}') + + if os.getenv('QUTE_FIFO'): + with open(os.environ['QUTE_FIFO'], 'w') as fifo: + fifo.write('set searchengines %s %s' % (bang, searchengine)) + else: + print('%s %s' % (bang, searchengine)) diff --git a/.config/qutebrowser/misc/userscripts/rss b/.config/qutebrowser/misc/userscripts/rss new file mode 100755 index 0000000..f8feebe --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/rss @@ -0,0 +1,122 @@ +#!/bin/sh + +# Copyright 2016 Jan Verbeek (blyxxyz) +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see . + +# This script keeps track of URLs in RSS feeds and opens new ones. +# New feeds can be added with ':spawn -u /path/to/userscripts/rss add' or +# ':spawn -u /path/to/userscripts/rss '. +# New items can be opened with ':spawn -u /path/to/userscripts/rss'. +# The script doesn't really parse XML, and searches for things that look like +# item links. It might open things that aren't real links, and it might miss +# real links. + +config_dir="$HOME/.qute-rss" + +add_feed () { + touch "feeds" + if grep -Fq "$1" "feeds"; then + notice "$1 is saved already." + else + printf '%s\n' "$1" >> "feeds" + fi +} + +# Show an error message and exit +fail () { + echo "message-error '$*'" > "$QUTE_FIFO" + exit 1 +} + +# Get a sorted list of item URLs from a RSS feed +get_items () { + $curl "$@" | grep "$text_only" -zo -e ']*>[^<>]*' \ + -e ']*>[^<>]*' \ + -e ']*href="[^"]*"' | + grep "$text_only" -o 'http[^<>"]*' | sort | uniq +} + +# Show an info message +notice () { + echo "message-info '$*'" > "$QUTE_FIFO" +} + +# Update a database of a feed and open new URLs +read_items () { + cd read_urls || return 1 + feed_file="$(echo "$1" | tr -d /)" + feed_temp_file="$(mktemp "$feed_file.tmp.XXXXXXXXXX")" + feed_new_items="$(mktemp "$feed_file.new.XXXXXXXXXX")" + get_items "$1" > "$feed_temp_file" + if [ ! -s "$feed_temp_file" ]; then + notice "No items found for $1." + rm "$feed_temp_file" "$feed_new_items" + elif [ ! -f "$feed_file" ]; then + notice "$1 is a new feed. All items will be marked as read." + mv "$feed_temp_file" "$feed_file" + rm "$feed_new_items" + else + sort -o "$feed_file" "$feed_file" + comm -2 -3 "$feed_temp_file" "$feed_file" | tee "$feed_new_items" + cat "$feed_new_items" >> "$feed_file" + sort -o "$feed_file" "$feed_file" + rm "$feed_temp_file" "$feed_new_items" + fi | while read -r item; do + echo "open -t $item" > "$QUTE_FIFO" + done +} + +if [ ! -d "$config_dir/read_urls" ]; then + notice "Creating configuration directory." + mkdir -p "$config_dir/read_urls" +fi + +cd "$config_dir" || exit 1 + +if [ $# != 0 ]; then + for arg in "$@"; do + if [ "$arg" = "add" ]; then + add_feed "$QUTE_URL" + else + add_feed "$arg" + fi + done + exit +fi + +if [ ! -f "feeds" ]; then + fail "Add feeds by running ':spawn -u rss add' or ':spawn -u rss '." +fi + +if curl --version >&-; then + curl="curl -sL" +elif wget --version >&-; then + curl="wget -qO -" +else + fail "Either curl or wget is needed to run this script." +fi + +# Detect GNU grep so we can force it to treat everything as text +if < /dev/null grep --help 2>&1 | grep -q -- -a; then + text_only="-a" +fi + +while read -r feed_url; do + read_items "$feed_url" & +done < "$config_dir/feeds" + +wait diff --git a/.config/qutebrowser/misc/userscripts/taskadd b/.config/qutebrowser/misc/userscripts/taskadd new file mode 100755 index 0000000..36e1c2c --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/taskadd @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +# +# Behavior: +# Userscript for qutebrowser which adds a task to taskwarrior. +# If run as a command (:spawn --userscript taskadd), it creates a new task +# with the description equal to the current page title and annotates it with +# the current page url. Additional arguments are passed along so you can add +# mods to the task (e.g. priority, due date, tags). +# +# Example: +# :spawn --userscript taskadd due:eod pri:H +# +# To enable passing along extra args, I suggest using a mapping like: +# :bind set-cmd-text -s :spawn --userscript taskadd +# +# If run from hint mode, it uses the selected hint text as the description +# and the selected hint url as the annotation. +# +# Ryan Roden-Corrent (rcorre), 2016 +# Any feedback is welcome! +# +# For more info on Taskwarrior, see http://taskwarrior.org/ + +# use either the current page title or the hint text as the task description +[[ $QUTE_MODE == 'hints' ]] && title=$QUTE_SELECTED_TEXT || title=$QUTE_TITLE + +# try to add the task and grab the output +if msg="$(task add "$title" "$*" 2>&1)"; then + # annotate the new task with the url, send the output back to the browser + task +LATEST annotate "$QUTE_URL" + echo "message-info '$(echo "$msg" | head -n 1)'" >> "$QUTE_FIFO" +else + echo "message-error '$(echo "$msg" | head -n 1)'" >> "$QUTE_FIFO" +fi diff --git a/.config/qutebrowser/misc/userscripts/tor_identity b/.config/qutebrowser/misc/userscripts/tor_identity new file mode 100755 index 0000000..93b6d41 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/tor_identity @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# Copyright 2018 jnphilipp +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see . + +# Change your tor identity. +# +# Set a hotkey to launch this script, then: +# :bind ti spawn --userscript tor_identity PASSWORD +# +# Use the hotkey to change your tor identity, press 'ti' to change it. +# https://stem.torproject.org/faq.html#how-do-i-request-a-new-identity-from-tor +# + +import os +import sys + +try: + from stem import Signal + from stem.control import Controller +except ImportError: + if os.getenv('QUTE_FIFO'): + with open(os.environ['QUTE_FIFO'], 'w') as f: + f.write('message-error "Failed to import stem."') + else: + print('Failed to import stem.') + + +password = sys.argv[1] +with Controller.from_port(port=9051) as controller: + controller.authenticate(password) + controller.signal(Signal.NEWNYM) + if os.getenv('QUTE_FIFO'): + with open(os.environ['QUTE_FIFO'], 'w') as f: + f.write('message-info "Tor identity changed."') + else: + print('Tor identity changed.') diff --git a/.config/qutebrowser/misc/userscripts/view_in_mpv b/.config/qutebrowser/misc/userscripts/view_in_mpv new file mode 100755 index 0000000..16603bd --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/view_in_mpv @@ -0,0 +1,143 @@ +#!/usr/bin/env bash +# +# Behavior: +# Userscript for qutebrowser which views the current web page in mpv using +# sensible mpv-flags. While viewing the page in MPV, all