mirror of
https://github.com/jarun/nnn.git
synced 2024-12-01 02:49:44 +00:00
7dab9d0d86
* Add nbak plugin to backup all nnn config * nbak: check cd, quote env * nbak: print backup file name * nbak: add --show option, to show shell config * nbak: fix shellcheck warning 'type' is POSIX complient, AND we check that we're actually running bash, but shellcheck can't understand this... Then '-o' is POSIX complient too, but shellcheck thinks it's "not well defined". * nbak: variable renames, archive hierarchy changes * nbak: fix variable expansion * nbak: remove --show option * nbak: call interactive bash/zsh to get fun/aliases * Add nbak entry in plugins/README.md * nbak: change archive hierarchy * plugins/README.md: make nbak description shorter
74 lines
1.4 KiB
Bash
Executable file
74 lines
1.4 KiB
Bash
Executable file
#!/usr/bin/env sh
|
|
|
|
# Description: Backup of all nnn config
|
|
#
|
|
# 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"
|
|
|