summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rwxr-xr-xupd198
2 files changed, 199 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 3a32c29..8224749 100644
--- a/Makefile
+++ b/Makefile
@@ -7,7 +7,7 @@
# For a command not to echo itself, prefix @ to the command
# https://unix.stackexchange.com/a/740226/459013
-SH = alarm backlight bell ccgsl cfg chmodef curlqb dateft dirnameall gita gitfork gitmetap gitmetar gitpu grrc il lastarg loop lsp mll mmi mpra mpva mpvy mvln mvtr mvtu news o orgext pa pq px qg qw rate reco rfp sbar ta time-uuid topa vinfo wh wtr xmq
+SH = alarm backlight bell ccgsl cfg chmodef curlqb dateft dirnameall gita gitfork gitmetap gitmetar gitpu grrc il lastarg loop lsp mll mmi mpra mpva mpvy mvln mvtr mvtu news o orgext pa pq px qg qw rate reco rfp sbar ta time-uuid topa upd vinfo wh wtr xmq
PREFIX = /usr/local
install:
diff --git a/upd b/upd
new file mode 100755
index 0000000..f09e540
--- /dev/null
+++ b/upd
@@ -0,0 +1,198 @@
+#!/bin/sh
+
+all () {
+ fast
+ clean
+ [ "$hostname" != xyzpp ] && refl
+ [ "$hostname" = xyzka ] && qb
+ [ "$hostname" = xyzinsp ] && music
+ if [ "$hostname" = xyzinsp ] || [ "$hostname" = xyzpp ]; then
+ userjs
+ fi
+}
+
+backup () {
+ case "$hostname" in
+ xyzinsp) backup_branch=master;;
+ *) backup_branch=${hostname#xyz};;
+ esac
+
+ if [ "$hostname" = xyzinsp ]; then
+ # Pull repos and branches from studio, so one more backup on insp or duplicity will backup to ka,for one more backup for 321 backup rule
+ # cfgl master and pp branches already satisfy 321 rule. Here are three copies: 1. master/pp, 2. studio, 3. gitlab or alternative
+ # But I still copy those on insp because one more copy will not hurt. And all my other data stil satisfy 3 copies without backup to gitlab, so why left out cfgl? Also it may be nice if I what to use that local dir for searching things.
+ cd "$HOME/programs/config_local_arch" || exit 1
+ git branch | awk '{print ($1=="*")?$2:$1}' | while read -r branch; do
+ git checkout "$branch"
+ git pull
+ # Push ka branch to codeberg or any future alternative website for mirroring. Needed for public codes/data, considering my death may result in all copies on my computers being lost.
+ [ "$branch" = ka ] && git push
+ done
+ (
+ umask 077
+ # backup ka cfgl
+ sudo -E git -C /root/programs/config_local_arch_secrets_ka pull
+ # backup studio cfgl
+ sudo -E git -C /root/programs/config_local_arch_secrets pull
+ )
+
+ # rsync backup from studio to insp
+ rsync -avPR --delete studio:/home/xyz/.config/qBittorrent :/home/xyz/.local/share/qBittorrent "$HOME/backup/studio"
+
+ fi
+
+ if [ "$hostname" = xyzinsp ] || [ "$hostname" = xyzstudio ]; then
+ # rsync backup from ka
+ rsync -avPR --delete ka:/home/xyz/.config/qBittorrent :/home/xyz/.local/share/qBittorrent "$HOME/backup/ka"
+ fi
+
+ if [ "$hostname" != xyzstudio ] && [ "$hostname" != xyzka ]; then
+ # rsync backup to studio
+ # --files-from make -a not imply -r, so need to specify explicitly
+ rsync -avPRr --delete --files-from="$XDG_CONFIG_HOME/myconf/upd_rsync_files" / "studio:/home/xyz/backup/$backup_branch"
+ fi
+
+ if [ "$hostname" != xyzka ]; then
+ # duplicity backup to ka
+ # https://wiki.archlinux.org/title/Duplicity
+ # Need // for absolute path, see manpage URL FORMAT section. If not use //, will store to /home/xyz/home/xyz/...
+ # --files-from has a bug, this bug makes source url that is / not working while /home works, more see vq notes
+ sudo duplicity --ssh-askpass --use-agent --encrypt-key 9790577D2BE328D46838117ED3F54FE03F3C68D6 --sign-key 05899270DF25BB1EEDF57BE824F769E5D08C9E9A --full-if-older-than 2Y --include /etc/.cfgs --include-filelist "/home/xyz/.config/myconf/upd_rsync_files" --exclude / / "sftp://xyz@xyzka.kyun.li//home/xyz/backup/$backup_branch"
+ fi
+}
+
+clean () {
+ nsxiv -c
+ # my ways
+ # -exec can't replace -execdir here
+ find "$XDG_CACHE_HOME/nsxiv/" -depth -type d -empty -execdir rmdir -- '{}' \+
+ # -exec can replace -execdir here
+ #find "$XDG_CACHE_HOME/nsxiv/" -depth -type d -execdir rmdir --ignore-fail-on-non-empty -- '{}' \+
+ # nsxiv man page way
+ #find "$XDG_CACHE_HOME/nsxiv/" -depth -type d -empty ! -name '.' -exec rmdir -- '{}' \;
+
+ rm -rf "$XDG_VIDEOS_DIR/recordings/tmp/"
+
+ if [ "$hostname" = xyzinsp ] || [ "$hostname" = xyzpp ]; then
+ cd "$HOME/.mozilla/firefox/xxxxxxxx.fly/prefsjs_backups" || exit
+ # https://stackoverflow.com/a/34862475/9008720
+ ls -t | tail -n +11 | tr '\n' '\0' | xargs -0 rm --
+ # https://unix.stackexchange.com/questions/92095/reset-atq-list-to-zero
+ sudo systemctl stop atd
+ echo 0 | sudo tee /var/spool/atd/.SEQ > /dev/null
+ sudo systemctl start atd
+ fi
+
+ paru -aSc --noconfirm
+}
+
+# basic daily stuff
+fast () {
+ pac
+ misc
+ [ "$hostname" != xyzka ] && backup
+}
+
+userjs () {
+ kill $(pidof "$BROWSER")
+ # change working dir for cleaner
+ cd "$HOME/.mozilla/firefox/xxxxxxxx.fly" || exit
+ arkenfox-cleaner -s
+ arkenfox-updater -s
+}
+
+misc () {
+ "$EDITOR" +PlugClean! +PlugUpdate +qa
+ tldr --update
+ sudo hardcode-fixer
+ # temperory solution before find a way of using git submodule or subtree with `cfg -l`
+ git -C "$HOME/.mozilla/firefox/xxxxxxxx.fly/chrome/firefox-csshacks" pull
+ if [ "$hostname" = xyzinsp ]; then
+ ssh pp '[ -s "$HOME/.local/share/sdcv_history" ] && cat "$HOME/.local/share/sdcv_history" && rm "$HOME/.local/share/sdcv_history"' >> "$XDG_DATA_HOME/sdcv_history"
+ awk '!a[$0]++' "$XDG_DATA_HOME/sdcv_history" | sponge "$XDG_DATA_HOME/sdcv_history"
+ git -C "$XDG_DOCUMENTS_DIR/notes" commit --all -m 'update'
+ git -C "$XDG_DOCUMENTS_DIR/notes" push
+ git -C "$HOME/programs/reminders" commit --all -m 'update'
+ git -C "$HOME/programs/reminders" push
+ pass git push
+ elif [ "$hostname" = xyzpp ]; then
+ git -C "$XDG_DOCUMENTS_DIR/notes" pull
+ git -C "$HOME/programs/reminders" pull
+ pass git pull
+ fi
+}
+
+pac () {
+ pacpacs="$(sudo pacman --noconfirm -Syu | tee /dev/tty | grep -m1 '^Packages' | cut -d' ' -f3-)"
+ # Update rust toolchains before paru so paru can compile things in newest rust if needed.
+ rustup update
+ aurpacs="$(paru --color never --noconfirm -aSu --ignore libredwg-git | tee /dev/tty | grep -m1 '^Aur' | cut -d' ' -f3-)"
+ # part steal from aur comment
+ # sometimes "ERROR: Failure while downloading": https://github.com/neovim/neovim/issues/15709
+ # echo 1, printf 1 and yes 1 all works? not sure why
+ # aur neovim-nightly-bin has some issue on 12/26/2021? switch to community repo neovim temporary
+ #rm -rf ~/.cache/paru/clone/neovim-nightly-bin/ && echo 1 | PARU_PAGER=cat paru --rebuild --redownload neovim-nightly-bin
+ pacman -Qqme > "$XDG_CONFIG_HOME/myconf/pacman_Qqme"
+ pacman -Qqne > "$XDG_CONFIG_HOME/myconf/pacman_Qqne"
+ systemctl list-unit-files --state=enabled > "$XDG_CONFIG_HOME/myconf/sye"
+ systemctl --user list-unit-files --state=enabled > "$XDG_CONFIG_HOME/myconf/syue"
+ # pacdiff default use pacman database, so no need `sudo -E` for find, but will be a little bit slower
+ log="$log
+updated pacman packages: $pacpacs
+updated aur packages: $aurpacs
+pacdiff: $(pacdiff -o | tr '\n' ' ')
+checkrebuild: $(checkrebuild | awk '$2!~"zoom|miniconda3"{printf("%s ",$2)}')
+$(if echo "$pacpacs" | grep -q 'linux-\(megi-\)\?[0-9]'; then echo 'kernel upgraded, need reboot'; fi)
+"
+}
+
+qb () {
+ sudo systemctl stop qbittorrent-nox@xyz.service
+ find "$XDG_DATA_HOME/qBittorrent/nova3/engines" -maxdepth 1 -type f ! -name 'jackett*' -a ! -name '__init__.py' -delete
+ curlqb "$XDG_DATA_HOME/qBittorrent/nova3/engines"
+ sudo systemctl start qbittorrent-nox@xyz.service
+}
+
+refl () {
+ # why not use http:
+ # https://www.reddit.com/r/archlinux/comments/kx149z/should_i_use_http_mirrors/
+ # https://www.reddit.com/r/archlinux/comments/ej4k4d/is_it_safe_to_use_not_secured_http_pacman_mirrors/
+ # rsync may need to change XferCommand in /etc/pacman.conf
+ # https://www.reddit.com/r/archlinux/comments/mynw6e/rsync_mirrors_with_pacman/
+ # need --delay so no super out of sync mirrors
+ if [ "$hostname" != xyzka ]; then
+ sudo reflector --verbose --save /etc/pacman.d/mirrorlist --country us --protocol https --delay 1 --latest 25 --score 25 --fastest 10
+ else
+ sudo reflector --verbose --save /etc/pacman.d/mirrorlist --country ro --protocol https --delay 1 --fastest 3
+ fi
+}
+
+music () {
+ yt-dlp -f 'bestaudio[ext=opus]/bestaudio' --match-filter 'license=cc-by' --match-filter 'title~=(?i)cc-by' -P "$XDG_MUSIC_DIR/cc-by/scott_buckley" https://soundcloud.com/scottbuckley/tracks
+ rsync -avP --delete "$XDG_MUSIC_DIR/cc-by/scott_buckley" pp:/home/xyz/music/cc-by
+ rsync -avP --delete "$XDG_MUSIC_DIR/favorite" pp:/home/xyz/music
+}
+
+hostname="$(hostname)"
+[ "$hostname" = xyzpp ] && gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type nothing
+if [ $# -eq 0 ]; then
+ fast
+else
+ while getopts abcfjmMpqr opt; do
+ case $opt in
+ a)all;;
+ b)backup;;
+ c)clean;;
+ f)fast;;
+ j)userjs;;
+ m)misc;;
+ M)music;;
+ p)pac;;
+ q)qb;;
+ r)refl;;
+ \?)exit 1;;
+ esac
+ done
+fi
+[ "$log" ] && printf '%s' "$log" | tee "$XDG_DOCUMENTS_DIR/logs/upd.log"
+[ "$hostname" = xyzpp ] && gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type suspend