Executing dtach-router broke its return-based interactive guard and errored on /dev/tty in non-interactive login shells (bash -lc, cron, scp). It is now sourced via a guarded, idempotent ~/.profile block (case $- in *i*) ... . dtach-router) installed by wire_dtach_profile(), which migrates the old execute-based block. Also adds cc (create) and d (re-summon) aliases to bashrc-linux. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CN1KSmsuLG6TxSeN5m8xvM
122 lines
3.8 KiB
Plaintext
122 lines
3.8 KiB
Plaintext
## Enable color support of ls and also add handy aliases
|
|
# Some colors
|
|
alias ls='ls --color=auto'
|
|
alias grep='grep --color=auto'
|
|
|
|
## Some export
|
|
# colored GCC warnings and errors
|
|
export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
|
|
|
|
# Ensure ~/.local/bin is on PATH (pipx CLIs + personal scripts from bin/)
|
|
case ":$PATH:" in
|
|
*":$HOME/.local/bin:"*) ;;
|
|
*) export PATH="$HOME/.local/bin:$PATH" ;;
|
|
esac
|
|
|
|
# Set history size to unlimited
|
|
if [[ $EUID == 0 ]] ; then
|
|
export HISTSIZE=0
|
|
export HISTFILESIZE=0
|
|
else
|
|
export HISTSIZE=-1
|
|
export HISTFILESIZE=-1
|
|
fi
|
|
|
|
#export LANG=en_US.UTF-8
|
|
|
|
|
|
# Used for vim header
|
|
export VIUSER=bchanot
|
|
export VIMAIL=bchanot@gmail.fr
|
|
|
|
## Activate and custom bash completion
|
|
#bind 'TAB:menu-complete'
|
|
#bind 'set show-all-if-ambiguous on'
|
|
|
|
## Setting prompt style
|
|
# Get current branch in git repo
|
|
function parse_git_branch() {
|
|
BRANCH=`git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
|
|
if [ ! "${BRANCH}" == "" ]
|
|
then
|
|
STAT=`parse_git_dirty`
|
|
echo " [${BRANCH}${STAT}]"
|
|
else
|
|
echo ""
|
|
fi
|
|
}
|
|
function timer_now {
|
|
date +%s%N
|
|
}
|
|
|
|
function timer_start {
|
|
timer_start=${timer_start:-$(timer_now)}
|
|
}
|
|
|
|
function timer_stop {
|
|
local delta_us=$((($(timer_now) - $timer_start) / 1000))
|
|
local us=$((delta_us % 1000))
|
|
local ms=$(((delta_us / 1000) % 1000))
|
|
local s=$(((delta_us / 1000000) % 60))
|
|
local m=$(((delta_us / 60000000) % 60))
|
|
local h=$((delta_us / 3600000000))
|
|
# Goal: always show around 3 digits of accuracy
|
|
if ((h > 0)); then timer_show=${h}h${m}m
|
|
elif ((m > 0)); then timer_show=${m}m${s}s
|
|
elif ((s >= 10)); then timer_show=${s}.$((ms / 100))s
|
|
elif ((s > 0)); then timer_show=${s}.$(printf %03d $ms)s
|
|
elif ((ms >= 100)); then timer_show=${ms}ms
|
|
elif ((ms > 0)); then timer_show=${ms}.$((us / 100))ms
|
|
else timer_show=${us}us
|
|
fi
|
|
unset timer_start
|
|
}
|
|
# get current status of git repo
|
|
function parse_git_dirty {
|
|
status=`git status 2>&1 | tee`
|
|
dirty=`echo -n "${status}" 2> /dev/null | grep "modified:" &> /dev/null; echo "$?"`
|
|
untracked=`echo -n "${status}" 2> /dev/null | grep "Untracked files" &> /dev/null; echo "$?"`
|
|
ahead=`echo -n "${status}" 2> /dev/null | grep "Your branch is ahead of" &> /dev/null; echo "$?"`
|
|
newfile=`echo -n "${status}" 2> /dev/null | grep "new file:" &> /dev/null; echo "$?"`
|
|
renamed=`echo -n "${status}" 2> /dev/null | grep "renamed:" &> /dev/null; echo "$?"`
|
|
deleted=`echo -n "${status}" 2> /dev/null | grep "deleted:" &> /dev/null; echo "$?"`
|
|
bits=''
|
|
if [ "${renamed}" == "0" ] || [ "${newfile}" == "0" ] || [ "${untracked}" == "0" ] || [ "${dirty}" == "0" ]; then
|
|
bits="+${bits}"
|
|
fi
|
|
if [ "${ahead}" == "0" ]; then
|
|
bits="*${bits}"
|
|
fi
|
|
if [ "${deleted}" == "0" ]; then
|
|
bits="-${bits}"
|
|
fi
|
|
if [ ! "${bits}" == "" ]
|
|
then
|
|
echo " ${bits}"
|
|
else
|
|
echo ""
|
|
fi
|
|
}
|
|
|
|
function set_prompt {
|
|
timer_stop
|
|
|
|
if [[ $EUID == 0 ]] ; then
|
|
export PS1='`if [ $? = 0 ]; then echo "\[\033[01;36m\]✔"; else echo "\[\033[01;31m\]✘"; fi` ($timer_show) \[\033[01;31m\]\u [\[\033[00;0m\] \w \[\033[01;31m\]]\[\033[01;34m\]$(parse_git_branch " %s") \[\033[00;00m\]> '
|
|
else
|
|
export PS1='`if [ $? = 0 ]; then echo "\[\033[01;36m\]✔"; else echo "\[\033[01;31m\]✘"; fi` ($timer_show) \[\033[01;32m\]\u [\[\033[00;0m\] \w \[\033[01;32m\]]\[\033[01;34m\]$(parse_git_branch " %s") \[\033[00;00m\]> '
|
|
fi
|
|
}
|
|
|
|
trap 'timer_start' DEBUG
|
|
PROMPT_COMMAND='set_prompt'
|
|
## Lancement des commandes au demarrages
|
|
|
|
# claude-dans-dtach : creer une session (claude tournant dans dtach, detache via Ctrl-\).
|
|
# Usage : cd ~/projets/seo && cc seo -> session nommee "seo".
|
|
dtach_claude() { dtach -c "$HOME/.dtach/${1:-claude-$(date +%H%M%S)}" -e '^\' claude; }
|
|
alias cc='dtach_claude'
|
|
|
|
# Rappeler a la demande le menu de reprise (sinon il s'affiche seul au login SSH).
|
|
alias d='source ~/.local/bin/dtach-router'
|