diff --git a/git/.config/sh/alias.d/git.sh b/git/.config/sh/alias.d/git.sh index 94df149..8062e3d 100644 --- a/git/.config/sh/alias.d/git.sh +++ b/git/.config/sh/alias.d/git.sh @@ -13,8 +13,6 @@ alias g='git' alias ga='git add' alias gaa='git add --all' alias gai='git add -i' -alias gb='git branch' -alias gbd='git branch -d' alias gc='git commit -v' alias gc!='git commit -v --amend' @@ -96,4 +94,22 @@ else alias gsta='git stash save' fi +if exist git-bug; then + gb() { + if [ "$#" -eq 1 ]; then + git bug show "$1" + else + git bug ls "$@" + fi + } + alias gbt='git bug termui' + + alias gba='git bug add' + alias gbm='git bug comment add' + alias gbc='git bug status close' + + alias gbp='git bug push' + alias gbl='git bug pull' +fi + unset -v git_version diff --git a/nvim/.config/nvim/lua/plugins/prose.lua b/nvim/.config/nvim/lua/plugins/prose.lua index 4f3e4fb..4a0334d 100644 --- a/nvim/.config/nvim/lua/plugins/prose.lua +++ b/nvim/.config/nvim/lua/plugins/prose.lua @@ -103,6 +103,9 @@ local prose_plugs = { -- simple static markdown linking and link following using zettel IDs { "marty-oehme/zettelkasten.nvim", + dependencies = { + "mickael-menu/zk-nvim", -- for the CD when opening index + }, ft = writing_ft, keys = { { @@ -122,6 +125,7 @@ local prose_plugs = { { "ni", function() + require("zk.commands").get("ZkCd")() require("zettelkasten").index_open() end, desc = "index page", diff --git a/nvim/.config/sh/alias.d/neovim.sh b/nvim/.config/sh/alias.d/neovim.sh new file mode 100644 index 0000000..da610fd --- /dev/null +++ b/nvim/.config/sh/alias.d/neovim.sh @@ -0,0 +1,9 @@ +# v shorthand for neovim +if exist nvim; then + alias v="nvim" + alias vim="nvim" + + # open notes with my vim zettelkasten plugin + # TODO better implementation conditional on zk & zettelkasten existing + alias vn='nvim +"lua require \"zk.commands\".get(\"ZkCd\")()" +"lua require \"zettelkasten\".index_open()"' +fi diff --git a/office/.local/share/task/hooks/on-exit.git-sync b/office/.local/share/task/hooks/on-exit.git-sync new file mode 100755 index 0000000..9de25c4 --- /dev/null +++ b/office/.local/share/task/hooks/on-exit.git-sync @@ -0,0 +1,39 @@ +#!/bin/sh +# Automatically git commits, pushes and pulls if doable in the taskwarrior data directory +# +# Much of this taken from: https://github.com/mrschyte/taskwarrior-hooks/ +# with much gratitude + +if [ "${DISABLE_HOOKS}" = "true" ] || ! command -v git >/dev/null 2>&1; then + exit 0; +fi + +if [ "$1" != "api:2" ]; then + printf "Taskwarrior uses different data API version than git plugin. Aborting!" 1>&2 + exit 1 +fi + +data_dir="$(echo "$5" | cut -f2 -d:)" +command_run="$(echo "$3" | cut -f2 -d:)" + +# after any command, if there's changes add and commit +if ! git -C "$data_dir" diff --exit-code >/dev/null 2>&1; then + # need to run to fully update tasks that just got done + DISABLE_HOOKS=true env task next >/dev/null 2>&1 + + header="auto: ${2##* }" + msg="full command: $2" + git -C "$data_dir" commit -a -m "$header" -m "$msg" --no-gpg-sign >/dev/null 2>&1 +fi + +if [ "$command_run" = "synchronize" ]; then + DISABLE_HOOKS=true env task sync + + git -C "$data_dir" pull >/dev/null 2>&1 + pull_ret="$?" + git -C "$data_dir" push >/dev/null 2>&1 + push_ret="$?" + if [ "$pull_ret" -eq 0 ] && [ "$push_ret" -eq 0 ]; then + echo Git upstream synchronized. + fi +fi diff --git a/qutebrowser/config/redirects.py b/qutebrowser/config/redirects.py index c4f6868..218db30 100644 --- a/qutebrowser/config/redirects.py +++ b/qutebrowser/config/redirects.py @@ -1,6 +1,8 @@ import random -from urllib import parse import re +from typing import Any, Callable +from urllib import parse + from qutebrowser.api import interceptor from qutebrowser.extensions.interceptors import QUrl, RedirectException from qutebrowser.utils import message @@ -30,157 +32,81 @@ def fixScribePath(url: QUrl): redirects = { "youtube": { "source": ["youtube.com"], - "target": [ - "invidious.no-logs.com", - "inv.citw.lgbt", - "invidious.privacydev.net", - "inv.tux.pizza", - "invidious.einfachzocken.eu", - "invidious.perennialte.ch", - "invidious.fdn.fr", - "invidious.nerdvpn.de", - "inv.zzls.xyz", - "invidious.private.coffee", - "invidious.projectsegfau.lt", - "invidious.lunar.icu", - "yewtu.be", - "iv.melmac.space", - "iv.datura.network", - "piped.kavin.rocks", - ], + "farside": ["invidious"], + }, + "stackoverflow": { + "source": ["stackoverflow.com"], + "farside": ["anonymousoverflow"], }, "lbry": { "source": ["odysee.com"], - "target": [ - "lbry.bcow.xyz", - "odysee.076.ne.jp", - "librarian.pussthecat.org", - "lbry.mutahar.rocks", - "lbry.vern.cc", - ], + "farside": ["librarian"], }, "reddit": { "source": ["reddit.com"], - "target": [ - "teddit.ggc-project.de", - "teddit.kavin.rocks", - "teddit.zaggy.nl", - "teddit.namazso.eu", - "teddit.nautolan.racing", - "teddit.tinfoil-hat.net", - "teddit.domain.glass", - "libreddit.kavin.rocks", - "safereddit.com", - "reddit.invak.id", - "reddit.simo.sh", - "libreddit.strongthany.cc", - "libreddit.domain.glass", - "libreddit.pussthecat.org", - "libreddit.kylrth.com", - "libreddit.privacydev.net", - "l.opnxng.com", - "libreddit.oxymagnesium.com", - "reddit.utsav2.dev", - "libreddit.freedit.eu", - "lr.artemislena.eu", - "snoo.habedieeh.re", - ], + "farside": ["redlib"], + }, + "instagram": { + "source": ["instagram.com"], + "farside": ["proxigram"], }, "twitter": { "source": ["twitter.com"], - "target": [ - "nitter.net", - "nitter.42l.fr", - "nitter.fdn.fr", - "nitter.1d4.us", - "nitter.kavin.rocks", - "nitter.unixfox.eu", - "nitter.namazso.eu", - "nitter.moomoo.me", - "bird.trom.tf", - "nitter.it", - "twitter.censors.us", - "nitter.grimneko.de", - "twitter.076.ne.jp", - "n.l5.ca", - "unofficialbird.com", - "nitter.ungovernable.men", - ], + "farside": ["nitter"], }, "imdb": { "source": ["imdb.com"], - "target": [ - "libremdb.iket.me", - "libremdb.pussthecat.org", - "ld.vern.cc", - "binge.whatever.social", - "libremdb.lunar.icu", - ], + "farside": ["libremdb"], }, "translate": { "source": ["translate.google.com"], - "target": [ - "lingva.ml", - "translate.igna.wtf", - "translate.plausibility.cloud", - "translate.projectsegfau.lt", - "translate.dr460nf1r3.org", - "lingva.garudalinux.org", - "translate.jae.fi", - ], + "farside": ["lingva"], }, "tiktok": { "source": ["tiktok.com"], - "target": [ - "proxitok.pabloferreiro.es", - "proxitok.pussthecat.org", - "tok.habedieeh.re", - "proxitok.privacydev.net", - "proxitok.odyssey346.dev", - "tok.artemislena.eu", - "tok.adminforge.de", - "proxitok.manasiwibi.com", - "tik.hostux.net", - "tt.vern.cc", - "proxitok.mha.fi", - "proxitok.pufe.org", - "proxitok.marcopisco.com", - "cringe.whatever.social", - "proxitok.lunar.icu", - ], + "farside": ["proxitok"], }, "imgur": { "source": ["imgur.com"], - "target": [ - "imgur.artemislena.eu", - "ri.zzls.xyz", - "rimgo.bus-hit.me", - "rimgo.fascinated.cc", - "rimgo.hostux.net", - "rimgo.kling.gg", - "rimgo.lunar.icu", - "rimgo.marcopisco.com", - "rimgo.privacytools.io", - "rimgo.projectsegfau.lt", - "rimgo.pussthecat.org", - "rimgo.totaldarkness.net", - "rimgo.whateveritworks.org", - ], + "farside": ["rimgo"], }, "medium": { "source": ["medium.com"], - "target": [ - "scribe.rip", - "scribe.citizen4.eu", - "scribe.bus-hit.me", - "sc.vern.cc", - ], - "postprocess": fixScribePath, + "farside": ["scribe"], + # "postprocess": fixScribePath + }, + "fandom": { + "source": ["fandom.com"], + "farside": ["breezewiki"], + }, + "quora": { + "source": ["quora.com"], + "farside": ["quetre"], + # "postprocess": lambda url: message.info(f"CALLING QUORA WITH {url}") }, "google": { "source": ["google.com"], "target": [ + "search.albony.xyz", + "search.garudalinux.org", + "search.dr460nf1r3.org", + "s.tokhmi.xyz", + "search.sethforprivacy.com", "whoogle.dcs0.hu", + "gowogle.voring.me", + "whoogle.privacydev.net", + "wg.vern.cc", + "whoogle.hxvy0.gq", + "whoogle.hostux.net", + "whoogle.lunar.icu", + "wgl.frail.duckdns.org", + "whoogle.no-logs.com", + "whoogle.ftw.lol", + "whoogle-search--replitcomreside.repl.co", + "search.notrustverify.ch", + "whoogle.datura.network", + "whoogle.yepserver.xyz", + "search.nezumi.party", ], }, } @@ -199,18 +125,42 @@ def rewrite(request: interceptor.Request) -> None: url = request.request_url if service := _should_be_redirected(url.host()): - # TODO integrate pinging and always surf to fastest? - target = service["target"][random.randint(0, len(service["target"]) - 1)] - if target is not None and url.setHost(target) is not False: - if "postprocess" in service: - url = service["postprocess"](url) - try: - request.redirect(url) - except RedirectException as e: - message.error(str(e)) + if "farside" in service: + url = _farside_redirect(url, _pick_random(service["farside"])) + else: + srv = _pick_random(service["target"]) + url = _target_redirect(url, srv) + try: + request.redirect(url) + except RedirectException as e: + message.error(str(e)) + + if "postprocess" in service and isinstance(service["postprocess"], Callable): + url = service["postprocess"](url) -def _should_be_redirected(host: str, redirects: dict = redirects) -> dict | None: +def _farside_redirect(url: QUrl, service: str) -> QUrl: + try: + url.setHost("farside.link") + url.setPath(f"/{service}{url.path()}") + except RedirectException as e: + message.error(str(e)) + return url + + +def _target_redirect(url: QUrl, target: str) -> QUrl: + if target is not None and url.setHost(target) is not False: + return url + return url + + +def _pick_random(choices: list) -> Any: + return choices[random.randint(0, len(choices) - 1)] + + +def _should_be_redirected( + host: str, redirects: dict = redirects +) -> dict[str, list] | None: for service in redirects.values(): for source in service["source"]: if re.search(source, host): diff --git a/sh/.config/sh/alias b/sh/.config/sh/alias index 5b628a5..4af2790 100644 --- a/sh/.config/sh/alias +++ b/sh/.config/sh/alias @@ -7,20 +7,14 @@ exist() { type "$1" >/dev/null 2>&1; } # Avoid aliases which I did not create -- unalias EVERYTHING unalias -a -# v shorthand for neovim -if exist nvim; then - alias v="nvim" - alias vim="nvim" - alias vs="nvim -c 'ScratchPad'" # open an empty 'scratchpad' which simply disappears after use - alias vw="nvim -c \"lua require 'zettelkasten'.index_open()\"" # open to personal wiki -elif exist vim; then - alias v="vim" -else - alias v="vi" - alias vim="vi" +if alias v >/dev/null 2>&1; then + if exist vim; then + alias v="vim" + else + alias v="vi" + alias vim="vi" + fi fi -# open notes with my vim zettelkasten plugin -alias vn='v +"lua require \"zettelkasten\".index_open()"' # exit shell mimicks vim alias :q="exit"