{"id":2817,"date":"2026-01-09T22:46:47","date_gmt":"2026-01-09T22:46:47","guid":{"rendered":"https:\/\/hauweele.net\/~gawen\/blog\/?p=2817"},"modified":"2026-01-09T22:46:47","modified_gmt":"2026-01-09T22:46:47","slug":"runrunrun-v0-2-0-desktop-file-import-and-more","status":"publish","type":"post","link":"https:\/\/hauweele.net\/~gawen\/blog\/?p=2817","title":{"rendered":"runrunrun v0.2.0: desktop file import and more"},"content":{"rendered":"<p>Just one week after the initial release, here comes <a href=\"https:\/\/github.com\/gawen947\/runrunrun\">runrunrun v0.2.0<\/a> with a key feature from the roadmap: desktop file import.<\/p>\n<h2>What&#8217;s New<\/h2>\n<p><strong>Desktop File Import<\/strong>: The <code>:import<\/code> directive can now read <code>.desktop<\/code> files and automatically generate rules from their MIME types:<\/p>\n<pre><code>:import \/usr\/local\/share\/applications\/gimp.desktop\r\n:import \/usr\/share\/applications\r\n<\/code><\/pre>\n<p>This extracts the <code>Exec<\/code> and <code>MimeTypes<\/code> attributes, infers file extensions, and creates the appropriate glob patterns automatically. It&#8217;s a great bridge for migrating from existing desktop configurations.<\/p>\n<p><strong>Path Expansion<\/strong>: Configuration files now support tilde (<code>~<\/code>) and environment variable expansion:<\/p>\n<pre><code>:include ~\/.config\/rrr\/work.conf\r\n:include ~\/$DOTFILES\/rrr\/common.conf\r\n<\/code><\/pre>\n<p><strong>Include Loop Protection<\/strong>: Fixed a bug where circular includes would cause infinite loops. Now if a file has already been included, it&#8217;s simply skipped.<\/p>\n<p><strong>Performance<\/strong>: The config parser now only loads rules for the requested profile, improving startup time for large configurations.<\/p>\n<h2>Getting Started with Import<\/h2>\n<p>If you want to import your existing desktop file associations:<\/p>\n<pre><code># Import a specific application\r\n:import \/usr\/share\/applications\/firefox.desktop\r\n\r\n# Import everything\r\n:import \/usr\/share\/applications\r\n:import ~\/.local\/share\/applications\r\n<\/code><\/pre>\n<p>Desktop files without <code>Exec<\/code> or <code>MimeTypes<\/code> are silently skipped, so you can safely import entire directories.<\/p>\n<h2>Next Steps<\/h2>\n<p>With desktop file import now available, migrating from traditional file association systems is much easier. As always, feedback and contributions are welcome!<\/p>\n<hr \/>\n<p><em>runrunrun is available at <a href=\"https:\/\/github.com\/gawen947\/runrunrun\">https:\/\/github.com\/gawen947\/runrunrun<\/a><\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Just one week after the initial release, here comes runrunrun v0.2.0 with a key feature from the roadmap: desktop file import. What&#8217;s New Desktop File Import: The :import directive can now read .desktop files and automatically generate rules from their &hellip; <a href=\"https:\/\/hauweele.net\/~gawen\/blog\/?p=2817\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1194],"tags":[285,1202,1200,678,1197,1196,1171,1195,1201,1199],"class_list":["post-2817","post","type-post","status-publish","format-standard","hentry","category-software","tag-desktop","tag-freedesktop","tag-open","tag-release","tag-rrr","tag-runrunrun","tag-rust","tag-software","tag-v0-2-0","tag-xdg-open"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/hauweele.net\/~gawen\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2817","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hauweele.net\/~gawen\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hauweele.net\/~gawen\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hauweele.net\/~gawen\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hauweele.net\/~gawen\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2817"}],"version-history":[{"count":0,"href":"https:\/\/hauweele.net\/~gawen\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2817\/revisions"}],"wp:attachment":[{"href":"https:\/\/hauweele.net\/~gawen\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2817"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hauweele.net\/~gawen\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2817"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hauweele.net\/~gawen\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2817"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}