<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Dot on Haseeb Majid</title>
    <link>https://haseebmajid.dev/tags/dot/</link>
    <description>Recent content in Dot on Haseeb Majid</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Tue, 01 Nov 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://haseebmajid.dev/tags/dot/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>How to Manage your Dotfiles with DotBot across Devices</title>
      <link>https://haseebmajid.dev/posts/2022-11-01-how-to-manage-dotfiles-with-dotbot-across-devices/</link>
      <pubDate>Tue, 01 Nov 2022 00:00:00 +0000</pubDate>
      
      <guid>https://haseebmajid.dev/posts/2022-11-01-how-to-manage-dotfiles-with-dotbot-across-devices/</guid>
      <description>&lt;details
  class=&#34;notice warning&#34;
  open=&#34;true&#34;
&gt;
    &lt;summary class=&#34;notice-title&#34;&gt;Previous article&lt;/summary&gt;
  
  This article assumes you are familiar with dotfiles and Dobot.
If you want to know more about Dotbot &lt;a href=&#34;https://haseebmajid.dev/posts/2022-10-15-how-to-manage-your-dotfiles-with-dotbot&#34;&gt;click here&lt;/a&gt;
&lt;/details&gt;

&lt;p&gt;&lt;img
        loading=&#34;lazy&#34;
        src=&#34;https://haseebmajid.dev/posts/2022-11-01-how-to-manage-dotfiles-with-dotbot-across-devices/images/meme.png&#34;
        type=&#34;&#34;
        alt=&#34;Dotfiles backup meme&#34;
        
      /&gt;
If you are like me you have devices, such as personal desktop and a work laptop. These devices share some dotfiles but also have specific program and applications.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Personal Desktop: Linux&lt;/li&gt;
&lt;li&gt;Work Laptop: Windows (WSL)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On Linux I use alacritty and in Windows I use Windows terminal I could copy all my dotfiles over and not worry
about which programs exist on which systems.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<details
  class="notice warning"
  open="true"
>
    <summary class="notice-title">Previous article</summary>
  
  This article assumes you are familiar with dotfiles and Dobot.
If you want to know more about Dotbot <a href="/posts/2022-10-15-how-to-manage-your-dotfiles-with-dotbot">click here</a>
</details>

<p><img
        loading="lazy"
        src="/posts/2022-11-01-how-to-manage-dotfiles-with-dotbot-across-devices/images/meme.png"
        type=""
        alt="Dotfiles backup meme"
        
      />
