<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>blog.masoko.net</title>
    <description>My Blog and Notes</description>
    <link>https://blog.masoko.net/</link>
    <atom:link href="https://blog.masoko.net/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Thu, 23 Jul 2026 15:41:35 +0000</pubDate>
    <lastBuildDate>Thu, 23 Jul 2026 15:41:35 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
      <item>
        <title>Nerd Fonts: What They Are, Why You Need Them, and How to Install Them</title>
        <description>&lt;h1 id=&quot;nerd-fonts-what-they-are-why-you-need-them-and-how-to-install-them&quot;&gt;Nerd Fonts: What They Are, Why You Need Them, and How to Install Them&lt;/h1&gt;

&lt;p&gt;If you spend time in a terminal, you’ve probably seen screenshots where file listings, prompts, and status bars are full of clean little icons — a folder glyph next to directories, a language logo next to source files, a Git branch symbol in the prompt. Most of the time, that’s not a special app doing custom rendering. It’s just a &lt;strong&gt;Nerd Font&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;what-is-a-nerd-font&quot;&gt;What is a Nerd Font?&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://www.nerdfonts.com/&quot;&gt;Nerd Fonts&lt;/a&gt; is an open-source project (maintained on &lt;a href=&quot;https://github.com/ryanoasis/nerd-fonts&quot;&gt;GitHub&lt;/a&gt;) that takes existing popular monospace fonts — things like Fira Code, JetBrains Mono, Hack, or Cascadia Code — and “patches” them by adding thousands of extra glyphs. Those glyphs are pulled from icon sets such as Font Awesome, Devicons, Octicons, Powerline, Material Design Icons, and a few others, and merged into the font at code points that aren’t used by normal text.&lt;/p&gt;

&lt;p&gt;The result is a regular monospace coding font that &lt;em&gt;also&lt;/em&gt; happens to contain icons for programming languages, file types, operating systems, Git status, and more — all renderable as a single character, at any font size, in any app that supports the font.&lt;/p&gt;

&lt;h2 id=&quot;why-you-need-them&quot;&gt;Why you need them&lt;/h2&gt;

&lt;p&gt;You don’t strictly &lt;em&gt;need&lt;/em&gt; a Nerd Font to use a terminal — but a lot of modern CLI and TUI (terminal UI) tools are designed with the assumption that one is installed, and they fall back to showing broken boxes (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;▯&lt;/code&gt;) or question marks when it isn’t. Nerd Fonts matter if you use:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Prompt frameworks&lt;/strong&gt; like Starship or Powerlevel10k, which use icons and separators for Git status, language versions, and OS badges.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;File managers and listers&lt;/strong&gt; that show a distinct icon per file type instead of plain text.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Status bars and window manager bars&lt;/strong&gt; (e.g. in tmux, polybar, or i3status) that use icons for battery, volume, or workspace indicators.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Editor/IDE plugins&lt;/strong&gt; inside terminal-based editors like Neovim, where file-tree and fuzzy-finder plugins commonly rely on icon glyphs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without a patched font, none of this breaks functionally — the tools still work — but you’ll see missing-character boxes instead of the intended icons.&lt;/p&gt;

&lt;h3 id=&quot;tools-that-specifically-benefit-from-a-nerd-font&quot;&gt;Tools that specifically benefit from a Nerd Font&lt;/h3&gt;

&lt;p&gt;A few CLI tools worth calling out from &lt;a href=&quot;https://blog.masoko.net/ubuntu/Useful-cli-tools/&quot;&gt;previous posts on this blog&lt;/a&gt; look noticeably better with a Nerd Font installed:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/ogham/exa&quot;&gt;exa&lt;/a&gt;&lt;/strong&gt; — a modern replacement for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls&lt;/code&gt;. Its &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--icons&lt;/code&gt; flag prints a file-type icon next to each entry, but that flag only renders correctly with a Nerd Font active in your terminal.&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/aristocratos/btop&quot;&gt;btop&lt;/a&gt;&lt;/strong&gt; — the resource monitor covered in the &lt;a href=&quot;https://blog.masoko.net/ubuntu/Useful-cli-tools/&quot;&gt;Useful CLI tools&lt;/a&gt; post.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/muesli/duf&quot;&gt;duf&lt;/a&gt;&lt;/strong&gt; — the disk usage utility from the same post; its table borders and bars render more consistently with a Nerd Font-based terminal font.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re setting up any of these, installing a Nerd Font first will save you from wondering why the icons look wrong.&lt;/p&gt;

&lt;h2 id=&quot;how-to-install-nerd-fonts&quot;&gt;How to install Nerd Fonts&lt;/h2&gt;

&lt;p&gt;The general idea is the same on every platform: download (or install via package manager) one or more patched font files, register them with your OS, then set your terminal or editor to actually use that font — installing it alone isn’t enough, you also have to select it in your terminal’s font settings.&lt;/p&gt;

&lt;h3 id=&quot;linux&quot;&gt;Linux&lt;/h3&gt;

&lt;p&gt;Manual method (works on any distro):&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; ~/.local/share/fonts
&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; ~/.local/share/fonts
curl &lt;span class=&quot;nt&quot;&gt;-fLo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;JetBrainsMono.zip&quot;&lt;/span&gt; https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.zip
unzip JetBrainsMono.zip &lt;span class=&quot;nt&quot;&gt;-d&lt;/span&gt; JetBrainsMono
&lt;span class=&quot;nb&quot;&gt;rm &lt;/span&gt;JetBrainsMono.zip
fc-cache &lt;span class=&quot;nt&quot;&gt;-fv&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Swap &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;JetBrainsMono&lt;/code&gt; for whichever font family you prefer — the &lt;a href=&quot;https://github.com/ryanoasis/nerd-fonts/releases&quot;&gt;Nerd Fonts releases page&lt;/a&gt; lists all available families as separate zip downloads.&lt;/p&gt;

&lt;p&gt;Package-manager options exist too, though availability varies by distro:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# Arch Linux (AUR)&lt;/span&gt;
yay &lt;span class=&quot;nt&quot;&gt;-S&lt;/span&gt; ttf-jetbrains-mono-nerd
&lt;span class=&quot;c&quot;&gt;# or, everything at once (large download):&lt;/span&gt;
yay &lt;span class=&quot;nt&quot;&gt;-S&lt;/span&gt; nerd-fonts-complete
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;macos&quot;&gt;macOS&lt;/h3&gt;

