#!/bin/bash
-# Copyright (C) 2019 Ian Kelling
-# SPDX-License-Identifier: AGPL-3.0-or-later
+# 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.
+
# this gets sourced. shebang is just for file mode detection
# Use source ~/.bashrc instead of doing bash -l when running a script
export LESS=RXij12
export SYSTEMD_LESS=$LESS
+
export NNN_COLORS=2136
export SL_FILES_DIR=/b/ds/sl/.iank
fi
fi
+# go exists here
+path-add --ifexists /usr/local/go/bin
+
mysrc() {
local path dir file
a() {
local x
x=$(readlink -nf "${1:-$PWD}")
- # yes, its kinda dumb that xclip/xsel cant do this in one invocation
- echo -n "$x" | xclip -selection clipboard
- echo -n "$x" | xclip
+ # yes, its kinda dumb that xclip/xsel cant do this in one invocation.
+ # And, summarizing this:
+ # https://askubuntu.com/questions/705620/xclip-vs-xsel
+ # xclip has a few more options. xclip has a bug in tmux / forwarded x sessions.
+ cbs "$x"
+}
+
+# clipboard a string (into selection & clipboard buffer)
+cbs() {
+ # yes, its kinda dumb that xclip/xsel cant do this in one invocation.
+ # And, summarizing this:
+ # https://askubuntu.com/questions/705620/xclip-vs-xsel
+ # xclip has a few more options. xclip has a bug in tmux / forwarded x sessions.
+ printf "%s" "$*" | xclip -selection clipboard
+ printf "%s" "$*" | xclip
}
# a1 = awk {print $1}
"$@" &> /a/tmp/gtmp
g /a/tmp/gtmp
}
-# g command substitution
+# g command substitution.
gc() {
+ # shellcheck disable=SC2046 # i want word splitting for this hackery
g $("$@")
}
file_prefix=$2
file_suffix=$3
tmp="${file_prefix##*[[:alnum:]]}"
- targetf="${file_prefix%$tmp}"
+ targetf="${file_prefix%"$tmp"}"
echo targetf: $targetf
github-release-dl "$@"
files=(./*)
c "$(mktemp -d)"
pkg=$1
# shellcheck disable=SC2012
- cached=$(ls -t /var/cache/apt/archives/${pkg}_* | tail -n1 2>/dev/null) ||:
+ cached=$(ls -t /var/cache/apt/archives/${pkg}_* 2>/dev/null | tail -n1 2>/dev/null) ||:
if [[ $cached ]]; then
m cp $cached .
else
sk() {
- # disable a warning with:
- # shellcheck disable=SC2206 # reasoning
-
- # see bash-template/style-guide.md for justifications
-
- local quotes others
+ # see https://savannah.gnu.org/maintenance/fsf/bash-style-guide/ for justifications
+ local quotes others ret
quotes=2048,2068,2086,2206,2254
others=2029,2032,2033,2054,2164,
- shellcheck -W 999 -x -e $quotes,$others "$@" || return $?
+ shellcheck -W 999 -x -e $quotes,$others "$@" || ret=$?
+ if (( ret >= 1 )); then
+ echo "A template comment to disable is now in clipboard. eg: # shellcheck disable=SC2206 # reason"
+ cbs "# shellcheck disable=SC"
+ return $ret
+ fi
}
# sk with quotes. For checking scripts that we expect to take untrusted
# input in order to verify we quoted vars.
pson() {
PROMPT_COMMAND=(prompt-command)
if [[ $TERM == *(screen*|xterm*|rxvt*) ]]; then
- trap 'settitle "$BASH_COMMAND"' DEBUG
+ trap 'auto-window-title "$BASH_COMMAND"' DEBUG
fi
}
}
m() { printf "%s\n" "$*"; "$@"; }
+m2() { printf "%s\n" "$*" >&2; "$@"; }
# update file. note: duplicated in mail-setup.
# updates $ur u result to true or false
done
}
+# note, there is also the tool gron which is meant for this, but
+# this is good enough to not bother installing another tool
+jq-lines() {
+ # https://stackoverflow.com/questions/59700329/how-to-print-path-and-key-values-of-json-file-using-jq
+ jq --stream -r 'select(.[1]|scalars!=null) | "\(.[0]|join(".")): \(.[1]|tojson)"' "$@"
+}
tsr() { # ts run
"$@" |& ts || return $?
# https://github.com/trapd00r/LS_COLORS
# I would like if there was something similar for light.
+ # https://www.bigsoft.co.uk/blog/2008/04/11/configuring-ls_colors
+ # change the hard to read turqouise.
+ # defaults dircolors --print-database.
+
# the default bold green is too light.
# this explains the codes: https://gist.github.com/thomd/7667642
- export LS_COLORS=ex=1
+ export LS_COLORS="ex=1:ln=00;31"
term_bold="$(tput bold)"
term_red="$(tput setaf 1)"
fi
# make the titlebar be the last command and the current directory.
- settitle () {
+ auto-window-title () {
# These are some checks to help ensure we dont set the title at
# condition from the screen man page i think.
# note: duplicated in tx()
if [[ $TERM == *(screen*|xterm*|rxvt*) ]]; then
- trap 'settitle "$BASH_COMMAND"' DEBUG
+ trap 'auto-window-title "$BASH_COMMAND"' DEBUG
else
trap DEBUG
fi