Snippets are one of my favorite parts of programming. The shear endless depth of command line tricks and customizations is so exciting! Here is a collection I maintain for myself to comeback to.

Also navigable by list of snippet types here.

Convert .mkv to .mp4 -- 30.06.2020 %

Before I updated my OBS settings to record to .mp4 files I manually converted .mkv files to .mp4. This shell command does that for every recording in a directory deleting the original.

$ for x in $(ls *.mkv | awk -F "." '{print $1}') ; do ffmpeg -i $x.mkv -c copy $x.mp4 && rm $x.mkv ; sleep 3; done
\- [ ffmpeg ]

Wipe a Mongo Collection -- 29.06.2020 %

Currently I run a shared mongo instance in my k8s cluster used by a bunch of my side projects. Every once in a while I have to manually execute mongo commands this is how I do so.

Manually ssh into the pod:

$ kubectl exec -it shared-mongo-xxxxxxxxxx-xxxxx -- /bin/bash

Then launch the mongo shell and hack away:

$ mongo
> db2 = db.getSiblingDB('coolDB')
> db2.getCollectionNames()
[ "coolThings" ]
> db2.coolThings.count()
> db2.coolThings.remove({})
WriteResult({ "nRemoved" : 666 })
> db2.coolThings.count()


\- [ mongo ]

Extending GPG Keys -- 22.06.2020 %

Don’t let those keys expire. 🚨

Time to edit some keys:

gpg --edit-key
Secret key is available.
sec  rsa2048/D4C2E4DFAB8BABF8
     created: 2018-07-18  expires: 2020-07-17  usage: SC
ssb  rsa2048/25C629D0FECC25B9
     created: 2018-07-18  expires: 2020-07-17  usage: E
ssb  rsa4096/97F7C2B46E6C5D11
     created: 2019-09-28  expires: 2023-09-28  usage: E
  1. select key to change key 1
  2. expire
  3. duration: 1y
  4. repeat until every key is updated

resulting output should be something like:

sec  rsa2048/D4C2E4DFAB8BABF8
     created: 2018-07-18  expires: 2021-06-22  usage: SC
ssb  rsa2048/25C629D0FECC25B9
     created: 2018-07-18  expires: 2021-06-22  usage: E
ssb  rsa4096/97F7C2B46E6C5D11
     created: 2019-09-28  expires: 2021-06-22  usage: E

lastly save and done


\- [ gpg ]

Moving GPG Keys -- 20.06.2020 %

New laptop. Got to move over those GPG keys.

$ cd /tmp && mkdir gpg_export
$ gpg --output gpg_export/main_pub.gpg --armor --export
$ gpg --output gpg_export/main_sec.gpg --armor --export-secret-key
$ tar cvfz gpg_export.tar.gz ./gpg_export
$ gpg --symmetric ./gpg_export.tar.gz

Then I trasferend the encrypted tar via airdrop.

To import the keys.

$ gpg --decrypt gpg_export.tar.gz.gpg > gpg_export.tar.gz
$ tar xvfz gpg_export.tar
$ gpg --import gpg_export/main_sec.gpg
$ gpg --import gpg_export/main_pub.gpg


\- [ gpg ]

K8s deployment.yaml env vscode snippet -- 20.06.2020 %

Most of my personal projects are deployed via kubernetes. I write a lot of deployment.yaml files. In order to keep them clean and checked in to version control I keep sensitive env variables in a config maps. Problem is adding values env values to deployment.yaml files is pretty painful. This makes it a little less.

placed in yaml.json 😀 what a file name!

	"env var from configmap": {
		"prefix": "env",
		"body": [
			"- name: $1",
			"  valueFrom:",
			"    configMapKeyRef:",
			"      key: $1",
			"      name: configmapname"
		"description": "env varable from config map, remember to replace configmapname with your configmap name"

Force push with --lease for safety -- 10.06.2020 %

Just found out, via tweet, from the insightful joshdholtz that there is a safer alternative to git push --force

Time to update my aliases:

alias gs="gst"
-alias gpf="gp --force"
+alias gpf="gp --force-with-lease"
alias gdc="gd --cached"

I use zsh shell’s git plugin that is why you see “gst” for git status and “gp” for git push. Highly recommend it


\- [ git ]

Open Notion Links -- 07.06.2020 %

Recently I’ve started using Notion app for note taking. There came times when I wanted to write about a specific directory, but then came the problem of how to link the dic to notion page. How about a tiny bash script? OSX’s built in open command is capable of opening links so I copied the link from notion and put in a script. Boom! It opens the notion page but in the browser not the app 😟.

After some digging I found this repo for a chrome extension that opens notion links in the app. Taking a look at the source code it simply adds a /native in the url to open in the app. Updated my script and now it works 😀.

#!/usr/bin/env bash

exit 0

If I continue to do this perhaps I’ll write a small tool to create the script files for me.

\- [ bash, notion ]

Twtxt Config Alias -- 30.05.2020 %

Recently I started using twtxt. I installed it with brew then setup it up via the quick setup command. The problem is when you put a config file location other then the default when you call the command you get a “✗ Config file not found or not readable. You may want to run twtxt quickstart." error. This is super annoying so I aliased the command to always include the location of my config file.

  alias gpf="gp --force"
+ alias tw="twtxt -c ~/.twtxt/config"

Now posting is as easy as:

$ tw tweet "authoring a snippet on how to configure alias twtxt"
\- [ zsh, twtxt ]

JSX Comments -- 26.05.2020 %

The other day at work we have an html comment in jsx slip on to stage. Made me relize I didn’t know how to leave comments in jsx myself.

So as a reminder DON’T do this:

    <!-- comment here -->
    <h2>Hello world</h2>

Instead do this:

    {/* comment here  */}
    <h2>Hello world</h2>


\- [ react, jsx ]

Creating K8s registry secrets -- 29.03.2020 %

Hosting side projects in kubernetes and using gitlab container registry? This is the command I run to create the needed secret for the cluster to pull the image:

$ kubectl create secret docker-registry cool-project-gitlab \ \
    --docker-username=gitlab+deploy-token-666666 \
    --docker-password=xxxxxxxxxxxxxxxxxxxx \

Then in the deployment.yml use the gitlab registry image and newly created image secret:

    imagePullPolicy: IfNotPresent
    name: cool-project-api
- name: cool-projects-gitlab
\- [ kubernetes ]
<---- back home