<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Dinko Pehar</title>
    
    
    
    <link>/blog/</link>
    <description>Recent content in Posts on Dinko Pehar</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    
	<atom:link href="/blog/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>From ZSH to Fish</title>
      <link>/blog/from-zsh-to-fish/</link>
      <pubDate>Mon, 26 Sep 2022 00:00:00 +0000</pubDate>
      <guid>/blog/from-zsh-to-fish/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;ZSH was my default shell for many years. I have modified and moved &lt;code&gt;.zshrc&lt;/code&gt; across many different distributions of Linux. Recently I started working on a MacBook Pro, which has ZSH as the default shell. Using it for few months now, I noticed a few things about my ZSH configuration:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The startup of the new shell had minor delays before it could be used. These delays weren&amp;rsquo;t huge, but I started noticing it more and more on MacOS. We tend to interact faster with systems that gives us &lt;a href=&#34;https://bootcamp.uxdesign.cc/importance-of-doherty-threshold-ebe65f0b9fab&#34;&gt;faster feedbacks&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;My &lt;code&gt;.zshrc&lt;/code&gt; configuration had some plugins and configurations from &lt;code&gt;oh-my-zsh&lt;/code&gt; that Fish shell mostly provides out-of-the-box.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With this in mind, I wanted to know how fast can I migrate to Fish shell while converting my current &lt;code&gt;.zshrc&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;fish-shell-&#34;&gt;
  Fish Shell 🐠
  &lt;a href=&#34;#fish-shell-&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;getting-ready&#34;&gt;
  Getting ready
  &lt;a href=&#34;#getting-ready&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;My &lt;code&gt;.zshrc&lt;/code&gt; configuration looks like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# ---- ZSH ---- #&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export ADOTDIR&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$HOME&lt;span style=&#34;color:#e6db74&#34;&gt;/.antigen&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Source antigen zsh plugin manager&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;source $HOME/.antigenrc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;antigen init
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Autosuggestion color highlight&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fg=#F2F0F6,underline&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# History settings.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export HISTSIZE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export HISTCONTROL&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;ignoreboth&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export HISTORY_IGNORE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;(clear|history)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SAVEHIST&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;$HISTSIZE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Add wisely, as too many plugins slow down shell startup.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;plugins&lt;span style=&#34;color:#f92672&#34;&gt;=(&lt;/span&gt;copyfile
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         extract
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         git-extras 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         git-flow-avh 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         zsh-autosuggestions 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         zsh-completions
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         zsh-syntax-highlighting 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         colored-man-pages
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         z&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# ------------- #&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# ---- User Configuration ---- #&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## Nix specific&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export NIX_PATH&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;darwin-config&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;$HOME/.nixpkgs/darwin-configuration.nix:$HOME/.nix-defexpr/channels&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;NIX_PATH:+:&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;$NIX_PATH
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;source $HOME/.nix-profile/etc/profile.d/hm-session-vars.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;source /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;eval &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;starship init zsh&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Leave less preview on screen when quit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export LESS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-RX&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export EDITOR&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;nvim&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export LESS_TERMCAP_md&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;yellow&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# ---------------------------- #&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# ---- Alias ---- #&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias vim&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nvim&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias l&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;exa --long --header --all&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias ls&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;exa --long --header&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias tree&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;exa --tree --level=2&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias cat&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;bat&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias ping&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ping -c 3&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Add verbose output on these commands&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias rm&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rm -v&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias mkdir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mkdir -v&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias mv&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mv -v&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias cp&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cp -v&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# --------------- #&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export SDKMAN_DIR&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$HOME&lt;span style=&#34;color:#e6db74&#34;&gt;/.sdkman&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[[&lt;/span&gt; -s &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$HOME&lt;span style=&#34;color:#e6db74&#34;&gt;/.sdkman/bin/sdkman-init.sh&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;]]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; source &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$HOME&lt;span style=&#34;color:#e6db74&#34;&gt;/.sdkman/bin/sdkman-init.sh&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;setup&#34;&gt;
  Setup
  &lt;a href=&#34;#setup&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Install Fish and Fisher (&lt;em&gt;plugin manager for Fish&lt;/em&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;brew install fish fisher
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Fish configurations are located at &lt;code&gt;~/.config/fish&lt;/code&gt;. Now we can activate fish shell using &lt;code&gt;fish&lt;/code&gt; command to get started.&lt;/p&gt;
&lt;h4 id=&#34;alias&#34;&gt;
  Alias
  &lt;a href=&#34;#alias&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h4&gt;
