Hi, my name is Melandel and this project was born from my desire to feel as efficient as possible while developping software.
The main criteria for me is minimizing context switches.
As a C# developer, I spent 4 years using the Visual Studio IDE (up to the 2019 version, with ReSharper). My day-to-day workflow made me unhappy. It involved:
Searching with my eyes | for the feature I was looking for on the screen |
Scrolling | to the data I was looking for |
Clicking link after link | to finally reach the page with button or input I was looking for |
Using both an IDE and a text editor | the first for the code, the second for drafts and notes |
Having multiple file explorer windows | for copypasta, for diffs, for downloads, for exploration |
Switching back and forth between the keyboard and the mouse | when working with two splits on the same screen |
Visual pollution taking space on the screen | buttons, menus, docked windows I have no immediate use for |
Disruptive waiting times | while firing up the IDE/ReSharper, while firing up the unit tests, while upgrading the IDE |
All these issues seemed to point to one main pain point:
Context switching |
---|
My brain's PROBLEM-SOLVING mode was constantly disrupted by some FIND-WHAT-YOU-ARE-LOOKING-FOR or BROWSE-TO-YOUR-DESTINATION process. |
So now I know I want an environment that lets me stay in PROBLEM-SOLVING mode as consistently as possible. What could it involved ?
Keeping up with the speed of my thoughts |
---|
Fast and lightweight commands |
One interface for every tool |
Requests to a search engine over scrolling/following links/parsing the screen with my eyes |
Display only what I need in the immediate moment on the screen |
I also want to be able to use it from any operating system.
My experience suggests that the following files/folders address my different needs:
[…]/todo |
Keeps track of my todo list, what I want done at the end of the current day |
[…]/done |
Keeps track of how productive I have been lately |
[…]/achievements |
Keeps track of the major steps that my productivity allowed me to reach |
[…]/projects/** |
Regroups all the source code I'm editing |
[…]/config/* |
Regroups all the config files I'm using for all my tools |
[…]/tmp/* |
Regroups stuff that I need at the moment but don't care afterwards |
[…]/notes/* |
Regroups stuff that I want to keep somewhere |
[…]/notes/media/* |
Regroups pictures (or other resources) I want to display in my markdown notes |
[…]/snippets/* |
Regroups all the text snippets I create |
[…]/templates/** |
Regroups all the folder structure templates I create |
[…]/tools/** |
Regroups all the tools I use as part of my workflow |
I went with a dev environment made mostly from vim.
Vim is fast. |
Vim is lightweight. |
Vim offers a universal interface for every tool (read: a cursor positioned on a text buffer). |
Vim offers minimal graphical artifacts. |
Last but not least, Vim offers INSANE customization capabilities. |
Also, VIM will easily ask one year of your lifetime hahaha. Ha... Contemplates the horizon, far away, for an instant...
But here, I'm also using VIM (and I know and understand many whom think this is very wrong) a cement for my whole toolbox:
Tool | Main Feature | Usage |
---|---|---|
Autohotkey | Keyboard remappings | Use CapsLock for Esc/Ctrl, use alphabetical keys for arrows/home/end/AltGr keys, CapsLock+I/M for Tab/Enter |
Git | Version Control System | Helps me add values little by little but more frequently |
Firefox | Web browser | Web browser & Image/pdf/markdown viewer |
Vimium | vim-like keyboard shortcuts | |
AutoFullscreen | set window as fullscreen at startup | |
Markdown Viewer Webext | render markdown files | |
Homify | Add a quote and the current time & date at the bottom of pictures | Use images as background wallpapers |
Fzf | fuzzy finder | Allows me to organize commands/folders by groups with fast selection |
Ripgrep | (fast) Search tool | Fast search for word in file contents |
OmniSharp-roslyn | C# language server | Intellisense for C# |
PlantUML | Text-file-based diagram generation | Helps me build a thought or keep a visual representation of an idea |
Tree | directory listing | Shows the structure of a project |
Nuget | package manager for .NET | Search for nugets names to add to current project |
VIM | Text edition | Edit text, use keyboard for everything, split the screen, select intput and send it to command-line-friendly tools |
editorconfig-vim | Consistent style in a project | tabs vs spaces, CR /LF /CRLF |
ale | Asynchronous Linting Engine | Show errors and warnings on current file in real time |
fzf.vim | Fzf wrapper for vim | Offer fast selection of commands or files/folders |
lightline.vim | Lightweight status line customization | Show time & date, path-from-git-root, parent sln-or-csproj, window/tab number |
omnisharp-vim | Provides vim commands for C# intellisense | Go to Definition, Find Symbol, Find usages, Get Documentation, Fix Usings, Run Tests, etc. |
vimspector | Debugger inside vim | Toggle Breakpoint, Add Breakpoint with condition, Start/Stop/Re-run debugging session, Step In/Out/Over, etc. |
ultisnips | Ability to use snippets in vim | cls+ → `public class |
vim-dirvish | Path navigator | File explorer (similar usage from vifm) |
vim-dadbod | Database interaction from vim | database querying |
vim-surround | delete, change, add surroundings ({[(<"'>)]} ) |
|
tabular | Vertical alignment | Markdown tables, C# property mappings, etc. |
vim-fugitive | Git in vim | git operations (log/commit/add/push/checkout/merge) |
vim-obsession | Session in vim | Start with everyone left the way they were when leaving vim the last time |
vim-css-color | Show hex colors in background highlighting | When tweaking my color theme mainly |
targets.vim | Improved text objects | Argument text object, next/2nd next/last/2nd last text object |
vim-empower | My colorscheme | Feel in an empowering environment all day |
gvimtweak | Handle opacity/fullscreen features in (windows?) gVim | |
7-zip | compression/decompression | Install binaries on Windows |
WSL2 | Windows Subsystem for Linux 2 | Feel in an efficient and comfortable environment under my control |
Windows Terminal | A Decent terminal on Windows | Emoji support, several tabs in one window in Windows |
Install:
Add environment variable:
VIMINIT
tosource %HOMEPATH%\Desktop\config\my_vimrc.vim
D2_LAYOUT
totala
MELANDEL_RESOURCES_JSON
to%HOMEPATH%\Desktop\config\resources.json
Also:
cd %homepath%
mklink /d vimfiles %HOMEPATH%\Desktop\config\myVim
mkdir vimfiles
mklink /J vimfiles/ultisnips %homepath%\Desktop\config\myVim\UltiSnips
gvim
, tools/myAzertyKeyboard.RunMeAsAdmin.exe
and your internet browser should be run when the system starts up.
On Windows, for each program that should be run at startup:
Start > run > shell:startup > create a file with .vbs
extension that looks like this example for firefox:
Set WshShell = CreateObject("WScript.Shell" )
Set wshSysEnv = wshShell.Environment("PROCESS")
webBrowserPath = """" & wshSysEnv("HOMEPATH") & "\Desktop\tools\firefox\firefox.exe" & """"
WshShell.Run webBrowserPath, 0
Set WshShell = Nothing
Windows Terminal
has a particular configuration item "startOnUserLogin": true
.
Don't forget to set the target of the task bar icon to $HOME\Desktop\tools\vim\gvim.exe -S
and its startup directory to $HOME
in order to use and locate Vim's session file properly!