update copy script
This commit is contained in:
		
							parent
							
								
									e0f7177b41
								
							
						
					
					
						commit
						ab3169b469
					
				| 
						 | 
				
			
			@ -0,0 +1,988 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
clear
 | 
			
		||||
wallpaper=$HOME/.config/hypr/wallpaper_effects/.wallpaper_current
 | 
			
		||||
waybar_style="$HOME/.config/waybar/style/[Extra] Modern-Combined - Transparent.css"
 | 
			
		||||
waybar_config="$HOME/.config/waybar/configs/[TOP] Default"
 | 
			
		||||
waybar_config_laptop="$HOME/.config/waybar/configs/[TOP] Default Laptop"
 | 
			
		||||
 | 
			
		||||
# set some colors for output messages
 | 
			
		||||
OK="$(tput setaf 2)[OK]$(tput sgr0)"
 | 
			
		||||
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
 | 
			
		||||
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
 | 
			
		||||
INFO="$(tput setaf 4)[INFO]$(tput sgr0)"
 | 
			
		||||
WARN="$(tput setaf 1)[WARN]$(tput sgr0)"
 | 
			
		||||
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
 | 
			
		||||
MAGENTA="$(tput setaf 5)"
 | 
			
		||||
ORANGE="$(tput setaf 214)"
 | 
			
		||||
WARNING="$(tput setaf 1)"
 | 
			
		||||
YELLOW="$(tput setaf 3)"
 | 
			
		||||
GREEN="$(tput setaf 2)"
 | 
			
		||||
BLUE="$(tput setaf 4)"
 | 
			
		||||
SKY_BLUE="$(tput setaf 6)"
 | 
			
		||||
RESET="$(tput sgr0)"
 | 
			
		||||
 | 
			
		||||
# check if running as root. if root, the script will exit
 | 
			
		||||
if [[ $EUID -eq 0 ]]; then
 | 
			
		||||
  echo "${ERROR} this script should ${WARNING}NOT${RESET} be executed as root! exiting..."
 | 
			
		||||
  printf "\n%.0s" {1..2}
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# function to print colorful text
 | 
			
		||||