&lt;p&gt;To convert aliases, simply paste them once in terminal and use &lt;code&gt;funcsave&lt;/code&gt; to save them at &lt;code&gt;~/.config/fish/functions&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias cp&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cp -v&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias mv&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mv -v&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;funcsave cp mv ...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;env-variables&#34;&gt;
  ENV variables
  &lt;a href=&#34;#env-variables&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Use &lt;a href=&#34;https://stackoverflow.com/a/30187924/9871463&#34;&gt;Universal Variables&lt;/a&gt; as:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set -Ux EDITOR &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nvim&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will write to &lt;code&gt;~/.config/fish/fish_variables&lt;/code&gt; once and export variables to all active shells as well.&lt;/p&gt;
&lt;h3 id=&#34;plugins&#34;&gt;
  Plugins
  &lt;a href=&#34;#plugins&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Use Fisher to install several helpful plugins.:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fisher install jethrokuan/z             &lt;span style=&#34;color:#75715e&#34;&gt;# Jump around the folders&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fisher install decors/fish-colored-man
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fisher install oh-my-fish/plugin-peco    &lt;span style=&#34;color:#75715e&#34;&gt;# Ctrl + R for searching history&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fisher install oh-my-fish/plugin-extract
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note that some of Fish plugins are enabled by default and there is no need to set the up like in ZSH.&lt;/p&gt;
&lt;p&gt;I also found below plugins useful while converting my &lt;code&gt;.zshrc&lt;/code&gt; (&lt;em&gt;though you may won&amp;rsquo;t need them&lt;/em&gt;)&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fisher install reitzig/sdkman-for-fish
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fisher install lilyball/nix-env.fish
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fisher install jorgebucaran/nvm.fish
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;prompt&#34;&gt;
  Prompt
  &lt;a href=&#34;#prompt&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;I use &lt;a href=&#34;https://starship.rs&#34;&gt;Starship&lt;/a&gt; which is &amp;ldquo;Cross-Shell Prompt&amp;rdquo; so my configurations for Starship are automatically applied. To enable it, just use:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;starship init fish | source&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; $HOME/.config/fish/config.fish
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;results&#34;&gt;
  Results
  &lt;a href=&#34;#results&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id=&#34;benchmarks&#34;&gt;
  Benchmarks
  &lt;a href=&#34;#benchmarks&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Using &lt;a href=&#34;https://github.com/sharkdp/hyperfine&#34;&gt;hyperfine&lt;/a&gt; at first run, I&amp;rsquo;ve noticed Fish is faster than ZSH to some extent:&lt;/p&gt;

  &lt;img src=&#34;/img/from-zsh-to-fish/zsh-fish-benchmark-1.png&#34;  alt=&#34;Benchmark results using Hyperfine on both ZSH and Fish&#34;  class=&#34;center&#34;  /&gt;


&lt;p&gt;I got curious why both shells take so much time to start. Profiling both &lt;a href=&#34;https://stackoverflow.com/a/63320336/9871463&#34;&gt;Fish&lt;/a&gt; and &lt;a href=&#34;https://stevenvanbael.com/profiling-zsh-startup&#34;&gt;ZSH&lt;/a&gt;, I figured out that both of them have performance degradation due to SDKMan enabled (&lt;em&gt;manages multiple Java Distributions similar to NVM&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Once SDKMan is removed for both shells, I re-ran benchmarks again:&lt;/p&gt;

  &lt;img src=&#34;/img/from-zsh-to-fish/zsh-fish-benchmark-2.png&#34;  alt=&#34;Benchmark results using Hyperfine on both ZSH and Fish&#34;  class=&#34;center&#34;  /&gt;


&lt;p&gt;With both shells being almost similar in my setup, Fish shell ran &lt;strong&gt;3 times&lt;/strong&gt; faster than ZSH.&lt;/p&gt;
&lt;h3 id=&#34;benefits&#34;&gt;
  Benefits
  &lt;a href=&#34;#benefits&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;I find my shell configuration more organized now using Fish. Syntax of Fish scripts feel lot more readable compared to ZSH/Bash scripts. Other noticeable features that I found useful:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Auto suggest command completions (&lt;code&gt;fish_update_completions&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CTRL&lt;/code&gt; + &lt;code&gt;R&lt;/code&gt; with Peco for searching history easily&lt;/li&gt;
