Initial upload

This commit is contained in:
Elias Schriefer 2021-11-28 18:29:51 +01:00
commit cc319fa994
8 changed files with 342 additions and 0 deletions

140
README.md Normal file
View File

@ -0,0 +1,140 @@
# Some useful bash scripts
Here are some little bash scripts I coded along the way.
You can install all of them or just some individually. Be sure to check the script description in this README for additional instructions. (This could be critical. Please,
read them.)
Generally, all of these scripts can be copied into your user's binary folder:
```shell
$ cp script_name ~/.local/bin/
$ chmod +x ~/.local/bin/script_name
```
You can check whether your shell looks for binaries in this path by running:
```shell
$ echo $PATH | grep ~/.local/bin
```
If there's text, you're good to go. If not, edit your shell's init file and add the following line:
```sh
export PATH=~/.local/bin:$PATH
```
## Table of contents
- battery-warn
- hotspot
- update-cargo-clif
- mount-nextcloud
- check-system-update
## battery-warn
> Periodically query the battery level and play a sound if the level is low.
**This script does not provide a help text!**
I originally coded this because my display driver broke and I only had the console. Unfortunately the console doesn't come with any way to notify me when my battery is dying.
You can run `battery-warn` in the background:
```shell
$ battery-warn &
```
It would be useful to add this line to your shell's init file if you need it regularly.
To check the battery level yourself run this:
```shell
$ battery-warn check
```
## hotspot
> Quickly start a wifi hotspot using NetworkManager.
**This script does not provide a help text!**
Starting/stopping the simple hotspot is as easy as:
```shell
$ hotspot
```
This will also show the SSID, password, and a QR-code.
In order to reduce power consumption it will also disable Wifi when disabling the hotspot. This behavior can be changed inside of the script (`turn_off_wifi=0`). Or you can
only turn the hotspot off manually:
```shell
$ hotspot off
```
If you want to be sneaky, you can start a hidden hotspot with a different randomly generated password each time:
```shell
$ hotspot random
```
To show the SSID, password, and QR-code again without changing the hotspot:
```shell
$ hotspot show
```
## update-cargo-clif
> Download and install the latest build artifact for `rustc_codegen_cranelift`.
**This script does not provide a help text!**
This script also needs `jq` to be installed.
Before using this script be sure to replace the `$username` and `$access_token` variables with your own GitHub username and an [access
token](https://github.com/settings/tokens/) with scope `workflow`. (This will also enable the scope `repo`.)
After the initial setup, run without arguments to download the latest GitHub Action build artifact for linux and install to /opt/cargo-clif:
```shell
$ update-cargo-clif
```
It will symlink the new `cargo` command to `/usr/local/bin/cargo-clif` (i.e. use with `cargo-clif` when building your projects).
The script uses `sudo` internally, so there is no need to run `sudo update-cargo-clif`.
## mount-nextcloud
> Mount your Nextcloud account automatically using `gio` and `pinentry`.
**This script does not provide a help text!**
Before using this script be sure to replace the `$server` and `$user` variables with your Nextcloud server and account.
If you are not using GNOME, replace `pinentry-gnome3` with the correct `pinentry` binary for your desktop environment.
You _could_ run `mount-nextcloud` manually (e.g. without a graphical UI in the console):
```shell
$ mount-nextcloud
```
But I recommend installing the autostart file. Assuming you are in the directory where you downloaded this repo:
```shell
$ cp mount-nextcloud.desktop ~/.config/autostart/
```
## check-system-update
> Update AUR and Flatpak packages directly and install Arch Linux packages from the repos at next boot.
**This script does not provide a help text!**
This script only works on distributions based on Arch Linux. You will also need to install `systemd-system-update-pacman` from the AUR (e.g. with `yay`):
```shell
$ yay -S systemd-system-update-pacman
```
Because the script downloads the packages into a special cache directory, you have to patch the updater script from that package. Assuming you are in the directory where
you downloaded this repo:
```shell
$ sudo patch /usr/lib/systemd-system-update-pacman/perform-system-update{,.patch}
```
To check for any updates - be it from the AUR, Flatpak, or the repos - run:
```shell
$ check-system-update
```
This will update AUR packages and Flatpaks directly (i.e. now), and repo packages later at the next time you boot up you system, so you can go on with your work like nothing
happened. If you have any critical system packages (e.g. drivers, kernels, etc.) installed from the AUR, installing them now could be a problem though. In order to check
which packages come from non-repo sources, run:
```shell
$ pacman -Qm
```
The script uses `sudo` internally, so there is no need to run `sudo check-system-update`.
## Contribution
Issues and Pull Requests are welcome. Please describe your problems or feature requests as detailed as possible.

21
battery-warn Executable file
View File

@ -0,0 +1,21 @@
#!/usr/bin/env bash
level() {
busctl --system get-property org.freedesktop.UPower /org/freedesktop/UPower/devices/battery_BAT0 org.freedesktop.UPower.Device Percentage | sed "s/d //"
}
icon-name() {
busctl --system get-property org.freedesktop.UPower /org/freedesktop/UPower/devices/battery_BAT0 org.freedesktop.UPower.Device IconName | sed -E "s/(s )|\"//g"
}
if [ "$1" = "check" ]; then
echo $(level)%
exit
fi
while true; do
icon_name=$(icon-name)
if echo $icon_name | grep -qv charging && echo $icon_name | grep -q caution; then
ffplay /usr/share/sounds/freedesktop/stereo/dialog-warning.oga -autoexit -nodisp -hide_banner -v -8 >&- 2>&-
fi
sleep 30
done

48
check-system-update Executable file
View File

@ -0,0 +1,48 @@
#!/usr/bin/bash
yay -Syua
echo "==> Updating flatpaks..."
flatpak update
echo "==> Syncing database..."
sudo pacman -Sy --noconfirm || exit 1
function update_init_fail {
echo "==> Initialising system update failed." >&2
echo "==> Cleaning up..." >&2
sudo rm -rf /var/lib/system-update
exit 1
}
if pacman -Qu >&-; then
echo "==> System updates available."
echo "==> Downloading system updates..."
if [ ! -e /var/lib/system-update ]; then
sudo mkdir -p /var/lib/system-update || update_init_fail
fi
sudo pacman -Suw --noconfirm --cachedir /var/lib/system-update || update_init_fail
sudo ln -s /var/lib/system-update /system-update || update_init_fail
echo "==> System update scheduled for next reboot."
else
echo "==> Up to date."
if [ -e /system-update ]; then
echo "==> There is another system update pending."
while true; do
read -n1 -p"==> Unschedule system update? [Y/n]: " q
[ ! $q = "" ] && echo
case $q in
y|Y|"")
sudo rm /system-update || {
echo "==> Could not unschedule pending system update" >&2
exit 1
}
echo "==> Unscheduled pending system update"
break;;
n|N)
break;;
*)
continue;;
esac
done
fi
fi

