<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Adam Hollett</title>
    <description>The latest articles on DEV Community by Adam Hollett (@admhlt).</description>
    <link>https://dev.to/admhlt</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F27181%2F145f5046-08e3-4ebe-b904-6ccb6165f2d4.jpg</url>
      <title>DEV Community: Adam Hollett</title>
      <link>https://dev.to/admhlt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/admhlt"/>
    <language>en</language>
    <item>
      <title>Terminal tricks from my dotfiles</title>
      <dc:creator>Adam Hollett</dc:creator>
      <pubDate>Tue, 13 Apr 2021 15:10:27 +0000</pubDate>
      <link>https://dev.to/admhlt/terminal-tricks-from-my-dotfiles-2moe</link>
      <guid>https://dev.to/admhlt/terminal-tricks-from-my-dotfiles-2moe</guid>
      <description>&lt;p&gt;I work with a terminal every day. Being able to move around and get things done quickly is a huge boost to my performance and saves me a lot of time. Over the years my personal terminal configuration has evolved to include some neat tricks that I haven't seen many people use.&lt;/p&gt;

&lt;p&gt;In case you're not familiar with them: &lt;a href="https://thoughtbot.com/upcase/videos/intro-to-dotfiles" rel="noopener noreferrer"&gt;dotfiles&lt;/a&gt; are a way of managing the many usually hidden configuration files found in your home directory (most of their filenames begin with a dot). Some developers like to publicly host their dotfiles for anyone to read and use.&lt;/p&gt;

&lt;p&gt;A dotfiles repository usually includes a bunch of configuration files and some sort of shell script to copy or symlink them from the repository folder to a user's home directory. It's helpful to have some experience with shell scripting to get into dotfiles, but if you have done any type of programming you'll probably be able to pick up shell scripting or follow along.&lt;/p&gt;

&lt;p&gt;Everything in this article comes from &lt;a href="https://github.com/adamhollett/dotfiles" rel="noopener noreferrer"&gt;my personal dotfiles repository&lt;/a&gt;. Most of these are built for zsh but some may work in bash as well — as with any code snippet on the web, your mileage may vary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Seasonal chevrons
&lt;/h2&gt;

&lt;p&gt;The crown jewel of my dotfiles repo is the set of colourful chevrons at the end of my prompt:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi7q1lmb0udkai5f5h3is.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi7q1lmb0udkai5f5h3is.gif" alt="A terminal window showing three multicoloured arrows"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The chevrons are purely decorative, but every three months they change colours to match the season. I always forget about this feature, which means that once every three months I open my terminal and get a little pang of delight when I see that they've changed again.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;p&gt;Here's the zsh function that returns the chevrons:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;seasonal_chevrons &lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;local date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
  &lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;chevrons&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"❯❯❯"&lt;/span&gt;

  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nv"&gt;$date&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
    &lt;span class="c"&gt;# spring&lt;/span&gt;
    &lt;span class="k"&gt;*&lt;/span&gt;Mar&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;Apr&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;May&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="nv"&gt;chevrons&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"%F{cyan}❯%F{green}❯%F{yellow}❯%f"&lt;/span&gt;
      &lt;span class="p"&gt;;;&lt;/span&gt;
    &lt;span class="c"&gt;# summer&lt;/span&gt;
    &lt;span class="k"&gt;*&lt;/span&gt;Jun&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;Jul&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;Aug&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="nv"&gt;chevrons&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"%F{green}❯%F{yellow}❯%F{red}❯%f"&lt;/span&gt;
      &lt;span class="p"&gt;;;&lt;/span&gt;
    &lt;span class="c"&gt;# fall&lt;/span&gt;
    &lt;span class="k"&gt;*&lt;/span&gt;Sep&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;Oct&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;Nov&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="nv"&gt;chevrons&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"%F{yellow}❯%F{red}❯%F{magenta}❯%f"&lt;/span&gt;
      &lt;span class="p"&gt;;;&lt;/span&gt;
    &lt;span class="c"&gt;# winter&lt;/span&gt;
    &lt;span class="k"&gt;*&lt;/span&gt;Dec&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;Jan&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;Feb&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="nv"&gt;chevrons&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"%F{magenta}❯%F{cyan}❯%F{green}❯%f"&lt;/span&gt;
      &lt;span class="p"&gt;;;&lt;/span&gt;
    &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;;;&lt;/span&gt;
  &lt;span class="k"&gt;esac&lt;/span&gt;

  &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-en&lt;/span&gt; &lt;span class="nv"&gt;$chevrons&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
~~~&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt;

