aboutsummaryrefslogtreecommitdiff
path: root/etc/bash
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2022-05-12 12:01:54 -0300
committerEuAndreh <eu@euandre.org>2022-05-12 12:01:54 -0300
commit90eaebabcaaea74237f34cf05709625345f276cc (patch)
tree349e7609d20ecfb6567652a7e28595cec9647eb0 /etc/bash
parent.usr/etc/i3/config: WIP setup extra bindings (diff)
downloaddotfiles-90eaebabcaaea74237f34cf05709625345f276cc.tar.gz
dotfiles-90eaebabcaaea74237f34cf05709625345f276cc.tar.xz
Move Git repository into ~/.usr/.git/
Diffstat (limited to 'etc/bash')
-rwxr-xr-xetc/bash/check.sh57
-rw-r--r--etc/bash/inputrc2
l---------etc/bash/privrc.sh1
-rw-r--r--etc/bash/vcs-ps1.sh158
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 "$@"
+}