dotfiles/install.sh

297 lines
8.9 KiB
Bash
Raw Normal View History

2017-12-06 18:30:31 +01:00
#!/bin/bash
# =======================================
# Script setup
# =======================================
set -e
set -o pipefail
2017-12-06 18:30:31 +01:00
# =======================================
2018-04-30 21:35:17 +02:00
# Helper functions
2017-12-06 18:30:31 +01:00
# =======================================
# Ask a question and return true or false based on the users input
ask() {
2022-05-03 14:41:51 +02:00
# from https://djm.me/ask
local prompt default reply
while true; do
if [ "${2:-}" = "Y" ]; then
prompt="Y/n"
default=Y
elif [ "${2:-}" = "N" ]; then
prompt="y/N"
default=N
else
prompt="y/n"
default=
fi
echo -n "$1 [$prompt] "
read -r reply </dev/tty
if [ -z "$reply" ]; then
reply=$default
fi
case "$reply" in
[Yy]*) return 0 ;;
[Nn]*) return 1 ;;
esac
done
2017-12-06 18:30:31 +01:00
}
2018-04-30 21:35:17 +02:00
# delete target, create dirs if they don't exist yet and finally symlink the dir
function linkDir {
2022-05-03 14:41:51 +02:00
rm -rf "$2"
mkdir -p "${2%/*}"
ln -sf "$1" "$2"
2018-04-30 21:35:17 +02:00
}
# replace line endings with a space (for use in package managers)
function fileToList {
echo $(cat "$1" | sed '/^\s*#\([^!]\|$\)/d' | tr +'\n' ' ' | tr -s ' ')
2018-04-30 21:35:17 +02:00
}
2018-07-02 22:16:18 +02:00
# create and copy files to directory
function copyToDir {
2022-05-03 14:41:51 +02:00
echo "$2" | sed 's%/[^/]*$%/%' | xargs mkdir -p
cp "$1" "$2"
2018-07-02 22:16:18 +02:00
}
2018-04-30 21:35:17 +02:00
# =======================================
# Installation functions
# =======================================
# moves all fonts into the fonts directories (overwriting existing files)
2017-12-06 18:30:31 +01:00
function install_fonts {
2022-05-03 14:41:51 +02:00
mkdir -p ~/.fonts
mkdir -p ~/.local/share/fonts
2024-06-10 00:30:56 +02:00
mkdir -p /usr/local/share/fonts
2022-05-03 14:41:51 +02:00
cp -rf ./fonts/* ~/.fonts
cp -rf ./fonts/* ~/.local/share/fonts
2024-06-10 00:30:56 +02:00
cp -rf ./fonts/* /usr/local/share/fonts
2017-12-06 18:30:31 +01:00
}
2024-12-07 15:43:05 +01:00
# install trizen, an aur helper
function install_trizen {
2024-12-07 15:43:05 +01:00
mkdir /tmp/trizen-install
git clone https://aur.archlinux.org/trizen.git /tmp/trizen-install
pushd /tmp/trizen-install || return
2022-05-03 14:41:51 +02:00
makepkg -si
popd || return
2024-12-07 15:43:05 +01:00
sudo rm -dRf /tmp/trizen-install
}
# Sets up time and date related stuff
function setDateTimeConfig {
systemctl enable ntpd
timedatectl set-ntp true
sudo ln -sf "$PWD"/config/networkmanager/09-timezone /etc/NetworkManager/dispatcher.d/09-timezone
}
function install_gtk {
mkdir -p "$HOME/.config/gtk-3.0"
mkdir -p "$HOME/.config/gtk-4.0"
ln -sf "$PWD"/config/gtk/settings.ini ~/.gtkrc-2.0.mine
ln -sf "$PWD"/config/gtk/settings.ini ~/.config/gtk-3.0/settings.ini
ln -sf "$PWD"/config/gtk/settings.ini ~/.config/gtk-4.0/settings.ini
}
function install_docker {
systemctl enable docker
groupadd docker
usermod -aG docker $USER
newgrp docker
}
2017-12-06 18:30:31 +01:00
# install other configs
function install_config {
2018-04-30 21:35:17 +02:00
install_gtk
2022-05-03 14:41:51 +02:00
# link directories
linkDir "$PWD"/wallpapers/images ~/Pictures/wallpapers
linkDir "$PWD"/i3 ~/.config/i3
linkDir "$PWD"/config/notify-osd/notify-osd ~/.notify-osd
linkDir "$PWD"/config/terminal/xfce4-term ~/.config/xfce4/terminal
2023-03-09 10:21:15 +01:00
linkDir "$PWD"/config/polybar ~/.config/polybar
linkDir "$PWD"/config/poshthemes ~/.config/poshthemes
linkDir "$PWD"/config/xfce4 ~/.config/xfce4/xfconf/xfce-perchannel-xml
2024-12-07 15:43:05 +01:00
linkDir "$PWD"/config/rofi ~/.config/rofi
2019-07-04 22:33:48 +02:00
2022-05-03 14:41:51 +02:00
# link user files
ln -sf "$PWD"/bash/.aliases ~/
2022-05-03 14:41:51 +02:00
ln -sf "$PWD"/bash/.bashrc ~/.bashrc
ln -sf "$PWD"/bash/.dotnet-install.sh ~/.dotnet-install.sh
2022-05-03 14:41:51 +02:00
ln -sf "$PWD"/bash/.alias.sh ~/.alias
ln -sf "$PWD"/config/nano/.nanorc ~/.nanorc
ln -sf "$PWD"/bash/.powerline-shell.json ~/.powerline-shell.json
2022-05-03 14:41:51 +02:00
ln -sf "$PWD"/config/mimeapps.list ~/.config/mimeapps.list
2022-08-03 21:41:07 +02:00
ln -sf "$PWD"/config/greenclip.toml ~/.config/greenclip.toml
ln -sf "$PWD"/config/terminalrc ~/.config/xfce4/terminal/terminalrc
mkdir -p ~/.config/Code/User/globalStorage/zokugun.sync-settings
ln -sf "$PWD"/config/git/settings.yml ~/.config/Code/User/globalStorage/zokugun.sync-settings/settings.yml
2022-05-03 14:41:51 +02:00
ln -sf "$PWD"/config/.gitconfig ~/.gitconfig
ln -sf "$PWD"/config/.npmrc ~/.npmrc
ln -sf "$PWD"/config/user-dirs.dirs ~/.config/user-dirs.dirs
mkdir -p ~/.pulse
ln -sf "$PWD"/config/pulse/daemon.conf ~/.pulse/daemon.conf
ln -sf "$PWD"/config/picom.conf ~/.config/picom.conf
2018-04-30 21:35:17 +02:00
2023-03-09 10:21:15 +01:00
# link autorandr files
mkdir -p "$HOME/.config/autorandr"
ln -sf "$PWD"/config/autorandr/postswitch ~/.config/autorandr/postswitch
2022-05-03 14:41:51 +02:00
# link system files / directories
sudo ln -sf "$PWD"/config/package-managers/pacman.conf /etc/pacman.conf
sudo ln -sf "$PWD"/config/package-managers/makepkg.conf /etc/makepkg.conf
sudo ln -sf "$PWD"/config/ntp.conf /etc/ntp.conf
2022-05-03 18:11:25 +02:00
sudo ln -sf "$PWD"/bash/Completion/ /etc/bash_completion.d
sudo ln -sf "$PWD"/config/environment /etc/environment
sudo ln -sf "$PWD"/config/.bash_profile ~/.bash_profile
2022-05-03 14:41:51 +02:00
# create empty .custom alias file
echo "" >~/.custom
echo "" >~/.variables
2018-08-15 18:42:09 +02:00
# files to be copied once
2022-09-25 13:15:31 +02:00
mkdir -p "$HOME/.config/Code/User"
cp "$PWD"/config/code/syncLocalSettings.json ~/.config/Code/User/
2022-05-03 14:41:51 +02:00
# system fixes
echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system
mkdir -p ~/Pictures/Screenshots
setDateTimeConfig
}
2017-12-06 18:30:31 +01:00
# Installs the dependencies on Arch Linux
function install_dependencies {
2022-05-03 14:41:51 +02:00
fileToList dependencies/pacman.txt | xargs sudo pacman --noconfirm -S
2018-04-30 21:35:17 +02:00
2022-05-03 14:41:51 +02:00
install_trizen
2024-12-07 15:43:05 +01:00
set +e
2022-09-25 13:15:31 +02:00
fileToList dependencies/aur.txt | xargs trizen -S --noconfirm
2024-12-07 15:43:05 +01:00
set -e
2022-05-03 14:41:51 +02:00
fileToList dependencies/npm.txt | xargs sudo npm install -g
2017-12-06 18:30:31 +01:00
}
# set up a new ssh key
function create_ssh_key {
ssh-keygen -t ed25519 -C "info@rickvanlieshout.com"
eval "$(ssh-agent -s)"
}
2018-04-30 21:35:17 +02:00
# =======================================
# User output functions
# =======================================
2017-12-06 18:30:31 +01:00
# Run the intro bit
function intro {
2022-05-03 14:41:51 +02:00
echo "___ ___ _ _ _ _ _ "
echo "| \/ | | | (_) | | | | ( )"
echo "| . . | __ _ ___| |_ ___ _ __ _ __ ___ _ _ __ __| |___| |__ |/ "
echo "| |\/| |/ _\` / __| __/ _ \ '__| '_ \` _ \| | '_ \ / _' |_ / '_ \ "
echo "| | | | (_| \__ \ || __/ | | | | | | | | | | | (_| |/ /| | | | "
echo "\_| |_/\__,_|___/\__\___|_| |_| |_| |_|_|_| |_|\__,_/___|_| |_| "
echo " "
echo " "
echo " __ _ _ "
echo " / _(_) ___ (_) "
echo " ___ ___ _ __ | |_ _ __ _ ( _ ) _ __ _ ___ ___ "
echo " / __/ _ \| '_ \| _| |/ _\` | / _ \/\ | '__| |/ __/ _ \ "
echo "| (_| (_) | | | | | | | (_| | | (_> < | | | | (_| __/ "
echo " \___\___/|_| |_|_| |_|\__, | \___/\/ |_| |_|\___\___| "
echo " __/ | "
echo " |___/ "
echo ""
2017-12-06 18:30:31 +01:00
}
function computer {
2022-05-03 14:41:51 +02:00
echo " /\ "
echo " / \ "
echo " /_ %%==O=% _____________ "
echo " % - -% | '\\\\\\\\\\"
echo " _____c% > __ | ' ____|_ "
echo " (_|. . % \` % .' | + '||:::::: "
echo " ||. ___)%%%%_.' | '||_____| "
echo " ||.( \ ~ / ,)' \'_______|_____| "
echo " || /| \'/ |\ ___/____|___\___ "
echo " _,,,;!___*_____\_| _ ' <<<:| "
echo " / /| |_________'___o_o| "
echo " /_____/ / "
echo " |:____|/ \"Boy, I LOVE this stuff\". "
echo ""
echo ""
}
2017-12-06 18:30:31 +01:00
# =======================================
# Main loop
# =======================================
clear
2017-12-06 18:30:31 +01:00
# Run the intro function
intro
ask "Do you want to continue installing my config and rice?" Y &&
2017-12-06 19:10:41 +01:00
2022-05-03 14:41:51 +02:00
# Ask for dependency installation
if ask "Do you want to install the applications listen in ./dependencies? (might prompt for password)" Y; then
install_dependencies
2022-05-03 14:41:51 +02:00
fi
2017-12-06 19:10:41 +01:00
# Ask for SSH generation
if ask "Do you want to generate a new SSH key?" Y; then
create_ssh_key
fi
2017-12-06 19:10:41 +01:00
# Ask for config installation
if ask "Do you want to install the config files?" Y; then
2022-05-03 14:41:51 +02:00
install_config
fi
2017-12-06 18:30:31 +01:00
# Ask for font installation
if ask "Do you want to install the fonts?" Y; then
2022-05-03 14:41:51 +02:00
install_fonts
fi
# Autostart docker and add user
if ask "Do you want to set up docker for this user?" Y; then
install_docker
fi
2022-05-03 14:41:51 +02:00
# ask to enable the display manager
if ask "Do you want to enable sddm?" Y; then
sudo systemctl set-default graphical.target
sudo systemctl enable sddm.service
2022-05-03 18:11:25 +02:00
sudo mkdir -p "/etc/sddm.conf.d/"
curl "http://gravatar.com/avatar/$(echo -n "info@rickvanlieshout.com" | md5sum - | cut -d' ' -f1)?s=1024" | sudo tee /usr/share/sddm/faces/mastermindzh.face.icon >/dev/null
sudo ln -sf "$PWD"/config/sddm/default.conf /etc/sddm.conf.d/
fi
clear
computer
# ask for pc specific install
prompt=$(echo $'\n> ' "Please select a specific computer to install or q to finish the install")
PS3="$prompt: "
2022-05-03 14:41:51 +02:00
select opt in "$PWD/computers"/*; do
if ((REPLY == "q")); then
break
elif ((REPLY > 0)); then
bash "$opt/install.sh"
break
else
echo "Invalid option. Try another one."
fi
done
2022-05-03 14:41:51 +02:00
clear
2022-05-03 14:41:51 +02:00
echo "Enjoy using my rice! Do not forget to select i3 in sddm :)"