#!/usr/bin/env bash
# vim:syntax=sh:ts=4
# ----- PROMPT COLOURS ----- #
fgcolor () {
#echo "\\[\\033[38;5;"$1"m\\]"
echo "\033[38;5;${1}m"
}
fgtcolor () {
echo "\033[38;2;$1;$2;$3m"
}
bgcolor () {
#echo "\\[\\033[48;5;"$1"m\\]"
echo "\033[48;5;${1}m"
}
# This is Solaris bash compatible, so we cannot use + here for "at least once) but instead use the
# stupid old asterisk (*). Well, here hetting "no digits" practically won't hurt.
MYUID="$(id|sed 's/.*uid=\([0-9]*\).*/\1/g')";export MYUID
# ...because "empty" will hit the "any" condition in the end :)
OSMAJVER="$(grep '^VERSION_ID' /etc/os-release|awk -F= '{print $NF}'|sed 's/"//g'|awk -F\. '{print $1}')"
case "$MYUID" in
0)
FGC1="fgcolor 88"
case "$OSNAME" in
debian)
# Debian 12 = emerald
if [ "$OSMAJVER" -ge 12 ];then
FGC3="fgcolor 36";FGC2="fgtcolor 155 15 64"
else
FGC3="fgcolor 38";FGC2="fgcolor 155 15 64"
fi
;;
arch) FGC2="fgcolor 24";FGC3="fgcolor 240";;
redhat) FGC1="fgcolor 23";FGC2="fgcolor 88";FGC3="fgcolor 203";;
fedora) FGC1="fgcolor 160";FGC2="fgcolor 88";FGC3="fgcolor 203";;
# with the advent of Rocky, we'll match the time to SUSE's blue and the hostname to
# the colour of Geeko:
#*suse|aix) FGC2="fgcolor 22";FGC3="fgcolor 41";;
*sles*) FGC2="fgcolor 22";FGC3="fgcolor 83";;
*suse*) FGC2="fgcolor 30";FGC3="fgcolor 83";;
aix) FGC2="fgcolor 238";FGC3="fgcolor 83";;
*centos*) FGC2="fgcolor 25";FGC3="fgcolor 208";;
*solaris) FGC2="fgcolor 31";FGC3="fgcolor 124";;
ubuntu)
if [ "$OSMAJVER" -ge 22 ];then
if printf "%b" "$TERM"|grep -P 'xterm|256' > /dev/null;then
FGC2="fgcolor 89";FGC3="fgcolor 208"
else
FGC2="fgcolor 53";FGC3="fgcolor 184"
fi
else
FGC2="fgcolor 130";FGC3="fgcolor 215"
fi
;;
rasp*) FGC2="fgcolor 253";FGC3="fgcolor 126";;
rocky) FGC2="fgcolor 22";FGC3="fgcolor 41";;
*) FGC2="fgcolor 240";FGC3="fgcolor 244";;
esac
if [ -n "$TERMUX_APK_RELEASE" ]; then
if [ "$TERMUX_APK_RELEASE" == "F_DROID" ]; then
FGC2="fgcolor 27";FGC3="fgcolor 35"
fi
fi
;;
*)
FGC2="fgcolor 253"
case "$OSNAME" in
debian)
if [ "$OSMAJVER" -ge 12 ];then
FGC1="fgtcolor 155 15 64";FGC3="fgcolor 36"
else
FGC1="fgtcolor 155 15 64";FGC3="fgcolor 38"
fi
;;
arch) FGC1="fgcolor 24";FGC3="fgcolor 239";;
redhat) FGC1="fgcolor 23";FGC3="fgcolor 88";;
fedora) FGC1="fgcolor 88";FGC3="fgcolor 203";;
#*suse|aix) FGC1="fgcolor 22";FGC3="fgcolor 41";;
*sles*) FGC1="fgcolor 22";FGC3="fgcolor 83";;
*suse*) FGC1="fgcolor 30";FGC3="fgcolor 83";;
aix) FGC1="fgcolor 238";FGC3="fgcolor 83";;
*centos*) FGC1="fgcolor 25";FGC3="fgcolor 208";;
*solaris) FGC1="fgcolor 31";FGC3="fgcolor 124";;
ubuntu)
if [ "$OSMAJVER" -ge 22 ];then
if printf "%b" "$TERM"|grep -P 'xterm|256' > /dev/null;then
FGC1="fgcolor 89";FGC3="fgcolor 208"
else
FGC1="fgcolor 53";FGC3="fgcolor 184"
fi
else
FGC1="fgcolor 130";FGC3="fgcolor 215"
fi
;;
rasp*) FGC1="fgcolor 53";FGC3="fgcolor 126";;
rocky) FGC1="fgcolor 22";FGC3="fgcolor 41";;
*) FGC1="fgcolor 240";FGC3="fgcolor 244";;
esac
if [ -n "$TERMUX_APK_RELEASE" ]; then
if [ "$TERMUX_APK_RELEASE" == "F_DROID" ]; then
FGC1="fgcolor 27";FGC3="fgcolor 35"
fi
fi
;;
esac
# HYPERVISOR LAYER 8 SOFTWARE
if pveversion > /dev/null 2>&1;then
FGC1="fgcolor 236";FGC3="fgcolor 130"
fi
# make it possible to draw user-defined colours
# shellcheck disable=SC1090,SC1091
[ -r "${BBD}/prompt.bash.local" ] && source "${BBD}/prompt.bash.local"
# ----- USER SEP. AND HOSTNAME ----- #
UHSEP="@"
[ -n "$TMUX_PANE" ]&&UHSEP="[T]"
[ -n "$BYOBU_WINDOW_NAME" ]&&UHSEP="[B]"
[ "$(hostname -s)" == "monitoring" ]&&PHN="$(hostname -f)"||PHN="$(hostname -s)"
# ----- ASSEMBLE THE PROMPT COMMAND ADDITION ----- #
__prompt_command() {
local EXIT="$?"
if [ "$EXIT" -lt 10 ];then
local EXIT2="00$EXIT"
elif [ "$EXIT" -lt 100 ];then
local EXIT2="0$EXIT"
else
local EXIT2="$EXIT"
fi
case "$MYUID" in
0)
PS1="\\# \[$(tput bold)\]\[$($FGC1)\]\\u\[$($FGC2)\]@$PHN \[$($FGC3)\]\\w \[$(tput sgr0)\]"
;;
*)
PS1="\\# \[$(tput bold)\]\[$($FGC1)\]\t \[$($FGC2)\]\\u$UHSEP\[$($FGC3)\]$PHN \\w \[$(tput sgr0)\]"
;;
esac
if command -v __git_ps1 >/dev/null 2>&1;then PS1+="$(__git_ps1 "%s ")";fi
if [ "$EXIT" -eq 0 ];then
PS1+="\[\033[0;32m\]# "
elif [ "$EXIT" -eq 255 ]||[ "$EXIT" -eq 127 ];then
PS1+="\[\033[0;33m\]$EXIT2 # "
elif [ "$EXIT" -eq 130 ];then
PS1+="\[\033[0;35m\]$EXIT2 # "
else
PS1+="\[\033[0;31m\]$EXIT2 # "
fi
PS1+="\[\033[0m\]"
}
# ----- ADD __prompt_command() TO $PROMPT_COMMAND ----- #
if ! printf "%b" "$PROMPT_COMMAND" | grep '__prompt_command' >/dev/null;then
case "$TERM" in
# adding in "screen" because tmux
xterm|xterm-color|xterm-256color|rxvt*|screen-256color|screen)
if [ -n "$PROMPT_COMMAND" ];then
export PROMPT_COMMAND="__prompt_command;${PROMPT_COMMAND}"
else
export PROMPT_COMMAND="__prompt_command"
fi
;;
*)
if [ -n "$PROMPT_COMMAND" ];then
export PROMPT_COMMAND="__prompt_command;${PROMPT_COMMAND}"
else
export PROMPT_COMMAND="__prompt_command"
fi
;;
esac
fi
# ----- HISTORY SUBMISSION IN $PROMPT_COMMAND ----- #
if ! printf "%b" "$PROMPT_COMMAND"|grep 'history -a' >/dev/null;then
if [ -n "$PROMPT_COMMAND" ];then
export PROMPT_COMMAND="$PROMPT_COMMAND;history -a;history -c;history -r"
else
export PROMPT_COMMAND="history -a;history -c;history -r"
fi
fi
3em 0;width:15em;margin:0 auto;text-align:center;}*/
#links ul li {padding:0.2em 0 0.3em 2em;margin:0.1em 0 0.1em 0;width:19em;}
#links ul li:nth-child(2n) {float:right;}
#links ul li:nth-child(4n) {background:rgba(80,80,80,0.1);}
#links ul li:nth-child(2n+1) {float:left;}
#links ul li:nth-child(4n-1) {background:rgba(80,80,80,0.1);}
#links:after {clear:both;content:" ";display:block;}
#teamspeak_srv {background-color:rgba(225,245,220,0.7);}
#teamspeak_srv>div.content {margin:0 auto;font-size:13px;width:29.5em;font-family:"Telex","Helvetica Neue",Helvetica,Arial,sans-serif;}
#teamspeak_srv div.copy { display:none!important; }
#teamspeak_srv .content:last-child { margin-bottom:2em; }
aside#ts3remark {margin-top:4em;font-size:66%;text-align:center;font-style:italic;}
#validate {
transform: rotate(45deg);
/*-webkit-transform: rotate(45deg); /*FUCK YOU CHROME, SAFARI AND OPERA*/
/*-ms-transform: rotate(45deg); /*FUCK YOU INTERNET EXPLORER 9 AND BELOW*/
position:fixed;bottom:0;left:0;text-align:center;text-transform:lowercase;width:100%;margin-left:-45.666%;margin-bottom:1.666em;
}
#validate > p {margin:0;font-weight:bold;}
#validate a {text-decoration:none;}
#validate a:hover{text-decoration:none;}
#validate > p:first-child {/*background:#0092bf;*/color:white;border-top:1px solid;border-color:#058;background:rgba(0,126,178,.8);}
#validate > p:nth-child(2) {/*background:#90c140;*/color:white;border-bottom:1px solid;border-color:#591;background:rgba(124,178,54,.8);}
#validate > p a {
color:white;display:inline-block;padding:0.3em 25px 0.3em 0.3em;box-sizing:content-box;height:100%;
background-size:auto 24px;
}
#validate > p:first-child a {
background:transparent url('/flags/html5.png') right center no-repeat scroll;
}
#validate > p:nth-child(2) a {
background:transparent url('/flags/css3.png') right center no-repeat scroll;
}
#validate > p span:last-child {display:none;}
/*#validate > p:last-child a {color:#3e7000;}
#validate > p:last-child a:hover {color:#c9910e;}*/
/*#mail h2:before {content:"\2709\fe0f\000a";display:block;font-size:4em;}*/
#mail h2:before {content:"\2709";display:block;font-size:4em;}
#mail,#philosophy,#hots {text-align:justify;}
#mail h2:before, #philosophy h2:before,#hots h2:before {
font-family:"Elusive Icons";
display:block;font-size:3em;font-weight:normal;
}
#mail h2:before {content:"\e6e1";}
#mail .remark,#philosophy .remark,#hots .remark {font-size:80%;margin-top:2em;font-style:italic;}
#mail strong,#philosophy strong {color:#a00;}
/*#philosophy h2:before {content:"\262f\fe0f\000a";display:block;font-size:4em;}*/
#philosophy h2:before {content:"\262f";}
#hots h2:before {
content:" ";
background:transparent url('//lirion.de/heroes-of-the-storm.svg') center center;
background-size:1.5em 1.5em;
width:1.5em;height:1.5em;text-align:center;margin:0 auto;padding:0;display:block;
}
#hots p#hotslogs {text-align:center; margin:0 auto;margin-bottom:1em;}
#rebuild {text-decoration:blink;color:#30c000;}
#os-releases {/*width:66.6%;*/margin-left:2em;}
#os-releases th {text-align:left;}
#os-releases tr:nth-child(2n-1) td {background-color:#bcd1c1;}
#os-releases tr td,#os-releases tr th {padding:0 0.75em;}
#os-releases tr td.hash {font-family:"DejaVu Sans Mono",Monospace,monospace,serif;font-size:90%;}
#nowww {
position:fixed;top:4em;right:1em;margin:0;padding:0;
background:transparent url('/assets/no_www.png') bottom right no-repeat;
background-size:80px auto;width:80px;height:80px;
}
#nowww a {
display:block;margin:0;padding:0;
width:80px;height:80px;
}
#nowww a span {display:none;}
div.markdown-body p:last-child { padding-bottom:1.5em; }
div#cgit {margin-bottom:2em;}
@keyframes fadeDown {
0% {
opacity: 0;
transform: translateY(-20px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
.fadeDown, header {
animation:fadeDown 1s ease;
}
/* jekyll */
header.post-header { margin-top: 0.1337em; }
.post h1 { font-size:2.1337em; text-align: left; }
.post h1+p { text-align: left; }
ul.post-list {
background: #f0f0f0;
list-style: none;
padding-inline-start: 0;
padding: 0.8em;
}
ul.post-list li { padding:0.4em; }
ul.post-list li:nth-child(2n-1) { background-color:#ffffff; }
ul.post-list li span.post-meta {
font-weight: bold;font-style: oblique;font-size:100%;
}
ul.post-list li span.post-meta:after { content: ':'; }
ul.post-list li h3 {
font-size: 100%;font-weight: normal; display: inline;
margin-left: 1em;
font-family: "Telex","Helvetica Neue",Helvetica,Arial,sans-serif;
border-bottom: none;
}
ul.post-list li h3 a {
text-decoration: none;
}
nav.blog-nav {
background: transparent;
position: static;
border: none;
}
.blog-nav .nav-trigger { display:none; }
.blog-nav .menu-icon { display:none; }
.post-content table {
margin-bottom: 30px;
width: 100%;
text-align: left;
color: #3f3f3f;
border-collapse: collapse;
border: 1px solid #d0d0d0; }
.post-content table tr:nth-child(odd) {
background-color: #e0e0e0; }
.post-content table tr:nth-child(even) {
background-color: #f0f0f0; }
.post-content table th, table td {
padding: 10px 15px; }
.post-content table th {
background-color: #f0f0f0;
border: 1px solid #dedede;
border-bottom-color: #c9c9c9; }
.post-content table td {
border: 1px solid #e8e8e8; }
.blog-nav a.page-link {
text-decoration: none;
font-size:110%;
border-left: 1px solid;
border-right: 1px solid;
margin-left: 0.1em;margin-right:0.1em;
padding-left:0.7331em;padding-right: 0.7331em;
display: inline-block;
}
.blog-nav a.page-link:first-child {
margin-left: 0;
border-left: 0;
}
.blog-nav a.page-link:last-child {
margin-right: 0;
border-right: 0;
}
figure.highlight {
margin: 0 auto;
margin-left: 1em;
padding: 0.666em;
}
figure.highlight pre {
margin-top: 0;
margin-bottom: 0;
overflow-x: auto;
overflow-y: hidden;
}
figure.highlight pre code, code.highlighter-rouge {
font-size: 0.8em;
}
article.post div.post-content, #tocw {
background: rgba(251,255,253,0.6);
padding: 0.666em;
}
main.page-content a, footer.site-footer a {
text-decoration: none;
color: #169b62;
font-weight: 550;
}
main.page-content a:hover, footer.site-footer a:hover, main.page-content a:active,
footer.site-footer a:active {
color: #ff883e;
}
.highlight { background: #e8fff0; }
#tocw ol {
list-style-type: decimal;
counter-reset: item;
padding-left: 10px;
}
#tocw ol li {
display: block;
}
#tocw > ol > li {
padding-left: 0.5em;
}
#tocw > ol > li > ol > li {
padding-left: 0.666em;
}
#tocw > ol > li > ol > li > ol > li {
padding-left: 1.337em;
}
#tocw ol li:before {
content: counters(item, ".") ". ";
counter-increment: item
}
/*main.page-content h2:before {
content: counter(heading)". ";
counter-increment: heading;
}
main.page-content h2 {
counter-reset: subheading;
}
main.page-content h3:before {
content: counter(heading)"." counter(subheading)". ";
counter-increment: subheading;
}*/
/**
* Syntax highlighting styles
*/
.highlight {
background: #fff; }
.highlighter-rouge .highlight {
background: #eef; }
.highlight .c {
color: #998;
font-style: italic; }
.highlight .err {
color: #a61717;
background-color: #e3d2d2; }
.highlight .k {
font-weight: bold; }
.highlight .o {
font-weight: bold; }
.highlight .cm {
color: #998;
font-style: italic; }
.highlight .cp {
color: #999;
font-weight: bold; }
.highlight .c1 {
color: #998;
font-style: italic; }
.highlight .cs {
color: #999;
font-weight: bold;
font-style: italic; }
.highlight .gd {
color: #000;
background-color: #fdd; }
.highlight .gd .x {
color: #000;
background-color: #faa; }
.highlight .ge {
font-style: italic; }
.highlight .gr {
color: #a00; }
.highlight .gh {
color: #999; }
.highlight .gi {
color: #000;
background-color: #dfd; }
.highlight .gi .x {
color: #000;
background-color: #afa; }
.highlight .go {
color: #888; }
.highlight .gp {
color: #555; }
.highlight .gs {
font-weight: bold; }
.highlight .gu {
color: #aaa; }
.highlight .gt {
color: #a00; }
.highlight .kc {
font-weight: bold; }
.highlight .kd {
font-weight: bold; }
.highlight .kp {
font-weight: bold; }
.highlight .kr {
font-weight: bold; }
.highlight .kt {
color: #458;
font-weight: bold; }
.highlight .m {
color: #099; }
.highlight .s {
color: #d14; }
.highlight .na {
color: #008080; }
.highlight .nb {
color: #0086B3; }
.highlight .nc {
color: #458;
font-weight: bold; }
.highlight .no {
color: #008080; }
.highlight .ni {
color: #800080; }
.highlight .ne {
color: #900;
font-weight: bold; }
.highlight .nf {
color: #900;
font-weight: bold; }
.highlight .nn {
color: #555; }
.highlight .nt {
color: #000080; }
.highlight .nv {
color: #008080; }
.highlight .ow {
font-weight: bold; }
.highlight .w {
color: #bbb; }
.highlight .mf {
color: #099; }
.highlight .mh {
color: #099; }
.highlight .mi {
color: #099; }
.highlight .mo {
color: #099; }
.highlight .sb {
color: #d14; }
.highlight .sc {
color: #d14; }
.highlight .sd {
color: #d14; }
.highlight .s2 {
color: #d14; }
.highlight .se {
color: #d14; }
.highlight .sh {
color: #d14; }
.highlight .si {
color: #d14; }
.highlight .sx {
color: #d14; }
.highlight .sr {
color: #009926; }
.highlight .s1 {
color: #d14; }
.highlight .ss {
color: #990073; }
.highlight .bp {
color: #999; }
.highlight .vc {
color: #008080; }
.highlight .vg {
color: #008080; }
.highlight .vi {
color: #008080; }
.highlight .il {
color: #099; }
git.lirion.de
Of git, get, and gud