Files
Arch_Hyprland_dots/install.sh
T
2026-02-11 23:40:03 +03:00

1052 lines
39 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Renkli yazılar için
RED="\e[31m"
GREEN="\e[32m"
NC="\e[0m" # reset
HINTS=""
# Kurulacak paket listesi
PACKAGES="linux linux-zen hyprlock xorg-server xorg-xinput xorg-xinit xorg-xrandr mesa vulkan-radeon libva libva-utils wayland wayland-protocols mesa vulkan-radeon base-devel wlogout sddm trash-cli hyprpaper hyprland xdg-desktop-portal xdg-desktop-portal-hyprland libinput libxkbcommon qt5-graphicaleffects ddcutil i2c-tools jq hypridle gtk3 gdk-pixbuf2 gtk-layer-shell waybar ttf-twemoji swaync wl-clipboard kitty btop rofi grim slurp wf-recorder mpv atril ristretto hyprpicker thunar thunar-archive-plugin thunar-volman xarchiver gparted gvfs udisk2 baobab zip unzip unrar p7zip tar networkmanager network-manager-applet wget git neovim nodejs npm clang pyright tumbler pipewire pipewire-pulse wireplumber alsa-utils pavucontrol pacman yay flatpak nvidia nvidia-settings nvidia-utils xfce4-panel xfce4-session xfce4-settings xfconf xfdesktop xfwm4 xfce4-terminal xfce4-notify-plugin xfce4-clipman-plugin"
PACKAGES_YAY="bluez bluez-utils blueman hyprshade"
M_PACKAGES=(linux linux-zen hyprlock mesa vulkan-radeon libva libva-utils wayland wayland-protocols mesa vulkan-radeon base-devel wlogout sddm trash-cli hyprpaper hyprland xdg-desktop-portal xdg-desktop-portal-hyprland libinput libxkbcommon qt5-graphicaleffects jq hypridle gtk3 gdk-pixbuf2 gtk-layer-shell waybar ttf-twemoji swaync wl-clipboard kitty btop rofi atril ristretto hyprpicker thunar thunar-archive-plugin thunar-volman xarchiver gparted gvfs udisk2 baobab zip unzip unrar p7zip tar networkmanager network-manager-applet wget git mousepad tumbler pavucontrol pacman yay flatpak nvidia nvidia-settings nvidia-utils
'neovim(nodejs npm clang pyright)'
'xfce-desktop("Easy setup for XFCE Desktop" sddm thunar thunar-volman thunar-archive-plugin xarchiver mesa xorg-server xorg-xinput xorg-xinit xorg-xrandr xfce4-panel xfce4-session xfce4-settings xfconf xfdesktop xfwm4 xfce4-terminal xfce4-notify-plugin xfce4-clipman-plugin libinput libxkbcommon gtk3 gdk-pixbuf2 tumbler gvfs networkmanager network-manager-applet)'
'gaming-stack(mesa vulkan-radeon libva libva-utils nvidia nvidia-settings nvidia-utils wine winetricks lutris steam gamemode mangohud)'
'script-bootloader("Set your boot time to 8 second")'
'script-keyboard-language("A program that switches between the keyboard layouts(US:TR) using the Alt + Shift keys\nRecommended for XFCE desktop environments")'
'script-brightness-control("This package allows you to control your screen brightness using five different modes\nDesigned for Sway, but can also be controlled through the terminal." ddcutil i2c-tools)'
'script-screenrec("This package for recording the screen\nDesigned for Sway, but can also be controlled through the terminal." wf-recorder)'
'script-screenprint("This package for take screenshot of the screen\nDesigned for Sway, but can also be controlled through the terminal." grim slurp)'
'script-wifi("Wifi control with sway\nDesigned for Sway, but can also be controlled through the terminal." networkmanager network-manager-applet)'
'script-gamemode("Improves performance by temporarily disabling unused system features while gaming")'
'audio-pkgs(pipewire pipewire-pulse wireplumber alsa-utils)'
'media-player-pkgs(mpv xdg-utils)'
'themes-and-icons("Themes and icons")')
M_PACKAGES_YAY=('bluetooth-pkgs(bluez bluez-utils blueman)'
'script-bt("Bluetooth control with sway\nDesigned for Sway, but can also be controlled through the terminal." bluez bluez-utils blueman)'
'script-hyprshade("Reduce blue light automatically or manually\nDesigned for Sway, but can also be controlled through the terminal." hyprshade)')
echo -e "${GREEN}Do you want to start setup? (y/n)${NC}"
read -r answer
if [[ "$answer" == "y" || "$answer" == "Y" ]]; then
echo -e "${GREEN}Installing packages: $PACKAGES ...${NC}"
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
cd ..
while true; do
echo -e "${GREEN}Select an option:${NC}"
echo "1) Automatic setup (It will overwrite existing configuration files)"
echo "2) Manual package selection + selected packages and custom scripts installation"
echo "3) Install custom scripts only"
echo "4) Exit"
echo "5) Reboot"
read -rp "Enter your choice [1-5]: " choice
case "$choice" in
1)
sudo pacman -Syu --noconfirm $PACKAGES
yay -S --noconfirm $PACKAGES_YAY
sudo mkdir -p /boot/loader/
sudo cp boot/loader/loader.conf /boot/loader/loader.conf
sudo systemctl enable sddm
sudo systemctl start sddm
systemctl --user enable --now pipewire
systemctl --user enable --now pipewire-pulse
systemctl --user enable --now wireplumber
sudo rfkill unblock bluetooth
sudo systemctl enable --now bluetooth
sudo usermod -aG bluetooth "$USER"
xdg-mime default mpv.desktop video/mp4
xdg-mime default mpv.desktop video/x-matroska
xdg-mime default mpv.desktop video/webm
sudo systemctl enable --now NetworkManager
sudo modprobe i2c-dev
echo i2c-dev | sudo tee /etc/modules-load.d/i2c-dev.conf
sudo usermod -aG i2c "$USER"
sudo systemctl enable --now udisks2
#CONFIGS
cd /Arch_Hyprland_dots/
sudo mkdir -p /usr/share/icons/
sudo cp -rf .config/ /home/$USER/
sudo cp -rf themes_bg/modest-dark/ /usr/share/icons/
hyprctl reload
sudo mkdir -p /etc/xdg/swaync/
mkdir -p ~/.local/bin
sudo cp ~/.config/swaync/style.css /etc/xdg/swaync/style.css
sudo cp ~/.config/scripts/hyprshade-auto.sh ~/.local/bin/hyprshade-auto.sh
sudo chmod +x ~/.config/scripts/*.sh
systemctl --user enable --now swaync
sudo chmod +x ~/.local/bin/hyprshade-auto.sh
sudo mkdir -p /home/$USER/Resimler/wallpapers/
sudo cp themes_bg/wallpaper-2.png /home/$USER/Resimler/wallpapers/wallpaper-2.png
sudo chmod +x ~/.config/waybar/scripts/weather.py
sudo chown -R bob:bob ~/.config/blacklayer/
chmod 700 ~/.config/blacklayer
chmod +x ~/.config/blacklayer/*.sh 2>/dev/null || true
chmod 600 ~/.config/blacklayer/*.conf 2>/dev/null || true
[ -f ~/.config/blacklayer/blacklayer ] && chmod +x ~/.config/blacklayer/blacklayer
sudo chown -R "$USER:$USER" ~/.config/waybar
chmod 700 ~/.config/waybar
cd ~/.config/blacklayer/
./generate-waybar-configs.sh
sudo chmod 600 ~/.config/scripts/hyprshade-toggle-state
sudo chown $USER:$USER ~/.config/scripts/hyprshade-toggle-state
systemctl --user daemon-reload
systemctl --user enable --now hyprshade-auto.timer
sudo chmod 600 ~/.config/scripts/brightness_mode_state
sudo chown $USER:$USER ~/.config/scripts/brightness_mode_state
hyprctl reload
echo -e "${GREEN}Download and installation completed successfully!${NC}"
MONITORS=$(hyprctl -j monitors | jq -r '.[].name')
for MONITOR in $MONITORS; do
echo "Your Monitors:"
echo "$MONITOR"
done
echo "If your monitors are not named HDMI-A-2 and DP-2, or if you have more than two monitors, follow these steps:"
echo "Run: ~/.config/scripts/brightness_mode_calib.sh"
echo "Open your hyprland.conf file to make the necessary changes."
echo "open your hyprpaper.conf file to make the necessary changes."
;;
2)
echo -e "${GREEN}Selective install mode${NC}"
DOWNLOAD_PKGS=()
SELECTED_PKGS=()
for raw in "${M_PACKAGES[@]}"; do
if [[ "$raw" == *"("* ]]; then
main_pkg="${raw%%(*}"
inside="${raw#*(}"
inside="${inside%)}"
msg=""
deps=""
# açıklama + dependency birlikte varsa
if [[ "$inside" =~ ^\"([^\"]*)\"[[:space:]]*(.*)$ ]]; then
msg="${BASH_REMATCH[1]}"
deps="${BASH_REMATCH[2]}"
#sadece dependency varsa
else
deps="$inside"
fi
deps="$(echo "$deps" | xargs)"
# kullanıcıya göster
if [[ -n "$msg" ]]; then
if [[ -n "$deps" ]]; then
read -rp "$(printf "Select %s\n%s\nPackages to be installed: %s(y/n): " \
"$main_pkg" "$(echo -e "$msg")" "$deps")" ans
echo
else
read -rp "$(printf "Select %s\n%s(y/n): " \
"$main_pkg" "$(echo -e "$msg")")" ans
echo
fi
else
read -rp "Select $main_pkg ($deps)? (y/n): " ans
echo
fi
if [[ "$ans" =~ ^[Yy]$ ]]; then
SELECTED_PKGS+=("$main_pkg")
if [[ -n "$deps" ]]; then
read -ra dep_array <<< "$deps"
for dep in "${dep_array[@]}"; do
DOWNLOAD_PKGS+=("$dep|$main_pkg")
done
fi
fi
else
read -rp "Select $raw? (y/n): " ans
[[ "$ans" =~ ^[Yy]$ ]] && DOWNLOAD_PKGS+=("$raw|")
fi
done
DOWNLOAD_PKGS_AUR=()
SELECTED_PKGS_AUR=()
for raw in "${M_PACKAGES_YAY[@]}"; do
if [[ "$raw" == *"("* ]]; then
main_pkg="${raw%%(*}"
inside="${raw#*(}"
inside="${inside%)}"
msg=""
deps=""
# Açıklama + dependency varsa
if [[ "$inside" =~ ^\"([^\"]*)\"[[:space:]]*(.*)$ ]]; then
msg="${BASH_REMATCH[1]}"
deps="${BASH_REMATCH[2]}"
else
deps="$inside"
fi
deps="$(echo "$deps" | xargs)"
# Kullanıcıya göster
if [[ -n "$msg" ]]; then
if [[ -n "$deps" ]]; then
read -rp "$(printf "Select %s (AUR)\n%s\nPackages to be installed: %s(y/n): " \
"$main_pkg" "$(echo -e "$msg")" "$deps")" ans
echo
else
read -rp "$(printf "Select %s (AUR)\n%s(y/n): " \
"$main_pkg" "$(echo -e "$msg")")" ans
echo
fi
else
read -rp "Select $main_pkg ($deps) (AUR)? (y/n): " ans
echo
fi
if [[ "$ans" =~ ^[Yy]$ ]]; then
SELECTED_PKGS_AUR+=("$main_pkg")
if [[ -n "$deps" ]]; then
read -ra dep_array <<< "$deps"
for dep in "${dep_array[@]}"; do
DOWNLOAD_PKGS_AUR+=("$dep|$main_pkg")
done
fi
fi
else
read -rp "Select $raw (AUR)? (y/n): " ans
[[ "$ans" =~ ^[Yy]$ ]] && DOWNLOAD_PKGS_AUR+=("$raw|")
fi
done
echo
echo "The following packages will be installed:"
echo "-----------------------------------------"
if [[ ${#DOWNLOAD_PKGS[@]} -gt 0 ]]; then
echo "pacman:"
SEEN_PKGS=()
for entry in "${DOWNLOAD_PKGS[@]}"; do
pkg="${entry%%|*}"
parent="${entry#*|}"
already=false
seen_parent=""
for seen in "${SEEN_PKGS[@]}"; do
if [[ "${seen%%|*}" == "$pkg" ]]; then
already=true
seen_parent="${seen#*|}"
break
fi
done
if $already; then
if [[ -n "$parent" ]]; then
echo -e " - ${RED}$pkg($parent) Already in download list${NC}"
elif [[ -n "$seen_parent" ]]; then
echo -e " - ${RED}$pkg($seen_parent) Already in download list${NC}"
else
echo -e " - ${RED}$pkg Already in download list${NC}"
fi
else
if [[ -n "$parent" ]]; then
echo " - $pkg($parent)"
else
echo " - $pkg"
fi
SEEN_PKGS+=("$entry")
fi
done
fi
if [[ ${#DOWNLOAD_PKGS_AUR[@]} -gt 0 ]]; then
echo "AUR:"
SEEN_PKGS_AUR=()
for entry in "${DOWNLOAD_PKGS_AUR[@]}"; do
pkg="${entry%%|*}"
parent="${entry#*|}"
already=false
seen_parent=""
for seen in "${SEEN_PKGS_AUR[@]}"; do
if [[ "${seen%%|*}" == "$pkg" ]]; then
already=true
seen_parent="${seen#*|}"
break
fi
done
if $already; then
if [[ -n "$parent" ]]; then
echo -e " - ${RED}$pkg($parent) Already in download list${NC}"
elif [[ -n "$seen_parent" ]]; then
echo -e " - ${RED}$pkg($seen_parent) Already in download list${NC}"
else
echo -e " - ${RED}$pkg Already in download list${NC}"
fi
else
if [[ -n "$parent" ]]; then
echo " - $pkg($parent)"
else
echo " - $pkg"
fi
SEEN_PKGS_AUR+=("$entry")
fi
done
fi
echo
read -rp "Proceed with installation? (y/n): " confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
if [[ ${#DOWNLOAD_PKGS[@]} -gt 0 ]]; then
for pkg in "${DOWNLOAD_PKGS[@]}"; do
real_pkg="${pkg%%|*}" # | sonrası atılır
sudo pacman -S --needed "$real_pkg"
done
fi
if [[ ${#DOWNLOAD_PKGS_AUR[@]} -gt 0 ]]; then
for pkg in "${DOWNLOAD_PKGS_AUR[@]}"; do
real_pkg="${pkg%%|*}" # | sonrası atılır
yay -S --needed "$real_pkg"
done
fi
else
echo "Installation cancelled."
fi
# CONFIGS
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "sddm"
then
echo "sddm package selected, running extra configuration..."
sudo systemctl enable sddm
sudo systemctl start sddm
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "audio-pkgs"
then
echo "Audio package selected, running extra configuration..."
systemctl --user enable --now pipewire
systemctl --user enable --now pipewire-pulse
systemctl --user enable --now wireplumber
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "bluetooth-pkgs"
then
echo "Bluetooth package selected, running extra configuration..."
sudo rfkill unblock bluetooth
sudo systemctl enable --now bluetooth
sudo usermod -aG bluetooth "$USER"
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "media-player-pkgs"
then
echo "Media-player package selected, running extra configuration..."
xdg-mime default mpv.desktop video/mp4
xdg-mime default mpv.desktop video/x-matroska
xdg-mime default mpv.desktop video/webm
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "networkmanager"
then
echo "networkmanager package selected, running extra configuration..."
sudo systemctl enable --now NetworkManager
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "udisk"
then
echo "udisk package selected, running extra configuration..."
sudo systemctl enable --now udisks2
fi
#SPECIAL CONFIG DOCS
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "hyprland"
then
echo "hyprland package selected, running extra configuration..."
sudo mkdir -p /home/$USER/.config/hypr
sudo cp -f .config/hypr/hyprland.conf /home/$USER/.config/hypr/hyprland.conf
HINTS+="If your monitors are not named HDMI-A-2 and DP-2, or if you have more than two monitors, follow these steps:"$'\n'
HINTS+="Open your hyprland.conf file to make the necessary changes."$'\n'
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "hyprlock"
then
echo "hyprlock package selected, running extra configuration..."
sudo mkdir -p /home/$USER/.config/hypr
sudo cp -f .config/hypr/hyprlock.conf /home/$USER/.config/hypr/hyprlock.conf
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "hyprpaper"
then
echo "hyprpaper package selected, running extra configuration..."
sudo mkdir -p /home/$USER/.config/hypr
sudo cp -f .config/hypr/hyprpaper.conf /home/$USER/.config/hypr/hyprpaper.conf
sudo mkdir -p /home/$USER/Resimler/wallpapers/
sudo cp themes_bg/wallpaper-2.png /home/$USER/Resimler/wallpapers/wallpaper-2.png
HINTS+="If your monitors are not named HDMI-A-2 and DP-2, or if you have more than two monitors, follow these steps:"$'\n'
HINTS+="open your hyprpaper.conf file to make the necessary changes."$'\n'
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "kitty"
then
echo "kitty package selected, running extra configuration..."
sudo mkdir -p /home/$USER/.config/kitty
sudo cp -rf .config/kitty/* /home/$USER/.config/kitty
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "neovim"
then
echo "neovim package selected, running extra configuration..."
sudo mkdir -p /home/$USER/.config/nvim/
sudo cp -f .config/nvim/init.lua /home/$USER/.config/nvim/init.lua
sudo npm install -g typescript typescript-language-server
sudo npm install -g vscode-langservers-extracted
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "rofi"
then
echo "rofi package selected, running extra configuration..."
sudo mkdir -p /home/$USER/.config/rofi
sudo cp -rf .config/rofi/* /home/$USER/.config/rofi
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "swaync"
then
echo "swaync package selected, running extra configuration..."
sudo mkdir -p /etc/xdg/swaync/
sudo cp -f .config/swaync/style.css /etc/xdg/swaync/style.css
sudo cp -f .config/swaync/configSchema.json /etc/xdg/swaync/configSchema.json
sudo cp -f .config/swaync/config.json ~/.config/swaync/config.json
sudo chmod +x ~/.config/scripts/*.sh
systemctl --user enable --now swaync
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "waybar"
then
echo "waybar package selected, running extra configuration..."
sudo mkdir -p /home/$USER/.config/waybar
sudo cp -rf .config/waybar/* /home/$USER/.config/waybar
sudo chmod +x ~/.config/waybar/scripts/weather.py
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "wlogout"
then
echo "wlogout package selected, running extra configuration..."
sudo mkdir -p /home/$USER/.config/wlogout
sudo cp -rf .config/wlogout/* /home/$USER/.config/wlogout
fi
#/SCRIPTS
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "script-bootloader"
then
echo "script-bootloader config file selected, running extra configuration..."
sudo mkdir -p /boot/loader/
sudo cp -f boot/loader/loader.conf /boot/loader/loader.conf
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "script-keyboard-language"
then
echo "script-keyboard-language config file selected, running extra configuration..."
sudo mkdir -p ~/.config/autostart/
sudo cp -f .config/autostart/klavye_degistirme.desktop ~/.config/autostart/klavye_degistirme.desktop
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "script-brightness-control"
then
echo "script-brightness-control package selected, running extra configuration..."
sudo modprobe i2c-dev
echo i2c-dev | sudo tee /etc/modules-load.d/i2c-dev.conf
sudo usermod -aG i2c "$USER"
sudo mkdir -p ~/.config/scripts/
sudo cp -f .config/scripts/brightness_mode.sh ~/.config/scripts/brightness_mode.sh
sudo cp -f .config/scripts/brightness_mode_calib.sh ~/.config/scripts/brightness_mode_calib.sh
sudo cp -f .config/scripts/brightness_mode_state ~/.config/scripts/brightness_mode_state
sudo cp -f .config/scripts/ddc-map.conf ~/.config/scripts/ddc-map.conf
sudo chmod 600 ~/.config/scripts/brightness_mode_state
sudo chown $USER:$USER ~/.config/scripts/brightness_mode_state
sudo chmod +x ~/.config/scripts/*.sh
HINTS+="If your monitors are not named HDMI-A-2 and DP-2, or if you have more than two monitors, follow these steps:"$'\n'
HINTS+="Run: ~/.config/scripts/brightness_mode_calib.sh"$'\n'
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "script-hyprshade"
then
echo "script-hyprshade config file selected, running extra configuration..."
mkdir -p ~/.local/bin
sudo mkdir -p ~/.config/scripts/
sudo cp -f .config/scripts/hyprshade-auto.sh ~/.local/bin/hyprshade-auto.sh
sudo cp -f .config/scripts/hyprshade-toggle-state ~/.config/scripts/hyprshade-toggle-state
sudo cp -f .config/scripts/night_screen.frag ~/.config/scripts/night_screen.frag
sudo chmod +x ~/.config/scripts/*.sh
sudo chmod +x ~/.local/bin/hyprshade-auto.sh
sudo chmod 600 ~/.config/scripts/hyprshade-toggle-state
sudo chown $USER:$USER ~/.config/scripts/hyprshade-toggle-state
systemctl --user daemon-reload
systemctl --user enable --now hyprshade-auto.timer
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "script-screenrec"
then
echo "script-screenrec config file selected, running extra configuration..."
sudo mkdir -p ~/.config/scripts/
sudo mkdir -p ~/Resimler/
sudo cp -f .config/scripts/screenrec.sh ~/.config/scripts/screenrec.sh
sudo chmod +x ~/.config/scripts/*.sh
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "script-screenprint"
then
echo "script-screenprint config file selected, running extra configuration..."
sudo mkdir -p ~/.config/scripts/
sudo mkdir -p ~/Resimler/
sudo cp -f .config/scripts/screenprint.sh ~/.config/scripts/screenprint.sh
sudo chmod +x ~/.config/scripts/*.sh
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "script-wifi"
then
echo "script-wifi config file selected, running extra configuration..."
sudo systemctl enable --now NetworkManager
sudo mkdir -p ~/.config/scripts/
sudo cp -f .config/scripts/wifi-bt.sh ~/.config/scripts/wifi-bt.sh
sudo chmod +x ~/.config/scripts/*.sh
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "script-bt"
then
echo "script-bt config file selected, running extra configuration..."
sudo rfkill unblock bluetooth
sudo systemctl enable --now bluetooth
sudo usermod -aG bluetooth "$USER"
sudo mkdir -p ~/.config/scripts/
sudo cp -f .config/scripts/wifi-bt.sh ~/.config/scripts/wifi-bt.sh
sudo chmod +x ~/.config/scripts/*.sh
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "script-gamemode"
then
echo "script-gamemode config file selected, running extra configuration..."
sudo mkdir -p ~/.config/scripts/
sudo cp -f .config/scripts/gamemode.sh ~/.config/scripts/gamemode.sh
sudo chmod +x ~/.config/scripts/*.sh
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "themes-and-icons"
then
echo "themes-and-icons config file selected, running extra configuration..."
sudo mkdir -p /usr/share/icons/
sudo cp -rf themes_bg/modest-dark/ /usr/share/icons/
fi
hyprctl reload
echo -e "${GREEN}Download and installation completed successfully!${NC}"
if [[ -n "$HINTS" ]]; then
echo -e "Hints:\n$HINTS"
fi
;;
3)
echo -e "${GREEN}Selective script mode${NC}"
DOWNLOAD_PKGS=()
SELECTED_PKGS=()
for raw in "${M_PACKAGES[@]}"; do
if [[ "$raw" == *"("* ]]; then
main_pkg="${raw%%(*}"
inside="${raw#*(}"
inside="${inside%)}"
msg=""
deps=""
# açıklama + dependency birlikte varsa
if [[ "$inside" =~ ^\"([^\"]*)\"[[:space:]]*(.*)$ ]]; then
msg="${BASH_REMATCH[1]}"
deps="${BASH_REMATCH[2]}"
#sadece dependency varsa
else
deps="$inside"
fi
deps="$(echo "$deps" | xargs)"
# kullanıcıya göster
if [[ -n "$msg" ]]; then
if [[ -n "$deps" ]]; then
read -rp "$(printf "Select %s\n%s\nPackages to be installed: %s(y/n): " \
"$main_pkg" "$(echo -e "$msg")" "$deps")" ans
echo
else
read -rp "$(printf "Select %s\n%s(y/n): " \
"$main_pkg" "$(echo -e "$msg")")" ans
echo
fi
else
read -rp "Select $main_pkg ($deps)? (y/n): " ans
echo
fi
if [[ "$ans" =~ ^[Yy]$ ]]; then
SELECTED_PKGS+=("$main_pkg")
if [[ -n "$deps" ]]; then
read -ra dep_array <<< "$deps"
DOWNLOAD_PKGS+=("${dep_array[@]}")
fi
fi
else
read -rp "Select $raw? (y/n): " ans
[[ "$ans" =~ ^[Yy]$ ]] && DOWNLOAD_PKGS+=("$raw")
fi
done
DOWNLOAD_PKGS_AUR=()
SELECTED_PKGS_AUR=()
for raw in "${M_PACKAGES_YAY[@]}"; do
if [[ "$raw" == *"("* ]]; then
main_pkg="${raw%%(*}"
inside="${raw#*(}"
inside="${inside%)}"
msg=""
deps=""
# açıklama + dependency birlikte varsa
if [[ "$inside" =~ ^\"([^\"]*)\"[[:space:]]*(.*)$ ]]; then
msg="${BASH_REMATCH[1]}"
deps="${BASH_REMATCH[2]}"
else
deps="$inside"
fi
deps="$(echo "$deps" | xargs)"
# kullanıcıya göster
if [[ -n "$msg" ]]; then
if [[ -n "$deps" ]]; then
read -rp "$(printf "Select %s (AUR)\n%s\nPackages to be installed: %s(y/n): " \
"$main_pkg" "$(echo -e "$msg")" "$deps")" ans
echo
else
read -rp "$(printf "Select %s (AUR)\n%s(y/n): " \
"$main_pkg" "$(echo -e "$msg")")" ans
echo
fi
else
read -rp "Select $main_pkg (AUR) ($deps)? (y/n): " ans
echo
fi
if [[ "$ans" =~ ^[Yy]$ ]]; then
SELECTED_PKGS_AUR+=("$main_pkg")
if [[ -n "$deps" ]]; then
read -ra dep_array <<< "$deps"
DOWNLOAD_PKGS_AUR+=("${dep_array[@]}")
fi
fi
else
read -rp "Select $raw (AUR)? (y/n): " ans
[[ "$ans" =~ ^[Yy]$ ]] && DOWNLOAD_PKGS_AUR+=("$raw")
fi
done
#CONFIGS
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "sddm"
then
echo "sddm package selected, running extra configuration..."
sudo systemctl enable sddm
sudo systemctl start sddm
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "audio-pkgs"
then
echo "Audio package selected, running extra configuration..."
systemctl --user enable --now pipewire
systemctl --user enable --now pipewire-pulse
systemctl --user enable --now wireplumber
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "bluetooth-pkgs"
then
echo "Bluetooth package selected, running extra configuration..."
sudo rfkill unblock bluetooth
sudo systemctl enable --now bluetooth
sudo usermod -aG bluetooth "$USER"
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "media-player-pkgs"
then
echo "Media-player package selected, running extra configuration..."
xdg-mime default mpv.desktop video/mp4
xdg-mime default mpv.desktop video/x-matroska
xdg-mime default mpv.desktop video/webm
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "networkmanager"
then
echo "networkmanager package selected, running extra configuration..."
sudo systemctl enable --now NetworkManager
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "udisk"
then
echo "udisk package selected, running extra configuration..."
sudo systemctl enable --now udisks2
fi
#SPECIAL CONFIG DOCS
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "hyprland"
then
echo "hyprland package selected, running extra configuration..."
sudo mkdir -p /home/$USER/.config/hypr
sudo cp -f .config/hypr/hyprland.conf /home/$USER/.config/hypr/hyprland.conf
HINTS+="If your monitors are not named HDMI-A-2 and DP-2, or if you have more than two monitors, follow these steps:"$'\n'
HINTS+="Open your hyprland.conf file to make the necessary changes."$'\n'
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "hyprlock"
then
echo "hyprlock package selected, running extra configuration..."
sudo mkdir -p /home/$USER/.config/hypr
sudo cp -f .config/hypr/hyprlock.conf /home/$USER/.config/hypr/hyprlock.conf
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "hyprpaper"
then
echo "hyprpaper package selected, running extra configuration..."
sudo mkdir -p /home/$USER/.config/hypr
sudo cp -f .config/hypr/hyprpaper.conf /home/$USER/.config/hypr/hyprpaper.conf
sudo mkdir -p /home/$USER/Resimler/wallpapers/
sudo cp themes_bg/wallpaper-2.png /home/$USER/Resimler/wallpapers/wallpaper-2.png
HINTS+="If your monitors are not named HDMI-A-2 and DP-2, or if you have more than two monitors, follow these steps:"$'\n'
HINTS+="open your hyprpaper.conf file to make the necessary changes."$'\n'
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "kitty"
then
echo "kitty package selected, running extra configuration..."
sudo mkdir -p /home/$USER/.config/kitty
sudo cp -rf .config/kitty/* /home/$USER/.config/kitty
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "neovim"
then
echo "neovim package selected, running extra configuration..."
sudo mkdir -p /home/$USER/.config/nvim/
sudo cp -f .config/nvim/init.lua /home/$USER/.config/nvim/init.lua
sudo npm install -g typescript typescript-language-server
sudo npm install -g vscode-langservers-extracted
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "rofi"
then
echo "rofi package selected, running extra configuration..."
sudo mkdir -p /home/$USER/.config/rofi
sudo cp -rf .config/rofi/* /home/$USER/.config/rofi
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "swaync"
then
echo "swaync package selected, running extra configuration..."
sudo mkdir -p /etc/xdg/swaync/
sudo mkdir -p /home/$USER/.config/swaync
sudo cp -f .config/swaync/style.css /etc/xdg/swaync/style.css
sudo cp -f .config/swaync/configSchema.json /etc/xdg/swaync/configSchema.json
sudo cp -f .config/swaync/config.json ~/.config/swaync/config.json
sudo chmod +x ~/.config/scripts/*.sh
systemctl --user enable --now swaync
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "waybar"
then
echo "waybar package selected, running extra configuration..."
sudo mkdir -p /home/$USER/.config/waybar
sudo cp -rf .config/waybar/* /home/$USER/.config/waybar
sudo chmod +x ~/.config/waybar/scripts/weather.py
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "wlogout"
then
echo "wlogout package selected, running extra configuration..."
sudo mkdir -p /home/$USER/.config/wlogout
sudo cp -rf .config/wlogout/* /home/$USER/.config/wlogout
fi
#/SCRIPTS
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "script-bootloader"
then
echo "script-bootloader config file selected, running extra configuration..."
sudo mkdir -p /boot/loader/
sudo cp -f boot/loader/loader.conf /boot/loader/loader.conf
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "script-keyboard-language"
then
echo "script-keyboard-language config file selected, running extra configuration..."
sudo mkdir -p ~/.config/autostart/
sudo cp -f .config/autostart/klavye_degistirme.desktop ~/.config/autostart/klavye_degistirme.desktop
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "script-brightness-control"
then
echo "script-brightness-control package selected, running extra configuration..."
sudo modprobe i2c-dev
echo i2c-dev | sudo tee /etc/modules-load.d/i2c-dev.conf
sudo usermod -aG i2c "$USER"
sudo mkdir -p ~/.config/scripts/
sudo cp -f .config/scripts/brightness_mode.sh ~/.config/scripts/brightness_mode.sh
sudo cp -f .config/scripts/brightness_mode_calib.sh ~/.config/scripts/brightness_mode_calib.sh
sudo cp -f .config/scripts/brightness_mode_state ~/.config/scripts/brightness_mode_state
sudo cp -f .config/scripts/ddc-map.conf ~/.config/scripts/ddc-map.conf
sudo chmod 600 ~/.config/scripts/brightness_mode_state
sudo chown $USER:$USER ~/.config/scripts/brightness_mode_state
sudo chmod +x ~/.config/scripts/*.sh
HINTS+="If your monitors are not named HDMI-A-2 and DP-2, or if you have more than two monitors, follow these steps:"$'\n'
HINTS+="Run: ~/.config/scripts/brightness_mode_calib.sh"$'\n'
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "script-hyprshade"
then
echo "script-hyprshade config file selected, running extra configuration..."
mkdir -p ~/.local/bin
sudo mkdir -p ~/.config/scripts/
sudo cp -f .config/scripts/hyprshade-auto.sh ~/.local/bin/hyprshade-auto.sh
sudo cp -f .config/scripts/hyprshade-toggle-state ~/.config/scripts/hyprshade-toggle-state
sudo cp -f .config/scripts/night_screen.frag ~/.config/scripts/night_screen.frag
sudo chmod +x ~/.config/scripts/*.sh
sudo chmod +x ~/.local/bin/hyprshade-auto.sh
sudo chmod 600 ~/.config/scripts/hyprshade-toggle-state
sudo chown $USER:$USER ~/.config/scripts/hyprshade-toggle-state
systemctl --user daemon-reload
systemctl --user enable --now hyprshade-auto.timer
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "script-screenrec"
then
echo "script-screenrec config file selected, running extra configuration..."
sudo mkdir -p ~/.config/scripts/
sudo mkdir -p ~/Resimler/
sudo cp -f .config/scripts/screenrec.sh ~/.config/scripts/screenrec.sh
sudo chmod +x ~/.config/scripts/*.sh
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "script-screenprint"
then
echo "script-screenprint config file selected, running extra configuration..."
sudo mkdir -p ~/.config/scripts/
sudo mkdir -p ~/Resimler/
sudo cp -f .config/scripts/screenprint.sh ~/.config/scripts/screenprint.sh
sudo chmod +x ~/.config/scripts/*.sh
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "script-wifi"
then
echo "script-wifi config file selected, running extra configuration..."
sudo systemctl enable --now NetworkManager
sudo mkdir -p ~/.config/scripts/
sudo cp -f .config/scripts/wifi-bt.sh ~/.config/scripts/wifi-bt.sh
sudo chmod +x ~/.config/scripts/*.sh
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "script-bt"
then
echo "script-bt config file selected, running extra configuration..."
sudo rfkill unblock bluetooth
sudo systemctl enable --now bluetooth
sudo usermod -aG bluetooth "$USER"
sudo mkdir -p ~/.config/scripts/
sudo cp -f .config/scripts/wifi-bt.sh ~/.config/scripts/wifi-bt.sh
sudo chmod +x ~/.config/scripts/*.sh
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "script-gamemode"
then
echo "script-gamemode config file selected, running extra configuration..."
sudo mkdir -p ~/.config/scripts/
sudo cp -f .config/scripts/gamemode.sh ~/.config/scripts/gamemode.sh
sudo chmod +x ~/.config/scripts/*.sh
fi
if printf '%s\n' "${SELECTED_PKGS[@]}" "${SELECTED_PKGS_AUR[@]}" "${DOWNLOAD_PKGS[@]}" "${DOWNLOAD_PKGS_AUR[@]}" | grep -qx "themes-and-icons"
then
echo "themes-and-icons config file selected, running extra configuration..."
sudo mkdir -p /usr/share/icons/
sudo cp -rf themes_bg/modest-dark/ /usr/share/icons/
fi
hyprctl reload
echo -e "${GREEN}Download and installation completed successfully!${NC}"
if [[ -n "$HINTS" ]]; then
echo -e "Hints:\n$HINTS"
fi
;;
4)
# Exit application
break
;;
5)
read -rp "Unsaved changes will be lost. Are you sure you want to reboot? (y/n): " confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
# Reboot system
:
fi
;;
*)
echo "Invalid option. Please select a number between 1 and 5."
;;
esac
done
else
echo -e "${RED}Skipping installation.${NC}"
fi