68
hotspot Executable file
View File

@ -0,0 +1,68 @@
#!/usr/bin/env bash
# Change this to 0 if you don't want your Wifi turned off when turning off the hotspot
turn_off_wifi=1
hotspot=Hotspot
if [ "$1" = "random" ]; then
hotspot=RandomHotspot
declare -i pwbits=256
if [ -n "$2" ]; then
pwbits=$2
fi
elif [ "$1" = "off" ]; then
if [ -n "$(nmcli -g GENERAL.STATE c s Hotspot)" ]; then
nmcli c do Hotspot
elif [ -n "$(nmcli -g GENERAL.STATE c s RandomHotspot)" ]; then
nmcli c do RandomHotspot
fi
exit
elif [ "$1" = "show" ]; then
nmcli d w s
exit
fi
random_hotspot_on() {
nmcli -p d w ho con-name RandomHotspot ssid "We never met, ok?" password $(pwmake $pwbits)
nmcli c mod RandomHotspot 802-11-wireless.hidden true
nmcli d w s
}
hotspot_on() {
nmcli -p d w ho
nmcli d w s
}
# Wifi on?
if nmcli r wi | grep enabled -q; then
# yes
# hotspot on?
if [[ -n "$(nmcli -g GENERAL.STATE c s $hotspot)" && "$hotspot" != "RandomHotspot" ]]; then
echo Turning off Wifi and hotspot
# yes, turn off hotspot (and Wifi)
if [ $turn_off_wifi -eq 0 ]; then
nmcli c do $hotspot
else
nmcli r wi off
fi
else
echo Turning on hotspot
# no, turn on hotspot
if [ "$hotspot" = "RandomHotspot" ]; then
random_hotspot_on
else
hotspot_on
fi
fi
else
echo Turning on Wifi and hotspot
# no
nmcli r wi on
# hotspot neither
if [ "$hotspot" = "RandomHotspot" ]; then
random_hotspot_on
else
hotspot_on
fi
fi