&lt;p&gt;The easiest route is Homebrew, since Nerd Font casks now live directly in the main &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;homebrew/cask&lt;/code&gt; repository (no separate tap needed as of mid-2024):&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;brew &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--cask&lt;/span&gt; font-jetbrains-mono-nerd-font
brew &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--cask&lt;/span&gt; font-fira-code-nerd-font
brew &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--cask&lt;/span&gt; font-hack-nerd-font
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You can search for other available families with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;brew search nerd-font&lt;/code&gt;. Fonts install to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/Library/Fonts/&lt;/code&gt; and are available immediately — no cache rebuild step needed.&lt;/p&gt;

&lt;p&gt;If you’d rather not use Homebrew, download the zip for your chosen font from the &lt;a href=&quot;https://github.com/ryanoasis/nerd-fonts/releases&quot;&gt;Nerd Fonts releases page&lt;/a&gt;, unzip it, select all the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.ttf&lt;/code&gt; files, and double-click (or right-click → “Install for all users” if you want it available system-wide).&lt;/p&gt;

&lt;h3 id=&quot;windows&quot;&gt;Windows&lt;/h3&gt;

&lt;p&gt;A few options, in rough order of convenience:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Manual install:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Download the zip for your chosen font family from the &lt;a href=&quot;https://github.com/ryanoasis/nerd-fonts/releases&quot;&gt;Nerd Fonts releases page&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Extract it.&lt;/li&gt;
  &lt;li&gt;Select all the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.ttf&lt;/code&gt; files, right-click, and choose &lt;strong&gt;Install&lt;/strong&gt; (or &lt;strong&gt;Install for all users&lt;/strong&gt;, which needs admin rights).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Using Scoop:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;scoop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;bucket&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;nerd-fonts&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;scoop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;JetBrainsMono-NF&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The exact package name can vary between font families, so use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scoop search nerd-font&lt;/code&gt; to confirm the correct name before installing — I’d rather point you to verify this than give you a name that turns out to be wrong for the specific font you want.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using Chocolatey:&lt;/strong&gt; some Nerd Font packages exist on the Chocolatey community repo, but from what I found this isn’t an official Nerd Fonts distribution channel, just community-maintained packages — worth checking the package page on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;community.chocolatey.org&lt;/code&gt; before relying on it.&lt;/p&gt;

&lt;h3 id=&quot;after-installing-on-any-platform&quot;&gt;After installing, on any platform&lt;/h3&gt;

&lt;p&gt;Installing the font is only half the job. Open your terminal emulator’s settings (Windows Terminal, iTerm2, GNOME Terminal, Alacritty, Kitty, etc.) and set the font explicitly to the Nerd Font variant — it will usually show up with “Nerd Font” appended to its name, e.g. “JetBrainsMono Nerd Font”. Some terminals also need this set in a config file rather than a GUI setting; check your specific terminal’s docs if the font picker doesn’t show it.&lt;/p&gt;

</description>
        <pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/linux/macos/windows/cli/nerd-fonts-what-why-how-to-install/</link>
        <guid isPermaLink="true">https://blog.masoko.net/linux/macos/windows/cli/nerd-fonts-what-why-how-to-install/</guid>
        <category>linux</category>
        <category>macos</category>
        <category>windows</category>
        <category>cli</category>
      </item>
      <item>
        <title>Best TUI File Managers in 2026</title>
        <description>&lt;h1 id=&quot;best-tui-file-managers-in-2026&quot;&gt;Best TUI File Managers in 2026&lt;/h1&gt;

&lt;p&gt;Terminal file managers hit a sweet spot for a lot of people: faster than clicking through a GUI file browser, but with a real interface instead of typing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls&lt;/code&gt; over and over. Below are some of the more actively-discussed options going into 2026, including a newer entry worth knowing about — &lt;strong&gt;Shell Buddy&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;shell-buddy-sb&quot;&gt;Shell Buddy (sb)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://sb.masoko.net/&quot;&gt;Shell Buddy&lt;/a&gt; is a keyboard-driven TUI file manager written in Rust, built on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ratatui&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;crossterm&lt;/code&gt; libraries. It’s a single binary aimed at people who want to stay in the terminal for as much of their workflow as possible, rather than dropping to a shell or a separate app for common tasks.&lt;/p&gt;

&lt;p&gt;A few things that stand out from its feature list:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;In-TUI Git workflow&lt;/strong&gt; — diff preview, status review, commit, and push without leaving the file manager.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;AI-drafted commit messages&lt;/strong&gt; — generates a commit message from the diff (using Groq or GitHub Models) that you can edit before committing.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Inline path filters&lt;/strong&gt; — typing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;^prefix&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;suffix$&lt;/code&gt;, or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~contains&lt;/code&gt; directly in the path bar live-filters the current listing.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;One-key integration installs&lt;/strong&gt; — it can detect missing optional tools and install them via Homebrew from inside the TUI.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Age encryption&lt;/strong&gt; — encrypt or decrypt &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.age&lt;/code&gt; files in place with a single keypress.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Per-file notes&lt;/strong&gt; — attach notes to individual files, stored in a hidden &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.sb&lt;/code&gt; file per directory.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;tmux-aware split panes&lt;/strong&gt; — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;i&lt;/code&gt; opens a shell + preview pane, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;E&lt;/code&gt; opens a shell + editor pane, and it falls back to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zellij&lt;/code&gt; if tmux isn’t installed.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;CLI list/tree modes&lt;/strong&gt; — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sb -l&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sb -t&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sb -l2&lt;/code&gt; give consistent column output outside the interactive TUI, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sb &amp;lt;file&amp;gt;&lt;/code&gt; opens a file directly with the best available viewer.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Themeable&lt;/strong&gt; — ten-plus built-in themes (Nord, Dracula, Gruvbox, Rosé Pine, Everforest, and others), with Nerd Fonts and file-name colors toggled live from a themes menu.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since it uses Nerd Font glyphs for its icons and theme indicators, it’s worth installing one before you try it — see &lt;a href=&quot;/nerd-fonts-what-why-how-to-install/&quot;&gt;our Nerd Fonts install guide&lt;/a&gt; if you haven’t set one up yet.&lt;/p&gt;

