<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Milka64's Blog</title><link href="https://blog.0w.tf/" rel="alternate"></link><link href="https://blog.0w.tf/feeds/all.atom.xml" rel="self"></link><id>https://blog.0w.tf/</id><updated>2021-11-02T09:00:00+01:00</updated><subtitle>Et la marmotte, elle met le chocolat dans le /dev/null</subtitle><entry><title>DNS dynamique avec l'api de Scaleway et de python</title><link href="https://blog.0w.tf/dyndns_online.html" rel="alternate"></link><published>2021-10-27T21:00:00+02:00</published><updated>2021-11-02T09:00:00+01:00</updated><author><name>Milka64</name></author><id>tag:blog.0w.tf,2021-10-27:/dyndns_online.html</id><summary type="html">&lt;p class="first last"&gt;Comment faire du DNS dynamique avec Scaleway et python&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Cette année j'ai été obligé de changer de FAI, je suis passé chez Orange et j'ai (re)découvert les joies d'une ip dynamique...&lt;/p&gt;
&lt;p&gt;Étant auto-hebergé, il m'a fallu trouver une solution.&lt;/p&gt;
&lt;div class="section" id="solutions"&gt;
&lt;h2&gt;Solutions&lt;/h2&gt;
&lt;p&gt;J'ai bien commencé à chercher des solutions de dynDNS mais je me suis vite rendu compte que ça ne me convenait pas (panne à répétition, temps de MAJ, etc ...).&lt;/p&gt;
&lt;p&gt;Ensuite, je me suis dit que j'allais me monter un bind auto-hebergé, mais par manque de temps, j'ai mis cette solution de côté.&lt;/p&gt;
&lt;p&gt;Et par le plus grand des hasards en mettant à jour une entrée DNS, je me suis rendu compte que Scaleway avait une API pour gérer ses services.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="dyndns-py"&gt;
&lt;h2&gt;Dyndns.py&lt;/h2&gt;
&lt;p&gt;J'ai donc écrit &lt;a class="reference external" href="https://gitlab.com/Milka64/dyndns_online.net"&gt;ce petit script&lt;/a&gt; (qui est utilisable par tous) dont je vais détailler les différentes parties.&lt;/p&gt;
&lt;p&gt;Il n'y a besoin que du token de l'api (disponible &lt;a class="reference external" href="https://console.online.net/fr/api/access"&gt;ici&lt;/a&gt;)&lt;/p&gt;
&lt;div class="section" id="fonction-args"&gt;
&lt;h3&gt;Fonction args&lt;/h3&gt;
&lt;p&gt;Elle parse les argument du scripts, et permets d'avoir un &lt;cite&gt;--help&lt;/cite&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_args&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="sd"&gt;    parse agrs&lt;/span&gt;
&lt;span class="sd"&gt;    &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class="n"&gt;parser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;argparse&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ArgumentParser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Update dns zone with online.net API&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;group&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_mutually_exclusive_group&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;group&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;-v&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;--verbose&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;store_true&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;group&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;-q&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;--quiet&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;store_true&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;-c&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;--clean&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;help&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;clean old unused zones&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;store_true&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;-t&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;--token&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;help&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;token&amp;#39;s API (https://console.online.net/fr/api/access)&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;-u&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;--url&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;help&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;url to get public ip, default=http://ifconfig.me&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;http://ifconfig.me&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;-r&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;--records&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;help&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;records to update, comma separated list&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;domain&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;help&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;domain to update&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse_args&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="fonction-clear"&gt;
&lt;h3&gt;Fonction clear&lt;/h3&gt;
&lt;p&gt;Efface les versions innutilisé:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;clear_versions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="sd"&gt;    clear inactive versions&lt;/span&gt;
&lt;span class="sd"&gt;    &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class="n"&gt;all_versions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;https://api.online.net/api/v1/domain/&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/version&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;versions_to_remove&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;https://api.online.net/api/v1/domain/&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/version&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;active&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;versions_to_remove&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Deleting : &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="n"&gt;api_session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;https://api.online.net/api/v1/domain/&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/version/&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;uuid_ref&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="fonction-update"&gt;
&lt;h3&gt;Fonction update&lt;/h3&gt;
&lt;p&gt;Crée une nouvelle zone, la peuple (avec les entrées de la version active) et l'active.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_new_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;records&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;records_to_update&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="sd"&gt;    Create new zone version with name YYYYMMDDhhmm&lt;/span&gt;
&lt;span class="sd"&gt;    &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class="n"&gt;new_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;%Y%m&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s2"&gt;%H%M&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Generating new zone called : &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;new_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;https://api.online.net/api/v1/domain/&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/version&amp;quot;&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;new_name&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;api_session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;error&amp;quot;&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;error_description&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;id_to_update&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;uuid_ref&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;https://api.online.net/api/v1/domain/&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/version/&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;id_to_update&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/zone&amp;quot;&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;record&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;records&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;records_to_update&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;public_ip&lt;/span&gt;
        &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                &lt;span class="s1"&gt;&amp;#39;type&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;type&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                &lt;span class="s1"&gt;&amp;#39;ttl&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ttl&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                &lt;span class="s1"&gt;&amp;#39;data&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                &lt;span class="s1"&gt;&amp;#39;priority&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;api_session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;error&amp;quot;&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
            &lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;error_description&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;https://api.online.net/api/v1/domain/&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/version/&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;id_to_update&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/enable&amp;quot;&lt;/span&gt;
    &lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;api_session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;patch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;res_json&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;res_json&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;error&amp;quot;&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;res_json&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;error_description&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="main"&gt;
&lt;h3&gt;Main&lt;/h3&gt;
&lt;p&gt;Appelé lors de l'exécution du scipt&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;__main__&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

    &lt;span class="c1"&gt;## PARSE AGRS ##&lt;/span&gt;
    &lt;span class="n"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_args&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;## Check if Token is present&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;token is required&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;## Get public IP ##&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;public_ip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Can&amp;#39;t get public IP&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;public_ip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Can&amp;#39;t get public IP&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Public IP is : &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;public_ip&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;## Init api session ##&lt;/span&gt;
    &lt;span class="n"&gt;api_session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;api_session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Authorization&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Bearer &amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;

    &lt;span class="c1"&gt;## Check api connection ##&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;api_session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;https://api.online.net/api/v1/domain/list&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Can&amp;#39;t connect to api&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;error&amp;quot;&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;error_description&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;


    &lt;span class="c1"&gt;## Get records and compare IP ##&lt;/span&gt;
    &lt;span class="n"&gt;records&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;api_session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;https://api.online.net/api/v1/domain/&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;/zone&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;error&amp;quot;&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;records&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;records&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;error_description&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="n"&gt;records_to_update&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;records&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;old_ip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;records&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;records_to_update&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;public_ip&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;data&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;old_ip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;create_new_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;records&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;records_to_update&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;## Clear inactive versions ##&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;clean&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;clear_versions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;api_session&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="bonus-acme-sh-api-online"&gt;
&lt;h2&gt;BONUS : acme.sh + api online&lt;/h2&gt;
&lt;p&gt;En me documentant sur l'api d'online, je me suis rendu compte qu'acme.sh permet d'utiliser l'api de Scaleway.&lt;/p&gt;
&lt;p&gt;Jusqu'à présent je mettais à jour mes certificats à la main tous les trois mois (avec quelques raté à l'occasion...).&lt;/p&gt;
&lt;p&gt;Il y a juste besoin du token dans une variable d'environement.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ONLINE_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;xxx&amp;#39;&lt;/span&gt;
&lt;span class="gp"&gt;$ &lt;/span&gt;acme.sh&lt;span class="w"&gt; &lt;/span&gt;--issue&lt;span class="w"&gt; &lt;/span&gt;--dns&lt;span class="w"&gt; &lt;/span&gt;dns_online&lt;span class="w"&gt; &lt;/span&gt;-d&lt;span class="w"&gt; &lt;/span&gt;0w.tf&lt;span class="w"&gt; &lt;/span&gt;-d&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;*.0w.tf&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--reloadcmd&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;nginx -s reload&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--server&lt;span class="w"&gt; &lt;/span&gt;letsencrypt&lt;span class="w"&gt; &lt;/span&gt;--force
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</content><category term="network"></category><category term="DNS"></category><category term="API"></category><category term="python"></category></entry><entry><title>Gérer son agenda en cli</title><link href="https://blog.0w.tf/agenda_cli.html" rel="alternate"></link><published>2021-06-20T18:30:00+02:00</published><updated>2021-06-29T22:30:00+02:00</updated><author><name>Milka64</name></author><id>tag:blog.0w.tf,2021-06-20:/agenda_cli.html</id><summary type="html">&lt;p class="first last"&gt;vdirsyncer &amp;amp; khal, le duo gagnant !&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Si il y a bien un truc que j'aime c'est de pouvoir &lt;strong&gt;TOUT&lt;/strong&gt; gérer via le terminal. De pouvoir m'affranchir si besoin de toute interface graphique. De rester indépendant de tout problème d'affichage.&lt;/p&gt;
&lt;p&gt;Et dans ce lot d'utilitaire accessible en console, j'ai récemment découvert le duo vdirsyncer &amp;amp; khal.&lt;/p&gt;
&lt;div class="section" id="vdirsyncer"&gt;
&lt;h2&gt;Vdirsyncer&lt;/h2&gt;
&lt;p&gt;Vdirsyncer permet de synchroniser un calendrier en ligne (caldav, google calendar, etesync, etc...) avec un dossier local. Il permet également de synchroniser des contacts avec un serveur cardav, mais je ne développerais pas cette partie.&lt;/p&gt;
&lt;p&gt;Le fichier de configuration se trouve ici :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;.config/vdirsyncer/config
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Tout d'abord, configurons le status_path&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;[general]&lt;/span&gt;
&lt;span class="na"&gt;status_path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;~/.vdirsyncer/status/&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ensuite, nous pouvons configurer les deux calendriers à synchroniser.&lt;/p&gt;
&lt;p&gt;L'un local et l'autre distant.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;[storage local]&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;filesystem&amp;quot;&lt;/span&gt;
&lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;~/.calendars/&amp;quot;&lt;/span&gt;
&lt;span class="na"&gt;fileext&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;.ics&amp;quot;&lt;/span&gt;

