diff options
Diffstat (limited to '.local')
27 files changed, 1285 insertions, 0 deletions
diff --git a/.local/bin/scripts/Heads-Up-Display b/.local/bin/scripts/Heads-Up-Display new file mode 100755 index 0000000..8680123 --- /dev/null +++ b/.local/bin/scripts/Heads-Up-Display @@ -0,0 +1,28 @@ +#!/bin/sh + +# Created By: srdusr +# Created On: Wed 05 Feb 2023 01:24:37 AM CAT +# Project: bspwm scratchpad (Heads-Up-Display) with tmux session + +if id="$(xdo id -N Heads-Up-Display)" + then bspc node "$id" -g hidden -f + else kitty --class "Heads-Up-Display" -e tmux new-session -A -s HUD -e bash > /dev/null 2>&1 & +fi + +#- - - - - - - - - - + + +### Alternative method + +#id=$(xdotool search --class Heads-Up-Display); +#if [ -z "$id" ]; then +# #kitty --class "Heads-Up-Display" -e tmux new-session -A -s HUD -e bash > /dev/null 2>&1 & +# alacritty --class "Heads-Up-Display" -e tmux new-session -A -s HUD -e bash > /dev/null 2>&1 & +#else +# if [ ! -f /tmp/hide_hud ]; then +# touch /tmp/hide_hud && xdo hide "$id" +# elif [ -f /tmp/hide_hud ]; then +# rm /tmp/hide_hud && xdo show "$id" +# fi +#fi + diff --git a/.local/bin/scripts/README.md b/.local/bin/scripts/README.md new file mode 100644 index 0000000..458b3cc --- /dev/null +++ b/.local/bin/scripts/README.md @@ -0,0 +1 @@ +# scripts diff --git a/.local/bin/scripts/bspwm_resize.sh b/.local/bin/scripts/bspwm_resize.sh new file mode 100755 index 0000000..29ab5cf --- /dev/null +++ b/.local/bin/scripts/bspwm_resize.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +size=${2:-'10'} +dir=$1 + +# Find current window mode +is_tiled() { +bspc query -T -n | grep -q '"state":"tiled"' +} +# If the window is floating, move it +if ! is_tiled; then +#only parse input if window is floating,tiled windows accept input as is + case "$dir" in + west) switch="-w" + sign="-" + ;; + east) switch="-w" + sign="+" + ;; + north) switch="-h" + sign="-" + ;; + south) switch="-h" + sign="+" + ;; + esac + xdo resize ${switch} ${sign}${size} + +# Otherwise, window is tiled: switch with window in given direction +else + case "$dir" in + west) bspc node @west -r -$size || bspc node @east -r -${size} + ;; + east) bspc node @west -r +$size || bspc node @east -r +${size} + ;; + north) bspc node @south -r -$size || bspc node @north -r -${size} + ;; + south) bspc node @south -r +$size || bspc node @north -r +${size} + ;; + esac +fi + +##!/bin/bash +# +#[ "$#" -eq 3 ] || { echo "Needs exactly three arguments."; exit 1; } +# +#motion="$1" +#direction="$2" +#size="$3" +# +#if [ "$motion" = 'expand' ]; then +# # These expand the window's given side +# case "$direction" in +# north) bspc node -z top 0 -"$size" ;; +# east) bspc node -z right "$size" 0 ;; +# south) bspc node -z bottom 0 "$size" ;; +# west) bspc node -z left -"$size" 0 ;; +# esac +#else +# # These contract the window's given side +# case "$direction" in +# north) bspc node -z top 0 "$size" ;; +# east) bspc node -z right -"$size" 0 ;; +# south) bspc node -z bottom 0 -"$size" ;; +# west) bspc node -z left "$size" 0 ;; +# esac +#fi diff --git a/.local/bin/scripts/check-updates.sh b/.local/bin/scripts/check-updates.sh new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.local/bin/scripts/check-updates.sh diff --git a/.local/bin/scripts/colors.sh b/.local/bin/scripts/colors.sh new file mode 100755 index 0000000..fc1c10c --- /dev/null +++ b/.local/bin/scripts/colors.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash +colors=$@ +for (( n=0; n < $colors; n++ )) do + printf " [%d] $(tput setaf $n)%s$(tput sgr0)" $n "Hello World! +" +done +PADDING='Padding' + +main() { + local xterm_start=0 \ + xterm_width=8 \ + xterm_height=2 + + local cube_start=$((xterm_start + xterm_width * xterm_height)) \ + cube_width=6 \ + cube_height=$((6 * 6)) + + local greys_start=$((cube_start + cube_width * cube_height)) \ + greys_width=8 \ + greys_height=3 + + color_block $xterm_start $xterm_width $xterm_height + color_block $cube_start $cube_width $cube_height use_padding + color_block $greys_start $greys_width $greys_height + echo +} + +color_block() { + local start=$1 width=$2 height=$3 use_padding=$4 + local max s color_nums colors + + max=$((start + width * height - 1)) + + echo + for s in $(seq $start $width $max); do + color_nums=$(seq $s $((s + width - 1))) + colors="${use_padding:+$PADDING }${color_nums}${use_padding:+ $PADDING}" + + printf '%s%s %s%s\n' \ + "$(fg_bars $colors)" $ansi_reset \ + "$(bg_bars $colors)" $ansi_reset + done +} + +fg_bars() { + for color in $@; do + color_bar ansi_fg $color '' + done +} + +bg_bars() { + for color in $@; do + color_bar ansi_bg $color ' ' + done +} + +color_bar() { + local ansi=$1 color=$2 trail=$3 + + if [ "$color" == $PADDING ]; then + printf '%s %s' $ansi_reset "$trail" + else + local color_seq=$($ansi $color) + printf '%s %03d%s' $color_seq $color "$trail" + fi +} + +ansi_reset=$'\033[0m' + +ansi_fg() { + printf '\033[38;5;%dm' $1 +} + +ansi_bg() { + printf '\033[48;5;%dm' $1 +} + +main diff --git a/.local/bin/scripts/cryptocheck b/.local/bin/scripts/cryptocheck new file mode 100755 index 0000000..02ba42d --- /dev/null +++ b/.local/bin/scripts/cryptocheck @@ -0,0 +1,31 @@ +#!/usr/bin/env bash +if [ ! -d ~/.cache/crypto ]; then + mkdir ~/.cache/crypto +fi +ticker=(BTC ETH ADA DOT SOL XMR) + +for currency in "${ticker[@]}"; do + echo "$currency" +done | while read coin + do + price=$(curl rate.sx/1$coin) + if [ $coin = "BTC" ]; then + icon= + elif [ $coin = "ETH" ]; then + icon= + elif [ $coin = "ADA" ]; then + icon= + elif [ $coin = "DOT" ]; then + icon= + elif [ $coin = "SOL" ]; then + icon= + elif [ $coin = "XMR" ]; then + icon= + fi + + echo "$icon $coin: $price" > ~/.cache/crypto/$coin + + done + +date > ~/.cache/crypto/time + diff --git a/.local/bin/scripts/cryptonotify b/.local/bin/scripts/cryptonotify new file mode 100755 index 0000000..47883c3 --- /dev/null +++ b/.local/bin/scripts/cryptonotify @@ -0,0 +1,19 @@ +#!/bin/sh +source cryptocheck +Output= +for file in ~/.cache/crypto/* +do + if [ ! -z "$Output" ]; then + if [ ! $(basename $file) = "time" ]; then + Output="$Output\n$(cat $file)" + fi + else + if [ ! $(basename $file) = "time" ]; then + Output="$Output$(cat $file)" + fi + fi + +done + +Output="$Output\n$(cat ~/.cache/crypto/time)" +notify-send "Crypto Prices" "$Output" diff --git a/.local/bin/scripts/dotfiles.sh b/.local/bin/scripts/dotfiles.sh new file mode 100755 index 0000000..b231367 --- /dev/null +++ b/.local/bin/scripts/dotfiles.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# Set the bare dotfiles repo directory +dotfiles_dir="$HOME/.cfg" + +# Set the home directory +home_dir="$HOME" + +# Exclude the .cfg directory and any other files/directories you want to ignore +exclude_list=(".cfg") + +# Change to the home directory +cd "$home_dir" + +# Get a list of all dotfiles in the repository +files=$(find "$dotfiles_dir" -maxdepth 1 -type f -not -name ".*" -not -name "${exclude_list[*]}" -printf "%f\n") + +# Link each file to its corresponding location in $HOME +for file in $files; do + ln -sf "$dotfiles_dir/$file" "$home_dir/.$file" +done + +# Get a list of all dot directories in the repository +dirs=$(find "$dotfiles_dir" -maxdepth 1 -type d -not -path "$dotfiles_dir" -not -name ".*" -not -name "${exclude_list[*]}" -printf "%f\n") + +# Link each directory to its corresponding location in $HOME +for dir in $dirs; do + ln -sf "$dotfiles_dir/$dir" "$home_dir/.$dir" +done + +# Remove any symlinks that are no longer present in the repo +while IFS= read -r -d '' link; do + if [[ ! -e "$link" ]]; then + rm "$link" + fi +done < <(find "$home_dir" -maxdepth 1 -type l -name ".*" -not -name ".cfg" -print0) + diff --git a/.local/bin/scripts/ffmpeg b/.local/bin/scripts/ffmpeg new file mode 100755 index 0000000..2258fbd --- /dev/null +++ b/.local/bin/scripts/ffmpeg @@ -0,0 +1,24 @@ +#!/bin/bash + +# audio +A="$(pactl list sources | grep 'analog.*monitor' | awk '{print $2}')" +# screen size +S="$(xdpyinfo | grep dimensions | awk '{print $2}')" +# file name +N="$(date +"%m-%d-%Y_%I:%M%p").mp4" + +# Desktop audio + screen recording +ffmpeg \ +-s "$S" -r 25 -f x11grab -i :0.0+0,0 \ +-ac 2 ~/"$N" + +# ffmpeg can output high quality GIF. Before you start it is always recommended to use a recent version: download or compile. + +# ffmpeg -ss 30 -t 3 -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 output.gif + +# This example will skip the first 30 seconds (-ss 30) of the input and create a 3 second output (-t 3). +# fps filter sets the frame rate. A rate of 10 frames per second is used in the example. +# scale filter will resize the output to 320 pixels wide and automatically determine the height while preserving the aspect ratio. The lanczos scaling algorithm is used in this example. +# palettegen and paletteuse filters will generate and use a custom palette generated from your input. These filters have many options, so refer to the links for a list of all available options and values. Also see the Advanced options section below. +# split filter will allow everything to be done in one command and avoids having to create a temporary PNG file of the palette. +# Control looping with -loop output option but the values are confusing. A value of 0 is infinite looping, -1 is no looping, and 1 will loop once meaning it will play twice. So a value of 10 will cause the GIF to play 11 times. diff --git a/.local/bin/scripts/get_zle_keymap_select.sh b/.local/bin/scripts/get_zle_keymap_select.sh new file mode 100755 index 0000000..1e2eaf4 --- /dev/null +++ b/.local/bin/scripts/get_zle_keymap_select.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# Get the value of the zle-keymap-select variable +value=$(print -v zle-keymap-select) + +# Specify the file path to save the value +file_path="~/file.txt" + +# Write the value to the file +echo "$value" > "$file_path" + +# Optionally, you can also print the value to the console +echo "The value of zle-keymap-select is: $value" diff --git a/.local/bin/scripts/gsettings.sh b/.local/bin/scripts/gsettings.sh new file mode 100755 index 0000000..0cd28c2 --- /dev/null +++ b/.local/bin/scripts/gsettings.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# Disable screen lock +gsettings set org.gnome.desktop.screensaver lock-enabled false +gsettings set org.gnome.desktop.session idle-delay 0 + +# Mutter Overlay Key +gsettings set org.gnome.mutter overlay-key '' + +# Disable update notification +#gsettings set org.gnome.software download-updates false +#gsettings set com.ubuntu.update-notifier no-show-notifications true +#sudo rm /etc/xdg/autostart/upg-notifier-autostart.desktop + +#sudo mv /etc/xdg/autostart/update-notifier.desktop /etc/xdg/autostart/update-notifier.desktop.old +#sudo mv /etc/xdg/autostart/gnome-software-service.desktop /etc/xdg/autostart/gnome-software-service.desktop.old + +# Custom Keybinding Names +gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']" + +# Custom Keybinding 0 +gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ binding "<Alt>T" +gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ command "scratchpad" +gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ name "scratchpad" + +# Disable keyboard plugin +gsettings set org.gnome.settings-daemon.plugins.keyboard active false diff --git a/.local/bin/scripts/killandnotify b/.local/bin/scripts/killandnotify new file mode 100755 index 0000000..2e7222e --- /dev/null +++ b/.local/bin/scripts/killandnotify @@ -0,0 +1,4 @@ +#!/bin/sh +# Kills an application and sends a notification that it's been killed + +killall "$1" && notify-send "$1" "$2" diff --git a/.local/bin/scripts/layer.sh b/.local/bin/scripts/layer.sh new file mode 100755 index 0000000..4b17ed1 --- /dev/null +++ b/.local/bin/scripts/layer.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +current_layer="$(bspc query -T -n | jq -r '.client.layer')" +case $1 in + +|-) + declare -A _layers=( [below]=0 [normal]=1 [above]=2 ) + layers=( below normal above ) + maxl=$(( ${#layers[@]} - 1 )) + current_layer="$(bspc query -T -n | jq -r '.client.layer')" + i=$(( ${_layers[$current_layer]} $1 1 )) + if [[ $i -lt 0 ]]; then + i=0 + elif [[ $i -gt $maxl ]]; then + i=$maxl + fi + #cycle? nah + #i=$(( (${_layers[$current_layer]} + ${#layers[@]} ${1} 1) % ${#layers[@]} )) + new_layer="${layers[$i]}" + ;; + *) + new_layer="$(bspc query -T -n | jq -r '.client.lastLayer')" + ;; +esac +[[ "$current_layer" != "$new_layer" ]] && bspc node -l "$new_layer" diff --git a/.local/bin/scripts/neovim.sh b/.local/bin/scripts/neovim.sh new file mode 100755 index 0000000..4b67d48 --- /dev/null +++ b/.local/bin/scripts/neovim.sh @@ -0,0 +1,395 @@ +#!/bin/bash + +# Created By: srdusr +# Created On: Sat 12 Aug 2023 13:11:39 CAT +# Project: Install/update/downgrade/change version/uninstall Neovim script, primarily for Linux but may work in other platforms + +# Color definitions +RED='\033[0;31m' +GREEN='\033[0;32m' +NC='\033[0m' # No Color + +# Function to handle errors +handle_error() { + local message="$1" + printf "${RED}Error: $message${NC}\n" +} + +# Check if necessary dependencies are installed +check_dependencies() { + if [ -x "$(command -v wget)" ]; then + DOWNLOAD_COMMAND="wget" + elif [ -x "$(command -v curl)" ]; then + DOWNLOAD_COMMAND="curl" + else + printf "${RED}Error: Neither wget nor curl found. Please install one of them to continue!${NC}\n" + exit 1 + fi +} + +# Check for privilege escalation tools +check_privilege_tools() { + if [ -x "$(command -v sudo)" ]; then + PRIVILEGE_TOOL="sudo" + elif [ -x "$(command -v doas)" ]; then + PRIVILEGE_TOOL="doas" + elif [ -x "$(command -v pkexec)" ]; then + PRIVILEGE_TOOL="pkexec" + elif [ -x "$(command -v dzdo)" ]; then + PRIVILEGE_TOOL="dzdo" + elif [ "$(id -u)" -eq 0 ]; then + PRIVILEGE_TOOL="" # root + else + PRIVILEGE_TOOL="" # No privilege escalation mechanism found + printf "\n${RED}Error: No privilege escalation tool (sudo, doas, pkexec, dzdo, or root privileges) found. You may not have sufficient permissions to run this script.${NC}\n" + printf "\nAttempt to continue Installation (might fail without a privilege escalation tool)? [yes/no] " + read continue_choice + case $continue_choice in + [Yy] | [Yy][Ee][Ss]) ;; + [Nn] | [Nn][Oo]) exit ;; + *) handle_error "Invalid choice. Exiting..." && exit ;; + esac + fi +} + +# Check if Neovim is already installed +check_neovim_installed() { + if [ -x "$(command -v nvim)" ]; then + return 0 # Neovim is installed + else + return 1 # Neovim is not installed + fi +} + +# Nightly version +nightly_version() { + local url="https://github.com/neovim/neovim/releases/download/nightly/nvim.appimage" + install_neovim "$url" + local version_output=$(nvim --version) + version_id="Nightly $(echo "$version_output" | grep -oP 'v\d+\.\d+\.\d+')" +} + +# Stable version +stable_version() { + local url="https://github.com/neovim/neovim/releases/download/stable/nvim.appimage" + install_neovim "$url" + local version_output=$(nvim --version) + version_id="Stable $(echo "$version_output" | grep -oP 'v\d+\.\d+\.\d+')" + +} + +# Specific version +specific_version() { + local version="$1" + + # Add 'v' prefix if not present + if [[ $version != v* ]]; then + version="v$version" + fi + + local url="https://github.com/neovim/neovim/releases/download/$version/nvim.appimage" + install_neovim "$url" + local version_output=$(nvim --version) + version_id="Stable $(echo "$version_output" | grep -oP 'v\d+\.\d+\.\d+')" +} + +# Function to download a file using wget or curl +download_file() { + local url="$1" + local output="$2" + + if [ "$DOWNLOAD_COMMAND" = "wget" ]; then + "$DOWNLOAD_COMMAND" -q --show-progress -O "$output" "$url" + elif [ "$DOWNLOAD_COMMAND" = "curl" ]; then + "$DOWNLOAD_COMMAND" --progress-bar -# -o "$output" "$url" + else + echo "Unsupported download command: $DOWNLOAD_COMMAND" + exit 1 + fi +} + +# Check if a specific version of Neovim exists +version_exists() { + local version="$1" + + # Add 'v' prefix if not present + if [[ $version != v* ]]; then + version="v$version" + fi + + # Fetch all the release tags from GitHub + ALL_TAGS=$(curl -s "https://api.github.com/repos/neovim/neovim/tags" | grep '"name":' | cut -d '"' -f 4) + + # Check if the desired version is in the list of release tags + if echo "$ALL_TAGS" | grep -q "$version"; then + return 0 # Version exists + else + return 1 # Version does not exist + fi +} + +# Install Neovim +install_neovim() { + local url="$1" + local install_type="$2" # Pass the install type as an argument + local install_action="$3" + + if [ "$install_action" = "installed" ]; then + printf "Downloading and installing $install_type Neovim $version_id...\n" + else + printf "${GREEN}Updating $install_type Neovim to the latest version...${NC}\n" + fi + + # Determine the platform-specific installation steps + case "$(uname -s)" in + Linux) + printf "Detected Linux OS.\n" + if [ -x "$(command -v fusermount)" ]; then + printf "FUSE is available. Downloading and running the AppImage...\n" + download_file "$url" "nvim.appimage" + chmod u+x nvim.appimage + "$PRIVILEGE_TOOL" cp nvim.appimage /usr/local/bin/nvim + "$PRIVILEGE_TOOL" mv nvim.appimage /usr/bin/nvim + else + printf "FUSE is not available. Downloading and extracting the AppImage...\n" + download_file "$url" "nvim.appimage" + chmod u+x nvim.appimage + ./nvim.appimage --appimage-extract + "$PRIVILEGE_TOOL" cp squashfs-root/usr/bin/nvim /usr/local/bin + "$PRIVILEGE_TOOL" mv squashfs-root/usr/bin/nvim /usr/bin + fi + ;; + + Darwin) + printf "Detected macOS.\n" + download_file "$url" "nvim-macos.tar.gz" + xattr -c ./nvim-macos.tar.gz + tar xzvf nvim-macos.tar.gz + "$PRIVILEGE_TOOL" cp nvim-macos/bin/nvim /usr/local/bin + "$PRIVILEGE_TOOL" mv nvim-macos/bin/nvim /usr/bin/nvim + ;; + + MINGW*) + printf "Detected Windows.\n" + download_file "$url" "nvim.appimage" + chmod +x nvim.appimage + if [ "$PRIVILEGE_TOOL" = "sudo" ]; then + "$PRIVILEGE_TOOL" cp nvim.appimage /usr/local/bin/nvim + "$PRIVILEGE_TOOL" mv /usr/local/bin/nvim /usr/bin + elif [ "$PRIVILEGE_TOOL" = "" ]; then + cp nvim.appimage /usr/local/bin/nvim + mv /usr/local/bin/nvim /usr/bin + else + printf "No privilege escalation tool found. Cannot install Neovim on Windows.\n" + fi + ;; + + *) + printf "Unsupported operating system.\n" + exit 1 + ;; + esac + if [ "$install_action" = "installed" ]; then + printf "${GREEN}$install_type Neovim $version_id has been installed successfully!${NC}\n" + else + printf "${GREEN}$install_type Neovim has been updated successfully to $version_id!${NC}\n" + fi +} + +# Update Neovim to the latest version (nightly/stable) +update_version() { + valid_choice=false + while [ "$valid_choice" = false ]; do + # Determine which version to update to (nightly/stable) + printf "Select version to update to:\n" + printf " 1. Nightly\n" + printf " 2. Stable\n" + printf " 3. Choose specific version by tag\n" + printf "Enter the number corresponding to your choice (1/2/3): " + read update_choice + + case $update_choice in + 1) + action="updated" + nightly_version + valid_choice=true + ;; + 2) + action="updated" + stable_version + valid_choice=true + ;; + 3) + # Ask user for specific version + read -p "Enter the specific version (e.g., v0.1.0): " version + # Normalize version + if [[ $version != v* ]]; then + version="v$version" + fi + # Check if the specific version exists on GitHub releases + if version_exists "$version"; then + # Install specific version + specific_version "$version" # Pass the normalized version to the function + valid_choice=true + else + printf "${RED}The specified version $version does not exist.${NC}\n" + fi + ;; + + *) + handle_error "Invalid choice. Please enter a valid option (1, 2 or 3)." + ;; + esac + done + +} + +# Uninstall Neovim +uninstall_neovim() { + printf "${RED}Uninstalling Neovim...${NC}\n" + + # Detect the operating system to determine the appropriate uninstallation method + case "$(uname -s)" in + Linux) + printf "Detected Linux OS.\n" + "$PRIVILEGE_TOOL" rm /usr/local/bin/nvim + "$PRIVILEGE_TOOL" rm /usr/bin/nvim + ;; + + Darwin) + printf "Detected macOS.\n" + "$PRIVILEGE_TOOL" rm /usr/local/bin/nvim + "$PRIVILEGE_TOOL" rm /usr/bin/nvim + ;; + + MINGW*) + printf "Detected Windows.\n" + if [ "$PRIVILEGE_TOOL" = "sudo" ]; then + "$PRIVILEGE_TOOL" rm /usr/local/bin/nvim + "$PRIVILEGE_TOOL" rm /usr/bin/nvim + else + [ "$PRIVILEGE_TOOL" = "" ] + rm /usr/local/bin/nvim + rm /usr/bin/nvim + fi + ;; + *) + printf "Unsupported operating system.\n" + ;; + esac + + printf "${GREEN}Neovim has been uninstalled successfully!${NC}\n" +} + +# Check if Neovim is running +check_neovim_running() { + if pgrep nvim >/dev/null; then + printf "${RED}Error: Neovim is currently running. Please close Neovim before proceeding.${NC}\n" + read -p "Do you want to forcefully terminate Neovim and continue? [yes/no] " terminate_choice + + case $terminate_choice in + [Yy] | [Yy][Ee][Ss]) + pkill nvim # Forcefully terminate Neovim + ;; + [Nn] | [Nn][Oo]) + echo "Exiting..." + exit 1 + ;; + *) + handle_error "Invalid choice." + ;; + esac + fi +} + +check_neovim_running + +# Define the variable to control the prompt +SHOW_PROMPT=1 + +# Check if necessary dependencies are installed +check_dependencies + +# Check for privilege escalation tools +check_privilege_tools + +# Check if Neovim is already installed +if check_neovim_installed; then + printf "${GREEN}Neovim is already installed!${NC}\n" +else + choose_version +fi + +# Function to check for updates and display breaking changes +check_version_updates() { + local latest_version_url="https://api.github.com/repos/neovim/neovim/releases/latest" + local latest_version="" + + if [ -x "$(command -v curl)" ]; then + latest_version=$(curl -sSL "$latest_version_url" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') + elif [ -x "$(command -v wget)" ]; then + latest_version=$(wget -qO - "$latest_version_url" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') + else + printf "${RED}Error: Neither curl nor wget found. Please install one of them to continue!${NC}\n" + exit 1 + fi + + if version_exists "$latest_version"; then + printf "${GREEN}An update is available!${NC}\n" + display_breaking_changes "$latest_version" + else + printf "You have the latest version of Neovim.\n" + fi +} + +# Function to display breaking changes for a specific version +display_breaking_changes() { + local version="$1" + local changelog_url="https://github.com/neovim/neovim/releases/tag/$version" + local changelog="" + + if [ -x "$(command -v curl)" ]; then + changelog=$(curl -sSL "$changelog_url" | grep -oE '<h1>Breaking Changes.*?</ul>' | sed 's/<[^>]*>//g') + elif [ -x "$(command -v wget)" ]; then + changelog=$(wget -qO - "$changelog_url" | grep -oE '<h1>Breaking Changes.*?</ul>' | sed 's/<[^>]*>//g') + else + printf "${RED}Error: Neither curl nor wget found. Please install one of them to continue!${NC}\n" + exit 1 + fi + + printf "\nBreaking Changes in Neovim $version:\n" + printf "$changelog\n" +} + +# Main loop +while [ "$SHOW_PROMPT" -gt 0 ]; do + printf "Select an option:\n" + printf " 1. Update Neovim\n" + printf " 2. Check for updates\n" + printf " 3. Uninstall Neovim\n" + printf " 4. Run Neovim\n" + printf " 5. Quit\n" + read -p "Enter a number or press 'q' to quit: " choice + + case $choice in + 1) + update_version + ;; + 2) + check_version_updates + ;; + 3) + uninstall_neovim + ;; + 4) + nvim + ;; + 5 | [Qq]) + echo "Exiting..." + exit + ;; + *) + handle_error "Invalid choice. Please choose a valid option by entering the corresponding number or press 'q' to 'quit'." + ;; + esac +done diff --git a/.local/bin/scripts/opacity-change.sh b/.local/bin/scripts/opacity-change.sh new file mode 100755 index 0000000..b509936 --- /dev/null +++ b/.local/bin/scripts/opacity-change.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +set -eu +[[ -n ${DEBUG:-} ]] && set -x + +#### Example alacritty.yml usage +#key_bindings: +# - { key: N, mods: Control|Shift, action: SpawnNewInstance } +# - { key: O, mods: Control|Shift, command: { program: "opacity-change.sh", args: ["-"] } } +# - { key: P, mods: Control|Shift, command: { program: "opacity-change.sh", args: ["+"] } } + + +operation="${1:-}${2:-}" # Arg #1 & #2 (in case the user misinterpreted a space in the usage), Default '' +step="${operation:1}" # Substring from char index 1 +step="${step:-1}" # Default '1' +operation="${operation:0:1}" # Substring from char index 0 length of 1 +config_file="$HOME/.config/alacritty/alacritty.yml" +config_field="opacity" +tmp_file="/tmp/$(basename $config_file).$(date +%s)" +current_value=$(sed 's/#.*//g; /\b'"$config_field"':/!d; s/.*: \?//' < "$config_file") + +case $operation in +"-") + verb="Decreasing" ;; +"+") + verb="Increasing" ;; +*) + echo "Usage: ${BASH_SOURCE[0]} (-|+)[int]"; exit 255 ;; +esac + +new_value="$(awk '{n=$1+$2/10; print (n<0 ? 0 : n>1 ? 1 : n)}' <<<"$current_value $operation$step")" +echo "$verb $config_field from $current_value to $new_value" >&2 +cp "$config_file" "$tmp_file" +sed "s/\b$config_field:.*/$config_field: $new_value/" "$tmp_file" > "$config_file" + diff --git a/.local/bin/scripts/powermenu b/.local/bin/scripts/powermenu new file mode 100755 index 0000000..7bd913e --- /dev/null +++ b/.local/bin/scripts/powermenu @@ -0,0 +1,38 @@ +#!/bin/bash + +# display a power menu to: shutdown, reboot, +# lock, logout, and suspend. This script can be +# executed by clicking on the polybar powermenu module +# or with a keyboard shortcut + +# options to be displayed +shutdown=" Shutdown" +reboot=" Reboot" +lock=" Lock" +logout=" Logout" +suspend=" Suspend" + +uptime=$(uptime -p | sed -e 's/up //g') + +# options passed into variable +options="$shutdown\n$reboot\n$lock\n$logout\n$suspend" + +chosen="$(echo -e "$options" | rofi -theme ~/.config/rofi/styles/powermenu.rasi -lines 5 -dmenu -p "$uptime")" + +case $chosen in +$shutdown) + systemctl poweroff + ;; +$reboot) + systemctl reboot + ;; +$lock) + betterlockscreen --lock dimblur + ;; +$logout) + bspc quit + ;; +$suspend) + systemctl suspend + ;; +esac diff --git a/.local/bin/scripts/qemu-helper.sh b/.local/bin/scripts/qemu-helper.sh new file mode 100755 index 0000000..0d38aba --- /dev/null +++ b/.local/bin/scripts/qemu-helper.sh @@ -0,0 +1,172 @@ +#!/bin/bash + +# Created By: srdusr +# Created On: Wed 02 Aug 2023 16:16:21 PM CAT +# Project: QEMU setup/opener helper wrapper script + +# Set global variables for VM parameters +ram_size="4G" + +# Function to prompt user for VM parameters +function get_vm_parameters() { + read -p "Enter VM name (default: vm): " vm_name + vm_name=${vm_name:-vm} + + # Set the default ISO file path to ~/machines/images + default_iso_path="$HOME/machines/images" + + # Generate completions for ISO and IMG files in the images directory + COMPREPLY=() + local files=$(compgen -G "$default_iso_path/*.{iso,img}" -o plusdirs) + for file in $files; do + COMPREPLY+=("$file") + done + + # Use read with -i and -e options for tab-completion + read -ep "Enter ISO file path (default: $default_iso_path): " -i "$default_iso_path" iso_path + + # Manually expand the ~ to the user's home directory + iso_path=$(eval echo "$iso_path") + + # Validate the user input + while [ ! -f "$iso_path" ]; do + read -ep "Invalid file path. Enter a valid ISO file path: " iso_path + done + + # Check if the selected file is an IMG file + if [[ "$iso_path" == *.img ]]; then + guest_os="windows" + else + guest_os="linux" + fi + + # Show available disk space before asking for disk image size + echo "Available disk space:" + df -h "$vm_images_path" + + read -p "Enter disk image size in GB (default: 10G): " disk_size + disk_size=${disk_size:-10G} + + read -p "Enter RAM size in GB (default: 4G): " ram_size + ram_size=${ram_size:-4G} + + # Check if the RAM size is in the correct format (e.g., "4G") + while ! [[ $ram_size =~ ^[0-9]+[kKmMgGtTpPeE]$ ]]; do + read -p "Invalid RAM size format. Enter RAM size in GB (e.g., 4G): " ram_size + done + + read -p "Enter number of CPU cores (default: 2): " cpu_cores + cpu_cores=${cpu_cores:-2} +} + + +# Function to list available VMs +function list_vms() { + echo "Available VMs:" + for vm_file in "$vm_images_path"/*.qcow2; do + vm=$(basename "$vm_file" .qcow2) + echo " - $vm" + done +} + +# Function to list available ISO and IMG files in the images directory +function list_iso_img_files() { + echo "Available ISO and IMG files in $iso_images_path:" + iso_img_files=() + while IFS= read -r -d $'\0' file; do + iso_img_files+=("$file") + done < <(find "$iso_images_path" -type f \( -iname \*.iso -o -iname \*.img \) -print0) + + for ((i = 0; i < ${#iso_img_files[@]}; i++)); do + echo " $((i + 1)). ${iso_img_files[i]##*/}" + done +} + +# Function to check if VM is already running +function is_vm_running() { + vm_name=$1 + if ps aux | grep -v grep | grep -q "[q]emu-system-x86_64.*$vm_name"; then + return 0 + else + return 1 + fi +} + +# Function to start VM +function start_vm() { + vm_name=$1 + is_vm_running "$vm_name" + if [ $? -eq 0 ]; then + echo "VM '$vm_name' is already running." + return + fi + + # VM parameters + qemu_cmd="qemu-system-x86_64 -enable-kvm -machine type=q35 -m $ram_size -cpu host -smp 2 -vga virtio" + qemu_cmd+=" -device qemu-xhci -device usb-tablet -device usb-kbd -device virtio-net,netdev=user0 -netdev user,id=user0,hostfwd=tcp::5555-:22" + qemu_cmd+=" -cdrom \"$iso_path\" -drive file=\"$vm_images_path/$vm_name.qcow2\",index=0,media=disk,if=virtio" + + if [[ $guest_os == "windows" ]]; then + qemu_cmd+=" -drive file=\"$iso_images_path/virtio-win.iso\",index=3,media=cdrom" + fi + + qemu_cmd+=" -boot menu=on" + qemu_cmd+=" -net nic -net user,hostname=$vm_name -name \"$vm_name\"" + + echo "Starting VM: $vm_name" + eval "$qemu_cmd" +} + +# Main script starts here +vm_images_path="$HOME/machines/vm" +iso_images_path="$HOME/machines/images" + +# Check if directories exist +mkdir -p "$vm_images_path" +mkdir -p "$iso_images_path" + +# List available VMs +list_vms + +# List available ISO and IMG files in the images directory +list_iso_img_files + +# Ask the user if they want to use an existing VM or create a new one +read -p "Do you want to use an existing VM? (y/n): " use_existing_vm +if [[ $use_existing_vm =~ ^[Yy]$ ]]; then + read -p "Enter the name of the existing VM: " existing_vm_name + while [ ! -f "$vm_images_path/$existing_vm_name.qcow2" ]; do + echo "VM '$existing_vm_name' does not exist." + read -p "Enter a valid existing VM name: " existing_vm_name + done + vm_name=$existing_vm_name +else + # Prompt user for VM parameters + get_vm_parameters + + # Check if VM already exists + if [ -f "$vm_images_path/$vm_name.qcow2" ]; then + read -p "VM '$vm_name' already exists. Do you want to start it? (y/n): " start_vm_choice + if [[ $start_vm_choice =~ ^[Yy]$ ]]; then + start_vm "$vm_name" + exit 0 + fi + else + # Create new VM + echo "Creating new VM: $vm_name" + qemu-img create -f qcow2 "$vm_images_path/$vm_name.qcow2" "$disk_size" + start_vm "$vm_name" + exit 0 + fi +fi + +# If an existing VM is selected, ask if the user wants to modify its parameters +read -p "Do you want to modify the VM parameters? (y/n): " modify_vm_params +if [[ $modify_vm_params =~ ^[Yy]$ ]]; then + get_vm_parameters +fi + +# Start the VM +start_vm "$vm_name" + +echo "Script execution completed." diff --git a/.local/bin/scripts/random_data.py b/.local/bin/scripts/random_data.py new file mode 100755 index 0000000..071ab7c --- /dev/null +++ b/.local/bin/scripts/random_data.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python3 + +import os +import random +import string +import json +import datetime +import csv + + +def generate_random_string(length, charset=string.ascii_letters): + """Generate a random string of given length and character set.""" + return ''.join(random.choice(charset) for _ in range(length)) + + +def generate_random_number(min_value, max_value): + """Generate a random number within the specified range.""" + return random.randint(min_value, max_value) + + +def generate_random_date(start_date, end_date): + """Generate a random date within the specified range.""" + time_between_dates = end_date - start_date + days_between_dates = time_between_dates.days + random_number_of_days = random.randrange(days_between_dates) + random_date = start_date + datetime.timedelta(days=random_number_of_days) + return random_date.strftime("%Y-%m-%d") + + +def generate_sql_insert(table_name, columns, num_records): + """Generate SQL INSERT statements for populating a table.""" + sql_statements = [] + for _ in range(num_records): + values = [f"'{generate_random_string(int(input(f'Enter length for {column}: ')))}'" for column in columns] + sql = f"INSERT INTO {table_name} ({', '.join(columns)}) VALUES ({', '.join(values)});" + sql_statements.append(sql) + return sql_statements + + +def generate_placeholder_data(num_records, data_format): + """Generate placeholder data based on user-defined format.""" + placeholder_data = [] + for _ in range(num_records): + record = {} + for field, field_data in data_format.items(): + data_type = field_data['type'] + if data_type == 'string': + length = field_data['length'] + charset = field_data['charset'] + record[field] = generate_random_string(length, charset) + elif data_type == 'number': + min_value = field_data['min'] + max_value = field_data['max'] + record[field] = generate_random_number(min_value, max_value) + elif data_type == 'date': + start_date = datetime.datetime.strptime(field_data['start_date'], "%Y-%m-%d") + end_date = datetime.datetime.strptime(field_data['end_date'], "%Y-%m-%d") + record[field] = generate_random_date(start_date, end_date) + elif data_type == 'boolean': + record[field] = random.choice([True, False]) + placeholder_data.append(record) + return placeholder_data + + +def get_data_format_from_user(): + """Prompt the user for data format preferences.""" + data_format = {} + while True: + field = input("Enter field name (or 'done' to finish): ").strip() + if field.lower() == 'done': + break + + data_type = input(f"Enter data type for '{field}' (string/number/date/boolean): ").strip() + if data_type not in ['string', 'number', 'date', 'boolean']: + print("Invalid data type. Please enter 'string', 'number', 'date', or 'boolean'.") + continue + + if data_type == 'string': + length = int(input(f"Enter length for '{field}' (integer): ")) + charset = input(f"Enter character set for '{field}' (optional, press Enter for default): ").strip() + if not charset: + charset = string.ascii_letters + data_format[field] = {'type': 'string', 'length': length, 'charset': charset} + elif data_type == 'number': + min_value = int(input(f"Enter minimum value for '{field}' (integer): ")) + max_value = int(input(f"Enter maximum value for '{field}' (integer): ")) + data_format[field] = {'type': 'number', 'min': min_value, 'max': max_value} + elif data_type == 'date': + start_date = input(f"Enter start date for '{field}' (YYYY-MM-DD): ") + end_date = input(f"Enter end date for '{field}' (YYYY-MM-DD): ") + data_format[field] = {'type': 'date', 'start_date': start_date, 'end_date': end_date} + elif data_type == 'boolean': + data_format[field] = {'type': 'boolean'} + + return data_format + + +def get_file_type_from_user(): + """Prompt the user for the desired file type (e.g., JSON, CSV, SQL, TXT, MD, HTML).""" + while True: + file_type = input("Enter the desired file type for saving the data (json/csv/sql/txt/md/html): ").strip().lower() + if file_type in ['json', 'csv', 'sql', 'txt', 'md', 'html']: + return file_type + else: + print("Invalid file type. Please enter 'json', 'csv', 'sql', 'txt', 'md', or 'html'.") + + +def save_data_to_file(data, file_type): + """Save the generated data to a file of the specified type.""" + if file_type == 'json': + with open('placeholder_data.json', 'w') as json_file: + json.dump(data, json_file, indent=4) + elif file_type == 'csv': + with open('placeholder_data.csv', 'w', newline='') as csv_file: + fieldnames = data[0].keys() + writer = csv.DictWriter(csv_file, fieldnames=fieldnames) + writer.writeheader() + for record in data: + writer.writerow(record) + elif file_type == 'sql': + table_name = input("Enter the SQL table name: ") + columns = input("Enter column names separated by commas: ").split(',') + sql_statements = generate_sql_insert(table_name, columns, len(data)) + with open('generated_data.sql', 'w') as sql_file: + sql_file.write('\n'.join(sql_statements)) + elif file_type == 'txt': + with open('placeholder_data.txt', 'w') as txt_file: + for record in data: + txt_file.write(str(record) + '\n') + elif file_type == 'md': + with open('placeholder_data.md', 'w') as md_file: + for record in data: + md_file.write('- ' + ', '.join([f"{key}: {value}" for key, value in record.items()]) + '\n') + elif file_type == 'html': + with open('placeholder_data.html', 'w') as html_file: + html_file.write('<html>\n<head>\n<title>Placeholder Data</title>\n</head>\n<body>\n') + for record in data: + html_file.write('<ul>\n') + for key, value in record.items(): + html_file.write(f'<li>{key}: {value}</li>\n') + html_file.write('</ul>\n') + + +if __name__ == "__main__": + num_records = int(input("Enter the number of records to generate: ")) + data_format = get_data_format_from_user() + file_type = get_file_type_from_user() + + placeholder_data = generate_placeholder_data(num_records, data_format) + + save_data_to_file(placeholder_data, file_type) + + print(f"Data will be saved to: {os.path.abspath('generated_data.sql')}") diff --git a/.local/bin/scripts/scratchpad b/.local/bin/scripts/scratchpad new file mode 100755 index 0000000..8a1aea0 --- /dev/null +++ b/.local/bin/scripts/scratchpad @@ -0,0 +1,64 @@ +#!/bin/bash + +# Created By: srdusr +# Created On: Tue 07 Mar 2023 15:06:47 PM CAT +# Project: Agnostic scratchpad/dropdown terminal that works on most window managers + +# Dependencies: wmctrl, xprop, xdo, xdotool +# NOTE: Ensure script is included in system's path and can therefore be invoked with the command 'scratchpad'. +# Furthermore make sure the terminal is using x11 as a backend in wayland to allow this to work. +# Example: wezterm.lua: enable_wayland = false, +# kitty.conf: linux_display_server x11 + +# Set the environment variables to x11 to allow working in Wayland +export GDK_BACKEND=x11 +export QT_QPA_PLATFORM=xcb +export WAYLAND_DISPLAY="" +export WINIT_UNIX_BACKEND=x11 + +# Supported terminals and dropdown class +supported_terminals=("wezterm" "kitty" "alacritty") + +# Check if any supported terminal with scratchpad class is running +for term in "${supported_terminals[@]}"; do + if pgrep -f "$term.*--class scratchpad" >/dev/null; then + my_term="$term" + break + fi +done + +# If no supported terminal is running, start the first available one +if [ "$my_term" = "" ]; then + for term in "${supported_terminals[@]}"; do + if command -v "$term" >/dev/null 2>&1; then + my_term="$term" + break + fi + done + if [ "$my_term" = "" ]; then + echo "No supported terminal found." && exit 1 + fi + + # Start terminal with scratchpad class + case "$my_term" in + "wezterm") wezterm start --class scratchpad -e tmux new-session -A -s tmux -e bash & ;; + "kitty") kitty --class scratchpad tmux new-session -A -s tmux -e bash & ;; + "alacritty") alacritty --class scratchpad -e tmux new-session -A -s tmux -e bash & ;; + esac +fi + +# Get the window ID of the scratchpad terminal +id="$(xdo id -N scratchpad)" + +# Toggle scratchpad terminal visibility +if [ "$id" != "" ]; then + if xwininfo -id "$id" | grep "Map State: IsViewable" >/dev/null; then + # Scratchpad is visible, hide it + dimensions="$(xwininfo -id "$id" | awk '/Width:|Height:/ { printf("%s=%s;", tolower($1), $2) }')" + xdo hide "$id" 2>/dev/null + else + # Scratchpad is hidden, show it and restore dimensions + xdo show "$id" + xdotool windowsize "$id" "$(echo "$dimensions" | tr ';' ' ')" 2>/dev/null + fi +fi diff --git a/.local/bin/scripts/win-nvim.bat b/.local/bin/scripts/win-nvim.bat new file mode 100644 index 0000000..c99374d --- /dev/null +++ b/.local/bin/scripts/win-nvim.bat @@ -0,0 +1,37 @@ +@echo off + +REM Install NeoVim with winget, if not already present on the system +where nvim >nul 2>nul +if %errorlevel% neq 0 ( + winget install Neovim.Neovim -q +) + +REM Clone my dotfiles repo +set dotFilesRoot=%USERPROFILE%\dotfiles +if not exist "%dotFilesRoot%\." ( + git clone git@github.com:srdusr/dotfiles.git "%dotFilesRoot%" +) + +REM Link NeoVim configuration +set localConfiguration=%LOCALAPPDATA%\nvim +set dotfilesConfiguration=%dotFilesRoot%\.config\nvim + +if not exist "%localConfiguration%\." ( + mklink /D "%localConfiguration%" "%dotfilesConfiguration%" +) + +REM Clone Packer.nvim, if not already present on the system +set localPacker=%LOCALAPPDATA%\nvim-data\site\pack\packer\start\packer.nvim + +if not exist "%localPacker%\." ( + git clone https://github.com/wbthomason/packer.nvim "%localPacker%" +) + +REM Run the script by using this command in the same existing directory: win-nvim.bat + +@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://aka.ms/install-winget'))" +iex ((new-object net.webclient).DownloadString('https://aka.ms/install-winget')) +curl -o winget-cli.appxbundle https://aka.ms/winget-cli-appxbundle + +powershell Add-AppxPackage -Path "winget-cli.appxbundle" + diff --git a/.local/bin/scripts/win-nvim.ps1 b/.local/bin/scripts/win-nvim.ps1 new file mode 100644 index 0000000..ca67755 --- /dev/null +++ b/.local/bin/scripts/win-nvim.ps1 @@ -0,0 +1,39 @@ +# Install NeoVim with winget, if not already present on the system +if (!(Get-Command nvim -ErrorAction SilentlyContinue)) { + winget install Neovim.Neovim +} + +# Clone my dotfiles repo +$dotFilesRoot = Join-Path $HOME "dotfiles" + +if (!(Test-Path $dotFilesRoot -PathType Container)) { + git clone https://github.com/srdusr/dotfiles.git $dotFilesRoot +} + +# Link NeoVim configuration +$localConfiguration = Join-Path $env:LOCALAPPDATA "nvim" +$dotfilesConfiguration = Join-Path $dotFilesRoot ".config" "nvim" + +if (!(Test-Path $localConfiguration -PathType Container)) { + Start-Process -FilePath "cmd.exe" -ArgumentList "/c mklink /D $localConfiguration $dotfilesConfiguration" -Verb runas +} + +# Clone Packer.nvim, if not already present on the system +$localPacker = Join-Path $env:LOCALAPPDATA "nvim-data" "site" "pack" "packer" "start" "packer.nvim" + +if (!(Test-Path $localPacker -PathType Container)) { + git clone https://github.com/wbthomason/packer.nvim $localPacker +} + +# To allow script execution, run the following command in PowerShell as an administrator: +# Set-ExecutionPolicy RemoteSigned +# Then run the script by using this command in the same existing directory: +# ./win-nvim.ps1 +#curl -o winget-cli.appxbundle https://aka.ms/winget-cli-appxbundle +#powershell Add-AppxPackage -Path "winget-cli.appxbundle" +#Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) +#use `-y` or consider: choco feature enable -n allowGlobalConfirmation +#choco install git +#- Refresh the environment +#Import-Module $env:ChocolateyInstall\helpers\chocolateyProfile.psm1 +#refreshenv diff --git a/.local/share/fonts/fantasque_sans_mono.ttf b/.local/share/fonts/fantasque_sans_mono.ttf Binary files differnew file mode 100644 index 0000000..2fa4311 --- /dev/null +++ b/.local/share/fonts/fantasque_sans_mono.ttf diff --git a/.local/share/fonts/fira_code_nerd_fonts.ttf b/.local/share/fonts/fira_code_nerd_fonts.ttf Binary files differnew file mode 100644 index 0000000..b19b2f8 --- /dev/null +++ b/.local/share/fonts/fira_code_nerd_fonts.ttf diff --git a/.local/share/fonts/hack_nerd_fonts_mono.ttf b/.local/share/fonts/hack_nerd_fonts_mono.ttf Binary files differnew file mode 100644 index 0000000..cd3d793 --- /dev/null +++ b/.local/share/fonts/hack_nerd_fonts_mono.ttf diff --git a/.local/share/fonts/iosevka_nerd_font.ttf b/.local/share/fonts/iosevka_nerd_font.ttf Binary files differnew file mode 100644 index 0000000..bbb351c --- /dev/null +++ b/.local/share/fonts/iosevka_nerd_font.ttf diff --git a/.local/share/fonts/material_design_iconic_font.ttf b/.local/share/fonts/material_design_iconic_font.ttf Binary files differnew file mode 100644 index 0000000..5d489fd --- /dev/null +++ b/.local/share/fonts/material_design_iconic_font.ttf diff --git a/.local/share/fonts/symbola.ttf b/.local/share/fonts/symbola.ttf Binary files differnew file mode 100644 index 0000000..1248c29 --- /dev/null +++ b/.local/share/fonts/symbola.ttf |
