X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=brc;h=1d6e833471c67ee4eb472a2f24957d215504aeb3;hb=77616920035e0e7c64d54b447df397822dc4370c;hp=e740a8da51db5889095452dcd71db179e710ab0c;hpb=93db0c16393fe75efef3167c1d2b332f50387c23;p=distro-setup diff --git a/brc b/brc index e740a8d..1d6e833 100644 --- a/brc +++ b/brc @@ -61,7 +61,7 @@ shopt -s cmdhist shopt -s globstar -# inside emcas fixes +# inside emacs fixes if [[ $RLC_INSIDE_EMACS ]]; then # EMACS is used by bash on startup, but we dont need it anymore. # plus I hit a bug in a makefile which inherited it @@ -96,6 +96,19 @@ if [[ $RLC_INSIDE_EMACS ]]; then fi +# emacs has a different default search path than the info command. This +# adds the info defaults to emacs, but not the reverse, because I dun +# care much about the cli. The search path is only on the cli if you run +# "info xxx", or in emacs if you run '(info xxx)', so not that +# important, but might as well fix it. + +# info info says this path is what was compiled, and its not documented +# anywhere. Through source grepping, i found it in filesys.h of the info +# source in trisquel flidas. +# +# Traling : means for emacs to add its own stuff on to the end. + +export INFOPATH=$PATH:/usr/local/info:/usr/info:/usr/local/lib/info:/usr/lib/info:/usr/local/gnu/info:/usr/local/gnu/lib/info:/usr/gnu/info:/usr/gnu/lib/info:/opt/gnu/info:/usr/share/info:/usr/share/lib/info:/usr/local/share/info:/usr/local/share/lib/info:/usr/gnu/lib/emacs/info:/usr/local/gnu/lib/emacs/info:/usr/local/lib/emacs/info:/usr/local/emacs/info:.: if [[ $- == *i* ]]; then # for readline-complete.el @@ -107,12 +120,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 @@ -153,10 +170,11 @@ 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 *:[ ]*:lom*:gram*' +HISTIGNORE='pass *:[ ]*:otp *:oathtool *' 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,8 +182,8 @@ 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 @@ -178,23 +196,29 @@ unset _x for x in /a/bin/bash_unpublished/source-!(.#*); do source $x; done source $(dirname $(readlink -f $BASH_SOURCE))/path_add-function source /a/bin/log-quiet/logq-function -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 someone exported $SOE (stop on error), catch errors. +# +# Note, on debian this results in the following warning when in ssh, +# hich I haven't figured out how to fix. It doesn't happen if we source +# after the shell has started +# +# bash: /usr/share/bashdb/bashdb-main.inc: No such file or directory +# bash: warning: cannot start debugger; debugging mode disabled if [[ $SOE ]]; then - err-catch + if [[ -e /a/bin/errhandle/err ]]; then + source /a/bin/errhandle/err + fi fi path_add /a/exe -# end just because it seems safer -path_add --end node_modules/.bin +# 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 @@ -312,7 +336,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 @@ -328,6 +352,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 @@ -342,9 +383,20 @@ b() { bbk() { c / + local active=true + systemctl is-active btrbk.timer || active=false + if $active; then + ser disable btrbk.timer + fi + if systemctl is-active btrbk.service; then + $active && ser enable btrbk.timer + echo "cron btrbk is already running" + return 1 + fi # run latest install-my-scripts btrbk-run "$@" + $active && ser enable btrbk.timer } bfg() { java -jar /a/opt/bfg-1.12.14.jar "$@"; } @@ -354,11 +406,20 @@ bigclock() { } bpull() { + [[ $1 ]] || return 1 c / # run latest install-my-scripts - switch-mail-host $1 $HOSTNAMEs + 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 @@ -567,6 +628,12 @@ dus() { # du, sorted, default arg of e() { echo "$@"; } +# echo var. print var including escapes, etc +ev() { + printf "%qEOL\n" "${!1}" + printf "%s" "${!1}" |& hexdump -C +} + ediff() { [[ ${#@} == 2 ]] || { echo "error: ediff requires 2 arguments"; return 1; } @@ -585,7 +652,10 @@ envload() { # load environment from a previous: export > file # mail related etail() { - sudo tail -f /var/log/exim4/mainlog + tail -F /var/log/exim4/mainlog -n 200 +} +eless() { + less /var/log/exim4/mainlog } f() { @@ -605,7 +675,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 @@ -687,7 +757,7 @@ fdup() { local p fdroidcl update if fdroidcl search -u | grep ^org.fdroid.fdroid; then - fdroidcl upgrade org.fdroid.fdroid + fdroidcl install org.fdroid.fdroid sleep 5 fdroidcl update fi @@ -706,7 +776,7 @@ fdup() { done for p in ${!installed[@]}; do if ! ${updated[$p]:-true}; then - fdroidcl upgrade $p + fdroidcl install $p sleep 5 fi done @@ -924,7 +994,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 "$@" } @@ -939,6 +1013,9 @@ grr() { # grep recursive grep --exclude-dir='*.emacs.d' --exclude-dir='*.git' -RiIP --color=auto "$@" fi } +rg() { + command rg -i -M 200 "$@" +} hstatus() { # do git status on published repos @@ -1050,30 +1127,14 @@ 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 "$@" - else - xdg-open "$@" - fi - # another alternative is run-mailcap - } -fi +o() { + if type gvfs-open &> /dev/null ; then + gvfs-open "$@" + else + xdg-open "$@" + fi + # another alternative is run-mailcap +} ipdrop() { s iptables -A INPUT -s $1 -j DROP @@ -1240,6 +1301,20 @@ net-dev-info() { } +nk() { + ser stop NetworkManager + ser stop dnsmasq + s resolvconf -d NetworkManager + ser start dnsmasq + s ifup br0 +} +ngo() { + s ifdown br0 + ser start NetworkManager + sleep 4 + s nmtui-connect +} + nopanic() { sudo tee -a /var/log/exim4/paniclog-archive /dev/null + history -a # save history + exit "$@" + # i had this redir, not sure why +# exit "$@" 2>/dev/null } rbpipe() { rbt post -o --diff-filename=- "$@"; } rbp() { rbt post -o "$@"; } +rebr() { + s ifdown br0 + s ifup br0 +} + +resolvcat() { + local f + f=/etc/resolv.conf + echo $f:; ccat $f + hr; echo dnsmasq is $(systemctl is-active dnsmasq) + f=/var/run/dnsmasq/resolv.conf + hr; echo $f:; ccat $f + f=/etc/dnsmasq-servers.conf + hr; echo $f:; ccat $f +} + rl() { # rsync, root is required to keep permissions right. # rsync --archive --human-readable --verbose --itemize-changes --checksum \(-ahvic\) \ @@ -1498,12 +1606,6 @@ srestart() { systemctl restart $service fi } -serstopnm() { - ser stop NetworkManager - ser stop dnsmasq - s resolvconf -d NetworkManager - ser start dnsmasq -} setini() { # set a value in a .ini style file key="$1" value="$2" section="$3" file="$4" @@ -1605,7 +1707,7 @@ splay() { # script replay scriptreplay "$1.t" "$1.s" } -smeld() { # usage host1 host2 file +smeld() { # ssh meld usage host1 host2 file meld <(ssh $1 cat $3) <(ssh $2 cat $3) } @@ -1636,6 +1738,9 @@ srun() { ssh $1 /tmp/${2##*/} "${@:2}" } +ssh() { + BASH_LOGIN_SHELL=true command ssh "$@" +} sss() { # ssh solo ssh -oControlMaster=no -oControlPath=/ "$@" } @@ -1729,9 +1834,8 @@ testmail() { # MSG_ID is in /var/log/exim4/mainlog, looks like 1ccdnD-0001nh-EN } -# to test sieve, use below command. for fsf mail, see fsf-get-mail script. +# to test sieve, use below command. for fsf mail, see offlineimap-sync script # make modifications, then copy to live file, use -eW to actually modify mailbox -# cp /p/c/subdir_files/sieve/personal{test,}.sieve; testsievelist -eW INBOX # # Another option is to use sieve-test SCRIPT MAIL_FILE. note, # sieve-test doesnt know about envelopes, Im not sure if sieve-filter does. @@ -1739,15 +1843,17 @@ testmail() { # sieve with output filter. arg is mailbox, like INBOX. # This depends on dovecot conf, notably mail_location in /etc/dovecot/conf.d/10-mail.conf -testsievelist() { - sieve-filter ~/sieve/maintest.sieve "$@" >/tmp/testsieve.log 2> >(tail) && sed -rn '/^Performed actions:/{n;n;p}' /tmp/testsieve.log | sort -u +_dosieve() { + sieve-filter "$@" 2> >(head; tail) >/tmp/testsieve.log && sed -rn '/^Performed actions:/,/^[^ ]/{/^ /p}' /tmp/testsieve.log | sort | uniq -c } - -# mail related -# plain sieve +# always run this first, edit the test files, then run the following testsieve() { - sieve-filter ~/sieve/main.sieve "$@" + _dosieve ~/sieve/maintest.sieve ${1:-INBOX} delete +} +runsieve() { + c ~/sieve; cp personal{test,}.sieve; cp lists{test,}.sieve; cp personalend{test,}.sieve + _dosieve ~/sieve/main.sieve -eW ${1:-INBOX} delete } # mail related @@ -1848,7 +1954,6 @@ psnetns() { m() { printf "%s\n" "$*"; "$@"; } - vpncmd() { #m s nsenter -t $(pgrep -f "/usr/sbin/openvpn .* --config /etc/openvpn/.*pia.conf") -n -m "$@" m s nsenter -t $(pgrep -f "/usr/sbin/openvpn .* --config /etc/openvpn/.*client.conf") -n -m "$@" @@ -1938,22 +2043,7 @@ wian() { wtr() { curl wttr.in/boston; } -xl() { - if pgrep gnome-screensav &>/dev/null; then - # this command actually starts gnome-screensaver if it isn\'t running. - # lololol, what crap - gnome-screensaver-command --exit &>/dev/null - fi - mate-screensaver-command --exit &>/dev/null - if ! pidof xscreensaver; then - pushd / - xscreensaver & - popd - # 1 was not long enough - sleep 3 - fi - xscreensaver-command -activate -} +xevkb() { xev -event keyboard; } # * misc stuff @@ -2002,44 +2092,16 @@ match_lhs="" if ${use_color} && [[ $- == *i* ]]; then - if [[ $XTERM_VERSION == Cygwin* ]]; then - get_term_color() { - for x in "$@"; do - case $x in - underl) echo -n $'\E[4m' ;; - bold) echo -n $'\E[1m' ;; - red) echo -n $'\E[31m' ;; - green) echo -n $'\E[32m' ;; - blue) echo -n $'\E[34m' ;; - cyan) echo -n $'\E[36m' ;; - yellow) echo -n $'\E[33m' ;; - purple) echo -n $'\E[35m' ;; - nocolor) echo -n $'\E(B\E[m' ;; - esac - done - } + term_underl="$(tput smul)" + term_bold="$(tput bold)" + term_red="$(tput setaf 1)" + term_green="$(tput setaf 2)" + term_blue="$(tput setaf 4)" + term_cyan="$(tput setaf 6)" + term_yellow="$(tput setaf 3)" + term_purple="$(tput setaf 5)" + term_nocolor="$(tput sgr0)" # no font attributes - else - get_term_color() { - for x in "$@"; do - case $x in - underl) echo -n $(tput smul) ;; - bold) echo -n $(tput bold) ;; - red) echo -n $(tput setaf 1) ;; - green) echo -n $(tput setaf 2) ;; - blue) echo -n $(tput setaf 4) ;; - cyan) echo -n $(tput setaf 6) ;; - yellow) echo -n $(tput setaf 3) ;; - purple) echo -n $(tput setaf 5) ;; - nocolor) echo -n $(tput sgr0) ;; # no font attributes - esac - done - } - fi -else - get_term_color() { - : - } fi # Try to keep environment pollution down, EPA loves us. unset safe_term match_lhs use_color @@ -2078,47 +2140,43 @@ 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 - - - + # emacs terminal has problems if this runs slowly, + # so I've thrown a bunch of things at the wall to speed it up. prompt-command() { local return=$? # this MUST COME FIRST local psc pst ps_char ps_color stale_subvol unset IFS history -a # save history - - case $return in - 0) ps_color="$(get_term_color blue)" + 0) ps_color="$term_purple" ps_char='\$' ;; - 1) ps_color="$(get_term_color green)" + 1) ps_color="$term_green" ps_char="$return \\$" ;; - *) ps_color="$(get_term_color yellow)" + *) ps_color="$term_yellow" ps_char="$return \\$" ;; esac if [[ ! -O . ]]; then # not owner if [[ -w . ]]; then # writable - ps_color="$(get_term_color bold red)" + ps_color="$term_bold$term_red" else - ps_color="$(get_term_color bold green)" + ps_color="$term_bold$term_green" fi fi - # I would set nullglob, but bash has had bugs where that - # doesnt work if not in top level. - if [[ -e /nocow/btrfs-stale ]] && ((`command ls -AUq /nocow/btrfs-stale|wc -l`)); then - ps_char="! $ps_char" + + # faster than sourceing the file im guessing + eval $(< /dev/shm/iank-status) + 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)\] " + PS1="${PS1%"${PS1#*[wW]}"} \[$ps_color\]$ps_char\[$term_nocolor\] " } PROMPT_COMMAND=prompt-command @@ -2209,22 +2267,34 @@ unset IFS # 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 +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 +# They want to be added to the start, but i think +# that should be avoided unless we really need it. path_add --end ~/.npm-global +path_add --end $HOME/.cargo/bin + # 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*