]> Sergey Matveev's repositories - nnn.git/commitdiff
Add nbak plugin to backup all nnn config (#528)
authorlvgx <l@vgx.fr>
Thu, 23 Apr 2020 17:35:58 +0000 (19:35 +0200)
committerGitHub <noreply@github.com>
Thu, 23 Apr 2020 17:35:58 +0000 (23:05 +0530)
* 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

plugins/README.md
plugins/nbak [new file with mode: 0755]

index 109c7a8ca0577cf82c32d23a2317f9edeeb07e3c..9cafd3e3f8a6466cbc3cc988cbdca25ebb28fd11 100644 (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 |
diff --git a/plugins/nbak b/plugins/nbak
new file mode 100755 (executable)
index 0000000..8ff5474
--- /dev/null
@@ -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"
+