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.
- nvim-treesitter/nvim-treesitter
- program parsing
- ggandor/lightspeed.nvim
- jump around texts
- TimUntersberger/neogit
- git stuff
- nvim-neorg/neorg
- note-taking
- nvim-telescope/telescope.nvim
- file finding
- SirVer/ultisnips
- snipet
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.
- zsh-completions
- tab completion
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)