Then we call the &lt;span class="k"&gt;function &lt;/span&gt;when exporting the &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;PS1&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;prompt&lt;span class="o"&gt;)&lt;/span&gt; variable &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;.zshrc&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt;:&lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;

~~~ zsh
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PS1&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'$(seasonal_chevrons) '&lt;/span&gt;
~~~&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt;

At the beginning of the &lt;span class="k"&gt;function&lt;/span&gt;, we assign the &lt;span class="nb"&gt;date &lt;/span&gt;and a &lt;span class="nb"&gt;set &lt;/span&gt;of chevrons as variables. In &lt;span class="k"&gt;case&lt;/span&gt; our &lt;span class="k"&gt;function &lt;/span&gt;doesn&lt;span class="s1"&gt;'t work, we'&lt;/span&gt;ll &lt;span class="k"&gt;return &lt;/span&gt;those uncoloured chevrons.

The &lt;span class="k"&gt;function &lt;/span&gt;reads the &lt;span class="nb"&gt;date &lt;/span&gt;and looks &lt;span class="k"&gt;for &lt;/span&gt;what month it is, &lt;span class="k"&gt;in &lt;/span&gt;sets of three. For example, &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;Mar&lt;span class="k"&gt;*&lt;/span&gt;|&lt;span class="k"&gt;*&lt;/span&gt;Apr&lt;span class="k"&gt;*&lt;/span&gt;|&lt;span class="k"&gt;*&lt;/span&gt;May&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt; means to match &lt;span class="s2"&gt;"March OR April OR May"&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; When it finds a match, it reassigns the &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;chevrons&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt; variable, colouring them using zsh colour keywords.

At the end of the &lt;span class="k"&gt;function&lt;/span&gt;, we &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt; whatever we ended up with.

&lt;span class="c"&gt;## Dynamic git identity&lt;/span&gt;

Sometimes I use my terminal &lt;span class="k"&gt;for &lt;/span&gt;personal work, like this article. In those cases, I like my git commits to use my personal email address and not my work email.

Luckily, all the repos that I use &lt;span class="k"&gt;for &lt;/span&gt;work have the company name &lt;span class="k"&gt;in &lt;/span&gt;their path, so I &lt;span class="nb"&gt;set &lt;/span&gt;up a dynamic include &lt;span class="k"&gt;in &lt;/span&gt;my &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;.gitconfig&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt; that overrides my configured email address &lt;span class="k"&gt;for &lt;/span&gt;those directories. It looks like this:&lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;

~~~ git
&lt;span class="o"&gt;[&lt;/span&gt;user]
  name &lt;span class="o"&gt;=&lt;/span&gt; Adam Hollett
  email &lt;span class="o"&gt;=&lt;/span&gt; adamh@example.com

