#!/usr/bin/env bash # klevstul echo "<< 99_deploy.sh >>" if [ "$EUID" -ne 0 ] then echo "error: run as 'root'" exit fi this_file_name=`basename "$0"` if [ $# -lt 1 ]; then echo "usage: '$this_file_name {all}'" exit 1 fi operation=$1 clone_trg=/tmp source ${clone_trg}/lnx-arch/dots/archinstall/${HOSTNAME}/options.sh if [ -z "${OPTIONS_LOADED}" ]; then echo "error: unable to load options" exit 1 fi user=${USER} # ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ # helper functions download_repo() { _targz_url=$1 # make clone target directory, if it doesn't exist mkdir -p ${clone_trg} # instead of doing a git clone (like `git clone ${clone_url} ${clone_trg}`), # where i would have emptied the target dir each time, i download the # source as a tar.gz. wget --show-progress ${_targz_url} -O ${clone_trg}/tmp.tar.gz tar -xzf ${clone_trg}/tmp.tar.gz -C ${clone_trg} rm ${clone_trg}/tmp.tar.gz } create_dir() { _directory=$1 mkdir -p ${_directory} chown ${user}:${user} ${_directory} } deploy_file() { _src_path=$1 _trg_path=$2 _no_chown=$3 file_name=$(basename ${_trg_path}) echo "" echo "${file_name}:" cp -f ${_src_path} ${_trg_path} # only chown if _no_chown variable is empty if [ -z "${_no_chown}" ]; then # if the target path ends with a slash, we have a directory if [[ "$_trg_path" == */ ]] then echo "(ignore potential \"chown: cannot access\" error, which will occur if there are no dot-files in the directory)" chown ${user}:${user} ${_trg_path}* # https://serverfault.com/questions/156437/how-to-chown-a-directory-recursively-including-hidden-files-or-directories chown ${user}:${user} ${_trg_path}.[^.]* else chown ${user}:${user} ${_trg_path} fi fi suffix=".sh" if [[ ${file_name} == *$suffix ]]; then chmod 755 ${_trg_path} fi ls -al ${_trg_path} } # locate profile folder firefox_profile_dir() { ffdir=/home/${user}/.mozilla/firefox/ if ! [ -d "$ffdir" ] then echo "error: firefox main directory not found: '${ffdir}'" else pattern=".default-release" old_dir=`pwd` cd ${ffdir} for _dir in *"${pattern}"*; do [ -d "${_dir}" ] && dir="${_dir}" && break done cd ${old_dir} if [ -z "$dir" ] then echo "error: firefox profile directory not found" else ffprofiledir=${ffdir}${dir} echo "${ffprofiledir}" fi fi } # ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ # dots (dot files) if [ ${operation} == "dots" ] ; then # declarations targz_dots_url=https://git.mz.fo/fro/lnx-arch/archive/master.tar.gz dots_trg=${clone_trg}/lnx-arch/dots echo "***** ${operation} *****" rm -rf ${clone_trg}/lnx-arch download_repo ${targz_dots_url} tree ${clone_trg}/lnx-arch # ---------- # system # ---------- # bashrc file_name=.bashrc file_path=/home/${user} deploy_file "${dots_trg}/bash/${file_name}" "${file_path}/${file_name}" # bin (executable binaries, scripts) file_path=/usr/local/bin deploy_file "${dots_trg}/bin/*" "${file_path}/" # environment file_name=environment file_path=/etc deploy_file "${dots_trg}/environment/${file_name}" "${file_path}/${file_name}" no_chown # ---------- # programs # ---------- # firefox file_name=policies.json file_path=/usr/lib/firefox/distribution deploy_file "${dots_trg}/firefox/${file_name}" "${file_path}/${file_name}" no_chown ffpd=$(firefox_profile_dir) if [[ ${ffpd} == error* ]] ; then echo ${ffpd} else file_name=user.js file_path=${ffpd} deploy_file "${dots_trg}/firefox/${file_name}" "${file_path}/${file_name}" file_name=userChrome.css file_path=${ffpd}/chrome mkdir -p ${file_path} deploy_file "${dots_trg}/firefox/${file_name}" "${file_path}/${file_name}" fi # hyprland #if [ ${deploy_hyprland} == "true" ] ; then #fi # hypridle file_name=hypridle.conf file_path=/home/${user}/.config/hypr deploy_file ${dots_trg}/hypridle/${file_name} ${file_path}/${file_name} # hyprland file_name=hyprland.conf file_path=/home/${user}/.config/hypr deploy_file ${dots_trg}/hyprland/${file_name} ${file_path}/${file_name} # hyprlock file_name=hyprlock.conf file_path=/home/${user}/.config/hypr deploy_file ${dots_trg}/hyprlock/${file_name} ${file_path}/${file_name} # hyprpaper file_name=hyprpaper.conf file_path=/home/${user}/.config/hypr deploy_file ${dots_trg}/hyprpaper/${file_name} ${file_path}/${file_name} # waybar file_path=/home/${user}/.config/waybar mkdir -p ${file_path} deploy_file "${dots_trg}/waybar/*" "${file_path}/" # xorg file_path=/home/${user} deploy_file "${dots_trg}/xorg/.*" "${file_path}/" # qtile file_name=config.py file_path=/home/${user}/.config/qtile mkdir -p ${file_path} deploy_file "${dots_trg}/qtile/${file_name}" "${file_path}/" fi # dots+ (wallpapers, fonts ++) if [ ${operation} == "dots+" ] ; then # declarations targz_dotsplus_url=https://gitlab.com/pqq/dotsplus/-/archive/main/dotsplus-main.tar.gz dotsplus_trg=${clone_trg}/dotsplus-main echo "***** ${operation} *****" rm -rf ${dotsplus_trg} download_repo ${targz_dotsplus_url} tree ${clone_trg} # ---------- # fonts # ---------- file_path=/home/${user}/.local/share/fonts mkdir -p ${file_path} deploy_file "${dotsplus_trg}/fonts/install/*" "${file_path}/" # ---------- # wallpapers # ---------- deploy_file "${dotsplus_trg}/wallpapers/install/*" "/home/${user}/.config/hypr/" fi