What is this?

This document is for a cool weekly event we have in our group, just to provide references/links to the tools I covered in the presentation.

I list here, the tools I used often for my work as a CS Ph.D. in terminal, whoever reads this post, needs to start using all of them.

Why stay on CLI?

There are plenty of cool/useful/high-quality tools out there with real GUI, why keep using Terminal?

Just staying on keyboard makes you more productive? Less CPU/memory consumption and high-performance?

No, it’s just because (I think) it looks cooler.

So you don’t miss almost anything real by not using any of the tools I list here, no need to change anything that you use now, just use what you like.

Tools

neovim

My main editor for prety much everything from note-taking to coding. (I use VSCode for web app frontend developments just because I use a language which doesn’t support neovim.)

Once you get used to it, and have proper plugins installed, you can move around and edit your codebase pretty fast. I list plugins I can’t live without below with very abstractive description.

Note taking

I take all notes (unless I need to share with someone) in neovim using Neorg. The main file is called daily.norg which I sync using Dropbox but I only open this file on my main laptop, no need to reference this file on phone for example. Every morning, I open this file and hit d and tab key and expand my snipet for daily note which contains date (of course) and a list of on-going projects. I just check the note from previous date what I was doing yesterday, and keep writing what/how I work for each project, this helps me to remember the status of projects, and organizing my thoughts while I work.

Daily note also has sublist called misc which I just paste whatever I find interesting including URLs and some keywords. By having keywords with URLs, later I can find them with just searching the whole file.

I like just using one big file for almost all note taking becauase I don’t have to organize anything, just write whatever in the corresponding daily section, and using search in neovim, I can (almost) always re-find the information I need.

Another note file (in Neorg format) I have is called paper.neorg, which I take notes for papers I read. Everytime I start reading a paper, I open this file and expand a snipet which stores title, date of reading, problem statement, approach and my small memos. This is more for helping me to read than keeping information. I believe that by taking notes while reading helps me to focus and extract inforamtion from papers more efficiently.

zsh

I use zim to manage plugins for few I have installed but nothing too much.

Mini hack for python developers.

py() {
    test -z "$1" && ipython --no-confirm-exit --ext=autoreload --quick \
        --InteractiveShellApp.exec_lines="['%autoreload 2']" \
        --no-banner|| command python "$@"
}

tmux

For session, pane, window management. I always work in tmux session, helps me to brows many information efficiently.

The only plugin I have for tmux is tmux-plugins/tmux-resurrect, it lets me save tmux state and open it even after I restart my computer.

CLI utilities

pudb

python visual debugger runs on terminal (link). I don’t use this for every debugging, but it comes in handy when working on a rather complex codebase.

Things I don’t do in Terminal

  • Messaging
  • Emails
  • Paper writing (I use overleaf for a collaboration reason)
  • Web browsing
  • Calender
  • Paper library (I use Zotero)