commit 75817a6502c9c8ee4b0888a55e0c3f9896b10527
parent 5fcda9356f79517fbd5b6957e3ef58a6fa15d272
Author: AndrewLockVI <andrew@laack.co>
Date: Thu, 6 Mar 2025 18:10:25 -0600
Updated markdown compilation script and added header to add my name to the top of pdfs by default when converting from markdown
Diffstat:
10 files changed, 476 insertions(+), 18 deletions(-)
diff --git a/attach.sh b/attach.sh
@@ -22,7 +22,7 @@ if [ -n "$1" ]; then
else
# running interactively
- selection=$(tmux ls | awk '{print $1}' | sed 's/:$//' | dmenu)
+ selection=$(tmux ls | awk '{print $1}' | sed 's/:$//' | fzf)
if [ -z "$selection" ]; then
exit 0
diff --git a/compile.sh b/compile.sh
@@ -2,13 +2,20 @@
# Auto-compilation for tex/md files to pdf using entr.
-# compile right at the start
+# Compile right at the start
filename="${1%.*}"
-pandoc $1 -o $filename.pdf
+extension="${1##*.}"
-# open pdf viewer, non blocking
+if [ "$extension" == "tex" ]; then
+ pdflatex -interaction=nonstopmode -halt-on-error $1
+else
+ pandoc $1 -o $filename.pdf --include-in-header=$HOME/bin/resources/header.tex
+fi
+
+# Open PDF viewer, non-blocking
zathura $filename.pdf &
-# watch for changes, recompile
-echo $1 | entr pandoc $1 -o $filename.pdf
+# Watch for changes, recompile
+echo $1 | entr bash -c "if [ '$extension' == 'tex' ]; then pdflatex -interaction=nonstopmode -halt-on-error $1; else pandoc $1 -o $filename.pdf --include-in-header=$HOME/bin/resources/header.tex; fi"
+
diff --git a/dmenu.sh b/dmenu.sh
@@ -1,9 +1,18 @@
#!/bin/bash
-background=$1
-foreground=$2
-highlight=$3
+# this is aliased as run
+# from the cli to run fzf.
-prompt="run:"
+if [ $# -eq 0 ]
+ then
+ selection=$(compgen -c | fzf)
+ nohup $selection &>/dev/null &
+ else
+ background=$1
+ foreground=$2
+ highlight=$3
-dmenu_run -l 15 -i -nb "$background" -nf "$foreground" -sb "$highlight" -sf "$foreground" -p "$prompt"
+ prompt="run:"
+
+ dmenu_run -l 15 -i -nb "$background" -nf "$foreground" -sb "$highlight" -sf "$foreground" -p "$prompt"
+fi
diff --git a/emacs.sh b/emacs.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+emacsclient -c -a 'emacs'
diff --git a/init-screen.sh b/init-screen.sh
@@ -31,14 +31,16 @@ if [ ! -d "$directory" ]; then
exit 1
fi
+qutebrowser --target window "uws.instructure.com" &
+
cd "$directory"
st &
# use your own url
-qutebrowser --target window "uws.instructure.com"
# wait long enough for browser to load in
-sleep .5s
+sleep 1.25s
dirWO=$(echo $directory | sed "s/\// /g"| cut -c 2- | awk '{print $NF}')
-#st -e abduco -A "$dirWO" dvtm
-st -e tmux new-session -A -s $dirWO &
+# st -e abduco -A "$dirWO" dvtm
+st -e tmux new-session -A -s $dirWO
+# emacsclient -c &
diff --git a/install.sh b/install.sh
@@ -176,7 +176,7 @@ doas apk add scrot
doas apk add feh
# file manager
-doas apk add ranger
+# doas apk add ranger
doas apk add picom
# compiling st
@@ -212,10 +212,17 @@ doas apk add librewolf
#doas apk add flatpak
#flatpak install flathub app.zen_browser.zen
-#doas apk add emacs
-#doas apk add emacs-x11
+# doas apk add emacs
+# doas apk add emacs-x11
#doas apk add fzf
+#doas apk add fd
# Kakoune (not worth it for me, maybe for you though!)
#doas apk add kakoune
#doas apk add kakoune-lsp
+
+# Configure treesitter support for LaTeX.
+# doas apk add yarn
+# doas apk add npm
+# doas npm install -g tree-sitter
+# yarn global add tree-sitter-cli
diff --git a/pipes.sh b/pipes.sh
@@ -0,0 +1,385 @@
+#!/usr/bin/env bash
+# pipes.sh: Animated pipes terminal screensaver.
+# https://github.com/pipeseroni/pipes.sh
+#
+# Copyright (c) 2015-2018 Pipeseroni/pipes.sh contributors
+# Copyright (c) 2013-2015 Yu-Jie Lin
+# Copyright (c) 2010 Matthew Simpson
+#
+# 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.
+
+
+VERSION=1.3.0
+
+M=32768 # Bash RANDOM maximum + 1
+p=1 # number of pipes
+f=75 # frame rate
+s=13 # probability of straight fitting
+r=2000 # characters limit
+t=0 # iteration counter for -r character limit
+w=80 # terminal size
+h=24
+
+# ab -> sets[][idx] = a*4 + b
+# 0: up, 1: right, 2: down, 3: left
+# 00 means going up , then going up -> ┃
+# 12 means going right, then going down -> ┓
+sets=(
+ "┃┏ ┓┛━┓ ┗┃┛┗ ┏━"
+ "│╭ ╮╯─╮ ╰│╯╰ ╭─"
+ "│┌ ┐┘─┐ └│┘└ ┌─"
+ "║╔ ╗╝═╗ ╚║╝╚ ╔═"
+ "|+ ++-+ +|++ +-"
+ "|/ \/-\ \|/\ /-"
+ ".. .... .... .."
+ ".o oo.o o.oo o."
+ "-\ /\|/ /-\/ \|" # railway
+ "╿┍ ┑┚╼┒ ┕╽┙┖ ┎╾" # knobby pipe
+)
+SETS=() # rearranged all pipe chars into individul elements for easier access
+
+# pipes'
+x=() # current position
+y=()
+l=() # current directions
+ # 0: up, 1: right, 2: down, 3: left
+n=() # new directions
+v=() # current types
+c=() # current escape codes
+
+# selected pipes'
+V=() # types (indexes to sets[])
+C=() # color indices for tput setaf
+VN=0 # number of selected types
+CN=0 # number of selected colors
+E=() # pre-generated escape codes from BOLD, NOCOLOR, and C
+
+# switches
+RNDSTART=0 # randomize starting position and direction
+BOLD=1
+NOCOLOR=0
+KEEPCT=0 # keep pipe color and type
+
+
+# print help message in 72-char width
+print_help() {
+ local cgap
+ printf -v cgap '%*s' $((15 - ${#COLORS})) ''
+ cat <<HELP
+Usage: $(basename $0) [OPTION]...
+Animated pipes terminal screensaver.
+
+ -p [1-] number of pipes (D=1)
+ -t [0-$((${#sets[@]} - 1))] pipe type (D=0)
+ -t c[16 chars] custom pipe type
+ -c [0-$COLORS]${cgap}pipe color INDEX (TERM=$TERM), can be
+ hexadecimal with '#' prefix
+ (D=-c 1 -c 2 ... -c 7 -c 0)
+ -f [20-100] framerate (D=75)
+ -s [5-15] going straight probability, 1 in (D=13)
+ -r [0-] reset after (D=2000) characters, 0 if no reset
+ -R randomize starting position and direction
+ -B no bold effect
+ -C no color
+ -K keep pipe color and type when crossing edges
+ -h print this help message
+ -v print version number
+
+Note: -t and -c can be used more than once.
+HELP
+}
+
+
+# parse command-line options
+# It depends on a valid COLORS which is set by _CP_init_termcap_vars
+parse() {
+ # test if $1 is a natural number in decimal, an integer >= 0
+ is_N() {
+ [[ -n $1 && -z ${1//[0-9]} ]]
+ }
+
+
+ # test if $1 is a hexadecimal string
+ is_hex() {
+ [[ -n $1 && -z ${1//[0-9A-Fa-f]} ]]
+ }
+
+
+ # print error message for invalid argument to standard error, this
+ # - mimics getopts error message
+ # - use all positional parameters as error message
+ # - has a newline appended
+ # $arg and $OPTARG are the option name and argument set by getopts.
+ pearg() {
+ printf "%s: -$arg invalid argument -- $OPTARG; %s\n" "$0" "$*" >&2
+ }
+
+
+ OPTIND=1
+ while getopts "p:t:c:f:s:r:RBCKhv" arg; do
+ case $arg in
+ p)
+ if is_N "$OPTARG" && ((OPTARG > 0)); then
+ p=$OPTARG
+ else
+ pearg 'must be an integer and greater than 0'
+ return 1
+ fi
+ ;;
+ t)
+ if [[ "$OPTARG" = c???????????????? ]]; then
+ V+=(${#sets[@]})
+ sets+=("${OPTARG:1}")
+ elif is_N "$OPTARG" && ((OPTARG < ${#sets[@]})); then
+ V+=($OPTARG)
+ else
+ pearg 'must be an integer and from 0 to' \
+ "$((${#sets[@]} - 1)); or a custom type"
+ return 1
+ fi
+ ;;
+ c)
+ if [[ $OPTARG == '#'* ]]; then
+ if ! is_hex "${OPTARG:1}"; then
+ pearg 'unrecognized hexadecimal string'
+ return 1
+ fi
+ if ((16$OPTARG >= COLORS)); then
+ pearg 'hexadecimal must be from #0 to' \
+ "#$(printf '%X' $((COLORS - 1)))"
+ return 1
+ fi
+ C+=($((16$OPTARG)))
+ elif is_N "$OPTARG" && ((OPTARG < COLORS)); then
+ C+=($OPTARG)
+ else
+ pearg "must be an integer and from 0 to $((COLORS - 1));" \
+ 'or a hexadecimal string with # prefix'
+ return 1
+ fi
+ ;;
+ f)
+ if is_N "$OPTARG" && ((OPTARG >= 20 && OPTARG <= 100)); then
+ f=$OPTARG
+ else
+ pearg 'must be an integer and from 20 to 100'
+ return 1
+ fi
+ ;;
+ s)
+ if is_N "$OPTARG" && ((OPTARG >= 5 && OPTARG <= 15)); then
+ s=$OPTARG
+ else
+ pearg 'must be an integer and from 5 to 15'
+ return 1
+ fi
+ ;;
+ r)
+ if is_N "$OPTARG"; then
+ r=$OPTARG
+ else
+ pearg 'must be a non-negative integer'
+ return 1
+ fi
+ ;;
+ R) RNDSTART=1;;
+ B) BOLD=0;;
+ C) NOCOLOR=1;;
+ K) KEEPCT=1;;
+ h)
+ print_help
+ exit 0
+ ;;
+ v) echo "$(basename -- "$0") $VERSION"
+ exit 0
+ ;;
+ *)
+ return 1
+ esac
+ done
+
+ shift $((OPTIND - 1))
+ if (($#)); then
+ printf "$0: illegal arguments -- $*; no arguments allowed\n" >&2
+ return 1
+ fi
+}
+
+
+cleanup() {
+ # clear out standard input
+ read -t 0.001 && cat </dev/stdin>/dev/null
+
+ tput reset # fix for konsole, see pipeseroni/pipes.sh#43
+ tput rmcup
+ tput cnorm
+ stty echo
+ printf "$SGR0"
+ exit 0
+}
+
+
+resize() {
+ w=$(tput cols) h=$(tput lines)
+}
+
+
+init_pipes() {
+ # +_CP_init_pipes
+ local i
+
+ ci=$((KEEPCT ? 0 : CN * RANDOM / M))
+ vi=$((KEEPCT ? 0 : VN * RANDOM / M))
+ for ((i = 0; i < p; i++)); do
+ ((
+ n[i] = 0,
+ l[i] = RNDSTART ? RANDOM % 4 : 0,
+ x[i] = RNDSTART ? w * RANDOM / M : w / 2,
+ y[i] = RNDSTART ? h * RANDOM / M : h / 2,
+ v[i] = V[vi]
+ ))
+ c[i]=${E[ci]}
+ ((ci = (ci + 1) % CN, vi = (vi + 1) % VN))
+ done
+ # -_CP_init_pipes
+}
+
+
+init_screen() {
+ stty -echo
+ tput smcup
+ tput civis
+ tput clear
+ trap cleanup HUP TERM
+
+ resize
+ trap resize SIGWINCH
+}
+
+
+main() {
+ # simple pre-check of TERM, tput's error message should be enough
+ tput -T "$TERM" sgr0 >/dev/null || return $?
+
+ # +_CP_init_termcap_vars
+ COLORS=$(tput colors) # COLORS - 1 == maximum color index for -c argument
+ SGR0=$(tput sgr0)
+ SGR_BOLD=$(tput bold)
+ # -_CP_init_termcap_vars
+
+ parse "$@" || return $?
+
+ # +_CP_init_VC
+ # set default values if not by options
+ ((${#V[@]})) || V=(0)
+ VN=${#V[@]}
+ ((${#C[@]})) || C=(1 2 3 4 5 6 7 0)
+ CN=${#C[@]}
+ # -_CP_init_VC
+
+ # +_CP_init_E
+ # generate E[] based on BOLD (SGR_BOLD), NOCOLOR, and C for each element in
+ # C, a corresponding element in E[] =
+ # SGR0
+ # + SGR_BOLD, if BOLD
+ # + tput setaf C, if !NOCOLOR
+ local i
+ for ((i = 0; i < CN; i++)) {
+ E[i]=$SGR0
+ ((BOLD)) && E[i]+=$SGR_BOLD
+ ((NOCOLOR)) || E[i]+=$(tput setaf ${C[i]})
+ }
+ # -_CP_init_E
+
+ # +_CP_init_SETS
+ local i j
+ for ((i = 0; i < ${#sets[@]}; i++)) {
+ for ((j = 0; j < 16; j++)) {
+ SETS+=("${sets[i]:j:1}")
+ }
+ }
+ unset i j
+ # -_CP_init_SETS
+
+ init_screen
+ init_pipes
+
+ # any key press exits the loop and this script
+ trap 'break 2' INT
+
+ local i
+ while REPLY=; do
+ read -t 0.0$((1000 / f)) -n 1 2>/dev/null
+ case "$REPLY" in
+ P) ((s = s < 15 ? s + 1 : s));;
+ O) ((s = s > 3 ? s - 1 : s));;
+ F) ((f = f < 100 ? f + 1 : f));;
+ D) ((f = f > 20 ? f - 1 : f));;
+ B) ((BOLD = (BOLD + 1) % 2));;
+ C) ((NOCOLOR = (NOCOLOR + 1) % 2));;
+ K) ((KEEPCT = (KEEPCT + 1) % 2));;
+ ?) break;;
+ esac
+ for ((i = 0; i < p; i++)); do
+ # New position:
+ # l[] direction = 0: up, 1: right, 2: down, 3: left
+ # +_CP_newpos
+ ((l[i] % 2)) && ((x[i] += -l[i] + 2, 1)) || ((y[i] += l[i] - 1))
+ # -_CP_newpos
+
+ # Loop on edges (change color on loop):
+ # +_CP_warp
+ ((!KEEPCT && (x[i] >= w || x[i] < 0 || y[i] >= h || y[i] < 0))) \
+ && { c[i]=${E[CN * RANDOM / M]}; ((v[i] = V[VN * RANDOM / M])); }
+ ((x[i] = (x[i] + w) % w,
+ y[i] = (y[i] + h) % h))
+ # -_CP_warp
+
+ # new turning direction:
+ # $((s - 1)) in $s, going straight, therefore n[i] == l[i];
+ # and 1 in $s that pipe makes a right or left turn
+ #
+ # s * RANDOM / M - 1 == 0
+ # n[i] == -1
+ # => n[i] == l[i] + 1 or l[i] - 1
+ # +_CP_newdir
+ ((
+ n[i] = s * RANDOM / M - 1,
+ n[i] = n[i] >= 0 ? l[i] : l[i] + (2 * (RANDOM % 2) - 1),
+ n[i] = (n[i] + 4) % 4
+ ))
+ # -_CP_newdir
+
+ # Print:
+ # +_CP_print
+ printf '\e[%d;%dH%s%s' \
+ $((y[i] + 1)) $((x[i] + 1)) ${c[i]} \
+ "${SETS[v[i] * 16 + l[i] * 4 + n[i]]}"
+ # -_CP_print
+ l[i]=${n[i]}
+ done
+ ((r > 0 && t * p >= r)) && tput reset && tput civis && t=0 || ((t++))
+ done
+
+ cleanup
+}
+
+
+# when being sourced, $0 == bash, only invoke main when they are the same
+[[ "$0" != "$BASH_SOURCE" ]] || main "$@"
diff --git a/resources/header.tex b/resources/header.tex
@@ -0,0 +1,20 @@
+\usepackage{enumitem}
+\usepackage{graphicx}
+\usepackage{amsthm}
+\usepackage{caption}
+\usepackage{tcolorbox}
+\usepackage{fancyhdr}
+\usepackage{datetime}
+\usepackage{longtable}
+
+\pagestyle{fancy}
+\fancyhf{}
+\lhead{Andrew Laack}
+\rhead{\today}
+
+\newtcolorbox[]{alphaAnswer}[1][]{%
+ colframe=black, % Frame color
+ colback=white, % Background color
+ boxrule=0.2mm, % Thickness of the frame
+ sharp corners,
+}
diff --git a/toggle-chrome-opacity.py b/toggle-chrome-opacity.py
@@ -0,0 +1,22 @@
+def update_line_at_97(file_path):
+ line_to_insert = " \"100:class_g = 'Chromium'\",\n"
+ alternate_line = " \"0:class_g = 'Chromium'\",\n"
+
+ with open(file_path, 'r') as file:
+ lines = file.readlines()
+
+ # Ensure there are at least 97 lines in the file
+ while len(lines) < 97:
+ lines.append("\n") # Append new lines as needed
+
+ # Check the current content of line 97 and update accordingly
+ if lines[96].strip() == line_to_insert.strip():
+ lines[96] = alternate_line # Replace with the alternate line
+ else:
+ lines[96] = line_to_insert # Ensure line 97 contains the correct text
+
+ with open(file_path, 'w') as file:
+ file.writelines(lines)
+
+file_path = "/home/andrew/.config/picom.conf"
+update_line_at_97(file_path)
diff --git a/toggle.sh b/toggle.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+python3 /home/andrew/bin/toggle-chrome-opacity.py