add scripts
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
return {
|
||||
target = {
|
||||
linux = "~/scripts",
|
||||
default = "~/scripts",
|
||||
},
|
||||
}
|
||||
Executable
+27
@@ -0,0 +1,27 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
ENTRY_DIR="/efi/loader/entries"
|
||||
BACKUP_DIR="${ENTRY_DIR}/backup-$(date +%F-%H%M%S)"
|
||||
EDID_PARAM="drm.edid_firmware=DP-1:edid/g80.bin"
|
||||
|
||||
echo "Backing up boot entries..."
|
||||
sudo mkdir -p "$BACKUP_DIR"
|
||||
sudo cp -v "${ENTRY_DIR}"/*.conf "$BACKUP_DIR"
|
||||
|
||||
echo "Adding EDID parameter to boot entry files..."
|
||||
for file in "${ENTRY_DIR}"/*.conf; do
|
||||
if grep -q "$EDID_PARAM" "$file"; then
|
||||
echo "Already present in $(basename "$file"), skipping."
|
||||
continue
|
||||
fi
|
||||
|
||||
# Use | as delimiter to avoid issues with '/'
|
||||
sudo sed -i "s|^options|& ${EDID_PARAM}|" "$file"
|
||||
echo "Updated $(basename "$file")"
|
||||
done
|
||||
|
||||
echo
|
||||
echo "All done!"
|
||||
echo "Backup saved to: $BACKUP_DIR"
|
||||
echo "Reboot to apply changes."
|
||||
Executable
+49
@@ -0,0 +1,49 @@
|
||||
#!/bin/bash
|
||||
# Comprehensive CGNAT and IPv6 connectivity checker for Linux
|
||||
|
||||
# ----------- Public IPs -----------
|
||||
PUBLIC_IPV4=$(curl -4 -s https://ifconfig.me)
|
||||
PUBLIC_IPV6=$(curl -6 -s https://ifconfig.me)
|
||||
|
||||
# ----------- Local Interface Info -----------
|
||||
WAN_IF=$(ip route show default | awk '/default/ {print $5}')
|
||||
LOCAL_IPV4=$(ip -4 addr show "$WAN_IF" | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||
LOCAL_IPV6=$(ip -6 addr show "$WAN_IF" | awk '/inet6 / && !/fe80/ {print $2}' | cut -d/ -f1)
|
||||
|
||||
echo "===== CGNAT / IPv6 Check ====="
|
||||
echo "Network interface: $WAN_IF"
|
||||
echo
|
||||
|
||||
echo "Local IPv4: $LOCAL_IPV4"
|
||||
echo "Public IPv4: $PUBLIC_IPV4"
|
||||
echo
|
||||
echo "Local IPv6: $LOCAL_IPV6"
|
||||
echo "Public IPv6: $PUBLIC_IPV6"
|
||||
echo
|
||||
echo "--------------------------------"
|
||||
|
||||
# ----------- IPv4 Analysis -----------
|
||||
if [[ -z "$PUBLIC_IPV4" ]]; then
|
||||
echo "🌐 No public IPv4 address detected (possibly IPv6-only connection)."
|
||||
elif [[ "$LOCAL_IPV4" =~ ^10\. || "$LOCAL_IPV4" =~ ^192\.168\. || "$LOCAL_IPV4" =~ ^172\.(1[6-9]|2[0-9]|3[0-1])\. || "$LOCAL_IPV4" =~ ^100\.(6[4-9]|[7-9][0-9]|1[0-1][0-9]|12[0-7])\. ]]; then
|
||||
if [ "$PUBLIC_IPV4" != "$LOCAL_IPV4" ]; then
|
||||
echo "⚠️ Your local IPv4 ($LOCAL_IPV4) is private, and your public IPv4 differs."
|
||||
echo "➡️ You are likely behind CGNAT or another NAT layer."
|
||||
else
|
||||
echo "✅ Local and public IPv4 match — you have a public IPv4 address."
|
||||
fi
|
||||
else
|
||||
echo "✅ Local IPv4 appears to be public ($LOCAL_IPV4). No CGNAT detected."
|
||||
fi
|
||||
|
||||
echo "--------------------------------"
|
||||
|
||||
# ----------- IPv6 Analysis -----------
|
||||
if [[ -n "$PUBLIC_IPV6" ]]; then
|
||||
echo "✅ Public IPv6 is active — your device has global IPv6 connectivity."
|
||||
else
|
||||
echo "❌ No global IPv6 address detected."
|
||||
fi
|
||||
|
||||
echo "--------------------------------"
|
||||
echo "Done."
|
||||
Executable
+43
@@ -0,0 +1,43 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "=== Snapper Cleanup Script ==="
|
||||
|
||||
# 1. Show existing configs
|
||||
echo "[*] Listing Snapper configs..."
|
||||
snapper list-configs || { echo "No snapper configs found."; exit 0; }
|
||||
|
||||
# 2. For each config, list snapshots and ask to delete
|
||||
for config in $(snapper list-configs | awk 'NR>1 {print $1}'); do
|
||||
echo ""
|
||||
echo "[*] Config: $config"
|
||||
snapper -c "$config" list || true
|
||||
read -rp "Delete ALL snapshots for config '$config'? [y/N] " ans
|
||||
if [[ "$ans" =~ ^[Yy]$ ]]; then
|
||||
echo " -> Deleting snapshots for $config"
|
||||
snapper -c "$config" delete 1-999999 || true
|
||||
fi
|
||||
read -rp "Remove config '$config'? [y/N] " ans2
|
||||
if [[ "$ans2" =~ ^[Yy]$ ]]; then
|
||||
echo " -> Removing config $config"
|
||||
snapper delete-config "$config" || true
|
||||
fi
|
||||
done
|
||||
|
||||
# 3. Optionally uninstall Snapper
|
||||
read -rp "Do you also want to uninstall Snapper? [y/N] " ans3
|
||||
if [[ "$ans3" =~ ^[Yy]$ ]]; then
|
||||
if command -v zypper >/dev/null 2>&1; then
|
||||
sudo zypper remove -y snapper
|
||||
elif command -v dnf >/dev/null 2>&1; then
|
||||
sudo dnf remove -y snapper
|
||||
elif command -v apt >/dev/null 2>&1; then
|
||||
sudo apt remove -y snapper
|
||||
else
|
||||
echo "Could not detect package manager. Please uninstall Snapper manually."
|
||||
fi
|
||||
else
|
||||
echo "Snapper package left installed."
|
||||
fi
|
||||
|
||||
echo "=== Snapper cleanup complete ==="
|
||||
Executable
+46
@@ -0,0 +1,46 @@
|
||||
#!/bin/bash
|
||||
|
||||
XKB_FILE="/usr/share/X11/xkb/symbols/us"
|
||||
BACKUP_FILE="${XKB_FILE}.backup.$(date +%s)"
|
||||
|
||||
echo "Creating backup at $BACKUP_FILE..."
|
||||
sudo cp "$XKB_FILE" "$BACKUP_FILE"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Backup failed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Modifying intl section to map acute+c to cedilla..."
|
||||
|
||||
# Create a temp file with the fix
|
||||
TEMP_FILE=$(mktemp)
|
||||
|
||||
# Extract intl section, modify it, then rebuild the file
|
||||
sudo bash << 'SCRIPT'
|
||||
XKB_FILE="/usr/share/X11/xkb/symbols/us"
|
||||
TEMP_FILE=$(mktemp)
|
||||
|
||||
# Replace acute+c mapping with cedilla in the intl section
|
||||
sed '/xkb_symbols "intl"/,/^}/ {
|
||||
s/ccedil, Ccedil/ccedil, Ccedil/g
|
||||
s/\[ acute,/[ dead_acute,/g
|
||||
}' "$XKB_FILE" > "$TEMP_FILE.new"
|
||||
|
||||
# If sed found the pattern, use it; otherwise, manually add cedilla to acute deadkey
|
||||
if grep -q "dead_acute" "$TEMP_FILE.new"; then
|
||||
mv "$TEMP_FILE.new" "$XKB_FILE"
|
||||
else
|
||||
# Fallback: inject cedilla mapping after the intl section starts
|
||||
sed '/xkb_symbols "intl"/a\ // Map apostrophe+c to cedilla\n key <AC02> { [ c, C, ccedil, Ccedil ] };' "$BACKUP_FILE" > "$XKB_FILE"
|
||||
fi
|
||||
|
||||
rm -f "$TEMP_FILE" "$TEMP_FILE.new"
|
||||
SCRIPT
|
||||
|
||||
echo "Clearing XKB cache..."
|
||||
rm -rf ~/.cache/xkb 2>/dev/null
|
||||
|
||||
echo "Reloading Niri..."
|
||||
niri msg action quit
|
||||
|
||||
echo "Done. Log back in."
|
||||
Binary file not shown.
Executable
+20
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
GAME_ID="1697700"
|
||||
YOUR_HOME="/home/thomasgl"
|
||||
YOUR_STEAM_DIR="$YOUR_HOME/.local/share/Steam"
|
||||
|
||||
compatdataDir="$YOUR_STEAM_DIR/steamapps/compatdata/${GAME_ID}"
|
||||
mkdir "$compatdataDir" 2> /dev/null
|
||||
winePrefixDir=${compatdataDir}/pfx
|
||||
|
||||
echo "Trying to enter winePrefixDir.."
|
||||
cd "$winePrefixDir" || exit
|
||||
echo "Entered winePrefixDir!"
|
||||
|
||||
export STEAM_COMPAT_DATA_PATH="$compatdataDir"
|
||||
export STEAM_COMPAT_CLIENT_INSTALL_PATH="$YOUR_HOME/.steam"
|
||||
export WINEPREFIX="${winePrefixDir}"
|
||||
|
||||
echo "Starting..."
|
||||
"$YOUR_STEAM_DIR/compatibilitytools.d/GE-Proton10-16/proton" run "$YOUR_STEAM_DIR/steamapps/common/Who's Lila/DAEMON/DAEMON.exe"
|
||||
Executable
+20
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
GAME_ID="1697700"
|
||||
YOUR_HOME="/home/thomasgl"
|
||||
YOUR_STEAM_DIR="$YOUR_HOME/.local/share/Steam"
|
||||
|
||||
compatdataDir="$YOUR_STEAM_DIR/steamapps/compatdata/${GAME_ID}"
|
||||
mkdir "$compatdataDir" 2> /dev/null
|
||||
winePrefixDir=${compatdataDir}/pfx
|
||||
|
||||
echo "Trying to enter winePrefixDir.."
|
||||
cd "$winePrefixDir" || exit
|
||||
echo "Entered winePrefixDir!"
|
||||
|
||||
export STEAM_COMPAT_DATA_PATH="$compatdataDir"
|
||||
export STEAM_COMPAT_CLIENT_INSTALL_PATH="$YOUR_HOME/.steam"
|
||||
export WINEPREFIX="${winePrefixDir}"
|
||||
|
||||
echo "Starting..."
|
||||
"$YOUR_STEAM_DIR/compatibilitytools.d/GE-Proton10-16/proton" run "$YOUR_STEAM_DIR/steamapps/common/Who's Lila/WhosLila.exe"
|
||||
Executable
+23
@@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Predefined folder path
|
||||
FOLDER="$HOME/wallpapers"
|
||||
|
||||
# Check if folder exists
|
||||
if [[ ! -d "$FOLDER" ]]; then
|
||||
echo "Error: Folder '$FOLDER' does not exist." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Find all image files recursively
|
||||
images=($(find "$FOLDER" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.gif" -o -iname "*.bmp" -o -iname "*.webp" \) 2>/dev/null))
|
||||
|
||||
# Check if any images were found
|
||||
if [[ ${#images[@]} -eq 0 ]]; then
|
||||
echo "No image files found in '$FOLDER' or its subdirectories" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Select and output random image path
|
||||
random_index=$((RANDOM % ${#images[@]}))
|
||||
echo "${images[$random_index]}"
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
# Wait for Hyprland to fully initialize
|
||||
sleep 2
|
||||
|
||||
OUTPUT="DP-1"
|
||||
MODE="3840x2160@239.914001" # exact mode from wlr-randr
|
||||
|
||||
# Turn off and back on
|
||||
wlr-randr --output "$OUTPUT" --off
|
||||
sleep 1
|
||||
wlr-randr --output "$OUTPUT" --mode "$MODE"
|
||||
Executable
+16
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Get the list of sinks and format for Rofi (index and name)
|
||||
sinks=$(pactl list sinks short | awk '{print $2}')
|
||||
|
||||
# Use Rofi to select a sink (case-insensitive search)
|
||||
selected_sink_name=$(echo "$sinks" | rofi -i -dmenu -p "Select audio output:")
|
||||
|
||||
# If a sink was selected
|
||||
if [ -n "$selected_sink_name" ]; then
|
||||
# Get the index of the selected sink
|
||||
selected_sink_index=$(pactl list sinks short | grep -F "$selected_sink_name" | awk '{print $1}' | head -n 1)
|
||||
|
||||
# Set the default sink
|
||||
pactl set-default-sink "$selected_sink_index"
|
||||
fi
|
||||
Reference in New Issue
Block a user