From dabd104099e5f83c333a66d131cf834a212e229a Mon Sep 17 00:00:00 2001
From: Hugo Builder Automation <hugobuilder-auto@vollink.com>
Date: Thu, 26 May 2022 05:28:04 +0000
Subject: [PATCH] docker hugobuilder automated check-in.

---
 htdocs/index.html                             |  3 +-
 htdocs/index.xml                              |  3 +-
 .../linux-command-prompt-in-color/index.html  | 58 +++++++++++++++++--
 htdocs/post/index.html                        |  3 +-
 htdocs/post/index.xml                         |  3 +-
 htdocs/sitemap.xml                            | 18 ++++--
 htdocs/tags/blog/index.html                   |  3 +-
 htdocs/tags/blog/index.xml                    |  3 +-
 htdocs/tags/geek/index.html                   |  3 +-
 htdocs/tags/geek/index.xml                    | 10 ++++
 htdocs/tags/geek/page/2/index.html            |  4 +-
 htdocs/tags/geek/page/3/index.html            |  5 +-
 htdocs/tags/geek/page/4/index.html            |  7 +--
 htdocs/tags/geek/page/5/index.html            |  9 +--
 htdocs/tags/geek/page/6/index.html            |  7 +++
 htdocs/tags/how-to/index.html                 |  6 ++
 htdocs/tags/how-to/index.xml                  | 20 +++++++
 htdocs/tags/how-to/page/1/index.html          |  1 +
 htdocs/tags/index.html                        |  2 +-
 htdocs/tags/index.xml                         | 18 ++++++
 htdocs/tags/linux/index.html                  |  6 ++
 htdocs/tags/linux/index.xml                   | 20 +++++++
 htdocs/tags/linux/page/1/index.html           |  1 +
 23 files changed, 180 insertions(+), 33 deletions(-)
 create mode 100644 htdocs/tags/geek/page/6/index.html
 create mode 100644 htdocs/tags/how-to/index.html
 create mode 100644 htdocs/tags/how-to/index.xml
 create mode 100644 htdocs/tags/how-to/page/1/index.html
 create mode 100644 htdocs/tags/linux/index.html
 create mode 100644 htdocs/tags/linux/index.xml
 create mode 100644 htdocs/tags/linux/page/1/index.html

diff --git a/htdocs/index.html b/htdocs/index.html
index 1509f4456..5e6101dbf 100644
--- a/htdocs/index.html
+++ b/htdocs/index.html
@@ -5,7 +5,8 @@ Terminal in color This shows my terminal prompt in approximately the colors that
 I recently came across the concept of utility containers. Up to now, all the containers I run are meant to run all the time, and be easily replaced by spinning up a replacement container. Utility containers, on the other hand, are literally containers that hold the bits needed to process input data into output data, do that process, then exit....</p></div><footer class=entry-footer><span title="2022-05-21 15:34:49 -0400 -0400">21 May 2022</span>&nbsp;·&nbsp;5 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Test: Using a Docker image to Build This Blog" href=https://blog.vollink.nyc/post/2022/05/test-docker-blog/></a></article><article class=post-entry><header class=entry-header><h2>Trying Hugo</h2></header><div class=entry-content><p>This is a post where I’m literally doing nothing but testing hugo to see if it will work for what I need.
 Turns out, it works pretty well. Here are some features I’m likely to use.
 Sub With Code Trying a sub-topic
-my $test = MyStuff->new(); if ( ! $test ) { printf {*STDERR} "Error.\n"; } Final Thoughts It took me over a week to figure out how to extract what I needed from my old Google blogger account, and now that I’ve done that, I’m … happy enough … with the results....</p></div><footer class=entry-footer><span title="2022-05-16 21:52:30 -0400 -0400">16 May 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Trying Hugo" href=https://blog.vollink.nyc/post/2022/05/trying-hugo/></a></article><article class=post-entry><header class=entry-header><h2>Linux Command Prompt in Color</h2></header><div class=entry-content><p>In this modern world, basically every terminal is compatible with VT-52 terminal sequences.  These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux.  Further, most of these support emoji and 256 colors. Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt.  This is great, and probably will work just fine, but I find it to be painful....</p></div><footer class=entry-footer><span title="2021-11-19 04:21:00.001 -0500 -0500">19 Nov 2021</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Linux Command Prompt in Color" href=https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/></a></article><footer class=page-footer><nav class=pagination><a class=next href=https://blog.vollink.nyc/page/2/>Next »</a></nav></footer></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
+my $test = MyStuff->new(); if ( ! $test ) { printf {*STDERR} "Error.\n"; } Final Thoughts It took me over a week to figure out how to extract what I needed from my old Google blogger account, and now that I’ve done that, I’m … happy enough … with the results....</p></div><footer class=entry-footer><span title="2022-05-16 21:52:30 -0400 -0400">16 May 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Trying Hugo" href=https://blog.vollink.nyc/post/2022/05/trying-hugo/></a></article><article class=post-entry><header class=entry-header><h2>Linux Command Prompt in Color</h2></header><div class=entry-content><p>In this modern world, basically every terminal is compatible with VT-52 terminal sequences. These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux. Further, most of these support emoji and 256 colors.
+Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt. This is great, and probably will work just fine, but I find it to be painful....</p></div><footer class=entry-footer><span title="2021-11-19 04:21:00.001 -0500 -0500">19 Nov 2021</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Linux Command Prompt in Color" href=https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/></a></article><footer class=page-footer><nav class=pagination><a class=next href=https://blog.vollink.nyc/page/2/>Next »</a></nav></footer></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
 <span>Powered by
 <a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
         <a href=https://git.io/hugopapermod rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentcolor"><path d="M12 6H0l6-6z"/></svg></a><script>let menu=document.getElementById("menu");menu&&(menu.scrollLeft=localStorage.getItem("menu-scroll-position"),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}),document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(t){t.preventDefault();var e=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView({behavior:"smooth"}),e==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${e}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{document.body.className.includes("dark")?(document.body.classList.remove("dark"),localStorage.setItem("pref-theme","light")):(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))})</script></body></html>
