Config
Dotfiles
All dotfiles containing my config can be found at my dotfiles repository. Feel free to go through it! I use yadm to maintain my configuration, so it should be straightforward to reproduce it. My old configuration lives in the old-dotfiles branch of the repository.
dotfilesalways contains the most recent information.If you want to look at the most recent configuration I use, the best way is to simply look at the
dotfilesrepository. Although this page describes a lot of it, it doesn’t contain everything. Also, I release specific snapshots of what I consider to be the most stable versions of my config. Check that out in theReleasessection.
OS and Desktop Environment
-
OS: I recommend Ubuntu (currently I’m using Jammy Jellyfish). Ubuntu is well-maintained, easy to use and also really easy to set-up as well (dual-booting a Windows machine with Ubuntu distributions is easy). Pop!OS is another distribution I recommend.
-
DE: I recommend Xfce. It’s extremely efficient on the hardware, and has a really simple interface. KDE Plasma is another great choice.
Window Manager
I use the i3 window manager. I use it as a standalone WM and not as a part of Xfce. This is so that I can switch between i3 and xfce4-wm if someone not used to tiling WMs wants to use my machine.
Terminal Emulator
Almost any emulator will work just fine; I use Alacritty. It can be configured easily (see my config). I use the dracula theme.
The shell
I use fish, along with the fisher plugin manager. I used to work with zsh (you can find my configuration in the old-dotfiles branch). To render glyphs and other icons, I use the Ubuntu Mono Nerd Font.
Terminal multiplexer
I use tmux as my terminal multiplexer, with the tpm plugin manager. I use a pretty standard config (please see the respective dotfile). The theme is configured with tmux2k. Here are some important plugins which I use:
- tmux-yank, a nice copy-mode for tmux.
- tmux-fzf-url, to open urls from within tmux.
- tmux-fingers, a Vimium-like copy-paste plugin.
Text editor
I use a heavily configured nvim setup. Please see my full configuration. In particular, see the list of plugins which I use. You can read about each plugin in it’s respective repository (and do check them out, they make life really easy!). Here is a brief description of some of the plugins:
lazy.nvim: a plugin manager.nvim-lspconfig: some off-the-shelf LSP settings.trouble.nvim: code actions and other diagnostic information.nvim-tree: a tree-based navigator.nvim-web-devicons: icons for the navigator. Looks really good. Needs a Nerd font.dashboard.nvim: a nice start screen.vim-slime: a plugin used to send selections across tmux panes. One of the best plugins I’ve come across. This is needed if you have a REPL opened in another pane.Comment.nvim: a plugin to make commenting easy.markdown-preview.nvim: render Markdown in your favorite browser.vim-fugitive: a must-usegitplugin.telescope.nvim: a fuzzy-finder withinnvim. Really helpful to search through large codebases.vimtex: a must-have if you typeset notes in LaTeX.vim-arsync: syncronize directories between a local and a remote machine. Extremely useful if you have to develop remotely.
Must have utilities
There are a bunch of must-haves which I highly recommend:
fzf, a must have tool if you’re a Linux user. The idea is simple: it takes in a list fromSTDINand writes toSTDOUT. The power comes in the use cases it supports.bat; can be thought of as a modern version ofcat.colorls, a Ruby gem to beautify thelscommand with colors and icons.ripgrep: this is needed fortelescope.nvim(which I discussed above).tldrpages, can be thought of as a friendlierman. Try doingtldr fzf. Use this first to get a hang of the command before usingman.rclone. I highly recommend this tool. It’s essentiallyrsync, but for cloud storage. Supports a lot of cloud providers.syncthing, if you want to sync data across different devices you use (like laptops, a remote server, or your phone/tablet).git-secret. This uses your GPG key to encrypt sensitive data, which you can then push to your repository. Highly recommended if you want to version-control sensitive data.htopfor CPU processes andnvtopfor GPU processes. Use these for monitoring system resources. These are much better than the standardtopandnvidia-smi.
Never push sensitive data to cloud storage.
Make sure not to push any sensitive data (like passwords, token IDs, private keys) to any cloud storage, or even private repositories. It’s better to save encrypted versions of sensitive data instead; but even in that case, make sure to never make the encryption key public!
Browser
I use Brave and Firefox. To get the most efficient and the best browsing experience, I also prefer Vim-like key bindings on my browser. For Chromium-based browsers, I prefer Vimium. If you use Firefox, you can use something like Tridactyl. There are other extensions as well (just a quick search away).
Image Viewer
feh is a nice and efficient tool for this. However, it doesn’t have support for GIFs. I prefer GNOME’s eog.
Typesetting
I regularly typeset any notes that I take while attending classes or self-studying math/computer science/code. I primarily use three approaches to typeset notes, depending upon the usecase.
-
For immediate use and online collaboration (with cloud storage), Overleaf is the best option.
- For note taking in Markdown (
.mdfiles, which can be rendered using your favorite text editor, or a browser), I use the following tools:pandoc, used to convert from one markup format to another. This is a really helpful tool, because it haspdflatex,xelatexandlualatexsupport formarkdown.- To watch the files as I’m editing them, I use
docwatch, which has support forpandocby default. Though other tools can be used for this. Find out more information about this at this repository. - This option is really good for live note-taking (ex., in a lecture).
- However, it’s best to just get your own TeX distribution. I covered this in step 5 of this README. I use
zathuraas my PDF viewer, along withlatexmk(it’s like amakefor LaTeX projects). To complement these tools, I also use the vimtex plugin for mynvimconfiguration, along with the texlab LSP.