Add first part of the 'Tools of the trade' series

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2020-08-04 14:23:00 +05:30
parent 163bb6833e
commit 7f04eabbbf
2 changed files with 56 additions and 0 deletions

View File

@ -0,0 +1,56 @@
+++
categories = ["tools-of-the-trade"]
date = 2020-08-04
description = "In the first post in the new 'Tools of the trade' series, we talk about direnv."
draft = true
slug = "tools-of-the-trade-direnv"
socialImage = "uploads/tools-of-the-trade-direnv.webp"
tags = ["direnv", "cli-tools"]
title = "Tools of the trade: direnv"
+++
This post was supposed to be a monolith directory of all the CLI-based tooling that I use to get things done throughout my day, but it turned out to be just a bit too long so I elected to split it out into separate posts.
{{< tweet 1289965196992114689 >}}
Let's talk about [direnv](https://github.com/direnv/direnv).
## What is direnv?
On the face of it, it's not very interesting. Their GitHub description simply reads 'Unclutter your .profile', which gives you a general idea of what to expect but also grossly undersells it.
What direnv does, is improve the experience with things like [12 factor apps](https://en.wikipedia.org/wiki/Twelve-Factor_App_methodology). It enables per-directory configurations that would otherwise be 'global'. Let's look into how I use it, to get a robust idea of what you can expect.
## Why do I use it?
I have a separate account for proprietary work related things [here](https://github.com/hshandilya-navana), which means that any GitHub tooling I use now needs to be configured with separate credentials for when I'm interacting with work repositories. Bummer!
`direnv` makes this simpler by allowing for environment variables to be set for those repositories only. I mostly use the official GitHub CLI from [here](https://github.com/cli/cli) to interact with the remote repo, so providing a separate GitHub token is just a matter of setting the `GITHUB_TOKEN` environment variable to one that is allowed to interact with the current repo. With direnv, its just a matter of creating a `.envrc` file in the repository directory with this:
```bash
export GITHUB_TOKEN=<redacted>
```
and `direnv` will automatically set it when you enter the directory, and more importantly: **reset** it back to its previous value when you exit. This 'unloading' feature makes `direnv` extremely powerful.
{{< asciinema qMkuyVjPSkhNqO6Jo0eQnLiyt >}}
`direnv` also comes with a rich stdlib that lets you do far more than just export environment variables.
Setting up a Python virtualenv:
{{< asciinema irkZWRh00gFVIcH41BRcOvowm >}}
Stripping entries from `$PATH`:
{{< asciinema vbzolwrYnXzBFvhAqMJEFBNRv >}}
Adding entries into `$PATH`:
{{< asciinema C1EhhAoy1y3vSwJaIc0R8o0RY >}}
> You'll notice an unfamiliar `rg -c` command there, it's [ripgrep](https://github.com/BurntSushi/ripgrep), and the `-c` flag counts the number of matches in the string if there are any, and nothing otherwise. We'll talk about it later in this series :)
The possibilities are huge! To check out the stdlib yourself, run `direnv stdlib` after installing `direnv`.
This was part 1 of the [Tools of the trade](/categories/tools-of-the-trade/) series.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB