the post and other stylistic fixes
This commit is contained in:
parent
525b7aaf98
commit
db3e99226e
4 changed files with 71 additions and 9 deletions
|
|
@ -16,7 +16,7 @@ After many months of using the aforementioned `make` based setup, I had a few qu
|
||||||
asserting that my outputs matched those of the sample test cases
|
asserting that my outputs matched those of the sample test cases
|
||||||
- <u>External dependencies</u>: it unsettles me that my bare-bones setup
|
- <u>External dependencies</u>: it unsettles me that my bare-bones setup
|
||||||
required copy-pasting an entire suite of scripts
|
required copy-pasting an entire suite of scripts
|
||||||
- <u>Non-native NeoVim experience</u>: while composition and the UNIX philosophy
|
- <u>Non-native neovim experience</u>: while composition and the UNIX philosophy
|
||||||
are great, there's only so much you can do with pipes and files. - Raw I/O
|
are great, there's only so much you can do with pipes and files. - Raw I/O
|
||||||
files meant I couldn't see colored stdin/stdout - Fine-grained per-testcase
|
files meant I couldn't see colored stdin/stdout - Fine-grained per-testcase
|
||||||
I/O was suspect--isolating and running a subset of test cases required manual
|
I/O was suspect--isolating and running a subset of test cases required manual
|
||||||
|
|
@ -34,9 +34,9 @@ The GitHub page documents the plugin well enough so I'll avoid re-hashing it her
|
||||||
consider the following in my active development of the plugin:
|
consider the following in my active development of the plugin:
|
||||||
|
|
||||||
- Comprehensive continuous integration (_real_ testing, linting, and more)
|
- Comprehensive continuous integration (_real_ testing, linting, and more)
|
||||||
- [LuaRocks](https://luarocks.org/) integration (the future of NeoVim package management)
|
- [LuaRocks](https://luarocks.org/) integration (the future of neovim package management)
|
||||||
- Concise and thorough Vimdoc documentation that communicates effectively
|
- Concise and thorough Vimdoc documentation that communicates effectively
|
||||||
- Modern lua tooling: use of [busted](https://lunarmodules.github.io/busted/), [selene](https://kampfkarren.github.io/selene/) and more integrated with the NeoVim lua interpreter
|
- Modern lua tooling: use of [busted](https://lunarmodules.github.io/busted/), [selene](https://kampfkarren.github.io/selene/) and more integrated with the neovim lua interpreter
|
||||||
- Sensible user defaults & extreme customization
|
- Sensible user defaults & extreme customization
|
||||||
- Proper versioning, tagging, and releases
|
- Proper versioning, tagging, and releases
|
||||||
|
|
||||||
|
|
@ -46,15 +46,15 @@ The GitHub page documents the plugin well enough so I'll avoid re-hashing it her
|
||||||
[echasnovski](https://github.com/echasnovski) are my greatest inspirations as
|
[echasnovski](https://github.com/echasnovski) are my greatest inspirations as
|
||||||
an open-source developer and I've had enough of taking without giving back.
|
an open-source developer and I've had enough of taking without giving back.
|
||||||
|
|
||||||
- In the coming months I plan to contribute to [NeoVim core](https://github.com/neovim/neovim), including making `:checkhealth` asynchronous and integrating an [mdx](https://mdxjs.com/) parser.
|
- In the coming months I plan to contribute to [neovim core](https://github.com/neovim/neovim), including making `:checkhealth` asynchronous and integrating an [mdx](https://mdxjs.com/) parser.
|
||||||
|
|
||||||
3. <u>Learning Random things</u>: I think this plugin is *really* cool by virtue
|
3. <u>Learning Random things</u>: I think this plugin is *really* cool by virtue
|
||||||
of its efficacy and the miscellany of knowledge I accrued in the 15k+ LOC as
|
of its efficacy and the miscellany of knowledge I accrued in the 15k+ LOC as
|
||||||
of version v0.3.0. Some things I learned include:
|
of version v0.3.0. Some things I learned include:
|
||||||
|
|
||||||
- <u>ANSI terminal colors and escape codes</u>: I wrote my own stateful ANSI
|
- <u>ANSI terminal colors and escape codes</u>: I wrote my own stateful ANSI
|
||||||
escape sequence parser to map raw bytes to native NeoVim highlighted text
|
escape sequence parser to map raw bytes to native neovim highlighted text
|
||||||
- <u>Extmarks</u>: NeoVim extmarks (`:h extmarks`) are extremely powerful. Here,
|
- <u>Extmarks</u>: neovim extmarks (`:h extmarks`) are extremely powerful. Here,
|
||||||
I used them to apply dynamic highlighting across various components of the
|
I used them to apply dynamic highlighting across various components of the
|
||||||
plugin but I also plan to leverage virtual text to catch compile errors in
|
plugin but I also plan to leverage virtual text to catch compile errors in
|
||||||
real-time
|
real-time
|
||||||
|
|
|
||||||
|
|
@ -31,5 +31,5 @@ Unfortunately, sway was too fragile. The floating window support was juvenile (i
|
||||||
|
|
||||||
- compositor: hyprland
|
- compositor: hyprland
|
||||||
- screen lock: [hypridle](https://wiki.hypr.land/Hypr-Ecosystem/hypridle/)
|
- screen lock: [hypridle](https://wiki.hypr.land/Hypr-Ecosystem/hypridle/)
|
||||||
- browser: [google chrome](https://www.google.com/chrome/)
|
- browser: [Google Chrome](https://www.google.com/chrome/)
|
||||||
- Sigh... I know. I had ungoogled-chromium freak out when using my hardware key and completely break. Cookie-related issues also required me to be proactive with respect to website permissions. With all the weird sites I browse this was not a recipe for success. Do not ask about the sites I browse.
|
- Sigh... I know. I had ungoogled-chromium freak out when using my hardware key and completely break. Cookie-related issues also required me to be proactive with respect to website permissions. With all the weird sites I browse this was not a recipe for success. Do not ask about the sites I browse.
|
||||||
|
|
|
||||||
|
|
@ -3,4 +3,66 @@ title: "improving my developer workflow"
|
||||||
date: "26/12/2025"
|
date: "26/12/2025"
|
||||||
---
|
---
|
||||||
|
|
||||||
wip
|
# the problem
|
||||||
|
|
||||||
|
Everything about my workflow was slow.
|
||||||
|
|
||||||
|
# some context
|
||||||
|
|
||||||
|
Since May 2025, I've been using the same tmux+neovim-centric setup. Sessions house projects, performing different duties in different windows. It worked for me at the time. However, after a summer at DRW and a fall at Ramp, this became far from the case. During both internships I was met with more tools, third-party integrations, (begrudgingly) Macs, and a litany of previously irrelevant inefficiencies. Here are some problems that I ran into:
|
||||||
|
|
||||||
|
# the problems
|
||||||
|
|
||||||
|
- <u>Vibe coding</u>: I switched back and forth between
|
||||||
|
Claude/Cursor/Windsurf/neovim in nearly every commit.
|
||||||
|
- <u>Poor OS understanding</u>: I waddled my way through the MacOS ecosystem. I
|
||||||
|
barely understood how the OS, package managers, and display manager worked,
|
||||||
|
preventing me from efficiently automating it.
|
||||||
|
- <u>Archaic git workflow</u>: Now that I was frequently collaborating on large
|
||||||
|
codebases, I needed to context-switch rapidly. I could not. This was primarily
|
||||||
|
due to two things: 1. <u>Nonexistent task management system</u>: I used a raw
|
||||||
|
`.txt` file to manage my priorities. I have also been known to use Chrome tabs
|
||||||
|
as a backup todo list. 2. <u>Poor workflow processes</u>: creating PRs,
|
||||||
|
leaving reviews, and iterating was slow. Coding was slow. Typing was slow. My
|
||||||
|
neovim broke _all_ the time. It was nearly impossible to keep my Linux config
|
||||||
|
in sync when I went home to code on personal projects.
|
||||||
|
|
||||||
|
# the solutions
|
||||||
|
|
||||||
|
- <u>Quit MacOS</u>: easy enough.
|
||||||
|
- <u>Quit vibe-coding</u>: I used vibe-coding to replace my train of thought
|
||||||
|
rather than amplify it.
|
||||||
|
- <u>Constantly tweak</u>: Humility, coupled with the willingness to adapt,
|
||||||
|
would render every point above moot. I constantly analyze and improve my
|
||||||
|
config to a reasonable[^1] extent. For example, I recently extended a hyprland
|
||||||
|
windowing script to interactively prompt for a desired selection. This is
|
||||||
|
because I would consistently pull incorrect Chrome instances with multiple of
|
||||||
|
them open at a time, forcing me to manually reorder them. Evidence of this
|
||||||
|
constant iteration can be found in the revitalized history of my
|
||||||
|
[dotfiles](https://github.com/barrett-ruth/dots).
|
||||||
|
- <u>Use tools that "just work"</u>: one of my friend's fathers told me that I
|
||||||
|
was not special during a lacrosse practice in elementary school. I used many
|
||||||
|
programs to feel special, from quirky Linux window managers to niche Neovim
|
||||||
|
plugins. I eliminated tools that could not stand the test of time and
|
||||||
|
sparingly chose well-regarded ones to replace them. For example, I dropped
|
||||||
|
swaywm for hyprland and ungoogled-chromium for Google Chrome (see [my suckless
|
||||||
|
post](/meditations/suck-less-or-suck-more.html)).
|
||||||
|
- <u>Manage tasks effectively</u>: develop a philosophy for prioritizing and
|
||||||
|
solving problems. Find or make a program that implements it and immediately
|
||||||
|
abandon *everything* else. [taskwarrior](https://taskwarrior.org/) and some
|
||||||
|
custom scripts worked for me.
|
||||||
|
|
||||||
|
## appendix: config changes, enumerated
|
||||||
|
|
||||||
|
Here are only a few of the config changes I made in the past month:
|
||||||
|
|
||||||
|
- Configure hyprland windows extensively to my needs. I can instantly pull and push any window in any workspace without having to memorize application-to-workspace number mappings.
|
||||||
|
- Perform all coding-related tasks in one neovim instance rather than separate windows. This creates an improved separation of concerns and seamless integration with git actions and project task management.
|
||||||
|
- Use taskwarrior for tasks and todo management.
|
||||||
|
- Use Google Chrome search engines as URL shortcuts, the [fuzzy url finder](https://chromewebstore.google.com/detail/ff-fuzzy-finder-for-chrom/dbgeolnmmjmhcfndmmahnpicpmnpibep?hl=en) chrome extension to find URLs, and [a tab numberer](https://chromewebstore.google.com/detail/chrome-show-tab-numbers/pflnpcinjbcfefgbejjfanemlgcfjbna?hl=en) to find tabs.
|
||||||
|
- Make dotfiles OS-agnostic through a variety of OS-specific conditionals in configs and refactoring the directory structure to mirror that of the Unix-like file structure (my dots repo now has `.config`, `/etc` folders).
|
||||||
|
- Use [lf](https://github.com/gokcehan/lf) for quickly opening files. This was a common action for me: automate it. Also, waste a day of your life to write an awesome previewer that supports native (treesitter/vim syntax!) neovim highlighting and video/pdf/gif support.
|
||||||
|
- Auto-theme switching (see [here](/git/auto-theme.nvim.html)).
|
||||||
|
- Swap to a stable AppImage build of my PDF reader, [sioyek](https://sioyek.info/), to avoid versioning dependencies.
|
||||||
|
|
||||||
|
[^1]: This is an art form. I leverage time-blocking, making changes _only_ based on evidence (i.e. how often do I perform this action in practice?) and intentionally selecting tools after extensive research/trial. I explored around 10 plugins before settling on [overseer.nvim](https://github.com/stevearc/overseer.nvim) when configuring how to run tasks and projects.
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ I wanted the following features in my competitive programming (cp) setup:
|
||||||
|
|
||||||
- Flexibility: support various environments (codeforces, USACO, cses, etc.) with ease
|
- Flexibility: support various environments (codeforces, USACO, cses, etc.) with ease
|
||||||
- Speed: instantaneous, non-blocking running/debugging; automatic environment configuration and easy code testing
|
- Speed: instantaneous, non-blocking running/debugging; automatic environment configuration and easy code testing
|
||||||
- Editor-Agnostic: while I do provide first-in-class NeoVim integration for my setup, it should be easily portable to _any_ os/editor
|
- Editor-agnostic: while I do provide first-in-class neovim integration for my setup, it should be easily portable to _any_ os/editor
|
||||||
|
|
||||||
# the solution
|
# the solution
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue