From f858fa9818f2fa0665b1f73e6049d201471b90f2 Mon Sep 17 00:00:00 2001 From: Solomon Laing Date: Tue, 19 Jul 2022 14:32:13 +0930 Subject: [PATCH] updated scripts re lukes updates to his --- compiler | 57 +++++ displayselect | 83 +++++++ dmenumount | 67 ++++++ dmenumountcifs | 19 ++ dmenuumount | 44 ++++ install.sh | 2 +- lfub | 24 ++ maimpick | 18 ++ nohup.out | 487 +++++++++++++++++++++++++++++++++++++++++ opout | 13 ++ rotdir | 12 + rssadd | 18 ++ scripts/cron/README.md | 11 + scripts/cron/checkup | 17 ++ scripts/cron/crontog | 6 + update-voidrice.sh | 17 ++ 16 files changed, 894 insertions(+), 1 deletion(-) create mode 100755 compiler create mode 100755 displayselect create mode 100755 dmenumount create mode 100755 dmenumountcifs create mode 100755 dmenuumount create mode 100755 lfub create mode 100755 maimpick create mode 100644 nohup.out create mode 100755 opout create mode 100755 rotdir create mode 100755 rssadd create mode 100644 scripts/cron/README.md create mode 100644 scripts/cron/checkup create mode 100644 scripts/cron/crontog create mode 100755 update-voidrice.sh diff --git a/compiler b/compiler new file mode 100755 index 0000000..67992be --- /dev/null +++ b/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 extension 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) sudo make install ;; + java) javac -d classes "$file" && java -cp classes "${1%.*}" ;; + m) octave "$file" ;; + md) if [ -x "$(command -v lowdown)" ]; then + lowdown --parse-no-intraemph "$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" ;; + *) sed -n '/^#!/s/^#!//p; q' "$file" | xargs -r -I % "$file" ;; +esac diff --git a/displayselect b/displayselect new file mode 100755 index 0000000..f9e8062 --- /dev/null +++ b/displayselect @@ -0,0 +1,83 @@ +#!/bin/sh + +# A UI for detecting and selecting all displays. Probes xrandr for connected +# displays and lets user select one to use. User may also select "manual +# selection" which opens arandr. + +twoscreen() { # If multi-monitor is selected and there are two screens. + + mirror=$(printf "no\\nyes" | dmenu -i -p "Mirror displays?") + # Mirror displays using native resolution of external display and a scaled + # version for the internal display + if [ "$mirror" = "yes" ]; then + external=$(echo "$screens" | dmenu -i -p "Optimize resolution for:") + internal=$(echo "$screens" | grep -v "$external") + + res_external=$(xrandr --query | sed -n "/^$external/,/\+/p" | \ + tail -n 1 | awk '{print $1}') + res_internal=$(xrandr --query | sed -n "/^$internal/,/\+/p" | \ + tail -n 1 | awk '{print $1}') + + res_ext_x=$(echo "$res_external" | sed 's/x.*//') + res_ext_y=$(echo "$res_external" | sed 's/.*x//') + res_int_x=$(echo "$res_internal" | sed 's/x.*//') + res_int_y=$(echo "$res_internal" | sed 's/.*x//') + + scale_x=$(echo "$res_ext_x / $res_int_x" | bc -l) + scale_y=$(echo "$res_ext_y / $res_int_y" | bc -l) + + xrandr --output "$external" --auto --scale 1.0x1.0 \ + --output "$internal" --auto --same-as "$external" \ + --scale "$scale_x"x"$scale_y" + else + + primary=$(echo "$screens" | dmenu -i -p "Select primary display:") + secondary=$(echo "$screens" | grep -v "$primary") + direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?") + xrandr --output "$primary" --auto --scale 1.0x1.0 --output "$secondary" --"$direction"-of "$primary" --auto --scale 1.0x1.0 + fi + } + +morescreen() { # If multi-monitor is selected and there are more than two screens. + primary=$(echo "$screens" | dmenu -i -p "Select primary display:") + secondary=$(echo "$screens" | grep -v "$primary" | dmenu -i -p "Select secondary display:") + direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?") + tertiary=$(echo "$screens" | grep -v "$primary" | grep -v "$secondary" | dmenu -i -p "Select third display:") + xrandr --output "$primary" --auto --output "$secondary" --"$direction"-of "$primary" --auto --output "$tertiary" --"$(printf "left\\nright" | grep -v "$direction")"-of "$primary" --auto + } + +multimon() { # Multi-monitor handler. + case "$(echo "$screens" | wc -l)" in + 2) twoscreen ;; + *) morescreen ;; + esac ;} + +onescreen() { # If only one output available or chosen. + xrandr --output "$1" --auto --scale 1.0x1.0 $(echo "$allposs" | grep -v "\b$1" | awk '{print "--output", $1, "--off"}' | paste -sd ' ' -) + } + +postrun() { # Stuff to run to clean up. + setbg # Fix background if screen size/arangement has changed. + remaps # Re-remap keys if keyboard added (for laptop bases) + { killall dunst ; setsid -f dunst ;} >/dev/null 2>&1 # Restart dunst to ensure proper location on screen + } + +# Get all possible displays +allposs=$(xrandr -q | grep "connected") + +# Get all connected screens. +screens=$(echo "$allposs" | awk '/ connected/ {print $1}') + +# If there's only one screen +[ "$(echo "$screens" | wc -l)" -lt 2 ] && + { onescreen "$screens"; postrun; notify-send "💻 Only one screen detected." "Using it in its optimal settings..."; exit ;} + +# Get user choice including multi-monitor and manual selection: +chosen=$(printf "%s\\nmulti-monitor\\nmanual selection" "$screens" | dmenu -i -p "Select display arangement:") && +case "$chosen" in + "manual selection") arandr ; exit ;; + "multi-monitor") multimon ;; + *) onescreen "$chosen" ;; +esac + +postrun diff --git a/dmenumount b/dmenumount new file mode 100755 index 0000000..abeb0ce --- /dev/null +++ b/dmenumount @@ -0,0 +1,67 @@ +#!/bin/sh + +# Gives a dmenu prompt to mount unmounted drives and Android phones. If +# they're in /etc/fstab, they'll be mounted automatically. Otherwise, you'll +# be prompted to give a mountpoint from already existsing directories. If you +# input a novel directory, it will prompt you to create that directory. + +getmount() { \ + [ -z "$chosen" ] && exit 1 + # shellcheck disable=SC2086 + mp="$(find $1 2>/dev/null | dmenu -i -p "Type in mount point.")" || exit 1 + test -z "$mp" && exit 1 + if [ ! -d "$mp" ]; then + mkdiryn=$(printf "No\\nYes" | dmenu -i -p "$mp does not exist. Create it?") || exit 1 + [ "$mkdiryn" = "Yes" ] && (mkdir -p "$mp" || sudo -A mkdir -p "$mp") + fi + } + +mountusb() { \ + chosen="$(echo "$usbdrives" | dmenu -i -p "Mount which drive?")" || exit 1 + chosen="$(echo "$chosen" | awk '{print $1}')" + sudo -A mount "$chosen" 2>/dev/null && notify-send "💻 USB mounting" "$chosen mounted." && exit 0 + alreadymounted=$(lsblk -nrpo "name,type,mountpoint" | awk '$3!~/\/boot|\/home$|SWAP/&&length($3)>1{printf "-not ( -path *%s -prune ) ",$3}') + getmount "/mnt /media /mount /home -maxdepth 5 -type d $alreadymounted" + partitiontype="$(lsblk -no "fstype" "$chosen")" + case "$partitiontype" in + "vfat") sudo -A mount -t vfat "$chosen" "$mp" -o rw,umask=0000;; + "exfat") sudo -A mount "$chosen" "$mp" -o uid="$(id -u)",gid="$(id -g)";; + *) sudo -A mount "$chosen" "$mp"; user="$(whoami)"; ug="$(groups | awk '{print $1}')"; sudo -A chown "$user":"$ug" "$mp";; + esac + notify-send "💻 USB mounting" "$chosen mounted to $mp." + } + +mountandroid() { \ + chosen="$(echo "$anddrives" | dmenu -i -p "Which Android device?")" || exit 1 + chosen="$(echo "$chosen" | cut -d : -f 1)" + getmount "$HOME -maxdepth 3 -type d" + simple-mtpfs --device "$chosen" "$mp" + echo "OK" | dmenu -i -p "Tap Allow on your phone if it asks for permission and then press enter" || exit 1 + simple-mtpfs --device "$chosen" "$mp" + notify-send "🤖 Android Mounting" "Android device mounted to $mp." + } + +asktype() { \ + choice="$(printf "USB\\nAndroid" | dmenu -i -p "Mount a USB drive or Android device?")" || exit 1 + case $choice in + USB) mountusb ;; + Android) mountandroid ;; + esac + } + +anddrives=$(simple-mtpfs -l 2>/dev/null) +usbdrives="$(lsblk -rpo "name,type,size,label,mountpoint,fstype" | grep -v crypto_LUKS | grep 'part\|rom' | sed 's/ /:/g' | awk -F':' '$5==""{printf "%s (%s) %s\n",$1,$3,$4}')" + +if [ -z "$usbdrives" ]; then + [ -z "$anddrives" ] && echo "No USB drive or Android device detected" && exit + echo "Android device(s) detected." + mountandroid +else + if [ -z "$anddrives" ]; then + echo "USB drive(s) detected." + mountusb + else + echo "Mountable USB drive(s) and Android device(s) detected." + asktype + fi +fi diff --git a/dmenumountcifs b/dmenumountcifs new file mode 100755 index 0000000..46c2b57 --- /dev/null +++ b/dmenumountcifs @@ -0,0 +1,19 @@ +#!/bin/sh +# Gives a dmenu prompt to mount unmounted local NAS shares for read/write. +# Requirements - "%wheel ALL=(ALL) NOPASSWD: ALL" +# +# Browse for mDNS/DNS-SD services using the Avahi daemon... +srvname=$(avahi-browse _smb._tcp -t | awk '{print $4}' | dmenu -i -p "Which NAS?") || exit 1 +notify-send "Searching for network shares..." "Please wait..." +# Choose share disk... +share=$(smbclient -L "$srvname" -N | grep Disk | awk '{print $1}' | dmenu -i -p "Mount which share?") || exit 1 +# Format URL... +share2mnt=//"$srvname".local/"$share" + +sharemount() { + mounted=$(mount -v | grep "$share2mnt") || ([ ! -d /mnt/"$share" ] && sudo mkdir /mnt/"$share") + [ -z "$mounted" ] && sudo mount -t cifs "$share2mnt" -o user=nobody,password="",noperm /mnt/"$share" && notify-send "Netshare $share mounted" && exit 0 + notify-send "Netshare $share already mounted"; exit 1 +} + +sharemount diff --git a/dmenuumount b/dmenuumount new file mode 100755 index 0000000..946d12c --- /dev/null +++ b/dmenuumount @@ -0,0 +1,44 @@ +#!/bin/sh + +# A dmenu prompt to unmount drives. +# Provides you with mounted partitions, select one to unmount. +# Drives mounted at /, /boot and /home will not be options to unmount. + +unmountusb() { + [ -z "$drives" ] && exit + chosen="$(echo "$drives" | dmenu -i -p "Unmount which drive?")" || exit 1 + chosen="$(echo "$chosen" | awk '{print $1}')" + [ -z "$chosen" ] && exit + sudo -A umount "$chosen" && notify-send "💻 USB unmounting" "$chosen unmounted." + } + +unmountandroid() { \ + chosen="$(awk '/simple-mtpfs/ {print $2}' /etc/mtab | dmenu -i -p "Unmount which device?")" || exit 1 + [ -z "$chosen" ] && exit + sudo -A umount -l "$chosen" && notify-send "🤖 Android unmounting" "$chosen unmounted." + } + +asktype() { \ + choice="$(printf "USB\\nAndroid" | dmenu -i -p "Unmount a USB drive or Android device?")" || exit 1 + case "$choice" in + USB) unmountusb ;; + Android) unmountandroid ;; + esac + } + +drives=$(lsblk -nrpo "name,type,size,mountpoint,label" | awk -F':' '{gsub(/ /,":")}$4!~/\/boot|\/efi|\/home$|SWAP/&&length($4)>1{printf "%s (%s) %s\n",$4,$3,$5}') + +if ! grep simple-mtpfs /etc/mtab; then + [ -z "$drives" ] && echo "No drives to unmount." && exit + echo "Unmountable USB drive detected." + unmountusb +else + if [ -z "$drives" ] + then + echo "Unmountable Android device detected." + unmountandroid + else + echo "Unmountable USB drive(s) and Android device(s) detected." + asktype + fi +fi diff --git a/install.sh b/install.sh index e957282..46591d7 100755 --- a/install.sh +++ b/install.sh @@ -1,3 +1,3 @@ #!/bin/bash -cp scripts/* $HOME/.local/bin +cp scripts/* $HOME/.local/bin -r diff --git a/lfub b/lfub new file mode 100755 index 0000000..9012f50 --- /dev/null +++ b/lfub @@ -0,0 +1,24 @@ +#!/bin/sh + +# This is a wrapper script for lb that allows it to create image previews with +# ueberzug. This works in concert with the lf configuration file and the +# lf-cleaner script. + +set -e + +cleanup() { + exec 3>&- + rm "$FIFO_UEBERZUG" +} + +if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then + lf "$@" +else + [ ! -d "$HOME/.cache/lf" ] && mkdir -p "$HOME/.cache/lf" + export FIFO_UEBERZUG="$HOME/.cache/lf/ueberzug-$$" + mkfifo "$FIFO_UEBERZUG" + ueberzug layer -s <"$FIFO_UEBERZUG" -p json & + exec 3>"$FIFO_UEBERZUG" + trap cleanup HUP INT QUIT TERM PWR EXIT + lf "$@" 3>&- +fi diff --git a/maimpick b/maimpick new file mode 100755 index 0000000..8ea9f5e --- /dev/null +++ b/maimpick @@ -0,0 +1,18 @@ +#!/bin/sh + +# This is bound to Shift+PrintScreen by default, requires maim. It lets you +# choose the kind of screenshot to take, including copying the image or even +# highlighting an area to copy. scrotcucks on suicidewatch right now. + +# variables +output="$(date '+%y%m%d-%H%M-%S').png" +xclip_cmd="xclip -sel clip -t image/png" + +case "$(printf "a selected area\\ncurrent window\\nfull screen\\na selected area (copy)\\ncurrent window (copy)\\nfull screen (copy)" | dmenu -l 6 -i -p "Screenshot which area?")" in + "a selected area") maim -s pic-selected-"${output}" ;; + "current window") maim -q -d 0.2 -i "$(xdotool getactivewindow)" pic-window-"${output}" ;; + "full screen") maim -q -d 0.2 pic-full-"${output}" ;; + "a selected area (copy)") maim -s | ${xclip_cmd} ;; + "current window (copy)") maim -q -d 0.2 -i "$(xdotool getactivewindow)" | ${xclip_cmd} ;; + "full screen (copy)") maim -q -d 0.2 | ${xclip_cmd} ;; +esac diff --git a/nohup.out b/nohup.out new file mode 100644 index 0000000..2178638 --- /dev/null +++ b/nohup.out @@ -0,0 +1,487 @@ +/home/solomon/.config/shell/profile: line 9: $PATH:${$(find ~/.local/bin -type d -printf %p:)%%:}: bad substitution +keycode 8 = +keycode 9 = Escape NoSymbol Escape +keycode 10 = 1 exclam 1 exclam +keycode 11 = 2 at 2 at +keycode 12 = 3 numbersign 3 numbersign +keycode 13 = 4 dollar 4 dollar +keycode 14 = 5 percent 5 percent +keycode 15 = 6 asciicircum 6 asciicircum dead_circumflex dead_circumflex dead_circumflex +keycode 16 = 7 ampersand 7 ampersand +keycode 17 = 8 asterisk 8 asterisk +keycode 18 = 9 parenleft 9 parenleft dead_grave dead_breve dead_grave +keycode 19 = 0 parenright 0 parenright +keycode 20 = bracketleft braceleft bracketleft braceleft +keycode 21 = bracketright braceright bracketright braceright dead_tilde NoSymbol dead_tilde +keycode 22 = BackSpace BackSpace BackSpace BackSpace +keycode 23 = Tab ISO_Left_Tab Tab ISO_Left_Tab +keycode 24 = apostrophe quotedbl apostrophe quotedbl dead_acute dead_diaeresis dead_acute +keycode 25 = comma less comma less dead_cedilla dead_caron dead_cedilla +keycode 26 = period greater period greater dead_abovedot periodcentered dead_abovedot +keycode 27 = p P p P +keycode 28 = y Y y Y +keycode 29 = f F f F +keycode 30 = g G g G +keycode 31 = c C c C +keycode 32 = r R r R +keycode 33 = l L l L +keycode 34 = slash question slash question +keycode 35 = equal plus equal plus +keycode 36 = Return NoSymbol Return +keycode 37 = Control_L NoSymbol Control_L +keycode 38 = a A a A +keycode 39 = o O o O +keycode 40 = e E e E +keycode 41 = u U u U +keycode 42 = i I i I +keycode 43 = d D d D +keycode 44 = h H h H +keycode 45 = t T t T +keycode 46 = n N n N +keycode 47 = s S s S +keycode 48 = minus underscore minus underscore +keycode 49 = grave asciitilde grave asciitilde dead_grave dead_tilde dead_grave +keycode 50 = Shift_L NoSymbol Shift_L +keycode 51 = backslash bar backslash bar +keycode 52 = semicolon colon semicolon colon dead_ogonek dead_doubleacute dead_ogonek +keycode 53 = q Q q Q +keycode 54 = j J j J +keycode 55 = k K k K +keycode 56 = x X x X +keycode 57 = b B b B +keycode 58 = m M m M +keycode 59 = w W w W +keycode 60 = v V v V +keycode 61 = z Z z Z +keycode 62 = Shift_R NoSymbol Shift_R +keycode 63 = KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply XF86ClearGrab +keycode 64 = Alt_L Meta_L Alt_L Meta_L +keycode 65 = space NoSymbol space +keycode 66 = Caps_Lock NoSymbol Caps_Lock +keycode 67 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1 +keycode 68 = F2 F2 F2 F2 F2 F2 XF86Switch_VT_2 +keycode 69 = F3 F3 F3 F3 F3 F3 XF86Switch_VT_3 +keycode 70 = F4 F4 F4 F4 F4 F4 XF86Switch_VT_4 +keycode 71 = F5 F5 F5 F5 F5 F5 XF86Switch_VT_5 +keycode 72 = F6 F6 F6 F6 F6 F6 XF86Switch_VT_6 +keycode 73 = F7 F7 F7 F7 F7 F7 XF86Switch_VT_7 +keycode 74 = F8 F8 F8 F8 F8 F8 XF86Switch_VT_8 +keycode 75 = F9 F9 F9 F9 F9 F9 XF86Switch_VT_9 +keycode 76 = F10 F10 F10 F10 F10 F10 XF86Switch_VT_10 +keycode 77 = Num_Lock NoSymbol Num_Lock +keycode 78 = Scroll_Lock NoSymbol Scroll_Lock +keycode 79 = KP_Home KP_7 KP_Home KP_7 +keycode 80 = KP_Up KP_8 KP_Up KP_8 +keycode 81 = KP_Prior KP_9 KP_Prior KP_9 +keycode 82 = KP_Subtract KP_Subtract KP_Subtract KP_Subtract KP_Subtract KP_Subtract XF86Prev_VMode +keycode 83 = KP_Left KP_4 KP_Left KP_4 +keycode 84 = KP_Begin KP_5 KP_Begin KP_5 +keycode 85 = KP_Right KP_6 KP_Right KP_6 +keycode 86 = KP_Add KP_Add KP_Add KP_Add KP_Add KP_Add XF86Next_VMode +keycode 87 = KP_End KP_1 KP_End KP_1 +keycode 88 = KP_Down KP_2 KP_Down KP_2 +keycode 89 = KP_Next KP_3 KP_Next KP_3 +keycode 90 = KP_Insert KP_0 KP_Insert KP_0 +keycode 91 = KP_Delete KP_Decimal KP_Delete KP_Decimal +keycode 92 = ISO_Level3_Shift NoSymbol ISO_Level3_Shift +keycode 93 = +keycode 94 = less greater less greater bar brokenbar bar +keycode 95 = F11 F11 F11 F11 F11 F11 XF86Switch_VT_11 +keycode 96 = F12 F12 F12 F12 F12 F12 XF86Switch_VT_12 +keycode 97 = +keycode 98 = Katakana NoSymbol Katakana +keycode 99 = Hiragana NoSymbol Hiragana +keycode 100 = Henkan_Mode NoSymbol Henkan_Mode +keycode 101 = Hiragana_Katakana NoSymbol Hiragana_Katakana +keycode 102 = Muhenkan NoSymbol Muhenkan +keycode 103 = +keycode 104 = KP_Enter NoSymbol KP_Enter +keycode 105 = Control_R NoSymbol Control_R +keycode 106 = KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide XF86Ungrab +keycode 107 = Print Sys_Req Print Sys_Req +keycode 108 = Alt_R Meta_R Alt_R Meta_R +keycode 109 = Linefeed NoSymbol Linefeed +keycode 110 = Home NoSymbol Home +keycode 111 = Up NoSymbol Up +keycode 112 = Prior NoSymbol Prior +keycode 113 = Left NoSymbol Left +keycode 114 = Right NoSymbol Right +keycode 115 = End NoSymbol End +keycode 116 = Down NoSymbol Down +keycode 117 = Next NoSymbol Next +keycode 118 = Insert NoSymbol Insert +keycode 119 = Delete NoSymbol Delete +keycode 120 = +keycode 121 = XF86AudioMute NoSymbol XF86AudioMute +keycode 122 = XF86AudioLowerVolume NoSymbol XF86AudioLowerVolume +keycode 123 = XF86AudioRaiseVolume NoSymbol XF86AudioRaiseVolume +keycode 124 = XF86PowerOff NoSymbol XF86PowerOff +keycode 125 = KP_Equal NoSymbol KP_Equal +keycode 126 = plusminus NoSymbol plusminus +keycode 127 = Pause Break Pause Break +keycode 128 = XF86LaunchA NoSymbol XF86LaunchA +keycode 129 = KP_Decimal KP_Decimal KP_Decimal KP_Decimal +keycode 130 = Hangul NoSymbol Hangul +keycode 131 = Hangul_Hanja NoSymbol Hangul_Hanja +keycode 132 = +keycode 133 = Super_L NoSymbol Super_L +keycode 134 = Super_R NoSymbol Super_R +keycode 135 = Menu NoSymbol Menu +keycode 136 = Cancel NoSymbol Cancel +keycode 137 = Redo NoSymbol Redo +keycode 138 = SunProps NoSymbol SunProps +keycode 139 = Undo NoSymbol Undo +keycode 140 = SunFront NoSymbol SunFront +keycode 141 = XF86Copy NoSymbol XF86Copy +keycode 142 = XF86Open NoSymbol XF86Open +keycode 143 = XF86Paste NoSymbol XF86Paste +keycode 144 = Find NoSymbol Find +keycode 145 = XF86Cut NoSymbol XF86Cut +keycode 146 = Help NoSymbol Help +keycode 147 = XF86MenuKB NoSymbol XF86MenuKB +keycode 148 = XF86Calculator NoSymbol XF86Calculator +keycode 149 = +keycode 150 = XF86Sleep NoSymbol XF86Sleep +keycode 151 = XF86WakeUp NoSymbol XF86WakeUp +keycode 152 = XF86Explorer NoSymbol XF86Explorer +keycode 153 = XF86Send NoSymbol XF86Send +keycode 154 = +keycode 155 = XF86Xfer NoSymbol XF86Xfer +keycode 156 = XF86Launch1 NoSymbol XF86Launch1 +keycode 157 = XF86Launch2 NoSymbol XF86Launch2 +keycode 158 = XF86WWW NoSymbol XF86WWW +keycode 159 = XF86DOS NoSymbol XF86DOS +keycode 160 = XF86ScreenSaver NoSymbol XF86ScreenSaver +keycode 161 = XF86RotateWindows NoSymbol XF86RotateWindows +keycode 162 = XF86TaskPane NoSymbol XF86TaskPane +keycode 163 = XF86Mail NoSymbol XF86Mail +keycode 164 = XF86Favorites NoSymbol XF86Favorites +keycode 165 = XF86MyComputer NoSymbol XF86MyComputer +keycode 166 = XF86Back NoSymbol XF86Back +keycode 167 = XF86Forward NoSymbol XF86Forward +keycode 168 = +keycode 169 = XF86Eject NoSymbol XF86Eject +keycode 170 = XF86Eject NoSymbol XF86Eject +keycode 171 = XF86AudioNext NoSymbol XF86AudioNext +keycode 172 = XF86AudioPlay XF86AudioPause XF86AudioPlay XF86AudioPause +keycode 173 = XF86AudioPrev NoSymbol XF86AudioPrev +keycode 174 = XF86AudioStop XF86Eject XF86AudioStop XF86Eject +keycode 175 = XF86AudioRecord NoSymbol XF86AudioRecord +keycode 176 = XF86AudioRewind NoSymbol XF86AudioRewind +keycode 177 = XF86Phone NoSymbol XF86Phone +keycode 178 = +keycode 179 = XF86Tools NoSymbol XF86Tools +keycode 180 = XF86HomePage NoSymbol XF86HomePage +keycode 181 = XF86Reload NoSymbol XF86Reload +keycode 182 = XF86Close NoSymbol XF86Close +keycode 183 = +keycode 184 = +keycode 185 = XF86ScrollUp NoSymbol XF86ScrollUp +keycode 186 = XF86ScrollDown NoSymbol XF86ScrollDown +keycode 187 = parenleft NoSymbol parenleft +keycode 188 = parenright NoSymbol parenright +keycode 189 = XF86New NoSymbol XF86New +keycode 190 = Redo NoSymbol Redo +keycode 191 = XF86Tools NoSymbol XF86Tools +keycode 192 = XF86Launch5 NoSymbol XF86Launch5 +keycode 193 = XF86Launch6 NoSymbol XF86Launch6 +keycode 194 = XF86Launch7 NoSymbol XF86Launch7 +keycode 195 = XF86Launch8 NoSymbol XF86Launch8 +keycode 196 = XF86Launch9 NoSymbol XF86Launch9 +keycode 197 = +keycode 198 = XF86AudioMicMute NoSymbol XF86AudioMicMute +keycode 199 = XF86TouchpadToggle NoSymbol XF86TouchpadToggle +keycode 200 = XF86TouchpadOn NoSymbol XF86TouchpadOn +keycode 201 = XF86TouchpadOff NoSymbol XF86TouchpadOff +keycode 202 = +keycode 203 = Mode_switch NoSymbol Mode_switch +keycode 204 = NoSymbol Alt_L NoSymbol Alt_L +keycode 205 = NoSymbol Meta_L NoSymbol Meta_L +keycode 206 = NoSymbol Super_L NoSymbol Super_L +keycode 207 = NoSymbol Hyper_L NoSymbol Hyper_L +keycode 208 = XF86AudioPlay NoSymbol XF86AudioPlay +keycode 209 = XF86AudioPause NoSymbol XF86AudioPause +keycode 210 = XF86Launch3 NoSymbol XF86Launch3 +keycode 211 = XF86Launch4 NoSymbol XF86Launch4 +keycode 212 = XF86LaunchB NoSymbol XF86LaunchB +keycode 213 = XF86Suspend NoSymbol XF86Suspend +keycode 214 = XF86Close NoSymbol XF86Close +keycode 215 = XF86AudioPlay NoSymbol XF86AudioPlay +keycode 216 = XF86AudioForward NoSymbol XF86AudioForward +keycode 217 = +keycode 218 = Print NoSymbol Print +keycode 219 = +keycode 220 = XF86WebCam NoSymbol XF86WebCam +keycode 221 = XF86AudioPreset NoSymbol XF86AudioPreset +keycode 222 = +keycode 223 = XF86Mail NoSymbol XF86Mail +keycode 224 = XF86Messenger NoSymbol XF86Messenger +keycode 225 = XF86Search NoSymbol XF86Search +keycode 226 = XF86Go NoSymbol XF86Go +keycode 227 = XF86Finance NoSymbol XF86Finance +keycode 228 = XF86Game NoSymbol XF86Game +keycode 229 = XF86Shop NoSymbol XF86Shop +keycode 230 = +keycode 231 = Cancel NoSymbol Cancel +keycode 232 = XF86MonBrightnessDown NoSymbol XF86MonBrightnessDown +keycode 233 = XF86MonBrightnessUp NoSymbol XF86MonBrightnessUp +keycode 234 = XF86AudioMedia NoSymbol XF86AudioMedia +keycode 235 = XF86Display NoSymbol XF86Display +keycode 236 = XF86KbdLightOnOff NoSymbol XF86KbdLightOnOff +keycode 237 = XF86KbdBrightnessDown NoSymbol XF86KbdBrightnessDown +keycode 238 = XF86KbdBrightnessUp NoSymbol XF86KbdBrightnessUp +keycode 239 = XF86Send NoSymbol XF86Send +keycode 240 = XF86Reply NoSymbol XF86Reply +keycode 241 = XF86MailForward NoSymbol XF86MailForward +keycode 242 = XF86Save NoSymbol XF86Save +keycode 243 = XF86Documents NoSymbol XF86Documents +keycode 244 = XF86Battery NoSymbol XF86Battery +keycode 245 = XF86Bluetooth NoSymbol XF86Bluetooth +keycode 246 = XF86WLAN NoSymbol XF86WLAN +keycode 247 = XF86UWB NoSymbol XF86UWB +keycode 248 = +keycode 249 = XF86Next_VMode NoSymbol XF86Next_VMode +keycode 250 = XF86Prev_VMode NoSymbol XF86Prev_VMode +keycode 251 = XF86MonBrightnessCycle NoSymbol XF86MonBrightnessCycle +keycode 252 = XF86BrightnessAuto NoSymbol XF86BrightnessAuto +keycode 253 = XF86DisplayOff NoSymbol XF86DisplayOff +keycode 254 = XF86WWAN NoSymbol XF86WWAN +keycode 255 = XF86RFKill NoSymbol XF86RFKill +[ 06/22/2022 15:35:34.813 session_init FATAL ERROR ] Another composite manager is already running +Bad _NET_DESKTOP with data[0]=-1 +Bad _NET_DESKTOP with data[0]=-1 +Bad _NET_DESKTOP with data[0]=-1 +blueman-applet 15.35.35 WARNING PluginManager:147 __load_plugin: Not loading PPPSupport because its conflict has higher priority +WARNING: No icon found in path: 'nm-device-wired' +WARNING: No icon found in path: 'nm-signal-75' +blueman-applet 15.35.35 WARNING PluginManager:147 __load_plugin: Not loading DhcpClient because its conflict has higher priority +blueman-applet 15.35.35 WARNING TransferService:213 _make_share_path: Failed to get Download dir from XDG +Initializing local storage instance +(electron) Sending uncompressed crash reports is deprecated and will be removed in a future version of Electron. Set { compress: true } to opt-in to the new behavior. Crash reports will be uploaded gzipped, which most crash reporting servers support. + +(blueman-tray:1763): Gdk-CRITICAL **: 15:35:36.177: gdk_window_thaw_toplevel_updates: assertion 'window->update_and_descendants_freeze_count > 0' failed +WARNING: No icon found in path: 'kdeconnect' +/home/solomon/.config/Element exists: yes +/home/solomon/.config/Riot exists: no +[06/22/22, 15:35:36:543] info: +╔═════════════════════════════════════════════════════╗ +║ Slack 4.26.1, linux 5.18.5-arch1-1 on x64 ║ +╚═════════════════════════════════════════════════════╝ +[06/22/22, 15:35:36:544] info: Configured logger via +{ + "enableConsoleTransport": true, + "identifierOverride": "webapp-service-worker-console", + "shouldUseNewBackend": false, + "loggerInstanceCount": 2 +} +[06/22/22, 15:35:36:544] info: Predefined values for process +{ + "NODE_ENV": "production", + "platform": "linux", + "type": "browser", + "timeZone": "Australia/Adelaide", + "PACKAGE_MANIFEST.productName": "Slack", + "PACKAGE_MANIFEST.version": "4.26.1", + "PACKAGE_MANIFEST.commit": "76f5abf", + "PACKAGE_MANIFEST.branch": "HEAD" +} +No update_base_url is defined: auto update is disabled +[1561:0622/153536.611598:ERROR:browser_main_loop.cc(269)] Gtk: gtk_widget_add_accelerator: assertion 'GTK_IS_ACCEL_GROUP (accel_group)' failed +Fetching translation json for locale: en_EN +Changing application language to en-us +Fetching translation json for locale: en-us +Resetting the UI components after locale change +Resetting the UI components after locale change +[1561:0622/153536.817038:ERROR:browser_main_loop.cc(269)] Gdk: gdk_window_thaw_toplevel_updates: assertion 'window->update_and_descendants_freeze_count > 0' failed +[1563:0622/153536.822165:ERROR:browser_main_loop.cc(267)] Gdk: gdk_window_thaw_toplevel_updates: assertion 'window->update_and_descendants_freeze_count > 0' failed +Changing application language to en-us +Fetching translation json for locale: en-us +Resetting the UI components after locale change +[06/22/22, 15:35:37:879] info: +╔═════════════════════════════════════════════════════╗ +║ Slack 4.26.1, linux 5.18.5-arch1-1 on x64 ║ +╚═════════════════════════════════════════════════════╝ +[06/22/22, 15:35:37:880] info: Configured logger via +{ + "enableConsoleTransport": true, + "identifierOverride": "webapp-console", + "shouldUseNewBackend": false, + "loggerInstanceCount": 3 +} +[06/22/22, 15:35:37:880] info: Predefined values for process +{ + "NODE_ENV": "production", + "platform": "linux", + "type": "browser", + "timeZone": "Australia/Adelaide", + "PACKAGE_MANIFEST.productName": "Slack", + "PACKAGE_MANIFEST.version": "4.26.1", + "PACKAGE_MANIFEST.commit": "76f5abf", + "PACKAGE_MANIFEST.branch": "HEAD" +} +[06/22/22, 15:35:37:880] info: Starting Sentry (Renderer) +[06/22/22, 15:35:37:881] info: getSentryDSN: Setting sentry URL to slack.com +[06/22/22, 15:35:37:881] info: Creating desktop interface object +[06/22/22, 15:35:37:881] info: Exposing context bridge +[06/22/22, 15:35:37:881] info: Store: WINDOW_CREATED { + "type": "main", + "id": 1, + "frame": { + "isHtmlFullScreen": false, + "isFullScreen": false, + "isMinimized": false, + "isMaximized": false, + "isVisible": false, + "isFocused": false, + "bounds": { + "x": 4243, + "y": 221, + "width": 1674, + "height": 1021 + } + } +} +[06/22/22, 15:35:37:881] info: Store: RECORD_PERFORMANCE_TIMING { + "phase": 1, + "interval": 330 +} +[06/22/22, 15:35:37:881] info: Store: UPSERT_WEB_CONTENTS { + "id": 1, + "state": "unloaded" +} +[06/22/22, 15:35:37:881] info: [TRACER] Tracing is not sampled by default for this session. +[06/22/22, 15:35:37:881] warn: TELEMETRY You tried to get a team-specific telemeter but didn’t provide enough context and are getting the generic telemeter instead which is likely not what you want. +[06/22/22, 15:35:37:881] info: Store: UPSERT_WEB_CONTENTS { + "id": 1, + "state": "loaded" +} +[06/22/22, 15:35:37:882] info: Store: RECORD_PERFORMANCE_TIMING { + "phase": 2, + "interval": 1137 +} +[06/22/22, 15:35:37:882] info: Store: MAIN_WINDOW_SHOWN +[06/22/22, 15:35:37:882] info: Store: UPDATE_SETTINGS { + "mainWindowSettings": { + "fullScreen": false, + "maximized": false, + "bounds": { + "x": 4243, + "y": 390, + "width": 1674, + "height": 1021 + } + } +} +[06/22/22, 15:35:37:882] info: Store: CLEAR_NOTIFICATIONS +[06/22/22, 15:35:37:885] info: Store: UPSERT_WEB_CONTENTS { + "id": 1, + "type": "app", + "history": "[REDACTED]" +} +[06/22/22, 15:35:38:275] info: Breadcrumb: fetch: undefined { + "method": "GET", + "url": "https://slack.com/api/api.test?error=", + "status_code": 200 +} +[06/22/22, 15:35:38:278] info: Network status check { + "elapsed_time_ms": 407, + "navigator_online": true, + "api_test": "online" +} +[06/22/22, 15:35:38:280] info: Store: SET_NETWORK_STATUS online +[06/22/22, 15:35:38:925] info: Store: UPDATE_SETTINGS { + "mainWindowSettings": { + "fullScreen": false, + "maximized": false, + "bounds": { + "x": 1683, + "y": 26, + "width": 2554, + "height": 1411 + } + } +} +[06/22/22, 15:35:41:745] info: Breadcrumb: ui.click: body > div#page_contents +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'Nextcloud' +[06/22/22, 15:35:47:843] info: Breadcrumb: ui.click: body > div#page_contents +[06/22/22, 15:35:48:732] info: Store: QUIT_APP +[06/22/22, 15:35:48:772] info: Store: DOWNLOADS_CLEANED_UP +[06/22/22, 15:35:48:786] info: Store: UPSERT_WEB_CONTENTS { + "id": 1, + "state": "page-closed" +} +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'Nextcloud' +[GFX1-]: More than 1 GPU from same vendor detected via PCI, cannot deduce device +Missing chrome or resource URL: resource://gre/modules/UpdateListener.jsm +https://launchermeta.mojang.com/v1/products/launcher/6f083b80d5e6fabbc4236f81d0d8f8a350c665a9/linux.json +[2022-06-22T06:06:20Z ERROR mp4parse] Found 2 nul bytes in "\0\0" +[2022-06-22T06:06:20Z ERROR mp4parse] Found 2 nul bytes in "\0\0" +[2022-06-22T06:06:20Z ERROR mp4parse] Found 2 nul bytes in "\0\0" +[2022-06-22T06:06:20Z ERROR mp4parse] Found 2 nul bytes in "\0\0" +[0622/153625.348211:INFO:main_context.cpp(130)] CEF initialized successfully. +[0622/153625.348770:INFO:main_context.cpp(132)] CEF version: 99.2.14+g3f796b8+chromium-99.0.4844.84 +sh: line 1: orca: command not found +Created browser window for reuse: 0xc00003 +[0622/153625.501373:ERROR:browser_main_loop.cc(268)] Gdk: _gdk_frame_clock_freeze: assertion 'GDK_IS_FRAME_CLOCK (clock)' failed +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'kdeconnect' +WARNING: No icon found in path: 'kdeconnect' +[0622/153822.926398:ERROR:browser_main_loop.cc(268)] Gdk: _gdk_frame_clock_thaw: assertion 'GDK_IS_FRAME_CLOCK (clock)' failed +[0622/153822.943614:ERROR:gl_surface_egl.cc(808)] EGL Driver message (Critical) eglMakeCurrent: Failed to make the GLX context current +[0622/153822.943860:ERROR:skia_output_surface_impl_on_gpu.cc(1722)] Failed to make current. +[0622/153822.944109:ERROR:skia_output_surface_impl_on_gpu.cc(1722)] Failed to make current. +[0622/153822.946796:WARNING:connection.cc(61)] X error received. Request: DestroyWindowRequest, Error: WindowError{.sequence = 892, .bad_value = 12582916, .minor_opcode = 0, .major_opcode = 4} +[0622/153822.975142:ERROR:gl_surface_egl.cc(808)] EGL Driver message (Critical) eglMakeCurrent: Failed to make the GLX context current +[0622/153822.975742:ERROR:gl_surface_egl.cc(808)] EGL Driver message (Critical) eglDestroyContext: Failed to make the GLX context current +[0622/153822.975808:ERROR:gl_context_egl.cc(367)] eglDestroyContext failed with error EGL_CONTEXT_LOST +[0622/153822.976394:ERROR:shared_image_stub.cc(519)] SharedImageStub: context already lost +WARNING: No icon found in path: 'kdeconnect' +WARNING: No icon found in path: 'kdeconnect' +WARNING: No icon found in path: 'kdeconnect' +WARNING: No icon found in path: 'call-start' +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'call-start' +Bad _NET_DESKTOP with data[0]=-1 +user error (Error in function getWindowAttributes) +user error (Error in function getWindowAttributes) +user error (Error in function getWindowAttributes) +Bad _NET_DESKTOP with data[0]=-1 +user error (Error in function getWindowAttributes) +WARNING: No icon found in path: 'kdeconnect' +WARNING: No icon found in path: 'kdeconnect' +WARNING: No icon found in path: 'kdeconnect' +WARNING: No icon found in path: 'kdeconnect' +user error (Error in function getWindowAttributes) +Bad _NET_DESKTOP with data[0]=-1 +user error (Error in function getWindowAttributes) +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'call-start' +WARNING: No icon found in path: 'call-start' +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'Nextcloud' +WARNING: No icon found in path: 'Nextcloud' +user error (Error in function getWindowAttributes) +WARNING: No icon found in path: 'dialog-information' +user error (Error in function getWindowAttributes) +WARNING: No icon found in path: 'dialog-information' +xmoxmobar: Caughbt sairg:na lC xa1u5g;h te xsiitginnagl.m .o1.b5 +X connection to :0 broken (explicit kill or server shutdown). +a;r :e xCiatuignhgt. .s.i +gnal 15; exiting... +[1563:0622/184521.356164:ERROR:zygote_communication_linux.cc(276)] Failed to send GetTerminationStatus message to zygote +X connection to :0 broken (explicit kill or server shutdown). diff --git a/opout b/opout new file mode 100755 index 0000000..faf6575 --- /dev/null +++ b/opout @@ -0,0 +1,13 @@ +#!/bin/sh + +# opout: "open output": A general handler for opening a file's intended output, +# usually the pdf of a compiled document. I find this useful especially +# running from vim. + +basename="${1%.*}" + +case "${*}" in + *.tex|*.m[dse]|*.[rR]md|*.mom|*.[0-9]) setsid -f xdg-open "$basename".pdf >/dev/null 2>&1 ;; + *.html) setsid -f "$BROWSER" "$basename".html >/dev/null 2>&1 ;; + *.sent) setsid -f sent "$1" >/dev/null 2>&1 ;; +esac diff --git a/rotdir b/rotdir new file mode 100755 index 0000000..86da6db --- /dev/null +++ b/rotdir @@ -0,0 +1,12 @@ +#!/bin/sh + +# When I open an image from the file manager in sxiv (the image viewer), I want +# to be able to press the next/previous keys to key through the rest of the +# images in the same directory. This script "rotates" the content of a +# directory based on the first chosen file, so that if I open the 15th image, +# if I press next, it will go to the 16th etc. Autistic, I know, but this is +# one of the reasons that sxiv is great for being able to read standard input. + +[ -z "$1" ] && echo "usage: rotdir regex 2>&1" && exit 1 +base="$(basename "$1")" +ls "$PWD" | awk -v BASE="$base" 'BEGIN { lines = ""; m = 0; } { if ($0 == BASE) { m = 1; } } { if (!m) { if (lines) { lines = lines"\n"; } lines = lines""$0; } else { print $0; } } END { print lines; }' diff --git a/rssadd b/rssadd new file mode 100755 index 0000000..910fca3 --- /dev/null +++ b/rssadd @@ -0,0 +1,18 @@ +#!/bin/sh + +if echo "$1" | grep -q "https*://\S\+\.[A-Za-z]\+\S*" ; then + url="$1" +else + url="$(grep -Eom1 '<[^>]+(rel="self"|application/[a-z]+\+xml)[^>]+>' "$1" | + grep -o "https?://[^\" ]")" + + echo "$url" | grep -q "https*://\S\+\.[A-Za-z]\+\S*" || + notify-send "That doesn't look like a full URL." && exit 1 +fi + +RSSFILE="${XDG_CONFIG_HOME:-$HOME/.config}/newsboat/urls" +if awk '{print $1}' "$RSSFILE" | grep "^$url$" >/dev/null; then + notify-send "You already have this RSS feed." +else + echo "$url" >> "$RSSFILE" && notify-send "RSS feed added." +fi diff --git a/scripts/cron/README.md b/scripts/cron/README.md new file mode 100644 index 0000000..fa0c354 --- /dev/null +++ b/scripts/cron/README.md @@ -0,0 +1,11 @@ +# Important Note + +These cronjobs have components that require information about your current display to display notifications correctly. + +When you add them as cronjobs, I recommend you precede the command with commands as those below: + +``` +export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u $USER)/bus; export DISPLAY=:0; . $HOME/.zprofile; then_command_goes_here +``` + +This ensures that notifications will display, xdotool commands will function and environmental variables will work as well. diff --git a/scripts/cron/checkup b/scripts/cron/checkup new file mode 100644 index 0000000..bd3c634 --- /dev/null +++ b/scripts/cron/checkup @@ -0,0 +1,17 @@ +#!/bin/sh + +# Syncs repositories and downloads updates, meant to be run as a cronjob. + +notify-send "📦 Repository Sync" "Checking for package updates..." + +sudo pacman -Syyuw --noconfirm || notify-send "Error downloading updates. + +Check your internet connection, if pacman is already running, or run update manually to see errors." +pkill -RTMIN+8 "${STATUSBAR:-dwmblocks}" + +if pacman -Qu | grep -v "\[ignored\]" +then + notify-send "🎁 Repository Sync" "Updates available. Click statusbar icon (📦) for update." +else + notify-send "📦 Repository Sync" "Sync complete. No new packages for update." +fi diff --git a/scripts/cron/crontog b/scripts/cron/crontog new file mode 100644 index 0000000..5aba5e6 --- /dev/null +++ b/scripts/cron/crontog @@ -0,0 +1,6 @@ +#!/bin/sh + +# Toggles all cronjobs off/on. +# Stores disabled crontabs in ~/.consaved until restored. + +([ -f "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved ] && crontab - < "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && rm "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && notify-send "🕓 Cronjobs re-enabled.") || ( crontab -l > "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && crontab -r && notify-send "🕓 Cronjobs saved and disabled.") diff --git a/update-voidrice.sh b/update-voidrice.sh new file mode 100755 index 0000000..f00adb5 --- /dev/null +++ b/update-voidrice.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# This script assumes that you are running it in a sibling directory to Luke Smith's voidrice. +# I use some of his scripts and although they don't often update, they are known to. +# The output is going to include a bunch of copy errors as I'm just copying each file in this directory from his .local/bin back to here, obviously my custom scripts won't exist so they'll fail. + +scripts=$(ls scripts) +crons=$(ls scripts/cron) + +for script in $scripts; do + cp ../voidrice/.local/bin/$script . -v +done + + +for cron in $crons; do + cp ../voidrice/.local/bin/cron/$cron ./scripts/cron/ -v +done