Skip to content

Omarchy tweaks

Just some little tweaks here and there

7 min read

After installing Omarchy I usually do:

Configs

DNS

Setup -> DNS -> Cloudflare

Consult your DNS setup with:

resolvectl status

.bashrc

Add to ~/.bashrc:

~/.bashrc
# CUSTOM
# non-omarchy alias for real ls
# alias la="ls -lahF"
# omarchy alias for replaced-by-eza ls
alias la="ls -lah --classify=auto"
export PATH=~/bin:$PATH
export ERL_AFLAGS="-kernel shell_history enabled"

waybar

I change these defaults in ~/.config/waybar/config.jsonc:

~/.config/waybar/config.jsonc
{
// ...
"persistent-workspaces": {
"1": [],
"2": [],
"3": [],
"4": [],
"5": [],
"6": [],
"7": [],
"8": [],
"9": [],
"10": []
},
// ...
"clock": {
"interval": 1,
"format": "☀️ {:L%A w%V 📅 %Y / %m / %d 🕑 %H:%M:%S}",
// ...
},
// ...
"network": {
// ...
"format-wifi": "{icon} {ipaddr} ({ifname})",
"format-ethernet": "󰀂 {ipaddr} ({ifname})",
// ...
}
}

To immediately see your changes:

killall waybar && waybar &

Enable fstrim for your encrypted SSD

If you see a fstrim: /: the discard operation is not supported when running:

sudo fstrim / -v

Update your /etc/default/limine file and add :allow-discards just after some-id:root, like this:

/etc/default/limine
KERNEL_CMDLINE[default]="cryptdevice=PARTUUID=some-large-uuid:root:allow-discards ...

After updating the limine file you should run:

sudo limine-update

Enable it with:

sudo systemctl enable --now fstrim.timer

Restart your system now.

Software

Restore your backup

Mount back  and restore backup from FDE drive.

Remove unnecessary files

I don't use these:

sudo pacman -Rns 1password-cli 1password-beta \
signal-desktop spotify xournalpp claude-code \
docker docker-buildx docker-compose ufw-docker lazydocker

To remove all web apps I'm not using:

Omarchy menu -> Remove -> Web App

To remove all NPM cli commands:

