[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  : 123 points
       Date   : 2026-01-25 11:19 UTC (1 days 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.
        
             | mitjafelicijan wrote:
             | I had the same issue as you. Had to copy and paste the
             | link.
        
             | IAmLiterallyAB wrote:
             | They explicitly check if the referrer is hackernews and do
             | that.
        
       | 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)
        
           | DrammBA wrote:
           | Sadly the fast startup time is overshadowed by the slow
           | response time of the codex agent
        
             | piskov wrote:
             | I don't get it. Even in ChatGPT I always use Pro model with
             | maxed-out thinking budget (selectors available only on web
             | and windows).
             | 
             | Let them cook as much as they can.
        
               | forgotpwd16 wrote:
               | Looks like there're two main approaches to AI-first
               | development: (i) favor slow responses to produce an
               | upfront high-quality result, (ii) favor quick responses
               | to enable faster response-test-query iteration. And,
               | based on comments read here, seems Codex isn't too fit
               | for the later. Optimally a developer should be able
               | switch between the two approaches depending on problem at
               | hand.
        
         | codethief wrote:
         | > claude code, opencode, I'm looking at you
         | 
         | Could you elaborate? I mean, I get the usual criticism of
         | web/Electron-based desktop applications (slow, includes a whole
         | Chrome engine, non-native UI, ...) but Claude Code isn't one of
         | them?
        
           | piskov wrote:
           | Search for twitter drama where Anthropic engineer says
           | basically the following [1] and gets shamed by what AAA game
           | developers are able to render at the same time.
           | 
           | tldr; the ui you see in the terminal is react-based in claude
           | code. As for opencode just see their repo on github.
           | 
           | [1] https://news.ycombinator.com/item?id=46706040
        
       | 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-26 15:01 UTC)