* a text editor is required to setup netctl profile after reboot * git client is necessary to checkout repo for config after reboot
297 lines
8.8 KiB
Bash
297 lines
8.8 KiB
Bash
#!/usr/bin/env bash
|
|
set -eu
|
|
|
|
# Arch Linux Install Script Packages (alis-packages) installs software
|
|
# packages.
|
|
# Copyright (C) 2022 picodotdev
|
|
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
# This script is hosted at https://github.com/picodotdev/alis. For new features,
|
|
# improvements and bugs fill an issue in GitHub or make a pull request.
|
|
# Pull Request are welcome!
|
|
#
|
|
# If you test it in real hardware please send me an email to pico.dev@gmail.com with
|
|
# the machine description and tell me if somethig goes wrong or all works fine.
|
|
#
|
|
# Please, don't ask for support for this script in Arch Linux forums, first read
|
|
# the Arch Linux wiki [1], the Installation Guide [2] and the General
|
|
# Recomendations [3], later compare the commands with those of this script.
|
|
#
|
|
# [1] https://wiki.archlinux.org
|
|
# [2] https://wiki.archlinux.org/index.php/Installation_guide
|
|
# [3] https://wiki.archlinux.org/index.php/General_recommendations
|
|
|
|
# Installs packages in a Arch Linux system.
|
|
#
|
|
# Usage:
|
|
# # loadkeys es
|
|
# # curl -sL https://raw.githubusercontent.com/picodotdev/alis/master/download.sh | bash
|
|
# # vim alis-packages.conf
|
|
# # ./alis-packages.sh
|
|
|
|
PACKAGES_STANDALONE="false"
|
|
|
|
function init_config() {
|
|
local COMMONS_FILE="alis-commons.sh"
|
|
|
|
source "$COMMONS_FILE"
|
|
if [ "$PACKAGES_STANDALONE" == "true" ]; then
|
|
source "$COMMONS_CONF_FILE"
|
|
fi
|
|
source "$PACKAGES_CONF_FILE"
|
|
}
|
|
|
|
function sanitize_variables() {
|
|
PACKAGES_PACMAN=$(sanitize_variable "$PACKAGES_PACMAN")
|
|
PACKAGES_PACMAN_PIPEWIRE=$(sanitize_variable "$PACKAGES_PACMAN_PIPEWIRE")
|
|
PACKAGES_FLATPAK=$(sanitize_variable "$PACKAGES_FLATPAK")
|
|
PACKAGES_SDKMAN=$(sanitize_variable "$PACKAGES_SDKMAN")
|
|
PACKAGES_AUR_COMMAND=$(sanitize_variable "$PACKAGES_AUR_COMMAND")
|
|
PACKAGES_AUR=$(sanitize_variable "$PACKAGES_AUR")
|
|
SYSTEMD_UNITS=$(sanitize_variable "$SYSTEMD_UNITS")
|
|
}
|
|
|
|
function check_variables() {
|
|
check_variables_boolean "PACKAGES_PACMAN_INSTALL" "$PACKAGES_PACMAN_INSTALL"
|
|
check_variables_boolean "PACKAGES_PACMAN_INSTALL_PIPEWIRE" "$PACKAGES_PACMAN_INSTALL_PIPEWIRE"
|
|
check_variables_boolean "PACKAGES_FLATPAK_INSTALL" "$PACKAGES_FLATPAK_INSTALL"
|
|
check_variables_boolean "PACKAGES_SDKMAN_INSTALL" "$PACKAGES_SDKMAN_INSTALL"
|
|
check_variables_boolean "PACKAGES_AUR_INSTALL" "$PACKAGES_AUR_INSTALL"
|
|
check_variables_list "PACKAGES_AUR_COMMAND" "$PACKAGES_AUR_COMMAND" "paru-bin yay-bin paru yay aurman" "true" "false"
|
|
}
|
|
|
|
function init() {
|
|
if [ "$PACKAGES_STANDALONE" == "true" ]; then
|
|
init_log_trace "$LOG_TRACE"
|
|
init_log_file "$LOG_FILE" "$PACKAGES_LOG_FILE"
|
|
fi
|
|
}
|
|
|
|
function facts() {
|
|
print_step "facts()"
|
|
|
|
facts_commons
|
|
|
|
if [ -z "$USER_NAME" ]; then
|
|
USER_NAME="$(whoami)"
|
|
fi
|
|
}
|
|
|
|
function checks() {
|
|
print_step "checks()"
|
|
|
|
check_variables_value "USER_NAME" "$USER_NAME"
|
|
|
|
if [ -n "$PACKAGES_PACMAN" ]; then
|
|
execute_sudo "pacman -Syi $PACKAGES_PACMAN"
|
|
fi
|
|
|
|
if [ "$SYSTEM_INSTALLATION" == "false" ]; then
|
|
ask_sudo
|
|
fi
|
|
}
|
|
|
|
function ask_sudo() {
|
|
sudo pwd >> /dev/null
|
|
}
|
|
|
|
function prepare() {
|
|
print_step "prepare()"
|
|
}
|
|
|
|
function packages() {
|
|
print_step "packages()"
|
|
|
|
packages_pacman
|
|
packages_flatpak
|
|
packages_sdkman
|
|
packages_aur
|
|
}
|
|
|
|
function packages_pacman() {
|
|
print_step "packages_pacman()"
|
|
|
|
if [ "$PACKAGES_PACMAN_INSTALL" == "true" ]; then
|
|
local CUSTOM_REPOSITORIES="$(echo "$PACKAGES_PACMAN_CUSTOM_REPOSITORIES" | grep -E "^[^#]|\n^$"; exit 0)"
|
|
if [ -n "$CUSTOM_REPOSITORIES" ]; then
|
|
execute_sudo "echo -e \"# alis\n$CUSTOM_REPOSITORIES\" >> /etc/pacman.conf"
|
|
fi
|
|
|
|
if [ -n "$PACKAGES_PACMAN" ]; then
|
|
pacman_install "$PACKAGES_PACMAN"
|
|
fi
|
|
|
|
if [[ ("$PACKAGES_PIPEWIRE" == "true" || "$PACKAGES_PACMAN_INSTALL_PIPEWIRE" == "true") && -n "$PACKAGES_PACMAN_PIPEWIRE" ]]; then
|
|
if [ -n "$(echo "$PACKAGES_PACMAN_PIPEWIRE" | grep -F -w "pipewire-pulse")" ]; then
|
|
pacman_uninstall "pulseaudio pulseaudio-bluetooth"
|
|
fi
|
|
if [ -n "$(echo "$PACKAGES_PACMAN_PIPEWIRE" | grep -F -w "pipewire-jack")" ]; then
|
|
pacman_uninstall "jack2"
|
|
fi
|
|
pacman_install "$PACKAGES_PACMAN_PIPEWIRE"
|
|
#if [ -n "$(echo "$PACKAGES_PACMAN_PIPEWIRE" | grep -F -w "pipewire-pulse")" ]; then
|
|
# execute_user "$USER_NAME" "systemctl enable --user pipewire-pulse.service"
|
|
#fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function packages_flatpak() {
|
|
print_step "packages_flatpak()"
|
|
|
|
if [ "$PACKAGES_FLATPAK_INSTALL" == "true" ]; then
|
|
pacman_install "flatpak"
|
|
|
|
if [ -n "$PACKAGES_FLATPAK" ]; then
|
|
execute_flatpak "flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo"
|
|
|
|
flatpak_install "$PACKAGES_FLATPAK"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function packages_sdkman() {
|
|
print_step "packages_sdkman()"
|
|
|
|
if [ "$PACKAGES_SDKMAN_INSTALL" == "true" ]; then
|
|
pacman_install "zip unzip"
|
|
execute_user "$USER_NAME" "curl -s https://get.sdkman.io | bash"
|
|
|
|
if [ -n "$PACKAGES_SDKMAN" ]; then
|
|
execute_user "$USER_NAME" "sed -i 's/sdkman_auto_answer=.*/sdkman_auto_answer=true/g' /home/$USER_NAME/.sdkman/etc/config"
|
|
sdkman_install "$PACKAGES_SDKMAN"
|
|
execute_user "$USER_NAME" "sed -i 's/sdkman_auto_answer=.*/sdkman_auto_answer=false/g' /home/$USER_NAME/.sdkman/etc/config"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function packages_aur() {
|
|
print_step "packages_aur()"
|
|
|
|
if [ "$PACKAGES_AUR_INSTALL" == "true" ]; then
|
|
IFS=' ' local COMMANDS=($PACKAGES_AUR_COMMAND)
|
|
for COMMAND in "${COMMANDS[@]}"
|
|
do
|
|
aur_command_install "$USER_NAME" "$COMMAND"
|
|
done
|
|
|
|
AUR_PACKAGE="${COMMANDS[0]}"
|
|
|
|
case "${AUR_PACKAGE}" in
|
|
"aurman" )
|
|
AUR_COMMAND="aurman"
|
|
;;
|
|
"yay" )
|
|
AUR_COMMAND="yay"
|
|
;;
|
|
"paru" )
|
|
AUR_COMMAND="paru"
|
|
;;
|
|
"yay-bin" )
|
|
AUR_COMMAND="yay"
|
|
;;
|
|
"paru-bin" | *)
|
|
AUR_COMMAND="paru"
|
|
;;
|
|
esac
|
|
|
|
if [ -n "$PACKAGES_AUR" ]; then
|
|
aur_install "$PACKAGES_AUR"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function flatpak_install() {
|
|
local OPTIONS=""
|
|
if [ "$SYSTEM_INSTALLATION" == "true" ]; then
|
|
local OPTIONS="--system"
|
|
fi
|
|
|
|
local ERROR="true"
|
|
set +e
|
|
IFS=' ' local PACKAGES=($1)
|
|
for VARIABLE in {1..5}
|
|
do
|
|
local COMMAND="flatpak install $OPTIONS -y flathub ${PACKAGES[@]}"
|
|
execute_flatpak "$COMMAND"
|
|
if [ $? == 0 ]; then
|
|
local ERROR="false"
|
|
break
|
|
else
|
|
sleep 10
|
|
fi
|
|
done
|
|
set -e
|
|
if [ "$ERROR" == "true" ]; then
|
|
return
|
|
fi
|
|
}
|
|
|
|
function sdkman_install() {
|
|
local ERROR="true"
|
|
set +e
|
|
IFS=' ' local PACKAGES=($1)
|
|
for PACKAGE in "${PACKAGES[@]}"
|
|
do
|
|
IFS=':' local PACKAGE=($PACKAGE)
|
|
for VARIABLE in {1..5}
|
|
do
|
|
local COMMAND="source /home/$USER_NAME/.sdkman/bin/sdkman-init.sh && sdk install ${PACKAGE[@]}"
|
|
execute_user "$USER_NAME" "$COMMAND"
|
|
if [ $? == 0 ]; then
|
|
local ERROR="false"
|
|
break
|
|
else
|
|
sleep 10
|
|
fi
|
|
done
|
|
done
|
|
set -e
|
|
if [ "$ERROR" == "true" ]; then
|
|
return
|
|
fi
|
|
}
|
|
|
|
function end() {
|
|
echo ""
|
|
echo -e "${GREEN}Arch Linux packages installed successfully"'!'"${NC}"
|
|
echo ""
|
|
}
|
|
|
|
function main() {
|
|
local START_TIMESTAMP=$(date -u +"%F %T")
|
|
set +u
|
|
if [ "$COMMOMS_LOADED" != "true" ]; then
|
|
PACKAGES_STANDALONE="true"
|
|
fi
|
|
set -u
|
|
|
|
init_config
|
|
execute_step "sanitize_variables"
|
|
execute_step "check_variables"
|
|
execute_step "init"
|
|
execute_step "facts"
|
|
execute_step "checks"
|
|
execute_step "prepare"
|
|
execute_step "packages"
|
|
execute_step "systemd_units"
|
|
local END_TIMESTAMP=$(date -u +"%F %T")
|
|
local INSTALLATION_TIME=$(date -u -d @$(($(date -d "$END_TIMESTAMP" '+%s') - $(date -d "$START_TIMESTAMP" '+%s'))) '+%T')
|
|
echo -e "Installation packages start ${WHITE}$START_TIMESTAMP${NC}, end ${WHITE}$END_TIMESTAMP${NC}, time ${WHITE}$INSTALLATION_TIME${NC}"
|
|
execute_step "end"
|
|
}
|
|
|
|
main $@
|