&lt;p&gt;Install it with Cargo:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cargo &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;shell-buddy
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;More install options are on the &lt;a href=&quot;https://sb.masoko.net/install.html&quot;&gt;Shell Buddy install page&lt;/a&gt;, and the source is on &lt;a href=&quot;https://github.com/hjelev/sb&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;yazi&quot;&gt;Yazi&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/sxyazi/yazi&quot;&gt;Yazi&lt;/a&gt; is a Rust-based file manager built around async I/O, which lets it stay responsive even with large directories or image previews. It’s gained a lot of attention over the past couple of years for its speed and its built-in image/media preview support. Like Shell Buddy, it’s commonly recommended to be paired with a Nerd Font for its icons.&lt;/p&gt;

&lt;h2 id=&quot;ranger&quot;&gt;ranger&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/ranger/ranger&quot;&gt;ranger&lt;/a&gt; is one of the longer-standing options in this space — a Python, Vim-inspired file manager with a multi-column “miller columns” layout (you see the parent directory, current directory, and a preview of the selected item side by side). It ships with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rifle&lt;/code&gt;, a file opener that tries to pick the right program for a given file type automatically. If you already use Vim, the keybindings will feel familiar immediately.&lt;/p&gt;

&lt;h2 id=&quot;nnn&quot;&gt;nnn&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/jarun/nnn&quot;&gt;nnn&lt;/a&gt; (“n³”) bills itself as an “unorthodox” terminal file manager, and its main selling point is being extremely lightweight and fast while still supporting plugins for things like previews, bookmarks, and file type detection.&lt;/p&gt;

&lt;h2 id=&quot;lf&quot;&gt;lf&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gokcehan/lf&quot;&gt;lf&lt;/a&gt; (“list files”) is written in Go and takes clear inspiration from ranger, but aims to be simpler and faster, with configuration done through a small shell-like config language rather than Python.&lt;/p&gt;

&lt;h2 id=&quot;superfile&quot;&gt;superfile&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/yorukot/superfile&quot;&gt;superfile&lt;/a&gt; is a newer, more visually polished TUI file manager aiming for a more modern look than some of the older tools in this list, with things like a sidebar, multiple panels, and mouse support alongside keyboard navigation.&lt;/p&gt;

&lt;h2 id=&quot;walk-lk&quot;&gt;Walk (lk)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/antonmedv/walk&quot;&gt;Walk&lt;/a&gt; is a minimalist terminal navigator written in Go — less a full file manager and more a fast &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls&lt;/code&gt; replacement with fuzzy search, a preview pane, and image preview built in. The binary itself is called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;walk&lt;/code&gt;, but the typical setup wraps it in a shell function named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lk&lt;/code&gt; that changes your shell’s directory to wherever you navigated to on exit:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;function &lt;/span&gt;lk &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;walk &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$@&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Install it via Homebrew, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pkg_add&lt;/code&gt;, or Go:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;brew &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;walk
&lt;span class=&quot;c&quot;&gt;# or&lt;/span&gt;
go &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;github.com/antonmedv/walk@latest
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Once set up, running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lk&lt;/code&gt; drops you into the navigator; pressing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;esc&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;q&lt;/code&gt; exits back to your shell already &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd&lt;/code&gt;‘d into the last directory you were browsing, while &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ctrl+c&lt;/code&gt; exits without changing directory. It also supports Nerd Font icons with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--icons&lt;/code&gt; flag, in-TUI file deletion (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dd&lt;/code&gt;, with undo via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;u&lt;/code&gt;), and yanking the current directory path.&lt;/p&gt;

&lt;h2 id=&quot;midnight-commander-mc&quot;&gt;Midnight Commander (mc)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://midnight-commander.org/&quot;&gt;Midnight Commander&lt;/a&gt; deserves a mention for context — it’s the classic dual-pane, function-key-driven file manager that predates most of the tools above by decades and is still packaged in nearly every Linux distro’s repositories. If you want the most “battle-tested” option with the least chance of surprises, this is it.&lt;/p&gt;

&lt;h2 id=&quot;picking-one&quot;&gt;Picking one&lt;/h2&gt;

&lt;p&gt;If you’re not sure where to start:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Want the most modern feature set, with Git and file-encryption built in? Try &lt;strong&gt;Shell Buddy&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Want fast async previews (including images)? Try &lt;strong&gt;Yazi&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Already comfortable in Vim? Try &lt;strong&gt;ranger&lt;/strong&gt; or &lt;strong&gt;lf&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Want the smallest possible footprint? Try &lt;strong&gt;nnn&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Just want a faster &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls&lt;/code&gt; with fuzzy search rather than a full file manager? Try &lt;strong&gt;Walk&lt;/strong&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lk&lt;/code&gt;).&lt;/li&gt;
  &lt;li&gt;Want the tool that’s been stable since before most of the others existed? Try &lt;strong&gt;Midnight Commander&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whichever you pick, installing a &lt;a href=&quot;/nerd-fonts-what-why-how-to-install/&quot;&gt;Nerd Font&lt;/a&gt; first will make sure icons and status glyphs render correctly instead of showing as boxes.&lt;/p&gt;
</description>
        <pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/linux/macos/cli/best-tui-file-managers-2026/</link>
        <guid isPermaLink="true">https://blog.masoko.net/linux/macos/cli/best-tui-file-managers-2026/</guid>
        <category>linux</category>
        <category>macos</category>
        <category>cli</category>
      </item>
      <item>
        <title>Best ls Alternatives in 2026</title>
        <description>&lt;h1 id=&quot;best-ls-alternatives-in-2026&quot;&gt;Best ls Alternatives in 2026&lt;/h1&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls&lt;/code&gt; has been listing files the same basic way for decades, and for plain output it’s still fine. But a handful of modern replacements add colored, icon-annotated, Git-aware output while staying just as fast (or close to it) — and they’re common enough now that you’ll see them in a lot of dotfiles repos. Here’s a rundown of the main options.&lt;/p&gt;

&lt;h2 id=&quot;eza&quot;&gt;eza&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/eza-community/eza&quot;&gt;eza&lt;/a&gt; is the most widely used option today, and it’s specifically the &lt;strong&gt;community-maintained continuation of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exa&lt;/code&gt;&lt;/strong&gt; (more on that below) — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exa&lt;/code&gt; was declared unmaintained, and a group of contributors forked it as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;eza&lt;/code&gt; to keep development going.&lt;/p&gt;

&lt;p&gt;Notable features:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Drop-in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls&lt;/code&gt; replacement — most people just &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;alias ls=eza&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Git integration (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;eza --git&lt;/code&gt;) shows tracked/modified/staged/untracked status per file.&lt;/li&gt;
  &lt;li&gt;Support for extended file attributes, SELinux contexts on Linux, and clickable terminal hyperlinks.&lt;/li&gt;
  &lt;li&gt;A &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;theme.yml&lt;/code&gt; config file for customizing colors and per-file-type icons (icons render properly once you have a &lt;a href=&quot;/nerd-fonts-what-why-how-to-install/&quot;&gt;Nerd Font&lt;/a&gt; installed).&lt;/li&gt;
  &lt;li&gt;Available for Linux, macOS, and Windows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# macOS&lt;/span&gt;
brew &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;eza

&lt;span class=&quot;c&quot;&gt;# Cargo (any platform with Rust installed)&lt;/span&gt;
cargo &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;eza

&lt;span class=&quot;c&quot;&gt;# Debian/Ubuntu — needs a third-party repo, since eza isn&apos;t always in default repos&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo mkdir&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; /etc/apt/keyrings
wget &lt;span class=&quot;nt&quot;&gt;-qO-&lt;/span&gt; https://raw.githubusercontent.com/eza-community/eza/main/deb.asc | &lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;gpg &lt;span class=&quot;nt&quot;&gt;--dearmor&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-o&lt;/span&gt; /etc/apt/keyrings/gierens.gpg
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;deb [signed-by=/etc/apt/keyrings/gierens.gpg] http://deb.gierens.de stable main&quot;&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/gierens.list
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt update
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-y&lt;/span&gt; eza

&lt;span class=&quot;c&quot;&gt;# Windows (Scoop)&lt;/span&gt;
scoop &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;eza
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Arch Linux, Fedora, NixOS, and several other package managers carry it too — see the &lt;a href=&quot;https://github.com/eza-community/eza/blob/main/INSTALL.md&quot;&gt;official install docs&lt;/a&gt; for the full list.&lt;/p&gt;

&lt;h2 id=&quot;lsd-lsdeluxe&quot;&gt;lsd (LSDeluxe)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/lsd-rs/lsd&quot;&gt;lsd&lt;/a&gt; is another Rust rewrite of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls&lt;/code&gt;, and it was explicitly inspired by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;colorls&lt;/code&gt; (see below) but implemented in Rust for speed. Its main differentiator from eza is that it leans further into Nerd Font icons by default rather than as an opt-in — the project’s own docs specifically recommend installing a patched Nerd Font (or Font Awesome) before using it, since icons are a core part of its default output.&lt;/p&gt;

&lt;p&gt;Install:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# macOS / Linuxbrew&lt;/span&gt;
brew &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;lsd

&lt;span class=&quot;c&quot;&gt;# Cargo&lt;/span&gt;
cargo &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;lsd

&lt;span class=&quot;c&quot;&gt;# Debian sid/bookworm and Ubuntu 23.04+&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;lsd

&lt;span class=&quot;c&quot;&gt;# Windows (Scoop)&lt;/span&gt;
scoop &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;lsd
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Once installed, alias it the same way as eza:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;alias ls&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;lsd&apos;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ll&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;lsd -l&apos;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;la&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;lsd -a&apos;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;alias &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;lt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;lsd --tree&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;exa-legacy--largely-superseded&quot;&gt;exa (legacy — largely superseded)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/ogham/exa&quot;&gt;exa&lt;/a&gt; was the original modern &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls&lt;/code&gt; replacement that both eza and lsd trace their lineage or inspiration back to. It’s the tool that popularized this whole category — colored output, Git awareness, tree view — written in Rust. It has since been marked unmaintained by its original author, which is exactly why the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;eza&lt;/code&gt; fork exists. If you’re starting fresh today, there’s little reason to install &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exa&lt;/code&gt; specifically instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;eza&lt;/code&gt;; I’m including it here mainly for context, since you may still see it referenced in older blog posts or dotfiles.&lt;/p&gt;

&lt;h2 id=&quot;colorls&quot;&gt;colorls&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/athityakumar/colorls&quot;&gt;colorls&lt;/a&gt; takes a different approach from the other three: instead of a compiled binary, it’s a &lt;strong&gt;Ruby gem&lt;/strong&gt; that wraps &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls&lt;/code&gt; output with Font Awesome icons and file-type-specific coloring. It was an early, influential entry in this space and directly inspired lsd’s design.&lt;/p&gt;

&lt;p&gt;Trade-offs to know about:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Requires a Ruby runtime, which adds startup overhead compared to the Rust-based tools.&lt;/li&gt;
  &lt;li&gt;Its development pace has slowed relative to eza and lsd.&lt;/li&gt;
  &lt;li&gt;If you’re already in a Ruby-heavy environment, though, it integrates naturally and doesn’t require pulling in Rust/Cargo just for a file lister.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gem &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;colorls
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;picking-one&quot;&gt;Picking one&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Want the most actively developed, most feature-complete option with strong Git integration? Go with &lt;strong&gt;eza&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Want icons on by default and a very “at a glance” visual layout? Go with &lt;strong&gt;lsd&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Already have a Ruby toolchain and don’t want another Rust binary on the system? &lt;strong&gt;colorls&lt;/strong&gt; is a reasonable, if slower, choice.&lt;/li&gt;
  &lt;li&gt;Found &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exa&lt;/code&gt; referenced somewhere? Substitute &lt;strong&gt;eza&lt;/strong&gt; — same lineage, actively maintained.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whichever one you pick, install a &lt;a href=&quot;/nerd-fonts-what-why-how-to-install/&quot;&gt;Nerd Font&lt;/a&gt; first — all four of these rely on Nerd Font or Font Awesome glyphs for their icon output, and without one you’ll just see broken-box placeholders instead of icons.&lt;/p&gt;
