Browse Source

Add nbak plugin to backup all nnn config (#528)

* 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
master
lvgx GitHub 4 years ago
parent
commit
7dab9d0d86
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 74 additions and 0 deletions
  1. +1
    -0
      plugins/README.md
  2. +73
    -0
      plugins/nbak

+ 1
- 0
plugins/README.md View File

@@ -50,6 +50,7 @@ Plugins are installed to `${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins`.
| moclyrics | Show lyrics of the track playing in moc | sh | [ddgr](https://github.com/jarun/ddgr), [moc](http://moc.daper.net/) |
| mocplay | Append (and/or play) selection/dir/file in moc | sh | [moc](http://moc.daper.net/) |
| mp3conv | Extract audio from multimedia as mp3 | sh | ffmpeg |
| nbak | Backs up `nnn` config | sh | tar, awk |
| nmount | Toggle mount status of a device as normal user | sh | pmount, udisks2 |
| nuke | Sample file opener (CLI-only by default) | sh | _see in-file docs_ |
| oldbigfile | List large files by access time | sh | find, sort |


+ 73
- 0
plugins/nbak View File

@@ -0,0 +1,73 @@
#!/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"


Loading…
Cancel
Save