<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>The Terminal Yard - Hyprland</title>
    <subtitle>Writing about terminals and linux</subtitle>
    <link rel="self" type="application/atom+xml" href="https://blog.lazyfreax.dev/tags/hyprland/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://blog.lazyfreax.dev"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-07-05T00:00:00+00:00</updated>
    <id>https://blog.lazyfreax.dev/tags/hyprland/atom.xml</id>
    <entry xml:lang="en">
        <title>latuicon: the TUI icon picker from late.sh</title>
        <published>2026-07-05T00:00:00+00:00</published>
        <updated>2026-07-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              coko
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.lazyfreax.dev/blog/latuicon-icon-picker/"/>
        <id>https://blog.lazyfreax.dev/blog/latuicon-icon-picker/</id>
        
        <content type="html" xml:base="https://blog.lazyfreax.dev/blog/latuicon-icon-picker/">&lt;h2 id=&quot;origin-story&quot;&gt;Origin Story&lt;a class=&quot;post-anchor&quot; href=&quot;#origin-story&quot; aria-label=&quot;Anchor link for: origin-story&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;A few weeks ago, I stumbled upon &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;late.sh&quot;&gt;&lt;code&gt;late.sh&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&quot;a cozy command-line clubhouse for computer people&quot;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;If you haven&#x27;t heard of it, it is basically an online social space for computer nerds to hang around and chat. It&#x27;s got your typical discussion channels like you would have on Discord, Matrix or IRC. But it&#x27;s got even more to offer than that!&lt;&#x2F;p&gt;