</description>
        <pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/linux/macos/cli/best-ls-alternatives-2026/</link>
        <guid isPermaLink="true">https://blog.masoko.net/linux/macos/cli/best-ls-alternatives-2026/</guid>
        <category>linux</category>
        <category>macos</category>
        <category>cli</category>
      </item>
      <item>
        <title>Setting Up WireGuard VPN on MikroTik (Multi-Platform Remote Access Guide)</title>
        <description>&lt;p&gt;Remote access is a cornerstone of any robust home lab or small business network. While there are many VPN flavors out there, WireGuard has quickly become the gold standard due to its incredible speed, lightweight footprint, and cryptographic security.&lt;/p&gt;

&lt;p&gt;If you run a MikroTik router (RouterOS v7+), you have a powerful enterprise-grade WireGuard server sitting right in your living room. In this article, we’ll walk through setting up WireGuard on your MikroTik router and configuring clients for both Android and Windows 11.&lt;/p&gt;

&lt;h2 id=&quot;why-wireguard-on-mikrotik&quot;&gt;Why WireGuard on MikroTik?&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Kernel-Level Speed:&lt;/strong&gt; Unlike OpenVPN, which can bottleneck weaker router CPUs, WireGuard runs directly in the RouterOS kernel, maximizing your throughput.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Silence is Golden:&lt;/strong&gt; WireGuard does not respond to unauthenticated packets. To a port scanner on the internet, your VPN port looks completely closed.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Roaming Support:&lt;/strong&gt; If your phone switches from Wi-Fi to 4G/5G, the WireGuard connection transitions instantly without dropping your session.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;phase-1-configuring-the-mikrotik-server&quot;&gt;Phase 1: Configuring the MikroTik Server&lt;/h2&gt;

&lt;p&gt;Every WireGuard topology relies on a public/private key exchange. Think of it this way: your router and your phone will each generate their own unique key pair, and then they will swap public keys to trust one another.&lt;/p&gt;

&lt;h3 id=&quot;1-create-the-wireguard-interface&quot;&gt;1. Create the WireGuard Interface&lt;/h3&gt;
&lt;p&gt;Open Winbox and navigate to &lt;strong&gt;WireGuard&lt;/strong&gt; from the left menu. Click the &lt;strong&gt;+&lt;/strong&gt; (Add) button.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Name:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wireguard1&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Listen Port:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;13231&lt;/code&gt; (Default)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click &lt;strong&gt;Apply&lt;/strong&gt;. RouterOS will instantly generate your unique Private Key and Public Key. Copy the Public Key somewhere safe; you will need it for the clients.&lt;/p&gt;

&lt;h3 id=&quot;2-assign-an-ip-subnet-to-the-vpn&quot;&gt;2. Assign an IP Subnet to the VPN&lt;/h3&gt;
&lt;p&gt;Go to &lt;strong&gt;IP -&amp;gt; Addresses -&amp;gt; + (Add)&lt;/strong&gt;. We need a dedicated internal subnet for our VPN clients.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Address:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;10.0.0.1/24&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Network:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;10.0.0.0&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Interface:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wireguard1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;3-open-the-firewall-port&quot;&gt;3. Open the Firewall Port&lt;/h3&gt;
&lt;p&gt;Go to &lt;strong&gt;IP -&amp;gt; Firewall -&amp;gt; Filter Rules -&amp;gt; + (Add)&lt;/strong&gt;. WireGuard uses UDP, so we must allow incoming traffic on our listening port.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Chain:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;input&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Protocol:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;udp&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Dst. Port:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;13231&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Action:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;accept&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Crucial:&lt;/strong&gt; Drag this rule to the very top of your Firewall input list so the traffic isn’t dropped by default drop rules.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;phase-2-connecting-an-android-device&quot;&gt;Phase 2: Connecting an Android Device&lt;/h2&gt;

&lt;p&gt;On mobile devices, configuration is a breeze thanks to visual key exchanges.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Download the official &lt;strong&gt;WireGuard&lt;/strong&gt; app from the Google Play Store.&lt;/li&gt;
  &lt;li&gt;Tap the blue &lt;strong&gt;+&lt;/strong&gt; (Plus) icon and select &lt;strong&gt;Create from scratch&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Under the &lt;strong&gt;Interface&lt;/strong&gt; section, give it a name (e.g., &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HomeVPN&lt;/code&gt;). You will see a pre-generated Public key. &lt;em&gt;Copy this key—you need to add it to MikroTik.&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Fill in the Interface details:
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Addresses:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;10.0.0.2/24&lt;/code&gt; (This is your phone’s fixed VPN IP).&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;DNS Servers:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;192.168.88.1&lt;/code&gt; (Your MikroTik’s local IP).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Tap &lt;strong&gt;Add Peer&lt;/strong&gt; at the bottom:
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Public Key:&lt;/strong&gt; Paste the MikroTik’s Public Key here.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Endpoint:&lt;/strong&gt; Your public home IP address or MikroTik DDNS, followed by the port (e.g., &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;yourhome.sn.mynetname.net:13231&lt;/code&gt;).&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Allowed IPs:&lt;/strong&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.0.0.0/0&lt;/code&gt; (Redirects all mobile internet traffic securely through your home) OR &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;192.168.88.0/24&lt;/code&gt; (Only routes traffic intended for home lab devices).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Back on MikroTik:&lt;/strong&gt; Go to the &lt;strong&gt;Peers&lt;/strong&gt; tab -&amp;gt; &lt;strong&gt;+&lt;/strong&gt;. Select &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wireguard1&lt;/code&gt;, paste your Phone’s Public Key, and set Allowed Address to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;10.0.0.2/32&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Save both sides, toggle the switch on your phone, and you are connected!&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;phase-3-connecting-a-windows-11-pc&quot;&gt;Phase 3: Connecting a Windows 11 PC&lt;/h2&gt;

&lt;p&gt;Since you can’t easily scan QR codes on a desktop, Windows configuration is done via a simple text configuration file (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.conf&lt;/code&gt;).&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Download and install WireGuard for Windows from &lt;a href=&quot;https://www.wireguard.com&quot;&gt;wireguard.com&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Click the arrow next to &lt;strong&gt;Add Tunnel&lt;/strong&gt; and choose &lt;strong&gt;Add empty tunnel…&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;A window will pop up showing a fresh Public Key. Copy this key and register it in &lt;strong&gt;MikroTik -&amp;gt; Peers&lt;/strong&gt; with the IP &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;10.0.0.3/32&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Overwrite the text box in the Windows client with the following blueprint configuration:&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-ini highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;[Interface]&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;PrivateKey&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;[YOUR_WINDOWS_PRIVATE_KEY_DO_NOT_TOUCH]&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;Address&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;10.0.0.3/24&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;DNS&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;192.168.88.1&lt;/span&gt;

