From d0d1327e9fe5a6e433e65f79a44b612ba96ded54 Mon Sep 17 00:00:00 2001 From: Szymon P Date: Fri, 20 Feb 2026 01:01:27 +0100 Subject: [PATCH] scripts --- home.nix | 1 + scripts/check-do-not-disturb.sh | 28 ++ scripts/check-if-muted.sh | 9 + scripts/home_backup.sh | 5 + scripts/old/brightness.sh | 9 + scripts/old/change_colors.sh | 61 +++++ scripts/old/change_wallpaper.sh | 18 ++ scripts/old/random_wallpaper.sh | 20 ++ scripts/old/screenshots_overcomplified.sh | 123 +++++++++ scripts/old/start_coding.sh | 13 + scripts/restart_waybar.sh | 5 + scripts/screenshot.sh | 50 ++++ scripts/sekirofpsunlock | Bin 0 -> 73488 bytes scripts/sherlock | 1 + scripts/steamtinkerlaunch | 1 + scripts/system_setup.sh | 319 ++++++++++++++++++++++ scripts/wp-vol.sh | 8 + 17 files changed, 671 insertions(+) create mode 100755 scripts/check-do-not-disturb.sh create mode 100755 scripts/check-if-muted.sh create mode 100755 scripts/home_backup.sh create mode 100755 scripts/old/brightness.sh create mode 100755 scripts/old/change_colors.sh create mode 100755 scripts/old/change_wallpaper.sh create mode 100755 scripts/old/random_wallpaper.sh create mode 100755 scripts/old/screenshots_overcomplified.sh create mode 100755 scripts/old/start_coding.sh create mode 100755 scripts/restart_waybar.sh create mode 100755 scripts/screenshot.sh create mode 100755 scripts/sekirofpsunlock create mode 120000 scripts/sherlock create mode 120000 scripts/steamtinkerlaunch create mode 100755 scripts/system_setup.sh create mode 100755 scripts/wp-vol.sh diff --git a/home.nix b/home.nix index dc7cfeb..0b34faf 100644 --- a/home.nix +++ b/home.nix @@ -42,6 +42,7 @@ ".config/satty".source = ./dotfiles/satty; ".config/waybar".source = ./dotfiles/waybar; ".config/hypr".source = ./dotfiles/hypr; + ".local/bin".source = ./scripts; }; home.sessionVariables = { diff --git a/scripts/check-do-not-disturb.sh b/scripts/check-do-not-disturb.sh new file mode 100755 index 0000000..6b6b60c --- /dev/null +++ b/scripts/check-do-not-disturb.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +disturbed=$(makoctl mode | grep -i do-not-disturb) > /dev/null +mute_icon="" +unmute_icon="🕭" + +case $1 in + "show") + if [[ $disturbed == "" ]]; then + echo "$unmute_icon" + else + echo "$mute_icon" + fi + ;; + "change") + if [[ $disturbed == "" ]]; then + makoctl mode -a do-not-disturb > /dev/null + echo "$unmute_icon" + else + makoctl mode -r do-not-disturb > /dev/null + echo "$mute_icon" + fi + pkill -SIGRTMIN+2 waybar + ;; + *) + echo "Arguments are: show, change" + ;; +esac diff --git a/scripts/check-if-muted.sh b/scripts/check-if-muted.sh new file mode 100755 index 0000000..5d4849f --- /dev/null +++ b/scripts/check-if-muted.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +MUTED=$(wpctl get-volume @DEFAULT_AUDIO_SINK@ | grep -iq muted; echo $?) + +if [[ $MUTED -eq 0 ]]; then + notify-send "Audio muted" -a 'wp-vol' -t 1000 +else + notify-send "Audio unmuted" -a 'wp-vol' -t 1000 +fi diff --git a/scripts/home_backup.sh b/scripts/home_backup.sh new file mode 100755 index 0000000..bdb812e --- /dev/null +++ b/scripts/home_backup.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -e + +rsync -avh --no-links --delete --exclude=.* --exclude=dyski /home/szymon/ /mnt/backup/home/szymon/ +rsync -avh --no-links --delete --exclude=.* --exclude=dyski /home/szymon/ /mnt/backup_wd/home/szymon/ diff --git a/scripts/old/brightness.sh b/scripts/old/brightness.sh new file mode 100755 index 0000000..2b78a41 --- /dev/null +++ b/scripts/old/brightness.sh @@ -0,0 +1,9 @@ +#!/usr/bin/bash + +if [[ $1 == "up" ]]; then + ddcutil -d 1 setvcp 10 100 && ddcutil -d 2 setvcp 10 100 +elif [[ $1 == "down" ]]; then + ddcutil -d 1 setvcp 10 30 && ddcutil -d 2 setvcp 10 0 +else + echo "Usage: brightness.sh [up/down]" +fi diff --git a/scripts/old/change_colors.sh b/scripts/old/change_colors.sh new file mode 100755 index 0000000..88890f8 --- /dev/null +++ b/scripts/old/change_colors.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +declare -A blue +blue[background]="rgba(36, 158, 202, 0.20)" +blue[foreground]="rgba(36, 158, 202, 0.30)" +blue[font-color]="#499DA9" +blue[wallpaper]="~/Obrazy/tapety/niebieski.jpg" + +declare -A red +red[background]="rgba(202, 36, 36, 0.20)" +red[foreground]="rgba(202, 36, 36, 0.30)" +red[font-color]="#A94949" +red[wallpaper]="~/Obrazy/tapety/czerwony.jpg" + +declare -A gray +gray[background]="rgba(169, 169, 169, 0.20)" +gray[foreground]="rgba(169, 169, 169, 0.30)" +gray[font-color]="#A9A9A9" +gray[wallpaper]="~/Obrazy/tapety/szary.jpg" + +choosen_color=$1 +if [[ -z $choosen_color ]]; then + choosen_color=$(echo -e "blue\nred\ngray\n" | wofi --show dmenu --prompt "Choose your theme") +fi + +echo "You choose: $(choosen_color)" + +if [[ $choosen_color == "blue" ]]; then + waybar_colors="@define-color background ${blue[background]};\n@define-color foreground ${blue[foreground]};\n@define-color font-color ${blue[font-color]};" + mako_colors="blue" + wofi_colors="#249ECA\n#499DA9" + rivalcfg --strip-top-color "#249ECA" --strip-middle-color "#249ECA" --strip-bottom-color "#249ECA" -c "#249ECA" + hyprctl hyprpaper reload ,${blue[wallpaper]} + echo -e "preload = ${blue[wallpaper]}\nwallpaper = ,${blue[wallpaper]}\nsplash = off\nipc = on" > ~/.config/hypr/hyprpaper.conf +elif [[ $choosen_color == "red" ]]; then + waybar_colors="@define-color background ${red[background]};\n@define-color foreground ${red[foreground]};\n@define-color font-color ${red[font-color]};" + mako_colors="red" + wofi_colors="#CA2424\n#A94949" + rivalcfg --strip-top-color "#CA2424" --strip-middle-color "#CA2424" --strip-bottom-color "#CA2424" -c "#CA2424" + hyprctl hyprpaper reload ,${red[wallpaper]} + echo -e "preload = ${red[wallpaper]}\nwallpaper = ,${red[wallpaper]}\nsplash = off\nipc = on" > ~/.config/hypr/hyprpaper.conf +elif [[ $choosen_color == "gray" ]]; then + waybar_colors="@define-color background ${gray[background]};\n@define-color foreground ${gray[foreground]};\n@define-color font-color ${gray[font-color]};" + mako_colors="gray" + wofi_colors="#A9A9A9\n#A9A9A9" + rivalcfg --strip-top-color "#A9A9A9" --strip-middle-color "#A9A9A9" --strip-bottom-color "#A9A9A9" -c "#A9A9A9" + hyprctl hyprpaper reload ,${gray[wallpaper]} + echo -e "preload = ${gray[wallpaper]}\nwallpaper = ,${gray[wallpaper]}\nsplash = off\nipc = on" > ~/.config/hypr/hyprpaper.conf +fi + + +echo -e "$waybar_colors" > ~/.config/waybar/colors.css +~/.local/bin/restart_waybar.sh & + +# killall mako +cat ~/.config/mako/$mako_colors > ~/.config/mako/config +makoctl reload +# mako --config ~/.config/mako/$mako_colors & + +echo -e $wofi_colors > ~/.config/wofi/colors + diff --git a/scripts/old/change_wallpaper.sh b/scripts/old/change_wallpaper.sh new file mode 100755 index 0000000..6ef38ed --- /dev/null +++ b/scripts/old/change_wallpaper.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +case $1 in + "sfw") + wallpaper=$(find ~/Obrazy/tapety/sfw/ -type f | wofi --dmenu) + ;; + "nsfw") + wallpaper=$(find ~/Obrazy/tapety/nsfw/ -type f | wofi --dmenu) + ;; + *) + echo "Please choose nsfw or sfw" + exit 1 + ;; +esac + +if [[ -n $wallpaper ]];then + hyprctl hyprpaper reload ,$wallpaper +fi diff --git a/scripts/old/random_wallpaper.sh b/scripts/old/random_wallpaper.sh new file mode 100755 index 0000000..395f25f --- /dev/null +++ b/scripts/old/random_wallpaper.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +case $1 in + "nsfw") + WALLPAPER_DIR="$HOME/Obrazy/tapety/nsfw/" + ;; + "sfw") + WALLPAPER_DIR="$HOME/Obrazy/tapety/sfw/" + ;; + *) + echo "Please choose nsfw or sfw" + exit 1 +esac +CURRENT_WALL=$(hyprctl hyprpaper listloaded) + +# Get a random wallpaper that is not the current one +WALLPAPER=$(find "$WALLPAPER_DIR" -type f ! -name "$(basename "$CURRENT_WALL")" | shuf -n 1) + +# Apply the selected wallpaper +hyprctl hyprpaper reload ,"$WALLPAPER" diff --git a/scripts/old/screenshots_overcomplified.sh b/scripts/old/screenshots_overcomplified.sh new file mode 100755 index 0000000..60ac390 --- /dev/null +++ b/scripts/old/screenshots_overcomplified.sh @@ -0,0 +1,123 @@ +#!/bin/bash + +### DEPENDENCIES: +## libnotify +## feh +## grim +## slurp +## satty +## wl-clipboard + +dir_target="$HOME/Obrazy/zrzuty" # where your screenshots are stored +file_name="zrzut_$(date +'%H-%M-%S_%d-%m-%Y').png" # name of your screenshot +file_path="$dir_target/$file_name" # full path combined of the above +tmp_path="/tmp/$file_name" # path of temporary file + +# flags +edit=false # edit after screenshotting +save=false # save to the disk +copy=false # copy to clipboard + +# messages + +error_message="No argument provided. Use -h or --help for help message." +help_message="\nUsage: screenShot [flags] [type-of-screen-shot / color (for color picker)\n\nFlags:\n\t-c | --copy \t Copies to clipboard\n\t-s | --save \t Saves to $dir_target\n\t-e | --edit \t Edit screenshot with swappy\n\nTypes:\n\tfullscreen\n\twindow\n\tregion\n" + +# don't go crazy when directory doesn't exist + +if [[ ! -d $dir_target ]]; then + echo "Target directory does not exist. Creating..." + notify-send "Screenshot" "Target directory does not exist. Creating..." + mkdir -p $dir_target +fi + +# handle flags +while [[ $# -gt 0 ]]; do + case "$1" in + -c | --copy) + copy=true + ;; + -s | --save) + save=true + ;; + -e | --edit) + edit=true + ;; + -h | --help) + echo -e "$help_message" + exit 0 + ;; + fullscreen | window | region | color) + type_of_screenshot="$1" + ;; + *) + echo "$error_message" + exit 1 + ;; + esac + shift +done + +# actually screenshot +case "$type_of_screenshot" in +fullscreen) + grim -o $(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .name') "$tmp_path" + ;; +window) + active_window_position="$(hyprctl clients -j | jq -r '.[] | select(.focusHistoryID == 0) | .at')" + active_window_size="$(hyprctl clients -j | jq -r '.[] | select(.focusHistoryID == 0) | .size')" + + x=$(echo "$active_window_position" | jq '.[0]') + y=$(echo "$active_window_position" | jq '.[1]') + width=$(echo "$active_window_size" | jq '.[0]') + height=$(echo "$active_window_size" | jq '.[1]') + + grim -g "${x},${y} ${width}x${height}" "$tmp_path" + ;; +region) + grim -o $(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .name') "$tmp_path" && feh --title screenshot --fullscreen "$tmp_path" & + sleep 0.5 + feh_pid=$(pgrep feh) + grim -g "$(slurp)" "$tmp_path" + echo "Killing feh…" + kill -9 "$feh_pid" + ;; +color) + grim -o $(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .name') "$tmp_path" && feh --title screenshot --fullscreen "$tmp_path" & + sleep 0.5 + feh_pid=$(pgrep feh) + position=$(slurp -p) + sleep 1.0 + color_hex=$(grim -g "$position" -t ppm - | magick convert - -format '%[pixel:p{0,0}]' txt:- | sed -n '2p' | awk '{print $3}') + wl-copy $color_hex + notify-send "Color picker" "Copied $color_hex to clipboard" + kill -9 "$feh_pid" + exit 0 + ;; + +esac + +case "$copy-$save" in +"true-true") + cp "$tmp_path" "$file_path" + wl-copy <"$tmp_path" + notify-send -i "$tmp_path" "Screenshot" "Copied and saved to $file_path" + ;; +"false-true") + cp "$tmp_path" "$file_path" + notify-send -i "$tmp_path" "Screenshot" "Saved screenshot to $file_path" + ;; +"true-false") + wl-copy <"$tmp_path" + notify-send -i "$tmp_path" "Screenshot" "Copied screenshot" + ;; +"false-false") + if [ "$edit" = "true" ]; then + satty -f "$tmp_path" + fi + ;; +esac + +rm $tmp_path + +exit 0 diff --git a/scripts/old/start_coding.sh b/scripts/old/start_coding.sh new file mode 100755 index 0000000..3c2d53b --- /dev/null +++ b/scripts/old/start_coding.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +dir=$(find ~/Dokumenty/kodowanie/ -maxdepth 2 -type d ! -name '.*' | fzf) +export EDITOR="nvim" + +if [[ -n $dir ]]; then + echo "You choose $dir" + hyprctl dispatch exec [workspace 5] kitty $dir + hyprctl dispatch exec [workspace 5] kitty yazi $dir + hyprctl dispatch exec [workspace 5] kitty $dir +else + echo "No reasonable directory selected, bye bye :P" +fi diff --git a/scripts/restart_waybar.sh b/scripts/restart_waybar.sh new file mode 100755 index 0000000..53d84ec --- /dev/null +++ b/scripts/restart_waybar.sh @@ -0,0 +1,5 @@ +killall -q waybar + +while pgrep -x waybar >/dev/null; do sleep 1; done + +uwsm app waybar diff --git a/scripts/screenshot.sh b/scripts/screenshot.sh new file mode 100755 index 0000000..56fb96e --- /dev/null +++ b/scripts/screenshot.sh @@ -0,0 +1,50 @@ +#!/bin/env bash + +# variables +## path vars +date="$(date +'%d-%m-%Y_%H:%M:%S')" +fname="$date.png" +target_path="$HOME/Obrazy/zrzuty/$fname" +## stdout +error_wrong_type="The first argument needs to be \"fullscreen\", \"window\" or \"region\". Exiting..." +notification_succes="$target_path saved and copied" + + +# validate input +case "$1" in + "fullscreen" | "window" | "region") + type=$1 + ;; + *) + echo "$error_wrong_type" + exit + ;; +esac + +notification() { + notify-send -i "$target_path" -u low -a "Screenshot" "Screenshot $type" "$notification_succes" +} + +case $type in + "fullscreen") + grim -o $(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .name') "$target_path" + wl-copy < "$target_path" + notification + ;; + "window") + active_window_position="$(hyprctl clients -j | jq -r '.[] | select(.focusHistoryID == 0) | .at')" + active_window_size="$(hyprctl clients -j | jq -r '.[] | select(.focusHistoryID == 0) | .size')" + + x=$(echo "$active_window_position" | jq '.[0]') + y=$(echo "$active_window_position" | jq '.[1]') + width=$(echo "$active_window_size" | jq '.[0]') + height=$(echo "$active_window_size" | jq '.[1]') + + grim -g "${x},${y} ${width}x${height}" "$target_path" + wl-copy < "$target_path" + notification + ;; + "region") + grim -o $(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .name') - | satty -f - + ;; +esac diff --git a/scripts/sekirofpsunlock b/scripts/sekirofpsunlock new file mode 100755 index 0000000000000000000000000000000000000000..6499d999641132de369882a27798ff8b404e7c55 GIT binary patch literal 73488 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 /dev/null; then + echo "Yay is not installed, installing..." + sudo pacman -S --needed git base-devel + tmpdir="$(mktemp -d)" + git clone https://aur.archlinux.org/yay.git "$tmpdir" + cd "$tmpdir" + makepkg -si || { echo "Yay installation failed!"; exit 1; } + cd - + rm -rf "$tmpdir" + fi + echo "Yay is installed!" +} + +function show_help() { + echo -e "$help_message" + exit 0 +} + +function list_presets() { + echo -e "Existing presets:\n\tmiminal - a minimal preset with not a lot of stuff\n\tnormal - preset with everything you could possibly need" + exit 0 +} + +function list_preset_packages() { + echo "Preset $preset contains:" + echo "${presets[$preset]}" + exit 0 +} + +function install_preset() { + install_yay + echo "Downloading preset: $preset" + yay -Syu ${presets[$preset]} --needed +} + +function uninstall_preset() { + reassurance="" + read -p "Are you sure you want to do this very stupid thing? Type I AM VERY DUM to continue..." reassurance + if [[ $reassurance = "I AM VERY DUM" ]]; then + echo "Uninstalling preset: $preset" + yay -Rns ${presets[$preset]} + else + echo "Canceled uninstall" + fi + exit 0 +} + +function enable_services() { + sudo systemctl enable sddm bluetooth NetworkManager cups + systemctl --user enable pipewire wireplumber +} + +# pkgs lists +HYPRLAND_UI=" +hyprland +hyprland-protocols +hyprlauncher +hypridle +hyprlock +hyprpaper +hyprpolkitagent +hyprpwcenter +hyprsunset +hyprwire +waybar +grim +slurp +swww +wl-clipboard +nwg-displays +nwg-look +waypaper +xdg-desktop-portal-gtk +xdg-desktop-portal-hyprland +mako +notification-daemon +libnotify +sddm +" + +THEME=" +adw-gtk-theme +catppuccin-gtk-theme-latte +papirus-icon-theme +rose-pine-cursor +rose-pine-hyprcursor +" + +AUDIO=" +pipewire +pipewire-alsa +pipewire-pulse +wireplumber +pavucontrol +cava +" + +NETWORK=" +networkmanager +network-manager-applet +blueman +bluez +bluez-utils +bluez-cups +openssh +sshfs +aria2 +wget +rclone +" + +PRINTERS=" +cups +cups-browsed +cups-pdf +system-config-printer +sane +sane-airscan +" + +FILESYSTEM=" +btrfs-progs +btrfs-assistant +snapper +ntfs-3g +dosfstools +zip +7zip +rsync +trash-cli +" + +TERMINAL_TOOLS=" +fish +yazi +playerctl +atuin +zoxide +eza +fd +ripgrep +fzf +duf +gdu +fastfetch +tealdeer +man-db +bc +mediainfo +" + +DEV=" +cmake +go +rust +rust-analyzer +python-pip +prettier +npm +pandoc-cli +tectonic +chezmoi +neovim +lazygit +github-cli +" + +GAMES=" +steam +heroic-games-launcher-bin +lutris +wine +winetricks +protontricks +prismlauncher +gamemode +gamescope +mangohud +lact +goverlay +" + +MULTIMEDIA=" +mpv +satty +gimp +kdenlive +imagemagick +feh +" + +DOCUMENTS=" +zathura +zathura-pdf-poppler +" + +USERSPACE=" +gurk +vesktop +openrgb +homebank +winboat +freetube +zen-browser-bin +" + +declare -A presets +presets[minimal]="$HYPRLAND_UI $AUDIO $TERMINAL_TOOLS" +presets[normal]="$HYPRLAND_UI $AUDIO $TERMINAL_TOOLS $THEME $NETWORK $FILESYSTEM $USERSPACE $DOCUMENTS $MULTIMEDIA $PRINTERS $DEV $GAMES" + +wants_help=false +list=false +list_presets=false +install=false +uninstall=false +services=false +preset="" + +help_message="Super cool system setup utility that downloads all the packages you could possibly need!\n +How to use this bad boy:\n\n +\t--help - show this help message and leave\n +\t--list - list what is in given preset and leave. You can only use this option with --preset!\n +\t--preset - choose a preset you want to use\n +\t--services - enable all services after installing packages\n +\t--install - installs given preset to your system\n +\t--uninstall - uninstall given preset from your system. Possibly very stupid, because presets contain important system packages, like your window manager!\n\n +Thanks for using my super cool script :D +" + +# check root +if [ "$EUID" -eq 0 ]; then + echo -e "${RED}Please do not run this script as root.${RESET}" + exit 1 +fi + +# check args +if [[ -z "$1" ]]; then + echo "You need to give me some arguments...\nTry --help if you don't know what you're doing" + exit 1 +fi + +# parse args +while [ -n "$1" ]; do + case $1 in + --list-presets) + list_presets=true + shift + ;; + --list) + list=true + shift + ;; + --preset) + if [ -n "$2" ]; then + preset="$2" + shift 2 + else + echo "Error: --preset requires one argument" + exit 1 + fi + ;; + --help) + wants_help=true + shift 1 + ;; + --install) + install=true + shift + ;; + --uninstall) + uninstall=true + shift + ;; + --services) + services=true + shift + ;; + *) + echo "$1 is not a valid option! What are you even doing?!" + shift + ;; + esac +done + +if [[ "$wants_help" = true ]]; then + show_help +fi + +if [[ "$list_presets" = true ]]; then + list_presets +fi + +if [[ -v presets[$preset] ]]; then + if [[ "$list" = true ]]; then + list_preset_packages + fi + if [[ "$install" = true ]]; then + install_preset + if [[ "$services" = true ]]; then + enable_services + fi + fi + if [[ "$uninstall" = true ]]; then + uninstall_preset + fi +else + echo "Given preset does not exists..." +fi diff --git a/scripts/wp-vol.sh b/scripts/wp-vol.sh new file mode 100755 index 0000000..3ab9b80 --- /dev/null +++ b/scripts/wp-vol.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# Get the volume level and convert it to a percentage +volume=$(wpctl get-volume @DEFAULT_SINK@) +volume=$(echo "$volume" | awk '{print $2}') +volume=$(echo "( $volume * 100 ) / 1" | bc) + +notify-send -t 1000 -a 'wp-vol' -h int:value:$volume "Volume: ${volume}%"