dots

Personal dotfiles
git clone git://git.gormless.xyz/dots.git
Log | Files | Refs

commit 989f76b1275ad3bd780896cbed2118a7111ab2d9
Author: Mitch Taylor <mitch@logos.deus.vult>
Date:   Thu,  2 Sep 2021 00:17:10 -0300

Initial commit

Diffstat:
Abin/Slide | 25+++++++++++++++++++++++++
Abin/about | 8++++++++
Abin/arc | 42++++++++++++++++++++++++++++++++++++++++++
Abin/bar | 82+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abin/cockload | 14++++++++++++++
Abin/colors | 6++++++
Abin/compiler | 57+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abin/corner | 29+++++++++++++++++++++++++++++
Abin/cronbat | 5+++++
Abin/deeserch | 8++++++++
Abin/diceware | 1338+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abin/dict | 3+++
Abin/dm | 37+++++++++++++++++++++++++++++++++++++
Abin/dmenuwireless | 10++++++++++
Abin/dock | 13+++++++++++++
Abin/drawterm | 17+++++++++++++++++
Abin/extract | 16++++++++++++++++
Abin/focus | 47+++++++++++++++++++++++++++++++++++++++++++++++
Abin/fs | 37+++++++++++++++++++++++++++++++++++++
Abin/gruup | 224+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abin/health | 36++++++++++++++++++++++++++++++++++++
Abin/kjv | 0
Abin/mailup | 9+++++++++
Abin/mute | 26++++++++++++++++++++++++++
Abin/newsup | 15+++++++++++++++
Abin/op | 94+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abin/poast | 4++++
Abin/rec | 147+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abin/rename | 100+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abin/rssg | 189+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abin/screenshot | 9+++++++++
Abin/shapezio | 3+++
Abin/showmus | 8++++++++
Abin/ssg6 | 266+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abin/stmux | 9+++++++++
Abin/stopx | 5+++++
Abin/swallow | 34++++++++++++++++++++++++++++++++++
Abin/themeswitch | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
Abin/tile | 39+++++++++++++++++++++++++++++++++++++++
Abin/todmenu | 13+++++++++++++
Abin/todo | 33+++++++++++++++++++++++++++++++++
Abin/togglebar | 9+++++++++
Abin/transadd | 5+++++
Abin/ufetch | 89+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abin/undock | 10++++++++++
Abin/viewshot | 7+++++++
Abin/wal | 20++++++++++++++++++++
Abin/watch | 13+++++++++++++
Abin/wireless | 3+++
Abin/xgamemenu | 14++++++++++++++
Abin/xgruupmenu | 10++++++++++
Abin/xnotifmenu | 42++++++++++++++++++++++++++++++++++++++++++
Abin/xrootmenu | 21+++++++++++++++++++++
Abin/yawee | 20++++++++++++++++++++
Abin/zoom | 12++++++++++++
Aetc/.profile | 42++++++++++++++++++++++++++++++++++++++++++
Aetc/catgirl/poast | 4++++
Aetc/cmus/autosave | 202+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aetc/cmus/cmusfm.conf | 18++++++++++++++++++
Aetc/emacs/config.org | 821+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aetc/emacs/emacs-banner.png | 0
Aetc/emacs/init.el | 54++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aetc/ex/nexrc | 80+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aetc/firefox/chrome/LICENSE | 21+++++++++++++++++++++
Aetc/firefox/chrome/add.svg | 2++
Aetc/firefox/chrome/demo.gif | 0
Aetc/firefox/chrome/left-arrow.svg | 2++
Aetc/firefox/chrome/right-arrow.svg | 2++
Aetc/firefox/chrome/userChrome.css | 355+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aetc/firefox/chrome/userChrome.dark | 355+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aetc/firefox/chrome/userChrome.light | 355+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aetc/firefox/chrome/userContent.css | 24++++++++++++++++++++++++
Aetc/lynx/lynxrc | 449+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aetc/mimeapps.list | 16++++++++++++++++
Aetc/mpv/input.conf | 5+++++
Aetc/mpv/mpv.conf | 7+++++++
Aetc/newsboat/config | 48++++++++++++++++++++++++++++++++++++++++++++++++
Aetc/newsboat/newsupdate | 1+
Aetc/newsboat/urls | 82+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aetc/openmw/openmw.cfg | 678+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aetc/openmw/settings.cfg | 104+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aetc/shell/profile | 119+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aetc/sxhkd/sxhkdrc | 99+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aetc/tmux/tmux.conf | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aetc/urlview/config | 3+++
Aetc/user-dirs.dirs | 6++++++
Aetc/x11/xinitrc | 33+++++++++++++++++++++++++++++++++
Aetc/x11/xinitrc~ | 34++++++++++++++++++++++++++++++++++
Aetc/x11/xresources | 71+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aetc/xenodm/Xresources | 38++++++++++++++++++++++++++++++++++++++
Aetc/xenodm/Xsetup_0 | 6++++++
Aetc/xenodm/xenodm-config | 21+++++++++++++++++++++
Aetc/zathura/zathurarc | 16++++++++++++++++
Aetc/zathura/zathurarc~ | 55+++++++++++++++++++++++++++++++++++++++++++++++++++++++
Avar/applications/file.desktop | 5+++++
Avar/applications/img.desktop | 4++++
Avar/applications/mail.desktop | 4++++
Avar/applications/pdf.desktop | 5+++++
Avar/applications/text.desktop | 4++++
Avar/applications/torrent.desktop | 4++++
100 files changed, 7703 insertions(+), 0 deletions(-)

