#!/bin/bash # I, Ian Kelling, follow the GNU license recommendations at # https://www.gnu.org/licenses/license-recommendations.en.html. They # recommend that small programs, < 300 lines, be licensed under the # Apache License 2.0. This file contains or is part of one or more small # programs. If a small program grows beyond 300 lines, I plan to switch # its license to GPL. # Copyright 2024 Ian Kelling # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # to debug #set -x # redirect output to log file. this doesn't work. todo figure out why #exec 1>>/a/tmp/bashlog #exec 2>>/a/tmp/bashlog # History related options first and always, or else we risk screwing up # the history file. This is duplicated in ~/.bash_profile just for good # measure # History file size limit, set to unlimited. # this needs to be different from the default because # default HISTFILESIZE is 500 and could clobber our history HISTFILESIZE= # max commands 1 session can append/read from history HISTSIZE=1000000 # the time format display when doing the history command # also, setting this makes the history file record time # of each command as seconds from the epoch HISTTIMEFORMAT="%Y-%m-%d %I:%M %p " # consecutive duplicate lines dont go in history HISTCONTROL=ignoredups # This works in addition to HISTCONTROL to do more flexible things # it could also do the same things as HISTCONTROL and thus replace it, # but meh. dunno why, but just " *" does glob expansion, so use [ ] to avoid it. HISTIGNORE='pass *:otp *:oathtool *:histrm *' # note: duplicated in /a/bin/ds/filesystem/etc/profile.d/environment.sh umask 022 #### if (in # noninteractive ssh shells or tty). tty because often i use it when # something is going and io is slow and my bashrc is too slow. if [[ $LC_USEBASHRC != t && ( $SSH_CONNECTION || $TERM == linux ) ]]; then # Here we did not opt-in to running our .bashrc file so we just # return, but we still setup a function to source it without returning # so if we want it we don't have to restart our ssh connection. brc() { export LC_USEBASHRC=t # shellcheck disable=SC1090 # obviously, no need to follow a sourcing of this file source ~/.bashrc } return 0 else ###### Begin sourcing of files ##### # The distinction between login and non-login shells is super lame # and pretty random. get rid of that distinction. if ! shopt -q login_shell; then if [[ -r /etc/profile ]]; then source /etc/profile fi # note, this is not exactly the same as a login shell, because that # reads ~/.bash_profile or alternative, which usually just sources # this file, and we don't want to do that and cause an infinite # loop. fi # source brc and brc2 if they exist. We have to readlink because we # could be using sl() from ./brc. _tmp=$(readlink -f ${BASH_SOURCE[0]}) bashrc_dir=${_tmp%/*} _tmp=$bashrc_dir/brc if [[ -s $bashrc_dir ]]; then # shellcheck source=./brc source $_tmp fi # brc2 is for things i dont necessarily want on every system _tmp=$bashrc_dir/brc2 if [[ -s $_tmp ]]; then # shellcheck source=./brc2 source $_tmp else # This check is for when running the sl() command, # and the remote host got its type misidentified. _tmp=$bashrc_dir/../brc2 if [[ -s $_tmp ]]; then # shellcheck source=./brc2 source $_tmp fi fi if [[ $IANK_BASHRC_RUN ]]; then $IANK_BASHRC_RUN ||: fi ###### End sourcing of files ##### fi #### end section that works with sl() function to return from #### noninteractive ssh shells # ensure no bad programs appending to this file will have an affect return 0 # kitty puts this here on startup, i need to build with some option to # avoid it, whatever. ## BEGIN_KITTY_SHELL_INTEGRATION # if test -n "$KITTY_INSTALLATION_DIR" -a -e "$KITTY_INSTALLATION_DIR/shell-integration/bash/kitty.bash"; then source "$KITTY_INSTALLATION_DIR/shell-integration/bash/kitty.bash"; fi ## END_KITTY_SHELL_INTEGRATION # Automatically added by the Guix install script. if [ -n "$GUIX_ENVIRONMENT" ]; then if [[ $PS1 =~ (.*)"\\$" ]]; then PS1="${BASH_REMATCH[1]} [env]\\\$ " fi fi