Install Omarchy

2025-11-05

I was backing up my servers, but I realized I have my home directory as a separate mount point, so I should be able to try installing Omarchy now without thoroughly backing up all my files:

Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme0n1p1   28G   23G  3.3G  88% /
/dev/nvme1n1p1  1.8T  483G  1.3T  28% /home

After googling "Install Omarchy" I eventually found my way to this guide:

Getting Started ยท The Omarchy Manual

After reading through the guide, it looks like Omarchy will not play nicely with my separate drive mounted as /home. That's OK, I have another SSD floating around from an old OS install:

/dev/nvme0n1p6  469G  3.8G  441G   1% /mnt/ubuntu-boot

Its only 500 GB, but it should be sufficient to test out Omarchy. I've been needing to clear out this old drive, so first I went through the drive with GitHub - dundee/gdu: Fast disk usage analyzer with console interface written in Go and backed up anything I might need.

Now I should be able to install the Omarchy image without any manual modifications. Next I downloaded Balena Etcher to flash the Omarchy ISO to a USB drive.

Basic Setup: Syncthing

OK, after a lot of weird issues with my BIOS config (I couldn't find the Omarchy boot drive), I am now booted in and typing this on Omarchy!

When I say "typing this", I'm referring to typing in Obsidian (which came preinstalled), which first required setting up syncthing to get access to my notes.

I installed syncthing using the GUI:

Then enabled/started the service:

systemctl enable syncthing@quinn.service
systemctl start syncthing@quinn.service

Next phase is waiting for my workspace to sync:

For some reason, its running very slowly. But I will let it cook for now.

Monitor Setup

Next: get the refresh rate up. My monitor supports up to 175 Hz:

# See https://wiki.hyprland.org/Configuring/Monitors/
# List current monitors and resolutions possible: hyprctl monitors
# Format: monitor = [port], resolution, position, scale

# Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K.
env = GDK_SCALE,1.5
monitor=, 3440x1440@175, auto, auto

# Good compromise for 27" or 32" 4K monitors (but fractional!)
# env = GDK_SCALE,1.75
# monitor=,preferred,auto,1.666667

# Straight 1x setup for low-resolution displays like 1080p or 1440p
# env = GDK_SCALE,1
# monitor=,preferred,auto,1

# Example for Framework 13 w/ 6K XDR Apple display
# monitor = DP-5, 6016x3384@60, auto, 3
# monitor = eDP-1, 2880x1920@120, auto, 2

I first tried 165 Hz, which bricked my monitor. I had to use ctrl+alt+F3 to open a new TTY and edit the config directly which got my screen back.

Bash :(

One thing I notice that is a bit odd is that Omarchy uses bash. Given it's an opinionated build for developers, I would expect it to use zsh. I'm pretty reliant on omz for aliases and things, so this will take some adjusting. Based on this comment, maybe it will be switched sometime in the future. The main thing I look for in the terminal is sensible defaults that someone else maintains, so this is covered for me for now.

I'd like to keep the .bashrc I have simple, so I've only added an import line:

source ~/.local/share/omarchy/default/bash/rc

export PATH="$PATH:$HOME/.local/share/omarchy/bin"
# Add your own exports, aliases, and functions here.
#
# Make an alias for invoking commands you use constantly
# alias p='python'

for f in $HOME/.bashrc.d/*.sh; do
  source "$f"
done

I've added some rc scripts:

.bashrc.d/scripts.sh:

case ":$PATH:" in
  *":$HOME/.local/bin:"*)
    echo "scripts dir is already in PATH." >&2;;
  *)
    PATH="$HOME/.local/bin:$PATH" ;;
esac

.bashrc.d/dot.sh:

alias dot='git --git-dir=$HOME/code/quinn/home/.git --work-tree=$HOME'

.bashrc.d/go-installs.sh:

export GOBIN=$HOME/.local/bin

Still a bunch of other random stuff in my .zshrc, but this is just what I've encountered so far. If you're curious about the dot command, check out this comment on Hacker News. This is the oldest reference I can find to this technique, the comment author mentions getting it from somewhere else, but I couldn't find it.

Install Some Apps

It ships with Chromium, which is of course a completely useless browser, because it does not support uBlock Origin. I dream of a day when Ladybird becomes viable, but for now I will install Zen Browser. I'm going to try to use the installation utility provided by Omarchy or Hyprland or something:

From what I can tell, the stack here is Hyprland -> Alacritty -> a TUI. It's a clever solution for system UIs without a fully built-out GUI like Gnome.

Next I need to setup 1Password (also comes preinstalled ๐ŸŽ‰)

At this point, things are looking pretty good. Next, I'm going to try writing some code. First thing is to get used to neovim/lazyvim. The guide has some simple commands to use:

  • Space Space - Fuzzy-find any file in the current directory.
  • Space S G - Search all files using grep with a preview.
  • Space E - Toggle the file tree on/off.
  • Ctrl + W W - Hop from the file tree to the editor and back.
  • Shift + H - Move left between the open tabs (vim calls them buffers).
  • Shift + L - Move right between the open tabs.
  • Space B D - Close a tab.
  • Space B O - Close all other tabs but the current.
  • Space G G - Launch LazyGit in a floating pane from the current directory.
  • Space U W - Toggle soft wrap.

These were enough to get me going, and I could explore the space menu for more useful commands. We'll be coding in Go today, so I'll first need to install the dev tools for go:

This doesn't include the LSP, so I had to add this into ~/.config/nvim/lua/config/lazy.lua:

require("lazy").setup({
  spec = {
    { import = "lazyvim.plugins.extras.lang.go" },

This needs to go before { import = "plugins" }, apparently.

It seems to work fairly well. I think I'm going to stop and retreat to development on Windows via ssh for the time being.

Final Thoughts

The Good

At various points i started digging into various aspects of the OS to try to understand them better. It really is interesting how cohesive the OS is, while having very little custom/dedicated code. For example, the "GUI" for installing apps is really just a TUI, and that TUI is actually just a heavily configured fzf command:

To me, this is a brilliant usage of whats already out there to create a solid "unified" desktop experience. Its more enjoyable for me to use compared to Gnome or KDE, which take on the full burden of producing GUIs for all system tasks like package management, which always (IMO) ends up feeling like an incomplete knock-off of Mac OS or Windows.

I'd like to call out some of the incredible projects that make up Omarchy:

The Bad

Out of everything so far, the only gripe I have is bash being used over zsh. I thought the majority of coders use zsh these days, but I could be wrong. Most of my config is in my .zshrc so I am having to port some of that over. I don't think it is reasonable to expect an option to choose your shell given the "opinionated" nature of the project, so the only option would be to switch the project to zsh. This wouldn't be necessary for all of the scripts, just the ones that manage rc files for the user.

On the subject of "opinionated", I truly do not care that I now have Zoom installed on my OS. It's easy enough to remove. Having all the apps I use (1Password, Tailscale, Signal, Spotify, etc) preinstalled is great. However, having an app chooser menu limited to opting out of commercial or closed-source apps would probably make this way more accessible for the broader linux community.

Probably the most annoying "opinionated default" is that mailto links open hey.com =/ as well as Basecamp being preinstalled. Also, the lack of reference to the author of Omarchy in this article is intentional.