setup-cockpit/main_install.sh

326 lines
6.2 KiB
Bash
Executable file

#!/bin/bash
## flyingscorpio
## Script to automate the setting up of my working environment.
## Uncomment the function calls in MAIN you wish to run.
# 1. Set up {{{
RED=$(tput setaf 1)
export RED
GREEN=$(tput setaf 2)
export GREEN
ORANGE=$(tput setaf 3)
export ORANGE
NC=$(tput sgr0)
export NC
BASE_DIR="$PWD"
export BASE_DIR
GITHUB_DOTFILES=~/github_dotfiles
export GITHUB_DOTFILES
make_symlink() {
link=$1
target=$2
echo -n "Checking symlink $link..."
if [ "$link" -ef "$target" ]; then
echo "${GREEN} ==> OK${NC}"
else
echo "${RED} ==> wrong symlink or not a symlink.${NC}"
if [ "$OVERWRITE" = 'true' ]; then
rm "$link" 2> /dev/null
fi
if ln -rs "$target" "$link"; then
echo "${ORANGE}$link symlink created${NC}"
fi
fi
}
export -f make_symlink
separator() {
exit_status=$?
if [ $exit_status -eq 0 ]; then
echo -n "${GREEN}"
else
echo -n "${RED}"
fi
echo "========================================"
echo "${NC}"
}
# }}}
# 2. Define OS {{{
OS='none'
os_release=$(cat /etc/os-release*)
case ${os_release,,} in
*debian* )
OS='debian'
echo "You are using Debian"
;;
*ubuntu* )
OS='debian'
echo "You are using Ubuntu"
;;
*arch* )
OS='arch'
echo "You are using Arch-Linux"
;;
*manjaro* )
OS='arch'
echo "You are using Manjaro"
;;
* )
echo "${ORANGE}Unable to determine OS${NC}"
echo "Which OS are you using?"
select OS in 'Debian / Ubuntu' 'Arch / Manjaro'; do
case $OS in
'Debian / Ubuntu' ) OS='debian'; break;;
'Arch / Manjaro' ) OS='arch'; break;;
esac
done
echo "Using $OS"
esac
export OS
separator
# }}}
# 3. Handle args {{{
OVERWRITE='false'
UPDATE='false'
if [ "$#" -eq 0 ]; then
echo "No arguments provided."
echo "Use -o to overwrite files."
echo "Use -u to enable updating."
fi
if [ "$#" -ge 1 ]; then
case "$1" in
-o | --overwrite )
echo "${ORANGE}You agree to overwrite preexisting files!${NC}"
OVERWRITE='true'
;;
-u | --update )
echo "${ORANGE}Set to update plugins!${NC}"
UPDATE='true'
;;
-ou | -uo )
echo "${ORANGE}Both options were set.${NC}"
OVERWRITE='true'
UPDATE='true'
;;
* )
echo "Din't understand arguments"
exit 1
esac
fi
if [ "$#" -eq 2 ]; then
case "$2" in
-o | --overwrite )
echo "${ORANGE}You agree to overwrite preexisting files!${NC}"
OVERWRITE='true'
;;
-u | --update )
echo "${ORANGE}Set to update plugins!${NC}"
UPDATE='true'
;;
* )
echo "Din't understand arguments"
exit 1
esac
fi
export OVERWRITE
export UPDATE
separator
# }}}
# FUNCTIONS:
clone_projects() { # {{{
# Clone projects
echo "Cloning projects..."
/bin/bash "$BASE_DIR"/installation_scripts/clone_projects.sh
separator
} # }}}
configure_git() { # {{{
# Configure Git
echo "Configuring Git..."
git config --global user.name "$USER@$(uname -n)"
git config --global user.email "tfranken@protonmail.com"
git config --global alias.ci "commit"
git config --global alias.co "checkout"
git config --global alias.st "status"
git config --global alias.br "branch"
separator
} # }}}
configure_protonvpn() { # {{{
# Configure ProtonVPN
echo "Configuring ProtonVPN..."
sudo protonvpn init && sudo protonvpn c --cc CH
separator
} # }}}
install_rust() { # {{{
# Install Rust
echo "Installing Rust..."
if rustc --version; then
echo "${GREEN}Rust is already intalled${NC}"
if [ "$UPDATE" = 'true' ]; then
echo "Updading..."
rustup update
fi
else
if curl https://sh.rustup.rs -sSf | sh; then
echo "${GREEN}Successfully installed Rust${NC}"
else
echo "${ORANGE}There was a problem while installing Rust${NC}"
fi
fi
separator
} # }}}
install_scripts() { # {{{
echo "Installing scripts..."
if [ "$OS" = 'debian' ]; then
/bin/bash "$BASE_DIR"/installation_scripts/debian_based_installs.sh
elif [ "$OS" = 'arch' ]; then
/bin/bash "$BASE_DIR"/installation_scripts/arch_based_installs.sh
else
echo "${RED} Didn't receive correct OS information, quitting...${NC}"
exit 1
fi
separator
} # }}}
markdown_mimetype() { # {{{
# Add MIME type for reading .md files in Firefox (need to add extension too)
echo "Adding MIME type for .md files in Firefox..."
echo "${ORANGE}Remember to install the Firefox extension for it to work${NC}"
mkdir -p ~/.local/share/mime/packages
echo "<?xml version=\"1.0\"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
<mime-type type=\"text/plain\">
<glob pattern=\"*.md\"/>
<glob pattern=\"*.mkd\"/>
<glob pattern=\"*.markdown\"/>
</mime-type>
</mime-info>" > ~/.local/share/mime/packages/text-markdown.xml
update-mime-database ~/.local/share/mime
separator
} # }}}
setup_bash_files() { # {{{
# Set up .bashrc
echo "Updating .bashrc..."
make_symlink ~/.bashrc "$BASE_DIR"/dotfiles/bash/bashrc
separator
# Set up .bash_aliases
echo "Updating .bash_aliases..."
make_symlink ~/.bash_aliases "$BASE_DIR"/dotfiles/bash/bash_aliases
separator
} # }}}
setup_bash_git_prompt() { # {{{
# Clone bash-git-prompt
if [ -e ~/.bash-git-prompt ]; then
echo "${GREEN}Found existing bash-git-prompt.${NC}"
if [ "$UPDATE" = 'true' ]; then
echo "Updating..."
cd ~/.bash-git-prompt && git pull
fi
else
echo "${ORANGE}Cloning bash-git-prompt...${NC}"
git clone https://github.com/magicmonty/bash-git-prompt.git ~/.bash-git-prompt --depth=1
fi
separator
} # }}}
setup_i3() { # {{{
# Update i3 configuration
echo "Setting up i3..."
/bin/bash "$BASE_DIR"/installation_scripts/i3.sh
separator
} # }}}
setup_sddm() { # {{{
# Update sddm
echo "Setting up SDDM..."
/bin/bash "$BASE_DIR"/installation_scripts/sddm.sh
separator
} # }}}
setup_vim() { # {{{
# Update vim configuration
echo "Setting up configuration for Vim..."
/bin/bash "$BASE_DIR"/installation_scripts/vim.sh
separator
} # }}}
# MAIN:
# install_scripts
# configure_git
# configure_protonvpn
# setup_bash_files
# setup_bash_git_prompt
# install_rust
# setup_vim
# setup_sddm
# setup_i3
# markdown_mimetype
# clone_projects