#!/usr/bin/env bash # SPDX-FileCopyrightText: 2022 Richard Brežák # # SPDX-License-Identifier: LGPL-3.0-or-later [[ -e /etc/profile.d/nix.sh ]] && . /etc/profile.d/nix.sh # If not running interactively, don't do anything [[ $- != *i* ]] && return [[ $DISPLAY ]] && shopt -s checkwinsize [ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion ## Enable color on grep alias grep='grep --color=auto' if [ -z "${SHLVL_INIT+x}" ]; then export SHLVL_INIT=1 SHLVL=1 fi if [ "$SHLVL" = 1 ]; then export PS1="\u@\[\e[37m\]\h\[\e[m\]:\[\e[32m\]\w\[\e[m\]\[\e[31m\]\\$\[\e[m\] " else export PS1="$SHLVL: \u@\[\e[37m\]\h\[\e[m\]:\[\e[32m\]\w\[\e[m\]\[\e[31m\]\\$\[\e[m\] " fi emacsclient() { if [[ -e "$HOME/.ssh/emacs-server" ]] && \ nc -Uz "$HOME/.ssh/emacs-server" >/dev/null 2>&1 && \ [[ ! -z ${INSIDE_EMACS+x} ]] ; then params=() sudo=0 nowait=0 host=$(echo $SSH_CONNECTION | cut -d' ' -f3) port=$(echo $SSH_CONNECTION | cut -d' ' -f4) for p in "${@}"; do if [[ "${p}" == "-s" || "${p}" == "--sudo" ]]; then sudo=1 elif [[ "${p}" == "-n" || "${p}" == "--no-wait" ]]; then params+=( "-nowait" ) else if [[ ${sudo} -eq 1 ]]; then params+=( "-file /ssh:${USER}@${host}#${port}|sudo::"$(realpath -m "${p}") ) else params+=( "-file /ssh:${USER}@${host}#${port}:"$(realpath "${p}") ) fi fi done if [[ ${nowait} -eq 0 ]] ; then printf 'Waiting for Emacs...\n' fi echo "${params[@]}" | nc -U "$HOME/.ssh/emacs-server" >/dev/null 2>&1 else sudo=0 args=() for p in "${@}"; do if [[ "${p}" == "-s" || "${p}" == "--sudo" ]]; then sudo=1 else args+=( "${p}" ) fi done if [[ ${sudo} -eq 1 ]]; then echo env emacsclient "/sudo::${args[0]}" "${args[@]:1}" env emacsclient "/sudo::${args[0]}" "${args[@]:1}" else env emacsclient "${@}" fi fi } alias e='emacsclient' alias E='emacsclient -s' ## Set prompt export EDITOR="emacsclient" export BROWSER="librewolf" ## Clear scrollback for vterm if [[ "$INSIDE_EMACS" = 'vterm' ]]; then function clear(){ vterm_printf "51;Evterm-clear-scrollback"; tput clear; } fi if [[ "$INSIDE_EMACS" = 'vterm' ]] \ && [[ -n ${EMACS_VTERM_PATH} ]] \ && [[ -f ${EMACS_VTERM_PATH}/etc/emacs-vterm-bash.sh ]]; then source ${EMACS_VTERM_PATH}/etc/emacs-vterm-bash.sh fi eval "$(direnv hook bash)" alias zlist="zfs list -r -o name,used,avail,refer,compression,compressratio,recordsize,snapdir,sharenfs,mountpoint" function loadenv() { function passhead() { pass $1 | tail -n +2 } export \ $(passhead Infrastructure/Nomad) \ $(passhead Infrastructure/Vault) \ $(passhead Infrastructure/Consul) \ $(passhead Infrastructure/Influx) \ $(passhead Infrastructure/HCloud) } function yaml2nix() { input_file="$1" output_file="$2" if [ "${input_file}" = "${output_file}" ] ; then remarshal -if yaml -of json -i "${input_file}" -o /dev/stdout | nix eval --impure --expr 'builtins.fromJSON (builtins.readFile "/dev/stdin")' > "${input_file}.tmp" mv "${input_file}.tmp" "${output_file}" else remarshal -if yaml -of json -i "${input_file}" -o /dev/stdout | nix eval --impure --expr 'builtins.fromJSON (builtins.readFile "/dev/stdin")' > "${output_file}" fi nixfmt "${output_file}" } function zpool_warning() { if ! ( echo "$@" | grep -v create ) ; then if [[ "$ZFS_I_REMEMBERED_TO_DISABLE_BLOCK_CLONING" == "1" ]] ; then echo "I trust you, carry on! But be careful to disable block cloning..." env zpool "$@" else echo "Disable block cloning or you will have a very bad time!" fi else env zpool "$@" fi } alias zpool="zpool_warning" function genpass() { length="$1" < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c "$length" ; echo }