&lt;p&gt;Music, mini-games, arcade games, actual RPGs like &lt;strong&gt;Lateania&lt;&#x2F;strong&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;NetHack&quot;&gt;NetHack&lt;&#x2F;a&gt; or even &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ricott1&#x2F;rebels-in-the-sky&quot;&gt;Rebels&lt;&#x2F;a&gt;, and much much more...&lt;&#x2F;p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;i&gt;Only good vibes there  〜⁠(⁠꒪⁠꒳⁠꒪⁠)⁠〜&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.lazyfreax.dev&#x2F;blog&#x2F;latuicon-icon-picker&#x2F;.&#x2F;latesh-screenshot.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;All you need is a computer with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Secure_Shell&quot;&gt;SSH&lt;&#x2F;a&gt; and you are good to go.
The &lt;code&gt;late.sh&lt;&#x2F;code&gt; team also provides a companion &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mpiorowski&#x2F;late-sh#companion-cli&quot;&gt;CLI&lt;&#x2F;a&gt; you can install for optional features like in-terminal music or voice chat support.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Yes, you read that correctly...&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;VOICE CHAT in the terminal&lt;&#x2F;strong&gt;&lt;&#x2F;em&gt; &lt;strong&gt;(˶°ㅁ°)!!&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;late.sh&lt;&#x2F;code&gt; is full of good surprises like that.
It&#x27;s a very cool place to visit if you are a terminal nerd who is comfortable with SSH.
So if that description fits your profile, make sure to check it out 🙂.&lt;&#x2F;p&gt;
&lt;p&gt;We have been seeing a rise of SSH-based services lately, like:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;terminal.shop&quot;&gt;terminal.shop&lt;&#x2F;a&gt; to order coffee&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;stickr.shop&#x2F;&quot;&gt;stickr.shop&lt;&#x2F;a&gt; to buy stickers&lt;&#x2F;li&gt;
&lt;li&gt;and now &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;late.sh&quot;&gt;late.sh&lt;&#x2F;a&gt; for hanging around and chill in the terminal&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;There are probably plenty others I do not know. But anyway, I love the fact that the terminal space continues to thrive!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-late-sh-icon-picker&quot;&gt;The &lt;code&gt;late.sh&lt;&#x2F;code&gt; icon picker&lt;a class=&quot;post-anchor&quot; href=&quot;#the-late-sh-icon-picker&quot; aria-label=&quot;Anchor link for: the-late-sh-icon-picker&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Alright, now that you have a good idea of what &lt;code&gt;late.sh&lt;&#x2F;code&gt; is, let&#x27;s talk about the main subject of this article: &lt;strong&gt;the icon picker&lt;&#x2F;strong&gt;*.&lt;&#x2F;p&gt;
&lt;p&gt;As I mentioned already, &lt;code&gt;late.sh&lt;&#x2F;code&gt; has a &lt;strong&gt;LOT&lt;&#x2F;strong&gt; of features, and one of them is an icon picker which I immediately fell in love with:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.lazyfreax.dev&#x2F;blog&#x2F;latuicon-icon-picker&#x2F;.&#x2F;latesh-icon-picker.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;To access it, simply type &lt;code&gt;&#x2F;icons&lt;&#x2F;code&gt; in any text channel.&lt;&#x2F;p&gt;
&lt;p&gt;First of all, I really like the look and feel but what I love about it is that it&#x27;s got:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Emojis: 👍🐚🌊🎉&lt;&#x2F;li&gt;
&lt;li&gt;Unicode symbols: ★ ▲ ░ ○&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nerdfonts.com&#x2F;&quot;&gt;Nerd Fonts&lt;&#x2F;a&gt;: 󱓞 󰊢  󰣇 &lt;em&gt;(which your browser may not render)&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;and... &lt;strong&gt;Kaomojis&lt;&#x2F;strong&gt;: ✧｡◝(ᵔᗜᵔ)◜✧*｡ — ٩(◕‿◕｡)۶ — (╯`Д´)╯︵ ┻━┻&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;em&gt;I did not even know Kaomojis had an actual name, I used to call them ASCII art emojis.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So, why do I love this so much?&lt;&#x2F;p&gt;
&lt;p&gt;Up until this point, I had been using the following icon pickers on my system:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;fdw&#x2F;rofimoji&quot;&gt;rofimoji&lt;&#x2F;a&gt; for emojis&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rolv-apneseth&#x2F;rofi-nerdy&quot;&gt;rofi-nerdy&lt;&#x2F;a&gt; for Nerd font icons&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;coko7&#x2F;scripts&#x2F;blob&#x2F;main&#x2F;global&#x2F;amoji.sh&quot;&gt;amoji.sh&lt;&#x2F;a&gt; for Kaomojis (terminal only)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;and I did not even have something for Unicode symbols...&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Three different programs to pick icons...&lt;&#x2F;p&gt;
&lt;p&gt;It does the job but I never really liked this solution.
So, when I found about the &lt;code&gt;late.sh&lt;&#x2F;code&gt; icon picker, it made me want to push my own Linux ricing further.&lt;&#x2F;p&gt;
&lt;p&gt;Don&#x27;t get me wrong, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;davatorium&#x2F;rofi&quot;&gt;Rofi&lt;&#x2F;a&gt; is a very cool project and I still use it as my main application launcher but I have wanted to move away from it for a while now.&lt;&#x2F;p&gt;
&lt;p&gt;Specifically, I have been trying out these alternatives recently:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;abenz1267&#x2F;walker&quot;&gt;Walker&lt;&#x2F;a&gt;, using &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;abenz1267&#x2F;elephant&quot;&gt;elephant&lt;&#x2F;a&gt; providers&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Mjoyufull&#x2F;fsel&quot;&gt;fsel&lt;&#x2F;a&gt;, from my good friend &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Mjoyufull&quot;&gt;Rikona&lt;&#x2F;a&gt; &lt;em&gt;(very cool dude \o&#x2F;)&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I really the minimalistic &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;junegunn&#x2F;fzf&quot;&gt;fzf&lt;&#x2F;a&gt;-like feel of &lt;code&gt;fsel&lt;&#x2F;code&gt;, but I am not at the point of daily driving it yet.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Anyway... I digress.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;We are focusing on the icon picker here. But hopefully, you now understand why I fell in love with the &lt;code&gt;late.sh&lt;&#x2F;code&gt; icon picker at first sight.&lt;&#x2F;p&gt;
&lt;p&gt;Alright, making a desktop icon picker out of this sounds good on paper but how do we proceed exactly?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-robbery&quot;&gt;The Robbery&lt;a class=&quot;post-anchor&quot; href=&quot;#the-robbery&quot; aria-label=&quot;Anchor link for: the-robbery&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;em&gt;Well...&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Since I had already made &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mpiorowski&#x2F;late-sh&#x2F;commits?author=coko7&quot;&gt;minor contributions&lt;&#x2F;a&gt; to &lt;code&gt;late.sh&lt;&#x2F;code&gt;, I had my own local fork ready and available. From this point, all I did was instruct &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;claude.ai&quot;&gt;lil&#x27; &lt;code&gt;claude&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; to extract the code for the icon picker into its own &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;coko7&#x2F;latuicon&#x2F;commit&#x2F;0fc806c&quot;&gt;separate project&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I have to say: for these kind of refactor tasks, coding agents work really well.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.lazyfreax.dev&#x2F;blog&#x2F;latuicon-icon-picker&#x2F;.&#x2F;stel_code.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;i&gt;that&#x27;s a &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;All_your_base_are_belong_to_us&quot;&gt;Zero Wing reference&lt;&#x2F;a&gt; btw&lt;&#x2F;i&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;And just like that: The &lt;code&gt;latuicon&lt;&#x2F;code&gt; project was born!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;(It was simply called &lt;code&gt;icon-picker&lt;&#x2F;code&gt; in the beginning, but anyway...)&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I adjusted the UI a little bit so that it works better as a standalone TUI and after a few iterations, that&#x27;s what it looks like:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.lazyfreax.dev&#x2F;blog&#x2F;latuicon-icon-picker&#x2F;.&#x2F;latuicon-v0.1.0.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Apart from the removal of external borders, addition of title&#x2F;subtitle and alignment tweaks, the look and feel is the exact same. As long as I am in the terminal, I can simply invoke it using the &lt;code&gt;latuicon&lt;&#x2F;code&gt; command in my shell.&lt;&#x2F;p&gt;
&lt;p&gt;Nice! We have got our standalone icon picker now!&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Hold up...&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;A TUI icon picker is nice and all but I thought the objective was to make this a desktop application, no?&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;the-cheat&quot;&gt;The Cheat&lt;a class=&quot;post-anchor&quot; href=&quot;#the-cheat&quot; aria-label=&quot;Anchor link for: the-cheat&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;So, we have a TUI now, but what we &lt;strong&gt;really&lt;&#x2F;strong&gt; want is a desktop application right?&lt;&#x2F;p&gt;
&lt;p&gt;If you are not already familiar with my &lt;a href=&quot;&#x2F;posts&#x2F;custom-desktop-web-apps-with-hyprland&#x2F;&quot;&gt;Hyprland shenanigans&lt;&#x2F;a&gt;, I like to find counter-intuitive ways of making desktop apps. I have never dabbled with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.gtk.org&#x2F;&quot;&gt;GTK&lt;&#x2F;a&gt; before and though I reckon it would be cool to learn how to make actual desktop apps, I do not want to bother with that for now.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;But how do we make a desktop app without actually creating a new desktop app?&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The answer is simple: &lt;strong&gt;We simply reuse an existing one.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;In my &lt;a href=&quot;&#x2F;posts&#x2F;custom-desktop-web-apps-with-hyprland&#x2F;&quot;&gt;&quot;Custom Desktop Web Apps with Hyprland&quot;&lt;&#x2F;a&gt; article, I use a custom Chromium browser instance to create fake desktop apps so that I can make any web app into its own &quot;application&quot;.
This works when your goal is to render Web User Interfaces but in our case we want to display a Terminal User Interface (TUI).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;No problemo.&lt;&#x2F;em&gt; ( ¬ᴗ¬)&lt;&#x2F;p&gt;
&lt;p&gt;If we need a web browser to turn websites into desktop applications, all we need is a terminal to turn TUIs into desktop applications. &lt;code&gt;¯\_(ツ)_&#x2F;¯&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The entire science is compacted within this &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;coko7&#x2F;scripts&#x2F;blob&#x2F;main&#x2F;global&#x2F;floatty.sh&quot;&gt;floatty.sh&lt;&#x2F;a&gt; script:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F5C2E7;font-style: italic;&quot;&gt;#!&#x2F;usr&#x2F;bin&#x2F;env bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;wm_class_suffix&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt;$1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F38BA8;font-style: italic;&quot;&gt;shift&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 6&lt;&#x2F;span&gt;&lt;span&gt;full_wm_class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;floater-kitty-&lt;&#x2F;span&gt;&lt;span&gt;$wm_class_suffix&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 7&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# prevent multiple floater-kitty-&amp;lt;FOO&amp;gt; windows to be opened at the same time&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 9&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;hyprctl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; clients -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;  jq&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; --exit-status --arg wm_class &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$full_wm_class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F5C2E7;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;    &amp;#39;any(.[]; .class == $wm_class)&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&#x2F;dev&#x2F;null&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; 2&amp;gt;&amp;amp;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;12&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F38BA8;font-style: italic;&quot;&gt;  exit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;13&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;14&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; [[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; -n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$FLOATTY_CAPTURE_OUTPUT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; ]];&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;15&lt;&#x2F;span&gt;&lt;span&gt;  tmpfile&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;mktemp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F38BA8;font-style: italic;&quot;&gt;  trap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;#39;rm -f &amp;quot;$tmpfile&amp;quot;&amp;#39; EXIT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;17&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;  kitty&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; --class &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$full_wm_class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot; sh -c &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F5C2E7;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$tmpfile&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F5C2E7;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;19&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;20&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; [[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; -s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$tmpfile&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; ]];&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt; then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;21&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;    cat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$tmpfile&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;22&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;  fi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;23&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;24&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;  kitty&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; --class &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$full_wm_class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot; sh -c &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;25&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;fi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Feel free to examine it yourself but if you are too lazy, here&#x27;s a breakdown:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;When invoked, it launches a new instance of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kovidgoyal&#x2F;kitty&quot;&gt;&lt;code&gt;kitty&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; &lt;em&gt;(my main terminal)&lt;&#x2F;em&gt; and assigns it the &lt;code&gt;floater-kitty-&amp;lt;SUFFIX&amp;gt;&lt;&#x2F;code&gt; window manager class &lt;em&gt;(where &lt;code&gt;&amp;lt;SUFFIX&amp;gt;&lt;&#x2F;code&gt; is an external argument)&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;The class is for &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hypr.land&#x2F;&quot;&gt;Hyprland&lt;&#x2F;a&gt; &lt;em&gt;(my Window Manager)&lt;&#x2F;em&gt; to find the window and style&#x2F;position it properly&lt;&#x2F;li&gt;
&lt;li&gt;The check on &lt;code&gt;line 9&lt;&#x2F;code&gt; is to ensure only one instance with this WM class can exist&lt;&#x2F;li&gt;
&lt;li&gt;If &lt;code&gt;$FLOATTY_CAPTURE_OUTPUT&lt;&#x2F;code&gt; is set, the output of the shell command will be the output of this kitty instance&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Setting &lt;code&gt;FLOATTY_CAPTURE_OUTPUT&lt;&#x2F;code&gt; is important because without it, we would have no way of keeping track of the icon we selected in &lt;code&gt;latuicon&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The reason I made this &quot;capture&quot; an optional feature is because I actually re-use this &lt;code&gt;floatty.sh&lt;&#x2F;code&gt; script for many other desktop-like applications and I don&#x27;t need to care about the terminal &lt;code&gt;stdout&lt;&#x2F;code&gt; in all of them.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;&#x2F;strong&gt; We spawn a terminal, run stuff inside of it and do something on exit.
In our case, we could make &lt;code&gt;latuicon&lt;&#x2F;code&gt; into a &quot;desktop app&quot; by running the following command:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FLOATTY_CAPTURE_OUTPUT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; bash&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; floatty.sh latuicon latuicon&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; wl-copy&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This would spawn a new &lt;code&gt;kitty&lt;&#x2F;code&gt; terminal and assign it the following WM class: &lt;code&gt;floater-kitty-latuicon&lt;&#x2F;code&gt;.
The terminal will run the &lt;code&gt;latuicon&lt;&#x2F;code&gt; program, let the user interact with it and pipe the output to &lt;code&gt;wl-copy&lt;&#x2F;code&gt; to update the system clipboard.&lt;&#x2F;p&gt;
&lt;p&gt;Nice! All that&#x27;s left is to wire this to an actual Hyprland keybinding:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;ini&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# See https:&#x2F;&#x2F;wiki.hyprland.org&#x2F;Configuring&#x2F;Keywords&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;&quot;&gt;mainMod&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; SUPER &lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# Sets &amp;quot;Windows&amp;quot; key as main modifier&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;&quot;&gt;bindd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; $mainMod, comma, laTUIcon icon picker, exec, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;&quot;&gt;FLOATTY_CAPTURE_OUTPUT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;1 bash floatty.sh latuicon latuicon | wl-copy&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And lastly: We need some custom Hyprland rules to display it as a centered floating window of size 1000 x 800 pixels:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;ini&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9399B2;font-style: italic;&quot;&gt;# Special rules for floating&#x2F;prompt terminals&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;windowrule {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;&quot;&gt;    name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; floater-kitty&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    match:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; ^(floater-kitty-.*)$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;&quot;&gt;    no_anim&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; on&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;&quot;&gt;    float&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; on&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;&quot;&gt;    center&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; on&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;&quot;&gt;    size&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; 1000 800&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;windowrule {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;&quot;&gt;  name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; floater-kitty-latuicon&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  match:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; floater-kitty-latuicon&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;&quot;&gt;  size&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; 700 700&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And voilà (* ^ ω ^) !&lt;&#x2F;p&gt;
&lt;p&gt;&lt;video
  controls
  autoplay
  loop
  muted
  playsinline
  preload=&quot;metadata&quot;&gt;
