From 3bae03e47a69159c2d4e2635cae9463e5e472a6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20Dom=C3=ADnguez?= Date: Wed, 16 Apr 2025 21:03:05 -0400 Subject: [PATCH] update to .dot-files-laptop --- .dot-files-laptop/.bin/sh/aur.sh | 2 + .dot-files-laptop/.bin/sh/batterymode.sh | 9 + .dot-files-laptop/.bin/sh/bd.sh | 2 + .dot-files-laptop/.bin/sh/build.sh | 13 + .dot-files-laptop/.bin/sh/buildgames.sh | 68 +++ .dot-files-laptop/.bin/sh/checkupdates.sh | 37 ++ .../.bin/sh/crispy-doom-compile.sh | 34 ++ .dot-files-laptop/.bin/sh/debianbox.sh | 13 + .dot-files-laptop/.bin/sh/imageview.sh | 2 + .dot-files-laptop/.bin/sh/ionfury-compile.sh | 32 ++ .dot-files-laptop/.bin/sh/kap.sh | 2 + .dot-files-laptop/.bin/sh/lap.sh | 2 + .dot-files-laptop/.bin/sh/nblood-compile.sh | 32 ++ .dot-files-laptop/.bin/sh/orphans.sh | 20 + .dot-files-laptop/.bin/sh/pkgb.sh | 13 + .../.bin/sh/quakespasm-compile.sh | 32 ++ .dot-files-laptop/.bin/sh/reboot.sh | 12 + .dot-files-laptop/.bin/sh/rednukem-compile.sh | 32 ++ .dot-files-laptop/.bin/sh/shutdown.sh | 12 + .dot-files-laptop/.bin/sh/steamskin.sh | 10 + .dot-files-laptop/.bin/sh/swaylock.sh | 2 + .dot-files-laptop/.bin/sh/tv_rename.sh | 166 ++++++++ .dot-files-laptop/.bin/sh/update.sh | 29 ++ .dot-files-laptop/.bin/sh/updatenew.sh | 49 +++ .dot-files-laptop/.bin/sh/voidsw-compile.sh | 30 ++ .dot-files-laptop/.bin/sh/weather.sh | 19 + .dot-files-laptop/.config/hypr/.zshrc.conf | 388 +++++++++++++++++ .dot-files-laptop/.config/hypr/hypridle.conf | 29 ++ .dot-files-laptop/.config/hypr/hyprland.conf | 390 ++++++++++++++++++ .dot-files-laptop/.config/hypr/hyprlock.conf | 107 +++++ .dot-files-laptop/.config/hypr/hyprpaper.conf | 5 + .dot-files-laptop/.config/kitty/diff.conf | 19 + .dot-files-laptop/.config/kitty/dracula.conf | 67 +++ .dot-files-laptop/.config/kitty/kitty.conf | 126 ++++++ .dot-files-laptop/.config/kitty/session | 15 + .dot-files-laptop/.config/sway/config | 361 ++++++++++++++++ .dot-files-laptop/.config/swaylock/config | 29 ++ .dot-files-laptop/.config/waybar/config | 270 ++++++++++++ .../.config/waybar/scripts/weather.py | 125 ++++++ .dot-files-laptop/.config/waybar/style.css | 348 ++++++++++++++++ .dot-files-laptop/.config/ytfzf/conf.sh | 14 + .../.config/ytfzf/extensions/comments | 30 ++ .dot-files-laptop/.config/ytfzf/subscriptions | 35 ++ .dot-files-laptop/.wallpapers/castlevania.png | Bin 0 -> 56954 bytes .../.wallpapers/castlevania2.png | Bin 0 -> 61904 bytes .dot-files-laptop/.zshrc | 300 ++++++++++++++ 46 files changed, 3332 insertions(+) create mode 100755 .dot-files-laptop/.bin/sh/aur.sh create mode 100755 .dot-files-laptop/.bin/sh/batterymode.sh create mode 100755 .dot-files-laptop/.bin/sh/bd.sh create mode 100755 .dot-files-laptop/.bin/sh/build.sh create mode 100755 .dot-files-laptop/.bin/sh/buildgames.sh create mode 100755 .dot-files-laptop/.bin/sh/checkupdates.sh create mode 100755 .dot-files-laptop/.bin/sh/crispy-doom-compile.sh create mode 100755 .dot-files-laptop/.bin/sh/debianbox.sh create mode 100755 .dot-files-laptop/.bin/sh/imageview.sh create mode 100755 .dot-files-laptop/.bin/sh/ionfury-compile.sh create mode 100755 .dot-files-laptop/.bin/sh/kap.sh create mode 100755 .dot-files-laptop/.bin/sh/lap.sh create mode 100755 .dot-files-laptop/.bin/sh/nblood-compile.sh create mode 100755 .dot-files-laptop/.bin/sh/orphans.sh create mode 100755 .dot-files-laptop/.bin/sh/pkgb.sh create mode 100755 .dot-files-laptop/.bin/sh/quakespasm-compile.sh create mode 100755 .dot-files-laptop/.bin/sh/reboot.sh create mode 100755 .dot-files-laptop/.bin/sh/rednukem-compile.sh create mode 100755 .dot-files-laptop/.bin/sh/shutdown.sh create mode 100755 .dot-files-laptop/.bin/sh/steamskin.sh create mode 100755 .dot-files-laptop/.bin/sh/swaylock.sh create mode 100755 .dot-files-laptop/.bin/sh/tv_rename.sh create mode 100755 .dot-files-laptop/.bin/sh/update.sh create mode 100755 .dot-files-laptop/.bin/sh/updatenew.sh create mode 100755 .dot-files-laptop/.bin/sh/voidsw-compile.sh create mode 100755 .dot-files-laptop/.bin/sh/weather.sh create mode 100644 .dot-files-laptop/.config/hypr/.zshrc.conf create mode 100644 .dot-files-laptop/.config/hypr/hypridle.conf create mode 100644 .dot-files-laptop/.config/hypr/hyprland.conf create mode 100644 .dot-files-laptop/.config/hypr/hyprlock.conf create mode 100644 .dot-files-laptop/.config/hypr/hyprpaper.conf create mode 100644 .dot-files-laptop/.config/kitty/diff.conf create mode 100644 .dot-files-laptop/.config/kitty/dracula.conf create mode 100644 .dot-files-laptop/.config/kitty/kitty.conf create mode 100644 .dot-files-laptop/.config/kitty/session create mode 100644 .dot-files-laptop/.config/sway/config create mode 100644 .dot-files-laptop/.config/swaylock/config create mode 100644 .dot-files-laptop/.config/waybar/config create mode 100755 .dot-files-laptop/.config/waybar/scripts/weather.py create mode 100644 .dot-files-laptop/.config/waybar/style.css create mode 100755 .dot-files-laptop/.config/ytfzf/conf.sh create mode 100644 .dot-files-laptop/.config/ytfzf/extensions/comments create mode 100644 .dot-files-laptop/.config/ytfzf/subscriptions create mode 100644 .dot-files-laptop/.wallpapers/castlevania.png create mode 100755 .dot-files-laptop/.wallpapers/castlevania2.png create mode 100644 .dot-files-laptop/.zshrc diff --git a/.dot-files-laptop/.bin/sh/aur.sh b/.dot-files-laptop/.bin/sh/aur.sh new file mode 100755 index 0000000..adb2e76 --- /dev/null +++ b/.dot-files-laptop/.bin/sh/aur.sh @@ -0,0 +1,2 @@ +#!/bin/sh +auracle search --quiet --searchby=name $1 | fzf --color="border:magenta,info:green,header:green,info:yellow,hl:blue,label:magenta" --multi --preview "auracle info {1}" --preview-window=up | xargs -ro auracle clone -C ~/Downloads/AUR diff --git a/.dot-files-laptop/.bin/sh/batterymode.sh b/.dot-files-laptop/.bin/sh/batterymode.sh new file mode 100755 index 0000000..36be0bd --- /dev/null +++ b/.dot-files-laptop/.bin/sh/batterymode.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env sh +HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==2{print $2}') +if [ "$HYPRGAMEMODE" = 1 ] ; then + hyprctl --batch "\ + keyword decoration:drop_shadow 0;\ + keyword decoration:blur:enabled 0" + exit +fi +hyprctl reload diff --git a/.dot-files-laptop/.bin/sh/bd.sh b/.dot-files-laptop/.bin/sh/bd.sh new file mode 100755 index 0000000..163cad8 --- /dev/null +++ b/.dot-files-laptop/.bin/sh/bd.sh @@ -0,0 +1,2 @@ +#!/bin/sh +stat / | grep "Birth" | sed 's/Birth: //g' | cut -b 2-11 diff --git a/.dot-files-laptop/.bin/sh/build.sh b/.dot-files-laptop/.bin/sh/build.sh new file mode 100755 index 0000000..49f7bac --- /dev/null +++ b/.dot-files-laptop/.bin/sh/build.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +# Build package and prompt for cleaning + +{ +makepkg -si; +read -p "Clean leftover files? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + git clean -dxfi +fi +} diff --git a/.dot-files-laptop/.bin/sh/buildgames.sh b/.dot-files-laptop/.bin/sh/buildgames.sh new file mode 100755 index 0000000..78a55ee --- /dev/null +++ b/.dot-files-laptop/.bin/sh/buildgames.sh @@ -0,0 +1,68 @@ +#!/bin/sh + +# Ask for confirmation to build nblood + +{ +read -p "Build nblood? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + ~/.bin/sh/nblood-compile.sh +fi +} + +# Ask for confirmation to build rednukem + +{ +read -p "Build rednukem? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + ~/.bin/sh/rednukem-compile.sh +fi +} + + +# Ask for confirmation to build voidsw + +{ +read -p "Build voidsw? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + ~/.bin/sh/voidsw-compile.sh +fi +} + +# Ask for confirmation to build eduke32 + +{ +read -p "Build eduke32? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + ~/.bin/sh/ionfury-compile.sh +fi +} + +# Ask for confirmation to build vkquake + +{ +read -p "Build Quakespasm-spiked? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + ~/.bin/sh/quakespasm-compile.sh +fi +} + +# Ask for confirmation to build crispy-doom + +{ +read -p "Build crispy-doom? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + ~/.bin/sh/crispy-doom-compile.sh +fi +} diff --git a/.dot-files-laptop/.bin/sh/checkupdates.sh b/.dot-files-laptop/.bin/sh/checkupdates.sh new file mode 100755 index 0000000..7c6abe7 --- /dev/null +++ b/.dot-files-laptop/.bin/sh/checkupdates.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +# Check for system updates + +{ +echo -e "\e[94mChecking Official packages updates... +\e[39m------------------------------------- +" +checkupdates +echo -e "\e[91m +Checking AUR packages updates... +\e[39m-------------------------------- +" +auracle outdated +} + +# Perform system check + +{ +read -p "Check for errors and failed services? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + systemctl --failed && journalctl -p 3 -b +fi +} + +# Perform update + +{ +read -p "Perform system update? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + ~/.bin/sh/update.sh +fi +} diff --git a/.dot-files-laptop/.bin/sh/crispy-doom-compile.sh b/.dot-files-laptop/.bin/sh/crispy-doom-compile.sh new file mode 100755 index 0000000..5632791 --- /dev/null +++ b/.dot-files-laptop/.bin/sh/crispy-doom-compile.sh @@ -0,0 +1,34 @@ +#!/bin/sh + +# Switch to git directory and clone source +{ +cd /home/peter/Downloads/git; +git clone https://github.com/fabiangreffrath/crispy-doom.git; +} + +# Build binary + +{ +cd crispy-doom; +autoreconf -fiv; +./configure; +make; +} + +# Install executable @ ~/.bin + +{ +cd /home/peter/.bin/crispy-doom; +mv /home/peter/.bin/crispy-doom/crispy-doom /home/peter/.bin/crispy-doom/old; +mv /home/peter/.bin/crispy-doom/crispy-doom-setup /home/peter/.bin/crispy-doom/old; +cd /home/peter/Downloads/git/crispy-doom; +cp /home/peter/Downloads/git/crispy-doom/src/crispy-doom /home/peter/.bin/crispy-doom; +cp /home/peter/Downloads/git/crispy-doom/src/crispy-doom-setup /home/peter/.bin/crispy-doom; +chmod 755 /home/peter/.bin/crispy-doom/crispy-doom; +} + +# Cleanup + +{ +rm -rf /home/peter/Downloads/git/crispy-doom; +} diff --git a/.dot-files-laptop/.bin/sh/debianbox.sh b/.dot-files-laptop/.bin/sh/debianbox.sh new file mode 100755 index 0000000..bca505c --- /dev/null +++ b/.dot-files-laptop/.bin/sh/debianbox.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +# Ask to connect to server via SSH + +{ +read -p "Connect to server via SSH? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + ssh kitty +kitten ssh debianbox +fi +} + diff --git a/.dot-files-laptop/.bin/sh/imageview.sh b/.dot-files-laptop/.bin/sh/imageview.sh new file mode 100755 index 0000000..a3e0e8c --- /dev/null +++ b/.dot-files-laptop/.bin/sh/imageview.sh @@ -0,0 +1,2 @@ +#!/bin/sh +kitty --session ~/.config/kitty/session --listen-on=unix:@mykitty diff --git a/.dot-files-laptop/.bin/sh/ionfury-compile.sh b/.dot-files-laptop/.bin/sh/ionfury-compile.sh new file mode 100755 index 0000000..c00d178 --- /dev/null +++ b/.dot-files-laptop/.bin/sh/ionfury-compile.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +# Switch to git directory and clone source +{ +cd /home/peter/Downloads/git; +git clone https://voidpoint.io/terminx/eduke32.git; +} + +# Build binary + +{ +cd eduke32; +make; +} + +# Install executable @ ~/.bin + +{ +cd /home/peter/.bin/eduke32; +mv /home/peter/.bin/eduke32/eduke32 /home/peter/.bin/eduke32/old; +mv /home/peter/.bin/eduke32/mapster32 /home/peter/.bin/eduke32/old; +cd /home/peter/Downloads/git/eduke32; +cp /home/peter/Downloads/git/eduke32/eduke32 /home/peter/.bin/eduke32; +cp /home/peter/Downloads/git/eduke32/mapster32 /home/peter/.bin/eduke32; +chmod 755 /home/peter/.bin/eduke32/eduke32; +} + +# Cleanup + +{ +rm -rf /home/peter/Downloads/git/eduke32; +} diff --git a/.dot-files-laptop/.bin/sh/kap.sh b/.dot-files-laptop/.bin/sh/kap.sh new file mode 100755 index 0000000..f77e386 --- /dev/null +++ b/.dot-files-laptop/.bin/sh/kap.sh @@ -0,0 +1,2 @@ +#!/bin/sh +pacman -Qq | fzf --color="border:magenta,info:green,header:green,info:yellow,hl:blue,label:magenta" --multi --preview "pacman -Qi {1}" --preview-window=up | xargs -ro sudo pacman -R diff --git a/.dot-files-laptop/.bin/sh/lap.sh b/.dot-files-laptop/.bin/sh/lap.sh new file mode 100755 index 0000000..48508de --- /dev/null +++ b/.dot-files-laptop/.bin/sh/lap.sh @@ -0,0 +1,2 @@ +#!/bin/sh +pacman -Slq | fzf --color="border:magenta,info:green,header:green,info:yellow,hl:blue,label:magenta" --multi --preview "pacman -Si {1}" --preview-window=up | xargs -ro sudo pacman -S diff --git a/.dot-files-laptop/.bin/sh/nblood-compile.sh b/.dot-files-laptop/.bin/sh/nblood-compile.sh new file mode 100755 index 0000000..536e5f2 --- /dev/null +++ b/.dot-files-laptop/.bin/sh/nblood-compile.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +# Switch to git directory and clone source +{ +cd /home/peter/Downloads/git; +git clone https://github.com/nukeykt/NBlood.git; +} + +# Build binary + +{ +cd NBlood; +make blood; +} + +# Install executable @ ~/.bin + +{ +cd /home/peter/.bin/NBlood; +mv /home/peter/.bin/NBlood/nblood /home/peter/.bin/NBlood/old; +mv /home/peter/.bin/NBlood/nblood.pk3 /home/peter/.bin/NBlood/old; +cd /home/peter/Downloads/git/NBlood; +cp /home/peter/Downloads/git/NBlood/nblood /home/peter/.bin/NBlood; +cp /home/peter/Downloads/git/NBlood/nblood.pk3 /home/peter/.bin/NBlood; +chmod 755 /home/peter/.bin/NBlood/nblood; +} + +# Cleanup + +{ +rm -rf /home/peter/Downloads/git/NBlood; +} diff --git a/.dot-files-laptop/.bin/sh/orphans.sh b/.dot-files-laptop/.bin/sh/orphans.sh new file mode 100755 index 0000000..237e0d4 --- /dev/null +++ b/.dot-files-laptop/.bin/sh/orphans.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +# Check for orphans then asks for removal + +{ +while [[ $(pacman -Qtdq) ]]; + do + pacman -Qtdq; + read -p "Remove orphaned packages? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + sudo pacman -R $(pacman -Qtdq) +elif [[ -n $(pacman -Qtdq) ]]; + then + exit +fi +done +} + diff --git a/.dot-files-laptop/.bin/sh/pkgb.sh b/.dot-files-laptop/.bin/sh/pkgb.sh new file mode 100755 index 0000000..afc6774 --- /dev/null +++ b/.dot-files-laptop/.bin/sh/pkgb.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +#Check PKGBUILD file + +{ +less PKGBUILD; +read -p "Build package? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + ~/.bin/sh/build.sh +fi +} diff --git a/.dot-files-laptop/.bin/sh/quakespasm-compile.sh b/.dot-files-laptop/.bin/sh/quakespasm-compile.sh new file mode 100755 index 0000000..b038a18 --- /dev/null +++ b/.dot-files-laptop/.bin/sh/quakespasm-compile.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +# Switch to git directory and clone source +{ +cd /home/peter/Downloads/git; +git clone https://github.com/Shpoike/Quakespasm.git; +} + +# Build binary + +{ +cd /home/peter/Downloads/git/Quakespasm/Quake; +make; +} + +# Install executable @ ~/.bin + +{ +cd /home/peter/.bin/Quakespasm; +mv /home/peter/.bin/Quakespasm/quakespasm /home/peter/.bin/Quakespasm/old; +mv /home/peter/.bin/Quakespasm/quakespasm.pak /home/peter/.bin/Quakespasm/old; +cd /home/peter/Downloads/git/Quakespasm/Quake; +cp /home/peter/Downloads/git/Quakespasm/Quake/quakespasm /home/peter/.bin/Quakespasm; +cp /home/peter/Downloads/git/Quakespasm/Quake/quakespasm.pak /home/peter/.bin/Quakespasm; +chmod 755 /home/peter/.bin/Quakespasm; +} + +# Cleanup + +{ +rm -rf /home/peter/Downloads/git/Quakespasm; +} diff --git a/.dot-files-laptop/.bin/sh/reboot.sh b/.dot-files-laptop/.bin/sh/reboot.sh new file mode 100755 index 0000000..4d40b4d --- /dev/null +++ b/.dot-files-laptop/.bin/sh/reboot.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +# Prompt Reboot + +{ +read -p "Reboot now? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + command shutdown -r now +fi +} diff --git a/.dot-files-laptop/.bin/sh/rednukem-compile.sh b/.dot-files-laptop/.bin/sh/rednukem-compile.sh new file mode 100755 index 0000000..3f22e32 --- /dev/null +++ b/.dot-files-laptop/.bin/sh/rednukem-compile.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +# Switch to git directory and clone source +{ +cd /home/peter/Downloads/git; +git clone https://github.com/nukeykt/NBlood.git; +} + +# Build binary + +{ +cd NBlood; +make rednukem; +} + +# Install executable @ ~/.bin + +{ +cd /home/peter/.bin/Rednukem; +mv /home/peter/.bin/Rednukem/rednukem /home/peter/.bin/Rednukem/old; +mv /home/peter/.bin/Rednukem/dn64widescreen.pk3 /home/peter/.bin/Rednukem/old; +cd /home/peter/Downloads/git/NBlood; +cp /home/peter/Downloads/git/NBlood/rednukem /home/peter/.bin/Rednukem; +cp /home/peter/Downloads/git/NBlood/dn64widescreen.pk3 /home/peter/.bin/Rednukem; +chmod 755 /home/peter/.bin/Rednukem/rednukem; +} + +# Cleanup + +{ +rm -rf /home/peter/Downloads/git/NBlood; +} diff --git a/.dot-files-laptop/.bin/sh/shutdown.sh b/.dot-files-laptop/.bin/sh/shutdown.sh new file mode 100755 index 0000000..97548e9 --- /dev/null +++ b/.dot-files-laptop/.bin/sh/shutdown.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +# Prompt Reboot + +{ +read -p "Shutdown now? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + command shutdown -h now +fi +} diff --git a/.dot-files-laptop/.bin/sh/steamskin.sh b/.dot-files-laptop/.bin/sh/steamskin.sh new file mode 100755 index 0000000..186f82d --- /dev/null +++ b/.dot-files-laptop/.bin/sh/steamskin.sh @@ -0,0 +1,10 @@ +#!/bin/sh +#https://wiki.archlinux.org/title/steam#Changing_the_Steam_notification_position +mkdir -p ~/.steam/root/skins +cd ~/.steam/root/skins +mkdir -p StopAnimations/resource +cp -r ~/.steam/root/resource/styles StopAnimations/resource +sed -i '/Notifications.SlideDirection/ s/"[A-Za-z]*"/"None"/' StopAnimations/resource/styles/* #no animation sliding +sed -i '/Notifications.FadeInTime/ s/"0.[0-9+]*"/"0.0"/' StopAnimations/resource/styles/* #no fade in time for notifications +sed -i '/Notifications.FadeOutTime/ s/"0.[0-9+]*"/"0.0"/' StopAnimations/resource/styles/* #no fade out time for notifications +sed -i '/Notifications.StackSize/ s/"[0-9]*"/"5"/' StopAnimations/resource/styles/* #show max 5 notifications instead of max 3 at the same time diff --git a/.dot-files-laptop/.bin/sh/swaylock.sh b/.dot-files-laptop/.bin/sh/swaylock.sh new file mode 100755 index 0000000..447cb1b --- /dev/null +++ b/.dot-files-laptop/.bin/sh/swaylock.sh @@ -0,0 +1,2 @@ +#!/bin/sh +swaylock -f -i eDP-1:~/.wallpapers/castlevania.png --inside-color "#44475a" --inside-clear-color "#50fa7b" --ring-color "#ff79c6" --text-caps-lock-color "#f8f8f2" --ring-caps-lock-color "#f8f8f2" --key-hl-color "#50fa7b" diff --git a/.dot-files-laptop/.bin/sh/tv_rename.sh b/.dot-files-laptop/.bin/sh/tv_rename.sh new file mode 100755 index 0000000..3419928 --- /dev/null +++ b/.dot-files-laptop/.bin/sh/tv_rename.sh @@ -0,0 +1,166 @@ +#!/bin/env bash +# +# Written by Anthony Lobianco, 01/23/2014 +# +# A simple script to batch rename television files +# +# USAGE +# ----- +# chmod a+x tv_rename.sh +# ./tv_rename.sh -d /path/to/show/S01 +# +# CHANGELOG +# --------- +# +# 1.0.0 +# ----- +# initial commit +# +# 1.0.1 +# ----- +# check to make sure input directory exists +# +# 1.0.2 +# ----- +# handle file types other than .mkv +# make sure new format has same extension as old file +# make sure new format includes the SXXEYY placeholder +# +# 1.0.3 +# ----- +# if SXXEYY pattern is not present, automatically determine it from filename +# + +VRS=1.0.3 + +bold=`tput bold` # bold characters in echo +normal=`tput sgr0` # normal characters in echo + +echo " " +echo "BATCH RENAME SCRIPT v$VRS" +echo -n "server: " +echo $SSH_CONNECTION | awk '{print $3}' +echo " " + +DIR="" + +while getopts ":d:" OPTION +do + case $OPTION in + d) + if [ "$OPTARG" = "." ]; then + DIR=`pwd` + else + DIR="$OPTARG" + fi + ;; + esac +done + +if [ "$DIR" = "" ]; then + echo "no directory specified (use -d /path/to/directory/)" + echo "EXIT" + exit 1 +elif [ ! -d "$DIR" ]; then + echo "$DIR does not exist" + echo "EXIT" + exit 1 +fi + +echo -e "renaming files in:\t ${bold}${DIR}${normal}" + +LAST_FILE=`ls -l "$DIR" | tail -1 | awk '{print $NF}'` +FILE_TYPE=`basename $LAST_FILE | awk -F . '{print $NF}'` + +echo -e "last file looks like:\t ${bold}${LAST_FILE}${normal}\n" + +rename_files() { + local format=$1 + local dry_run=$2 + + # find SXXEYY pattern + REGEX="([sS]([0-9]{2,}|[X]{2,})[eE]([0-9]{2,}|[Y]{2,}))" + if [[ ! $format =~ $REGEX ]]; then + echo "could not find SXXEYY pattern in new format" + echo " " + continue + else + MATCH="${BASH_REMATCH[1]}" + fi + + # needed if directory name has whitespace (e.g. /media/Family Guy/) + SAVEIFS=$IFS + IFS=$(echo -en "\n\b") + + SEASON=`basename "$DIR"` + EPISODE=1 + for ITEM in $(find "$DIR" -type f -name "*.${FILE_TYPE}" | sort); do + if (( $EPISODE < 10 )); then + SE="${SEASON}E0${EPISODE}" + else + SE="${SEASON}E${EPISODE}" + fi + + if [[ $MATCH != $SE ]]; then + FILE="${format/$MATCH/$SE}" + else + FILE=$format + fi + + # list the files during dry run, rename them otherwise + if $dry_run; then + echo -e " mv `basename $ITEM` \n -> $FILE" + else + if [[ `basename $ITEM` == $FILE ]]; then + echo "rename not needed for `basename $ITEM`" + else + echo -e "renaming $ITEM \n to -> \t $DIR/$FILE" + mv $ITEM "$DIR/$FILE" + fi + fi + + echo " " + + EPISODE=$((EPISODE + 1)) + done + + IFS=$SAVEIFS +} + +echo "what format do you want to use to rename files?" +echo -e "(ex: Breaking.Bad.SXXEYY.1080p.BluRay.DTS.x264-rovers.mkv)\n" + +while read -ep "[format]: " FORMAT +do + echo " " + + # do some error checks + if [[ $FORMAT != *.${FILE_TYPE} ]]; then + echo "make sure new format has same file type extension (.${FILE_TYPE})" + echo " " + continue + fi + + rename_files $FORMAT true + + echo " " + + while read -ep "[continue? y/n]: " CONTINUE + do + if [[ $CONTINUE = y ]]; then + break + else + continue 2 + fi + done + + echo " " + + rename_files $FORMAT false + + break +done + +echo " " +echo "DONE" +exit 0 diff --git a/.dot-files-laptop/.bin/sh/update.sh b/.dot-files-laptop/.bin/sh/update.sh new file mode 100755 index 0000000..3fa8730 --- /dev/null +++ b/.dot-files-laptop/.bin/sh/update.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +# Perform update + +sudo pacman -Syu + +# Check pacdiff + +{ +read -p "Execute pacdiff? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + pacdiff -s +fi +} +# Check for orphans +{ +read -p "Check for orphan packages? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + sudo bash /home/peter/.bin/sh/orphans.sh +fi +} + +# Prompt reboot + +~/.bin/sh/reboot.sh diff --git a/.dot-files-laptop/.bin/sh/updatenew.sh b/.dot-files-laptop/.bin/sh/updatenew.sh new file mode 100755 index 0000000..079f112 --- /dev/null +++ b/.dot-files-laptop/.bin/sh/updatenew.sh @@ -0,0 +1,49 @@ +#!/bin/sh + +# Check for updates + +{ +read -p "Check for updates? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + ~/.bin/sh/checkupdates.sh +fi +} + +# Perform system check + +{ +read -p "Check for errors and failed services? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + systemctl --failed && journalctl -p 3 -b +fi +} + +# Perform update + +{ +read -p "Perform system update? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + sudo pacman -Syu; +fi +} + +# Check pacdiff + +{ +read -p "Execute pacdiff? [y/n]:" -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + sudo pacdiff +fi +} + +# Prompt reboot + +~/.bin/sh/reboot.sh diff --git a/.dot-files-laptop/.bin/sh/voidsw-compile.sh b/.dot-files-laptop/.bin/sh/voidsw-compile.sh new file mode 100755 index 0000000..89797ef --- /dev/null +++ b/.dot-files-laptop/.bin/sh/voidsw-compile.sh @@ -0,0 +1,30 @@ +#!/bin/sh + +# Switch to git directory and clone source +{ +cd /home/peter/Downloads/git; +git clone https://voidpoint.io/terminx/eduke32.git; +} + +# Build binary + +{ +cd eduke32; +make voidsw; +} + +# Install executable @ ~/.bin + +{ +cd /home/peter/.bin/voidsw; +mv /home/peter/.bin/voidsw/voidsw /home/peter/.bin/voidsw/old; +cd /home/peter/Downloads/git/eduke32; +cp /home/peter/Downloads/git/eduke32/voidsw /home/peter/.bin/voidsw; +chmod 755 /home/peter/.bin/voidsw/voidsw; +} + +# Cleanup + +{ +rm -rf /home/peter/Downloads/git/eduke32; +} diff --git a/.dot-files-laptop/.bin/sh/weather.sh b/.dot-files-laptop/.bin/sh/weather.sh new file mode 100755 index 0000000..47c5d19 --- /dev/null +++ b/.dot-files-laptop/.bin/sh/weather.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +# weather.sh +for i in {1..5} +do + text=$(curl -s "https://v2.wttr.in/$1?format=1&m") + if [[ $? == 0 ]] + then + text=$(echo "$text" | sed -E "s/\s+/ /g") + tooltip=$(echo -ne "Santo Domingo, Dominican Republic:";curl -s "https://wttr.in/$1?format=2&m") + if [[ $? == 0 ]] + then + tooltip=$(echo "$tooltip" | sed -E "s/\s+/ /g") + echo "{\"text\":\"$text\", \"tooltip\":\"$tooltip\"}" + exit + fi + fi + sleep 2 +done +echo "{\"text\":\"error\", \"tooltip\":\"error\"}" diff --git a/.dot-files-laptop/.config/hypr/.zshrc.conf b/.dot-files-laptop/.config/hypr/.zshrc.conf new file mode 100644 index 0000000..8aa94e3 --- /dev/null +++ b/.dot-files-laptop/.config/hypr/.zshrc.conf @@ -0,0 +1,388 @@ +# ┌───────────────────────────────────────────────────┐ +# │ ██████╗ ███████╗████████╗███████╗██████╗ ███████╗ │ +# │ ██╔══██╗██╔════╝╚══██╔══╝██╔════╝██╔══██╗██╔════╝ │ +# │ ██████╔╝█████╗ ██║ █████╗ ██████╔╝███████╗ │ +# │ ██╔═══╝ ██╔══╝ ██║ ██╔══╝ ██╔══██╗╚════██║ │ +# │ ██║ ███████╗ ██║ ███████╗██║ ██║███████║ │ +# │ ╚═╝ ╚══════╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚══════╝ │ +# ├───────────────────────────────────────────────────┤ +# │ depressing and totally messy hyprland config or │ +# ├───────────────────────────────────────────────────┤ +# │ How windows are the only well │ +# │ managed aspect of my life. │ +# │---------------------------------------------------│ +# │ https://gitlab.com/putridpete/dot-files │ +# └───────────────────────────────────────────────────┘ +# +# + +# Programs + +$terminal = kitty +$menu = rofi -show drun + +# Some default env vars + +env = XCURSOR_SIZE,24 +env = QT_QPA_PLATFORMTHEME,qt5ct # change to qt6ct if you have that + +# Outputs + +monitor=eDP-1,1920x1080@60,0x0,1 + +# trigger when the switch is toggled + +bindl=,switch:Lid Switch,exec,swaylock -f + +# Screen brightness + +bind = , XF86MonBrightnessUp, exec, brightnessctl s +10% +bind = , XF86MonBrightnessDown, exec, brightnessctl s 10%- + +# Input devices + +input { + kb_layout = us(altgr-intl) + kb_variant = ,nodeadkeys + kb_options = caps:escape + + follow_mouse = 1 + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. +} + +device { + name = tpps/2-ibm-trackpoint + sensitivity = 0.7 +} + +device { + name = synaptics-tm3276-022 + sensitivity = 0.3 +} + +# Executables + +exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP +exec-once = udiskie -t & +exec-once = /usr/lib/polkit-kde-authentication-agent-1 +exec-once = sleep 1; blueman-applet +exec-once = waybar +exec-once = swaync +exec-once = hyprpaper +exec-once = hypridle +exec-once = hyprctl setcursor Dracula-cursors 24 +exec-once = [workspace 1 silent] firefox +exec-once = jellyfinmediaplayer +exec-once = libreoffice --writer --norestore +exec-once = gimp +exec-once = [workspace 2 silent] kitty btop +exec-once = [workspace 2 silent] sleep 1; kitty +exec-once = [workspace 2 silent] sleep 1;kitty --session ~/.config/kitty/session --listen-on=unix:@mykitty +exec-once = [workspace special:password silent] keepassxc +exec-once = [workspace special:scratchpad silent] signal-desktop --ozone-platform-hint=auto --enable-features=UseOzonePlatform,WaylandWindowDecorations +exec-once = nextcloud +exec-once = killall nextcloud +exec-once = [workspace special:music silent] sleep 1; feishin --enable-features=UseOzonePlatform --ozone-platform=wayland +exec-once = gammastep -m wayland -O 6500K -g 1.1.0 +exec-once = [workspace special:email silent] sleep 1; tutanota-desktop --ozone-platform-hint=auto +exec-once = discord --enable-features=UseOzonePlatform --ozone-platform=wayland --start-minimized + +# Variables + +general { + gaps_in = 5 + gaps_out = 10 + border_size = 2 + layout = master + allow_tearing = false +} + +decoration { + + rounding = 8 + + blur { + enabled = false + size = 3 + passes = 1 + new_optimizations = true + noise = 0.06 + special = true + contrast = 0.8 + popups = true + } + +} + +# Animations + +animations { + enabled = yes + + bezier = myBezier, 0, 0.55, 0.45, 1 + + animation = windows, 1, 4, myBezier + animation = windowsIn, 1, 7, default, popin 80% + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 20, default + animation = borderangle, 1, 20, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default, slide +} + +# Layout + +master { + new_status = slave +} + +# Cursor + +cursor { + hide_on_key_press = true +} + +# Miscellaneous + +misc { + force_default_wallpaper = 0 # Set to 0 to disable the anime mascot wallpapers + vfr = true +} + +# Window rules + +windowrulev2 = workspace 3 silent,class:com.github.iwalton3.jellyfin-media-player +windowrulev2 = workspace 4 silent,class:libreoffice-writer +windowrulev2 = workspace 5 silent,class:gimp +windowrulev2 = float,class:nmnet +windowrulev2 = size 860 540,class:nmnet +windowrulev2 = float,class:com.nextcloud.desktopclient.nextcloud +windowrulev2 = move 1450 38,class:com.nextcloud.desktopclient.nextcloud +windowrulev2 = float,class:openrgb +windowrulev2 = size 1600 900,class:openrgb +windowrulev2 = center,class:openrgb +windowrulev2 = float,class:org.pulseaudio.pavucontrol +windowrulev2 = move 1310 40,class:org.pulseaudio.pavucontrol +windowrulev2 = float,title:foot +windowrulev2 = float,title:Open Files +windowrulev2 = size 1000 600,title:Open Files +windowrulev2 = float,title:Signal +windowrulev2 = center,title:Signal +windowrulev2 = size 1280 720,title:Signal +windowrulev2 = float,class:feishin +windowrulev2 = center,class:feishin +windowrulev2 = float,class:org.keepassxc.KeePassXC +windowrulev2 = size 800 600,class:org.keepassxc.KeePassXC +windowrulev2 = center,class:org.keepassxc.KeePassXC +windowrulev2 = float,class:mpv +windowrulev2 = monitor DP-1,class:mpv +windowrulev2 = size 600 400,class:mpv +windowrulev2 = move 1310 670,class:mpv +windowrulev2 = center,class:discord +windowrulev2 = float,class:discord +windowrulev2 = size 1600 900, class:discord +windowrulev2 = float,class:org.kde.polkit-kde-authentication-agent-1 +windowrulev2 = float,class:alacarte +windowrulev2 = float,class:nwg-look +windowrulev2 = float,class:zenity +windowrulev2 = float,class:galculator +windowrulev2 = move 1580 730,class:galculator +windowrulev2 = float,class:qsynth +windowrulev2 = float,class:qt5ct +windowrulev2 = float,class:kvantummanager +windowrulev2 = float,class:nm-connection-editor +windowrulev2 = float,class:udiskie +windowrulev2 = float,class:gsimplecal +windowrulev2 = move 800 43,class:gsimplecal +windowrulev2 = float,class:imv +windowrulev2 = center,class:imv +windowrulev2 = float,class:org.pwmt.zathura +windowrulev2 = center,class:org.pwmt.zathura +windowrulev2 = idleinhibit fullscreen, fullscreen:1 +windowrulev2 = float,class:tutanota-desktop +windowrulev2 = center,class:tutanota-desktop +windowrulev2 = size 1705 909,class:tutanota-desktop +windowrulev2 = float,class:xdg-desktop-portal-gtk +windowrulev2 = float,class:blueman-manager +windowrulev2 = center,class:blueman-manager +windowrulev2 = move 1310 38,class:blueman-manager +windowrulev2 = size 600 900,class:blueman-manager + +# Keywords + +$mainMod = SUPER + +# Bindings + +bind = $mainMod, Return, exec, $terminal +bind = $mainMod, Q, killactive, +bind = $mainMod, E, exit, +bind = $mainMod, V, togglefloating, +bind = $mainMod, P, exec, $menu +bind = $mainMod, F, fullscreen +bind = $mainMod, C, exec, galculator +bind = $mainMod, n, exec, exec swaync-client -t -sw +bind = $mainMod CTRL, S, exec, [workspace special:scratchpad silent] signal-desktop --ozone-platform-hint=auto --enable-features=UseOzonePlatform,WaylandWindowDecorations +bind = $mainMod CTRL, P, exec, [workspace special:password silent] keepassxc +bind = $mainMod CTRL, M, exec, [workspace special:music silent] sleep 1; feishin --enable-features=UseOzonePlatform --ozone-platform=wayland + +# Resize windows main keybind +bind=ALT,R,submap,resize + +# Start a submap resize +submap=resize + +# Set repeatable binds for resizing the active window +binde=,right,resizeactive,10 0 +binde=,left,resizeactive,-10 0 +binde=,up,resizeactive,0 -10 +binde=,down,resizeactive,0 10 +binde=,l,resizeactive,10 0 +binde=,h,resizeactive,-10 0 +binde=,k,resizeactive,0 -10 +binde=,j,resizeactive,0 10 + +# Use reset to go back to the global submap +bind=,escape,submap,reset + +# Reset the submap +submap=reset + +# Switch between floating and tiled windows + +bind = ALT, TAB, cyclenext, floating +bind = ALT, SPACE, focuscurrentorlast + +# Media keys + +bind = ,XF86AudioPlay,exec,playerctl play-pause +bind = ,XF86AudioPause,exec,playerctl pause +bind = ,XF86AudioStop,exec,playerctl stop +bind = ,XF86AudioNext,exec,playerctl next +bind = ,XF86AudioPrev,exec,playerctl previous +bind = ,XF86AudioRaiseVolume,exec,wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ +bind = ,XF86AudioLowerVolume,exec,wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +bind = ,XF86AudioMute,exec,pactl set-sink-mute @DEFAULT_SINK@ toggle + +# Move focus with Mod + arrow keys + +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +# Move windows with Mod + arrow keys + +bind = $mainMod CTRL, left, movewindow, l +bind = $mainMod CTRL, right, movewindow, r +bind = $mainMod CTRL, up, movewindow, u +bind = $mainMod CTRL, down, movewindow, d + +# VI keybindings like God intended + +bind = $mainMod, h, movefocus, l +bind = $mainMod, l, movefocus, r +bind = $mainMod, k, movefocus, u +bind = $mainMod, j, movefocus, d + +# Move windows with Mod + vi keys + +bind = $mainMod CTRL, h, movewindow, l +bind = $mainMod CTRL, l, movewindow, r +bind = $mainMod CTRL, k, movewindow, u +bind = $mainMod CTRL, j, movewindow, d + +# Switch workspaces with Mod + [0-8] + +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 + +# Move active window to a workspace with Mod + CTRL + [0-8] + +bind = $mainMod CTRL, 1, movetoworkspace, 1 +bind = $mainMod CTRL, 2, movetoworkspace, 2 +bind = $mainMod CTRL, 3, movetoworkspace, 3 +bind = $mainMod CTRL, 4, movetoworkspace, 4 +bind = $mainMod CTRL, 5, movetoworkspace, 5 +bind = $mainMod CTRL, 6, movetoworkspace, 6 +bind = $mainMod CTRL, 7, movetoworkspace, 7 +bind = $mainMod CTRL, 8, movetoworkspace, 8 + +# Workspace monitor assignment + +workspace = 1, monitor:eDP-1, default:true +workspace = 2, monitor:eDP-1 +workspace = 3, monitor:eDP-1 +workspace = 4, monitor:eDP-1 +workspace = 5, monitor:eDP-1 +workspace = 6, monitor:eDP-1 +workspace = 7, monitor:eDP-1, default:true +workspace = 8, monitor:eDP-1 + +# Special workspaces + +bind = $mainMod, U, togglespecialworkspace, scratchpad +bind = $mainMod SHIFT, S, movetoworkspace, special:scratchpad + +bind = $mainMod, M, togglespecialworkspace, music +bind = $mainMod, O, togglespecialworkspace, password +bind = $mainMod, I, togglespecialworkspace, email + +# Scroll through existing workspaces with Mod + scroll + +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +# Scroll through existing workspaces with Mod + vi keys + +bind = $mainMod ALT, l, workspace, e+1 +bind = $mainMod ALT, h, workspace, e-1 + +# Scroll through existing workspaces with Mod + arrow keys + +bind = $mainMod ALT, right, workspace, e+1 +bind = $mainMod ALT, left, workspace, e-1 + +# Move/resize windows with Mod + LMB/RMB and dragging + +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + +# Screenshot + +bind = ,Print,exec,grim -g "$(slurp)" - | swappy -f - + +# Dracula theme + +general { + col.active_border = rgb(6272A4) rgb(bd93f9) 90deg + col.inactive_border = rgba(44475aaa) + col.nogroup_border = rgba(282a36dd) + col.nogroup_border_active = rgb(bd93f9) rgb(44475a) 90deg + no_border_on_floating = false + border_size = 2 + +} +decoration:shadow { + color = rgba(1E202966) + enabled = true + range = 60 + offset = 1 2 + render_power = 3 + scale = 0.97 +} + +group { + groupbar { + col.active = rgb(bd93f9) rgb(44475a) 90deg + col.inactive = rgba(282a36dd) + } +} +windowrulev2 = bordercolor rgb(ff5555),xwayland:1 # check if window is xwayland diff --git a/.dot-files-laptop/.config/hypr/hypridle.conf b/.dot-files-laptop/.config/hypr/hypridle.conf new file mode 100644 index 0000000..d344d54 --- /dev/null +++ b/.dot-files-laptop/.config/hypr/hypridle.conf @@ -0,0 +1,29 @@ +general { + lock_cmd = pidof hyprlock || hyprlock + before_sleep_cmd = loginctl lock-session + after_sleep_cmd = hyprctl dispatch dpms on +} + +listener { + timeout = 150 + on-timeout = brightnessctl -s set 10 + on-resume = brightnessctl -r +} + +# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight. +listener { + timeout = 150 + on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 + on-resume = brightnessctl -rd rgb:kbd_backlight +} + +listener { + timeout = 600 + on-timeout = loginctl lock-session +} + +listener { + timeout = 605 + on-timeout = hyprctl dispatch dpms off + on-resume = hyprctl dispatch dpms on +} diff --git a/.dot-files-laptop/.config/hypr/hyprland.conf b/.dot-files-laptop/.config/hypr/hyprland.conf new file mode 100644 index 0000000..d0a7345 --- /dev/null +++ b/.dot-files-laptop/.config/hypr/hyprland.conf @@ -0,0 +1,390 @@ +# ┌───────────────────────────────────────────────────┐ +# │ ██████╗ ███████╗████████╗███████╗██████╗ ███████╗ │ +# │ ██╔══██╗██╔════╝╚══██╔══╝██╔════╝██╔══██╗██╔════╝ │ +# │ ██████╔╝█████╗ ██║ █████╗ ██████╔╝███████╗ │ +# │ ██╔═══╝ ██╔══╝ ██║ ██╔══╝ ██╔══██╗╚════██║ │ +# │ ██║ ███████╗ ██║ ███████╗██║ ██║███████║ │ +# │ ╚═╝ ╚══════╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚══════╝ │ +# ├───────────────────────────────────────────────────┤ +# │ depressing and totally messy hyprland config or │ +# ├───────────────────────────────────────────────────┤ +# │ How windows are the only well │ +# │ managed aspect of my life. │ +# │---------------------------------------------------│ +# │ https://gitlab.com/putridpete/dot-files │ +# └───────────────────────────────────────────────────┘ +# +# + +# Programs + +$terminal = kitty +$menu = rofi -show drun + +# Some default env vars + +env = XCURSOR_SIZE,24 +env = QT_QPA_PLATFORMTHEME,qt5ct # change to qt6ct if you have that + +# Outputs + +monitor=eDP-1,1920x1080@60,0x0,1 + +# trigger when the switch is toggled + +bindl=,switch:Lid Switch,exec,swaylock -f + +# Screen brightness + +bind = , XF86MonBrightnessUp, exec, brightnessctl s +10% +bind = , XF86MonBrightnessDown, exec, brightnessctl s 10%- + +# Input devices + +input { + kb_layout = us(altgr-intl) + kb_variant = ,nodeadkeys + kb_options = caps:escape + + follow_mouse = 1 + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. +} + +device { + name = tpps/2-ibm-trackpoint + sensitivity = 0.7 +} + +device { + name = synaptics-tm3276-022 + sensitivity = 0.3 +} + +# Executables + +exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP +exec-once = udiskie -t & +exec-once = /usr/lib/polkit-kde-authentication-agent-1 +exec-once = sleep 1; blueman-applet +exec-once = waybar +exec-once = swaync +exec-once = hyprpaper +exec-once = hypridle +exec-once = hyprctl setcursor Dracula-cursors 24 +exec-once = [workspace 1 silent] firefox +exec-once = libreoffice --writer --norestore +exec-once = gimp +exec-once = [workspace 2 silent] kitty btop +exec-once = [workspace 2 silent] sleep 1; kitty +exec-once = [workspace 2 silent] sleep 1;kitty --session ~/.config/kitty/session --listen-on=unix:@mykitty +exec-once = [workspace special:password silent] keepassxc +exec-once = [workspace special:scratchpad silent] signal-desktop --ozone-platform-hint=auto --enable-features=UseOzonePlatform,WaylandWindowDecorations +exec-once = nextcloud +exec-once = killall nextcloud +exec-once = [workspace special:music silent] sleep 1; feishin --enable-features=UseOzonePlatform --ozone-platform=wayland +exec-once = gammastep -m wayland -O 6500K -g 1.1.0 +exec-once = [workspace special:email silent] sleep 1; tutanota-desktop --ozone-platform-hint=auto +exec-once = discord --enable-features=UseOzonePlatform --ozone-platform=wayland --start-minimized +exec-once = jellyfin-mpv-shim + +# Variables + +general { + gaps_in = 5 + gaps_out = 10 + border_size = 2 + layout = master + allow_tearing = false +} + +decoration { + + rounding = 8 + + blur { + enabled = false + size = 3 + passes = 1 + new_optimizations = true + noise = 0.06 + special = true + contrast = 0.8 + popups = true + } + +} + +# Animations + +animations { + enabled = yes + + bezier = myBezier, 0, 0.55, 0.45, 1 + + animation = windows, 1, 4, myBezier + animation = windowsIn, 1, 7, default, popin 80% + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 20, default + animation = borderangle, 1, 20, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default, slide +} + +# Layout + +master { + new_status = slave +} + +# Cursor + +cursor { + hide_on_key_press = true +} + +# Miscellaneous + +misc { + force_default_wallpaper = 0 # Set to 0 to disable the anime mascot wallpapers + vfr = true +} + +# Window rules + +windowrulev2 = workspace 3 silent,class:libreoffice-writer +windowrulev2 = workspace 4 silent,class:gimp +windowrulev2 = workspace special:email silent,class:tutanota-desktop +windowrulev2 = float,class:nmnet +windowrulev2 = size 860 540,class:nmnet +windowrulev2 = float,class:com.nextcloud.desktopclient.nextcloud +windowrulev2 = move 1450 38,class:com.nextcloud.desktopclient.nextcloud +windowrulev2 = float,class:openrgb +windowrulev2 = size 1600 900,class:openrgb +windowrulev2 = center,class:openrgb +windowrulev2 = float,class:org.pulseaudio.pavucontrol +windowrulev2 = move 1310 40,class:org.pulseaudio.pavucontrol +windowrulev2 = float,title:foot +windowrulev2 = float,title:Save Files* +windowrulev2 = size 1000 600,title:Save Files* +windowrulev2 = float,title:Open Files +windowrulev2 = size 1000 600,title:Open Files +windowrulev2 = float,title:Signal +windowrulev2 = center,title:Signal +windowrulev2 = size 1280 720,title:Signal +windowrulev2 = float,class:feishin +windowrulev2 = center,class:feishin +windowrulev2 = float,class:org.keepassxc.KeePassXC +windowrulev2 = size 800 600,class:org.keepassxc.KeePassXC +windowrulev2 = center,class:org.keepassxc.KeePassXC +windowrulev2 = float,class:mpv +windowrulev2 = monitor DP-1,class:mpv +windowrulev2 = size 600 400,class:mpv +windowrulev2 = move 1310 670,class:mpv +windowrulev2 = center,class:discord +windowrulev2 = float,class:discord +windowrulev2 = size 1600 900, class:discord +windowrulev2 = float,class:org.kde.polkit-kde-authentication-agent-1 +windowrulev2 = float,class:alacarte +windowrulev2 = float,class:nwg-look +windowrulev2 = float,class:zenity +windowrulev2 = float,class:galculator +windowrulev2 = move 1580 730,class:galculator +windowrulev2 = float,class:qsynth +windowrulev2 = float,class:qt5ct +windowrulev2 = float,class:kvantummanager +windowrulev2 = float,class:nm-connection-editor +windowrulev2 = float,class:udiskie +windowrulev2 = float,class:gsimplecal +windowrulev2 = move 800 43,class:gsimplecal +windowrulev2 = float,class:imv +windowrulev2 = center,class:imv +windowrulev2 = float,class:org.pwmt.zathura +windowrulev2 = center,class:org.pwmt.zathura +windowrulev2 = idleinhibit fullscreen, fullscreen:1 +windowrulev2 = float,class:tutanota-desktop +windowrulev2 = center,class:tutanota-desktop +windowrulev2 = size 1705 909,class:tutanota-desktop +windowrulev2 = float,class:xdg-desktop-portal-gtk +windowrulev2 = float,class:blueman-manager +windowrulev2 = center,class:blueman-manager +windowrulev2 = move 1310 38,class:blueman-manager +windowrulev2 = size 600 900,class:blueman-manager + +# Keywords + +$mainMod = SUPER + +# Bindings + +bind = $mainMod, Return, exec, $terminal +bind = $mainMod, Q, killactive, +bind = $mainMod, E, exit, +bind = $mainMod, V, togglefloating, +bind = $mainMod, P, exec, $menu +bind = $mainMod, F, fullscreen +bind = $mainMod, C, exec, galculator +bind = $mainMod, n, exec, exec swaync-client -t -sw +bind = $mainMod CTRL, S, exec, [workspace special:scratchpad silent] signal-desktop --ozone-platform-hint=auto --enable-features=UseOzonePlatform,WaylandWindowDecorations +bind = $mainMod CTRL, P, exec, [workspace special:password silent] keepassxc +bind = $mainMod CTRL, M, exec, [workspace special:music silent] sleep 1; feishin --enable-features=UseOzonePlatform --ozone-platform=wayland + +# Resize windows main keybind +bind=ALT,R,submap,resize + +# Start a submap resize +submap=resize + +# Set repeatable binds for resizing the active window +binde=,right,resizeactive,10 0 +binde=,left,resizeactive,-10 0 +binde=,up,resizeactive,0 -10 +binde=,down,resizeactive,0 10 +binde=,l,resizeactive,10 0 +binde=,h,resizeactive,-10 0 +binde=,k,resizeactive,0 -10 +binde=,j,resizeactive,0 10 + +# Use reset to go back to the global submap +bind=,escape,submap,reset + +# Reset the submap +submap=reset + +# Switch between floating and tiled windows + +bind = ALT, TAB, cyclenext, floating +bind = ALT, SPACE, focuscurrentorlast + +# Media keys + +bind = ,XF86AudioPlay,exec,playerctl play-pause +bind = ,XF86AudioPause,exec,playerctl pause +bind = ,XF86AudioStop,exec,playerctl stop +bind = ,XF86AudioNext,exec,playerctl next +bind = ,XF86AudioPrev,exec,playerctl previous +bind = ,XF86AudioRaiseVolume,exec,wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ +bind = ,XF86AudioLowerVolume,exec,wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +bind = ,XF86AudioMute,exec,pactl set-sink-mute @DEFAULT_SINK@ toggle + +# Move focus with Mod + arrow keys + +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +# Move windows with Mod + arrow keys + +bind = $mainMod CTRL, left, movewindow, l +bind = $mainMod CTRL, right, movewindow, r +bind = $mainMod CTRL, up, movewindow, u +bind = $mainMod CTRL, down, movewindow, d + +# VI keybindings like God intended + +bind = $mainMod, h, movefocus, l +bind = $mainMod, l, movefocus, r +bind = $mainMod, k, movefocus, u +bind = $mainMod, j, movefocus, d + +# Move windows with Mod + vi keys + +bind = $mainMod CTRL, h, movewindow, l +bind = $mainMod CTRL, l, movewindow, r +bind = $mainMod CTRL, k, movewindow, u +bind = $mainMod CTRL, j, movewindow, d + +# Switch workspaces with Mod + [0-8] + +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 + +# Move active window to a workspace with Mod + CTRL + [0-8] + +bind = $mainMod CTRL, 1, movetoworkspace, 1 +bind = $mainMod CTRL, 2, movetoworkspace, 2 +bind = $mainMod CTRL, 3, movetoworkspace, 3 +bind = $mainMod CTRL, 4, movetoworkspace, 4 +bind = $mainMod CTRL, 5, movetoworkspace, 5 +bind = $mainMod CTRL, 6, movetoworkspace, 6 +bind = $mainMod CTRL, 7, movetoworkspace, 7 +bind = $mainMod CTRL, 8, movetoworkspace, 8 + +# Workspace monitor assignment + +workspace = 1, monitor:eDP-1, default:true +workspace = 2, monitor:eDP-1 +workspace = 3, monitor:eDP-1 +workspace = 4, monitor:eDP-1 +workspace = 5, monitor:eDP-1 +workspace = 6, monitor:eDP-1 +workspace = 7, monitor:eDP-1, default:true +workspace = 8, monitor:eDP-1 + +# Special workspaces + +bind = $mainMod, U, togglespecialworkspace, scratchpad +bind = $mainMod SHIFT, S, movetoworkspace, special:scratchpad + +bind = $mainMod, M, togglespecialworkspace, music +bind = $mainMod, O, togglespecialworkspace, password +bind = $mainMod, I, togglespecialworkspace, email + +# Scroll through existing workspaces with Mod + scroll + +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +# Scroll through existing workspaces with Mod + vi keys + +bind = $mainMod ALT, l, workspace, e+1 +bind = $mainMod ALT, h, workspace, e-1 + +# Scroll through existing workspaces with Mod + arrow keys + +bind = $mainMod ALT, right, workspace, e+1 +bind = $mainMod ALT, left, workspace, e-1 + +# Move/resize windows with Mod + LMB/RMB and dragging + +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + +# Screenshot + +bind = ,Print,exec,grim -g "$(slurp)" - | swappy -f - + +# Dracula theme + +general { + col.active_border = rgb(6272A4) rgb(bd93f9) 90deg + col.inactive_border = rgba(44475aaa) + col.nogroup_border = rgba(282a36dd) + col.nogroup_border_active = rgb(bd93f9) rgb(44475a) 90deg + no_border_on_floating = false + border_size = 2 + +} +decoration:shadow { + color = rgba(1E202966) + enabled = true + range = 60 + offset = 1 2 + render_power = 3 + scale = 0.97 +} + +group { + groupbar { + col.active = rgb(bd93f9) rgb(44475a) 90deg + col.inactive = rgba(282a36dd) + } +} +windowrulev2 = bordercolor rgb(ff5555),xwayland:1 # check if window is xwayland diff --git a/.dot-files-laptop/.config/hypr/hyprlock.conf b/.dot-files-laptop/.config/hypr/hyprlock.conf new file mode 100644 index 0000000..3922780 --- /dev/null +++ b/.dot-files-laptop/.config/hypr/hyprlock.conf @@ -0,0 +1,107 @@ +# BACKGROUND +background { + monitor = + path = ~/.wallpapers/castlevania.png + blur_size = 3 + blur_passes = 2 + noise = 0.06 + contrast = 0.8 + brightness = 0.5 + vibrancy = 0.2 + vibrancy_darkness = 0.2 +} + +# GENERAL +general { + no_fade_in = false + grace = 0 + disable_loading_bar = false +} + +# Profie-Photo +image { + monitor = + path = ~/.face + border_size = 2 + border_color = rgba(248, 248, 242, 0.8) + size = 200 + rounding = -1 + rotate = 0 + reload_time = -1 + reload_cmd = + position = 0, 20 + halign = center + valign = center + shadow_passes = 2 + shadow_size = 4 +} + +# Day-Month-Date +label { + monitor = + text = cmd[update:1000] echo -e "$(date +"%A, %B %d")" + color = rgba(255, 121, 198, 0.70) + font_size = 25 + font_family = Droid Sans Font, Font Awesome, Roboto, FreeSans, FreeSerif + position = 0, 350 + halign = center + valign = center +} + +# Time +label { + monitor = + text = cmd[update:1000] echo "$(date +"%I:%M")" + color = rgba(139, 233, 253, 0.70) + font_size = 120 + font_family = Droid Sans Font, Font Awesome, Roboto, FreeSans, FreeSerif + position = 0, 250 + halign = center + valign = center +} + +# USER +label { + monitor = + text =  Peter Domínguez + color = rgba(248, 248, 242, 0.80) + font_size = 20 + font_family = Droid Sans Font, Font Awesome, Roboto, FreeSans, FreeSerif + position = 0, -130 + halign = center + valign = center +} + +# INPUT FIELD +input-field { + monitor = + size = 300, 60 + outline_thickness = 2 + dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8 + dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0 + dots_center = true + outer_color = rgba(0, 0, 0, 0) + inner_color = rgba(40, 42, 54, 0.5) + font_color = rgb(68,71,90) + check_color = rgba(255, 184, 108, 0.6) + fail_color = rgba(255, 85, 85, 0.6) + fade_on_empty = false + placeholder_text = 󰌾 Enter Password + fail_text =  Login failed! Attempt(s): $ATTEMPTS + hide_input = false + position = 0, -210 + halign = center + valign = center +} + +# CURRENT SONG +label { + monitor = + text = cmd[update:1000] echo "$(~/.bin/sh/songdetail.sh)" + color = rgba(189, 147, 249, 0.8) + font_size = 18 + font_family = Droid Sans Font, Font Awesome, Roboto, FreeSans, FreeSerif + position = 0, 50 + halign = center + valign = bottom +} diff --git a/.dot-files-laptop/.config/hypr/hyprpaper.conf b/.dot-files-laptop/.config/hypr/hyprpaper.conf new file mode 100644 index 0000000..6e5b801 --- /dev/null +++ b/.dot-files-laptop/.config/hypr/hyprpaper.conf @@ -0,0 +1,5 @@ +preload = /home/peter/.wallpapers/castlevania.png +wallpaper = eDP-1,/home/peter/.wallpapers/castlevania.png +splash = false +#fully disable ipc +# ipc = off diff --git a/.dot-files-laptop/.config/kitty/diff.conf b/.dot-files-laptop/.config/kitty/diff.conf new file mode 100644 index 0000000..5fec447 --- /dev/null +++ b/.dot-files-laptop/.config/kitty/diff.conf @@ -0,0 +1,19 @@ +foreground #f8f8f2 +background #282a36 +title_fg #f8f8f2 +title_bg #282a36 +margin_bg #6272a4 +margin_fg #44475a +removed_bg #ff5555 +highlight_removed_bg #ff5555 +removed_margin_bg #ff5555 +added_bg #50fa7b +highlight_added_bg #50fa7b +added_margin_bg #50fa7b +filler_bg #44475a +hunk_margin_bg #44475a +hunk_bg #bd93f9 +search_bg #8be9fd +search_fg #282a36 +select_bg #f1fa8c +select_fg #282a36 diff --git a/.dot-files-laptop/.config/kitty/dracula.conf b/.dot-files-laptop/.config/kitty/dracula.conf new file mode 100644 index 0000000..9f7a61d --- /dev/null +++ b/.dot-files-laptop/.config/kitty/dracula.conf @@ -0,0 +1,67 @@ +# https://draculatheme.com/kitty +# +# Installation instructions: +# +# cp dracula.conf ~/.config/kitty/ +# echo "include dracula.conf" >> ~/.config/kitty/kitty.conf +# +# Then reload kitty for the config to take affect. +# Alternatively copy paste below directly into kitty.conf + +foreground #f8f8f2 +background #282a36 +background_opacity 0.5 +selection_foreground #ffffff +selection_background #44475a + +url_color #8be9fd + +# black +color0 #21222c +color8 #6272a4 + +# red +color1 #ff5555 +color9 #ff6e6e + +# green +color2 #50fa7b +color10 #69ff94 + +# yellow +color3 #f1fa8c +color11 #ffffa5 + +# blue +color4 #bd93f9 +color12 #d6acff + +# magenta +color5 #ff79c6 +color13 #ff92df + +# cyan +color6 #8be9fd +color14 #a4ffff + +# white +color7 #f8f8f2 +color15 #ffffff + +# Cursor colors +cursor #f8f8f2 +cursor_text_color background + +# Tab bar colors +active_tab_foreground #282a36 +active_tab_background #f8f8f2 +inactive_tab_foreground #282a36 +inactive_tab_background #6272a4 + +# Marks +mark1_foreground #282a36 +mark1_background #ff5555 + +# Splits/Windows +active_border_color #f8f8f2 +inactive_border_color #6272a4 diff --git a/.dot-files-laptop/.config/kitty/kitty.conf b/.dot-files-laptop/.config/kitty/kitty.conf new file mode 100644 index 0000000..da6ed2b --- /dev/null +++ b/.dot-files-laptop/.config/kitty/kitty.conf @@ -0,0 +1,126 @@ +# ┌───────────────────────────────────────────────────┐ +# │ ██████╗ ███████╗████████╗███████╗██████╗ ███████╗ │ +# │ ██╔══██╗██╔════╝╚══██╔══╝██╔════╝██╔══██╗██╔════╝ │ +# │ ██████╔╝█████╗ ██║ █████╗ ██████╔╝███████╗ │ +# │ ██╔═══╝ ██╔══╝ ██║ ██╔══╝ ██╔══██╗╚════██║ │ +# │ ██║ ███████╗ ██║ ███████╗██║ ██║███████║ │ +# │ ╚═╝ ╚══════╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚══════╝ │ +# ├───────────────────────────────────────────────────┤ +# │ only small, mediocre thing: his kitty.conf file │ +# ├───────────────────────────────────────────────────┤ +# │Shorter than a default config, yet twice the autism│ +# │---------------------------------------------------│ +# │ https://gitlab.com/putridpete/dot-files │ +# └───────────────────────────────────────────────────┘ + +# 1. Color Scheme +# ======================== + +include dracula.conf + +# 2. Font +# ======================== + +font_family Droid Sans Font +bold_font auto +italic_font auto +bold_italic_font auto +font_size 12.5 + +# 3. Cursor +# ======================== + +cursor #d67fa2 +cursor_shape underline +cursor_beam_thickness 9.0 +shell_integration no-cursor + +# 4. Mouse +# ======================== + +copy_on_select yes +url_style dotted +url_color #7fd67f +focus_follows_mouse yes + +# 5. Terminal bell +# ======================== + +enable_audio_bell no +bell_on_tab "󰂞 " + +# 6. Window layout +# ======================== + +window_border_width 1.2pt +enabled_layouts tall,fat,horizontal,splits,vertical,grid +active_border_color #6272a4 +inactive_border_color #262733 + +# 7. Tab bar +# ======================== + +tab_bar_edge top +tab_bar_style powerline +tab_bar_background #343850 +active_tab_background #ff79c6 +active_tab_foreground #262733 +inactive_tab_background #44475a +inactive_tab_foreground #f8f8f2 + +# 8. Advanced +# ======================== + +# startup_session ~/.config/kitty/session +allow_remote_control yes +repaint_delay 1 +sync_to_monitor yes + +# 9. OS specific tweaks +# ======================== + +linux_display_server wayland + +# 10. Keyboard shortcuts +# ======================== +map alt+h previous_tab +map alt+l next_tab +map alt+n new_tab +map alt+b set_tab_title +map alt+x close_tab +map ctrl+shift+k scroll_line_up +map ctrl+shift+j scroll_line_down +map alt+enter new_window +map alt+\ close_window +map ctrl+h previous_window +map ctrl+l next_window +map ctrl+[ layout_action decrease_num_full_size_windows +map ctrl+] layout_action increase_num_full_size_windows +map ctrl+/ layout_action mirror toggle +map ctrl+y layout_action mirror true +map ctrl+n layout_action mirror false +map ctrl+alt+t goto_layout tall +map ctrl+alt+f goto_layout fat +map ctrl+alt+h goto_layout horizontal +map ctrl+alt+s goto_layout splits +map ctrl+alt+v goto_layout vertical +map ctrl+alt+g goto_layout grid +map ctrl+alt+. move_tab_forward +map ctrl+alt+, move_tab_backward +map ctrl+f1 launch zsh -c "source ~/.zshrc;nnn -deUxH" +map ctrl+f2 launch newsboat +map ctrl+f3 launch kitty +kitten ssh debianbox +map ctrl+f4 launch kitty +kitten ssh debian11 +map ctrl+f5 launch vim ~/.config/waybar/style.css +map ctrl+f6 launch vim ~/.config/waybar/config +map ctrl+f7 launch vim ~/.config/hypr/hyprland.conf +map ctrl+f8 launch vim ~/.zshrc +map ctrl+f9 launch vim ~/.config/kitty/session +map ctrl+f10 launch vim ~/.config/kitty/kitty.conf +map shift+alt+left resize_window narrower +map shift+alt+right resize_window wider +map shift+alt+up resize_window taller +map shift+alt+down resize_window shorter 3 +map ctrl+alt+] next_window +map ctrl+alt+[ previous_window + diff --git a/.dot-files-laptop/.config/kitty/session b/.dot-files-laptop/.config/kitty/session new file mode 100644 index 0000000..719abf5 --- /dev/null +++ b/.dot-files-laptop/.config/kitty/session @@ -0,0 +1,15 @@ +new_tab  +cd ~ +launch zsh -c "source ~/.zshrc;nnn -deUxH" +new_tab 󱀂 +launch newsboat +new_tab 󱞁 +launch --env EDITOR=vim glow -s dracula /mnt/M2/Nextcloud/Notes +new_tab  +launch ttyper +new_tab 1󰇅 +launch kitty +kitten ssh debianbox +new_tab 2󰇅 +launch kitty +kitten ssh debbie +new_tab 3󰇅 +launch kitty +kitten ssh debian11 diff --git a/.dot-files-laptop/.config/sway/config b/.dot-files-laptop/.config/sway/config new file mode 100644 index 0000000..295689d --- /dev/null +++ b/.dot-files-laptop/.config/sway/config @@ -0,0 +1,361 @@ +# ┌───────────────────────────────────────────────────┐ +# │ ██████╗ ███████╗████████╗███████╗██████╗ ███████╗ │ +# │ ██╔══██╗██╔════╝╚══██╔══╝██╔════╝██╔══██╗██╔════╝ │ +# │ ██████╔╝█████╗ ██║ █████╗ ██████╔╝███████╗ │ +# │ ██╔═══╝ ██╔══╝ ██║ ██╔══╝ ██╔══██╗╚════██║ │ +# │ ██║ ███████╗ ██║ ███████╗██║ ██║███████║ │ +# │ ╚═╝ ╚══════╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚══════╝ │ +# ├───────────────────────────────────────────────────┤ +# │ depressing and totally messy sway config or │ +# ├───────────────────────────────────────────────────┤ +# │ How windows are the only well │ +# │ managed aspect of my life. │ +# │---------------------------------------------------│ +# │ https://gitlab.com/putridpete/dot-files │ +# └───────────────────────────────────────────────────┘ +# +# Logo key. Use Mod1 for Alt. + +set $mod Mod4 + +# Home row direction keys, like vim + +set $left h +set $down j +set $up k +set $right l + +# Terminal emulator + +set $term kitty + +# Application launcher + +set $menu exec wofi -I +set $nmtui exec foot -a launcher -e nmtui +set $htop exec foot -a launcher -e htop +set $nvtop exec foot -a launcher -e nvtop + +# Output configuration + +output eDP-1 { + #options + mode 1920x1080@60.020Hz scale 1.07777777 + position 0,0 + bg ~/.wallpapers/castlevania.png fill +} + +# Brightness control + +bindsym --locked XF86MonBrightnessUp exec brightnessctl s 10%+ +bindsym --locked XF86MonBrightnessDown exec brightnessctl s 10%- + +# Volume control + +bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle +bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +10% +bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -10% +bindsym XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle + + +# Input + +input "type:keyboard" { + #options + xkb_layout us(altgr-intl) + xkb_variant ,nodeadkeys + xkb_options caps:escape +} + +input "type:touchpad" { + dwt enabled + tap enabled + middle_emulation enabled +} + +# Key Bindings | Note: You can get the names of your inputs by running: swaymsg -t get_inputs + + # Start a terminal + bindsym $mod+Return exec $term + + # Kill focused window + bindsym $mod+q kill + # Screenshot + bindsym Print exec grim -g "$(slurp)" - | swappy -f - + # Toggle control center + bindsym $mod+Shift+n exec swaync-client -t -sw + # Start launcher + #bindsym $mod+d exec "dmenu_run -nf '#F8F8F2' -nb '#282A36' -sb '#6272A4' -sf '#F8F8F2' -fn 'monospace-10' -p 'dmenu'" + bindsym $mod+p exec $menu + bindsym $mod+Alt+n exec $nmtui + bindsym $mod+Alt+j exec $nvtop + bindsym $mod+m exec feishin --enable-features=UseOzonePlatform --ozone-platform=wayland + bindsym $mod+g exec galculator + bindsym $mod+c exec gsimplecal + bindsym $mod+Ctrl+p exec swaylock -f + bindsym $mod+Alt+v for_window [app_id="mpv"] floating enable, move absolute position 1270 710 + + # mouse button for dragging. + floating_modifier $mod normal + + # Reload the configuration file + bindsym $mod+r reload + + # Exit sway (logs you out of your Wayland session) + bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit' + +# Moving around: + + # Move your focus around + bindsym $mod+$left focus left + bindsym $mod+$down focus down + bindsym $mod+$up focus up + bindsym $mod+$right focus right + # Or use $mod+[up|down|left|right] + bindsym $mod+Left focus left + bindsym $mod+Down focus down + bindsym $mod+Up focus up + bindsym $mod+Right focus right + + # Move the focused window with $mod+Ctrl + bindsym $mod+Ctrl+$left move left + bindsym $mod+Ctrl+$down move down + bindsym $mod+Ctrl+$up move up + bindsym $mod+Ctrl+$right move right + # Ditto, with arrow keys + bindsym $mod+Ctrl+Left move left + bindsym $mod+Ctrl+Down move down + bindsym $mod+Ctrl+Up move up + bindsym $mod+Ctrl+Right move right + +# Workspaces: + + # Switch to workspace + bindsym $mod+1 workspace number 1 + bindsym $mod+2 workspace number 2 + bindsym $mod+3 workspace number 3 + bindsym $mod+4 workspace number 4 + bindsym $mod+5 workspace number 5 + bindsym $mod+6 workspace number 6 + bindsym $mod+7 workspace number 7 + bindsym $mod+8 workspace number 8 + bindsym $mod+9 workspace number 9 + bindsym $mod+0 workspace number 10 + bindsym $mod+minus workspace number 11 + bindsym $mod+equal workspace number 12 + + # Move focused container to workspace + bindsym $mod+Ctrl+1 move container to workspace number 1 + bindsym $mod+Ctrl+2 move container to workspace number 2 + bindsym $mod+Ctrl+3 move container to workspace number 3 + bindsym $mod+Ctrl+4 move container to workspace number 4 + bindsym $mod+Ctrl+5 move container to workspace number 5 + bindsym $mod+Ctrl+6 move container to workspace number 6 + bindsym $mod+Ctrl+7 move container to workspace number 7 + bindsym $mod+Ctrl+8 move container to workspace number 8 + bindsym $mod+Ctrl+9 move container to workspace number 9 + bindsym $mod+Ctrl+0 move container to workspace number 10 + bindsym $mod+Ctrl+minus move container to workspace number 11 + bindsym $mod+Ctrl+equal move container to workspace number 12 + +# Switch to prev/next workspace on all outputs + bindsym $mod+Alt+Right workspace next + bindsym $mod+Alt+Left workspace prev + bindsym $mod+Alt+l workspace next + bindsym $mod+Alt+h workspace prev + + + +# Layout stuff: + + + bindsym $mod+b splith + bindsym $mod+v splitv + + # Switch the current container between different layout styles + bindsym $mod+s layout stacking + bindsym $mod+w layout tabbed + bindsym $mod+e layout toggle split + + # Make the current focus fullscreen + bindsym $mod+f fullscreen + + # Toggle the current focus between tiling and floating mode + bindsym $mod+Ctrl+space floating toggle + + # Swap focus between the tiling area and the floating area + bindsym $mod+space focus mode_toggle + + # Move focus to the parent container + bindsym $mod+a focus parent + +# Scratchpad: + + # Move the currently focused window to the scratchpad + bindsym $mod+grave move scratchpad + + # Show the next scratchpad window or hide the focused scratchpad window. + # If there are multiple scratchpad windows, this command cycles through them. + + bindsym $mod+tab scratchpad show + +# Resizing containers: + +mode "resize" { + # left will shrink the containers width + # right will grow the containers width + # up will shrink the containers height + # down will grow the containers height + bindsym $left resize shrink width 10px + bindsym $down resize grow height 10px + bindsym $up resize shrink height 10px + bindsym $right resize grow width 10px + + # Ditto, with arrow keys + bindsym Left resize shrink width 10px + bindsym Down resize grow height 10px + bindsym Up resize shrink height 10px + bindsym Right resize grow width 10px + + # Return to default mode + bindsym Return mode "default" + bindsym Escape mode "default" +} + +# GTK theme + +set $gnome-schema org.gnome.desktop.interface + +# Status Bar: + +bar { + #position top + mode invisible + + # When the status_command prints a new line to stdout, swaybar updates. + # The default just shows the current date and time. + #status_command while date +'%A, %d-%m-%Y %H:%M %j'; do sleep 1; done + # + status_command waybar + workspace_buttons yes + + colors { + background #282A36 + statusline #F8F8F2 + separator #44475A + + focused_workspace #44475A #44475A #F8F8F2 + active_workspace #282A36 #44475A #F8F8F2 + inactive_workspace #282A36 #282A36 #BFBFBF + urgent_workspace #FF5555 #FF5555 #F8F8F2 + binding_mode #FF5555 #FF5555 #F8F8F2 + } +} + +include /etc/sway/config.d/* + +# class border bground text indicator child_border +client.focused #6272A4 #6272A4 #F8F8F2 #6272A4 #6272A4 +client.focused_inactive #44475A #44475A #F8F8F2 #44475A #44475A +client.unfocused #282A36 #282A36 #BFBFBF #282A36 #282A36 +client.urgent #44475A #FF5555 #F8F8F2 #FF5555 #FF5555 +client.placeholder #282A36 #282A36 #F8F8F2 #282A36 #282A36 + +client.background #F8F8F2 + +gaps inner 10 +default_border pixel 2 +default_floating_border pixel 2 + +# Workspaces + +workspace 1 output eDP-1 +workspace 2 output eDP-1 +workspace 3 output eDP-1 +workspace 4 output eDP-1 +workspace 5 output eDP-1 +workspace 6 output eDP-1 +workspace 7 output eDP-1 +workspace 8 output eDP-1 +workspace 9 output eDP-1 +workspace 10 output eDP-1 +workspace 11 output eDP-1 +workspace 12 output eDP-1 + +# Auto exec + +### Variables +exec systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP +exec --no-startup-id dbus-update-activation-environment --all + +### Polkit Agent +exec /usr/lib/polkit-kde-authentication-agent-1 + +### Autotiling +exec autotiling-rs + +### Notification Daemon +exec swaync + +### Idle configuration +exec swayidle -w timeout 1800 'swaylock -f' timeout 1805 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' + +# Cursor +seat seat0 xcursor_theme Dracula-cursors + +# Lock screen after closing lid + +set $lock 'swaylock -f' +bindswitch --reload --locked lid:on exec $lock + +### Dracula theme +exec_always { + gsettings set $gnome-schema gtk-theme 'Dracula' + gsettings set $gnome-schema icon-theme 'Papirus-Dark' + gsettings set $gnome-schema cursor-theme 'Dracula-cursors' +} + +### General +exec nextcloud +exec openrgb --startminimized +exec swaymsg "workspace 1; exec firefox" +exec steam-runtime +exec jellyfinmediaplayer +exec virt-manager +exec kdenlive +exec gimp +exec keepassxc +exec feishin --enable-features=UseOzonePlatform --ozone-platform=wayland +exec heroic --ozone-platform=wayland +exec libreoffice --writer --norestore +exec signal-desktop --ozone-platform-hint=auto --enable-features=UseOzonePlatform,WaylandWindowDecorations +exec swaymsg "workspace 2; exec kitty --session ~/.config/kitty/session --listen-on=unix:@mykitty" + +# Window managment + +focus_on_window_activation urgent +focus_follows_mouse yes +xwayland disable + +assign [app_id="mpv"] output eDP-1 +assign [app_id="org.jellyfin.jellyfinmediaplayer"] workspace number 3 +assign [app_id="gimp"] workspace number 5 +assign [app_id="libreoffice-writer"] workspace number 4 +#assign [class="Signal"] workspace number 7 +for_window [app_id="signal"] floating enable, resize set 1280 px 768 px, move scratchpad +for_window [app_id="nextcloud"] floating enable, resize set 600 px 800 px, move absolute position 1320 40 +for_window [app_id="nm-connection-editor"] floating enable, move absolute position 670 40 +for_window [app_id="gsimplecal"] floating enable, move absolute position 830 40 +for_window [app_id="org.keepassxc.KeePassXC"] floating enable, floating enable, move scratchpad, scratchpad show +for_window [app_id="pavucontrol"] floating enable, move absolute position 1320 40, resize set 600 px 800 px +for_window [app_id="galculator"] floating enable, move scratchpad, scratchpad show +for_window [app_id="org.kde.polkit-kde-authentication-agent-1"] floating enable +#for_window [app_id="org.rncbc.qsynth"] floating enable, resize 1280 ppt 768 ppt +#for_window [app_id="signal"] resize set 633 px, move left, urgent deny +#for_window [class="Signal"] resize set 633 px, move left, urgent deny +for_window [app_id="feishin"] floating enable, resize set 1600 px 900 px, move scratchpad +for_window [class="steam"] floating enable +for_window [title="Steam"] floating disable +for_window [app_id="mpv"] floating enable, resize set 640 px 320 px, move absolute position 1270 710, move scratchpad, scratchpad show +for_window [app_id="xdg-desktop-portal-gtk"] floating enable, resize set 800 px 600px +for_window [app_id="^launcher$"] floating enable, sticky enable, resize set 46 ppt 60 ppt, border pixel 5 diff --git a/.dot-files-laptop/.config/swaylock/config b/.dot-files-laptop/.config/swaylock/config new file mode 100644 index 0000000..41b0c78 --- /dev/null +++ b/.dot-files-laptop/.config/swaylock/config @@ -0,0 +1,29 @@ +image=~/.wallpapers/castlevania2.png +color=282a36 +inside-color=1F202A +line-color=1F202A +ring-color=bd93f9 +text-color=f8f8f2 + +layout-bg-color=1F202A +layout-text-color=f8f8f2 + +inside-clear-color=6272a4 +line-clear-color=1F202A +ring-clear-color=6272a4 +text-clear-color=1F202A + +inside-ver-color=bd93f9 +line-ver-color=1F202A +ring-ver-color=bd93f9 +text-ver-color=1F202A + +inside-wrong-color=ff5555 +line-wrong-color=1F202A +ring-wrong-color=ff5555 +text-wrong-color=1F202A + +bs-hl-color=ff5555 +key-hl-color=50fa7b + +text-caps-lock-color=f8f8f2 diff --git a/.dot-files-laptop/.config/waybar/config b/.dot-files-laptop/.config/waybar/config new file mode 100644 index 0000000..efc1095 --- /dev/null +++ b/.dot-files-laptop/.config/waybar/config @@ -0,0 +1,270 @@ +[{ + "output": "DP-1", + "layer": "top", + "modules-left": ["hyprland/workspaces", "hyprland/mode"], + "modules-center": ["hyprland/window"], + "modules-right": ["mpris"], + + "mpris": { + "format": "{player_icon} {dynamic}", + "format-paused": "{status_icon} {dynamic}", + "tooltip-format": "󰠃 {artist}:  {title} (󰀥 {album})", + "interval": 1, + "album-len": 0, + "player-icons": { + "default": "", + "mpv": "" + }, + "status-icons": { + "paused": "" + }, +// "ignored-players": ["firefox"] + }, + "hyprland/window": { + "format": "{title} ", + "max-length": 60, + "icon": true, + "icon-size": 20, + "all-outputs" : true, + }, + // "hyprland/workspaces": { + // "format": "{icon}", + // "on-click": "activate", + // "format-icons": { + // "1": "󰈹", + // "2": "󰼂", + // "3": "󰷈", + // "4": "󱇤", + // "5": "󱜀", + // "6": "", + // }, + // "sort-by-number": true + //}, + }, { + "output": "eDP-1", + "layer": "top", + "modules-left": ["hyprland/workspaces", "hyprland/mode"], + "modules-center": ["custom/gpu-usage", "cpu", "memory", "temperature", "network#wifi", "network#lan", "custom/vpn", "clock", "custom/weather", "idle_inhibitor", "custom/pacman", "battery", "battery#2", "bluetooth", "backlight", "disk", "disk#disk2", "disk#disk3", "disk#disk4"], + /* "modules-right": ["tray", "pulseaudio",], */ + "modules-right": ["tray", "pulseaudio", "group/group-power"], + + "hyprland/mode": { + "format": " 󰹶 {}" + }, + "hyprland/workspaces": { + "format": "{icon}", + "on-click": "activate", + "format-icons": { + "1": "󰈹", + "2": "", + "3": "󰷈", + "4": "󱇤", + "5": "󰙵", + "6": "󰙵", + "7": "󰙵", + "8": "󰙵", + }, + "sort-by-number": true + }, + "custom/pacman": { + "format": "󰣇 {}", + "tooltip": false, + "interval": 60, + "exec": "checkupdates | wc -l", + "exec-if": "exit 0", + "signal": 8 + }, + "backlight": { + "device": "intel_backlight", + "format": "{icon} {percent}%", + "format-icons": ["", "󰃟", "󰃠"] + }, + "battery": { + "bat": "BAT1", + "weighted-average": true, + "interval": 60, + "full-at": 84, + "states": { + "warning": 30, + "critical": 15 + }, + "format": "{icon} {capacity}%", + "format-icons": ["", "", "", "", ""], + "max-length": 25 + }, + "battery#2": { + "bat": "BAT0", + "weighted-average": true, + "interval": 60, + "full-at": 84, + "states": { + "warning": 30, + "critical": 15 + }, + "format": "{icon} {capacity}%", + "format-icons": ["", "", "", "", ""], + "max-length": 25 + }, + + "group/group-power": { + "orientation": "inherit", + "drawer": { + "transition-duration": 500, + "children-class": "not-power", + "transition-left-to-right": false, + }, + "modules": [ + "custom/power", + "custom/lock", + "custom/reboot", + ] + }, + "custom/lock": { + "format": " 󰍁 ", + "tooltip": false, + "on-click": "hyprlock" + }, + "custom/reboot": { + "format": " 󰜉 ", + "tooltip": false, + "on-click": "shutdown -r now" + }, + "custom/power": { + "format": "  ", + "tooltip": false, + "on-click": "shutdown -h now" + }, + "network#lan": { + "interface": "enp0s31f6", + "format": "", + "interval": 1, + "format-ethernet": "{ifname}", + "format-disconnected": "", + "max-length": 50, + "tooltip-format": "speed:  {bandwidthDownBytes} /  {bandwidthUpBytes}", + "on-click": "kitty --class nmnet --single-instance -e nmtui", + "on-click-right": "nm-connection-editor" + + }, + "network#wifi": { + "interface": "wlp3s0", + "format": "", + "interval": 1, + "format-wifi": "{essid} ({signalStrength}%) ", + "format-disconnected": "󰖪", + "max-length": 50, + "tooltip-format": "speed:  {bandwidthDownBytes} /  {bandwidthUpBytes}", + "on-click": "kitty --class nmnet --single-instance -e nmtui", + "on-click-right": "nm-connection-editor" + + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "", + "deactivated": "" + }, + "on-click": "toggleRemote" + }, + "tray": { + "icon-size": 20, + "spacing": 6 + }, + "clock": { + "format": "󱑏 {:%I:%M:%OS}", + "interval": 1, + "tooltip-format": " {:%d/%m/%y}", + // "format-alt": "{:%Y-%m-%d}" + "on-click": "gsimplecal" + }, + "cpu": { + "interval": 10, + "format": "{icon} {usage}%", + "format-icons": [""] + }, + "memory": { + "format": "{icon} {percentage}%", + "format-icons": [""] + }, + "temperature": { + // "thermal-zone": 2, + "hwmon-path": "/sys/class/hwmon/hwmon1/temp1_input", + // "critical-threshold": 80, + // "format-critical": " {temperatureC}°C", + "format": " {temperatureC}°C", + "tooltip": false, + }, + "disk": { + "interval": 30, + "format": "󰋊 /: {percentage_used}%", + "path": "/" + }, + "disk#disk2": { + "interval": 30, + "format": "󰋊 ~: {percentage_used}%", + "path": "/home/peter" + }, + "disk#disk3": { + "interval": 30, + "format": "󰋊 SSD: {percentage_used}%", + "path": "/mnt/SSD" + }, + "disk#disk4": { + "interval": 30, + "format": "󰋊 Backups: {percentage_used}%", + "path": "/mnt/Backups" + }, + "pulseaudio": { + "format": "{volume}% {icon}", + "format-bluetooth": "{volume}% {icon}  {format_source}", + "format-bluetooth-muted": " {icon}  {format_source}", + "format-muted": "0% {icon}", + "format-source": "{volume}% ", + "format-source-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "󰖀", "󰕾", ""] + }, + "on-click": "pavucontrol" + }, + "bluetooth": { + "format": " {status}", + "format-connected": " connected", + "format-connected-battery": " Connected {device_battery_percentage}%", + "on-click": "blueman-manager", + // "format-device-preference": [ "device1", "device2" ], // preference list deciding the displayed device + "tooltip-format": "{controller_alias}\t{controller_address}\n\n{num_connections} connected", + "tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}", + "tooltip-format-enumerate-connected": "{device_alias}\t{device_address}", + "tooltip-format-enumerate-connected-battery": "{device_alias}\t{device_address}\t{device_battery_percentage}%" + }, +"custom/vpn": { + "format": " VPN", + "tooltip": false, + "exec": "echo '{\"class\": \"connected\"}'", + "exec-if": "test -d /proc/sys/net/ipv4/conf/tun0", + "return-type": "json", + "on-click": "kitty --class nmnet --single-instance -e nmtui", + "interval": 5 +}, + "custom/weather": { + "exec": "python ~/.config/waybar/scripts/weather.py", + "restart-interval": 300, + "format": "{}", + "return-type": "json", + "on-click": "xdg-open https://weather.com/en-IN/weather/today/l/e42bb25a58c2e689ec85e632d82e69d7e46c82defb9ad7a5551b6c3a70fbc282" + // "format-alt": "{alt}", +}, + "custom/gpu-usage": { + "exec": "cat /sys/class/hwmon/hwmon1/device/gpu_busy_percent", + "format": "󰍹 {}%", + "return-type": "", + "interval": 1, + "tooltip": false + }, +}] diff --git a/.dot-files-laptop/.config/waybar/scripts/weather.py b/.dot-files-laptop/.config/waybar/scripts/weather.py new file mode 100755 index 0000000..41a532d --- /dev/null +++ b/.dot-files-laptop/.config/waybar/scripts/weather.py @@ -0,0 +1,125 @@ +#!/usr/bin/env python + +import subprocess +from pyquery import PyQuery # install using `pip install pyquery` +import json + +# weather icons +weather_icons = { + "sunnyDay": "󰖨", + "clearNight": "󰖔", + "cloudyFoggyDay": "󰖕", + "cloudyFoggyNight": "", + "rainyDay": "󰼳", + "rainyNight": "", + "snowyIcyDay": "󰼴", + "snowyIcyNight": "󰖘", + "severe": "󰢘", + "default": "", +} + +# get location_id +# to get your own location_id, go to https://weather.com & search your location. +# once you choose your location, you can see the location_id in the URL(64 chars long hex string) +# like this: https://weather.com/en-IN/weather/today/l/c3e96d6cc4965fc54f88296b54449571c4107c73b9638c16aafc83575b4ddf2e +location_id = "e42bb25a58c2e689ec85e632d82e69d7e46c82defb9ad7a5551b6c3a70fbc282" # TODO +# location_id = "8139363e05edb302e2d8be35101e400084eadcecdfce5507e77d832ac0fa57ae" + +# priv_env_cmd = 'cat $PRIV_ENV_FILE | grep weather_location | cut -d "=" -f 2' +# location_id = subprocess.run( +# priv_env_cmd, shell=True, capture_output=True).stdout.decode('utf8').strip() + +# get html page +url_fetch = "https://weather.com/en-IN/weather/today/l/" + location_id +html_data = PyQuery(url=url_fetch) + +# current temperature +temp = html_data("span[data-testid='TemperatureValue']").eq(0).text() +# print(temp) + +# current status phrase +status = html_data("div[data-testid='wxPhrase']").text() +status = f"{status[:16]}.." if len(status) > 17 else status +# print(status) + +# status code +status_code = html_data("#regionHeader").attr("class").split(" ")[2].split("-")[2] +# print(status_code) + +# status icon +icon = ( + weather_icons[status_code] + if status_code in weather_icons + else weather_icons["default"] +) +# print(icon) + +# temperature feels like +temp_feel = html_data( + "div[data-testid='FeelsLikeSection'] > span > span[data-testid='TemperatureValue']" +).text() +temp_feel_text = f"Feels like {temp_feel}C" +# print(temp_feel_text) + +# min-max temperature +temp_min = ( + html_data("div[data-testid='wxData'] > span[data-testid='TemperatureValue']") + .eq(0) + .text() +) +temp_max = ( + html_data("div[data-testid='wxData'] > span[data-testid='TemperatureValue']") + .eq(1) + .text() +) +temp_min_max = f" {temp_min}\t\t {temp_max}" +# print(temp_min_max) + +# wind speed +wind_speed = html_data("span[data-testid='Wind']").text().split("\n")[1] +wind_text = f" {wind_speed}" +# print(wind_text) + +# humidity +humidity = html_data("span[data-testid='PercentageValue']").text() +humidity_text = f" {humidity}" +# print(humidity_text) + +# visibility +visbility = html_data("span[data-testid='VisibilityValue']").text() +visbility_text = f" {visbility}" +# print(visbility_text) + +# air quality index +air_quality_index = html_data("text[data-testid='DonutChartValue']").text() +# print(air_quality_index) + +# hourly rain prediction +prediction = html_data("section[aria-label='Hourly Forecast']")( + "div[data-testid='SegmentPrecipPercentage'] > span" +).text() +prediction = prediction.replace("Chance of Rain", "") +prediction = f"\n\n  (hourly) {prediction}" if len(prediction) > 0 else prediction +# print(prediction) + +# tooltip text +tooltip_text = str.format( + "\t\t{}\t\t\n{}\n{}\n{}\n\n{}\n{}\n{}{}", + f'{temp}C 🇩🇴', + f"{icon}", + f"{status}", + f"{temp_feel_text}", + f"{temp_min_max}", + f"{wind_text}\t{humidity_text}", + f"{visbility_text}\tAQI {air_quality_index}", + f"{prediction}", +) + +# print waybar module data +out_data = { + "text": f"{icon} {temp}", + "alt": status, + "tooltip": tooltip_text, + "class": status_code, +} +print(json.dumps(out_data)) diff --git a/.dot-files-laptop/.config/waybar/style.css b/.dot-files-laptop/.config/waybar/style.css new file mode 100644 index 0000000..2a0fa39 --- /dev/null +++ b/.dot-files-laptop/.config/waybar/style.css @@ -0,0 +1,348 @@ +* { + border: none; + border-radius: 10; + font-family: "Droid Sans Font, Font Awesome, Roboto, FreeSans, FreeSerif" ; + font-size: 16px; + min-height: 10px; +} + +window#waybar { + background: transparent; +} + +window#waybar.hidden { + opacity: 0.2; +} + +#window { + margin-top: 6px; + padding-left: 10px; + padding-right: 10px; + border-radius: 10px; + transition: none; + color: transparent; + background: transparent; +} + +#mode { + color: #ff5555; +} + +#workspaces button { + margin-top: 6px; + margin-left: 8px; + padding-left: 8px; + padding-right: 8px; + margin-bottom: 0px; + border-radius: 10px; + transition: none; + background-color: transparent; +} +#workspaces button:hover { + box-shadow: inherit; + background-color: #282a36; +} + +#workspaces button.active { + background-color: #ff79c6; + color: #282a36; +} + + +#network { + margin-top: 6px; + margin-left: 8px; + padding-left: 10px; + padding-right: 10px; + margin-bottom: 0px; + border-radius: 10px; + transition: none; + color: #f8f8f2; + background: #282a36; +} + +#pulseaudio { + margin-top: 6px; + margin-left: 8px; + padding-left: 10px; + padding-right: 10px; + margin-bottom: 0px; + border-radius: 10px; + transition: none; + color: #282a36; + background: #50fa7b; +} + +#bluetooth { + margin-top: 6px; + margin-left: 8px; + padding-left: 10px; + padding-right: 10px; + margin-bottom: 0px; + border-radius: 10px; + transition: none; + color: #f8f8f2; + background: #282a36; +} + +#battery { + margin-top: 6px; + margin-left: 8px; + padding-left: 10px; + padding-right: 10px; + margin-bottom: 0px; + border-radius: 10px; + transition: none; + color: #f8f8f2; + background: #282a36; +} + +#battery.charging, #battery.plugged { + color: #f8f8f2; + background-color: #282a36; +} + +#battery.critical:not(.charging) { + background-color: #282a36; + color: #f8f8f2; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; +} + +@keyframes blink { + to { + background-color: #282a36; + color: #f8f8f2; + } +} + +#backlight { + margin-top: 6px; + margin-left: 8px; + padding-left: 10px; + padding-right: 10px; + margin-bottom: 0px; + border-radius: 10px; + transition: none; + color: #f8f8f2; + background: #282a36; +} +#clock { + margin-top: 6px; + margin-left: 6px; + padding-left: 8px; + padding-right: 3px; + margin-bottom: 0px; + border-radius: 10px; + transition: none; + color: #f8f8f2; + background: transparent; + /*background: #1A1826;*/ +} + +#memory { + margin-top: 6px; + margin-left: 8px; + padding-left: 10px; + margin-bottom: 0px; + padding-right: 10px; + border-radius: 10px; + transition: none; + color: #f8f8f2; + background: #282a36; +} +#cpu { + margin-top: 6px; + margin-left: 8px; + padding-left: 10px; + margin-bottom: 0px; + padding-right: 10px; + border-radius: 10px; + transition: none; + color: #f8f8f2; + background: #282a36; +} + +#tray { + margin-top: 6px; + margin-left: 8px; + padding-left: 10px; + margin-bottom: 0px; + padding-right: 10px; + border-radius: 10px; + transition: none; + color: #f8f8f2; + background: #5d4185; +} + +#disk { + margin-top: 6px; + margin-left: 8px; + padding-left: 10px; + padding-right: 10px; + margin-bottom: 0px; + border-radius: 10px; + transition: none; + color: #f8f8f2; + background: #282a36; +} + +#temperature { + margin-top: 6px; + margin-left: 8px; + padding-left: 10px; + padding-right: 10px; + margin-bottom: 0px; + border-radius: 10px; + transition: none; + color: #f8f8f2; + background: #282a36; +} + +#idle_inhibitor { + margin-top: 6px; + margin-left: 1px; + padding-left: 1px; + padding-right: 10px; + margin-bottom: 0px; + border-radius: 10px; +} + +#idle_inhibitor.activated { + color: #50fa7b; +} + +#custom-vpn { + margin-top: 6px; + margin-left: 8px; + padding-left: 10px; + padding-right: 10px; + margin-bottom: 0px; + border-radius: 10px; + transition: none; + color: #f8f8f2; + background: #282a36; +} + +#custom-weather { + margin-top: 6px; + margin-left: 3px; + padding-left: 3px; + padding-right: 8px; + margin-bottom: 0px; + border-radius: 10px; + transition: none; + color: #f8f8f2; + background: transparent; +} + +#custom-weather.severe { + color: #ff5555; +} + +#custom-weather.sunnyDay { + color: #f1fa8c; +} + +#custom-weather.clearNight { + color: #bd93f9; +} + +#custom-weather.cloudyFoggyDay, #custom-weather.cloudyFoggyNight { + color: #9599b4; +} + +#custom-weather.rainyDay, #custom-weather.rainyNight { + color: #8be9fd; +} + +#custom-weather.showyIcyDay, #custom-weather.snowyIcyNight { + color: #8be9fd; +} + +#custom-weather.default { + color: #f8f8f2; +} + +#custom-gpu-usage { + margin-top: 6px; + margin-left: 8px; + padding-left: 10px; + padding-right: 10px; + margin-bottom: 0px; + border-radius: 10px; + transition: none; + color: #f8f8f2; + background: #282a36; +} +#mpris { + margin-top: 6px; + margin-left: 8px; + padding-left: 10px; + padding-right: 6px; + margin-right: 6px; + margin-bottom: 0px; + border-radius: 10px; + transition: none; + color: #bd93f9; + background: #282a36; +} +#custom-scratchpad-indicator { + margin-top: 6px; + margin-left: 8px; + padding-left: 10px; + padding-right: 10px; + margin-bottom: 0px; + border-radius: 10px; + transition: none; + color: #f8f8f2; + background: #6272a4; +} +#custom-power { + margin-top: 6px; + margin-left: 8px; + padding-left: 7px; + padding-right: 7px; + margin-bottom: 0px; + margin-right: 6px; + border-radius: 10px; + transition: none; + color: #282A36; + background: #FF5555; +} +#custom-lock { + margin-top: 6px; + margin-left: 8px; + padding-left: 7px; + padding-right: 7px; + margin-bottom: 0px; + border-radius: 10px; + transition: none; + color: #282A36; + background: #FFB86C; +} +#custom-reboot { + margin-top: 6px; + margin-left: 8px; + padding-left: 7px; + padding-right: 7px; + margin-bottom: 0px; + border-radius: 10px; + transition: none; + color: #282A36; + background: #8BE9FD; +} +#custom-pacman { + margin-top: 6px; + margin-left: 8px; + padding-left: 7px; + padding-right: 7px; + margin-bottom: 0px; + border-radius: 10px; + transition: none; + color: #f8f2f2; + background: #282a36; +} diff --git a/.dot-files-laptop/.config/ytfzf/conf.sh b/.dot-files-laptop/.config/ytfzf/conf.sh new file mode 100755 index 0000000..6de9d26 --- /dev/null +++ b/.dot-files-laptop/.config/ytfzf/conf.sh @@ -0,0 +1,14 @@ +#!/bin/bash +YTFZF_ENABLE_FZF_DEFAULT_OPTS=1 +FZF_DEFAULT_OPTS="--color=border:magenta,info:green,header:green,info:yellow,hl:blue,label:magenta" +show_thumbnails=1 +load_thumbnail_viewer kitty +thumbnail_video_info_text () { + printf "\n${c_cyan}%s" "$title" + printf "\n " + printf "\n${c_blue}Channel ${c_green}%s" "$channel" + printf "\n${c_blue}Duration ${c_yellow}%s" "$duration" + printf "\n${c_blue}Views ${c_magenta}%s" "$views" + printf "\n${c_blue}Date ${c_cyan}%s" "$date" + printf "\n " +} diff --git a/.dot-files-laptop/.config/ytfzf/extensions/comments b/.dot-files-laptop/.config/ytfzf/extensions/comments new file mode 100644 index 0000000..e2f9155 --- /dev/null +++ b/.dot-files-laptop/.config/ytfzf/extensions/comments @@ -0,0 +1,30 @@ +#!/bin/sh + +get_search_from_EXT_comments (){ + _search="${selected_url}" +} + +set +f +instances=$(printf "%s\n" "${YTFZF_TEMP_DIR}"/*) +set -f + +instance_count=$(echo "$instances" | wc -l) + +if [ "$instance_count" -gt 1 ]; then + printf "%s\n" "More than 1 ytfzf instance is running, please select one" + echo "$instances" | sed 's/.*\///' | nl + read -r num + + instance="$(echo "$instances" | sed -n "${num}p")" +else + instance="$instances" +fi + +read -r selected_url < "${instance}/ids" + +[ -z "$selected_url" ] && { + printf "%s\n" "This instance is not playing a video" +} + +scrape="comments" +search_source="EXT_comments" diff --git a/.dot-files-laptop/.config/ytfzf/subscriptions b/.dot-files-laptop/.config/ytfzf/subscriptions new file mode 100644 index 0000000..99fef6c --- /dev/null +++ b/.dot-files-laptop/.config/ytfzf/subscriptions @@ -0,0 +1,35 @@ +https://www.youtube.com/channel/UC7YOGHUfC1Tb6E4pudI9STA # Mental Outlaw +https://www.youtube.com/channel/UCVls1GmFKf6WlTraIb_IaJg # DT +https://www.youtube.com/channel/UCbQ4fbi0fy3d6Hb7q2FIATw # itsagundam +https://www.youtube.com/channel/UCld68syR8Wi-GY_n4CaoJGA # Brodie +https://www.youtube.com/channel/UC5KDiSAFxrDWhmysBcNqtMA # Eric Murphy +https://www.youtube.com/channel/UCjSEJkpGbcZhvo0lr-44X_w # TechHut +https://www.youtube.com/channel/UCiP_FwGyJQ_6P8k5ON5mncQ # Matt McMuscles +https://www.youtube.com/channel/UC3ltptWa0xfrDweghW94Acg # Karl Jobst +https://www.youtube.com/channel/UCdJdEguB1F1CiYe7OEi3SBg # jontron +https://www.youtube.com/channel/UChIs72whgZI9w6d6FhwGGHA # Gamers Nexus +https://www.youtube.com/channel/UC0M0rxSz3IF0CsSour1iWmw # Cinemassacre +https://www.youtube.com/channel/UCmpaIXvID-FsN5xsUNolYAw # GTV Japan +https://www.youtube.com/channel/UCNeU-ameY0dcKiltExqvhIw # GOG +https://www.youtube.com/channel/UCGIY_O-8vW4rfX98KlMkvRg # Nintendo +https://www.youtube.com/channel/UCjBp_7RuDBUYbd1LegWEJ8g # Xbox +https://www.youtube.com/channel/UCWfXR0-F7MI-TbqikgEdJcQ # Sega +https://www.youtube.com/channel/UCvZHe-SP3xC7DdOk4Ri8QBw # Bethesda +https://www.youtube.com/channel/UC_ntXHv-XdKCD7CPynVvnQw # Bandai +https://www.youtube.com/channel/UCW7h-1mymnJ96akzjrmiIgA # Capcom +https://www.youtube.com/channel/UCnSp56qlKGr2lrPqyxtWGhw # 3D Realms +https://www.youtube.com/channel/UCFctpiB_Hnlk3ejWfHqSm6Q # Pokémon +https://www.youtube.com/channel/UCLx053rWZxCiYWsBETgdKrQ # LGR +https://www.youtube.com/channel/UChbPPu6LmY3VJzW4XTgvwgA # OhNoItsAlexx +https://www.youtube.com/channel/UCSE_JyJeiJQvg3RCnSD272Q # SmugAlana +https://www.youtube.com/channel/UCCAfRoTJrKPbSrh_Eg3i4vg # TomDark +https://www.youtube.com/channel/UCXoKg7Uvy4E7G3oW-Id5k1A # Acheeto +https://www.youtube.com/channel/UCtMVHI3AJD4Qk4hcbZnI9ZQ # SomeOrdinaryGamers +https://www.youtube.com/channel/UC3jSNmKWYA04R47fDcc1ImA # InfinitelyGalactic +https://www.youtube.com/channel/UC1s1OsWNYDFgbROPV-q5arg # Michael Horn +https://www.youtube.com/channel/UCl2mFZoRqjw_ELax4Yisf6w # Louis Rossmann +https://www.youtube.com/channel/UCSuHzQ3GrHSzoBbwrIq3LLA # Naomi Brockwell TV +https://www.youtube.com/channel/UCsVIQ2ipmCbua6s8ThFLo5A # Shrouded Hand +https://www.youtube.com/channel/UC3yaWWA9FF9OBog5U9ml68A # SavvyNik +https://www.youtube.com/channel/UCCzK4LJkDl73MQMbr8Lrcww # joeybtoonz +https://www.youtube.com/channel/UCQeRaTukNYft1_6AZPACnog # Asmongold TV diff --git a/.dot-files-laptop/.wallpapers/castlevania.png b/.dot-files-laptop/.wallpapers/castlevania.png new file mode 100644 index 0000000000000000000000000000000000000000..5834b729a40352a8acb447beb0e72ac58d5189a5 GIT binary patch literal 56954 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

n^z={_h~rGAnOHCyApA2t^$f^zzNhWEee)MU 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 bx%k`fUysi930;DTpYQ+T)5cGZ|L1=J$EGZ| literal 0 HcmV?d00001 diff --git a/.dot-files-laptop/.wallpapers/castlevania2.png b/.dot-files-laptop/.wallpapers/castlevania2.png new file mode 100755 index 0000000000000000000000000000000000000000..099537bf85743771e3060ae1c781edabdb9ed8aa GIT binary patch literal 61904 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%0A9zfHlrz(BsEPi*_O_DNN62u>H!s7YO-! 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 T&;%dT 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