&lt;li&gt;Great plugins&lt;/li&gt;
&lt;li&gt;Faster compared to my ZSH&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;gotchas&#34;&gt;
  Gotchas
  &lt;a href=&#34;#gotchas&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Although converting configurations was extremly fast, I spent a lot of time on following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I keep backups of ZSH history dating back several years. There is a tool to convert &lt;a href=&#34;https://github.com/rsalmei/zsh-history-to-fish&#34;&gt;ZSH history to Fish&lt;/a&gt;, but it didn&amp;rsquo;t kept timestamp of execution. Also, some of multiline commands
(&lt;em&gt;such as &lt;code&gt;curl&lt;/code&gt;&lt;/em&gt;) broke &lt;code&gt;fish_history&lt;/code&gt; file. The tool works, but may have to manually correct errors.&lt;/li&gt;
&lt;li&gt;Poetry completions produce &lt;a href=&#34;https://github.com/python-poetry/cleo/issues/84#issuecomment-1255627939&#34;&gt;errors&lt;/a&gt;. I though it was error something due to Fish, but found out later that this will be fixed.&lt;/li&gt;
&lt;li&gt;Some of the builds scripts (Makefiles, builds tasks&amp;hellip;) exported certain ENV variables using &lt;code&gt;export&lt;/code&gt; so running it with Fish produced errors.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;
  Conclusion
  &lt;a href=&#34;#conclusion&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;In this state, I have migrated from ZSH to Fish really fast and set it as default shell, keeping the same configurations. Without gotchas that I ran in to, time of converting was less than 10 minutes. I find my shell much faster now, using  new plugins and some other that Fish provides by default.&lt;/p&gt;
&lt;p&gt;At the end, I suggest you try it. If it doesn&amp;rsquo;t work, you can always go back to your previous configuration.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Shared on &lt;a href=&#34;https://www.reddit.com/r/fishshell/comments/xonvj2/from_zsh_to_fish&#34;&gt;/r/fishshell&lt;/a&gt;&lt;/p&gt;

        
        </description>
    </item>
    
    <item>
      <title>Moving to Bitwarden from LastPass with style</title>
      <link>/blog/moving-to-bitwarden-from-lastpass-in-style/</link>
      <pubDate>Thu, 18 Feb 2021 00:00:00 +0000</pubDate>
      <guid>/blog/moving-to-bitwarden-from-lastpass-in-style/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;A few days ago, LastPass struck a &lt;a href=&#34;https://blog.lastpass.com/2021/02/changes-to-lastpass-free/&#34;&gt;heavy blow&lt;/a&gt; on free users. They gave ultimatum to free users in which they have to choose one type of device they will use LastPass password manager - &lt;strong&gt;Mobile or Computer&lt;/strong&gt;. This will make LastPass really cumbersome to use on both.&lt;/p&gt;
&lt;h2 id=&#34;about-bitwarden&#34;&gt;
  About Bitwarden
  &lt;a href=&#34;#about-bitwarden&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://bitwarden.com/&#34;&gt;Bitwarden&lt;/a&gt; is open source password manager. You can use it across all types of various devices, with unlimited number of items inside your Vault. It also offers Premium for 10$ a year, with remarkable feature - Bitwarden Authenticator.&lt;/p&gt;
&lt;p&gt;Bitwarden Authenticator is used for 2FA. When you use autofill to sign into the site, Bitwarden silently copies 6 digit code into clipboard. So it&amp;rsquo;s a  very good alternative to some other 2FA apps (&lt;em&gt;grab your mobile device, see code, enter it manually&lt;/em&gt;).&lt;/p&gt;
&lt;h2 id=&#34;moving-to-bitwarden&#34;&gt;
  Moving to Bitwarden&amp;hellip;
  &lt;a href=&#34;#moving-to-bitwarden&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Bitwarden has a complete &lt;a href=&#34;https://bitwarden.com/help/article/import-from-lastpass/&#34;&gt;article&lt;/a&gt; on how to export your data from LastPass and import them into Bitwarden.&lt;/p&gt;