28
mount-nextcloud Executable file
View File

@ -0,0 +1,28 @@
#!/bin/bash
user=ExampleUser
server=cloud.example.com
account=$user@$server
uri=davs://$account/remote.php/webdav
uri_esc=$(echo $uri | sed s/\\//\\\\\\//g)
online=$(gio mount -l | sed "/^Mount/! d;/$uri_esc/! d" | wc -l)
echo $online
if [ $online -gt 0 ]; then
exit
fi
case $XDG_SESSION_TYPE in
tty)
gio mount $uri </dev/null && exit
echo not cached
systemd-ask-password Nextcloud password | gio mount $uri;;
x11)
gio mount $uri </dev/null && exit
echo not cached
cat <<-bye | pinentry-gnome3 | sed "/^D/! d;s/^D //" | gio mount $uri
setprompt Nextcloud password
setdesc $account
getpin
bye
;;
esac
ln -s gvfs/dav:host=$server,ssl=true,user=$user,prefix=%2Fremote.php%2Fwebdav /run/user/1000/nextcloud

5
mount-nextcloud.desktop Normal file
View File

@ -0,0 +1,5 @@
[Desktop Entry]
Name=Mount Nextcloud
Exec=mount-nextcloud
Icon=nextcloud
Type=Application

View File

@ -0,0 +1,5 @@
7c7,8
< /usr/bin/pacman -Su --noconfirm --color=auto > /dev/tty1 2>&1
---
> /usr/bin/pacman -Su --noconfirm --cachedir /var/lib/system-update --color=auto > /dev/tty1 2>&1
> /usr/bin/rm -rf /var/lib/system-update

27
update-cargo-clif Executable file
View File

@ -0,0 +1,27 @@
#!/usr/bin/bash
# Your GitHub username and access token
username="<Replace with your GitHub username>"
access_token="<Replace with your access token with workflow scope>"
artifact="$(curl https://api.github.com/repos/bjorn3/rustc_codegen_cranelift/actions/artifacts | jq -c ".artifacts|map(select(.name==\"cg_clif-Linux\"))[0]")"
id="$(echo "$artifact" | jq .id)"
expired="$(echo "$artifact" | jq .expired)"
if [ "$(cat /opt/cargo-clif/artifact-id 2>&-)" = "$id" ]; then
echo cargo-clif is up to date
exit
elif [ "$expired" = "true" ]; then
echo New version is already expired >&2
false
exit
else
sudo mkdir -p /opt/cargo-clif
sudo bash -c "echo $id > /opt/cargo-clif/artifact-id"
fi
sudo rm -rf /opt/cargo-clif/lib/librustc_std* /opt/cargo-clif/lib/rustlib/x86_64-unknown-linux-gnu/lib/*
curl -Lu$username:$access_token "$(echo "$artifact" | jq -r .archive_download_url)" | funzip | sudo tar xJC /opt/cargo-clif --strip-components 1
if [ ! -e /usr/local/bin/cargo-clif ]; then
sudo ln -s /opt/cargo-clif/cargo /usr/local/bin/cargo-clif
fi