&lt;source src=&quot;.&#x2F;latuicon-demo-v0.1.0.webm&quot; type=&quot;video&#x2F;webm&quot;&gt;
&lt;source src=&quot;.&#x2F;latuicon-demo-v0.1.0.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
&lt;&#x2F;video&gt;&lt;&#x2F;p&gt;
&lt;p align=&quot;center&quot;&gt;Demo of &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;coko7&#x2F;latuicon&#x2F;releases&#x2F;tag&#x2F;v0.1.0&quot;&gt;&lt;code&gt;latuicon-v0.1.0&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It works well and I use it everyday ٩(◕‿◕｡)۶ &lt;em&gt;(especially for writing this article!)&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;new-features&quot;&gt;New features&lt;a class=&quot;post-anchor&quot; href=&quot;#new-features&quot; aria-label=&quot;Anchor link for: new-features&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Honestly, the original icon picker from &lt;code&gt;late.sh&lt;&#x2F;code&gt; already has everything I need.&lt;&#x2F;p&gt;
&lt;p&gt;The only features I added so far are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;an improvement of the search by making use of the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Levenshtein_distance&quot;&gt;Levenshtein&lt;&#x2F;a&gt; algorithm, which does word-level typo correction.&lt;&#x2F;li&gt;
&lt;li&gt;the &quot;all&quot; icon set to search through everything (only available in the latest &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;coko7&#x2F;latuicon&#x2F;releases&#x2F;tag&#x2F;v0.1.1&quot;&gt;v0.1.1&lt;&#x2F;a&gt; release)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;blockquote&gt;
&lt;p&gt;The &lt;strong&gt;Levenshtein&lt;&#x2F;strong&gt; thing is actually demonstrated in the demo video above.
When I type &lt;code&gt;volage&lt;&#x2F;code&gt;, it will actually allow me to select the &lt;code&gt;high voltage&lt;&#x2F;code&gt; emoji ⚡ (despite forgetting to type the &#x27;t&#x27; character).&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Levenshtein&lt;&#x2F;strong&gt; is probably not the most suited thing here but I wanted to have some fun.&lt;&#x2F;p&gt;
&lt;p&gt;I got the idea from my previous project; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;memonde.coko7.fr&quot;&gt;MéMonde&lt;&#x2F;a&gt;, an open-source Geography game where you have to guess all the countries of the world in 15 minutes.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Levenshtein&lt;&#x2F;strong&gt; works really well for this Geography game since there are a lot of countries to enter and you are under time pressure so having a system that does not require perfect spelling is a nice thing to have.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-licensing&quot;&gt;The Licensing&lt;a class=&quot;post-anchor&quot; href=&quot;#the-licensing&quot; aria-label=&quot;Anchor link for: the-licensing&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;The reason I did not release &lt;code&gt;latuicon&lt;&#x2F;code&gt; sooner is that I was not sure how to solve the licensing aspect. The original &lt;code&gt;late.sh&lt;&#x2F;code&gt; project uses an &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.tldrlegal.com&#x2F;license&#x2F;functional-source-license-fsl&quot;&gt;FSL-1.1-MIT license&lt;&#x2F;a&gt; which I had never encountered before. So I took some time to read through it and ask around as I did not want to mess this up &lt;em&gt;(even if &lt;code&gt;latuicon&lt;&#x2F;code&gt; is likely never gonna be used by anyone other than myself).&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So, before releasing it, I asked both &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mpiorowski&quot;&gt;Mateusz Piórowski&lt;&#x2F;a&gt; (creator of &lt;code&gt;late.sh&lt;&#x2F;code&gt;) and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mevanlc&quot;&gt;Mike Clark&lt;&#x2F;a&gt; (creator of the embedded icon picker in &lt;code&gt;late.sh&lt;&#x2F;code&gt;) if they were okay with me making the project public.&lt;&#x2F;p&gt;
&lt;p&gt;The newest development of the  &lt;code&gt;latuicon&lt;&#x2F;code&gt; project are under an &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;coko7&#x2F;latuicon?tab=MIT-1-ov-file&quot;&gt;MIT license&lt;&#x2F;a&gt; but the initial commit, where I extracted the code from the &lt;code&gt;late.sh&lt;&#x2F;code&gt; project, is still under the original &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mpiorowski&#x2F;late-sh?tab=License-1-ov-file&quot;&gt;FSL-1.1-MIT license&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;As I understand, this FSL will naturally transform into an MIT license two years after the project initial release.&lt;&#x2F;p&gt;
&lt;p&gt;So, for now, I have kept both licenses in the &lt;code&gt;latuicon&lt;&#x2F;code&gt; repo:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;LICENSE&lt;&#x2F;code&gt;: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;coko7&#x2F;latuicon&#x2F;blob&#x2F;main&#x2F;LICENSE&quot;&gt;MIT&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;THIRD_PARTY_LICENSES.md&lt;&#x2F;code&gt;: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;coko7&#x2F;latuicon&#x2F;blob&#x2F;main&#x2F;THIRD_PARTY_LICENSES.md&quot;&gt;FSL-1.1-MIT&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;That&#x27;s it for the legal shenanigans.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;This is &lt;strong&gt;NOT&lt;&#x2F;strong&gt; legal advice by the way.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;give-credit-where-credit-is-due&quot;&gt;Give credit where credit is due&lt;a class=&quot;post-anchor&quot; href=&quot;#give-credit-where-credit-is-due&quot; aria-label=&quot;Anchor link for: give-credit-where-credit-is-due&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Let&#x27;s be honest: I did not do much here. ʕ•ᴥ•ʔ&lt;&#x2F;p&gt;
&lt;p&gt;Apart from the two new tiny features I mentioned, the code of the &lt;code&gt;latuicon&lt;&#x2F;code&gt; project comes from these two amazing people:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mpiorowski&quot;&gt;Mateusz Piórowski&lt;&#x2F;a&gt; (creator of &lt;code&gt;late.sh&lt;&#x2F;code&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mevanlc&quot;&gt;Mike Clark&lt;&#x2F;a&gt; (creator of the embedded icon picker in &lt;code&gt;late.sh&lt;&#x2F;code&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;code&gt;latuicon&lt;&#x2F;code&gt; would not be a thing if it weren&#x27;t for the both of them.
When I told them about my project, they were both very cool with the idea and that gave me the little push I needed to release it into the wild.&lt;&#x2F;p&gt;
&lt;p&gt;I am very thankful to &lt;strong&gt;Mat&lt;&#x2F;strong&gt; for starting &lt;code&gt;late.sh&lt;&#x2F;code&gt; and &lt;strong&gt;Mike&lt;&#x2F;strong&gt; for all his past&#x2F;current contributions to the project.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Thanks guys 🙏&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;late.sh&#x2F;&quot;&gt;&lt;code&gt;late.sh&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; truly is a wonderful place. The community is very welcoming and the text channels are full of interesting discussions. It&#x27;s a very active community, and...&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;By the time I finished writing this article, it even got a brand new space where you can move around and interact with other users in a 2D world:&lt;&#x2F;em&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;blog.lazyfreax.dev&#x2F;blog&#x2F;latuicon-icon-picker&#x2F;.&#x2F;latesh_ascii_hub.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If I did not convince you already, please consider swapping by to say hi 👋.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-conclusion&quot;&gt;The Conclusion&lt;a class=&quot;post-anchor&quot; href=&quot;#the-conclusion&quot; aria-label=&quot;Anchor link for: the-conclusion&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;I am much more happy using &lt;code&gt;latuicon&lt;&#x2F;code&gt; than I was using three different icon pickers.
This is, yet again, a project highly tuned for my own workflow, but that&#x27;s how it should be:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.lazyfreax.dev&#x2F;blog&#x2F;latuicon-icon-picker&#x2F;.&#x2F;this_is_the_way_meme.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Every project I ever started was because I wanted to automate things away or simply have some fun. And as long as it works out for me, then I am happy 🙂.&lt;&#x2F;p&gt;
&lt;p&gt;If it ends up being useful to others: even better!
&lt;em&gt;But that&#x27;s just a bonus :)&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;You can find the project on GitHub: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;coko7&#x2F;latuicon&quot;&gt;github.com&#x2F;coko7&#x2F;latuicon&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you have &lt;code&gt;cargo&lt;&#x2F;code&gt; on your system, installing &lt;code&gt;latuicon&lt;&#x2F;code&gt; is very easy:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;cargo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; install latuicon&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I am not sure it works on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;endof10.org&#x2F;&quot;&gt;Macroslop Windows&lt;&#x2F;a&gt; and I personally don&#x27;t need it to... But if that&#x27;s something &lt;strong&gt;YOU&lt;&#x2F;strong&gt; care about, then feel free to open an issue on GitHub or contribute directly via a pull request. I will be happy to add that in.&lt;&#x2F;p&gt;
&lt;p&gt;That&#x27;s it for today.&lt;&#x2F;p&gt;
&lt;p&gt;Cya (˶ᵔᗜᵔ˶)ﾉﾞ&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Custom Desktop Web Apps with Hyprland</title>
        <published>2026-02-17T00:00:00+00:00</published>
        <updated>2026-02-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              coko
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.lazyfreax.dev/blog/custom-desktop-web-apps-with-hyprland/"/>
        <id>https://blog.lazyfreax.dev/blog/custom-desktop-web-apps-with-hyprland/</id>
        
        <content type="html" xml:base="https://blog.lazyfreax.dev/blog/custom-desktop-web-apps-with-hyprland/">&lt;p&gt;The reason I use Linux is because I like to configure my system to be exactly how I want it.&lt;&#x2F;p&gt;
&lt;p&gt;This is why I went with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;archlinux.org&#x2F;&quot;&gt;Arch Linux&lt;&#x2F;a&gt; &lt;em&gt;(btw)&lt;&#x2F;em&gt;. Arch may not be for everyone but when you are picky like me when it comes to what software goes on your machine, it&#x27;s simply the perfect choice.&lt;&#x2F;p&gt;
&lt;p&gt;On top of that, I use &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hypr.land&#x2F;&quot;&gt;Hyprland&lt;&#x2F;a&gt; as my &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Tiling_window_manager&quot;&gt;tiling window manager&lt;&#x2F;a&gt; &lt;em&gt;(it&#x27;s an hybrid window manager to be more accurate, but you get the idea)&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;While I recognize the mouse to be &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=yJDv-zdhzMY&quot;&gt;a truly magnificent invention&lt;&#x2F;a&gt;, the less I have to use it, the better I feel.
I am a keyboard maximalist, I don&#x27;t want my hands to ever leave the keyboard so a tiling window manager fits my workflow the best.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;predefined-workspaces&quot;&gt;Predefined Workspaces&lt;a class=&quot;post-anchor&quot; href=&quot;#predefined-workspaces&quot; aria-label=&quot;Anchor link for: predefined-workspaces&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h1&gt;
&lt;p&gt;The way I setup my environment is that I have ten workspaces and each of them gets assigned specific applications:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;freetubeapp.io&#x2F;&quot;&gt;FreeTube&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Web browsers (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;librewolf.net&#x2F;&quot;&gt;Librewolf&lt;&#x2F;a&gt; &#x2F; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ungoogled-software&#x2F;ungoogled-chromium&quot;&gt;Chromium&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;qutebrowser.org&#x2F;&quot;&gt;qutebrowser&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;Terminal (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sw.kovidgoyal.net&#x2F;kitty&#x2F;&quot;&gt;kitty&lt;&#x2F;a&gt; &#x2F; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ghostty.org&#x2F;&quot;&gt;ghostty&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;Email client&lt;&#x2F;li&gt;
&lt;li&gt;Chat apps (Discord, Signal, Teams, etc.)&lt;&#x2F;li&gt;
&lt;li&gt;Office (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.onlyoffice.com&#x2F;&quot;&gt;OnlyOffice&lt;&#x2F;a&gt; &#x2F; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.libreoffice.org&#x2F;&quot;&gt;LibreOffice&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;Video games &amp;amp; graphics (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.gimp.org&#x2F;&quot;&gt;Gimp&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;Remote desktop (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;remmina.org&#x2F;&quot;&gt;Remmina&lt;&#x2F;a&gt;) &amp;amp; Virtual Machines&lt;&#x2F;li&gt;
&lt;li&gt;Misc &amp;amp; Tools (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.qbittorrent.org&#x2F;&quot;&gt;qBittorent&lt;&#x2F;a&gt;, Spotify, etc.)&lt;&#x2F;li&gt;
&lt;li&gt;Random stuff &lt;em&gt;(I usually bind it to my second monitor)&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;The great thing about this is that I don&#x27;t have to think about where my windows are. Switching to a specific application is built into my muscle memory.
If I want to search on the web, I press &lt;kbd&gt;SUPER+2&lt;&#x2F;kbd&gt;. Need to read an email? &lt;kbd&gt;SUPER+4&lt;&#x2F;kbd&gt;, etc.
It&#x27;s fast, there is no mental overhead, I love it.&lt;&#x2F;p&gt;
&lt;p&gt;When you spend 8+ hours a day on a computer, the mental fatigue of having to &lt;kbd&gt;Alt+Tab&lt;&#x2F;kbd&gt; and manually search through your windows really builds up.&lt;&#x2F;p&gt;
&lt;p&gt;The Workspace config is available on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;coko7&#x2F;.dotfiles&#x2F;blob&#x2F;main&#x2F;.config&#x2F;hypr&#x2F;window_rules_workspaces.conf&quot;&gt;GitHub&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;creating-custom-desktop-web-apps&quot;&gt;Creating custom Desktop Web apps&lt;a class=&quot;post-anchor&quot; href=&quot;#creating-custom-desktop-web-apps&quot; aria-label=&quot;Anchor link for: creating-custom-desktop-web-apps&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h1&gt;
&lt;p&gt;OK, now you have a basic idea of what my workflow looks like. So why do I need desktop web apps?
And by that, I mean: Web apps that I can launch like any other application.&lt;&#x2F;p&gt;
&lt;p&gt;Well, as you know, I like to bind applications to workspaces. But sometimes, I have to use applications or services that are not available on desktop.
I could simply stick to using them in my web browser, and, that&#x27;s what I do for some of them. But, when I find myself using a web app a lot, I want to have it available on my desktop directly.&lt;&#x2F;p&gt;
&lt;p&gt;To create the desktop web app, we need three things:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;a desktop entry&lt;&#x2F;li&gt;
&lt;li&gt;an executable script&lt;&#x2F;li&gt;
&lt;li&gt;some Hyprland rules&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;In this article, I will walk you through the process of creating a desktop web app for Outlook.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;desktop-entry&quot;&gt;Desktop entry&lt;a class=&quot;post-anchor&quot; href=&quot;#desktop-entry&quot; aria-label=&quot;Anchor link for: desktop-entry&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;First, we need to create a custom &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;wiki.archlinux.org&#x2F;title&#x2F;Desktop_entries&quot;&gt;desktop entry&lt;&#x2F;a&gt; (&lt;code&gt;*.desktop&lt;&#x2F;code&gt; files):&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;desktop&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;[Desktop Entry]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;Version&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;1.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;Name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;Outlook&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;Comment&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;Read your emails&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;GenericName&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;Work Email Client&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 6&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;Keywords&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;Work;Email;Outlook&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot; style=&quot;background-color: #CDD6F412;&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;Exec&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;home&#x2F;coko&#x2F;.config&#x2F;local&#x2F;bin-sh&#x2F;work&#x2F;chromium-outlook.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;Icon&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;outlook&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 9&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;Terminal&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;Type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;Application&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;StartupNotify&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;12&lt;&#x2F;span&gt;&lt;span style=&quot;color: #CBA6F7;&quot;&gt;Categories&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F38BA8;font-weight: bold;&quot;&gt;Network&lt;&#x2F;span&gt;&lt;span&gt;;Email;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The above snippet is a desktop file that I placed in my &lt;code&gt;~&#x2F;.config&#x2F;local&#x2F;share&#x2F;applications&#x2F;&lt;&#x2F;code&gt; directory.&lt;&#x2F;p&gt;
&lt;p&gt;When I press &lt;kbd&gt;SUPER+R&lt;&#x2F;kbd&gt;, it starts my &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;wiki.archlinux.org&#x2F;title&#x2F;Category:Application_launchers&quot;&gt;application launcher&lt;&#x2F;a&gt; which automatically picks up this entry and makes it available to me.
I use &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;davatorium&#x2F;rofi&quot;&gt;rofi&lt;&#x2F;a&gt; as my application launcher but if you use a different one, it should behave similarly.&lt;&#x2F;p&gt;
&lt;p&gt;You can specify a lot of things in a desktop entry, but what we want to focus on is the following:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Exec&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&#x2F;home&#x2F;coko&#x2F;.config&#x2F;local&#x2F;bin-sh&#x2F;work&#x2F;chromium-outlook.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The &lt;code&gt;Exec&lt;&#x2F;code&gt; value is the action that will be triggered when you launch the application. In this case, it is a custom bash script named &lt;code&gt;chromium-outlook.sh&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Never heard of bash? &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;learnxinyminutes.com&#x2F;bash&#x2F;&quot;&gt;Learn it in Y minutes!&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;executable-script&quot;&gt;Executable script&lt;a class=&quot;post-anchor&quot; href=&quot;#executable-script&quot; aria-label=&quot;Anchor link for: executable-script&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Now, let&#x27;s look into the bash script from the desktop entry:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F5C2E7;font-style: italic;&quot;&gt;#!&#x2F;usr&#x2F;bin&#x2F;env bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;DATA_DIR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$XDG_CONFIG_HOME&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&#x2F;chromium-work-outlook&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;chromium-nerd-app.sh&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;https:&#x2F;&#x2F;outlook.office.com&amp;quot; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$DATA_DIR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It&#x27;s tiny, only two lines without the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Shebang_(Unix)&quot;&gt;Shebang&lt;&#x2F;a&gt;.
First, I define the data directory for &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ungoogled-software&#x2F;ungoogled-chromium&quot;&gt;Chromium&lt;&#x2F;a&gt;, which is the web browser I use for my custom desktop web apps.
This is mostly for isolation purposes, the actual line we want to have a look at is &lt;strong&gt;line 4&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;chromium-nerd-app.sh&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;https:&#x2F;&#x2F;outlook.office.com&amp;quot; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$DATA_DIR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It calls another script (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;coko7&#x2F;.dotfiles&#x2F;blob&#x2F;main&#x2F;.config&#x2F;local&#x2F;bin-sh&#x2F;global&#x2F;chromium-nerd-app.sh&quot;&gt;&lt;code&gt;chromium-nerd-app.sh&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;) with two arguments (a URL and the data dir we defined).
Let&#x27;s checkout this new bash script:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F5C2E7;font-style: italic;&quot;&gt;#!&#x2F;usr&#x2F;bin&#x2F;env bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;APP_URL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt;$1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; -z&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$APP_URL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; ]] &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F38BA8;font-style: italic;&quot;&gt; echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;APP_NAME required!&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F38BA8;font-style: italic;&quot;&gt; exit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 6&lt;&#x2F;span&gt;&lt;span&gt;DATA_DIR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EBA0AC;font-style: italic;&quot;&gt;$2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;[[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; -z&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$DATA_DIR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; ]] &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F38BA8;font-style: italic;&quot;&gt; echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;quot;DATA_DIR required!&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F38BA8;font-style: italic;&quot;&gt; exit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FAB387;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt; 9&lt;&#x2F;span&gt;&lt;span&gt;VIMIUM_EXT_ID&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;#39;dbepggeogbaibhgnhhndojpepiihcmeb&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;VIMIUM_VERSION&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;#39;2.3.1_0&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;CHROMIUM_EXT_PATH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$XDG_CONFIG_HOME&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&#x2F;chromium&#x2F;Default&#x2F;Extensions&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;12&lt;&#x2F;span&gt;&lt;span&gt;VIMIUM_EXT_PATH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$CHROMIUM_EXT_PATH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;$VIMIUM_EXT_ID&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;$VIMIUM_VERSION&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;13&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;14&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;&#x2F;usr&#x2F;bin&#x2F;chromium&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F5C2E7;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;15&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;    --app=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$APP_URL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F5C2E7;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;16&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;    --disable-features=WaylandWpColorManagerV1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F5C2E7;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;17&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;    --user-data-dir=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$DATA_DIR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F5C2E7;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;18&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;    --load-extension=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$VIMIUM_EXT_PATH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Okay, this one looks a little more daunting, but it&#x27;s not that complicated actually.&lt;&#x2F;p&gt;
&lt;p&gt;The first few lines simply ensure that the script is called with two arguments (the app URL and the data directory).&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s skip ahead to &lt;strong&gt;lines 9-12&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;VIMIUM_EXT_ID&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;#39;dbepggeogbaibhgnhhndojpepiihcmeb&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;VIMIUM_VERSION&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;#39;2.3.1_0&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHROMIUM_EXT_PATH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$XDG_CONFIG_HOME&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&#x2F;chromium&#x2F;Default&#x2F;Extensions&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;VIMIUM_EXT_PATH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$CHROMIUM_EXT_PATH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;$VIMIUM_EXT_ID&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;$VIMIUM_VERSION&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This part is optional &lt;em&gt;&lt;strong&gt;but it&#x27;s my favorite part&lt;&#x2F;strong&gt;&lt;&#x2F;em&gt;.
If you are familiar with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vimium.github.io&#x2F;&quot;&gt;Vimium&lt;&#x2F;a&gt;, you already know what&#x27;s coming.
But, basically: Vimium is a browser extension that brings vim keybindings in your web browser.
Some think it&#x27;s overkill, I cannot live without it.&lt;&#x2F;p&gt;
&lt;p&gt;These four lines define the path to the Vimium extension on my system.
The same could have been achieved with a single line but this is more readable.&lt;&#x2F;p&gt;
&lt;p&gt;Then, finally, the heart of the script &lt;em&gt;(where the magic happens ✨)&lt;&#x2F;em&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;&#x2F;usr&#x2F;bin&#x2F;chromium&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F5C2E7;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;    --app=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$APP_URL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F5C2E7;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;    --disable-features=WaylandWpColorManagerV1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F5C2E7;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;    --user-data-dir=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$DATA_DIR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F5C2E7;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;    --load-extension=&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$VIMIUM_EXT_PATH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Let&#x27;s break it down line by line:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Launch the Chromium binary: &lt;code&gt;&#x2F;usr&#x2F;bin&#x2F;chromium&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;--app=&amp;lt;URL&amp;gt;&lt;&#x2F;code&gt; tells Chromium to start in a &lt;strong&gt;application&lt;&#x2F;strong&gt; mode, it will hide menu bars, disable extensions, etc.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;--disable-features=WaylandWpColorManagerV1&lt;&#x2F;code&gt; is for fixing some color issues on Wayland (to be honest, I don&#x27;t remember why it&#x27;s there but there must be a reason)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;--user-data-dir=&quot;$DATA_DIR&quot;&lt;&#x2F;code&gt; tells Chromium to use the data directory passed as second argument &lt;code&gt;$2&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;--load-extension=&quot;$VIMIUM_EXT_PATH&quot;&lt;&#x2F;code&gt; instructs Chromium to specifically load the Vimium extension&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;And that&#x27;s it!&lt;&#x2F;p&gt;
&lt;p&gt;With this, whenever I launch Outlook from my app launcher, it will open a custom instance of Chromium with Outlook opened. It looks and feels like
a desktop app but it is actually a disguised Chromium browser.&lt;&#x2F;p&gt;
&lt;p&gt;We are almost done, but there is still one important thing left: &lt;strong&gt;binding the app to a Hyprland workspace&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hyprland-rules&quot;&gt;Hyprland rules&lt;a class=&quot;post-anchor&quot; href=&quot;#hyprland-rules&quot; aria-label=&quot;Anchor link for: hyprland-rules&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;If you remember my workspace setup, I want my email client to open on workspace 4.
To do this, I need to define some &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;wiki.hypr.land&#x2F;Configuring&#x2F;Window-Rules&#x2F;&quot;&gt;window rules&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Since my config is quite big, I have decided to split it into multiple files and I keep workspace-related window rules in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;coko7&#x2F;.dotfiles&#x2F;blob&#x2F;main&#x2F;.config&#x2F;hypr&#x2F;window_rules_workspaces.conf&quot;&gt;&lt;code&gt;window_rules_workspace.conf&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;ini&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;&quot;&gt;windowrule&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; workspace 4, match:class ^(chrome-outlook.office.com__-Default)$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;&quot;&gt;windowrule&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; match:class ^(chrome-outlook.office.com__-Default)$, tile on&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Hyprland configuration is rather easy to understand even if it&#x27;s your first time seeing it:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Assign Outlook to &lt;strong&gt;workspace 4&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Force the Outlook window to be tiled instead of floating&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;In this case, the &lt;code&gt;^(chrome-outlook.office.com__-Default)$&lt;&#x2F;code&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Regular_expression&quot;&gt;regex&lt;&#x2F;a&gt; matches the Outlook window.
Okay, sure... But where did I find weird-looking class name?&lt;&#x2F;p&gt;
&lt;p&gt;That&#x27;s Hyprland&#x27;s strongest suite in my opinion, it comes with a bunch of tools that expose metadata about desktop objects (windows, monitors, devices, etc.).
Here, the command I use to get the class name for Outlook is the following:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt;hyprctl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; clients -j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; jq&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;#39;.[].class&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;More nonsense commands 😡 !!??&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Calm down, I will explain everything:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;hyprctl clients -j&lt;&#x2F;code&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;hyprctl&lt;&#x2F;code&gt; is the main Hyprland command line tool to query desktop objects&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;clients&lt;&#x2F;code&gt; is a subcommand of &lt;code&gt;hyprctl&lt;&#x2F;code&gt; that uses the Hyprland API to find the list of clients (opened windows&#x2F;applications)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;-j&lt;&#x2F;code&gt; tells Hyprland to format the output as &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;JSON&quot;&gt;JSON&lt;&#x2F;a&gt; &lt;em&gt;(that&#x27;s why I love Hyprland)&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;jq &#x27;.[].class&#x27;&lt;&#x2F;code&gt; relies on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jqlang&#x2F;jq&quot;&gt;jq&lt;&#x2F;a&gt; to process the JSON output from Hyprland and format it to only show individual class names.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;When I run this on my system, this is what I get:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot;&gt;&lt;code data-lang=&quot;shellsession&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9399B2;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; hyprctl clients -j &lt;&#x2F;span&gt;&lt;span style=&quot;color: #94E2D5;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89B4FA;font-style: italic;&quot;&gt; jq&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E3A1;&quot;&gt; &amp;#39;.[].class&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;librewolf&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;chrome-outlook.office.com__-Default&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #7F849C;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;kitty&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Spot anything familiar? I don&#x27;t know about you but the second class &lt;code&gt;chrome-outlook.office.com__-Default&lt;&#x2F;code&gt; sure sounds like it could be our Outlook window.&lt;&#x2F;p&gt;
&lt;p&gt;And that&#x27;s it! Now when I launch Outlook, it will always be opened on workspace 4. Easy enough, right?&lt;&#x2F;p&gt;
&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;a class=&quot;post-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h1&gt;
&lt;p&gt;It may seem like I have to do a lot of work to turn a simple website into a desktop application. But, in reality, all I have to do is create the desktop entry and the Hyprland rule.
And creating these takes one or two minutes.
Most of the heavy lifting is performed by the &lt;code&gt;chromium-nerd-app.sh&lt;&#x2F;code&gt; script.&lt;&#x2F;p&gt;
&lt;p&gt;I hope you liked this article and learned some neat things. I had a lot of fun writing it!
All the configuration and scripts shown here can be found on my &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;coko7&#x2F;.dotfiles&quot;&gt;GitHub&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;coko7&#x2F;.dotfiles&#x2F;tree&#x2F;main&#x2F;.config&#x2F;hypr&quot;&gt;Hyprland files&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;coko7&#x2F;.dotfiles&#x2F;blob&#x2F;main&#x2F;.config&#x2F;local&#x2F;bin-sh&#x2F;global&#x2F;chromium-nerd-app.sh&quot;&gt;chromium-nerd-app.sh script&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;If you have any question or feedback, feel free to email me at &lt;a href=&quot;mailto:contact@coko7.fr&quot;&gt;contact@coko7.fr&lt;&#x2F;a&gt;. Please consider sharing this around if you found it helpful &lt;em&gt;(or even if it was not helpful)&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Alright, I am done with my rambling. Bye bye 👋&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;:wqa&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
