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:
VIMINITtosource %HOMEPATH%\Desktop\config\my_vimrc.vimD2_LAYOUTtotalaMELANDEL_RESOURCES_JSONto%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\UltiSnipsgvim, 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 = NothingWindows 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!