If you are like me you have devices, such as personal desktop and a work laptop. These devices share some dotfiles but also have specific program and applications.</p>
<p>For example:</p>
<ul>
<li>Personal Desktop: Linux</li>
<li>Work Laptop: Windows (WSL)</li>
</ul>
<p>On Linux I use alacritty and in Windows I use Windows terminal I could copy all my dotfiles over and not worry
about which programs exist on which systems.</p>
<p>If we are using dotbot to manage our dotfiles, we can use dotbot profiles. Profiles allow us to pick which dotfiles we want to install.
We could have a <code>windows</code> profile or a <code>linux</code> profile. Then specify different types of dotfiles in each of those profile files.</p>
<h2 id="current-setup">Current Setup</h2>
<p>So imagine we have something like so:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">.
</span></span><span class="line"><span class="cl"><span class="p">|</span>-- bashrc
</span></span><span class="line"><span class="cl"><span class="p">|</span>-- dotbot
</span></span><span class="line"><span class="cl"><span class="p">|</span>-- install
</span></span><span class="line"><span class="cl"><span class="p">|</span>-- .gitconfig
</span></span><span class="line"><span class="cl"><span class="p">|</span>-- install.conf.yaml
</span></span><span class="line"><span class="cl">└── vscode
</span></span></code></pre></div><p>Let us take a look how we can take a &ldquo;normal&rdquo; Dotbot project into one that uses profiles.</p>
<h2 id="how-to-move-to-profiles">How to move to profiles?</h2>
<h3 id="configs">configs</h3>
<p>First we will split the <code>install.conf.yaml</code> file into smaller files, I like to create files on type.
So for example I may create a file called <code>git.yaml</code> like so:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl">- <span class="nt">link</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">~/.gitconfig</span><span class="p">:</span><span class="w"> </span><span class="l">.gitconfig</span><span class="w">
</span></span></span></code></pre></div><p>Then we need to move this file to <code>meta/configs</code>; So now our project looks something like</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">.
</span></span><span class="line"><span class="cl">├── ....
</span></span><span class="line"><span class="cl">├── bashrc
</span></span><span class="line"><span class="cl">├── .gitconfig
</span></span><span class="line"><span class="cl">├── meta
</span></span><span class="line"><span class="cl">│   ├── base.yaml
</span></span><span class="line"><span class="cl">│   └── configs
</span></span><span class="line"><span class="cl">│       └── git.yaml
</span></span><span class="line"><span class="cl">└── vscode
</span></span></code></pre></div><p>We also added a <code>base.yaml</code> file for cleaning up like a default &ldquo;job&rdquo;.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl">- <span class="nt">clean</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;~&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span>- <span class="nt">create</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="l">~/.config</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span>- <span class="nt">defaults</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">link</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">relink</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span></code></pre></div><p>The default command here applys to all commands that follow this. You can read the <a href="https://github.com/anishathalye/dotbot#directives">docs here</a>.
For a more thorough explanation of the directives.</p>
<h3 id="profiles">profiles</h3>
<p>Next we want to create our profiles for our different devices. Let&rsquo;s see we want to create a Linux one. We create a called <code>meta/profiles/linux</code>.
In the file we write all the yaml files we want dotbot to execute for this profile. So at the moment our files would look something like:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git
</span></span></code></pre></div><p>When we specify the linux profile, we will see how to do this later, it will run the all the directives in the <code>git.yaml</code> file.
In this case it will copy over the gitconfig file in the project, to the host machine.</p>
<p>Now our setup looks something this:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">.
</span></span><span class="line"><span class="cl">├── ....
</span></span><span class="line"><span class="cl">├── bashrc
</span></span><span class="line"><span class="cl">├── .gitconfig
</span></span><span class="line"><span class="cl">├── meta
</span></span><span class="line"><span class="cl">│   ├── configs
</span></span><span class="line"><span class="cl">│   │   └── git.yaml
</span></span><span class="line"><span class="cl">│   ├── base.yaml
</span></span><span class="line"><span class="cl">│   └── profiles
</span></span><span class="line"><span class="cl">│       └── linux
</span></span><span class="line"><span class="cl">└── vscode
</span></span></code></pre></div><h3 id="dotbot">dotbot</h3>
<p>We need to move the dotbot submodule to the <code>meta</code> folder. You can move your submodule by running <code>git mv dotbot meta/dotbot</code>.</p>
<h3 id="profile-script">Profile Script</h3>
<p>Finally we need to add a script that we can run to run all the directives specified in the profile. We will pass the profile as an argument.</p>
<p>Create a new file at the root of your project called <code>install-profile</code>, that looks like:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/usr/bin/env bash
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="nb">set</span> -e
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">BASE_CONFIG</span><span class="o">=</span><span class="s2">&#34;base&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">CONFIG_SUFFIX</span><span class="o">=</span><span class="s2">&#34;.yaml&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">META_DIR</span><span class="o">=</span><span class="s2">&#34;meta&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">CONFIG_DIR</span><span class="o">=</span><span class="s2">&#34;configs&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">PROFILES_DIR</span><span class="o">=</span><span class="s2">&#34;profiles&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">DOTBOT_DIR</span><span class="o">=</span><span class="s2">&#34;dotbot&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">DOTBOT_BIN</span><span class="o">=</span><span class="s2">&#34;bin/dotbot&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">BASE_DIR</span><span class="o">=</span><span class="s2">&#34;</span><span class="k">$(</span><span class="nb">cd</span> <span class="s2">&#34;</span><span class="k">$(</span>dirname <span class="s2">&#34;</span><span class="si">${</span><span class="nv">BASH_SOURCE</span><span class="p">[0]</span><span class="si">}</span><span class="s2">&#34;</span><span class="k">)</span><span class="s2">&#34;</span> <span class="o">&amp;&amp;</span> <span class="nb">pwd</span><span class="k">)</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">BASE_DIR</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">git -C <span class="s2">&#34;</span><span class="si">${</span><span class="nv">BASE_DIR</span><span class="si">}</span><span class="s2">&#34;</span> submodule sync --quiet --recursive
</span></span><span class="line"><span class="cl">git submodule update --init --recursive <span class="s2">&#34;</span><span class="si">${</span><span class="nv">BASE_DIR</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">while</span> <span class="nv">IFS</span><span class="o">=</span> <span class="nb">read</span> -r config<span class="p">;</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl">    <span class="nv">CONFIGS</span><span class="o">+=</span><span class="s2">&#34; </span><span class="si">${</span><span class="nv">config</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">done</span> &lt; <span class="s2">&#34;</span><span class="si">${</span><span class="nv">META_DIR</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">PROFILES_DIR</span><span class="si">}</span><span class="s2">/</span><span class="nv">$1</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">shift</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> config in <span class="si">${</span><span class="nv">CONFIGS</span><span class="si">}</span> <span class="si">${</span><span class="p">@</span><span class="si">}</span><span class="p">;</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> -e <span class="s2">&#34;\nConfigure </span><span class="nv">$config</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># create temporary file</span>
</span></span><span class="line"><span class="cl">    <span class="nv">configFile</span><span class="o">=</span><span class="s2">&#34;</span><span class="k">$(</span>mktemp<span class="k">)</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nv">suffix</span><span class="o">=</span><span class="s2">&#34;-sudo&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> -e <span class="s2">&#34;</span><span class="k">$(</span>&lt;<span class="s2">&#34;</span><span class="si">${</span><span class="nv">BASE_DIR</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">META_DIR</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">BASE_CONFIG</span><span class="si">}${</span><span class="nv">CONFIG_SUFFIX</span><span class="si">}</span><span class="s2">&#34;</span><span class="k">)</span><span class="s2">\n</span><span class="k">$(</span>&lt;<span class="s2">&#34;</span><span class="si">${</span><span class="nv">BASE_DIR</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">META_DIR</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">CONFIG_DIR</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">config</span><span class="p">%</span><span class="s2">&#34;</span><span class="nv">$suffix</span><span class="s2">&#34;</span><span class="si">}${</span><span class="nv">CONFIG_SUFFIX</span><span class="si">}</span><span class="s2">&#34;</span><span class="k">)</span><span class="s2">&#34;</span> &gt; <span class="s2">&#34;</span><span class="nv">$configFile</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nv">cmd</span><span class="o">=(</span><span class="s2">&#34;</span><span class="si">${</span><span class="nv">BASE_DIR</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">META_DIR</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">DOTBOT_DIR</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">DOTBOT_BIN</span><span class="si">}</span><span class="s2">&#34;</span> -d <span class="s2">&#34;</span><span class="si">${</span><span class="nv">BASE_DIR</span><span class="si">}</span><span class="s2">&#34;</span> -c <span class="s2">&#34;</span><span class="nv">$configFile</span><span class="s2">&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="o">[[</span> <span class="nv">$config</span> <span class="o">==</span> *<span class="s2">&#34;sudo&#34;</span>* <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">        <span class="nv">cmd</span><span class="o">=(</span>sudo <span class="s2">&#34;</span><span class="si">${</span><span class="nv">cmd</span><span class="p">[@]</span><span class="si">}</span><span class="s2">&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">fi</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;</span><span class="si">${</span><span class="nv">cmd</span><span class="p">[@]</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">    rm -f <span class="s2">&#34;</span><span class="nv">$configFile</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">done</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">BASE_DIR</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span></code></pre></div><p>and add <code>install-standalone</code> to the root of the project.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/usr/bin/env bash
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="nb">set</span> -e
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">BASE_CONFIG</span><span class="o">=</span><span class="s2">&#34;base&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">CONFIG_SUFFIX</span><span class="o">=</span><span class="s2">&#34;.yaml&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">META_DIR</span><span class="o">=</span><span class="s2">&#34;meta&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">CONFIG_DIR</span><span class="o">=</span><span class="s2">&#34;configs&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">PROFILES_DIR</span><span class="o">=</span><span class="s2">&#34;profiles&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">DOTBOT_DIR</span><span class="o">=</span><span class="s2">&#34;dotbot&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">DOTBOT_BIN</span><span class="o">=</span><span class="s2">&#34;bin/dotbot&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">BASE_DIR</span><span class="o">=</span><span class="s2">&#34;</span><span class="k">$(</span><span class="nb">cd</span> <span class="s2">&#34;</span><span class="k">$(</span>dirname <span class="s2">&#34;</span><span class="si">${</span><span class="nv">BASH_SOURCE</span><span class="p">[0]</span><span class="si">}</span><span class="s2">&#34;</span><span class="k">)</span><span class="s2">&#34;</span> <span class="o">&amp;&amp;</span> <span class="nb">pwd</span><span class="k">)</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">BASE_DIR</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">git submodule update --init --recursive --remote
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> config in <span class="si">${</span><span class="p">@</span><span class="si">}</span><span class="p">;</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># create temporary file</span>
</span></span><span class="line"><span class="cl">    <span class="nv">configFile</span><span class="o">=</span><span class="s2">&#34;</span><span class="k">$(</span>mktemp<span class="k">)</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nv">suffix</span><span class="o">=</span><span class="s2">&#34;-sudo&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> -e <span class="s2">&#34;</span><span class="k">$(</span>&lt;<span class="s2">&#34;</span><span class="si">${</span><span class="nv">BASE_DIR</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">META_DIR</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">BASE_CONFIG</span><span class="si">}${</span><span class="nv">CONFIG_SUFFIX</span><span class="si">}</span><span class="s2">&#34;</span><span class="k">)</span><span class="s2">\n</span><span class="k">$(</span>&lt;<span class="s2">&#34;</span><span class="si">${</span><span class="nv">BASE_DIR</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">META_DIR</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">CONFIG_DIR</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">config</span><span class="p">%</span><span class="s2">&#34;</span><span class="nv">$suffix</span><span class="s2">&#34;</span><span class="si">}${</span><span class="nv">CONFIG_SUFFIX</span><span class="si">}</span><span class="s2">&#34;</span><span class="k">)</span><span class="s2">&#34;</span> &gt; <span class="s2">&#34;</span><span class="nv">$configFile</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nv">cmd</span><span class="o">=(</span><span class="s2">&#34;</span><span class="si">${</span><span class="nv">BASE_DIR</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">META_DIR</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">DOTBOT_DIR</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">DOTBOT_BIN</span><span class="si">}</span><span class="s2">&#34;</span> -d <span class="s2">&#34;</span><span class="si">${</span><span class="nv">BASE_DIR</span><span class="si">}</span><span class="s2">&#34;</span> -c <span class="s2">&#34;</span><span class="nv">$configFile</span><span class="s2">&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="o">[[</span> <span class="nv">$config</span> <span class="o">==</span> *<span class="s2">&#34;sudo&#34;</span>* <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">        <span class="nv">cmd</span><span class="o">=(</span>sudo <span class="s2">&#34;</span><span class="si">${</span><span class="nv">cmd</span><span class="p">[@]</span><span class="si">}</span><span class="s2">&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">fi</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;</span><span class="si">${</span><span class="nv">cmd</span><span class="p">[@]</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">    rm -f <span class="s2">&#34;</span><span class="nv">$configFile</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">done</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">BASE_DIR</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span></code></pre></div><p>Finally we should have something like this:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">.
</span></span><span class="line"><span class="cl">├── ....
</span></span><span class="line"><span class="cl">├── bashrc
</span></span><span class="line"><span class="cl">├── .gitconfig
</span></span><span class="line"><span class="cl">├── install-profile
</span></span><span class="line"><span class="cl">├── install-standalone
</span></span><span class="line"><span class="cl">├── meta
</span></span><span class="line"><span class="cl">│   ├── configs
</span></span><span class="line"><span class="cl">│   │   └── git.yaml
</span></span><span class="line"><span class="cl">│   ├── dotbot
</span></span><span class="line"><span class="cl">│   ├── base.yaml
</span></span><span class="line"><span class="cl">│   └── profiles
</span></span><span class="line"><span class="cl">│       └── linux
</span></span><span class="line"><span class="cl">└── vscode
</span></span></code></pre></div><h2 id="finally">Finally!</h2>
<p>Then we can install the linux specific dotfiles by running <code>./install-profile linux</code>. Now of course this is a very simplified example.
In reality you&rsquo;d have lots of profiles and different configs in those profiles. But I wanted to show a simple example here, to
make it easier to follow.</p>
<p>Speaking of finishing 😭 &hellip;.</p>
<div style="position:relative;padding-bottom:calc(100% / 1.78)">
  <iframe
    src="https://gfycat.com/ifr/ContentScrawnyGrackle"
    frameborder="0"
    scrolling="no"
    width="100%"
    height="100%"
    style="position:absolute;top:0;left:0;"
    allowfullscreen
  ></iframe>
</div>

<h2 id="appendix">Appendix</h2>
<ul>
<li><a href="https://gitlab.com/hmajid2301/dotfiles/-/tree/6b83e990861654506e8ecc756af75cf431438a4a">My Dotfiles using profiles</a></li>
<li><a href="https://github.com/anishathalye/dotbot/wiki/Tips-and-Tricks#more-advanced-setup">Dotbot profiles tutorial</a></li>
</ul>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