&lt;span class="k"&gt;[storage remote]&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;caldav&amp;quot;&lt;/span&gt;
&lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;https://caldav.server/&lt;/span&gt;
&lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;foo&amp;quot;&lt;/span&gt;
&lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;bar&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Maintenant que nous avons configuré les calendriers, nous pouvons enfin configurer la synchronisation entre les deux calendriers. Cette étape parait idiote, mais elle est indispensable parce que l'outil permet de synchroniser plusieurs agendas.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;[pair caldavserver]&lt;/span&gt;
&lt;span class="na"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;local&amp;quot;&lt;/span&gt;
&lt;span class="na"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;remote&amp;quot;&lt;/span&gt;
&lt;span class="na"&gt;collections&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;[&amp;quot;from a&amp;quot;, &amp;quot;from b&amp;quot;]&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;[&amp;quot;color&amp;quot;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il ne reste plus qu'à synchroniser tout ça.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;vdirsyncer&lt;span class="w"&gt; &lt;/span&gt;discover
&lt;span class="gp"&gt;$ &lt;/span&gt;vdirsyncer&lt;span class="w"&gt; &lt;/span&gt;sync
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="khal"&gt;
&lt;h2&gt;Khal&lt;/h2&gt;
&lt;p&gt;Maintenant que nouqs avons Vdirsyncer qui stocke les agendas dans le dossier &lt;tt class="docutils literal"&gt;.calendars&lt;/tt&gt;, nous pouvons demander a khal de nous afficher les évenements.&lt;/p&gt;
&lt;p&gt;Mais un minimum de configuration est necessaire&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;[calendars]&lt;/span&gt;

&lt;span class="k"&gt;[[local]]&lt;/span&gt;
&lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;~/.calendars/*&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;discover&lt;/span&gt;

&lt;span class="k"&gt;[locale]&lt;/span&gt;
&lt;span class="na"&gt;timeformat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;%H:%M&lt;/span&gt;
&lt;span class="na"&gt;dateformat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;%d/%m/%Y&lt;/span&gt;
&lt;span class="na"&gt;longdateformat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;%d/%m/%Y&lt;/span&gt;
&lt;span class="na"&gt;datetimeformat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;%d/%m/%Y %H:%M&lt;/span&gt;
&lt;span class="na"&gt;longdatetimeformat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;%d/%m/%Y %H:%M&lt;/span&gt;

&lt;span class="k"&gt;[default]&lt;/span&gt;
&lt;span class="na"&gt;default_calendar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;personal&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Rien de particulier à dire sur cette configuration qui me parait plutôt claire.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;khal&lt;span class="w"&gt; &lt;/span&gt;list
&lt;span class="go"&gt;No events&lt;/span&gt;
&lt;span class="gp"&gt;$ &lt;/span&gt;khal&lt;span class="w"&gt; &lt;/span&gt;search&lt;span class="w"&gt; &lt;/span&gt;dentiste
&lt;span class="go"&gt;02/07/2021 10:30-02/07/2021 11:30 Dentiste Dr Brutal&lt;/span&gt;
&lt;span class="gp"&gt;$ &lt;/span&gt;khal&lt;span class="w"&gt; &lt;/span&gt;--help
&lt;span class="go"&gt;Usage: khal [OPTIONS] COMMAND [ARGS]...&lt;/span&gt;

&lt;span class="go"&gt;Options:&lt;/span&gt;
&lt;span class="go"&gt;  -v, --verbosity LVL    Either CRITICAL, ERROR,&lt;/span&gt;
&lt;span class="go"&gt;                         WARNING, INFO or DEBUG&lt;/span&gt;
&lt;span class="go"&gt;  -l, --logfile LOGFILE  The logfile to use [defaults&lt;/span&gt;
&lt;span class="go"&gt;                         to stdout]&lt;/span&gt;
&lt;span class="go"&gt;  -c, --config PATH      The config file to use.&lt;/span&gt;
&lt;span class="go"&gt;  --color / --no-color   Use colored/uncolored output.&lt;/span&gt;
&lt;span class="go"&gt;                         Default is to only enable&lt;/span&gt;
&lt;span class="go"&gt;                         colors when not part of a&lt;/span&gt;
&lt;span class="go"&gt;                         pipe.&lt;/span&gt;
&lt;span class="go"&gt;  --version              Show the version and exit.&lt;/span&gt;
&lt;span class="go"&gt;  --help                 Show this message and exit.&lt;/span&gt;

&lt;span class="go"&gt;Commands:&lt;/span&gt;
&lt;span class="go"&gt;  at              Print all events at a specific&lt;/span&gt;
&lt;span class="go"&gt;                  datetime...&lt;/span&gt;
&lt;span class="go"&gt;  calendar        Print calendar with agenda.&lt;/span&gt;
&lt;span class="go"&gt;  configure       Helper for initial configuration of&lt;/span&gt;
&lt;span class="go"&gt;                  khal.&lt;/span&gt;
&lt;span class="go"&gt;  edit            Interactively edit (or delete)&lt;/span&gt;
&lt;span class="go"&gt;                  events...&lt;/span&gt;
&lt;span class="go"&gt;  import          Import events from an .ics file (or&lt;/span&gt;
&lt;span class="go"&gt;                  stdin).&lt;/span&gt;
&lt;span class="go"&gt;  interactive     Interactive UI.&lt;/span&gt;
&lt;span class="go"&gt;  list            List all events between a start&lt;/span&gt;
&lt;span class="go"&gt;                  (default:...&lt;/span&gt;
&lt;span class="go"&gt;  new             Create a new event from arguments.&lt;/span&gt;
&lt;span class="go"&gt;  printcalendars  List all calendars.&lt;/span&gt;
&lt;span class="go"&gt;  printformats    Print a date in all formats.&lt;/span&gt;
&lt;span class="go"&gt;  printics        Print an ics file (or read from&lt;/span&gt;
&lt;span class="go"&gt;                  stdin)...&lt;/span&gt;
&lt;span class="go"&gt;  search          Search for events matching&lt;/span&gt;
&lt;span class="go"&gt;                  SEARCH_STRING.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</content><category term="cli"></category><category term="divers"></category><category term="cli"></category></entry><entry><title>Taskwarrior</title><link href="https://blog.0w.tf/taskwarrior.html" rel="alternate"></link><published>2021-06-10T22:15:00+02:00</published><updated>2021-06-10T22:15:00+02:00</updated><author><name>Milka64</name></author><id>tag:blog.0w.tf,2021-06-10:/taskwarrior.html</id><summary type="html">&lt;p class="first last"&gt;&lt;strong&gt;Taskwarrior&lt;/strong&gt;, le meilleur gestionnaire de TODOlist de tout les temps!&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Un petit article pour vous faire découvrir un logiciel en ligne de commande.&lt;/p&gt;
&lt;p&gt;Si il y a bien un outil que j'affectionne depuis plusieurs années, c'est Taskwarrior.&lt;/p&gt;
&lt;p&gt;Ce logiciel permet de gérer tout type de tâche. De la tâche la plus simple à la tache hebdomadaire mais seulement pendant 6 mois.&lt;/p&gt;
&lt;div class="section" id="exemple-d-utilisation"&gt;
&lt;h2&gt;Exemple d'utilisation&lt;/h2&gt;
&lt;p&gt;Ajout d'une tâche et sa suppression.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;task&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;something
Created&lt;span class="w"&gt; &lt;/span&gt;task&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.

$&lt;span class="w"&gt; &lt;/span&gt;task&lt;span class="w"&gt; &lt;/span&gt;list

ID&lt;span class="w"&gt; &lt;/span&gt;Age&lt;span class="w"&gt; &lt;/span&gt;Description&lt;span class="w"&gt;      &lt;/span&gt;Urg
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;35s&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;something&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;

&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;task
$&lt;span class="w"&gt; &lt;/span&gt;task&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;done&lt;/span&gt;
Completed&lt;span class="w"&gt; &lt;/span&gt;task&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;do something&amp;#39;&lt;/span&gt;.
Completed&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;task.
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On peut éditer une tâche via son éditeur préféré (variable $EDITOR)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ task edit &lt;span class="m"&gt;2&lt;/span&gt;
# Name               Editable details
# &lt;span class="p"&gt;-----------------&lt;/span&gt;  &lt;span class="p"&gt;----------------------------------------------------&lt;/span&gt;
# ID:                &lt;span class="m"&gt;2&lt;/span&gt;
# UUID:              &lt;span class="m"&gt;24935&lt;/span&gt;a&lt;span class="m"&gt;08-7577-4190&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;adc4&lt;span class="p"&gt;-&lt;/span&gt;dc535382045b
# Status:            Pending
# Mask:
# iMask:
  Project:
# Separate the &lt;span class="k"&gt;tags&lt;/span&gt; with spaces&lt;span class="p"&gt;,&lt;/span&gt; like this: tag1 tag2
  Tags:
  Description:       &lt;span class="k"&gt;do&lt;/span&gt; another thing
  Created:           &lt;span class="m"&gt;2021-06-10&lt;/span&gt; &lt;span class="m"&gt;22&lt;/span&gt;:&lt;span class="m"&gt;15&lt;/span&gt;:&lt;span class="m"&gt;09&lt;/span&gt;
  Started:
  Ended:
  Scheduled:
  Due:
  Until:
  Recur:
  Wait until:
# Modified:          &lt;span class="m"&gt;2021-06-10&lt;/span&gt; &lt;span class="m"&gt;22&lt;/span&gt;:&lt;span class="m"&gt;15&lt;/span&gt;:&lt;span class="m"&gt;09&lt;/span&gt;
  Parent:
# Annotations look like this: &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;date&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;--&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;text&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; and there can be any &lt;span class="k"&gt;number&lt;/span&gt; of them.
# The &lt;span class="s1"&gt;&amp;#39; -- &amp;#39;&lt;/span&gt; separator between the date and text field should not be removed.
# A &lt;span class="s2"&gt;&amp;quot;blank slot&amp;quot;&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; adding an annotation follows &lt;span class="k"&gt;for&lt;/span&gt; your convenience.
  Annotation:        &lt;span class="m"&gt;2021-06-10&lt;/span&gt; &lt;span class="m"&gt;22&lt;/span&gt;:&lt;span class="m"&gt;15&lt;/span&gt;:&lt;span class="m"&gt;26&lt;/span&gt; &lt;span class="p"&gt;--&lt;/span&gt;
# Dependencies should be &lt;span class="k"&gt;a&lt;/span&gt; comma&lt;span class="p"&gt;-&lt;/span&gt;separated &lt;span class="nb"&gt;list&lt;/span&gt; of task IDs/UUIDs or ID ranges&lt;span class="p"&gt;,&lt;/span&gt; with no spaces.
  Dependencies:
# &lt;span class="nb"&gt;User&lt;/span&gt; Defined Attributes
  UDA priority:
# End
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Tout un tat de fonctionnalité sont disponibles:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;échéance&lt;/li&gt;
&lt;li&gt;dépendances entre tâches&lt;/li&gt;
&lt;li&gt;priorité&lt;/li&gt;
&lt;li&gt;classement par projets&lt;/li&gt;
&lt;li&gt;tags&lt;/li&gt;
&lt;li&gt;possibilité de cacher une tache jusqu'a une certaine date&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour plus d'infos, je vous recommande l'excellent article de Linux Pratique
&lt;a class="reference external" href="https://connect.ed-diamond.com/Linux-Pratique/LP-072/Taskwarrior-rien-que-pour-vos-taches"&gt;https://connect.ed-diamond.com/Linux-Pratique/LP-072/Taskwarrior-rien-que-pour-vos-taches&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
</content><category term="cli"></category><category term="divers"></category><category term="cli"></category></entry><entry><title>MPD</title><link href="https://blog.0w.tf/mpd.html" rel="alternate"></link><published>2021-06-08T23:30:00+02:00</published><updated>2021-06-08T23:30:00+02:00</updated><author><name>Milka64</name></author><id>tag:blog.0w.tf,2021-06-08:/mpd.html</id><summary type="html">&lt;p class="first last"&gt;&lt;strong&gt;MPD&lt;/strong&gt; est un lecteur de musique qui tourne en daemon.&lt;/p&gt;
</summary><content type="html">&lt;div class="section" id="presentation"&gt;
&lt;h2&gt;Présentation&lt;/h2&gt;
&lt;p&gt;MPD (Music Player Daemon) est, comme son nom l'indique, est un daemon qui joue de la musique.&lt;/p&gt;
&lt;p&gt;Écrit en C, il est publié sous license GPLv2.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="fonctionement"&gt;
&lt;h2&gt;Fonctionement&lt;/h2&gt;
&lt;p&gt;MPD utilise une base de donnée fichier (comme sqlite3) pour stocker les informations de base des fichier audio. Le path de cette base est bien évidement configurable.&lt;/p&gt;
&lt;p&gt;Il lit les fichiers en local et peut-être controlé par un client (local ou via réseau).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="configuration"&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;p&gt;La configuration est très simple&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;music_directory&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;~/Musique&amp;quot;&lt;/span&gt;
playlist_directory&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;~/Playlists&amp;quot;&lt;/span&gt;
db_file&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;~/.mpd.db&amp;quot;&lt;/span&gt;
log_file&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;syslog&amp;quot;&lt;/span&gt;
state_file&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;/var/lib/mpd/mpdstate&amp;quot;&lt;/span&gt;
auto_update&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;yes&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et c'est tout ?&lt;/p&gt;
&lt;p&gt;Et bien oui. On peut y ajouter tout plein d'options, de plugins, etc ... Mais l'essentiel est là.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="et-maintenant"&gt;
&lt;h2&gt;Et maintenant?&lt;/h2&gt;
&lt;p&gt;Et bien maintenant, nous pouvons lancer le démon de façon très simple&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;mpd
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;et y connecter un client, on va commencer par utiliser mpc.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;mpc&lt;span class="w"&gt; &lt;/span&gt;update
&lt;span class="go"&gt;Updating DB (#1) ...&lt;/span&gt;
&lt;span class="go"&gt;volume: n/a   repeat: off   random: on    single: off   consume: off&lt;/span&gt;
&lt;span class="gp"&gt;$ &lt;/span&gt;mpc&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;/
&lt;span class="gp"&gt;$ &lt;/span&gt;mpc&lt;span class="w"&gt; &lt;/span&gt;play
&lt;span class="go"&gt;Artist_name - Song_name&lt;/span&gt;
&lt;span class="gp"&gt;[playing] #&lt;/span&gt;&lt;span class="m"&gt;167&lt;/span&gt;/1427&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00/4:32&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;%&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="go"&gt;volume: n/a   repeat: off   random: on    single: off   consume: off&lt;/span&gt;
&lt;span class="gp"&gt;$ &lt;/span&gt;mpc&lt;span class="w"&gt; &lt;/span&gt;next
&lt;span class="go"&gt;Artist_name - Song_name&lt;/span&gt;
&lt;span class="gp"&gt;[playing] #&lt;/span&gt;&lt;span class="m"&gt;414&lt;/span&gt;/1427&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00/3:22&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;%&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="go"&gt;volume: 99%  repeat: off   random: on    single: off   consume: off&lt;/span&gt;
&lt;span class="gp"&gt;$ &lt;/span&gt;mpc&lt;span class="w"&gt; &lt;/span&gt;stop
&lt;span class="go"&gt;volume: 99%   repeat: off   random: on    single: off   consume: off&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Les commandes parlent d'elle même, on update la DB, on ajoute toute la librairie musicale, on play, passe à la suivante et enfin on STOP.&lt;/p&gt;
&lt;/div&gt;
</content><category term="cli"></category><category term="divers"></category><category term="cli"></category><category term="multimedia"></category></entry><entry><title>SwayWM</title><link href="https://blog.0w.tf/sway.html" rel="alternate"></link><published>2021-05-22T23:30:00+02:00</published><updated>2020-06-10T22:00:00+02:00</updated><author><name>Milka64</name></author><id>tag:blog.0w.tf,2021-05-22:/sway.html</id><summary type="html">&lt;p class="first last"&gt;À la découverte de &lt;strong&gt;swayWM&lt;/strong&gt;, le clone de i3 sous wayland. En bonus pas mal d'outils bien utile...&lt;/p&gt;
</summary><content type="html">&lt;div class="section" id="sway-c-est-quoi"&gt;
&lt;h2&gt;Sway, c'est quoi?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;SwayWM&lt;/strong&gt; est un gestionnaire de fenêtre (sous &lt;em&gt;Wayland&lt;/em&gt;) qui a pour but de remplacer &lt;strong&gt;i3&lt;/strong&gt; (&lt;em&gt;x11&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;La configuration est même compatible de i3 vers sway.&lt;/p&gt;
&lt;p&gt;Sway organise les fenêtres par division de l'espace en éléments de plus petites tailles. La première fenêtre ouverte &lt;em&gt;A&lt;/em&gt; occupera tout l'espace. Lorsqu'une nouvelle fenêtre B est créée, elle prendra la moitié de l'espace (horizontalement ou verticalement) réduisant donc la taille de A de moitié.&lt;/p&gt;
&lt;p&gt;Si une nouvelle fenêtre C est créée, elle divisera encore l'espace d'une des deux autres fenêtres (selon le focus).&lt;/p&gt;
&lt;a class="reference external image-reference" href="https://blog.0w.tf/images/sway/split.png"&gt;&lt;img alt="split des fenêtres" src="https://blog.0w.tf/images/sway/split.png" /&gt;&lt;/a&gt;
&lt;p&gt;Sway permet également d'utiliser des &lt;em&gt;workspaces&lt;/em&gt;, l'équivalent des &lt;strong&gt;Bureaux&lt;/strong&gt; sous d'autres environnements (Gnome,KDE, etc), à la différence qu'ici un workspace utilise un écran et ne peut être étendu à d'autres écrans.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="wayland-le-nouveau-x11"&gt;
&lt;h2&gt;Wayland, le nouveau X11&lt;/h2&gt;
&lt;p&gt;Comme je le disait précédement, Sway utilise Wayland.&lt;/p&gt;
&lt;p&gt;Il permet, entre autre, une meilleure sécurité que X11, un code plus moderne, mais moins mature.&lt;/p&gt;
&lt;p&gt;Mais &lt;strong&gt;tout n'est pas rose&lt;/strong&gt;, il y a quelques applications qui ne sont pas compatible (ou du moins en partie).&lt;/p&gt;
&lt;p&gt;Mais les choses semblent aller de l'avant, exemple : &lt;strong&gt;OBS-studio&lt;/strong&gt; a rendu, depuis peu, son logiciel compatbile Wayland.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="configuration"&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;p&gt;Tous se fait via le fichier de configuration &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;~/.config/sway/config&lt;/span&gt;&lt;/tt&gt;. Il est extensible et peut donc être découpé au besoin.&lt;/p&gt;
&lt;p&gt;La syntaxe est assez simple pour la plupart des usages et reste lisible.&lt;/p&gt;
&lt;p&gt;J'ai personnellement choisi de versionner ce fichier dans mon &lt;strong&gt;Gitlab&lt;/strong&gt;, ce qui me permet d'avoir la même configuration sur tous mes postes.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Mod4

xwayland&lt;span class="w"&gt; &lt;/span&gt;enabled

default_border&lt;span class="w"&gt; &lt;/span&gt;normal
default_floating_border&lt;span class="w"&gt; &lt;/span&gt;normal
&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$opacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.9
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ici, je crée une variable &lt;tt class="docutils literal"&gt;$mod&lt;/tt&gt; avec &lt;tt class="docutils literal"&gt;Mod4&lt;/tt&gt; comme valeur.&lt;/p&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;Mod4&lt;/tt&gt; correspont à la touche Windows.&lt;/p&gt;
&lt;p&gt;Ensuite, j'active Xwayland qui permet d'ouvrir des applications X11 sous wayland (en réalité, il ouvre un serveur X dans wayland)&lt;/p&gt;
&lt;p&gt;Et je termine par la configuration des bordures et de l'opacité des fenêtres.&lt;/p&gt;
&lt;p&gt;Ce fichier cherche à ouvrir &lt;tt class="docutils literal"&gt;config.local&lt;/tt&gt; qui lui est spécifique au poste (Configuration éran, clavier, etc ...)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;include&lt;span class="w"&gt; &lt;/span&gt;~/.config/sway/config.local
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="gestion-des-ecrans"&gt;
&lt;h2&gt;Gestion des écrans&lt;/h2&gt;
&lt;p&gt;Le double écran se configure aussi explicitement que le reste.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;output&lt;span class="w"&gt; &lt;/span&gt;HDMI1&lt;span class="w"&gt; &lt;/span&gt;pos&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;res&lt;span class="w"&gt; &lt;/span&gt;1920x1080
output&lt;span class="w"&gt; &lt;/span&gt;eDP1&lt;span class="w"&gt; &lt;/span&gt;pos&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1920&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;res&lt;span class="w"&gt; &lt;/span&gt;1600x900
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;L'écran HDMI1 est à gauche, avec une résolution de 1920x1080 et le seconde écran (eDP1) est à droit avec une résolution de 1600x900.&lt;/p&gt;
&lt;p&gt;Pour déterminer le nom des écran, il suffit d'utiliser la commande suivante.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;swaymsg&lt;span class="w"&gt; &lt;/span&gt;-t&lt;span class="w"&gt; &lt;/span&gt;get_outputs
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="workspaces"&gt;
&lt;h2&gt;Workspaces&lt;/h2&gt;
&lt;p&gt;Les workspaces sont donc l'équivalent des Bureaux sous &lt;strong&gt;Gnome&lt;/strong&gt;/&lt;strong&gt;KDE&lt;/strong&gt;/... on peut en configurer autant que l'on veut en leurs assignant simplement un raccourci clavier (voir plus bas).&lt;/p&gt;
&lt;p&gt;Moi, je bascule d'un workspace à l'autre en utilisant la touche windows + le numéro du workspace (pour le workspace 4 : &amp;lt;Windows&amp;gt;+4)&lt;/p&gt;
&lt;p&gt;Il y a également la possibilité de placer les workspaces sur un écran plutôt qu'un autre, et d'autres fonctions mais j'y reviendrais plus tard (via un MAJ de l'article).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="shortcuts-simplicite-efficacite"&gt;
&lt;h2&gt;Shortcuts : simplicité, efficacité&lt;/h2&gt;
&lt;p&gt;Les raccourcis clavier se configurent avec &lt;tt class="docutils literal"&gt;bindsym&lt;/tt&gt;.&lt;/p&gt;
&lt;p&gt;Ci-dessous, je configure mes raccourcis clavier pour les workspaces.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# switch to workspace&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_1&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_2&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_3&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_4&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_5&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_6&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_7&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_8&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_9&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_0&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;KP_1&lt;/strong&gt; correspond à la touche 1 du pavé numérique.&lt;/p&gt;
&lt;p&gt;Mais bindsym peut également lancer des applications.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# start a terminal&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+t&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;alacritty
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Un autre de mes raccourcis que je trouve bien utile&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Reload the configuration file&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+c&lt;span class="w"&gt; &lt;/span&gt;reload
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Sway peut utiliser des &amp;quot;modes&amp;quot;. Lorsque l'un de ces modes est activé, les raccourci claviers sont uniques à ce mode.&lt;/p&gt;
&lt;p&gt;Par exemple, moi j'utilise principalement trois modes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;&lt;strong&gt;default&lt;/strong&gt; : raccourcis claviers par défault&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;&lt;strong&gt;open&lt;/strong&gt; : il me permet d'ouvrir les applications que j'utilise souvent&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;open&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;emoji-picker&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;f&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;firefox&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;m&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;thunderbird&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;t&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;alacritty&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;


&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# return to default mode&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;Return&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;Escape&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+o&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;open&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;&lt;strong&gt;resize&lt;/strong&gt; : il me permet de redimensionner les fenêtres&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;resize&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;Left&lt;span class="w"&gt; &lt;/span&gt;resize&lt;span class="w"&gt; &lt;/span&gt;shrink&lt;span class="w"&gt; &lt;/span&gt;width&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;px&lt;span class="w"&gt; &lt;/span&gt;or&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ppt
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;Up&lt;span class="w"&gt; &lt;/span&gt;resize&lt;span class="w"&gt; &lt;/span&gt;grow&lt;span class="w"&gt; &lt;/span&gt;height&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;px&lt;span class="w"&gt; &lt;/span&gt;or&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ppt
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;Down&lt;span class="w"&gt; &lt;/span&gt;resize&lt;span class="w"&gt; &lt;/span&gt;shrink&lt;span class="w"&gt; &lt;/span&gt;height&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;px&lt;span class="w"&gt; &lt;/span&gt;or&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ppt
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;Right&lt;span class="w"&gt; &lt;/span&gt;resize&lt;span class="w"&gt; &lt;/span&gt;grow&lt;span class="w"&gt; &lt;/span&gt;width&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;px&lt;span class="w"&gt; &lt;/span&gt;or&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ppt

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# return to default mode&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;Return&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;Escape&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+r&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;resize&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="autostart-rien-de-plus-facile"&gt;
&lt;h2&gt;Autostart : rien de plus facile&lt;/h2&gt;
&lt;p&gt;Les applications lancées à l'ouverture de la session se font tout simplement dans le même fichier que le reste de la configuration.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mako
&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/path/to/some/executable
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="mes-dotfiles-a-moi"&gt;
&lt;h2&gt;Mes Dotfiles à moi&lt;/h2&gt;
&lt;p&gt;Vous pouvez retrouver la totalité de mes Dotfiles Ici.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;  1&lt;/span&gt;
&lt;span class="normal"&gt;  2&lt;/span&gt;
&lt;span class="normal"&gt;  3&lt;/span&gt;
&lt;span class="normal"&gt;  4&lt;/span&gt;
&lt;span class="normal"&gt;  5&lt;/span&gt;
&lt;span class="normal"&gt;  6&lt;/span&gt;
&lt;span class="normal"&gt;  7&lt;/span&gt;
&lt;span class="normal"&gt;  8&lt;/span&gt;
&lt;span class="normal"&gt;  9&lt;/span&gt;
&lt;span class="normal"&gt; 10&lt;/span&gt;
&lt;span class="normal"&gt; 11&lt;/span&gt;
&lt;span class="normal"&gt; 12&lt;/span&gt;
&lt;span class="normal"&gt; 13&lt;/span&gt;
&lt;span class="normal"&gt; 14&lt;/span&gt;
&lt;span class="normal"&gt; 15&lt;/span&gt;
&lt;span class="normal"&gt; 16&lt;/span&gt;
&lt;span class="normal"&gt; 17&lt;/span&gt;
&lt;span class="normal"&gt; 18&lt;/span&gt;
&lt;span class="normal"&gt; 19&lt;/span&gt;
&lt;span class="normal"&gt; 20&lt;/span&gt;
&lt;span class="normal"&gt; 21&lt;/span&gt;
&lt;span class="normal"&gt; 22&lt;/span&gt;
&lt;span class="normal"&gt; 23&lt;/span&gt;
&lt;span class="normal"&gt; 24&lt;/span&gt;
&lt;span class="normal"&gt; 25&lt;/span&gt;
&lt;span class="normal"&gt; 26&lt;/span&gt;
&lt;span class="normal"&gt; 27&lt;/span&gt;
&lt;span class="normal"&gt; 28&lt;/span&gt;
&lt;span class="normal"&gt; 29&lt;/span&gt;
&lt;span class="normal"&gt; 30&lt;/span&gt;
&lt;span class="normal"&gt; 31&lt;/span&gt;
&lt;span class="normal"&gt; 32&lt;/span&gt;
&lt;span class="normal"&gt; 33&lt;/span&gt;
&lt;span class="normal"&gt; 34&lt;/span&gt;
&lt;span class="normal"&gt; 35&lt;/span&gt;
&lt;span class="normal"&gt; 36&lt;/span&gt;
&lt;span class="normal"&gt; 37&lt;/span&gt;
&lt;span class="normal"&gt; 38&lt;/span&gt;
&lt;span class="normal"&gt; 39&lt;/span&gt;
&lt;span class="normal"&gt; 40&lt;/span&gt;
&lt;span class="normal"&gt; 41&lt;/span&gt;
&lt;span class="normal"&gt; 42&lt;/span&gt;
&lt;span class="normal"&gt; 43&lt;/span&gt;
&lt;span class="normal"&gt; 44&lt;/span&gt;
&lt;span class="normal"&gt; 45&lt;/span&gt;
&lt;span class="normal"&gt; 46&lt;/span&gt;
&lt;span class="normal"&gt; 47&lt;/span&gt;
&lt;span class="normal"&gt; 48&lt;/span&gt;
&lt;span class="normal"&gt; 49&lt;/span&gt;
&lt;span class="normal"&gt; 50&lt;/span&gt;
&lt;span class="normal"&gt; 51&lt;/span&gt;
&lt;span class="normal"&gt; 52&lt;/span&gt;
&lt;span class="normal"&gt; 53&lt;/span&gt;
&lt;span class="normal"&gt; 54&lt;/span&gt;
&lt;span class="normal"&gt; 55&lt;/span&gt;
&lt;span class="normal"&gt; 56&lt;/span&gt;
&lt;span class="normal"&gt; 57&lt;/span&gt;
&lt;span class="normal"&gt; 58&lt;/span&gt;
&lt;span class="normal"&gt; 59&lt;/span&gt;
&lt;span class="normal"&gt; 60&lt;/span&gt;
&lt;span class="normal"&gt; 61&lt;/span&gt;
&lt;span class="normal"&gt; 62&lt;/span&gt;
&lt;span class="normal"&gt; 63&lt;/span&gt;
&lt;span class="normal"&gt; 64&lt;/span&gt;
&lt;span class="normal"&gt; 65&lt;/span&gt;
&lt;span class="normal"&gt; 66&lt;/span&gt;
&lt;span class="normal"&gt; 67&lt;/span&gt;
&lt;span class="normal"&gt; 68&lt;/span&gt;
&lt;span class="normal"&gt; 69&lt;/span&gt;
&lt;span class="normal"&gt; 70&lt;/span&gt;
&lt;span class="normal"&gt; 71&lt;/span&gt;
&lt;span class="normal"&gt; 72&lt;/span&gt;
&lt;span class="normal"&gt; 73&lt;/span&gt;
&lt;span class="normal"&gt; 74&lt;/span&gt;
&lt;span class="normal"&gt; 75&lt;/span&gt;
&lt;span class="normal"&gt; 76&lt;/span&gt;
&lt;span class="normal"&gt; 77&lt;/span&gt;
&lt;span class="normal"&gt; 78&lt;/span&gt;
&lt;span class="normal"&gt; 79&lt;/span&gt;
&lt;span class="normal"&gt; 80&lt;/span&gt;
&lt;span class="normal"&gt; 81&lt;/span&gt;
&lt;span class="normal"&gt; 82&lt;/span&gt;
&lt;span class="normal"&gt; 83&lt;/span&gt;
&lt;span class="normal"&gt; 84&lt;/span&gt;
&lt;span class="normal"&gt; 85&lt;/span&gt;
&lt;span class="normal"&gt; 86&lt;/span&gt;
&lt;span class="normal"&gt; 87&lt;/span&gt;
&lt;span class="normal"&gt; 88&lt;/span&gt;
&lt;span class="normal"&gt; 89&lt;/span&gt;
&lt;span class="normal"&gt; 90&lt;/span&gt;
&lt;span class="normal"&gt; 91&lt;/span&gt;
&lt;span class="normal"&gt; 92&lt;/span&gt;
&lt;span class="normal"&gt; 93&lt;/span&gt;
&lt;span class="normal"&gt; 94&lt;/span&gt;
&lt;span class="normal"&gt; 95&lt;/span&gt;
&lt;span class="normal"&gt; 96&lt;/span&gt;
&lt;span class="normal"&gt; 97&lt;/span&gt;
&lt;span class="normal"&gt; 98&lt;/span&gt;
&lt;span class="normal"&gt; 99&lt;/span&gt;
&lt;span class="normal"&gt;100&lt;/span&gt;
&lt;span class="normal"&gt;101&lt;/span&gt;
&lt;span class="normal"&gt;102&lt;/span&gt;
&lt;span class="normal"&gt;103&lt;/span&gt;
&lt;span class="normal"&gt;104&lt;/span&gt;
&lt;span class="normal"&gt;105&lt;/span&gt;
&lt;span class="normal"&gt;106&lt;/span&gt;
&lt;span class="normal"&gt;107&lt;/span&gt;
&lt;span class="normal"&gt;108&lt;/span&gt;
&lt;span class="normal"&gt;109&lt;/span&gt;
&lt;span class="normal"&gt;110&lt;/span&gt;
&lt;span class="normal"&gt;111&lt;/span&gt;
&lt;span class="normal"&gt;112&lt;/span&gt;
&lt;span class="normal"&gt;113&lt;/span&gt;
&lt;span class="normal"&gt;114&lt;/span&gt;
&lt;span class="normal"&gt;115&lt;/span&gt;
&lt;span class="normal"&gt;116&lt;/span&gt;
&lt;span class="normal"&gt;117&lt;/span&gt;
&lt;span class="normal"&gt;118&lt;/span&gt;
&lt;span class="normal"&gt;119&lt;/span&gt;
&lt;span class="normal"&gt;120&lt;/span&gt;
&lt;span class="normal"&gt;121&lt;/span&gt;
&lt;span class="normal"&gt;122&lt;/span&gt;
&lt;span class="normal"&gt;123&lt;/span&gt;
&lt;span class="normal"&gt;124&lt;/span&gt;
&lt;span class="normal"&gt;125&lt;/span&gt;
&lt;span class="normal"&gt;126&lt;/span&gt;
&lt;span class="normal"&gt;127&lt;/span&gt;
&lt;span class="normal"&gt;128&lt;/span&gt;
&lt;span class="normal"&gt;129&lt;/span&gt;
&lt;span class="normal"&gt;130&lt;/span&gt;
&lt;span class="normal"&gt;131&lt;/span&gt;
&lt;span class="normal"&gt;132&lt;/span&gt;
&lt;span class="normal"&gt;133&lt;/span&gt;
&lt;span class="normal"&gt;134&lt;/span&gt;
&lt;span class="normal"&gt;135&lt;/span&gt;
&lt;span class="normal"&gt;136&lt;/span&gt;
&lt;span class="normal"&gt;137&lt;/span&gt;
&lt;span class="normal"&gt;138&lt;/span&gt;
&lt;span class="normal"&gt;139&lt;/span&gt;
&lt;span class="normal"&gt;140&lt;/span&gt;
&lt;span class="normal"&gt;141&lt;/span&gt;
&lt;span class="normal"&gt;142&lt;/span&gt;
&lt;span class="normal"&gt;143&lt;/span&gt;
&lt;span class="normal"&gt;144&lt;/span&gt;
&lt;span class="normal"&gt;145&lt;/span&gt;
&lt;span class="normal"&gt;146&lt;/span&gt;
&lt;span class="normal"&gt;147&lt;/span&gt;
&lt;span class="normal"&gt;148&lt;/span&gt;
&lt;span class="normal"&gt;149&lt;/span&gt;
&lt;span class="normal"&gt;150&lt;/span&gt;
&lt;span class="normal"&gt;151&lt;/span&gt;
&lt;span class="normal"&gt;152&lt;/span&gt;
&lt;span class="normal"&gt;153&lt;/span&gt;
&lt;span class="normal"&gt;154&lt;/span&gt;
&lt;span class="normal"&gt;155&lt;/span&gt;
&lt;span class="normal"&gt;156&lt;/span&gt;
&lt;span class="normal"&gt;157&lt;/span&gt;
&lt;span class="normal"&gt;158&lt;/span&gt;
&lt;span class="normal"&gt;159&lt;/span&gt;
&lt;span class="normal"&gt;160&lt;/span&gt;
&lt;span class="normal"&gt;161&lt;/span&gt;
&lt;span class="normal"&gt;162&lt;/span&gt;
&lt;span class="normal"&gt;163&lt;/span&gt;
&lt;span class="normal"&gt;164&lt;/span&gt;
&lt;span class="normal"&gt;165&lt;/span&gt;
&lt;span class="normal"&gt;166&lt;/span&gt;
&lt;span class="normal"&gt;167&lt;/span&gt;
&lt;span class="normal"&gt;168&lt;/span&gt;
&lt;span class="normal"&gt;169&lt;/span&gt;
&lt;span class="normal"&gt;170&lt;/span&gt;
&lt;span class="normal"&gt;171&lt;/span&gt;
&lt;span class="normal"&gt;172&lt;/span&gt;
&lt;span class="normal"&gt;173&lt;/span&gt;
&lt;span class="normal"&gt;174&lt;/span&gt;
&lt;span class="normal"&gt;175&lt;/span&gt;
&lt;span class="normal"&gt;176&lt;/span&gt;
&lt;span class="normal"&gt;177&lt;/span&gt;
&lt;span class="normal"&gt;178&lt;/span&gt;
&lt;span class="normal"&gt;179&lt;/span&gt;
&lt;span class="normal"&gt;180&lt;/span&gt;
&lt;span class="normal"&gt;181&lt;/span&gt;
&lt;span class="normal"&gt;182&lt;/span&gt;
&lt;span class="normal"&gt;183&lt;/span&gt;
&lt;span class="normal"&gt;184&lt;/span&gt;
&lt;span class="normal"&gt;185&lt;/span&gt;
&lt;span class="normal"&gt;186&lt;/span&gt;
&lt;span class="normal"&gt;187&lt;/span&gt;
&lt;span class="normal"&gt;188&lt;/span&gt;
&lt;span class="normal"&gt;189&lt;/span&gt;
&lt;span class="normal"&gt;190&lt;/span&gt;
&lt;span class="normal"&gt;191&lt;/span&gt;
&lt;span class="normal"&gt;192&lt;/span&gt;
&lt;span class="normal"&gt;193&lt;/span&gt;
&lt;span class="normal"&gt;194&lt;/span&gt;
&lt;span class="normal"&gt;195&lt;/span&gt;
&lt;span class="normal"&gt;196&lt;/span&gt;
&lt;span class="normal"&gt;197&lt;/span&gt;
&lt;span class="normal"&gt;198&lt;/span&gt;
&lt;span class="normal"&gt;199&lt;/span&gt;
&lt;span class="normal"&gt;200&lt;/span&gt;
&lt;span class="normal"&gt;201&lt;/span&gt;
&lt;span class="normal"&gt;202&lt;/span&gt;
&lt;span class="normal"&gt;203&lt;/span&gt;
&lt;span class="normal"&gt;204&lt;/span&gt;
&lt;span class="normal"&gt;205&lt;/span&gt;
&lt;span class="normal"&gt;206&lt;/span&gt;
&lt;span class="normal"&gt;207&lt;/span&gt;
&lt;span class="normal"&gt;208&lt;/span&gt;
&lt;span class="normal"&gt;209&lt;/span&gt;
&lt;span class="normal"&gt;210&lt;/span&gt;
&lt;span class="normal"&gt;211&lt;/span&gt;
&lt;span class="normal"&gt;212&lt;/span&gt;
&lt;span class="normal"&gt;213&lt;/span&gt;
&lt;span class="normal"&gt;214&lt;/span&gt;
&lt;span class="normal"&gt;215&lt;/span&gt;
&lt;span class="normal"&gt;216&lt;/span&gt;
&lt;span class="normal"&gt;217&lt;/span&gt;
&lt;span class="normal"&gt;218&lt;/span&gt;
&lt;span class="normal"&gt;219&lt;/span&gt;
&lt;span class="normal"&gt;220&lt;/span&gt;
&lt;span class="normal"&gt;221&lt;/span&gt;
&lt;span class="normal"&gt;222&lt;/span&gt;
&lt;span class="normal"&gt;223&lt;/span&gt;
&lt;span class="normal"&gt;224&lt;/span&gt;
&lt;span class="normal"&gt;225&lt;/span&gt;
&lt;span class="normal"&gt;226&lt;/span&gt;
&lt;span class="normal"&gt;227&lt;/span&gt;
&lt;span class="normal"&gt;228&lt;/span&gt;
&lt;span class="normal"&gt;229&lt;/span&gt;
&lt;span class="normal"&gt;230&lt;/span&gt;
&lt;span class="normal"&gt;231&lt;/span&gt;
&lt;span class="normal"&gt;232&lt;/span&gt;
&lt;span class="normal"&gt;233&lt;/span&gt;
&lt;span class="normal"&gt;234&lt;/span&gt;
&lt;span class="normal"&gt;235&lt;/span&gt;
&lt;span class="normal"&gt;236&lt;/span&gt;
&lt;span class="normal"&gt;237&lt;/span&gt;
&lt;span class="normal"&gt;238&lt;/span&gt;
&lt;span class="normal"&gt;239&lt;/span&gt;
&lt;span class="normal"&gt;240&lt;/span&gt;
&lt;span class="normal"&gt;241&lt;/span&gt;
&lt;span class="normal"&gt;242&lt;/span&gt;
&lt;span class="normal"&gt;243&lt;/span&gt;
&lt;span class="normal"&gt;244&lt;/span&gt;
&lt;span class="normal"&gt;245&lt;/span&gt;
&lt;span class="normal"&gt;246&lt;/span&gt;
&lt;span class="normal"&gt;247&lt;/span&gt;
&lt;span class="normal"&gt;248&lt;/span&gt;
&lt;span class="normal"&gt;249&lt;/span&gt;
&lt;span class="normal"&gt;250&lt;/span&gt;
&lt;span class="normal"&gt;251&lt;/span&gt;
&lt;span class="normal"&gt;252&lt;/span&gt;
&lt;span class="normal"&gt;253&lt;/span&gt;
&lt;span class="normal"&gt;254&lt;/span&gt;
&lt;span class="normal"&gt;255&lt;/span&gt;
&lt;span class="normal"&gt;256&lt;/span&gt;
&lt;span class="normal"&gt;257&lt;/span&gt;
&lt;span class="normal"&gt;258&lt;/span&gt;
&lt;span class="normal"&gt;259&lt;/span&gt;
&lt;span class="normal"&gt;260&lt;/span&gt;
&lt;span class="normal"&gt;261&lt;/span&gt;
&lt;span class="normal"&gt;262&lt;/span&gt;
&lt;span class="normal"&gt;263&lt;/span&gt;
&lt;span class="normal"&gt;264&lt;/span&gt;
&lt;span class="normal"&gt;265&lt;/span&gt;
&lt;span class="normal"&gt;266&lt;/span&gt;
&lt;span class="normal"&gt;267&lt;/span&gt;
&lt;span class="normal"&gt;268&lt;/span&gt;
&lt;span class="normal"&gt;269&lt;/span&gt;
&lt;span class="normal"&gt;270&lt;/span&gt;
&lt;span class="normal"&gt;271&lt;/span&gt;
&lt;span class="normal"&gt;272&lt;/span&gt;
&lt;span class="normal"&gt;273&lt;/span&gt;
&lt;span class="normal"&gt;274&lt;/span&gt;
&lt;span class="normal"&gt;275&lt;/span&gt;
&lt;span class="normal"&gt;276&lt;/span&gt;
&lt;span class="normal"&gt;277&lt;/span&gt;
&lt;span class="normal"&gt;278&lt;/span&gt;
&lt;span class="normal"&gt;279&lt;/span&gt;
&lt;span class="normal"&gt;280&lt;/span&gt;
&lt;span class="normal"&gt;281&lt;/span&gt;
&lt;span class="normal"&gt;282&lt;/span&gt;
&lt;span class="normal"&gt;283&lt;/span&gt;
&lt;span class="normal"&gt;284&lt;/span&gt;
&lt;span class="normal"&gt;285&lt;/span&gt;
&lt;span class="normal"&gt;286&lt;/span&gt;
&lt;span class="normal"&gt;287&lt;/span&gt;
&lt;span class="normal"&gt;288&lt;/span&gt;
&lt;span class="normal"&gt;289&lt;/span&gt;
&lt;span class="normal"&gt;290&lt;/span&gt;
&lt;span class="normal"&gt;291&lt;/span&gt;
&lt;span class="normal"&gt;292&lt;/span&gt;
&lt;span class="normal"&gt;293&lt;/span&gt;
&lt;span class="normal"&gt;294&lt;/span&gt;
&lt;span class="normal"&gt;295&lt;/span&gt;
&lt;span class="normal"&gt;296&lt;/span&gt;
&lt;span class="normal"&gt;297&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;include&lt;span class="w"&gt; &lt;/span&gt;~/.config/sway/config.local

&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Mod4

xwayland&lt;span class="w"&gt; &lt;/span&gt;enabled

default_border&lt;span class="w"&gt; &lt;/span&gt;normal
default_floating_border&lt;span class="w"&gt; &lt;/span&gt;normal
&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$opacity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.9

&lt;span class="c1"&gt;#################&lt;/span&gt;
&lt;span class="c1"&gt;#               #&lt;/span&gt;
&lt;span class="c1"&gt;# windows rules #&lt;/span&gt;
&lt;span class="c1"&gt;#               #&lt;/span&gt;
&lt;span class="c1"&gt;#################&lt;/span&gt;

for_window&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;.*&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;border&lt;span class="w"&gt; &lt;/span&gt;pixel&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;
for_window&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;border&lt;span class="w"&gt; &lt;/span&gt;pixel&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;

for_window&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;.*&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;opacity&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$opacity&lt;/span&gt;
for_window&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;app_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;.*&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;opacity&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$opacity&lt;/span&gt;
for_window&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;floating&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;.*&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;opacity&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;

for_window&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;app_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;firefox&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;^Incrustation vidéo&lt;/span&gt;$&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;floating&lt;span class="w"&gt; &lt;/span&gt;enable,&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;position&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;477&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;450&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;sticky&lt;span class="w"&gt; &lt;/span&gt;enable,&lt;span class="w"&gt; &lt;/span&gt;opacity&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
for_window&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;app_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;emoji-picker&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;floating&lt;span class="w"&gt; &lt;/span&gt;enable,&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;position&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;477&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;450&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;sticky&lt;span class="w"&gt; &lt;/span&gt;enable,&lt;span class="w"&gt; &lt;/span&gt;opacity&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
for_window&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Steam&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;^Friends List&lt;/span&gt;$&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;floating&lt;span class="w"&gt; &lt;/span&gt;enable,&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;position&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1456&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;43&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;sticky&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;enable&lt;/span&gt;
for_window&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Steam&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;^Steam - News.*&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;floating&lt;span class="w"&gt; &lt;/span&gt;enable,&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;position&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1456&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;43&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;sticky&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;enable&lt;/span&gt;

&lt;span class="c1"&gt;#################&lt;/span&gt;
&lt;span class="c1"&gt;#               #&lt;/span&gt;
&lt;span class="c1"&gt;#      Gaps     #&lt;/span&gt;
&lt;span class="c1"&gt;#               #&lt;/span&gt;
&lt;span class="c1"&gt;#################&lt;/span&gt;
gaps&lt;span class="w"&gt; &lt;/span&gt;inner&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;
gaps&lt;span class="w"&gt; &lt;/span&gt;outer&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;


&lt;span class="c1"&gt;##################&lt;/span&gt;
&lt;span class="c1"&gt;#                #&lt;/span&gt;
&lt;span class="c1"&gt;# windows colors #&lt;/span&gt;
&lt;span class="c1"&gt;#                #&lt;/span&gt;
&lt;span class="c1"&gt;##################&lt;/span&gt;

client.focused&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;#3a8b23 #3a8b23 #000000 #3a8b23   #3a8b23&lt;/span&gt;
client.focused_inactive&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;#94b78a #94b78a #000000 #94b78a   #94b78a&lt;/span&gt;
client.unfocused&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;#505050 #505050 #000000 #ffffff   #505050&lt;/span&gt;
client.urgent&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;#ffffff #ffffff #000000 #ffffff   #ffffff&lt;/span&gt;
client.placeholder&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;#505050 #505050 #000000 #505050   #505050&lt;/span&gt;

&lt;span class="c1"&gt;###############&lt;/span&gt;
&lt;span class="c1"&gt;#             #&lt;/span&gt;
&lt;span class="c1"&gt;#  Wallpaper  #&lt;/span&gt;
&lt;span class="c1"&gt;#             #&lt;/span&gt;
&lt;span class="c1"&gt;###############&lt;/span&gt;

&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$wallpapers_path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;/.config/wallpapers
output&lt;span class="w"&gt; &lt;/span&gt;*&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;bg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;find&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$wallpapers_path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-type&lt;span class="w"&gt; &lt;/span&gt;f&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;shuf&lt;span class="w"&gt; &lt;/span&gt;-n&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;fill

&lt;span class="c1"&gt;##############&lt;/span&gt;
&lt;span class="c1"&gt;#            #&lt;/span&gt;
&lt;span class="c1"&gt;# autostart  #&lt;/span&gt;
&lt;span class="c1"&gt;#            #&lt;/span&gt;
&lt;span class="c1"&gt;##############&lt;/span&gt;

&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mako
&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;autotiling
&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--no-startup-id&lt;span class="w"&gt; &lt;/span&gt;xsettingsd&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;
&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/opt/sway-alttab/target/release/sway-alttab
&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;alacritty

&lt;span class="c1"&gt;#########################&lt;/span&gt;
&lt;span class="c1"&gt;#                       #&lt;/span&gt;
&lt;span class="c1"&gt;#  Let&amp;#39;s play musique   #&lt;/span&gt;
&lt;span class="c1"&gt;#                       #&lt;/span&gt;
&lt;span class="c1"&gt;#########################&lt;/span&gt;

&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mount.sshfs&lt;span class="w"&gt; &lt;/span&gt;0w.tf:/data/Downloads/Musique&lt;span class="w"&gt; &lt;/span&gt;~/Musique
&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;swayidle&lt;span class="w"&gt; &lt;/span&gt;-w&lt;span class="w"&gt; &lt;/span&gt;timeout&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;360&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;~/.config/custom_scripts/swayloack.sh&amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mpd&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mpc&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mpc&lt;span class="w"&gt; &lt;/span&gt;random&lt;span class="w"&gt; &lt;/span&gt;on

&lt;span class="c1"&gt;#####################&lt;/span&gt;
&lt;span class="c1"&gt;#                   #&lt;/span&gt;
&lt;span class="c1"&gt;#  Keyboard config  #&lt;/span&gt;
&lt;span class="c1"&gt;#                   #&lt;/span&gt;
&lt;span class="c1"&gt;#####################&lt;/span&gt;

input&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;type:keyboard&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;xkb_layout&lt;span class="w"&gt; &lt;/span&gt;fr
&lt;span class="w"&gt;    &lt;/span&gt;xkb_variant&lt;span class="w"&gt; &lt;/span&gt;,nodeadkeys
&lt;span class="w"&gt;    &lt;/span&gt;xkb_numlock&lt;span class="w"&gt; &lt;/span&gt;enabled
&lt;span class="o"&gt;}&lt;/span&gt;
input&lt;span class="w"&gt; &lt;/span&gt;*&lt;span class="w"&gt; &lt;/span&gt;xkb_model&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;logitech_g15&amp;quot;&lt;/span&gt;

&lt;span class="c1"&gt;################&lt;/span&gt;
&lt;span class="c1"&gt;#              #&lt;/span&gt;
&lt;span class="c1"&gt;#  Workspaces  #&lt;/span&gt;
&lt;span class="c1"&gt;#              #&lt;/span&gt;
&lt;span class="c1"&gt;################&lt;/span&gt;

&lt;span class="c1"&gt;# Define names for default workspaces for which we configure key bindings later on.&lt;/span&gt;
&lt;span class="c1"&gt;# We use variables to avoid repeating the names in multiple places.&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$ws1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$ws2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;2&amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$ws3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;3&amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$ws4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;4&amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$ws5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;5&amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$ws6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;6&amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$ws7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;7&amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$ws8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;8&amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$ws9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;9&amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$ws10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;10&amp;quot;&lt;/span&gt;

&lt;span class="c1"&gt;#######################&lt;/span&gt;
&lt;span class="c1"&gt;#                     #&lt;/span&gt;
&lt;span class="c1"&gt;#  keyboard shortcut  #&lt;/span&gt;
&lt;span class="c1"&gt;#                     #&lt;/span&gt;
&lt;span class="c1"&gt;#######################&lt;/span&gt;


&lt;span class="c1"&gt;# Open generic soft with a key:&lt;/span&gt;

mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;open&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;emoji-picker&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;f&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;firefox&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;m&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;thunderbird&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;n&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;alacritty&lt;span class="w"&gt; &lt;/span&gt;--config-file&lt;span class="w"&gt; &lt;/span&gt;~/.config/alacritty/sd-network.yml&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;t&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;alacritty&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;


&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# return to default mode&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;Return&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;Escape&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+o&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;open&amp;quot;&lt;/span&gt;

&lt;span class="c1"&gt;# Resizing containers:&lt;/span&gt;

mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;resize&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;Left&lt;span class="w"&gt; &lt;/span&gt;resize&lt;span class="w"&gt; &lt;/span&gt;shrink&lt;span class="w"&gt; &lt;/span&gt;width&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;px&lt;span class="w"&gt; &lt;/span&gt;or&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ppt
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;Up&lt;span class="w"&gt; &lt;/span&gt;resize&lt;span class="w"&gt; &lt;/span&gt;grow&lt;span class="w"&gt; &lt;/span&gt;height&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;px&lt;span class="w"&gt; &lt;/span&gt;or&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ppt
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;Down&lt;span class="w"&gt; &lt;/span&gt;resize&lt;span class="w"&gt; &lt;/span&gt;shrink&lt;span class="w"&gt; &lt;/span&gt;height&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;px&lt;span class="w"&gt; &lt;/span&gt;or&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ppt
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;Right&lt;span class="w"&gt; &lt;/span&gt;resize&lt;span class="w"&gt; &lt;/span&gt;grow&lt;span class="w"&gt; &lt;/span&gt;width&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;px&lt;span class="w"&gt; &lt;/span&gt;or&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ppt

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# return to default mode&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;Return&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;bindsym&lt;span class="w"&gt; &lt;/span&gt;Escape&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;default&amp;quot;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+r&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;resize&amp;quot;&lt;/span&gt;

bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_Subtract&lt;span class="w"&gt; &lt;/span&gt;resize&lt;span class="w"&gt; &lt;/span&gt;shrink&lt;span class="w"&gt; &lt;/span&gt;width&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;px&lt;span class="w"&gt; &lt;/span&gt;or&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ppt&lt;span class="p"&gt;;&lt;/span&gt;resize&lt;span class="w"&gt; &lt;/span&gt;shrink&lt;span class="w"&gt; &lt;/span&gt;height&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;px&lt;span class="w"&gt; &lt;/span&gt;or&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ppt
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_Add&lt;span class="w"&gt; &lt;/span&gt;resize&lt;span class="w"&gt; &lt;/span&gt;grow&lt;span class="w"&gt; &lt;/span&gt;width&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;px&lt;span class="w"&gt; &lt;/span&gt;or&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ppt&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;resize&lt;span class="w"&gt; &lt;/span&gt;grow&lt;span class="w"&gt; &lt;/span&gt;height&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;px&lt;span class="w"&gt; &lt;/span&gt;or&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ppt

&lt;span class="c1"&gt;# Exec cmd like gnome/mate&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;Alt+F2&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sgtk-dmenu&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;-t&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-w&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;700&lt;/span&gt;

&lt;span class="c1"&gt;# Use Mouse+$mod to drag floating windows to their wanted position&lt;/span&gt;
floating_modifier&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;

&lt;span class="c1"&gt;# start a terminal&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+t&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;alacritty

&lt;span class="c1"&gt;# kill focused window&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+q&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;kill&lt;/span&gt;

&lt;span class="c1"&gt;# screenshot&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;Print&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;slurp&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;grim&lt;span class="w"&gt; &lt;/span&gt;-g&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;xdg-user-dir&lt;span class="w"&gt; &lt;/span&gt;PICTURES&lt;span class="k"&gt;)&lt;/span&gt;/&lt;span class="k"&gt;$(&lt;/span&gt;date&lt;span class="w"&gt; &lt;/span&gt;+&lt;span class="s1"&gt;&amp;#39;screenshot_%Y-%m-%d-%H%M%S.png&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# change focus&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Left&lt;span class="w"&gt; &lt;/span&gt;focus&lt;span class="w"&gt; &lt;/span&gt;left
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Down&lt;span class="w"&gt; &lt;/span&gt;focus&lt;span class="w"&gt; &lt;/span&gt;down
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Up&lt;span class="w"&gt; &lt;/span&gt;focus&lt;span class="w"&gt; &lt;/span&gt;up
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Right&lt;span class="w"&gt; &lt;/span&gt;focus&lt;span class="w"&gt; &lt;/span&gt;right

&lt;span class="c1"&gt;# Move windows&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+Left&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;left
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+Down&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;down
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+Up&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;up
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+Right&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;right

&lt;span class="c1"&gt;# Enter fullscreen mode for the focused container&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+f&lt;span class="w"&gt; &lt;/span&gt;fullscreen&lt;span class="w"&gt; &lt;/span&gt;toggle

&lt;span class="c1"&gt;# change container layout (stacked, tabbed, toggle split)&lt;/span&gt;
&lt;span class="c1"&gt;#bindsym $mod+s layout stacking&lt;/span&gt;
&lt;span class="c1"&gt;#bindsym $mod+w layout tabbed&lt;/span&gt;
&lt;span class="c1"&gt;#bindsym $mod+e layout toggle split&lt;/span&gt;

&lt;span class="c1"&gt;# toggle tiling / floating&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+space&lt;span class="w"&gt; &lt;/span&gt;floating&lt;span class="w"&gt; &lt;/span&gt;toggle

&lt;span class="c1"&gt;# focus the parent container&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+a&lt;span class="w"&gt; &lt;/span&gt;focus&lt;span class="w"&gt; &lt;/span&gt;parent

&lt;span class="c1"&gt;# focus the child container&lt;/span&gt;
&lt;span class="c1"&gt;#bindsym $mod+d focus child&lt;/span&gt;


&lt;span class="c1"&gt;# switch to workspace&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_1&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_2&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_3&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_4&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_5&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_6&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_7&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_8&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_9&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+KP_0&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;

&lt;span class="c1"&gt;# switch to workspace&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+ampersand&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+eacute&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+quotedbl&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+apostrophe&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+parenleft&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+minus&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+egrave&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+underscore&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+ccedilla&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+agrave&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;

&lt;span class="c1"&gt;# move focused container to workspace&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+ampersand&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+eacute&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+quotedbl&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+apostrophe&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+parenleft&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+minus&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+egrave&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+underscore&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+ccedilla&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+agrave&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+KP_1&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+KP_2&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+KP_3&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+KP_4&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+KP_5&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+KP_6&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+KP_7&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+KP_8&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+KP_9&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+KP_0&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;container&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;workspace&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;

&lt;span class="c1"&gt;# volume control&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;XF86AudioRaiseVolume&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;amixer set Master 5%+ unmute&amp;quot;&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;XF86AudioLowerVolume&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;amixer set Master 5%- unmute&amp;quot;&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;XF86AudioMute&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;amixer -q sset Master,0 toggle&amp;quot;&lt;/span&gt;

&lt;span class="c1"&gt;# Brightness control&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;XF86MonBrightnessDown&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;brightnessctl&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;15&lt;/span&gt;%-
bindsym&lt;span class="w"&gt; &lt;/span&gt;XF86MonBrightnessUp&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;brightnessctl&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;+15%

&lt;span class="c1"&gt;# Media player controls&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;--locked&lt;span class="w"&gt; &lt;/span&gt;XF86AudioPlay&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mpc&lt;span class="w"&gt; &lt;/span&gt;toggle
bindsym&lt;span class="w"&gt; &lt;/span&gt;--locked&lt;span class="w"&gt; &lt;/span&gt;XF86AudioPause&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mpc&lt;span class="w"&gt; &lt;/span&gt;toggle
bindsym&lt;span class="w"&gt; &lt;/span&gt;--locked&lt;span class="w"&gt; &lt;/span&gt;XF86AudioNext&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mpc&lt;span class="w"&gt; &lt;/span&gt;next
bindsym&lt;span class="w"&gt; &lt;/span&gt;--locked&lt;span class="w"&gt; &lt;/span&gt;XF86AudioPrev&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mpc&lt;span class="w"&gt; &lt;/span&gt;prev
bindsym&lt;span class="w"&gt; &lt;/span&gt;--locked&lt;span class="w"&gt; &lt;/span&gt;XF86AudioStop&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mpc&lt;span class="w"&gt; &lt;/span&gt;stop

&lt;span class="c1"&gt;# Reload the configuration file&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$mod&lt;/span&gt;+Shift+c&lt;span class="w"&gt; &lt;/span&gt;reload

&lt;span class="c1"&gt;################&lt;/span&gt;
&lt;span class="c1"&gt;#              #&lt;/span&gt;
&lt;span class="c1"&gt;#  Font style  #&lt;/span&gt;
&lt;span class="c1"&gt;#              #&lt;/span&gt;
&lt;span class="c1"&gt;################&lt;/span&gt;

&lt;span class="c1"&gt;# Font for window titles. Will also be used by the bar unless a different font&lt;/span&gt;
&lt;span class="c1"&gt;# is used in the bar {} block below.&lt;/span&gt;

&lt;span class="c1"&gt;# This font is widely installed, provides lots of unicode glyphs, right-to-left&lt;/span&gt;
&lt;span class="c1"&gt;# text rendering and scalability on retina/hidpi displays (thanks to pango).&lt;/span&gt;
font&lt;span class="w"&gt; &lt;/span&gt;pango:Hurmit&lt;span class="w"&gt; &lt;/span&gt;NF&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;11&lt;/span&gt;

&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$gnome&lt;/span&gt;-schema&lt;span class="w"&gt; &lt;/span&gt;org.gnome.desktop.interface
exec_always&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;gsettings&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$gnome&lt;/span&gt;-schema&lt;span class="w"&gt; &lt;/span&gt;gtk-theme&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Material-Black-Lime-3.36&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;gsettings&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$gnome&lt;/span&gt;-schema&lt;span class="w"&gt; &lt;/span&gt;icon-theme&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Material-Black-Lime-Numix&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;gsettings&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$gnome&lt;/span&gt;-schema&lt;span class="w"&gt; &lt;/span&gt;font-name&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Hurmit NF 11&amp;#39;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;


&lt;span class="c1"&gt;############&lt;/span&gt;
&lt;span class="c1"&gt;#          #&lt;/span&gt;
&lt;span class="c1"&gt;#  Waybar  #&lt;/span&gt;
&lt;span class="c1"&gt;#          #&lt;/span&gt;
&lt;span class="c1"&gt;############&lt;/span&gt;

bar&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;swaybar_command&lt;span class="w"&gt; &lt;/span&gt;waybar
&lt;span class="o"&gt;}&lt;/span&gt;
include&lt;span class="w"&gt; &lt;/span&gt;~/.config/sway/config.local
&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="tools"&gt;
&lt;h2&gt;Tools&lt;/h2&gt;
&lt;p&gt;J'utilise plein de petit &amp;quot;sous-programme&amp;quot; pour mon bureau, voici les plus utiles au quotidien.&lt;/p&gt;
&lt;div class="section" id="waybar-la-barre-a-tout-faire"&gt;
&lt;h3&gt;Waybar : la barre à tout faire&lt;/h3&gt;
&lt;p&gt;Pour mon bureau, j'utilise &lt;tt class="docutils literal"&gt;Waybar&lt;/tt&gt;. Il est comme Sway, il se configure très simplement par deux fichiers.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;~/.config/waybar/config&lt;/li&gt;
&lt;li&gt;~/.config/waybar/style.css&lt;/li&gt;
&lt;/ul&gt;
&lt;a class="reference external image-reference" href="https://blog.0w.tf/images/sway/waybar.png"&gt;&lt;img alt="waybar" src="https://blog.0w.tf/images/sway/waybar.png" /&gt;&lt;/a&gt;
&lt;p&gt;L'un permet de configurer les différents éléments de la barre et l'autre uniquement le style.&lt;/p&gt;
&lt;p&gt;J'écrirai un autre article à ce sujet, il y a pas mal de choses sympa à dire.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="gtk3-menu-c-est-le-pied"&gt;
&lt;h3&gt;gtk3-menu, c'est le pied!&lt;/h3&gt;
&lt;p&gt;gtk3-menu est juste un menu à la Gnome qui me permet d'ouvrir simplement quelques programmes dont je ne me souviens plus du nom via terminal. Il me permet également d'ouvrir rapidement un dossier présent dans mon $HOME.&lt;/p&gt;
&lt;a class="reference external image-reference" href="https://blog.0w.tf/images/sway/gtk3-folder.png"&gt;&lt;img alt="gtk3 folder menu" src="https://blog.0w.tf/images/sway/gtk3-folder.png" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class="section" id="l-ecran-de-verrouillage-swaylock"&gt;
&lt;h3&gt;L'écran de verrouillage : Swaylock&lt;/h3&gt;
&lt;p&gt;swaylock permet de verrouiller mon bureau afin que mes collègues ne s'en prennent pas à ma boite mail par exemple (merci les viennoiseries le lendemain ...).&lt;/p&gt;
&lt;p&gt;Je vous conseille même l'excellent swaylock-effect qui permet de faire un screenshot, de le flouter et de l'avoir en fond d'écran.&lt;/p&gt;
&lt;a class="reference external image-reference" href="https://blog.0w.tf/images/sway/swaylock.png"&gt;&lt;img alt="swaylock" src="https://blog.0w.tf/images/sway/swaylock.png" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class="section" id="capture-ecran"&gt;
&lt;h3&gt;Capture écran&lt;/h3&gt;
&lt;p&gt;Pour la capture d'écran, j'utilise le combo slurp + grim.&lt;/p&gt;
&lt;p&gt;Slurp permet de sélectionner une partie du bureau, et grim l'enregistre.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# screenshot&lt;/span&gt;
bindsym&lt;span class="w"&gt; &lt;/span&gt;Print&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;slurp&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;grim&lt;span class="w"&gt; &lt;/span&gt;-g&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;xdg-user-dir&lt;span class="w"&gt; &lt;/span&gt;PICTURES&lt;span class="k"&gt;)&lt;/span&gt;/&lt;span class="k"&gt;$(&lt;/span&gt;date&lt;span class="w"&gt; &lt;/span&gt;+&lt;span class="s1"&gt;&amp;#39;screenshot_%Y-%m-%d-%H%M%S.png&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Mes capture d'écran se retrouvent automatiquement dans mon dossier Images avec date + heure dans le nom du fichier.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="mpd-mpc"&gt;
&lt;h3&gt;MPD/MPC&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;MPD&lt;/strong&gt; (Music Player Daemon) est, comme son nom l'indique un lecteur de musique qui tourne en fond.&lt;/p&gt;
&lt;p&gt;Il permet du coup d'être pilotable par de nombreux éléments externes comme &lt;strong&gt;MPC&lt;/strong&gt; (Music Player Client).&lt;/p&gt;
&lt;p&gt;Je l'utilise d'ailleurs directement dans ma waybar.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="khal-vdirsyncer"&gt;
&lt;h3&gt;khal/vdirsyncer&lt;/h3&gt;
&lt;p&gt;Autre outil dans ma barre, le duo vdirsyncer + khal.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;vdirsyncer permet d'interroger un serveur DavCal et d'enregistrer une copie en &lt;tt class="docutils literal"&gt;.ics&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;khal permet lui de lire ces fichier ics directement en ligne de commande. C'est lui qui est directement interrogé depuis waybar.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><category term="divers"></category><category term="divers"></category><category term="desktop"></category><category term="wayland"></category></entry><entry><title>Introduction</title><link href="https://blog.0w.tf/introduction.html" rel="alternate"></link><published>2020-10-25T15:20:00+01:00</published><updated>2020-10-25T15:20:00+01:00</updated><author><name>Milka64</name></author><id>tag:blog.0w.tf,2020-10-25:/introduction.html</id><summary type="html">&lt;p class="first last"&gt;Présentation du blog: qui suis-je? où vais-je? dans quelle étagère?&lt;/p&gt;
</summary><content type="html">&lt;div class="section" id="moi"&gt;
&lt;h2&gt;Moi&lt;/h2&gt;
&lt;p&gt;Je suis quelqu'un de curieux, de passionné, autodidacte et amoureux de l'opensource. J'aime me simplifier la vie en automatisant tout ce qui peut l'être.&lt;/p&gt;
&lt;p&gt;Aussi longtemps que je me souvienne, j'ai toujours été attiré par la tech (au sens large). J'ai fait mes premiers pas sur un &lt;a class="reference external" href="https://fr.wikipedia.org/wiki/Amstrad_CPC_464"&gt;Amstrad CPC464&lt;/a&gt;. J'y lançais des jeux stockés sur une cassette audio, on pouvait les dupliquer rien qu'avec une chaine hi-fi. La belle époque ...&lt;/p&gt;
&lt;p&gt;J'ai gardé cette bête une bonne dizaine d'années et j'ai migré sur un Pentium II, sous windows 98 SE ! C'est à ce moment la ou j'ai commencé à m'interresser aux composants interne, à l'évolution d'un PC et à bidouiller mon OS.&lt;/p&gt;
&lt;p&gt;Puis, au fil des années, j'ai peu à peu entendu parler de l'open source et de Linux.&lt;/p&gt;
&lt;p&gt;J'ai dans un premier temps testé un liveCD qui était conseillé par un site de news (genre Clubic/NextInpact). Et, petit à petit, j'ai appris à partitionner mon disque, gérer le multiboot (&lt;a class="reference external" href="https://fr.wikipedia.org/wiki/Lilo"&gt;Lilo&lt;/a&gt; a l'époque), les différents bureaux disponibles (pouvoir choisir son bureau, je ne comprends pas pourquoi Microsoft ne s'y met toujours pas ...), etc ...&lt;/p&gt;
&lt;p&gt;J'ai donc débarqué dans le monde du travail avec une première expérience perso d'un OS alternatif et j'ai très vite installé un linux sur HDD externe. Ça a été très formateur de devoir trouver des alternatives à différents logiciels proprietaires et métiers. J'y ai également découvert mes premières lignes de code et j'ai tout de suite vu l'intérêt de pouvoir scripter tout un tas de choses.&lt;/p&gt;
&lt;p&gt;J'ai, quelques temps après ma première embauche, intégré le LUG local et découvert tout type de profil (que je ne pensais pas découvrir dans une association de ce genre).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="pourquoi"&gt;
&lt;h2&gt;Pourquoi&lt;/h2&gt;
&lt;p&gt;Alors pourquoi un blog alors que ce n'est plus du tout &amp;quot;à la mode&amp;quot;? Pourquoi pas une chaine youtube, twitch ou d'autres plateformes plus récentes? Tout simplement parce que je trouve ce format plus simple a tenir à jour, un éditeur de texte suffit et je peux même ecrire depuis mon smartphone si ça me chante.&lt;/p&gt;
&lt;p&gt;C'est aussi un très bon exercice de rédaction. Je suis souvent ammené à écrire de la documentation, des compte rendu, etc ... Je me suis dis qu'un blog pouvais m'aider à progresser.&lt;/p&gt;
&lt;p&gt;J'ai pris le parti de l'écrire en français. Non pas par chauvisme ou autre, mais je trouve que les débutants que je côtoie ont du mal à trouver des infos dans la jungle des articles anglophones (ce qui n'exclue pas que je traduise certains articles).&lt;/p&gt;
&lt;p&gt;Et enfin la dernière raision , c'est que j'ai toujours aimé pouvoir partager mon expérience, ce qui a fonctionné et ce qui a raté. Pouvoir échanger, sur les avis, les optionions.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="comment"&gt;
&lt;h2&gt;Comment&lt;/h2&gt;
&lt;p&gt;Ce blog utilise principalement deux outils :&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Git : pour le versionning des articles&lt;/li&gt;
&lt;li&gt;Pelican : pour le rendu html&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lorsque je push dans git, le site est reconstrui automatiquement avec les dernirères modiications.&lt;/p&gt;
&lt;p&gt;C'est simple, efficace, pas besoin de se casser la tete avec une sauvegarde d'une quelconque base de données, les articles sont sur de simple fichier texte.&lt;/p&gt;
&lt;p&gt;Le tout est auto-heberger sur un serveur d'occasion que j'ai sauvé de la destruction.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="quoi"&gt;
&lt;h2&gt;Quoi&lt;/h2&gt;
&lt;p&gt;Alors, de quoi vais-je bien pouvoir parler ici ? Il y a bien des thèmes qui viennent en tête et voici une liste non-exhaustive :&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;réseau&lt;/li&gt;
&lt;li&gt;un peu de code (&amp;amp; pas de cul, on n'est pas sur sam&amp;amp;max)&lt;/li&gt;
&lt;li&gt;administration système&lt;/li&gt;
&lt;li&gt;sécurité&lt;/li&gt;
&lt;li&gt;de l'électronique/domotique&lt;/li&gt;
&lt;li&gt;et j'en oublie certainement plein d'autres&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><category term="divers"></category><category term="divers"></category></entry></feed>