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.
dotfiles
always 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
dotfiles
repository. 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 theReleases
section.
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-usegit
plugin.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 fromSTDIN
and 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 thels
command with colors and icons.ripgrep
: this is needed fortelescope.nvim
(which I discussed above).tldr
pages, 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.htop
for CPU processes andnvtop
for GPU processes. Use these for monitoring system resources. These are much better than the standardtop
andnvidia-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 (
.md
files, 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
,xelatex
andlualatex
support formarkdown
.- To watch the files as I’m editing them, I use
docwatch
, which has support forpandoc
by 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
zathura
as my PDF viewer, along withlatexmk
(it’s like amake
for LaTeX projects). To complement these tools, I also use the vimtex plugin for mynvim
configuration, along with the texlab LSP.