summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.backupignore5
-rw-r--r--.bashrc6
-rw-r--r--.config/i3/config1
-rw-r--r--.i3status.conf2
-rw-r--r--.otp_accounts.json.gpg70
-rw-r--r--.profile6
-rw-r--r--.vimrc2
-rw-r--r--.xinitrc10
-rwxr-xr-xbin/backup55
-rwxr-xr-xbin/backup-clean127
-rwxr-xr-xbin/byo4
-rwxr-xr-xbin/gauth6
-rwxr-xr-xbin/p4a3
13 files changed, 161 insertions, 136 deletions
diff --git a/.backupignore b/.backupignore
new file mode 100644
index 0000000..ade7961
--- /dev/null
+++ b/.backupignore
@@ -0,0 +1,5 @@
+.*[Cc]ache/
+*[Cc]ache/
+CacheStorage/
+go/pkg/
+gopath/pkg/
diff --git a/.bashrc b/.bashrc
index c086d45..f20fbdd 100644
--- a/.bashrc
+++ b/.bashrc
@@ -32,6 +32,8 @@ fixab() { printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" ; tail -c +25 "$1"; }
#export LESS_TERMCAP_us=$(tput setaf 5) # underline (magenta)
#export LESS_TERMCAP_ue=$'\E[0m' # end underline
+export BACKUP=bip:/home/backup/marc@yoda
+
# gnuplot display in terminal
export GNUTERM='sixelgd enhanced truecolor font "arial,9"'
@@ -47,7 +49,7 @@ alias ll='ls -AlFhv'
alias vi='vim'
alias view='vim -R'
#alias op='xdg-open'
-alias git='hub'
+#alias git='hub'
#alias go='go1.14.1'
alias go11='go1.11.13'
alias go12='go1.12.10'
@@ -58,6 +60,7 @@ alias goh='p go help'
alias god='p go doc'
alias gtr='go test -v -run'
alias gtb='go test -v -cpuprofile cpu.out -memprofile mem.out -benchmem -bench'
+alias kd='sudo cat /sys/kernel/debug/tracing/trace_pipe'
#alias vi='vim'
alias rvi='sudo vim'
alias rxt='sudo xt'
@@ -85,6 +88,7 @@ alias wai='~/go/src/github.co/traefik/whoami/whoami'
# yaegi debug
export YAEGI_DOT_CMD='dotty -'
+export YAEGI_BPF=1 YAEGI_UNSAFE=1 YAEGI_SYSCALL=1 YAEGI_UNRESTRICTED=1
mosht() { mosh "$@" -- tmux new -A; }
export -f mosht
diff --git a/.config/i3/config b/.config/i3/config
index 4a1136a..84f31c2 100644
--- a/.config/i3/config
+++ b/.config/i3/config
@@ -76,6 +76,7 @@ for_window [class="gnuplot_qt"] floating enable
for_window [instance="gxditview"] floating enable
for_window [class="Keybase"] floating enable
for_window [class="libreoffice"] floating enable
+for_window [class="Liferea"] floating enable
for_window [class="llpp"] floating enable
for_window [class="MuPDF"] floating enable
for_window [class="Pavucontrol"] floating enable
diff --git a/.i3status.conf b/.i3status.conf
index 87656f8..7590d2b 100644
--- a/.i3status.conf
+++ b/.i3status.conf
@@ -93,8 +93,8 @@ memory {
cpu_temperature 0 {
format = "🌡%degrees °C"
#path = "/sys/class/hwmon/hwmon0/temp1_input"
- #path = "/sys/class/hwmon/hwmon7/temp1_input"
path = "/sys/class/hwmon/hwmon6/temp1_input"
+ #path = "/sys/class/hwmon/hwmon7/temp1_input"
}
tztime local {
diff --git a/.otp_accounts.json.gpg b/.otp_accounts.json.gpg
index bbf1956..e99f48a 100644
--- a/.otp_accounts.json.gpg
+++ b/.otp_accounts.json.gpg
@@ -1,27 +1,49 @@
-----BEGIN PGP MESSAGE-----
-hQIMA+yVXrx81qjVAQ/8DgattaALSr1kOyqcTFdn43dNBwLSBD369Cs3zu7ez5xz
-DpBBecMNSuCVFPq0QfocNlDmz3BZxrkrttmAz3W7iK5rDKZeYTAG10ZT7NzI5K/C
-43WgEbf3W7FLxJGy6ASv2wRI/NRDZyjWe8yEEE5OF5ZTLawV57R/xW2UHemegI3l
-aAC4nU1hWHnmErdaubdxzgCva/hrd3SzroSVfmuQp+Cq1/AszDAe9LQltSAIo2oZ
-wwct6GIBNXoiA61YB3+m7oZfMfMa+1fNEobYReN/9E8iVMz01fWWOGsYRIue07yd
-0aAMj+ywQ1VU5G2SJ++B3pchbD+ViXvLEy1bnNF37PplKYnjN06db0MuflkfDM+A
-ICMTvhGlR58DwBueuLrWBh6dAbSOuz8tHQXzs5nlBI/Vvd2YUkw5Stcn+VBi7Bwg
-xvq2WiMhRT0nIvb1yuNGCpwWt2W1ckba79opBe4j1mvXYOq9vTT2VjJnAKe3k55B
-KWQBEkRe+T5FgcSfpRiMTogIvA8aOXTxkOltzjWjH5GXza65en4R9LNg7HB/lUd7
-zb3KVEg++XuPFVU08hFF8B4vb3zsLDy0Uf26Ilv63lNgvKR9TAC9VDEfY91qMXWl
-e1yeiGQCoAmU2BLm4MopwqBBEADjYSJETS1Kvz3hiR2AvcR5gMcpxp6C121723/S
-wWgBuVgsKQmnYVNMzkNhaKj5qWOak5jXq1py751jkGKkVUwSkVQwjMr99A06fNE+
-p0k1XjA36flRSzQgh3vcOTTutXaLe1TfEHC3TWOaXu30/S5ptkpcHFfBLSoVhZ3o
-2PN5/3WcRvHL30vvLW7noB5wH32l0AzSHVnZ5cFqlNH5M00HrlPOH+Uy5WfYy684
-V7zyOpg+J7DdJQNS7HBGjSNdK738HUdxWHkNuxaK2HEuzc9YyWy6fpPrefY1z9nH
-+H3pgmr4UxiUf0+LbYvL9xcaN265S1RIvx7QJJq7iTwZYtg/qc+SRfgVpvXUr40X
-W3bTEO1baPeVpydhLMWyqReN1i3tClTG3uaVNYX5adqaaqBCaKyXexiHrSFJzaIb
-mikACoQEFsh2acP+2cp8oCVGS5vdwEfkWfZSld4KfM/v37aDb4Mwq9Ap9/OAHwSt
-RWONXZFWftgfhHXnem/iUswob+O+SvF2CSCs7cCqcB5gS0RZTsV3eiRfPbZTSSQD
-xz95R4lZ2NIt99vDKi1NWrbIfTletCnYaOahKkC5bHqlzjZ10VKCOkYUBXyewSPy
-4d+RCxlF9T6Pya0NKLjKEJwUG67Nr79w9OR6mVWR0e8f+ppw41ApUih3a3sLTuWl
-DJFkJiYEL/EwBoAaAtfnMxqlPi6BXAJQXWngS8XMTmksr1PCVovFrr57e0tIyaLt
-X4pDpxmElysDbZqLtpDtFU7OU4pMimSmSmQ=
-=NBYN
+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
+0I6oD0UBjnXA
+=OCjq
-----END PGP MESSAGE-----
diff --git a/.profile b/.profile
index acb8299..cb09e87 100644
--- a/.profile
+++ b/.profile
@@ -5,6 +5,6 @@ PATH=~/bin:$PATH:~/go/bin
[ "${SHELL##*/}" = bash ] && . ~/.bashrc
# Last action: auto start X11 when logged on first console
-#case $HOSTNAME in
-#([sS]wift|yoda) [ "$(tty)" != /dev/tty1 ] || exec startx ;;
-#esac
+case $HOSTNAME in
+([sS]wift|yoda) [ "$(tty)" != /dev/tty1 ] || exec startx ;;
+esac
diff --git a/.vimrc b/.vimrc
index 68ae82a..1380fe8 100644
--- a/.vimrc
+++ b/.vimrc
@@ -8,7 +8,7 @@ filetype plugin on
filetype plugin indent on
let mapleader = ","
-set rtp+=/opt/homebrew/opt/fzf
+" set rtp+=/opt/homebrew/opt/fzf
let g:fzf_preview = 'cat {}'
" vimki plugin
diff --git a/.xinitrc b/.xinitrc
index 92f75e1..2ab853e 100644
--- a/.xinitrc
+++ b/.xinitrc
@@ -1,4 +1,10 @@
#!/bin/sh
+
+. /etc/X11/xinit/xinitrc.d/50-systemd-user.sh
+#eval $(ssh-agent)
+eval $(gnome-keyring-daemon --start)
+export SSH_AUTH_SOCK
+
# start pulseaudio on crux only. Should be handled by systemd on arch
#pulseaudio --start --exit-idle-time=-1 --log-target=syslog &
@@ -20,5 +26,5 @@ xsetroot -solid rgb:1/3/4
#slock
# Start window manager
-exec fvwm
-#exec i3
+#exec fvwm
+exec i3
diff --git a/bin/backup b/bin/backup
index 72c69c3..3964927 100755
--- a/bin/backup
+++ b/bin/backup
@@ -1,36 +1,47 @@
#!/bin/sh
-# Incremental backup using rsync(1).
-[ "$USER" = root ] || exec sudo "$0" "$@"
+usage() {
+ echo "Usage: $0 [-nv] [[[user@]host]:dir]
-backup() {
- date=$(date +%Y%m%d_%H%M%S)
- last=$(rsync --list-only "$dest/" 2>/dev/null | cut -b 47- | tail -1)
+Incremental backup using rsync(1). If run as root, a full system
+backup is performed. Otherwise, the user's home directory is backed.
- case $last in
- ([12]*) opt_link=--link-dest=../$last;;
- (*) opt_link=;;
- esac
+Options:
+-n dry-run
+-v verbose
- rsync -HSxa$optv --exclude-from=$ignore $opt_link / /boot "$dest/$date"
-}
+Files:
+- $HOME/.backupignore exclude files from user backup (non root)
+- /etc/backupignore exclude files from system backup (root)
-dest=/.history
-ignore=/etc/backup/ignore
+Environment:
+- BACKUP backup directory"
+}
-while getopts :d:i:nv opt; do
+while getopts :nv opt; do
case $opt in
- (d) dest="$OPTARG" ;;
- (i) ignore="$OPTARG" ;;
(n|v) optv="$opt$optv" ;;
- (*) echo "Usage: $0 [-nv] [-d [host:]dir] [clean|diff]"; exit 1 ;;
+ (*) usage; exit 1 ;;
esac
done
shift $((OPTIND - 1))
-[ "$1" ] && cmd=$1 && shift || cmd=""
-case $cmd in
-(""|save) backup ;;
-(clean) exec backup-clean ${optv+-$optv} "$dest";;
-(diff) exec diffdir "$@";;
+BACKUP=${1:-$BACKUP}
+[ "$BACKUP" ] || { usage; exit 1; }
+
+[ "$USER" = root ] &&
+ ignore=/etc/backupignore volumes='/ /boot' ||
+ ignore="$HOME/.backupignore" volumes="$HOME"
+[ -f "$ignore" ] && ignore="--exclude-from=$ignore" || ignore=
+
+last=$(rsync --list-only "$BACKUP/" 2>/dev/null | awk '{r=$NF} END {print r}')
+case $last in
+([12]*) opt_link=--link-dest=../$last;;
+(*) opt_link=;;
esac
+
+date=$(date +%Y-%m-%d-%H%M%S)
+
+[ "$optv" ] && echo "# Backup $volumes to $BACKUP/$date"
+
+exec rsync -HSxa$optv $ignore $opt_link $volumes "$BACKUP/$date"
diff --git a/bin/backup-clean b/bin/backup-clean
index 30d25db..1c752d9 100755
--- a/bin/backup-clean
+++ b/bin/backup-clean
@@ -1,89 +1,62 @@
#!/bin/sh
-# backup garbage collector
-[ "$USER" = root ] || exec sudo "$0" "$@"
-# Durations, in number of seconds.
-hd=3600 # hour duration: 60s * 60
-h12=43200 # 12h: hd * 12
-dd=86400 # day duration: hd * 24
-wd=604800 # week duration: dd * 7
-md=2592000 # month duration: dd * 30
-yd=31557600 # year duration: dd * 365.25
+usage() {
+ echo "Usage: $0 [-nv] [[[user@]host:]dir]
-now=$(date +'%Y%m%d_%H%M%S')
+$0 removes old backups and keeps:
+- backups for the current day
+- 1 backup per past day for the current month
+- 1 backup per past month for the current year
+- 1 backup per past year
-# The following works only for busybox date, not coreutils
-# Kept for reference only.
-#date2ts() { d=${1%_*} t=${1#*_}; date -d "$d${t%??}" +%s; }
+Options:
+-n dry run
+-v verbose
-# Convert date to timestamp, using date from GNU coreutils,
-# works also with busybox date.
-date2ts() {
- t=$1; r=${t#????}; Y=${t%$r} # Year (with century)
- t=$r; r=${t#??}; m=${t%$r} # Month
- t=$r; r=${t#??}; d=${t%$r} # Day
- t=${r#_}; r=${t#??}; H=${t%$r} # Hour
- t=$r; r=${t#??}; M=${t%$r} # Minute
- S=${t#??} # Second
- date -d "$Y-$m-$d $H:$M:$S" +%s
- #date -jf "%Y-%m-%d %H:%M:%S" "$Y-$m-$d $H:$M:$S" +%s # BSD, MacOS (not tested)
+Environment variables:
+- BACKUP - backup directory"
}
-ts2date() { date -d "@$1" +'%Y%m%d_%H%M%S'; }
-
-tsn=$(date2ts "$now")
-
-# Minimal retention delay in seconds, according to backup age,
-# implemented using POSIX shell arithmetic.
-retention_delay() {
- d=$((tsn - $1))
- if [ $((d < h12)) = 1 ]; then
- r=0 # keep all backups in the last 12 hours
- elif [ $((d < dd)) = 1 ]; then
- r=$hd # keep 1 backup per hour in the last day
- elif [ $((d < wd)) = 1 ]; then
- r=$dd # keep 1 backup per day in the last week
- elif [ $((d < md)) = 1 ]; then
- r=$wd # keep 1 backup per week in the last month
- elif [ $((d < yd)) = 1 ]; then
- r=$md # keep 1 backup per month in the last year
- else
- r=$yd # keep 1 backup per year in the previous years
- fi
- echo $r
-}
-
-dest=/.history
-while getopts :d:nv opt; do
+while getopts :nv opt; do
case $opt in
- (d) tsn=$(date2ts "$OPTARG") ;;
- (n) optn=1 ;;
- (v) optv=1 ;;
- (*) echo "Usage: $0 [-nv] [dir]"; exit 1 ;;
+ (n) optn=echo ;;
+ (v) optv=-t ;;
+ (*) usage; exit 1 ;;
esac
done
-shift $((OPTIND - 1))
-[ "$1" ] && dest=$1
+shift $((OPTIND -1))
-# Sorted list of backups, most recent first.
-lbu=$(ls -rv "$dest")
-lasy=${lbu##*
+BACKUP=${1:-$BACKUP}
+[ "$BACKUP" ] || { usage; exit 1; }
+
+host=${BACKUP%:*} dir=${BACKUP#*:}
+ls='ls -r' rm="xargs -r $optv $optn rm -rf"
+[ "$host" = "$dir" ] || ls="ssh $host $ls" rm="ssh $host $rm"
+
+[ "$optv" ] && echo "# Cleaning backups on $BACKUP"
+
+$ls "$dir" |
+awk -v now=$(date +%Y-%m-%d) -v dir="$dir" '
+BEGIN {
+ yn = substr(now, 1, 4) # Year now
+ mn = substr(now, 6, 2) # Month now
+ dn = substr(now, 9, 2) # Day now
}
-for d in $lbu; do
- tsc=$(date2ts "$d")
- if ! [ "$tsp" ]; then
- [ "$optv" ] && echo "keep $dest/$d"
- tsp=$tsc
- continue
- fi
- mrd=$(retention_delay "$tsp")
- dp=$((tsp - tsc))
- #if [ $((dp < mrd)) = 1 ]; then
- if [ "$d" != "last" -a $((dp < mrd)) = 1 ]; then
- [ "$optv" ] && echo "delete $dest/$d"
- [ "$optn" ] || rm -rf "${dest:?}/$d"
- else
- [ "$optv" ] && echo "keep $dest/$d"
- tsp=$tsc
- fi
-done
+{
+ yb = substr($0, 1, 4) # Year backup
+ mb = substr($0, 6, 2) # Month backup
+ db = substr($0, 9, 2) # Day backup
+ $0 = dir "/" $0
+
+ if (yb != yn) {
+ if (yb in yearly) print; else yearly[yb] = 1
+ next
+ }
+ if (mb != mn) {
+ if (mb in monthly) print; else monthly[mb] = 1
+ next
+ }
+ if (db != dn) {
+ if (db in dayly) print; else dayly[db] = 1
+ }
+}' | $rm
diff --git a/bin/byo b/bin/byo
index bc09fb8..93bb7f0 100755
--- a/bin/byo
+++ b/bin/byo
@@ -26,8 +26,8 @@ yoda_uuid='8c463221-6bb7-414e-9060-c9570bb3a6bb'
dest=/mnt/backup/$(hostname)
[ -b /dev/mapper/yoda ] && noclose=1 || cryptsetup open "$dev" yoda
findmnt /dev/mapper/yoda /mnt >/dev/null && noumount=1 || mount /dev/mapper/yoda /mnt
-time backup -v -d "$dest"
-[ ! "$optC" ] || backup -v -d "$dest" clean
+time backup -v "$dest"
+# [ ! "$optC" ] || backup -v -d "$dest" clean
[ ! "$optd" ] || time duperemove -drh --hashfile="$dest/.hashfile" "$dest"
df -h / "$dest"
ls -v "$dest"
diff --git a/bin/gauth b/bin/gauth
index 53ddf30..b18f73d 100755
--- a/bin/gauth
+++ b/bin/gauth
@@ -1,9 +1,9 @@
#!/bin/sh
# Use backup from andOTP
-# gpg -qd ~/.otp_accounts.json.gpg |
-cat ~/otp_accounts.json |
+# cat ~/.otp_accounts.json |
+gpg -qd ~/.otp_accounts.json.gpg 2>/dev/null |
jq -r '.[] | "\(.label) \(.secret)"' |
while read -r l s; do
echo "$l $(oathtool --totp -b "$s")"
-done
+done | column -t
diff --git a/bin/p4a b/bin/p4a
new file mode 100755
index 0000000..30e54ff
--- /dev/null
+++ b/bin/p4a
@@ -0,0 +1,3 @@
+#!/bin/sh
+adb forward tcp:8222 tcp:8022
+ssh ssh://u0_a250@localhost:8222