#!/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 options_url=https://git.mz.fo/fro/lnx-arch/raw/branch/master/dots/archinstall/${HOSTNAME}/options.sh options_trg=/tmp/options.sh rm -rf ${options_trg} rm -rf ${options_trg}.tmp wget -q ${options_url} -O ${options_trg} source ${options_trg} if [ -z "${OPTIONS_LOADED}" ]; then echo "error: unable to load options" exit 1 fi # load values found in options.sh file, sourced above system_user=${SYSTEM_USER} clone_trg=${CLONE_TARGET_DIR} if [[ -z "${clone_trg}" ]] ; then echo "error: CLONE_TARGET_DIR is empty" exit 1 fi secrets_cred_path=/home/${system_user}/syncDir/secrets/toBeSources/cred.sh source ${secrets_cred_path} # ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ # 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 ${system_user}:${system_user} ${_directory} } deploy_file() { _src_path=$1 _trg_path=$2 _no_chown=$3 _recursive=$4 if [[ "$_trg_path" == *.zip ]] ; then file_name_src=$(basename ${_src_path}) fi file_name_trg=$(basename ${_trg_path}) echo "" echo "${file_name_trg}:" suffix=".zip" if [[ ${file_name_src} == *$suffix ]] ; then # -o: overwrite without prompting unzip -o ${_src_path} -d ${_trg_path} else # -f (--force): overwrite without confirmation cp --force --recursive ${_src_path} ${_trg_path} fi # only chown if _no_chown variable is empty if [[ ${_no_chown} != "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)" if [[ ${_recursive} != "recursive" ]] ; then # https://serverfault.com/questions/156437/how-to-chown-a-directory-recursively-including-hidden-files-or-directories chown ${system_user}:${system_user} ${_trg_path}* chown ${system_user}:${system_user} ${_trg_path}.[^.]* else chown -R ${system_user}:${system_user} ${_trg_path}* chown -R ${system_user}:${system_user} ${_trg_path}.[^.]* fi else chown ${system_user}:${system_user} ${_trg_path} fi fi suffix=".sh" if [[ ${file_name_trg} == *$suffix ]] ; then chmod 755 ${_trg_path}/*.sh elif [[ ${file_name_trg} == "bin" ]] ; then chmod 755 ${_trg_path}/* elif [[ ${file_name_trg} == "wms" ]] ; then chmod 755 ${_trg_path}/* fi ls -al ${_trg_path} } # locate firefox's profile directory firefox_profile_dir() { ffdir=/home/${system_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/${system_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 # mounts file_name=nas.mount file_path=/etc/systemd/system trash-put ${file_path}/${file_name} deploy_file "${dots_trg}/systemd/${file_name}" "${file_path}/${file_name}" no_chown sed -i 's|[USERNAME]|klevstul|g' "${file_path}/${file_name}" sed -i 's|[PASSWORD]|${LILLESORTEBOKS}|g' "${file_path}/${file_name}" mount_target=/mnt/nas mkdir -p ${mount_target} # ---------- # printing # # src: # - https://wiki.manjaro.org/index.php?title=Printing # - http://localhost:631/help/admin.html # # example (turn the printer on, to see the "usb: value"): # $ lpinfo -m | grep 'ql700' # brother_ql700_printer_en.ppd Brother QL-700 CUPS # $ lpinfo -v # ... # direct usb://Brother/QL-700?serial=000L0Z530516 # ... # ---------- #lpadmin -p Brother_HL-L2310D_series -D "Brother HL-L2310D_series" -E -v usb://Brother/HL-L2310D%20series?serial=E78096L7N181893 -m lsb/usr/cupsfilters/brother-HLL2310D-cups-en.ppd #lpadmin -p Brother_QL-700 -D "Brother QL-700" -E -v usb://Brother/QL-700?serial=000L0Z530516 -m brother_ql700_printer_en.ppd # EXAMPLE OF FILE MANIPULATION (from lnxPub's `cli/2103mjr/scr/80_urxvt.sh`) # # ----- # # update .Xresources # # ----- # file=$HOME/.Xresources # # # update font setting (so it's understandable by the extension) # /tmp/99_key_value_modifier.sh URxvt.font xft:NotoSansMono-Light:size=12 : $file # # # enable the "resize-font" extension # /tmp/99_comment_add_remove.sh remove ! Rxvt.perl-ext-common $file # /tmp/99_key_value_modifier.sh Rxvt.perl-ext-common resize-font : $file # # # make the terminal's background transparent # /tmp/99_comment_add_remove.sh remove '! ' 'URxvt\*inheritPixmap' $file # /tmp/99_comment_add_remove.sh remove '! ' 'URxvt\*transparent' $file # /tmp/99_comment_add_remove.sh remove '! ' 'URxvt\*shading' $file # /tmp/99_key_value_modifier.sh 'URxvt\*shading' 30 : $file # ---------- # programs # ---------- # lf file_name=lfrc file_path=/home/${system_user}/.config/lf mkdir -p ${file_path} deploy_file "${dots_trg}/lf/${file_name}" "${file_path}/${file_name}" # 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 # gtk (settings found using lxappearance) # note that the bookmarks file were found in two different locations, so a # symlink is created below. as well, ".gtkrc-2.0.mine" had no effect, so # ".gtkrc-2.0" is overwritten file_name=settings.ini file_path=/home/${system_user}/.config/gtk-3.0 mkdir -p ${file_path} deploy_file "${dots_trg}/gtk/${file_name}" "${file_path}/${file_name}" file_name=.gtk-bookmarks file_path=/home/${system_user} deploy_file "${dots_trg}/gtk/${file_name}" "${file_path}/${file_name}" tmp_file_path_full="/home/${system_user}/.config/gtk-3.0/bookmarks" trash-put ${tmp_file_path_full} ln -s "${file_path}/${file_name}" "${tmp_file_path_full}" file_name=.gtkrc-2.0 file_path=/home/${system_user} deploy_file "${dots_trg}/gtk/${file_name}" "${file_path}/${file_name}" # nitrogen file_path=/home/${system_user}/.config/nitrogen mkdir -p ${file_path} deploy_file "${dots_trg}/nitrogen/*" "${file_path}/" # pcmanfm # bookmarks found in "dots/gtk/.gtk-bookmarks" file_name=pcmanfm.conf file_path=/home/${system_user}/.config/pcmanfm/default mkdir -p ${file_path} deploy_file "${dots_trg}/pcmanfm/${file_name}" "${file_path}/${file_name}" # vscodium file_name=settings.json file_path=/home/${system_user}/.config/VSCodium/User mkdir -p ${file_path} deploy_file "${dots_trg}/vscodium/${file_name}" "${file_path}/${file_name}" # i3wm if [ ${I3WM} == "true" ] ; then # i3 file_name=config file_path=/home/${system_user}/.config/i3 mkdir -p ${file_path} deploy_file "${dots_trg}/i3wm/${file_name}" "${file_path}/" # i3status file_name=config file_path=/home/${system_user}/.config/i3status mkdir -p ${file_path} deploy_file "${dots_trg}/i3status/${file_name}" "${file_path}/" fi if [ ${I3WM} == "true" ] || [ ${QTILE} == "true" ] ; then # xorg file_path=/home/${system_user} deploy_file "${dots_trg}/xorg/.*" "${file_path}/" # lemurs (display/login manager) file_name_src=.xinitrc file_name_trg=i3 file_path_src=/home/${system_user} file_path_trg=/etc/lemurs/wms if [ -f ${file_path_trg}/${file_name_trg} ] ; then echo "" echo "softlink already exists: ${file_path}/${file_name_trg}" ls -al ${file_path_trg} else echo "" echo "creating soft link: ${file_path_src}/${file_name_src} ➔ ${file_path_trg}/${file_name_trg}" ln -s ${file_path_src}/${file_name_src} ${file_path_trg}/${file_name_trg} chown -h ${system_user}:${system_user} ${file_path_trg}/${file_name_trg} ls -al ${file_path_trg} fi fi 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/${system_user}/.local/share/fonts mkdir -p ${file_path} deploy_file "${dotsplus_trg}/fonts/install/*" "${file_path}/" # ---------- # images # ---------- file_path=/home/${system_user}/.local/share/img mkdir -p ${file_path} deploy_file "${dotsplus_trg}/images/*" "${file_path}/" # ---------- # wallpapers # ---------- file_path=/home/${system_user}/.local/share/wp mkdir -p ${file_path} deploy_file "${dotsplus_trg}/wallpapers/install/*" "${file_path}/" # ---------- # miscelanneous # ---------- # vscodium theme # https://vscodethemes.com/e/sdras.night-owl/night-owl-no-italics?language=javascript # https://github.com/sdras/night-owl-vscode-theme/tree/main/themes file_name=night-owl-vscode-theme-main.zip file_path=/home/${system_user}/.vscode-oss/extensions mkdir -p ${file_path} deploy_file "${dotsplus_trg}/miscellaneous/${file_name}" "${file_path}/" chown recursive # sweet dark gtk theme # https://github.com/EliverLara/Sweet # https://github.com/EliverLara/Sweet/releases file_name=Sweet-Dark.zip file_path=/usr/share/themes deploy_file "${dotsplus_trg}/miscellaneous/${file_name}" "${file_path}/" chown recursive fi