<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Vicente Figueiredo</title>
    <description>The latest articles on Forem by Vicente Figueiredo (@sawsent).</description>
    <link>https://forem.com/sawsent</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1455196%2F5913caa2-10aa-48b3-a5ec-ff8f20652099.png</url>
      <title>Forem: Vicente Figueiredo</title>
      <link>https://forem.com/sawsent</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sawsent"/>
    <language>en</language>
    <item>
      <title>I built a tiny CLI to switch between config “profiles”</title>
      <dc:creator>Vicente Figueiredo</dc:creator>
      <pubDate>Sun, 08 Feb 2026 18:46:52 +0000</pubDate>
      <link>https://forem.com/sawsent/i-built-a-tiny-cli-to-switch-between-config-profiles-4nnb</link>
      <guid>https://forem.com/sawsent/i-built-a-tiny-cli-to-switch-between-config-profiles-4nnb</guid>
      <description>&lt;p&gt;When you build tools all day, configs get weird.&lt;/p&gt;

&lt;p&gt;At least mine do.&lt;/p&gt;

&lt;p&gt;I constantly end up with multiple versions of the same config:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;my real everyday config&lt;/li&gt;
&lt;li&gt;an experimental config to try new features&lt;/li&gt;
&lt;li&gt;a broken one to reproduce bugs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;First times it happened, I just edited my config files directly, and I kept forgetting what I had changed.&lt;/p&gt;

&lt;p&gt;Then I got a little smart, so I started doing this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cp ~/.config/nelson/nelson.conf nelson.conf.backup
cp ./other-version.conf ~/.config/nelson/nelson.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Over and over.&lt;/p&gt;

&lt;p&gt;It felt… dumb.&lt;/p&gt;

&lt;p&gt;So I built a tiny CLI to fix it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meet robe
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;robe&lt;/strong&gt; is a small Rust CLI that lets you save and switch between named config versions.&lt;/p&gt;

&lt;p&gt;That’s it. That’s the whole feature set.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# save current config
robe add tmux/work -r .config/tmux

# switch anytime
robe use tmux/minimal

# view or edit
robe view tmux/work
robe edit tmux/work
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configs are stored as plain files.&lt;/p&gt;

&lt;p&gt;No templating.&lt;br&gt;
No symlinks.&lt;br&gt;
No background process.&lt;br&gt;
No magic.&lt;/p&gt;

&lt;p&gt;Just copy files in and out.&lt;/p&gt;

&lt;p&gt;Very boring. Very predictable.&lt;/p&gt;

&lt;p&gt;Exactly how I like my tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why not use a full dotfile manager?
&lt;/h3&gt;

&lt;p&gt;There are great tools out there for managing entire dotfile repos.&lt;/p&gt;

&lt;p&gt;But I didn’t want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;git repos&lt;/li&gt;
&lt;li&gt;templating&lt;/li&gt;
&lt;li&gt;environment logic&lt;/li&gt;
&lt;li&gt;setup scripts&lt;/li&gt;
&lt;li&gt;abstractions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I just wanted:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“save this config as a name, switch later”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So &lt;strong&gt;robe&lt;/strong&gt; intentionally does less.&lt;/p&gt;

&lt;p&gt;It’s basically a glorified cp, but with names.&lt;/p&gt;

&lt;p&gt;Sometimes that’s all you need.&lt;/p&gt;

&lt;h3&gt;
  
  
  The real use case
&lt;/h3&gt;

&lt;p&gt;I actually built it while developing other CLIs.&lt;/p&gt;

&lt;p&gt;When you’re testing your own tools, it’s super handy to have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a “clean” environment&lt;/li&gt;
&lt;li&gt;a “testing” config&lt;/li&gt;
&lt;li&gt;a “broken” setup&lt;/li&gt;
&lt;li&gt;your daily setup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Switching instantly made my development way faster.&lt;/p&gt;

&lt;p&gt;So much so that I actually implemented this feature in one of my other clis, even though it was literally irrelevant for &lt;strong&gt;every user except me&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;robe&lt;/strong&gt; bridges that gap. No manual backups. No forgetting what you changed. Deliberately simple.&lt;/p&gt;

&lt;h3&gt;
  
  
  Design philosophy
&lt;/h3&gt;

&lt;p&gt;I tried to keep it very Unix-y:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;configs are plain files&lt;/li&gt;
&lt;li&gt;no hidden state&lt;/li&gt;
&lt;li&gt;no daemon&lt;/li&gt;
&lt;li&gt;no cleverness&lt;/li&gt;
&lt;li&gt;everything inspectable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If something breaks, you can literally &lt;code&gt;cd ~/.config/robe&lt;/code&gt; and see everything.&lt;/p&gt;

&lt;p&gt;That simplicity was the goal.&lt;/p&gt;

&lt;p&gt;If this sounds useful&lt;/p&gt;

&lt;p&gt;It’s open source and written in Rust:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;crates.io: &lt;a href="https://crates.io/crates/robe" rel="noopener noreferrer"&gt;https://crates.io/crates/robe&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/sawsent/robe" rel="noopener noreferrer"&gt;https://github.com/sawsent/robe&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feedback and ideas welcome — especially from people who live in the terminal like I do. Let me know what you want to see in v0.1.0.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bonus: what I learned
&lt;/h3&gt;

&lt;p&gt;Building tiny tools like this is weirdly satisfying.&lt;/p&gt;

&lt;p&gt;Not everything needs to be a big framework or platform.&lt;/p&gt;

&lt;p&gt;Sometimes a 200–300 line CLI that solves one annoying problem is enough.&lt;/p&gt;

&lt;p&gt;Honestly, those are my favorite kinds of tools.&lt;/p&gt;

</description>
      <category>config</category>
      <category>dotfiles</category>
      <category>cli</category>
      <category>rust</category>
    </item>
  </channel>
</rss>
