hyprmoonarch/setup.sh
2024-04-03 15:54:26 +02:00

581 lines
17 KiB
Bash
Executable File

#!/usr/bin/env bash
if [ "$(id -u)" -eq 0 ]; then
printf "Don't run this script as root!"
exit 1
else
printf "not root"
fi
GREEN="$(tput setaf 2)[OK]$(tput sgr0)"
RED="$(tput setaf 1)[ERROR]$(tput sgr0)"
YELLOW="$(tput setaf 3)[NOTE]$(tput sgr0)"
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
BOLD=$(tput bold)
NORMAL=$(tput sgr0)
clear
LOG="install.log"
MONARCHOS_DIR=$PWD
set -e
function pkg_inst () {
log "Checking if $1 is installed..."
if pacman -Qs $1; then
log "Found $IS_INSTALLED ...skipping"
else
log "$1 not found. Installing..."
paru -S $1 2>&1 | tee -a $LOG
fi
}
function inst_ufw {
echo "-"
echo "Install ${BOLD}Firewall${NORMAL} and set some common rules"
echo -n "${BOLD}Continue?${NORMAL} (Y/N) "
read confirm_ufw
if [[ $confirm_ufw == "Y" ]];
then
declare -a pkg_list=(ufw gufw)
for key in "${pkg_list[@]}"
do
pkg_inst $key
done
sudo ufw enable
sudo systemctl enable ufw
sudo ufw default deny incoming
sudo ufw allow http
sudo ufw allow https
sudo ufw allow ssh
sudo ufw allow ntp
sudo ufw allow 67:68/tcp
sudo ufw allow 53
fi
}
function inst_configs {
echo "-"
echo "Overwrite some ${BOLD}configs${NORMAL}"
echo "alacritty, dunst, btop, lsd"
echo -n "${BOLD}Continue?${NORMAL} (Y/N) "
read confirm_configs
if [[ $confirm_configs == "Y" ]];
then
cp -Rf $MONARCHOS_DIR/home/config/alacritty $HOME/.config/alacritty
chown $USER:$USER $HOME/.config/alacritty
cp -Rf $MONARCHOS_DIR/home/config/dunst $HOME/.config/dunst
chown $USER:$USER $HOME/.config/dunst
cp -Rf $MONARCHOS_DIR/home/config/btop $HOME/.config/btop
chown $USER:$USER $HOME/.config/btop
cp -Rf $MONARCHOS_DIR/home/config/lsd $HOME/.config/lsd
chown $USER:$USER $HOME/.config/lsd
fi
}
function inst_zsh {
echo "-"
echo "Installing ${BOLD}ZSH${NORMAL}"
echo "Installs ZSH + Autosuggestions and set zsh as your default shell"
echo -n "${BOLD}Continue?${NORMAL} (Y/N) "
read confirm_zsh
if [[ $confirm_zsh == "Y" ]];
then
declare -a pkg_list=(zsh oh-my-zsh)
for key in "${pkg_list[@]}"
do
pkg_inst $key
done
cp -rf $MONARCHOS_DIR/home/.zshrc $HOME/.zshrc
rm -rf ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
rm -rf ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
rm -rf ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
chsh -s /usr/bin/zsh
cp -rf $MONARCHOS_DIR/home/.p10k.zsh $HOME/.p10k.zsh
fi
}
function inst_basic_pkgs {
log "-"
log "Installing ${BOLD}recommended packages.${NORMAL}"
log "This can include dependencies on other things. You definitely want this."
log "${BOLD}Continue?${NORMAL} (Y/N) "
read confirm_basics
log "$confirm_basics"
if [[ $confirm_basics == "Y" ]];
then
declare -a pkg_list=(jq network-manager-applet alarm-clock-applet man-db hardinfo networkmanager-openvpn udisks2 plocate vim alacritty gettext-hostname neovim lsd alsa-utils ponymix btop powertop polkit lxsession timeshift timeshift-autosnap pcmanfm librewolf-bin fzf)
for key in "${pkg_list[@]}"
do
pkg_inst $key
done
sudo cp $MONARCHOS_DIR/usr/local/bin/volnote /usr/local/bin
paru -S informant
sudo informant read --all
fi
}
function inst_paru {
echo "-"
echo "Installing AUR helper ${BOLD}paru${NORMAL}?"
echo "${BOLD}paru${NORMAL} is mandatory."
if command -v paru > /dev/null 2>&1; then
echo "${BOLD}paru ${NORMAL}already installed. Skipping..."
else
echo -n "${BOLD}Continue?${NORMAL} (Y/N) "
read confirm_paru 2>&1 | tee -a $LOG
if [[ $confirm_paru == "Y" ]];
then
sudo pacman -Syu --needed base-devel 2>&1 | tee -a $LOG
sudo pacman -Syu rustup 2>&1 | tee -a $LOG
rustup default stable 2>&1 | tee -a $LOG
rustup update
mkdir $MONARCHOS_DIR/.cache
rm -rf $MONARCHOS_DIR/.cache/paru-git
git clone https://aur.archlinux.org/paru.git $MONARCHOS_DIR/.cache/paru-git
cd $MONARCHOS_DIR/.cache/paru-git
makepkg -si
cd $MONARCHOS_DIR
git pull
mkdir -p $HOME/.local/bin
echo 'PATH="$HOME/.local/bin:$PATH"' | sudo tee -a /etc/environment >/dev/null
else
echo "exiting"
exit 1
fi
fi
}
function post_always {
echo " "
echo " "
echo " "
echo "-"
echo "Running updatedb"
sudo updatedb
echo " "
echo " "
echo " "
echo "Here are some optional packages... "
echo "ungoogled-chromium"
echo "filezilla"
echo "lutris"
echo " "
echo " "
echo " "
echo "If you didn't pick the Noise Suppression check NoiseTorch."
echo "Goodbye"
}
function inst_bluet {
echo "-"
echo "Installing ${BOLD}Bluetooth${NORMAL} Support"
echo -n "${BOLD}Continue?${NORMAL} (Y/N) "
read confirm_bluet
if [[ $confirm_bluet == "Y" ]];
then
declare -a pkg_list=(bluez bluez-utils-compat blueberry)
for key in "${pkg_list[@]}"
do
pkg_inst $key
done
sudo systemctl start bluetooth.service
sudo systemctl enable bluetooth.service
fi
}
function inst_noise_supr {
echo "-"
echo "Installing ${BOLD}Noise Suppression for voice${NORMAL}"
echo -n "${BOLD}Continue?${NORMAL} (Y/N) "
read confirm_noise_supr
if [[ $confirm_noise_supr == "Y" ]];
then
declare -a pkg_list=(noise-suppression-for-voice)
for key in "${pkg_list[@]}"
do
pkg_inst $key
done
mkdir -p $HOME/.config/pipewire/pipewire.conf.d/
cp -f $MONARCHOS_DIR/home/config/pipewire/pipewire.conf.d/99-input-denoising.conf $HOME/.config/pipewire/pipewire.conf.d/99-input-denoising.conf
systemctl restart --user pipewire.service
fi
}
function inst_resources {
echo "-"
echo "Installing ${BOLD}Resources Monitor${NORMAL} [AUR: resources]"
echo -n "${BOLD}Continue?${NORMAL} (Y/N) "
read confirm_resources
if [[ $confirm_resources == "Y" ]];
then
declare -a pkg_list=(resources)
for key in "${pkg_list[@]}"
do
pkg_inst $key
done
DESKFILE="/usr/share/applications/net.nokyan.Resources.desktop"
if test -f "$DESKFILE"; then
cp -f $DESKFILE $HOME/.local/share/applications
sed -i "s|Exec=resources|Exec=env GTK_THEME=:dark resources|g" $HOME/.local/share/applications/net.nokyan.Resources.desktop
fi
fi
}
function inst_clamav {
echo "-"
echo "Installing ClamAV - Anti-Virus Scanner with freshclam and fangfrisch"
echo -n "${BOLD}Continue?${NORMAL} (Y/N) "
read confirm_clamav
if [[ $confirm_clamav == "Y" ]];
then
declare -a pkg_list=(clamav python-fangfrisch)
for key in "${pkg_list[@]}"
do
pkg_inst $key
done
sudo systemctl start clamav-daemon.service
sudo systemctl enable clamav-daemon.service
sudo freshclam
sudo -u clamav /usr/bin/fangfrisch --conf /etc/fangfrisch/fangfrisch.conf initdb
sudo systemctl enable fangfrisch.timer
if command -v nemo &> /dev/null
then
cp -Rf $MONARCHOS_DIR/usr/share/nemo/actions/clamscan.nemo_action /usr/share/nemo/actions
fi
fi
}
function set_gui {
echo "-"
echo "Setting up GUI "
echo "Including window decoration, Fonts, GTK Theming, Wallpaper and some convenient GUI applications"
echo -n "${BOLD}Continue?${NORMAL} (Y/N) "
read confirm_gui
if [[ $confirm_gui == "Y" ]];
then
declare -a pkg_list=(celluloid playerctl audacious font-manager viewnior tumbler ffmpegthumbnailer pavucontrol ttf-hack-nerd ttf-joypixels sweet-cursor-theme-git catppuccin-gtk-theme-mocha flatery-icon-theme-git)
for key in "${pkg_list[@]}"
do
pkg_inst $key
done
cp -Rf $MONARCHOS_DIR/home/config/gtk-3.0 $HOME/.config/gtk-3.0
chown $USER:$USER $HOME/.config/gtk-3.0
cp -Rf $MONARCHOS_DIR/home/config/gtk-4.0 $HOME/.config/gtk-4.0
chown $USER:$USER $HOME/.config/gtk-4.0
install $MONARCHOS_DIR/home/config/gtk-3.0/settings.ini $HOME/.config/gtk-3.0/settings.ini
install $MONARCHOS_DIR/home/config/gtk-4.0/settings.ini $HOME/.config/gtk-4.0/settings.ini
gsettings set org.gnome.desktop.interface gtk-theme "Catppuccin-Mocha-Standard-Lavender-Dark"
gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
gsettings set org.gnome.desktop.interface cursor-theme Sweet-cursors
#gsettings set org.cinnamon.desktop.default-applications.terminal exec alacritty
sudo mkdir -p /usr/local/share/fonts/
sudo install -C $MONARCHOS_DIR/usr/local/share/fonts/MonarchOS.ttf /usr/local/share/fonts/MonarchOS.ttf
sudo install -C $MONARCHOS_DIR/usr/local/share/fonts/Icomoon-Feather.ttf /usr/local/share/fonts/Icomoon-Feather.ttf
sudo install -C $MONARCHOS_DIR/etc/fonts/local.conf /etc/fonts/local.conf
fc-cache -f
WALLPAPER_DIR=$HOME/Pictures/Wallpaper
if [ ! -d "$WALLPAPER_DIR" ]; then
mkdir -p $WALLPAPER_DIR
fi
install -C $MONARCHOS_DIR/home/Pictures/Wallpaper/MonarchOS.png $WALLPAPER_DIR/MonarchOS.png
fi
}
function inst_rofi {
echo "-"
echo "Installing Rofi - Application launcher"
echo -n "${BOLD}Continue?${NORMAL} (Y/N) "
read confirm_rofi
if [[ $confirm_rofi == "Y" ]];
then
declare -a pkg_list=(rofi-lbonn-wayland-git)
for key in "${pkg_list[@]}"
do
pkg_inst $key
done
cp -Rf $MONARCHOS_DIR/home/config/rofi $HOME/.config/rofi
chown $USER:$USER $HOME/.config/rofi
sudo cp -Rf $MONARCHOS_DIR/usr/share/settings-menu /usr/share/settings-menu
fi
}
function inst_code {
log "-"
log "Installing Visual Studio Code (Codium)"
log "${BOLD}Continue?${NORMAL} (Y/N) "
read confirm_vscode
log "$confirm_vscode"
if [[ $confirm_vscode == "Y" ]];
then
declare -a pkg_list=(vscodium-bin)
for key in "${pkg_list[@]}"
do
pkg_inst $key
done
log "Installing VSCode Extensions"
codium --install-extension catppuccin.catppuccin-vsc-pack | tee -a $LOG
codium --install-extension Catppuccin.catppuccin-vsc-icons | tee -a $LOG
codium --install-extension Catppuccin.catppuccin-vsc | tee -a $LOG
codium --install-extension smcpeak.default-keys-windows | tee -a $LOG
fi
}
function inst_screenshot {
log "-"
log "Installing utilities to have a nice screenshot annoation tool"
log "${BOLD}Continue?${NORMAL} (Y/N) "
read confirm_screenshot
log "$confirm_screenshot"
if [[ $confirm_screenshot == "Y" ]];
then
declare -a pkg_list=(satty-bin grim slurp)
for key in "${pkg_list[@]}"
do
pkg_inst $key
done
sudo cp -f $MONARCHOS_DIR/usr/local/bin/hyprm-screenshot /usr/local/bin/
fi
}
function inst_hypr {
echo "-"
echo "Installing Wayland 'Desktop' - Hyprland based system"
echo -n "${BOLD}Continue?${NORMAL} (Y/N) "
read confirm_hypr
if [[ $confirm_hypr == "Y" ]];
then
declare -a pkg_list=(wayland hyprland hypridle hyprlock hyprcursor hyprkeys hyprpicker swww waypaper xdg-desktop-portal-hyprland wdisplays waybar nwg-look cliphist wlogout swayosd hyprlock waybar-module-pacman-updates)
for key in "${pkg_list[@]}"
do
pkg_inst $key
done
sudo cp -Rf $MONARCHOS_DIR/etc/wlogout /etc/
cp -Rf $MONARCHOS_DIR/home/config/hypr $HOME/.config/hypr
chown $USER:$USER $HOME/.config/hypr
cp -Rf $MONARCHOS_DIR/home/config/waybar $HOME/.config/waybar
chown $USER:$USER $HOME/.config/waybar
if [ -z "$HYPRLAND_INSTANCE_SIGNATURE" ]
then
log "Hyprland not running, can't set cursor"
else
hyprctl setcursor Sweet-cursors 16
fi
cp -Rf $MONARCHOS_DIR/home/config/waypaper $HOME/.config/waypaper
chown -R $USER:$USER $HOME/.config/waypaper
sed -i "s|USERNAME|${USER}|g" $HOME/.config/waypaper/config.ini
if [ -z "$HYPRLAND_INSTANCE_SIGNATURE" ]
then
log "Hyprland not running, can't set wallpaper"
else
swww-daemon &
swww img $WALLPAPER_DIR/MonarchOS.png
fi
fi
}
function inst_bspwm {
echo "-"
echo "Installing X11 - bspwm based system"
echo -n "${BOLD}Continue?${NORMAL} (Y/N) "
read confirm_bspwm
if [[ $confirm_bspwm == "Y" ]];
then
declare -a pkg_list=(bspwm sxhkd picom-arian8j2-git polybar xdg-desktop-portal)
for key in "${pkg_list[@]}"
do
pkg_inst $key
done
cp -Rf $MONARCHOS_DIR/home/config/bspwm $HOME/.config/bspwm
chown $USER:$USER $HOME/.config/bspwm
cp -Rf $MONARCHOS_DIR/home/config/sxhkd $HOME/.config/sxhkd
chown $USER:$USER $HOME/.config/sxhkd
cp -Rf $MONARCHOS_DIR/home/config/picom $HOME/.config/picom
chown $USER:$USER $HOME/.config/picom
cp -Rf $MONARCHOS_DIR/home/config/polybar $HOME/.config/polybar
chown $USER:$USER $HOME/.config/polybar
fi
}
function inst_conky {
echo "-"
echo "Installing Conky - light-weight system monitor widgets"
echo -n "${BOLD}Continue?${NORMAL} (Y/N) "
read confirm_conky
if [[ $confirm_conky == "Y" ]];
then
declare -a pkg_list=(conky)
for key in "${pkg_list[@]}"
do
pkg_inst $key
done
cp -Rf $MONARCHOS_DIR/home/config/conky $HOME/.config/conky
chown $USER:$USER $HOME/.config/conkys
fi
}
function inst_sddm {
echo "-"
echo "Installing SDDM - Fancy Display/Login Manager"
echo -n "${BOLD}Continue?${NORMAL} (Y/N) "
read confirm_sddm
if [[ $confirm_sddm == "Y" ]];
then
declare -a pkg_list=(sddm qt5-quickcontrols qt5-graphicaleffects)
for key in "${pkg_list[@]}"
do
pkg_inst $key
done
log "REMEMBER: this will fail if you don't disable any other display manager before"
log "clear package cache"
rm -rf $HOME/.cache/Elegant-sddm-monarch
log "clone sddm theme"
git clone https://gitea.nevaforget.de/dom/Elegant-sddm-monarch/ $HOME/.cache/Elegant-sddm-monarch
log "copy sddm theme to destination"
sudo cp -rf $HOME/.cache/Elegant-sddm-monarch/Elegant /usr/share/sddm/themes/monarch
log "set current sddm theme"
sudo cp -rf /usr/lib/sddm/sddm.conf.d/default.conf /etc/sddm.conf
sudo sed -i "s/^Current=.*/Current=monarch/g" /etc/sddm.conf
log "set default user image"
sudo cp -f $MONARCHOS_DIR/usr/share/sddm/faces/.face /usr/share/sddm/faces/.face
cp -f $MONARCHOS_DIR/usr/share/sddm/faces/.face $HOME/.face
sudo systemctl enable sddm
fi
}
function inst_nemo {
echo "-"
echo "Installing Nemo - Cinnamon File Manager with extensions"
echo -n "${BOLD}Continue?${NORMAL} (Y/N) "
read confirm_nemo
if [[ $confirm_nemo == "Y" ]];
then
declare -a pkg_list=(nemo nemo-fileroller nemo-mediainfo-tab nemo-audio-tab cinnamon-translations)
for key in "${pkg_list[@]}"
do
pkg_inst $key
done
xdg-mime default nemo.desktop inode/directory application/x-gnome-saved-search
gsettings set org.nemo.desktop show-desktop-icons false
gsettings set org.cinnamon.desktop.default-applications.terminal exec alacritty
gsettings set org.cinnamon.desktop.interface can-change-accels true
fi
}
function log () {
ts=$(date +"%H:%M:%S")
printf "$ts $1\n" | tee -a $LOG
}
function init {
rm $LOG
log "Installation start\n"
inst_paru
type paru >/dev/null 2>&1 || { echo >&2 "I require paru but it's not installed. Aborting."; exit 1; }
inst_basic_pkgs
inst_sddm
inst_hypr
inst_bspwm
set_gui
inst_rofi
inst_nemo
inst_zsh
inst_ufw
inst_clamav
inst_noise_supr
inst_resources
inst_configs
inst_bluet
inst_screenshot
inst_code
post_always
}
printf "#####################################\n"
printf "$(tput setaf 2)Welcome to MoonArch. Feel free.\n@version 1.0\n$(tput sgr0)"
printf "#####################################\n"
printf "\n"
printf "$(tput setaf 2)Don't run this script as ROOT!\n$(tput sgr0)"
printf "\n"
printf "${YELLOW} ${BOLD}This will clear and overwrite some config files\nand this can not be reverted. No Backups are created!\n "
printf "\n"
echo -n "${BOLD}Continue?${NORMAL} (Y/N) "
read confirm
if [[ $confirm == "Y" ]];
then
init
else
echo "Goodbye sweet butterfly"
exit 1
fi