&lt;span class=&quot;nn&quot;&gt;[Peer]&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;PublicKey&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;[PASTE_YOUR_MIKROTIK_PUBLIC_KEY_HERE]&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;Endpoint&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;[YOUR_PUBLIC_IP_OR_DDNS]:13231&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;AllowedIPs&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;192.168.88.0/24&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;PersistentKeepalive&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;25&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;pro-tip-split-tunneling-vs-full-tunneling-on-windows&quot;&gt;Pro-Tip: Split Tunneling vs. Full Tunneling on Windows&lt;/h3&gt;
&lt;p&gt;For desktops and laptops, it is usually best to use &lt;strong&gt;Split Tunneling&lt;/strong&gt; by setting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AllowedIPs = 192.168.88.0/24&lt;/code&gt;. This means your regular PC gaming, web surfing, and video streaming happen over your local network, while &lt;em&gt;only&lt;/em&gt; requests destined for your home lab servers get routed through the VPN tunnel.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PersistentKeepalive = 25&lt;/code&gt; line ensures that your PC sends a tiny blank packet every 25 seconds, preventing aggressive cellular or public Wi-Fi firewalls from closing your idle connection.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;troubleshooting-why-am-i-getting-0-b-received&quot;&gt;Troubleshooting: Why am I getting 0 B Received?&lt;/h2&gt;

&lt;p&gt;If your client says “Active” but the Transfer: Received counter sits stubbornly at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0 B&lt;/code&gt;, your tunnel is failing its cryptographic handshake. Check these three things:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Key Swap Mishap:&lt;/strong&gt; Double-check that you didn’t accidentally paste the router’s key into the router’s peer settings. The router must hold the client’s key, and the client must hold the router’s key.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;IP Subnet Mismatch:&lt;/strong&gt; Ensure the client IP (e.g., &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;10.0.0.3&lt;/code&gt;) matches the specific &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/32&lt;/code&gt; allowed address you assigned to that peer inside MikroTik.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;CGNAT / Dynamic IP:&lt;/strong&gt; If your ISP hides your router behind a CGNAT (Carrier-Grade NAT), a direct WireGuard handshake won’t work without a middleman server. Use MikroTik’s built-in Cloud DDNS (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/ip/cloud&lt;/code&gt;) to track dynamic IPs effortlessly.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;wrap-up&quot;&gt;Wrap Up&lt;/h2&gt;

&lt;p&gt;Once implemented, WireGuard provides a seamless, “always-on” feel. You can map network drives, access your Home Assistant dashboards, or SSH into your Linux hosts from anywhere in the world, knowing your perimeter remains completely secure.&lt;/p&gt;
</description>
        <pubDate>Thu, 25 Jun 2026 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/linux/Setting-Up-WireGuard-VPN-on-MikroTik/</link>
        <guid isPermaLink="true">https://blog.masoko.net/linux/Setting-Up-WireGuard-VPN-on-MikroTik/</guid>
        <category>linux</category>
      </item>
      <item>
        <title>Squeezelite Service Not Mixing with Browser Audio (PipeWire/PulseAudio Fix)</title>
        <description>&lt;p&gt;The Squeezelite audio player is a wonderful headless solution, but getting it to run as a reliable, shareable background service on modern Linux distributions (like Ubuntu, Debian, or Fedora, especially those using PipeWire) can be a nightmare.&lt;/p&gt;

&lt;p&gt;This post documents a common, frustrating error and the simple fix that allows Squeezelite to play music alongside other applications, like your browser (YouTube, Spotify Web, etc.).&lt;/p&gt;

&lt;h2 id=&quot;the-problem-the-audio-host-is-down-loop&quot;&gt;The Problem: The Audio “Host is Down” Loop&lt;/h2&gt;

&lt;p&gt;When setting up Squeezelite as a persistent &lt;strong&gt;systemd service&lt;/strong&gt; (often running as a low-privilege user like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;daemon&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;squeezelite&lt;/code&gt;), the service either failed to start or immediately grabbed the sound card exclusively.&lt;/p&gt;

&lt;h3 id=&quot;the-error-message&quot;&gt;The Error Message&lt;/h3&gt;

&lt;p&gt;The core issue was demonstrated by this error log, which repeats when using devices like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;default&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pulse&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[16:04:06.843393] test_open:281 playback open error: Host is down
[16:04:06.843416] output_init_common:401 unable to open output device: default
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;why-this-happens&quot;&gt;Why This Happens&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Exclusive Access:&lt;/strong&gt; When running Squeezelite with a raw hardware device (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-o hw:CARD=PCH,DEV=0&lt;/code&gt;), the application takes &lt;strong&gt;exclusive control&lt;/strong&gt; of the sound card, blocking the browser.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Environment Conflict:&lt;/strong&gt; When attempting to use the mixing devices (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-o default&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-o pulse&lt;/code&gt;), the service fails. This is because &lt;strong&gt;System Services&lt;/strong&gt; run in a minimal environment and &lt;strong&gt;cannot reliably connect&lt;/strong&gt; to the &lt;strong&gt;User Session PipeWire/PulseAudio server&lt;/strong&gt; that manages all desktop audio (including your browser). It’s a fundamental conflict between a system process and a user-level audio mixer. The “Host is down” error simply means the connection to the mixer server was refused or the socket was not found.&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;-the-easy-fix-switch-to-a-user-autostart-application&quot;&gt;✅ The Easy Fix: Switch to a User Autostart Application&lt;/h2&gt;

&lt;p&gt;The solution is to stop treating Squeezelite as a low-level “system” component and instead run it as a normal “user” application that starts &lt;strong&gt;after&lt;/strong&gt; your graphical session (and PipeWire) is fully loaded. This is the only way to guarantee it connects to the active audio mixer.&lt;/p&gt;

&lt;p&gt;This method uses a standard &lt;strong&gt;Desktop Entry (.desktop) file&lt;/strong&gt;, which works on most Linux desktop environments (GNOME, KDE, XFCE, Cinnamon, etc.).&lt;/p&gt;

&lt;h3 id=&quot;step-1-disable-the-broken-system-service&quot;&gt;Step 1: Disable the Broken System Service&lt;/h3&gt;

