X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=brc;h=15799b880f790aab264ea2cc56acd79a1721d844;hb=7cc6197f74e97cb522894046718712cd03d3d385;hp=16b7eb74e341abfb8a3c08da20ee72084ac2775f;hpb=2d3ce30754a3f24d922635647bab4990b60f5c27;p=distro-setup diff --git a/brc b/brc index 16b7eb7..15799b8 100644 --- a/brc +++ b/brc @@ -107,12 +107,16 @@ if [[ $- == *i* ]]; then bind '"\C-i": self-insert' else + if [[ $KONSOLE_PROFILE_NAME ]]; then + TERM=xterm-256color + fi + # todo: not sure this works in sakura #stty werase undef #bind "\C-w": kill-region # sakura == xterm-256color # konsole == xterm - if [[ $TERM == "xterm" ]]; then + if [[ $TERM == xterm* ]]; then # control + arrow keys. for other terminals, see http://unix.stackexchange.com/questions/10806/how-to-change-previous-next-word-shortcut-in-bash bind '"\e[1;5C": shell-forward-word' 2>/dev/null bind '"\e[1;5D": shell-backward-word' 2>/dev/null @@ -147,16 +151,17 @@ HISTFILE=$HOME/.bh # the time format display when doing the history command # also, setting this makes the history file record time # of each command as seconds from the epoch -HISTTIMEFORMAT="%I:%M %p %m/%d " +HISTTIMEFORMAT="%Y-%m-%d %I:%M %p " # consecutive duplicate lines dont go in history HISTCONTROL=ignoredups # works in addition to HISTCONTROL to do more flexible things # it could also do the same things as HISTCONTROL and thus replace it, # but meh. dunno why, but just " *" does glob expansion, so use [ ] to avoid it. -HISTIGNORE='pass *:k *:[ ]*:lom ' +HISTIGNORE='pass *:[ ]*:lom*:gram*' export BC_LINE_LENGTH=0 +export PROFILE_TASKS_TASK_OUTPUT_LIMIT=100 # note, if I use a machine I dont want files readable by all users, set # umask 077 # If fewer than 4 digits are entered, leading zeros are assumed @@ -164,9 +169,10 @@ export BC_LINE_LENGTH=0 C_DEFAULT_DIR=/a # i for insensitive. the rest from -# https://superuser.com/questions/366930/how-do-i-get-the-git-pager-to-clean-up-screen-output-after-exit -# and reading the man +# X means dont remove the current screenworth of output upon exit +# R means to show colors n things export LESS=RXi +export SYSTEMD_LESS=$LESS # * include files for _x in /a/bin/distro-functions/src/* /a/bin/!(githtml)/*-function?(s); do @@ -181,12 +187,20 @@ if [[ -e /a/bin/errhandle/err ]]; then source /a/bin/errhandle/err err-allow fi +# if someone exported $SOE (stop on error), catch errors +if [[ $SOE ]]; then + err-catch +fi + path_add /a/exe +# add this with absolute paths as needed for better security +#path_add --end /path/to/node_modules/.bin + # pip3 --user things go here: path_add --end ~/.local/bin path_add --ifexists --end /a/work/libremanage path_add --ifexists --end /a/opt/adt-bundle*/tools /a/opt/adt-bundle*/platform-tools -path_add --ifexists --end /a/opt/scancode-toolkit-2.9.2 +path_add --ifexists --end /a/opt/scancode-toolkit-3.0.2 export WCDHOME=/a # based on readme.debian. dunno if this will break on other distros. _x=/usr/share/wcd/wcd-include.sh @@ -304,7 +318,7 @@ khcopy() { } a() { - local x=$(readlink -nf "$@") + local x=$(readlink -nf "${1:-$PWD}") # yes, its kinda dumb that xclip/xsel cant do this in one invocation echo -n "$x" | xclip -selection clipboard echo -n "$x" | xclip @@ -320,6 +334,23 @@ anki() { fi } +ap() { + # pushd in case current directory has an ansible.cfg file + pushd /a/xans >/dev/null + ansible-playbook -v -l ${1:- $(hostname -f)} site.yml + popd >/dev/null +} +aw() { + pushd /a/work/ansible-configs >/dev/null + time ansible-playbook -v -i inventory adhoc.yml "$@" + popd >/dev/null +} +ad() { + pushd /a/bin/distro-setup/a >/dev/null + ansible-playbook site.yml + popd >/dev/null +} + astudio() { # googling android emulator libGL error: failed to load driver: r600 # lead to http://stackoverflow.com/a/36625175/14456 @@ -332,9 +363,22 @@ b() { c - } -bkrun() { - # use -p from interactive shell - btrbk-run -p "$@" +bbk() { + c / + local active=true + if systemctl is-active btrbk.service; then + echo "cron btrbk is already running" + return 1 + fi + systemctl is-active btrbk.timer || active=false + if $active; then + ser disable btrbk.timer + fi + # run latest + install-my-scripts + if ! btrbk-run "$@" && $active; then + ser enable btrbk.timer + fi } bfg() { java -jar /a/opt/bfg-1.12.14.jar "$@"; } @@ -343,6 +387,22 @@ bigclock() { xclock -digital -update 1 -face 'arial black-80:bold' } +bpull() { + [[ $1 ]] || return 1 + c / + # run latest + install-my-scripts + switch-mail-host $1 $HOSTNAME +} +bpush() { + [[ $1 ]] || return 1 + c / + # run latest + install-my-scripts + switch-mail-host $HOSTNAME $1 +} + + btc() { local f=/etc/bitcoin/bitcoin.conf # importprivkey will timeout if using the default of 15 mins. @@ -440,6 +500,7 @@ cgpl() cp /a/bin/data/COPYING . fi } + capache() { if (($#)); then @@ -448,6 +509,20 @@ capache() cp /a/bin/data/LICENSE . fi } + +cat-new-files() { + local start=$SECONDS + local dir="$1" + inotifywait -m "$dir" -e create -e moved_to | + while read filedir _ file; do + cat "$filedir$file" + hr + calc $((SECONDS - start)) / 60 + sleep 5 + done + +} + chown() { # makes it so chown -R symlink affects the symlink and its target. if [[ $1 == -R ]]; then @@ -553,7 +628,7 @@ envload() { # load environment from a previous: export > file # mail related etail() { - sudo tail -f /var/log/exim4/mainlog + sudo tail -F /var/log/exim4/mainlog -n 50 } f() { @@ -573,7 +648,7 @@ fa() { faf() { # find all files find -L $1 -not \( -name .svn -prune -o -name .git -prune \ -o -name .hg -prune -o -name .editor-backups -prune \ - -o -name .undo-tree-history -prune \) 2>/dev/null + -o -name .undo-tree-history -prune \) -type f 2>/dev/null } # one that comes with distros is too old for newer devices @@ -892,7 +967,11 @@ gpg() { } gse() { - git send-email --notes '--envelope-sender=' \ + local email=ian@iankelling.org + if readlink ~/.mu | grep fsf &>/dev/null; then + email=iank@fsf.org + fi + git send-email --notes "--envelope-sender=<$email>" \ --suppress-cc=self "$@" } @@ -956,8 +1035,10 @@ hrcat() { local f; for f; do [[ -f $f ]] || continue; hr; echo "$f"; cat "$f"; d # get latest hub and run it # main command to use: -# hub pull-request -# on first use, you input username/pass and it gets an oath token so you dont have to repeat +# hub pull-request --no-edit +# --no-edit means to use the first commit\'s message as the pull request message. +# Also, you need to use a feature branch, not master in your fork. +# On first use, you input username/pass and it gets an oath token so you dont have to repeat # it\'s at ~/.config/hub hub() { local up uptar updir p @@ -1003,6 +1084,7 @@ ic() { git commit -am "$*" } + idea() { /a/opt/idea-IC-163.7743.44/bin/idea.sh "$@" &r } @@ -1015,21 +1097,6 @@ ifn() { } -if [[ $OS == Windows_NT ]]; then - # cygstart wrapper - cs() { - cygstart "$@" & - } - xp() { - explorer.exe . - } - # launch - o() { - local x=(*$1*) - (( ${#x[#]} > 1 )) && { echo "warning ${#x[#]} matches found"; sleep 1; } - cygstart *$1* & - } -else o() { if type gvfs-open &> /dev/null ; then gvfs-open "$@" @@ -1038,29 +1105,25 @@ else fi # another alternative is run-mailcap } -fi ipdrop() { s iptables -A INPUT -s $1 -j DROP } -net-dev-info() { - e "lspci -nnk|gr -iA2 net" - lspci -nnk|gr -iA2 net - hr - e "s lshw -C network" - hr - s lshw -C network - -} istext() { grep -Il "" "$@" &>/dev/null } +jfilter() { + grep -Evi -e "^(\S+\s+){4}(sudo|sshd|cron)\[\S*:" \ + -e "^(\S+\s+){4}systemd\[\S*: (starting|started) (btrfsmaintstop|dynamicipupdate|spamd dns bug fix cronjob|rss2email)\.*$" +} jtail() { - journalctl -n 10000 -f "$@" | grep -Evi "^(\S+\s+){4}(sudo|sshd|cron)" + journalctl -n 10000 -f "$@" | jfilter } +jr() { journalctl "$@" | jfilter | less ; } +jrf() { journalctl -f "$@" | jfilter; } kff() { # keyboardio firmware flash pushd /a/bin/distro-setup/Arduino/Model01-Firmware @@ -1079,6 +1142,8 @@ l() { lcn() { locate -i "*$**"; } +lg() { LC_COLLATE=C.UTF-8 ll --group-directories-first; } + lt() { ll -tr "$@"; } lld() { ll -d "$@"; } @@ -1086,9 +1151,12 @@ lld() { ll -d "$@"; } lom() { local l base if [[ $1 == /* ]]; then + base=${1##*/} + if mountpoint /mnt/$base; then + return 0 + fi l=$(sudo losetup -f) sudo losetup $l $1 - base=${1##*/} if ! sudo cryptsetup luksOpen $l $base; then sudo losetup -d $l return 1 @@ -1100,7 +1168,7 @@ lom() { base=$1 sudo umount /mnt/$base l=$(sudo cryptsetup status /dev/mapper/$base|sed -rn 's/^\s*device:\s*(.*)/\1/p') - sudo cryptsetup luksClose /dev/mapper/$base + sudo cryptsetup luksClose /dev/mapper/$base || return 1 sudo losetup -d $l fi } @@ -1149,6 +1217,7 @@ mbenable() { dst=/m/4e/$1 src=/m/md/$1 set -x + [[ -e $src ]] || { set +x; return 1; } mv -T $src $dst || { set +x; return 1; } ln -s -T $dst $src /a/exe/lnf /p/.mu ~ @@ -1160,6 +1229,7 @@ mbdisable() { dst=/m/md/$1 src=/m/4e/$1 set -x + [[ -e $src ]] || { set +x; return 1; } if [[ -L $dst ]]; then rm $dst; fi mv -T $src $dst set +x @@ -1191,6 +1261,15 @@ mkdir() { command mkdir -p "$@"; } mo() { xset dpms force off; } # monitor off +net-dev-info() { + e "lspci -nnk|gr -iA2 net" + lspci -nnk|gr -iA2 net + hr + e "s lshw -C network" + hr + s lshw -C network + +} nopanic() { sudo tee -a /var/log/exim4/paniclog-archive /dev/null; then $s systemctl $1 $2 else $s service $2 $1 fi } -serstopnm() { +# like restart, but do nothing if its not already started +srestart() { + local service=$1 + if [[ $(s systemctl --no-pager show -p ActiveState $service ) == ActiveState=active ]]; then + systemctl restart $service + fi +} +stopnm() { ser stop NetworkManager ser stop dnsmasq s resolvconf -d NetworkManager ser start dnsmasq } +startnm() { + ser start NetworkManager + s nmtui-connect +} setini() { # set a value in a .ini style file key="$1" value="$2" section="$3" file="$4" @@ -1550,6 +1665,10 @@ splay() { # script replay scriptreplay "$1.t" "$1.s" } +smeld() { # ssh meld usage host1 host2 file + meld <(ssh $1 cat $3) <(ssh $2 cat $3) +} + spd() { PATH=/usr/local/spdhackfix:$PATH command spd "$@" } @@ -1704,8 +1823,8 @@ testexim() { # adding -d, etc to COMMONOPTIONS in # /etc/default/exim4 exim -d -t <<'EOF' -From: root@gnu.org -To: ian@iankelling.org +From: ian@iankelling.org +To: root@lists0p.fsf.org Subject: Testing Exim This is a test message. @@ -1735,14 +1854,6 @@ tm() { (sleep $(calc "$@ * 60") && mpv --no-config --volume 50 /a/bin/data/alarm.mp3) > /dev/null 2>&1 & } -tpx2() { - case $HOSTNAME in - tp) target=x2 ;; - x2) target=tp ;; - esac - btrbk-run -t $target -pv && switch-mail-host $HOSTNAME $target -} - trg() { transmission-remote-gtk&r; } trc() { # example, set global upload limit to 100 kilobytes: @@ -1881,6 +1992,9 @@ vspicy() { # usage: VIRSH_DOMAIN sed -r "s/.*port='([0-9]+).*/\1/") } +wian() { + cat-new-files /m/4e/INBOX/new +} wtr() { curl wttr.in/boston; } @@ -1901,6 +2015,8 @@ xl() { xscreensaver-command -activate } +xevkb() { xev -event keyboard; } + # * misc stuff # from curl cheat.sh/:bash_completion @@ -2024,13 +2140,10 @@ if [[ $- == *i* ]]; then bind -m vi-command W:shell-forward-word fi - if [[ $SSH_CLIENT ]]; then + if [[ $SSH_CLIENT || $SUDO_USER ]]; then PS1="\h $PS1" fi - - - prompt-command() { local return=$? # this MUST COME FIRST local psc pst ps_char ps_color stale_subvol @@ -2062,6 +2175,9 @@ if [[ $- == *i* ]]; then if [[ -e /nocow/btrfs-stale ]] && ((`command ls -AUq /nocow/btrfs-stale|wc -l`)); then ps_char="! $ps_char" fi + if [[ ! $SSH_CLIENT && $MAIL_HOST != $HOSTNAME ]]; then + ps_char="@ $ps_char" + fi PS1="${PS1%"${PS1#*[wW]}"} \[$ps_color\]$ps_char\[$(get_term_color nocolor)\] " # emacs completion doesnt like the git prompt atm, so disabling it. #PS1="${PS1%"${PS1#*[wW]}"}$(__git_ps1 ' (%s)') \[$ps_color\]$ps_char\[$(get_term_color nocolor)\] " @@ -2121,12 +2237,14 @@ reset-xscreensaver() { # xscreensaver-command -demo # then finding the corresponding option in .xscreensaver # spash, i happened to notice in .xscreensaver + # + # dpmsOff, monitor doesnt come back on using old free software supported nvidia card cat > /home/iank/.xscreensaver <<'EOF' mode: blank dpmsEnabled: True dpmsStandby: 0:02:00 -dpmsSuspend: 0:02:00 -dpmsOff: 0:03:00 +dpmsSuspend: 0:03:00 +dpmsOff: 0:00:00 timeout: 0:02:00 lock: True lockTimeout: 0:03:00 @@ -2149,52 +2267,42 @@ fi unset IFS -# if someone exported $SOE, catch errors -if [[ $SOE ]]; then - errcatch -fi - # for mitmproxy to get a newer python. # commented until i want to use it because it # noticably slows bash startup # -#if [[ $EUID != 0 && -e ~/.pyenv/bin ]]; then -# export PATH="~/.pyenv/bin:$PATH" -# eval "$(pyenv init -)" -# eval "$(pyenv virtualenv-init -)" -#fi - -# id prefer to have system-wide, plus user ruby, due to bug in it -# https://github.com/rubygems/rubygems/pull/1002 -# further problems: installing multi-user ruby and user ruby, -# you dont get multi-user ruby when you sudo to root, unless its sudo -i. -# There a third hybrid form, which passenger error suggested I use, -# but it didnt actually work. - -# in cased I never need this -# rvm for non-interactive shell: modified from https://rvm.io/rvm/basics -#if [[ $(type -t rvm) == file && ! $(type -t ruby) ]]; then -# source $(rvm 1.9.3 do rvm env --path) -#fi - -# based on warning from rvmsudo -export rvmsudo_secure_path=1 - -if [[ -s "/usr/local/rvm/scripts/rvm" ]]; then - source "/usr/local/rvm/scripts/rvm" -elif [[ -s $HOME/.rvm/scripts/rvm ]]; then - source $HOME/.rvm/scripts/rvm -fi + +mypyenvinit () { + if [[ $EUID == 0 || ! -e ~/.pyenv/bin ]]; then + echo "error: dont be root. make sure pyenv is installed" + return 1 + fi + export PATH="~/.pyenv/bin:$PATH" + eval "$(pyenv init -)" + eval "$(pyenv virtualenv-init -)" +} + export GOPATH=$HOME/go path_add $GOPATH/bin +path_add /usr/local/go/bin -export ARDUINO_PATH=/a/opt/Arduino/build/linux/work +# I have the git repo and a release. either one should work. +# I have both because I was trying to solve an issue that +# turned out to be unrelated. +# ARDUINO_PATH=/a/opt/Arduino/build/linux/work +export ARDUINO_PATH=/a/opt/arduino-1.8.9 path_add --end ~/.npm-global +# taken from default changes to bashrc and bash_profile +path_add --end $HOME/.rvm/bin +[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function* + export BASEFILE_DIR=/a/bin/fai-basefiles +export ANDROID_HOME=/opt/android + # didnt get drush working, if I did, this seems like the # only good thing to include for it. # Include Drush completion.