rm ~/.local/bin/*

Update system

omarchy update

Desktop apps

This is the list of software I usually require at one point or another:

sudo pacman -S nethogs transmission-gtk nmap \
darktable gimp inkscape krita godot \
blender calibre obs-studio shotcut \
colordiff python-gobject python-xdg yt-dlp \
qgis python-gdal python-owslib python-psycopg2 python-pygments \
ansible inotify-tools jq \
simple-scan audacity base-devel \
libvips openslide firefox iotop \
vlc vlc-plugins-base vlc-plugins-extra \
podman pass

yt-dlp

If a video refuses to download, try with:

yt-dlp --force-generic-extractor URL
# or install python-curl_cffi

Install erlang, elixir, go, and bun with mise

To list which languages are currently installed:

mise ls

Let's install erlang:

mise ls-remote erlang
# pick a version you want, for example:
mise use erlang@29.0.1 --global

Let's install elixir:

mise ls-remote elixir
# pick a version you want, for example:
mise use elixir@1.20.0-otp-29 --global
mix local.hex
mix local.rebar
mix archive.install hex phx_new
mix archive.install hex nerves_bootstrap

Let's install node:

mise ls-remote node
# pick a version you want, for example:
mise use node@26.3.0 --global
npm i -g npm
npm i -g pnpm
pnpm setup

Let's set a minimum release age for our package managers (due to all the recent supply-chain attacks):

# pnpm in minutes
pnpm config set minimumReleaseAge 2880
# npm in days
npm config set min-release-age 2 --location=global

Let's install go:

mise ls-remote go
# pick a version you want, for example:
mise use go@1.26.4 --global

Install PostgreSQL

sudo pacman -S postgresql postgresql-libs postgis
sudo -i -u postgres
initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data/'
exit

To run the server on computer start:

sudo systemctl enable --now postgresql.service

Misc

bluetooth audio lag

To prevent bluetooth audio lagging after a period of inactivity, we need to disable suspension, in ~/.config/wireplumber/wireplumber.conf.d/bluetooth-disable-suspension.conf:

~/.config/wireplumber/wireplumber.conf.d/bluetooth-disable-suspension.conf
wireplumber.profiles = {
main = {
hooks.node.suspend = disabled
}
}

Then restart the audio services:

systemctl --user restart wireplumber.service pipewire.service

tmux + alacritty

If alacritty is somehow not forwarding your SHIFT+ENTER correctly when inside a tmux session (like when you open pi and try to add a new line to your prompt) try this in ~/.config/alacritty/alacritty.toml:

~/.config/alacritty/alacritty.toml
[keyboard]
bindings = [
#...
{ key = "Return", mods = "Shift", chars = "\u001b[13;2u" }
]

For Nvidia:

sudo pacman -S nvtop nvidia-utils

For AMD:

sudo pacman -S vulkan-radeon

Code editor

Zed

Install -> Editor -> Zed

Extensions:

  • Catppuccin
  • Catppuccin Icons
  • Dockerfile
  • Elixir
  • Emmet
  • Git Firefly
  • HTML
  • Rainbow CSV
  • SCSS & SASS
  • SQL
  • TOML
  • Vue
  • Zig

If CTRL+ENTER is opening the LLM chat window and not inserting a cursor below, in your ~/.config/zed/keymap.json:

~/.config/zed/keymap.json
[
//...
{
"context": "Editor && mode == full",
"bindings": {
"ctrl-enter": "editor::NewlineBelow",
"ctrl-shift-enter": "editor::NewlineAbove",
},
},
]

My ~/.config/zed/settings.json:

~/.config/zed/settings.json
{
"autosave": "on_window_change",
"buffer_font_size": 12,
"buffer_line_height": "comfortable",
"cursor_blink": true,
"cursor_shape": "bar",
"file_finder": { "modal_max_width": "large" },
"file_types": {
"HTML": ["*.svg"],
},
"icon_theme": "Catppuccin Mocha",
"indent_guides": {
"coloring": "indent_aware",
},
"languages": {
"CSS": {
"language_servers": [
"tailwindcss-intellisense-css",
"!vscode-css-language-server",
"...",
],
},
"Elixir": {
"language_servers": [
"expert",
"tailwindcss-language-server",
"emmet-language-server",
"!elixir-ls",
"!next-ls",
"!lexical",
"...",
],
},
"HEEx": {
"language_servers": [
"expert",
"tailwindcss-language-server",
"emmet-language-server",
"!elixir-ls",
"!next-ls",
"!lexical",
"...",
],
},
},
"prettier": {
// "plugins": ["prettier-plugin-tailwindcss"],
"semi": false,
"singleQuote": false,
},
// "lsp": {
// "vscode-css-language-server": {
// "settings": {
// "css": {
// "lint": {
// "unknownAtRules": "ignore",
// },
// },
// },
// },
// },
"show_whitespaces": "all",
"soft_wrap": "editor_width",
"ui_font_size": 14,
"tab_size": 2,
"tabs": {
"file_icons": true,
},
"theme": {
"mode": "dark",
"light": "Catppuccin Latte",
"dark": "Catppuccin Mocha",
},
}

AI tools

Let's install OpenCode and Pi:

# with pnpm
pnpm add -g --allow-build=opencode-ai opencode-ai
pnpm add -g --ignore-scripts @earendil-works/pi-coding-agent
pnpm add -g agent-browser
# or with npm
npm install -g --allow-build=opencode-ai opencode-ai
npm install -g --ignore-scripts @earendil-works/pi-coding-agent
npm install -g agent-browser

Tweak the default config in ~/.config/opencode/opencode.json so it doesn't auto-update, and add a couple of useful MCPs:

~/.config/opencode/opencode.json
{
// ...
"autoupdate": "notify",
"default_agent": "plan",
// "mcp": {
// "chrome-devtools": {
// "type": "local",
// "command": ["npx", "chrome-devtools-mcp@latest", "--executablePath=/usr/bin/chromium", "--isolated=true"],
// "enabled": false
// },
// "context7": {
// "type": "local",
// "command": ["npx", "-y", "@upstash/context7-mcp@latest"]
// },
// "playwright": {
// "type": "local",
// "command": ["npx", "@playwright/mcp@latest", "--executable-path=/usr/bin/chromium"],
// "enabled": false
// }
// }
}

Fabric

Let's install Fabric:

# Install Fabric directly from the repo
go install github.com/danielmiessler/fabric/cmd/fabric@latest
# Run the setup to set up your directories and keys
fabric --setup

ufw

If you'd like to quickly reset UFW rules:

sudo ufw reset
sudo ufw enable

Idle (desktop)

Default values in ~/.config/hypr/hypridle.conf seem too short for a desktop:

~/.config/hypr/hypridle.conf
general {
lock_cmd = omarchy-system-lock # lock screen and 1password
before_sleep_cmd = OMARCHY_LOCK_ONLY=true omarchy-system-lock # lock before suspend without scheduling display off.
after_sleep_cmd = sleep 1 && omarchy-system-wake # delay for PAM readiness, then turn on display.
inhibit_sleep = 3 # wait until screen is locked
}
# Start screensaver after 1hr
listener {
timeout = 3600
on-timeout = pidof hyprlock || omarchy-launch-screensaver
}
# Lock system after 1hr and 2 minutes (screensaver resets idle timer, so have to just do hour + 2s margin)
listener {
timeout = 3602
on-timeout = omarchy-system-lock
on-resume = omarchy-system-wake
}

Two monitors (desktop)

Check the monitors attached to your computer with:

hyprctl monitors

For my two monitor setup in ~/.config/hypr/monitors.conf:

~/.config/hypr/monitors.conf
# ...
# Comment everything above this...
# CUSTOM
monitor=HDMI-A-2,3840x2160@60,0x0,1.5
monitor=HDMI-A-1,3840x2160@60,2560x-720,1.5,transform,3
workspace=1,monitor:HDMI-A-2
workspace=2,monitor:HDMI-A-2
workspace=3,monitor:HDMI-A-2
workspace=4,monitor:HDMI-A-2
workspace=5,monitor:HDMI-A-2
workspace=6,monitor:HDMI-A-1
workspace=7,monitor:HDMI-A-1
workspace=8,monitor:HDMI-A-1
workspace=9,monitor:HDMI-A-1
workspace=10,monitor:HDMI-A-1

Fonts

To add more fonts to your system, drop them in: ~/.local/share/fonts.

Laptop

Let's upgrade our touchpad functionality a bit.
In ~/.config/hypr/input.conf:

~/.config/hypr/input.conf
gesture = 3, horizontal, workspace
gesture = 3, up, fullscreen
gestures {
workspace_swipe_invert = false
}

UI tweaks

In ~/.config/hypr/looknfeel.conf:

~/.config/hypr/looknfeel.conf
general {
gaps_in = 2
gaps_out = 0
}

More notes connected by topic, not algorithmic noise.