Difficulty: ★☆☆☆☆
Use the script to backup important config.
Use case - transfer common configuration and package list to other systems
https://wiki.manjaro.org/index.php/Importanthidden.dot_files_in_your_home_partition
#! /bin/bash
#
# Script for backing up configuration and package lists
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the Affero 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 <https://www.gnu.org/licenses/>.
#
# @linux-aarhus - root.nix.dk
#
# ##########################################################
# Modify as necessary
# example filelist=('.bash_profile' '.bashrc' '.netrc' '.profile' '.zshrc')
filelist=('.bash_profile' '.bashrc' '.netrc' '.profile' '.zshrc')
# example folderlist=('.config' '.local' '.gnupg' '.mozilla' '.ssh' '.thunderbird')
folderlist=('.config' '.local')
# configuration file name
archive_file="dotconf.tar.gz"
# official repo package list
repo_pkg_file="repo-pkglist.txt"
# custom package list
cust_pkg_file="cust-pkglist.txt"
# Do not edit below this line - unless you know what you are doing.
# ##########################################################
SCRIPTNAME=$(basename "$0")
VERSION="0.2"
if [[ -z $1 ]]; then
echo ":: $SCRIPTNAME v$VERSION"
echo "==> missing argument: PATH"
echo "Usage:"
echo " $SCRIPTNAME /path/to/backup"
echo " Path to store output"
echo " e.g. $SCRIPTNAME /home/$USER/backup"
echo ""
exit
fi
set -e
if ! [[ -d $1 ]]; then
mkdir -p $1
fi
conf_archive="$1/$archive_file"
repo_pkg_list="$1/$repo_pkg_file"
cust_pkg_list="$1/$cust_pkg_file"
# create an archive of common hidden files and folders
if [[ -e "$conf_archive" ]]; then
# remove archive if exist
rm -f "$conf_archive"
fi
todo=""
for file in ${filelist[@]}; do
if [[ -f $file ]]; then
todo+="${file} "
fi
done
for folder in ${folderlist[@]}; do
if [[ -d ${folder} ]]; then
todo+="${folder} "
fi
done
tar -zcvf "$conf_archive" $todo
# list packages from official repo
pacman -Qqen > "$repo_pkg_list"
# list foreign packages (custom e.g. AUR)
pacman -Qqem > "$cust_pkg_list"
echo " ==> Packagelists created"
echo " --> $repo_pkg_list"
echo " --> $cust_pkg_list"
echo " ==> Config archive created"
echo " --> $conf_archive"
echo " ==> To install packages from lists"
echo " --> sudo pacman -Syu --needed - < $repo_pkg_file"
echo " ==> To restore the configuration files run"
echo " --> tar -xzf --overwrite -C $HOME $archive_file"
echo ""
ONLY user configuration is supported
Edit the script variable section at top - save an execute
On computer A The script creates three (3) files in the directory you specify - e.g. an USB stick
On computer B Navigate to the USB stick and open a terminal
Install repo packages
sudo pacman -Syu $(repo-pkglist.txt)
Install custom packages
pamac build --no-confirm $(cat cust-pkglist.txt)
Extract the files
tar -xzf --overwrite ---directory $HOME dotconf.tar.gz
Logout for the changes to apply everywhere
Caveats This script does not take into account applications added using flatpak, snap or appimage.
Please consult the applicable man pages on how to list such applications and subsequently add such packages to the new system.
User configuration pertinent to those packages likely exist in either ~/.config and ~/.local but may exist in other locations inside your home.