&lt;p&gt;Stop and permanently disable the old service file to prevent conflicts.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# Stop the running service:&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl stop squeezelite.service

&lt;span class=&quot;c&quot;&gt;# Disable the service so it doesn&apos;t try to start on the next reboot:&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl disable squeezelite.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;step-2-create-the-autostart-file&quot;&gt;Step 2: Create the Autostart File&lt;/h3&gt;

&lt;p&gt;We create a configuration file that tells your desktop environment to launch Squeezelite with the correct, shareable device name when you log in.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Create the directory&lt;/strong&gt; (if needed):&lt;/p&gt;

    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; ~/.config/autostart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Create the autostart file&lt;/strong&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;squeezelite.desktop&lt;/code&gt;):&lt;/p&gt;

    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano ~/.config/autostart/squeezelite.desktop
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Paste and save this content:&lt;/strong&gt;&lt;/p&gt;

    &lt;div class=&quot;language-ini highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;[Desktop Entry]&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;Squeezelite Player&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;Comment&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;Starts Squeezelite audio player on user login&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# Key Fix: Use the &apos;pipewire&apos; audio output device
&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;Exec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;/usr/bin/squeezelite -n mini-pc -o pipewire&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;Terminal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;false&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;Application&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;X-GNOME-Autostart-enabled&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;&lt;em&gt;If &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pipewire&lt;/code&gt; doesn’t work, try &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-o default&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-o pulse&lt;/code&gt; here, as the autostart environment is much more forgiving than the system service environment.&lt;/em&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;step-3-log-in-and-enjoy-simultaneous-audio&quot;&gt;Step 3: Log In and Enjoy Simultaneous Audio&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Log out&lt;/strong&gt; of your desktop session.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Log back in.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Squeezelite will now start automatically in the background as your user, correctly connecting to the &lt;strong&gt;PipeWire&lt;/strong&gt; mixing server. You can now stream music to Squeezelite while simultaneously watching a YouTube video or listening to other audio in your browser!&lt;/p&gt;
</description>
        <pubDate>Sun, 12 Oct 2025 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/linux/squeezelite-wont-mix-with-user-audio/</link>
        <guid isPermaLink="true">https://blog.masoko.net/linux/squeezelite-wont-mix-with-user-audio/</guid>
        <category>linux</category>
      </item>
      <item>
        <title>How I like my Ubuntu</title>
        <description>&lt;h1&gt;Widgets and Apps I install immediately after Ubuntu&lt;/h1&gt;

&lt;h2&gt;Extentions:&lt;/h2&gt;

&lt;p&gt;Dash to Panel - https://extensions.gnome.org/extension/1160/dash-to-panel/&lt;/p&gt;

&lt;p&gt;Desktop Widgets (Desktop Clock) - https://extensions.gnome.org/extension/5156/desktop-clock/&lt;/p&gt;

&lt;p&gt;ArcMenu - https://extensions.gnome.org/extension/3628/arcmenu/&lt;/p&gt;

&lt;h2&gt;Apps:&lt;/h2&gt;

&lt;p&gt;Variety - Desktop wallpaper downloader and changer&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt install variety
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;AppImageLauncher - https://github.com/TheAssassin/AppImageLauncher&lt;/p&gt;
</description>
        <pubDate>Fri, 10 Oct 2025 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/linux/how-i-like-my-ubuntu/</link>
        <guid isPermaLink="true">https://blog.masoko.net/linux/how-i-like-my-ubuntu/</guid>
        <category>linux</category>
      </item>
      <item>
        <title>Rename bluetooth device in Ubuntu</title>
        <description>&lt;p&gt;Use bt-device (part of the bluez-tools package).&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt install bt-device
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Get a list of paired devices:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bt-device -l
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;To set the new alias:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bt-device --set macaddress|name Alias &quot;New Name&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;ie:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bt-device --set S530 Alias &quot;S530 Blue&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Tue, 18 Oct 2022 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/linux/ubuntu-rename-bluetooth-device-copy/</link>
        <guid isPermaLink="true">https://blog.masoko.net/linux/ubuntu-rename-bluetooth-device-copy/</guid>
        <category>linux</category>
      </item>
      <item>
        <title>Set git origin to remember credentials</title>
        <description>&lt;p&gt;Set in your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.bashrc&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.zshrc&lt;/code&gt; file:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;export username=&quot;git-hub-token&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Then run the command below to save your credentials&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git remote set-url origin https://username:$username@github.com/username/repo-name.git
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Tue, 08 Feb 2022 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/linux/set-git-origin/</link>
        <guid isPermaLink="true">https://blog.masoko.net/linux/set-git-origin/</guid>
        <category>linux</category>
      </item>
      <item>
        <title>How to mount Samba share on boot</title>
        <description>&lt;p&gt;To mount a samba share when Ubuntu boots you need to add a line to your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/fstab&lt;/code&gt; file.
You’ll have to update the path to your samba share, local mount folder and your samba credentials.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;//remote/path/to/samba/share /local/mount/folder cifs username=your-user-name-here,password=your-password-here,rw,file_mode=0777,dir_mode=0777       0       0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;After you update your fstab file you need to mount the newly added record, you can do that with the mount command below&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mount -a
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Tue, 08 Feb 2022 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/linux/mount-sama-share-fstab/</link>
        <guid isPermaLink="true">https://blog.masoko.net/linux/mount-sama-share-fstab/</guid>
        <category>linux</category>
      </item>
      <item>
        <title>Useful CLI tools</title>
        <description>&lt;h1 id=&quot;github-repos-for-some-usefull-cli-tools&quot;&gt;Github repos for some usefull CLI tools&lt;/h1&gt;
