diff options
author | EuAndreh <eu@euandre.org> | 2022-05-12 12:01:54 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2022-05-12 12:01:54 -0300 |
commit | 90eaebabcaaea74237f34cf05709625345f276cc (patch) | |
tree | 349e7609d20ecfb6567652a7e28595cec9647eb0 /etc/bash | |
parent | .usr/etc/i3/config: WIP setup extra bindings (diff) | |
download | dotfiles-90eaebabcaaea74237f34cf05709625345f276cc.tar.gz dotfiles-90eaebabcaaea74237f34cf05709625345f276cc.tar.xz |
Move Git repository into ~/.usr/.git/
Diffstat (limited to 'etc/bash')
-rwxr-xr-x | etc/bash/check.sh | 57 | ||||
-rw-r--r-- | etc/bash/inputrc | 2 | ||||
l--------- | etc/bash/privrc.sh | 1 | ||||
-rw-r--r-- | etc/bash/vcs-ps1.sh | 158 |
4 files changed, 218 insertions, 0 deletions
diff --git a/etc/bash/check.sh b/etc/bash/check.sh new file mode 100755 index 0000000..7c12dec --- /dev/null +++ b/etc/bash/check.sh @@ -0,0 +1,57 @@ +#!/bin/sh +set -eu + +usage() { + cat <<-'EOF' + Usage: + check.sh + check.sh -h + EOF +} + +help() { + cat <<-'EOF' + + Options: + -h, --help show this message + EOF +} + +for flag in "$@"; do + case "$flag" in + --) + break + ;; + --help) + usage + help + exit + ;; + *) + ;; + esac +done + +while getopts 'h' flag; do + case "$flag" in + h) + usage + help + exit + ;; + *) + usage >&2 + exit 2 + ;; + esac +done +shift $((OPTIND - 1)) + + +shellcheck -xe 1090,1091 \ + "$XDG_CONFIG_HOME"/bash/rc \ + "$XDG_CONFIG_HOME"/bash/vcs-ps1.sh \ + "$XDG_CONFIG_HOME"/bash/check.sh \ + "$XDG_CONFIG_HOME"/bash/privrc.sh + +sh -eu ~/.profile diff --git a/etc/bash/inputrc b/etc/bash/inputrc new file mode 100644 index 0000000..f5c7095 --- /dev/null +++ b/etc/bash/inputrc @@ -0,0 +1,2 @@ +"\e[B": history-search-forward +"\e[A": history-search-backward diff --git a/etc/bash/privrc.sh b/etc/bash/privrc.sh new file mode 120000 index 0000000..243a4bd --- /dev/null +++ b/etc/bash/privrc.sh @@ -0,0 +1 @@ +/home/andreh/dev/private/dotfiles/privrc.sh
\ No newline at end of file diff --git a/etc/bash/vcs-ps1.sh b/etc/bash/vcs-ps1.sh new file mode 100644 index 0000000..f2103da --- /dev/null +++ b/etc/bash/vcs-ps1.sh @@ -0,0 +1,158 @@ +#!/bin/sh + +repo_status_git() { + BRANCH_NAME="$(git rev-parse --abbrev-ref HEAD)" + OUT="$(git status --short --branch --porcelain)" + BRANCH_LINE="$(echo "$OUT" | head -n 1)" + DIFF_LINES="$(echo "$OUT" | tail -n +2)" + + IS_AHEAD=false + IS_BEHIND=false + if echo "$BRANCH_LINE" | grep -q 'ahead'; then + IS_AHEAD=true + fi + if echo "$BRANCH_LINE" | grep -q 'behind'; then + IS_BEHIND=true + fi + + LINE='' + + if [ "$IS_AHEAD" = true ] && [ "$IS_BEHIND" = true ]; then + LINE="^^^ $BRANCH_NAME vvv" + elif [ "$IS_AHEAD" = true ]; then + LINE="^ $BRANCH_NAME ^" + elif [ "$IS_BEHIND" = true ]; then + LINE="v $BRANCH_NAME v" + else + LINE="$BRANCH_NAME" + fi + + HAS_DIFF=false + HAS_UNTRACKED=false + if echo "$DIFF_LINES" | grep -q '^[A|D|M| ][M|D| ]'; then + HAS_DIFF=true + fi + if echo "$DIFF_LINES" | grep -q '^[?][?]'; then + HAS_UNTRACKED=true + fi + + if [ "$HAS_DIFF" = true ]; then + COLOR_FN=redb + LINE="{$LINE}" + elif [ "$IS_AHEAD" = true ] || [ "$IS_BEHIND" = true ]; then + COLOR_FN=bluei + LINE="[$LINE]" + elif [ "$HAS_UNTRACKED" = true ]; then + COLOR_FN=lightblue + LINE="{$LINE}" + else + COLOR_FN=green + LINE="($LINE)" + fi + + color -c "$COLOR_FN" "$LINE" + + BRANCH_COUNT="$(git branch --list | wc -l)" + if [ "$BRANCH_COUNT" -gt 1 ]; then + color -c lightblue "<$BRANCH_COUNT>" + fi + + STASH_COUNT="$(git stash list | wc -l)" + if [ "$STASH_COUNT" != 0 ]; then + color -c red "*$STASH_COUNT" + fi + + color -c blacki " - git/$(git rev-parse HEAD)" +} + +repo_status_fossil() { + BRANCH_NAME="$(fossil branch current)" + + if [ -n "$(fossil extras)" ]; then + HAS_UNTRACKED=1 + fi + + BRANCH_MARKER="$BRANCH_NAME" + + if [ -n "${HAS_UNTRACKED:-}" ]; then + COLOR_FN=lightblue + LINE="($BRANCH_MARKER)" + else + COLOR_FN=green + LINE="($BRANCH_MARKER)" + fi + + color -c "$COLOR_FN" "$LINE" + + color -c blacki " - fossil/$(fossil info | awk '/^checkout:/ { print $2 }')" +} + +repo_status_mercurial() { + BRANCH_NAME="$(hg branch)" +} + +repo_status() { + dir="$(basename "$PWD")" + if [ -d .git ]; then + repo_status_git + elif [ -f "$dir.fossil" ]; then + repo_status_fossil + elif [ -d .hg ]; then + repo_status_mercurial + fi +} + + +error_marker() { + STATUS=$? + if [ "$STATUS" != 0 ]; then + color -c redb " (!! $STATUS !!) " + fi +} + +timestamp() { + color -c blacki '\T' +} + +path() { + color -c yellowb '\w/' +} + +guix_env() { + if [ "$GUIX_ENVIRONMENT" != '' ]; then + printf '\n' + color -c blacki '~> ' + color -c purple 'guix environment ' + printf '(' + color -c blueb "$GUIX_ENVIRONMENT" + printf ')' + fi +} + +in_nix_shell() { + if [ "$IN_NIX_SHELL" != '' ]; then + printf '\n' + color -c blacki '~> ' + color -c purpleb "$IN_NIX_SHELL " + color -c purple 'nix-shell ' + printf '(' + color -c blueb "${name:-}" + printf ')' + fi +} + +PS1='`error_marker`'$(timestamp)' '$(path)' `repo_status``guix_env``in_nix_shell` +$ ' + + +vcs_status() { + git status "$@" +} + +vcs_diff() { + git diff "$@" +} + +vcs_diff_staged() { + git diff --staged "$@" +} |