From 13535011bb12163a4f9035cf2f231e856565e950 Mon Sep 17 00:00:00 2001 From: marcellus Date: Thu, 4 May 2023 00:13:20 +0200 Subject: fix: overall patches --- mpv/input.conf | 6 ++ mpv/music/local.lua | 30 ++++++++ mpv/music/online.lua | 9 +++ mpv/scripts/sponsorblock_minimal.lua | 145 +++++++++++++++++++++++++++++++++++ 4 files changed, 190 insertions(+) create mode 100644 mpv/input.conf create mode 100644 mpv/music/local.lua create mode 100644 mpv/music/online.lua create mode 100644 mpv/scripts/sponsorblock_minimal.lua (limited to 'mpv') diff --git a/mpv/input.conf b/mpv/input.conf new file mode 100644 index 0000000..c5065c7 --- /dev/null +++ b/mpv/input.conf @@ -0,0 +1,6 @@ +WHEEL_UP add volume 2 +WHEEL_DOWN add volume -2 +l seek 5 +h seek -5 +j seek 60 +k seek -60 \ No newline at end of file diff --git a/mpv/music/local.lua b/mpv/music/local.lua new file mode 100644 index 0000000..dfb9e2d --- /dev/null +++ b/mpv/music/local.lua @@ -0,0 +1,30 @@ +local utils = require "mp.utils" + +function notify_current_media() + local path = mp.get_property_native("path") + local origin, title = utils.split_path(path) + + local metadata = mp.get_property_native("metadata") + if metadata then + function tag(name) + return metadata[string.upper(name)] or metadata[name] + end + + title = tag("title") or title + origin = tag("artist_credit") or tag("artist") or "" + + local album = tag("album") + if album then + origin = string.format("%s — %s", origin, album) + end + + local year = tag("original_year") or tag("year") + if year then + origin = string.format("%s (%s)", origin, year) + end + end + mp.command_native({"run", "pkill", "-RTMIN+1", "dwmblocks"}) + return mp.command_native({"run", "env", "HERBE_ID=/music", "herbe", title, origin}) +end + +mp.register_event("file-loaded", notify_current_media) \ No newline at end of file diff --git a/mpv/music/online.lua b/mpv/music/online.lua new file mode 100644 index 0000000..bcd5d18 --- /dev/null +++ b/mpv/music/online.lua @@ -0,0 +1,9 @@ +local utils = require "mp.utils" + +function notify_current_media(key) + local title = mp.get_property(key) + mp.command_native({"run", "pkill", "-RTMIN+1", "dwmblocks"}) + return mp.command_native({"run", "env", "HERBE_ID=/music", "herbe", title}) +end + +mp.observe_property("media-title", string, notify_current_media) \ No newline at end of file diff --git a/mpv/scripts/sponsorblock_minimal.lua b/mpv/scripts/sponsorblock_minimal.lua new file mode 100644 index 0000000..8ac0cca --- /dev/null +++ b/mpv/scripts/sponsorblock_minimal.lua @@ -0,0 +1,145 @@ +-- sponsorblock_minimal.lua +-- https://codeberg.org/jouni/mpv_sponsorblock_minimal +-- LICENSE: GPLv3 +-- +-- b toggles between on/off +-- +-- This script skips sponsored segments of YouTube videos +-- using data from https://github.com/ajayyy/SponsorBlock + +local opt = require 'mp.options' +local utils = require 'mp.utils' + +local options = { + server = "https://sponsor.ajay.app/api/skipSegments", + + -- Categories to fetch and skip + categories = '"sponsor"', + + -- Set this to "true" to use sha256HashPrefix instead of videoID + hash = "" +} + +opt.read_options(options) + +function getranges(url) + local luacurl_available, cURL = pcall(require,'cURL') + + local res = "" + if not(luacurl_available) then -- if Lua-cURL is not available on this system + local sponsors = mp.command_native{ + name = "subprocess", + capture_stdout = true, + playback_only = false, + args = {"curl", "-L", "-s", "-g", url} + } + res = sponsors.stdout + else -- otherwise use Lua-cURL (binding to libcurl) + local buf={} + local c = cURL.easy_init() + c:setopt_followlocation(1) + c:setopt_url(url) + c:setopt_writefunction(function(chunk) table.insert(buf,chunk); return true; end) + c:perform() + res = table.concat(buf) + end + + local json = utils.parse_json(res) + if options.hash == "true" and json ~= nil then + for _, i in pairs(json) do + if i.videoID == youtube_id then + return i.segments + end + end + else + return json + end + + return nil +end + +function skip_ads(name,pos) + if pos ~= nil then + for _, i in pairs(ranges) do + v = i.segment[2] + if i.segment[1] <= pos and v > pos then + --this message may sometimes be wrong + --it only seems to be a visual thing though + mp.osd_message(("[sponsorblock] skipping forward %ds"):format(math.floor(v-mp.get_property("time-pos")))) + --need to do the +0.01 otherwise mpv will start spamming skip sometimes + --example: https://www.youtube.com/watch?v=4ypMJzeNooo + mp.set_property("time-pos",v+0.01) + return + end + end + end + return +end + +function file_loaded() + local video_path = mp.get_property("path", "") + local video_referer = string.match(mp.get_property("http-header-fields", ""), "Referer:([^,]+)") or "" + + local urls = { + "ytdl://youtu%.be/([%w-_]+).*", + "ytdl://w?w?w?%.?youtube%.com/v/([%w-_]+).*", + "https?://youtu%.be/([%w-_]+).*", + "https?://w?w?w?%.?youtube%.com/v/([%w-_]+).*", + "/watch.*[?&]v=([%w-_]+).*", + "/embed/([%w-_]+).*", + "^ytdl://([%w-_]+)$", + "-([%w-_]+)%." + } + youtube_id = nil + local purl = mp.get_property("metadata/by-key/PURL", "") + for i,url in ipairs(urls) do + youtube_id = youtube_id or string.match(video_path, url) or string.match(video_referer, url) or string.match(purl, url) + end + + if not youtube_id or string.len(youtube_id) < 11 then return end + youtube_id = string.sub(youtube_id, 1, 11) + + local url = "" + if options.hash == "true" then + local sha = mp.command_native{ + name = "subprocess", + capture_stdout = true, + args = {"sha256sum"}, + stdin_data = youtube_id + } + url = ("%s/%s?categories=[%s]"):format(options.server, string.sub(sha.stdout, 0, 4), options.categories) + else + url = ("%s?videoID=%s&categories=[%s]"):format(options.server, youtube_id, options.categories) + end + + ranges = getranges(url) + if ranges ~= nil then + ON = true + mp.add_key_binding("b","sponsorblock",toggle) + mp.observe_property("time-pos", "native", skip_ads) + end + return +end + +function end_file() + if not ON then return end + mp.unobserve_property(skip_ads) + ranges = nil + ON = false +end + +function toggle() + if ON then + mp.unobserve_property(skip_ads) + mp.osd_message("[sponsorblock] off") + ON = false + return + end + mp.observe_property("time-pos", "native", skip_ads) + mp.osd_message("[sponsorblock] on") + ON = true + return +end + +mp.register_event("file-loaded", file_loaded) +mp.register_event("end-file", end_file) \ No newline at end of file -- cgit v1.2.3 From e3ac37b99035567aedbb6d44a1151049a572f9ee Mon Sep 17 00:00:00 2001 From: marcellus Date: Wed, 10 May 2023 20:34:08 +0200 Subject: fix: minor changes --- .gitignore | 1 + dwmblocks/config | 2 +- htop/htoprc | 8 ++--- mpv/mpv.conf | 1 + scripts/dmenusearch | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++ sxhkd/sxhkdrc | 4 +-- zsh/.zshenv | 2 ++ zsh/.zshrc | 1 + 8 files changed, 112 insertions(+), 7 deletions(-) create mode 100644 mpv/mpv.conf create mode 100755 scripts/dmenusearch (limited to 'mpv') diff --git a/.gitignore b/.gitignore index 6b195dd..436061f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ JetBrains/ discord/ github-copilot/ gtk-3.0/ +gtk-2.0/ procps/ dconf/ Tracktion/ diff --git a/dwmblocks/config b/dwmblocks/config index 613e2de..ad869c2 100644 --- a/dwmblocks/config +++ b/dwmblocks/config @@ -1,6 +1,6 @@ /*Name State Update Signal + 34*/ music = true // 35 -cputemp = false // 36 +cputemp = true // 36 fanspeed = false // 37 memory = false // 38 battery = true // 39 diff --git a/htop/htoprc b/htop/htoprc index d23d23f..21bd0a1 100644 --- a/htop/htoprc +++ b/htop/htoprc @@ -40,18 +40,18 @@ column_meters_1=Tasks LoadAverage Uptime column_meter_modes_1=2 2 2 tree_view=1 sort_key=46 -tree_sort_key=49 +tree_sort_key=1 sort_direction=-1 -tree_sort_direction=-1 +tree_sort_direction=1 tree_view_always_by_pid=0 all_branches_collapsed=0 screen:Main=PID USER PRIORITY NICE M_VIRT M_RESIDENT M_SHARE STATE PERCENT_CPU PERCENT_MEM TIME Command .sort_key=PERCENT_CPU -.tree_sort_key=TIME +.tree_sort_key=Command .tree_view=1 .tree_view_always_by_pid=0 .sort_direction=-1 -.tree_sort_direction=-1 +.tree_sort_direction=1 .all_branches_collapsed=0 screen:I/O=PID USER IO_PRIORITY IO_RATE IO_READ_RATE IO_WRITE_RATE PERCENT_SWAP_DELAY PERCENT_IO_DELAY Command .sort_key=IO_RATE diff --git a/mpv/mpv.conf b/mpv/mpv.conf new file mode 100644 index 0000000..f7d945c --- /dev/null +++ b/mpv/mpv.conf @@ -0,0 +1 @@ +stop-screensaver = "no" \ No newline at end of file diff --git a/scripts/dmenusearch b/scripts/dmenusearch new file mode 100755 index 0000000..b1ed9d6 --- /dev/null +++ b/scripts/dmenusearch @@ -0,0 +1,100 @@ +#!/bin/sh +# search web, arch wiki, aur, youtube man pages or emoji with dmenu +# websearch dependencies : shuf, curl, /tmp needs to be temporary +# wiki dependency: arch-wiki-docs +# youtube dependency: ytfzf +# man dependencies: man-db, zathura +# emoji dependency: xclip + +set -e + +web() { + NETWORK=clearnet # clearnet, tor or i2p + if [ ! -f "/tmp/instances" ]; then + curl -s "https://librex.ratakor.com/instances.json" > /tmp/instances.json || + (notify-send "No internet connection"; exit 1) + + strip() { + tmp="${1##" \"$NETWORK\": \""}" + printf '%s\n' "${tmp%%"\","}" + } + + while IFS= read -r line || [ -n "$line" ]; do + case $line in + *"$NETWORK"*null,) + continue ;; + *"$NETWORK"*) + strip "$line" >> /tmp/instances ;; + esac + done < /tmp/instances.json + fi + + instance="$(shuf -n 1 /tmp/instances)" + query="${instance}search.php?q=${1:-$(printf "" | dmenu -p "Search:" -l 0)}&t=0" +} + +wiki() { + WIKIDIR="/usr/share/doc/arch-wiki/html/en" + + strip() { + tmp="${1##"$WIKIDIR/"}" + printf '\n%s' "${tmp%%".html"}" + } + + for file in "$WIKIDIR"/*.html; do + [ -f "$file" ] || continue + wikidocs="$wikidocs$(strip "$file")" + done + + wikidocs="${wikidocs#* +}" # remove a trailing newline + + query="$WIKIDIR/$(printf '%s\n' "$wikidocs" | sed -e 's/_/ /g' | sort |\ + dmenu -i -l 10 -p 'Search Wiki: ').html" + query="$(printf '%s\n' "$query" | sed 's/ /_/g')" # separate otherwise set -e fails +} + +aur() { + AURSITE="https://aur.archlinux.org/packages?O=0&K=" + query="$AURSITE$(printf "" | dmenu -p "AUR:" -l 0)" +} + +manpdf() { + INPUT=${1:-$(/usr/bin/man -k . | dmenu -i -l 20 | awk '{print $1}')} + [ -n "$INPUT" ] && /usr/bin/man -Tpdf "$INPUT" | zathura - +} + +emoji() { + CHOSEN=$(cut -d ';' -f1 "$XDG_DATA_HOME/emoji" | dmenu -i -l 30 | sed "s/ .*//") + + [ -z "$CHOSEN" ] && return 1 + + printf '%s' "$CHOSEN" | xclip -selection clipboard + # notify-send "'$CHOSEN' copied to clipboard." +} + +main() { + case ${1:-$(printf 'web\naur\nyoutube\nman\nemoji' | dmenu -i)} in + web) + web "$2" ;; + #wiki) + # wiki ;; + aur) + aur ;; + youtube) + ytfzf -D + return ;; + man) + manpdf "$2" + return ;; + emoji) + emoji + return ;; + *) + return 1 ;; + esac + + "$BROWSER" "$query" 2> /dev/null +} + +main "$@" \ No newline at end of file diff --git a/sxhkd/sxhkdrc b/sxhkd/sxhkdrc index 199ad3c..97e3410 100644 --- a/sxhkd/sxhkdrc +++ b/sxhkd/sxhkdrc @@ -15,8 +15,8 @@ XF86AudioLowerVolume pamixer -d 5; kill -44 $(pidof dwmblocks) XF86AudioMute pamixer -t; kill -{F7,super + n,super + shift + n} - $TERMINAL -e {dmenurecord,lfub "$XDG_DATA_HOME/notes",newsboat} +{super + n,super + shift + n} + $TERMINAL -e {lfub "$XDG_DATA_HOME/notes",newsboat} super + m music super + shift + m diff --git a/zsh/.zshenv b/zsh/.zshenv index c168554..d0d02ef 100644 --- a/zsh/.zshenv +++ b/zsh/.zshenv @@ -1,5 +1,7 @@ export PATH="$HOME/.config/scripts:$PATH" export TERMINAL="st" export EDITOR="emacs" +export BROWSER="librewolf" export XDG_CONFIG_HOME="$HOME/.config" +export XDG_DATA_HOME="$HOME/data" diff --git a/zsh/.zshrc b/zsh/.zshrc index f8c830d..efbfb96 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -22,6 +22,7 @@ alias ascii="ascii -d" alias cf="$HOME/.config/" alias cspt="$HOME/.config/scripts" alias cz="$HOME/.config/zsh" +alias gs="git status" autoload -U compinit zstyle ':completion:*' menu select -- cgit v1.2.3