diff --git a/arch_install b/arch_install index 0f52789..c7ec505 100755 --- a/arch_install +++ b/arch_install @@ -137,7 +137,7 @@ set_pkgs() { # Terminal pkgs+=' tmux ranger atool p7zip tree' pkgs+=' neofetch powerline-fonts' - pkgs+=' lolcat cmatrix' + pkgs+=' exa bat lolcat cmatrix' # extra font for ranger pkgs+=' otf-nerd-fonts-fira-code' # Network diff --git a/code/.config/Code - OSS/User/settings.json b/code/.config/Code - OSS/User/settings.json index 62bd681..a4e6239 100644 --- a/code/.config/Code - OSS/User/settings.json +++ b/code/.config/Code - OSS/User/settings.json @@ -6,11 +6,12 @@ "workbench.editor.showTabs": false, "workbench.editor.enablePreview": false, "workbench.editor.enablePreviewFromQuickOpen": true, - "breadcrumbs.enabled": false, + "breadcrumbs.enabled": true, "workbench.editor.closeEmptyGroups": true, "workbench.editor.tabCloseButton": "off", "explorer.openEditors.visible": 0, "debug.openDebug": "openOnDebugBreak", + "debug.console.closeOnEnd": true, // Don't ask "git.autofetch": true, "git.confirmSync": false, @@ -297,5 +298,6 @@ "editor.defaultFormatter": "esbenp.prettier-vscode" }, "workbench.startupEditor": "newUntitledFile", - "workbench.colorTheme": "Community Material Theme Darker High Contrast" + "workbench.colorTheme": "Community Material Theme Darker High Contrast", + "mesonbuild.configureOnOpen": false } \ No newline at end of file diff --git a/fish/.config/fish/config.fish b/fish/.config/fish/config.fish index f1bdd71..8a3d470 100644 --- a/fish/.config/fish/config.fish +++ b/fish/.config/fish/config.fish @@ -19,13 +19,15 @@ if test -n "$XDG_VTRN"; and test -z "$DISPLAY" or command -qs systemctl;and systemctl -q is-enabled ly export _JAVA_AWT_WM_NONREPARENTING=1 + export GTK_CSD=0 export LD_PRELOAD='/usr/lib/libgtk3-nocsd.so.0' + export XCURSOR_THEME=capitaine-cursors export GTK_THEME=materia-custom-accent:dark # export XDG_CURRENT_DESKTOP=Unity - export QT_WAYLAND_FORCE_DPI=physical + export QT_SCALE_FACTOR=1.0001 export QPA_PLATFORM=wayland export QT_QPA_PLATFORM=wayland end @@ -36,6 +38,9 @@ abbr rv sudo nvim command -qs exa && alias ls exa +command -qs bat && + alias cat bat + abbr gs git status abbr gp 'git pull; git push' diff --git a/kitty/.config/kitty/kitty.conf b/kitty/.config/kitty/kitty.conf index 26a7753..8c2b806 100644 --- a/kitty/.config/kitty/kitty.conf +++ b/kitty/.config/kitty/kitty.conf @@ -6,7 +6,7 @@ font_size 12 cursor #cc5757 background #202020 foreground #dddddd -# background_opacity 0.9 +background_opacity 0.98 # black diff --git a/mpv/.config/mpv/scripts/shared/sponsorblock.py b/mpv/.config/mpv/scripts/shared/sponsorblock.py deleted file mode 100644 index 58ad903..0000000 --- a/mpv/.config/mpv/scripts/shared/sponsorblock.py +++ /dev/null @@ -1,102 +0,0 @@ -import urllib.request -import sqlite3 -import random -import string -import json -import sys -import os - -if sys.argv[1] in ["submit", "stats"]: - if not sys.argv[8]: - if os.path.isfile(sys.argv[7]): - with open(sys.argv[7]) as f: - uid = f.read() - else: - uid = "".join(random.choices(string.ascii_letters + string.digits, k=36)) - with open(sys.argv[7], "w") as f: - f.write(uid) - else: - uid = sys.argv[8] - -opener = urllib.request.build_opener() -opener.addheaders = [("User-Agent", "mpv_sponsorblock/1.0 (https://github.com/po5/mpv_sponsorblock)")] -urllib.request.install_opener(opener) - -if sys.argv[1] == "ranges" and not sys.argv[2]: - times = [] - try: - response = urllib.request.urlopen(sys.argv[3] + "/api/getVideoSponsorTimes?videoID=" + sys.argv[4]) - data = json.load(response) - for i, time in enumerate(data["sponsorTimes"]): - times.append(str(time[0]) + "," + str(time[1]) + "," + data["UUIDs"][i]) - print(":".join(times)) - except (TimeoutError, urllib.error.URLError) as e: - print("error") - except urllib.error.HTTPError as e: - if e.code == 404: - print("") - else: - print("error") -elif sys.argv[1] == "ranges": - conn = sqlite3.connect(sys.argv[2]) - conn.row_factory = sqlite3.Row - c = conn.cursor() - c.execute("SELECT startTime, endTime, votes, UUID FROM sponsorTimes WHERE videoID = ? AND shadowHidden = 0 AND votes > -1", (sys.argv[4],)) - times = [] - sponsors = c.fetchall() - best = list(sponsors) - dealtwith = [] - similar = [] - for sponsor_a in sponsors: - for sponsor_b in sponsors: - if sponsor_a is not sponsor_b and sponsor_a["startTime"] >= sponsor_b["startTime"] and sponsor_a["startTime"] <= sponsor_b["endTime"]: - similar.append([sponsor_a, sponsor_b]) - if sponsor_a in best: - best.remove(sponsor_a) - if sponsor_b in best: - best.remove(sponsor_b) - for sponsors_a in similar: - if sponsors_a in dealtwith: - continue - group = set(sponsors_a) - for sponsors_b in similar: - if sponsors_b[0] in group or sponsors_b[1] in group: - group.add(sponsors_b[0]) - group.add(sponsors_b[1]) - dealtwith.append(sponsors_b) - best.append(max(group, key=lambda x:x["votes"])) - for time in best: - times.append(str(time["startTime"]) + "," + str(time["endTime"]) + "," + time["UUID"]) - print(":".join(times)) -elif sys.argv[1] == "update": - try: - urllib.request.urlretrieve(sys.argv[3] + "/database.db", sys.argv[2] + ".tmp") - os.replace(sys.argv[2] + ".tmp", sys.argv[2]) - except PermissionError: - print("database update failed, file currently in use", file=sys.stderr) - exit(1) - except ConnectionResetError: - print("database update failed, connection reset", file=sys.stderr) - exit(1) - except TimeoutError: - print("database update failed, timed out", file=sys.stderr) - exit(1) - except urllib.error.URLError: - print("database update failed", file=sys.stderr) - exit(1) -elif sys.argv[1] == "submit": - try: - response = urllib.request.urlopen(sys.argv[3] + "/api/postVideoSponsorTimes?videoID=" + sys.argv[4] + "&startTime=" + sys.argv[5] + "&endTime=" + sys.argv[6] + "&userID=" + uid) - print("success") - except urllib.error.HTTPError as e: - print(e.code) - except: - print("error") -elif sys.argv[1] == "stats": - try: - if sys.argv[6]: - urllib.request.urlopen(sys.argv[3] + "/api/viewedVideoSponsorTime?UUID=" + sys.argv[5]) - if sys.argv[9]: - urllib.request.urlopen(sys.argv[3] + "/api/voteOnSponsorTime?UUID=" + sys.argv[5] + "&userID=" + uid + "&type=" + sys.argv[9]) - except: - pass \ No newline at end of file diff --git a/mpv/.config/mpv/scripts/shared/sponsorblock.txt b/mpv/.config/mpv/scripts/shared/sponsorblock.txt deleted file mode 100644 index 58c7cfc..0000000 --- a/mpv/.config/mpv/scripts/shared/sponsorblock.txt +++ /dev/null @@ -1 +0,0 @@ -goG8nEvCjnzh5oi4T24aecVd5XARDVcAQz0m \ No newline at end of file diff --git a/mpv/.config/mpv/scripts/sponsorblock.lua b/mpv/.config/mpv/scripts/sponsorblock.lua index 8d6460d..214b211 100644 --- a/mpv/.config/mpv/scripts/sponsorblock.lua +++ b/mpv/.config/mpv/scripts/sponsorblock.lua @@ -3,18 +3,21 @@ -- This script skips sponsored segments of YouTube videos -- using data from https://github.com/ajayyy/SponsorBlock -local ON_WINDOWS = package.config:sub(1,1) ~= '/' +local ON_WINDOWS = package.config:sub(1,1) ~= "/" local options = { - server_address = "https://api.sponsor.ajay.app", + server_address = "https://sponsor.ajay.app", python_path = ON_WINDOWS and "python" or "python3", + -- Whether or not to automatically skip sponsors + skip = true, + -- If true, sponsored segments will only be skipped once skip_once = true, -- Note that sponsored segments may ocasionally be inaccurate if this is turned off - -- see https://ajay.app/blog.html#voting-and-pseudo-randomness-or-sponsorblock-or-youtube-sponsorship-segment-blocker + -- see https://blog.ajay.app/voting-and-pseudo-randomness-or-sponsorblock-or-youtube-sponsorship-segment-blocker local_database = true, -- Update database on first run, does nothing if local_database is false @@ -23,6 +26,9 @@ local options = { -- User ID used to submit sponsored segments, leave blank for random user_id = "", + -- Name to display on the stats page https://sponsor.ajay.app/stats/ leave blank to keep current name + display_name = "", + -- Tell the server when a skip happens report_views = true, @@ -32,6 +38,9 @@ local options = { -- Use sponsor times from server if they're more up to date than our local database server_fallback = true, + -- Create chapters at sponsor boundaries for OSC display and manual skipping with skip=false + make_chapters = true, + -- Minimum duration for sponsors (in seconds), segments under that threshold will be ignored min_duration = 1, @@ -67,14 +76,15 @@ if legacy then end local utils = require "mp.utils" -local scripts_dir = mp.find_config_file("scripts") -local sponsorblock = utils.join_path(scripts_dir, "shared/sponsorblock.py") -local uid_path = utils.join_path(scripts_dir, "shared/sponsorblock.txt") -local database_file = options.local_database and utils.join_path(scripts_dir, "shared/sponsorblock.db") or "" +scripts_dir = mp.find_config_file("scripts") + +local sponsorblock = utils.join_path(scripts_dir, "sponsorblock_shared/sponsorblock.py") +local uid_path = utils.join_path(scripts_dir, "sponsorblock_shared/sponsorblock.txt") +local database_file = options.local_database and utils.join_path(scripts_dir, "sponsorblock_shared/sponsorblock.db") or "" local youtube_id = nil local ranges = {} local init = false -local segment = {a = 0, b = 0, progress = 0} +local segment = {a = 0, b = 0, progress = 0, first = true} local retrying = false local last_skip = {uuid = "", dir = nil} local speed_timer = nil @@ -93,6 +103,29 @@ function t_count(t) return count end +function time_sort(a, b) + return a.time < b.time +end + +function clean_chapters() + local chapters = mp.get_property_native("chapter-list") + local new_chapters = {} + for _, chapter in pairs(chapters) do + if chapter.title ~= "Preview segment start" and chapter.title ~= "Preview segment end" then + table.insert(new_chapters, chapter) + end + end + mp.set_property_native("chapter-list", new_chapters) +end + +function create_chapter(chapter_title, chapter_time) + local chapters = mp.get_property_native("chapter-list") + local duration = mp.get_property_native("duration") + table.insert(chapters, {title=chapter_title, time=(duration == nil or duration > chapter_time) and chapter_time or duration - .001}) + table.sort(chapters, time_sort) + mp.set_property_native("chapter-list", chapters) +end + function getranges(_, exists, db, more) if type(exists) == "table" and exists["status"] == "1" then if options.server_fallback then @@ -133,12 +166,18 @@ function getranges(_, exists, db, more) local r_count = 0 if more then r_count = -1 end for t in string.gmatch(sponsors.stdout, "[^:%s]+") do - uuid = string.match(t, '[^,]+$') + uuid = string.match(t, "[^,]+$") if ranges[uuid] then new_ranges[uuid] = ranges[uuid] else - start_time = tonumber(string.match(t, '[^,]+')) - end_time = tonumber(string.sub(string.match(t, ',[^,]+'), 2)) + start_time = tonumber(string.match(t, "[^,]+")) + end_time = tonumber(string.sub(string.match(t, ",[^,]+"), 2)) + for o_uuid, o_t in pairs(ranges) do + if (start_time >= o_t.start_time and start_time <= o_t.end_time) or (o_t.start_time >= start_time and o_t.start_time <= end_time) then + new_ranges[o_uuid] = o_t + goto continue + end + end if end_time - start_time >= options.min_duration then new_ranges[uuid] = { start_time = start_time, @@ -146,7 +185,12 @@ function getranges(_, exists, db, more) skipped = false } end + if options.make_chapters then + create_chapter("Sponsor start (" .. string.sub(uuid, 1, 6) .. ")", start_time) + create_chapter("Sponsor end (" .. string.sub(uuid, 1, 6) .. ")", end_time) + end end + ::continue:: r_count = r_count + 1 end local c_count = t_count(ranges) @@ -277,7 +321,7 @@ end function file_loaded() local initialized = init ranges = {} - segment = {a = 0, b = 0, progress = 0} + segment = {a = 0, b = 0, progress = 0, first = true} last_skip = {uuid = "", dir = nil} local video_path = mp.get_property("path") local youtube_id1 = string.match(video_path, "https?://youtu%.be/([%a%d%-_]+).*") @@ -305,7 +349,29 @@ function file_loaded() end end if initialized then return end - mp.observe_property("time-pos", "native", skip_ads) + if options.skip then + mp.observe_property("time-pos", "native", skip_ads) + end + if options.display_name ~= "" then + local args = { + options.python_path, + sponsorblock, + "username", + database_file, + options.server_address, + youtube_id, + "", + "", + uid_path, + options.user_id, + options.display_name + } + if not legacy then + mp.command_native_async({name = "subprocess", playback_only = false, args = args}, function () end) + else + utils.subprocess_detached({args = args}) + end + end if not options.local_database or (not options.auto_update and file_exists(database_file)) then return end update() end @@ -326,6 +392,16 @@ function set_segment() segment.a = pos mp.osd_message("[sponsorblock] segment boundary A set, press again for boundary B", 3) end + if options.make_chapters and not segment.first then + local start_time = math.min(segment.a, segment.b) + local end_time = math.max(segment.a, segment.b) + if end_time - start_time ~= 0 and end_time ~= 0 then + clean_chapters() + create_chapter("Preview segment start", start_time) + create_chapter("Preview segment end", end_time) + end + end + segment.first = false end function submit_segment() @@ -335,7 +411,7 @@ function submit_segment() if end_time - start_time == 0 or end_time == 0 then mp.osd_message("[sponsorblock] empty segment, not submitting") elseif segment.progress <= 1 then - mp.osd_message(string.format("[sponsorblock] press Shift+G again to confirm: %.2d:%.2d:%.2d to %.2d:%.2d:%.2d", start_time/(60*60), start_time/60%60, start_time%60, end_time/(60*60), end_time/60%60, end_time%60), 5) + mp.osd_message(string.format("[sponsorblock] press Shift+G again to confirm: %.2d:%.2d:%.2d to %.2d:%.2d:%.2d", math.floor(start_time/(60*60)), math.floor(start_time/60%60), math.floor(start_time%60), math.floor(end_time/(60*60)), math.floor(end_time/60%60), math.floor(end_time%60)), 5) segment.progress = segment.progress + 2 else mp.osd_message("[sponsorblock] submitting segment...", 30) @@ -358,20 +434,25 @@ function submit_segment() submit = utils.subprocess({args = args}) end if string.match(submit.stdout, "success") then - segment = {a = 0, b = 0, progress = 0} + segment = {a = 0, b = 0, progress = 0, first = true} mp.osd_message("[sponsorblock] segment submitted") + if options.make_chapters then + clean_chapters() + create_chapter("Submitted segment start", start_time) + create_chapter("Submitted segment end", end_time) + end elseif string.match(submit.stdout, "error") then mp.osd_message("[sponsorblock] segment submission failed, server may be down. try again", 5) elseif string.match(submit.stdout, "502") then mp.osd_message("[sponsorblock] segment submission failed, server is down. try again", 5) elseif string.match(submit.stdout, "400") then mp.osd_message("[sponsorblock] segment submission failed, impossible inputs", 5) - segment = {a = 0, b = 0, progress = 0} + segment = {a = 0, b = 0, progress = 0, first = true} elseif string.match(submit.stdout, "429") then mp.osd_message("[sponsorblock] segment submission failed, rate limited. try again", 5) elseif string.match(submit.stdout, "409") then mp.osd_message("[sponsorblock] segment already submitted", 3) - segment = {a = 0, b = 0, progress = 0} + segment = {a = 0, b = 0, progress = 0, first = true} else mp.osd_message("[sponsorblock] segment submission failed", 5) end @@ -379,7 +460,12 @@ function submit_segment() end mp.register_event("file-loaded", file_loaded) -mp.add_key_binding("g", "sponsorblock_set_segment", set_segment) -mp.add_key_binding("G", "sponsorblock_submit_segment", submit_segment) -mp.add_key_binding("h", "sponsorblock_upvote", function() return vote("1") end) -mp.add_key_binding("H", "sponsorblock_downvote", function() return vote("0") end) +mp.add_key_binding("g", "set_segment", set_segment) +mp.add_key_binding("G", "submit_segment", submit_segment) +mp.add_key_binding("h", "upvote_segment", function() return vote("1") end) +mp.add_key_binding("H", "downvote_segment", function() return vote("0") end) +-- Bindings below are for backwards compatibility and could be removed at any time +mp.add_key_binding(nil, "sponsorblock_set_segment", set_segment) +mp.add_key_binding(nil, "sponsorblock_submit_segment", submit_segment) +mp.add_key_binding(nil, "sponsorblock_upvote", function() return vote("1") end) +mp.add_key_binding(nil, "sponsorblock_downvote", function() return vote("0") end) diff --git a/nvim/.config/nvim/coc-settings.json b/nvim/.config/nvim/coc-settings.json new file mode 100644 index 0000000..637a39f --- /dev/null +++ b/nvim/.config/nvim/coc-settings.json @@ -0,0 +1,88 @@ +{ + "languageserver": { + "clangd": { + "command": "clangd", + "rootPatterns": [ + "compile_flags.txt", "compile_commands.json"], + "filetypes": ["c", "cc", "cpp", "c++", "objc", "objcpp"] + }, + "vala": { + "command": "vala-language-server", + "filetypes": [ + "vala", + "genie" + ] + }, + "python": { + "command": "python", + "args": [ + "-mpyls", + "-vv", + "--log-file", + "/tmp/lsp_python.log" + ], + "trace.server": "verbose", + "filetypes": [ + "python" + ], + "settings": { + "pyls": { + "enable": true, + "trace": { + "server": "verbose" + }, + "commandPath": "", + "configurationSources": [ + "pycodestyle" + ], + "plugins": { + "pyls_mypy": { + "enabled": true, + "live_mode": false + }, + "jedi_completion": { + "enabled": true + }, + "jedi_hover": { + "enabled": true + }, + "jedi_references": { + "enabled": true + }, + "jedi_signature_help": { + "enabled": true + }, + "jedi_symbols": { + "enabled": true, + "all_scopes": true + }, + "mccabe": { + "enabled": true, + "threshold": 15 + }, + "preload": { + "enabled": true + }, + "pycodestyle": { + "enabled": true + }, + "pydocstyle": { + "enabled": false, + "match": "(?!test_).*\\.py", + "matchDir": "[^\\.].*" + }, + "pyflakes": { + "enabled": true + }, + "rope_completion": { + "enabled": true + }, + "yapf": { + "enabled": true + } + } + } + } + } + } +} diff --git a/nvim/.config/nvim/init.vim b/nvim/.config/nvim/init.vim index 7bbf6e6..8239642 100644 --- a/nvim/.config/nvim/init.vim +++ b/nvim/.config/nvim/init.vim @@ -20,6 +20,8 @@ call plug#begin('~/.config/nvim/plugged') + Plug 'arrufat/vala.vim' + Plug 'NLKNguyen/c-syntax.vim' Plug 'airblade/vim-gitgutter' Plug 'chrisbra/Colorizer' @@ -29,7 +31,7 @@ " " Plug 'sheerun/vim-polyglot' " Plug 'dense-analysis/ale' - " Plug 'neoclide/coc.nvim', {'branch': 'release'} + Plug 'neoclide/coc.nvim', {'branch': 'release'} " Plug 'davidhalter/jedi-vim' " Plug 'autozimu/LanguageClient-neovim', { @@ -166,23 +168,23 @@ call plug#end() " noremap h h "h keeps it's meaning " Dvorak it! -no h h -no t j -no n k -no s l +noremap h h +noremap t j +noremap n k +noremap s l " no s : " no S : -no j d -no l n -no L N +noremap j d +noremap l n +noremap L N " Added benefits -no - $ -no _ ^ -no N -no T -no H 8 -no T 8 -no D +noremap - $ +noremap _ ^ +noremap N +noremap T +noremap H 8 +noremap T 8 +noremap D " Easy comment toggle nmap gc :Commentary diff --git a/nvim/.config/zathura/zathurarc b/nvim/.config/zathura/zathurarc index 82f2a65..f7dce70 100644 --- a/nvim/.config/zathura/zathurarc +++ b/nvim/.config/zathura/zathurarc @@ -1,3 +1,12 @@ +map h scroll left +map t scroll down +map n scroll up +map s scroll right + +map l search forward + +map i set recolor + set recolor set recolor-keephue set recolor-lightcolor "#202020" diff --git a/qutebrowser/.config/qutebrowser/config.py b/qutebrowser/.config/qutebrowser/config.py index 686037c..ae98f44 100644 --- a/qutebrowser/.config/qutebrowser/config.py +++ b/qutebrowser/.config/qutebrowser/config.py @@ -9,7 +9,7 @@ # 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 = {'q': 'close', 'qa': 'quit', 'w': 'session-save', 'wq': 'quit --save', 'wqa': 'quit --save'} +c.aliases = {'q': 'close', 'qa': 'quit', 'w': 'session-save', 'wq': 'quit --save', 'wqa': 'quit --save', 'cw': 'config-write-py -f'} # Load a restored tab as soon as it takes focus. # Type: Bool @@ -19,6 +19,36 @@ c.session.lazy_restore = True # Type: Bool c.auto_save.session = True +# Which cookies to accept. With QtWebEngine, this setting also controls +# other features with tracking capabilities similar to those of cookies; +# including IndexedDB, DOM storage, filesystem API, service workers, and +# AppCache. Note that with QtWebKit, only `all` and `never` are +# supported as per-domain values. Setting `no-3rdparty` or `no- +# unknown-3rdparty` per-domain on QtWebKit will have the same effect as +# `all`. +# Type: String +# Valid values: +# - all: Accept all cookies. +# - no-3rdparty: Accept cookies from the same origin only. This is known to break some sites, such as GMail. +# - no-unknown-3rdparty: Accept cookies from the same origin only, unless a cookie is already set for the domain. On QtWebEngine, this is the same as no-3rdparty. +# - never: Don't accept cookies at all. +config.set('content.cookies.accept', 'all', 'chrome-devtools://*') + +# Which cookies to accept. With QtWebEngine, this setting also controls +# other features with tracking capabilities similar to those of cookies; +# including IndexedDB, DOM storage, filesystem API, service workers, and +# AppCache. Note that with QtWebKit, only `all` and `never` are +# supported as per-domain values. Setting `no-3rdparty` or `no- +# unknown-3rdparty` per-domain on QtWebKit will have the same effect as +# `all`. +# Type: String +# Valid values: +# - all: Accept all cookies. +# - no-3rdparty: Accept cookies from the same origin only. This is known to break some sites, such as GMail. +# - no-unknown-3rdparty: Accept cookies from the same origin only, unless a cookie is already set for the domain. On QtWebEngine, this is the same as no-3rdparty. +# - never: Don't accept cookies at all. +config.set('content.cookies.accept', 'all', 'devtools://*') + # User agent to send. The following placeholders are defined: * # `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`: # The underlying WebKit version (set to a fixed value with @@ -89,6 +119,20 @@ config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}) AppleWebKit/53 # Type: FormatString config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}; rv:71.0) Gecko/20100101 Firefox/71.0', 'https://docs.google.com/*') +# User agent to send. The following placeholders are defined: * +# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`: +# The underlying WebKit version (set to a fixed value with +# QtWebEngine). * `{qt_key}`: "Qt" for QtWebKit, "QtWebEngine" for +# QtWebEngine. * `{qt_version}`: The underlying Qt version. * +# `{upstream_browser_key}`: "Version" for QtWebKit, "Chrome" for +# QtWebEngine. * `{upstream_browser_version}`: The corresponding +# Safari/Chrome version. * `{qutebrowser_version}`: The currently +# running qutebrowser version. The default value is equal to the +# unchanged user agent of QtWebKit/QtWebEngine. Note that the value +# read from JavaScript is always the global value. +# Type: FormatString +config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}; rv:71.0) Gecko/20100101 Firefox/71.0', 'https://drive.google.com/*') + # Load images automatically in web pages. # Type: Bool config.set('content.images', True, 'chrome-devtools://*') @@ -117,6 +161,14 @@ config.set('content.javascript.enabled', True, 'chrome://*/*') # Type: Bool config.set('content.javascript.enabled', True, 'qute://*/*') +# Allow websites to record audio/video. +# Type: BoolAsk +# Valid values: +# - true +# - false +# - ask +config.set('content.media_capture', True, 'https://ca.bbcollab.com') + # Allow websites to show notifications. # Type: BoolAsk # Valid values: @@ -133,6 +185,44 @@ config.set('content.notifications', False, 'https://www.1337x.to') # - ask config.set('content.notifications', True, 'https://www.reddit.com') +# Allow websites to show notifications. +# Type: BoolAsk +# Valid values: +# - true +# - false +# - ask +config.set('content.notifications', True, 'https://dev.lemmy.ml') + +# Allow websites to show notifications. +# Type: BoolAsk +# Valid values: +# - true +# - false +# - ask +config.set('content.notifications', False, 'https://www.duolingo.com') + +# Allow websites to show notifications. +# Type: BoolAsk +# Valid values: +# - true +# - false +# - ask +config.set('content.notifications', False, 'https://www.jornalcontabil.com.br') + +# 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' + +# Automatically mute tabs. Note that if the `:tab-mute` command is used, +# the mute status for the affected tab is now controlled manually, and +# this setting doesn't have any effect. +# Type: Bool +c.content.mute = True + # Shrink the completion to be smaller than the configured size if there # are no scrollbars. # Type: Bool @@ -155,13 +245,36 @@ c.scrolling.smooth = True # Type: Bool c.statusbar.hide = False +# Position of the status bar. +# Type: VerticalPosition +# Valid values: +# - top +# - bottom +c.statusbar.position = 'top' + +# 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'] + +# Open new tabs (middleclick/ctrl+click) in the background. +# Type: Bool +c.tabs.background = False + # When to show favicons in the tab bar. # Type: String # Valid values: # - always: Always show favicons. # - never: Always hide favicons. # - pinned: Show favicons only on pinned tabs. -c.tabs.favicons.show = 'never' +c.tabs.favicons.show = 'always' # How to behave when the last tab is closed. # Type: String @@ -171,7 +284,15 @@ c.tabs.favicons.show = 'never' # - startpage: Load the start page. # - default-page: Load the default page. # - close: Close the window. -c.tabs.last_close = 'close' +c.tabs.last_close = 'startpage' + +# 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 = 'last-used' # When to show the tab bar. # Type: String @@ -205,6 +326,35 @@ c.tabs.title.format = '{current_title}' # Type: Int c.tabs.indicator.width = 0 +# 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://search.disroot.org' + +# 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 `{`/`}` braces. The following further +# placeholds are defined to configure how special characters in the +# search terms are replaced by safe characters (called 'quoting'): * +# `{}` and `{semiquoted}` quote everything except slashes; this is the +# most sensible choice for almost all search engines (for the search +# term `slash/and&` this placeholder expands to `slash/and%26amp`). +# * `{quoted}` quotes all characters (for `slash/and&` this +# placeholder expands to `slash%2Fand%26amp`). * `{unquoted}` quotes +# nothing (for `slash/and&` this placeholder expands to +# `slash/and&`). 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': 'search.disroot.org?q={}', '!aw': 'wiki.archlinux.org?search={}', '!w': 'pt.wikipedia.org/w?search={}'} + +# Page(s) to open at the start. +# Type: List of FuzzyUrl, or FuzzyUrl +c.url.start_pages = 'https://search.disroot.org' + # Background color of the completion widget for odd rows. # Type: QssColor c.colors.completion.odd.bg = '#202020' @@ -278,6 +428,14 @@ c.colors.statusbar.normal.fg = 'gray' # Type: QssColor c.colors.statusbar.normal.bg = '#202020' +# Foreground color of the statusbar in insert mode. +# Type: QssColor +c.colors.statusbar.insert.fg = '#aaffaa' + +# Background color of the statusbar in insert mode. +# Type: QssColor +c.colors.statusbar.insert.bg = '#202020' + # Background color of the statusbar in command mode. # Type: QssColor c.colors.statusbar.command.bg = '#202020' @@ -289,7 +447,7 @@ c.colors.statusbar.caret.selection.bg = '#D9534F' # Foreground color of the URL in the statusbar on successful load # (https). # Type: QssColor -c.colors.statusbar.url.success.https.fg = 'gray' +c.colors.statusbar.url.success.https.fg = 'white' # Background color of the tab bar. # Type: QssColor @@ -378,20 +536,20 @@ c.fonts.tabs = '14px Inter' # Bindings for normal mode config.bind(',m', 'spawn --userscript view_in_mpv') config.bind(',r', 'spawn --userscript readability') +config.bind(';e', "hint links spawn deemix '{hint-url}'") config.bind(';m', 'hint links spawn mpv --fs {hint-url}') - +config.bind('E', 'hint all tab') config.bind('H', 'back') +config.bind('L', 'search-prev') config.bind('N', 'tab-next') config.bind('S', 'forward') config.bind('T', 'tab-prev') - -config.bind('n', 'scroll up') -config.bind('t', 'scroll down') -config.bind('h', 'scroll left') -config.bind('s', 'scroll right') - config.bind('e', 'hint all') -config.bind('E', 'hint all tab') +config.bind('h', 'scroll left') +config.bind('l', 'search-next') +config.bind('n', 'scroll up') +config.bind('s', 'scroll right') +config.bind('t', 'scroll down') # Bindings for insert mode config.bind('', 'spawn --userscript qute-keepass -p ~/Documentos/senhas/Senhas.kdbx', mode='insert') diff --git a/ranger/.config/ranger/rc.conf b/ranger/.config/ranger/rc.conf index b9571f4..2dfe453 100644 --- a/ranger/.config/ranger/rc.conf +++ b/ranger/.config/ranger/rc.conf @@ -341,7 +341,7 @@ map i display_file map ? help map W display_log map w taskview_open -map S shell $SHELL +map X shell $SHELL map : console map ; console @@ -399,23 +399,23 @@ map move right=1 map console touch%space # VIM-like -copymap k -copymap j +copymap n +copymap t copymap h -copymap l +copymap s copymap gg copymap G copymap copymap -map J move down=0.5 pages=True -map K move up=0.5 pages=True -copymap J -copymap K +map T move down=0.5 pages=True +map N move up=0.5 pages=True +copymap T +copymap N # Jumping around map H history_go -1 -map L history_go 1 +map S history_go 1 map ] move_parent 1 map [ move_parent -1 map } traverse @@ -492,8 +492,8 @@ map yk eval fm.copy(dirarg=dict(up=1), narg=quantifier) # Searching map / console search%space -map n search_next -map N search_next forward=False +map l search_next +map L search_next forward=False map ct search_next order=tag map cs search_next order=size map ci search_next order=mimetype @@ -674,15 +674,15 @@ pmap pager_move up=1.0 pages=True pmap pager_move down=0.5 pages=True pmap pager_move up=0.5 pages=True -copypmap k -copypmap j +copypmap n +copypmap t copypmap h -copypmap l +copypmap s copypmap g copypmap G copypmap d copypmap u -copypmap n f +copypmap l f copypmap p b # Basic @@ -705,8 +705,8 @@ tmap taskview_move up=1.0 pages=True tmap taskview_move down=0.5 pages=True tmap taskview_move up=0.5 pages=True -copytmap k -copytmap j +copytmap n +copytmap t copytmap g copytmap G copytmap u @@ -714,8 +714,8 @@ copytmap n f copytmap p b # Changing priority and deleting tasks -tmap J eval -q fm.ui.taskview.task_move(-1) -tmap K eval -q fm.ui.taskview.task_move(0) +tmap T eval -q fm.ui.taskview.task_move(-1) +tmap N eval -q fm.ui.taskview.task_move(0) tmap dd eval -q fm.ui.taskview.task_remove() tmap eval -q fm.ui.taskview.task_move(-1) tmap eval -q fm.ui.taskview.task_move(0) diff --git a/scripts/.local/bin/launcher b/scripts/.local/bin/launcher index 40110d5..51dbe63 100755 --- a/scripts/.local/bin/launcher +++ b/scripts/.local/bin/launcher @@ -1,6 +1,4 @@ #!/bin/fish -command -qs wofi && - exec wofi --show drun --allow-images --prompt 'Iniciar: ' -command -qs bmenu && - exec bmenu run +command -qs bmenu && exec bmenu run +command -qs wofi && exec wofi --show drun --allow-images --no-actions --prompt 'Iniciar: ' diff --git a/scripts/.local/bin/sway-screenshare b/scripts/.local/bin/sway-screenshare index 26d74fa..3e41fe1 100755 --- a/scripts/.local/bin/sway-screenshare +++ b/scripts/.local/bin/sway-screenshare @@ -16,7 +16,8 @@ geometry(){ } { -if [ "$1" == "stop" ]; then +if pgrep wf-recorder > /dev/null && pgrep ffplay > /dev/null +then if pgrep ffplay > /dev/null; then pkill ffplay > /dev/null fi @@ -24,24 +25,21 @@ if [ "$1" == "stop" ]; then pkill wf-recorder > /dev/null fi notify-send -t 2000 "Wayland recording has been stopped" -elif [ "$1" == "is-recording" ]; then - if pgrep wf-recorder > /dev/null && pgrep ffplay > /dev/null; then - notify-send -t 2000 "Wayland recording is up" - else - notify-send -t 2000 "No Wayland recording" - fi else if ! pgrep wf-recorder > /dev/null; then geometry=$(geometry) || exit $? wf-recorder --muxer=v4l2 --codec=rawvideo --file=/dev/video2 --geometry="$geometry" & fi if ! pgrep ffplay; then + swaymsg assign [class=ffplay] workspace 11 + unset SDL_VIDEODRIVER - ffplay /dev/video2 & + ffplay /dev/video2 -fflags nobuffer & sleep 0.5 # a hack so FPS is not dropping - swaymsg [class=ffplay] move position 1915 1050 - swaymsg focus tiling + swaymsg [class=ffplay] floating enable + # swaymsg [class=ffplay] move position 1900 1000 + # swaymsg focus tiling fi notify-send -t 2000 "Wayland recording has been started" fi diff --git a/scripts/.local/bin/wdmenu b/scripts/.local/bin/wdmenu index 90a2f6a..4e7c6b2 100755 --- a/scripts/.local/bin/wdmenu +++ b/scripts/.local/bin/wdmenu @@ -1,6 +1,6 @@ #!/bin/fish +command -qs bmenu && + exec bmenu $argv command -qs wofi && exec wofi -d $argv -command -qs bmenu && - exec bemenu $argv diff --git a/scripts/.local/bin/windows10 b/scripts/.local/bin/windows10 index d66c801..2af2a32 100755 --- a/scripts/.local/bin/windows10 +++ b/scripts/.local/bin/windows10 @@ -12,9 +12,10 @@ end qemu-system-x86_64 \ -enable-kvm \ - -m 4G \ + -m 2G \ -cpu host \ -smp (nproc) \ -display sdl,gl=on \ + -vga qxl \ -audiodev pa,id=pa \ -drive file="$HOME/.local/share/windows10.img",format=raw diff --git a/scripts/.local/bin/wpass b/scripts/.local/bin/wpass index 7a65f9b..47f0a17 100755 --- a/scripts/.local/bin/wpass +++ b/scripts/.local/bin/wpass @@ -27,6 +27,7 @@ password=$( pass show "$entry" 2>/dev/null | head -n 1 ) action=$(echo -e "Autotype\nUsername -> $username\nPassword" | wdmenu -p Action) +sleep 1s swaymsg input \* xkb_layout 'us' case $action in diff --git a/sway/.config/sway/assembly.png b/sway/.config/sway/assembly.png new file mode 100644 index 0000000..ceb336b Binary files /dev/null and b/sway/.config/sway/assembly.png differ diff --git a/sway/.config/sway/config b/sway/.config/sway/config index 6cf11bf..5a2d1c1 100644 --- a/sway/.config/sway/config +++ b/sway/.config/sway/config @@ -28,9 +28,9 @@ # }}} # Output configuration {{{ # - output * bg '#252525' solid_color + # output * bg '#252525' solid_color # output * bg /usr/share/backgrounds/gnome/adwaita-night.jpg fill - # output * bg ~/.teclado-dvorak-br.png fit + output * bg ~/.config/sway/assembly.png fit # Output HDMI-A-1 resolution 1280x720 # Disable laptop screen if closed, --reload is important @@ -158,8 +158,6 @@ # Assign programs to their workspace assign [app_id=qutebrowser] workspace 2 assign [class=qutebrowser] workspace 2 - assign [app_id=keepass.*] workspace 8 - assign [class=KeePass.*] workspace 8 assign [class=Steam] workspace 9 assign [app_id=telegramdesktop] workspace 10 @@ -275,8 +273,8 @@ default_border pixel 2px gaps inner 5px - # smart_gaps on - # smart_borders on + smart_gaps on + smart_borders on # for_window [app_id=mpv] floating enable for_window [app_id=weather] floating enable diff --git a/sway/.config/waybar/config b/sway/.config/waybar/config index 3fef514..bedfa29 100644 --- a/sway/.config/waybar/config +++ b/sway/.config/waybar/config @@ -28,7 +28,6 @@ "1": "", "2": "", "3": "", - "8": "", "9": "", "10": "", "urgent": "", @@ -63,14 +62,14 @@ "tooltip":false }, "battery": { - "tooltip":false, + "tooltip":true, "states": { "full":100, "good": 95, "warning": 25 }, "format": "{icon}", - "format-charging": "", + "format-charging": "", "format-plugged": "", "format-full": "", "format-warning":"{icon} {time}", @@ -78,12 +77,12 @@ }, "network": { "tooltip":false, - "on-click": "termite -e nmtui", + "on-click": "terminal nmtui", "format-wifi": "{icon}", "format-icons":[ "", "", "", "", "" ], - "format-ethernet": "", - "format-linked": "", - "format-disconnected": "⚠" + "format-ethernet": "", + "format-linked": "", + "format-disconnected": "" }, "pulseaudio": { "tooltip":false,