From a55cffa8b3cbc02e2b021ed25e67203d337c36bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Sun, 12 Aug 2018 18:37:31 +0200 Subject: Move some definitions around and add --desktop option --- install | 17 ++++-- shellrc.d-desktop/desktop | 49 ++++++++++++++++++ shellrc.d-desktop/xorg | 34 ++++++++++++ shellrc.d/alias | 24 +++++++++ shellrc.d/common | 129 ---------------------------------------------- shellrc.d/desktop | 49 ------------------ shellrc.d/function | 66 ++++++++++++++++++++++++ shellrc.d/git | 29 +++++++++++ shellrc.d/less | 10 ++++ shellrc.d/xorg | 34 ------------ 10 files changed, 226 insertions(+), 215 deletions(-) create mode 100644 shellrc.d-desktop/desktop create mode 100644 shellrc.d-desktop/xorg create mode 100644 shellrc.d/alias delete mode 100644 shellrc.d/common delete mode 100644 shellrc.d/desktop create mode 100644 shellrc.d/function create mode 100644 shellrc.d/git create mode 100644 shellrc.d/less delete mode 100644 shellrc.d/xorg diff --git a/install b/install index 55d3cfd..422eaf0 100755 --- a/install +++ b/install @@ -6,6 +6,7 @@ I_PREFIX=/ U_BASE=true U_BASH=false U_ZSH=false +U_DESKTOP=false while [ $# -gt 0 ]; do case "$1" in @@ -15,12 +16,14 @@ while [ $# -gt 0 ]; do echo "Options:" echo " -h, --help" echo " Print this help text." + echo " -d, --desktop" + echo " Install desktop specific configuration extensions for shellrc" echo " -b, --bash" echo " Install bash configuration" echo " -z, --zsh" echo " Install zsh configuration" echo " --no-base" - echo " Do not install base only bash or zsh is installed" + echo " Do not install base only bash or zsh or desktop is installed" echo " --prefix PATH" echo " Install prefix (in default set to /)" exit 0 @@ -34,6 +37,9 @@ while [ $# -gt 0 ]; do --no-base) U_BASE=false ;; + -d|--desktop) + U_DESKTOP=true + ;; --prefix) shift I_PREFIX="$1" @@ -48,8 +54,13 @@ done # Install shellrc if $U_BASE; then - mkdir -p "$I_PREFIX/etc" - cp -r shellrc.d "$I_PREFIX/etc/shellrc.d" + mkdir -p "$I_PREFIX/etc/shellrc.d" + cp -r shellrc.d/. "$I_PREFIX/etc/shellrc.d" +fi + +if $U_DESKTOP; then + mkdir -p "$I_PREFIX/etc/shellrc.d" + cp -r shellrc.d-desktop/. "$I_PREFIX/etc/shellrc.d" fi if $U_BASH; then diff --git a/shellrc.d-desktop/desktop b/shellrc.d-desktop/desktop new file mode 100644 index 0000000..52ca258 --- /dev/null +++ b/shellrc.d-desktop/desktop @@ -0,0 +1,49 @@ +# vim: ft=sh: +# This is handy only on desktop and is useless on server + +alias mutt='neomutt' +alias sdcv='sdcv -c' + +# Following section is applicable for any desktop but only for graphics########## +# TODO add check for wayland +[ -z "$DISPLAY" ] && return + +alias feh='feh --magick-timeout 10 -.' + + +# This function should not be called externaly +# It expects PID of surf instace as first argument and all other arguments should +# be command to be called before kill is sent. +__insurf_callback() { + local SPID=$1 + shift + "$@" + echo kill $SPID SIGHUP + kill -s SIGHUP $SPID || exit 1 +} + +# Same as inrun but it opens first argument it founds in surf and then reloads +# that instance automatically. +insurf() { + ( + set -e + # Run surf + surf "$1" & + local SPID=$! + trap "kill $SPID; trap '' EXIT; exit 0" EXIT INT QUIT TERM ABRT + # Insert our callback + local ISFIRST=true + for ARG in "$@"; do + if $ISFIRST; then + shift $# + ISFIRST=false + fi + set "$@" "$ARG" + if [ "$ARG" = "--" ]; then + set "$@" "__insurf_callback" "$SPID" + fi + done + # Run inrun + inrun "$@" + ) +} diff --git a/shellrc.d-desktop/xorg b/shellrc.d-desktop/xorg new file mode 100644 index 0000000..be9ef69 --- /dev/null +++ b/shellrc.d-desktop/xorg @@ -0,0 +1,34 @@ +# vim: ft=sh: +# These are utility functions loaded when we are running in Xserver + +[ -z "$DISPLAY" ] && return # Ignore if there is no display set + +alias i='i3-msg' + + +# Clip stdin to clipboard +clip() { + # Note: printf as magic to remove trailing new lines + printf %s "$(cat)" | xclip -selection clipboard +} + +# Clip current HEAD hash to clipboard +# Optionally you can pass commit as argument +gitclip() { + [ -n "$1" ] && local CMT="$1" || local CMT=HEAD + git rev-parse "$CMT"| clip +} +# Clip current head message to clipboard +# Optionally you can pass commit as argument +gitmclip() { + [ -n "$1" ] && local CMT="$1" || local CMT=HEAD + git log --format=%B -n 1 "$CMT" | clip +} + +# Make screenshot +xshot() { + import ~/xshot_$(date +%F_%H%M%S_%N).png +} +xshot-screen() { + import -screen ~/xshot_$(date +%F_%H%M%S_%N).png +} diff --git a/shellrc.d/alias b/shellrc.d/alias new file mode 100644 index 0000000..78dcafe --- /dev/null +++ b/shellrc.d/alias @@ -0,0 +1,24 @@ +# vim: ft=sh: +alias ls='ls --color=auto' +eval $(dircolors -b) +alias ll='ls -lh' +alias df='df -h' +alias du='du -h' +alias grep='grep --color=auto' +alias ip='ip -c' +alias git='LANG=en_GB git' +alias gdb='gdb -q' +alias cgdb='cgdb -q' +alias octave='octave-cli -q' +alias ssh='TERM="xterm-256color" ssh' +alias gst='git status' +alias v='vim' +alias watch='watch -n 1 -c -t -d' + +# Systemd aliases if we are running systemd +if pidof systemd >/dev/null 2>/dev/null; then + alias sctl='sudo systemctl' + alias usctl='systemctl --user' + alias jrn='journalctl' + alias ujrn='jrn --user' +fi diff --git a/shellrc.d/common b/shellrc.d/common deleted file mode 100644 index 8a30f3b..0000000 --- a/shellrc.d/common +++ /dev/null @@ -1,129 +0,0 @@ -# vim: ft=sh: - -alias ls='ls --color=auto' -eval $(dircolors -b) -alias ll='ls -lh' -alias df='df -h' -alias du='du -h' -alias grep='grep --color=auto' -alias ip='ip -c' -alias git='LANG=en_GB git' -alias gdb='gdb -q' -alias cgdb='cgdb -q' -alias octave='octave-cli -q' -alias ssh='TERM="xterm-256color" ssh' -alias gst='git status' -alias v='vim' -alias watch='watch -n 1 -c -t -d' - -export LESS=-R -export LESS_TERMCAP_mb=$'\E[1;31m' -export LESS_TERMCAP_md=$'\E[1;36m' -export LESS_TERMCAP_me=$'\E[0m' -export LESS_TERMCAP_se=$'\E[0m' -export LESS_TERMCAP_so=$'\E[01;44;33m' -export LESS_TERMCAP_ue=$'\E[0m' -export LESS_TERMCAP_us=$'\E[1;32m' -[ -x /usr/bin/src-hilite-lesspipe.sh ] && export LESSOPEN="| /usr/bin/src-hilite-lesspipe.sh %s" - -# Systemd aliases if we are running systemd -if pidof systemd >/dev/null 2>/dev/null; then - alias sctl='sudo systemctl' - alias usctl='systemctl --user' - alias jrn='journalctl' - alias ujrn='jrn --user' -fi - - -# Run process in background -tobg() { - "$@" >/dev/null 2>&1 & -} - -# Generate random password (optionally takes length of password as first argument) -genpasswd() { - local l=$1 - [ -n "$l" ] || l=16 - tr -dc A-Za-z0-9_ < /dev/urandom | head -c "$l" | xargs -} - -# Generate random hex number of given lenght -genhex() { - if [ -z "$1" ]; then - echo "Size is required as first argument!" >&2 - return 1 - fi - tr -dc 0-9A-F < /dev/urandom | head -c "$1" | xargs -} - -# Automatic branch merger (merge branch, push it to server and remove branch) -# Expects name of the branch as argument -# It fails if it's not fast forward merge and if there is fixup! commit. -gitbmerge() { - ( - set -e - if [ -n "$(git log --grep="^fixup\!" HEAD.."$1")" ]; then - echo "First squash fixups!" - exit 1 - fi - local WT="$(git worktree list | sed -nE "/\[$1\]/{s/([^ ]+) .*/\1/p}")" - if [ -n "$WT" ]; then - rm -r "$WT" - git worktree prune - fi - git merge --ff-only "$1" && git push && git branch -d "$1" && git push origin :"$1" - ) -} - -# Create new branch from HEAD -gitbnew() { - git branch "$1" HEAD - local NW="$(git rev-parse --show-toplevel)-$1" - git worktree add "$NW" $1 - cd "$NW" - git submodule update --init --recursive -} - -# Run given command every second -dorepeat() { - while true; do - "$@" - sleep 1 - echo - done -} - -# Clear all ssh control masters -ssh-clear() { - rm -rf ~/.cache/ssh - mkdir -p ~/.cache/ssh -} - -# Chroot to bash to given path -chroot-bash() { - sudo chroot "$1" /bin/bash -} - -# Run command with inotifywait -# First argument has to be files then -- is expected and everything else -# is command to be executed when file changes. -inrun () { - ( - set -e - local TMPFS="$(mktemp --tmpdir inrun.XXXXXXXX)" - trap "rm '$TMPFS'; trap '' EXIT; exit 0" EXIT INT QUIT TERM ABRT - while [ $# -gt 0 -a "$1" != "--" ]; do - echo "$1" >> "$TMPFS" - shift - done - if [ $# -le 1 ]; then - echo "Usage: inrun FILE.. -- COMMAND" - return 1 - fi - shift - while true; do - inotifywait -qe close_write --fromfile "$TMPFS" || true - "$@" || true - done - ) -} diff --git a/shellrc.d/desktop b/shellrc.d/desktop deleted file mode 100644 index 52ca258..0000000 --- a/shellrc.d/desktop +++ /dev/null @@ -1,49 +0,0 @@ -# vim: ft=sh: -# This is handy only on desktop and is useless on server - -alias mutt='neomutt' -alias sdcv='sdcv -c' - -# Following section is applicable for any desktop but only for graphics########## -# TODO add check for wayland -[ -z "$DISPLAY" ] && return - -alias feh='feh --magick-timeout 10 -.' - - -# This function should not be called externaly -# It expects PID of surf instace as first argument and all other arguments should -# be command to be called before kill is sent. -__insurf_callback() { - local SPID=$1 - shift - "$@" - echo kill $SPID SIGHUP - kill -s SIGHUP $SPID || exit 1 -} - -# Same as inrun but it opens first argument it founds in surf and then reloads -# that instance automatically. -insurf() { - ( - set -e - # Run surf - surf "$1" & - local SPID=$! - trap "kill $SPID; trap '' EXIT; exit 0" EXIT INT QUIT TERM ABRT - # Insert our callback - local ISFIRST=true - for ARG in "$@"; do - if $ISFIRST; then - shift $# - ISFIRST=false - fi - set "$@" "$ARG" - if [ "$ARG" = "--" ]; then - set "$@" "__insurf_callback" "$SPID" - fi - done - # Run inrun - inrun "$@" - ) -} diff --git a/shellrc.d/function b/shellrc.d/function new file mode 100644 index 0000000..56e648a --- /dev/null +++ b/shellrc.d/function @@ -0,0 +1,66 @@ +# vim: ft=sh: + +# Run process in background +tobg() { + "$@" >/dev/null 2>&1 & +} + +# Generate random password (optionally takes length of password as first argument) +genpasswd() { + local l=$1 + [ -n "$l" ] || l=16 + tr -dc A-Za-z0-9_ < /dev/urandom | head -c "$l" | xargs +} + +# Generate random hex number of given lenght +genhex() { + if [ -z "$1" ]; then + echo "Size is required as first argument!" >&2 + return 1 + fi + tr -dc 0-9A-F < /dev/urandom | head -c "$1" | xargs +} + +# Run given command every second +dorepeat() { + while true; do + "$@" + sleep 1 + echo + done +} + +# Clear all ssh control masters +ssh-clear() { + rm -rf ~/.cache/ssh + mkdir -p ~/.cache/ssh +} + +# Chroot to bash to given path +chroot-bash() { + sudo chroot "$1" /bin/bash +} + +# Run command with inotifywait +# First argument has to be files then -- is expected and everything else +# is command to be executed when file changes. +inrun () { + ( + set -e + local TMPFS="$(mktemp --tmpdir inrun.XXXXXXXX)" + trap "rm '$TMPFS'; trap '' EXIT; exit 0" EXIT INT QUIT TERM ABRT + while [ $# -gt 0 -a "$1" != "--" ]; do + echo "$1" >> "$TMPFS" + shift + done + if [ $# -le 1 ]; then + echo "Usage: inrun FILE.. -- COMMAND" + return 1 + fi + shift + while true; do + inotifywait -qe close_write --fromfile "$TMPFS" || true + "$@" || true + done + ) +} diff --git a/shellrc.d/git b/shellrc.d/git new file mode 100644 index 0000000..47edae5 --- /dev/null +++ b/shellrc.d/git @@ -0,0 +1,29 @@ +# vim: ft=sh: + +# Automatic branch merger (merge branch, push it to server and remove branch) +# Expects name of the branch as argument +# It fails if it's not fast forward merge and if there is fixup! commit. +gitbmerge() { + ( + set -e + if [ -n "$(git log --grep="^fixup\!" HEAD.."$1")" ]; then + echo "First squash fixups!" + exit 1 + fi + local WT="$(git worktree list | sed -nE "/\[$1\]/{s/([^ ]+) .*/\1/p}")" + if [ -n "$WT" ]; then + rm -r "$WT" + git worktree prune + fi + git merge --ff-only "$1" && git push && git branch -d "$1" && git push origin :"$1" + ) +} + +# Create new branch from HEAD +gitbnew() { + git branch "$1" HEAD + local NW="$(git rev-parse --show-toplevel)-$1" + git worktree add "$NW" $1 + cd "$NW" + git submodule update --init --recursive +} diff --git a/shellrc.d/less b/shellrc.d/less new file mode 100644 index 0000000..d2490a5 --- /dev/null +++ b/shellrc.d/less @@ -0,0 +1,10 @@ +# vim: ft=sh: +export LESS=-R +export LESS_TERMCAP_mb=$'\E[1;31m' +export LESS_TERMCAP_md=$'\E[1;36m' +export LESS_TERMCAP_me=$'\E[0m' +export LESS_TERMCAP_se=$'\E[0m' +export LESS_TERMCAP_so=$'\E[01;44;33m' +export LESS_TERMCAP_ue=$'\E[0m' +export LESS_TERMCAP_us=$'\E[1;32m' +[ -x /usr/bin/src-hilite-lesspipe.sh ] && export LESSOPEN="| /usr/bin/src-hilite-lesspipe.sh %s" diff --git a/shellrc.d/xorg b/shellrc.d/xorg deleted file mode 100644 index be9ef69..0000000 --- a/shellrc.d/xorg +++ /dev/null @@ -1,34 +0,0 @@ -# vim: ft=sh: -# These are utility functions loaded when we are running in Xserver - -[ -z "$DISPLAY" ] && return # Ignore if there is no display set - -alias i='i3-msg' - - -# Clip stdin to clipboard -clip() { - # Note: printf as magic to remove trailing new lines - printf %s "$(cat)" | xclip -selection clipboard -} - -# Clip current HEAD hash to clipboard -# Optionally you can pass commit as argument -gitclip() { - [ -n "$1" ] && local CMT="$1" || local CMT=HEAD - git rev-parse "$CMT"| clip -} -# Clip current head message to clipboard -# Optionally you can pass commit as argument -gitmclip() { - [ -n "$1" ] && local CMT="$1" || local CMT=HEAD - git log --format=%B -n 1 "$CMT" | clip -} - -# Make screenshot -xshot() { - import ~/xshot_$(date +%F_%H%M%S_%N).png -} -xshot-screen() { - import -screen ~/xshot_$(date +%F_%H%M%S_%N).png -} -- cgit v1.2.3