This commit is contained in:
lelgenio 2020-06-16 16:58:16 -03:00
parent bca58321d4
commit 4178222332
20 changed files with 447 additions and 205 deletions

View File

@ -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

View File

@ -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
}

View File

@ -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'

View File

@ -6,7 +6,7 @@ font_size 12
cursor #cc5757
background #202020
foreground #dddddd
# background_opacity 0.9
background_opacity 0.98
# black

View File

@ -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

View File

@ -1 +0,0 @@
goG8nEvCjnzh5oi4T24aecVd5XARDVcAQz0m

View File

@ -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)

View File

@ -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
}
}
}
}
}
}
}

View File

@ -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 <C-w><C-w>
no T <C-w><C-r>
no H 8<Down>
no T 8<Up>
no D <C-w><C-r>
noremap - $
noremap _ ^
noremap N <C-w><C-w>
noremap T <C-w><C-r>
noremap H 8<Down>
noremap T 8<Up>
noremap D <C-w><C-r>
" Easy comment toggle
nmap <silent> gc :Commentary<CR>

View File

@ -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"

View File

@ -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&amp` this placeholder expands to `slash/and%26amp`).
# * `{quoted}` quotes all characters (for `slash/and&amp` this
# placeholder expands to `slash%2Fand%26amp`). * `{unquoted}` quotes
# nothing (for `slash/and&amp` this placeholder expands to
# `slash/and&amp`). 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('<Ctrl+i>', 'spawn --userscript qute-keepass -p ~/Documentos/senhas/Senhas.kdbx', mode='insert')

View File

@ -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 <CR> move right=1
map <INSERT> console touch%space
# VIM-like
copymap <UP> k
copymap <DOWN> j
copymap <UP> n
copymap <DOWN> t
copymap <LEFT> h
copymap <RIGHT> l
copymap <RIGHT> s
copymap <HOME> gg
copymap <END> G
copymap <PAGEDOWN> <C-F>
copymap <PAGEUP> <C-B>
map J move down=0.5 pages=True
map K move up=0.5 pages=True
copymap J <C-D>
copymap K <C-U>
map T move down=0.5 pages=True
map N move up=0.5 pages=True
copymap T <C-D>
copymap N <C-U>
# 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 <pageup> pager_move up=1.0 pages=True
pmap <C-d> pager_move down=0.5 pages=True
pmap <C-u> pager_move up=0.5 pages=True
copypmap <UP> k <C-p>
copypmap <DOWN> j <C-n> <CR>
copypmap <UP> n <C-p>
copypmap <DOWN> t <C-n> <CR>
copypmap <LEFT> h
copypmap <RIGHT> l
copypmap <RIGHT> s
copypmap <HOME> g
copypmap <END> G
copypmap <C-d> d
copypmap <C-u> u
copypmap <PAGEDOWN> n f <C-F> <Space>
copypmap <PAGEDOWN> l f <C-F> <Space>
copypmap <PAGEUP> p b <C-B>
# Basic
@ -705,8 +705,8 @@ tmap <pageup> taskview_move up=1.0 pages=True
tmap <C-d> taskview_move down=0.5 pages=True
tmap <C-u> taskview_move up=0.5 pages=True
copytmap <UP> k <C-p>
copytmap <DOWN> j <C-n> <CR>
copytmap <UP> n <C-p>
copytmap <DOWN> t <C-n> <CR>
copytmap <HOME> g
copytmap <END> G
copytmap <C-u> u
@ -714,8 +714,8 @@ copytmap <PAGEDOWN> n f <C-F> <Space>
copytmap <PAGEUP> p b <C-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 <pagedown> eval -q fm.ui.taskview.task_move(-1)
tmap <pageup> eval -q fm.ui.taskview.task_move(0)

View File

@ -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: '

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 KiB

View File

@ -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

View File

@ -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,