&lt;span class="o"&gt;[&lt;/span&gt;includeIf &lt;span class="s2"&gt;"gitdir/i:**/workcompany/**"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
  email &lt;span class="o"&gt;=&lt;/span&gt; adamh@workcompany.com
~~~&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt;

The &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;includeIf&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt; directive &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;.gitconfig&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt; only activates the configuration &lt;span class="k"&gt;in &lt;/span&gt;that category &lt;span class="k"&gt;if &lt;/span&gt;its pattern is matched. In this &lt;span class="k"&gt;case&lt;/span&gt;, it looks &lt;span class="k"&gt;for &lt;/span&gt;the name &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;workcompany&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;in &lt;/span&gt;the current path and sets a work email address &lt;span class="k"&gt;if &lt;/span&gt;it finds it.

&lt;span class="c"&gt;## Sort git branches by recency&lt;/span&gt;

When you &lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;git branch&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt;, your branch list is sorted alphabetically by default. This isn&lt;span class="s1"&gt;'t super helpful. To sort your branches by their last commit date, with the most recent at the top, add this to your {% raw %}`.gitconfig`:

~~~ git
[branch]
  sort = -committerdate
~~~

## The git status dot

The command I use most often is probably `git status`. This lets me check where I am in the process of writing and committing code and which files I'&lt;/span&gt;ve changed.

Instead of having to &lt;span class="nb"&gt;type &lt;/span&gt;this &lt;span class="nb"&gt;command &lt;/span&gt;over and over again, I wrote some functions to display a &lt;span class="s2"&gt;"status dot"&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;four different states:

- solid green &lt;span class="k"&gt;for &lt;/span&gt;a &lt;span class="s2"&gt;"clean"&lt;/span&gt; state with no changes:

  &lt;span class="o"&gt;![&lt;/span&gt;A terminal prompt featuring a solid green circle]&lt;span class="o"&gt;(&lt;/span&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0dy4twpo1y7botdxenrn.png&lt;span class="p"&gt;)&lt;/span&gt;

- hollow purple &lt;span class="k"&gt;if &lt;/span&gt;any tracked files have been changed:

  &lt;span class="o"&gt;![&lt;/span&gt;A terminal prompt featuring a hollow purple circle]&lt;span class="o"&gt;(&lt;/span&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0ofqhu3vu57m551c1t8w.png&lt;span class="o"&gt;)&lt;/span&gt;

- shaded yellow &lt;span class="k"&gt;if &lt;/span&gt;changes have been staged &lt;span class="k"&gt;for &lt;/span&gt;a commit:

  &lt;span class="o"&gt;![&lt;/span&gt;A terminal prompt featuring a shaded yellow circle]&lt;span class="o"&gt;(&lt;/span&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0zbwpa05t5mqwvruocia.png&lt;span class="o"&gt;)&lt;/span&gt;

- and solid blue &lt;span class="k"&gt;if &lt;/span&gt;we have any commits ahead of the remote branch:

  &lt;span class="o"&gt;![&lt;/span&gt;A terminal prompt featuring a solid blue circle]&lt;span class="o"&gt;(&lt;/span&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h7fu9hoy0aiomrnmby01.png&lt;span class="o"&gt;)&lt;/span&gt;

This dot only appears &lt;span class="k"&gt;if &lt;/span&gt;the current path is a git repo, which has the added bonus of telling me whether I&lt;span class="s1"&gt;'m currently in a repo.

### How it works

There are a few moving parts to this one. First we have a function called `git_check` that checks whether we'&lt;/span&gt;re &lt;span class="k"&gt;in &lt;/span&gt;a git repo by testing the contents of the &lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;git branch&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt;:&lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;

~~~ zsh
&lt;span class="c"&gt;# Return the branch name if we're in a git repo, or nothing otherwise.&lt;/span&gt;
git_check &lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;gitBranch&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;git branch 2&amp;gt; /dev/null | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"/^[^*]/d"&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"s/* &lt;/span&gt;&lt;span class="se"&gt;\(&lt;/span&gt;&lt;span class="s2"&gt;.*&lt;/span&gt;&lt;span class="se"&gt;\)&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\1&lt;/span&gt;&lt;span class="s2"&gt;/"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$gitBranch&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-en&lt;/span&gt; &lt;span class="nv"&gt;$gitBranch&lt;/span&gt;
    &lt;span class="k"&gt;return
  fi&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
~~~&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt;

To be honest I don&lt;span class="s1"&gt;'t exactly know how this works. But if we'&lt;/span&gt;re &lt;span class="k"&gt;in &lt;/span&gt;a git repo it outputs the branch name, otherwise it does nothing.

Another &lt;span class="k"&gt;function &lt;/span&gt;checks the message output by &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;git status&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt; and gives back a state name:&lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;

~~~ zsh
&lt;span class="c"&gt;# Return the status of the current git repo.&lt;/span&gt;
git_status &lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;gitBranch&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;git_check&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$gitBranch&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;statusCheck&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;git status 2&amp;gt; /dev/null&lt;span class="si"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$statusCheck&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;~ &lt;span class="s1"&gt;'Your branch is ahead'&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
      &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-en&lt;/span&gt; &lt;span class="s1"&gt;'ahead'&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$statusCheck&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;~ &lt;span class="s1"&gt;'Changes to be committed'&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
      &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-en&lt;/span&gt; &lt;span class="s1"&gt;'staged'&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$statusCheck&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;~ &lt;span class="s1"&gt;'no changes added'&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
      &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-en&lt;/span&gt; &lt;span class="s1"&gt;'modified'&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$statusCheck&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;~ &lt;span class="s1"&gt;'working tree clean'&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
      &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-en&lt;/span&gt; &lt;span class="s1"&gt;'clean'&lt;/span&gt;
    &lt;span class="k"&gt;fi
  fi&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
~~~&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt;

I use these functions &lt;span class="k"&gt;in &lt;/span&gt;another &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;git_dot&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; You can see at the beginning here that &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nv"&gt;$gitCheck&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt; does not get assigned &lt;span class="k"&gt;then &lt;/span&gt;most of the body of this &lt;span class="k"&gt;function &lt;/span&gt;is skipped — there&lt;span class="s1"&gt;'s no need to do any of this if we'&lt;/span&gt;re not currently &lt;span class="k"&gt;in &lt;/span&gt;a git repo:&lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;

~~~ zsh
&lt;span class="c"&gt;# Print a dot indicating the current git status.&lt;/span&gt;
git_dot &lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;gitCheck&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;git_check&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$gitCheck&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;gitStatus&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;git_status&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;gitStatusDot&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'●'&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$gitStatus&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;'staged'&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
      &lt;/span&gt;&lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;gitStatusDot&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'◍'&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$gitStatus&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;'modified'&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
      &lt;/span&gt;&lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;gitStatusDot&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'○'&lt;/span&gt;
    &lt;span class="k"&gt;fi
    if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$gitCheck&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nv"&gt;$gitCheck&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;'master'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nv"&gt;$COLUMNS&lt;/span&gt; &lt;span class="nt"&gt;-lt&lt;/span&gt; 100 &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
      &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-en&lt;/span&gt; &lt;span class="s2"&gt;"%F{#616161}⌥%f "&lt;/span&gt;
    &lt;span class="k"&gt;fi
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-en&lt;/span&gt; &lt;span class="s2"&gt;"%F{"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;git_status_color&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"}&lt;/span&gt;&lt;span class="nv"&gt;$gitStatusDot&lt;/span&gt;&lt;span class="s2"&gt;%f "&lt;/span&gt;
  &lt;span class="k"&gt;fi&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
~~~&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt;

At the end of the above &lt;span class="k"&gt;function &lt;/span&gt;we invoke another &lt;span class="k"&gt;function &lt;/span&gt;called &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;git_status_color&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt; to apply a colour to the dot based on the current git status message, using the same &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;git_status&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;function &lt;/span&gt;as before:&lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;

~~~ zsh
&lt;span class="c"&gt;# Return a color based on the current git status.&lt;/span&gt;
git_status_color &lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;gitStatus&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;git_status&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  &lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;statusText&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;''&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nv"&gt;$gitStatus&lt;/span&gt; &lt;span class="k"&gt;in
    &lt;/span&gt;clean&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="nv"&gt;statusText&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"green"&lt;/span&gt;
      &lt;span class="p"&gt;;;&lt;/span&gt;
    modified&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="nv"&gt;statusText&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"magenta"&lt;/span&gt;
      &lt;span class="p"&gt;;;&lt;/span&gt;
    staged&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="nv"&gt;statusText&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"yellow"&lt;/span&gt;
      &lt;span class="p"&gt;;;&lt;/span&gt;
    ahead&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="nv"&gt;statusText&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"cyan"&lt;/span&gt;
      &lt;span class="p"&gt;;;&lt;/span&gt;
    &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="nv"&gt;statusText&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"white"&lt;/span&gt;
      &lt;span class="p"&gt;;;&lt;/span&gt;
  &lt;span class="k"&gt;esac&lt;/span&gt;
  &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-en&lt;/span&gt; &lt;span class="nv"&gt;$statusText&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
~~~&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt;

Looking at this now, I can see that there&lt;span class="s1"&gt;'s a lot of refactoring that could be done here. This doesn'&lt;/span&gt;t necessarily need four separate functions. One of the great things about writing and maintaining your own dotfiles is being able to learn and improve as you get more practice.

&lt;span class="c"&gt;## git start&lt;/span&gt;

Here&lt;span class="s1"&gt;'s a quick one: a git alias to return you to the master branch, pull the latest changes, and clean up any stray files. Add this to your `.gitconfig`:

~~~ git
[alias]
  start = !git checkout master &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; git clean -fd
~~~

Then type `git start` anywhere to run all three commands.

## Responsiveness

I got involved in front-end development right around the time that responsive design was taking over the web. With responsive design, the contents of a web application change to fit the window or device it'&lt;/span&gt;s being viewed with.

You can &lt;span class="k"&gt;do &lt;/span&gt;the same thing with your terminal prompt by reacting to the number of columns available using the &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nv"&gt;$COLUMNS&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt; environment variable.

You may have noticed this &lt;span class="k"&gt;in &lt;/span&gt;the &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;git_dot&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;function in &lt;/span&gt;the last example:&lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;

~~~ zsh
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$gitCheck&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nv"&gt;$gitCheck&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;'master'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nv"&gt;$COLUMNS&lt;/span&gt; &lt;span class="nt"&gt;-lt&lt;/span&gt; 100 &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
  &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-en&lt;/span&gt; &lt;span class="s2"&gt;"%F{#616161}⌥%f "&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;
~~~&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt;

This part of the &lt;span class="k"&gt;function &lt;/span&gt;checks the current branch name. If it is _not_ &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;master&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt;, and &lt;span class="k"&gt;if &lt;/span&gt;the number of columns available is less than 100, &lt;span class="k"&gt;then &lt;/span&gt;it outputs a grey &lt;span class="s2"&gt;"option"&lt;/span&gt; symbol you may recognize from a Mac keyboard: ⌥. This lets us know that we are on a branch.

&lt;span class="o"&gt;![&lt;/span&gt;A terminal prompt showing a small git branch icon]&lt;span class="o"&gt;(&lt;/span&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pz5vi2400sitwufpp99n.png&lt;span class="o"&gt;)&lt;/span&gt;

But &lt;span class="k"&gt;if &lt;/span&gt;our terminal window is large enough, we can just print the branch name. zsh allows you to assign a variable &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;RPROMPT&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt; to right-align part of your prompt, so I assign that &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;.zshrc&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt;:&lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;

~~~ zsh
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;RPROMPT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'$(git_branch)'&lt;/span&gt;
~~~&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;

~~~ zsh
&lt;span class="c"&gt;# Print a label for the current git branch if it isn't master.&lt;/span&gt;
git_branch &lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;gitBranch&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;git_check&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$gitBranch&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nv"&gt;$gitBranch&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;'master'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nv"&gt;$COLUMNS&lt;/span&gt; &lt;span class="nt"&gt;-gt&lt;/span&gt; 79 &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-en&lt;/span&gt; &lt;span class="s2"&gt;"%F{#616161}⌥%f %F{"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;git_status_color&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"}&lt;/span&gt;&lt;span class="nv"&gt;$gitBranch&lt;/span&gt;&lt;span class="s2"&gt;%f"&lt;/span&gt;
  &lt;span class="k"&gt;fi&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
~~~&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt;

So on larger windows we get this:

&lt;span class="o"&gt;![&lt;/span&gt;A terminal prompt showing the full git branch name, aligned to the right]&lt;span class="o"&gt;(&lt;/span&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mdmwvjdw6yl96bhsi2qg.png&lt;span class="o"&gt;)&lt;/span&gt;

The full branch name uses the same colour as the git status dot.

&lt;span class="c"&gt;## Try it yourself&lt;/span&gt;

There is a lot more useful stuff &lt;span class="k"&gt;in &lt;/span&gt;my dotfiles, including my &lt;span class="o"&gt;[&lt;/span&gt;Ruby configuration]&lt;span class="o"&gt;(&lt;/span&gt;https://github.com/adamhollett/dotfiles/tree/master/ruby&lt;span class="o"&gt;)&lt;/span&gt;, my &lt;span class="o"&gt;[&lt;/span&gt;.editorconfig]&lt;span class="o"&gt;(&lt;/span&gt;https://github.com/adamhollett/dotfiles/blob/master/editor/.editorconfig&lt;span class="o"&gt;)&lt;/span&gt;, and &lt;span class="o"&gt;[&lt;/span&gt;a whole bunch of aliases]&lt;span class="o"&gt;(&lt;/span&gt;https://github.com/adamhollett/dotfiles/blob/master/shell/aliases.sh&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;

If you&lt;span class="s1"&gt;'re interested in building your own set of dotfiles, the best place to start is by exploring other peoples'&lt;/span&gt; setups. dotfiles.github.io has a &lt;span class="o"&gt;[&lt;/span&gt;good list of example repositories]&lt;span class="o"&gt;(&lt;/span&gt;https://dotfiles.github.io/inspiration/&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; Fork someone &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="s1"&gt;'s, or start from scratch and build your own piece by piece. If you'&lt;/span&gt;re new to shell scripting, this is a fantastic way to start.

&lt;span class="nt"&gt;----&lt;/span&gt;

Cover photo by &lt;span class="o"&gt;[&lt;/span&gt;Arnold Francisca]&lt;span class="o"&gt;(&lt;/span&gt;https://unsplash.com/@clark_fransa?utm_source&lt;span class="o"&gt;=&lt;/span&gt;unsplash&amp;amp;utm_medium&lt;span class="o"&gt;=&lt;/span&gt;referral&amp;amp;utm_content&lt;span class="o"&gt;=&lt;/span&gt;creditCopyText&lt;span class="o"&gt;)&lt;/span&gt; on &lt;span class="o"&gt;[&lt;/span&gt;Unsplash]&lt;span class="o"&gt;(&lt;/span&gt;https://unsplash.com/s/photos/code?utm_source&lt;span class="o"&gt;=&lt;/span&gt;unsplash&amp;amp;utm_medium&lt;span class="o"&gt;=&lt;/span&gt;referral&amp;amp;utm_content&lt;span class="o"&gt;=&lt;/span&gt;creditCopyText&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>tutorial</category>
      <category>productivity</category>
      <category>showdev</category>
      <category>shell</category>
    </item>
  </channel>
</rss>
