Skip to content


Repository files navigation


Build Status Release Hackage Hackage


  • Ok so I needed to get back on Haskell a bit. I had mostly not touched the language since I had done GitHud a couple of years before
  • I like to know where I am (it's part of my productivity), and as such my prompt looks like that:
    [Terraform workspace: default] [nvm: v8.10.0] [rvm: ruby-2.5.1] [virtualenv: p4d_cloud_352]
     𝘮 ← 1 [PCL-1292-robots_txt]
    gbataille ~/Doc…rog/Pix4d/cloud $                                                     17:01
    (Yes, I like context. I have a couple more possible info not displayed here ;) )
  • I like things to go fast (part of my search for productivity) and with the number of things I want to display, my prompt took almost 1s to appear. Way too much to be acceptable (to me)

All of this means that I wanted a tool that could accept a list of commands, organized in a nice little template, and that would render the template efficiently. Efficiently means basically that all commands are run in parallel, meaning that the time it takes to render the template is basically the time it takes to execute the longest command.

This is what envstatus is.


Whichever way you install envstatus, don't forget to complete the Setup

Mac OSX with brew (soon)

  • link my tap
brew tap gbataille/homebrew-gba
  • install envstatus
brew install envstatus

With Cabal

envstatus is available on hackage. Therefore just get it as usual

cabal install envstatus


The first thing to do is build a configuration file. There is one example in this repo. envstatus searches for a .envstatusrc file in your home directory

This file is in "key: value" format and should contain:

  • an output_template key that is the template to render. ** It can be multiline (see example) ** It can contain references to commands, inside double curly braces
  • Several key/command associations. Those command are executed and their output used to fill in the placeholders in the output_template


The following config

# For multiline strings, just go to the line and indent the content. If there are several lines,
# make sure the indentation is consintent. It will be stripped in the produced output.
output_template: venv: {{virtualenv}}
   python: {{python}}
   rvm: {{rvm}}
   nvm: {{nvm}}
   Terraform: {{tf}}
virtualenv: bash -c "echo $VIRTUAL_ENV"
rvm: bash -c "echo $RUBY_VERSION"
nvm: node --version
tf: terraform workspace show
python: python --version


python:  Python 3.5.4
rvm:  ruby-2.5.1
nvm:  v8.10.0
Terraform:  default

in about 200 ms (on my old macbook)


Running the tests

Simply call ./scripts/