TL;DR
Converting Markdown to PDF on the Ubuntu desktop should be one command. Instead it took pandoc, a 295 MB LaTeX install, a Unicode error that killed the build, an LLM that recommended the wrong package manager, a 328 MB install I cancelled, and a tool called typst that apt flatly refused to install. I eventually gave in, let the 328 MB install finish, and used XeLaTeX – it still threw a warning.
This is just 1 reason that is a drop in the ocean of why linux and linux desktop sucks.
Nothing Works on the Linux Desktop
Nothing works.
On the Linux desktop.
On Ubuntu desktop.
Nothing just works.
You have to struggle, potter around, ask Sloppie, and install some small thing that turns out to need 328 MB of disk space from 42 different packages and their dependencies.
Trying to convert Markdown to PDF takes you on a journey of discovery.
The Journey: Markdown to PDF on Ubuntu
- You need
pandocto do the conversion. - You install
pandoc. pandocdoesn’t come withpdflatex; you have to inject your preferred PDF engine.- So you install it — except it isn’t simply
pdflatex, it’s calledtexlive-latex-base texlive-fonts-recommended. - Now you try the conversion again and it doesn’t work for Unicode.
- You ask an LLM and it says you can use
typst. What istypst? I don’t know — I just want to convert my file to PDF. - You attempt to install
typst. - You can’t install
typstwithapt; you have to usesnap. What issnap? I don’t know — some custom Ubuntu-only dependency repo. - You consider giving up and using an online converter that will note all your public info and scrape potential secrets from the file.
So You Ask a Slop Machine
Then you ask an LLM slop machine, and this is what it says:
Your lualatex install is missing fonts (lmroman not found) — fixing TeX means another 400 MB of texlive-* packages. Skip it.
Install typst instead (small, handles Unicode natively):
sudo apt update && sudo apt install -y typst
pandoc hating-life-with-linux-desktop-muse.md -o muse.pdf --pdf-engine=typst
No-install fallback: I already built muse.html — open it in Chrome -> Print -> Save as PDF.
So it recommends using apt when Ubuntu forces you to use shit snapple.
Just wish things would work first time.
Terminal Output, in Case Anyone Cares
Trimmed to the parts that matter:
$ pandoc non-opencode-copy-paste-deep-seek-v4-pro.md -o deepseek.pdf
pdflatex not found. Please select a different --pdf-engine or install pdflatex
$ sudo apt install pdflatex
E: Unable to locate package pdflatex
$ sudo apt install texlive-latex-base texlive-fonts-recommended
[... apt install output omitted ...]
Need to get 122 MB of archives.
After this operation, 295 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
$ pandoc cleaned.md -o deepseek.pdf
Error producing PDF.
! LaTeX Error: Unicode character ▼ (U+25BC)
not set up for use with LaTeX.
See the LaTeX manual or LaTeX Companion for explanation.
Type H for immediate help.
...
l.265 \end{verbatim}
$ pandoc cleaned.md -o deepseek.pdf --pdf-engine=typst
typst not found. Please select a different --pdf-engine or install typst
$ sudo apt install texlive-xetex
[... apt install output omitted ...]
Need to get 95.8 MB of archives.
After this operation, 328 MB of additional disk space will be used.
Do you want to continue? [Y/n] ^C
$ sudo apt install typst
No apt package "typst", but there is a snap with that name.
Try "snap install typst"
E: Unable to locate package typst
That’s where the log stops. Not long after, I gave in.
Conclusion
I succumbed and installed the 42 packages that use 328 MB of space — packages I have no clue why I need or what they do.
It finally converted to PDF, albeit with a shitty warning that will annoy me until I eventually go down a two-hour rabbit hole to understand what it means.
$ pandoc hating-life-with-linux-desktop_clean.md -o hating-life.pdf --pdf-engine=xelatex -V mainfont="DejaVu Sans"
[WARNING] Missing character: There is no ▼ (U+25BC) (U+25BC) in font [lmmono10-regular]:!
So the answer was --pdf-engine=xelatex with a font that actually has the characters. Except the warning is still there, because mainfont doesn’t cover code blocks – and the monospace font has apparently never met ▼.
Final Thought
If that first pandoc command had worked, this post wouldn’t exist.
It didn’t, and here we are: a rant about a five-minute job that ate half an afternoon.
The bulky and convoluted shitstorm of linux package management and tools strikes again.