Compare commits

...

19 Commits

Author SHA1 Message Date
7a0675d357 update_req.sh : Added -e runtime option && Removed hardcoded Python version && Added shellcheck disable warning 2025-05-15 09:06:34 +02:00
56f5107747 colours.sh : Added RGB and rainbow colour gradients 2025-04-26 20:07:43 +02:00
8407d3c051 colours.sh : Fixed treesitter code highlight and removed shellcheck warning 2025-04-26 20:07:18 +02:00
879f8b5d08 Added .gitignore 2025-04-26 18:15:40 +02:00
cb66429cb6 docker_build : Removed ollama-webui directory 2025-04-26 18:14:03 +02:00
09729afd48 update_req.sh : Changed manual updating to pur package usage 2025-04-26 18:13:41 +02:00
ea8985ade5 Added docker_build 2025-03-25 16:26:56 +01:00
ff57016f0c README.md : Fixed typos and added TOC 2025-03-25 16:14:12 +01:00
9ecf4d2fde Seperated git pull and git status scripts 2025-03-25 16:11:27 +01:00
98e335ac07 Added update_req.sh 2025-02-12 22:09:31 +01:00
8c512d1ba8 protondb.sh : now checks if latest proton-ge is already installed 2025-01-19 22:27:26 +01:00
9dc6756eff Added protondb.sh 2024-12-03 18:19:58 +01:00
16cf4280fd README.md : String formatting 2024-12-03 18:19:39 +01:00
d12079ff73 colours renamed to colours.sh 2024-11-07 20:49:57 +01:00
1446e2a977 Added setup_unreal.sh script 2024-11-07 20:49:33 +01:00
41f4adbd47 README.md : Fixed ssh authorized keys 2024-08-24 19:22:23 +02:00
06b1daf861 README.md : removed pythons commands 2024-08-24 19:22:07 +02:00
d7f00c92da README.md : added Openssl self-signed certificate 2024-07-27 16:53:26 +02:00
40e4edc574 README.md : changed codeblock type from bash to sh 2024-07-27 16:52:54 +02:00
10 changed files with 314 additions and 81 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.venv

View File

