#!/usr/bin/env sh # Description: Backup nnn configuration # - config dir content # - environment config # - shell functions and aliases # # Shell: POSIX compliant # Author: Léo Villeveygoux nnn_aliases="n nnn" outdir="nnn-$(whoami)@$(hostname)" outfile="${outdir}.tar.bz2" shellname="$(basename "$SHELL")" conffile="config.txt" configdir="${XDG_CONFIG_HOME:-$HOME/.config}/nnn" workdir="$PWD" tempdir="$(mktemp -d)" mkdir "$tempdir/$outdir" if [ ! -d "$tempdir" ]; then echo "Can't create work directory." >&2 exit 1 fi cd "$tempdir/$outdir" || exit 1 # Backing up config dir content cp -r "$configdir" . || exit 1 # Environment config env | sed "s/'/'\\\\''/" |\ awk '/^NNN_/{print "export '\''"$0"'\''"}' > "$conffile" # Shell functions/aliases case "$shellname" in bash) for name in $nnn_aliases ; do if [ "$(bash -ic "type -t $name")" = "function" ] ; then bash -ic "type $name" | tail -n+2 >> "$conffile" elif bash -ic "alias $name" >/dev/null 2>&1 ; then bash -ic "alias $name" >> "$conffile" fi done ;; zsh) for name in $nnn_aliases ; do if zsh -ic "functions $name" ; then zsh -ic "functions $name" >> "$conffile" elif zsh -ic "alias $name" ; then echo alias "$(zsh -ic "alias $name")" >> "$conffile" fi done ;; *) echo "Unknown shell, skipping alias/function checking." >&2 ;; esac cd .. || exit 1 printf "Saving as '%s' ... " "$workdir/$outfile" tar caf "$workdir/$outfile" "$outdir" && echo "Done" || echo "Failed" cd "$workdir" && rm -rf "$tempdir"