&lt;p&gt;Since that article explains in details a convenient solution for most users, I wanted to explain my approach on exporting and importing data by using &lt;a href=&#34;https://github.com/lastpass/lastpass-cli&#34;&gt;lastpass-cli&lt;/a&gt; and &lt;a href=&#34;https://bitwarden.com/help/article/cli/&#34;&gt;bitwarden-cli&lt;/a&gt; tools.&lt;/p&gt;
&lt;p&gt;You can easily install or download both CLI tools by following instructions for your platform.&lt;/p&gt;
&lt;h2 id=&#34;-with-style&#34;&gt;
  &amp;hellip; with style
  &lt;a href=&#34;#-with-style&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;First, use &lt;code&gt;lastpass-cli&lt;/code&gt; to login inside your vault:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lpass login your_email@email.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once you enter your Master Password, export your data from LastPass into a file:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ lpass export &amp;gt; my_passwords.csv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, login in into bitwarden by using &lt;code&gt;bitwarden-cli&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ./bw login
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On successful login, use exported data with format set to &lt;code&gt;lastpasscsv&lt;/code&gt; to import it into Bitwarden:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ./bw import lastpasscsv my_passwords.csv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now check your Bitwarden vault and you should see everything imported.&lt;/p&gt;
&lt;p&gt;At the end, logout from both and remove exported file (&lt;em&gt;my_passwords.csv&lt;/em&gt;) since &lt;strong&gt;it contains all your passwords in plain text&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;finishing-thoughts&#34;&gt;
  Finishing thoughts
  &lt;a href=&#34;#finishing-thoughts&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Bitwarden made it easy to move from any password manager you are using by providing options and articles on how to do it. I&amp;rsquo;ve used a different approach because I used &lt;code&gt;lastpass-cli&lt;/code&gt; to restore my SSH keys in the past and because I&amp;rsquo;m familiar with the CLI tool itself.&lt;/p&gt;
&lt;p&gt;If you decide to delete your LastPass account, please make sure that all exported data inside LastPass vault match your Bitwarden vault. Don&amp;rsquo;t make hasty decision just to lose access to sites you like and passwords you can&amp;rsquo;t remember.&lt;/p&gt;

        
        </description>
    </item>
    
    <item>
      <title>Linux utility &amp; productivity tools</title>
      <link>/blog/linux-tools/</link>
      <pubDate>Mon, 30 Dec 2019 00:00:00 +0000</pubDate>
      <guid>/blog/linux-tools/</guid>
      <description>
        
          
          
          
        
        
        &lt;hr&gt;
&lt;p&gt;Using Linux for development at first can be daunting, but with the right tools and applications, you can become more productive. Here are few tools and utilities(&lt;em&gt;in no particular order&lt;/em&gt;) I use day to day.&lt;/p&gt;
&lt;h2 id=&#34;tldr&#34;&gt;
  tldr
  &lt;a href=&#34;#tldr&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;If you are newcomer, you will love &lt;a href=&#34;https://tldr.sh/&#34;&gt;tldr&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;From their website:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The TLDR pages are a community effort to simplify the beloved man pages with practical examples.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Chances are, you used the &lt;code&gt;man&lt;/code&gt; command to read user manual about certain commands. These manuals are also lengthy; they provide a lot of information we don&amp;rsquo;t need at the moment. Finding solution by reading manual can also be complicated or cumbersome.&lt;/p&gt;
&lt;p&gt;This is where &lt;code&gt;tldr&lt;/code&gt; comes in. It simplifies command usage and gives us clear examples and info on certain command.&lt;/p&gt;
&lt;p&gt;For example, if we ran &lt;code&gt;tldr ls&lt;/code&gt;, we would get the output:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ls
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  List directory contents.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - List files one per line:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ls -1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - List all files, including hidden files:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ls -a
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - Long format list &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;permissions, ownership, size and modification date&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; of all files:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ls -la
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - Long format list with size displayed using human readable units &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;KB, MB, GB&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ls -lh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - Long format list sorted by size &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;descending&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ls -lS
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - Long format list of all files, sorted by modification date &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;oldest first&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ls -ltr
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We can see clear usage of &lt;code&gt;ls&lt;/code&gt; command. To install &lt;code&gt;tldr&lt;/code&gt;, refer to their &lt;a href=&#34;https://tldr.sh/#installation&#34;&gt;installation&lt;/a&gt; section.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Rule of thumb&lt;/strong&gt;: &lt;em&gt;If you are in a hurry, use &lt;code&gt;tldr&lt;/code&gt;. If you look for something very specific in some command, use &lt;code&gt;man&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;stormssh&#34;&gt;
  StormSSH
  &lt;a href=&#34;#stormssh&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://stormssh.readthedocs.io/en/master/&#34;&gt;StormSSH&lt;/a&gt; is a command line tool to manage your SSH connections. You can use it to add, delete or edit hosts you want to connect to. All configurations are written in current user SSH config file.&lt;/p&gt;
