Compare commits

6 Commits

Author SHA1 Message Date
39ebeccf9f readme edits 2022-11-08 01:16:23 -05:00
d3ca906f8f rewrite all in one commit lol 2022-11-08 01:05:10 -05:00
439ef97f29 Merge pull request 'Updating README' (#10) from readme into main
Reviewed-on: #10
2022-09-22 02:05:15 +00:00
a10f4a3ceb added more readme info 2022-09-21 22:03:02 -04:00
e11e73d8a6 updated README.md 2022-09-07 22:06:14 -04:00
ffcf3ad4b0 Merge pull request 'Add redirect handling' (#9) from redirects into main
Reviewed-on: #9
2022-09-06 01:36:39 +00:00
7 changed files with 158 additions and 34 deletions

View File

@@ -1,9 +1,38 @@
# xdg-sanity
This script is built to replace your default web browser in your desktop/XDG
settings. It intercepts http/s URIs sent to the default browser by XDG settings
and sends it to the appropriate application. For example, it will send
image/jpeg MIME type files to your image viewer.
The `xdg-sanity` script is built to replace your default web browser in your
desktop/XDG settings. It intercepts http/s URIs sent to the default browser by
`xdg-open` and sends it to the appropriate application. For example, it will
send `image/jpeg` MIME type files to your image viewer.
Add your default web browser to `/etc/xdg-sanity.conf` so the script can forward
links to it.
## Installation
### Arch Linux
I maintain a package [on the
AUR](https://aur.archlinux.org/packages/xdg-sanity).
### From Source
First, make sure you have `curl(1)`, `xdg-utils(1)` (or an alternative like
[handlr](https://github.com/chmln/handlr), and
[tomcat](https://git.tebibyte.media/emma/tomcat) installed. Then, clone this
repository and move the `xdg-sanity` binary wherever your operating system
stores locally-installed binaries. This is usually `/usr/local/bin` or
`$HOME/.local/bin` for your user. Make sure the installation location is in your
`$PATH`.
Create an `xdg-sanity.desktop` file either manually or with `gendesk(1)`,
placing it, also, where your OS stores locally-installed `.desktop` files,
usually `/usr/local/applications`. Set your default web browser to that
`.desktop` file with `xdg-settings(1)` or an equivalent.
Add your default web browser to `$XDG_CONFIG_HOME/xdg-sanity.toml` so the
script can forward links to it.
### Usage
`xdg-sanity [RESOURCE]`
Open links from applications outside your web browser as normal. Alternatively,
you can call `xdg-sanity` directly with the only argument accepted being a URI.

View File

@@ -0,0 +1,7 @@
# xdg-sanity mime extension
[replace] # replaces these urls
urls = [ "youtube.com", "youtu.be" ]
[with] # replaces the mime type of the above
mime = "video/vnd.youtube.yt"

116
xdg-sanity Executable file
View File

@@ -0,0 +1,116 @@
#!/bin/sh
set -e
argv0="$0"
# grabs configuration files
CONFIG="$XDG_CONFIG_HOME"/xdg-sanity.toml
if ! test -e "$CONFIG"; then
touch "$CONFIG"
CONFIG=/etc/xdg-sanity.toml
if ! test -e "$CONFIG"; then
exit 66 # sysexits(3) EX_NOINPUT
fi
fi
# check if usage is valid
if ! test -n "$1"; then
printf "Usage: %s [resource...]\n" "$argv0" 1>&2
exit 64 # sysexits(3) EX_USAGE
fi
# check if we have curl(1)
if ! command -v curl >/dev/null 2>&1; then
printf "%s: Missing dependency: curl(1)\n" "$argv0" 1>&2
exit 71 # sysexits(3) EX_OSERR
fi
# check if we have tomcat(1)
if ! command -v tomcat >/dev/null 2>&1; then
printf "%s: Missing dependency: stoml(1)\n" "$argv0" 1>&2
exit 71 # sysexits(3) EX_OSERR
fi
# set the XDG_COMMAND
test -n "$XDG_COMMAND" || XDG_COMMAND="$(tomcat tools.xdg $CONFIG)"
! command -v handlr >/dev/null 2>&1 && ! command -v xdg-open >/dev/null 2>&1 \
&& XDG_COMMAND=false \
|| true
# check if we have a BROWSER
test -n "$BROWSER" || BROWSER="$(tomcat tools.browser $CONFIG)"
if ! test -n "$BROWSER"; then
printf "\
%s: \$BROWSER not filled.
Please place the path to your preferred browser's executable in
$XDG_CONFIG_HOME/xdg-sanity.conf or /etc/xdg-sanity.conf
" "$argv0" 1>&2
exit 71 # sysexits(3) EX_OSERR
fi
while test -n "$1"; do
URL="$1"
# use curl(1) to write out the request header's content_type,
# strip everything after the first semicolon,
# chop off any weird whitespace remnants
MIME="$(curl -Ls -o /dev/null -w '%{content_type}' "$1" | sed 's/\;.*//' |\
xargs echo)"
# get the pattern for the extensions to MATCH
MATCH=$(printf "%s\n" "$URL" | sed -ne 's/^h.\+\/\///p' |\
sed -e 's/\/.*\+//g')
# run through MIME extensions
for file in \
"$XDG_DATA_HOME"/xdg-sanity/*-mime.toml \
/usr/share/xdg-sanity/*-mime.toml \
/dev/null
do
i=$(tomcat replace.urls "$file" | sed 's/ /\n/g' | xargs wc -l)
while ! [ "$i" = 0 ]; do
if [ "$MATCH" = "$(tomcat replace.urls[$i] $file)" ]; then
MIME=$(tomcat with.mime "$file")
fi
i=$(dc -e "$i 1 - p")
done
done
# and the replace extensions
for file in \
"$XDG_DATA_HOME"/xdg-sanity/*-replace.toml \
/usr/share/xdg-sanity/*-replace.toml \
/dev/null
do
i=$(tomcat replace.urls "$file" | sed 's/ /\n/g' | xargs wc -l)
while ! [ "$i" = 0 ]; do
if [ "$MATCH" = "$(tomcat replace.urls[$i] $file)" ]; then
URL=$(tomcat with.url "$file")
fi
i=$(dc -e "$i 1 - p")
done
done
# these commands may fail; this is intentional
if [ "$MIME" = "text/html" ]; then
"$BROWSER" "$URL"
else
case "$(command -v $XDG_COMMAND)" in
*/handlr )
"XDG_COMMAND" "$MIME" -- "$URL"
;;
*/xdg-open )
"$(xdg-mime query default $MIME)" "$URL"
;;
false )
exit 69 # sysexits(3) EX_UNAVAILABLE
;;
esac
fi
shift
done
exit 0

View File

@@ -1,12 +0,0 @@
#!/bin/sh
# EXT-TYPE=mime
TEST=$(echo $1 | sed -ne 's/^h.\+\/\///p' | sed -e 's/\/.*\+//g')
if [ "$TEST" = "teddit.net" ]
then
echo "text/html"
else
echo $1
fi

View File

@@ -1,3 +0,0 @@
# EXT-TYPE=replace
replace youtube.com or youtu.be with piped.mint.lgbt

View File

@@ -1,12 +0,0 @@
#!/bin/sh
# EXT-TYPE=replace
TEST=$(echo $1 | sed -ne 's/^h.\+\/\///p' | sed -e 's/\/.*\+//g')
if [ "$TEST" = "youtube.com" ]
then
echo $1 | sed -ne 's/youtube.com/piped.mint.lgbt/p'
else
echo $1
fi

View File

@@ -1 +0,0 @@
browser =