@ -1,4 +1,26 @@
# scripts
# Scripts
- [Configure SSH connection helper (remote pc not server)](#configure-ssh-connection-helper-remote-pc-not-server)
- [Docker commands](#docker-commands)
- [Remove every user R packages](#remove-every-user-r-packages)
- [Setup Git SSH key](#setup-git-ssh-key)
- [Font ligature test](#font-ligature-test)
- [QEMU cheat sheet](#qemu-cheat-sheet)
- [Share internet between two Linux interfaces using connman](#share-internet-between-two-linux-interfaces-using-connman)
- [IP Host (eth1 has internet, eth0 is remote)](#ip-host-eth1-has-internet-eth0-is-remote)
- [IP Remote](#ip-remote)
- [Remove DRM from Adobe Digital Editions](#remove-drm-from-adobe-digital-editions)
- [Prerequisites](#prerequisites)
- [Setting up Calibre](#setting-up-calibre)
- [Getting the DRM-free PDF](#getting-the-drm-free-pdf)
- [Loop devices](#loop-devices)
- [Install img.xz](#install-imgxz)
- [Raise Linux open files limits](#raise-linux-open-files-limits)
- [Verify a PGP Signature](#verify-a-pgp-signature)
- [Self-signed OpenSSL](#self-signed-openssl)
- [interactive](#interactive)
- [non-interactive and 10 years expiration](#non-interactive-and-10-years-expiration)
- [Bind to port 80 or 443](#bind-to-port-80-or-443)
## Configure SSH connection helper (remote pc not server)
@ -14,28 +36,19 @@ Host \$HOST_NAME
Now you can just connect using ssh \$HOST_NAME
## Pythons commands
```bash
# Update every packages
pip freeze | cut -d = -f 1 | xargs -n1 pip install -U
# Uninstall every packages
pip freeze | cut -d = -f 1 | xargs -n1 pip uninstall -y
```
## Docker commands
```bash
```sh
# Remove every images
docker images --format="{{.ID}}" | xargs docker rmi
docker images --format='{{.ID}}' | xargs docker rmi
# Remove every containers
docker ps -a --format="{{.ID}}" | xargs docker stop | xargs docker rm
docker ps -a --format='{{.ID}}' | xargs docker stop | xargs docker rm
# Remove every volumes
docker volume ls --format="{{.Name}}" | xargs docker volume rm
docker volume ls --format='{{.Name}}' | xargs docker volume rm
# Remove every anonymous images (cached)
docker images --format="{{.Repository}};{{.Tag}};{{.ID}}" | grep "<none>;<none>" | cut -d";" -f 3 | xargs docker rmi
docker images --format='{{.Repository}};{{.Tag}};{{.ID}}' | grep '<none>;<none>' | cut -d ';' -f 3 | xargs docker rmi
# Get all used images tag in dir $PATH_ANALYSE
find $PATH_ANALYSE -name "Dockerfile*" | while read file; do cat $file; echo ""; done | grep -e FROM | cut -d " " -f 2 | sed $'s/[^[:print:]\t]//g' | sort -u | xargs -n1 docker pull
find $PATH_ANALYSE -name 'Dockerfile*' | while read file; do cat $file; echo ''; done | grep -e FROM | cut -d ' ' -f 2 | sed $'s/[^[:print:]\t]//g' | sort -u | xargs -n1 docker pull
# Calculate total docker images size
docker images --format {{.ID}} | xargs -n1 docker inspect | jq '.[0]["Size"]' | paste -sd + | bc | format_bytes_str
```
@ -44,16 +57,16 @@ docker images --format {{.ID}} | xargs -n1 docker inspect | jq '.[0]["Size"]' |
```R
my_packages = as.data.frame(installed.packages()[, c(1, 3:4)])
my_packages = my_packages[my_packages$Priority != "base",]
my_packages = my_packages[my_packages$Priority != 'base',]
for(lib in .libPaths()) lapply(my_packages$Package, remove.packages, lib = lib)
```
## Setup Git SSH key
```bash
```sh
# Generate a SSH key pair
ssh-keygen -t rsa -b 4096 -o -a 100 -C "email@example.com" -f ~/.ssh/$KEY_NAME
ssh-keygen -t ed25519 -a 100 -C "email@example.com" -f ~/.ssh/$KEY_NAME
ssh-keygen -t rsa -b 4096 -o -a 100 -C 'email@example.com' -f ~/.ssh/$KEY_NAME
ssh-keygen -t ed25519 -a 100 -C 'email@example.com' -f ~/.ssh/$KEY_NAME
# Copy the public key to clipboard
cat ~/.ssh/$KEY_NAME.pub | xclip
# Paste the contents into a new SSH key holder in https://github.com/settings/keys
@ -63,7 +76,7 @@ ssh -T git@github.com
git remote set-url origin git@github.com:username/your-repository.git
# Add key to SSH config file (~/.ssh/config)
echo -e "\n\nHost github.com\n\tIdentityFile ~/.ssh/$KEY_NAME" >> ~/.ssh/config
cat KEY_FILE | ssh REMOTE "cat >> ~/authorized_keys"
cat KEY_FILE | ssh REMOTE 'cat >> ~/.ssh/authorized_keys'
```
## Font ligature test
@ -79,7 +92,7 @@ cat KEY_FILE | ssh REMOTE "cat >> ~/authorized_keys"
## QEMU cheat sheet
```bash
```sh
# Creating the disk image
qemu-img create -f qcow2 DISK_NAME.img 15G
@ -91,11 +104,11 @@ qemu-system-x86_64 $DISK_NAME.img \
-name $VM_NAME &
```
## Share internet between two linux interfaces using connman
## Share internet between two Linux interfaces using connman
### IP Host (eth1 has internet, eth0 is remote)
```bash
```sh
# Enable kernel port forwarding
sysctl -w net.ipv4.ip_forward=1
# Enable at reboot
@ -115,7 +128,7 @@ iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
### IP Remote
```bash
```sh
connmanctl
config <eth0> --ipv4 manual 192.168.137.2 255.255.255.0 192.168.137.1 --nameservers <DNS-SERVER>
```
@ -124,9 +137,9 @@ config <eth0> --ipv4 manual 192.168.137.2 255.255.255.0 192.168.137.1 --nameserv
### Prerequisites
In Windows you must have _Adobe Digital Editions_ and _Calibre_ using Chocolatey
On Windows, you must have _Adobe Digital Editions_ and _Calibre_ using Chocolatey
```bash
```sh
choco install -y adobedigitaleditions calibre
```
@ -134,18 +147,18 @@ choco install -y adobedigitaleditions calibre
- Download the DeDRM plugin on [GitHub](https://github.com/noDRM/DeDRM_tools).
- Extract the plugin archive
- Install the plugin in Calibre -> Preferences -> Plugins -> Add from file
- Install the plugin in Calibre Preferences Plugins Add from file
### Getting the DRM-free pdf
### Getting the DRM-free PDF
- Open the pdf using _Adobe Digital Editions_
- Open the PDF using _Adobe Digital Editions_
- Navigate to C:/Users/\<USER\>/My\ Digital\ Editions
- Add the PDF to calibre
- The DRM free PDF is available at C:/Users/\<USER\>/Calibre\ Library
## Loop devices
```bash
```sh
# Create loop device to $BLOCK_PATH of 4G
dd if=/dev/zero of=$BLOCK_PATH bs=1M count=4096
# Create loop filesystem
@ -162,11 +175,11 @@ rm $BLOCK_PATH
## Install img.xz
```bash
```sh
xzcat $IMG_FILE | dd of=/dev/$DEVICE bs=64k oflag=dsync status=progress
```
## Raise linux open files limits
## Raise Linux open files limits
In the file /etc/security/limits.conf add this :
@ -179,7 +192,7 @@ root hard nofile 64000
## Verify a PGP Signature
```bash
```sh
mkdir /home/$USER/.XDG/data/gnupg
chmod 700 /home/$USER/.XDG/data/gnupg
gpg --import $PUBLIC_KEY
@ -187,3 +200,20 @@ chmod 600 /home/$USER/.XDG/data/gnupg/$PUBLIC_KEY
gpg --verify $SIGNATURE.sig $FILE
```
### Self-signed OpenSSL
#### interactive
```sh
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365
```
#### non-interactive and 10 years expiration
```sh
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 3650 -nodes -subj '/C=XX/ST=StateName/L=CityName/O=CompanyName/OU=CompanySectionName/CN=CommonNameOrHostname'
```
## Bind to port 80 or 443
[Is there a way for non-root processes to bind to "privileged" ports on Linux?](https://stackoverflow.com/questions/413807/is-there-a-way-for-non-root-processes-to-bind-to-privileged-ports-on-linux)
[Allow non-root process to bind to port 80 and 443?](https://superuser.com/questions/710253/allow-non-root-process-to-bind-to-port-80-and-443)

33
colours
View File

@ -1,33 +0,0 @@
#!/usr/bin/env bash
# Print out escape sequences usable for coloured text on tty.
printf 'Colour escapes are %s\n' '\e[${value};...;${value}m'
printf 'Values 30..37 are \e[33mforeground colours\e[m\n'
printf 'Values 40..47 are \e[43mbackground colours\e[m\n'
printf 'Value 1 gives a \e[1mbold look\e[m\n'
printf 'Value 2 gives a \e[2mdim look\e[m\n'
printf 'Value 3 gives a \e[3mitalic look\e[m\n'
printf 'Value 4 gives a \e[4munderlined look\e[m\n'
printf 'Value 5 gives a \e[5mblinking look\e[m\n\n'
# foreground colours
for fgc in {30..37}; do
# background colours
for bgc in {40..47}; do
fgc=${fgc#37} # white
bgc=${bgc#40} # black
vals="${fgc:+$fgc;}${bgc}"
vals=${vals%%;}
seq0="${vals:+\e[${vals}m}"
printf " %-9s" "${seq0:-(default)}"
echo -e -n " ${seq0}TEXT\e[m"
echo -e -n " \e[${vals:+${vals+$vals;}}1mBOLD\e[m"
echo -e -n " \e[${vals:+${vals+$vals;}}2mDIM\e[m"
echo -e -n " \e[${vals:+${vals+$vals;}}3mITA\e[m"
echo -e -n " \e[${vals:+${vals+$vals;}}4mUND\e[m"
echo -e -n " \e[${vals:+${vals+$vals;}}5mBLI\e[m"
done
echo; echo
done

75
colours.sh Executable file
View File

@ -0,0 +1,75 @@
#!/usr/bin/env bash
# Print out escape sequences usable for coloured text on tty.
# shellcheck disable=2016
printf 'Colour escapes are %s\n' '\e[${value};...;${value}m'
printf 'Values 30..37 are \e[33mforeground colours\e[m\n'
printf 'Values 40..47 are \e[43mbackground colours\e[m\n'
printf 'Value 1 gives a \e[1mbold look\e[m\n'
printf 'Value 2 gives a \e[2mdim look\e[m\n'
printf 'Value 3 gives a \e[3mitalic look\e[m\n'
printf 'Value 4 gives a \e[4munderlined look\e[m\n'
printf 'Value 5 gives a \e[5mblinking look\e[m\n\n'
# foreground colours
for fgc in {30..37}; do
# background colours
for bgc in {40..47}; do
fgc=${fgc#37} # white
bgc=${bgc#40} # black
vals="${fgc:+$fgc};${bgc}"
vals=${vals%%;}
seq0="${vals:+\e[${vals}m}"
printf " %-9s" "${seq0:-(default)}"
echo -en " ${seq0}TEXT\e[m"
echo -en " \e[${vals:+${vals+$vals}};1mBOLD\e[m"
echo -en " \e[${vals:+${vals+$vals}};2mDIM\e[m"
echo -en " \e[${vals:+${vals+$vals}};3mITA\e[m"
echo -en " \e[${vals:+${vals+$vals}};4mUND\e[m"
echo -en " \e[${vals:+${vals+$vals}};5mBLI\e[m"
done
echo; echo
done
rainbowColor() {
local h=$(($1 / 43))
local f=$(($1 - 43 * h))
local t=$((f * 255 / 43))
local q=$((255 - t))
if [ $h -eq 0 ]
then
echo "255 $t 0"
elif [ $h -eq 1 ]
then
echo "$q 255 0"
elif [ $h -eq 2 ]
then
echo "0 255 $t"
elif [ $h -eq 3 ]
then
echo "0 $q 255"
elif [ $h -eq 4 ]
then
echo "$t 0 255"
elif [ $h -eq 5 ]
then
echo "255 0 $q"
else
# execution should never reach here
echo '0 0 0'
fi
}
rf(){ echo "$1" 0 0; }; gf(){ echo 0 "$1" 0; }; bf(){ echo 0 0 "$1"; }
for f in rf gf bf rainbowColor; do
for s in "$(seq 0 127)" "$(seq 255 -1 128)"; do
for i in $s; do
# shellcheck disable=2183,2046
printf '\x1b[48;2;%s;%s;%sm ' $($f "$i")
done
echo -en "\x1b[0m\n"
done
done

65
docker_build Executable file
View File

@ -0,0 +1,65 @@
#!/bin/sh
repeat_char(){
end="$1"
for _ in $(seq 1 "$end") ; do
printf '%s' "$2";
done
}
header(){
env printf "┌$(repeat_char 40 ─)┐\n"
env printf '│ %-38s │\n' "$1"
env printf "└$(repeat_char 40 '─')┘\n"
}
base_images_cache=''
pull_base_images(){
base_images=$(echo "$1" | sed 's/ /\n/g' | rg -v "^($(printf '%s' "$base_images_cache" | sed -s 's/ /\|/g'))$" | paste -sd ' ')
# echo "BASE: $base_images"
# echo "CACHE: $base_images_cache"
if [ -n "$base_images" ]; then
base_images_cache="$base_images_cache $base_images"
echo 'Downloading base images'
echo "$base_images" | xargs -n1 docker pull
fi
}
build(){
[ ! -d "$1" ] && return 0
header "$(basename "$1")"
pull_base_images "$(fd Dockerfile "$1" -x rg FROM | cut -d ' ' -f 2 | sort | uniq | paste -sd ' ')"
echo 'Building...'
if [ -z "$2" ]; then
(cd "$1" && docker compose pull)
(cd "$1" && docker compose build)
else
(cd "$1" && docker compose build "$2")
fi
}
if ! rc-service docker status > /dev/null; then
echo 'Docker is not started, exiting'
return 1
fi
build /home/_aspil0w/git/3d-playground
build /home/_aspil0w/git/CoverLetter
build /home/_aspil0w/git/CurriculumVitae
build /home/_aspil0w/git/dotfiles
build /home/_aspil0w/git/ESP32Manager
build /home/_aspil0w/git/haskell_playground
build /home/_aspil0w/git/IntershipReport
build /home/_aspil0w/git/notebook
build /home/_aspil0w/git/portfolio no_ssl
build /home/_aspil0w/git/portfolio_ivo no-ssl
build /home/_aspil0w/git/SimpleGradientDescent
build /home/_aspil0w/git/sorting_algorithms
build /home/_aspil0w/git/VariationalAutoEncoder
build /home/_aspil0w/git/ViolaJones
build /home/_aspil0w/git/wgan-gp
build /home/_aspil0w/git/WGAN-GP_Pytorch
build /home/_aspil0w/git/workspace/Data\ analysis/Speed\ dating\ experiment
build /home/_aspil0w/git/workspace/Miage/M2/Implementation\ de\ l\'IA
build /usr/local/src/Ventoy

38
protondb.sh Executable file
View File

@ -0,0 +1,38 @@
#!/bin/sh
set -e
echo 'Creating temporary working directory...'
rm -rf /tmp/proton-ge-custom
mkdir /tmp/proton-ge-custom
cd /tmp/proton-ge-custom
echo 'Creating Steam directory if it does not exist...'
mkdir -p ~/.steam/root/compatibilitytools.d
echo 'Getting ProtonGE metadata'
METADATA=$(curl -s https://api.github.com/repos/GloriousEggroll/proton-ge-custom/releases/latest | grep browser_download_url | cut -d\" -f4)
test -n "$METADATA"
# If result is not empty, continue
echo 'Fetching tarball URL...'
TARBALL_URL=$(echo "$METADATA" | grep .tar.gz)
TARBALL_NAME=$(basename "$TARBALL_URL")
VERSION_NAME=$(echo "$TARBALL_NAME" | sed 's/.tar.gz//')
test -d ~/.steam/root/compatibilitytools.d/"$VERSION_NAME" && echo "Version $VERSION_NAME already present, aborting" && exit 0
echo "Downloading tarball: $TARBALL_NAME..."
curl -# -L "$TARBALL_URL" -o "$TARBALL_NAME" --no-progress-meter
echo 'Fetching checksum URL...'
CHECKSUM_URL=$(echo "$METADATA" | grep .sha512sum)
CHECKSUM_NAME=$(basename "$CHECKSUM_URL")
echo "Downloading checksum: $CHECKSUM_NAME..."
curl -# -L "$CHECKSUM_URL" -o "$CHECKSUM_NAME" --no-progress-meter
echo "Verifying tarball $TARBALL_NAME with checksum $CHECKSUM_NAME..."
sha512sum -c "$CHECKSUM_NAME"
# If result is ok, continue
echo "Extracting $TARBALL_NAME to Steam directory..."
tar -xf "$TARBALL_NAME" -C ~/.steam/root/compatibilitytools.d/
echo 'All done :)'

17
pull.sh
View File

@ -12,23 +12,12 @@ cd ..
for d in *; do
cd "$d" || continue
#PULL_LOG=$(script -q /dev/null -c 'git pull')
#if [ "$PULL_LOG" != "$(env printf 'Already up to date.\r\n')" ]; then
# env printf "┌$(__r__ 40 ─)┐\n"
# env printf "│ %-38s │\n" "$d"
# env printf "└$(__r__ 40 '─')┘\n"
# echo "$PULL_LOG"
#fi
# git gc
# git clean -fx
STATUS_LOG=$(script -q /dev/null -c 'git status -s')
if [ -n "$STATUS_LOG" ]; then
PULL_LOG=$(script -q /dev/null -c 'git pull')
if [ "$PULL_LOG" != "$(env printf 'Already up to date.\r\n')" ]; then
env printf "$(__r__ 40)┐\n"
env printf "│ %-38s │\n" "$d"
env printf "$(__r__ 40 '─')┘\n"
echo "$STATUS_LOG"
echo "$PULL_LOG"
fi
cd ..

13
setup_unreal.sh Executable file
View File

@ -0,0 +1,13 @@
#!/bin/sh
set -e
test -z "$REPO_PATH" && REPO_PATH="$HOME"/git
git clone git@github.com:EpicGames/UnrealEngine.git -b release --depth 1 "$REPO_PATH"/UnrealEngine
cd "$REPO_PATH"/UnrealEngine
./Setup.sh
./GenerateProjectFiles.sh
make
cd Engine/Binaries/Linux
./UnrealEditor

24
status.sh Executable file
View File

@ -0,0 +1,24 @@
#!/bin/sh
__r__(){
end="$1"
for _ in $(seq 1 "$end"); do
printf '%s' "$2";
done
}
cd ..
for d in *; do
cd "$d" || continue
STATUS_LOG=$(script -q /dev/null -c 'git status -s')
if [ -n "$STATUS_LOG" ]; then
env printf "$(__r__ 40)┐\n"
env printf "│ %-38s │\n" "$d"
env printf "$(__r__ 40 '─')┘\n"
echo "$STATUS_LOG"
fi
cd ..
done

31
update_req.sh Executable file
View File

@ -0,0 +1,31 @@
#!/bin/sh
set -e
repeat_char(){
end="$1"
for _ in $(seq 1 "$end") ; do
printf '%s' "$2";
done
}
header(){
env printf "$(repeat_char 150)┐\n"
env printf '│ %-148s │\n' "$1"
env printf "$(repeat_char 150 '─')┘\n"
}
VENV_PATH='./.venv'
python -m venv --upgrade-deps "$VENV_PATH"
# shellcheck disable=1091
if [ -f "$VENV_PATH"/Scripts/activate ]; then . "$VENV_PATH"/Scripts/activate
elif [ -f "$VENV_PATH"/bin/activate ]; then . "$VENV_PATH"/bin/activate
else exit 1; fi
pip install --disable-pip-version pur
fd requirements.txt ~ | while read -r filename; do
header "$(realpath "$filename" | sed "s,$HOME,~,")"
pur -r "$filename"
done
deactivate
rm -rf "$VENV_PATH"