print_color() {
 | 
			
		||||
  printf "%b%s%b\n" "$1" "$2" "$CLEAR"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# check /etc/os-release to see if this is an ubuntu or debian based distro
 | 
			
		||||
if grep -iq '^\(ID_LIKE\|ID\)=.*\(debian\|ubuntu\)' /etc/os-release >/dev/null 2>&1; then
 | 
			
		||||
  printf "\n%.0s" {1..1}
 | 
			
		||||
    print_color $WARNING "
 | 
			
		||||
    █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
 | 
			
		||||
                    NIXOS-DOTS INCOMPATIBLE
 | 
			
		||||
    █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█
 | 
			
		||||
 | 
			
		||||
    debian / ubuntu detected. refer to nixos dots README
 | 
			
		||||
    for instructions on how to update your nixos-dots.
 | 
			
		||||
 | 
			
		||||
    exiting...
 | 
			
		||||
    "
 | 
			
		||||
  printf "\n%.0s" {1..3}
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
echo -e "\e[35m
 | 
			
		||||
 ██░ ██▓██   ██▓ ██▓███   ██▀███  ▓█████▄  ▒█████  ▄▄▄█████▓  ██████ 
 | 
			
		||||
▓██░ ██▒▒██  ██▒▓██░  ██▒▓██ ▒ ██▒▒██▀ ██▌▒██▒  ██▒▓  ██▒ ▓▒▒██    ▒ 
 | 
			
		||||
▒██▀▀██░ ▒██ ██░▓██░ ██▓▒▓██ ░▄█ ▒░██   █▌▒██░  ██▒▒ ▓██░ ▒░░ ▓██▄   
 | 
			
		||||
░▓█ ░██  ░ ▐██▓░▒██▄█▓▒ ▒▒██▀▀█▄  ░▓█▄   ▌▒██   ██░░ ▓██▓ ░   ▒   ██▒
 | 
			
		||||
░▓█▒░██▓ ░ ██▒▓░▒██▒ ░  ░░██▓ ▒██▒░▒████▓ ░ ████▓▒░  ▒██▒ ░ ▒██████▒▒
 | 
			
		||||
 ▒ ░░▒░▒  ██▒▒▒ ▒▓▒░ ░  ░░ ▒▓ ░▒▓░ ▒▒▓  ▒ ░ ▒░▒░▒░   ▒ ░░   ▒ ▒▓▒ ▒ ░
 | 
			
		||||
 ▒ ░▒░ ░▓██ ░▒░ ░▒ ░       ░▒ ░ ▒░ ░ ▒  ▒   ░ ▒ ▒░     ░    ░ ░▒  ░ ░
 | 
			
		||||
 ░  ░░ ░▒ ▒ ░░  ░░         ░░   ░  ░ ░  ░ ░ ░ ░ ▒    ░      ░  ░  ░  
 | 
			
		||||
 ░  ░  ░░ ░                 ░        ░        ░ ░                 ░  
 | 
			
		||||
        ░ ░                        ░                                 
 | 
			
		||||
\e[0m"
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
 | 
			
		||||
# announcement
 | 
			
		||||
echo "${WARNING}! ! ! A T T E N T I O N ! ! !${RESET}"
 | 
			
		||||
echo "${SKY_BLUE}version v2.3.12 of nixos-dots requires nwg-displays and some fonts!${RESET}"
 | 
			
		||||
echo "${SKY_BLUE}if you installed using nixos-config install script, you do not need to tak eany actions${RESET}"
 | 
			
		||||
echo "${YELLOW}please visit the wiki for changelogs${RESET}"
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
 | 
			
		||||
# create directory for copy logs
 | 
			
		||||
if [ ! -d copy-logs ]; then
 | 
			
		||||
  mkdir copy-logs
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# set the name of the log file to include the current date and time
 | 
			
		||||
LOG="copy-logs/install-$(date +%d-%H%M%S)_dots.log"
 | 
			
		||||
 | 
			
		||||
# update home folders
 | 
			
		||||
xdg-user-dirs-update 2>&1 | tee -a "$LOG" || true
 | 
			
		||||
 | 
			
		||||
# setting up for nvidia
 | 
			
		||||
if lspci -k | grep -A 2 -E "(VGA|3D)" | grep -iq nvidia; then
 | 
			
		||||
  echo "${INFO} nvidia gpu detected, setting up proper env's and configs" 2>&1 | tee "$LOG" || true
 | 
			
		||||
  sed -i '/env = LIBVA_DRIVER_NAME,nvidia/s/^#//' config/hypr/UserConfigs/ENVariables.conf
 | 
			
		||||
  sed -i '/env = __GLX_VENDOR_LIBRARY_NAME,nvidia/s/^#//' config/hypr/UserConfigs/ENVariables.conf
 | 
			
		||||
  sed -i '/env = NVD_BACKEND,direct/s/^#//' config/hypr/UserConfigs/ENVariables.conf
 | 
			
		||||
  # enabling no hardware cursors if nvidia detected
 | 
			
		||||
  sed -i 's/^\([[:space:]]*no_hardware_cursors[[:space:]]*=[[:space:]]*\)false/\1true/' config/hypr/UserConfigs/UserSettings.conf  
 | 
			
		||||
  # disabling explicit sync for nvidia for now (Hyprland 0.42.0)
 | 
			
		||||
  #sed -i 's/  explicit_sync = 2/  explicit_sync = 0/' config/hypr/UserConfigs/UserSettings.conf
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# uncommenting WLR_RENDERER_ALLOW_SOFTWARE,1 if running in a VM is detected
 | 
			
		||||
if hostnamectl | grep -q 'Chassis: vm'; then
 | 
			
		||||
  echo "${INFO} system is running in a virtual machine. setting up proper env's and configs" 2>&1 | tee -a "$LOG" || true
 | 
			
		||||
  # enabling proper ENV's for Virtual Environment which should help
 | 
			
		||||
  sed -i 's/^\([[:space:]]*no_hardware_cursors[[:space:]]*=[[:space:]]*\)false/\1true/' config/hypr/UserConfigs/UserSettings.conf
 | 
			
		||||
  sed -i '/env = WLR_RENDERER_ALLOW_SOFTWARE,1/s/^#//' config/hypr/UserConfigs/ENVariables.conf
 | 
			
		||||
  #sed -i '/env = LIBGL_ALWAYS_SOFTWARE,1/s/^#//' config/hypr/UserConfigs/ENVariables.conf
 | 
			
		||||
  sed -i '/monitor = Virtual-1, 1920x1080@60,auto,1/s/^#//' config/hypr/UserConfigs/Monitors.conf
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# proper polkit for nixos
 | 
			
		||||
if hostnamectl | grep -q 'Operating System: NixOS'; then
 | 
			
		||||
  echo "${INFO} nixos distro detected. Setting up proper env's and configs." 2>&1 | tee -a "$LOG" || true
 | 
			
		||||
  sed -i -E '/^#?exec-once = \$scriptsDir\/Polkit-NixOS\.sh/s/^#//' config/hypr/UserConfigs/Startup_Apps.conf
 | 
			
		||||
  sed -i '/^exec-once = \$scriptsDir\/Polkit\.sh$/ s/^#*/#/' config/hypr/UserConfigs/Startup_Apps.conf
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# check if dpkg is installed (used to check if Debian or Ubuntu or based distros)
 | 
			
		||||
if grep -iq '^\(ID_LIKE\|ID\)=.*\(debian\|ubuntu\)' /etc/os-release >/dev/null 2>&1; then
 | 
			
		||||
	echo "${INFO} debian/ubuntu based distro. disabling pyprland since it does not work properly" 2>&1 | tee -a "$LOG" || true
 | 
			
		||||
  # disabling pyprland as causing issues
 | 
			
		||||
  sed -i '/^exec-once = pypr &/ s/^/#/' config/hypr/UserConfigs/Startup_Apps.conf
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# activating hyprcursor on env by checking if the directory ~/.icons/Bibata-Modern-Ice/hyprcursors exists
 | 
			
		||||
if [ -d "$HOME/.icons/Bibata-Modern-Ice/hyprcursors" ]; then
 | 
			
		||||
    HYPRCURSOR_ENV_FILE="config/hypr/UserConfigs/ENVariables.conf"
 | 
			
		||||
    echo "${INFO} bibata-hyprcursor directory detected. activating hyprcursor...." 2>&1 | tee -a "$LOG" || true
 | 
			
		||||
    sed -i 's/^#env = HYPRCURSOR_THEME,Bibata-Modern-Ice/env = HYPRCURSOR_THEME,Bibata-Modern-Ice/' "$HYPRCURSOR_ENV_FILE"
 | 
			
		||||
    sed -i 's/^#env = HYPRCURSOR_SIZE,24/env = HYPRCURSOR_SIZE,24/' "$HYPRCURSOR_ENV_FILE"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
 | 
			
		||||
# Function to detect keyboard layout using localectl or setxkbmap
 | 
			
		||||
detect_layout() {
 | 
			
		||||
  if command -v localectl >/dev/null 2>&1; then
 | 
			
		||||
    layout=$(localectl status --no-pager | awk '/X11 Layout/ {print $3}')
 | 
			
		||||
    if [ -n "$layout" ]; then
 | 
			
		||||
      echo "$layout"
 | 
			
		||||
    fi
 | 
			
		||||
  elif command -v setxkbmap >/dev/null 2>&1; then
 | 
			
		||||
    layout=$(setxkbmap -query | grep layout | awk '{print $2}')
 | 
			
		||||
    if [ -n "$layout" ]; then
 | 
			
		||||
      echo "$layout"
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# detect the current keyboard layout
 | 
			
		||||
layout=$(detect_layout)
 | 
			
		||||
 | 
			
		||||
if [ "$layout" = "(unset)" ]; then
 | 
			
		||||
  while true; do
 | 
			
		||||
    printf "\n%.0s" {1..1}
 | 
			
		||||
    print_color $WARNING "
 | 
			
		||||
    █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
 | 
			
		||||
            STOP AND READ
 | 
			
		||||
    █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█
 | 
			
		||||
 | 
			
		||||
    !!! IMPORTANT WARNING !!!
 | 
			
		||||
 | 
			
		||||
the default keyboard layout could not be detected
 | 
			
		||||
you need to set it manually
 | 
			
		||||
 | 
			
		||||
    !!! WARNING !!!
 | 
			
		||||
 | 
			
		||||
setting a wrong keyboard layout will cause Hyprland to crash
 | 
			
		||||
If you are not sure, just type ${YELLOW}us${RESET}
 | 
			
		||||
${SKYBLUE}you can change later in ~/.config/hypr/UserConfigs/UserSettings.conf${RESET}
 | 
			
		||||
 | 
			
		||||
${MAGENTA} NOTE:${RESET}
 | 
			
		||||
•  you can also set more than 2 keyboard layouts
 | 
			
		||||
•  for example: ${YELLOW}us, kr, gb, no${RESET}
 | 
			
		||||
"
 | 
			
		||||
    printf "\n%.0s" {1..1}
 | 
			
		||||
    read -p "${CAT} - please enter the correct keyboard layout: " new_layout
 | 
			
		||||
 | 
			
		||||
    if [ -n "$new_layout" ]; then
 | 
			
		||||
        layout="$new_layout"
 | 
			
		||||
        break
 | 
			
		||||
    else
 | 
			
		||||
        echo "${CAT} please enter a keyboard layout."
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf "${NOTE} detecting keyboard layout to prepare proper hyprland settings\n"
 | 
			
		||||
 | 
			
		||||
# prompt the user to confirm whether the detected layout is correct
 | 
			
		||||
while true; do
 | 
			
		||||
  printf "${INFO} current keyboard layout is ${MAGENTA}$layout${RESET}\n"
 | 
			
		||||
  read -p "${CAT} is this correct? [y/n] " keyboard_layout
 | 
			
		||||
 | 
			
		||||
  case $keyboard_layout in
 | 
			
		||||
    [yY])
 | 
			
		||||
      awk -v layout="$layout" '/kb_layout/ {$0 = "  kb_layout = " layout} 1' config/hypr/UserConfigs/UserSettings.conf > temp.conf
 | 
			
		||||
      mv temp.conf config/hypr/UserConfigs/UserSettings.conf
 | 
			
		||||
 | 
			
		||||
      echo "${NOTE} kb_layout ${MAGENTA}$layout${RESET} configured in settings" 2>&1 | tee -a "$LOG"
 | 
			
		||||
      break ;;
 | 
			
		||||
    [nN])
 | 
			
		||||
      printf: "\n%.0s" {1..2}
 | 
			
		||||
      print_color $WARNING "
 | 
			
		||||
    █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
 | 
			
		||||
            STOP AND READ
 | 
			
		||||
    █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█
 | 
			
		||||
 | 
			
		||||
    !!! IMPORTANT WARNING !!!
 | 
			
		||||
 | 
			
		||||
the default keyboard layout could not be detected
 | 
			
		||||
you need to set it Manually
 | 
			
		||||
 | 
			
		||||
    !!! WARNING !!!
 | 
			
		||||
 | 
			
		||||
setting a wrong keyboard layout will cause hyprland to crash
 | 
			
		||||
if you are not sure, just type ${YELLOW}us${RESET}
 | 
			
		||||
${SKYBLUE}you can change later in ~/.config/hypr/UserConfigs/UserSettings.conf${RESET}
 | 
			
		||||
 | 
			
		||||
${MAGENTA} NOTE:${RESET}
 | 
			
		||||
•  you can also set more than 2 keyboard layouts
 | 
			
		||||
•  for example: ${YELLOW}us, kr, gb, no${RESET}
 | 
			
		||||
"
 | 
			
		||||
        printf "\n%.0s" {1..1}
 | 
			
		||||
        
 | 
			
		||||
        read -p "${CAT} - Please enter the correct keyboard layout: " new_layout
 | 
			
		||||
 | 
			
		||||
        awk -v new_layout="$new_layout" '/kb_layout/ {$0 = "  kb_layout = " new_layout} 1' config/hypr/UserConfigs/UserSettings.conf > temp.conf
 | 
			
		||||
        mv temp.conf config/hypr/UserConfigs/UserSettings.conf
 | 
			
		||||
        echo "${OK} kb_layout $new_layout configured in settings." 2>&1 | tee -a "$LOG" 
 | 
			
		||||
        break ;;
 | 
			
		||||
    *)
 | 
			
		||||
        echo "${ERROR} Please enter either 'y' or 'n'." ;;
 | 
			
		||||
  esac
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# Check if asusctl is installed and add rog-control-center on Startup
 | 
			
		||||
