added all scripts
This commit is contained in:
87
bluelight.sh
Executable file
87
bluelight.sh
Executable file
@@ -0,0 +1,87 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
SHADER_DIR="$HOME/.config/hypr/shaders"
|
||||||
|
SHADER_FILE="$SHADER_DIR/brightness.frag"
|
||||||
|
|
||||||
|
# Ensure shader directory exists
|
||||||
|
mkdir -p "$SHADER_DIR"
|
||||||
|
|
||||||
|
# Get screen brightness level
|
||||||
|
echo "Enter screen brightness level (0-10, where 10 = 100%):"
|
||||||
|
read -r LEVEL
|
||||||
|
|
||||||
|
# Validate input
|
||||||
|
if ! [[ "$LEVEL" =~ ^[0-9]+$ ]] || [ "$LEVEL" -lt 0 ] || [ "$LEVEL" -gt 10 ]; then
|
||||||
|
echo "Invalid input. Please enter a number between 0 and 10."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Convert to decimal (0-10 -> 0.0-1.0)
|
||||||
|
BRIGHTNESS=$(echo "scale=2; $LEVEL / 10" | bc)
|
||||||
|
|
||||||
|
# Ask about keyboard backlight
|
||||||
|
echo "Adjust keyboard backlight? (y/n):"
|
||||||
|
read -r KBD_ADJUST
|
||||||
|
|
||||||
|
if [[ "$KBD_ADJUST" == "y" || "$KBD_ADJUST" == "Y" ]]; then
|
||||||
|
echo "Enter keyboard backlight level (0-10, where 10 = 100%):"
|
||||||
|
read -r KBD_LEVEL
|
||||||
|
|
||||||
|
# Validate keyboard input
|
||||||
|
if ! [[ "$KBD_LEVEL" =~ ^[0-9]+$ ]] || [ "$KBD_LEVEL" -lt 0 ] || [ "$KBD_LEVEL" -gt 10 ]; then
|
||||||
|
echo "Invalid input. Please enter a number between 0 and 10."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Convert to percentage (0-10 -> 0-100)
|
||||||
|
KBD_PERCENT=$((KBD_LEVEL * 10))
|
||||||
|
|
||||||
|
# Set keyboard backlight
|
||||||
|
kbdlight set $KBD_PERCENT
|
||||||
|
echo "Keyboard backlight set to ${KBD_PERCENT}%"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ask about blue light filter
|
||||||
|
echo "Apply blue light filter? (y/n):"
|
||||||
|
read -r BLUELIGHT
|
||||||
|
|
||||||
|
# Create shader based on choice
|
||||||
|
cat > "$SHADER_FILE" << EOF
|
||||||
|
#version 300 es
|
||||||
|
|
||||||
|
precision mediump float;
|
||||||
|
|
||||||
|
in vec2 v_texcoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
uniform sampler2D tex;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec4 pixColor = texture(tex, v_texcoord);
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if [[ "$BLUELIGHT" == "y" || "$BLUELIGHT" == "Y" ]]; then
|
||||||
|
cat >> "$SHADER_FILE" << EOF
|
||||||
|
// Reduce blue light
|
||||||
|
pixColor.r *= 1.0;
|
||||||
|
pixColor.g *= 0.85;
|
||||||
|
pixColor.b *= 0.65;
|
||||||
|
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat >> "$SHADER_FILE" << EOF
|
||||||
|
// Adjust brightness
|
||||||
|
pixColor.rgb *= $BRIGHTNESS;
|
||||||
|
|
||||||
|
fragColor = pixColor;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Apply shader
|
||||||
|
if [ -z "$HYPRLAND_INSTANCE_SIGNATURE" ]; then
|
||||||
|
export HYPRLAND_INSTANCE_SIGNATURE=$(ls -t /tmp/hypr/ 2>/dev/null | head -n1)
|
||||||
|
fi
|
||||||
|
/usr/bin/hyprctl keyword decoration:screen_shader "$SHADER_FILE"
|
||||||
|
|
||||||
|
echo "Screen brightness set to ${LEVEL}0% $([ "$BLUELIGHT" == "y" ] || [ "$BLUELIGHT" == "Y" ] && echo "with blue light filter")"
|
||||||
32
borg-backup.sh
Executable file
32
borg-backup.sh
Executable file
@@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
SOURCE_DIRS=("/home/liph/Documents" "/home/liph/Pictures" "/home/liph/Downloads")
|
||||||
|
REPO_DIR="/home/liph/borg-repo"
|
||||||
|
BORG_PASSPHRASE="1ChagearC"
|
||||||
|
|
||||||
|
export BORG_PASSPHRASE
|
||||||
|
|
||||||
|
for SOURCE_DIR in "${SOURCE_DIRS[@]}"; do
|
||||||
|
ARCHIVE_NAME="{hostname}-{user}-{now}"
|
||||||
|
|
||||||
|
echo "Starting backup of ${SOURCE_DIR}..."
|
||||||
|
borg create --stats --progress \
|
||||||
|
"${REPO_DIR}::${ARCHIVE_NAME}" \
|
||||||
|
"${SOURCE_DIR}"
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Backup of ${SOURCE_DIR} completed successfully!"
|
||||||
|
else
|
||||||
|
echo "Backup of ${SOURCE_DIR} failed!"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Pruning old backups..."
|
||||||
|
borg prune --stats --progress \
|
||||||
|
--keep-daily=7 \
|
||||||
|
--keep-weekly=4 \
|
||||||
|
--keep-monthly=6 \
|
||||||
|
"${REPO_DIR}"
|
||||||
|
|
||||||
|
echo "Backup and pruning completed!"
|
||||||
|
|
||||||
95
borg-mac.sh
Executable file
95
borg-mac.sh
Executable file
@@ -0,0 +1,95 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Setting this, so the repo does not need to be given on the commandline:
|
||||||
|
# export BORG_REPO=ssh://username@example.com:2022/~/backup/main
|
||||||
|
#export BORG_REPO=~/backup/
|
||||||
|
|
||||||
|
# See the section "Passphrase notes" for more infos.
|
||||||
|
#export BORG_PASSPHRASE='1ChagearC'
|
||||||
|
|
||||||
|
export BORG_REPO="ssh://100.121.203.110:2222/./repo/borg-repo"
|
||||||
|
export BORG_PASSPHRASE="1ChagearC" # Encryption key
|
||||||
|
BACKUP_SOURCES=(
|
||||||
|
"/home/liph/Downloads/"
|
||||||
|
"/home/liph/dotfiles/"
|
||||||
|
"/home/liph/scripts"
|
||||||
|
) # What to back up
|
||||||
|
BACKUP_NAME="laptop-$(date +%Y-%m-%d)" # Dynamic backup name
|
||||||
|
|
||||||
|
# some helpers and error handling:
|
||||||
|
info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
|
||||||
|
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM
|
||||||
|
|
||||||
|
info "Starting backup"
|
||||||
|
|
||||||
|
# Initialize Borg repo (if not exists)
|
||||||
|
borg init --encryption=repokey "$BORG_REPO" 2>/dev/null || true
|
||||||
|
|
||||||
|
# Backup the most important directories into an archive named after
|
||||||
|
# the machine this script is currently running on:
|
||||||
|
|
||||||
|
borg create \
|
||||||
|
--verbose \
|
||||||
|
--filter AME \
|
||||||
|
--list \
|
||||||
|
--stats \
|
||||||
|
--show-rc \
|
||||||
|
--progress \
|
||||||
|
--compression lz4 \
|
||||||
|
--exclude-caches \
|
||||||
|
--exclude 'home/*/.cache/*' \
|
||||||
|
--exclude 'var/tmp/*' \
|
||||||
|
"$BORG_REPO::$BACKUP_NAME" \
|
||||||
|
"${BACKUP_SOURCES[@]}" \
|
||||||
|
# ::'{hostname}-{user}-{now}' \
|
||||||
|
# /home/liph/Documents/ \
|
||||||
|
# /home/liph/Pictures/ \
|
||||||
|
# /home/liph/Downloads/
|
||||||
|
# /etc \
|
||||||
|
# /home \
|
||||||
|
# /root \
|
||||||
|
# /var
|
||||||
|
backup_exit=$?
|
||||||
|
|
||||||
|
info "Pruning repository"
|
||||||
|
|
||||||
|
# Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly
|
||||||
|
# archives of THIS machine. The '{hostname}-*' matching is very important to
|
||||||
|
# limit prune's operation to this machine's archives and not apply to
|
||||||
|
# other machines' archives also:
|
||||||
|
|
||||||
|
borg prune \
|
||||||
|
--list \
|
||||||
|
--glob-archives '{hostname}-*' \
|
||||||
|
--show-rc \
|
||||||
|
--keep-daily 7 \
|
||||||
|
--keep-weekly 4 \
|
||||||
|
--keep-monthly 6
|
||||||
|
"$BORG_REPO"
|
||||||
|
|
||||||
|
prune_exit=$?
|
||||||
|
|
||||||
|
# actually free repo disk space by compacting segments
|
||||||
|
|
||||||
|
info "Compacting repository"
|
||||||
|
|
||||||
|
borg compact
|
||||||
|
|
||||||
|
compact_exit=$?
|
||||||
|
|
||||||
|
# use highest exit code as global exit code
|
||||||
|
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
|
||||||
|
global_exit=$(( compact_exit > global_exit ? compact_exit : global_exit ))
|
||||||
|
|
||||||
|
if [ ${global_exit} -eq 0 ]; then
|
||||||
|
info "Backup, Prune, and Compact finished successfully"
|
||||||
|
elif [ ${global_exit} -eq 1 ]; then
|
||||||
|
info "Backup, Prune, and/or Compact finished with warnings"
|
||||||
|
else
|
||||||
|
info "Backup, Prune, and/or Compact finished with errors"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit ${global_exit}
|
||||||
|
|
||||||
|
# Check backup integrity
|
||||||
|
borg check "$BORG_REPO"
|
||||||
95
borg-server.sh
Normal file
95
borg-server.sh
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Setting this, so the repo does not need to be given on the commandline:
|
||||||
|
# export BORG_REPO=ssh://username@example.com:2022/~/backup/main
|
||||||
|
#export BORG_REPO=~/backup/
|
||||||
|
|
||||||
|
# See the section "Passphrase notes" for more infos.
|
||||||
|
#export BORG_PASSPHRASE='1ChagearC'
|
||||||
|
|
||||||
|
export BORG_REPO="ssh://100.121.203.110:2222/./repo/borg-repo"
|
||||||
|
export BORG_PASSPHRASE="1ChagearC" # Encryption key
|
||||||
|
BACKUP_SOURCES=(
|
||||||
|
"/home/liph/Documents"
|
||||||
|
"/home/liph/Pictures"
|
||||||
|
"/home/liph/scripts"
|
||||||
|
) # What to back up
|
||||||
|
BACKUP_NAME="server-$(date +%Y-%m-%d)" # Dynamic backup name
|
||||||
|
|
||||||
|
# some helpers and error handling:
|
||||||
|
info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
|
||||||
|
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM
|
||||||
|
|
||||||
|
info "Starting backup"
|
||||||
|
|
||||||
|
# Initialize Borg repo (if not exists)
|
||||||
|
borg init --encryption=repokey "$BORG_REPO" 2>/dev/null || true
|
||||||
|
|
||||||
|
# Backup the most important directories into an archive named after
|
||||||
|
# the machine this script is currently running on:
|
||||||
|
|
||||||
|
borg create \
|
||||||
|
--verbose \
|
||||||
|
--filter AME \
|
||||||
|
--list \
|
||||||
|
--stats \
|
||||||
|
--show-rc \
|
||||||
|
--progress \
|
||||||
|
--compression lz4 \
|
||||||
|
--exclude-caches \
|
||||||
|
--exclude 'home/*/.cache/*' \
|
||||||
|
--exclude 'var/tmp/*' \
|
||||||
|
"$BORG_REPO::$BACKUP_NAME" \
|
||||||
|
"${BACKUP_SOURCES[@]}" \
|
||||||
|
# ::'{hostname}-{user}-{now}' \
|
||||||
|
# /home/liph/Documents/ \
|
||||||
|
# /home/liph/Pictures/ \
|
||||||
|
# /home/liph/Downloads/
|
||||||
|
# /etc \
|
||||||
|
# /home \
|
||||||
|
# /root \
|
||||||
|
# /var
|
||||||
|
backup_exit=$?
|
||||||
|
|
||||||
|
info "Pruning repository"
|
||||||
|
|
||||||
|
# Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly
|
||||||
|
# archives of THIS machine. The '{hostname}-*' matching is very important to
|
||||||
|
# limit prune's operation to this machine's archives and not apply to
|
||||||
|
# other machines' archives also:
|
||||||
|
|
||||||
|
borg prune \
|
||||||
|
--list \
|
||||||
|
--glob-archives '{hostname}-*' \
|
||||||
|
--show-rc \
|
||||||
|
--keep-daily 7 \
|
||||||
|
--keep-weekly 4 \
|
||||||
|
--keep-monthly 6
|
||||||
|
"$BORG_REPO"
|
||||||
|
|
||||||
|
prune_exit=$?
|
||||||
|
|
||||||
|
# actually free repo disk space by compacting segments
|
||||||
|
|
||||||
|
info "Compacting repository"
|
||||||
|
|
||||||
|
borg compact
|
||||||
|
|
||||||
|
compact_exit=$?
|
||||||
|
|
||||||
|
# use highest exit code as global exit code
|
||||||
|
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
|
||||||
|
global_exit=$(( compact_exit > global_exit ? compact_exit : global_exit ))
|
||||||
|
|
||||||
|
if [ ${global_exit} -eq 0 ]; then
|
||||||
|
info "Backup, Prune, and Compact finished successfully"
|
||||||
|
elif [ ${global_exit} -eq 1 ]; then
|
||||||
|
info "Backup, Prune, and/or Compact finished with warnings"
|
||||||
|
else
|
||||||
|
info "Backup, Prune, and/or Compact finished with errors"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit ${global_exit}
|
||||||
|
|
||||||
|
# Check backup integrity
|
||||||
|
borg check "$BORG_REPO"
|
||||||
95
borg.sh
Executable file
95
borg.sh
Executable file
@@ -0,0 +1,95 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Setting this, so the repo does not need to be given on the commandline:
|
||||||
|
# export BORG_REPO=ssh://username@example.com:2022/~/backup/main
|
||||||
|
#export BORG_REPO=~/backup/
|
||||||
|
|
||||||
|
# See the section "Passphrase notes" for more infos.
|
||||||
|
#export BORG_PASSPHRASE='1ChagearC'
|
||||||
|
|
||||||
|
export BORG_REPO="ssh://100.121.203.110:2222/./repo/borg-repo"
|
||||||
|
export BORG_PASSPHRASE="1ChagearC" # Encryption key
|
||||||
|
BACKUP_SOURCES=(
|
||||||
|
"/home/liph/Documents"
|
||||||
|
"/home/liph/Pictures"
|
||||||
|
"/home/liph/scripts"
|
||||||
|
) # What to back up
|
||||||
|
BACKUP_NAME="laptop-$(date +%Y-%m-%d)" # Dynamic backup name
|
||||||
|
|
||||||
|
# some helpers and error handling:
|
||||||
|
info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
|
||||||
|
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM
|
||||||
|
|
||||||
|
info "Starting backup"
|
||||||
|
|
||||||
|
# Initialize Borg repo (if not exists)
|
||||||
|
borg init --encryption=repokey "$BORG_REPO" 2>/dev/null || true
|
||||||
|
|
||||||
|
# Backup the most important directories into an archive named after
|
||||||
|
# the machine this script is currently running on:
|
||||||
|
|
||||||
|
borg create \
|
||||||
|
--verbose \
|
||||||
|
--filter AME \
|
||||||
|
--list \
|
||||||
|
--stats \
|
||||||
|
--show-rc \
|
||||||
|
--progress \
|
||||||
|
--compression lz4 \
|
||||||
|
--exclude-caches \
|
||||||
|
--exclude 'home/*/.cache/*' \
|
||||||
|
--exclude 'var/tmp/*' \
|
||||||
|
"$BORG_REPO::$BACKUP_NAME" \
|
||||||
|
"${BACKUP_SOURCES[@]}" \
|
||||||
|
# ::'{hostname}-{user}-{now}' \
|
||||||
|
# /home/liph/Documents/ \
|
||||||
|
# /home/liph/Pictures/ \
|
||||||
|
# /home/liph/Downloads/
|
||||||
|
# /etc \
|
||||||
|
# /home \
|
||||||
|
# /root \
|
||||||
|
# /var
|
||||||
|
backup_exit=$?
|
||||||
|
|
||||||
|
info "Pruning repository"
|
||||||
|
|
||||||
|
# Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly
|
||||||
|
# archives of THIS machine. The '{hostname}-*' matching is very important to
|
||||||
|
# limit prune's operation to this machine's archives and not apply to
|
||||||
|
# other machines' archives also:
|
||||||
|
|
||||||
|
borg prune \
|
||||||
|
--list \
|
||||||
|
--glob-archives '{hostname}-*' \
|
||||||
|
--show-rc \
|
||||||
|
--keep-daily 7 \
|
||||||
|
--keep-weekly 4 \
|
||||||
|
--keep-monthly 6
|
||||||
|
"$BORG_REPO"
|
||||||
|
|
||||||
|
prune_exit=$?
|
||||||
|
|
||||||
|
# actually free repo disk space by compacting segments
|
||||||
|
|
||||||
|
info "Compacting repository"
|
||||||
|
|
||||||
|
borg compact
|
||||||
|
|
||||||
|
compact_exit=$?
|
||||||
|
|
||||||
|
# use highest exit code as global exit code
|
||||||
|
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
|
||||||
|
global_exit=$(( compact_exit > global_exit ? compact_exit : global_exit ))
|
||||||
|
|
||||||
|
if [ ${global_exit} -eq 0 ]; then
|
||||||
|
info "Backup, Prune, and Compact finished successfully"
|
||||||
|
elif [ ${global_exit} -eq 1 ]; then
|
||||||
|
info "Backup, Prune, and/or Compact finished with warnings"
|
||||||
|
else
|
||||||
|
info "Backup, Prune, and/or Compact finished with errors"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit ${global_exit}
|
||||||
|
|
||||||
|
# Check backup integrity
|
||||||
|
borg check "$BORG_REPO"
|
||||||
74
br_blue.sh
Executable file
74
br_blue.sh
Executable file
@@ -0,0 +1,74 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Path to the brightness shader file
|
||||||
|
SHADER_DIR="$HOME/.config/hypr/shaders"
|
||||||
|
SHADER_FILE="$SHADER_DIR/brightness.frag"
|
||||||
|
|
||||||
|
# Ensure shader directory exists
|
||||||
|
mkdir -p "$SHADER_DIR"
|
||||||
|
|
||||||
|
# Check if shader file exists, if not create with default values
|
||||||
|
if [ ! -f "$SHADER_FILE" ]; then
|
||||||
|
CURRENT_BRIGHTNESS=1.0
|
||||||
|
BLUELIGHT_ENABLED=false
|
||||||
|
else
|
||||||
|
# Get current brightness multiplier
|
||||||
|
CURRENT_BRIGHTNESS=$(grep -oP 'pixColor.rgb \*= \K[0-9.]+' "$SHADER_FILE" | tail -1)
|
||||||
|
|
||||||
|
# Check current state by looking at the blue channel multiplier
|
||||||
|
if grep -q "pixColor.b \*= 0.6" "$SHADER_FILE"; then
|
||||||
|
BLUELIGHT_ENABLED=true
|
||||||
|
else
|
||||||
|
BLUELIGHT_ENABLED=false
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Toggle the blue light filter state
|
||||||
|
if [ "$BLUELIGHT_ENABLED" = true ]; then
|
||||||
|
# Filter is ON, turn it OFF
|
||||||
|
NEW_STATE=false
|
||||||
|
echo "Blue light filter: OFF"
|
||||||
|
else
|
||||||
|
# Filter is OFF, turn it ON
|
||||||
|
NEW_STATE=true
|
||||||
|
echo "Blue light filter: ON"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Recreate the shader file
|
||||||
|
cat > "$SHADER_FILE" << EOF
|
||||||
|
#version 300 es
|
||||||
|
|
||||||
|
precision mediump float;
|
||||||
|
|
||||||
|
in vec2 v_texcoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
uniform sampler2D tex;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec4 pixColor = texture(tex, v_texcoord);
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if [ "$NEW_STATE" = true ]; then
|
||||||
|
cat >> "$SHADER_FILE" << EOF
|
||||||
|
// Reduce blue light
|
||||||
|
pixColor.r *= 1.0;
|
||||||
|
pixColor.g *= 0.85;
|
||||||
|
pixColor.b *= 0.6;
|
||||||
|
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat >> "$SHADER_FILE" << EOF
|
||||||
|
// Adjust brightness
|
||||||
|
pixColor.rgb *= $CURRENT_BRIGHTNESS;
|
||||||
|
|
||||||
|
fragColor = pixColor;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Apply shader
|
||||||
|
if [ -z "$HYPRLAND_INSTANCE_SIGNATURE" ]; then
|
||||||
|
export HYPRLAND_INSTANCE_SIGNATURE=$(ls -t /tmp/hypr/ 2>/dev/null | head -n1)
|
||||||
|
fi
|
||||||
|
/usr/bin/hyprctl keyword decoration:screen_shader "$SHADER_FILE"
|
||||||
74
br_down.sh
Executable file
74
br_down.sh
Executable file
@@ -0,0 +1,74 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Path to the brightness shader file
|
||||||
|
SHADER_DIR="$HOME/.config/hypr/shaders"
|
||||||
|
SHADER_FILE="$SHADER_DIR/brightness.frag"
|
||||||
|
|
||||||
|
# Ensure shader directory exists
|
||||||
|
mkdir -p "$SHADER_DIR"
|
||||||
|
|
||||||
|
# Check if shader file exists, if not create with default brightness
|
||||||
|
if [ ! -f "$SHADER_FILE" ]; then
|
||||||
|
CURRENT=1.0
|
||||||
|
else
|
||||||
|
# Get current brightness multiplier
|
||||||
|
CURRENT=$(grep -oP 'pixColor.rgb \*= \K[0-9.]+' "$SHADER_FILE" | tail -1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Calculate new brightness (decrease by 10%)
|
||||||
|
NEW=$(echo "$CURRENT * 0.90" | bc -l)
|
||||||
|
|
||||||
|
# Cap at 0.1 to prevent complete darkness
|
||||||
|
if (( $(echo "$NEW < 0.1" | bc -l) )); then
|
||||||
|
NEW=0.1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Format to 2 decimal places
|
||||||
|
NEW=$(printf "%.2f" "$NEW")
|
||||||
|
|
||||||
|
# Check if blue light filter is currently enabled
|
||||||
|
BLUELIGHT_ENABLED=false
|
||||||
|
if [ -f "$SHADER_FILE" ] && grep -q "pixColor.b \*= 0.6" "$SHADER_FILE"; then
|
||||||
|
BLUELIGHT_ENABLED=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Recreate the shader file
|
||||||
|
cat > "$SHADER_FILE" << EOF
|
||||||
|
#version 300 es
|
||||||
|
|
||||||
|
precision mediump float;
|
||||||
|
|
||||||
|
in vec2 v_texcoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
uniform sampler2D tex;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec4 pixColor = texture(tex, v_texcoord);
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if [ "$BLUELIGHT_ENABLED" = true ]; then
|
||||||
|
cat >> "$SHADER_FILE" << EOF
|
||||||
|
// Reduce blue light
|
||||||
|
pixColor.r *= 1.0;
|
||||||
|
pixColor.g *= 0.85;
|
||||||
|
pixColor.b *= 0.6;
|
||||||
|
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat >> "$SHADER_FILE" << EOF
|
||||||
|
// Adjust brightness
|
||||||
|
pixColor.rgb *= $NEW;
|
||||||
|
|
||||||
|
fragColor = pixColor;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Apply shader
|
||||||
|
if [ -z "$HYPRLAND_INSTANCE_SIGNATURE" ]; then
|
||||||
|
export HYPRLAND_INSTANCE_SIGNATURE=$(ls -t /tmp/hypr/ 2>/dev/null | head -n1)
|
||||||
|
fi
|
||||||
|
/usr/bin/hyprctl keyword decoration:screen_shader "$SHADER_FILE"
|
||||||
|
|
||||||
|
echo "Brightness decreased from $CURRENT to $NEW"
|
||||||
36
br_reset.sh
Executable file
36
br_reset.sh
Executable file
@@ -0,0 +1,36 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Path to the brightness shader file
|
||||||
|
SHADER_DIR="$HOME/.config/hypr/shaders"
|
||||||
|
SHADER_FILE="$SHADER_DIR/brightness.frag"
|
||||||
|
|
||||||
|
# Ensure shader directory exists
|
||||||
|
mkdir -p "$SHADER_DIR"
|
||||||
|
|
||||||
|
# Create shader file with 100% brightness and no blue light filter
|
||||||
|
cat > "$SHADER_FILE" << EOF
|
||||||
|
#version 300 es
|
||||||
|
|
||||||
|
precision mediump float;
|
||||||
|
|
||||||
|
in vec2 v_texcoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
uniform sampler2D tex;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec4 pixColor = texture(tex, v_texcoord);
|
||||||
|
|
||||||
|
// Adjust brightness
|
||||||
|
pixColor.rgb *= 1.00;
|
||||||
|
|
||||||
|
fragColor = pixColor;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Apply shader
|
||||||
|
if [ -z "$HYPRLAND_INSTANCE_SIGNATURE" ]; then
|
||||||
|
export HYPRLAND_INSTANCE_SIGNATURE=$(ls -t /tmp/hypr/ 2>/dev/null | head -n1)
|
||||||
|
fi
|
||||||
|
/usr/bin/hyprctl keyword decoration:screen_shader "$SHADER_FILE"
|
||||||
|
|
||||||
|
echo "Screen reset: Brightness 100%, Blue light filter OFF"
|
||||||
74
br_up.sh
Executable file
74
br_up.sh
Executable file
@@ -0,0 +1,74 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Path to the brightness shader file
|
||||||
|
SHADER_DIR="$HOME/.config/hypr/shaders"
|
||||||
|
SHADER_FILE="$SHADER_DIR/brightness.frag"
|
||||||
|
|
||||||
|
# Ensure shader directory exists
|
||||||
|
mkdir -p "$SHADER_DIR"
|
||||||
|
|
||||||
|
# Check if shader file exists, if not create with default brightness
|
||||||
|
if [ ! -f "$SHADER_FILE" ]; then
|
||||||
|
CURRENT=1.0
|
||||||
|
else
|
||||||
|
# Get current brightness multiplier
|
||||||
|
CURRENT=$(grep -oP 'pixColor.rgb \*= \K[0-9.]+' "$SHADER_FILE" | tail -1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Calculate new brightness (increase by 10%)
|
||||||
|
NEW=$(echo "$CURRENT * 1.10" | bc -l)
|
||||||
|
|
||||||
|
# Cap at 2.0 to prevent excessive brightness
|
||||||
|
if (( $(echo "$NEW > 2.0" | bc -l) )); then
|
||||||
|
NEW=2.0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Format to 2 decimal places
|
||||||
|
NEW=$(printf "%.2f" "$NEW")
|
||||||
|
|
||||||
|
# Check if blue light filter is currently enabled
|
||||||
|
BLUELIGHT_ENABLED=false
|
||||||
|
if [ -f "$SHADER_FILE" ] && grep -q "pixColor.b \*= 0.6" "$SHADER_FILE"; then
|
||||||
|
BLUELIGHT_ENABLED=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Recreate the shader file
|
||||||
|
cat > "$SHADER_FILE" << EOF
|
||||||
|
#version 300 es
|
||||||
|
|
||||||
|
precision mediump float;
|
||||||
|
|
||||||
|
in vec2 v_texcoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
uniform sampler2D tex;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec4 pixColor = texture(tex, v_texcoord);
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if [ "$BLUELIGHT_ENABLED" = true ]; then
|
||||||
|
cat >> "$SHADER_FILE" << EOF
|
||||||
|
// Reduce blue light
|
||||||
|
pixColor.r *= 1.0;
|
||||||
|
pixColor.g *= 0.85;
|
||||||
|
pixColor.b *= 0.6;
|
||||||
|
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat >> "$SHADER_FILE" << EOF
|
||||||
|
// Adjust brightness
|
||||||
|
pixColor.rgb *= $NEW;
|
||||||
|
|
||||||
|
fragColor = pixColor;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Apply shader
|
||||||
|
if [ -z "$HYPRLAND_INSTANCE_SIGNATURE" ]; then
|
||||||
|
export HYPRLAND_INSTANCE_SIGNATURE=$(ls -t /tmp/hypr/ 2>/dev/null | head -n1)
|
||||||
|
fi
|
||||||
|
/usr/bin/hyprctl keyword decoration:screen_shader "$SHADER_FILE"
|
||||||
|
|
||||||
|
echo "Brightness increased from $CURRENT to $NEW"
|
||||||
310
fzf-git.sh
Executable file
310
fzf-git.sh
Executable file
@@ -0,0 +1,310 @@
|
|||||||
|
# Fzf with Git in the shell
|
||||||
|
# You can find this whole script from Junegunn Github repo below
|
||||||
|
# https://github.com/junegunn/fzf-git.sh
|
||||||
|
|
||||||
|
# Script is used in .zshrc
|
||||||
|
|
||||||
|
# shellcheck disable=SC2039
|
||||||
|
[[ $0 = - ]] && return
|
||||||
|
|
||||||
|
__fzf_git_color() {
|
||||||
|
if [[ -n $NO_COLOR ]]; then
|
||||||
|
echo never
|
||||||
|
elif [[ $# -gt 0 ]] && [[ -n $FZF_GIT_PREVIEW_COLOR ]]; then
|
||||||
|
echo "$FZF_GIT_PREVIEW_COLOR"
|
||||||
|
else
|
||||||
|
echo "${FZF_GIT_COLOR:-always}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
__fzf_git_cat() {
|
||||||
|
if [[ -n $FZF_GIT_CAT ]]; then
|
||||||
|
echo "$FZF_GIT_CAT"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Sometimes bat is installed as batcat
|
||||||
|
_fzf_git_bat_options="--style='${BAT_STYLE:-full}' --color=$(__fzf_git_color .) --pager=never"
|
||||||
|
if command -v batcat > /dev/null; then
|
||||||
|
echo "batcat $_fzf_git_bat_options"
|
||||||
|
elif command -v bat > /dev/null; then
|
||||||
|
echo "bat $_fzf_git_bat_options"
|
||||||
|
else
|
||||||
|
echo cat
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ $# -eq 1 ]]; then
|
||||||
|
branches() {
|
||||||
|
git branch "$@" --sort=-committerdate --sort=-HEAD --format=$'%(HEAD) %(color:yellow)%(refname:short) %(color:green)(%(committerdate:relative))\t%(color:blue)%(subject)%(color:reset)' --color=$(__fzf_git_color) | column -ts$'\t'
|
||||||
|
}
|
||||||
|
refs() {
|
||||||
|
git for-each-ref --sort=-creatordate --sort=-HEAD --color=$(__fzf_git_color) --format=$'%(refname) %(color:green)(%(creatordate:relative))\t%(color:blue)%(subject)%(color:reset)' |
|
||||||
|
eval "$1" |
|
||||||
|
sed 's#^refs/remotes/#\x1b[95mremote-branch\t\x1b[33m#; s#^refs/heads/#\x1b[92mbranch\t\x1b[33m#; s#^refs/tags/#\x1b[96mtag\t\x1b[33m#; s#refs/stash#\x1b[91mstash\t\x1b[33mrefs/stash#' |
|
||||||
|
column -ts$'\t'
|
||||||
|
}
|
||||||
|
hashes() {
|
||||||
|
git log --date=short --format="%C(green)%C(bold)%cd %C(auto)%h%d %s (%an)" --graph --color=$(__fzf_git_color) "$@"
|
||||||
|
}
|
||||||
|
case "$1" in
|
||||||
|
branches)
|
||||||
|
echo $'CTRL-O (open in browser) ╱ ALT-A (show all branches)\n'
|
||||||
|
branches
|
||||||
|
;;
|
||||||
|
all-branches)
|
||||||
|
echo $'CTRL-O (open in browser)\n'
|
||||||
|
branches -a
|
||||||
|
;;
|
||||||
|
hashes)
|
||||||
|
echo $'CTRL-O (open in browser) ╱ CTRL-D (diff)\nCTRL-S (toggle sort) ╱ ALT-A (show all hashes)\n'
|
||||||
|
hashes
|
||||||
|
;;
|
||||||
|
all-hashes)
|
||||||
|
echo $'CTRL-O (open in browser) ╱ CTRL-D (diff)\nCTRL-S (toggle sort)\n'
|
||||||
|
hashes --all
|
||||||
|
;;
|
||||||
|
refs)
|
||||||
|
echo $'CTRL-O (open in browser) ╱ ALT-E (examine in editor) ╱ ALT-A (show all refs)\n'
|
||||||
|
refs 'grep -v ^refs/remotes'
|
||||||
|
;;
|
||||||
|
all-refs)
|
||||||
|
echo $'CTRL-O (open in browser) ╱ ALT-E (examine in editor)\n'
|
||||||
|
refs 'cat'
|
||||||
|
;;
|
||||||
|
nobeep) ;;
|
||||||
|
*) exit 1 ;;
|
||||||
|
esac
|
||||||
|
elif [[ $# -gt 1 ]]; then
|
||||||
|
set -e
|
||||||
|
|
||||||
|
branch=$(git rev-parse --abbrev-ref HEAD 2> /dev/null)
|
||||||
|
if [[ $branch = HEAD ]]; then
|
||||||
|
branch=$(git describe --exact-match --tags 2> /dev/null || git rev-parse --short HEAD)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Only supports GitHub for now
|
||||||
|
case "$1" in
|
||||||
|
commit)
|
||||||
|
hash=$(grep -o "[a-f0-9]\{7,\}" <<< "$2")
|
||||||
|
path=/commit/$hash
|
||||||
|
;;
|
||||||
|
branch|remote-branch)
|
||||||
|
branch=$(sed 's/^[* ]*//' <<< "$2" | cut -d' ' -f1)
|
||||||
|
remote=$(git config branch."${branch}".remote || echo 'origin')
|
||||||
|
branch=${branch#$remote/}
|
||||||
|
path=/tree/$branch
|
||||||
|
;;
|
||||||
|
remote)
|
||||||
|
remote=$2
|
||||||
|
path=/tree/$branch
|
||||||
|
;;
|
||||||
|
file) path=/blob/$branch/$(git rev-parse --show-prefix)$2 ;;
|
||||||
|
tag) path=/releases/tag/$2 ;;
|
||||||
|
*) exit 1 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
remote=${remote:-$(git config branch."${branch}".remote || echo 'origin')}
|
||||||
|
remote_url=$(git remote get-url "$remote" 2> /dev/null || echo "$remote")
|
||||||
|
|
||||||
|
if [[ $remote_url =~ ^git@ ]]; then
|
||||||
|
url=${remote_url%.git}
|
||||||
|
url=${url#git@}
|
||||||
|
url=https://${url/://}
|
||||||
|
elif [[ $remote_url =~ ^http ]]; then
|
||||||
|
url=${remote_url%.git}
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$(uname -s)" in
|
||||||
|
Darwin) open "$url$path" ;;
|
||||||
|
*) xdg-open "$url$path" ;;
|
||||||
|
esac
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $- =~ i ]]; then
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Redefine this function to change the options
|
||||||
|
_fzf_git_fzf() {
|
||||||
|
fzf-tmux -p80%,60% -- \
|
||||||
|
--layout=reverse --multi --height=50% --min-height=20 --border \
|
||||||
|
--border-label-pos=2 \
|
||||||
|
--color='header:italic:underline,label:blue' \
|
||||||
|
--preview-window='right,50%,border-left' \
|
||||||
|
--bind='ctrl-/:change-preview-window(down,50%,border-top|hidden|)' "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
_fzf_git_check() {
|
||||||
|
git rev-parse HEAD > /dev/null 2>&1 && return
|
||||||
|
|
||||||
|
[[ -n $TMUX ]] && tmux display-message "Not in a git repository"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
__fzf_git=${BASH_SOURCE[0]:-${(%):-%x}}
|
||||||
|
__fzf_git=$(readlink -f "$__fzf_git" 2> /dev/null || /usr/bin/ruby --disable-gems -e 'puts File.expand_path(ARGV.first)' "$__fzf_git" 2> /dev/null)
|
||||||
|
|
||||||
|
_fzf_git_files() {
|
||||||
|
_fzf_git_check || return
|
||||||
|
local root query
|
||||||
|
root=$(git rev-parse --show-toplevel)
|
||||||
|
[[ $root != "$PWD" ]] && query='!../ '
|
||||||
|
|
||||||
|
(git -c color.status=$(__fzf_git_color) status --short --no-branch
|
||||||
|
git ls-files "$root" | grep -vxFf <(git status -s | grep '^[^?]' | cut -c4-; echo :) | sed 's/^/ /') |
|
||||||
|
_fzf_git_fzf -m --ansi --nth 2..,.. \
|
||||||
|
--border-label '📁 Files' \
|
||||||
|
--header $'CTRL-O (open in browser) ╱ ALT-E (open in editor)\n\n' \
|
||||||
|
--bind "ctrl-o:execute-silent:bash $__fzf_git file {-1}" \
|
||||||
|
--bind "alt-e:execute:${EDITOR:-vim} {-1} > /dev/tty" \
|
||||||
|
--query "$query" \
|
||||||
|
--preview "git diff --no-ext-diff --color=$(__fzf_git_color .) -- {-1} | sed 1,4d; $(__fzf_git_cat) {-1}" "$@" |
|
||||||
|
cut -c4- | sed 's/.* -> //'
|
||||||
|
}
|
||||||
|
|
||||||
|
_fzf_git_branches() {
|
||||||
|
_fzf_git_check || return
|
||||||
|
bash "$__fzf_git" branches |
|
||||||
|
_fzf_git_fzf --ansi \
|
||||||
|
--border-label '🌲 Branches' \
|
||||||
|
--header-lines 2 \
|
||||||
|
--tiebreak begin \
|
||||||
|
--preview-window down,border-top,40% \
|
||||||
|
--color hl:underline,hl+:underline \
|
||||||
|
--no-hscroll \
|
||||||
|
--bind 'ctrl-/:change-preview-window(down,70%|hidden|)' \
|
||||||
|
--bind "ctrl-o:execute-silent:bash $__fzf_git branch {}" \
|
||||||
|
--bind "alt-a:change-border-label(🌳 All branches)+reload:bash \"$__fzf_git\" all-branches" \
|
||||||
|
--preview "git log --oneline --graph --date=short --color=$(__fzf_git_color .) --pretty='format:%C(auto)%cd %h%d %s' \$(sed s/^..// <<< {} | cut -d' ' -f1) --" "$@" |
|
||||||
|
sed 's/^..//' | cut -d' ' -f1
|
||||||
|
}
|
||||||
|
|
||||||
|
_fzf_git_tags() {
|
||||||
|
_fzf_git_check || return
|
||||||
|
git tag --sort -version:refname |
|
||||||
|
_fzf_git_fzf --preview-window right,70% \
|
||||||
|
--border-label '📛 Tags' \
|
||||||
|
--header $'CTRL-O (open in browser)\n\n' \
|
||||||
|
--bind "ctrl-o:execute-silent:bash $__fzf_git tag {}" \
|
||||||
|
--preview "git show --color=$(__fzf_git_color .) {}" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
_fzf_git_hashes() {
|
||||||
|
_fzf_git_check || return
|
||||||
|
bash "$__fzf_git" hashes |
|
||||||
|
_fzf_git_fzf --ansi --no-sort --bind 'ctrl-s:toggle-sort' \
|
||||||
|
--border-label '🍡 Hashes' \
|
||||||
|
--header-lines 3 \
|
||||||
|
--bind "ctrl-o:execute-silent:bash $__fzf_git commit {}" \
|
||||||
|
--bind "ctrl-d:execute:grep -o '[a-f0-9]\{7,\}' <<< {} | head -n 1 | xargs git diff --color=$(__fzf_git_color) > /dev/tty" \
|
||||||
|
--bind "alt-a:change-border-label(🍇 All hashes)+reload:bash \"$__fzf_git\" all-hashes" \
|
||||||
|
--color hl:underline,hl+:underline \
|
||||||
|
--preview "grep -o '[a-f0-9]\{7,\}' <<< {} | head -n 1 | xargs git show --color=$(__fzf_git_color .)" "$@" |
|
||||||
|
awk 'match($0, /[a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]*/) { print substr($0, RSTART, RLENGTH) }'
|
||||||
|
}
|
||||||
|
|
||||||
|
_fzf_git_remotes() {
|
||||||
|
_fzf_git_check || return
|
||||||
|
git remote -v | awk '{print $1 "\t" $2}' | uniq |
|
||||||
|
_fzf_git_fzf --tac \
|
||||||
|
--border-label '📡 Remotes' \
|
||||||
|
--header $'CTRL-O (open in browser)\n\n' \
|
||||||
|
--bind "ctrl-o:execute-silent:bash $__fzf_git remote {1}" \
|
||||||
|
--preview-window right,70% \
|
||||||
|
--preview "git log --oneline --graph --date=short --color=$(__fzf_git_color .) --pretty='format:%C(auto)%cd %h%d %s' '{1}/$(git rev-parse --abbrev-ref HEAD)' --" "$@" |
|
||||||
|
cut -d$'\t' -f1
|
||||||
|
}
|
||||||
|
|
||||||
|
_fzf_git_stashes() {
|
||||||
|
_fzf_git_check || return
|
||||||
|
git stash list | _fzf_git_fzf \
|
||||||
|
--border-label '🥡 Stashes' \
|
||||||
|
--header $'CTRL-X (drop stash)\n\n' \
|
||||||
|
--bind 'ctrl-x:reload(git stash drop -q {1}; git stash list)' \
|
||||||
|
-d: --preview "git show --color=$(__fzf_git_color .) {1}" "$@" |
|
||||||
|
cut -d: -f1
|
||||||
|
}
|
||||||
|
|
||||||
|
_fzf_git_lreflogs() {
|
||||||
|
_fzf_git_check || return
|
||||||
|
git reflog --color=$(__fzf_git_color) --format="%C(blue)%gD %C(yellow)%h%C(auto)%d %gs" | _fzf_git_fzf --ansi \
|
||||||
|
--border-label '📒 Reflogs' \
|
||||||
|
--preview "git show --color=$(__fzf_git_color .) {1}" "$@" |
|
||||||
|
awk '{print $1}'
|
||||||
|
}
|
||||||
|
|
||||||
|
_fzf_git_each_ref() {
|
||||||
|
_fzf_git_check || return
|
||||||
|
bash "$__fzf_git" refs | _fzf_git_fzf --ansi \
|
||||||
|
--nth 2,2.. \
|
||||||
|
--tiebreak begin \
|
||||||
|
--border-label '☘️ Each ref' \
|
||||||
|
--header-lines 2 \
|
||||||
|
--preview-window down,border-top,40% \
|
||||||
|
--color hl:underline,hl+:underline \
|
||||||
|
--no-hscroll \
|
||||||
|
--bind 'ctrl-/:change-preview-window(down,70%|hidden|)' \
|
||||||
|
--bind "ctrl-o:execute-silent:bash $__fzf_git {1} {2}" \
|
||||||
|
--bind "alt-e:execute:${EDITOR:-vim} <(git show {2}) > /dev/tty" \
|
||||||
|
--bind "alt-a:change-border-label(🍀 Every ref)+reload:bash \"$__fzf_git\" all-refs" \
|
||||||
|
--preview "git log --oneline --graph --date=short --color=$(__fzf_git_color .) --pretty='format:%C(auto)%cd %h%d %s' {2} --" "$@" |
|
||||||
|
awk '{print $2}'
|
||||||
|
}
|
||||||
|
|
||||||
|
_fzf_git_worktrees() {
|
||||||
|
_fzf_git_check || return
|
||||||
|
git worktree list | _fzf_git_fzf \
|
||||||
|
--border-label '🌴 Worktrees' \
|
||||||
|
--header $'CTRL-X (remove worktree)\n\n' \
|
||||||
|
--bind 'ctrl-x:reload(git worktree remove {1} > /dev/null; git worktree list)' \
|
||||||
|
--preview "
|
||||||
|
git -c color.status=$(__fzf_git_color .) -C {1} status --short --branch
|
||||||
|
echo
|
||||||
|
git log --oneline --graph --date=short --color=$(__fzf_git_color .) --pretty='format:%C(auto)%cd %h%d %s' {2} --
|
||||||
|
" "$@" |
|
||||||
|
awk '{print $1}'
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ -n "${BASH_VERSION:-}" ]]; then
|
||||||
|
__fzf_git_init() {
|
||||||
|
bind -m emacs-standard '"\er": redraw-current-line'
|
||||||
|
bind -m emacs-standard '"\C-z": vi-editing-mode'
|
||||||
|
bind -m vi-command '"\C-z": emacs-editing-mode'
|
||||||
|
bind -m vi-insert '"\C-z": emacs-editing-mode'
|
||||||
|
|
||||||
|
local o c
|
||||||
|
for o in "$@"; do
|
||||||
|
c=${o:0:1}
|
||||||
|
bind -m emacs-standard '"\C-g\C-'$c'": " \C-u \C-a\C-k`_fzf_git_'$o'`\e\C-e\C-y\C-a\C-y\ey\C-h\C-e\er \C-h"'
|
||||||
|
bind -m vi-command '"\C-g\C-'$c'": "\C-z\C-g\C-'$c'\C-z"'
|
||||||
|
bind -m vi-insert '"\C-g\C-'$c'": "\C-z\C-g\C-'$c'\C-z"'
|
||||||
|
bind -m emacs-standard '"\C-g'$c'": " \C-u \C-a\C-k`_fzf_git_'$o'`\e\C-e\C-y\C-a\C-y\ey\C-h\C-e\er \C-h"'
|
||||||
|
bind -m vi-command '"\C-g'$c'": "\C-z\C-g'$c'\C-z"'
|
||||||
|
bind -m vi-insert '"\C-g'$c'": "\C-z\C-g'$c'\C-z"'
|
||||||
|
done
|
||||||
|
}
|
||||||
|
elif [[ -n "${ZSH_VERSION:-}" ]]; then
|
||||||
|
__fzf_git_join() {
|
||||||
|
local item
|
||||||
|
while read item; do
|
||||||
|
echo -n "${(q)item} "
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
__fzf_git_init() {
|
||||||
|
local m o
|
||||||
|
for o in "$@"; do
|
||||||
|
eval "fzf-git-$o-widget() { local result=\$(_fzf_git_$o | __fzf_git_join); zle reset-prompt; LBUFFER+=\$result }"
|
||||||
|
eval "zle -N fzf-git-$o-widget"
|
||||||
|
for m in emacs vicmd viins; do
|
||||||
|
eval "bindkey -M $m '^g^${o[1]}' fzf-git-$o-widget"
|
||||||
|
eval "bindkey -M $m '^g${o[1]}' fzf-git-$o-widget"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
__fzf_git_init files branches tags remotes hashes stashes lreflogs each_ref worktrees
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
fi
|
||||||
29
fzf_listoldfiles.sh
Executable file
29
fzf_listoldfiles.sh
Executable file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Script to list recent files and open nvim using fzf
|
||||||
|
# set to an alias nlof in .zshrc
|
||||||
|
|
||||||
|
list_oldfiles() {
|
||||||
|
# Get the oldfiles list from Neovim
|
||||||
|
local oldfiles=($(nvim -u NONE --headless +'lua io.write(table.concat(vim.v.oldfiles, "\n") .. "\n")' +qa))
|
||||||
|
# Filter invalid paths or files not found
|
||||||
|
local valid_files=()
|
||||||
|
for file in "${oldfiles[@]}"; do
|
||||||
|
if [[ -f "$file" ]]; then
|
||||||
|
valid_files+=("$file")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
# Use fzf to select from valid files
|
||||||
|
local files=($(printf "%s\n" "${valid_files[@]}" | \
|
||||||
|
grep -v '\[.*' | \
|
||||||
|
fzf --multi \
|
||||||
|
--preview 'bat -n --color=always --line-range=:500 {} 2>/dev/null || echo "Error previewing file"' \
|
||||||
|
--height=70% \
|
||||||
|
--layout=default))
|
||||||
|
|
||||||
|
# Open selected files in Neovim
|
||||||
|
[[ ${#files[@]} -gt 0 ]] && nvim "${files[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Call the function
|
||||||
|
list_oldfiles "$@"
|
||||||
7
hydroxide.sh
Executable file
7
hydroxide.sh
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
hydroxide serve &
|
||||||
|
|
||||||
|
kanata --cfg ~/.config/kanata/config.kbd &
|
||||||
|
|
||||||
|
sudo mount -a &
|
||||||
|
|
||||||
|
syncthing &
|
||||||
12
keyboard-layer.sh
Executable file
12
keyboard-layer.sh
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# ~/.config/hypr/scripts/keyboard-layer.sh
|
||||||
|
|
||||||
|
# This checks which modifiers are active as a proxy for layers
|
||||||
|
# Adjust based on your actual layer keys
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
# You might need to adjust this based on your keyboard
|
||||||
|
# This is a simplified example
|
||||||
|
echo '{"text": "Layer ?", "class": "layer"}'
|
||||||
|
sleep 0.5
|
||||||
|
done
|
||||||
9
layer_notify.sh
Executable file
9
layer_notify.sh
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
0) notify-send -t 1500 "Layer 0" "Base/QWERTY" ;;
|
||||||
|
1) notify-send -t 1500 "Layer 1" "Navigation/Numbers" ;;
|
||||||
|
2) notify-send -t 1500 "Layer 2" "Symbols" ;;
|
||||||
|
3) notify-send -t 1500 "Layer 3" "Function Keys" ;;
|
||||||
|
*) notify-send -t 1500 "Unknown Layer" ;;
|
||||||
|
esac
|
||||||
89
protonport.sh
Executable file
89
protonport.sh
Executable file
@@ -0,0 +1,89 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Configuration variables - change this for your setup
|
||||||
|
gluetun_container_name="gluetun"
|
||||||
|
qbittorrent_container_name="qbittorrent"
|
||||||
|
gluetun_origin="http://100.120.152.94:8888"
|
||||||
|
qb_origin="http://100.120.152.94:8099"
|
||||||
|
####################################################################
|
||||||
|
|
||||||
|
# Arrays for URLs
|
||||||
|
declare -A gluetun_urls=(
|
||||||
|
["pub_ip"]="$gluetun_origin/v1/publicip/ip"
|
||||||
|
["portforwarded"]="$gluetun_origin/v1/openvpn/portforwarded"
|
||||||
|
)
|
||||||
|
|
||||||
|
declare -A qbittorrent_urls=(
|
||||||
|
#used for getting and setting listen_port
|
||||||
|
["prefs"]="$qb_origin/api/v2/app/preferences"
|
||||||
|
["setPrefs"]="$qb_origin/api/v2/app/setPreferences"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Function to check if a Docker container is running
|
||||||
|
is_container_running() {
|
||||||
|
local container_name="$1"
|
||||||
|
docker inspect -f '{{.State.Running}}' "$container_name" 2>/dev/null
|
||||||
|
# echo "Container $container_name status: $status"
|
||||||
|
}
|
||||||
|
|
||||||
|
get_vpn_external_ip() {
|
||||||
|
local url="$1"
|
||||||
|
curl -s "$url" | -r .'public_ip'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to send a GET request and extract the port from the response
|
||||||
|
get_port_from_url() {
|
||||||
|
local url="$1"
|
||||||
|
local port_key
|
||||||
|
|
||||||
|
# Try 'port' key first
|
||||||
|
port_key=$(curl -s "$url" | jq -r '.port')
|
||||||
|
|
||||||
|
if [ "$port_key" == "null" ]; then
|
||||||
|
# If 'port' key is null, try 'listen_port' key
|
||||||
|
port_key=$(curl -s "$url" | jq -r '.listen_port')
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$port_key"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to send a POST request with JSON data
|
||||||
|
send_post_request() {
|
||||||
|
local url="$1"
|
||||||
|
local port="$2"
|
||||||
|
curl -s -X POST -d json={\"listen_port\":$port} "$url"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Outputs container names
|
||||||
|
echo "Gluetun container name: $gluetun_container_name - Gluetun Origin URL: $gluetun_origin"
|
||||||
|
echo "qBittorrent container name: $qbittorrent_container_name - qBittorrent Origin URL: $qb_origin"
|
||||||
|
|
||||||
|
# Check if both containers are running
|
||||||
|
if [[ $(is_container_running "$gluetun_container_name") == $(is_container_running "$qbittorrent_container_name") ]]; then
|
||||||
|
echo "Both Gluetun and qBittorrent containers are running. Continuing."
|
||||||
|
|
||||||
|
external_ip=$(get_vpn_external_ip "${gluetun_urls["pub_ip"]}")
|
||||||
|
if [ -z "$external_ip" ]; then
|
||||||
|
echo "External IP is empty. Exiting script due to potential VPN or internet connection issue."
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "External IP is $external_ip therefore VPN is up"
|
||||||
|
fi
|
||||||
|
|
||||||
|
gluetun_port=$(get_port_from_url "${gluetun_urls["portforwarded"]}")
|
||||||
|
qbittorrent_port=$(get_port_from_url "${qbittorrent_urls["prefs"]}")
|
||||||
|
|
||||||
|
echo "Gluetun forwarded port is $gluetun_port"
|
||||||
|
echo "qBittorrent listen port is $qbittorrent_port"
|
||||||
|
if [ "$gluetun_port" -eq "$qbittorrent_port" ]; then
|
||||||
|
echo "qBittorrent listen port is already set to $qbittorrent_port. No need to change. Exiting script."
|
||||||
|
else
|
||||||
|
echo "Updating qBittorrent listen port to Gluetun forwarded port $gluetun_port."
|
||||||
|
send_post_request "${qbittorrent_urls["setPrefs"]}" "$gluetun_port"
|
||||||
|
qbittorrent_port=$(get_port_from_url "${qbittorrent_urls["prefs"]}")
|
||||||
|
echo "qBittorrent listen port updated to $qbittorrent_port. Exiting script."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Either Gluetun or qBittorrent container is not running. Exiting script."
|
||||||
|
fi
|
||||||
11
tidal-mcp.sh
Executable file
11
tidal-mcp.sh
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
cd ~/mcp/tidal-mcp/
|
||||||
|
|
||||||
|
uv venv --clear
|
||||||
|
source .venv/bin/activate
|
||||||
|
|
||||||
|
uv pip install --editable .
|
||||||
|
|
||||||
|
cd ~/mcp/tidal-mcp/tidal_api/
|
||||||
|
uv pip install flask tidalapi
|
||||||
|
|
||||||
|
nohup python app.py > tidal.log 2>&1 &
|
||||||
2
tidal.log
Normal file
2
tidal.log
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
nohup: ignoring input
|
||||||
|
/usr/bin/python: can't open file '/home/liph/dotfiles/scripts/scripts/app.py': [Errno 2] No such file or directory
|
||||||
28
tmux-sessionizer.sh
Executable file
28
tmux-sessionizer.sh
Executable file
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Save this file as ~/scripts/tmux-sessionizer
|
||||||
|
# Make it executable with: chmod +x ~/.local/bin/tmux-sessionizer
|
||||||
|
|
||||||
|
if [[ $# -eq 1 ]]; then
|
||||||
|
selected=$1
|
||||||
|
else
|
||||||
|
selected=$(fd -H . ~/dotfiles ~/Desktop/main-cs ~/Desktop/main-cs/Projects ~/ ~/Desktop/work ~/Desktop/work/youtube -t d -d 1 | fzf)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z $selected ]]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
selected_name=$(basename "$selected" | tr . _)
|
||||||
|
tmux_running=$(pgrep tmux)
|
||||||
|
|
||||||
|
if [[ -z $TMUX ]] && [[ -z $tmux_running ]]; then
|
||||||
|
tmux new-session -s $selected_name -c $selected
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! tmux has-session -t=$selected_name 2> /dev/null; then
|
||||||
|
tmux new-session -ds $selected_name -c $selected
|
||||||
|
fi
|
||||||
|
|
||||||
|
tmux switch-client -t $selected_name
|
||||||
33
zoxide_openfiles_nvim.sh
Executable file
33
zoxide_openfiles_nvim.sh
Executable file
@@ -0,0 +1,33 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Script to find every single file and opens in neovim
|
||||||
|
# alias set as nzo in .zshrc
|
||||||
|
search_with_zoxdie() {
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
# use fd with fzf to select & open a file when no arg are provided
|
||||||
|
file="$(fd --type f -I -H -E .git -E .git-crypt -E .cache -E .backup | fzf --height=70% --preview='bat -n --color=always --line-range :500 {}')"
|
||||||
|
if [ -n "$file" ]; then
|
||||||
|
nvim "$file"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Handle when an arg is provided
|
||||||
|
lines=$(zoxide query -l | xargs -I {} fd --type f -I -H -E .git -E .git-crypt -E .cache -E .backup -E .vscode "$1" {} | fzf --no-sort) # Initial filter attempt with fzf
|
||||||
|
line_count="$(echo "$lines" | wc -l | xargs)" # Trim any leading spaces
|
||||||
|
|
||||||
|
if [ -n "$lines" ] && [ "$line_count" -eq 1 ]; then
|
||||||
|
# looks for the exact ones and opens it
|
||||||
|
file="$lines"
|
||||||
|
nvim "$file"
|
||||||
|
elif [ -n "$lines" ]; then
|
||||||
|
# If multiple files are found, allow further selection using fzf and bat for preview
|
||||||
|
file=$(echo "$lines" | fzf --query="$1" --height=70% --preview='bat -n --color=always --line-range :500 {}')
|
||||||
|
if [ -n "$file" ]; then
|
||||||
|
nvim "$file"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "No matches found." >&2
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
search_with_zoxdie "$@"
|
||||||
Reference in New Issue
Block a user