Wiki

Índice

Funciones personalizadas para ~/.bashrc

Comandos básicos

nano ~/.bashrc
. ~/.bashrc

1. Prompt personalizado información de Git

Este script modifica tu PS1 para mostrar:

  • La fecha y hora.
  • Tu usuario, equipo y directorio actual.
  • El repositorio y rama de Git activa (si estás dentro de uno). Dorada si hay cambios sin confirmar

Recomendación: Puedes guardar este bloque en un archivo aparte (p. ej. ~/.bash_git) y cargarlo desde ~/.bashrc con . ~/.bash_git, así el bashrc principal queda más limpio.


get_git_repo_branch() {
    if git rev-parse --show-toplevel &>/dev/null; then
        repo=$(basename "$(git rev-parse --show-toplevel)")
        branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)

        # Verificar si hay cambios no confirmados
        if git diff --quiet && git diff --cached --quiet; then
            # No changes: display in green
            printf ' \001\e[1;38;2;140;250;140m\002%s(%s)\001\e[0m\002' "$repo" "$branch"
        else
            # There are uncommitted changes: display in bold orange
            printf ' \001\e[1;38;5;214m\002%s(%s)\001\e[0m\002' "$repo" "$branch"
        fi
    fi
}

# Colores en bold
BOLDGREEN="\[\e[1;32m\]"        # verde bold
BOLDBLUE="\[\e[1;34m\]"         # azul bold
BOLDORANGE="\[\e[1;38;5;214m\]" # naranja bold (256-color)
BOLDCYAN="\[\e[1;36m\]"         # azul claro bold (cian)
RESET="\[\e[0m\]"               # reset

# Prompt modificado para aplicar el color correspondiente
PS1="${BOLDCYAN}[\D{%m-%d} \A] ${RESET}${BOLDGREEN}\u@\h${RESET}:${BOLDBLUE}\w${RESET}\$(get_git_repo_branch)\n# "

2. Protección contra git add .

# Protección contra 'git add .'
confirm_git_add() {
    if [[ "$@" == "add ." ]]; then
        echo -e "\033[1;33mAre you sure you want to run an 'add .'? (y/n):\033[0m" 
        read -n 1 respuesta
        echo
        if [[ $respuesta == "y" || $respuesta == "Y" ]]; then
            command git add .
        else
            echo "Canceled" 
        fi
    else
        command git "$@" 
    fi
}
alias git='confirm_git_add'

3. Colores de directorios en ll / ls (cyan)

Por defecto los directorios suelen verse en azul oscuro. Con esto los verás en cyan/azul claro, similar a los enlaces simbólicos, para mejor legibilidad.

Añade esto dentro del bloque que ya tengas de dircolors en tu ~/.bashrc (justo después de eval "$(dircolors -b ...)"):

# directorios en cyan (como los symlinks; append para que override el azul por defecto)
export LS_COLORS="${LS_COLORS}:di=01;36"

Recarga la configuración con . ~/.bashrc o abre una nueva terminal.

4. Copiar stdin al portapapeles: cb

Función que envía la entrada estándar al portapapeles. Útil en pipelines (p. ej. cat archivo | grep algo | cb). Usa xclip o wl-copy según el entorno.

# Copy stdin to clipboard (use in pipelines: cat file | grep x | cb)
cb() {
  if command -v xclip >/dev/null 2>&1; then
    xclip -selection clipboard
  elif command -v wl-copy >/dev/null 2>&1; then
    wl-copy
  else
    echo 'cb: need xclip or wl-copy for clipboard' >&2
    return 1
  fi
}

5. Script completo

El bloque del prompt (función get_git_repo_branch + colores + PS1) puede ir en ~/.bash_git y cargarse con . ~/.bash_git desde ~/.bashrc.


get_git_repo_branch() {
    if git rev-parse --show-toplevel &>/dev/null; then
        repo=$(basename "$(git rev-parse --show-toplevel)")
        branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)

        # Verificar si hay cambios no confirmados
        if git diff --quiet && git diff --cached --quiet; then
            # No changes: display in green
            printf ' \001\e[1;38;2;140;250;140m\002%s(%s)\001\e[0m\002' "$repo" "$branch"
        else
            # There are uncommitted changes: display in bold orange
            printf ' \001\e[1;38;5;214m\002%s(%s)\001\e[0m\002' "$repo" "$branch"
        fi
    fi
}

# Colores en bold
BOLDGREEN="\[\e[1;32m\]"        # verde bold
BOLDBLUE="\[\e[1;34m\]"         # azul bold
BOLDORANGE="\[\e[1;38;5;214m\]" # naranja bold (256-color)
BOLDCYAN="\[\e[1;36m\]"         # azul claro bold (cian)
RESET="\[\e[0m\]"               # reset

# Prompt modificado para aplicar el color correspondiente
PS1="${BOLDCYAN}[\D{%m-%d} \A] ${RESET}${BOLDGREEN}\u@\h${RESET}:${BOLDBLUE}\w${RESET}\$(get_git_repo_branch)\n# "

# Protección contra 'git add .'
confirm_git_add() {
    if [[ "$@" == "add ." ]]; then
        echo -e "\033[1;33mAre you sure you want to run an 'add .'? (y/n):\033[0m" 
        read -n 1 respuesta
        echo
        if [[ $respuesta == "y" || $respuesta == "Y" ]]; then
            command git add .
        else
            echo "Canceled" 
        fi
    else
        command git "$@" 
    fi
}
alias git='confirm_git_add'

# Copy stdin to clipboard (use in pipelines: cat file | grep x | cb)
cb() {
  if command -v xclip >/dev/null 2>&1; then
    xclip -selection clipboard
  elif command -v wl-copy >/dev/null 2>&1; then
    wl-copy
  else
    echo 'cb: need xclip or wl-copy for clipboard' >&2
    return 1
  fi
}