[HN Gopher] Show HN: TUI for managing XDG default applications
       ___________________________________________________________________
        
       Show HN: TUI for managing XDG default applications
        
       Author here. I made this little TUI program for managing default
       applications on the Linux desktop.  Maybe some of you will find it
       useful.  Happy to answer any questions.
        
       Author : mitjafelicijan
       Score  : 105 points
       Date   : 2026-01-25 11:19 UTC (11 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | untech wrote:
       | Looks neat!
        
       | sourcegrift wrote:
       | No one on earth has so far managed to get xdg default apps work
       | on Linux. I've been failing since 19 years personally. If you've
       | really succeded then congratulations!
        
         | nickjj wrote:
         | > No one on earth has so far managed to get xdg default apps
         | work on Linux.
         | 
         | I've only been using Linux for a few weeks but what am I
         | missing here?
         | 
         | I set a bunch of mime types in `~/.config/mimeapps.list` which
         | are assigned to desktop apps and they all open perfectly with
         | `xdg-open` or when I launch them through a file manager.
         | 
         | It is documented in the XDG specification
         | https://specifications.freedesktop.org/mime-
         | apps/latest/file....
        
           | forgotpwd16 wrote:
           | For me currently, when trying to open a `text/markdown` file,
           | there's a disassociation between what my file manager (Caja)
           | runs (own bin/emacs script; was under the impression it was
           | auto-creating a .desktop file), what mimeapps.list have
           | (emacs.desktop), and what `xdg-open` runs (Firefox for some
           | reason).
        
             | TingPing wrote:
             | Older desktops don't follow the specs and xdg-open does
             | different things based on the desktop, so they indeed can
             | get out of sync.
             | 
             | I'd have to look into your specific case but `gio mime` and
             | `gio open` do the right things.
        
           | sam_lowry_ wrote:
           | > what am I missing here?
           | 
           | There are gotchas, for instance Chrom,{e,ium} insists on
           | XDG_DESKTOP_DIR != XDG_DOWNLOAD_DIR.
           | 
           | See this bug report from a confused user:
           | https://issues.chromium.org/issues/41076564
        
             | mikkupikku wrote:
             | > _also of note, we (mostly) don 't allow ~/Desktop as the
             | download dir for security reasons_
             | 
             | This isn't an XDG issue. It's a chromium engineers being
             | silly pricks that think they know better than the power
             | users who obviously went out of their way to create such a
             | configuration. Also I bet it would work if you set your
             | XDG_DESKTOP_DIR to ~/Download/
        
         | mitjafelicijan wrote:
         | I probably haven't. :) They are a nightmare indeed. But it does
         | help a little.
        
         | saturn_vk wrote:
         | Great. I must be living on the moon then. I guess gnome work
         | great there since it manages this part
        
           | mitjafelicijan wrote:
           | Gnome has done an amazing job at this, I agree. You don't
           | even notice this issue.
        
             | t-3 wrote:
             | It's when I want to use a non-systemd, no-DE environment
             | that xdg-stuff becomes very annoying, but that's usually
             | because _applications_ assume a certain setup rather than
             | any fault of xdg. eg. Wayland is very stupid about
             | requiring a certain xdg setup to run at all.
        
       | jwrallie wrote:
       | Just by reading the title, I'm sold! This should be very useful
       | specially if you are not using a desktop environment that manages
       | the default apps.
       | 
       | I always alias open to xdg-open, it's so useful to open a file
       | directly from the terminal.
        
         | mitjafelicijan wrote:
         | That was the exact reason for it. I made my own window manager
         | for fun and was missing a simple way of changing default apps.
        
       | roman_soldier wrote:
       | Nice, but problem with all these AI coded TUI's is we will have
       | hundreds of them, best to stick to the built in linux commands,
       | add aliases/abbreviations (fish) if required, do you need a TUI
       | for everything? Sometimes the answer to "Should I write this?" Is
       | no
        
         | mitjafelicijan wrote:
         | I do agree with some of your sentiment. But by that logic,
         | nothing would ever be made.
         | 
         | The same goes with aliases. Why not just use the actual
         | commands. You give it your best shot, and sometimes something
         | good comes out. And sometimes it's crap. That's life.
         | 
         | And I made it for fun and to learn something. And it wasn't AI
         | coded. It's like 200 lines. I wanted to learn termbox2.h a bit
         | more than I already had.
        
           | brw wrote:
           | Yea I was pleasantly surprised by how simple the code is when
           | I read it. Honestly a great example of what termbox2 is
           | capable of. Very nice!
           | 
           | And now I know about termbox2, which looks very cool. Looking
           | through the example projects[1] in the README I also found
           | ictree[2], which does exactly what I was looking for
           | yesterday (turning the output of `find` into an ncdu-
           | like/interactive tree interface). I didn't manage to find
           | something for that through googling around or asking LLMs,
           | but thanks to you posting this here I did, so thanks!
           | 
           | [1] https://github.com/termbox/termbox2#examples
           | 
           | [2] https://github.com/NikitaIvanovV/ictree
        
             | mitjafelicijan wrote:
             | This whole tool is much more a display of what termbox2 can
             | do in couple of lines tbh :) You are so right about that.
             | 
             | It's an amazing library. And all that juice in one stb-
             | style header file. You just gotta love it.
             | 
             | And if you are interested in such small libraries, I have a
             | Github list with a bunch of them that I found.
             | 
             | https://github.com/stars/mitjafelicijan/lists/stb-style-
             | mini...
        
         | wolttam wrote:
         | Let people make and use what they want, you don't have to use
         | it.
        
         | samtrack2019 wrote:
         | reading the code, what make you think it was vibe coded?
        
         | jrm4 wrote:
         | I absolutely fail to see the problem and I think the whole
         | "best to stick to built in linux commands" is an utterly
         | dinosaur-esque take that can, and will, and should, go extinct
         | in the age of AI-assisted coding.
        
           | mitjafelicijan wrote:
           | It is interesting that somehow every conversation now pivots
           | to LLM's. It's almost like people are paranoid or something.
           | I have no issue with AI. But it should be used carefully when
           | learning/working so you don't miss the little details that
           | usually make a big difference later. But to each their own.
           | 
           | It is just getting tiring that people assume more and more
           | that things were written with AI for everything. It's like,
           | OMG, can you stop it for a second. And who cares, really. Do
           | your due diligence, check the code and decide for yourself.
           | But maybe, this is just projection. Or a nice way of
           | insulting/dismissing people, which I find quite funny.
           | 
           | And like you said, the age of AI-assisted coding is already
           | here. There is beauty in piping core utils together and being
           | really productive with them. No doubt about it. But there are
           | also new ways of computing emerging, and we should learn
           | about that too.
        
         | mikkupikku wrote:
         | The nice thing about AI coded TUIs is they're so easy to make
         | you can make the ones that suit you yourself and ignore the
         | rest.
        
       | ranger_danger wrote:
       | Feature suggestion: The ability to add/remove more specific mime
       | entries such as video/mp4
        
         | mitjafelicijan wrote:
         | I haven't thought about this. That makes sense. I will add
         | this.
        
       | fouc wrote:
       | At first I thought it was going to be some kind of solution to
       | force all linux apps to adhere to the XDG Base Directory
       | Specification, until I realized this related to a different
       | specification altogether (XDG MIME Applications specification).
        
         | jedahan wrote:
         | Making home read-only can get there, and I can't find the
         | project that forced using XDG paths. I think it used LD_PRELOAD
         | or somesuch trick.
         | 
         | edit: https://soc.me/standards/defending-home
        
           | ekipan wrote:
           | Strange. Middle-clicking the link opens a HackerNews
           | frontpage, but copypasting into a new tab shows the article.
           | Presumably the server shoos away referer links? To reduce
           | load maybe somehow? Or maybe something's weird in my own
           | configuration idk.
        
       | piskov wrote:
       | Thank god it's not another React, Solid, Typescript, what have
       | you, web abomination inside the terminal (claude code, opencode,
       | I'm looking at you).
       | 
       | Bravo!
        
         | thehamkercat wrote:
         | That's where codex-cli shines (rust)
         | 
         | the startup time is crazy, you can start writing as soon as you
         | hit the command
         | 
         | (I don't use codex, just noticed that it's crazy fast)
        
       | renewiltord wrote:
       | These days I pretty much write this kind of software in ratatui
       | with LLM when I need it. But the idea is nice. I like that. LLMs
       | are the return of the value of the ideas guy!
       | 
       | But this seems human-written? Then it is interesting. Thank you
       | for sharing.
        
         | mitjafelicijan wrote:
         | Yeah, I did write it myself, yes. It's actually a very simple
         | program.
         | 
         | I heard so many great things about ratatui. I am, however, not
         | well versed in Rust. Only did a couple of toy little things in
         | it.
        
       | coppsilgold wrote:
       | I usually just edit ~/.config/mimeapps.list directly.
       | 
       | I can see how that tool can be useful, but only if it's included
       | in official repos. Editing mimeapps.list is simpler than the
       | hassle of downloading and building this tool.
        
       ___________________________________________________________________
       (page generated 2026-01-25 23:00 UTC)