Before we get into it
This post is not a tutorial. It is instead a description of a system, which may or may not be useful to your situation. With AI and YouTube alone, you can certainly work your way up from here. My goal is to simply tell you about a possible system where everything you do can be unified with a single tool that is customizable, powerful and efficient.
A key bit of information: while I enjoy some coding and have developed an R package, I’m not a developer—far from it. I’m an enthusiast, sure, but ultimately I’m a linguist who needs efficient tools data analysis and for certain types of documents that I use in research and teaching. That’s it. The more efficient the tool, the better, since that means I will be able to accomplish the same task in less time. I say this to show you that certain tools are extremely useful even if you don’t work with software development.
How I used to work
For a long time (graduate school included), I used different software for different purposes. For example, my app of choice for document preparation using LaTeX was Texpad. For data analysis, I use R, so RStudio was my IDE of choice. I used RStudio for Quarto and Shiny Apps too, for obvious reasons. Then I also used a text editor for general stuff, and my favorite editor was Sublime Text.
This was a good workflow, but it had its cons. First, while I could have snippets for RStudio, I couldn’t have the same level of flexibility for LaTeX given the IDE that I used at the time. Second, none of the tools in question was truly customizable. Third, IDEs can be slow, as they’re typically heavier than a text editor. I did use Sublime Text as a LaTeX editor for a brief period, and I really enjoyed it: it was efficient and very fast. But again, I was still using multiple tools to accomplish multiple tasks. Ultimately, multiple tools means multiple sets of keymaps, snippets (when they’re even possible), multiple configurations, etc. It worked well, but it was far from perfect.
How I work now
In a nutshell, I now use NeoVim for everything, so I rarely leave the Terminal for work-related tasks. It’s my editor for LaTeX and for R, but also for Shiny Apps and Quarto, which includes web-related work (e.g., this website) and typst (what I use to create the short version of my CV, for example). I use the LazyVim distribution (which already includes several useful plugins), and add some plugins on top, which allow me to use it as my only “work tool”. Neovim is used inside the Terminal, and my terminal of choice is Ghostty. Along with Ghostty, I also use Oh My Zsh (framework to manage your Zsh configuration) and Starship, a customizable prompt for the terminal.
You can see below all the plugins that I use in NeoVim. In the spell directory, you can also see my custom dictionaries for English, French and Portuguese.
├── init.lua
├── lazy-lock.json
├── lazyvim.json
├── LICENSE
├── lua
│ ├── config
│ │ ├── abbreviations.lua
│ │ ├── autocmds.lua
│ │ ├── keymaps.lua
│ │ ├── lazy.lua
│ │ └── options.lua
│ ├── plugins
│ │ ├── alpha.lua
│ │ ├── autosession.lua
│ │ ├── blink.lua
│ │ ├── colorizer.lua
│ │ ├── colorscheme.lua
│ │ ├── disabled.lua
│ │ ├── example.lua
│ │ ├── gruvbox.lua
│ │ ├── lualine.lua
│ │ ├── luasnip.lua
│ │ ├── mason.lua
│ │ ├── org-list.lua
│ │ ├── quarto.lua
│ │ ├── r-nvim.lua
│ │ ├── smear-cursor.lua
│ │ ├── snacks.lua
│ │ ├── tinymist.lua
│ │ ├── todo-comments.lua
│ │ ├── typst-preview.lua
│ │ ├── typst-syntax.lua
│ │ └── vimtex.lua
│ └── snippets
│ ├── Qmd.lua
│ ├── R.lua
│ └── tex.lua
├── README.md
├── spell
│ ├── en.utf-8.add
│ ├── en.utf-8.add.spl
│ ├── fr.utf-8.add
│ ├── fr.utf-8.add.spl
│ ├── fr.utf-8.spl
│ ├── fr.utf-8.sug
│ ├── pt.utf-8.add
│ ├── pt.utf-8.add.spl
│ └── pt.utf-8.spl
└── stylua.toml
With NeoVim, you get vim motions, which make everything faster. But you can also have snippets that work across the board, so I have a collection of snippets for tex, md, qmd, and R files, all inside the same environment. These are all conditional, so .tex snippets are only available when I’m in a .tex file. On top of that, you have the ability to create custom abbreviations (which I use for phonetic symbols in .txt files for notes), and, crucially, keymaps. All of this makes you extremely fast. Finally, I have a LaTeX package with a long list of functions and macros that I use, which help me typeset phonetic transcriptions, trees, boxes, custom text, and a lot of small things that are annoying to write repeatedly but which are very fast if you have a function ready. This package, combined with snippets and comprehensive auto-completion, means that I can produce complicated and aesthetically-pleasing documents very quickly.
I also use Homebrew to manage packages, so I never have to update/install packages manually.1 Finally, my zshrc file (I use zsh) contains a lot of aliases and functions that allow me to streamline numerous tasks. You can easily create bash functions using AI these days, and that can be extremely helpful if you know how to describe exactly what you want/need (Claude.ai is especially useful here). Here are some examples:
- Create a new blog post for this website with a single command
- Transcribe an audio file using
whisper-cli - Flatten long PDFs
- Create a slide presentation for conferences or teaching using my own template
- Update all of your LaTeX/R packages
Here’s a line that I run regularly. It updates all apps, all LaTeX packages, and all R packages I have installed. Since these are the tools I use the most, this single line is incredibly useful (I used to include Python modules as well).
brew upgrade; brew cleanup; updateTex; updateRI should also mention that I use different terminal-based apps to improve my terminal experience. This includes plugins to optimize git, auto suggestions, gh, zoxide, a file manager (Yazi), and many others. Finally, with all these files, plugins and packages, it’s essential to make sure they’re well synchronized and backed up. For that, I use chezmoi, which allows me to have all of my dot files in sync across my home and work laptops.
The whole point of this workflow is simple: maximize efficiency. While it did take a while for me to get used to NeoVim and to master this system, it is now incredibly fast to produce documents and manage files. At the end of the day, you stay in the terminal and never have to worry about manually installing/updating libraries or packages. You also have a unified environment where you use your own keymaps and snippets. Its highly customizable, which means you can create an environment that matches exactly what you need. It’s not an exaggeration to say this workflow has doubled my efficiency (conservative estimate) at producing documents.
Copyright © 2025 Guilherme Duarte Garcia
Footnotes
Examples include: Praat, Audacity, Positron, Quarto, Zoom, Vivaldi, Firefox, pipx, Skim, and many other apps.↩︎