if command -v asusctl >/dev/null 2>&1; then
 | 
			
		||||
    sed -i '/exec-once = rog-control-center &/s/^#//' config/hypr/UserConfigs/Startup_Apps.conf
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Check if blueman-applet is installed and add blueman-applet on Startup
 | 
			
		||||
if command -v blueman-applet >/dev/null 2>&1; then
 | 
			
		||||
    sed -i '/exec-once = blueman-applet &/s/^#//' config/hypr/UserConfigs/Startup_Apps.conf
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Check if ags is installed edit ags behaviour on configs
 | 
			
		||||
if command -v ags >/dev/null 2>&1; then
 | 
			
		||||
    sed -i '/#exec-once = ags &/s/^#//' config/hypr/UserConfigs/Startup_Apps.conf
 | 
			
		||||
    sed -i '/#ags -q && ags &/s/^#//' config/hypr/scripts/RefreshNoWaybar.sh
 | 
			
		||||
    sed -i '/#ags -q && ags &/s/^#//' config/hypr/scripts/Refresh.sh
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
 | 
			
		||||
# Checking if neovim or vim is installed and offer user if they want to make as default editor
 | 
			
		||||
# Function to modify the ENVariables.conf file
 | 
			
		||||
update_editor() {
 | 
			
		||||
    local editor=$1
 | 
			
		||||
    sed -i "s/#env = EDITOR,.*/env = EDITOR,$editor #default editor/" config/hypr/UserConfigs/ENVariables.conf
 | 
			
		||||
    echo "${OK} default editor set to ${MAGENTA}$editor${RESET}." 2>&1 | tee -a "$LOG"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EDITOR_SET=0
 | 
			
		||||
# Check for neovim if installed
 | 
			
		||||
if command -v nvim &> /dev/null; then
 | 
			
		||||
    printf "${INFO} ${MAGENTA}neovim${RESET} is detected as installed\n"
 | 
			
		||||
    read -p "${CAT} do you want to make ${MAGENTA}neovim${RESET} the default editor? (y/N): " EDITOR_CHOICE
 | 
			
		||||
    if [[ "$EDITOR_CHOICE" == "y" ]]; then
 | 
			
		||||
        update_editor "nvim"
 | 
			
		||||
        EDITOR_SET=1
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf "\n"
 | 
			
		||||
 | 
			
		||||
# Check for vim if installed, but only if neovim wasn't chosen
 | 
			
		||||
if [[ "$EDITOR_SET" -eq 0 ]] && command -v vim &> /dev/null; then
 | 
			
		||||
    printf "${INFO} ${MAGENTA}vim${RESET} is detected as installed\n"
 | 
			
		||||
    read -p "${CAT} do you want to make ${MAGENTA}vim${RESET} the default editor? (y/N): " EDITOR_CHOICE
 | 
			
		||||
    if [[ "$EDITOR_CHOICE" == "y" ]]; then
 | 
			
		||||
        update_editor "vim"
 | 
			
		||||
        EDITOR_SET=1
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ "$EDITOR_SET" -eq 0 ]]; then
 | 
			
		||||
    echo "${YELLOW} Neither neovim nor vim is installed or selected as default." 2>&1 | tee -a "$LOG"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf "\n"
 | 
			
		||||
 | 
			
		||||
# Action to do for better appearance
 | 
			
		||||
while true; do
 | 
			
		||||
  echo "${NOTE} ${SKY_BLUE} by default, nixos-dots is configured for 1440p or 2k."
 | 
			
		||||
  echo "${WARN} if you dont select proper resolution, Hyprlock will look weird"
 | 
			
		||||
  echo "${INFO} if you are not sure what is your resolution, choose 1 here!"
 | 
			
		||||
  echo "${MAGENTA}select monitor resolution to properly configure appearance and fonts:"
 | 
			
		||||
  echo "$YELLOW  -- enter 1. for monitor resolution less than 1440p (< 1440p)"
 | 
			
		||||
  echo "$YELLOW  -- enter 2. for monitor resolution equal to or higher than 1440p (≥ 1440p)"
 | 
			
		||||
  read -p "$CAT enter the number of your choice (1 or 2): " res_choice
 | 
			
		||||
 | 
			
		||||
  case $res_choice in
 | 
			
		||||
    1)
 | 
			
		||||
        resolution="< 1440p"
 | 
			
		||||
        break
 | 
			
		||||
        ;;
 | 
			
		||||
    2)
 | 
			
		||||
        resolution="≥ 1440p"
 | 
			
		||||
        break
 | 
			
		||||
        ;;
 | 
			
		||||
    *)
 | 
			
		||||
        echo "${ERROR} invalid choice. please enter 1 for < 1440p or 2 for ≥ 1440p."
 | 
			
		||||
        ;;
 | 
			
		||||
  esac
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# Use the selected resolution in your existing script
 | 
			
		||||
echo "${OK} you have chosen $resolution resolution." 2>&1 | tee -a "$LOG"
 | 
			
		||||
 | 
			
		||||
# Add your commands based on the resolution choice
 | 
			
		||||
if [ "$resolution" == "< 1440p" ]; then
 | 
			
		||||
  #cp -r config/rofi/resolution/1080p/* config/rofi/ 10-Feb-2025
 | 
			
		||||
  sed -i 's/font_size 16.0/font_size 12.0/' config/kitty/kitty.conf
 | 
			
		||||
 | 
			
		||||
  # hyprlock matters
 | 
			
		||||
  mv config/hypr/hyprlock.conf config/hypr/hyprlock-2k.conf &&
 | 
			
		||||
  mv config/hypr/hyprlock-1080p.conf config/hypr/hyprlock.conf
 | 
			
		||||
 | 
			
		||||
  # rofi fonts reduction
 | 
			
		||||
  themes_dir="config/rofi/themes"
 | 
			
		||||
  config_file="config/rofi/config.rasi"
 | 
			
		||||
 | 
			
		||||
  # Change rofi font size
 | 
			
		||||
  find "$themes_dir" -type f | while read -r file; do
 | 
			
		||||
      if grep -Pzoq 'element-text {\n  font: "JetBrainsMono Nerd Font SemiBold 12";\n}' "$file"; then
 | 
			
		||||
          sed -i 's/font: "JetBrainsMono Nerd Font SemiBold 12"/font: "JetBrainsMono Nerd Font SemiBold 10"/' "$file"
 | 
			
		||||
      fi
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  # Change rofi font size in ~/.config/rofi/config.rasi
 | 
			
		||||
  if [ -f "$config_file" ]; then
 | 
			
		||||
      if grep -Pzoq 'configuration {\n  font: "JetBrainsMono Nerd Font SemiBold 13";\n}' "$config_file"; then
 | 
			
		||||
          sed -i 's/font: "JetBrainsMono Nerd Font SemiBold 13"/font: "JetBrainsMono Nerd Font SemiBold 12"/' "$config_file"
 | 
			
		||||
      fi
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
 | 
			
		||||
# Ask whether to change to 12hr format
 | 
			
		||||
while true; do
 | 
			
		||||
    echo -e "${NOTE} ${SKY_BLUE} by default, nixos-dots is configured in 24H clock format."
 | 
			
		||||
    read -p "$CAT do you want to change to 12H format or AM/PM format? (y/n): " answer
 | 
			
		||||
 | 
			
		||||
    # Convert the answer to lowercase for comparison
 | 
			
		||||
    answer=$(echo "$answer" | tr '[:upper:]' '[:lower:]')
 | 
			
		||||
 | 
			
		||||
    # Check if the answer is valid
 | 
			
		||||
    if [[ "$answer" == "y" ]]; then
 | 
			
		||||
        # Modify waybar clock modules if 12hr is selected    
 | 
			
		||||
        # Clock 1
 | 
			
		||||
        sed -i 's#^\(\s*\)//\("format": " {:%I:%M %p}",\) #\1\2 #g' config/waybar/Modules 2>&1 | tee -a "$LOG"
 | 
			
		||||
        sed -i 's#^\(\s*\)\("format": " {:%H:%M:%S}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG"
 | 
			
		||||
        
 | 
			
		||||
        # Clock 2
 | 
			
		||||
        sed -i 's#^\(\s*\)\("format": "  {:%H:%M}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG"
 | 
			
		||||
        
 | 
			
		||||
        # Clock 3
 | 
			
		||||
        sed -i 's#^\(\s*\)//\("format": "{:%I:%M %p - %d/%b}",\) #\1\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG"
 | 
			
		||||
        sed -i 's#^\(\s*\)\("format": "{:%H:%M - %d/%b}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG"
 | 
			
		||||
        
 | 
			
		||||
        # Clock 4
 | 
			
		||||
        sed -i 's#^\(\s*\)//\("format": "{:%B | %a %d, %Y | %I:%M %p}",\) #\1\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG"
 | 
			
		||||
        sed -i 's#^\(\s*\)\("format": "{:%B | %a %d, %Y | %H:%M}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG"
 | 
			
		||||
 | 
			
		||||
        # Clock 5
 | 
			
		||||
        sed -i 's#^\(\s*\)//\("format": "{:%A, %I:%M %P}",\) #\1\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG"
 | 
			
		||||
        sed -i 's#^\(\s*\)\("format": "{:%a %d | %H:%M}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG"
 | 
			
		||||
        
 | 
			
		||||
        # for hyprlock
 | 
			
		||||
        sed -i 's/^\s*text = cmd\[update:1000\] echo "\$(date +"%H")"/# &/' config/hypr/hyprlock.conf 2>&1 | tee -a "$LOG"
 | 
			
		||||
        sed -i 's/^\(\s*\)# *text = cmd\[update:1000\] echo "\$(date +"%I")" #AM\/PM/\1    text = cmd\[update:1000\] echo "\$(date +"%I")" #AM\/PM/' config/hypr/hyprlock.conf 2>&1 | tee -a "$LOG"
 | 
			
		||||
 | 
			
		||||
        sed -i 's/^\s*text = cmd\[update:1000\] echo "\$(date +"%S")"/# &/' config/hypr/hyprlock.conf 2>&1 | tee -a "$LOG"
 | 
			
		||||
        sed -i 's/^\(\s*\)# *text = cmd\[update:1000\] echo "\$(date +"%S %p")" #AM\/PM/\1    text = cmd\[update:1000\] echo "\$(date +"%S %p")" #AM\/PM/' config/hypr/hyprlock.conf 2>&1 | tee -a "$LOG"
 | 
			
		||||
        
 | 
			
		||||
        echo "${OK} 12H format set on waybar clocks successfully." 2>&1 | tee -a "$LOG"
 | 
			
		||||
 | 
			
		||||
      # Function to apply 12H format to SDDM themes
 | 
			
		||||
      apply_sddm_12h_format() {
 | 
			
		||||
      local sddm_directory=$1
 | 
			
		||||
 | 
			
		||||
      # Check if the directory exists
 | 
			
		||||
      if [ -d "$sddm_directory" ]; then
 | 
			
		||||
        echo "editing ${SKY_BLUE}$sddm_directory${RESET} to 12H format" 2>&1 | tee -a "$LOG"
 | 
			
		||||
 | 
			
		||||
        sudo sed -i 's|^## HourFormat="hh:mm AP"|HourFormat="hh:mm AP"|' "$sddm_directory/theme.conf" 2>&1 | tee -a "$LOG" || true
 | 
			
		||||
        sudo sed -i 's|^HourFormat="HH:mm"|## HourFormat="HH:mm"|' "$sddm_directory/theme.conf" 2>&1 | tee -a "$LOG" || true
 | 
			
		||||
      fi
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      # Applying to different SDDM themes
 | 
			
		||||
      apply_sddm_12h_format "/usr/share/sddm/themes/simple-sddm"
 | 
			
		||||
      apply_sddm_12h_format "/usr/share/sddm/themes/simple-sddm-2"
 | 
			
		||||
 | 
			
		||||
      # For SDDM (sequoia_2)
 | 
			
		||||
      sddm_directory_3="/usr/share/sddm/themes/sequoia_2"
 | 
			
		||||
      if [ -d "$sddm_directory_3" ]; then
 | 
			
		||||
        echo "${YELLOW}sddm sequoia_2${RESET} theme exists. editing to 12H format" 2>&1 | tee -a "$LOG"
 | 
			
		||||
 | 
			
		||||
        # Comment out the existing clockFormat="HH:mm" line
 | 
			
		||||
        sudo sed -i 's|^clockFormat="HH:mm"|## clockFormat="HH:mm"|' "$sddm_directory_3/theme.conf" 2>&1 | tee -a "$LOG" || true
 | 
			
		||||
 | 
			
		||||
        # Insert the new clockFormat="hh:mm AP" line if it's not already present
 | 
			
		||||
        if ! grep -q 'clockFormat="hh:mm AP"' "$sddm_directory_3/theme.conf"; then
 | 
			
		||||
          sudo sed -i '/^clockFormat=/a clockFormat="hh:mm AP"' "$sddm_directory_3/theme.conf" 2>&1 | tee -a "$LOG" || true
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        echo "${OK} 12H format set to SDDM successfully." 2>&1 | tee -a "$LOG"
 | 
			
		||||
      fi
 | 
			
		||||
 | 
			
		||||
    break
 | 
			
		||||
     
 | 
			
		||||
    elif [[ "$answer" == "n" ]]; then
 | 
			
		||||
        echo "${NOTE} you chose not to change to 12H format." 2>&1 | tee -a "$LOG"
 | 
			
		||||
        break  # Exit the loop if the user chooses "n"
 | 
			
		||||
    else
 | 
			
		||||
        echo "${ERROR} invalid choice. please enter y for yes or n for no."
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
 | 
			
		||||
# Check if the user wants to disable Rainbow borders
 | 
			
		||||
echo "${NOTE} ${SKY_BLUE}by default, rainbow borders animation is enabled"
 | 
			
		||||
echo "${WARN} however, this uses a bit more CPU and Memory resources."
 | 
			
		||||
 | 
			
		||||
read -p "${CAT} do you want to disable Rainbow Borders animation? (y/N): " border_choice
 | 
			
		||||
if [[ "$border_choice" =~ ^[Yy]$ ]]; then
 | 
			
		||||
    mv config/hypr/UserScripts/RainbowBorders.sh config/hypr/UserScripts/RainbowBorders.bak.sh
 | 
			
		||||
    
 | 
			
		||||
    sed -i '/exec-once = \$UserScripts\/RainbowBorders.sh \&/s/^/#/' config/hypr/UserConfigs/Startup_Apps.conf
 | 
			
		||||
    sed -i '/^[[:space:]]*animation = borderangle, 1, 180, liner, loop/s/^/#/' config/hypr/UserConfigs/UserAnimations.conf
 | 
			
		||||
    
 | 
			
		||||
    echo "${OK} rainbow borders are now disabled." 2>&1 | tee -a "$LOG"
 | 
			
		||||
else
 | 
			
		||||
    echo "${NOTE} no changes made. rainbow borders remain enabled." 2>&1 | tee -a "$LOG"
 | 
			
		||||
fi
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
# Function to create a unique backup directory name with month, day, hours, and minutes
 | 
			
		||||
get_backup_dirname() {
 | 
			
		||||
  local timestamp
 | 
			
		||||
  timestamp=$(date +"%m%d_%H%M")
 | 
			
		||||
  echo "back-up_${timestamp}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Check if the ~/.config/ directory exists
 | 
			
		||||
if [ ! -d "$HOME/.config" ]; then
 | 
			
		||||
  echo "${ERROR} - $HOME/.config directory does not exist, creating it now"
 | 
			
		||||
  mkdir -p "$HOME/.config" && echo "${OK}directory successfully created" || echo "${ERROR}failed to create directory!"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf "${INFO} - copying dotfiles ${SKY_BLUE}first${RESET} part\n"
 | 
			
		||||
# config directories which will ask the user whether to replace or not
 | 
			
		||||
DIRS="
 | 
			
		||||
  ags
 | 
			
		||||
  fastfetch
 | 
			
		||||
  kitty
 | 
			
		||||
  rofi
 | 
			
		||||
  swaync
 | 
			
		||||
"
 | 
			
		||||
for DIR2 in $DIRS; do
 | 
			
		||||
  DIRPATH="$HOME/.config/$DIR2"
 | 
			
		||||
  
 | 
			
		||||
  if [ -d "$DIRPATH" ]; then
 | 
			
		||||
    while true; do
 | 
			
		||||
      printf "\n${INFO} found ${YELLOW}$DIR2${RESET} config found in ${HOME}/.config/\n"
 | 
			
		||||
      read -p "${CAT} do you want to replace ${YELLOW}$DIR2${RESET} config? (y/n): " DIR1_CHOICE
 | 
			
		||||
      case "$DIR1_CHOICE" in
 | 
			
		||||
        [Yy]* )
 | 
			
		||||
          BACKUP_DIR=$(get_backup_dirname)
 | 
			
		||||
          # Backup the existing directory
 | 
			
		||||
          mv "$DIRPATH" "$DIRPATH-backup-$BACKUP_DIR" 2>&1 | tee -a "$LOG"
 | 
			
		||||
          echo -e "${NOTE} - backed up $DIR2 to $DIRPATH-backup-$BACKUP_DIR." 2>&1 | tee -a "$LOG"
 | 
			
		||||
 | 
			
		||||
          # Copy the new config
 | 
			
		||||
          cp -r "config/$DIR2" "$HOME/.config/$DIR2" 2>&1 | tee -a "$LOG"
 | 
			
		||||
          echo -e "${OK} - replaced $DIR2 with new configuration." 2>&1 | tee -a "$LOG"
 | 
			
		||||
         
 | 
			
		||||
          # Restoring rofi themes directory unique themes
 | 
			
		||||
          if [ "$DIR2" = "rofi" ]; then
 | 
			
		||||
            if [ -d "$DIRPATH-backup-$BACKUP_DIR/themes" ]; then
 | 
			
		||||
              for file in "$DIRPATH-backup-$BACKUP_DIR/themes"/*; do
 | 
			
		||||
                [ -e "$file" ] || continue  # Skip if no files are found
 | 
			
		||||
                echo "copying $file to $HOME/.config/rofi/themes/" >> "$LOG"
 | 
			
		||||
                cp -n "$file" "$HOME/.config/rofi/themes/"
 | 
			
		||||
              done || true
 | 
			
		||||
            fi
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
          break
 | 
			
		||||
          ;;
 | 
			
		||||
        [Nn]* )
 | 
			
		||||
          echo -e "${NOTE} - skipping ${YELLOW}$DIR2${RESET}" 2>&1 | tee -a "$LOG"
 | 
			
		||||
          break
 | 
			
		||||
          ;;
 | 
			
		||||
        * )
 | 
			
		||||
          echo -e "${WARN} - invalid choice. please enter Y or N."
 | 
			
		||||
          ;;
 | 
			
		||||
      esac
 | 
			
		||||
    done
 | 
			
		||||
  else
 | 
			
		||||
    # Copy new config if directory does not exist
 | 
			
		||||
    cp -r "config/$DIR2" "$HOME/.config/$DIR2" 2>&1 | tee -a "$LOG"
 | 
			
		||||
    echo -e "${OK} - copy completed for ${YELLOW}$DIR2${RESET}" 2>&1 | tee -a "$LOG"
 | 
			
		||||
  fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
 | 
			
		||||
# special copy for waybar because of symlink
 | 
			
		||||
DIRW="waybar"
 | 
			
		||||
DIRPATHW="$HOME/.config/$DIRW"
 | 
			
		||||
if [ -d "$DIRPATHW" ]; then
 | 
			
		||||
  while true; do
 | 
			
		||||
    read -p "${CAT} do you want to replace ${YELLOW}$DIRW${RESET} config? (y/n): " DIR1_CHOICE
 | 
			
		||||
    case "$DIR1_CHOICE" in
 | 
			
		||||
      [Yy]* )
 | 
			
		||||
        BACKUP_DIR=$(get_backup_dirname)
 | 
			
		||||
        cp -r "$DIRPATHW" "$DIRPATHW-backup-$BACKUP_DIR" 2>&1 | tee -a "$LOG"
 | 
			
		||||
        echo -e "${NOTE} - backed up $DIRW to $DIRPATHW-backup-$BACKUP_DIR" 2>&1 | tee -a "$LOG"
 | 
			
		||||
 | 
			
		||||
        # remove old $DIRPATHW and copy the new one
 | 
			
		||||
        rm -rf "$DIRPATHW" && cp "config/$DIRW" "$DIRPATHW" 2>&1 | tee -a "$LOG"
 | 
			
		||||
 | 
			
		||||
        # step 1: handle waybar symlinks
 | 
			
		||||
        for file in "config" "style.css"; do
 | 
			
		||||
          symlink="$DIRPATHW-backup-$BACKUP_DIR/$file"
 | 
			
		||||
          target_file="$DIRPATHW/$file"
 | 
			
		||||
 | 
			
		||||
          if [ -L "$symlink" ]; then
 | 
			
		||||
            symlink_target=$(readlink "$symlink")
 | 
			
		||||
            if [ -f "$symlink_target" ]; then
 | 
			
		||||
              rm -f "$target_file" && cp -f "$symlink_target" "$target_file"
 | 
			
		||||
              echo -e "${NOTE} - copied $file as a regular file"
 | 
			
		||||
            else
 | 
			
		||||
              echo -e "${WARN} - symlink target for $file does not exist"
 | 
			
		||||
            fi
 | 
			
		||||
          fi
 | 
			
		||||
        done
 | 
			
		||||
 | 
			
		||||
        # step 2: copy non-existing directories and files under waybar/configs
 | 
			
		||||
        for dir in "$DIRPATHW-backup-$BACKUP_DIR/configs"/*; do
 | 
			
		||||
          [ -e "$dir" ] || continue # skip if no files are found
 | 
			
		||||
          if [ -d "$dir" ]; then
 | 
			
		||||
            target_dir="$HOME/.config/waybar/configs/$(basename "$dir")"
 | 
			
		||||
            if [ ! -d "$target_dir" ]; then
 | 
			
		||||
              echo "copying directory $dir to $HOME/.config/waybar/configs/" >> "$LOG"
 | 
			
		||||
              cp -r "$dir" "$HOME/.config/waybar/configs/"
 | 
			
		||||
            else
 | 
			
		||||
              echo "directory $target_dir already exists, skipping..." >> "$LOG"
 | 
			
		||||
            fi
 | 
			
		||||
          fi
 | 
			
		||||
        done
 | 
			
		||||
 | 
			
		||||
        for file in "$DIRPATHW-backup-$BACKUP_DIR/configs"/*; do
 | 
			
		||||
          [ -e "$file" ] || continue # skip if no files are found
 | 
			
		||||
          target_file="$HOME/.config/waybar/configs/$(basename "$file")"
 | 
			
		||||
          if [ ! -e "$target_file" ]; then
 | 
			
		||||
            echo "copying $file to $HOME/.config/waybar/configs/" >> "$LOG"
 | 
			
		||||
            cp "$file" "$HOME/.config/waybar/configs/"
 | 
			
		||||
          else
 | 
			
		||||
            echo "file $target_file already exists, skipping..." >> "$LOG"
 | 
			
		||||
          fi
 | 
			
		||||
        done || true
 | 
			
		||||
 | 
			
		||||
        # step 3: copy unique files in waybar/style
 | 
			
		||||
        for file in "$DIRPATHW-backup-$BACKUP_DIR/style/"*; do
 | 
			
		||||
          [ -e "$file" ] || continue # skip if no files are found
 | 
			
		||||
          if [ -d "$file" ]; then
 | 
			
		||||
            target_dir="$HOME/.config/waybar/style/$(basename "$file")"
 | 
			
		||||
            if [ ! -d "$target_dir" ]; then
 | 
			
		||||
              echo "copying directory $file to $HOME/.config/waybar/style/" >> "$LOG"
 | 
			
		||||
              cp -r "$file" "$HOME/.config/waybar/style/" # TODO: shouldn't this be $target_dir instead of $file?
 | 
			
		||||
            else
 | 
			
		||||
              echo "directory $target_dir already_exists, skipping..." >> "$LOG"
 | 
			
		||||
            fi
 | 
			
		||||
          else
 | 
			
		||||
            target_file="$HOME/.config/waybar/style/$(basename "$file")"
 | 
			
		||||
            if [ ! -e "$target_file" ]; then
 | 
			
		||||
              echo "copying file $file to $HOME/.config/waybar/style/" >> "$LOG"
 | 
			
		||||
              cp "$file" "$HOME/.config/waybar/style/"
 | 
			
		||||
            else
 | 
			
		||||
              echo "file $target_file already exists, skipping..." >> "$LOG"
 | 
			
		||||
            fi
 | 
			
		||||
          fi
 | 
			
		||||
        done || true
 | 
			
		||||
 | 
			
		||||
        # step 4: restore Modules_Extra
 | 
			
		||||
        BACKUP_FILE="$DIRPATHW-backup-$BACKUP_DIR/UserModules"
 | 
			
		||||
        if [ -f "$BACKUP_FILE" ]; then
 | 
			
		||||
          cp -f "$BACKUP_FILE" "$DIRPATHW/UserModules"
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        break
 | 
			
		||||
        ;;
 | 
			
		||||
      [Nn]* )
 | 
			
		||||
        echo -e "${NOTE} - skipping ${YELLOW}$DIRW${RESET} config replacement" 2>&1 | tee -a "$LOG"
 | 
			
		||||
        break
 | 
			
		||||
        ;;
 | 
			
		||||
      * )
 | 
			
		||||
        echo -e "${WARN} - invalid choice, please enter Y or N"
 | 
			
		||||
    esac
 | 
			
		||||
  done
 | 
			
		||||
else
 | 
			
		||||
  cp -r "config/$DIRW" "$DIRWPATH" 2>&1 | tee -a "$LOG"
 | 
			
		||||
  echo -e "${OK} - copy completed for ${YELLOW}$DIRW${RESET}" 2>&1 | tee -a "$LOG"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
 | 
			
		||||
printf "${INFO} - copying dotfiles ${SKY_BLUE}second${RESET} part\n"
 | 
			
		||||
 | 
			
		||||
# check if the config directory exists
 | 
			
		||||
if [ ! -d "config" ]; then
 | 
			
		||||
  echo "${ERROR} the 'config' directory does not exist"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
DIR="
 | 
			
		||||
  btop
 | 
			
		||||
  cava
 | 
			
		||||
  hypr
 | 
			
		||||
  Kvantum
 | 
			
		||||
  qt5ct
 | 
			
		||||
  qt6ct
 | 
			
		||||
  swappy
 | 
			
		||||
  wallust
 | 
			
		||||
  wlogout
 | 
			
		||||
"
 | 
			
		||||
for DIR_NAME in $DIR; do
 | 
			
		||||
  DIRPATH="$HOME/.config/$DIR_NAME"
 | 
			
		||||
  
 | 
			
		||||
  # Backup the existing directory if it exists
 | 
			
		||||
  if [ -d "$DIRPATH" ]; then
 | 
			
		||||
    echo -e "\n${NOTE} - config for ${YELLOW}$DIR_NAME${RESET} found, attempting to back up."
 | 
			
		||||
    BACKUP_DIR=$(get_backup_dirname)
 | 
			
		||||
    
 | 
			
		||||
    # Backup the existing directory
 | 
			
		||||
    mv "$DIRPATH" "$DIRPATH-backup-$BACKUP_DIR" 2>&1 | tee -a "$LOG"
 | 
			
		||||
    if [ $? -eq 0 ]; then
 | 
			
		||||
      echo -e "${NOTE} - backed up $DIR_NAME to $DIRPATH-backup-$BACKUP_DIR."
 | 
			
		||||
    else
 | 
			
		||||
      echo "${ERROR} - failed to back up $DIR_NAME."
 | 
			
		||||
      exit 1
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  # Copy the new config
 | 
			
		||||
  if [ -d "config/$DIR_NAME" ]; then
 | 
			
		||||
    cp -r "config/$DIR_NAME/" $HOME/.config/"$DIR_NAME" 2>&1 | tee -a "$LOG"
 | 
			
		||||
    if [ $? -eq 0 ]; then
 | 
			
		||||
      echo "${OK} - copy of config for ${YELLOW}$DIR_NAME${RESET} completed!"
 | 
			
		||||
    else
 | 
			
		||||
      echo "${ERROR} - failed to copy $DIR_NAME."
 | 
			
		||||
      exit 1
 | 
			
		||||
    fi
 | 
			
		||||
  else
 | 
			
		||||
    echo "${ERROR} - directory config/$DIR_NAME does not exist to copy."
 | 
			
		||||
  fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
 | 
			
		||||
# automatically restore animations and monitor-profiles
 | 
			
		||||
# including monitors.conf and workspaces.conf
 | 
			
		||||
HYPR_DIR="$HOME/.config/hypr"
 | 
			
		||||
BACKUP_DIR=$(get_backup_dirname)
 | 
			
		||||
BACKUP_HYPR_PATH="$HYPR_DIR-backup-$BACKUP_DIR"
 | 
			
		||||
 | 
			
		||||
if [ -d "$BACKUP_HYPR_PATH" ]; then
 | 
			
		||||
  echo -e "\n${NOTE} restoring ${SKY_BLUE}animations and monitor profiles${RESET} directories into ${YELLOW}$HYPR_DIR${RESET}..."
 | 
			
		||||
  
 | 
			
		||||
  DIR_B=("Monitor_Profiles" "animations" "wallpaper_effects")
 | 
			
		||||
  # Restore directories automatically 
 | 
			
		||||
  for DIR_RESTORE in "${DIR_B[@]}"; do
 | 
			
		||||
    BACKUP_SUBDIR="$BACKUP_HYPR_PATH/$DIR_RESTORE"
 | 
			
		||||
    
 | 
			
		||||
    if [ -d "$BACKUP_SUBDIR" ]; then
 | 
			
		||||
      cp -r "$BACKUP_SUBDIR" "$HYPR_DIR/" 
 | 
			
		||||
      echo "${OK} - restored directory: ${MAGENTA}$DIR_RESTORE${RESET}" 2>&1 | tee -a "$LOG"
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  # Restore files automatically
 | 
			
		||||
  FILE_B=("monitors.conf" "workspaces.conf" "pyprland.toml")
 | 
			
		||||
  for FILE_RESTORE in "${FILE_B[@]}"; do
 | 
			
		||||
    BACKUP_FILE="$BACKUP_HYPR_PATH/$FILE_RESTORE"
 | 
			
		||||
 | 
			
		||||
    if [ -f "$BACKUP_FILE" ]; then
 | 
			
		||||
      cp "$BACKUP_FILE" "$HYPR_DIR/$FILE_RESTORE" 
 | 
			
		||||
      echo "${OK} - restored file: ${MAGENTA}$FILE_RESTORE${RESET}" 2>&1 | tee -a "$LOG"
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
 | 
			
		||||
# Restoring UserConfigs and UserScripts
 | 
			
		||||
DIRH="hypr"
 | 
			
		||||
FILES_TO_RESTORE=(
 | 
			
		||||
  "ENVariables.conf"
 | 
			
		||||
  "LaptopDisplay.conf"
 | 
			
		||||
  "Laptops.conf"
 | 
			
		||||
  "Startup_Apps.conf"
 | 
			
		||||
  "UserDecorations.conf"
 | 
			
		||||
  "UserAnimations.conf"
 | 
			
		||||
  "UserKeybinds.conf"
 | 
			
		||||
  "UserSettings.conf"
 | 
			
		||||
  "WindowRules.conf"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
DIRPATH="$HOME/.config/$DIRH"
 | 
			
		||||
BACKUP_DIR=$(get_backup_dirname)
 | 
			
		||||
BACKUP_DIR_PATH="$DIRPATH-backup-$BACKUP_DIR/UserConfigs"
 | 
			
		||||
 | 
			
		||||
if [ -z "$BACKUP_DIR" ]; then
 | 
			
		||||
  echo "${ERROR} - backup directory name is empty, exiting."
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -d "$BACKUP_DIR_PATH" ]; then
 | 
			
		||||
  echo -e "${NOTE} restoring previous ${MAGENTA}user-configs${RESET}... "
 | 
			
		||||
  echo -e "${WARN} ${WARNING}if you decide to restore the old configs, make sure to handle the updates or changes manually${RESET}."
 | 
			
		||||
 | 
			
		||||
  for FILE_NAME in "${FILES_TO_RESTORE[@]}"; do
 | 
			
		||||
    BACKUP_FILE="$BACKUP_DIR_PATH/$FILE_NAME"
 | 
			
		||||
    if [ -f "$BACKUP_FILE" ]; then
 | 
			
		||||
      printf "\n${INFO} found ${YELLOW}$FILE_NAME${RESET} in hypr backup...\n"
 | 
			
		||||
      read -p "${CAT} do you want to restore ${YELLOW}$FILE_NAME${RESET} from backup? (y/N): " file_restore
 | 
			
		||||
 | 
			
		||||
      if [[ "$file_restore" == [Yy]* ]]; then
 | 
			
		||||
        if cp "$BACKUP_FILE" "$DIRPATH/UserConfigs/$FILE_NAME"; then
 | 
			
		||||
          echo "${OK} - $FILE_NAME restored!" 2>&1 | tee -a "$LOG"
 | 
			
		||||
        else
 | 
			
		||||
          echo "${ERROR} - failed to restore $FILE_NAME!" 2>&1 | tee -a "$LOG"
 | 
			
		||||
        fi
 | 
			
		||||
      else
 | 
			
		||||
        echo "${NOTE} - skipped restoring $FILE_NAME."
 | 
			
		||||
      fi
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
 | 
			
		||||
# Restoring previous UserScripts
 | 
			
		||||
DIRSH="hypr"
 | 
			
		||||
SCRIPTS_TO_RESTORE=(
 | 
			
		||||
  "RofiBeats.sh"
 | 
			
		||||
  "Weather.py"
 | 
			
		||||
  "Weather.sh"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
DIRSHPATH="$HOME/.config/$DIRSH"
 | 
			
		||||
BACKUP_DIR_PATH="$DIRSHPATH-backup-$BACKUP_DIR/UserScripts"
 | 
			
		||||
 | 
			
		||||
if [ -d "$BACKUP_DIR_PATH" ]; then
 | 
			
		||||
  echo -e "${NOTE} restoring previous ${MAGENTA}user-scripts${RESET}..."
 | 
			
		||||
 | 
			
		||||
  for SCRIPT_NAME in "${SCRIPTS_TO_RESTORE[@]}"; do
 | 
			
		||||
    BACKUP_SCRIPT="$BACKUP_DIR_PATH/$SCRIPT_NAME"
 | 
			
		||||
 | 
			
		||||
    if [ -f "$BACKUP_SCRIPT" ]; then
 | 
			
		||||
      printf "\n${INFO} found ${YELLOW}$SCRIPT_NAME${RESET} in hypr backup...\n"
 | 
			
		||||
      read -p "${CAT} do you want to restore ${YELLOW}$SCRIPT_NAME${RESET} from backup? (y/N): " script_restore
 | 
			
		||||
      if [[ "$script_restore" == [Yy]* ]]; then
 | 
			
		||||
        if cp "$BACKUP_SCRIPT" "$DIRSHPATH/UserScripts/$SCRIPT_NAME"; then
 | 
			
		||||
          echo "${OK} - $SCRIPT_NAME restored!" 2>&1 | tee -a "$LOG"
 | 
			
		||||
        else
 | 
			
		||||
          echo "${ERROR} - failed to restore $SCRIPT_NAME!" 2>&1 | tee -a "$LOG"
 | 
			
		||||
        fi
 | 
			
		||||
      else
 | 
			
		||||
        echo "${NOTE} - skipped restoring $SCRIPT_NAME."
 | 
			
		||||
      fi
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
 | 
			
		||||
# restoring some files in ~/.config/hypr
 | 
			
		||||
DIR_H="hypr"
 | 
			
		||||
FILES_2_RESTORE=(
 | 
			
		||||
  "hyprlock.conf"
 | 
			
		||||
  "hypridle.conf"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
DIRPATH="$HOME/.config/$DIR_H"
 | 
			
		||||
BACKUP_DIR=$(get_backup_dirname)
 | 
			
		||||
BACKUP_DIR_PATH_F="$DIRPATH-backup-$BACKUP_DIR"
 | 
			
		||||
 | 
			
		||||
if [ -d "$BACKUP_DIR_PATH_F" ]; then
 | 
			
		||||
  echo -e "${NOTE} restoring some files in ${MAGENTA}$HOME/.config/hypr directory${RESET}..."
 | 
			
		||||
 | 
			
		||||
  for FILE_RESTORE in "${FILES_2_RESTORE[@]}"; do
 | 
			
		||||
    BACKUP_FILE="$BACKUP_DIR_PATH_F/$FILE_RESTORE"
 | 
			
		||||
  
 | 
			
		||||
    if [ -f "$BACKUP_FILE" ]; then
 | 
			
		||||
      echo -e "\n${INFO} found ${YELLOW}$FILE_RESTORE${RESET} in hypr backup..."
 | 
			
		||||
      read -p "${CAT} do you want to restore ${YELLOW}$FILE_RESTORE${RESET} from backup? (y/N): " file2restore
 | 
			
		||||
 | 
			
		||||
      if [[ "$file2restore" == [Yy]* ]]; then
 | 
			
		||||
        if cp "$BACKUP_FILE" "$DIRPATH/$FILE_RESTORE"; then
 | 
			
		||||
          echo "${OK} - $FILE_RESTORE restored!" 2>&1 | tee -a "$LOG"
 | 
			
		||||
        else
 | 
			
		||||
          echo "${ERROR} - failed to restore $FILE_RESTORE!" 2>&1 | tee -a "$LOG"
 | 
			
		||||
        fi
 | 
			
		||||
      else
 | 
			
		||||
        echo "${NOTE} - skipped restoring $FILE_RESTORE."
 | 
			
		||||
      fi
 | 
			
		||||
    else
 | 
			
		||||
      echo "${ERROR} - backup file $BACKUP_FILE does not exist."
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
 | 
			
		||||
# Define the target directory for rofi themes
 | 
			
		||||
rofi_DIR="$HOME/.local/share/rofi/themes"
 | 
			
		||||
 | 
			
		||||
if [ ! -d "$rofi_DIR" ]; then
 | 
			
		||||
  mkdir -p "$rofi_DIR"
 | 
			
		||||
fi
 | 
			
		||||
if [ -d "$HOME/.config/rofi/themes" ]; then
 | 
			
		||||
  if [ -z "$(ls -A $HOME/.config/rofi/themes)" ]; then
 | 
			
		||||
    echo '/* Dummy Rofi theme */' > "$HOME/.config/rofi/themes/dummy.rasi"
 | 
			
		||||
  fi
 | 
			
		||||
  ln -snf ~/.config/rofi/themes/* ~/.local/share/rofi/themes/
 | 
			
		||||
  # Delete the dummy file if it was created
 | 
			
		||||
  if [ -f "$HOME/.config/rofi/themes/dummy.rasi" ]; then
 | 
			
		||||
    rm "$HOME/.config/rofi/themes/dummy.rasi"
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
 | 
			
		||||
# wallpaper stuff
 | 
			
		||||
mkdir -p $HOME/Pictures/wallpapers
 | 
			
		||||
if cp -r wallpapers $HOME/Pictures/; then
 | 
			
		||||
  echo "${OK} some ${MAGENTA}wallpapers${RESET} copied successfully!" | tee -a "$LOG"
 | 
			
		||||
else
 | 
			
		||||
  echo "${ERROR} failed to copy some ${YELLOW}wallpapers${RESET}" | tee -a "$LOG"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Set some files as executable
 | 
			
		||||
chmod +x "$HOME/.config/hypr/scripts/"* 2>&1 | tee -a "$LOG"
 | 
			
		||||
chmod +x "$HOME/.config/hypr/UserScripts/"* 2>&1 | tee -a "$LOG"
 | 
			
		||||
# Set executable for initial-boot.sh
 | 
			
		||||
chmod +x "$HOME/.config/hypr/initial-boot.sh" 2>&1 | tee -a "$LOG"
 | 
			
		||||
 | 
			
		||||
# Waybar config to symlink & retain based on machine type
 | 
			
		||||
if hostnamectl | grep -q 'Chassis: desktop'; then
 | 
			
		||||
    config_file="$waybar_config"
 | 
			
		||||
    config_remove=" Laptop"
 | 
			
		||||
else
 | 
			
		||||
    config_file="$waybar_config_laptop"
 | 
			
		||||
    config_remove=""
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# check if ~/.config/waybar/config does not exist or is a symlink
 | 
			
		||||
if [ ! -e "$HOME/.config/waybar/config" ] || [ -L "$HOME/.config/waybar/config" ]; then
 | 
			
		||||
  ln -sf "$config_file" "$HOME/.config/waybar/config" 2>&1 | tee -a "$LOG"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Remove inappropriate waybar configs
 | 
			
		||||
rm -rf "$HOME/.config/waybar/configs/[TOP] Default$config_remove" \
 | 
			
		||||
       "$HOME/.config/waybar/configs/[BOT] Default$config_remove" \
 | 
			
		||||
       "$HOME/.config/waybar/configs/[TOP] Default$config_remove (old v1)" \
 | 
			
		||||
       "$HOME/.config/waybar/configs/[TOP] Default$config_remove (old v2)" \
 | 
			
		||||
       "$HOME/.config/waybar/configs/[TOP] Default$config_remove (old v3)" \
 | 
			
		||||
       "$HOME/.config/waybar/configs/[TOP] Default$config_remove (old v4)" 2>&1 | tee -a "$LOG" || true
 | 
			
		||||
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
 | 
			
		||||
# for SDDM (sequoia_2)
 | 
			
		||||
sddm_sequioa="/usr/share/sddm/themes/sequoia_2"
 | 
			
		||||
if [ -d "$sddm_sequioa" ]; then
 | 
			
		||||
  while true; do
 | 
			
		||||
    read -rp "${CAT} SDDM sequoia_2 theme detected! apply current wallpaper as SDDM background? (y/n): " SDDM_WALL
 | 
			
		||||
    
 | 
			
		||||
    # Remove any leading/trailing whitespace or newlines from input
 | 
			
		||||
    SDDM_WALL=$(echo "$SDDM_WALL" | tr -d '\n' | tr -d ' ')
 | 
			
		||||
 | 
			
		||||
    case $SDDM_WALL in
 | 
			
		||||
      [Yy])
 | 
			
		||||
        # Copy the wallpaper, ignore errors if the file exists or fails
 | 
			
		||||
        sudo cp -r "config/hypr/wallpaper_effects/.wallpaper_current" "/usr/share/sddm/themes/sequoia_2/backgrounds/default" || true
 | 
			
		||||
        echo "${NOTE} current wallpaper applied as default SDDM background" 2>&1 | tee -a "$LOG"
 | 
			
		||||
        break
 | 
			
		||||
        ;;
 | 
			
		||||
      [Nn])
 | 
			
		||||
        echo "${NOTE} you chose not to apply the current wallpaper to SDDM." 2>&1 | tee -a "$LOG"
 | 
			
		||||
        break
 | 
			
		||||
        ;;
 | 
			
		||||
      *)
 | 
			
		||||
        echo "please enter 'y' or 'n' to proceed."
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
  done
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# additional wallpapers
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
echo "${MAGENTA}by default only a few wallpapers are copied${RESET}..."
 | 
			
		||||
 | 
			
		||||
# TODO: download more wallpapers?
 | 
			
		||||
 | 
			
		||||
cleanup_backups() {
 | 
			
		||||
  CONFIG_DIR="$HOME/.config"
 | 
			
		||||
  BACKUP_PREFIX="-backup"
 | 
			
		||||
 | 
			
		||||
  # Loop through directories in $HOME/.config
 | 
			
		||||
  for DIR in "$CONFIG_DIR"/*; do
 | 
			
		||||
    if [ -d "$DIR" ]; then
 | 
			
		||||
      BACKUP_DIRS=()
 | 
			
		||||
 | 
			
		||||
      # Check for backup directories
 | 
			
		||||
      for BACKUP in "$DIR"$BACKUP_PREFIX*; do
 | 
			
		||||
        if [ -d "$BACKUP" ]; then
 | 
			
		||||
          BACKUP_DIRS+=("$BACKUP")
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
	  
 | 
			
		||||
      # If more than one backup found
 | 
			
		||||
      if [ ${#BACKUP_DIRS[@]} -gt 1 ]; then
 | 
			
		||||
      	printf "\n%.0s" {1..2}
 | 
			
		||||
        echo -e "${INFO} found ${MAGENTA}multiple backups${RESET} for: ${YELLOW}${DIR##*/}${RESET}"
 | 
			
		||||
        echo "${YELLOW}backups: ${RESET}"
 | 
			
		||||
 | 
			
		||||
        # List the backups
 | 
			
		||||
        for BACKUP in "${BACKUP_DIRS[@]}"; do
 | 
			
		||||
          echo "  - ${BACKUP##*/}"
 | 
			
		||||
        done
 | 
			
		||||
 | 
			
		||||
        read -p "${CAT} do you want to delete the older backups of ${YELLOW}${DIR##*/}${RESET} and keep the latest backup only? (y/N): " back_choice
 | 
			
		||||
        if [[ "$back_choice" == [Yy]* ]]; then
 | 
			
		||||
          # Sort backups by modification time
 | 
			
		||||
          latest_backup="${BACKUP_DIRS[0]}"
 | 
			
		||||
          for BACKUP in "${BACKUP_DIRS[@]}"; do
 | 
			
		||||
            if [ "$BACKUP" -nt "$latest_backup" ]; then
 | 
			
		||||
              latest_backup="$BACKUP"
 | 
			
		||||
            fi
 | 
			
		||||
          done
 | 
			
		||||
 | 
			
		||||
          for BACKUP in "${BACKUP_DIRS[@]}"; do
 | 
			
		||||
            if [ "$BACKUP" != "$latest_backup" ]; then
 | 
			
		||||
              echo "deleting: ${BACKUP##*/}"
 | 
			
		||||
              rm -rf "$BACKUP"
 | 
			
		||||
            fi
 | 
			
		||||
          done
 | 
			
		||||
          echo "old backups of ${YELLOW}${DIR##*/}${RESET} deleted, keeping: ${MAGENTA}${latest_backup##*/}${RESET}"
 | 
			
		||||
        fi
 | 
			
		||||
      fi
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
}
 | 
			
		||||
