Current Workflow

computer-vision

Issue at hand.

I have always done multi/tri-head displays in a side-by-side configuration but I have noticed recently that I was mainly focused on my external secondary display. My primary display is the laptop screen at 2880x1620 on a small 14” screen and an external 32” also at 2880x1620. I have always battled bad posture, especially when on the computer for long hours. After an 8hour day, the base of my neck was killing me. Obviously mistakes were made with my current setup and I was left with one option. To continue to use multiple displays, I must stack my secondary display above my laptop which will remove the repitive movements of my neck shifted to the side for hours while focused on a task. I made the move and implemented some health based notifications to give myself reminders regarding my posture as well as taking breaks and resting my eyes. This small changes lead me to take the initiative and see what changes I can implement to streamline my work-flow and increase productivity. Here goes!

Desktop environment

I have always customized my desktop environments to look good since I do have to stare at this thing 8+ hours each day. When using GNOME I would use extensions to ‘tweak’ the default behavior in hopes of streamlining my workflow when eyes on screen. I have read plenty of articles from developers and admins alike swearing by tiling window managers, especially the improvements in productivty and workflow. These included: awesomeWM, i3/i3gaps, qtile, bspwm, xmonaid and so on… After test driving all the ones I mentioned above, I settled on xmonad. From my first test-run, it just felt good and right for me. Researching various unique setups, I stumbled across Axarva’s dotfiles-2.0 repo. I really liked his minimalist design and decided to use this as the base for my current setup. I present [Xmonad]: I’ve come to suck your blood.

xmonad-setup(/images/workflow/xmonad-setup.png)

Current

  • XMonad
  • Theme/Colorscheme: Dracula-alt-buttons GTK / Dracula
  • picom (X compositor)
  • tint2 (panels, dock and taskbar)
  • eww (sidebar and dashboard)
  • dunst (notifications)
  • rofi (app switch/launch)
  • kitty (colorls gem + ligatures + autocomplete )
  • zsh (oh-my-zsh + power10k theme)
  • Thunar (file manager)
  • qutebrowser / firefox
  • neovim/vim
  • FiraCode Nerd Font

Kitty’s auto-complete feature is awesome. The fact that you can tab through all command-line switches a command can accept is dope. This setup has 9 workspaces in total to be utilized by 2 independent monitors. I use my external 32” display as primary display above my 14” laptop screen. On the primary monitor, I only use workspaces 1, 3, 5, 7 and 9. I am sure you guessed it, on the laptop I’ll only use 2, 4, 6 and 8. As you’ll see from my config, I utilize auto-placing (doShift) of most windows to specific workspaces, in actuality I auto shift every single app I use on the daily. This works for me and ensures applications are indeed where I expect them to be as to not mess up my workflow. Granted, its a simple keystroke(s) to move them “manually”. I also configured tint2 to visually signal what’s going on,

Workspace Status Color
Active (Current) Green.
Inactive Yellow
Unoccupied Magenta

I do not normally end up using all 9 workspaces at the same time as more often then not I may be only utilizing 4 to 6 workspaces across both displays. Using tint2 to provide a visual legend of which workspace is currently toggled, which workspaces have inactive tasks and which are unoccupied is convenient.

Code:

I am always on the command line for the vast majority of my day/tasks. While I had been using vscodium I wanted to ditch it and go back to vim/nvim. I am familiar with the keybindings and it just works for me. Coupled with an extensive plugin ecosystem you can achieve almost like for like replacement of vscode (CoC anyone?) not to mention for resource footprint is non-existant compared to the 400mb+ for vscodium on a good-day. I am striving to move to a mouse-free development environment. I am well on my way but I still have a ways to go before i can fully ditch my mouse during coding sessions (for good?).

Neovim/vim/Gvim

  • Vundle plugin manager
  • NERDTree (tabs, devicons, syntax highlighting)
  • CoC (must-have)
  • Python/CSS/Javascript related plugins
  • FiraCode Nerd Font / Source Code Pro Nerd Font

Environments:

anaconda3 for:

  • python[2/3]
  • jupyter notebook/lab
  • R/Rstudio
  • spyder
  • virtualenv

nvm for:

  • nodeJS
  • typescript
  • javascript

Tasks

My workflow includes dealing with fairly detailed and comprehensie tasks (or todo) list that I interact with multiple times per-dday both personally and professionally. I have been using todo.sh for quite sometime and only recently (since my move to XMonad) had I used it outside of the terminal. Thaks to the dofi project, I was able to wrap todo-txt insie of Rofi and invoke via Win + D

task management

Keybindings

This functionality is the main driving force behind my switch in workflow to a tiling window manager as my daily desktop environment. I am quite aware you have plenty of keybindings for the other major DE’s on Linux. Using a gnome extension I am able to auto place a window in a certain workspace, which xmonad handles right out of the box. Borders and Menus in xmonad? Gone.. here we can configure keybindings for all tasks we need to do. Literally, I may post my entire xmonad.hs soon to show you the level of granularity you can achieve.

Keybind Function
Win + Shift + Enter Launch terminal (alacritty)
Win + Shift + C Close window
Win + O Open rofi menu
Win + Shift + Q Open rofi powermenu
Win + S Open sidebar
Win + Shift + S Close sidebar
Win + Control + S Open rofi ssh menu
Win + d Open tasks in rofi
Win + Control + R Open calibre library
Win + P Open dashboard
Win + Shift + P Close dashboard
Win + B Toggle the main bars
Win + Z Activate inhibitor (Stops autolocking)
Win + Shift + Z Dectivate inhibitor (Enables autolocking)
Win + Ctrl + G Toggle gaps (toggle to get screen space)
Win + J Navigate through windows
Win + K Navigate through windows
Win + Space Switch through layouts
Win + T Make a floating window tiled
Win + F Launches Firefox
Win + Left Click doFloat + move window
Win + Right Click Resize window and doFloat
Printscreen Take screenshot,
Win + v Show visualizer
Win + F1 Lockscreen
Win + Printscreen Start screen recordingg
Win + Ctrl + Print Stop screen recording

I hope this inspires someone to mix things up and change up their workflow and environments. I found that productivity has increased substantially since I rarely mvoe my hands from the keyboard and the distractions are minimal on screen. Of course this all is null and void if I cannot stay on task, but thankfully I have integrated todo.sh into my workflow as I am still learning to be disclipined while working from home. More to come on that. If you are interested in running this very same setup, you can head over to github and check out my dotfiles but you’ll definitely need to be a fan of the dracula colorscheme cause its present everywhere in my setup.

Later and happy tiling!!