Compare commits

...

4 commits

Author SHA1 Message Date
22b70a0639
nvim: Enter notes dir when calling zettel index
When switching the current buffer to the Zettelkasten index page
(`<leader>ni`), we now also switch the working directory to the
corresponding notes directory.
2024-02-05 15:07:22 +01:00
20b9d432ac
qutebrowser: Use farside for dynamic redirects
The redirector can now be fed with either a list of targets to pick from
(as before) or a "farside" entry which points to a farside service
redirect or multiple.

The dict entry then looks like:

```python
"quora": {
    "source": ["quora.com"],
    "farside": ["quetre"],
}
```

It has the source service url as usual, but then instead of a "target"
entry contains a "farside" entry.

A redirect dict entry can take both "target" and "farside" entries, but
will then always give precedence to farside choices.

This should go a long way in helping keep OSS frontends up to date. It
now mostly depends on farside entries in turn being updated.
One potential concern is the new centralization in relying on farside as
the redirect authority.
2024-02-05 12:16:09 +01:00
a91f553f58
task: Add git-sync script hook
Synchronizes a git repository for the taskwarrior data directory,
automatically committing any changes after each command; and pushing and
pulling on syncing taskwarrior.
2024-02-04 21:26:13 +01:00
b0c5176f1e
git: Add git-bug quick access aliases 2024-02-04 21:25:36 +01:00
6 changed files with 160 additions and 148 deletions

View file

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

View file

@ -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 = {
{
"<leader>ni",
function()
require("zk.commands").get("ZkCd")()
require("zettelkasten").index_open()
end,
desc = "index page",

View file

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

View file

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

View file

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

View file

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