&lt;h2 id=&quot;fd&quot;&gt;fd&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/sharkdp/fd/&quot; target=&quot;_blank&quot;&gt;https://github.com/sharkdp/fd/&lt;/a&gt;
&lt;img src=&quot;/static/img/fd-screenshot.png&quot; alt=&quot;fd screenshot&quot; /&gt;&lt;br /&gt;
fd is a program to find entries in your filesystem. It is a simple, fast and user-friendly alternative to find. While it does not aim to support all of find’s powerful functionality, it provides sensible (opinionated) defaults for a majority of use cases.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;fd-find
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Note that the binary is called &lt;strong&gt;fdfind&lt;/strong&gt; as the binary name fd is already used by another package. It is recommended that after installation, you add a link to fd by executing command &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ln -s $(which fdfind) ~/.local/bin/fd&lt;/code&gt;
***&lt;/p&gt;
&lt;h2 id=&quot;jq&quot;&gt;jq&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/stedolan/jq&quot; target=&quot;_blank&quot;&gt;https://github.com/stedolan/jq&lt;/a&gt;
&lt;img src=&quot;/static/img/jq-screenshot.png&quot; alt=&quot;jq screenshot&quot; /&gt;&lt;br /&gt;
jq is like sed for JSON data - you can use it to slice and filter and map and transform structured data with the same ease that sed, awk, grep and friends let you play with text.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;jq
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;bat&quot;&gt;bat&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/sharkdp/bat&quot; target=&quot;_blank&quot;&gt;https://github.com/sharkdp/bat&lt;/a&gt;
&lt;img src=&quot;/static/img/bat-screenshot.png&quot; alt=&quot;bat screenshot&quot; /&gt;&lt;br /&gt;
bat supports syntax highlighting for a large number of programming and markup languages.&lt;/p&gt;

&lt;p&gt;bat communicates with git to show modifications with respect to the index (see left side bar):&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;bat
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Important: If you install bat this way, please note that the executable may be installed as &lt;strong&gt;batcat&lt;/strong&gt; instead of bat (due to a name clash with another package). You can set up a bat -&amp;gt; batcat symlink or alias to prevent any issues that may come up because of this and to be consistent with other distributions:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; ~/.local/bin
&lt;span class=&quot;nb&quot;&gt;ln&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-s&lt;/span&gt; /usr/bin/batcat ~/.local/bin/bat
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;fff&quot;&gt;fff&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/dylanaraps/fff&quot; target=&quot;_blank&quot;&gt;https://github.com/dylanaraps/fff&lt;/a&gt;
&lt;img src=&quot;/static/img/fff-screenshot.png&quot; alt=&quot;fff screenshot&quot; /&gt;&lt;br /&gt;
A simple file manager written in bash.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git clone https://github.com/dylanaraps/fff
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;fff
make &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;CD on Exit:&lt;br /&gt;
To enable CD on Exit in Bash or Zsh, add this to your .bashrc, .zshrc or equivalent.&lt;br /&gt;
Run ‘fff’ with ‘f’ or whatever you decide to name the function.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;f&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
fff &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$@&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;XDG_CACHE_HOME&lt;/span&gt;:&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;HOME&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;/.cache&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/fff/.fff_d&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;duf&quot;&gt;duf&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/muesli/duf&quot; target=&quot;_blank&quot;&gt;https://github.com/muesli/duf&lt;/a&gt;
&lt;img src=&quot;/static/img/duf-screenshot.png&quot; alt=&quot;duf screenshot&quot; /&gt;&lt;br /&gt;
Disk Usage/Free Utility (Linux, BSD, macOS &amp;amp; Windows)&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;duf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;exa&quot;&gt;exa&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/ogham/exa&quot; target=&quot;_blank&quot;&gt;https://github.com/ogham/exa&lt;/a&gt;
&lt;img src=&quot;/static/img/exa-screenshot.png&quot; alt=&quot;exa screenshot&quot; /&gt;&lt;br /&gt;
exa is a modern replacement for the venerable file-listing command-line program ls that ships with Unix and Linux operating systems, giving it more features and better defaults. It uses colours to distinguish file types and metadata. It knows about symlinks, extended attributes, and Git. And it’s small, fast, and just one single binary.&lt;/p&gt;

&lt;p&gt;By deliberately making some decisions differently, exa attempts to be a more featureful, more user-friendly version of ls.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;exa
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;ohmyzsh&quot;&gt;ohmyzsh&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/ohmyzsh/ohmyzsh/&quot; target=&quot;_blank&quot;&gt;https://github.com/ohmyzsh/ohmyzsh/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Oh My Zsh is an open source, community-driven framework for managing your zsh configuration.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sh &lt;span class=&quot;nt&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;curl &lt;span class=&quot;nt&quot;&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Before using ohmyzsh you need to make sure that zsh is installed:&lt;br /&gt;
&lt;a href=&quot;https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH&quot; target=&quot;_blank&quot;&gt;zsh installation instructions&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;zsh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Plugins for ohmyzsh:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;plugins=(git macos common-aliases dirhistory zsh-autosuggestions zsh-syntax-highlighting)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;All of these plugins come with ohmyzsh and they only need to be included in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.zshrc&lt;/code&gt; except &lt;strong&gt;zsh-syntax-highlighting&lt;/strong&gt; and &lt;strong&gt;zsh-autosuggestions&lt;/strong&gt;, which needs to be installed additionally with the commands below:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git clone https://github.com/zsh-users/zsh-syntax-highlighting.git &lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;:-&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions &lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;:-&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;/plugins/zsh-autosuggestions
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;ohmyzsh themes I use:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ZSH_THEME=&quot;gallois&quot;  
ZSH_THEME=&quot;af-magic&quot;  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;btop&quot;&gt;btop&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/aristocratos/btop&quot; target=&quot;_blank&quot;&gt;https://github.com/aristocratos/btop&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/static/img/btop-screenshot.png&quot; alt=&quot;btop screenshot&quot; /&gt;&lt;br /&gt;
Resource monitor that shows usage and stats for processor, memory, disks, network and processes.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;snap &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;btop
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;httpie&quot;&gt;HTTPie&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/httpie/httpie&quot; target=&quot;_blank&quot;&gt;https://github.com/httpie/httpie&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;HTTPie is a command-line HTTP client. Its goal is to make CLI interaction with web services as human-friendly as possible. HTTPie is designed for testing, debugging, and generally interacting with APIs &amp;amp; HTTP servers. The http &amp;amp; https commands allow for creating and sending arbitrary HTTP requests. They use simple and natural syntax and provide formatted and colorized output.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;httpie
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Wed, 01 Dec 2021 00:00:00 +0000</pubDate>
        <link>https://blog.masoko.net/ubuntu/Useful-cli-tools/</link>
        <guid isPermaLink="true">https://blog.masoko.net/ubuntu/Useful-cli-tools/</guid>
        <category>ubuntu</category>
      </item>
  </channel>
</rss>