&lt;p&gt;Usage:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Add a host&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;port is optional, defaults to 22&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  $ storm add my_vps1 dev@192.168.12.1:22
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - Success  my_vps1 added to your ssh config. you can connect it by typing &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ssh my_vps1&amp;#34;&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - storm add my_vps2 root@192.168.12.2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - Success  my_vps2 added to your ssh config. you can connect it by typing &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ssh my_vps2&amp;#34;&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;List all hosts added by storm:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  $ storm list
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - Listing entries:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     my_vps1 -&amp;gt; dev@192.168.12.1:22
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     my_vps2 -&amp;gt; root@192.168.12.2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Delete a host:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  $ storm delete my_vps1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - Success  hostname &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;my_vps1&amp;#34;&lt;/span&gt; deleted successfully.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The thing I like the most about storm is that it provides web interface(&lt;em&gt;written in Flask&lt;/em&gt;) to add, delete and modify hosts. To use it, execute:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ storm web
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Read more about &lt;code&gt;StormSSH&lt;/code&gt; usage at &lt;a href=&#34;https://stormssh.readthedocs.io/en/master/usage.html&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;bat&#34;&gt;
  Bat
  &lt;a href=&#34;#bat&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;You can use &lt;a href=&#34;https://github.com/sharkdp/bat&#34;&gt;Bat&lt;/a&gt; as alternative to &lt;code&gt;cat&lt;/code&gt; command for more fancy output. If content can&amp;rsquo;t fit on screen, it will use pager (e.g. less) which you can use to navigate through content of a file.&lt;/p&gt;
&lt;p&gt;So if you use &lt;code&gt;bat main.dart&lt;/code&gt; to output content of a file, you will see file with &lt;em&gt;Syntax Highlighting&lt;/em&gt; applied as below:&lt;/p&gt;

  &lt;img src=&#34;/img/linux-tools/bat-output.png&#34;  alt=&#34;Bat output with Dart code&#34;  class=&#34;center&#34;  /&gt;


&lt;p&gt;Short tip: &lt;em&gt;Set &lt;code&gt;alias cat=&amp;quot;bat&amp;quot;&lt;/code&gt; for unobstructed work.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;exa&#34;&gt;
  Exa
  &lt;a href=&#34;#exa&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;As in previous example, &lt;a href=&#34;https://the.exa.website/&#34;&gt;Exa&lt;/a&gt; acts as modern replacement for &lt;code&gt;ls&lt;/code&gt; command. I have multiple aliases set for &lt;code&gt;exa&lt;/code&gt; as:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias l&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;exa --long --header --all&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias ls&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;exa --long --header&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias tree&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;exa --tree --level=2&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Example output when I run &lt;code&gt;ls&lt;/code&gt;:&lt;/p&gt;

  &lt;img src=&#34;/img/linux-tools/exa-output.png&#34;  alt=&#34;Exa output of mock_data directory&#34;  class=&#34;center&#34;  /&gt;


&lt;h2 id=&#34;z&#34;&gt;
  Z
  &lt;a href=&#34;#z&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/rupa/z&#34;&gt;Z&lt;/a&gt; is a utility for &amp;ldquo;jumping around&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;From description:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Tracks your most used directories, based on &amp;lsquo;frecency&amp;rsquo;.
After  a  short  learning  phase, z will take you to the most &amp;lsquo;frecent&amp;rsquo;
directory that matches ALL of the regexes given on the command line, in
order.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When you install it or enable it (&lt;em&gt;I have this one enabled as ZSH plugin in &lt;code&gt;~/.zshrc&lt;/code&gt;&lt;/em&gt;), everytime you use &lt;code&gt;cd&lt;/code&gt; to change directory, it will build it&amp;rsquo;s own db of visited directories.
Then, using &lt;code&gt;z project&lt;/code&gt; will take you to most frecent dir matching &lt;em&gt;&amp;ldquo;project&amp;rdquo;&lt;/em&gt;, which can be located deeply as &lt;code&gt;/path/to/nested/project&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Update(2023)&lt;/strong&gt;: I have been using a lot of tools and application with a recent switch to Nix. Make sure to check my &lt;a href=&#34;https://github.com/dinko-pehar/dotfiles&#34;&gt;dotfiles&lt;/a&gt; since they contain everything and more not specified at here.&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;

        
        </description>
    </item>
    
  </channel>
</rss>