# Execute the cleanup function
 | 
			
		||||
cleanup_backups
 | 
			
		||||
 | 
			
		||||
# ln -sf "$waybar_style" "$HOME/.config/waybar/style.css" && \
 | 
			
		||||
# check if ~/.config/waybar/style.css does not exist or is a symlink
 | 
			
		||||
if [ ! -e "$HOME/.config/waybar/style.css" ] || [ -L "$HOME/.config/waybar/style.css" ]; then
 | 
			
		||||
  ln -sf "$waybar_style" "$HOME/.config/waybar/style.css" 2>&1 | tee -a "$LOG"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
 | 
			
		||||
# initialize wallust to avoid config error on hyprland
 | 
			
		||||
wallust run -s $wallpaper 2>&1 | tee -a "$LOG"
 | 
			
		||||
 | 
			
		||||
printf "\n%.0s" {1..2}
 | 
			
		||||
printf "${OK} nixos-dots is now ready"
 | 
			
		||||
printf "\n%.0s" {1..1}
 | 
			
		||||
printf "${INFO} however, it is ${MAGENTA}HIGHLY SUGGESTED${RESET} to logout and re-login or better reboot to avoid any issues"
 | 
			
		||||
printf "\n%.0s" {1..3}
 | 
			
		||||
		Loading…
	
		Reference in New Issue