diff --git a/bin/Slide b/bin/Slide @@ -0,0 +1,25 @@ +#!/usr/local/plan9/bin/rc +# Slide[-+] - go back and forwards in a slide show +# usage: Slide[-+] +# +# bugs: slides must be named 1, 2, 3... +# to "install" the script copy it to /acme/bin/Slide{,-,+} + +switch($0){ +case *Slide + ls `{pwd} + exit +case *Slide+ + page=`{echo `{basename $%} + 1 | hoc} + if(! test -f $page) exit +case *Slide- + page=`{echo `{basename $%} - 1 | hoc} + if(! test -f $page) exit +case * + echo Error: bogus program name! + exit wrongname +} + +echo 'name '`{pwd}^/$page'' | 9p write acme/$winid/ctl +echo clean | 9p write acme/$winid/ctl +echo get | 9p write acme/$winid/ctl diff --git a/bin/about b/bin/about @@ -0,0 +1,8 @@ +#!/bin/sh + +BROWSER=firefox +BASEURL="https://searx.cedars.xyz/search?q=" + +QUERY=$(echo '+' | dmenu -p 'about: ' | tr ' ' '+') +test -z "$QUERY" && exit 1 +$BROWSER "${BASEURL}${QUERY}" >/dev/null & diff --git a/bin/arc b/bin/arc @@ -0,0 +1,42 @@ +#!/bin/sh -e + +fail() { >&2 echo "$@" exit 1; } +usage() { fail "usage: ${0##*/} <src> <archive>"; } + +test -z "$1" && usage +test -z "$2" && usage + +src=$(readlink -f "$1") +arch="$2" +tree="${arch}.tree.gz" +dgst="${arch}.tree.sha256" + +test -d "$src" || fail "$src: no directory" +test -e "$arch" && fail "$arch: exists" +test -e "$tree" && fail "$tree: exists" +test -e "$dgst" && fail "$dgst: exists" + +# print out $src, its file size and archive's file name +printf '%s %s %s ' "$src" "$(du -sh "$src"|cut -f1)" "$arch" + +# generate the spec file with sha256 hashes for every file +# archive it and generate sha256 hash for the spec itself +mtree -cK sha256digest -p "$src" | gzip > "$tree" +zcat "$tree" | sha256 > "$dgst" + +cd "$src" || fail "$src: no directory" + +# write (-w) gzipped (-z) archive +# in cpio format (-x cpio) +# to the file (-f) +pax -wzx cpio -f "$arch" . + # TODO + # + # to exclude '.*/foo/.*' and '.*bar.*' + # + # -'s,.*/foo/.*,,' \ + # -'s,.*bar.*,,' \ + +# print out the archive file size +du -sh "$arch" | +cut -f1 diff --git a/bin/bar b/bin/bar @@ -0,0 +1,82 @@ +#!/bin/sh + +geom="$(xdpyinfo | awk '/dimensions:/ { print $2 }' | cut -f 1 -d x)x14" + +BG=#3b4252 +FG=#d8dee9 + + +clock() { + printf 'C %s ' "$(date '+%D %I:%M %p')" +} + +sound() { + test "$(sndioctl input.mute)" = "input.mute=1" && mic="Mic" || mic="" + level="$mic $(sndioctl output.level | cut -f 2 -d '=')" + test "$(sndioctl output.mute | cut -c 13)" == 1 && printf 'A %s ' "$mic Mute" || printf 'A %s ' "$level" +} + +battery() +{ + bat=$(apm -l) + stat=$(apm -a) + case $stat in + 1) + test "$bat" = 100 && st="=" || st="+" + ;; + 0) + test "$bat" = 100 && st="=" || st="-" + ;; + esac + printf "ϟ %s " "$st$bat%" +} + +net() { +inter="$(ifconfig | awk '/ieee80211:/ { print $3" " "(" $8 ")" }')" +test "$(ifconfig | awk '/ieee80211:/ { print $8}')" == "psk" && printf '%s ' "N/a" || printf 'N %s ' "$inter" +} + +news() { +newsstatus="$(cat /home/anon/etc/newsboat/newsupdate)" +printf "N %s " "$newsstatus" +} + +playing() { +state="$(cmus-remote -C status | grep status | cut -f 2 -d " ")" +test -z "$state" && np="Nothing" +test "$state" = stopped && np=". $(showmus)" +test "$state" = playing && np="> $(showmus)" +test "$state" = paused && np="| $(showmus)" +printf "M %s " "$np" +} + +todonum() { +todo="$(export TODO=$HOME/usr/notes/todo; todo | wc -l)" +printf "T %s " "$todo" +} + +email() { +unread="$(find "${XDG_DATA_HOME}"/mail/*/[Ii][Nn][Bb][Oo][Xx]/new/* -type f 2>/dev/null | wc -l 2>/dev/null)" +test -z "$(pgrep -f mbsync)" || icon="..." +printf "E %s " "$unread$icon" +} + +weather() { +weather="$(curl -s "wttr.in/Saint John?format=%l:+%C+%t+(%f)")" +printf "W %s " "$weather" +} + +while :; do + BUF="%{T2}%{S1}" + BUF="${BUF}%{r} %{A:cmus-remote -r:}%{A2:cmus-remote -u:}%{A3:cmus-remote -n:}$(playing)%{A}%{A}%{A} | + $(weather) | + %{A:dmenuwireless >/dev/null &:}$(net)%{A} | + %{A:todmenu >/dev/null &:}$(todonum)%{A} | + %{A:stmux 'new' 'var/newsboat' 'newsboat':}%{A3:newsup >/dev/null &:}$(news)%{A}%{A} | + %{A:stmux 'ema' 'var/mail' 'mutt':}%{A3:mbsync \"${1:--a}\" >/dev/null &:}$(email)%{A}%{A} | + $(battery) | + %{A4:sndioctl output.level=+0.031:}%{A5:sndioctl output.level=-0.031:}%{A:sndioctl output.mute=!:}%{A3:sndioctl input.mute=!:}$(sound)%{A}%{A}%{A}%{A} | + $(clock)" + echo $BUF + sleep 1 +done | lemonbar-xft -f "Ttyp0 bold:pixelsize=11.3:antialias=true:autohint=true" -f 'ibm plex serif:pixelsize=13:antialias=true:autohint=true' -dg $geom -B${BG} -F${FG} -a 19 diff --git a/bin/cockload b/bin/cockload @@ -0,0 +1,14 @@ +#!/bin/sh + +[ -z "$1" ] && { echo "Please select a file or URL to upload"; exit; } + +case $1 in + http*|gopher*) + curl -sL "$1" > "/tmp/$(echo "$1" | sed "s/.*\///;s/%20/ /g" | cut -c 1-64)" && curl -i -F files[]=@"/tmp/$(echo "$1" | sed "s/.*\///;s/%20/ /g" | cut -c 1-64)" https://cockfile.com/upload.php > /tmp/cockload + grep url /tmp/cockload | cut -c21- | sed 's/\\//g' | sed 's/..$//' + ;; + *) + curl -i -F files[]=@"$1" https://cockfile.com/upload.php > /tmp/cockload + grep url /tmp/cockload | cut -c21- | sed 's/\\//g' | sed 's/..$//' + ;; +esac diff --git a/bin/colors b/bin/colors @@ -0,0 +1,6 @@ +#!/bin/ksh +set -e +for i in $(jot 16 0 15); do + printf "\\x1b[48;5;%sm%3d\\e[0m " "$i" "$i" + if ((i == 15)) || ((i > 15)) && (((i-15)%12 == 0)); then printf "\\n"; fi +done diff --git a/bin/compiler b/bin/compiler @@ -0,0 +1,57 @@ +#!/bin/sh + +# This script will compile or run another finishing operation on a document. I +# have this script run via vim. +# +# Compiles .tex. groff (.mom, .ms), .rmd, .md, .org. Opens .sent files as sent +# presentations. Runs scripts based on extention or shebang. +# +# Note that .tex files which you wish to compile with XeLaTeX should have the +# string "xelatex" somewhere in a comment/command in the first 5 lines. + +file=$(readlink -f "$1") +dir=${file%/*} +base="${file%.*}" +ext="${file##*.}" + +cd "$dir" || exit 1 + +textype() { \ + command="pdflatex" + ( head -n5 "$file" | grep -qi 'xelatex' ) && command="xelatex" + $command --output-directory="$dir" "$base" && + grep -qi addbibresource "$file" && + biber --input-directory "$dir" "$base" && + $command --output-directory="$dir" "$base" && + $command --output-directory="$dir" "$base" +} + +case "$ext" in + # Try to keep these cases in alphabetical order. + [0-9]) preconv "$file" | refer -PS -e | groff -mandoc -T pdf > "$base".pdf ;; + c) cc "$file" -o "$base" && "$base" ;; + cpp) g++ "$file" -o "$base" && "$base" ;; + cs) mcs "$file" && mono "$base".exe ;; + go) go run "$file" ;; + h) doas make install ;; + java) javac -d classes "$file" && java -cp classes "${1%.*}" ;; + m) octave "$file" ;; + md) if [ -x "$(command -v lowdown)" ]; then + lowdown -d nointem -e super "$file" -Tms | groff -mpdfmark -ms -kept > "$base".pdf + elif [ -x "$(command -v groffdown)" ]; then + groffdown -i "$file" | groff > "$base.pdf" + else + pandoc -t ms --highlight-style=kate -s -o "$base".pdf "$file" + fi ; ;; + mom) preconv "$file" | refer -PS -e | groff -mom -kept -T pdf > "$base".pdf ;; + ms) preconv "$file" | refer -PS -e | groff -me -ms -kept -T pdf > "$base".pdf ;; + org) emacs "$file" --batch -u "$USER" -f org-latex-export-to-pdf ;; + py) python "$file" ;; + [rR]md) Rscript -e "rmarkdown::render('$file', quiet=TRUE)" ;; + rs) cargo build ;; + sass) sassc -a "$file" "$base.css" ;; + scad) openscad -o "$base".stl "$file" ;; + sent) setsid -f sent "$file" 2>/dev/null ;; + tex) textype "$file" ;; + *) head -n1 "$file" | grep "^#!/" | sed "s/^#!//" | xargs -r -I % "$file" ;; +esac diff --git a/bin/corner b/bin/corner @@ -0,0 +1,29 @@ +#!/bin/sh + +CUR=${2:-$(pfw)} +ROOT=$(lswin -r) +SW=$(wattr w $ROOT) +SH=$(wattr h $ROOT) + +BW=$(wattr b $CUR) +W=$(wattr w $CUR) +H=$(wattr h $CUR) + +GAP=${GAP:-4} +BAR=${BAR:-18} + +X=$GAP +Y=$GAP + +case $1 in + tl) Y=$((GAP + BAR)) ;; + tr) X=$((SW - W - GAP - BW*2)) + Y=$((GAP + BAR)) ;; + bl) Y=$((SH - H - GAP - BW*2)) ;; + br) X=$((SW - W - GAP - BW*2)) + Y=$((SH - H - GAP - BW*2)) ;; + md) X=$((SW/2 - W/2 - BW)) + Y=$((SH/2 - H/2 + BAR - BW));; +esac + +wtp $X $Y $W $H $CUR diff --git a/bin/cronbat b/bin/cronbat @@ -0,0 +1,5 @@ +#!/bin/sh + +[ "$(/usr/sbin/apm -a)" = 1 ] && exit +[ "$(/usr/sbin/apm -b)" = 2 ] && +notify-send "Battery critically low. Please connect your charger." diff --git a/bin/deeserch b/bin/deeserch @@ -0,0 +1,8 @@ +#!/bin/sh + +BROWSER=firefox +BASEURL="https://deezer.com/search/" + +QUERY=$(echo '+' | dmenu -p 'about: ') +test -z "$QUERY" && exit 1 +$BROWSER "${BASEURL}${QUERY}" >/dev/null & diff --git a/bin/diceware b/bin/diceware @@ -0,0 +1,1338 @@ +#!/bin/sh +# +# diceware generates random phrases with 10 bits of entropy per +# word. For a passphrase use 8 words or more. +# +# https://www.romanzolotarev.com/bin/diceware +# Copyright 2017 Roman Zolotarev <hi@romanzolotarev.com> +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +# The word list: CC BY 3.0 US 2016 Electronic Frontier Foundation +# https://www.eff.org/deeplinks/2016/07/new-wordlists-random-passphrases +# +set -e + +wordlist=$(cat << EOF +1111 aardvark +1112 abandoned +1113 abbreviate +1114 abdomen +1115 abhorrence +1116 abiding +1121 abnormal +1122 abrasion +1123 absorbing +1124 abundant +1125 abyss +1126 academy +1131 accountant +1132 acetone +1133 achiness +1134 acid +1135 acoustics +1136 acquire +1141 acrobat +1142 actress +1143 acuteness +1144 aerosol +1145 aesthetic +1146 affidavit +1151 afloat +1152 afraid +1153 aftershave +1154 again +1155 agency +1156 aggressor +1161 aghast +1162 agitate +1163 agnostic +1164 agonizing +1165 agreeing +1166 aidless +1211 aimlessly +1212 ajar +1213 alarmclock +1214 albatross +1215 alchemy +1216 alfalfa +1221 algae +1222 aliens +1223 alkaline +1224 almanac +1225 alongside +1226 alphabet +1231 already +1232 also +1233 altitude +1234 aluminum +1235 always +1236 amazingly +1241 ambulance +1242 amendment +1243 amiable +1244 ammunition +1245 amnesty +1246 amoeba +1251 amplifier +1252 amuser +1253 anagram +1254 anchor +1255 android +1256 anesthesia +1261 angelfish +1262 animal +1263 anklet +1264 announcer +1265 anonymous +1266 answer +1311 antelope +1312 anxiety +1313 anyplace +1314 aorta +1315 apartment +1316 apnea +1321 apostrophe +1322 apple +1323 apricot +1324 aquamarine +1325 arachnid +1326 arbitrate +1331 ardently +1332 arena +1333 argument +1334 aristocrat +1335 armchair +1336 aromatic +1341 arrowhead +1342 arsonist +1343 artichoke +1344 asbestos +1345 ascend +1346 aseptic +1351 ashamed +1352 asinine +1353 asleep +1354 asocial +1355 asparagus +1356 astronaut +1361 asymmetric +1362 atlas +1363 atmosphere +1364 atom +1365 atrocious +1366 attic +1411 atypical +1412 auctioneer +1413 auditorium +1414 augmented +1415 auspicious +1416 automobile +1421 auxiliary +1422 avalanche +1423 avenue +1424 aviator +1425 avocado +1426 awareness +1431 awhile +1432 awkward +1433 awning +1434 awoke +1435 axially +1436 azalea +1441 babbling +1442 backpack +1443 badass +1444 bagpipe +1445 bakery +1446 balancing +1451 bamboo +1452 banana +1453 barracuda +1454 basket +1455 bathrobe +1456 bazooka +1461 blade +1462 blender +1463 blimp +1464 blouse +1465 blurred +1466 boatyard +1511 bobcat +1512 body +1513 bogusness +1514 bohemian +1515 boiler +1516 bonnet +1521 boots +1522 borough +1523 bossiness +1524 bottle +1525 bouquet +1526 boxlike +1531 breath +1532 briefcase +1533 broom +1534 brushes +1535 bubblegum +1536 buckle +1541 buddhist +1542 buffalo +1543 bullfrog +1544 bunny +1545 busboy +1546 buzzard +1551 cabin +1552 cactus +1553 cadillac +1554 cafeteria +1555 cage +1556 cahoots +1561 cajoling +1562 cakewalk +1563 calculator +1564 camera +1565 canister +1566 capsule +1611 carrot +1612 cashew +1613 cathedral +1614 caucasian +1615 caviar +1616 ceasefire +1621 cedar +1622 celery +1623 cement +1624 census +1625 ceramics +1626 cesspool +1631 chalkboard +1632 cheesecake +1633 chimney +1634 chlorine +1635 chopsticks +1636 chrome +1641 chute +1642 cilantro +1643 cinnamon +1644 circle +1645 cityscape +1646 civilian +1651 clay +1652 clergyman +1653 clipboard +1654 clock +1655 clubhouse +1656 coathanger +1661 cobweb +1662 coconut +1663 codeword +1664 coexistent +1665 coffeecake +1666 cognitive +2111 cohabitate +2112 collarbone +2113 computer +2114 confetti +2115 copier +2116 cornea +2121 cosmetics +2122 cotton +2123 couch +2124 coverless +2125 coyote +2126 coziness +2131 crawfish +2132 crewmember +2133 crib +2134 croissant +2135 crumble +2136 crystal +2141 cubical +2142 cucumber +2143 cuddly +2144 cufflink +2145 cuisine +2146 culprit +2151 cup +2152 curry +2153 cushion +2154 cuticle +2155 cybernetic +2156 cyclist +2161 cylinder +2162 cymbal +2163 cynicism +2164 cypress +2165 cytoplasm +2166 dachshund +2211 daffodil +2212 dagger +2213 dairy +2214 dalmatian +2215 dandelion +2216 dartboard +2221 dastardly +2222 datebook +2223 daughter +2224 dawn +2225 daytime +2226 dazzler +2231 dealer +2232 debris +2233 decal +2234 dedicate +2235 deepness +2236 defrost +2241 degree +2242 dehydrator +2243 deliverer +2244 democrat +2245 dentist +2246 deodorant +2251 depot +2252 deranged +2253 desktop +2254 detergent +2255 device +2256 dexterity +2261 diamond +2262 dibs +2263 dictionary +2264 diffuser +2265 digit +2266 dilated +2311 dimple +2312 dinnerware +2313 dioxide +2314 diploma +2315 directory +2316 dishcloth +2321 ditto +2322 dividers +2323 dizziness +2324 doctor +2325 dodge +2326 doll +2331 dominoes +2332 donut +2333 doorstep +2334 dorsal +2335 double +2336 downstairs +2341 dozed +2342 drainpipe +2343 dresser +2344 driftwood +2345 droppings +2346 drum +2351 dryer +2352 dubiously +2353 duckling +2354 duffel +2355 dugout +2356 dumpster +2361 duplex +2362 durable +2363 dustpan +2364 dutiful +2365 duvet +2366 dwarfism +2411 dwelling +2412 dwindling +2413 dynamite +2414 dyslexia +2415 eagerness +2416 earlobe +2421 easel +2422 eavesdrop +2423 ebook +2424 eccentric +2425 echoless +2426 eclipse +2431 ecosystem +2432 ecstasy +2433 edged +2434 editor +2435 educator +2436 eelworm +2441 eerie +2442 effects +2443 eggnog +2444 egomaniac +2445 ejection +2446 elastic +2451 elbow +2452 elderly +2453 elephant +2454 elfishly +2455 eliminator +2456 elk +2461 elliptical +2462 elongated +2463 elsewhere +2464 elusive +2465 elves +2466 emancipate +2511 embroidery +2512 emcee +2513 emerald +2514 emission +2515 emoticon +2516 emperor +2521 emulate +2522 enactment +2523 enchilada +2524 endorphin +2525 energy +2526 enforcer +2531 engine +2532 enhance +2533 enigmatic +2534 enjoyably +2535 enlarged +2536 enormous +2541 enquirer +2542 enrollment +2543 ensemble +2544 entryway +2545 enunciate +2546 envoy +2551 enzyme +2552 epidemic +2553 equipment +2554 erasable +2555 ergonomic +2556 erratic +2561 eruption +2562 escalator +2563 eskimo +2564 esophagus +2565 espresso +2566 essay +2611 estrogen +2612 etching +2613 eternal +2614 ethics +2615 etiquette +2616 eucalyptus +2621 eulogy +2622 euphemism +2623 euthanize +2624 evacuation +2625 evergreen +2626 evidence +2631 evolution +2632 exam +2633 excerpt +2634 exerciser +2635 exfoliate +2636 exhale +2641 exist +2642 exorcist +2643 explode +2644 exquisite +2645 exterior +2646 exuberant +2651 fabric +2652 factory +2653 faded +2654 failsafe +2655 falcon +2656 family +2661 fanfare +2662 fasten +2663 faucet +2664 favorite +2665 feasibly +2666 february +3111 federal +3112 feedback +3113 feigned +3114 feline +3115 femur +3116 fence +3121 ferret +3122 festival +3123 fettuccine +3124 feudalist +3125 feverish +3126 fiberglass +3131 fictitious +3132 fiddle +3133 figurine +3134 fillet +3135 finalist +3136 fiscally +3141 fixture +3142 flashlight +3143 fleshiness +3144 flight +3145 florist +3146 flypaper +3151 foamless +3152 focus +3153 foggy +3154 folksong +3155 fondue +3156 footpath +3161 fossil +3162 fountain +3163 fox +3164 fragment +3165 freeway +3166 fridge +3211 frosting +3212 fruit +3213 fryingpan +3214 gadget +3215 gainfully +3216 gallstone +3221 gamekeeper +3222 gangway +3223 garlic +3224 gaslight +3225 gathering +3226 gauntlet +3231 gearbox +3232 gecko +3233 gem +3234 generator +3235 geographer +3236 gerbil +3241 gesture +3242 getaway +3243 geyser +3244 ghoulishly +3245 gibberish +3246 giddiness +3251 giftshop +3252 gigabyte +3253 gimmick +3254 giraffe +3255 giveaway +3256 gizmo +3261 glasses +3262 gleeful +3263 glisten +3264 glove +3265 glucose +3266 glycerin +3311 gnarly +3312 gnomish +3313 goatskin +3314 goggles +3315 goldfish +3316 gong +3321 gooey +3322 gorgeous +3323 gosling +3324 gothic +3325 gourmet +3326 governor +3331 grape +3332 greyhound +3333 grill +3334 groundhog +3335 grumbling +3336 guacamole +3341 guerrilla +3342 guitar +3343 gullible +3344 gumdrop +3345 gurgling +3346 gusto +3351 gutless +3352 gymnast +3353 gynecology +3354 gyration +3355 habitat +3356 hacking +3361 haggard +3362 haiku +3363 halogen +3364 hamburger +3365 handgun +3366 happiness +3411 hardhat +3412 hastily +3413 hatchling +3414 haughty +3415 hazelnut +3416 headband +3421 hedgehog +3422 hefty +3423 heinously +3424 helmet +3425 hemoglobin +3426 henceforth +3431 herbs +3432 hesitation +3433 hexagon +3434 hubcap +3435 huddling +3436 huff +3441 hugeness +3442 hullabaloo +3443 human +3444 hunter +3445 hurricane +3446 hushing +3451 hyacinth +3452 hybrid +3453 hydrant +3454 hygienist +3455 hypnotist +3456 ibuprofen +3461 icepack +3462 icing +3463 iconic +3464 identical +3465 idiocy +3466 idly +3511 igloo +3512 ignition +3513 iguana +3514 illuminate +3515 imaging +3516 imbecile +3521 imitator +3522 immigrant +3523 imprint +3524 iodine +3525 ionosphere +3526 ipad +3531 iphone +3532 iridescent +3533 irksome +3534 iron +3535 irrigation +3536 island +3541 isotope +3542 issueless +3543 italicize +3544 itemizer +3545 itinerary +3546 itunes +3551 ivory +3552 jabbering +3553 jackrabbit +3554 jaguar +3555 jailhouse +3556 jalapeno +3561 jamboree +3562 janitor +3563 jarring +3564 jasmine +3565 jaundice +3566 jawbreaker +3611 jaywalker +3612 jazz +3613 jealous +3614 jeep +3615 jelly +3616 jeopardize +3621 jersey +3622 jetski +3623 jezebel +3624 jiffy +3625 jigsaw +3626 jingling +3631 jobholder +3632 jockstrap +3633 jogging +3634 john +3635 joinable +3636 jokingly +3641 journal +3642 jovial +3643 joystick +3644 jubilant +3645 judiciary +3646 juggle +3651 juice +3652 jujitsu +3653 jukebox +3654 jumpiness +3655 junkyard +3656 juror +3661 justifying +3662 juvenile +3663 kabob +3664 kamikaze +3665 kangaroo +3666 karate +4111 kayak +4112 keepsake +4113 kennel +4114 kerosene +4115 ketchup +4116 khaki +4121 kickstand +4122 kilogram +4123 kimono +4124 kingdom +4125 kiosk +4126 kissing +4131 kite +4132 kleenex +4133 knapsack +4134 kneecap +4135 knickers +4136 koala +4141 krypton +4142 laboratory +4143 ladder +4144 lakefront +4145 lantern +4146 laptop +4151 laryngitis +4152 lasagna +4153 latch +4154 laundry +4155 lavender +4156 laxative +4161 lazybones +4162 lecturer +4163 leftover +4164 leggings +4165 leisure +4166 lemon +4211 length +4212 leopard +4213 leprechaun +4214 lettuce +4215 leukemia +4216 levers +4221 lewdness +4222 liability +4223 library +4224 licorice +4225 lifeboat +4226 lightbulb +4231 likewise +4232 lilac +4233 limousine +4234 lint +4235 lioness +4236 lipstick +4241 liquid +4242 listless +4243 litter +4244 liverwurst +4245 lizard +4246 llama +4251 luau +4252 lubricant +4253 lucidity +4254 ludicrous +4255 luggage +4256 lukewarm +4261 lullaby +4262 lumberjack +4263 lunchbox +4264 luridness +4265 luscious +4266 luxurious +4311 lyrics +4312 macaroni +4313 maestro +4314 magazine +4315 mahogany +4316 maimed +4321 majority +4322 makeover +4323 malformed +4324 mammal +4325 mango +4326 mapmaker +4331 marbles +4332 massager +4333 matchstick +4334 maverick +4335 maximum +4336 mayonnaise +4341 moaning +4342 mobilize +4343 moccasin +4344 modify +4345 moisture +4346 molecule +4351 momentum +4352 monastery +4353 moonshine +4354 mortuary +4355 mosquito +4356 motorcycle +4361 mousetrap +4362 movie +4363 mower +4364 mozzarella +4365 muckiness +4366 mudflow +4411 mugshot +4412 mule +4413 mummy +4414 mundane +4415 muppet +4416 mural +4421 mustard +4422 mutation +4423 myriad +4424 myspace +4425 myth +4426 nail +4431 namesake +4432 nanosecond +4433 napkin +4434 narrator +4435 nastiness +4436 natives +4441 nautically +4442 navigate +4443 nearest +4444 nebula +4445 nectar +4446 nefarious +4451 negotiator +4452 neither +4453 nemesis +4454 neoliberal +4455 nephew +4456 nervously +4461 nest +4462 netting +4463 neuron +4464 nevermore +4465 nextdoor +4466 nicotine +4511 niece +4512 nimbleness +4513 nintendo +4514 nirvana +4515 nuclear +4516 nugget +4521 nuisance +4522 nullify +4523 numbing +4524 nuptials +4525 nursery +4526 nutcracker +4531 nylon +4532 oasis +4533 oat +4534 obediently +4535 obituary +4536 object +4541 obliterate +4542 obnoxious +4543 observer +4544 obtain +4545 obvious +4546 occupation +4551 oceanic +4552 octopus +4553 ocular +4554 office +4555 oftentimes +4556 oiliness +4561 ointment +4562 older +4563 olympics +4564 omissible +4565 omnivorous +4566 oncoming +4611 onion +4612 onlooker +4613 onstage +4614 onward +4615 onyx +4616 oomph +4621 opaquely +4622 opera +4623 opium +4624 opossum +4625 opponent +4626 optical +4631 opulently +4632 oscillator +4633 osmosis +4634 ostrich +4635 otherwise +4636 ought +4641 outhouse +4642 ovation +4643 oven +4644 owlish +4645 oxford +4646 oxidize +4651 oxygen +4652 oyster +4653 ozone +4654 pacemaker +4655 padlock +4656 pageant +4661 pajamas +4662 palm +4663 pamphlet +4664 pantyhose +4665 paprika +4666 parakeet +5111 passport +5112 patio +5113 pauper +5114 pavement +5115 payphone +5116 pebble +5121 peculiarly +5122 pedometer +5123 pegboard +5124 pelican +5125 penguin +5126 peony +5131 pepperoni +5132 peroxide +5133 pesticide +5134 petroleum +5135 pewter +5136 pharmacy +5141 pheasant +5142 phonebook +5143 phrasing +5144 physician +5145 plank +5146 pledge +5151 plotted +5152 plug +5153 plywood +5154 pneumonia +5155 podiatrist +5156 poetic +5161 pogo +5162 poison +5163 poking +5164 policeman +5165 poncho +5166 popcorn +5211 porcupine +5212 postcard +5213 poultry +5214 powerboat +5215 prairie +5216 pretzel +5221 princess +5222 propeller +5223 prune +5224 pry +5225 pseudo +5226 psychopath +5231 publisher +5232 pucker +5233 pueblo +5234 pulley +5235 pumpkin +5236 punchbowl +5241 puppy +5242 purse +5243 pushup +5244 putt +5245 puzzle +5246 pyramid +5251 python +5252 quarters +5253 quesadilla +5254 quilt +5255 quote +5256 racoon +5261 radish +5262 ragweed +5263 railroad +5264 rampantly +5265 rancidity +5266 rarity +5311 raspberry +5312 ravishing +5313 rearrange +5314 rebuilt +5315 receipt +5316 reentry +5321 refinery +5322 register +5323 rehydrate +5324 reimburse +5325 rejoicing +5326 rekindle +5331 relic +5332 remote +5333 renovator +5334 reopen +5335 reporter +5336 request +5341 rerun +5342 reservoir +5343 retriever +5344 reunion +5345 revolver +5346 rewrite +5351 rhapsody +5352 rhetoric +5353 rhino +5354 rhubarb +5355 rhyme +5356 ribbon +5361 riches +5362 ridden +5363 rigidness +5364 rimmed +5365 riptide +5366 riskily +5411 ritzy +5412 riverboat +5413 roamer +5414 robe +5415 rocket +5416 romancer +5421 ropelike +5422 rotisserie +5423 roundtable +5424 royal +5425 rubber +5426 rudderless +5431 rugby +5432 ruined +5433 rulebook +5434 rummage +5435 running +5436 rupture +5441 rustproof +5442 sabotage +5443 sacrifice +5444 saddlebag +5445 saffron +5446 sainthood +5451 saltshaker +5452 samurai +5453 sandworm +5454 sapphire +5455 sardine +5456 sassy +5461 satchel +5462 sauna +5463 savage +5464 saxophone +5465 scarf +5466 scenario +5511 schoolbook +5512 scientist +5513 scooter +5514 scrapbook +5515 sculpture +5516 scythe +5521 secretary +5522 sedative +5523 segregator +5524 seismology +5525 selected +5526 semicolon +5531 senator +5532 septum +5533 sequence +5534 serpent +5535 sesame +5536 settler +5541 severely +5542 shack +5543 shelf +5544 shirt +5545 shovel +5546 shrimp +5551 shuttle +5552 shyness +5553 siamese +5554 sibling +5555 siesta +5556 silicon +5561 simmering +5562 singles +5563 sisterhood +5564 sitcom +5565 sixfold +5566 sizable +5611 skateboard +5612 skeleton +5613 skies +5614 skulk +5615 skylight +5616 slapping +5621 sled +5622 slingshot +5623 sloth +5624 slumbering +5625 smartphone +5626 smelliness +5631 smitten +5632 smokestack +5633 smudge +5634 snapshot +5635 sneezing +5636 sniff +5641 snowsuit +5642 snugness +5643 speakers +5644 sphinx +5645 spider +5646 splashing +5651 sponge +5652 sprout +5653 spur +5654 spyglass +5655 squirrel +5656 statue +5661 steamboat +5662 stingray +5663 stopwatch +5664 strawberry +5665 student +5666 stylus +6111 suave +6112 subway +6113 suction +6114 suds +6115 suffocate +6116 sugar +6121 suitcase +6122 sulphur +6123 superstore +6124 surfer +6125 sushi +6126 swan +6131 sweatshirt +6132 swimwear +6133 sword +6134 sycamore +6135 syllable +6136 symphony +6141 synagogue +6142 syringes +6143 systemize +6144 tablespoon +6145 taco +6146 tadpole +6151 taekwondo +6152 tagalong +6153 takeout +6154 tallness +6155 tamale +6156 tanned +6161 tapestry +6162 tarantula +6163 tastebud +6164 tattoo +6165 tavern +6166 thaw +6211 theater +6212 thimble +6213 thorn +6214 throat +6215 thumb +6216 thwarting +6221 tiara +6222 tidbit +6223 tiebreaker +6224 tiger +6225 timid +6226 tinsel +6231 tiptoeing +6232 tirade +6233 tissue +6234 tractor +6235 tree +6236 tripod +6241 trousers +6242 trucks +6243 tryout +6244 tubeless +6245 tuesday +6246 tugboat +6251 tulip +6252 tumbleweed +6253 tupperware +6254 turtle +6255 tusk +6256 tutorial +6261 tuxedo +6262 tweezers +6263 twins +6264 tyrannical +6265 ultrasound +6266 umbrella +6311 umpire +6312 unarmored +6313 unbuttoned +6314 uncle +6315 underwear +6316 unevenness +6321 unflavored +6322 ungloved +6323 unhinge +6324 unicycle +6325 unjustly +6326 unknown +6331 unlocking +6332 unmarked +6333 unnoticed +6334 unopened +6335 unpaved +6336 unquenched +6341 unroll +6342 unscrewing +6343 untied +6344 unusual +6345 unveiled +6346 unwrinkled +6351 unyielding +6352 unzip +6353 upbeat +6354 upcountry +6355 update +6356 upfront +6361 upgrade +6362 upholstery +6363 upkeep +6364 upload +6365 uppercut +6366 upright +6411 upstairs +6412 uptown +6413 upwind +6414 uranium +6415 urban +6416 urchin +6421 urethane +6422 urgent +6423 urologist +6424 username +6425 usher +6426 utensil +6431 utility +6432 utmost +6433 utopia +6434 utterance +6435 vacuum +6436 vagrancy +6441 valuables +6442 vanquished +6443 vaporizer +6444 varied +6445 vaseline +6446 vegetable +6451 vehicle +6452 velcro +6453 vendor +6454 vertebrae +6455 vestibule +6456 veteran +6461 vexingly +6462 vicinity +6463 videogame +6464 viewfinder +6465 vigilante +6466 village +6511 vinegar +6512 violin +6513 viperfish +6514 virus +6515 visor +6516 vitamins +6521 vivacious +6522 vixen +6523 vocalist +6524 vogue +6525 voicemail +6526 volleyball +6531 voucher +6532 voyage +6533 vulnerable +6534 waffle +6535 wagon +6536 wakeup +6541 walrus +6542 wanderer +6543 wasp +6544 water +6545 waving +6546 wheat +6551 whisper +6552 wholesaler +6553 wick +6554 widow +6555 wielder +6556 wifeless +6561 wikipedia +6562 wildcat +6563 windmill +6564 wipeout +6565 wired +6566 wishbone +6611 wizardry +6612 wobbliness +6613 wolverine +6614 womb +6615 woolworker +6616 workbasket +6621 wound +6622 wrangle +6623 wreckage +6624 wristwatch +6625 wrongdoing +6626 xerox +6631 xylophone +6632 yacht +6633 yahoo +6634 yard +6635 yearbook +6636 yesterday +6641 yiddish +6642 yield +6643 yo-yo +6644 yodel +6645 yogurt +6646 yuppie +6651 zealot +6652 zebra +6653 zeppelin +6654 zestfully +6655 zigzagged +6656 zillion +6661 zipping +6662 zirconium +6663 zodiac +6664 zombie +6665 zookeeper +6666 zucchini +EOF +) + +dice() { + tr -cd '1-6'</dev/urandom|fold -w 4|head -n "$1" +} + +for num in $(dice "${1:-8}") +do + echo "$wordlist"| + grep "$num"| + cut -d' ' -f2| + tr '\n' ' ' +done + +echo diff --git a/bin/dict b/bin/dict @@ -0,0 +1,3 @@ +#!/bin/sh + +echo "define ${2:-*} \"$1\"" | nc dict.org 2628 diff --git a/bin/dm b/bin/dm @@ -0,0 +1,37 @@ +#!/bin/sh + +sockdir=$HOME/var/dm +keyseq= + +list() { + tree $sockdir +} + +usage() { + echo "`basename $0` [-hl] <alias> [command]" +} + +test -d $sockdir || mkdir -p $sockdir + +while getopts "hl" opt; do + case $opt in + l) list; exit 0 ;; + h) usage; exit 0 ;; + *) usage; exit 1 ;; + esac +done + +shift $((OPTIND - 1)) + +case $# in + 0) list; exit 0;; + 1) method=a;; + *) method=A;; +esac +name=$1 + +shift + +socket="${sockdir}/${name}" + +dtach -${method} ${socket} -e ${keyseq} -r winch $@ diff --git a/bin/dmenuwireless b/bin/dmenuwireless @@ -0,0 +1,10 @@ +#!/bin/sh + +# Select a WAP to connect to. + +wap="$(grep name /etc/wireless.cfg | cut -f 2 -d '=')" || exit 1 +chosen="$(echo "$wap" | dmenu -i -p "Connect to which? ")" || exit 1 + +notify-send "Connecting..." +doas wireless "$chosen" 2>/dev/null +notify-send "Connected to $chosen" diff --git a/bin/dock b/bin/dock @@ -0,0 +1,13 @@ +#!/bin/sh -e + +# switch to the external display +xrandr | grep 'DP-2 connected' || { >&2 notify-send 'HDMI-1 disconnected'; exit 1; } +xrandr --output DP-2 --auto --output eDP-1 --off + +# update dpi +xrdb "$HOME/etc/x11/xresources" +echo "*dpi: 96" | xrdb -merge + +doas sysctl machdep.lidaction=0 + +xwallpaper --zoom /home/anon/usr/img/wal/full/wallhaven-6km8o6.jpg diff --git a/bin/drawterm b/bin/drawterm @@ -0,0 +1,17 @@ +#!/bin/sh +# spawn a new terminal window inside a drawn rectangle + +set -e + +#wglyph=9 +#hglyph=19 +wglyph=6 +hglyph=14 +border=10 + +slop | tr 'x+' ' ' | { + read w h x y + w=$(( ( w - border ) / wglyph )) + h=$(( ( h - border ) / hglyph )) + test "$1" = -e && exec st -g ${w}x${h}+${x}+${y} $(echo $@) || exec st -g ${w}x${h}+${x}+${y} & +} diff --git a/bin/extract b/bin/extract @@ -0,0 +1,16 @@ +#!/bin/sh + +if [ -f "$1" ] ; then + case "$(file -ib "$1" | cut -d';' -f1 | cut -d'/' -f2)" in + bzip2|x-bzip2) tar xjvf "$1" ;; + gzip|x-gzip) tar xzvf "$1" ;; + x-rar) unrar x "$1" ;; + tar|x-tar) tar xf "$1" ;; + zip) unzip "$1" ;; + x-7z-compressed) 7z x "$1" ;; + x-zip-compressed|x-xz) unxz "$1" ;; + *) echo "'$1' cannot be extracted via extract()" ;; + esac +else + echo "'$1' is not a valid file" +fi diff --git a/bin/focus b/bin/focus @@ -0,0 +1,47 @@ +#!/bin/sh + +BW=${BW:-8} # border width +ACTIVE=${ACTIVE:-0x444444} # active border color +INACTIVE=${INACTIVE:-0x888888} # inactive border color + +# get current window id +CUR=$(pfw) + +usage() { + echo "usage: $(basename $0) <next|prev|wid>" + exit 1 +} + +setborder() { + ROOT=$(lswin -r) + + # check if window exists + wattr $2 || return + + # do not modify border of fullscreen windows + test "$(wattr xywh $2)" = "$(wattr xywh $ROOT)" && return + + case $1 in + active) chwb -s $BW -c $ACTIVE $2 ;; + inactive) chwb -s $BW -c $INACTIVE $2 ;; + esac +} + +case $1 in + next) wid=$(lswin|grep -v $CUR|sed '1 p;d') ;; + prev) wid=$(lswin|grep -v $CUR|sed '$ p;d') ;; + 0x*) wattr $1 && wid=$1 ;; + *) usage ;; +esac + +# exit if we can't find another window to focus +test -z "$wid" && echo "$(basename $0): can't find a window to focus" >&2 && exit 1 + +#setborder inactive $CUR # set inactive border on current window +#setborder active $wid # activate the new window +chwso -r $wid # put it on top of the stack +wintf $wid # set focus on it + +# you might want to remove this for sloppy focus +#wmp -a $(wattr xy $wid) # move the mouse cursor to +#wmp -r $(wattr wh $wid) # .. its bottom right corner diff --git a/bin/fs b/bin/fs @@ -0,0 +1,37 @@ +#!/bin/sh + +# this file is used to store the previous geometry of a window +FSFILE=${FSFILE:-~/var/fwin} + +# it's pretty simple, but anyway... +usage() { + echo "usage: $(basename $0) <wid>" + exit 1 +} + +# exit if no argument given +test -z "$1" && usage + +# this will unset the fullscreen state of any fullscreen window if there is one. +# this way, there will only be one window in fullscreen at a time, and no window +# will loose their previous geometry info +test -f $FSFILE && wtp $(cat $FSFILE) + +# if file exist and contain our window id, it means that out window is in +# fullscreen mode +if test -f $FSFILE && grep -q $1 $FSFILE; then + # if the window we removed was our window, delete the file, so we can + # fullscreen it again later + rm -f $FSFILE + +else + # if not, then put the current window in fullscreen mode, after saving its + # geometry and id to $FSFILE we also remove any border from this window. + wattr xywhi $1 > $FSFILE + chwb -s 0 $1 + wtp $(wattr xywh `lswin -r`) $1 +fi + +# now focus the window, and put it in front, no matter which state we're in, and +# put the cursor on its bottom-right corner (for consistency) +focus $1 diff --git a/bin/gruup b/bin/gruup @@ -0,0 +1,224 @@ +#!/bin/sh +# +# Copyright (c) 2015 Greduan <me@greduan.com>, licensed under the WTFPL +# Adds group-like capabilities, sorta like those you find in CWM and such WMs + +usage() { + cat << EOF +usage: $(basename $0) [-hCU] [-c wid] [-s wid group] [-tmMu group] + -h shows this help + -c cleans WID from group files (and makes it visible) + -C runs cleanup routine + -s sets WID's group + -t toggle group visibility state + -m maps (shows) group + -M maps group and unmaps all other groups + -u unmaps (hides) group + -U unmaps all the groups +EOF + + exit 1 +} + +# test for no arguments +test $# -eq 0 && usage + +# I suggest it's under /tmp or somewhere that gets cleaned up at reboot or gets +# cleaned up after X stops running +FSDIR=${FSDIR:-/tmp/groups.sh} + +# define our functions + +# clean WID ($1) from group files +clean_wid() { + t=$(mktemp /tmp/groups.XXXXXX) + for x in $(ls $FSDIR/group.*); do + sed "/$1/d" "$x" >"$t" + mv "$t" "$x" + done + rm -f "$t" +} + +# cleans group ($1) from (in)active files +clean_status() { + t=$(mktemp /tmp/groups.XXXXXX) + sed "/$1/d" $FSDIR/active >"$t" + mv "$t" $FSDIR/active + sed "/$1/d" $FSDIR/inactive >"$t" + mv "$t" $FSDIR/inactive +} + +# shows all the windows in group ($1) +map_group() { + # safety + if ! grep -q $1 < $FSDIR/all; then + echo "Group doesn't exist" + exit 1 + fi + + # clean statuses + clean_status $1 + # add to active + echo $1 >> $FSDIR/active + + # loop through group and map windows + xargs mapw -m <$FSDIR/group.$1 + chwso -r $1 +} + +# hides all the windows in group ($1) +unmap_group() { + # safety + if ! grep -q $1 < $FSDIR/all; then + echo "Group doesn't exist" + exit 1 + fi + + # clean statuses + clean_status $1 + # add to inactive + echo $1 >> $FSDIR/inactive + + # loop through group and unmap windows + while read line; do + mapw -u $line + done < $FSDIR/group.$1 +} + +# assigns WID ($1) to the group ($2) +set_group() { + #so that neither grep nor ls in clean_wid complain + #when group.$2 does not exist + touch $FSDIR/group.$2 + + # make sure we've no duplicates + clean_wid $1 + clean_status $2 + + # insert WID into new group if not already there + grep -q $1 < $FSDIR/group.$2 || \ + echo $1 >> $FSDIR/group.$2 + + # if we can't find the group add it to groups and make it active + grep -q $2 < $FSDIR/all || \ + echo $2 >> $FSDIR/all && \ + echo $2 >> $FSDIR/active + + # map WID if group is active + grep -q $2 < $FSDIR/active && \ + mapw -m $1 + + # unmap WID if group is inactive + grep -q $2 < $FSDIR/inactive && \ + mapw -u $1 +} + +# toggles visibility state of all the windows in group ($1) +toggle_group() { + # safety + if ! grep -q $1 < $FSDIR/all; then + echo "Group doesn't exist" + return + fi + + # search through active groups first + grep -q $1 < $FSDIR/active && \ + unmap_group $1 && \ + return + + # search through inactive groups next + grep -q $1 < $FSDIR/inactive && \ + map_group $1 && \ + return +} + +# removes all the unexistent WIDs from groups +# removes all group files that don't exist +# removes from 'all' file all groups that don't exist +cleanup_everything() { + # clean WIDs that don't exist + # using `cat` instead of `<` because error suppression + cat $FSDIR/group.* 2>/dev/null | while read wid; do + wattr $wid || \ + clean_wid $wid + done + + # clean group files that are empty + for file in $FSDIR/group.*; do + # is the group empty? + if [ ! -s $file ]; then + rm -f $file + fi + done + + # remove groups that don't exist from 'all' + while read line; do + if [ ! -f $FSDIR/group.$line ]; then + t=$(mktemp /tmp/groups.XXXXXX) + sed "/$line/d" $FSDIR/all >"$t" + mv "$t" $FSDIR/all + clean_status $line + fi + done < $FSDIR/all +} + +# actual run logic (including arguments and such) + +# check $FSDIR exists +test -d $FSDIR || mkdir -p $FSDIR + +# touch all the files +test -f $FSDIR/active || :> $FSDIR/active +test -f $FSDIR/inactive || :> $FSDIR/inactive +test -f $FSDIR/all || :> $FSDIR/all + +cleanup_everything + +# getopts yo +while getopts "hc:Cs:t:m:M:u:U" opt; do + case $opt in + h) + usage + ;; + c) + clean_wid $OPTARG + mapw -m $OPTARG + break + ;; + C) + cleanup_everything + break + ;; + s) + set_group $OPTARG $(eval echo "\$$OPTIND") + break + ;; + t) + toggle_group $OPTARG + break + ;; + m) + map_group $OPTARG + break + ;; + M) + for file in $FSDIR/group.*; do + group=${file##*.} + unmap_group $group + done + map_group $OPTARG + break + ;; + u) + unmap_group $OPTARG + break + ;; + U) + for file in $FSDIR/group.*; do + group=${file##*.} + unmap_group $group + done + break + ;; + esac +done diff --git a/bin/health b/bin/health @@ -0,0 +1,36 @@ +#!/bin/sh + +bat() { + bat=$(apm -l) + printf "$bat\n" +} + +charge() { + [ "$(apm -a)" = "1" ] +} + +temp() { + sysctl hw.sensors.cpu0.temp0 | cut -d= -f2 | cut -d. -f1 +} + +clock() { + date '+%a %Y %m/%d %I:%M %p' +} + +if [ $# -gt 0 ] +then + printf "TAG:notify\t\ +IMG:$HOME/var/theme/icons/system/health.png\t\ +$(clock)\t\ +Battery: %s%% (%s)\t\ +Temperature: %s°C\ +" "$(bat)" "$(charge && echo charging || echo draining)" "$(temp)" >"$HOME/var/cache/xnotify" + exit 0 +fi + +while true +do + ! charge && [ "$(bat)" -lt 20 ] && echo "SEC:0 TAG:power IMG:$HOME/var/theme/icons/system/power.png Battery is low: $(bat)%" + [ "$(temp)" -gt 80 ] && echo "SEC:5 TAG:temp IMG:$HOME/var/theme/icons/system/health.png Temperature is at $(temp)°C" + sleep 60 +done >"$HOME/var/cache/xnotify" diff --git a/bin/kjv b/bin/kjv Binary files differ. diff --git a/bin/mailup b/bin/mailup @@ -0,0 +1,9 @@ +#!/bin/sh + +pgrep -f mbsync && exit + +mbsync "${1:--a}" + +test "$(find "${XDG_DATA_HOME}"/mail/*/[Ii][Nn][Bb][Oo][Xx]/new/* -type f 2>/dev/null | wc -l)" -gt 0 && \ +notify-send -i /usr/local/share/icons/ubo-icons-0.1alpha/128x128/apps/email.png "You've got mail.\n" +notmuch new 2>/dev/null diff --git a/bin/mute b/bin/mute @@ -0,0 +1,26 @@ +#!/bin/sh + +mute_mic() { + sndioctl input.mute=! + state="$(sndioctl input.mute)" + test $state = "input.mute=0" && notify-send "Mic unmuted." || notify-send "Mic muted." +} + +mute_sound() { + sndioctl output.mute=! + state="$(sndioctl output.mute)" + test $state = "output.mute=0" && notify-send "Audio unmuted." || notify-send "Audio muted." +} + +usage() { + echo usage: mute [-m] [-s] +} + +case $@ in + -m) + mute_mic ;; + -s) + mute_sound ;; + *) + usage ;; +esac diff --git a/bin/newsup b/bin/newsup @@ -0,0 +1,15 @@ +#!/bin/sh + +# Set as a cron job to check for new RSS entries for newsboat. +# If newsboat is open, sends it an "R" key to refresh. +# Modified version of Luke's script. + +#ping -q -c 1 gormless.xyz > /dev/null || exit + +#notify-send "IMG:/usr/local/share/icons/ubo-icons-0.1alpha/128x128/apps/gnome-news.png\tUpdating RSS feeds..." + +echo "..." > /home/anon/etc/newsboat/newsupdate +/usr/local/bin/newsboat -C /home/anon/etc/newsboat/config -u /home/anon/etc/newsboat/urls -x reload +rm -f /home/anon/etc/newsupdate +/usr/local/bin/newsboat -x print-unread | awk '{ print $1}' > /home/anon/etc/newsboat/newsupdate +#notify-send "IMG:/usr/local/share/icons/ubo-icons-0.1alpha/128x128/apps/gnome-news.png\tUpdate complete." diff --git a/bin/op b/bin/op @@ -0,0 +1,94 @@ +#!/bin/sh +# +# open things from uri + +cachedir=$HOME/var/cache/op + +usage() { + echo "usage: $(basename $0) [-h] [-s] [uri]" >&2 +} + +peekmime() { + curl -sSfL "$1" | cut -b-16 | file -ib - | cut -d\; -f1 +} + +# return a uri to a local file (download if necessary) +localuri() { + local="$1" + if [ ! -f "$1" ]; then + tmp=$(mktemp) + curl -o $tmp -sSfL "$1" + local=$(cachefile "$tmp" "${mime##*/}") + rm $tmp + fi + printf '%s\n' "$local" +} + +# copy file to cache +cachefile() { + mkdir -p $cachedir + hash=$(sha256 "$1"|cut -d' ' -f1) + cp "$1" $cachedir/${hash}.$2 + printf '%s/%s.%s\n' "$cachedir" "$hash" "$2" +} + +# prompt for a command to open uri +prompt() { + dmenu_path | dmenu -p "$1" -l 8 +} + +clip="$(xsel -o 2>/dev/null)" + +while getopts "hs" OPT; do + case $OPT in + s) slurp=$(mktemp -p $cachedir) ;; + h) usage; exit 0 ;; + *) usage; exit 1 ;; + esac +done +shift $((OPTIND - 1)) + +# fallback to clipboard when not uri given +uri="${1:-$clip}" + +# special arg "-" read uri(s) from stdin +if [ "$uri" = "-" ]; then + cat | xargs -P$(nproc) -n1 $0 +fi + +# can read file _content_ from stdin, then process it +if [ -n "$slurp" ]; then + cat > $slurp + uri="$slurp" +fi + +[ -z "$uri" ] && exit 1 + +if [ -f "$uri" ]; then + mime=$(file -ib "$uri" | cut -d\; -f1) +else + proto="${uri%%:*}" + case $proto in + mailto) mime='application/x-mail' ;; + magnet) mime='application/x-bittorrent' ;; + *) mime="$(peekmime $uri)" ;; + esac +fi + +if [ -n "$slurp" ]; then + uri="$(cachefile $slurp ${mime##*/})" + rm "$slurp" +fi + +case "$mime" in + text/html) exec firefox "$uri" >/dev/null & ;; + audio/*) exec mpv --no-audio-display "$uri" ;; + video/*) exec mpv "$uri" >/dev/null & ;; + image/gif) exec mpv -loop $(localuri "$uri") >/dev/null & ;; + image/*) exec sxiv $(localuri "$uri") >/dev/null & ;; + text/*) exec st -e less $(localuri "$uri") >/dev/null & ;; + application/x-mail) exec st -e neomutt $uri >/dev/null & ;; + application/x-bittorrent) exec st -e transadd $uri >/dev/null & ;; + application/pdf) exec zathura $uri >/dev/null & ;; + *) exec $(prompt) "$uri" >/dev/null & ;; +esac diff --git a/bin/poast b/bin/poast @@ -0,0 +1,4 @@ +#!/bin/sh + +# Launches poast in iridium's app mode +iridium --app=https://poa.st diff --git a/bin/rec b/bin/rec @@ -0,0 +1,147 @@ +#!/bin/sh + +# Copyright (c) 2018-2019 Thomas Frohwein <11335318+rfht@users.noreply.github.com> +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. + +USAGE="Usage: `basename $0` [-m] [-d mic_device] [-a audiooffset] [-n window_name] [-c codec] [-b bitrate] [-r resolution] [-o offset] [-fullscreen] [-s <scale_x>:<scale_y>] [-f framerate] [-v volume_adjustment] [-vmic mic_volume] [-vmon monitor_volume] [-t threads ] [-noaudio] [-crf crf] <rtmp url>" + +audiooffset=0.0 +bitrate=3500 +bufsize= +container=mp4 +filename= +framerate=30 +fullscreen=0 +gop= +heightline= +heightval= +hilopass=",lowpass=3000,highpass=200,afftdn" +mic=0 +mic_device=snd/0 +noaudio=0 +offset= +resolution="$(xdpyinfo | grep dimensions | awk '{print $2;}')" +scaleres= +threads=0 # -t 0 is the default and uses as many threads as available/cores +videocodec=libx264 +volume=1.0 +volume_mic=1.0 +volume_mon=1.0 +windowname= +widthline= +widthval= +wininfoargs= +xline= +xval=0 +yline= +yval=0 + +if [[ $# -eq 0 ]];then + echo $USAGE; exit 0 +fi + +while [[ $# -gt 0 ]] +do + case "$1" in + -a) audiooffset="$2"; shift;; + -b) bitrate="$2"; shift;; + -c) videocodec="$2"; shift;; + -container) container="$2"; shift;; + -crf) crf="$2"; shift;; + -d) mic_device="$2"; shift;; + -f) framerate="$2"; shift;; + -fullscreen) fullscreen=1;; + -h) echo $USAGE; exit 0;; + -hl) hilopass="";; + -m) mic=1;; + -n) windowname="$2"; shift;; + -noaudio) noaudio=1;; + -o) offset="$2"; shift;; + -v) volume="$2"; shift;; + -r) resolution="$2"; shift;; + -s) scaleres="$2"; shift;; + -t) threads="$2"; shift;; + -vmic) volume_mic="$2"; shift;; + -vmon) volume_mon="$2"; shift;; + -*) echo $USAGE; exit 0;; + *) filename="$1"; break;; + esac + shift +done + +if [[ -z "$filename" ]];then + echo $USAGE; exit 0 +fi + +bufsize=`expr $bitrate \* 2` +gop=`expr $framerate \* 2` + +if [[ -n "$scaleres" ]];then + scaleres="scale=${scaleres}," +fi + +# if -n was used, overwrite resolution with window parameters +if [[ -n "$windowname" ]];then + xline=`xwininfo -name "$windowname" | grep "Absolute upper-left X"` + yline=`xwininfo -name "$windowname" | grep "Absolute upper-left Y"` + widthline=`xwininfo -name "$windowname" | grep "Width:"` + heightline=`xwininfo -name "$windowname" | grep "Height:"` + xval=`echo "$xline" | cut -f 7 -d " "` + yval=`echo "$yline" | cut -f 7 -d " "` + # width and height need to be multiples of 2 + widthval=`echo "$widthline" | cut -f 4 -d " "` + if [[ `expr $widthval % 2` -eq 1 ]]; then + widthval=`expr $widthval + 1` + fi + heightval=`echo "$heightline" | cut -f 4 -d " "` + if [[ `expr $heightval % 2` -eq 1 ]]; then + heightval=`expr $heightval + 1` + fi + resolution="${widthval}x${heightval}" + offset="+${xval},${yval}" +fi + +echo "Press Ctrl+C to stop recording\n" + +BASE="\ +-hide_banner \ +-loglevel error \ +-thread_queue_size 512 \ +-threads $threads" + +VIDEO="-video_size $resolution \ +-thread_queue_size 512 \ +-f x11grab \ +-i $DISPLAY$offset \ +-r $framerate \ +-c:v $videocodec \ +-vb ${bitrate}k \ +-minrate ${bitrate}k \ +-maxrate ${bitrate}k \ +-bufsize ${bufsize}k \ +-preset ultrafast \ +-vf "${scaleres}format=yuv420p" \ +-g $gop \ +-keyint_min $framerate" + +AUDIOMERGE="volume=$volume_mic,aformat=channel_layouts=stereo$hilopass[l];[1]volume=$volume_mon,aformat=channel_layouts=stereo[m];[l][m]amerge=inputs=2[a]" + +# if no mic (= no -m), only record from snd/0.mon +# and the only filter is aresample=async=1 + +if [ $noaudio -lt 1 -a $mic -lt 1 ]; then + #only monitoring stream + ffmpeg $BASE -f sndio -i snd/0.mon -c:a aac -f nut pipe:1 | \ + ffmpeg $BASE -f nut -itsoffset $audiooffset -i pipe:0 $VIDEO -c:a copy -f mp4 "$filename" +elif [ $noaudio -lt 1 ]; then + #mon + mic stream + ffmpeg $BASE -thread_queue_size 512 -f sndio -i "$mic_device" \ + -thread_queue_size 512 -f sndio -i snd/0.mon \ + -filter_complex "[0]${AUDIOMERGE}" -map '[a]' -c:a aac -f nut pipe:1 | \ + ffmpeg $BASE -thread_queue_size 512 -f nut -itsoffset $audiooffset -i pipe:0 $VIDEO -c:a copy -f mp4 "$filename" +else + #no audio + ffmpeg $BASE $VIDEO -f mp4 "$filename" +fi diff --git a/bin/rename b/bin/rename @@ -0,0 +1,100 @@ +#!/bin/sh + +set -f -e -u + +EDITOR="${EDITOR:-${VISUAL:-vi}}" + +usage() +{ + echo "usage: rename [file...]" >&2 + exit 1 +} + +# quote and escape filename for moving +quote() +{ + echo "$1" | sed "s/'/'\\\\''/g; s/^/'/; s/\$/'/" +} + +# populate the files $old and $new with filenames, one per line +populatefiles() +{ + if [ $# -eq 0 ] + then # run on stdin + cat | tee "$old" > "$new" + else # run on arguments + for i + do + printf "%s\n" "$i" >> "$old" + printf "%s\n" "$i" >> "$new" + done + fi +} + +# edit the filenames in $new and test if they are valid +editfile() +{ + if [ "$(wc -l <"$old")" -ne "$(sort -u "$old" | wc -l)" ] + then + echo "rename: repeated filenames to be renamed" >&2 + exit 1 + fi + + "$EDITOR" "$new" </dev/tty + + if [ $(wc -l <"$new") -ne $(wc -l <"$old") ] + then + echo "rename: number of filenames not equal to number of files" >&2 + exit 1 + fi + + if [ "$(wc -l <"$new")" -ne "$(sort -u "$new" | wc -l)" ] + then + echo "rename: repeated target filenames" >&2 + exit 1 + fi +} + +# create $cmd file +createcmd() +{ + cat /dev/null >"$cmd" + while read -r from <&3 && read -r to <&4 + do + if [ "$from" != "$to" ] + then + from=$(quote "$from") + to=$(quote "$to") + printf "mv %s\t%s\n" "$from" "$to" >> "$cmd" + fi + done 3<"$old" 4<"$new" +} + +# remove temporary files +cleanup() +{ + rm -f "$old" "$new" "$cmd" +} + +while getopts 'h' c +do + case "$c" in + h|*) + usage + ;; + esac +done +shift $((OPTIND -1)) + +old=$(mktemp) +new=$(mktemp) +cmd=$(mktemp) + +trap cleanup EXIT + +populatefiles "$@" +editfile +createcmd +sh -x "$cmd" + +exit 0 diff --git a/bin/rssg b/bin/rssg @@ -0,0 +1,189 @@ +#!/bin/sh +# +# https://www.romanzolotarev.com/bin/rssg +# Copyright 2018 Roman Zolotarev <hi@romanzolotarev.com> +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +set -e + + +main () { + test -n "$1" || usage + test -n "$2" || usage + test -f "$1" || no_file "$1" + + + index_file=$(readlink -f "$1") + test -z "${index_file##*html}" && html=$(cat "$index_file") + test -z "${index_file##*md}" && html=$(md_to_html "$index_file") + test -n "$html" || usage + + base="${index_file%/*}" + base_url="$(echo "$html" | get_url | sed 's#\(.*\)/[^/]*#\1#')" + + url=$( echo "$html" | get_url) + + title="$2" + + description=$( echo "$html" | get_description | + remove_tags | + remove_nbsp ) + + items=$( echo "$html" | get_items) + + rss=$( echo "$items" | + render_items "$base" "$base_url" | + render_feed "$url" "$title" "$description") + + >&2 echo "[rssg] ${index_file##$(pwd)/} $(echo "$rss" | grep -c '<item>') items" + echo "$rss" +} + + +usage() { + echo "usage: ${0##*/} index.{html,md} title > rss.xml" >&2 + exit 1 +} + + +no_file() { + echo "${0##*/}: $1: No such file" >&2 + exit 2 +} + + +md_to_html() { + test -x "$(which lowdown)" || exit 3 + lowdown \ + -D html-skiphtml \ + -D smarty \ + -d metadata \ + -d autolink "$1" +} + + +get_title() { + awk 'tolower($0)~/^<h1/{gsub(/<[^>]*>/,"",$0);print;exit}' +} + + +get_url() { + grep -i '<a .*rss.xml"' | head -1 | + sed 's#.*href="\(.*\)".*#\1#' +} + + +get_items() { + grep -i 'href=".*" title="' | + sed 's#.*href="\(.*\)" title="\(.*\)">\(.*\)</a>.*#\1 \2 \3#' +} + + +get_description() { + start='sub("^.*<"s"*"t"("s"[^>]*)?>","")' + stop='sub("</"s"*"t""s"*>.*","")&&x=1' + awk -v 's=[[:space:]]' -v 't=[Pp]' "$start,$stop;x{exit}" +} + +remove_tags() { + sed 's#<[^>]*>##g;s#</[^>]*>##g' +} + + +remove_nbsp() { + sed 's#\&nbsp;# #g' +} + + +rel_to_abs_urls() { + site_url="$1" + base_url="$2" + + abs='s#(src|href)="/([^"]*)"#\1="'"$site_url"/'\2"#g' + rel='s#(src|href)="([^:/"]*)"#\1="'"$base_url"/'\2"#g' + sed -E "$abs;$rel" +} + + +date_rfc_822() { + date -j '+%a, %d %b %Y %H:%M:%S %z' \ + "$(echo "$1"| tr -cd '[:digit:]')0000" +} + + +render_items() { + while read -r i + do render_item "$1" "$2" "$i" + done +} + + +render_item() { + base="$1" + base_url="$2" + item="$3" + + site_url="$(echo "$base_url"| sed 's#\(.*//.*\)/.*#\1#')" + + date=$(echo "$item"|awk '{print$2}') + url=$(echo "$item"|awk '{print$1}') + + f="$base/$url" + test -f "$f" && html=$(cat "$f") + test -f "${f%\.html}.md" && html=$(md_to_html "${f%\.html}.md") + + description=$( + echo "$html" | + rel_to_abs_urls "$site_url" "$base_url" | + remove_nbsp + ) + title=$(echo "$description" | get_title) + guid="$base_url/$(echo "$url" | sed 's#^/##')" + + echo ' +<item> +<guid>'"$guid"'</guid> +<link>'"$guid"'</link> +<pubDate>'"$(date_rfc_822 "$date")"'</pubDate> +<title>'"$title"'</title> +<description><![CDATA[ + +'"$description"' + +]]></description> +</item>' +} + + +render_feed() { + url="$1" + title=$(echo "$2" | remove_nbsp) + description="$3" + + base_url="$(echo "$url" | cut -d '/' -f1-3)" + + echo '<?xml version="1.0" encoding="UTF-8"?> +<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> +<channel> +<atom:link href="'"$url"'" rel="self" type="application/rss+xml" /> +<title>'"$title"'</title> +<description>'"$description"'</description> +<link>'"$base_url"'/</link> +<lastBuildDate>'"$(date_rfc_822 date)"'</lastBuildDate> +'"$(cat)"' +</channel></rss>' +} + + +main "$@" diff --git a/bin/screenshot b/bin/screenshot @@ -0,0 +1,9 @@ +#!/bin/sh -e + +dir="$HOME/usr/img/screenshots" + +area="$(slop -o)" +date="$(date +%Y%m%d-%H%M%S)" +mkdir -p "$dir" +output="$dir/${date}-$area.png" +import -window root -crop "$area" "$output" diff --git a/bin/shapezio b/bin/shapezio @@ -0,0 +1,3 @@ +#!/bin/sh + +/usr/local/bin/electron /usr/local/share/shapez.io/index.html diff --git a/bin/showmus b/bin/showmus @@ -0,0 +1,8 @@ +#!/bin/sh + +title=$(cmus-remote -C status | grep title | cut -f 3-$@ -d " ") +artist=$(cmus-remote -C status | grep 'tag artist ' | cut -f 3-$@ -d " ") + +[ -z "$artist" ] && artist=$(cmus-remote -C status | grep 'tag albumartist ' | cut -f 3-$@ -d " ") + +printf "$title - $artist" diff --git a/bin/ssg6 b/bin/ssg6 @@ -0,0 +1,266 @@ +#!/bin/sh -e +# +# https://rgz.ee/bin/ssg6 +# Copyright 2018-2019 Roman Zolotarev <hi@romanzolotarev.com> +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +main() { + test -n "$1" || usage + test -n "$2" || usage + test -n "$3" || usage + test -n "$4" || usage + test -d "$1" || no_dir "$1" + test -d "$2" || no_dir "$2" + + src=$(readlink_f "$1") + dst=$(readlink_f "$2") + + IGNORE=$( + if ! test -f "$src/.ssgignore" + then + printf ' ! -path "*/.*"' + return + fi + while read -r x + do + test -n "$x" || continue + printf ' ! -path "*/%s*"' "$x" + done < "$src/.ssgignore" + ) + + # files + + title="$3" + + h_file="$src/_header.html" + f_file="$src/_footer.html" + test -f "$f_file" && FOOTER=$(cat "$f_file") && export FOOTER + test -f "$h_file" && HEADER=$(cat "$h_file") && export HEADER + + list_dirs "$src" | + (cd "$src" && cpio -pdu "$dst") + + fs=$( + if test -f "$dst/.files" + then list_affected_files "$src" "$dst/.files" + else list_files "$1" + fi + ) + + if test -n "$fs" + then + echo "$fs" | tee "$dst/.files" + + if echo "$fs" | grep -q '\.md$' + then + if test -x "$(which lowdown 2> /dev/null)" + then + echo "$fs" | grep '\.md$' | + render_md_files_lowdown "$src" "$dst" "$title" + else + if test -x "$(which Markdown.pl 2> /dev/null)" + then + echo "$fs" | grep '\.md$' | + render_md_files_Markdown_pl "$src" "$dst" "$title" + else + echo "couldn't find lowdown nor Markdown.pl" + exit 3 + fi + fi + fi + + echo "$fs" | grep '\.html$' | + render_html_files "$src" "$dst" "$title" + + echo "$fs" | grep -Ev '\.md$|\.html$' | + (cd "$src" && cpio -pu "$dst") + fi + + printf '[ssg] ' >&2 + print_status 'file, ' 'files, ' "$fs" >&2 + + + # sitemap + + base_url="$4" + date=$(date +%Y-%m-%d) + urls=$(list_pages "$src") + + test -n "$urls" && + render_sitemap "$urls" "$base_url" "$date" > "$dst/sitemap.xml" + + print_status 'url' 'urls' "$urls" >&2 + echo >&2 +} + + +readlink_f() { + file="$1" + cd "$(dirname "$file")" + file=$(basename "$file") + while test -L "$file" + do + file=$(readlink "$file") + cd "$(dirname "$file")" + file=$(basename "$file") + done + dir=$(pwd -P) + echo "$dir/$file" +} + + +print_status() { + test -z "$3" && printf 'no %s' "$2" && return + + echo "$3" | awk -v singular="$1" -v plural="$2" ' + END { + if (NR==1) printf NR " " singular + if (NR>1) printf NR " " plural + }' +} + + +usage() { + echo "usage: ${0##*/} src dst title base_url" >&2 + exit 1 +} + + +no_dir() { + echo "${0##*/}: $1: No such directory" >&2 + exit 2 +} + +list_dirs() { + cd "$1" && eval "find . -type d ! -name '.' ! -path '*/_*' $IGNORE" +} + + +list_files() { + cd "$1" && eval "find . -type f ! -name '.' ! -path '*/_*' $IGNORE" +} + + +list_dependant_files () { + e="\\( -name '*.html' -o -name '*.md' -o -name '*.css' -o -name '*.js' \\)" + cd "$1" && eval "find . -type f ! -name '.' ! -path '*/_*' $IGNORE $e" +} + +list_newer_files() { + cd "$1" && eval "find . -type f ! -name '.' $IGNORE -newer $2" +} + + +has_partials() { + grep -qE '^./_.*\.html$|^./_.*\.js$|^./_.*\.css$' +} + + +list_affected_files() { + fs=$(list_newer_files "$1" "$2") + + if echo "$fs" | has_partials + then list_dependant_files "$1" + else echo "$fs" + fi +} + + +render_html_files() { + while read -r f + do render_html_file "$3" < "$1/$f" > "$2/$f" + done +} + + +render_md_files_lowdown() { + while read -r f + do + lowdown \ + --html-no-escapehtml \ + --html-no-skiphtml \ + --parse-no-metadata \ + --parse-no-autolink < "$1/$f" | + render_html_file "$3" \ + > "$2/${f%\.md}.html" + done +} + + +render_md_files_Markdown_pl() { + while read -r f + do + Markdown.pl < "$1/$f" | + render_html_file "$3" \ + > "$2/${f%\.md}.html" + done +} + + +render_html_file() { + # h/t Devin Teske + awk -v title="$1" ' + { body = body "\n" $0 } + END { + body = substr(body, 2) + if (body ~ /<\/?[Hh][Tt][Mm][Ll]/) { + print body + exit + } + if (match(body, /<[[:space:]]*[Hh]1(>|[[:space:]][^>]*>)/)) { + t = substr(body, RSTART + RLENGTH) + sub("<[[:space:]]*/[[:space:]]*[Hh]1.*", "", t) + gsub(/^[[:space:]]*|[[:space:]]$/, "", t) + if (t) title = t " &mdash; " title + } + n = split(ENVIRON["HEADER"], header, /\n/) + for (i = 1; i <= n; i++) { + if (match(tolower(header[i]), "<title></title>")) { + head = substr(header[i], 1, RSTART - 1) + tail = substr(header[i], RSTART + RLENGTH) + print head "<title>" title "</title>" tail + } else print header[i] + } + print body + print ENVIRON["FOOTER"] + }' +} + + +list_pages() { + e="\\( -name '*.html' -o -name '*.md' \\)" + cd "$1" && eval "find . -type f ! -path '*/.*' ! -path '*/_*' $IGNORE $e" | + sed 's#^./##;s#.md$#.html#;s#/index.html$#/#' +} + + +render_sitemap() { + urls="$1" + base_url="$2" + date="$3" + + echo '<?xml version="1.0" encoding="UTF-8"?>' + echo '<urlset' + echo 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' + echo 'xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9' + echo 'http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"' + echo 'xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' + echo "$urls" | + sed -E 's#^(.*)$#<url><loc>'"$base_url"'/\1</loc><lastmod>'\ +"$date"'</lastmod><priority>1.0</priority></url>#' + echo '</urlset>' +} + +main "$@" diff --git a/bin/stmux b/bin/stmux @@ -0,0 +1,9 @@ +#!/bin/sh +test -z "$1" || test -z "$2" && +{ >&2 echo "usage: ${0##*/} window path command"; exit 1; } + +tmux select-window -t "$1" 2>/dev/null || +if test -n "$3" +then tmux new-window -n "$1" -c "$HOME/$2" "$3" +else tmux new-window -n "$1" -c "$HOME/$2" +fi diff --git a/bin/stopx b/bin/stopx @@ -0,0 +1,5 @@ +#!/bin/sh + +# Stops X. + +pkill $(tail -n 1 "/home/anon/etc/x11/xinitrc" | cut -d ' ' -f 2) diff --git a/bin/swallow b/bin/swallow @@ -0,0 +1,34 @@ +#!/bin/sh +# +# swallow + +usage() { + base=$(basename "$0") + + cat >&2 << EOF +Usage: + $base "program" "arguments" +EOF + + [ $# -eq 0 ] || exit "$1" +} + +main() { + [ -z "$*" ] && usage 1 + + # test first argument as a command and only proceed if it exists on $PATH + if type "$1" > /dev/null 2>&1; then + # hide current window which is almost always where the command would be + # run from + PFW="$(pfw)" + mapw -u "$PFW" + + printf '%s\n' "$*" | ${SHELL:-"/bin/sh"} + + # remap and refocus window command was run from + mapw -m "$PFW" +# focus -w "$PFW" + fi +} + +main "$@" diff --git a/bin/themeswitch b/bin/themeswitch @@ -0,0 +1,52 @@ +#!/bin/sh + +THEMECACHE=${THEMECACHE:-$HOME/var/cache/themecache} +test -f "$THEMECACHE" || touch "$THEMECACHE" + +xnotifrestart() { + pkill xnotify && pkill tiramisu + XNOTIFY_FIFO="$HOME/var/cache/xnotify" + export XNOTIFY_FIFO + rm -f $XNOTIFY_FIFO + mkfifo $XNOTIFY_FIFO + xnotify -s 5 -g -30+60 0<>$XNOTIFY_FIFO & + tiramisu -j | jq --raw-output --unbuffered '"IMG:" + .app_icon + "\t" + .summary + "\t" + .body' > $XNOTIFY_FIFO & + export XNOTIFY_PID=$! +} + +dark() { + xrdb ~/etc/x11/xresources-dark + cp ~/etc/mozilla/firefox/1vg7xwxk.anon-1615211770650/chrome/userChrome.dark ~/etc/mozilla/firefox/1vg7xwxk.anon-1615211770650/chrome/userChrome.css + xnotifrestart + echo dark > "$THEMECACHE" + cp ~/etc/gtk-3.0/dark.ini ~/etc/gtk-3.0/settings.ini + tmux source /home/anon/etc/tmux/tmux.dark + rsync ~/var/www/startpage/styles/style.dark anon@gormless.xyz:/var/www/startpage/styles/style.css + sleep 0.1 && notify-send "Dark theme enabled." +} + +light() { + xrdb ~/etc/x11/xresources-light + cp ~/etc/mozilla/firefox/1vg7xwxk.anon-1615211770650/chrome/userChrome.light ~/etc/mozilla/firefox/1vg7xwxk.anon-1615211770650/chrome/userChrome.css + xnotifrestart + echo light > "$THEMECACHE" + cp ~/etc/gtk-3.0/light.ini ~/etc/gtk-3.0/settings.ini + tmux source /home/anon/etc/tmux/tmux.conf + rsync ~/var/www/startpage/styles/style.light anon@gormless.xyz:/var/www/startpage/styles/style.css + sleep 0.1 && notify-send "Light theme enabled" +} + +case "$1" in + -dark) + dark + ;; + -light) + light + ;; + -t) + test $(cat "$THEMECACHE") = 'dark' && light || dark + ;; + *) + echo "usage: switchtheme [-dark] [-light] [-t]" && exit 1 + ;; +esac diff --git a/bin/tile b/bin/tile @@ -0,0 +1,39 @@ +#!/bin/sh +# +# z3bra - 2014 (c) wtfpl +# arrange windows in a tiled pattern + +# get root window's size (beware, multi-head setups...) +ROOT=$(lswin -r) +SW=$(wattr w $ROOT) +SH=$(wattr h $ROOT) + +# default values for gaps and master area +PANEL=${PANEL:-0} +GAP=${GAP:-20} +MASTER=$((SW / 2)) + +# get current window id and its borderwidth +PFW=$(pfw) +BW=$(wattr b $PFW) + +# get the number of windows to put in the stacking area +MAX=$(lswin|grep -v $PFW|wc -l) + +# calculate usable screen size (without borders and gaps) +SW=$((SW - GAP - 2*BW)) +SH=$((SH - GAP - PANEL)) + +Y=$((0 + GAP + PANEL)) +# put current window in master area +wtp $GAP $Y $((MASTER - GAP - 2*BW)) $((SH - GAP - 2*BW)) $PFW + +# and now, stack up all remaining windows on the right +X=$((MASTER + GAP)) +W=$((SW - MASTER - GAP)) +H=$((SH / MAX - GAP - 2*BW)) + +for wid in $(lswin|grep -v $PFW); do + wtp $X $Y $W $H $wid + Y=$((Y + H + GAP + 2*BW)) +done diff --git a/bin/todmenu b/bin/todmenu @@ -0,0 +1,13 @@ +#!/bin/sh +export TODO=$HOME/usr/notes/todo + +todo="$(nl -n rz -s " " "$HOME/usr/notes/todo" | cut -c "6-$*" | dmenu -i -l 10 -p "Todo what?")" || exit 1 +test="$(echo "$todo" | cut -f "2-$*" -d " ")" +num=$(echo "$todo" | cut -f 1 -d " ") + +if test "$(grep "$test" "$HOME/usr/notes/todo")" = "" +then + todo "$todo" & notify-send -i /usr/local/share/icons/ubo-icons-0.1alpha/128x128/apps/mousepad.png "Added \"$todo\" to todo list" +else + todo -d "$num" & notify-send -i /usr/local/share/icons/ubo-icons-0.1alpha/128x128/apps/mousepad.png "Removed \"$test\" from todo list." +fi diff --git a/bin/todo b/bin/todo @@ -0,0 +1,33 @@ +#!/bin/sh +# +# z3bra - (c) wtfpl 2014 +# Manage a todo list. +# The file is just plain text, with one line per task. +# This script just provide "shorter" commands to append to the file and display +# its content. For more complex tasks, use other tools like `sed`. + +#Where's the file ? +TODO=${TODO:-$HOME/todo} + +list() { + # WOAH MUCH CLEVER!! + test -f $TODO && nl $TODO +} + +append() { + # append all arguments "as-is" to the file + echo "$*" >> $TODO +} + +delete() { + test -n "$1" || exit 1 + sed -i "${1}d" $TODO +} + +# delete line "$2" (see delete() function) +test "$1" = '-d' && delete "$2" && exit 0 + +# append arguments to the file, or print it otherwise +test -n "$*" && append $* || list + +exit 0 diff --git a/bin/togglebar b/bin/togglebar @@ -0,0 +1,9 @@ +#!/bin/sh + +if test -z "$(pgrep -f lemonbar)"; then + bar | sh 2>/dev/null & + cp "$HOME/etc/cwm/cwmrc-bar" "$HOME/etc/cwm/cwmrc" && pkill -SIGHUP cwm +else + pkill bar + cp "$HOME/etc/cwm/cwmrc-nobar" "$HOME/etc/cwm/cwmrc" && pkill -SIGHUP cwm +fi diff --git a/bin/transadd b/bin/transadd @@ -0,0 +1,5 @@ +#!/bin/sh + +trem='doas -u _transmission transmission-remote' + +$trem -a "$@" && notify-send "Torrent added." diff --git a/bin/ufetch b/bin/ufetch @@ -0,0 +1,89 @@ +#!/bin/sh +# +# ufetch-openbsd - tiny system info for openbsd + +## INFO + +# user is already defined +host="$(hostname)" +os="$(uname -sr)" +kernel="$(uname -v)" +uptime="$(uptime | awk -F, '{sub(".*up ",x,$1);print $1}' | sed -e 's/^[ \t]*//')" +packages="$(ls -d /var/db/pkg/* | wc -l | sed -e 's/^[ \t]*//')" +shell="$(basename "$SHELL")" +term="$(basename "$TERM")" + +## UI DETECTION + +if [ -n "${DE}" ]; then + ui="${DE}" + uitype='DE' +elif [ -n "${WM}" ]; then + ui="${WM}" + uitype='WM' +elif [ -n "${XDG_CURRENT_DESKTOP}" ]; then + ui="${XDG_CURRENT_DESKTOP}" + uitype='DE' +elif [ -n "${DESKTOP_SESSION}" ]; then + ui="${DESKTOP_SESSION}" + uitype='DE' +elif [ -f "${HOME}/.xinitrc" ]; then + ui="$(tail -n 1 "${HOME}/.xinitrc" | cut -d ' ' -f 2)" + uitype='WM' +elif [ -f "${HOME}/.xsession" ]; then + ui="$(tail -n 1 "${HOME}/.xsession" | cut -d ' ' -f 2)" + uitype='WM' +else + ui='unknown' + uitype='UI' +fi +ui="$(basename ${ui})" + +## COLOR BAR +col=$( + printf '' + for i in 1 2 3 4 5 6; do + printf '\033[9%sm▅▅' "$i" + done + printf '\033[0m\n' +) + +## DEFINE COLORS + +# probably don't change these +if [ -x "$(command -v tput)" ]; then + bold="$(tput bold)" + black="$(tput setaf 0 0 0 2>/dev/null)" + red="$(tput setaf 1 0 0 2>/dev/null)" + green="$(tput setaf 2 0 0 2>/dev/null)" + yellow="$(tput setaf 3 0 0 2>/dev/null)" + blue="$(tput setaf 4 0 0 2>/dev/null)" + magenta="$(tput setaf 5 0 0 2>/dev/null)" + cyan="$(tput setaf 6 0 0 2>/dev/null)" + white="$(tput setaf 7 0 0 2>/dev/null)" + reset="$(tput sgr0)" +fi + +# you can change these +lc="${reset}${red}" # labels +nc="${reset}${red}" # user and hostname +ic="${reset}" # info +c0="${reset}${red}" # first color +c1="${reset}${white}" # second color +c2="${reset}${red}" # third color + +## OUTPUT + +cat <<EOF + +${nc}${USER}${ic}@${nc}${host}${reset} +${lc}OS: ${ic}${os}${reset} +${lc}KERNEL: ${ic}${kernel}${reset} +${lc}UPTIME: ${ic}${uptime}${reset} +${lc}PACKAGES: ${ic}${packages}${reset} +${lc}SHELL: ${ic}${shell}${reset} +${lc}TERM: ${ic}${term}${reset} +${lc}${uitype}: ${ic}${ui}${reset} +${lc}COLORS: ${col}${reset} + +EOF diff --git a/bin/undock b/bin/undock @@ -0,0 +1,10 @@ +#!/bin/sh -e + +xrandr --output eDP-1 --auto --scale 1x1 --output DP-2 --off + +# update dpi +xrdb "$HOME/etc/x11/xresources" + +doas sysctl machdep.lidaction=1 + +xwallpaper --zoom /home/anon/usr/img/wal/full/wallhaven-6km8o6.jpg diff --git a/bin/viewshot b/bin/viewshot @@ -0,0 +1,7 @@ +#!/bin/sh -e + +dir="$HOME/usr/img/screenshots" + +num=$(find "$dir"|wc -l) +sel=$(sxiv -Ztoprn "$num" "$dir") +test -z "$sel" || echo "$sel" | xargs rm diff --git a/bin/wal b/bin/wal @@ -0,0 +1,20 @@ + +#!/bin/sh + +# This script does the following: +# Run by itself, set the wallpaper (at X start). +# If given a file, set that as the new wallpaper. +# If given a directory, choose random file in it. +# If wal is installed, also generates a colorscheme. + +# Location of link to wallpaper link. +bgloc="${XDG_DATA_HOME:-$HOME/.local/share/}/bg" + +trueloc="$(readlink -f "$1")" && +case "$(file --mime-type -b "$trueloc")" in + image/* ) ln -sf "$(readlink -f "$1")" "$bgloc" && notify-send -i "$bgloc" "Changing wallpaper..." ;; + application/x-not-regular-file ) ln -sf "$(find "$trueloc" -name *.jpg -o -name *.jpeg -o -name '*.png' -o -name '*.gif' -type f | sort -R | head -n 1)" "$bgloc" && notify-send -i "$bgloc" "Random Wallpaper chosen." ;; + *) notify-send "Error" "Not a valid image." ; exit 1;; +esac + +xwallpaper --zoom "$bgloc" diff --git a/bin/watch b/bin/watch @@ -0,0 +1,13 @@ +#!/bin/sh + +usage() { +echo usage: watch file +} + +test -z "$1" && usage && exit 1 + +while :; do +clear +cat $1 +sleep 2 +done diff --git a/bin/wireless b/bin/wireless @@ -0,0 +1,3 @@ +#!/usr/local/bin/dash + +echo "test" diff --git a/bin/xgamemenu b/bin/xgamemenu @@ -0,0 +1,14 @@ +#!/bin/sh + +cat <<EOF | pmenu | sh & +Doom st -e gzdoom +Flare flare +Minecraft ulimit -d "33554432"; multimc +Morrowind openmw +Quake + AD quakespasm -game ad + Quake quakespasm + Quake 3 ioquake3 + Xonotic xonotic-sdl +Worm drawterm -e worm +EOF diff --git a/bin/xgruupmenu b/bin/xgruupmenu @@ -0,0 +1,10 @@ +#!/bin/sh + +cat <<EOF | pmenu | sh & +* gruup -U +1 gruup -t 1 +2 gruup -t 2 +3 gruup -t 3 +4 gruup -t 4 +5 gruup -t 5 +EOF diff --git a/bin/xnotifmenu b/bin/xnotifmenu @@ -0,0 +1,42 @@ +#!/bin/sh + +playing() { +state="$(cmus-remote -C status | grep status | cut -f 2 -d " ")" +test -z "$state" && np="Nothing" +test -n "$state" && np="$(showmus)" +printf "$np" +} + +net() { +inter=$(echo -n $(ifconfig | awk '/ieee80211:/ { print $3" " "(" $8 ")" }')) +test $(ifconfig | awk '/ieee80211:/ { print $8}') == "psk" && echo "Airplane" || echo "$inter" +} + +battery() +{ + bat=$(apm -l) + stat=$(apm -a) + case $stat in + 1) + test $bat = 100 && st="=" || st="+" + ;; + 0) + test $bat = 100 && st="=" || st="-" + ;; + esac + printf "$st$bat%" +} + +email() { +unread="$(find "${XDG_DATA_HOME}"/mail/*/[Ii][Nn][Bb][Oo][Xx]/new/* -type f 2>/dev/null | wc -l 2>/dev/null | cut -c 8-$@)" +test -z $(pgrep -f mbsync) || icon="..." +printf "$unread$icon" +} + +cat <<EOF | pmenu | sh & +IMG:$HOME/var/theme/icons/system/health.png health show +IMG:/usr/local/share/icons/ubo-icons-0.1alpha/128x128/apps/audio-player.png notify-send -i /usr/local/share/icons/ubo-icons-0.1alpha/64x64/actions/media-playback-start.png "$(playing)" +IMG:/usr/local/share/icons/ubo-icons-0.1alpha/128x128/devices/network-wireless.png notify-send -i /usr/local/share/icons/ubo-icons-0.1alpha/128x128/devices/network-wireless.png "$(net)" +IMG:/usr/local/share/icons/ubo-icons-0.1alpha/128x128/apps/gnome-news.png notify-send -i /usr/local/share/icons/ubo-icons-0.1alpha/128x128/apps/gnome-news.png "You have $(cat /home/anon/etc/newsboat/newsupdate) unread articles." +IMG:/usr/local/share/icons/ubo-icons-0.1alpha/128x128/apps/email.png notify-send -i /usr/local/share/icons/ubo-icons-0.1alpha/128x128/apps/email.png "$(email) unread mails.\n" +EOF diff --git a/bin/xrootmenu b/bin/xrootmenu @@ -0,0 +1,21 @@ +#!/bin/sh + +cat <<EOF | pmenu | sh & +IMG:/home/anon/var/theme/icons/categories/applications.png + IMG:/usr/local/share/icons/ubo-icons-0.1alpha/128x128/apps/firefox-icon.png iridium + IMG:/home/anon/var/theme/icons/apps/firefox.png firefox + IMG:/usr/local/share/icons/ubo-icons-0.1alpha/128x128/actions/stock_people.png teams + IMG:/usr/local/share/icons/ubo-icons-0.1alpha/128x128/apps/gnome-news.png drawterm -e newsboat + IMG:/usr/local/share/icons/ubo-icons-0.1alpha/128x128/apps/email.png drawterm -e neomutt + IMG:/home/anon/var/theme/icons/categories/music.png drawterm -e dm cmus cmus + IMG:/usr/local/share/icons/ubo-icons-0.1alpha/128x128/apps/xchat.png drawterm -e dm irc catgirl poast +IMG:/usr/local/share/icons/ubo-icons-0.1alpha/128x128/apps/mousepad.png todmenu +IMG:/usr/local/share/icons/ubo-icons-0.1alpha/128x128/devices/network-wireless.png dmenuwireless +IMG:/home/anon/var/theme/icons/apps/scrot.png screenshot +IMG:/home/anon/var/theme/icons/categories/music.png + IMG:/home/anon/var/theme/icons/actions/media-next.png cmus-remote -n + IMG:/home/anon/var/theme/icons/actions/media-stop.png cmus-remote -s + IMG:/home/anon/var/theme/icons/actions/media-previous.png cmus-remote -r + IMG:/home/anon/var/theme/icons/actions/media-pause.png cmus-remote -u +IMG:/home/anon/var/theme/icons/apps/terminal.png drawterm +EOF diff --git a/bin/yawee b/bin/yawee @@ -0,0 +1,20 @@ +#!/bin/sh + +while IFS=: read ev wid; do + case $ev in + # window creation: center window on the screen (except docks, menus or similar) + 16) wattr o $wid || corner md $wid ;; + + # mapping requests: just set a special border for docks, menus and + # similar. Focus other windows + 19) wattr o $wid \ + && chwb -s 2 -c 0x323232 $wid \ + || focus $wid ;; + + # when a window gets deleted, focus another one + 18) wattr $(pfw) || focus prev 2>/dev/null;; + + # Focus windows when the mouse cursor enter them + 7) focus $wid ;; + esac +done diff --git a/bin/zoom b/bin/zoom @@ -0,0 +1,12 @@ +#!/bin/sh +doas sysctl kern.video.record=1 +doas sysctl kern.audio.record=1 + +export ENABLE_WASM=1 + +iridium --incognito --user-data-dir="/tmp" --app=https://calls.disroot.org ; + +ENABLE_WASM=0 + +doas sysctl kern.video.record=0 +doas sysctl kern.audio.record=0 diff --git a/etc/.profile b/etc/.profile @@ -0,0 +1,42 @@ +PATH=/usr/local/jdk-1.8.0/bin:/usr/local/jdk-11/jre/bin:$HOME/bin:$HOME/.local/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin:/usr/games:/usr/local/plan9/bin +export HOME PATH TERM +export ENV=$HOME/etc/shell/profile +export PLAN9=/usr/local/plan9 + +export LC_CTYPE="en_US.UTF-8" +export LESSCHARSET=utf-8 + +export XDG_CONFIG_HOME=$HOME/etc +export XDG_CACHE_HOME=$HOME/var/cache +export XDG_DATA_HOME=$HOME/var +export XDG_MUSIC_DIR=/mnt/ddrive/mus/ + +export HISTFILE="$HOME/etc/shell/hist" +export HISTSIZE=9999999 +export SAVEHIST=9999999 + +export VISUAL='E' + +export IRCNICK='potato' +export TODO=$HOME/usr/notes/todo +export GNUPGHOME=$HOME/var/gnupg +export NO_COLOR=true + +export LESS=-iMR +export LESSSECURE=1 +export QT_QPA_PLATFORMTHEME=qt5ct + +export BROWSER=firefox +export EDITOR=E +export unset FCEDIT VISUAL +export GS_FONTPATH=$PLAN9/postscript/font +export MPAGE="-t -bLetter" +export PAGER=nobs +export H=`hostname | sed 's/\..*//'` +export PS1="$H% " +export font=$PLAN9/font/lucm/unicode.9.font +export home=$HOME +export prompt="$H% " +export user=$USER + +ulimit -c 0 diff --git a/etc/catgirl/poast b/etc/catgirl/poast @@ -0,0 +1,4 @@ +nick = potato +real = potato +host = irc.poa.st +join = #poast diff --git a/etc/cmus/autosave b/etc/cmus/autosave @@ -0,0 +1,202 @@ +set aaa_mode=artist +set altformat_current= %F +set altformat_playlist= %f%= %d +set altformat_title=%f +set altformat_trackwin= %f%= %d +set auto_expand_albums_follow=true +set auto_expand_albums_search=true +set auto_expand_albums_selcur=true +set auto_reshuffle=true +set buffer_seconds=10 +set color_cmdline_attr=default +set color_cmdline_bg=default +set color_cmdline_fg=default +set color_cur_sel_attr=default +set color_error=darkgray +set color_info=default +set color_separator=gray +set color_statusline_attr=default +set color_statusline_bg=default +set color_statusline_fg=default +set color_titleline_attr=default +set color_titleline_bg=default +set color_titleline_fg=default +set color_trackwin_album_attr=bold +set color_trackwin_album_bg=default +set color_trackwin_album_fg=default +set color_win_attr=default +set color_win_bg=default +set color_win_cur=default +set color_win_cur_attr=default +set color_win_cur_sel_attr=default +set color_win_cur_sel_bg=default +set color_win_cur_sel_fg=magenta +set color_win_dir=default +set color_win_fg=default +set color_win_inactive_cur_sel_attr=default +set color_win_inactive_cur_sel_bg=default +set color_win_inactive_cur_sel_fg=gray +set color_win_inactive_sel_attr=default +set color_win_inactive_sel_bg=default +set color_win_inactive_sel_fg=gray +set color_win_sel_attr=default +set color_win_sel_bg=default +set color_win_sel_fg=magenta +set color_win_title_attr=default +set color_win_title_bg=default +set color_win_title_fg=default +set confirm_run=true +set continue=true +set continue_album=true +set device=/dev/rcd0c +set display_artist_sort_name=false +set follow=false +set format_current= %a - %l -%3n. %t%= %y +set format_playlist= %-21%a %3n. %t%= %y %d %{?X!=0?%3X ? } +set format_playlist_va= %-21%A %3n. %t (%a)%= %y %d %{?X!=0?%3X ? } +set format_statusline= %{status} %{?show_playback_position?%{position} %{?duration?/ %{duration} }?%{?duration?%{duration} }}- %{total} %{?bpm>0?at %{bpm} BPM }%{?volume>=0?vol: %{?lvolume!=rvolume?%{lvolume},%{rvolume} ?%{volume} }}%{?stream?buf: %{buffer} }%{?show_current_bitrate & bitrate>=0? %{bitrate} kbps }%=%{?repeat_current?repeat current?%{?play_library?%{playlist_mode} from %{?play_sorted?sorted }library?playlist}} | %1{continue}%1{follow}%1{repeat}%1{shuffle} +set format_title=%a - %l - %t (%y) +set format_trackwin=%3n. %t%= %y %d +set format_trackwin_album= %l %= %{albumduration} +set format_trackwin_va=%3n. %t (%a)%= %y %d +set format_treewin= %l +set format_treewin_artist=%a +set icecast_default_charset=ISO-8859-1 +set id3_default_charset=ISO-8859-1 +set input.cdio.priority=50 +set input.cue.priority=50 +set input.flac.priority=50 +set input.mad.priority=55 +set input.opus.priority=50 +set input.vorbis.priority=50 +set input.wav.priority=50 +set input.wavpack.priority=50 +set lib_add_filter= +set lib_sort=albumartist date album discnumber tracknumber title filename play_count +set mouse=false +set mpris=true +set output_plugin=sndio +set passwd= +set pl_sort= +set play_library=true +set play_sorted=false +set repeat=true +set repeat_current=false +set replaygain=disabled +set replaygain_limit=true +set replaygain_preamp=0.000000 +set resume=true +set rewind_offset=5 +set scroll_offset=2 +set set_term_title=true +set show_all_tracks=true +set show_current_bitrate=false +set show_hidden=false +set show_playback_position=true +set show_remaining_time=false +set shuffle=false +set skip_track_info=false +set smart_artist_sort=true +set softvol=false +set softvol_state=80 80 +set start_view=tree +set status_display_program=cmusfm +set stop_after_queue=false +set time_show_leading_zero=true +set tree_width_max=0 +set tree_width_percent=33 +set wrap_search=true +bind browser backspace browser-up +bind browser i toggle show_hidden +bind browser space win-activate +bind browser u win-update +bind common ! push shell +bind common + vol +10% +bind common , seek -1m +bind common - vol -10% +bind common . seek +1m +bind common / search-start +bind common 1 view tree +bind common 2 view sorted +bind common 3 view playlist +bind common 4 view queue +bind common 5 view browser +bind common 6 view filters +bind common 7 view settings +bind common = vol +10% +bind common ? search-b-start +bind common C toggle continue +bind common D win-remove +bind common E win-add-Q +bind common F push filter +bind common G win-bottom +bind common I echo {} +bind common L push live-filter +bind common M toggle play_library +bind common N search-prev +bind common P win-mv-before +bind common U win-update-cache +bind common [ vol +1% +0 +bind common ] vol +0 +1% +bind common ^B win-page-up +bind common ^C echo ^Q to detatch, or :quit to exit. +bind common ^D win-half-page-down +bind common ^E win-scroll-down +bind common ^F win-page-down +bind common ^L refresh +bind common ^R toggle repeat_current +bind common ^U win-half-page-up +bind common ^Y win-scroll-up +bind common a win-add-l +bind common b player-next +bind common c player-pause +bind common delete win-remove +bind common down win-down +bind common e win-add-q +bind common end win-bottom +bind common enter win-activate +bind common f toggle follow +bind common g win-top +bind common h seek -5 +bind common home win-top +bind common i win-sel-cur +bind common j win-down +bind common k win-up +bind common l seek +5 +bind common left seek -5 +bind common m toggle aaa_mode +bind common mlb_click_selected win-activate +bind common mouse_scroll_down win-down +bind common mouse_scroll_up win-up +bind common n search-next +bind common o toggle play_sorted +bind common p win-mv-after +bind common page_down win-page-down +bind common page_up win-page-up +bind common q echo ^Q to detatch, or :quit to exit. +bind common r toggle repeat +bind common right seek +5 +bind common s toggle shuffle +bind common space win-toggle +bind common t toggle show_remaining_time +bind common tab win-next +bind common u update-cache +bind common up win-up +bind common v player-stop +bind common x player-play +bind common y win-add-p +bind common z player-prev +bind common { vol -1% -0 +bind common } vol -0 -1% +fset 90s=date>=1990&date<2000 +fset classical=genre="Classical" +fset country=genre="*country*"&!artist="*Pepes*" +fset genre=classical +fset hard=genre="*rock*"|genre="*metal*" +fset jazz=genre="*jazz*" +fset missing-tag=!stream&(artist=""|album=""|title=""|tracknumber=-1|date=-1) +fset mp3=filename="*.mp3" +fset ogg=filename="*.ogg" +fset ogg-or-mp3=ogg|mp3 +fset unheard=play_count=0 +factivate diff --git a/etc/cmus/cmusfm.conf b/etc/cmus/cmusfm.conf @@ -0,0 +1,18 @@ +# authentication +user = +key = + +# regular expressions for name parsers +format-localfile = "^(?A.+) - (?T.+)\.[^.]+$" +format-shoutcast = "^(?A.+) - (?T.+)$" +format-coverfile = "^(cover|folder)\.jpg$" + +now-playing-localfile = "yes" +now-playing-shoutcast = "yes" +submit-localfile = "yes" +submit-shoutcast = "yes" +notification = "yes" + +# scrobbling service +service-api-url = "https://ws.audioscrobbler.com/2.0/" +service-auth-url = "https://www.last.fm/api/auth" diff --git a/etc/emacs/config.org b/etc/emacs/config.org @@ -0,0 +1,821 @@ +#+TITLE: Emacs Config +#+AUTHOR: Mitch Taylor +#+Description: Mitch's custom emacs config + +* TABLE OF CONTENTS :TOC: +- [[#package-management][PACKAGE MANAGEMENT]] + - [[#setup-packageel-to-work-with-melpa][Setup package.el to work with MELPA.]] + - [[#installing-use-package][Installing use-package]] + - [[#evil-mode][Evil Mode]] + - [[#general-keybindings][General Keybindings]] +- [[#startup-performance][STARTUP PERFORMANCE]] + - [[#garbage-collection][Garbage collection]] + - [[#native-compil][Native Compil]] +- [[#aesthetics][AESTHETICS]] + - [[#all-the-icons][All the icons]] + - [[#display-line-numbers-and-truncated-lines][Display Line Numbers and Truncated Lines]] + - [[#fonts][Fonts]] + - [[#gui-settings][GUI settings]] + - [[#modeline][Modeline]] + - [[#theme][Theme]] +- [[#buffers-and-bookmarks][BUFFERS AND BOOKMARKS]] +- [[#dashboard][DASHBOARD]] + - [[#configuring-dashboard][Configuring Dashboard]] + - [[#dashboard-in-emacsclient][Dashboard in Emacsclient]] +- [[#default-browser][DEFAULT BROWSER]] +- [[#delete-selection-mode][DELETE SELECTION MODE]] +- [[#emojis][EMOJIS]] +- [[#evaluate-elisp-expressions][EVALUATE ELISP EXPRESSIONS]] +- [[#file-manager-dired][FILE MANAGER (DIRED)]] + - [[#keybindings-to-open-dired][Keybindings To Open Dired]] + - [[#keybindings-within-dired][Keybindings Within Dired]] + - [[#keybindings-for-peep-dired-mode][Keybindings For Peep-Dired-Mode]] +- [[#files][FILES]] + - [[#file-related-keybindings][File-related Keybindings]] + - [[#installing-some-useful-file-related-modules][Installing Some Useful File-related Modules]] + - [[#useful-file-functions][Useful File Functions]] + - [[#zooming-in-and-out][Zooming In and Out]] +- [[#general-keybindings-1][GENERAL KEYBINDINGS]] +- [[#ivy-counselswiper][IVY (COUNSEL/SWIPER)]] + - [[#installing-ivy-and-basic-setup][Installing Ivy And Basic Setup]] + - [[#making-m-x-great-again][Making M-x Great Again!]] + - [[#ivy-posframe][Ivy-posframe]] +- [[#language-support][LANGUAGE SUPPORT]] +- [[#magit][MAGIT]] +- [[#org-mode][ORG-MODE]] + - [[#defining-a-few-things][Defining A Few Things]] + - [[#enabling-org-bullets][Enabling Org Bullets]] + - [[#org-link-abbreviations][Org Link Abbreviations]] + - [[#org-todo-keywords][Org Todo Keywords]] + - [[#source-code-block-tag-expansion][Source Code Block Tag Expansion]] + - [[#source-code-block-syntax-highlighting][Source Code Block Syntax Highlighting]] + - [[#automatically-create-table-of-contents][Automatically Create Table of Contents]] + - [[#make-m-ret-not-add-blank-lines][Make M-RET Not Add Blank Lines]] + - [[#org-export-to-manpage-format][Org Export To Manpage Format]] + - [[#automatically-tangle][Automatically tangle]] +- [[#perspective][PERSPECTIVE]] +- [[#projectile][PROJECTILE]] +- [[#registers][REGISTERS]] +- [[#runtime-performance][RUNTIME PERFORMANCE]] +- [[#scrolling][SCROLLING]] +- [[#shells][SHELLS]] + - [[#eshell][Eshell]] + - [[#vterm][Vterm]] +- [[#which-key][WHICH KEY]] +- [[#writeroom-mode][WRITEROOM MODE]] + +* PACKAGE MANAGEMENT +** Setup package.el to work with MELPA. + + #+begin_src emacs-lisp + (require 'package) + (add-to-list 'package-archives + '("melpa" . "https://melpa.org/packages/")) + (package-refresh-contents) + (package-initialize) + + #+end_src + +** Installing use-package + + #+begin_src emacs-lisp + ;; Bootstrap 'use-package' + (eval-after-load 'gnutls + '(add-to-list 'gnutls-trustfiles "/etc/ssl/cert.pem")) + (unless (package-installed-p 'use-package) + (package-refresh-contents) + (package-install 'use-package)) + (eval-when-compile + (require 'use-package)) + (require 'bind-key) + (setq use-package-always-ensure t) + #+end_src + +** Evil Mode +Evil is an extensible 'vi' layer for Emacs. It emulates the main features of Vim, and provides facilities for writing custom extensions. Evil Collection is also installed since it adds 'evil' bindings to parts of Emacs that the standard Evil package does not cover, such as: calenda, help-mode adn ibuffer. + +#+begin_src emacs-lisp +(use-package evil + :init ;; tweak evil's configuration before loading it + (setq evil-want-integration t) ;; This is optional since it's already set to t by default. + (setq evil-want-keybinding nil) + (setq evil-vsplit-window-right t) + (setq evil-split-window-below t) + (evil-mode)) +(use-package evil-collection + :after evil + :config + (setq evil-collection-mode-list '(dashboard dired ibuffer)) + (evil-collection-init)) +(use-package evil-tutor) +#+end_src +** General Keybindings +General.el allows us to set keybindings. As a longtime Doom Emacs user, I have grown accustomed to using SPC as the prefix key. General makes setting keybindings (especially with SPC) much easier. All of the keybindings we set later in the config depend on general being loaded. + +#+begin_src emacs-lisp +(use-package general + :config + (general-evil-setup t)) +#+end_src + +* STARTUP PERFORMANCE + This section is where it make emacs faster to load. +** Garbage collection +Makes startup faster by reducing the frequency of garbage collection +#+begin_src emacs-lisp +;; Using garbage magic hack. + (use-package gcmh + :config + (gcmh-mode 1)) +;; Setting garbage collection threshold +(setq gc-cons-threshold 402653184 + gc-cons-percentage 0.6) + +;; Profile emacs startup +(add-hook 'emacs-startup-hook + (lambda () + (message "*** Emacs loaded in %s with %d garbage collections." + (format "%.2f seconds" + (float-time + (time-subtract after-init-time before-init-time))) + gcs-done))) + +;; Silence compiler warnings as they can be pretty disruptive (setq comp-async-report-warnings-errors nil) +#+end_src +** Native Compil +#+begin_src emacs-lisp +;; Silence compiler warnings as they can be pretty disruptive +(if (boundp 'comp-deferred-compilation) + (setq comp-deferred-compilation nil) + (setq native-comp-deferred-compilation nil)) +;; In noninteractive sessions, prioritize non-byte-compiled source files to +;; prevent the use of stale byte-code. Otherwise, it saves us a little IO time +;; to skip the mtime checks on every *.elc file. +(setq load-prefer-newer noninteractive) +#+end_src + +* AESTHETICS + +** All the icons +This is an icon set that can be used with dashboard, dired, ibuffer and other Emacs programs. + +#+begin_src emacs-lisp +(use-package all-the-icons) +#+end_src + +** Display Line Numbers and Truncated Lines +#+begin_src emacs-lisp +(global-display-line-numbers-mode 1) +(global-visual-line-mode t) +#+end_src + +** Fonts + +#+begin_src emacs-lisp +(set-face-attribute 'default nil :family "Spleen" :height 110) +(set-face-attribute 'fixed-pitch nil :family "Spleen" :height 110) +(set-face-attribute 'variable-pitch nil :family "IBM Plex Serif" :height 120) + +(add-to-list 'default-frame-alist '(font . "Spleen-11")) +(set-face-attribute 'font-lock-comment-face nil + :slant 'italic) +(set-face-attribute 'font-lock-keyword-face nil + :slant 'italic) +(setq global-prettify-symbols-mode t) +#+end_src + +** GUI settings + +Disable menu, toolbar, and scrollbar +#+begin_src emacs-lisp + (menu-bar-mode -1) + (tool-bar-mode -1) + (scroll-bar-mode -1) +#+end_src + +** Modeline + +#+begin_src emacs-lisp +(use-package spaceline) +(spaceline-spacemacs-theme) +#+end_src + +** Theme + +#+begin_src emacs-lisp +(use-package poet-theme) +(add-hook 'text-mode-hook + (lambda () + (variable-pitch-mode 1))) +(load-theme 'poet-monochrome t) +#+end_src + +* BUFFERS AND BOOKMARKS + +#+begin_src emacs-lisp +(nvmap :prefix "SPC" + "b b" '(ibuffer :which-key "Ibuffer") + "b c" '(clone-indirect-buffer-other-window :which-key "Clone indirect buffer other window") + "b k" '(kill-current-buffer :which-key "Kill current buffer") + "b n" '(next-buffer :which-key "Next buffer") + "b p" '(previous-buffer :which-key "Previous buffer") + "b B" '(ibuffer-list-buffers :which-key "Ibuffer list buffers") + "b K" '(kill-buffer :which-key "Kill buffer")) +(nvmap :prefix "SPC" + "B a" '(bookmark-set :whichkey "Add bookmark") + "B l" '(list-bookmarks :whichkey "List bookmarks")) +#+end_src + +* DASHBOARD +Emacs Dashboard is an extensible startup screen showing you recent files, bookmarks, agenda items and an Emacs banner. + +** Configuring Dashboard + +#+begin_src emacs-lisp +(use-package dashboard + :init ;; tweak dashboard config before loading it + (setq dashboard-set-heading-icons t) + (setq dashboard-set-file-icons t) + (setq dashboard-banner-logo-title "For our blood and soil and youth!") + ;;(setq dashboard-startup-banner 'logo) ;; use standard emacs logo as banner + (setq dashboard-startup-banner "~/etc/emacs/emacs-banner.png") ;; use custom image as banner + (setq dashboard-center-content t) ;; set to 't' for centered content + (setq dashboard-items '((recents . 5) + (agenda . 5 ) + (bookmarks . 3) + (projects . 3) + (registers . 3))) + :config + (dashboard-setup-startup-hook) + (dashboard-modify-heading-icons '((recents . "file-text") + (bookmarks . "book")))) +#+end_src + +** Dashboard in Emacsclient +This setting ensures that emacsclient always opens on *dashboard* rather than *scratch*. + +#+begin_src emacs-lisp +(setq initial-buffer-choice (lambda () (get-buffer "*dashboard*"))) +#+end_src + +* DEFAULT BROWSER + +#+begin_src emacs-lisp +(setq browse-url-browser-function 'browse-url-firefox) +#+end_src + +* DELETE SELECTION MODE +By default in Emacs, we don't have ability to select text, and then start typing and our new text replaces the selection. Let's fix that! + +#+begin_src emacs-lisp +(delete-selection-mode t) +#+end_src + +* EMOJIS +Emojify is an Emacs extension to display emojis. It can display github style emojis like :smile: or plain ascii ones like :). + +#+begin_src emacs-lisp +(use-package emojify + :hook (after-init . global-emojify-mode)) +#+end_src + +* EVALUATE ELISP EXPRESSIONS +I choose to use the format 'SPC e' plus 'key' for these (I also use 'SPC e' for 'eww' keybindings). + +| COMMAND | DESCRIPTION | KEYBINDING | +|-----------------+------------------------------------------------+------------| +| eval-buffer | /Evaluate elisp in buffer/ | SPC e b | +| eval-defun | /Evaluate the defun containing or after point/ | SPC e d | +| eval-expression | /Evaluate an elisp expression/ | SPC e e | +| eval-last-sexp | /Evaluate elisp expression before point/ | SPC e l | +| eval-region | /Evaluate elisp in region/ | SPC e r | + +#+begin_src emacs-lisp +(nvmap :states '(normal visual) :keymaps 'override :prefix "SPC" + "e b" '(eval-buffer :which-key "Eval elisp in buffer") + "e d" '(eval-defun :which-key "Eval defun") + "e e" '(eval-expression :which-key "Eval elisp expression") + "e l" '(eval-last-sexp :which-key "Eval last sexression") + "e r" '(eval-region :which-key "Eval region")) +#+end_src + +* FILE MANAGER (DIRED) +Dired is the file manager within Emacs. Below, I setup keybindings for image previews (peep-dired). I've chosen the format of 'SPC d' plus 'key'. + +** Keybindings To Open Dired +| COMMAND | DESCRIPTION | KEYBINDING | +|------------+------------------------------------+------------| +| dired | /Open dired file manager/ | SPC d d | +| dired-jump | /Jump to current directory in dired/ | SPC d j | + +** Keybindings Within Dired +| COMMAND | DESCRIPTION | KEYBINDING | +|--------------------+---------------------------------------------+------------| +| dired-view-file | /View file in dired/ | SPC d v | +| dired-up-directory | /Go up in directory tree/ | h | +| dired-find-file | /Go down in directory tree (or open if file)/ | l | + +** Keybindings For Peep-Dired-Mode +| COMMAND | DESCRIPTION | KEYBINDING | +|----------------------+------------------------------------------+------------| +| peep-dired | /Toggle previews within dired/ | SPC d p | +| peep-dired-next-file | /Move to next file in peep-dired-mode/ | j | +| peep-dired-prev-file | /Move to previous file in peep-dired-mode/ | k | + +#+begin_src emacs-lisp +(use-package all-the-icons-dired) +(use-package dired-open) +(use-package peep-dired) + +(nvmap :states '(normal visual) :keymaps 'override :prefix "SPC" + "d d" '(dired :which-key "Open dired") + "d j" '(dired-jump :which-key "Dired jump to current") + "d p" '(peep-dired :which-key "Peep-dired")) + +(with-eval-after-load 'dired + ;;(define-key dired-mode-map (kbd "M-p") 'peep-dired) + (evil-define-key 'normal dired-mode-map (kbd "h") 'dired-up-directory) + (evil-define-key 'normal dired-mode-map (kbd "l") 'dired-open-file) ; use dired-find-file instead if not using dired-open package + (evil-define-key 'normal peep-dired-mode-map (kbd "j") 'peep-dired-next-file) + (evil-define-key 'normal peep-dired-mode-map (kbd "k") 'peep-dired-prev-file)) + +(add-hook 'peep-dired-hook 'evil-normalize-keymaps) +;; Get file icons in dired +(add-hook 'dired-mode-hook 'all-the-icons-dired-mode) +;; With dired-open plugin, you can launch external programs for certain extensions +;; For example, I set all .png files to open in 'sxiv' and all .mp4 files to open in 'mpv' +(setq dired-open-extensions '(("gif" . "sxiv") + ("jpg" . "sxiv") + ("png" . "sxiv") + ("mkv" . "mpv") + ("mp4" . "mpv"))) +#+end_src + +* FILES +** File-related Keybindings + +#+begin_src emacs-lisp +(nvmap :states '(normal visual) :keymaps 'override :prefix "SPC" + "." '(find-file :which-key "Find file") + "f f" '(find-file :which-key "Find file") + "f r" '(counsel-recentf :which-key "Recent files") + "f s" '(save-buffer :which-key "Save file") + "f u" '(sudo-edit-find-file :which-key "Sudo find file") + "f y" '(dt/show-and-copy-buffer-path :which-key "Yank file path") + "f C" '(copy-file :which-key "Copy file") + "f D" '(delete-file :which-key "Delete file") + "f R" '(rename-file :which-key "Rename file") + "f S" '(write-file :which-key "Save file as...") + "f U" '(sudo-edit :which-key "Sudo edit file")) +#+end_src + +** Installing Some Useful File-related Modules +Though 'recentf' is one way to find recent files although I prefer using 'counsel-recentf'. + +#+begin_src emacs-lisp +(use-package recentf + :config + (recentf-mode)) +(use-package sudo-edit) ;; Utilities for opening files with sudo + +#+end_src + +** Useful File Functions +#+begin_src emacs-lisp +(defun dt/show-and-copy-buffer-path () + "Show and copy the full path to the current file in the minibuffer." + (interactive) + ;; list-buffers-directory is the variable set in dired buffers + (let ((file-name (or (buffer-file-name) list-buffers-directory))) + (if file-name + (message (kill-new file-name)) + (error "Buffer not visiting a file")))) +(defun dt/show-buffer-path-name () + "Show the full path to the current file in the minibuffer." + (interactive) + (let ((file-name (buffer-file-name))) + (if file-name + (progn + (message file-name) + (kill-new file-name)) + (error "Buffer not visiting a file")))) +#+end_src + +** Zooming In and Out +You can use the bindings CTRL plus =/- for zooming in/out. You can also use CTRL plus the mouse wheel for zooming in/out. + +#+begin_src emacs-lisp +;; zoom in/out like we do everywhere else. +(global-set-key (kbd "C-=") 'text-scale-increase) +(global-set-key (kbd "C--") 'text-scale-decrease) +(global-set-key (kbd "<C-wheel-up>") 'text-scale-increase) +(global-set-key (kbd "<C-wheel-down>") 'text-scale-decrease) +#+end_src + +* GENERAL KEYBINDINGS +General.el allows us to set keybindings. As a longtime Doom Emacs user, I have grown accustomed to using SPC as the prefix key. It certainly is easier on the hands than constantly using CTRL for a prefix. + +#+begin_src emacs-lisp +(nvmap :keymaps 'override :prefix "SPC" + "SPC" '(counsel-M-x :which-key "M-x") + "c c" '(compile :which-key "Compile") + "c C" '(recompile :which-key "Recompile") + "h r r" '((lambda () (interactive) (load-file "~/etc/emacs/init.el")) :which-key "Reload emacs config") + "t t" '(toggle-truncate-lines :which-key "Toggle truncate lines")) +(nvmap :keymaps 'override :prefix "SPC" + "m *" '(org-ctrl-c-star :which-key "Org-ctrl-c-star") + "m +" '(org-ctrl-c-minus :which-key "Org-ctrl-c-minus") + "m ." '(counsel-org-goto :which-key "Counsel org goto") + "m e" '(org-export-dispatch :which-key "Org export dispatch") + "m f" '(org-footnote-new :which-key "Org footnote new") + "m h" '(org-toggle-heading :which-key "Org toggle heading") + "m i" '(org-toggle-item :which-key "Org toggle item") + "m n" '(org-store-link :which-key "Org store link") + "m o" '(org-set-property :which-key "Org set property") + "m t" '(org-todo :which-key "Org todo") + "m x" '(org-toggle-checkbox :which-key "Org toggle checkbox") + "m B" '(org-babel-tangle :which-key "Org babel tangle") + "m I" '(org-toggle-inline-images :which-key "Org toggle inline imager") + "m T" '(org-todo-list :which-key "Org todo list") + "o a" '(org-agenda :which-key "Org agenda") + ) +#+end_src + +* IVY (COUNSEL/SWIPER) +Ivy, counsel and swiper are a generic completion mechanism for Emacs. Ivy-rich allows us to add descriptions alongside the commands in M-x. + +** Installing Ivy And Basic Setup +#+begin_src emacs-lisp +(use-package counsel + :after ivy + :config (counsel-mode)) +(use-package ivy + :defer 0.1 + :diminish + :bind + (("C-c C-r" . ivy-resume) + ("C-x B" . ivy-switch-buffer-other-window)) + :custom + (setq ivy-count-format "(%d/%d) ") + (setq ivy-use-virtual-buffers t) + (setq enable-recursive-minibuffers t) + :config + (ivy-mode)) +(use-package ivy-rich + :after ivy + :custom + (ivy-virtual-abbreviate 'full + ivy-rich-switch-buffer-align-virtual-buffer t + ivy-rich-path-style 'abbrev) + :config + (ivy-set-display-transformer 'ivy-switch-buffer + 'ivy-rich-switch-buffer-transformer) + (ivy-rich-mode 1)) ;; this gets us descriptions in M-x. +(use-package swiper + :after ivy + :bind (("C-s" . swiper) + ("C-r" . swiper))) +#+end_src + +** Making M-x Great Again! +The following line removes the annoying '^' in things like counsel-M-x and other ivy/counsel prompts. The default '^' string means that if you type something immediately after this string only completion candidates that begin with what you typed are shown. Most of the time, I'm searching for a command without knowing what it begins with though. + +#+begin_src emacs-lisp +(setq ivy-initial-inputs-alist nil) +#+end_src + +Smex is a package the makes M-x remember our history. Now M-x will show our last used commands first. +#+begin_src emacs-lisp +(use-package smex) +(smex-initialize) +#+end_src + +** Ivy-posframe +Ivy-posframe is an ivy extension, which lets ivy use posframe to show its candidate menu. Some of the settings below involve: ++ ivy-posframe-display-functions-alist -- sets the display position for specific programs ++ ivy-posframe-height-alist -- sets the height of the list displayed for specific programs + +Available functions (positions) for 'ivy-posframe-display-functions-alist' ++ ivy-posframe-display-at-frame-center ++ ivy-posframe-display-at-window-center ++ ivy-posframe-display-at-frame-bottom-left ++ ivy-posframe-display-at-window-bottom-left ++ ivy-posframe-display-at-frame-bottom-window-center ++ ivy-posframe-display-at-point ++ ivy-posframe-display-at-frame-top-center + +=NOTE:= If the setting for 'ivy-posframe-display' is set to 'nil' (false), anything that is set to 'ivy-display-function-fallback' will just default to their normal position in Doom Emacs (usually a bottom split). However, if this is set to 't' (true), then the fallback position will be centered in the window. + +#+begin_src emacs-lisp + (use-package ivy-posframe + :init + (setq ivy-posframe-display-functions-alist + '((swiper . ivy-posframe-display-at-point) + (complete-symbol . ivy-posframe-display-at-point) + (counsel-M-x . ivy-display-function-fallback) + (counsel-esh-history . ivy-posframe-display-at-window-center) + (counsel-describe-function . ivy-display-function-fallback) + (counsel-describe-variable . ivy-display-function-fallback) + (counsel-find-file . ivy-display-function-fallback) + (counsel-recentf . ivy-display-function-fallback) + (counsel-register . ivy-posframe-display-at-frame-bottom-window-center) + (dmenu . ivy-posframe-display-at-frame-top-center) + (nil . ivy-posframe-display)) + ivy-posframe-height-alist + '((swiper . 20) + (dmenu . 20) + (t . 10))) + :config + (ivy-posframe-mode 1)) ; 1 enables posframe-mode, 0 disables it. +#+end_src + +* LANGUAGE SUPPORT +Adding packages for programming langauges, so we can have nice things like syntax highlighting. + +#+begin_src emacs-lisp +(use-package markdown-mode) +#+end_src + +* MAGIT +A git client for Emacs. Often cited as a killer feature for Emacs. + +#+begin_src emacs-lisp +(setq bare-git-dir (concat "--git-dir=" (expand-file-name "~/.dotfiles"))) +(setq bare-work-tree (concat "--work-tree=" (expand-file-name "~"))) +;; use maggit on git bare repos like dotfiles repos, don't forget to change `bare-git-dir' and `bare-work-tree' to your needs +(defun me/magit-status-bare () + "set --git-dir and --work-tree in `magit-git-global-arguments' to `bare-git-dir' and `bare-work-tree' and calls `magit-status'" + (interactive) + (require 'magit-git) + (add-to-list 'magit-git-global-arguments bare-git-dir) + (add-to-list 'magit-git-global-arguments bare-work-tree) + (call-interactively 'magit-status)) + +;; if you use `me/magit-status-bare' you cant use `magit-status' on other other repos you have to unset `--git-dir' and `--work-tree' +;; use `me/magit-status' insted it unsets those before calling `magit-status' +(defun me/magit-status () + "removes --git-dir and --work-tree in `magit-git-global-arguments' and calls `magit-status'" + (interactive) + (require 'magit-git) + (setq magit-git-global-arguments (remove bare-git-dir magit-git-global-arguments)) + (setq magit-git-global-arguments (remove bare-work-tree magit-git-global-arguments)) + (call-interactively 'magit-status)) + +(use-package magit) + #+end_src + +* ORG-MODE + +** Defining A Few Things +#+begin_src emacs-lisp +(add-hook 'org-mode-hook 'org-indent-mode) +(setq org-directory "~/usr/doc/" + org-agenda-files '("~/usr/doc/agenda.org") + org-default-notes-file (expand-file-name "notes.org" org-directory) + org-ellipsis " ▼ " + org-log-done 'time + org-journal-dir "~/usr/doc/journal/" + org-journal-date-format "%B %d, %Y (%A) " + org-journal-file-format "%Y-%m-%d.org" + org-hide-emphasis-markers t) +(setq org-src-preserve-indentation nil + org-src-tab-acts-natively t + org-edit-src-content-indentation 0) +#+end_src + +** Enabling Org Bullets +Org-bullets gives us attractive bullets rather than asterisks. + +#+begin_src emacs-lisp +(use-package org-bullets) +(add-hook 'org-mode-hook (lambda () (org-bullets-mode 1))) +#+end_src + +** Org Link Abbreviations +This allows for the use of abbreviations that will get expanded out into a lengthy URL. + +#+begin_src emacs-lisp +;; An example of how this works. +;; [[arch-wiki:Name_of_Page][Description]] +;; [[openports:x11/dwm][test]] +(setq org-link-abbrev-alist + '(("openports" . "https://openports.se/") + ("ddg" . "https://duckduckgo.com/?q=") + ("wiki" . "https://en.wikipedia.org/wiki/"))) +#+end_src + +** Org Todo Keywords +This lets us create the various TODO tags that we can use in Org. + +#+begin_src emacs-lisp + (setq org-todo-keywords ; This overwrites the default Doom org-todo-keywords + '((sequence + "TODO(t)" ; A task that is ready to be tackled + "BLOG(b)" ; Blog writing assignments + "GYM(g)" ; Things to accomplish at the gym + "PROJ(p)" ; A project that contains other tasks + "VIDEO(v)" ; Video assignments + "WAIT(w)" ; Something is holding up this task + "|" ; The pipe necessary to separate "active" states and "inactive" states + "DONE(d)" ; Task has been completed + "CANCELLED(c)" ))) ; Task has been cancelled +#+end_src + +** Source Code Block Tag Expansion +Org-tempo is a package that allows for '<s' followed by TAB to expand to a begin_src tag. Other expansions available include: + +| Typing the below + TAB | Expands to ... | +|------------------------+-----------------------------------------| +| <a | '#+BEGIN_EXPORT ascii' … '#+END_EXPORT | +| <c | '#+BEGIN_CENTER' … '#+END_CENTER' | +| <C | '#+BEGIN_COMMENT' … '#+END_COMMENT' | +| <e | '#+BEGIN_EXAMPLE' … '#+END_EXAMPLE' | +| <E | '#+BEGIN_EXPORT' … '#+END_EXPORT' | +| <h | '#+BEGIN_EXPORT html' … '#+END_EXPORT' | +| <l | '#+BEGIN_EXPORT latex' … '#+END_EXPORT' | +| <q | '#+BEGIN_QUOTE' … '#+END_QUOTE' | +| <s | '#+BEGIN_SRC' … '#+END_SRC' | +| <v | '#+BEGIN_VERSE' … '#+END_VERSE' | + +#+begin_src emacs-lisp +(use-package org-tempo + :ensure nil) ;; tell use-package not to try to install org-tempo since it's already there. +#+end_src + +** Source Code Block Syntax Highlighting +We want the same syntax highlighting in source blocks as in the native language files. + +#+begin_src emacs-lisp +(setq org-src-fontify-natively t + org-src-tab-acts-natively t + org-confirm-babel-evaluate nil + org-edit-src-content-indentation 0) +#+end_src + +** Automatically Create Table of Contents +Toc-org helps you to have an up-to-date table of contents in org files without exporting (useful useful for README files on GitHub). Use :TOC: to create the table. + +#+begin_src emacs-lisp + (use-package toc-org + :commands toc-org-enable + :init (add-hook 'org-mode-hook 'toc-org-enable)) +#+end_src + +** Make M-RET Not Add Blank Lines +#+begin_src emacs-lisp +(setq org-blank-before-new-entry (quote ((heading . nil) + (plain-list-item . nil)))) +#+end_src + +** Org Export To Manpage Format +#+begin_src emacs-lisp +(use-package ox-man + :ensure nil) +#+end_src + +** Automatically tangle +#+begin_src emacs-lisp +(use-package org-auto-tangle + :defer t + :hook (org-mode . org-auto-tangle-mode)) +#+end_src + +* PERSPECTIVE +The Perspective package provides multiple named workspaces (or "perspectives") in Emacs, similar to multiple desktops in window managers like Awesome and XMonad. Each perspective has its own buffer list and its own window layout. This makes it easy to work on many separate projects without getting lost in all the buffers. Switching to a perspective activates its window configuration, and when in a perspective, only its buffers are available. + +#+begin_src emacs-lisp +(use-package perspective + :bind + ("C-x C-b" . persp-list-buffers) ; or use a nicer switcher, see below + :config + (persp-mode)) +#+end_src + +* PROJECTILE +#+begin_src emacs-lisp +(use-package projectile + :config + (projectile-global-mode 1)) +#+end_src + +* REGISTERS +Emacs registers are compartments where you can save text, rectangles and positions for later use. Once you save text or a rectangle in a register, you can copy it into the buffer once or many times; once you save a position in a register, you can jump back to that position once or many times. The default GNU Emacs keybindings for these commands (with the exception of counsel-register) involves 'C-x r' followed by one or more other keys. I wanted to make this a little more user friendly, so I chose to replace the 'C-x r' part of the key chords with 'SPC r'. + +| COMMAND | DESCRIPTION | KEYBINDING | +|----------------------------------+----------------------------------+------------| +| copy-to-register | /Copy to register/ | SPC r c | +| frameset-to-register | /Frameset to register/ | SPC r f | +| insert-register | /Insert contents of register/ | SPC r i | +| jump-to-register | /Jump to register/ | SPC r j | +| list-registers | /List registers/ | SPC r l | +| number-to-register | /Number to register/ | SPC r n | +| counsel-register | /Interactively choose a register/ | SPC r r | +| view-register | /View a register/ | SPC r v | +| window-configuration-to-register | /Window configuration to register/ | SPC r w | +| increment-register | /Increment register/ | SPC r + | +| point-to-register | /Point to register/ | SPC r SPC | + +#+begin_src emacs-lisp +(nvmap :prefix "SPC" + "r c" '(copy-to-register :which-key "Copy to register") + "r f" '(frameset-to-register :which-key "Frameset to register") + "r i" '(insert-register :which-key "Insert register") + "r j" '(jump-to-register :which-key "Jump to register") + "r l" '(list-registers :which-key "List registers") + "r n" '(number-to-register :which-key "Number to register") + "r r" '(counsel-register :which-key "Choose a register") + "r v" '(view-register :which-key "View a register") + "r w" '(window-configuration-to-register :which-key "Window configuration to register") + "r +" '(increment-register :which-key "Increment register") + "r SPC" '(point-to-register :which-key "Point to register")) +#+end_src + +* RUNTIME PERFORMANCE +Dial the GC threshold back down so that garbage collection happens more frequently but in less time. +#+begin_src emacs-lisp +;; Make gc pauses faster by decreasing the threshold. +(setq gc-cons-threshold (* 2 1000 1000)) +#+end_src + +* SCROLLING +Emacs' default scrolling is annoying because of the sudden half-page jumps. Also, I wanted to adjust the scrolling speed. + +#+begin_src emacs-lisp +(setq scroll-conservatively 101) ;; value greater than 100 gets rid of half page jumping +(setq mouse-wheel-scroll-amount '(3 ((shift) . 3))) ;; how many lines at a time +(setq mouse-wheel-progressive-speed t) ;; accelerate scrolling +(setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse +#+end_src + +* SHELLS +In my configs, all of my shells (bash, fish, zsh and the ESHELL) require my shell-color-scripts-git package to be installed. On Arch Linux, you can install it from the AUR. Otherwise, go to my shell-color-scripts repository on GitLab to get it. + +** Eshell +Eshell is an Emacs 'shell' that is written in Elisp. + +#+begin_src emacs-lisp +(nvmap :prefix "SPC" + "e h" '(counsel-esh-history :which-key "Eshell history") + "e s" '(eshell :which-key "Eshell")) +#+end_src + ++ 'eshell-rc-script' -- your profile for eshell; like a bashrc for eshell. ++ 'eshell-aliases-file' -- sets an aliases file for the eshell. + +#+begin_src emacs-lisp +(use-package eshell-syntax-highlighting + :after esh-mode) + +(setq eshell-rc-script (concat user-emacs-directory "eshell/profile") + eshell-aliases-file (concat user-emacs-directory "eshell/aliases") + eshell-history-size 5000 + eshell-buffer-maximum-lines 5000 + eshell-hist-ignoredups t + eshell-scroll-to-bottom-on-input t + eshell-destroy-buffer-when-process-dies t + eshell-visual-commands'("ksh" "ssh" "top")) +#+end_src + +** Vterm +Vterm is a terminal emulator within Emacs. The 'shell-file-name' setting sets the shell to be used in M-x shell, M-x term, M-x ansi-term and M-x vterm. By default, the shell is set to 'ksh but could change it to 'bash' or 'zsh' if you prefer. + +#+begin_src emacs-lisp +(use-package vterm) +(setq shell-file-name "/bin/ksh" + vterm-max-scrollback 5000) +#+end_src + +#+begin_src emacs-lisp +(nvmap :prefix "SPC" + "v" '(vterm :which-key "Vterm")) +#+end_src + +* WHICH KEY +Which-key is a minor mode for Emacs that displays the key bindings following your currently entered incomplete command (a prefix) in a popup. + +=NOTE:= Which-key has an annoying bug that in some fonts and font sizes, the bottom row in which key gets covered up by the modeline. + +#+begin_src emacs-lisp +(use-package which-key + :init + (setq which-key-side-window-location 'bottom + which-key-sort-order #'which-key-key-order-alpha + which-key-sort-uppercase-first nil + which-key-add-column-padding 1 + which-key-max-display-columns nil + which-key-min-display-lines 6 + which-key-side-window-slot -10 + which-key-side-window-max-height 0.25 + which-key-idle-delay 0.8 + which-key-max-description-length 25 + which-key-allow-imprecise-window-fit t + which-key-separator " → " )) +(which-key-mode) +#+end_src + +* WRITEROOM MODE +A minor mode for Emacs that implements a distraction-free writing mode similar to the famous Writeroom editor for OS X. + +#+begin_src emacs-lisp +(use-package writeroom-mode) +#+end_src diff --git a/etc/emacs/emacs-banner.png b/etc/emacs/emacs-banner.png Binary files differ. diff --git a/etc/emacs/init.el b/etc/emacs/init.el @@ -0,0 +1,54 @@ +(org-babel-load-file + (expand-file-name + "config.org" + user-emacs-directory)) +(custom-set-variables + ;; custom-set-variables was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + '(exwm-floating-border-color "#191b20") + '(fci-rule-color "#5B6268") + '(highlight-tail-colors + ((("#333a38" "#99bb66" "green") + . 0) + (("#2b3d48" "#46D9FF" "brightcyan") + . 20))) + '(jdee-db-active-breakpoint-face-colors (cons "#1B2229" "#51afef")) + '(jdee-db-requested-breakpoint-face-colors (cons "#1B2229" "#98be65")) + '(jdee-db-spec-breakpoint-face-colors (cons "#1B2229" "#3f444a")) + '(objed-cursor-color "#ff6c6b") + '(org-agenda-files nil) + '(package-selected-packages + '(straight org-auto-tangle spaceline emms-player-mpd emms mpdel vterm org-bullets poet-theme mood-line simple-modeline emojify elfeed-goodies elfeed acme-theme writeroom-mode magit perspective sudo-edit dashboard ivy-rich counsel toc-org gcmh general doom-modeline evil-collection evil use-package)) + '(pdf-view-midnight-colors (cons "#bbc2cf" "#282c34")) + '(rustic-ansi-faces + ["#282c34" "#ff6c6b" "#98be65" "#ECBE7B" "#51afef" "#c678dd" "#46D9FF" "#bbc2cf"]) + '(vc-annotate-background "#282c34") + '(vc-annotate-color-map + (list + (cons 20 "#98be65") + (cons 40 "#b4be6c") + (cons 60 "#d0be73") + (cons 80 "#ECBE7B") + (cons 100 "#e6ab6a") + (cons 120 "#e09859") + (cons 140 "#da8548") + (cons 160 "#d38079") + (cons 180 "#cc7cab") + (cons 200 "#c678dd") + (cons 220 "#d974b7") + (cons 240 "#ec7091") + (cons 260 "#ff6c6b") + (cons 280 "#cf6162") + (cons 300 "#9f585a") + (cons 320 "#6f4e52") + (cons 340 "#5B6268") + (cons 360 "#5B6268"))) + '(vc-annotate-very-old-color nil)) +(custom-set-faces + ;; custom-set-faces was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + ) diff --git a/etc/ex/nexrc b/etc/ex/nexrc @@ -0,0 +1,80 @@ +""" MACROS (KEYBINDINGS) """ +" double space, whole file +map gd :%!sed G +" delete comments +map gu :g/#.*$/d +" quit +map ZQ :q! +" write and quit as root +map ZD :w !doas tee % +" go to top +map gg 1G +" compile a document +map gc :w! :!compiler "%" +" sync website +map ge :w! :!elephant +" remove whitespace +map gt mm:%s/[[:space:]]*$// `m +" format paragraphs +map gp :?$?,//!fmt -pw 72 +" toggle line wrapping +map gw :set wraplen=72 +" wrap lines +map K 72|lF r +" format text +map gf :%!fmt -w 72 -s +" find declaration of the following local identifier +map v mx`x[[(n`x`` +" find declaration of the following global identifier +map V mx`x1Gn`x`` +" tmux buffer manipulation +map gx !'mtmux load-buffer - +map gy !'mtmux load-buffer - u +map gp :r!tmux show-buffer +" conjoin lines +map gJ Jx +" re-run commands globally +map g& :a% + +""" TUNABLE OPTIONS """ +" Autoindentation +set ai +" Discard control characters +set bf +" Char to edit command-line history. +set cedit= +" Case insensitive searches +"set ignorecase +" Hide whitespace and EOL characters +set nolist +" show line numbers +"set nu +" Display a row/column ruler +set ruler +" Additional section boundaries +set sections=SeAhBhChDh +" Shell env for ! commands +set shell=/bin/sh +" Show matching brackets +set showmatch +" Display current editor mode +set showmode +" Shift width in spaces +set sw=3 +" TAB width in spaces +set tabstop=3 +" Verbose error messages +set verbose +" Jump over the first comment block in source files +set comment +" Enable search-as-you-type +set searchincr +" Briefly jump the cursor to a matching bracket/parenthesis when typing +set showmatch matchtime=1 +" Display more error messages +set verbose +" Make regular expressions in commands and searches case insensitive, +" unless there is an upper-case letter +set iclower +" show line numbers +set number diff --git a/etc/firefox/chrome/LICENSE b/etc/firefox/chrome/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019-2020 mut-ex + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/etc/firefox/chrome/add.svg b/etc/firefox/chrome/add.svg @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 16 16" width="16pt" height="16pt"><defs><clipPath id="_clipPath_99lNy5iVNzBT4GJ61eRvLV4FbIJfEq2X"><rect width="16" height="16"/></clipPath></defs><g clip-path="url(#_clipPath_99lNy5iVNzBT4GJ61eRvLV4FbIJfEq2X)"><clipPath id="_clipPath_PSmJUw238rlrF3iVjoZbuIy7ApS18eFZ"><rect x="0" y="0" width="16" height="16" transform="matrix(1,0,0,1,0,0)" fill="rgb(255,255,255)"/></clipPath><g clip-path="url(#_clipPath_PSmJUw238rlrF3iVjoZbuIy7ApS18eFZ)"><g><defs><filter id="hr6gh2N39iEKGHUEUXPQ1VpI5CnFB6KP" x="-200%" y="-200%" width="400%" height="400%" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB"><feGaussianBlur xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" stdDeviation="1.42936090628390283"/><feOffset xmlns="http://www.w3.org/2000/svg" dx="0" dy="0" result="pf_100_offsetBlur"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#000000" flood-opacity="0.65"/><feComposite xmlns="http://www.w3.org/2000/svg" in2="pf_100_offsetBlur" operator="in" result="pf_100_dropShadow"/><feBlend xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" in2="pf_100_dropShadow" mode="normal"/></filter></defs><g filter="url(#hr6gh2N39iEKGHUEUXPQ1VpI5CnFB6KP)"><mask id="_mask_kcpkNUVqAh3jvumwkzpWdE5WZ1TZaYfV" x="-200%" y="-200%" width="400%" height="400%"><rect x="-200%" y="-200%" width="400%" height="400%" style="fill:white;"/><path d=" M 12.487 8 L 3.513 8 M 8 3.513 L 8 12.487" fill-rule="evenodd" fill="black" stroke="none"/></mask><path d=" M 12.487 8 L 3.513 8 M 8 3.513 L 8 12.487" fill-rule="evenodd" fill="rgb(0,0,0)" mask="url(#_mask_kcpkNUVqAh3jvumwkzpWdE5WZ1TZaYfV)" vector-effect="non-scaling-stroke" stroke-width="3" stroke="rgb(255,255,255)" stroke-opacity="100" stroke-linejoin="miter" stroke-linecap="round" stroke-miterlimit="3"/><path d=" M 12.487 8 L 3.513 8 M 8 3.513 L 8 12.487" fill-rule="evenodd" fill="rgb(0,0,0)"/></g></g></g></g></svg>+ \ No newline at end of file diff --git a/etc/firefox/chrome/demo.gif b/etc/firefox/chrome/demo.gif Binary files differ. diff --git a/etc/firefox/chrome/left-arrow.svg b/etc/firefox/chrome/left-arrow.svg @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 16 16" width="16pt" height="16pt"><defs><clipPath id="_clipPath_z1ZWMbJsyhiOU2QHbFJoUMhQtGZ43GMW"><rect width="16" height="16"/></clipPath></defs><g clip-path="url(#_clipPath_z1ZWMbJsyhiOU2QHbFJoUMhQtGZ43GMW)"><defs><filter id="VFDVuOTf5K98KT4GTZIfo6t2oUeOZ3OQ" x="-200%" y="-200%" width="400%" height="400%" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB"><feGaussianBlur xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" stdDeviation="1.42936090628390283"/><feOffset xmlns="http://www.w3.org/2000/svg" dx="0" dy="0" result="pf_100_offsetBlur"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#000000" flood-opacity="1"/><feComposite xmlns="http://www.w3.org/2000/svg" in2="pf_100_offsetBlur" operator="in" result="pf_100_dropShadow"/><feBlend xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" in2="pf_100_dropShadow" mode="normal"/></filter></defs><g filter="url(#VFDVuOTf5K98KT4GTZIfo6t2oUeOZ3OQ)"><path d=" M 6.459 8.003 L 12.444 2.018 C 12.609 1.853 12.7 1.633 12.7 1.399 C 12.7 1.164 12.609 0.945 12.444 0.78 L 11.92 0.256 C 11.755 0.091 11.535 0 11.301 0 C 11.067 0 10.847 0.091 10.682 0.256 L 3.555 7.382 C 3.39 7.548 3.3 7.768 3.3 8.003 C 3.3 8.239 3.39 8.459 3.555 8.625 L 10.676 15.744 C 10.84 15.909 11.06 16 11.294 16 C 11.529 16 11.749 15.909 11.913 15.744 L 12.438 15.22 C 12.779 14.879 12.779 14.323 12.438 13.982 L 6.459 8.003 L 6.459 8.003 Z " fill="rgb(255,255,255)"/></g></g></svg>+ \ No newline at end of file diff --git a/etc/firefox/chrome/right-arrow.svg b/etc/firefox/chrome/right-arrow.svg @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 16 16" width="16pt" height="16pt"><defs><clipPath id="_clipPath_eVFSl4zvN5oTHPzyWFXDKL3KvwnaLKzR"><rect width="16" height="16"/></clipPath></defs><g clip-path="url(#_clipPath_eVFSl4zvN5oTHPzyWFXDKL3KvwnaLKzR)"><clipPath id="_clipPath_whDLWxO2Es9F8hEuhZ0p3GS4myfSGk47"><rect x="0" y="0" width="16" height="16" transform="matrix(1,0,0,1,0,0)" fill="rgb(255,255,255)"/></clipPath><g clip-path="url(#_clipPath_whDLWxO2Es9F8hEuhZ0p3GS4myfSGk47)"><g><g filter="url(#ypa27OiaF8P4AvdUhn4W059B0fCNWPt7)"><path d=" M 9.541 8.003 L 3.556 2.018 C 3.391 1.853 3.3 1.633 3.3 1.399 C 3.3 1.164 3.391 0.945 3.556 0.78 L 4.08 0.256 C 4.245 0.091 4.465 0 4.699 0 C 4.933 0 5.153 0.091 5.318 0.256 L 12.445 7.382 C 12.61 7.548 12.7 7.768 12.7 8.003 C 12.7 8.239 12.61 8.459 12.445 8.625 L 5.324 15.744 C 5.16 15.909 4.94 16 4.706 16 C 4.471 16 4.251 15.909 4.087 15.744 L 3.562 15.22 C 3.221 14.879 3.221 14.323 3.562 13.982 L 9.541 8.003 L 9.541 8.003 Z " fill="rgb(255,255,255)"/></g><defs><filter id="ypa27OiaF8P4AvdUhn4W059B0fCNWPt7" x="-200%" y="-200%" width="400%" height="400%" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB"><feGaussianBlur xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" stdDeviation="1.42936090628390283"/><feOffset xmlns="http://www.w3.org/2000/svg" dx="0" dy="0" result="pf_100_offsetBlur"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#000000" flood-opacity="1"/><feComposite xmlns="http://www.w3.org/2000/svg" in2="pf_100_offsetBlur" operator="in" result="pf_100_dropShadow"/><feBlend xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" in2="pf_100_dropShadow" mode="normal"/></filter></defs></g></g></g></svg>+ \ No newline at end of file diff --git a/etc/firefox/chrome/userChrome.css b/etc/firefox/chrome/userChrome.css @@ -0,0 +1,355 @@ + :root { + + --fg: #3c3836; + --bg: #fbf1c7; + --active: #d79921; + --inactive: #b57614; + + /* Minimal Functional Fox variables*/ + --mff-bg: var(--bg); + --mff-icon-color: var(--fg); + --mff-nav-toolbar-padding: 8px; + --mff-sidebar-bg: var(--mff-bg); + --mff-sidebar-color: var(--fg); + --mff-tab-border-radius: 0px; + --mff-tab-color: var(--fg); + --mff-tab-font-family: "Spleen", Medium; + --mff-tab-font-size: 11pt; + --mff-tab-font-weight: 400; + --mff-tab-height: 32px; + --mff-tab-pinned-bg: var(--inactive); + --mff-tab-selected-bg: var(--active); + --mff-tab-soundplaying-bg: var(--inactive); + --mff-urlbar-color: var(--fg); + --mff-urlbar-focused-color: var(--fg); + --mff-urlbar-font-family: "Spleen 32x64", Medium; + --mff-urlbar-font-size: 12pt; + --mff-urlbar-font-weight: 700; + --mff-urlbar-results-color: var(--fg); + --mff-urlbar-results-font-family: "Spleen 32x64", Medium; + --mff-urlbar-results-font-size: 12pt; + --mff-urlbar-results-font-weight: 700; + --mff-urlbar-results-url-color: var(--inactive); + /* --mff-tab-selected-bg: linear-gradient(90deg, rgba(232,74,95,1) 0%, rgba(255,132,124,1) 50%, rgba(254,206,168,1) 100%); */ + /* --mff-urlbar-font-weight: 600; */ + + /* Overriden Firefox variables*/ + --autocomplete-popup-background: var(--mff-bg) !important; + --default-arrowpanel-background: var(--mff-bg) !important; + --default-arrowpanel-color: var(--fg) !important; + --lwt-toolbarbutton-icon-fill: var(--mff-icon-color) !important; + --panel-disabled-color: var(--fg); + --toolbar-bgcolor: var(--mff-bg) !important; + --urlbar-separator-color: transparent !important; +} + +/* + _____ _ ___ ___ + |_ _/_\ | _ ) __| + | |/ _ \| _ \__ \ + |_/_/ \_\___/___/ + +*/ + +.tab-background[selected="true"] { + background: var(--mff-tab-selected-bg) !important; +} + +.tab-background:not[visuallyselected] { + background: var(--mff-tab-selected-bg) !important; + opacity: 0.5 !important; +} + +/* This positions the tabs under the navaigator container */ +#titlebar { + -moz-box-ordinal-group: 3 !important; +} + +.tabbrowser-tab::after, +.tabbrowser-tab::before { + border-left: none !important; +} + +.tab-background { + border: none !important; +} + +.tabbrowser-arrowscrollbox { + margin-inline-start: 4px !important; + margin-inline-end: 0px !important; +} + +.tab-close-button { + display: none !important; +} + +.tab-text { + font-family: var(--mff-tab-font-family); + font-weight: var(--mff-tab-font-weight); + font-size: var(--mff-tab-font-size) !important; + color: var(--mff-tab-color); +} + +/* Hide the favicon for tabs */ +hbox.tab-content .tab-icon-image { + display: none !important; +} + +/* Show the favicon for tabs that are pinned */ +hbox.tab-content[pinned=true] .tab-icon-image { + display: initial !important; +} + +hbox.tab-content[pinned=true] .tab-text { + display: none !important; +} + +#tabbrowser-tabs { + --tab-loading-fill: var(--fg) !important; + +} + +.tab-label-container:not([textoverflow]) { + display: flex; + overflow: hidden; + justify-content: center; +width: 50% !important; + max-width: 50% !important; + min-width: 50% !important; +} + +/* .tab-label-container::after { + content: "?" !important; + +} */ + +.tab-line { + display: none !important; +} + +.tabbrowser-tab { + border-radius: var(--mff-tab-border-radius) !important; + border-width: 0; + height: var(--mff-tab-height) !important; + margin-bottom: 4px !important; + margin-inline-end: 4px !important; + margin-top: 4px !important; + max-height: var(--mff-tab-height) !important; + min-height: var(--mff-tab-height) !important; +} + +.tabbrowser-tab[soundplaying="true"] { + background-color: var(--mff-tab-soundplaying-bg) !important; +} + +#tabs-newtab-button { + list-style-image: url("add.svg") !important; + opacity: 0.7; +} + +.tab-icon-sound { + display: none !important; +} + +/* + _____ ___ ___ _ ___ _ ___ +|_ _/ _ \ / _ \| | | _ ) /_\ | _ \ + | || (_) | (_) | |__| _ \/ _ \| / + |_| \___/ \___/|____|___/_/ \_\_|_\ +*/ + +.urlbar-icon > image { + fill: var(--mff-icon-color) !important; + color: var(--mff-icon-color) !important; +} + +.toolbarbutton-text { + color: var(--mff-icon-color) !important; +} +.urlbar-icon { + color: var(--mff-icon-color) !important; + +} + +.toolbarbutton-icon { +/* filter: drop-shadow(0 0 0.75rem crimson); */ +} + +#urlbar-results { + font-family: var(--mff-urlbar-results-font-family); + font-weight: var(--mff-urlbar-results-font-weight); + font-size: var(--mff-urlbar-results-font-size) !important; + color: var(--mff-urlbar-results-color) !important; +} + +.urlbarView-row[type="bookmark"] > span{ + color: green !important; +} + +.urlbarView-row[type="switchtab"] > span{ + color: orange !important; +} + +.urlbarView-url, .search-panel-one-offs-container { + color: var(--mff-urlbar-results-url-color) !important; + font-family: var(--mff-urlbar-font-family); + font-weight: var(--mff-urlbar-results-font-weight); + font-size: var(--mff-urlbar-font-size) !important; +} + +.urlbarView-favicon, .urlbarView-type-icon { + display: none !important; +} + +#urlbar-input { + font-size: var(--mff-urlbar-font-size) !important; + color: var(--mff-urlbar-color) !important; + font-family: var(--mff-urlbar-font-family) !important; + font-weight: var(--mff-urlbar-font-weight)!important; + text-align: center !important; +} + +#tracking-protection-icon-container, #identity-box { + display: none; +} + +#back-button > .toolbarbutton-icon{ + --backbutton-background: transparent !important; + border: none !important; +} + +#back-button { + list-style-image: url("left-arrow.svg") !important; +} + +#forward-button { + list-style-image: url("right-arrow.svg") !important; +} + +toolbar { + background-image: none !important; +} + +#urlbar-background { + opacity: .98 !important; +} + +#navigator-toolbox, toolbaritem { + border: none !important; +} + +#urlbar-background { + background-color: var(--mff-bg) !important; + border: none !important; +} + +.toolbar-items { + background-color: var(--mff-bg) !important; +} + +#sidebar-search-container { + background-color: var(--mff-sidebar-bg) !important; +} + +box.panel-arrowbox { + display: none; +} + +box.panel-arrowcontent { + border-radius: 8px !important; + border: none !important; +} + +tab.tabbrowser-tab { + overflow: hidden; +} + +tab.tabbrowser-tab:hover { + box-shadow: 0 1px 4px rgba(0,0,0,.05); +} + +image#star-button { + display: none; +} + +toolbar#nav-bar { + padding: var(--mff-nav-toolbar-padding) !important; +} + +toolbar#nav-bar { + padding: 4px !important; +} + +#urlbar { + max-width: 70% !important; + margin: 0 15% !important; + /* position: unset!important; */; +} + +#urlbar-input:focus { + color: var(--mff-urlbar-focused-color) !important; +} + + +.megabar[breakout-extend="true"]:not([open="true"]) > #urlbar-background { + box-shadow: none !important; + background-color: transparent !important; +} + +toolbarbutton { + box-shadow: none !important; +} + + +/* + ___ ___ ___ ___ ___ _ ___ + / __|_ _| \| __| _ ) /_\ | _ \ + \__ \| || |) | _|| _ \/ _ \| / + |___/___|___/|___|___/_/ \_\_|_\ +*/ + +.close-icon, .urlbar-icon { + fill: var(--mff-icon-color) !important; +} + +.sidebar-placesTree { + color: var(--mff-sidebar-color) !important; +} + +#sidebar-switcher-target { +/* color: white !important; */ +} + +#sidebar-box { + --sidebar-background-color: var(--mff-sidebar-bg) !important; +} + +splitter#sidebar-splitter { + opacity: 0 !important; +} + +splitter#sidebar-splitter { + border: none !important; + background-color: transparent !important; +} + +image#sidebar-icon { + display: none; +} + + +/* + _ ___ ___ _____ _____ _ _ _ ___ _ + /_\ | _ \ _ \/ _ \ \ / / _ \/_\ | \| | __| | + / _ \| / / (_) \ \/\/ /| _/ _ \| .` | _|| |__ + /_/ \_\_|_\_|_\\___/ \_/\_/ |_|/_/ \_\_|\_|___|____| + */ + +.panel-arrowcontent { + padding: 0px !important; + margin: 0px !important; +} + +toolbarseparator { + display: none; +} diff --git a/etc/firefox/chrome/userChrome.dark b/etc/firefox/chrome/userChrome.dark @@ -0,0 +1,355 @@ + :root { + + --fg: #ebdbb2; + --bg: #282828; + --active: #d79921; + --inactive: #a89984; + + /* Minimal Functional Fox variables*/ + --mff-bg: var(--bg); + --mff-icon-color: var(--fg); + --mff-nav-toolbar-padding: 8px; + --mff-sidebar-bg: var(--mff-bg); + --mff-sidebar-color: var(--fg); + --mff-tab-border-radius: 0px; + --mff-tab-color: var(--fg); + --mff-tab-font-family: "Spleen", Medium; + --mff-tab-font-size: 11pt; + --mff-tab-font-weight: 400; + --mff-tab-height: 32px; + --mff-tab-pinned-bg: var(--inactive); + --mff-tab-selected-bg: var(--active); + --mff-tab-soundplaying-bg: var(--inactive); + --mff-urlbar-color: var(--fg); + --mff-urlbar-focused-color: var(--fg); + --mff-urlbar-font-family: "Spleen 32x64", Medium; + --mff-urlbar-font-size: 12pt; + --mff-urlbar-font-weight: 700; + --mff-urlbar-results-color: var(--fg); + --mff-urlbar-results-font-family: "Spleen 32x64", Medium; + --mff-urlbar-results-font-size: 12pt; + --mff-urlbar-results-font-weight: 700; + --mff-urlbar-results-url-color: var(--inactive); + /* --mff-tab-selected-bg: linear-gradient(90deg, rgba(232,74,95,1) 0%, rgba(255,132,124,1) 50%, rgba(254,206,168,1) 100%); */ + /* --mff-urlbar-font-weight: 600; */ + + /* Overriden Firefox variables*/ + --autocomplete-popup-background: var(--mff-bg) !important; + --default-arrowpanel-background: var(--mff-bg) !important; + --default-arrowpanel-color: var(--fg) !important; + --lwt-toolbarbutton-icon-fill: var(--mff-icon-color) !important; + --panel-disabled-color: var(--fg); + --toolbar-bgcolor: var(--mff-bg) !important; + --urlbar-separator-color: transparent !important; +} + +/* + _____ _ ___ ___ + |_ _/_\ | _ ) __| + | |/ _ \| _ \__ \ + |_/_/ \_\___/___/ + +*/ + +.tab-background[selected="true"] { + background: var(--mff-tab-selected-bg) !important; +} + +.tab-background:not[visuallyselected] { + background: var(--mff-tab-selected-bg) !important; + opacity: 0.5 !important; +} + +/* This positions the tabs under the navaigator container */ +#titlebar { + -moz-box-ordinal-group: 3 !important; +} + +.tabbrowser-tab::after, +.tabbrowser-tab::before { + border-left: none !important; +} + +.tab-background { + border: none !important; +} + +.tabbrowser-arrowscrollbox { + margin-inline-start: 4px !important; + margin-inline-end: 0px !important; +} + +.tab-close-button { + display: none !important; +} + +.tab-text { + font-family: var(--mff-tab-font-family); + font-weight: var(--mff-tab-font-weight); + font-size: var(--mff-tab-font-size) !important; + color: var(--mff-tab-color); +} + +/* Hide the favicon for tabs */ +hbox.tab-content .tab-icon-image { + display: none !important; +} + +/* Show the favicon for tabs that are pinned */ +hbox.tab-content[pinned=true] .tab-icon-image { + display: initial !important; +} + +hbox.tab-content[pinned=true] .tab-text { + display: none !important; +} + +#tabbrowser-tabs { + --tab-loading-fill: var(--fg) !important; + +} + +.tab-label-container:not([textoverflow]) { + display: flex; + overflow: hidden; + justify-content: center; +width: 50% !important; + max-width: 50% !important; + min-width: 50% !important; +} + +/* .tab-label-container::after { + content: "?" !important; + +} */ + +.tab-line { + display: none !important; +} + +.tabbrowser-tab { + border-radius: var(--mff-tab-border-radius) !important; + border-width: 0; + height: var(--mff-tab-height) !important; + margin-bottom: 4px !important; + margin-inline-end: 4px !important; + margin-top: 4px !important; + max-height: var(--mff-tab-height) !important; + min-height: var(--mff-tab-height) !important; +} + +.tabbrowser-tab[soundplaying="true"] { + background-color: var(--mff-tab-soundplaying-bg) !important; +} + +#tabs-newtab-button { + list-style-image: url("add.svg") !important; + opacity: 0.7; +} + +.tab-icon-sound { + display: none !important; +} + +/* + _____ ___ ___ _ ___ _ ___ +|_ _/ _ \ / _ \| | | _ ) /_\ | _ \ + | || (_) | (_) | |__| _ \/ _ \| / + |_| \___/ \___/|____|___/_/ \_\_|_\ +*/ + +.urlbar-icon > image { + fill: var(--mff-icon-color) !important; + color: var(--mff-icon-color) !important; +} + +.toolbarbutton-text { + color: var(--mff-icon-color) !important; +} +.urlbar-icon { + color: var(--mff-icon-color) !important; + +} + +.toolbarbutton-icon { +/* filter: drop-shadow(0 0 0.75rem crimson); */ +} + +#urlbar-results { + font-family: var(--mff-urlbar-results-font-family); + font-weight: var(--mff-urlbar-results-font-weight); + font-size: var(--mff-urlbar-results-font-size) !important; + color: var(--mff-urlbar-results-color) !important; +} + +.urlbarView-row[type="bookmark"] > span{ + color: green !important; +} + +.urlbarView-row[type="switchtab"] > span{ + color: orange !important; +} + +.urlbarView-url, .search-panel-one-offs-container { + color: var(--mff-urlbar-results-url-color) !important; + font-family: var(--mff-urlbar-font-family); + font-weight: var(--mff-urlbar-results-font-weight); + font-size: var(--mff-urlbar-font-size) !important; +} + +.urlbarView-favicon, .urlbarView-type-icon { + display: none !important; +} + +#urlbar-input { + font-size: var(--mff-urlbar-font-size) !important; + color: var(--mff-urlbar-color) !important; + font-family: var(--mff-urlbar-font-family) !important; + font-weight: var(--mff-urlbar-font-weight)!important; + text-align: center !important; +} + +#tracking-protection-icon-container, #identity-box { + display: none; +} + +#back-button > .toolbarbutton-icon{ + --backbutton-background: transparent !important; + border: none !important; +} + +#back-button { + list-style-image: url("left-arrow.svg") !important; +} + +#forward-button { + list-style-image: url("right-arrow.svg") !important; +} + +toolbar { + background-image: none !important; +} + +#urlbar-background { + opacity: .98 !important; +} + +#navigator-toolbox, toolbaritem { + border: none !important; +} + +#urlbar-background { + background-color: var(--mff-bg) !important; + border: none !important; +} + +.toolbar-items { + background-color: var(--mff-bg) !important; +} + +#sidebar-search-container { + background-color: var(--mff-sidebar-bg) !important; +} + +box.panel-arrowbox { + display: none; +} + +box.panel-arrowcontent { + border-radius: 8px !important; + border: none !important; +} + +tab.tabbrowser-tab { + overflow: hidden; +} + +tab.tabbrowser-tab:hover { + box-shadow: 0 1px 4px rgba(0,0,0,.05); +} + +image#star-button { + display: none; +} + +toolbar#nav-bar { + padding: var(--mff-nav-toolbar-padding) !important; +} + +toolbar#nav-bar { + padding: 4px !important; +} + +#urlbar { + max-width: 70% !important; + margin: 0 15% !important; + /* position: unset!important; */; +} + +#urlbar-input:focus { + color: var(--mff-urlbar-focused-color) !important; +} + + +.megabar[breakout-extend="true"]:not([open="true"]) > #urlbar-background { + box-shadow: none !important; + background-color: transparent !important; +} + +toolbarbutton { + box-shadow: none !important; +} + + +/* + ___ ___ ___ ___ ___ _ ___ + / __|_ _| \| __| _ ) /_\ | _ \ + \__ \| || |) | _|| _ \/ _ \| / + |___/___|___/|___|___/_/ \_\_|_\ +*/ + +.close-icon, .urlbar-icon { + fill: var(--mff-icon-color) !important; +} + +.sidebar-placesTree { + color: var(--mff-sidebar-color) !important; +} + +#sidebar-switcher-target { +/* color: white !important; */ +} + +#sidebar-box { + --sidebar-background-color: var(--mff-sidebar-bg) !important; +} + +splitter#sidebar-splitter { + opacity: 0 !important; +} + +splitter#sidebar-splitter { + border: none !important; + background-color: transparent !important; +} + +image#sidebar-icon { + display: none; +} + + +/* + _ ___ ___ _____ _____ _ _ _ ___ _ + /_\ | _ \ _ \/ _ \ \ / / _ \/_\ | \| | __| | + / _ \| / / (_) \ \/\/ /| _/ _ \| .` | _|| |__ + /_/ \_\_|_\_|_\\___/ \_/\_/ |_|/_/ \_\_|\_|___|____| + */ + +.panel-arrowcontent { + padding: 0px !important; + margin: 0px !important; +} + +toolbarseparator { + display: none; +} diff --git a/etc/firefox/chrome/userChrome.light b/etc/firefox/chrome/userChrome.light @@ -0,0 +1,355 @@ + :root { + + --fg: #3c3836; + --bg: #fbf1c7; + --active: #d79921; + --inactive: #b57614; + + /* Minimal Functional Fox variables*/ + --mff-bg: var(--bg); + --mff-icon-color: var(--fg); + --mff-nav-toolbar-padding: 8px; + --mff-sidebar-bg: var(--mff-bg); + --mff-sidebar-color: var(--fg); + --mff-tab-border-radius: 0px; + --mff-tab-color: var(--fg); + --mff-tab-font-family: "Spleen", Medium; + --mff-tab-font-size: 11pt; + --mff-tab-font-weight: 400; + --mff-tab-height: 32px; + --mff-tab-pinned-bg: var(--inactive); + --mff-tab-selected-bg: var(--active); + --mff-tab-soundplaying-bg: var(--inactive); + --mff-urlbar-color: var(--fg); + --mff-urlbar-focused-color: var(--fg); + --mff-urlbar-font-family: "Spleen 32x64", Medium; + --mff-urlbar-font-size: 12pt; + --mff-urlbar-font-weight: 700; + --mff-urlbar-results-color: var(--fg); + --mff-urlbar-results-font-family: "Spleen 32x64", Medium; + --mff-urlbar-results-font-size: 12pt; + --mff-urlbar-results-font-weight: 700; + --mff-urlbar-results-url-color: var(--inactive); + /* --mff-tab-selected-bg: linear-gradient(90deg, rgba(232,74,95,1) 0%, rgba(255,132,124,1) 50%, rgba(254,206,168,1) 100%); */ + /* --mff-urlbar-font-weight: 600; */ + + /* Overriden Firefox variables*/ + --autocomplete-popup-background: var(--mff-bg) !important; + --default-arrowpanel-background: var(--mff-bg) !important; + --default-arrowpanel-color: var(--fg) !important; + --lwt-toolbarbutton-icon-fill: var(--mff-icon-color) !important; + --panel-disabled-color: var(--fg); + --toolbar-bgcolor: var(--mff-bg) !important; + --urlbar-separator-color: transparent !important; +} + +/* + _____ _ ___ ___ + |_ _/_\ | _ ) __| + | |/ _ \| _ \__ \ + |_/_/ \_\___/___/ + +*/ + +.tab-background[selected="true"] { + background: var(--mff-tab-selected-bg) !important; +} + +.tab-background:not[visuallyselected] { + background: var(--mff-tab-selected-bg) !important; + opacity: 0.5 !important; +} + +/* This positions the tabs under the navaigator container */ +#titlebar { + -moz-box-ordinal-group: 3 !important; +} + +.tabbrowser-tab::after, +.tabbrowser-tab::before { + border-left: none !important; +} + +.tab-background { + border: none !important; +} + +.tabbrowser-arrowscrollbox { + margin-inline-start: 4px !important; + margin-inline-end: 0px !important; +} + +.tab-close-button { + display: none !important; +} + +.tab-text { + font-family: var(--mff-tab-font-family); + font-weight: var(--mff-tab-font-weight); + font-size: var(--mff-tab-font-size) !important; + color: var(--mff-tab-color); +} + +/* Hide the favicon for tabs */ +hbox.tab-content .tab-icon-image { + display: none !important; +} + +/* Show the favicon for tabs that are pinned */ +hbox.tab-content[pinned=true] .tab-icon-image { + display: initial !important; +} + +hbox.tab-content[pinned=true] .tab-text { + display: none !important; +} + +#tabbrowser-tabs { + --tab-loading-fill: var(--fg) !important; + +} + +.tab-label-container:not([textoverflow]) { + display: flex; + overflow: hidden; + justify-content: center; +width: 50% !important; + max-width: 50% !important; + min-width: 50% !important; +} + +/* .tab-label-container::after { + content: "?" !important; + +} */ + +.tab-line { + display: none !important; +} + +.tabbrowser-tab { + border-radius: var(--mff-tab-border-radius) !important; + border-width: 0; + height: var(--mff-tab-height) !important; + margin-bottom: 4px !important; + margin-inline-end: 4px !important; + margin-top: 4px !important; + max-height: var(--mff-tab-height) !important; + min-height: var(--mff-tab-height) !important; +} + +.tabbrowser-tab[soundplaying="true"] { + background-color: var(--mff-tab-soundplaying-bg) !important; +} + +#tabs-newtab-button { + list-style-image: url("add.svg") !important; + opacity: 0.7; +} + +.tab-icon-sound { + display: none !important; +} + +/* + _____ ___ ___ _ ___ _ ___ +|_ _/ _ \ / _ \| | | _ ) /_\ | _ \ + | || (_) | (_) | |__| _ \/ _ \| / + |_| \___/ \___/|____|___/_/ \_\_|_\ +*/ + +.urlbar-icon > image { + fill: var(--mff-icon-color) !important; + color: var(--mff-icon-color) !important; +} + +.toolbarbutton-text { + color: var(--mff-icon-color) !important; +} +.urlbar-icon { + color: var(--mff-icon-color) !important; + +} + +.toolbarbutton-icon { +/* filter: drop-shadow(0 0 0.75rem crimson); */ +} + +#urlbar-results { + font-family: var(--mff-urlbar-results-font-family); + font-weight: var(--mff-urlbar-results-font-weight); + font-size: var(--mff-urlbar-results-font-size) !important; + color: var(--mff-urlbar-results-color) !important; +} + +.urlbarView-row[type="bookmark"] > span{ + color: green !important; +} + +.urlbarView-row[type="switchtab"] > span{ + color: orange !important; +} + +.urlbarView-url, .search-panel-one-offs-container { + color: var(--mff-urlbar-results-url-color) !important; + font-family: var(--mff-urlbar-font-family); + font-weight: var(--mff-urlbar-results-font-weight); + font-size: var(--mff-urlbar-font-size) !important; +} + +.urlbarView-favicon, .urlbarView-type-icon { + display: none !important; +} + +#urlbar-input { + font-size: var(--mff-urlbar-font-size) !important; + color: var(--mff-urlbar-color) !important; + font-family: var(--mff-urlbar-font-family) !important; + font-weight: var(--mff-urlbar-font-weight)!important; + text-align: center !important; +} + +#tracking-protection-icon-container, #identity-box { + display: none; +} + +#back-button > .toolbarbutton-icon{ + --backbutton-background: transparent !important; + border: none !important; +} + +#back-button { + list-style-image: url("left-arrow.svg") !important; +} + +#forward-button { + list-style-image: url("right-arrow.svg") !important; +} + +toolbar { + background-image: none !important; +} + +#urlbar-background { + opacity: .98 !important; +} + +#navigator-toolbox, toolbaritem { + border: none !important; +} + +#urlbar-background { + background-color: var(--mff-bg) !important; + border: none !important; +} + +.toolbar-items { + background-color: var(--mff-bg) !important; +} + +#sidebar-search-container { + background-color: var(--mff-sidebar-bg) !important; +} + +box.panel-arrowbox { + display: none; +} + +box.panel-arrowcontent { + border-radius: 8px !important; + border: none !important; +} + +tab.tabbrowser-tab { + overflow: hidden; +} + +tab.tabbrowser-tab:hover { + box-shadow: 0 1px 4px rgba(0,0,0,.05); +} + +image#star-button { + display: none; +} + +toolbar#nav-bar { + padding: var(--mff-nav-toolbar-padding) !important; +} + +toolbar#nav-bar { + padding: 4px !important; +} + +#urlbar { + max-width: 70% !important; + margin: 0 15% !important; + /* position: unset!important; */; +} + +#urlbar-input:focus { + color: var(--mff-urlbar-focused-color) !important; +} + + +.megabar[breakout-extend="true"]:not([open="true"]) > #urlbar-background { + box-shadow: none !important; + background-color: transparent !important; +} + +toolbarbutton { + box-shadow: none !important; +} + + +/* + ___ ___ ___ ___ ___ _ ___ + / __|_ _| \| __| _ ) /_\ | _ \ + \__ \| || |) | _|| _ \/ _ \| / + |___/___|___/|___|___/_/ \_\_|_\ +*/ + +.close-icon, .urlbar-icon { + fill: var(--mff-icon-color) !important; +} + +.sidebar-placesTree { + color: var(--mff-sidebar-color) !important; +} + +#sidebar-switcher-target { +/* color: white !important; */ +} + +#sidebar-box { + --sidebar-background-color: var(--mff-sidebar-bg) !important; +} + +splitter#sidebar-splitter { + opacity: 0 !important; +} + +splitter#sidebar-splitter { + border: none !important; + background-color: transparent !important; +} + +image#sidebar-icon { + display: none; +} + + +/* + _ ___ ___ _____ _____ _ _ _ ___ _ + /_\ | _ \ _ \/ _ \ \ / / _ \/_\ | \| | __| | + / _ \| / / (_) \ \/\/ /| _/ _ \| .` | _|| |__ + /_/ \_\_|_\_|_\\___/ \_/\_/ |_|/_/ \_\_|\_|___|____| + */ + +.panel-arrowcontent { + padding: 0px !important; + margin: 0px !important; +} + +toolbarseparator { + display: none; +} diff --git a/etc/firefox/chrome/userContent.css b/etc/firefox/chrome/userContent.css @@ -0,0 +1,23 @@ +@import url("userChrome.css"); + +/* Removes white loading page */ +@-moz-document url(about:blank), url(about:newtab), url(about:home) { + html:not(#ublock0-epicker), html:not(#ublock0-epicker) body, #newtab-customize-overlay { + background: var(--mff-bg) !important; + } + } + + + /* Hide scrollbar */ + + :root{ + scrollbar-width: none !important; + } + + + @-moz-document url(about:privatebrowsing) { + + :root{ + scrollbar-width: none !important; + } + }+ \ No newline at end of file diff --git a/etc/lynx/lynxrc b/etc/lynx/lynxrc @@ -0,0 +1,449 @@ +# Lynx User Defaults File +# +# This file contains options saved from the Lynx Options Screen (normally +# with the 'o' key). To save options with that screen, you must select the +# checkbox: +# Save options to disk +# +# You must then save the settings using the link on the line above the +# checkbox: +# Accept Changes +# +# You may also use the command-line option "-forms_options", which displays +# the simpler Options Menu instead. Save options with that using the '>' key. +# +# There is normally no need to edit this file manually, since the defaults +# here can be controlled from the Options Screen, and the next time options +# are saved from the Options Screen this file will be completely rewritten. +# You have been warned... +# +# If you are looking for the general configuration file - it is normally +# called "lynx.cfg". It has different content and a different format. +# It is not this file. + +# accept_all_cookies allows the user to tell Lynx to automatically +# accept all cookies if desired. The default is "FALSE" which will +# prompt for each cookie. Set accept_all_cookies to "TRUE" to accept +# all cookies. +accept_all_cookies=off + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +# iso-8859-1 +# us-ascii +# iso-8859-15 +# cp850 +# windows-1252 +# cp437 +# dec-mcs +# macintosh +# next +# hp-roman8 +# euc-cn +# euc-jp +# shift_jis +# euc-kr +# big5 +# viscii +# x-transparent +# iso-8859-2 +# cp852 +# windows-1250 +# iso-8859-3 +# iso-8859-4 +# iso-8859-13 +# cp775 +# windows-1257 +# iso-8859-5 +# cp866 +# windows-1251 +# koi8-r +# iso-8859-6 +# cp864 +# windows-1256 +# iso-8859-14 +# iso-8859-7 +# cp737 +# cp869 +# windows-1253 +# iso-8859-8 +# cp862 +# windows-1255 +# iso-8859-9 +# cp857 +# iso-8859-10 +# utf-8 +# mnemonic+ascii+0 +# mnemonic +# cp866u +# koi8-u +# ptcp154 +assume_charset=iso-8859-1 + +# anonftp_password allows the user to tell Lynx to use the personal +# email address as the password for anonymous ftp. If no value is given, +# Lynx will use the personal email address. Set anonftp_password +# to a different value if you choose. +anonftp_password= + +# bookmark_file specifies the name and location of the default bookmark +# file into which the user can paste links for easy access at a later +# date. +bookmark_file=lynx_bookmarks.html + +# If case_sensitive_searching is "on" then when the user invokes a search +# using the 's' or '/' keys, the search performed will be case sensitive +# instead of case INsensitive. The default is usually "off". +case_sensitive_searching=off + +# The character_set definition controls the representation of 8 bit +# characters for your terminal. If 8 bit characters do not show up +# correctly on your screen you may try changing to a different 8 bit +# set or using the 7 bit character approximations. +# Current valid characters sets are: +# Western (ISO-8859-1) +# 7 bit approximations (US-ASCII) +# Western (ISO-8859-15) +# Western (cp850) +# Western (windows-1252) +# IBM PC US codepage (cp437) +# DEC Multinational +# Macintosh (8 bit) +# NeXT character set +# HP Roman8 +# Chinese +# Japanese (EUC-JP) +# Japanese (Shift_JIS) +# Korean +# Taipei (Big5) +# Vietnamese (VISCII) +# Transparent +# Eastern European (ISO-8859-2) +# Eastern European (cp852) +# Eastern European (windows-1250) +# Latin 3 (ISO-8859-3) +# Latin 4 (ISO-8859-4) +# Baltic Rim (ISO-8859-13) +# Baltic Rim (cp775) +# Baltic Rim (windows-1257) +# Cyrillic (ISO-8859-5) +# Cyrillic (cp866) +# Cyrillic (windows-1251) +# Cyrillic (KOI8-R) +# Arabic (ISO-8859-6) +# Arabic (cp864) +# Arabic (windows-1256) +# Celtic (ISO-8859-14) +# Greek (ISO-8859-7) +# Greek (cp737) +# Greek2 (cp869) +# Greek (windows-1253) +# Hebrew (ISO-8859-8) +# Hebrew (cp862) +# Hebrew (windows-1255) +# Turkish (ISO-8859-9) +# Turkish (cp857) +# North European (ISO-8859-10) +# UNICODE (UTF-8) +# RFC 1345 w/o Intro +# RFC 1345 Mnemonic +# Ukrainian Cyrillic (cp866u) +# Ukrainian Cyrillic (KOI8-U) +# Cyrillic-Asian (PT154) +character_set=Western (ISO-8859-1) + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +collapse_br_tags=on + +# cookie_accept_domains and cookie_reject_domains are comma-delimited +# lists of domains from which Lynx should automatically accept or reject +# all cookies. If a domain is specified in both options, rejection will +# take precedence. The accept_all_cookies parameter will override any +# settings made here. +cookie_accept_domains= + +# cookie_file specifies the file from which to read persistent cookies. +# The default is ~/.lynx_cookies. +cookie_file= + +# cookie_loose_invalid_domains, cookie_strict_invalid_domains, and +# cookie_query_invalid_domains are comma-delimited lists of which domains +# should be subjected to varying degrees of validity checking. If a +# domain is set to strict checking, strict conformance to RFC2109 will +# be applied. A domain with loose checking will be allowed to set cookies +# with an invalid path or domain attribute. All domains will default to +# querying the user for an invalid path or domain. +cookie_loose_invalid_domains= + +cookie_query_invalid_domains= + +cookie_reject_domains= + +cookie_strict_invalid_domains= + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +display=:0.0 + +# If emacs_keys is to "on" then the normal EMACS movement keys: +# ^N = down ^P = up +# ^B = left ^F = right +# will be enabled. +emacs_keys=off + +# file_editor specifies the editor to be invoked when editing local files +# or sending mail. If no editor is specified, then file editing is disabled +# unless it is activated from the command line, and the built-in line editor +# will be used for sending mail. +file_editor= + +# The file_sorting_method specifies which value to sort on when viewing +# file lists such as FTP directories. The options are: +# BY_FILENAME -- sorts on the name of the file +# BY_TYPE -- sorts on the type of the file +# BY_SIZE -- sorts on the size of the file +# BY_DATE -- sorts on the date of the file +file_sorting_method=BY_FILENAME + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +force_cookie_prompt=prompt + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +force_ssl_prompt=yes + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +ftp_passive=on + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +html5_charsets=off + +# If keypad_mode is set to "NUMBERS_AS_ARROWS", then the numbers on +# your keypad when the numlock is on will act as arrow keys: +# 8 = Up Arrow +# 4 = Left Arrow 6 = Right Arrow +# 2 = Down Arrow +# and the corresponding keyboard numbers will act as arrow keys, +# regardless of whether numlock is on. +# If keypad_mode is set to "LINKS_ARE_NUMBERED", then numbers will +# appear next to each link and numbers are used to select links. +# If keypad_mode is set to "LINKS_AND_FORM_FIELDS_ARE_NUMBERED", then +# numbers will appear next to each link and visible form input field. +# Numbers are used to select links, or to move the "current link" to a +# form input field or button. In addition, options in popup menus are +# indexed so that the user may type an option number to select an option in +# a popup menu, even if the option isn't visible on the screen. Reference +# lists and output from the list command also enumerate form inputs. +# NOTE: Some fixed format documents may look disfigured when +# "LINKS_ARE_NUMBERED" or "LINKS_AND_FORM_FIELDS_ARE_NUMBERED" are +# enabled. +keypad_mode=LINKS_ARE_NOT_NUMBERED + +# lineedit_mode specifies the key binding used for inputting strings in +# prompts and forms. If lineedit_mode is set to "Default Binding" then +# the following control characters are used for moving and deleting: +# +# Prev Next Enter = Accept input +# Move char: <- -> ^G = Cancel input +# Move word: ^P ^N ^U = Erase line +# Delete char: ^H ^R ^A = Beginning of line +# Delete word: ^B ^F ^E = End of line +# +# Current lineedit modes are: +# Default Binding +# Alternate Bindings +# Bash-like Bindings +lineedit_mode=Default Binding + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +locale_charset=off + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +make_pseudo_alts_for_inlines=on + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +make_links_for_all_images=on + +# The following allow you to define sub-bookmark files and descriptions. +# The format is multi_bookmark<capital_letter>=<filename>,<description> +# Up to 26 bookmark files (for the English capital letters) are allowed. +# We start with "multi_bookmarkB" since 'A' is the default (see above). +multi_bookmarkB= +multi_bookmarkC= +multi_bookmarkD= +multi_bookmarkE= +multi_bookmarkF= +multi_bookmarkG= +multi_bookmarkH= +multi_bookmarkI= +multi_bookmarkJ= +multi_bookmarkK= +multi_bookmarkL= +multi_bookmarkM= +multi_bookmarkN= +multi_bookmarkO= +multi_bookmarkP= +multi_bookmarkQ= +multi_bookmarkR= +multi_bookmarkS= +multi_bookmarkT= +multi_bookmarkU= +multi_bookmarkV= +multi_bookmarkW= +multi_bookmarkX= +multi_bookmarkY= +multi_bookmarkZ= + +# personal_mail_address specifies your personal mail address. The +# address will be sent during HTTP file transfers for authorization and +# logging purposes, and for mailed comments. +# If you do not want this information given out, set the NO_FROM_HEADER +# to TRUE in lynx.cfg, or use the -nofrom command line switch. You also +# could leave this field blank, but then you won't have it included in +# your mailed comments. +personal_mail_address= + +# personal_mail_name specifies your personal name, for mail. The +# name is sent for mailed comments. Lynx will prompt for this, +# showing the configured value as a default when sending mail. +# This is not necessarily the same as a name provided as part of the +# personal_mail_address. +# Lynx does not save your changes to that default value as a side-effect +# of sending email. To update the default value, you must use the options +# menu, or modify this file directly. +personal_mail_name= + +# preferred_charset specifies the character set in MIME notation (e.g., +# ISO-8859-2, ISO-8859-5) which Lynx will indicate you prefer in requests +# to http servers using an Accept-Charset header. The value should NOT +# include ISO-8859-1 or US-ASCII, since those values are always assumed +# by default. May be a comma-separated list. +# If a file in that character set is available, the server will send it. +# If no Accept-Charset header is present, the default is that any +# character set is acceptable. If an Accept-Charset header is present, +# and if the server cannot send a response which is acceptable +# according to the Accept-Charset header, then the server SHOULD send +# an error response, though the sending of an unacceptable response +# is also allowed. +preferred_charset= + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +preferred_encoding=all + +# preferred_language specifies the language in MIME notation (e.g., en, +# fr, may be a comma-separated list in decreasing preference) +# which Lynx will indicate you prefer in requests to http servers. +# If a file in that language is available, the server will send it. +# Otherwise, the server will send the file in its default language. +preferred_language=en + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +preferred_media_types=ALL + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +raw_mode=on + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +scrollbar=off + +# select_popups specifies whether the OPTIONs in a SELECT block which +# lacks a MULTIPLE attribute are presented as a vertical list of radio +# buttons or via a popup menu. Note that if the MULTIPLE attribute is +# present in the SELECT start tag, Lynx always will create a vertical list +# of checkboxes for the OPTIONs. A value of "on" will set popup menus +# as the default while a value of "off" will set use of radio boxes. +# The default can be overridden via the -popup command line toggle. +select_popups=on + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +send_useragent=on + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +set_cookies=off + +# show_color specifies how to set the color mode at startup. A value of +# "never" will force color mode off (treat the terminal as monochrome) +# at startup even if the terminal appears to be color capable. A value of +# "always" will force color mode on even if the terminal appears to be +# monochrome, if this is supported by the library used to build lynx. +# A value of "default" will yield the behavior of assuming +# a monochrome terminal unless color capability is inferred at startup +# based on the terminal type, or the -color command line switch is used, or +# the COLORTERM environment variable is set. The default behavior always is +# used in anonymous accounts or if the "option_save" restriction is set. +# The effect of the saved value can be overridden via +# the -color and -nocolor command line switches. +# The mode set at startup can be changed via the "show color" option in +# the 'o'ptions menu. If the option settings are saved, the "on" and +# "off" "show color" settings will be treated as "default". +show_color=default + +# show_cursor specifies whether to 'hide' the cursor to the right (and +# bottom, if possible) of the screen, or to place it to the left of the +# current link in documents, or current option in select popup windows. +# Positioning the cursor to the left of the current link or option is +# helpful for speech or braille interfaces, and when the terminal is +# one which does not distinguish the current link based on highlighting +# or color. A value of "on" will set positioning to the left as the +# default while a value of "off" will set 'hiding' of the cursor. +# The default can be overridden via the -show_cursor command line toggle. +show_cursor=off + +# show_dotfiles specifies that the directory listing should include +# "hidden" (dot) files/directories. If set "on", this will be +# honored only if enabled via userdefs.h and/or lynx.cfg, and not +# restricted via a command line switch. If display of hidden files +# is disabled, creation of such files via Lynx also is disabled. +show_dotfiles=off + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +show_kb_rate=KB + +# If sub_bookmarks is not turned "off", and multiple bookmarks have +# been defined (see below), then all bookmark operations will first +# prompt the user to select an active sub-bookmark file. If the default +# Lynx bookmark_file is defined (see above), it will be used as the +# default selection. When this option is set to "advanced", and the +# user mode is advanced, the 'v'iew bookmark command will invoke a +# statusline prompt instead of the menu seen in novice and intermediate +# user modes. When this option is set to "standard", the menu will be +# presented regardless of user mode. +sub_bookmarks=OFF + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +tagsoup=false + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +underline_links=on + +# user_mode specifies the users level of knowledge with Lynx. The +# default is "NOVICE" which displays two extra lines of help at the +# bottom of the screen to aid the user in learning the basic Lynx +# commands. Set user_mode to "INTERMEDIATE" to turn off the extra info. +# Use "ADVANCED" to see the URL of the currently selected link at the +# bottom of the screen. +user_mode=ADVANCED + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +useragent=Lynx/2.8.9rel.1 libwww-FM/2.14 SSL-MM/1.4.1 + +# If verbose_images is "on", lynx will print the name of the image +# source file in place of [INLINE], [LINK] or [IMAGE] +# See also VERBOSE_IMAGES in lynx.cfg +verbose_images=on + +# If vi_keys is set to "on", then the normal VI movement keys: +# j = down k = up +# h = left l = right +# will be enabled. These keys are only lower case. +# Capital 'H', 'J' and 'K will still activate help, jump shortcuts, +# and the keymap display, respectively. +vi_keys=on + +# The visited_links setting controls how Lynx organizes the information +# in the Visited Links Page. +visited_links=LAST_REVERSED + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +auto_session=off + +# Normally disabled. See ENABLE_LYNXRC in lynx.cfg +session_file= + diff --git a/etc/mimeapps.list b/etc/mimeapps.list @@ -0,0 +1,16 @@ +[Default Applications] + +# xdg-open will use these settings to determine how to open filetypes. +# These .desktop entries can also be seen and changed in ~/.local/share/applications/ + +text/x-shellscript=text.desktop; +x-scheme-handler/magnet=torrent.desktop; +application/x-bittorrent=torrent.desktop; +x-scheme-handler/mailto=mail.desktop; +text/plain=text.desktop; +application/postscript=pdf.desktop; +application/pdf=pdf.desktop; +image/png=img.desktop; +image/jpeg=img.desktop; +image/gif=img.desktop; +video/webm=vid.desktop diff --git a/etc/mpv/input.conf b/etc/mpv/input.conf @@ -0,0 +1,5 @@ +l seek 5 +h seek -5 +j seek -60 +k seek 60 +S cycle sub diff --git a/etc/mpv/mpv.conf b/etc/mpv/mpv.conf @@ -0,0 +1,7 @@ +profile=gpu-hq +scale=ewa_lanczossharp +cscale=ewa_lanczossharp +video-sync=display-resample +interpolation +tscale=oversample +save-position-on-quit diff --git a/etc/newsboat/config b/etc/newsboat/config @@ -0,0 +1,48 @@ +bind-key j down +bind-key k up +bind-key j next articlelist +bind-key k prev articlelist +bind-key J next-feed articlelist +bind-key K prev-feed articlelist +bind-key G end +bind-key g home +bind-key d pagedown +bind-key u pageup +bind-key l open +bind-key h quit +bind-key a toggle-article-read +bind-key n next-unread +bind-key N prev-unread +bind-key D pb-download +bind-key U show-urls +bind-key x pb-delete + +color listnormal blue default +# reverse these colours if you're not using tmux +color listfocus yellow white standout bold +color listnormal_unread red default +color listfocus_unread red default bold +color info blue default bold +color article default default +text-width 74 + +download-path "~/tmp/%n" +save-path "~/tmp" + +browser op +macro , open-in-browser +macro i set browser "iridium"; open-in-browser ; set browser "op" +macro u set browser "urlview"; open-in-browser ; set browser "op" + +highlight all "---.*---" yellow +highlight feedlist ".*(0/0))" black +highlight article "(^Feed:.*|^Title:.*|^Author:.*)" cyan default bold +highlight article "(^Link:.*|^Date:.*)" default default +highlight article "https?://[^ ]+" green default +highlight article "^(Title):.*$" blue default +highlight article "\\[[0-9][0-9]*\\]" magenta default bold +highlight article "\\[image\\ [0-9]+\\]" green default bold +highlight article "\\[embedded flash: [0-9][0-9]*\\]" green default bold +highlight article ":.*\\(link\\)$" cyan default +highlight article ":.*\\(image\\)$" blue default +highlight article ":.*\\(embedded flash\\)$" magenta default diff --git a/etc/newsboat/newsupdate b/etc/newsboat/newsupdate @@ -0,0 +1 @@ +130 diff --git a/etc/newsboat/urls b/etc/newsboat/urls @@ -0,0 +1,82 @@ +--PODCASTS-- +https://fash-the-nation.libsyn.com/rss "pod" "~Fash The Nation" +https://fullhaus.libsyn.com/rss "pod" "~Full Haus" +https://thegodcast.libsyn.com/rss "pod" +https://hatebus.libsyn.com/rss "~The Hate Bus" "pod" +https://feeds.feedburner.com/archive/littlewarspodcast "~Little Wars" "pod" +https://media.zencast.fm/mega-streamcast/rss "pod" +https://audio.nobodyhasthe.biz/api/v1/channels/metalupyourfash/rss "pod" +https://myth20c.wordpress.com/feed/ "~Myth Of The 20th Century" "pod" +https://anchor.fm/s/3d8e40e4/podcast/rss "pod" +https://media.zencast.fm/the-paranormies-present-the-ahnenerbe-hour-1/rss "pod" +https://thirdrail88.libsyn.com/rss "~Third Rail" "pod" +" " +--NEWS-- +https://www.amren.com/feed/ "news" +https://theamericansun.com/feed/ "news" +https://babylonbee.com/feed "news" +https://christiansfortruth.com/feed/ "news" +https://dissident-mag.com/feed/ "news" +https://littlewars.home.blog/feed/ "news" "anime" +https://national-justice.com/feeds/feedly "news" +https://nationaljusticeparty.com/feed/ "news" "~National Justice Party" +https://raceborz.com/feed/ "news" +https://thuletide.wordpress.com/feed/ "news" +https://truthtopowernews.com/feeds/feedly "news" +" " +--ANIME-- +https://anidb.net/feeds/news.atom "anime" "~AniDB News" +https://www.crymore.net/feed/ "anime" +https://fansub.co/feed/ "anime" +https://notredrevie.ws/feed/ "anime" +" " +--TECH-- +https://kaashif.co.uk/feeds/all.atom.xml "tech" "~Kaashif's Blog" +https://lukesmith.xyz/rss.xml "tech" "~Luke's Website" +http://podcast.nixers.net/feed/feed.xml "tech" +https://paedubucher.ch/atom.xml "tech" +https://feeds.feedburner.com/planet-openbsd "tech" +https://www.romanzolotarev.com/rss.xml +https://www.romanzolotarev.com/n/rss.xml +https://nitter.poast.org/romanzolotarev/rss "twitter" "~Roman's twitter" +https://dataswamp.org/~solene/rss.xml "tech" +https://suckless.org/atom.xml "tech" +https://www.undeadly.org/cgi?action=rss +https://www.uninformativ.de/blog/feeds/en.atom "tech" "~Vain" +https://www.gormless.xyz/rss.xml "tech" +" " +--ARTISTS-- +https://hedgewik.com/feed/ "art" "~Hedgewik" +https://rss.nixnet.services/?action=display&bridge=Telegram&username=jinjerzillatoons&format=Atom "art" "telegram" "~JinjerZilla" +https://nitter.poast.org/owenbroadcast/rss "art" "twitter" "~Owen Cyclops" +https://rss.nixnet.services/?action=display&bridge=Telegram&username=stone_toss&format=Atom "art" "~Stonetoss" +" " +--NITTER-- +#https://nitter.poast.org/tedwardwang/rss "twitter" "~Borzoi" +https://nitter.poast.org/protnonsense/rss "twitter" "~Cursed Protestant Nonsense" +https://nitter.poast.org/hyxpk/rss "twitter" "~Diva" +https://nitter.poast.org/JeremyClarkson/rss "twitter" "~Jeremy Clarkson" +#https://nitter.poast.org/AnimeBibleVerse/rss "twitter" "~Moe Bible Verses" +#https://nitter.poast.org/Moenarchist/rss "twitter" "~Moenarchist" +#https://nitter.poast.org/boathog420/rss "twitter" "~Roscoe Jones" +#https://nitter.poast.org/vrilseeker/rss "twitter" "~SP" +#https://nitter.poast.org/hereliesthighs/rss "twitter" "~Titus" +#https://nitter.poast.org/wrathofgnon/rss "twitter" "~Wrath Of Gnon" +https://nitter.poast.org/znaprod/rss "twitter" "~ZNAProd" +" " +--VIDEOS-- +http://thealternativehypothesis.org/index.php/feed/ "news" "vids" +https://yewtu.be/feed/channel/UCABqe4i9tBXzCgMpftEgaZw "vids" +https://lukesmith.xyz/peertube "vids" "tech" "~Luke Smith" +https://yewtu.be/feed/channel/UC7YOGHUfC1Tb6E4pudI9STA "vids" +https://yewtu.be/feed/channel/UCoyaV0pDQQV7QD94hG8z54A "vids" +https://tv.gab.com/channel/thealternativehypothesis/feed/rss "vids" +https://yewtu.be/feed/channel/UCorXpBSyqVRLK5dZ1Z-3JYg "vids" +https://yewtu.be/feed/channel/UC9C_9mgehMUp8BHeug6F8Dw "vids" +" " +--TELEGRAM-- +https://rss.nixnet.services/?action=display&bridge=Telegram&username=prowhitefam&format=Atom "telegram" "~Full Haus" +https://rss.nixnet.services/?action=display&bridge=Telegram&username=mpeinovich&format=Atom "telegram" "~Mike" +https://rss.nixnet.services/?action=display&bridge=Telegram&username=%40owenbroadcast&format=Atom "telegram" "~Owen Cyclops Telegram" +https://rss.nixnet.services/?action=display&bridge=Telegram&username=southafricareports&format=Atom "telegram" "news" "~South Africa Reports" +https://rss.nixnet.services/?action=display&bridge=Telegram&username=thethirdrail&format=Atom "telegram" "~Turd Rail" diff --git a/etc/openmw/openmw.cfg b/etc/openmw/openmw.cfg @@ -0,0 +1,678 @@ +no-sound=0 +fallback-archive=Morrowind.bsa +fallback-archive=Tribunal.bsa +fallback-archive=Bloodmoon.bsa +fallback-archive=TR_Data.bsa +fallback-archive=PT_Data.bsa +fallback=LightAttenuation_UseConstant,0 +fallback=LightAttenuation_ConstantValue,0.0 +fallback=LightAttenuation_UseLinear,1 +fallback=LightAttenuation_LinearMethod,1 +fallback=LightAttenuation_LinearValue,3.0 +fallback=LightAttenuation_LinearRadiusMult,1.0 +fallback=LightAttenuation_UseQuadratic,0 +fallback=LightAttenuation_QuadraticMethod,2 +fallback=LightAttenuation_QuadraticValue,16.0 +fallback=LightAttenuation_QuadraticRadiusMult,1.0 +fallback=LightAttenuation_OutQuadInLin,0 +fallback=Inventory_DirectionalDiffuseR,1.0 +fallback=Inventory_DirectionalDiffuseG,1.0 +fallback=Inventory_DirectionalDiffuseB,1.0 +fallback=Inventory_DirectionalAmbientR,0.0 +fallback=Inventory_DirectionalAmbientG,0.0 +fallback=Inventory_DirectionalAmbientB,0.0 +fallback=Inventory_DirectionalRotationX,110 +fallback=Inventory_DirectionalRotationY,90 +fallback=Inventory_UniformScaling,0 +fallback=Map_Travel_Siltstrider_Red,238 +fallback=Map_Travel_Siltstrider_Green,230 +fallback=Map_Travel_Siltstrider_Blue,30 +fallback=Map_Travel_Boat_Red,30 +fallback=Map_Travel_Boat_Green,30 +fallback=Map_Travel_Boat_Blue,230 +fallback=Map_Travel_Magic_Red,230 +fallback=Map_Travel_Magic_Green,30 +fallback=Map_Travel_Magic_Blue,30 +fallback=Map_Show_Travel_Lines,0 +fallback=Water_Map_Alpha,0.4 +fallback=Water_World_Alpha,0.75 +fallback=Water_SurfaceTextureSize,128 +fallback=Water_SurfaceTileCount,10 +fallback=Water_SurfaceFPS,12 +fallback=Water_SurfaceTexture,water +fallback=Water_SurfaceFrameCount,32 +fallback=Water_TileTextureDivisor,4.75 +fallback=Water_RippleTexture,ripple +fallback=Water_RippleFrameCount,4 +fallback=Water_RippleLifetime,3.0 +fallback=Water_MaxNumberRipples,75 +fallback=Water_RippleScale,0.15, 6.5 +fallback=Water_RippleRotSpeed,0.5 +fallback=Water_RippleAlphas,0.7, 0.1, 0.01 +fallback=Water_PSWaterReflectTerrain,1 +fallback=Water_PSWaterReflectUpdate,20.0 +fallback=Water_NearWaterRadius,1000 +fallback=Water_NearWaterPoints,8 +fallback=Water_NearWaterUnderwaterFreq,0.3 +fallback=Water_NearWaterUnderwaterVolume,0.9 +fallback=Water_NearWaterIndoorTolerance,512.0 +fallback=Water_NearWaterOutdoorTolerance,1024.0 +fallback=Water_NearWaterIndoorID,Water Layer +fallback=Water_NearWaterOutdoorID,Water Layer +fallback=Water_UnderwaterSunriseFog,3 +fallback=Water_UnderwaterDayFog,2.5 +fallback=Water_UnderwaterSunsetFog,3 +fallback=Water_UnderwaterNightFog,4 +fallback=Water_UnderwaterIndoorFog,3 +fallback=Water_UnderwaterColor,012,030,037 +fallback=Water_UnderwaterColorWeight,0.85 +fallback=PixelWater_SurfaceFPS,25 +fallback=PixelWater_TileCount,4 +fallback=PixelWater_Resolution,256 +fallback=Fonts_Font_0,magic_cards_regular +fallback=Fonts_Font_1,century_gothic_font_regular +fallback=Fonts_Font_2,daedric_font +fallback=FontColor_color_normal,150,150,150 +fallback=FontColor_color_normal_over,200,200,200 +fallback=FontColor_color_normal_pressed,255,255,255 +fallback=FontColor_color_active,255,255,255 +fallback=FontColor_color_active_over, 150, 150,150 +fallback=FontColor_color_active_pressed,255,255,255 +fallback=FontColor_color_disabled,100,100,100 +fallback=FontColor_color_disabled_over,140,140,140 +fallback=FontColor_color_disabled_pressed,100,100,100 +fallback=FontColor_color_link,58,78,181 +fallback=FontColor_color_link_over,91,112,222 +fallback=FontColor_color_link_pressed,97,106,156 +fallback=FontColor_color_journal_link,37,49,112 +fallback=FontColor_color_journal_link_over,58,77,175 +fallback=FontColor_color_journal_link_pressed,112,126,207 +fallback=FontColor_color_journal_topic,0,0,0 +fallback=FontColor_color_journal_topic_over,58,77,175 +fallback=FontColor_color_journal_topic_pressed,112,126,207 +fallback=FontColor_color_answer, 181, 58,58 +fallback=FontColor_color_answer_over,230,80,80 +fallback=FontColor_color_answer_pressed,155,80,80 +fallback=FontColor_color_header,255,255,255 +fallback=FontColor_color_notify,100,100,100 +fallback=FontColor_color_big_normal,200,200,200 +fallback=FontColor_color_big_normal_over,255,255,255 +fallback=FontColor_color_big_normal_pressed,150,150,150 +fallback=FontColor_color_big_link,255,255,255 +fallback=FontColor_color_big_link_over,255,255,255 +fallback=FontColor_color_big_link_pressed,150,150,150 +fallback=FontColor_color_big_answer, 200,200,200 +fallback=FontColor_color_big_answer_over,255,255,255 +fallback=FontColor_color_big_answer_pressed,150,150,150 +fallback=FontColor_color_big_header,200,200,200 +fallback=FontColor_color_big_notify,200,200,200 +fallback=FontColor_color_background,0,0,0 +fallback=FontColor_color_focus,80,80,80 +fallback=FontColor_color_health,200,60,30 +fallback=FontColor_color_magic,53,69,159 +fallback=FontColor_color_fatigue,0,150,60 +fallback=FontColor_color_misc,0,205,205 +fallback=FontColor_color_weapon_fill,200,60,30 +fallback=FontColor_color_magic_fill,200,60,30 +fallback=FontColor_color_positive,35,219,109 +fallback=FontColor_color_negative,200,60,30 +fallback=FontColor_color_count,255,255,255 +#fallback=FontColor_color_normal,202,165,96 +#fallback=FontColor_color_normal_over,223,201,159 +#fallback=FontColor_color_normal_pressed,243,237,221 +#fallback=FontColor_color_active,96,112,202 +#fallback=FontColor_color_active_over,159,169,223 +#fallback=FontColor_color_active_pressed,223,226,244 +#fallback=FontColor_color_disabled,179,168,135 +#fallback=FontColor_color_disabled_over,223,201,159 +#fallback=FontColor_color_disabled_pressed,243,237,221 +#fallback=FontColor_color_link,112,126,207 +#fallback=FontColor_color_link_over,143,155,218 +#fallback=FontColor_color_link_pressed,175,184,228 +#fallback=FontColor_color_journal_link,37,49,112 +#fallback=FontColor_color_journal_link_over,58,77,175 +#fallback=FontColor_color_journal_link_pressed,112,126,207 +#fallback=FontColor_color_journal_topic,0,0,0 +#fallback=FontColor_color_journal_topic_over,58,77,175 +#fallback=FontColor_color_journal_topic_pressed,112,126,207 +#fallback=FontColor_color_answer,150,50,30 +#fallback=FontColor_color_answer_over,223,201,159 +#fallback=FontColor_color_answer_pressed,243,237,221 +#fallback=FontColor_color_header,223,201,159 +#fallback=FontColor_color_notify,223,201,159 +#fallback=FontColor_color_big_normal,202,165,96 +#fallback=FontColor_color_big_normal_over,223,201,159 +#fallback=FontColor_color_big_normal_pressed,243,237,221 +#fallback=FontColor_color_big_link,112,126,207 +#fallback=FontColor_color_big_link_over,143,155,218 +#fallback=FontColor_color_big_link_pressed,175,184,228 +#fallback=FontColor_color_big_answer,150,50,30 +#fallback=FontColor_color_big_answer_over,223,201,159 +#fallback=FontColor_color_big_answer_pressed,243,237,22 +#fallback=FontColor_color_big_header,223,201,159 +#fallback=FontColor_color_big_notify,223,201,159 +#fallback=FontColor_color_background,0,0,0 +#fallback=FontColor_color_focus,80,80,80 +#fallback=FontColor_color_health,200,60,30 +#fallback=FontColor_color_magic,53,69,159 +#fallback=FontColor_color_fatigue,0,150,60 +#fallback=FontColor_color_misc,0,205,205 +#fallback=FontColor_color_weapon_fill,200,60,30 +#fallback=FontColor_color_magic_fill,200,60,30 +#fallback=FontColor_color_positive,223,201,159 +#fallback=FontColor_color_negative,200,60,30 +#fallback=FontColor_color_count,223,201,159 +fallback=Level_Up_Level2,You realize that all your life you have been coasting along as if you were in a dream. Suddenly, facing the trials of the last few days, you have come alive. +fallback=Level_Up_Level3,You realize that you are catching on to the secret of success. It's just a matter of concentration. +fallback=Level_Up_Level4,It's all suddenly obvious to you. You just have to concentrate. All the energy and time you've wasted -- it's a sin. But without the experience you've gained, taking risks, taking responsibility for failure, how could you have understood? +fallback=Level_Up_Level5,Everything you do is just a bit easier, more instinctive, more satisfying. It is as though you had suddenly developed keen senses and instincts. +fallback=Level_Up_Level6,You sense yourself more aware, more open to new ideas. You've learned a lot about Morrowind. It's hard to believe how ignorant you were -- but now you have so much more to learn. +fallback=Level_Up_Level7,You resolve to continue pushing yourself. Perhaps there's more to you than you thought. +fallback=Level_Up_Level8,The secret does seem to be hard work, yes, but it's also a kind of blind passion, an inspiration. +fallback=Level_Up_Level9,Everything you do is just a bit easier, more instinctive, more satisfying. It is as though you had suddenly developed keen senses and instincts. +fallback=Level_Up_Level10,You woke today with a new sense of purpose. You're no longer afraid of failure. Failure is just an opportunity to learn something new. +fallback=Level_Up_Level11,Being smart doesn't hurt. And a little luck now and then is nice. But the key is patience and hard work. And when it pays off, it's SWEET! +fallback=Level_Up_Level12,You can't believe how easy it is. You just have to go -- a little crazy. And then, suddenly, it all makes sense, and everything you do turns to gold. +fallback=Level_Up_Level13,It's the most amazing thing. Yesterday it was hard, and today it is easy. Just a good night's sleep, and yesterday's mysteries are today's masteries. +fallback=Level_Up_Level14,Today you wake up, full of energy and ideas, and you know, somehow, that overnight everything has changed. What a difference a day makes. +fallback=Level_Up_Level15,Today you suddenly realized the life you've been living, the punishment your body has taken -- there are limits to what the body can do, and perhaps you have reached them. You've wondered what it is like to grow old. Well, now you know. +fallback=Level_Up_Level16,You've been trying too hard, thinking too much. Relax. Trust your instincts. Just be yourself. Do the little things, and the big things take care of themselves. +fallback=Level_Up_Level17,Life isn't over. You can still get smarter, or cleverer, or more experienced, or meaner -- but your body and soul just aren't going to get any younger. +fallback=Level_Up_Level18,The challenge now is to stay at the peak as long as you can. You may be as strong today as any mortal who has ever walked the earth, but there's always someone younger, a new challenger. +fallback=Level_Up_Level19,You're really good. Maybe the best. And that's why it's so hard to get better. But you just keep trying, because that's the way you are. +fallback=Level_Up_Level20,You'll never be better than you are today. If you are lucky, by superhuman effort, you can avoid slipping backwards for a while. But sooner or later, you're going to lose a step, or drop a beat, or miss a detail -- and you'll be gone forever. +fallback=Level_Up_Default,The results of hard work and dedication always look like luck to saps. But you know you've earned every ounce of your success. +fallback=Question_1_Question,On a clear day you chance upon a strange animal, its leg trapped in a hunter's clawsnare. Judging from the bleeding, it will not survive long. +fallback=Question_1_AnswerOne,Draw your dagger, mercifully ending its life with a single thrust? +fallback=Question_1_AnswerTwo,Use herbs from your pack to put it to sleep? +fallback=Question_1_AnswerThree,Do not interfere in the natural evolution of events, but rather take the opportunity to learn more about a strange animal that you have never seen before? +fallback=Question_1_Sound,Vo\Misc\CharGen QA1.wav +fallback=Question_2_Question,One summer afternoon your father gives you a choice of chores. +fallback=Question_2_AnswerOne,Work in the forge with him casting iron for a new plow? +fallback=Question_2_AnswerTwo,Gather herbs for your mother who is preparing dinner? +fallback=Question_2_AnswerThree,Go catch fish at the stream using a net and line? +fallback=Question_2_Sound,Vo\Misc\CharGen QA2.wav +fallback=Question_3_Question,Your cousin has given you a very embarassing nickname and, even worse, likes to call you it in front of your friends. You have asked him to stop, but he finds it very amusing to watch you blush. +fallback=Question_3_AnswerOne,Beat up your cousin, then tell him that if he ever calls you that nickname again, you will bloody him worse than this time. +fallback=Question_3_AnswerTwo,Make up a story that makes your nickname a badge of honor instead of something humiliating. +fallback=Question_3_AnswerThree,Make up an even more embarrassing nickname for him and use it constantly until he learns his lesson. +fallback=Question_3_Sound,Vo\Misc\CharGen QA3.wav +fallback=Question_4_Question,There is a lot of heated discussion at the local tavern over a group of people called 'Telepaths'. They have been hired by certain City-State kings. Rumor has it these Telepaths read a person's mind and tell their lord whether a follower is telling the truth or not. +fallback=Question_4_AnswerOne,This is a terrible practice. A person's thoughts are his own and no one, not even a king, has the right to make such an invasion into another human's mind. +fallback=Question_4_AnswerTwo,Loyal followers to the King have nothing to fear from a Telepath. It is important to have a method of finding assassins and spies before it is too late. +fallback=Question_4_AnswerThree,In these times, it is a necessary evil. Although you do not necessarily like the idea, a Telepath could have certain advantages during a time of war or in finding someone innocent of a crime. +fallback=Question_4_Sound,Vo\Misc\CharGen QA4.wav +fallback=Question_5_Question,Your mother sends you to the market with a list of goods to buy. After you finish you find that by mistake a shopkeeper has given you too much money back in exchange for one of the items. +fallback=Question_5_AnswerOne,Return to the store and give the shopkeeper his hard-earned money, explaining to him the mistake? +fallback=Question_5_AnswerTwo,Decide to put the extra money to good use and purchase items that would help your family? +fallback=Question_5_AnswerThree,Pocket the extra money, knowing that shopkeepers in general tend to overcharge customers anyway? +fallback=Question_5_Sound,Vo\Misc\CharGen QA5.wav +fallback=Question_6_Question,While in a market place you witness a thief cut a purse from a noble. Even as he does so, the noble notices and calls for the city guards. In his haste to get away, the thief drops the purse near you. Surprisingly, no one seems to notice the bag of coins at your feet. +fallback=Question_6_AnswerOne,Pick up the bag and signal to the guard, knowing that the only honorable thing to do is return the money to its rightful owner? +fallback=Question_6_AnswerTwo,Leave the bag there, knowing that it is better not to get involved? +fallback=Question_6_AnswerThree,Pick up the bag and pocket it, knowing that the extra windfall will help your family in times of trouble? +fallback=Question_6_Sound,Vo\Misc\CharGen QA6.wav +fallback=Question_7_Question,Your father sends you on a task which you loathe, cleaning the stables. On the way there, pitchfork in hand, you run into your friend from the homestead near your own. He offers to do it for you, in return for a future favor of his choosing. +fallback=Question_7_AnswerOne,Decline his offer, knowing that your father expects you to do the work, and it is better not to be in debt? +fallback=Question_7_AnswerTwo,Ask him to help you, knowing that two people can do the job faster than one, and agree to help him with one task of his choosing in the future? +fallback=Question_7_AnswerThree,Accept his offer, reasoning that as long as the stables are cleaned, it matters not who does the cleaning? +fallback=Question_7_Sound,Vo\Misc\CharGen QA7.wav +fallback=Question_8_Question,Your mother asks you to help fix the stove. While you are working, a very hot pipe slips its moorings and falls towards her. +fallback=Question_8_AnswerOne,Position yourself between the pipe and your mother? +fallback=Question_8_AnswerTwo,Grab the hot pipe and try to push it away? +fallback=Question_8_AnswerThree,Push your mother out of the way? +fallback=Question_8_Sound,Vo\Misc\CharGen QA8.wav +fallback=Question_9_Question,While in town the baker gives you a sweetroll. Delighted, you take it into an alley to enjoy, only to be intercepted by a gang of three other kids your age. The leader demands the sweetroll, or else he and his friends will beat you and take it. +fallback=Question_9_AnswerOne,Drop the sweetroll and step on it, then get ready for the fight? +fallback=Question_9_AnswerTwo,Give him the sweetroll now without argument, knowing that later this afternoon you will have all your friends with you and can come and take whatever he owes you? +fallback=Question_9_AnswerThree,Act like you're going to give him the sweetroll, but at the last minute throw it in the air, hoping that they'll pay attention to it long enough for you to get a shot in on the leader? +fallback=Question_9_Sound,Vo\Misc\CharGen QA9.wav +fallback=Question_10_Question,Entering town you find that you are witness to a very well-dressed man running from a crowd. He screams to you for help. The crowd behind him seems very angry. +fallback=Question_10_AnswerOne,Rush to the town's aid immediately, despite your lack of knowledge of the circumstances? +fallback=Question_10_AnswerTwo,Stand aside and allow the man and mob to pass, realizing that it is probably best not to get involved? +fallback=Question_10_AnswerThree,Rush to the man's aid immediately, despite your lack of knowledge of the circumstances? +fallback=Question_10_Sound,Vo\Misc\CharGen QA10.wav +fallback=Blood_Model_0,BloodSplat.nif +fallback=Blood_Model_1,BloodSplat2.nif +fallback=Blood_Model_2,BloodSplat3.nif +fallback=Blood_Texture_0,Tx_Blood.tga +fallback=Blood_Texture_1,Tx_Blood_White.tga +fallback=Blood_Texture_2,Tx_Blood_Gold.tga +fallback=Blood_Texture_Name_0,Default (Red) +fallback=Blood_Texture_Name_1,Skeleton (White) +fallback=Blood_Texture_Name_2,Metal Sparks (Gold) +fallback=Movies_Company_Logo,bethesda logo.bik +fallback=Movies_Morrowind_Logo,mw_logo.bik +fallback=Movies_New_Game,mw_intro.bik +fallback=Movies_Loading,mw_load.bik +fallback=Movies_Options_Menu,mw_menu.bik +fallback=Weather_Thunderstorm_Thunder_Sound_ID_0,Thunder0 +fallback=Weather_Thunderstorm_Thunder_Sound_ID_1,Thunder1 +fallback=Weather_Thunderstorm_Thunder_Sound_ID_2,Thunder2 +fallback=Weather_Thunderstorm_Thunder_Sound_ID_3,Thunder3 +fallback=Weather_Sunrise_Time,6 +fallback=Weather_Sunset_Time,18 +fallback=Weather_Sunrise_Duration,2 +fallback=Weather_Sunset_Duration,2 +fallback=Weather_Hours_Between_Weather_Changes,20 +fallback=Weather_Thunderstorm_Thunder_Frequency,.4 +fallback=Weather_Thunderstorm_Thunder_Threshold,0.6 +fallback=Weather_EnvReduceColor,255,255,255,255 +fallback=Weather_LerpCloseColor,037,046,048,255 +fallback=Weather_BumpFadeColor,230,239,255,255 +fallback=Weather_AlphaReduce,0.35 +fallback=Weather_Minimum_Time_Between_Environmental_Sounds,1.0 +fallback=Weather_Maximum_Time_Between_Environmental_Sounds,5.0 +fallback=Weather_Sun_Glare_Fader_Max,0.5 +fallback=Weather_Sun_Glare_Fader_Angle_Max,30.0 +fallback=Weather_Sun_Glare_Fader_Color,222,095,039 +fallback=Weather_Timescale_Clouds,0 +fallback=Weather_Precip_Gravity,575 +fallback=Weather_Rain_Ripples,1 +fallback=Weather_Rain_Ripple_Radius,1024 +fallback=Weather_Rain_Ripples_Per_Drop,1 +fallback=Weather_Rain_Ripple_Scale,0.3 +fallback=Weather_Rain_Ripple_Speed,1.0 +fallback=Weather_Fog_Depth_Change_Speed,3 +fallback=Weather_Sky_Pre-Sunrise_Time,.5 +fallback=Weather_Sky_Post-Sunrise_Time,1 +fallback=Weather_Sky_Pre-Sunset_Time,1.5 +fallback=Weather_Sky_Post-Sunset_Time,.5 +fallback=Weather_Ambient_Pre-Sunrise_Time,.5 +fallback=Weather_Ambient_Post-Sunrise_Time,2 +fallback=Weather_Ambient_Pre-Sunset_Time,1 +fallback=Weather_Ambient_Post-Sunset_Time,1.25 +fallback=Weather_Fog_Pre-Sunrise_Time,.5 +fallback=Weather_Fog_Post-Sunrise_Time,1 +fallback=Weather_Fog_Pre-Sunset_Time,2 +fallback=Weather_Fog_Post-Sunset_Time,1 +fallback=Weather_Sun_Pre-Sunrise_Time,0 +fallback=Weather_Sun_Post-Sunrise_Time,0 +fallback=Weather_Sun_Pre-Sunset_Time,1 +fallback=Weather_Sun_Post-Sunset_Time,1.25 +fallback=Weather_Stars_Post-Sunset_Start,1 +fallback=Weather_Stars_Pre-Sunrise_Finish,2 +fallback=Weather_Stars_Fading_Duration,2 +fallback=Weather_Snow_Ripples,0 +fallback=Weather_Snow_Ripple_Radius,1024 +fallback=Weather_Snow_Ripples_Per_Flake,1 +fallback=Weather_Snow_Ripple_Scale,0.3 +fallback=Weather_Snow_Ripple_Speed,1.0 +fallback=Weather_Snow_Gravity_Scale,0.1 +fallback=Weather_Snow_High_Kill,700 +fallback=Weather_Snow_Low_Kill,150 +fallback=Weather_Clear_Cloud_Texture,Tx_Sky_Clear.tga +fallback=Weather_Clear_Clouds_Maximum_Percent,1.0 +fallback=Weather_Clear_Transition_Delta,.015 +fallback=Weather_Clear_Sky_Sunrise_Color,117,141,164 +fallback=Weather_Clear_Sky_Day_Color,095,135,203 +fallback=Weather_Clear_Sky_Sunset_Color,056,089,129 +fallback=Weather_Clear_Sky_Night_Color,009,010,011 +fallback=Weather_Clear_Fog_Sunrise_Color,255,189,157 +fallback=Weather_Clear_Fog_Day_Color,206,227,255 +fallback=Weather_Clear_Fog_Sunset_Color,255,189,157 +fallback=Weather_Clear_Fog_Night_Color,009,010,011 +fallback=Weather_Clear_Ambient_Sunrise_Color,047,066,096 +fallback=Weather_Clear_Ambient_Day_Color,137,140,160 +fallback=Weather_Clear_Ambient_Sunset_Color,068,075,096 +fallback=Weather_Clear_Ambient_Night_Color,032,035,042 +fallback=Weather_Clear_Sun_Sunrise_Color,242,159,119 +fallback=Weather_Clear_Sun_Day_Color,255,252,238 +fallback=Weather_Clear_Sun_Sunset_Color,255,114,079 +fallback=Weather_Clear_Sun_Night_Color,059,097,176 +fallback=Weather_Clear_Sun_Disc_Sunset_Color,255,189,157 +fallback=Weather_Clear_Land_Fog_Day_Depth,.69 +fallback=Weather_Clear_Land_Fog_Night_Depth,.69 +fallback=Weather_Clear_Wind_Speed,.1 +fallback=Weather_Clear_Cloud_Speed,1.25 +fallback=Weather_Clear_Glare_View,1 +fallback=Weather_Clear_Ambient_Loop_Sound_ID,None +fallback=Weather_Cloudy_Cloud_Texture,Tx_Sky_Cloudy.tga +fallback=Weather_Cloudy_Clouds_Maximum_Percent,1.0 +fallback=Weather_Cloudy_Transition_Delta,.015 +fallback=Weather_Cloudy_Sky_Sunrise_Color,126,158,173 +fallback=Weather_Cloudy_Sky_Day_Color,117,160,215 +fallback=Weather_Cloudy_Sky_Sunset_Color,111,114,159 +fallback=Weather_Cloudy_Sky_Night_Color,009,010,011 +fallback=Weather_Cloudy_Fog_Sunrise_Color,255,207,149 +fallback=Weather_Cloudy_Fog_Day_Color,245,235,224 +fallback=Weather_Cloudy_Fog_Sunset_Color,255,155,106 +fallback=Weather_Cloudy_Fog_Night_Color,009,010,011 +fallback=Weather_Cloudy_Ambient_Sunrise_Color,066,074,087 +fallback=Weather_Cloudy_Ambient_Day_Color,137,145,160 +fallback=Weather_Cloudy_Ambient_Sunset_Color,071,080,092 +fallback=Weather_Cloudy_Ambient_Night_Color,032,039,054 +fallback=Weather_Cloudy_Sun_Sunrise_Color,241,177,099 +fallback=Weather_Cloudy_Sun_Day_Color,255,236,221 +fallback=Weather_Cloudy_Sun_Sunset_Color,255,089,000 +fallback=Weather_Cloudy_Sun_Night_Color,077,091,124 +fallback=Weather_Cloudy_Sun_Disc_Sunset_Color,255,202,179 +fallback=Weather_Cloudy_Land_Fog_Day_Depth,.72 +fallback=Weather_Cloudy_Land_Fog_Night_Depth,.72 +fallback=Weather_Cloudy_Wind_Speed,.2 +fallback=Weather_Cloudy_Cloud_Speed,2 +fallback=Weather_Cloudy_Glare_View,1 +fallback=Weather_Cloudy_Ambient_Loop_Sound_ID,None +fallback=Weather_Foggy_Cloud_Texture,Tx_Sky_Foggy.tga +fallback=Weather_Foggy_Clouds_Maximum_Percent,1.0 +fallback=Weather_Foggy_Transition_Delta,.015 +fallback=Weather_Foggy_Sky_Sunrise_Color,197,190,180 +fallback=Weather_Foggy_Sky_Day_Color,184,211,228 +fallback=Weather_Foggy_Sky_Sunset_Color,142,159,176 +fallback=Weather_Foggy_Sky_Night_Color,018,023,028 +fallback=Weather_Foggy_Fog_Sunrise_Color,173,164,148 +fallback=Weather_Foggy_Fog_Day_Color,150,187,209 +fallback=Weather_Foggy_Fog_Sunset_Color,113,135,157 +fallback=Weather_Foggy_Fog_Night_Color,019,024,029 +fallback=Weather_Foggy_Ambient_Sunrise_Color,048,043,037 +fallback=Weather_Foggy_Ambient_Day_Color,092,109,120 +fallback=Weather_Foggy_Ambient_Sunset_Color,029,053,076 +fallback=Weather_Foggy_Ambient_Night_Color,028,033,039 +fallback=Weather_Foggy_Sun_Sunrise_Color,177,162,137 +fallback=Weather_Foggy_Sun_Day_Color,111,131,151 +fallback=Weather_Foggy_Sun_Sunset_Color,125,157,189 +fallback=Weather_Foggy_Sun_Night_Color,081,100,119 +fallback=Weather_Foggy_Sun_Disc_Sunset_Color,223,223,223 +fallback=Weather_Foggy_Land_Fog_Day_Depth,1.0 +fallback=Weather_Foggy_Land_Fog_Night_Depth,1.9 +fallback=Weather_Foggy_Wind_Speed,0 +fallback=Weather_Foggy_Cloud_Speed,1.25 +fallback=Weather_Foggy_Glare_View,0.25 +fallback=Weather_Foggy_Ambient_Loop_Sound_ID,None +fallback=Weather_Thunderstorm_Cloud_Texture,Tx_Sky_Thunder.tga +fallback=Weather_Thunderstorm_Clouds_Maximum_Percent,0.66 +fallback=Weather_Thunderstorm_Transition_Delta,.030 +fallback=Weather_Thunderstorm_Sky_Sunrise_Color,035,036,039 +fallback=Weather_Thunderstorm_Sky_Day_Color,097,104,115 +fallback=Weather_Thunderstorm_Sky_Sunset_Color,035,036,039 +fallback=Weather_Thunderstorm_Sky_Night_Color,019,020,022 +fallback=Weather_Thunderstorm_Fog_Sunrise_Color,070,074,085 +fallback=Weather_Thunderstorm_Fog_Day_Color,097,104,115 +fallback=Weather_Thunderstorm_Fog_Sunset_Color,070,074,085 +fallback=Weather_Thunderstorm_Fog_Night_Color,019,020,022 +fallback=Weather_Thunderstorm_Ambient_Sunrise_Color,054,054,054 +fallback=Weather_Thunderstorm_Ambient_Day_Color,090,090,090 +fallback=Weather_Thunderstorm_Ambient_Sunset_Color,054,054,054 +fallback=Weather_Thunderstorm_Ambient_Night_Color,049,051,054 +fallback=Weather_Thunderstorm_Sun_Sunrise_Color,091,099,122 +fallback=Weather_Thunderstorm_Sun_Day_Color,138,144,155 +fallback=Weather_Thunderstorm_Sun_Sunset_Color,096,101,117 +fallback=Weather_Thunderstorm_Sun_Night_Color,055,076,110 +fallback=Weather_Thunderstorm_Sun_Disc_Sunset_Color,128,128,128 +fallback=Weather_Thunderstorm_Land_Fog_Day_Depth,1 +fallback=Weather_Thunderstorm_Land_Fog_Night_Depth,1.15 +fallback=Weather_Thunderstorm_Wind_Speed,.5 +fallback=Weather_Thunderstorm_Cloud_Speed,3 +fallback=Weather_Thunderstorm_Glare_View,0 +fallback=Weather_Thunderstorm_Rain_Loop_Sound_ID,rain heavy +fallback=Weather_Thunderstorm_Using_Precip,1 +fallback=Weather_Thunderstorm_Rain_Diameter,600 +fallback=Weather_Thunderstorm_Rain_Height_Min,200 +fallback=Weather_Thunderstorm_Rain_Height_Max,700 +fallback=Weather_Thunderstorm_Rain_Threshold,0.6 +fallback=Weather_Thunderstorm_Max_Raindrops,650 +fallback=Weather_Thunderstorm_Rain_Entrance_Speed,5 +fallback=Weather_Thunderstorm_Ambient_Loop_Sound_ID,None +fallback=Weather_Thunderstorm_Flash_Decrement,4 +fallback=Weather_Rain_Cloud_Texture,Tx_Sky_Rainy.tga +fallback=Weather_Rain_Clouds_Maximum_Percent,0.66 +fallback=Weather_Rain_Transition_Delta,.015 +fallback=Weather_Rain_Sky_Sunrise_Color,071,074,075 +fallback=Weather_Rain_Sky_Day_Color,116,120,122 +fallback=Weather_Rain_Sky_Sunset_Color,073,073,073 +fallback=Weather_Rain_Sky_Night_Color,024,025,026 +fallback=Weather_Rain_Fog_Sunrise_Color,071,074,075 +fallback=Weather_Rain_Fog_Day_Color,116,120,122 +fallback=Weather_Rain_Fog_Sunset_Color,073,073,073 +fallback=Weather_Rain_Fog_Night_Color,024,025,026 +fallback=Weather_Rain_Ambient_Sunrise_Color,097,090,088 +fallback=Weather_Rain_Ambient_Day_Color,105,110,113 +fallback=Weather_Rain_Ambient_Sunset_Color,088,097,097 +fallback=Weather_Rain_Ambient_Night_Color,050,055,067 +fallback=Weather_Rain_Sun_Sunrise_Color,131,122,120 +fallback=Weather_Rain_Sun_Day_Color,149,157,170 +fallback=Weather_Rain_Sun_Sunset_Color,120,126,131 +fallback=Weather_Rain_Sun_Night_Color,050,062,101 +fallback=Weather_Rain_Sun_Disc_Sunset_Color,128,128,128 +fallback=Weather_Rain_Land_Fog_Day_Depth,.8 +fallback=Weather_Rain_Land_Fog_Night_Depth,.8 +fallback=Weather_Rain_Wind_Speed,.3 +fallback=Weather_Rain_Cloud_Speed,2 +fallback=Weather_Rain_Glare_View,0 +fallback=Weather_Rain_Rain_Loop_Sound_ID,Rain +fallback=Weather_Rain_Using_Precip,1 +fallback=Weather_Rain_Rain_Diameter,600 +fallback=Weather_Rain_Rain_Height_Min,200 +fallback=Weather_Rain_Rain_Height_Max,700 +fallback=Weather_Rain_Rain_Threshold,0.6 +fallback=Weather_Rain_Rain_Entrance_Speed,7 +fallback=Weather_Rain_Ambient_Loop_Sound_ID,None +fallback=Weather_Rain_Max_Raindrops,450 +fallback=Weather_Overcast_Cloud_Texture,Tx_Sky_Overcast.tga +fallback=Weather_Overcast_Clouds_Maximum_Percent,1.0 +fallback=Weather_Overcast_Transition_Delta,.015 +fallback=Weather_Overcast_Sky_Sunrise_Color,091,099,106 +fallback=Weather_Overcast_Sky_Day_Color,143,146,149 +fallback=Weather_Overcast_Sky_Sunset_Color,108,115,121 +fallback=Weather_Overcast_Sky_Night_Color,019,022,025 +fallback=Weather_Overcast_Fog_Sunrise_Color,091,099,106 +fallback=Weather_Overcast_Fog_Day_Color,143,146,149 +fallback=Weather_Overcast_Fog_Sunset_Color,108,115,121 +fallback=Weather_Overcast_Fog_Night_Color,019,022,025 +fallback=Weather_Overcast_Ambient_Sunrise_Color,084,088,092 +fallback=Weather_Overcast_Ambient_Day_Color,093,096,105 +fallback=Weather_Overcast_Ambient_Sunset_Color,083,077,075 +fallback=Weather_Overcast_Ambient_Night_Color,057,060,066 +fallback=Weather_Overcast_Sun_Sunrise_Color,087,125,163 +fallback=Weather_Overcast_Sun_Day_Color,163,169,183 +fallback=Weather_Overcast_Sun_Sunset_Color,085,103,157 +fallback=Weather_Overcast_Sun_Night_Color,032,054,100 +fallback=Weather_Overcast_Sun_Disc_Sunset_Color,128,128,128 +fallback=Weather_Overcast_Land_Fog_Day_Depth,.70 +fallback=Weather_Overcast_Land_Fog_Night_Depth,.70 +fallback=Weather_Overcast_Wind_Speed,.2 +fallback=Weather_Overcast_Cloud_Speed,1.5 +fallback=Weather_Overcast_Glare_View,0 +fallback=Weather_Overcast_Ambient_Loop_Sound_ID,None +fallback=Weather_Ashstorm_Cloud_Texture,Tx_Sky_Ashstorm.tga +fallback=Weather_Ashstorm_Clouds_Maximum_Percent,1.0 +fallback=Weather_Ashstorm_Transition_Delta,.035 +fallback=Weather_Ashstorm_Sky_Sunrise_Color,091,056,051 +fallback=Weather_Ashstorm_Sky_Day_Color,124,073,058 +fallback=Weather_Ashstorm_Sky_Sunset_Color,106,055,040 +fallback=Weather_Ashstorm_Sky_Night_Color,020,021,022 +fallback=Weather_Ashstorm_Fog_Sunrise_Color,091,056,051 +fallback=Weather_Ashstorm_Fog_Day_Color,124,073,058 +fallback=Weather_Ashstorm_Fog_Sunset_Color,106,055,040 +fallback=Weather_Ashstorm_Fog_Night_Color,020,021,022 +fallback=Weather_Ashstorm_Ambient_Sunrise_Color,054,042,037 +fallback=Weather_Ashstorm_Ambient_Day_Color,075,049,041 +fallback=Weather_Ashstorm_Ambient_Sunset_Color,048,039,035 +fallback=Weather_Ashstorm_Ambient_Night_Color,036,042,049 +fallback=Weather_Ashstorm_Sun_Sunrise_Color,184,091,071 +fallback=Weather_Ashstorm_Sun_Day_Color,228,139,114 +fallback=Weather_Ashstorm_Sun_Sunset_Color,185,086,057 +fallback=Weather_Ashstorm_Sun_Night_Color,054,066,074 +fallback=Weather_Ashstorm_Sun_Disc_Sunset_Color,128,128,128 +fallback=Weather_Ashstorm_Land_Fog_Day_Depth,1.1 +fallback=Weather_Ashstorm_Land_Fog_Night_Depth,1.2 +fallback=Weather_Ashstorm_Wind_Speed,.8 +fallback=Weather_Ashstorm_Cloud_Speed,7 +fallback=Weather_Ashstorm_Glare_View,0 +fallback=Weather_Ashstorm_Ambient_Loop_Sound_ID,ashstorm +fallback=Weather_Ashstorm_Storm_Threshold,.70 +fallback=Weather_Blight_Cloud_Texture,Tx_Sky_Blight.tga +fallback=Weather_Blight_Clouds_Maximum_Percent,1.0 +fallback=Weather_Blight_Transition_Delta,.040 +fallback=Weather_Blight_Sky_Sunrise_Color,090,035,035 +fallback=Weather_Blight_Sky_Day_Color,090,035,035 +fallback=Weather_Blight_Sky_Sunset_Color,092,033,033 +fallback=Weather_Blight_Sky_Night_Color,044,014,014 +fallback=Weather_Blight_Fog_Sunrise_Color,090,035,035 +fallback=Weather_Blight_Fog_Day_Color,128,019,019 +fallback=Weather_Blight_Fog_Sunset_Color,092,033,033 +fallback=Weather_Blight_Fog_Night_Color,044,014,014 +fallback=Weather_Blight_Ambient_Sunrise_Color,061,040,040 +fallback=Weather_Blight_Ambient_Day_Color,079,054,054 +fallback=Weather_Blight_Ambient_Sunset_Color,061,040,040 +fallback=Weather_Blight_Ambient_Night_Color,056,058,062 +fallback=Weather_Blight_Sun_Sunrise_Color,180,078,078 +fallback=Weather_Blight_Sun_Day_Color,224,084,084 +fallback=Weather_Blight_Sun_Sunset_Color,180,078,078 +fallback=Weather_Blight_Sun_Night_Color,061,091,143 +fallback=Weather_Blight_Sun_Disc_Sunset_Color,128,128,128 +fallback=Weather_Blight_Land_Fog_Day_Depth,1.1 +fallback=Weather_Blight_Land_Fog_Night_Depth,1.2 +fallback=Weather_Blight_Wind_Speed,.9 +fallback=Weather_Blight_Cloud_Speed,9 +fallback=Weather_Blight_Glare_View,0 +fallback=Weather_Blight_Ambient_Loop_Sound_ID,Blight +fallback=Weather_Blight_Storm_Threshold,.70 +fallback=Weather_Blight_Disease_Chance,.10 +fallback=Weather_Snow_Cloud_Texture,Tx_BM_Sky_Snow.tga +fallback=Weather_Snow_Clouds_Maximum_Percent,1.0 +fallback=Weather_Snow_Transition_Delta,.015 +fallback=Weather_Snow_Sky_Sunrise_Color,106,091,091 +fallback=Weather_Snow_Sky_Day_Color,153,158,166 +fallback=Weather_Snow_Sky_Sunset_Color,096,115,134 +fallback=Weather_Snow_Sky_Night_Color,031,035,039 +fallback=Weather_Snow_Fog_Sunrise_Color,106,091,091 +fallback=Weather_Snow_Fog_Day_Color,153,158,166 +fallback=Weather_Snow_Fog_Sunset_Color,096,115,134 +fallback=Weather_Snow_Fog_Night_Color,031,035,039 +fallback=Weather_Snow_Ambient_Sunrise_Color,092,084,084 +fallback=Weather_Snow_Ambient_Day_Color,093,096,105 +fallback=Weather_Snow_Ambient_Sunset_Color,070,079,087 +fallback=Weather_Snow_Ambient_Night_Color,049,058,068 +fallback=Weather_Snow_Sun_Sunrise_Color,141,109,109 +fallback=Weather_Snow_Sun_Day_Color,163,169,183 +fallback=Weather_Snow_Sun_Sunset_Color,101,121,141 +fallback=Weather_Snow_Sun_Night_Color,055,066,077 +fallback=Weather_Snow_Sun_Disc_Sunset_Color,128,128,128 +fallback=Weather_Snow_Land_Fog_Day_Depth,1.0 +fallback=Weather_Snow_Land_Fog_Night_Depth,1.2 +fallback=Weather_Snow_Wind_Speed,0 +fallback=Weather_Snow_Cloud_Speed,1.5 +fallback=Weather_Snow_Glare_View,0 +fallback=Weather_Snow_Snow_Diameter,800 +fallback=Weather_Snow_Snow_Height_Min,400 +fallback=Weather_Snow_Snow_Height_Max,700 +fallback=Weather_Snow_Snow_Entrance_Speed,6 +fallback=Weather_Snow_Max_Snowflakes,750 +fallback=Weather_Snow_Ambient_Loop_Sound_ID,None +fallback=Weather_Snow_Snow_Threshold,0.5 +fallback=Weather_Blizzard_Cloud_Texture,Tx_BM_Sky_Blizzard.tga +fallback=Weather_Blizzard_Clouds_Maximum_Percent,1.0 +fallback=Weather_Blizzard_Transition_Delta,.030 +fallback=Weather_Blizzard_Sky_Sunrise_Color,091,099,106 +fallback=Weather_Blizzard_Sky_Day_Color,121,133,145 +fallback=Weather_Blizzard_Sky_Sunset_Color,108,115,121 +fallback=Weather_Blizzard_Sky_Night_Color,027,029,031 +fallback=Weather_Blizzard_Fog_Sunrise_Color,091,099,106 +fallback=Weather_Blizzard_Fog_Day_Color,121,133,145 +fallback=Weather_Blizzard_Fog_Sunset_Color,108,115,121 +fallback=Weather_Blizzard_Fog_Night_Color,021,024,028 +fallback=Weather_Blizzard_Ambient_Sunrise_Color,084,088,092 +fallback=Weather_Blizzard_Ambient_Day_Color,093,096,105 +fallback=Weather_Blizzard_Ambient_Sunset_Color,083,077,075 +fallback=Weather_Blizzard_Ambient_Night_Color,053,062,070 +fallback=Weather_Blizzard_Sun_Sunrise_Color,114,128,146 +fallback=Weather_Blizzard_Sun_Day_Color,163,169,183 +fallback=Weather_Blizzard_Sun_Sunset_Color,106,114,136 +fallback=Weather_Blizzard_Sun_Night_Color,057,066,074 +fallback=Weather_Blizzard_Sun_Disc_Sunset_Color,128,128,128 +fallback=Weather_Blizzard_Land_Fog_Day_Depth,2.8 +fallback=Weather_Blizzard_Land_Fog_Night_Depth,3.0 +fallback=Weather_Blizzard_Wind_Speed,.9 +fallback=Weather_Blizzard_Cloud_Speed,7.5 +fallback=Weather_Blizzard_Glare_View,0 +fallback=Weather_Blizzard_Ambient_Loop_Sound_ID,BM Blizzard +fallback=Weather_Blizzard_Storm_Threshold,.50 +fallback=Moons_Secunda_Size,40 +fallback=Moons_Secunda_Axis_Offset,50 +fallback=Moons_Secunda_Speed,.6 +fallback=Moons_Secunda_Daily_Increment,1.2 +fallback=Moons_Secunda_Moon_Shadow_Early_Fade_Angle,0.5 +fallback=Moons_Secunda_Fade_Start_Angle,50 +fallback=Moons_Secunda_Fade_End_Angle,30 +fallback=Moons_Secunda_Fade_In_Start,14 +fallback=Moons_Secunda_Fade_In_Finish,15 +fallback=Moons_Secunda_Fade_Out_Start,7 +fallback=Moons_Secunda_Fade_Out_Finish,10 +fallback=Moons_Masser_Size,94 +fallback=Moons_Masser_Axis_Offset,35 +fallback=Moons_Masser_Speed,.5 +fallback=Moons_Masser_Daily_Increment,1 +fallback=Moons_Masser_Moon_Shadow_Early_Fade_Angle,0.5 +fallback=Moons_Masser_Fade_Start_Angle,50 +fallback=Moons_Masser_Fade_End_Angle,40 +fallback=Moons_Masser_Fade_In_Start,14 +fallback=Moons_Masser_Fade_In_Finish,15 +fallback=Moons_Masser_Fade_Out_Start,7 +fallback=Moons_Masser_Fade_Out_Finish,10 +fallback=Moons_Script_Color,255,20,20 +fallback=General_Werewolf_FOV,100 +encoding=win1252 +data="/home/anon/usr/games/morrowind/app/Data Files" +data="/home/anon/usr/games/openmwmods/patches/patchforpurists" +data="/home/anon/usr/games/openmwmods/patches/umopp" +data="/home/anon/usr/games/openmwmods/performance/morrowindoptimizationpatch/00 Core/" +data="/home/anon/usr/games/openmwmods/performance/morrowindoptimizationpatch/01 Fixed Vanilla Textures/" +data="/home/anon/usr/games/openmwmods/performance/morrowindoptimizationpatch/02 Lake Fjalding Anti-Suck/" +data="/home/anon/usr/games/openmwmods/architechture/glowinthedahrk/00 Core" +data="/home/anon/usr/games/openmwmods/architechture/glowinthedahrk/01 Hi Res Window Texture Replacer" +data="/home/anon/usr/games/openmwmods/architechture/glowinthedahrk/03 Nord Glass Windows Interior Sunrays" +data="/home/anon/usr/games/openmwmods/architechture/glowinthedahrk/04 Telvanni Dormers on Vvardenfell" +data="/home/anon/usr/games/openmwmods/architechture/glowinthedahrk/05 Raven Rock Glass Windows Interior Sunrays" +data="/home/anon/usr/games/openmwmods/architechture/glowinthedahrk/06 Tamriel Data Patch Interior Sunrays/" +data="/home/anon/usr/games/openmwmods/gameplay/herbalism/00 Core + Vanilla Meshes/" +data="/home/anon/usr/games/openmwmods/gameplay/herbalism/01 Optional - Smoothed Meshes/" +data="/home/anon/usr/games/openmwmods/performance/atlas/00 Core/" +data="/home/anon/usr/games/openmwmods/performance/atlas/10 Glow in the Dahrk Patch/" +data="/home/anon/usr/games/openmwmods/performance/atlas/20 BC Mushrooms - Smoothed/" +data="/home/anon/usr/games/openmwmods/performance/atlas/30 Redware - Smoothed/" +data="/home/anon/usr/games/openmwmods/performance/atlas/40 Urns - Smoothed/" +data="/home/anon/usr/games/openmwmods/performance/atlas/50 Wood Poles - Hi-Res Texture/" +data="/home/anon/usr/games/openmwmods/gameplay/herbalism/patches/12 Atlas - Smoothed BC Mushrooms" +data="/home/anon/usr/games/openmwmods/texturepacks/intelligent/00 Core/" +data="/home/anon/usr/games/openmwmods/texturepacks/intelligent/01 Atlas Textures/" +data="/home/anon/usr/games/openmwmods/npcs/facelift/default" +data="/home/anon/usr/games/openmwmods/npcs/facelift/update" +data="/home/anon/usr/games/openmwmods/npcs/facelift/tr_pt" +data="/home/anon/usr/games/openmwmods/npcs/objects/animated/main" +data="/home/anon/usr/games/openmwmods/npcs/objects/animated/optional" +data="/home/anon/usr/games/openmwmods/land/tamrieldata" +data="/home/anon/usr/games/openmwmods/land/tamriel/00 Core/" +data="/home/anon/usr/games/openmwmods/land/tamriel/01 Faction Integration/" +data="/home/anon/usr/games/openmwmods/land/tamriel/03 Travel Network for Core and Vvardenfell/" +data="/home/anon/usr/games/openmwmods/land/cyrodiil" +data="/home/anon/usr/games/openmwmods/land/skyrim" +data="/home/anon/usr/games/openmwmods/weapons/sheathing" +data="/home/anon/usr/games/openmwmods/performance/morrowindoptimizationpatch/04 Weapon Sheathing Patch/" +data="/home/anon/usr/games/openmwmods/weapons/ammoequip" +data="/home/anon/usr/games/openmwmods/gameplay/timescale" +data="/home/anon/usr/games/openmwmods/architechture/signposts" +data="/home/anon/usr/games/openmwmods/ui/skyrim/default/" +data="/home/anon/usr/games/openmwmods/ui/skyrim/menu/" +data="/home/anon/usr/games/openmwmods/ui/skyrim/update/" +#data="/home/anon/usr/games/openmwmods/texturepacks/concept" +content=Morrowind.esm +content=Tribunal.esm +content=Bloodmoon.esm +content=Patch for Purists.esm +content=Tamriel_Data.esm +content=TR_Mainland.esm +content=Sky_Main.esm +content=Cyrodiil_Main.esm +content=Patch for Purists - Book Typos.ESP +content=Patch for Purists - Semi-Purist Fixes.ESP +content=Containers Animated.esp +content=Unofficial Morrowind Official Plugins Patched.ESP +content=TR_Travels.esp +content=TR_Factions.esp +content=Lake Fjalding Anti-Suck.ESP +content=GITD_Telvanni_Dormers.ESP +content=GITD_WL_RR_Interiors.esp +content=Auto Ammo Equip for OpenMW.omwaddon +content=TimescaleChange.omwaddon +content=RealSignposts.esp diff --git a/etc/openmw/settings.cfg b/etc/openmw/settings.cfg @@ -0,0 +1,104 @@ +# This is the OpenMW user 'settings.cfg' file. This file only contains +# explicitly changed settings. If you would like to revert a setting +# to its default, simply remove it from this file. For available +# settings, see the file 'settings-default.cfg' or the documentation at: +# +# https://openmw.readthedocs.io/en/master/reference/modding/settings/index.html + +[Camera] +viewing distance = 30000 + +[Game] +barter disposition change is permanent = true +followers attack on sight = true +prevent merchant equipping = true +rebalance soul gem values = true +strength influences hand to hand = 2 +use magic item animations = true +use additional anim sources = true +weapon sheathing = true +shield sheathing = true +can loot during death animation = false + +[Input] +toggle sneak = true +always run = false + +[Shadows] +actor shadows = true +enable shadows = true +object shadows = true +player shadows = true +terrain shadows = true + +[Video] +vsync = true +fullscreen = false +resolution x = 1366 +resolution y = 768 + +[GUI] +menu transparency = 0.757176 +subtitles = true +stretch menu background = true + +[HUD] +crosshair = false + +[Saves] +character = Valagar + +[Water] +refraction = false +rtt size = 512 +shader = false + +[Terrain] +distant terrain = true + +[Shaders] +apply lighting to environment maps = true +clamp lighting = false +auto use object normal maps = true +auto use object specular maps = true +auto use terrain normal maps = true +auto use terrain specular maps = true +radial fog = true + +[Windows] +barter h = 0.851562 +barter w = 0.445827 +barter x = 0.540996 +barter y = 0.03125 +inventory barter h = 0.882812 +inventory barter w = 0.502928 +inventory barter x = 0.0139092 +inventory barter y = 0.0338542 +inventory h = 0.877604 +inventory w = 0.453148 +inventory x = 0.0153734 +inventory y = 0.0169271 +map h = 0.453125 +map w = 0.510249 +map x = 0.478038 +map y = 0.440104 +spells h = 0.411458 +spells w = 0.191801 +spells x = 0.795022 +spells y = 0.015625 +stats h = 0.411458 +stats w = 0.307467 +stats x = 0.47877 +stats y = 0.015625 +dialogue h = 0.81901 +dialogue w = 0.431918 +dialogue x = 0.552709 +dialogue y = 0.0247396 + +[Sound] +music volume = 0 +master volume = 0.20442 +voice volume = 0 + +[Map] +global = true diff --git a/etc/shell/profile b/etc/shell/profile @@ -0,0 +1,119 @@ +#!/bin/ksh +# shellcheck disable=SC2164 + +set -o vi + +# pkg_purge +# shellcheck disable=SC2015 +function pkp { + test -z "$1" && echo "pkg_delete: No packages to delete" || doas pkg_delete "$@"; doas pkg_delete -a +} + +# shellcheck disable=SC2046 +export PASSWORD_STORE_DIR="$HOME/var/spm" + +# Tmux management. Credit to roman zolotarev, OpenBSD wizard. +t() { tmux new -DAs 0; } + +m() { stmux 'mus' 'usr/mus' 'cmus'; } +n() { stmux 'new' 'var/newsboat' 'newsboat'; } +w() { stmux 'web' 'var/www'; } +i() { stmux 'irc' 'var/irc' 'weechat'; } +e() { stmux 'ema' 'var/mail' 'mutt'; } +s() { stmux 'ssh' 'var/www' 'ssh anon@8.9.30.198'; } +p() { stmux 'pro' '.' 'profanity'; } + +############## +# Completion # +############## + +set -A complete_spm_1 -- add del list search show help +set -A complete_spm_2 -- $(find "$PASSWORD_STORE_DIR" -type f | cut -c "21-$*") + +set -A complete_rcctl_1 -- disable enable get ls order set restart start stop +# shellcheck disable=SC2046 +set -A complete_rcctl_2 -- $(rcctl ls all) + +set -A complete_git_1 -- add am archive \ +bisect branch bundle \ +checkout cherry-pick citool clean clone commit config \ +describe diff \ +fetch format-patch \ +gc grep gui \ +init \ +log \ +merge mv \ +notes \ +pull push \ +range-diff rebase reset restore revert rm \ +shortlog show sparse-checkout stash status submodule switch \ +tag \ +worktree + +# shellcheck disable=SC2046 +test "$(id -u)" = 1000 && set -A complete_ssh -- $(cut -f 1 -d " " ~/.ssh/known_hosts) + +# Acme setup +test "$winid" && _cd() { cd "$1" && awd "$1"; } && alias cd=_cd + +########### +# Aliases # +########### + +# Package management +alias \ + pka='doas pkg_add' \ + pkd='doas pkg_delete' \ + pki='pkg_info' \ + pkl='pkg_locate' \ + +# Configuration +alias \ + a='E ~/etc/shell/profile && . ~/etc/shell/profile' \ + abook='abook -C $HOME/etc/abook/abookrc --datafile $HOME/var/abook/addressbook' \ + newsboat='newsboat -C $HOME/etc/newsboat/config -u $HOME/etc/newsboat/urls' \ + vdwm='v ~/usr/src/dwm/config.h' \ + vst='v ~/usr/src/st/config.h' + +# Mounting +alias \ + mtp='doas simple-mtpfs --device 1 /mnt/mtp -o uid=1000 -o gid=1000 -o allow_other' \ + ddrive='doas mount /dev/sd1c /mnt/ddrive' + +# Devour +alias \ + firefox='devour firefox' \ + iridium='devour iridium' + +# Misc +alias \ + chok='chocolate-doom' \ + cp='cp -v' \ + blood='cd $HOME/usr/games/blood; nblood' \ + duke='cd $HOME/usr/games/duke; eduke32' \ + deemix='deemix -b flac' \ + drawterm='cpu=192.168.2.88 auth=192.168.2.88 USER=glenda drawterm' \ + gpg='gpg2' \ + ls='ls -F' \ + ll='ls -hFl' \ + mv='mv -v' \ + newtor='doas rcctl restart tor' \ + office='spm show office/school' \ + pipdate="pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U" \ + rm='rm -v' \ + s='devour' \ + sxh='sxhkd >/dev/null &' \ + trem='doas -u _transmission transmission-remote' \ + wait='sleep' \ + wireless='doas wireless' + +# Environment variables +export DOOMWADDIR="/usr/local/share/doom" +export NOTMUCH_CONFIG="$HOME/etc/notmuch/notmuch-config" +export GAP="8" +export MASTER="960" +export ACTIVE="0xd79921" +export INACTIVE="0xa89984" +export DOOMDIR="$HOME/etc/doom" +export PASSWORD_STORE_KEY=mitch@mitchtaylor.xyz +export GOPATH=/home/mitch/usr/src/go diff --git a/etc/sxhkd/sxhkdrc b/etc/sxhkd/sxhkdrc @@ -0,0 +1,99 @@ +#!/bin/sh + +# dmenu +super + grave + dmenu_run +super + shift + grave + deeserch + +# terminal +super + Return + st +#super + shift + Return +# termdraw + +# tmux manipulation +super + s ; {n,m,g,c,w,o,s,p} + {stmux "new" "$HOME/var/newsboat" ". $HOME/.profile; newsboat",stmux "ema" "$HOME/var/mail" "mutt",stmux "mat" "$HOME/tmp" "gomuks",stmux "mus" "$HOME/usr/mus" "cmus",stmux "web" "$HOME/var/www" "ksh",stmux "not" "$HOME/notes" ". $HOME/.profile; v $HOME/usr/notes/general",stmux 'ssh' 'var/www' 'ssh anon@8.9.30.198',stmux 'pro' '.' 'profanity'} + +# theme switch +#super + c +# themeswitch -t + +# browser(s) +super + w ; {f,i,d,l} + {firefox,iridium,dillo,st -e lynx} + +# desktop background +super + a ; {f,r,g,b,t,m} + {xwallpaper --tile $HOME/usr/img/wal/tile/floral.jpg, xsetroot -solid \#330000, xsetroot -solid \#003300, xsetroot -solid \#000033, xsetroot -mod 3 3 -bg \#454545,xwallpaper --focus $HOME/usr/img/wal/full/mech.jpg} + +# music control +super + p + cmus-remote -u +super + comma + cmus-remote -r +super + period + cmus-remote -n + +# screenshots +Print + screenshot +Scroll_Lock + screenshot +shift + Print + viewshot +shift + Scroll_Lock + viewshot + +# volume control +super + F3 + sndioctl output.level=+0.031 +super + F2 + sndioctl output.level=-0.031 +super + F1 + mute -s +super + F4 + mute -m + +########### +# WMUTILS # +########### + +# groups +#super + shift + {1,2,3,4,5} +# gruup -s "$(pfw)" {1,2,3,4,5} +#super + {1,2,3,4,5} +# gruup -t {1,2,3,4,5} +#super + shift + 0 +# gruup -c "$(pfw)" + +# kill window +#super + apostrophe +# killw -p "$(pfw)" + +# move windows around +#super + {Left,Down,Up,Right} +# wmv {-20 0, 0 20, 0 -20, 20 0} $(pfw) + +# resize windows +#super + shift + {Left,Down,Up,Right} +# wrs {-20 0, 0 20, 0 -20, 20 0} $(pfw) + +# focus windows +#super + k +# focus next +#super + j +# focus prev + +# teleport windows +#super + {f,g,x,b,d} +# corner {tl, tr, bl, br, md} + +# fullscreen +#super + u +# fs $(pfw) + +# tile windows +#super + t +# tile diff --git a/etc/tmux/tmux.conf b/etc/tmux/tmux.conf @@ -0,0 +1,65 @@ +set -g terminal-overrides ',xterm-256color:Tc' +set -g default-terminal "tmux-256color" +set -as terminal-overrides ',xterm*:sitm=\E[3m' +set -g base-index 1 +set -g renumber-windows on +set -g status-interval 60 +set -g status-right-length 100 +set -sg escape-time 0 +setw -g mode-keys vi +set -g status-keys vi +setw -g aggressive-resize on + +set -g status-justify "left" +set -g status "on" +set -g status-left-style "none" + +set -g status-right-length "100" +set -g status-left-length "100" +setw -g window-status-activity-style "none" + +set -g message-style bg=black,fg=green,bold +set -g status-style bg=black,fg=yellow +set -g window-status-current-style bold + +weather='#(curl -s "wttr.in/New York?format=%%l:+%%C+%%t+(%%f)")' + +set -g status-right-style "none" + +set -g set-titles on +set -g set-titles-string "t[#S] #T" + +set -g status-left "" +set -g status-right "$weather  %I:%M %p  #h " +setw -g window-status-format " #W |" + +setw -g window-status-current-format " #W " + +set -g window-status-separator "" + +set-option -g prefix C-a +unbind-key C-b +bind-key C-a send-prefix + +bind -r H resize-pane -L 2 +bind -r J resize-pane -D 2 +bind -r K resize-pane -U 2 +bind -r L resize-pane -R 2 +bind -r h select-pane -L +bind -r j select-pane -D +bind -r k select-pane -U +bind -r l select-pane -R + +bind-key x kill-pane +bind-key & kill-window + +bind r source-file ~/etc/tmux/tmux.conf\; display-message "tmux configuration reloaded" + +bind -T copy-mode-vi 'y' send -X copy-pipe-and-cancel \ + 'xclip -i -selection clipboard' + +bind -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe-and-cancel \ + 'xclip -i -selection clipboard' + +bind -n MouseDown2Pane run \ + 'tmux set-buffer "$(xclip -o -selection clipboard)";tmux paste-buffer' diff --git a/etc/urlview/config b/etc/urlview/config @@ -0,0 +1,3 @@ +REGEXP (((http|https|ftp|gopher)|mailto)[.:][^ >"\t]*|www\.[-a-z0-9.]+)[^ .,;\t>">\):] + +COMMAND opener diff --git a/etc/user-dirs.dirs b/etc/user-dirs.dirs @@ -0,0 +1,6 @@ +XDG_DOWNLOAD_DIR="$HOME/tmp" +XDG_MUSIC_DIR="$HOME/usr/mus" +XDG_PICTURES_DIR="$HOME/usr/img" +XDG_DOCUMENTS_DIR="$HOME/usr/doc" +XDG_DESKTOP_DIR="$HOME/var/applications" +XDG_VIDEOS_DIR="$HOME/usr/vid" diff --git a/etc/x11/xinitrc b/etc/x11/xinitrc @@ -0,0 +1,33 @@ +#!/bin/sh -e + +# shellcheck source=.profile +. "$HOME/.profile" + +setxkbmap -layout 'dvorak,us' -option \ +'caps:escape,compose:ralt,grp:alt_space_toggle,grp_led:caps' +xmodmap -e 'keycode 117 = Super_R' + +xset -b +xset r rate 300 50 + +xrdb -merge "$HOME/etc/x11/xresources" + +xclickroot -1 xrootmenu & +xclickroot -2 xgamemenu & +xclickroot -3 xnotifmenu & + +XNOTIFY_FIFO="$HOME/var/cache/xnotify" +export XNOTIFY_FIFO +rm -f "$XNOTIFY_FIFO" +mkfifo "$XNOTIFY_FIFO" +xnotify -s 5 -g -30+60 0<>"$XNOTIFY_FIFO" & +tiramisu -j | jq --raw-output --unbuffered '"IMG:" + .app_icon + "\t" + .summary + "\t" + .body' > "$XNOTIFY_FIFO" & +export XNOTIFY_PID=$! + +wal "$HOME/usr/img/wal/" +xsetroot -name " OpenBSD 6.9 " + +emacs --daemon && notify-send "Emacs daemon started" & +sxhkd & +bar | sh & +exec monsterwm | mopag diff --git a/etc/x11/xinitrc~ b/etc/x11/xinitrc~ @@ -0,0 +1,34 @@ +#!/bin/sh -e + +# shellcheck source=.profile +. "$HOME/.profile" + +setxkbmap -layout 'dvorak,us' -option \ +'caps:escape,compose:ralt,grp:alt_space_toggle,grp_led:caps' +xmodmap -e 'keycode 117 = Super_R' + +xset -b +xset r rate 300 50 + +xrdb -merge "$HOME/etc/x11/xresources" + +xclickroot -1 xrootmenu & +xclickroot -2 xgamemenu & +xclickroot -3 xnotifmenu & + +XNOTIFY_FIFO="$HOME/var/cache/xnotify" +export XNOTIFY_FIFO +rm -f "$XNOTIFY_FIFO" +mkfifo "$XNOTIFY_FIFO" +xnotify -s 5 -g -30+60 0<>"$XNOTIFY_FIFO" & +tiramisu -j | jq --raw-output --unbuffered '"IMG:" + .app_icon + "\t" + .summary + "\t" + .body' > "$XNOTIFY_FIFO" & +export XNOTIFY_PID=$! + +wal /home/anon/usr/img/wal/ +xsetroot -name " OpenBSD 6.9 " + +emacs --daemon & +sxhkd & +bar | sh & +#exec monsterwm | mopag +exec sowm diff --git a/etc/x11/xresources b/etc/x11/xresources @@ -0,0 +1,71 @@ +! -- GENERAL -- ! +*.font: blexmono nerd font:pixelsize=11:antialias=true:autohint=true +#define nord0 #2E3440 +#define nord1 #3B4252 +#define nord2 #434C5E +#define nord3 #4C566A +#define nord4 #D8DEE9 +#define nord5 #E5E9F0 +#define nord6 #ECEFF4 +#define nord7 #8FBCBB +#define nord8 #88C0D0 +#define nord9 #81A1C1 +#define nord10 #5E81AC +#define nord11 #BF616A +#define nord12 #D08770 +#define nord13 #EBCB8B +#define nord14 #A3BE8C +#define nord15 #B48EAD + +*.foreground: nord4 +*.background: nord0 +*.cursorColor: nord4 + +*.color0: nord1 +*.color1: nord11 +*.color2: nord14 +*.color3: nord13 +*.color4: nord9 +*.color5: nord15 +*.color6: nord8 +*.color7: nord5 +*.color8: nord3 +*.color9: nord11 +*.color10: nord14 +*.color11: nord13 +*.color12: nord9 +*.color13: nord15 +*.color14: nord7 +*.color15: nord6 + +*.border: nord3 + +! -- DMENU -- ! +dmenu.selbackground: nord10 +dmenu.selforeground: nord4 +dmenu.background: nord1 + +! -- PMENU -- ! +pmenu.selbackground: nord10 +pmenu.selforeground: nord4 + +! -- XIDLE -- ! +XIdle*position: sw +XIdle*delay: 1 +XIdle.timeout: 30 + +! -- XCLOCK -- ! +XClock*render: true + +! -- XLOCK -- ! +XLock.background: #0f0f0f +XLock.foreground: #f0f0f0 +XLock.icongeometry: 1x1 +XLock.lockdelay: 3 + +! -- XTERM -- ! +XTerm*faceName: -misc-spleen-medium-r-*-*-13-*-*-*-*-*-*-* +XTerm*internalBorder: 10 +XTerm*loginShell: true +XTerm*scrollBar: false +XTerm*selectToClipboard:true diff --git a/etc/xenodm/Xresources b/etc/xenodm/Xresources @@ -0,0 +1,38 @@ +xlogin.Login.echoPasswd: true +xlogin.Login.fail: Authorization failed +xlogin.Login.greeting: +xlogin.Login.namePrompt: +xlogin.Login.passwdPrompt: + +#define bg0 #0f111b +#define bg1 #686f9a +#define fg #ecf0c1 +#define highlight #b3a1e6 + +xroot.background: bg0 + +DisplayManager*terminateServer: true + +xlogin.Login.y: 340 +xlogin.Login.width: 480 +xlogin*borderWidth: 0 +xlogin.Login.frameWidth: 0 +xlogin.Login.innerFramesWidth: 0 +xlogin.Login.sepWidth: 0 + +xlogin.Login.allowRootLogin: false + +xlogin.Login.background: bg0 +xlogin.Login.foreground: fg +xlogin.Login.failColor: highlight +xlogin.Login.greetColor: bg0 +xlogin.Login.inpColor: bg1 +xlogin.Login.promptColor: bg0 + +*Foreground: white +*Background: black + +xlogin.Login.face: Spleen 32x64-16 +xlogin.Login.failFace: Spleen 32x64-18:bold +xlogin.Login.greetFace: Spleen 32x64-0 +xlogin.Login.promptFace: Spleen 32x64-18 diff --git a/etc/xenodm/Xsetup_0 b/etc/xenodm/Xsetup_0 @@ -0,0 +1,6 @@ +#!/bin/sh +# $OpenBSD: Xsetup_0,v 1.8 2020/07/04 13:32:50 matthieu Exp $ + +xsetroot -solid \#0f111b +xset r rate 300 50 +/home/anon/bin/dock & diff --git a/etc/xenodm/xenodm-config b/etc/xenodm/xenodm-config @@ -0,0 +1,21 @@ +! $OpenBSD: xenodm-config.in,v 1.5 2018/11/03 18:04:45 matthieu Exp $ +! +DisplayManager.authDir: /etc/X11/xenodm +DisplayManager.errorLogFile: /var/log/xenodm.log +DisplayManager.servers: /etc/X11/xenodm/Xservers +DisplayManager*resources: /etc/X11/xenodm/Xresources +! All displays should use authorization, but we cannot be sure +! X terminals may not be configured that way, so they will require +! individual resource settings. +DisplayManager*authorize: true +! +DisplayManager*startup: /etc/X11/xenodm/Xstartup +DisplayManager*session: /etc/X11/xenodm/Xsession +DisplayManager*reset: /etc/X11/xenodm/Xreset +DisplayManager*authComplain: true +! The following three resources set up display :0 as the console. +DisplayManager._0.setup: /etc/X11/xenodm/Xsetup_0 +DisplayManager._0.startup: /etc/X11/xenodm/GiveConsole +DisplayManager._0.reset: /etc/X11/xenodm/TakeConsole + +DisplayManager.*.authName: MIT-MAGIC-COOKIE-1 diff --git a/etc/zathura/zathurarc b/etc/zathura/zathurarc @@ -0,0 +1,15 @@ +set sandbox none +set statusbar-h-padding 0 +set statusbar-v-padding 0 +set page-padding 1 +set selection-clipboard clipboard +map u scroll half-up +map d scroll half-down +map D toggle_page_mode +map r reload +map R rotate +map K zoom in +map J zoom out +map i recolor +map p print +map g goto top+ \ No newline at end of file diff --git a/etc/zathura/zathurarc~ b/etc/zathura/zathurarc~ @@ -0,0 +1,55 @@ +set sandbox none +set statusbar-h-padding 0 +set statusbar-v-padding 0 +set page-padding 1 +set selection-clipboard primary +map u scroll half-up +map d scroll half-down +map D toggle_page_mode +map r reload +map R rotate +map K zoom in +map J zoom out +map i recolor +map p print + +set notification-error-bg "#fbf1c7" # bg +set notification-error-fg "#9d0006" # bright:red +set notification-warning-bg "#fbf1c7" # bg +set notification-warning-fg "#b57614" # bright:yellow +set notification-bg "#fbf1c7" # bg +set notification-fg "#79740e" # bright:green + +set completion-bg "#d5c4a1" # bg2 +set completion-fg "#3c3836" # fg +set completion-group-bg "#ebdbb2" # bg1 +set completion-group-fg "#928374" # gray +set completion-highlight-bg "#076678" # bright:blue +set completion-highlight-fg "#d5c4a1" # bg2 + +# Define the color in index mode +set index-bg "#d5c4a1" # bg2 +set index-fg "#3c3836" # fg +set index-active-bg "#076678" # bright:blue +set index-active-fg "#d5c4a1" # bg2 + +set inputbar-bg "#fbf1c7" # bg +set inputbar-fg "#3c3836" # fg + +set statusbar-bg "#d5c4a1" # bg2 +set statusbar-fg "#3c3836" # fg + +set highlight-color "#b57614" # bright:yellow +set highlight-active-color "#af3a03" # bright:orange + +set default-bg "#fbf1c7" # bg +set default-fg "#3c3836" # fg +set render-loading true +set render-loading-bg "#fbf1c7" # bg +set render-loading-fg "#3c3836" # fg + +# Recolor book content's color +set recolor-lightcolor "#fbf1c7" # bg +set recolor-darkcolor "#3c3836" # fg +set recolor "true" +# set recolor-keephue true # keep original color diff --git a/var/applications/file.desktop b/var/applications/file.desktop @@ -0,0 +1,5 @@ +ktop Entry] +Type=Application +Name=File Manager +Exec=/usr/local/bin/st -e nnn %u + diff --git a/var/applications/img.desktop b/var/applications/img.desktop @@ -0,0 +1,4 @@ +[Desktop Entry] +Type=Application +Name=Image viewer +Exec=/usr/bin/sxiv -a %f diff --git a/var/applications/mail.desktop b/var/applications/mail.desktop @@ -0,0 +1,4 @@ +[Desktop Entry] +Type=Application +Name=Mail +Exec=/usr/local/bin/st -e neomutt %u diff --git a/var/applications/pdf.desktop b/var/applications/pdf.desktop @@ -0,0 +1,5 @@ +ktop Entry] +Type=Application +Name=PDF reader +Exec=/usr/local/bin/zathura %u + diff --git a/var/applications/text.desktop b/var/applications/text.desktop @@ -0,0 +1,4 @@ +[Desktop Entry] +Type=Application +Name=Text editor +Exec=/usr/local/bin/st -e vi %u diff --git a/var/applications/torrent.desktop b/var/applications/torrent.desktop @@ -0,0 +1,4 @@ +[Desktop Entry] +Type=Application +Name=Torrent +Exec=/usr/bin/env transadd %U