In a French lycée curriculum, it’s common for students to take both humanities and scientific courses—sitting in philosophy one moment and moving on to complex physics equations the next. To prevent my illegible handwriting from hindering my ability to review notes later, I switched to typing on a laptop. However, Microsoft Word and Google Docs felt constraining—was I really expected to use the drop‑down menu to insert an equation while keeping up with the lecture? Of course not. So I searched for a better option.
I’d used LaTeX before—its precision in typesetting both prose and equations was revolutionary. I was also already familiar with Neovim, which minimizes mouse movements by keeping your hands on the keyboard, greatly boosting editing speed. One evening I thought: what if I could combine both tools on Linux to create the ultimate note‑taking setup? That’s when Gilles Castel’s article intrigued me—I realized I could merge LaTeX, Neovim, and Linux into my own optimized workflow.
Core Terminology: Linux, Neovim, and LaTeX Explained
Linux refers to the open-source kernel used by many operating systems. Combine it with a GNU userland and a package manager, and you would have what we commonly refer to as a Linux distribution (Ubuntu, Fedora, Mint, etc). I initially used Fedora, but eventually transitioned to Arch Linux for its full system control through pacman
.
Neovim(and Vim) is a modal text editor that uses keyboard shortcuts focused on making your editing and writing experience faster. In a typical editor, deleting a line means reaching for the mouse highlight the text, and hitting backspace. In Neovim, it's dd
. Simple. No wasted movement. Once you understand the basics, you can customize your Neovim configuration with Lua, making it even more unique and suited for your needs.
LaTeX is to an academic, what HTML is to web developers. In essence, a markup language that allows you to display and typeset a document, usually in a PDF format, formatted exactly the way you intended. If Neovim is the alternative to a Notepad, then LaTeX is the scriptable alternative to Microsoft Word or Google Docs.
The Search for Excellence: Why LaTeX and Neovim?
Steep, Yet Worthwhile Learning Curves
Neovim was already my go‑to for coding: minimal mouse movement, modal editing, and high efficiency. Its Lua‑based configuration and plugin ecosystem make it infinitely customizable.
LaTeX (pronounced “lah-tech”) dominates academic publishing. I would argue that most STEM PDF files you encounter were typeset in LaTeX.
Customization at the OS Level
While this setup can run on macOS or Windows, my Arch + Hyprland desktop gives me total control: custom window-manager keybindings and a fully personalized taskbar with next‑class reminders and countdowns.
System Overview
- OS: Arch Linux + Hyprland (custom Waybar module).
- Editor: Neovim.
- LaTeX Integration: VimTeX plugin.
- PDF Viewer: Zathura.
- Sync:
- Rclone → OneDrive (PDF-only) for all class notes.
- GitHub for dotfiles (snippets, Hyprland config, init.vim/init.lua).
- Extras:
- A custom Hyprland script that reads my iCloud calendar to display “Next class: [Course] in [Room] in [Countdown]” on Waybar. Clicking it launches my custom Lecture-Management menu.
- An OCR helper using SimpleText.cn or local pix2tex to convert professors’ notes into LaTeX code for quick insertion.
Figure 1: Workflow diagram showing integration of Neovim, LaTeX, and syncing tools
Waybar Module Anatomy
Smart Taskbar for Lecture Navigation
After system boot, my custom Waybar module queries the Google Calendar API to display the next upcoming class with a live countdown. It filters through irrelevant calendar events and preloads 250 days in advance. A single click on the module launches my custom Rofi control panel.
The menu prioritizes the current class and organizes all others under a submenu. Each course has six options:
- New Lecture — Creates a new lecture note incremented from the previous, launches the Neovim file via a template for the class, zathura opened alongside.
- Last Lecture — Opens the last lecture's PDF for reviewing.
- View All Lectures — Lists all the lectures for the trimestre with the title and date. Opens the respective file if clicked.
- Last Two Lectures — Compiles the last two lectures into one PDF file for a quick recap.
- Course Summary — Compiles all lectures for the current trimestre into one PDF file.
- Course Information — Opens my course information in my web browser.
Video 1: Rofi menu Showcase in my Arch system
Setup Walkthrough
Neovim Configuration
Your setup typically includes:
- A plugin manager (e.g. vim-plug).
- VimTeX for LaTeX support.
- UltiSnips (or another snippet engine).
Custom Snippets: The Game Changer
Developing custom snippets for math expressions, chemical formulas, and formatting patterns transformed my workflow. Tasks that once took minutes, where I had to recall every piece of syntax—like writing a complex integral or a chemical reaction—now take seconds. For humanities courses, I created snippets for commonly used words or phrases.
Video 2: Demonstration of using a snippet to insert a LaTeX align environment in my old Fedora system
PDF Workflow in Action
Click the Rofi "New Lecture" button to make a new lecture note, the file is launched in Neovim, and the matching PDF appears in Zathura. In any given lecture, I type notes with all my plugins. After class, a sync script pushes my dotfiles to GitHub and updates OneDrive via Rclone, so my notes become available on every device. For a more detailed walkthrough with efficiency based plugins, I encourage you to check Castel's article.
Automated Template Engine
Creating a new lecture note is now automated, and takes less than a second. On click, the system generates the right .tex files based on the last lecture's number. Here's how it works:
- The script detects which course is ongoing via the Google Calendar API and retrieves the latest trimester folder.
-
It scans the directory to find the last lecture, i.e.
Lecture_5
—and then createsLecture_6
. -
Each course has a reusable LaTeX template with placeholders:
These are replaced with:\section*{{title}} \date{{date}}
{{title}}
→Lecture 6
{{date}}
→ today's date inYYYY-MM-DD
format
-
The resulting file is saved in a new folder like:
~/Documents/Year 1 - University of Ottawa/CLA 2570/Trimester 1/Lecture_6/Lecture_6.tex
- Finally, it launches the new file in Neovim and opens the PDF viewer (Zathura) on the side for live preview.
Syncing
Managing both configuration and academic files demands two forms of synchronization:
- Dotfiles to GitHub.
- Lecture PDFs to OneDrive (via Rclone).
My system is capable of automating both with a single script.
Dotfiles with Git
Every time the script is run, it stages, commits, and pushes my changes in my $HOME
directory to my GitHub repo. If there's nothing to commit, it proceeds without error. This means my entire Neovim, Hyprland, and shell environment is always remotely backed up and can be reproduced on any new machine.
Academic Syncing with Rclone (PDF-only)
The script selectively syncs only .pdf
files from folders named Trimester*
inside all class directories under my academic folder.
Directory structure example:
Documents/
└── Year 1 - University of Ottawa/
├── CLA2570/
│ └── Trimester 1/
│ ├── Lecture 1/
│ │ └── lec_1.pdf
│ ├── Lecture 2/
│ │ └── lec_2.pdf
│ ├── Summary/
│ │ └── summary.pdf
│ └── Recap/
│ └── recap.pdf
├── PSY1101/
│ └── Trimester 1/
│ ├── Lecture 1/
│ │ └── lec_1.pdf
This structure is preserved when syncing to OneDrive, keeping the cloud directory clean with only final PDF files.
Code Excerpt
for class_dir in "$SYNC_SOURCE"/*/; do
find "$class_dir" -type d -name '*Trimester*' | while read -r trimester_dir; do
rel_path="${trimester_dir#$SYNC_SOURCE/}"
rclone sync --progress --verbose --include='**/*.pdf' --exclude='*' \
"$trimester_dir" "$RCLONE_REMOTE/$rel_path"
done
done
Custom Browser Start Page
To optimize my workflow beyond what I had, I built a fully customized start page for my web browser. This page is divided into three distinct sections, each with its own tools.
1. Academia
This section groups all my essential academic resources for quick access:
- uZone: University portal for grades, announcements, and schedules.
- Brightspace: Course materials and assignment submissions.
- OneDrive: Cloud storage syncing all my lecture PDFs and documents.
- LaTeX OCR: Tool to convert handwritten notes or images into LaTeX code.
- Google Docs: Collaborative document editing platform.
- Outlook: University email and calendar access.
2. Correspondence
This section centralizes all communication and task management platforms I rely on daily:
- Calendar: Google Calendar for event tracking and scheduling (linked with my Waybar class module).
- Gmail: Personal email inbox.
- WhatsApp: Messaging.
- Task Management: Links to Todoist to prioritize and track daily goals.
- GitHub: Version control and project management hub.
3. Refinement
This section includes tools aimed at personal development and productivity enhancement:
- Claude: AI assistance.
- ChatGPT: AI assistance.
- Notion: Knowledge base and note-taking platform complementing my Obsidian vault.
- Typing Test: MonkeyType for improving typing speed and accuracy.
- YouTube: Quick access to educational videos and tutorials.
This start page is built with custom CSS and minimal JavaScript to ensure fast load times. It replaces a generic browser homepage, perfectly aligning with my overall optimized academic workflow.

Figure 2: Custom homepage
Conclusion
This LaTeX + Neovim (+ Arch + Hyprland) setup transformed my note-taking from scribbled chaos into an elegant, efficient system, getting twice as many compliments as my old handwritten notes ever received.
The learning curve can be steep, but if you start with homework assignments and gradually move to live lecture notes, it will be more manageable. Above all, try to resist the urge to perfect every page, simply focus on capturing the essential ideas, and your notes will be more than presentable in any case.