\ No newline at end of file
diff --git a/htdocs/index.xml b/htdocs/index.xml
index e385f3d4d..b25bf8dc9 100644
--- a/htdocs/index.xml
+++ b/htdocs/index.xml
@@ -45,7 +45,8 @@ my $test = MyStuff-&amp;gt;new(); if ( ! $test ) { printf {*STDERR} &amp;#34;Err
       <pubDate>Fri, 19 Nov 2021 04:21:00 -0500</pubDate>
       
       <guid>https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/</guid>
-      <description>In this modern world, basically every terminal is compatible with VT-52 terminal sequences.&amp;nbsp; These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux.&amp;nbsp; Further, most of these support emoji and 256 colors.  Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt.&amp;nbsp; This is great, and probably will work just fine, but I find it to be painful.</description>
+      <description>In this modern world, basically every terminal is compatible with VT-52 terminal sequences. These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux. Further, most of these support emoji and 256 colors.
+Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt. This is great, and probably will work just fine, but I find it to be painful.</description>
     </item>
     
     <item>
diff --git a/htdocs/post/2021/11/linux-command-prompt-in-color/index.html b/htdocs/post/2021/11/linux-command-prompt-in-color/index.html
index 6da0b4d40..1ad097424 100644
--- a/htdocs/post/2021/11/linux-command-prompt-in-color/index.html
+++ b/htdocs/post/2021/11/linux-command-prompt-in-color/index.html
@@ -1,9 +1,55 @@
-<!doctype html><html lang=en dir=auto><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Linux Command Prompt in Color | On My Mind...</title><meta name=keywords content="blog"><meta name=description content="In this modern world, basically every terminal is compatible with VT-52 terminal sequences.&nbsp; These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux.&nbsp; Further, most of these support emoji and 256 colors.  Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt.&nbsp; This is great, and probably will work just fine, but I find it to be painful."><meta name=author content="Gary Allen Vollink"><link rel=canonical href=https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/><link crossorigin=anonymous href=/assets/css/stylesheet.min.043dbe50dd3b5aeece8e1fd6b52fdb9ce2bb5c714d321cc709b5e740e61345eb.css integrity="sha256-BD2+UN07Wu7Ojh/WtS/bnOK7XHFNMhzHCbXnQOYTRes=" rel="preload stylesheet" as=style><script defer crossorigin=anonymous src=/assets/js/highlight.min.67ab6ccbad53232b614f9dbcbe19c8759e16f8552b23f5068b953ee70a6dd94f.js integrity="sha256-Z6tsy61TIythT528vhnIdZ4W+FUrI/UGi5U+5wpt2U8="></script>
-<script>var terminal=(()=>{"use strict";return e=>({name:"Terminal Colors",aliases:["terminal"],case_insensitive:!0,contains:[{className:"meta",begin:/\[[39]1m/,end:/\[0?m/},{className:"string",begin:/\[[39]2m/,end:/\[0?m/},{className:"literal",begin:/\[[39]3m/,end:/\[0?m/},{className:"title.function",begin:/\[[39]4m/,end:/\[0?m/},{className:"type",begin:/\[[39]5m/,end:/\[0?m/},{className:"regexp",begin:/\[[39]6m/,end:/\[0?m/},{className:"tag",begin:/\[3[07]m/,end:/\[0?m/},{className:"strong",begin:/\[97m/,end:/\[0?m/},{scope:"keyword",begin:/\[1m/,end:/\[0?m/},{scope:"emphasis",begin:/\[3m/,end:/\[0?m/}]})})(),existCondition;function do_plugin(){hljs.addPlugin({'after:highlight':e=>{if(e.language=="terminal"){var n,t=/\[[0-9;]*m/g,s=e.value.match(t);s&&(n=e.value,e.value=n.replace(t,''))}}}),hljs.registerLanguage("terminal",terminal),hljs.highlightAll()}existCondition=setInterval(function(){typeof hljs!="undefined"&&(clearInterval(existCondition),do_plugin())},100)</script><link rel=icon href=https://blog.vollink.nyc/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://blog.vollink.nyc/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://blog.vollink.nyc/favicon-32x32.png><link rel=apple-touch-icon href=https://blog.vollink.nyc/apple-touch-icon.png><link rel=mask-icon href=https://blog.vollink.nyc/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--hljs-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:title" content="Linux Command Prompt in Color"><meta property="og:description" content="In this modern world, basically every terminal is compatible with VT-52 terminal sequences.&nbsp; These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux.&nbsp; Further, most of these support emoji and 256 colors.  Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt.&nbsp; This is great, and probably will work just fine, but I find it to be painful."><meta property="og:type" content="article"><meta property="og:url" content="https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/"><meta property="article:section" content="post"><meta property="article:published_time" content="2021-11-19T04:21:00-05:00"><meta property="article:modified_time" content="2021-11-19T04:21:52-05:00"><meta property="og:site_name" content="On My Mind..."><meta name=twitter:card content="summary"><meta name=twitter:title content="Linux Command Prompt in Color"><meta name=twitter:description content="In this modern world, basically every terminal is compatible with VT-52 terminal sequences.&nbsp; These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux.&nbsp; Further, most of these support emoji and 256 colors.  Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt.&nbsp; This is great, and probably will work just fine, but I find it to be painful."><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Posts","item":"https://blog.vollink.nyc/post/"},{"@type":"ListItem","position":2,"name":"Linux Command Prompt in Color","item":"https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/"}]}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"BlogPosting","headline":"Linux Command Prompt in Color","name":"Linux Command Prompt in Color","description":"In this modern world, basically every terminal is compatible with VT-52 terminal sequences.\u0026nbsp; These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux.\u0026nbsp; Further, most of these support emoji and 256 colors.  Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt.\u0026nbsp; This is great, and probably will work just fine, but I find it to be painful.","keywords":["blog"],"articleBody":"  In this modern world, basically every terminal is compatible with VT-52 terminal sequences. These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux. Further, most of these support emoji and 256 colors.  Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt. This is great, and probably will work just fine, but I find it to be painful.  On the off-chance such a prompt is ever tried on a terminal that uses a different terminal command language, there's a decent chance the prompt will look like garbage. Of course, linux has a whole dictionary of terminal types (terminfo) and a bunch of tools around that. BASH Prompt: PS1  Generally, the PS1, or primary prompt for the user is set by the system in /etc/profile or one of the files in /etc/profile.d/, and a user can override that prompt in a ${HOME}/.bash_profile or .bashrc file.     A common default prompt is PS1='\\u@\\h:\\w$ ' as in:     username@hostname:/home/username$      The important bit about embedding colors in a PS1 is to tell the shell that the characters it is sending out to the terminal are not actually advancing the cursor (this is important for command line editing, and long commands that wrap on the terminal). Every command sent to the terminal needs to be wrapped in escaped brackets; '\\[\\]'. Here is an embedded \"reset to default\" escape sequence within escaped brackets.     PS1='\\[\\033)B\\033[0m\\]\\u@\\h:\\w$ '  TPUT  The 'tput' command is available on all Linux, and most UNIX systems. My warning here is, like terminal escapes themselves, tput has its own weird language for settings.     setting a red foreground color using tput, and then setting it back, looks like this:    PS1='\\u@\\h:\\w$ '\nuser@host:/home/user$ tput setaf 1  user@host:/home/user$ tput sgr0  user@host:/home/user$     In this example, the prompt isn't trying to control the colors yet, and we can see that the last color that the terminal was told to deal with become the default color for everything until something changes it.    My .bashrc  I have a chunk in my .profile where I literally set the colors and other attributes I can use. If a terminal types does not have a command that matches one of these, then the shell variable will end up empty.    _TM_TX=$(tput setaf 7|sed -e 's/\\x1b/\\\\033/g')\n_TM_RD=$(tput setaf 9|sed -e 's/\\x1b/\\\\033/g')\n_TM_GR=$(tput setaf 10|sed -e 's/\\x1b/\\\\033/g')\n_TM_YL=$(tput setaf 11|sed -e 's/\\x1b/\\\\033/g')\n#_TM_BL=$(tput setaf 12|sed -e 's/\\x1b/\\\\033/g')\n_TM_BL=$(tput setaf 45|sed -e 's/\\x1b/\\\\033/g')\n_TM_PP=$(tput setaf 13|sed -e 's/\\x1b/\\\\033/g')\n_TM_TL=$(tput setaf 14|sed -e 's/\\x1b/\\\\033/g')\n_TM_ITAL=$(tput sitm|sed -e 's/\\x1b/\\\\033/g')\n_TM_BOLD=$(tput bold|sed -e 's/\\x1b/\\\\033/g')\n_TM__=$(tput sgr0|sed -e 's/\\x1b/\\\\033/g') # RESET\nif [ ! -z \"$_TM_TX\" ]   then   _PS_TX=\"\\[${_TM_TX}\\]\"\nfi   if [ ! -z \"$_TM_RD\" ]   then\n_PS_RD=\"\\[${_TM_RD}\\]\"\n   _PS_GR=\"\\[${_TM_GR}\\]\"\n_PS_YL=\"\\[${_TM_YL}\\]\"\n_PS_BL=\"\\[${_TM_BL}\\]\"\n_PS_PP=\"\\[${_TM_PP}\\]\"\n_PS_TL=\"\\[${_TM_TL}\\]\"\nfi   if [ ! -z \"$_TM_ITAL\" ]   then\n_PS_ITAL=\"\\[${_TM_ITAL}\\]\"\nfi   if [ ! -z \"$_TM_BOLD\" ]   then   _PS_BOLD=\"\\[${_TM_BOLD}\\]\"\nfi    _PS__=\"\\[${_TM__}\\]\"\nPS1=\"${_PS_GR}\\u${_PS__}@${_PS_BL}${_PS_BOLD}\\h${_PS__}:${_PS_TL}\\w${_PS__}\\$ \"   There's a repeating sed command here. What this does is it takes any escape characters in the output, and replaces them with an escaped octal for the escape key. This means that one can still echo $PS1 and see what the codes actually look like.  I'm using a light blue from the 255 color palette because I use a dark background on all of my terminals. This also means I'm at risk of having no color at all for elements that I expect to be blue. References  For tput subcommand info: see this terminfo manpage (using the cap-name column, and Color Handling). For setaf (or, background: setab) values, I use this color chart from Wikipedia. For more information on \\[ and \\], see the bash manpage, section on PROMPTING.   ","wordCount":"627","inLanguage":"en","datePublished":"2021-11-19T04:21:00.001-05:00","dateModified":"2021-11-19T04:21:52.504-05:00","author":{"@type":"Person","name":"Gary Allen Vollink"},"mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/"},"publisher":{"@type":"Organization","name":"On My Mind...","logo":{"@type":"ImageObject","url":"https://blog.vollink.nyc/favicon.ico"}}}</script></head><body id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=https://blog.vollink.nyc/ accesskey=h title="Home (Alt + H)"><img src=https://blog.vollink.nyc/AllenWrench.gif alt=logo aria-label=logo height=35>Home</a>
-<span class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></span></div><ul id=menu><li><a href=https://blog.vollink.nyc/post/ title=Posts><span>Posts</span></a></li><li><a href=https://blog.vollink.nyc/tags/ title=Tags><span>Tags</span></a></li><li><a href=https://home.vollink.com/ title=home.vollink.com><span>home.vollink.com</span></a></li></ul></nav></header><main class=main><article class=post-single><header class=post-header><div class=breadcrumbs><a href=https://blog.vollink.nyc/>Home</a>&nbsp;»&nbsp;<a href=https://blog.vollink.nyc/post/>Posts</a></div><h1 class=post-title>Linux Command Prompt in Color</h1><div class=post-meta><span title="2021-11-19 04:21:00.001 -0500 -0500">19 Nov 2021</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Gary Allen Vollink</div></header><div class=toc><details><summary accesskey=c title="(Alt + C)"><span class=details>Table of Contents</span></summary><div class=inner><ul><li><a href=# aria-label="BASH Prompt: PS1">BASH Prompt: PS1</a></li><li><a href=# aria-label=TPUT>TPUT</a></li><li><a href=# aria-label="My .bashrc">My .bashrc</a></li><li><a href=# aria-label=References>References</a></li></ul></div></details></div><div class=post-content><p>In this modern world, basically every terminal is compatible with VT-52 terminal sequences.&nbsp; These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux.&nbsp; Further, most of these support emoji and 256 colors.</p><p>Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt.&nbsp; This is great, and probably will work just fine, but I find it to be painful.</p><p>On the off-chance such a prompt is ever tried on a terminal that uses a different terminal command language, there's a decent chance the prompt will look like garbage.&nbsp; Of course, linux has a whole dictionary of terminal types (terminfo) and a bunch of tools around that.</p><h2 style=text-align:left>BASH Prompt: PS1</h2><div>Generally, the PS1, or primary prompt for the user is set by the system in /etc/profile or one of the files in /etc/profile.d/, and a user can override that prompt in a ${HOME}/.bash_profile or .bashrc file.</div><div><br></div><div>A common default prompt is
-<span style=font-family:courier>PS1='\u@\h:\w$ '</span>
-as in:</div><div><br></div><div><span style=font-family:courier>username@hostname:/home/username$&nbsp;</span></div><div><br></div><div>The important bit about embedding colors in a PS1 is to tell the shell that the characters it is sending out to the terminal are not actually advancing the cursor (this is important for command line editing, and long commands that wrap on the terminal).&nbsp; Every command sent to the terminal needs to be wrapped in escaped brackets; '\[\]'.&nbsp; Here is an embedded "reset to default" escape sequence within escaped brackets.</div><div><br></div><div>PS1='\[\033)B\033[0m\]\u@\h:\w$ '</div><h2 style=text-align:left>TPUT</h2><div>The 'tput' command is available on all Linux, and most UNIX systems.&nbsp; My warning here is, like terminal escapes themselves, tput has its own weird language for settings.</div><div><br></div><div>setting a red foreground color using tput, and then setting it back, looks like this:</div><div><br></div><span style=background-color:#000;font-family:courier>PS1='\u@\h:\w$ '<br>user@host:/home/user$ tput setaf 1</span><div><span style=background-color:#000;color:red;font-family:courier>user@host:/home/user$ tput sgr0</span></div><span style=background-color:#000;font-family:courier>user@host:/home/user$</span><div><br></div><div>In this example, the prompt isn't trying to control the colors yet, and we can see that the last color that the terminal was told to deal with become the default color for everything until something changes it.</div><div><br></div><h2 style=text-align:left>My .bashrc</h2><div>I have a chunk in my .profile where I literally set the colors and other attributes I can use.&nbsp; If a terminal types does not have a command that matches one of these, then the shell variable will end up empty.</div><blockquote><div><span style=background-color:#000>_TM_TX=$(tput setaf 7|sed -e 's/\x1b/\\033/g')<br>_TM_RD=$(tput setaf 9|sed -e 's/\x1b/\\033/g')<br>_TM_GR=$(tput setaf 10|sed -e 's/\x1b/\\033/g')<br>_TM_YL=$(tput setaf 11|sed -e 's/\x1b/\\033/g')<br>#_TM_BL=$(tput setaf 12|sed -e 's/\x1b/\\033/g')<br>_TM_BL=$(tput setaf 45|sed -e 's/\x1b/\\033/g')<br>_TM_PP=$(tput setaf 13|sed -e 's/\x1b/\\033/g')<br>_TM_TL=$(tput setaf 14|sed -e 's/\x1b/\\033/g')<br>_TM_ITAL=$(tput sitm|sed -e 's/\x1b/\\033/g')<br>_TM_BOLD=$(tput bold|sed -e 's/\x1b/\\033/g')<br>_TM__=$(tput sgr0|sed -e 's/\x1b/\\033/g') # RESET<br>if [ ! -z "$_TM_TX" ]</span></div><div><span style=background-color:#000>then</span></div><div><span style=background-color:#000>&nbsp; &nbsp; _PS_TX="\[${_TM_TX}\]"<br>fi</span></div><div><span style=background-color:#000>if [ ! -z "$_TM_RD" ]</span></div><div><span style=background-color:#000>then<br>&nbsp; &nbsp; _PS_RD="\[${_TM_RD}\]"<br></span></div><div><span style=background-color:#000>&nbsp; &nbsp; _PS_GR="\[${_TM_GR}\]"<br>&nbsp; &nbsp; _PS_YL="\[${_TM_YL}\]"<br>&nbsp; &nbsp; _PS_BL="\[${_TM_BL}\]"<br>&nbsp; &nbsp; _PS_PP="\[${_TM_PP}\]"<br>&nbsp; &nbsp; _PS_TL="\[${_TM_TL}\]"<br>fi</span></div><div><span style=background-color:#000>if [ ! -z "$_TM_ITAL" ]</span></div><div><span style=background-color:#000>then<br>_PS_ITAL="\[${_TM_ITAL}\]"<br>fi</span></div><div><span style=background-color:#000>if [ ! -z "$_TM_BOLD" ]</span></div><div><span style=background-color:#000>then</span></div><div><span style=background-color:#000>&nbsp; &nbsp; _PS_BOLD="\[${_TM_BOLD}\]"<br>fi</span></div></blockquote><blockquote><span style=background-color:#000>_PS__="\[${_TM__}\]"<br>PS1="${_PS_GR}\u${_PS__}@${_PS_BL}${_PS_BOLD}\h${_PS__}:${_PS_TL}\w${_PS__}\$ "</span></blockquote><p>There's a repeating sed command here.&nbsp; What this does is it takes any escape characters in the output, and replaces them with an escaped octal for the escape key.&nbsp; This means that one can still echo $PS1 and see what the codes actually look like.</p><p>I'm using a light blue from the 255 color palette because I use a dark background on all of my terminals.&nbsp; This also means I'm at risk of having no color at all for elements that I expect to be blue.</p><h2 style=text-align:left>References</h2><p></p><ul style=text-align:left><li>For tput subcommand info: see this <a href=https://www.man7.org/linux/man-pages/man5/terminfo.5.html target=_blank>terminfo manpage</a> (using the cap-name column, and Color Handling).</li><li>For setaf (or, background: setab) values, I use this color chart from <a href=https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit target=_blank>Wikipedia</a>.</li><li>For more information on \[ and \], see the <a href=https://man7.org/linux/man-pages/man1/bash.1.html#PROMPTING target=_blank>bash manpage</a>, section on PROMPTING.</li></ul><p></p><p><br></p></div><footer class=post-footer><ul class=post-tags><li><a href=https://blog.vollink.nyc/tags/blog/>blog</a></li></ul><nav class=paginav><a class=prev href=https://blog.vollink.nyc/post/2022/05/trying-hugo/><span class=title>« Prev</span><br><span>Trying Hugo</span></a>
-<a class=next href=https://blog.vollink.nyc/post/2020/01/of-curses-and-kisses/><span class=title>Next »</span><br><span>[Book] Of Curses and Kisses by Sandhya Menon</span></a></nav><div class=share-buttons><a target=_blank rel="noopener noreferrer" aria-label="share Linux Command Prompt in Color on twitter" href="https://twitter.com/intent/tweet/?text=Linux%20Command%20Prompt%20in%20Color&url=https%3a%2f%2fblog.vollink.nyc%2fpost%2f2021%2f11%2flinux-command-prompt-in-color%2f&hashtags=blog"><svg viewBox="0 0 512 512"><path d="M449.446.0C483.971.0 512 28.03 512 62.554v386.892C512 483.97 483.97 512 449.446 512H62.554c-34.524.0-62.554-28.03-62.554-62.554V62.554c0-34.524 28.029-62.554 62.554-62.554h386.892zM195.519 424.544c135.939.0 210.268-112.643 210.268-210.268.0-3.218.0-6.437-.153-9.502 14.406-10.421 26.973-23.448 36.935-38.314-13.18 5.824-27.433 9.809-42.452 11.648 15.326-9.196 26.973-23.602 32.49-40.92-14.252 8.429-30.038 14.56-46.896 17.931-13.487-14.406-32.644-23.295-53.946-23.295-40.767.0-73.87 33.104-73.87 73.87.0 5.824.613 11.494 1.992 16.858-61.456-3.065-115.862-32.49-152.337-77.241-6.284 10.881-9.962 23.601-9.962 37.088.0 25.594 13.027 48.276 32.95 61.456-12.107-.307-23.448-3.678-33.41-9.196v.92c0 35.862 25.441 65.594 59.311 72.49-6.13 1.686-12.72 2.606-19.464 2.606-4.751.0-9.348-.46-13.946-1.38 9.349 29.426 36.628 50.728 68.965 51.341-25.287 19.771-57.164 31.571-91.8 31.571-5.977.0-11.801-.306-17.625-1.073 32.337 21.15 71.264 33.41 112.95 33.41z"/></svg></a><a target=_blank rel="noopener noreferrer" aria-label="share Linux Command Prompt in Color on linkedin" href="https://www.linkedin.com/shareArticle?mini=true&url=https%3a%2f%2fblog.vollink.nyc%2fpost%2f2021%2f11%2flinux-command-prompt-in-color%2f&title=Linux%20Command%20Prompt%20in%20Color&summary=Linux%20Command%20Prompt%20in%20Color&source=https%3a%2f%2fblog.vollink.nyc%2fpost%2f2021%2f11%2flinux-command-prompt-in-color%2f"><svg viewBox="0 0 512 512"><path d="M449.446.0C483.971.0 512 28.03 512 62.554v386.892C512 483.97 483.97 512 449.446 512H62.554c-34.524.0-62.554-28.03-62.554-62.554V62.554c0-34.524 28.029-62.554 62.554-62.554h386.892zM160.461 423.278V197.561h-75.04v225.717h75.04zm270.539.0V293.839c0-69.333-37.018-101.586-86.381-101.586-39.804.0-57.634 21.891-67.617 37.266v-31.958h-75.021c.995 21.181.0 225.717.0 225.717h75.02V297.222c0-6.748.486-13.492 2.474-18.315 5.414-13.475 17.767-27.434 38.494-27.434 27.135.0 38.007 20.707 38.007 51.037v120.768H431zM123.448 88.722C97.774 88.722 81 105.601 81 127.724c0 21.658 16.264 39.002 41.455 39.002h.484c26.165.0 42.452-17.344 42.452-39.002-.485-22.092-16.241-38.954-41.943-39.002z"/></svg></a><a target=_blank rel="noopener noreferrer" aria-label="share Linux Command Prompt in Color on reddit" href="https://reddit.com/submit?url=https%3a%2f%2fblog.vollink.nyc%2fpost%2f2021%2f11%2flinux-command-prompt-in-color%2f&title=Linux%20Command%20Prompt%20in%20Color"><svg viewBox="0 0 512 512"><path d="M449.446.0C483.971.0 512 28.03 512 62.554v386.892C512 483.97 483.97 512 449.446 512H62.554c-34.524.0-62.554-28.03-62.554-62.554V62.554c0-34.524 28.029-62.554 62.554-62.554h386.892zM446 265.638c0-22.964-18.616-41.58-41.58-41.58-11.211.0-21.361 4.457-28.841 11.666-28.424-20.508-67.586-33.757-111.204-35.278l18.941-89.121 61.884 13.157c.756 15.734 13.642 28.29 29.56 28.29 16.407.0 29.706-13.299 29.706-29.701.0-16.403-13.299-29.702-29.706-29.702-11.666.0-21.657 6.792-26.515 16.578l-69.105-14.69c-1.922-.418-3.939-.042-5.585 1.036-1.658 1.073-2.811 2.761-3.224 4.686l-21.152 99.438c-44.258 1.228-84.046 14.494-112.837 35.232-7.468-7.164-17.589-11.591-28.757-11.591-22.965.0-41.585 18.616-41.585 41.58.0 16.896 10.095 31.41 24.568 37.918-.639 4.135-.99 8.328-.99 12.576.0 63.977 74.469 115.836 166.33 115.836s166.334-51.859 166.334-115.836c0-4.218-.347-8.387-.977-12.493 14.564-6.47 24.735-21.034 24.735-38.001zM326.526 373.831c-20.27 20.241-59.115 21.816-70.534 21.816-11.428.0-50.277-1.575-70.522-21.82-3.007-3.008-3.007-7.882.0-10.889 3.003-2.999 7.882-3.003 10.885.0 12.777 12.781 40.11 17.317 59.637 17.317 19.522.0 46.86-4.536 59.657-17.321 3.016-2.999 7.886-2.995 10.885.008 3.008 3.011 3.003 7.882-.008 10.889zm-5.23-48.781c-16.373.0-29.701-13.324-29.701-29.698.0-16.381 13.328-29.714 29.701-29.714 16.378.0 29.706 13.333 29.706 29.714.0 16.374-13.328 29.698-29.706 29.698zM160.91 295.348c0-16.381 13.328-29.71 29.714-29.71 16.369.0 29.689 13.329 29.689 29.71.0 16.373-13.32 29.693-29.689 29.693-16.386.0-29.714-13.32-29.714-29.693z"/></svg></a></div></footer></article></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
+<!doctype html><html lang=en dir=auto><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Linux Command Prompt in Color | On My Mind...</title><meta name=keywords content="blog,geek,linux,how-to"><meta name=description content="In this modern world, basically every terminal is compatible with VT-52 terminal sequences. These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux. Further, most of these support emoji and 256 colors.
+Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt. This is great, and probably will work just fine, but I find it to be painful."><meta name=author content="Gary Allen Vollink"><link rel=canonical href=https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/><link crossorigin=anonymous href=/assets/css/stylesheet.min.043dbe50dd3b5aeece8e1fd6b52fdb9ce2bb5c714d321cc709b5e740e61345eb.css integrity="sha256-BD2+UN07Wu7Ojh/WtS/bnOK7XHFNMhzHCbXnQOYTRes=" rel="preload stylesheet" as=style><script defer crossorigin=anonymous src=/assets/js/highlight.min.67ab6ccbad53232b614f9dbcbe19c8759e16f8552b23f5068b953ee70a6dd94f.js integrity="sha256-Z6tsy61TIythT528vhnIdZ4W+FUrI/UGi5U+5wpt2U8="></script>
+<script>var terminal=(()=>{"use strict";return e=>({name:"Terminal Colors",aliases:["terminal"],case_insensitive:!0,contains:[{className:"meta",begin:/\[[39]1m/,end:/\[0?m/},{className:"string",begin:/\[[39]2m/,end:/\[0?m/},{className:"literal",begin:/\[[39]3m/,end:/\[0?m/},{className:"title.function",begin:/\[[39]4m/,end:/\[0?m/},{className:"type",begin:/\[[39]5m/,end:/\[0?m/},{className:"regexp",begin:/\[[39]6m/,end:/\[0?m/},{className:"tag",begin:/\[3[07]m/,end:/\[0?m/},{className:"strong",begin:/\[97m/,end:/\[0?m/},{scope:"keyword",begin:/\[1m/,end:/\[0?m/},{scope:"emphasis",begin:/\[3m/,end:/\[0?m/}]})})(),existCondition;function do_plugin(){hljs.addPlugin({'after:highlight':e=>{if(e.language=="terminal"){var n,t=/\[[0-9;]*m/g,s=e.value.match(t);s&&(n=e.value,e.value=n.replace(t,''))}}}),hljs.registerLanguage("terminal",terminal),hljs.highlightAll()}existCondition=setInterval(function(){typeof hljs!="undefined"&&(clearInterval(existCondition),do_plugin())},100)</script><link rel=icon href=https://blog.vollink.nyc/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://blog.vollink.nyc/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://blog.vollink.nyc/favicon-32x32.png><link rel=apple-touch-icon href=https://blog.vollink.nyc/apple-touch-icon.png><link rel=mask-icon href=https://blog.vollink.nyc/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--hljs-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:title" content="Linux Command Prompt in Color"><meta property="og:description" content="In this modern world, basically every terminal is compatible with VT-52 terminal sequences. These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux. Further, most of these support emoji and 256 colors.
+Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt. This is great, and probably will work just fine, but I find it to be painful."><meta property="og:type" content="article"><meta property="og:url" content="https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/"><meta property="article:section" content="post"><meta property="article:published_time" content="2021-11-19T04:21:00-05:00"><meta property="article:modified_time" content="2022-05-26T00:50:04-04:00"><meta property="og:site_name" content="On My Mind..."><meta name=twitter:card content="summary"><meta name=twitter:title content="Linux Command Prompt in Color"><meta name=twitter:description content="In this modern world, basically every terminal is compatible with VT-52 terminal sequences. These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux. Further, most of these support emoji and 256 colors.
+Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt. This is great, and probably will work just fine, but I find it to be painful."><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Posts","item":"https://blog.vollink.nyc/post/"},{"@type":"ListItem","position":2,"name":"Linux Command Prompt in Color","item":"https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/"}]}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"BlogPosting","headline":"Linux Command Prompt in Color","name":"Linux Command Prompt in Color","description":"In this modern world, basically every terminal is compatible with VT-52 terminal sequences. These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux. Further, most of these support emoji and 256 colors.\nYet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt. This is great, and probably will work just fine, but I find it to be painful.","keywords":["blog","geek","linux","how-to"],"articleBody":"In this modern world, basically every terminal is compatible with VT-52 terminal sequences. These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux. Further, most of these support emoji and 256 colors.\nYet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt. This is great, and probably will work just fine, but I find it to be painful.\nOn the off-chance such a prompt is ever tried on a terminal that uses a different terminal command language, there’s a decent chance the prompt will look like garbage. Of course, linux has a whole dictionary of terminal types (terminfo) and a bunch of tools around that.\nBASH Prompt: PS1 Generally, the PS1, or primary prompt for the user is set by the system in /etc/profile or one of the files in /etc/profile.d/, and a user can override that prompt in a ${HOME}/.bash_profile or .bashrc file.\nA common default prompt is:\n$ PS1='\\u@\\h:\\w$ ' username@hostname:/home/username$ The important bit about embedding colors in a PS1 is to tell the shell that the characters it is sending out to the terminal are not actually advancing the cursor (this is important for command line editing, and long commands that wrap on the terminal). Every command sent to the terminal needs to be wrapped in escaped brackets; ‘[]’. Here is an embedded “reset to default” escape sequence within escaped brackets.\n$ printf \"\\033[33m\" \u001b[33m$ PS1='\\[\\033)B\\033[0m\\]\\u@\\h:\\w$ ' \u001b[0musername@hostname:/home/username$ TPUT The ’tput’ command is available on all Linux, and most UNIX systems. My warning here is, like terminal escapes themselves, tput has its own weird language for settings.\nsetting a red foreground color using tput, and then setting it back, looks like this:\nPS1='\\u@\\h:\\w$ ' user@host:/home/user$ tput setaf 1 \u001b[31muser@host:/home/user$ tput sgr0 \u001b[muser@host:/home/user$ In this example, the prompt isn’t trying to control the colors yet, and we can see that the last color that the terminal was told to deal with become the default color for everything until something changes it.\nMy .bashrc I have a chunk in my .profile where I literally set the colors and other attributes I can use. If a terminal types does not have a command that matches one of these, then the shell variable will end up empty.\n_TM_TX=$(tput setaf 7|sed -e 's/\\x1b/\\\\033/g') _TM_RD=$(tput setaf 9|sed -e 's/\\x1b/\\\\033/g') _TM_GR=$(tput setaf 10|sed -e 's/\\x1b/\\\\033/g') _TM_YL=$(tput setaf 11|sed -e 's/\\x1b/\\\\033/g') #_TM_BL=$(tput setaf 12|sed -e 's/\\x1b/\\\\033/g') _TM_BL=$(tput setaf 45|sed -e 's/\\x1b/\\\\033/g') _TM_PP=$(tput setaf 13|sed -e 's/\\x1b/\\\\033/g') _TM_TL=$(tput setaf 14|sed -e 's/\\x1b/\\\\033/g') _TM_ITAL=$(tput sitm|sed -e 's/\\x1b/\\\\033/g') _TM_BOLD=$(tput bold|sed -e 's/\\x1b/\\\\033/g') _TM__=$(tput sgr0|sed -e 's/\\x1b/\\\\033/g') # RESET if [ ! -z \"$_TM_TX\" ] then _PS_TX=\"\\[${_TM_TX}\\]\" fi if [ ! -z \"$_TM_RD\" ] then _PS_RD=\"\\[${_TM_RD}\\]\" _PS_GR=\"\\[${_TM_GR}\\]\" _PS_YL=\"\\[${_TM_YL}\\]\" _PS_BL=\"\\[${_TM_BL}\\]\" _PS_PP=\"\\[${_TM_PP}\\]\" _PS_TL=\"\\[${_TM_TL}\\]\" fi if [ ! -z \"$_TM_ITAL\" ] then _PS_ITAL=\"\\[${_TM_ITAL}\\]\" fi if [ ! -z \"$_TM_BOLD\" ] then _PS_BOLD=\"\\[${_TM_BOLD}\\]\" fi _PS__=\"\\[${_TM__}\\]\" PS1=\"${_PS_GR}\\u${_PS__}@${_PS_BL}${_PS_BOLD}\\h${_PS__}:${_PS_TL}\\w${_PS__}\\$ \" There’s a repeating sed command here. What this does is it takes any escape characters in the output, and replaces them with an escaped octal for the escape key. This means that one can still echo $PS1 and see what the codes actually look like.\n\u001b[32musername\u001b[0m@\u001b[34mhostname\u001b[0m:\u001b[36m/home/username\u001b[0m$ I’m using a light blue from the 255 color palette because I use a dark background on all of my terminals. This also means I’m at risk of having no color at all for elements that I expect to be blue.\nReferences  For tput subcommand info: see this terminfo manpage For setaf (or, background: setab) values, I use this color chart from Wikipedia For more information on \\[ and \\], see the bash manpage, section on PROMPTING.  ","wordCount":"609","inLanguage":"en","datePublished":"2021-11-19T04:21:00.001-05:00","dateModified":"2022-05-26T00:50:04-04:00","author":{"@type":"Person","name":"Gary Allen Vollink"},"mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/"},"publisher":{"@type":"Organization","name":"On My Mind...","logo":{"@type":"ImageObject","url":"https://blog.vollink.nyc/favicon.ico"}}}</script></head><body id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=https://blog.vollink.nyc/ accesskey=h title="Home (Alt + H)"><img src=https://blog.vollink.nyc/AllenWrench.gif alt=logo aria-label=logo height=35>Home</a>
+<span class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></span></div><ul id=menu><li><a href=https://blog.vollink.nyc/post/ title=Posts><span>Posts</span></a></li><li><a href=https://blog.vollink.nyc/tags/ title=Tags><span>Tags</span></a></li><li><a href=https://home.vollink.com/ title=home.vollink.com><span>home.vollink.com</span></a></li></ul></nav></header><main class=main><article class=post-single><header class=post-header><div class=breadcrumbs><a href=https://blog.vollink.nyc/>Home</a>&nbsp;»&nbsp;<a href=https://blog.vollink.nyc/post/>Posts</a></div><h1 class=post-title>Linux Command Prompt in Color</h1><div class=post-meta><span title="2021-11-19 04:21:00.001 -0500 -0500">19 Nov 2021</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Gary Allen Vollink</div></header><div class=toc><details><summary accesskey=c title="(Alt + C)"><span class=details>Table of Contents</span></summary><div class=inner><ul><li><a href=#bash-prompt-ps1 aria-label="BASH Prompt: PS1">BASH Prompt: PS1</a></li><li><a href=#tput aria-label=TPUT>TPUT</a></li><li><a href=#my-bashrc aria-label="My .bashrc">My .bashrc</a></li><li><a href=#references aria-label=References>References</a></li></ul></div></details></div><div class=post-content><p>In this modern world, basically every terminal is compatible with VT-52 terminal sequences.  These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux.  Further, most of these support emoji and 256 colors.</p><p>Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt.  This is great, and probably will work just fine, but I find it to be painful.</p><p>On the off-chance such a prompt is ever tried on a terminal that uses a different terminal command language, there&rsquo;s a decent chance the prompt will look like garbage.  Of course, linux has a whole dictionary of terminal types (terminfo) and a bunch of tools around that.</p><h2 id=bash-prompt-ps1>BASH Prompt: PS1<a hidden class=anchor aria-hidden=true href=#bash-prompt-ps1>#</a></h2><p>Generally, the PS1, or primary prompt for the user is set by the system in /etc/profile or one of the files in /etc/profile.d/, and a user can override that prompt in a ${HOME}/.bash_profile or .bashrc file.</p><p>A common default prompt is:</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-no-highlight data-lang=no-highlight><span class=line><span class=cl>$ PS1=&#39;\u@\h:\w$ &#39;
+</span></span><span class=line><span class=cl>username@hostname:/home/username$
+</span></span></code></pre></div><p>The important bit about embedding colors in a PS1 is to tell the shell that the characters it is sending out to the terminal are not actually advancing the cursor (this is important for command line editing, and long commands that wrap on the terminal).  Every command sent to the terminal needs to be wrapped in escaped brackets; &lsquo;[]&rsquo;.  Here is an embedded &ldquo;reset to default&rdquo; escape sequence within escaped brackets.</p><pre tabindex=0><code class=language-terminal data-lang=terminal>$ printf &#34;\033[33m&#34;
+$ PS1=&#39;\[\033)B\033[0m\]\u@\h:\w$ &#39;
+username@hostname:/home/username$
+</code></pre><h2 id=tput>TPUT<a hidden class=anchor aria-hidden=true href=#tput>#</a></h2><p>The &rsquo;tput&rsquo; command is available on all Linux, and most UNIX systems.  My warning here is, like terminal escapes themselves, tput has its own weird language for settings.</p><p>setting a red foreground color using tput, and then setting it back, looks like this:</p><pre tabindex=0><code class=language-terminal data-lang=terminal>PS1=&#39;\u@\h:\w$ &#39;
+user@host:/home/user$ tput setaf 1
+user@host:/home/user$ tput sgr0
+user@host:/home/user$ 
+</code></pre><p>In this example, the prompt isn&rsquo;t trying to control the colors yet, and we can see that the last color that the terminal was told to deal with become the default color for everything until something changes it.</p><h2 id=my-bashrc>My .bashrc<a hidden class=anchor aria-hidden=true href=#my-bashrc>#</a></h2><p>I have a chunk in my .profile where I literally set the colors and other attributes I can use.  If a terminal types does not have a command that matches one of these, then the shell variable will end up empty.</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-bash data-lang=bash><span class=line><span class=cl><span class=nv>_TM_TX</span><span class=o>=</span><span class=k>$(</span>tput setaf 7<span class=p>|</span>sed -e <span class=s1>&#39;s/\x1b/\\033/g&#39;</span><span class=k>)</span>
+</span></span><span class=line><span class=cl><span class=nv>_TM_RD</span><span class=o>=</span><span class=k>$(</span>tput setaf 9<span class=p>|</span>sed -e <span class=s1>&#39;s/\x1b/\\033/g&#39;</span><span class=k>)</span>
+</span></span><span class=line><span class=cl><span class=nv>_TM_GR</span><span class=o>=</span><span class=k>$(</span>tput setaf 10<span class=p>|</span>sed -e <span class=s1>&#39;s/\x1b/\\033/g&#39;</span><span class=k>)</span>
+</span></span><span class=line><span class=cl><span class=nv>_TM_YL</span><span class=o>=</span><span class=k>$(</span>tput setaf 11<span class=p>|</span>sed -e <span class=s1>&#39;s/\x1b/\\033/g&#39;</span><span class=k>)</span>
+</span></span><span class=line><span class=cl><span class=c1>#_TM_BL=$(tput setaf 12|sed -e &#39;s/\x1b/\\033/g&#39;)</span>
+</span></span><span class=line><span class=cl><span class=nv>_TM_BL</span><span class=o>=</span><span class=k>$(</span>tput setaf 45<span class=p>|</span>sed -e <span class=s1>&#39;s/\x1b/\\033/g&#39;</span><span class=k>)</span>
+</span></span><span class=line><span class=cl><span class=nv>_TM_PP</span><span class=o>=</span><span class=k>$(</span>tput setaf 13<span class=p>|</span>sed -e <span class=s1>&#39;s/\x1b/\\033/g&#39;</span><span class=k>)</span>
+</span></span><span class=line><span class=cl><span class=nv>_TM_TL</span><span class=o>=</span><span class=k>$(</span>tput setaf 14<span class=p>|</span>sed -e <span class=s1>&#39;s/\x1b/\\033/g&#39;</span><span class=k>)</span>
+</span></span><span class=line><span class=cl><span class=nv>_TM_ITAL</span><span class=o>=</span><span class=k>$(</span>tput sitm<span class=p>|</span>sed -e <span class=s1>&#39;s/\x1b/\\033/g&#39;</span><span class=k>)</span>
+</span></span><span class=line><span class=cl><span class=nv>_TM_BOLD</span><span class=o>=</span><span class=k>$(</span>tput bold<span class=p>|</span>sed -e <span class=s1>&#39;s/\x1b/\\033/g&#39;</span><span class=k>)</span>
+</span></span><span class=line><span class=cl><span class=nv>_TM__</span><span class=o>=</span><span class=k>$(</span>tput sgr0<span class=p>|</span>sed -e <span class=s1>&#39;s/\x1b/\\033/g&#39;</span><span class=k>)</span>      <span class=c1># RESET</span>
+</span></span><span class=line><span class=cl><span class=k>if</span> <span class=o>[</span> ! -z <span class=s2>&#34;</span><span class=nv>$_TM_TX</span><span class=s2>&#34;</span> <span class=o>]</span>
+</span></span><span class=line><span class=cl><span class=k>then</span>
+</span></span><span class=line><span class=cl>   <span class=nv>_PS_TX</span><span class=o>=</span><span class=s2>&#34;\[</span><span class=si>${</span><span class=nv>_TM_TX</span><span class=si>}</span><span class=s2>\]&#34;</span>
+</span></span><span class=line><span class=cl><span class=k>fi</span>
+</span></span><span class=line><span class=cl><span class=k>if</span> <span class=o>[</span> ! -z <span class=s2>&#34;</span><span class=nv>$_TM_RD</span><span class=s2>&#34;</span> <span class=o>]</span>
+</span></span><span class=line><span class=cl><span class=k>then</span>
+</span></span><span class=line><span class=cl>   <span class=nv>_PS_RD</span><span class=o>=</span><span class=s2>&#34;\[</span><span class=si>${</span><span class=nv>_TM_RD</span><span class=si>}</span><span class=s2>\]&#34;</span>
+</span></span><span class=line><span class=cl>   <span class=nv>_PS_GR</span><span class=o>=</span><span class=s2>&#34;\[</span><span class=si>${</span><span class=nv>_TM_GR</span><span class=si>}</span><span class=s2>\]&#34;</span>
+</span></span><span class=line><span class=cl>   <span class=nv>_PS_YL</span><span class=o>=</span><span class=s2>&#34;\[</span><span class=si>${</span><span class=nv>_TM_YL</span><span class=si>}</span><span class=s2>\]&#34;</span>
+</span></span><span class=line><span class=cl>   <span class=nv>_PS_BL</span><span class=o>=</span><span class=s2>&#34;\[</span><span class=si>${</span><span class=nv>_TM_BL</span><span class=si>}</span><span class=s2>\]&#34;</span>
+</span></span><span class=line><span class=cl>   <span class=nv>_PS_PP</span><span class=o>=</span><span class=s2>&#34;\[</span><span class=si>${</span><span class=nv>_TM_PP</span><span class=si>}</span><span class=s2>\]&#34;</span>
+</span></span><span class=line><span class=cl>   <span class=nv>_PS_TL</span><span class=o>=</span><span class=s2>&#34;\[</span><span class=si>${</span><span class=nv>_TM_TL</span><span class=si>}</span><span class=s2>\]&#34;</span>
+</span></span><span class=line><span class=cl><span class=k>fi</span>
+</span></span><span class=line><span class=cl><span class=k>if</span> <span class=o>[</span> ! -z <span class=s2>&#34;</span><span class=nv>$_TM_ITAL</span><span class=s2>&#34;</span> <span class=o>]</span>
+</span></span><span class=line><span class=cl><span class=k>then</span>
+</span></span><span class=line><span class=cl>   <span class=nv>_PS_ITAL</span><span class=o>=</span><span class=s2>&#34;\[</span><span class=si>${</span><span class=nv>_TM_ITAL</span><span class=si>}</span><span class=s2>\]&#34;</span>
+</span></span><span class=line><span class=cl><span class=k>fi</span>
+</span></span><span class=line><span class=cl><span class=k>if</span> <span class=o>[</span> ! -z <span class=s2>&#34;</span><span class=nv>$_TM_BOLD</span><span class=s2>&#34;</span> <span class=o>]</span>
+</span></span><span class=line><span class=cl><span class=k>then</span>
+</span></span><span class=line><span class=cl>   <span class=nv>_PS_BOLD</span><span class=o>=</span><span class=s2>&#34;\[</span><span class=si>${</span><span class=nv>_TM_BOLD</span><span class=si>}</span><span class=s2>\]&#34;</span>
+</span></span><span class=line><span class=cl><span class=k>fi</span>
+</span></span><span class=line><span class=cl><span class=nv>_PS__</span><span class=o>=</span><span class=s2>&#34;\[</span><span class=si>${</span><span class=nv>_TM__</span><span class=si>}</span><span class=s2>\]&#34;</span>
+</span></span><span class=line><span class=cl>
+</span></span><span class=line><span class=cl><span class=nv>PS1</span><span class=o>=</span><span class=s2>&#34;</span><span class=si>${</span><span class=nv>_PS_GR</span><span class=si>}</span><span class=s2>\u</span><span class=si>${</span><span class=nv>_PS__</span><span class=si>}</span><span class=s2>@</span><span class=si>${</span><span class=nv>_PS_BL</span><span class=si>}${</span><span class=nv>_PS_BOLD</span><span class=si>}</span><span class=s2>\h</span><span class=si>${</span><span class=nv>_PS__</span><span class=si>}</span><span class=s2>:</span><span class=si>${</span><span class=nv>_PS_TL</span><span class=si>}</span><span class=s2>\w</span><span class=si>${</span><span class=nv>_PS__</span><span class=si>}</span><span class=s2>\$ &#34;</span>
+</span></span></code></pre></div><p>There&rsquo;s a repeating <code>sed</code> command here.  What this does is it takes any escape characters in the output, and replaces them with an escaped octal for the escape key.  This means that one can still echo $PS1 and see what the codes actually look like.</p><pre tabindex=0><code class=language-terminal data-lang=terminal>username@hostname:/home/username$
+</code></pre><p>I&rsquo;m using a light blue from the 255 color palette because I use a dark background on all of my terminals.  This also means I&rsquo;m at risk of having no color at all for elements that I expect to be blue.</p><h2 id=references>References<a hidden class=anchor aria-hidden=true href=#references>#</a></h2><ul><li>For tput subcommand info: see this <a href=https://www.man7.org/linux/man-pages/man5/terminfo.5.html>terminfo manpage</a></li><li>For setaf (or, background: setab) values, I use this color chart from <a href=https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit>Wikipedia</a></li><li>For more information on <code>\[</code> and <code>\]</code>, see the <a href=https://man7.org/linux/man-pages/man1/bash.1.html#PROMPTING>bash manpage</a>, section on PROMPTING.</li></ul></div><footer class=post-footer><ul class=post-tags><li><a href=https://blog.vollink.nyc/tags/blog/>blog</a></li><li><a href=https://blog.vollink.nyc/tags/geek/>geek</a></li><li><a href=https://blog.vollink.nyc/tags/linux/>linux</a></li><li><a href=https://blog.vollink.nyc/tags/how-to/>how-to</a></li></ul><nav class=paginav><a class=prev href=https://blog.vollink.nyc/post/2022/05/trying-hugo/><span class=title>« Prev</span><br><span>Trying Hugo</span></a>
+<a class=next href=https://blog.vollink.nyc/post/2020/01/of-curses-and-kisses/><span class=title>Next »</span><br><span>[Book] Of Curses and Kisses by Sandhya Menon</span></a></nav><div class=share-buttons><a target=_blank rel="noopener noreferrer" aria-label="share Linux Command Prompt in Color on twitter" href="https://twitter.com/intent/tweet/?text=Linux%20Command%20Prompt%20in%20Color&url=https%3a%2f%2fblog.vollink.nyc%2fpost%2f2021%2f11%2flinux-command-prompt-in-color%2f&hashtags=blog%2cgeek%2clinux%2chow-to"><svg viewBox="0 0 512 512"><path d="M449.446.0C483.971.0 512 28.03 512 62.554v386.892C512 483.97 483.97 512 449.446 512H62.554c-34.524.0-62.554-28.03-62.554-62.554V62.554c0-34.524 28.029-62.554 62.554-62.554h386.892zM195.519 424.544c135.939.0 210.268-112.643 210.268-210.268.0-3.218.0-6.437-.153-9.502 14.406-10.421 26.973-23.448 36.935-38.314-13.18 5.824-27.433 9.809-42.452 11.648 15.326-9.196 26.973-23.602 32.49-40.92-14.252 8.429-30.038 14.56-46.896 17.931-13.487-14.406-32.644-23.295-53.946-23.295-40.767.0-73.87 33.104-73.87 73.87.0 5.824.613 11.494 1.992 16.858-61.456-3.065-115.862-32.49-152.337-77.241-6.284 10.881-9.962 23.601-9.962 37.088.0 25.594 13.027 48.276 32.95 61.456-12.107-.307-23.448-3.678-33.41-9.196v.92c0 35.862 25.441 65.594 59.311 72.49-6.13 1.686-12.72 2.606-19.464 2.606-4.751.0-9.348-.46-13.946-1.38 9.349 29.426 36.628 50.728 68.965 51.341-25.287 19.771-57.164 31.571-91.8 31.571-5.977.0-11.801-.306-17.625-1.073 32.337 21.15 71.264 33.41 112.95 33.41z"/></svg></a><a target=_blank rel="noopener noreferrer" aria-label="share Linux Command Prompt in Color on linkedin" href="https://www.linkedin.com/shareArticle?mini=true&url=https%3a%2f%2fblog.vollink.nyc%2fpost%2f2021%2f11%2flinux-command-prompt-in-color%2f&title=Linux%20Command%20Prompt%20in%20Color&summary=Linux%20Command%20Prompt%20in%20Color&source=https%3a%2f%2fblog.vollink.nyc%2fpost%2f2021%2f11%2flinux-command-prompt-in-color%2f"><svg viewBox="0 0 512 512"><path d="M449.446.0C483.971.0 512 28.03 512 62.554v386.892C512 483.97 483.97 512 449.446 512H62.554c-34.524.0-62.554-28.03-62.554-62.554V62.554c0-34.524 28.029-62.554 62.554-62.554h386.892zM160.461 423.278V197.561h-75.04v225.717h75.04zm270.539.0V293.839c0-69.333-37.018-101.586-86.381-101.586-39.804.0-57.634 21.891-67.617 37.266v-31.958h-75.021c.995 21.181.0 225.717.0 225.717h75.02V297.222c0-6.748.486-13.492 2.474-18.315 5.414-13.475 17.767-27.434 38.494-27.434 27.135.0 38.007 20.707 38.007 51.037v120.768H431zM123.448 88.722C97.774 88.722 81 105.601 81 127.724c0 21.658 16.264 39.002 41.455 39.002h.484c26.165.0 42.452-17.344 42.452-39.002-.485-22.092-16.241-38.954-41.943-39.002z"/></svg></a><a target=_blank rel="noopener noreferrer" aria-label="share Linux Command Prompt in Color on reddit" href="https://reddit.com/submit?url=https%3a%2f%2fblog.vollink.nyc%2fpost%2f2021%2f11%2flinux-command-prompt-in-color%2f&title=Linux%20Command%20Prompt%20in%20Color"><svg viewBox="0 0 512 512"><path d="M449.446.0C483.971.0 512 28.03 512 62.554v386.892C512 483.97 483.97 512 449.446 512H62.554c-34.524.0-62.554-28.03-62.554-62.554V62.554c0-34.524 28.029-62.554 62.554-62.554h386.892zM446 265.638c0-22.964-18.616-41.58-41.58-41.58-11.211.0-21.361 4.457-28.841 11.666-28.424-20.508-67.586-33.757-111.204-35.278l18.941-89.121 61.884 13.157c.756 15.734 13.642 28.29 29.56 28.29 16.407.0 29.706-13.299 29.706-29.701.0-16.403-13.299-29.702-29.706-29.702-11.666.0-21.657 6.792-26.515 16.578l-69.105-14.69c-1.922-.418-3.939-.042-5.585 1.036-1.658 1.073-2.811 2.761-3.224 4.686l-21.152 99.438c-44.258 1.228-84.046 14.494-112.837 35.232-7.468-7.164-17.589-11.591-28.757-11.591-22.965.0-41.585 18.616-41.585 41.58.0 16.896 10.095 31.41 24.568 37.918-.639 4.135-.99 8.328-.99 12.576.0 63.977 74.469 115.836 166.33 115.836s166.334-51.859 166.334-115.836c0-4.218-.347-8.387-.977-12.493 14.564-6.47 24.735-21.034 24.735-38.001zM326.526 373.831c-20.27 20.241-59.115 21.816-70.534 21.816-11.428.0-50.277-1.575-70.522-21.82-3.007-3.008-3.007-7.882.0-10.889 3.003-2.999 7.882-3.003 10.885.0 12.777 12.781 40.11 17.317 59.637 17.317 19.522.0 46.86-4.536 59.657-17.321 3.016-2.999 7.886-2.995 10.885.008 3.008 3.011 3.003 7.882-.008 10.889zm-5.23-48.781c-16.373.0-29.701-13.324-29.701-29.698.0-16.381 13.328-29.714 29.701-29.714 16.378.0 29.706 13.333 29.706 29.714.0 16.374-13.328 29.698-29.706 29.698zM160.91 295.348c0-16.381 13.328-29.71 29.714-29.71 16.369.0 29.689 13.329 29.689 29.71.0 16.373-13.32 29.693-29.689 29.693-16.386.0-29.714-13.32-29.714-29.693z"/></svg></a></div></footer></article></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
 <span>Powered by
 <a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
         <a href=https://git.io/hugopapermod rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentcolor"><path d="M12 6H0l6-6z"/></svg></a><script>let menu=document.getElementById("menu");menu&&(menu.scrollLeft=localStorage.getItem("menu-scroll-position"),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}),document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(t){t.preventDefault();var e=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView({behavior:"smooth"}),e==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${e}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{document.body.className.includes("dark")?(document.body.classList.remove("dark"),localStorage.setItem("pref-theme","light")):(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))})</script><script>document.querySelectorAll("pre > code").forEach(t=>{const n=t.parentNode.parentNode,e=document.createElement("button");e.classList.add("copy-code"),e.innerHTML="copy";function s(){e.innerHTML="copied!",setTimeout(()=>{e.innerHTML="copy"},2e3)}e.addEventListener("click",o=>{if("clipboard"in navigator){navigator.clipboard.writeText(t.textContent),s();return}const e=document.createRange();e.selectNodeContents(t);const n=window.getSelection();n.removeAllRanges(),n.addRange(e);try{document.execCommand("copy"),s()}catch(e){}n.removeRange(e)}),n.classList.contains("highlight")?n.appendChild(e):n.parentNode.firstChild==n||(t.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName=="TABLE"?t.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(e):t.parentNode.appendChild(e))})</script></body></html>
\ No newline at end of file
diff --git a/htdocs/post/index.html b/htdocs/post/index.html
index cabc17c0d..862d4805c 100644
--- a/htdocs/post/index.html
+++ b/htdocs/post/index.html
@@ -5,7 +5,8 @@ Terminal in color This shows my terminal prompt in approximately the colors that
 I recently came across the concept of utility containers. Up to now, all the containers I run are meant to run all the time, and be easily replaced by spinning up a replacement container. Utility containers, on the other hand, are literally containers that hold the bits needed to process input data into output data, do that process, then exit....</p></div><footer class=entry-footer><span title="2022-05-21 15:34:49 -0400 -0400">21 May 2022</span>&nbsp;·&nbsp;5 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Test: Using a Docker image to Build This Blog" href=https://blog.vollink.nyc/post/2022/05/test-docker-blog/></a></article><article class=post-entry><header class=entry-header><h2>Trying Hugo</h2></header><div class=entry-content><p>This is a post where I’m literally doing nothing but testing hugo to see if it will work for what I need.
 Turns out, it works pretty well. Here are some features I’m likely to use.
 Sub With Code Trying a sub-topic
-my $test = MyStuff->new(); if ( ! $test ) { printf {*STDERR} "Error.\n"; } Final Thoughts It took me over a week to figure out how to extract what I needed from my old Google blogger account, and now that I’ve done that, I’m … happy enough … with the results....</p></div><footer class=entry-footer><span title="2022-05-16 21:52:30 -0400 -0400">16 May 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Trying Hugo" href=https://blog.vollink.nyc/post/2022/05/trying-hugo/></a></article><article class=post-entry><header class=entry-header><h2>Linux Command Prompt in Color</h2></header><div class=entry-content><p>In this modern world, basically every terminal is compatible with VT-52 terminal sequences.  These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux.  Further, most of these support emoji and 256 colors. Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt.  This is great, and probably will work just fine, but I find it to be painful....</p></div><footer class=entry-footer><span title="2021-11-19 04:21:00.001 -0500 -0500">19 Nov 2021</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Linux Command Prompt in Color" href=https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/></a></article><footer class=page-footer><nav class=pagination><a class=next href=https://blog.vollink.nyc/post/page/2/>Next »</a></nav></footer></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
+my $test = MyStuff->new(); if ( ! $test ) { printf {*STDERR} "Error.\n"; } Final Thoughts It took me over a week to figure out how to extract what I needed from my old Google blogger account, and now that I’ve done that, I’m … happy enough … with the results....</p></div><footer class=entry-footer><span title="2022-05-16 21:52:30 -0400 -0400">16 May 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Trying Hugo" href=https://blog.vollink.nyc/post/2022/05/trying-hugo/></a></article><article class=post-entry><header class=entry-header><h2>Linux Command Prompt in Color</h2></header><div class=entry-content><p>In this modern world, basically every terminal is compatible with VT-52 terminal sequences. These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux. Further, most of these support emoji and 256 colors.
+Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt. This is great, and probably will work just fine, but I find it to be painful....</p></div><footer class=entry-footer><span title="2021-11-19 04:21:00.001 -0500 -0500">19 Nov 2021</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Linux Command Prompt in Color" href=https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/></a></article><footer class=page-footer><nav class=pagination><a class=next href=https://blog.vollink.nyc/post/page/2/>Next »</a></nav></footer></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
 <span>Powered by
 <a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
         <a href=https://git.io/hugopapermod rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentcolor"><path d="M12 6H0l6-6z"/></svg></a><script>let menu=document.getElementById("menu");menu&&(menu.scrollLeft=localStorage.getItem("menu-scroll-position"),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}),document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(t){t.preventDefault();var e=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView({behavior:"smooth"}),e==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${e}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{document.body.className.includes("dark")?(document.body.classList.remove("dark"),localStorage.setItem("pref-theme","light")):(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))})</script></body></html>
\ No newline at end of file
diff --git a/htdocs/post/index.xml b/htdocs/post/index.xml
index 837dbab00..ef8a0d5a8 100644
--- a/htdocs/post/index.xml
+++ b/htdocs/post/index.xml
@@ -45,7 +45,8 @@ my $test = MyStuff-&amp;gt;new(); if ( ! $test ) { printf {*STDERR} &amp;#34;Err
       <pubDate>Fri, 19 Nov 2021 04:21:00 -0500</pubDate>
       
       <guid>https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/</guid>
-      <description>In this modern world, basically every terminal is compatible with VT-52 terminal sequences.&amp;nbsp; These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux.&amp;nbsp; Further, most of these support emoji and 256 colors.  Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt.&amp;nbsp; This is great, and probably will work just fine, but I find it to be painful.</description>
+      <description>In this modern world, basically every terminal is compatible with VT-52 terminal sequences. These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux. Further, most of these support emoji and 256 colors.
+Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt. This is great, and probably will work just fine, but I find it to be painful.</description>
     </item>
     
     <item>
diff --git a/htdocs/sitemap.xml b/htdocs/sitemap.xml
index 274898944..5739b7aeb 100644
--- a/htdocs/sitemap.xml
+++ b/htdocs/sitemap.xml
@@ -3,13 +3,13 @@
   xmlns:xhtml="http://www.w3.org/1999/xhtml">
   <url>
     <loc>https://blog.vollink.nyc/tags/blog/</loc>
-    <lastmod>2022-05-26T00:39:17-04:00</lastmod>
+    <lastmod>2022-05-26T00:50:04-04:00</lastmod>
   </url><url>
     <loc>https://blog.vollink.nyc/tags/dev/</loc>
     <lastmod>2022-05-25T20:45:29-04:00</lastmod>
   </url><url>
     <loc>https://blog.vollink.nyc/tags/geek/</loc>
-    <lastmod>2022-05-25T20:45:29-04:00</lastmod>
+    <lastmod>2022-05-26T00:50:04-04:00</lastmod>
   </url><url>
     <loc>https://blog.vollink.nyc/tags/howto/</loc>
     <lastmod>2022-05-25T20:45:29-04:00</lastmod>
@@ -18,13 +18,13 @@
     <lastmod>2022-05-25T20:45:29-04:00</lastmod>
   </url><url>
     <loc>https://blog.vollink.nyc/</loc>
-    <lastmod>2022-05-26T00:39:17-04:00</lastmod>
+    <lastmod>2022-05-26T00:50:04-04:00</lastmod>
   </url><url>
     <loc>https://blog.vollink.nyc/post/</loc>
-    <lastmod>2022-05-26T00:39:17-04:00</lastmod>
+    <lastmod>2022-05-26T00:50:04-04:00</lastmod>
   </url><url>
     <loc>https://blog.vollink.nyc/tags/</loc>
-    <lastmod>2022-05-26T00:39:17-04:00</lastmod>
+    <lastmod>2022-05-26T00:50:04-04:00</lastmod>
   </url><url>
     <loc>https://blog.vollink.nyc/post/2022/05/hugo-term-color/</loc>
     <lastmod>2022-05-25T20:45:29-04:00</lastmod>
@@ -34,9 +34,15 @@
   </url><url>
     <loc>https://blog.vollink.nyc/post/2022/05/trying-hugo/</loc>
     <lastmod>2022-05-16T21:52:30-04:00</lastmod>
+  </url><url>
+    <loc>https://blog.vollink.nyc/tags/how-to/</loc>
+    <lastmod>2022-05-26T00:50:04-04:00</lastmod>
+  </url><url>
+    <loc>https://blog.vollink.nyc/tags/linux/</loc>
+    <lastmod>2022-05-26T00:50:04-04:00</lastmod>
   </url><url>
     <loc>https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/</loc>
-    <lastmod>2021-11-19T04:21:52-05:00</lastmod>
+    <lastmod>2022-05-26T00:50:04-04:00</lastmod>
   </url><url>
     <loc>https://blog.vollink.nyc/post/2020/01/of-curses-and-kisses/</loc>
     <lastmod>2020-01-22T12:00:00-05:00</lastmod>
diff --git a/htdocs/tags/blog/index.html b/htdocs/tags/blog/index.html
index da8f79f16..a0264fd78 100644
--- a/htdocs/tags/blog/index.html
+++ b/htdocs/tags/blog/index.html
@@ -5,7 +5,8 @@ Terminal in color This shows my terminal prompt in approximately the colors that
 I recently came across the concept of utility containers. Up to now, all the containers I run are meant to run all the time, and be easily replaced by spinning up a replacement container. Utility containers, on the other hand, are literally containers that hold the bits needed to process input data into output data, do that process, then exit....</p></div><footer class=entry-footer><span title="2022-05-21 15:34:49 -0400 -0400">21 May 2022</span>&nbsp;·&nbsp;5 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Test: Using a Docker image to Build This Blog" href=https://blog.vollink.nyc/post/2022/05/test-docker-blog/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>Trying Hugo</h2></header><div class=entry-content><p>This is a post where I’m literally doing nothing but testing hugo to see if it will work for what I need.
 Turns out, it works pretty well. Here are some features I’m likely to use.
 Sub With Code Trying a sub-topic
-my $test = MyStuff->new(); if ( ! $test ) { printf {*STDERR} "Error.\n"; } Final Thoughts It took me over a week to figure out how to extract what I needed from my old Google blogger account, and now that I’ve done that, I’m … happy enough … with the results....</p></div><footer class=entry-footer><span title="2022-05-16 21:52:30 -0400 -0400">16 May 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Trying Hugo" href=https://blog.vollink.nyc/post/2022/05/trying-hugo/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>Linux Command Prompt in Color</h2></header><div class=entry-content><p>In this modern world, basically every terminal is compatible with VT-52 terminal sequences.  These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux.  Further, most of these support emoji and 256 colors. Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt.  This is great, and probably will work just fine, but I find it to be painful....</p></div><footer class=entry-footer><span title="2021-11-19 04:21:00.001 -0500 -0500">19 Nov 2021</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Linux Command Prompt in Color" href=https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/></a></article><footer class=page-footer><nav class=pagination><a class=next href=https://blog.vollink.nyc/tags/blog/page/2/>Next »</a></nav></footer></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
+my $test = MyStuff->new(); if ( ! $test ) { printf {*STDERR} "Error.\n"; } Final Thoughts It took me over a week to figure out how to extract what I needed from my old Google blogger account, and now that I’ve done that, I’m … happy enough … with the results....</p></div><footer class=entry-footer><span title="2022-05-16 21:52:30 -0400 -0400">16 May 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Trying Hugo" href=https://blog.vollink.nyc/post/2022/05/trying-hugo/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>Linux Command Prompt in Color</h2></header><div class=entry-content><p>In this modern world, basically every terminal is compatible with VT-52 terminal sequences. These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux. Further, most of these support emoji and 256 colors.
+Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt. This is great, and probably will work just fine, but I find it to be painful....</p></div><footer class=entry-footer><span title="2021-11-19 04:21:00.001 -0500 -0500">19 Nov 2021</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Linux Command Prompt in Color" href=https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/></a></article><footer class=page-footer><nav class=pagination><a class=next href=https://blog.vollink.nyc/tags/blog/page/2/>Next »</a></nav></footer></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
 <span>Powered by
 <a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
         <a href=https://git.io/hugopapermod rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentcolor"><path d="M12 6H0l6-6z"/></svg></a><script>let menu=document.getElementById("menu");menu&&(menu.scrollLeft=localStorage.getItem("menu-scroll-position"),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}),document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(t){t.preventDefault();var e=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView({behavior:"smooth"}),e==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${e}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{document.body.className.includes("dark")?(document.body.classList.remove("dark"),localStorage.setItem("pref-theme","light")):(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))})</script></body></html>
\ No newline at end of file
diff --git a/htdocs/tags/blog/index.xml b/htdocs/tags/blog/index.xml
index 33745272d..4834ac895 100644
--- a/htdocs/tags/blog/index.xml
+++ b/htdocs/tags/blog/index.xml
@@ -45,7 +45,8 @@ my $test = MyStuff-&amp;gt;new(); if ( ! $test ) { printf {*STDERR} &amp;#34;Err
       <pubDate>Fri, 19 Nov 2021 04:21:00 -0500</pubDate>
       
       <guid>https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/</guid>
-      <description>In this modern world, basically every terminal is compatible with VT-52 terminal sequences.&amp;nbsp; These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux.&amp;nbsp; Further, most of these support emoji and 256 colors.  Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt.&amp;nbsp; This is great, and probably will work just fine, but I find it to be painful.</description>
+      <description>In this modern world, basically every terminal is compatible with VT-52 terminal sequences. These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux. Further, most of these support emoji and 256 colors.
+Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt. This is great, and probably will work just fine, but I find it to be painful.</description>
     </item>
     
     <item>
diff --git a/htdocs/tags/geek/index.html b/htdocs/tags/geek/index.html
index ea9d6b253..29f6fae11 100644
--- a/htdocs/tags/geek/index.html
+++ b/htdocs/tags/geek/index.html
@@ -5,7 +5,8 @@ Terminal in color This shows my terminal prompt in approximately the colors that
 I recently came across the concept of utility containers. Up to now, all the containers I run are meant to run all the time, and be easily replaced by spinning up a replacement container. Utility containers, on the other hand, are literally containers that hold the bits needed to process input data into output data, do that process, then exit....</p></div><footer class=entry-footer><span title="2022-05-21 15:34:49 -0400 -0400">21 May 2022</span>&nbsp;·&nbsp;5 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Test: Using a Docker image to Build This Blog" href=https://blog.vollink.nyc/post/2022/05/test-docker-blog/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>Trying Hugo</h2></header><div class=entry-content><p>This is a post where I’m literally doing nothing but testing hugo to see if it will work for what I need.
 Turns out, it works pretty well. Here are some features I’m likely to use.
 Sub With Code Trying a sub-topic
-my $test = MyStuff->new(); if ( ! $test ) { printf {*STDERR} "Error.\n"; } Final Thoughts It took me over a week to figure out how to extract what I needed from my old Google blogger account, and now that I’ve done that, I’m … happy enough … with the results....</p></div><footer class=entry-footer><span title="2022-05-16 21:52:30 -0400 -0400">16 May 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Trying Hugo" href=https://blog.vollink.nyc/post/2022/05/trying-hugo/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>[Tech] Web Server Notes</h2></header><div class=entry-content><p>This is a link to my notes on how I run my web servers at home, hosted on my home servers. https://www.home.vollink.com/gary/setup.html</p></div><footer class=entry-footer><span title="2018-10-30 12:00:00 -0400 -0400">30 Oct 2018</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to [Tech] Web Server Notes" href=https://blog.vollink.nyc/post/2018/10/tech-web-server-notes/></a></article><footer class=page-footer><nav class=pagination><a class=next href=https://blog.vollink.nyc/tags/geek/page/2/>Next »</a></nav></footer></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
+my $test = MyStuff->new(); if ( ! $test ) { printf {*STDERR} "Error.\n"; } Final Thoughts It took me over a week to figure out how to extract what I needed from my old Google blogger account, and now that I’ve done that, I’m … happy enough … with the results....</p></div><footer class=entry-footer><span title="2022-05-16 21:52:30 -0400 -0400">16 May 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Trying Hugo" href=https://blog.vollink.nyc/post/2022/05/trying-hugo/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>Linux Command Prompt in Color</h2></header><div class=entry-content><p>In this modern world, basically every terminal is compatible with VT-52 terminal sequences. These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux. Further, most of these support emoji and 256 colors.
+Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt. This is great, and probably will work just fine, but I find it to be painful....</p></div><footer class=entry-footer><span title="2021-11-19 04:21:00.001 -0500 -0500">19 Nov 2021</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Linux Command Prompt in Color" href=https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/></a></article><footer class=page-footer><nav class=pagination><a class=next href=https://blog.vollink.nyc/tags/geek/page/2/>Next »</a></nav></footer></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
 <span>Powered by
 <a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
         <a href=https://git.io/hugopapermod rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentcolor"><path d="M12 6H0l6-6z"/></svg></a><script>let menu=document.getElementById("menu");menu&&(menu.scrollLeft=localStorage.getItem("menu-scroll-position"),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}),document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(t){t.preventDefault();var e=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView({behavior:"smooth"}),e==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${e}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{document.body.className.includes("dark")?(document.body.classList.remove("dark"),localStorage.setItem("pref-theme","light")):(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))})</script></body></html>
\ No newline at end of file
diff --git a/htdocs/tags/geek/index.xml b/htdocs/tags/geek/index.xml
index 812a7a63f..cfe0cffd6 100644
--- a/htdocs/tags/geek/index.xml
+++ b/htdocs/tags/geek/index.xml
@@ -39,6 +39,16 @@ Sub With Code Trying a sub-topic
 my $test = MyStuff-&amp;gt;new(); if ( ! $test ) { printf {*STDERR} &amp;#34;Error.\n&amp;#34;; } Final Thoughts It took me over a week to figure out how to extract what I needed from my old Google blogger account, and now that I&amp;rsquo;ve done that, I&amp;rsquo;m &amp;hellip; happy enough &amp;hellip; with the results.</description>
     </item>
     
+    <item>
+      <title>Linux Command Prompt in Color</title>
+      <link>https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/</link>
+      <pubDate>Fri, 19 Nov 2021 04:21:00 -0500</pubDate>
+      
+      <guid>https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/</guid>
+      <description>In this modern world, basically every terminal is compatible with VT-52 terminal sequences. These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux. Further, most of these support emoji and 256 colors.
+Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt. This is great, and probably will work just fine, but I find it to be painful.</description>
+    </item>
+    
     <item>
       <title>[Tech] Web Server Notes</title>
       <link>https://blog.vollink.nyc/post/2018/10/tech-web-server-notes/</link>
diff --git a/htdocs/tags/geek/page/2/index.html b/htdocs/tags/geek/page/2/index.html
index 3b71d45da..ccaadcab9 100644
--- a/htdocs/tags/geek/page/2/index.html
+++ b/htdocs/tags/geek/page/2/index.html
@@ -1,10 +1,10 @@
 <!doctype html><html lang=en dir=auto><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>geek | On My Mind...</title><meta name=keywords content><meta name=description content="Gary Allen's Blog"><meta name=author content="Gary Allen Vollink"><link rel=canonical href=https://blog.vollink.nyc/tags/geek/><link crossorigin=anonymous href=/assets/css/stylesheet.min.043dbe50dd3b5aeece8e1fd6b52fdb9ce2bb5c714d321cc709b5e740e61345eb.css integrity="sha256-BD2+UN07Wu7Ojh/WtS/bnOK7XHFNMhzHCbXnQOYTRes=" rel="preload stylesheet" as=style><link rel=icon href=https://blog.vollink.nyc/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://blog.vollink.nyc/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://blog.vollink.nyc/favicon-32x32.png><link rel=apple-touch-icon href=https://blog.vollink.nyc/apple-touch-icon.png><link rel=mask-icon href=https://blog.vollink.nyc/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://blog.vollink.nyc/tags/geek/index.xml><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--hljs-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:title" content="geek"><meta property="og:description" content="Gary Allen's Blog"><meta property="og:type" content="website"><meta property="og:url" content="https://blog.vollink.nyc/tags/geek/"><meta property="og:site_name" content="On My Mind..."><meta name=twitter:card content="summary"><meta name=twitter:title content="geek"><meta name=twitter:description content="Gary Allen's Blog"></head><body class=list id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=https://blog.vollink.nyc/ accesskey=h title="Home (Alt + H)"><img src=https://blog.vollink.nyc/AllenWrench.gif alt=logo aria-label=logo height=35>Home</a>
-<span class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></span></div><ul id=menu><li><a href=https://blog.vollink.nyc/post/ title=Posts><span>Posts</span></a></li><li><a href=https://blog.vollink.nyc/tags/ title=Tags><span>Tags</span></a></li><li><a href=https://home.vollink.com/ title=home.vollink.com><span>home.vollink.com</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://blog.vollink.nyc/>Home</a>&nbsp;»&nbsp;<a href=https://blog.vollink.nyc/tags/>Tags</a></div><h1>geek</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2>[Tech/PC] VirtualBox, Windows 7 and a new CPU</h2></header><div class=entry-content><p>As I've done from time to time, this blog serves as a bit of a bench-notes of what I did.  However, maybe someone else hits the same problem, and finds my blog via search.
+<span class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></span></div><ul id=menu><li><a href=https://blog.vollink.nyc/post/ title=Posts><span>Posts</span></a></li><li><a href=https://blog.vollink.nyc/tags/ title=Tags><span>Tags</span></a></li><li><a href=https://home.vollink.com/ title=home.vollink.com><span>home.vollink.com</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://blog.vollink.nyc/>Home</a>&nbsp;»&nbsp;<a href=https://blog.vollink.nyc/tags/>Tags</a></div><h1>geek</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2>[Tech] Web Server Notes</h2></header><div class=entry-content><p>This is a link to my notes on how I run my web servers at home, hosted on my home servers. https://www.home.vollink.com/gary/setup.html</p></div><footer class=entry-footer><span title="2018-10-30 12:00:00 -0400 -0400">30 Oct 2018</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to [Tech] Web Server Notes" href=https://blog.vollink.nyc/post/2018/10/tech-web-server-notes/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>[Tech/PC] VirtualBox, Windows 7 and a new CPU</h2></header><div class=entry-content><p>As I've done from time to time, this blog serves as a bit of a bench-notes of what I did.  However, maybe someone else hits the same problem, and finds my blog via search.
 About a month back, the new nVidia 2080 Ti card was announced.  I decided to hit up eBay to see if anyone was selling off a 1080 Ti, and I was not disappointed in the price drops....</p></div><footer class=entry-footer><span title="2018-09-15 12:00:00 -0400 -0400">15 Sep 2018</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to [Tech/PC] VirtualBox, Windows 7 and a new CPU" href=https://blog.vollink.nyc/post/2018/09/tech-pc-virtualbox-windows-7-and-a-new-cpu/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>[Shopping] eBuyer Beware</h2></header><div class=entry-content><p>I know this.  Read the fine print.  I didn't do that.  The rest is geeky details having to do with rack-mountable servers.
 I have a 12U rack.  Sort-of an end-table next to the couch.  I have two servers.  One of them is happily racked.  The other one is awkwardly sitting sideways across the top of the rack.
 I jumped on eBay a week ago, looking to find the rails I need....</p></div><footer class=entry-footer><span title="2018-08-25 12:00:00 -0400 -0400">25 Aug 2018</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to [Shopping] eBuyer Beware" href=https://blog.vollink.nyc/post/2018/08/shopping-ebuyer-beware/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>[Geek] Authban : 4 Years Later</h2></header><div class=entry-content><p>Four years ago, I wrote about a script that I had been working on called Authban (though I didn't name it at the time):
 http://blog.vollink.com/2011/09/geek-attack-vectors-and-twitter.html
-I first started running a custom script to block IP addresses that tried too many times to login to ssh back in 2010.  At the time, the script (and my home web host) was running on an Ubuntu virtual server.  The name, Authban, surfaced in early 2011, as I organized the script to do more than just block ssh....</p></div><footer class=entry-footer><span title="2015-09-16 18:30:00 -0400 -0400">16 Sep 2015</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to [Geek] Authban : 4 Years Later" href=https://blog.vollink.nyc/post/2015/09/geek-authban-4-years-later/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>[Geek] The Ubiquitous Computer Mouse</h2></header><div class=entry-content><p>Xerox Alto Mouse (1973) The computer mouse has been a basic part of computing for about 20 years now (25 if you were a Mac early-adopter, and even longer if you are a Xerox Alto power-user).  Up until recently, innovations with mouses have been about adding more buttons, and scroll wheels.  Now, with Smart-Phones becoming more and more popular, things like multi-touch and gestures are being added too....</p></div><footer class=entry-footer><span title="2011-09-17 22:38:00 -0400 -0400">17 Sep 2011</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to [Geek] The Ubiquitous Computer Mouse" href=https://blog.vollink.nyc/post/2011/09/geek-the-ubiquitous-computer-mouse/></a></article><footer class=page-footer><nav class=pagination><a class=prev href=https://blog.vollink.nyc/tags/geek/>« Prev</a>
+I first started running a custom script to block IP addresses that tried too many times to login to ssh back in 2010.  At the time, the script (and my home web host) was running on an Ubuntu virtual server.  The name, Authban, surfaced in early 2011, as I organized the script to do more than just block ssh....</p></div><footer class=entry-footer><span title="2015-09-16 18:30:00 -0400 -0400">16 Sep 2015</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to [Geek] Authban : 4 Years Later" href=https://blog.vollink.nyc/post/2015/09/geek-authban-4-years-later/></a></article><footer class=page-footer><nav class=pagination><a class=prev href=https://blog.vollink.nyc/tags/geek/>« Prev</a>
 <a class=next href=https://blog.vollink.nyc/tags/geek/page/3/>Next »</a></nav></footer></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
 <span>Powered by
 <a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
diff --git a/htdocs/tags/geek/page/3/index.html b/htdocs/tags/geek/page/3/index.html
index 51a9d520e..c729ec2fc 100644
--- a/htdocs/tags/geek/page/3/index.html
+++ b/htdocs/tags/geek/page/3/index.html
@@ -1,7 +1,6 @@
 <!doctype html><html lang=en dir=auto><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>geek | On My Mind...</title><meta name=keywords content><meta name=description content="Gary Allen's Blog"><meta name=author content="Gary Allen Vollink"><link rel=canonical href=https://blog.vollink.nyc/tags/geek/><link crossorigin=anonymous href=/assets/css/stylesheet.min.043dbe50dd3b5aeece8e1fd6b52fdb9ce2bb5c714d321cc709b5e740e61345eb.css integrity="sha256-BD2+UN07Wu7Ojh/WtS/bnOK7XHFNMhzHCbXnQOYTRes=" rel="preload stylesheet" as=style><link rel=icon href=https://blog.vollink.nyc/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://blog.vollink.nyc/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://blog.vollink.nyc/favicon-32x32.png><link rel=apple-touch-icon href=https://blog.vollink.nyc/apple-touch-icon.png><link rel=mask-icon href=https://blog.vollink.nyc/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://blog.vollink.nyc/tags/geek/index.xml><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--hljs-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:title" content="geek"><meta property="og:description" content="Gary Allen's Blog"><meta property="og:type" content="website"><meta property="og:url" content="https://blog.vollink.nyc/tags/geek/"><meta property="og:site_name" content="On My Mind..."><meta name=twitter:card content="summary"><meta name=twitter:title content="geek"><meta name=twitter:description content="Gary Allen's Blog"></head><body class=list id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=https://blog.vollink.nyc/ accesskey=h title="Home (Alt + H)"><img src=https://blog.vollink.nyc/AllenWrench.gif alt=logo aria-label=logo height=35>Home</a>
-<span class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></span></div><ul id=menu><li><a href=https://blog.vollink.nyc/post/ title=Posts><span>Posts</span></a></li><li><a href=https://blog.vollink.nyc/tags/ title=Tags><span>Tags</span></a></li><li><a href=https://home.vollink.com/ title=home.vollink.com><span>home.vollink.com</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://blog.vollink.nyc/>Home</a>&nbsp;»&nbsp;<a href=https://blog.vollink.nyc/tags/>Tags</a></div><h1>geek</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2>[Geek] Attack Vectors and Twitter</h2></header><div class=entry-content><p>I wrote a script some time ago, that basically parsed the auth logs on my web server looking for IP addresses that try, and fail, to log in, multiple times.  Over the years, I've continued to expand what it does, and what it could do. At first, it would note something, and send me an e-mail, and I'd get to it, and it would continue to e-mail me once every hour until I did....</p></div><footer class=entry-footer><span title="2011-09-17 01:15:00 -0400 -0400">17 Sep 2011</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to [Geek] Attack Vectors and Twitter" href=https://blog.vollink.nyc/post/2011/09/geek-attack-vectors-and-twitter/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>Apple Admits iPhone Can't Compete, Targets Android with Patent Suits</h2></header><div class=entry-content><p>Admitting that the iPhone can no longer feature compete with the fast moving open source platform, Android, Apple Inc dusts off some patents that could be stretched to cover some Android features and starts filing lawsuits.
-Gone are the days when Apple could just tell people to use their phone and the difference in quality would be obvious.  These days, even the new Windows phones are better than iPhones, so to try to save it's market share, Apple has decided to sue instead of compete....</p></div><footer class=entry-footer><span title="2011-01-03 10:04:00 -0500 -0500">3 Jan 2011</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Apple Admits iPhone Can't Compete, Targets Android with Patent Suits" href=https://blog.vollink.nyc/post/2011/01/apple-admits-iphone-can-t-compete-targets-android-with-patent-suits/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>Getting Rid Of Old Technology</h2></header><div class=entry-content><p>Today, I gave away a second phonograph player that I own.  I've owned two phonograph players for at least 15 years.  Neither of them are "DJ units", just standard home units manufactured in '87 and '91.  The one I gave away isn't as good as the other one, but I had bought it myself.  The better one, that I still use, was given to me.  But one day, maybe I would need the other unit....</p></div><footer class=entry-footer><span title="2010-09-10 09:00:00.002 -0400 -0400">10 Sep 2010</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Getting Rid Of Old Technology" href=https://blog.vollink.nyc/post/2010/09/getting-rid-of-old-technology/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>[dev] CHAIR Programming Platform 3.0</h2></header><div class=entry-content><p>What is CHAIR?
-CHAIR is an offset platform for programming, which is specifically made to support a programmer's approach to offset horizontal surface interfacing to tables. It does not qualify as a fully integrated development environment, but instead is a purpose built platform for supporting a programmer without getting in the way of what the programmer does best! As a programming platform CHAIR is already proven to lead to greatly reduced project timelines when compared to similar projects done without the CHAIR Platform....</p></div><footer class=entry-footer><span title="2009-03-31 19:31:00 -0400 -0400">31 Mar 2009</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to [dev] CHAIR Programming Platform 3.0" href=https://blog.vollink.nyc/post/2009/03/dev-chair-programming-platform-3-0/></a></article><footer class=page-footer><nav class=pagination><a class=prev href=https://blog.vollink.nyc/tags/geek/page/2/>« Prev</a>
+<span class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></span></div><ul id=menu><li><a href=https://blog.vollink.nyc/post/ title=Posts><span>Posts</span></a></li><li><a href=https://blog.vollink.nyc/tags/ title=Tags><span>Tags</span></a></li><li><a href=https://home.vollink.com/ title=home.vollink.com><span>home.vollink.com</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://blog.vollink.nyc/>Home</a>&nbsp;»&nbsp;<a href=https://blog.vollink.nyc/tags/>Tags</a></div><h1>geek</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2>[Geek] The Ubiquitous Computer Mouse</h2></header><div class=entry-content><p>Xerox Alto Mouse (1973) The computer mouse has been a basic part of computing for about 20 years now (25 if you were a Mac early-adopter, and even longer if you are a Xerox Alto power-user).  Up until recently, innovations with mouses have been about adding more buttons, and scroll wheels.  Now, with Smart-Phones becoming more and more popular, things like multi-touch and gestures are being added too....</p></div><footer class=entry-footer><span title="2011-09-17 22:38:00 -0400 -0400">17 Sep 2011</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to [Geek] The Ubiquitous Computer Mouse" href=https://blog.vollink.nyc/post/2011/09/geek-the-ubiquitous-computer-mouse/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>[Geek] Attack Vectors and Twitter</h2></header><div class=entry-content><p>I wrote a script some time ago, that basically parsed the auth logs on my web server looking for IP addresses that try, and fail, to log in, multiple times.  Over the years, I've continued to expand what it does, and what it could do. At first, it would note something, and send me an e-mail, and I'd get to it, and it would continue to e-mail me once every hour until I did....</p></div><footer class=entry-footer><span title="2011-09-17 01:15:00 -0400 -0400">17 Sep 2011</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to [Geek] Attack Vectors and Twitter" href=https://blog.vollink.nyc/post/2011/09/geek-attack-vectors-and-twitter/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>Apple Admits iPhone Can't Compete, Targets Android with Patent Suits</h2></header><div class=entry-content><p>Admitting that the iPhone can no longer feature compete with the fast moving open source platform, Android, Apple Inc dusts off some patents that could be stretched to cover some Android features and starts filing lawsuits.
+Gone are the days when Apple could just tell people to use their phone and the difference in quality would be obvious.  These days, even the new Windows phones are better than iPhones, so to try to save it's market share, Apple has decided to sue instead of compete....</p></div><footer class=entry-footer><span title="2011-01-03 10:04:00 -0500 -0500">3 Jan 2011</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Apple Admits iPhone Can't Compete, Targets Android with Patent Suits" href=https://blog.vollink.nyc/post/2011/01/apple-admits-iphone-can-t-compete-targets-android-with-patent-suits/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>Getting Rid Of Old Technology</h2></header><div class=entry-content><p>Today, I gave away a second phonograph player that I own.  I've owned two phonograph players for at least 15 years.  Neither of them are "DJ units", just standard home units manufactured in '87 and '91.  The one I gave away isn't as good as the other one, but I had bought it myself.  The better one, that I still use, was given to me.  But one day, maybe I would need the other unit....</p></div><footer class=entry-footer><span title="2010-09-10 09:00:00.002 -0400 -0400">10 Sep 2010</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Getting Rid Of Old Technology" href=https://blog.vollink.nyc/post/2010/09/getting-rid-of-old-technology/></a></article><footer class=page-footer><nav class=pagination><a class=prev href=https://blog.vollink.nyc/tags/geek/page/2/>« Prev</a>
 <a class=next href=https://blog.vollink.nyc/tags/geek/page/4/>Next »</a></nav></footer></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
 <span>Powered by
 <a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
diff --git a/htdocs/tags/geek/page/4/index.html b/htdocs/tags/geek/page/4/index.html
index 94d2a1e9d..2950d7e23 100644
--- a/htdocs/tags/geek/page/4/index.html
+++ b/htdocs/tags/geek/page/4/index.html
@@ -1,10 +1,9 @@
 <!doctype html><html lang=en dir=auto><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>geek | On My Mind...</title><meta name=keywords content><meta name=description content="Gary Allen's Blog"><meta name=author content="Gary Allen Vollink"><link rel=canonical href=https://blog.vollink.nyc/tags/geek/><link crossorigin=anonymous href=/assets/css/stylesheet.min.043dbe50dd3b5aeece8e1fd6b52fdb9ce2bb5c714d321cc709b5e740e61345eb.css integrity="sha256-BD2+UN07Wu7Ojh/WtS/bnOK7XHFNMhzHCbXnQOYTRes=" rel="preload stylesheet" as=style><link rel=icon href=https://blog.vollink.nyc/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://blog.vollink.nyc/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://blog.vollink.nyc/favicon-32x32.png><link rel=apple-touch-icon href=https://blog.vollink.nyc/apple-touch-icon.png><link rel=mask-icon href=https://blog.vollink.nyc/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://blog.vollink.nyc/tags/geek/index.xml><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--hljs-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:title" content="geek"><meta property="og:description" content="Gary Allen's Blog"><meta property="og:type" content="website"><meta property="og:url" content="https://blog.vollink.nyc/tags/geek/"><meta property="og:site_name" content="On My Mind..."><meta name=twitter:card content="summary"><meta name=twitter:title content="geek"><meta name=twitter:description content="Gary Allen's Blog"></head><body class=list id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=https://blog.vollink.nyc/ accesskey=h title="Home (Alt + H)"><img src=https://blog.vollink.nyc/AllenWrench.gif alt=logo aria-label=logo height=35>Home</a>
-<span class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></span></div><ul id=menu><li><a href=https://blog.vollink.nyc/post/ title=Posts><span>Posts</span></a></li><li><a href=https://blog.vollink.nyc/tags/ title=Tags><span>Tags</span></a></li><li><a href=https://home.vollink.com/ title=home.vollink.com><span>home.vollink.com</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://blog.vollink.nyc/>Home</a>&nbsp;»&nbsp;<a href=https://blog.vollink.nyc/tags/>Tags</a></div><h1>geek</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2>Javascript Toolkits; Web Programming</h2></header><div class=entry-content><p>So I've started working with the Dojo Toolkit -- mostly because I ran the demo for it, and I was impressed by what it could do out of the box. It does have a very nicely featured demonstration set.
+<span class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></span></div><ul id=menu><li><a href=https://blog.vollink.nyc/post/ title=Posts><span>Posts</span></a></li><li><a href=https://blog.vollink.nyc/tags/ title=Tags><span>Tags</span></a></li><li><a href=https://home.vollink.com/ title=home.vollink.com><span>home.vollink.com</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://blog.vollink.nyc/>Home</a>&nbsp;»&nbsp;<a href=https://blog.vollink.nyc/tags/>Tags</a></div><h1>geek</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2>[dev] CHAIR Programming Platform 3.0</h2></header><div class=entry-content><p>What is CHAIR?
+CHAIR is an offset platform for programming, which is specifically made to support a programmer's approach to offset horizontal surface interfacing to tables. It does not qualify as a fully integrated development environment, but instead is a purpose built platform for supporting a programmer without getting in the way of what the programmer does best! As a programming platform CHAIR is already proven to lead to greatly reduced project timelines when compared to similar projects done without the CHAIR Platform....</p></div><footer class=entry-footer><span title="2009-03-31 19:31:00 -0400 -0400">31 Mar 2009</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to [dev] CHAIR Programming Platform 3.0" href=https://blog.vollink.nyc/post/2009/03/dev-chair-programming-platform-3-0/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>Javascript Toolkits; Web Programming</h2></header><div class=entry-content><p>So I've started working with the Dojo Toolkit -- mostly because I ran the demo for it, and I was impressed by what it could do out of the box. It does have a very nicely featured demonstration set.
 I've mentioned this to some friends and colleagues, and instead of thoughts or experiences with this toolkit, I got back a whole bunch of comments about why I chose to work with Dojo and not "...</p></div><footer class=entry-footer><span title="2008-08-06 22:00:00 -0400 -0400">6 Aug 2008</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Javascript Toolkits; Web Programming" href=https://blog.vollink.nyc/post/2008/08/javascript-toolkits-web-programming/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>For My Floridian Friends</h2></header><div class=entry-content><p>http://xkcd.net/453/
 Upcoming Hurricanes The XKCD web comic is one of my favorites.</p></div><footer class=entry-footer><span title="2008-07-23 20:03:00 -0400 -0400">23 Jul 2008</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to For My Floridian Friends" href=https://blog.vollink.nyc/post/2008/07/for-my-floridian-friends/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>Me and My Enneagram [Updated]</h2></header><div class=entry-content><p>This is a bit of a meme that's been going around one of my circles of friends. It's this Enneagram test. So, after putting it off for a week, I finally decided to take the first (and longer) of the two tests presented at the link above.
-I will not pretend that I've actually read through what this means or what it might mean, but - generally - I have a tendency of being very central on most personality tests, so -- I've linked the whole result set, with all of the scores, so that you can see the whole picture....</p></div><footer class=entry-footer><span title="2008-07-23 10:27:00 -0400 -0400">23 Jul 2008</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Me and My Enneagram [Updated]" href=https://blog.vollink.nyc/post/2008/07/me-and-my-enneagram-updated/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>First Life</h2></header><div class=entry-content><p>So, you've heard of "Second Life"...
-Clark Boyd over at "The World" (BBC / WGBH) posted a blog entry with a link to a REALLY funny site, so without further introduction
-Get a First Life</p></div><footer class=entry-footer><span title="2008-07-17 19:30:00 -0400 -0400">17 Jul 2008</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to First Life" href=https://blog.vollink.nyc/post/2008/07/first-life/></a></article><footer class=page-footer><nav class=pagination><a class=prev href=https://blog.vollink.nyc/tags/geek/page/3/>« Prev</a>
+I will not pretend that I've actually read through what this means or what it might mean, but - generally - I have a tendency of being very central on most personality tests, so -- I've linked the whole result set, with all of the scores, so that you can see the whole picture....</p></div><footer class=entry-footer><span title="2008-07-23 10:27:00 -0400 -0400">23 Jul 2008</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Me and My Enneagram [Updated]" href=https://blog.vollink.nyc/post/2008/07/me-and-my-enneagram-updated/></a></article><footer class=page-footer><nav class=pagination><a class=prev href=https://blog.vollink.nyc/tags/geek/page/3/>« Prev</a>
 <a class=next href=https://blog.vollink.nyc/tags/geek/page/5/>Next »</a></nav></footer></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
 <span>Powered by
 <a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
diff --git a/htdocs/tags/geek/page/5/index.html b/htdocs/tags/geek/page/5/index.html
index 17911981c..8050a754a 100644
--- a/htdocs/tags/geek/page/5/index.html
+++ b/htdocs/tags/geek/page/5/index.html
@@ -1,13 +1,14 @@
 <!doctype html><html lang=en dir=auto><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>geek | On My Mind...</title><meta name=keywords content><meta name=description content="Gary Allen's Blog"><meta name=author content="Gary Allen Vollink"><link rel=canonical href=https://blog.vollink.nyc/tags/geek/><link crossorigin=anonymous href=/assets/css/stylesheet.min.043dbe50dd3b5aeece8e1fd6b52fdb9ce2bb5c714d321cc709b5e740e61345eb.css integrity="sha256-BD2+UN07Wu7Ojh/WtS/bnOK7XHFNMhzHCbXnQOYTRes=" rel="preload stylesheet" as=style><link rel=icon href=https://blog.vollink.nyc/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://blog.vollink.nyc/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://blog.vollink.nyc/favicon-32x32.png><link rel=apple-touch-icon href=https://blog.vollink.nyc/apple-touch-icon.png><link rel=mask-icon href=https://blog.vollink.nyc/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://blog.vollink.nyc/tags/geek/index.xml><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--hljs-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:title" content="geek"><meta property="og:description" content="Gary Allen's Blog"><meta property="og:type" content="website"><meta property="og:url" content="https://blog.vollink.nyc/tags/geek/"><meta property="og:site_name" content="On My Mind..."><meta name=twitter:card content="summary"><meta name=twitter:title content="geek"><meta name=twitter:description content="Gary Allen's Blog"></head><body class=list id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=https://blog.vollink.nyc/ accesskey=h title="Home (Alt + H)"><img src=https://blog.vollink.nyc/AllenWrench.gif alt=logo aria-label=logo height=35>Home</a>
-<span class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></span></div><ul id=menu><li><a href=https://blog.vollink.nyc/post/ title=Posts><span>Posts</span></a></li><li><a href=https://blog.vollink.nyc/tags/ title=Tags><span>Tags</span></a></li><li><a href=https://home.vollink.com/ title=home.vollink.com><span>home.vollink.com</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://blog.vollink.nyc/>Home</a>&nbsp;»&nbsp;<a href=https://blog.vollink.nyc/tags/>Tags</a></div><h1>geek</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2>Opinion: VMWare Server 2.0 Beta [Updated]</h2></header><div class=entry-content><p>I've used VMWare Server 2.0 Beta for about three solid hours now...
+<span class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></span></div><ul id=menu><li><a href=https://blog.vollink.nyc/post/ title=Posts><span>Posts</span></a></li><li><a href=https://blog.vollink.nyc/tags/ title=Tags><span>Tags</span></a></li><li><a href=https://home.vollink.com/ title=home.vollink.com><span>home.vollink.com</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://blog.vollink.nyc/>Home</a>&nbsp;»&nbsp;<a href=https://blog.vollink.nyc/tags/>Tags</a></div><h1>geek</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2>First Life</h2></header><div class=entry-content><p>So, you've heard of "Second Life"...
+Clark Boyd over at "The World" (BBC / WGBH) posted a blog entry with a link to a REALLY funny site, so without further introduction
+Get a First Life</p></div><footer class=entry-footer><span title="2008-07-17 19:30:00 -0400 -0400">17 Jul 2008</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to First Life" href=https://blog.vollink.nyc/post/2008/07/first-life/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>Opinion: VMWare Server 2.0 Beta [Updated]</h2></header><div class=entry-content><p>I've used VMWare Server 2.0 Beta for about three solid hours now...
 Things I like.
 Virtual Hardware v. 7 with USB 2.0 support. Tomcat based VM monitoring, is pretty responsive. Does NOT request or attempt to "require" IIS. The Server interface, while different, remains similar.Technical -- I've loaded VMWare-Server beta on two separate Windows XP host systems (I have an Ubuntu as well, but I've had problems in the past loading both "...</p></div><footer class=entry-footer><span title="2008-07-17 10:20:00 -0400 -0400">17 Jul 2008</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Opinion: VMWare Server 2.0 Beta [Updated]" href=https://blog.vollink.nyc/post/2008/07/opinion-vmware-server-2-0-beta-updated/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>Twitter by Proxy</h2></header><div class=entry-content><p>So, I'm done with twitview.
 Twitview uses the web server (vollink.com) to pull my twitter data feed. Once pulled, I turn links into links.
 The twittering view at the right side of this blog now uses twitview, as does the open-social app that I wrote for my iGoogle. I also added twitview to my main homepage.
 Another advantage of this, is that my twitter feed is now also proxied, so will be visible in places where twitter may become blocked or banned....</p></div><footer class=entry-footer><span title="2008-07-13 03:04:00 -0400 -0400">13 Jul 2008</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Twitter by Proxy" href=https://blog.vollink.nyc/post/2008/07/twitter-by-proxy/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>Google Apps, iGoogle and Facebook</h2></header><div class=entry-content><p>I've added Google Apps to my domain. I had already started handing pieces of my domain to Google when I started letting them host my blog. At the same time, I'm starting to take pieces back. More on that later...
-I started playing with the Open Social API today. Really simple thing -- I realized that I wanted to put some basic, static HTML in a box on both my Facebook page and to my iGoogle page....</p></div><footer class=entry-footer><span title="2008-07-12 19:35:00 -0400 -0400">12 Jul 2008</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Google Apps, iGoogle and Facebook" href=https://blog.vollink.nyc/post/2008/07/google-apps-igoogle-and-facebook/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2>Web Ads</h2></header><div class=entry-content><p>A few times in the last few months, I've thought to actually go out of my way and click on a Web Ad. In every case, the web ad was non-traditional and insisted on doing something which got it blocked. Seems that web ads would be much more successful if they didn't demand dumb user behavior...
-Middle Click
-In all latest version graphical web browsers, a middle button mouse click is available to open the link in a new tab....</p></div><footer class=entry-footer><span title="2008-06-15 13:40:00 -0400 -0400">15 Jun 2008</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Web Ads" href=https://blog.vollink.nyc/post/2008/06/web-ads/></a></article><footer class=page-footer><nav class=pagination><a class=prev href=https://blog.vollink.nyc/tags/geek/page/4/>« Prev</a></nav></footer></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
+I started playing with the Open Social API today. Really simple thing -- I realized that I wanted to put some basic, static HTML in a box on both my Facebook page and to my iGoogle page....</p></div><footer class=entry-footer><span title="2008-07-12 19:35:00 -0400 -0400">12 Jul 2008</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Google Apps, iGoogle and Facebook" href=https://blog.vollink.nyc/post/2008/07/google-apps-igoogle-and-facebook/></a></article><footer class=page-footer><nav class=pagination><a class=prev href=https://blog.vollink.nyc/tags/geek/page/4/>« Prev</a>
+<a class=next href=https://blog.vollink.nyc/tags/geek/page/6/>Next »</a></nav></footer></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
 <span>Powered by
 <a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
         <a href=https://git.io/hugopapermod rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentcolor"><path d="M12 6H0l6-6z"/></svg></a><script>let menu=document.getElementById("menu");menu&&(menu.scrollLeft=localStorage.getItem("menu-scroll-position"),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}),document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(t){t.preventDefault();var e=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView({behavior:"smooth"}),e==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${e}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{document.body.className.includes("dark")?(document.body.classList.remove("dark"),localStorage.setItem("pref-theme","light")):(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))})</script></body></html>
\ No newline at end of file
diff --git a/htdocs/tags/geek/page/6/index.html b/htdocs/tags/geek/page/6/index.html
new file mode 100644
index 000000000..f91c44f6b
--- /dev/null
+++ b/htdocs/tags/geek/page/6/index.html
@@ -0,0 +1,7 @@
+<!doctype html><html lang=en dir=auto><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>geek | On My Mind...</title><meta name=keywords content><meta name=description content="Gary Allen's Blog"><meta name=author content="Gary Allen Vollink"><link rel=canonical href=https://blog.vollink.nyc/tags/geek/><link crossorigin=anonymous href=/assets/css/stylesheet.min.043dbe50dd3b5aeece8e1fd6b52fdb9ce2bb5c714d321cc709b5e740e61345eb.css integrity="sha256-BD2+UN07Wu7Ojh/WtS/bnOK7XHFNMhzHCbXnQOYTRes=" rel="preload stylesheet" as=style><link rel=icon href=https://blog.vollink.nyc/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://blog.vollink.nyc/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://blog.vollink.nyc/favicon-32x32.png><link rel=apple-touch-icon href=https://blog.vollink.nyc/apple-touch-icon.png><link rel=mask-icon href=https://blog.vollink.nyc/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://blog.vollink.nyc/tags/geek/index.xml><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--hljs-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:title" content="geek"><meta property="og:description" content="Gary Allen's Blog"><meta property="og:type" content="website"><meta property="og:url" content="https://blog.vollink.nyc/tags/geek/"><meta property="og:site_name" content="On My Mind..."><meta name=twitter:card content="summary"><meta name=twitter:title content="geek"><meta name=twitter:description content="Gary Allen's Blog"></head><body class=list id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=https://blog.vollink.nyc/ accesskey=h title="Home (Alt + H)"><img src=https://blog.vollink.nyc/AllenWrench.gif alt=logo aria-label=logo height=35>Home</a>
+<span class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></span></div><ul id=menu><li><a href=https://blog.vollink.nyc/post/ title=Posts><span>Posts</span></a></li><li><a href=https://blog.vollink.nyc/tags/ title=Tags><span>Tags</span></a></li><li><a href=https://home.vollink.com/ title=home.vollink.com><span>home.vollink.com</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://blog.vollink.nyc/>Home</a>&nbsp;»&nbsp;<a href=https://blog.vollink.nyc/tags/>Tags</a></div><h1>geek</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2>Web Ads</h2></header><div class=entry-content><p>A few times in the last few months, I've thought to actually go out of my way and click on a Web Ad. In every case, the web ad was non-traditional and insisted on doing something which got it blocked. Seems that web ads would be much more successful if they didn't demand dumb user behavior...
+Middle Click
+In all latest version graphical web browsers, a middle button mouse click is available to open the link in a new tab....</p></div><footer class=entry-footer><span title="2008-06-15 13:40:00 -0400 -0400">15 Jun 2008</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Web Ads" href=https://blog.vollink.nyc/post/2008/06/web-ads/></a></article><footer class=page-footer><nav class=pagination><a class=prev href=https://blog.vollink.nyc/tags/geek/page/5/>« Prev</a></nav></footer></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
+<span>Powered by
+<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
+        <a href=https://git.io/hugopapermod rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentcolor"><path d="M12 6H0l6-6z"/></svg></a><script>let menu=document.getElementById("menu");menu&&(menu.scrollLeft=localStorage.getItem("menu-scroll-position"),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}),document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(t){t.preventDefault();var e=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView({behavior:"smooth"}),e==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${e}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{document.body.className.includes("dark")?(document.body.classList.remove("dark"),localStorage.setItem("pref-theme","light")):(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))})</script></body></html>
\ No newline at end of file
diff --git a/htdocs/tags/how-to/index.html b/htdocs/tags/how-to/index.html
new file mode 100644
index 000000000..0b92ff6df
--- /dev/null
+++ b/htdocs/tags/how-to/index.html
@@ -0,0 +1,6 @@
+<!doctype html><html lang=en dir=auto><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>how-to | On My Mind...</title><meta name=keywords content><meta name=description content="Gary Allen's Blog"><meta name=author content="Gary Allen Vollink"><link rel=canonical href=https://blog.vollink.nyc/tags/how-to/><link crossorigin=anonymous href=/assets/css/stylesheet.min.043dbe50dd3b5aeece8e1fd6b52fdb9ce2bb5c714d321cc709b5e740e61345eb.css integrity="sha256-BD2+UN07Wu7Ojh/WtS/bnOK7XHFNMhzHCbXnQOYTRes=" rel="preload stylesheet" as=style><link rel=icon href=https://blog.vollink.nyc/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://blog.vollink.nyc/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://blog.vollink.nyc/favicon-32x32.png><link rel=apple-touch-icon href=https://blog.vollink.nyc/apple-touch-icon.png><link rel=mask-icon href=https://blog.vollink.nyc/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://blog.vollink.nyc/tags/how-to/index.xml><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--hljs-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:title" content="how-to"><meta property="og:description" content="Gary Allen's Blog"><meta property="og:type" content="website"><meta property="og:url" content="https://blog.vollink.nyc/tags/how-to/"><meta property="og:site_name" content="On My Mind..."><meta name=twitter:card content="summary"><meta name=twitter:title content="how-to"><meta name=twitter:description content="Gary Allen's Blog"></head><body class=list id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=https://blog.vollink.nyc/ accesskey=h title="Home (Alt + H)"><img src=https://blog.vollink.nyc/AllenWrench.gif alt=logo aria-label=logo height=35>Home</a>
+<span class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></span></div><ul id=menu><li><a href=https://blog.vollink.nyc/post/ title=Posts><span>Posts</span></a></li><li><a href=https://blog.vollink.nyc/tags/ title=Tags><span>Tags</span></a></li><li><a href=https://home.vollink.com/ title=home.vollink.com><span>home.vollink.com</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://blog.vollink.nyc/>Home</a>&nbsp;»&nbsp;<a href=https://blog.vollink.nyc/tags/>Tags</a></div><h1>how-to</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2>Linux Command Prompt in Color</h2></header><div class=entry-content><p>In this modern world, basically every terminal is compatible with VT-52 terminal sequences. These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux. Further, most of these support emoji and 256 colors.
+Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt. This is great, and probably will work just fine, but I find it to be painful....</p></div><footer class=entry-footer><span title="2021-11-19 04:21:00.001 -0500 -0500">19 Nov 2021</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Linux Command Prompt in Color" href=https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/></a></article></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
+<span>Powered by
+<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
+        <a href=https://git.io/hugopapermod rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentcolor"><path d="M12 6H0l6-6z"/></svg></a><script>let menu=document.getElementById("menu");menu&&(menu.scrollLeft=localStorage.getItem("menu-scroll-position"),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}),document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(t){t.preventDefault();var e=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView({behavior:"smooth"}),e==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${e}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{document.body.className.includes("dark")?(document.body.classList.remove("dark"),localStorage.setItem("pref-theme","light")):(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))})</script></body></html>
\ No newline at end of file
diff --git a/htdocs/tags/how-to/index.xml b/htdocs/tags/how-to/index.xml
new file mode 100644
index 000000000..16e3d4919
--- /dev/null
+++ b/htdocs/tags/how-to/index.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
+  <channel>
+    <title>how-to on On My Mind...</title>
+    <link>https://blog.vollink.nyc/tags/how-to/</link>
+    <description>Recent content in how-to on On My Mind...</description>
+    <generator>Hugo -- gohugo.io</generator>
+    <lastBuildDate>Fri, 19 Nov 2021 04:21:00 -0500</lastBuildDate><atom:link href="https://blog.vollink.nyc/tags/how-to/index.xml" rel="self" type="application/rss+xml" />
+    <item>
+      <title>Linux Command Prompt in Color</title>
+      <link>https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/</link>
+      <pubDate>Fri, 19 Nov 2021 04:21:00 -0500</pubDate>
+      
+      <guid>https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/</guid>
+      <description>In this modern world, basically every terminal is compatible with VT-52 terminal sequences. These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux. Further, most of these support emoji and 256 colors.
+Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt. This is great, and probably will work just fine, but I find it to be painful.</description>
+    </item>
+    
+  </channel>
+</rss>
diff --git a/htdocs/tags/how-to/page/1/index.html b/htdocs/tags/how-to/page/1/index.html
new file mode 100644
index 000000000..751d863ed
--- /dev/null
+++ b/htdocs/tags/how-to/page/1/index.html
@@ -0,0 +1 @@
+<!doctype html><html lang=en><head><title>https://blog.vollink.nyc/tags/how-to/</title><link rel=canonical href=https://blog.vollink.nyc/tags/how-to/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://blog.vollink.nyc/tags/how-to/"></head></html>
\ No newline at end of file
diff --git a/htdocs/tags/index.html b/htdocs/tags/index.html
index ce35eac57..52e6a1aa0 100644
--- a/htdocs/tags/index.html
+++ b/htdocs/tags/index.html
@@ -1,5 +1,5 @@
 <!doctype html><html lang=en dir=auto><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Tags | On My Mind...</title><meta name=keywords content><meta name=description content="Gary Allen's Blog"><meta name=author content="Gary Allen Vollink"><link rel=canonical href=https://blog.vollink.nyc/tags/><link crossorigin=anonymous href=/assets/css/stylesheet.min.043dbe50dd3b5aeece8e1fd6b52fdb9ce2bb5c714d321cc709b5e740e61345eb.css integrity="sha256-BD2+UN07Wu7Ojh/WtS/bnOK7XHFNMhzHCbXnQOYTRes=" rel="preload stylesheet" as=style><link rel=icon href=https://blog.vollink.nyc/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://blog.vollink.nyc/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://blog.vollink.nyc/favicon-32x32.png><link rel=apple-touch-icon href=https://blog.vollink.nyc/apple-touch-icon.png><link rel=mask-icon href=https://blog.vollink.nyc/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://blog.vollink.nyc/tags/index.xml><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--hljs-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:title" content="Tags"><meta property="og:description" content="Gary Allen's Blog"><meta property="og:type" content="website"><meta property="og:url" content="https://blog.vollink.nyc/tags/"><meta property="og:site_name" content="On My Mind..."><meta name=twitter:card content="summary"><meta name=twitter:title content="Tags"><meta name=twitter:description content="Gary Allen's Blog"></head><body class=list id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=https://blog.vollink.nyc/ accesskey=h title="Home (Alt + H)"><img src=https://blog.vollink.nyc/AllenWrench.gif alt=logo aria-label=logo height=35>Home</a>
-<span class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></span></div><ul id=menu><li><a href=https://blog.vollink.nyc/post/ title=Posts><span>Posts</span></a></li><li><a href=https://blog.vollink.nyc/tags/ title=Tags><span class=active>Tags</span></a></li><li><a href=https://home.vollink.com/ title=home.vollink.com><span>home.vollink.com</span></a></li></ul></nav></header><main class=main><header class=page-header><h1>Tags</h1></header><ul class=terms-tags><li><a href=https://blog.vollink.nyc/tags/agile-scrum/>agile-scrum <sup><strong><sup>2</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/aircraft/>aircraft <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/art/>art <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/biography/>biography <sup><strong><sup>4</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/blog/>blog <sup><strong><sup>124</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/book-notes/>book-notes <sup><strong><sup>2</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/book-review/>book-review <sup><strong><sup>50</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/boom/>boom <sup><strong><sup>3</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/business/>business <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/childrens/>childrens <sup><strong><sup>6</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/china/>china <sup><strong><sup>3</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/comic-book/>comic-book <sup><strong><sup>3</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/current-events/>current events <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/dev/>dev <sup><strong><sup>8</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/documentary/>documentary <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/drama/>drama <sup><strong><sup>6</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/driving/>driving <sup><strong><sup>5</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/e-mail/>e-mail <sup><strong><sup>3</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/earthquake/>earthquake <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/fantasy/>fantasy <sup><strong><sup>14</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/food/>food <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/geek/>geek <sup><strong><sup>20</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/get-away/>get-away <sup><strong><sup>2</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/globalization/>globalization <sup><strong><sup>2</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/helicopter/>helicopter <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/historic-fiction/>historic-fiction <sup><strong><sup>5</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/history/>history <sup><strong><sup>26</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/horror/>horror <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/howto/>howto <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/human-nature/>human nature <sup><strong><sup>4</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/in-china/>in-china <sup><strong><sup>18</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/india/>india <sup><strong><sup>4</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/it/>it <sup><strong><sup>6</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/joke/>joke <sup><strong><sup>3</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/knowledge/>knowledge <sup><strong><sup>2</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/management/>management <sup><strong><sup>7</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/media/>media <sup><strong><sup>12</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/medical/>medical <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/memoir/>memoir <sup><strong><sup>5</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/meta/>meta <sup><strong><sup>5</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/money/>money <sup><strong><sup>3</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/movie-reviews/>movie-reviews <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/news/>news <sup><strong><sup>10</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/nonfiction/>nonfiction <sup><strong><sup>10</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/personal/>personal <sup><strong><sup>14</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/poetry/>poetry <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/politics/>politics <sup><strong><sup>15</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/recommend/>recommend <sup><strong><sup>38</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/relaxation/>relaxation <sup><strong><sup>8</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/restaurant-review/>restaurant review <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/romantic/>romantic <sup><strong><sup>3</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/science-fiction/>science-fiction <sup><strong><sup>12</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/sff/>sff <sup><strong><sup>24</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/shopping/>shopping <sup><strong><sup>5</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/short-book-reviews/>short-book-reviews <sup><strong><sup>8</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/short-stories/>short-stories <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/space-fantasy/>space-fantasy <sup><strong><sup>3</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/spoiler/>spoiler <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/spring/>spring <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/steampunk/>steampunk <sup><strong><sup>2</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/taxes/>taxes <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/tech/>tech <sup><strong><sup>7</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/tech-review/>tech-review <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/timber/>timber <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/true-crime/>true-crime <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/usb/>USB <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/video/>video <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/virtualization/>virtualization <sup><strong><sup>2</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/web/>web <sup><strong><sup>15</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/work/>work <sup><strong><sup>34</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/young-adult/>young-adult <sup><strong><sup>9</sup></strong></sup></a></li></ul></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
+<span class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></span></div><ul id=menu><li><a href=https://blog.vollink.nyc/post/ title=Posts><span>Posts</span></a></li><li><a href=https://blog.vollink.nyc/tags/ title=Tags><span class=active>Tags</span></a></li><li><a href=https://home.vollink.com/ title=home.vollink.com><span>home.vollink.com</span></a></li></ul></nav></header><main class=main><header class=page-header><h1>Tags</h1></header><ul class=terms-tags><li><a href=https://blog.vollink.nyc/tags/agile-scrum/>agile-scrum <sup><strong><sup>2</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/aircraft/>aircraft <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/art/>art <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/biography/>biography <sup><strong><sup>4</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/blog/>blog <sup><strong><sup>124</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/book-notes/>book-notes <sup><strong><sup>2</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/book-review/>book-review <sup><strong><sup>50</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/boom/>boom <sup><strong><sup>3</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/business/>business <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/childrens/>childrens <sup><strong><sup>6</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/china/>china <sup><strong><sup>3</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/comic-book/>comic-book <sup><strong><sup>3</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/current-events/>current events <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/dev/>dev <sup><strong><sup>8</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/documentary/>documentary <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/drama/>drama <sup><strong><sup>6</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/driving/>driving <sup><strong><sup>5</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/e-mail/>e-mail <sup><strong><sup>3</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/earthquake/>earthquake <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/fantasy/>fantasy <sup><strong><sup>14</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/food/>food <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/geek/>geek <sup><strong><sup>21</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/get-away/>get-away <sup><strong><sup>2</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/globalization/>globalization <sup><strong><sup>2</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/helicopter/>helicopter <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/historic-fiction/>historic-fiction <sup><strong><sup>5</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/history/>history <sup><strong><sup>26</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/horror/>horror <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/how-to/>how-to <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/howto/>howto <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/human-nature/>human nature <sup><strong><sup>4</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/in-china/>in-china <sup><strong><sup>18</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/india/>india <sup><strong><sup>4</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/it/>it <sup><strong><sup>6</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/joke/>joke <sup><strong><sup>3</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/knowledge/>knowledge <sup><strong><sup>2</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/linux/>linux <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/management/>management <sup><strong><sup>7</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/media/>media <sup><strong><sup>12</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/medical/>medical <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/memoir/>memoir <sup><strong><sup>5</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/meta/>meta <sup><strong><sup>5</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/money/>money <sup><strong><sup>3</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/movie-reviews/>movie-reviews <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/news/>news <sup><strong><sup>10</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/nonfiction/>nonfiction <sup><strong><sup>10</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/personal/>personal <sup><strong><sup>14</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/poetry/>poetry <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/politics/>politics <sup><strong><sup>15</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/recommend/>recommend <sup><strong><sup>38</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/relaxation/>relaxation <sup><strong><sup>8</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/restaurant-review/>restaurant review <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/romantic/>romantic <sup><strong><sup>3</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/science-fiction/>science-fiction <sup><strong><sup>12</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/sff/>sff <sup><strong><sup>24</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/shopping/>shopping <sup><strong><sup>5</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/short-book-reviews/>short-book-reviews <sup><strong><sup>8</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/short-stories/>short-stories <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/space-fantasy/>space-fantasy <sup><strong><sup>3</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/spoiler/>spoiler <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/spring/>spring <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/steampunk/>steampunk <sup><strong><sup>2</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/taxes/>taxes <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/tech/>tech <sup><strong><sup>7</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/tech-review/>tech-review <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/timber/>timber <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/true-crime/>true-crime <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/usb/>USB <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/video/>video <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/virtualization/>virtualization <sup><strong><sup>2</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/web/>web <sup><strong><sup>15</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/work/>work <sup><strong><sup>34</sup></strong></sup></a></li><li><a href=https://blog.vollink.nyc/tags/young-adult/>young-adult <sup><strong><sup>9</sup></strong></sup></a></li></ul></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
 <span>Powered by
 <a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
         <a href=https://git.io/hugopapermod rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentcolor"><path d="M12 6H0l6-6z"/></svg></a><script>let menu=document.getElementById("menu");menu&&(menu.scrollLeft=localStorage.getItem("menu-scroll-position"),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}),document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(t){t.preventDefault();var e=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView({behavior:"smooth"}),e==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${e}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{document.body.className.includes("dark")?(document.body.classList.remove("dark"),localStorage.setItem("pref-theme","light")):(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))})</script></body></html>
\ No newline at end of file
diff --git a/htdocs/tags/index.xml b/htdocs/tags/index.xml
index 75f35981f..1e5caa5aa 100644
--- a/htdocs/tags/index.xml
+++ b/htdocs/tags/index.xml
@@ -51,6 +51,24 @@
       <description></description>
     </item>
     
+    <item>
+      <title>how-to</title>
+      <link>https://blog.vollink.nyc/tags/how-to/</link>
+      <pubDate>Fri, 19 Nov 2021 04:21:00 -0500</pubDate>
+      
+      <guid>https://blog.vollink.nyc/tags/how-to/</guid>
+      <description></description>
+    </item>
+    
+    <item>
+      <title>linux</title>
+      <link>https://blog.vollink.nyc/tags/linux/</link>
+      <pubDate>Fri, 19 Nov 2021 04:21:00 -0500</pubDate>
+      
+      <guid>https://blog.vollink.nyc/tags/linux/</guid>
+      <description></description>
+    </item>
+    
     <item>
       <title>book-review</title>
       <link>https://blog.vollink.nyc/tags/book-review/</link>
diff --git a/htdocs/tags/linux/index.html b/htdocs/tags/linux/index.html
new file mode 100644
index 000000000..b7a5d62aa
--- /dev/null
+++ b/htdocs/tags/linux/index.html
@@ -0,0 +1,6 @@
+<!doctype html><html lang=en dir=auto><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>linux | On My Mind...</title><meta name=keywords content><meta name=description content="Gary Allen's Blog"><meta name=author content="Gary Allen Vollink"><link rel=canonical href=https://blog.vollink.nyc/tags/linux/><link crossorigin=anonymous href=/assets/css/stylesheet.min.043dbe50dd3b5aeece8e1fd6b52fdb9ce2bb5c714d321cc709b5e740e61345eb.css integrity="sha256-BD2+UN07Wu7Ojh/WtS/bnOK7XHFNMhzHCbXnQOYTRes=" rel="preload stylesheet" as=style><link rel=icon href=https://blog.vollink.nyc/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://blog.vollink.nyc/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://blog.vollink.nyc/favicon-32x32.png><link rel=apple-touch-icon href=https://blog.vollink.nyc/apple-touch-icon.png><link rel=mask-icon href=https://blog.vollink.nyc/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://blog.vollink.nyc/tags/linux/index.xml><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--hljs-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:title" content="linux"><meta property="og:description" content="Gary Allen's Blog"><meta property="og:type" content="website"><meta property="og:url" content="https://blog.vollink.nyc/tags/linux/"><meta property="og:site_name" content="On My Mind..."><meta name=twitter:card content="summary"><meta name=twitter:title content="linux"><meta name=twitter:description content="Gary Allen's Blog"></head><body class=list id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=https://blog.vollink.nyc/ accesskey=h title="Home (Alt + H)"><img src=https://blog.vollink.nyc/AllenWrench.gif alt=logo aria-label=logo height=35>Home</a>
+<span class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></span></div><ul id=menu><li><a href=https://blog.vollink.nyc/post/ title=Posts><span>Posts</span></a></li><li><a href=https://blog.vollink.nyc/tags/ title=Tags><span>Tags</span></a></li><li><a href=https://home.vollink.com/ title=home.vollink.com><span>home.vollink.com</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://blog.vollink.nyc/>Home</a>&nbsp;»&nbsp;<a href=https://blog.vollink.nyc/tags/>Tags</a></div><h1>linux</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2>Linux Command Prompt in Color</h2></header><div class=entry-content><p>In this modern world, basically every terminal is compatible with VT-52 terminal sequences. These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux. Further, most of these support emoji and 256 colors.
+Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt. This is great, and probably will work just fine, but I find it to be painful....</p></div><footer class=entry-footer><span title="2021-11-19 04:21:00.001 -0500 -0500">19 Nov 2021</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Gary Allen Vollink</footer><a class=entry-link aria-label="post link to Linux Command Prompt in Color" href=https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/></a></article></main><footer class=footer><span>&copy; 2022 <a href=https://blog.vollink.nyc/>On My Mind...</a></span>
+<span>Powered by
+<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
+        <a href=https://git.io/hugopapermod rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentcolor"><path d="M12 6H0l6-6z"/></svg></a><script>let menu=document.getElementById("menu");menu&&(menu.scrollLeft=localStorage.getItem("menu-scroll-position"),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}),document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(t){t.preventDefault();var e=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(e)}']`).scrollIntoView({behavior:"smooth"}),e==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${e}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{document.body.className.includes("dark")?(document.body.classList.remove("dark"),localStorage.setItem("pref-theme","light")):(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))})</script></body></html>
\ No newline at end of file
diff --git a/htdocs/tags/linux/index.xml b/htdocs/tags/linux/index.xml
new file mode 100644
index 000000000..3976f3681
--- /dev/null
+++ b/htdocs/tags/linux/index.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
+  <channel>
+    <title>linux on On My Mind...</title>
+    <link>https://blog.vollink.nyc/tags/linux/</link>
+    <description>Recent content in linux on On My Mind...</description>
+    <generator>Hugo -- gohugo.io</generator>
+    <lastBuildDate>Fri, 19 Nov 2021 04:21:00 -0500</lastBuildDate><atom:link href="https://blog.vollink.nyc/tags/linux/index.xml" rel="self" type="application/rss+xml" />
+    <item>
+      <title>Linux Command Prompt in Color</title>
+      <link>https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/</link>
+      <pubDate>Fri, 19 Nov 2021 04:21:00 -0500</pubDate>
+      
+      <guid>https://blog.vollink.nyc/post/2021/11/linux-command-prompt-in-color/</guid>
+      <description>In this modern world, basically every terminal is compatible with VT-52 terminal sequences. These includes Windows Terminal (free from Microsoft on the Microsoft Store), Terminal.app (on macOS) and most terminals available under Linux. Further, most of these support emoji and 256 colors.
+Yet, most of the advice out there on how to deal with this suggests hard-coding these escape sequences directly into your prompt. This is great, and probably will work just fine, but I find it to be painful.</description>
+    </item>
+    
+  </channel>
+</rss>
diff --git a/htdocs/tags/linux/page/1/index.html b/htdocs/tags/linux/page/1/index.html
new file mode 100644
index 000000000..93bd40ba1
--- /dev/null
+++ b/htdocs/tags/linux/page/1/index.html
@@ -0,0 +1 @@
+<!doctype html><html lang=en><head><title>https://blog.vollink.nyc/tags/linux/</title><link rel=canonical href=https://blog.vollink.nyc/tags/linux/><meta name=robots content="noindex"><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://blog.vollink.nyc/tags/linux/"></head></html>
\ No newline at end of file
-- 
GitLab