~/HowToSetupAndDoRicing.md

Omarchy — Developer Setup & Ricing

Omarchy Setup & Ricing — mzone

Stand: 2026-08-29 · Omarchy 4.0.1 · MacBook (i7-9750H, T2-Kernel 7.1.8-arch1-Watanare-T2-3) · bash

0. Ist-Zustand

Schon von Omarchy mitgebracht

DingStatusWo
miseaktiv, verwaltet node 26.7.0, claude, codex, gh~/.config/mise/config.toml
starshipaktiv, schlanker Prompt (dir + git)~/.config/starship.toml
yayAUR-Helper—
dockerinstalliert, Service disabled + inaktiv, User nicht in Gruppe dockersiehe §5.2
nvimLazyVim~/.config/nvim
TUI-Basisfzf zoxide eza bat ripgrep fd tmux lazygit lazydocker btop—
Theme / FontTokyo Night / JetBrainsMono Nerd Font—
BarStock-Layout, idle.screensaver 150s, idle.lock 300s~/.config/omarchy/shell.json
Hyprlandkomplett Stock, alle User-Dateien nur Kommentare~/.config/hypr/

Bereits installiert (in dieser Session, per pkexec pacman -S)

text
jdk11-openjdk 11.0.32.1     jdk21-openjdk 21.0.12.1     maven 3.9.16
jdk17-openjdk 17.0.20.1     jdk25-openjdk 25.0.4.1      uv 0.12.5    python-pipx 1.15.0

Alle vier JDKs liegen unter /usr/lib/jvm/java-<N>-openjdk und stammen aus dem offiziellen extra-Repo — sie werden also von omarchy update mitgepflegt. Kein AUR, kein Download-Layer im Home.

Hinweis: Java 25 gibt es entgegen der verbreiteten Annahme in extra.
jdk25-temurin aus dem AUR brauchst du nicht.

Noch offen — alles Weitere in diesem Dokument


1. Java 11 / 17 / 21 / 25 mit usejavaXX

1.1 Wie es funktioniert

usejava setzt JAVA_HOME und schiebt das passende bin/ an den PATH-Anfang — nur in der aktuellen Shell. Kein sudo, kein Neuladen, sofort wirksam. Andere Terminals bleiben unberührt, du kannst also links Java 21 und rechts Java 11 fahren.

Das ist bewusst nicht archlinux-java set — das ist systemweit, braucht sudo und reißt dir laufende Prozesse mit.

1.2 Einrichten

Eigene Shell-Erweiterungen kommen nach ~/.config/bash/, nicht direkt in die .bashrc — bleibt übersichtlich und lässt sich einzeln wegnehmen.

Schritt 1 — Datei anlegen:

bash
mkdir -p ~/.config/bash
cat > ~/.config/bash/java.sh <<'EOF'
# ── Java: Versionswechsel pro Shell ──────────────────────────────────────────
#   usejava        zeigt aktive + verfügbare JDKs
#   usejava 17     schaltet DIESE Shell auf Java 17
#   usejava17      Kurzform (wird für jedes installierte JDK automatisch erzeugt)
# Quelle: pacman-JDKs unter /usr/lib/jvm/java-<N>-openjdk

USEJAVA_DEFAULT=${USEJAVA_DEFAULT:-21}

usejava() {
  local v=${1:-} home
  if [[ -z $v ]]; then
    printf '☕ aktiv:     %s\n' "${JAVA_HOME:-(keins gesetzt)}"
    printf '   verfügbar: %s\n' "$_USEJAVA_VERSIONS"
    return 0
  fi
  home=/usr/lib/jvm/java-$v-openjdk
  if [[ ! -x $home/bin/javac ]]; then
    printf '✗ Kein JDK %s unter /usr/lib/jvm.\n' "$v" >&2
    printf '  verfügbar:    %s\n' "$_USEJAVA_VERSIONS" >&2
    printf '  installieren: sudo pacman -S jdk%s-openjdk\n' "$v" >&2
    return 1
  fi
  # alte JDK-bin-Pfade rauswerfen, damit der PATH nicht zuwuchert
  local -a parts keep=()
  local p newpath
  IFS=: read -r -a parts <<<"$PATH"
  for p in "${parts[@]}"; do
    [[ $p == /usr/lib/jvm/* ]] && continue
    keep+=("$p")
  done
  printf -v newpath '%s:' "${keep[@]}"
  export JAVA_HOME="$home"
  export PATH="$home/bin:${newpath%:}"
  [[ -n ${_USEJAVA_QUIET:-} ]] || printf '☕ Java %s   %s\n' "$v" "$home"
}

# Kurzform-Funktionen + Tab-Completion für jedes installierte JDK erzeugen.
# Kostet keinen einzigen Subprozess beim Shell-Start.
_USEJAVA_VERSIONS=
for _d in /usr/lib/jvm/java-*-openjdk; do
  [[ -x $_d/bin/javac ]] || continue
  _d=${_d#/usr/lib/jvm/java-}; _d=${_d%-openjdk}
  _USEJAVA_VERSIONS+="${_USEJAVA_VERSIONS:+ }$_d"
  eval "usejava${_d}() { usejava ${_d}; }"
done
unset _d
[[ -n $_USEJAVA_VERSIONS ]] && complete -W "$_USEJAVA_VERSIONS" usejava

# Default beim Shell-Start setzen (still)
_USEJAVA_QUIET=1 usejava "$USEJAVA_DEFAULT" 2>/dev/null; unset _USEJAVA_QUIET
EOF

Schritt 2 — in der .bashrc einhängen. Ans Ende von ~/.bashrc anfügen:

bash
cat >> ~/.bashrc <<'EOF'

# Eigene Shell-Erweiterungen
for _f in ~/.config/bash/*.sh; do [[ -r $_f ]] && source "$_f"; done
unset _f
EOF

Schritt 3 — neu laden und testen:

bash
exec bash
usejava            # ☕ aktiv: /usr/lib/jvm/java-21-openjdk · verfügbar: 11 17 21 25
usejava17          # ☕ Java 17   /usr/lib/jvm/java-17-openjdk
mvn -v | head -3   # Maven meldet jetzt Java 17
usejava21

Getestet — nach vier Wechseln steht weiterhin genau ein JVM-Eintrag im PATH, und mvn folgt JAVA_HOME zuverlässig.

1.3 Systemweiten Default anpassen

Pacman hat beim Installieren java-11-openjdk als System-Default gesetzt (das zuerst installierte gewinnt). Das betrifft alles, was ohne deine Shell startet: .jar-Doppelklicks, systemd-Units, IntelliJ ohne eigenes SDK.

bash
archlinux-java status                        # aktuellen Default zeigen
sudo archlinux-java set java-21-openjdk      # auf 21 ziehen

usejava überschreibt das in der Shell weiterhin — die beiden Ebenen kommen sich nicht in die Quere.

1.4 Erweiterungen

Weitere JDKs. Alias und Completion erscheinen nach dem nächsten Shell-Start automatisch, du musst nichts nachtragen:

bash
sudo pacman -S jdk8-openjdk      # → usejava8
sudo pacman -S jdk-openjdk       # aktuellstes (derzeit 26) → landet als java-26-openjdk

Anderer Default. In ~/.bashrc vor der Source-Schleife:

bash
USEJAVA_DEFAULT=17

Projektbezogen automatisch umschalten. Falls du das später willst: direnv (sudo pacman -S direnv, eval "$(direnv hook bash)"), dann pro Projekt eine .envrc mit usejava 17. Oder mise mit einer .mise.toml — das ist der Weg, wenn du versionsgenaue, CI-reproduzierbare Pins brauchst. Für den Alltag reicht usejavaXX.


2. Maven & mvnd

2.1 Installation

maven ist durch. mvnd kommt aus dem AUR und hängt hart von maven ab — darum ist beides installiert, auch wenn du im Alltag nur mvnd tippst. IDEs, CI-Skripte und ./mvnw-Wrapper erwarten ein echtes mvn auf dem PATH.

bash
omarchy pkg aur add mvnd
# oder direkt: yay -S mvnd

2.2 Die eine Falle: mvnd und JDK-Wechsel

mvnd hält eine warme JVM im Hintergrund. Wenn du mit usejava17 umschaltest, läuft der alte Daemon mit dem alten JDK weiter und baut fröhlich falsch.

bash
mvnd --status     # laufende Daemons + deren JDK
mvnd --stop       # alle stoppen — nach jedem JDK-Wechsel, vor dem nächsten Build

Wenn dich das nervt, häng das an ~/.config/bash/java.sh an — dann räumt jeder Wechsel automatisch auf:

bash
# Original unter neuem Namen sichern, dann umhüllen
eval "_usejava_core() $(declare -f usejava | tail -n +2)"
usejava() {
  local before=${JAVA_HOME:-}
  _usejava_core "$@" || return
  if command -v mvnd >/dev/null && [[ ${JAVA_HOME:-} != $before ]]; then
    mvnd --stop >/dev/null 2>&1
  fi
}

Die usejavaXX-Kurzformen rufen usejava beim Ausführen über den Namen auf und landen dadurch automatisch im Wrapper — du musst sie nicht neu erzeugen. Der Rückgabewert bleibt erhalten (usejava 99 liefert weiterhin 1), und ohne installiertes mvnd passiert schlicht nichts.

2.3 ~/.m2/toolchains.xml — der eigentliche Gewinn bei 4 JDKs

Mit Toolchains sucht sich Maven selbst das richtige JDK, unabhängig davon, welches gerade in deiner Shell aktiv ist. Ein Projekt mit <release>11</release> baut dann gegen echtes JDK 11 statt „JDK 21 im 11er-Kompatibilitätsmodus" — das ist der Unterschied, der API-Fehler zur Compile-Zeit statt in Produktion findet.

bash
cat > ~/.m2/toolchains.xml <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<toolchains xmlns="http://maven.apache.org/TOOLCHAINS/1.1.0">
  <toolchain>
    <type>jdk</type>
    <provides><version>11</version><vendor>openjdk</vendor></provides>
    <configuration><jdkHome>/usr/lib/jvm/java-11-openjdk</jdkHome></configuration>
  </toolchain>
  <toolchain>
    <type>jdk</type>
    <provides><version>17</version><vendor>openjdk</vendor></provides>
    <configuration><jdkHome>/usr/lib/jvm/java-17-openjdk</jdkHome></configuration>
  </toolchain>
  <toolchain>
    <type>jdk</type>
    <provides><version>21</version><vendor>openjdk</vendor></provides>
    <configuration><jdkHome>/usr/lib/jvm/java-21-openjdk</jdkHome></configuration>
  </toolchain>
  <toolchain>
    <type>jdk</type>
    <provides><version>25</version><vendor>openjdk</vendor></provides>
    <configuration><jdkHome>/usr/lib/jvm/java-25-openjdk</jdkHome></configuration>
  </toolchain>
</toolchains>
EOF

Im pom.xml dann:

xml
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-toolchains-plugin</artifactId>
  <version>3.2.0</version>
  <executions><execution><goals><goal>select-jdk-toolchain</goal></goals></execution></executions>
  <configuration><toolchains><jdk><version>21</version></jdk></toolchains></configuration>
</plugin>

2.4 ~/.m2/settings.xml

Brauchst du erst, wenn private Repos oder ein Mirror dazukommen. Gerüst:

xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0">
  <localRepository>${user.home}/.m2/repository</localRepository>
  <servers>
    <!-- <server><id>mzone-releases</id><username>…</username><password>…</password></server> -->
  </servers>
  <mirrors/>
  <profiles/>
</settings>

Passwörter gehören verschlüsselt: mvn --encrypt-master-password → ~/.m2/settings-security.xml, dann mvn --encrypt-password. Alternativ die Credentials in Umgebungsvariablen und per ${env.MZONE_REPO_TOKEN} referenzieren.

2.5 Praktische Aliase

Optional nach ~/.config/bash/java.sh (oder eine eigene ~/.config/bash/maven.sh):

bash
alias mvnq='mvn -q'
alias mvnci='mvn clean install'
alias mvnskip='mvn -DskipTests'
alias mvnd-restart='mvnd --stop && mvnd --status'
alias mvntree='mvn dependency:tree'
# Offline bauen — spart bei stabilem Dependency-Set viel Zeit
alias mvndo='mvnd -o'

3. Python

3.1 Die Arch-Regel

System-Python ist 3.14.7 und externally-managed. pip install --user schlägt fehl — und das ist gut so, denn es würde dir sonst Pacman-verwaltete Pakete überschreiben. Zwei saubere Wege, beide installiert:

ZweckWerkzeug
Projekt-Dependencies, venvs, Python-Versionenuv
Globale CLI-Tools (ruff, httpie, ansible…)uv tool oder pipx

~/.local/bin liegt bei Omarchy schon im PATH (default/bash/envs), du musst also kein pipx ensurepath laufen lassen.

3.2 uv im Alltag

bash
# Neues Projekt
uv init mein-projekt && cd mein-projekt
uv add requests pydantic          # Dependency + Lockfile + venv in einem Rutsch
uv run python main.py             # ohne "activate", nutzt automatisch das venv
uv sync                           # Lockfile → venv, reproduzierbar

# Bestehendes Projekt
uv venv                           # .venv anlegen
uv pip install -r requirements.txt
source .venv/bin/activate         # falls du es doch klassisch willst

# Andere Python-Versionen (unabhängig vom System-Python)
uv python install 3.11 3.12
uv python list
uv venv --python 3.11

3.3 Globale Tools

bash
uv tool install ruff              # schnell, empfohlen
uv tool list
uv tool upgrade --all

# pipx-Äquivalent, falls du es lieber magst
pipx install httpie
pipx list
Nicht beides für dasselbe Tool nutzen — sonst hast du zwei Shims im ~/.local/bin und rätselst, welcher gewinnt. Ich würde konsequent uv tool nehmen und pipx nur liegen lassen.

3.4 Optionale Aliase

bash
# ~/.config/bash/python.sh
alias venv='uv venv'
alias act='source .venv/bin/activate'
alias py='python3'
alias uvr='uv run'

4. Ricing — was sich lohnt und was nicht

4.1 Die drei Regeln

  1. Niemals etwas unter /usr/share/omarchy/ ändern. Das gehört dem Paket und wird beim nächsten omarchy update überschrieben. Lesen ist ausdrücklich erwünscht und der beste Weg, Omarchy zu verstehen.
  2. Alles Eigene kommt nach ~/.config/. Omarchy lädt seine Defaults zuerst, deine Dateien danach — du überschreibst also, statt zu ersetzen.
  3. Wenn etwas kaputtgeht: omarchy refresh <ding> legt ein Backup an und stellt den Default wieder her. omarchy refresh hyprland, omarchy refresh shell, …

Landkarte:

text
~/.config/hypr/                     Fenstermanager
  bindings.lua                        Tastenkürzel
  monitors.lua                        Displays
  input.lua                           Tastatur, Maus, Touchpad
  looknfeel.lua                       Gaps, Borders, Animationen, Rounding
  autostart.lua                       Startprogramme
  hyprsunset.conf                     Nachtlicht  (→ omarchy restart hyprsunset)
  xdph.conf                           Screensharing  (→ greift beim nächsten Login)

~/.config/omarchy/
  shell.json                          Bar-Layout, Widgets, Idle/Lock
  extensions/omarchy-menu.jsonc       Eigene Einträge im Super-Menü
  plugins/<user>.<name>/              Geklonte, editierbare Bar-Widgets
  hooks/<event>.d/                    Automatik bei Systemereignissen
  themes/<slug>/                      Eigene Themes / Overlays über Stock-Themes
  themed/<config>.tpl                 Wie ein App-Config für ALLE Themes erzeugt wird
  backgrounds/<theme-slug>/           Zusätzliche Wallpapers

~/.config/{alacritty,foot,kitty,ghostty}/    Terminals  (→ omarchy restart terminal)
~/.config/starship.toml                      Prompt
~/.config/btop/  ~/.config/lazygit/  ~/.config/nvim/

4.2 Stufe 1 — hoher Effekt, ~20 Minuten

Theme. 22 Stock-Themes sind da, du fährst Tokyo Night.

bash
omarchy theme list
omarchy theme set kanagawa          # Namen oder Slug, beides geht
omarchy theme bg next               # Wallpaper durchblättern
omarchy theme install <git-url>     # Theme aus dem Netz

Ein Theme färbt Hyprland, Bar, Terminal, btop, nvim, Chromium und die GTK-Anwendungen gemeinsam — das ist der Punkt, an dem Omarchy die meiste Arbeit abnimmt. Genau deshalb: Finger weg von per-App-Farbfummelei, sonst bricht der Theme-Wechsel.

Ein Stock-Theme anpassen — als Overlay, nicht als Kopie:

bash
mkdir -p ~/.config/omarchy/themes/tokyo-night
cp /usr/share/omarchy/themes/tokyo-night/colors.toml ~/.config/omarchy/themes/tokyo-night/
$EDITOR ~/.config/omarchy/themes/tokyo-night/colors.toml
omarchy theme set tokyo-night       # Stock wird zuerst kopiert, deine Datei gewinnt oben drauf

Nur die Dateien anlegen, die du ändern willst. Der Rest kommt weiter vom Paket und wird mitgepflegt.

Font. Bei dir sind nur 5 Monospace-Fonts installiert.

bash
omarchy font list
omarchy font current
omarchy font set "JetBrainsMono Nerd Font"
omarchy install font "Maple Mono" ttf-maplemono-nf "MapleMono NF"

Lohnende Nerd-Font-Kandidaten: ttf-cascadia-mono-nerd, ttf-iosevka-nerd, ttf-firacode-nerd, otf-monaspace-nerd. Bei einem Retina-Panel lohnt außerdem:

bash
omarchy display text size 1.1       # skaliert Bar, GTK-Apps und Terminals gemeinsam

Prompt. Dein starship.toml zeigt nur Verzeichnis + Git. Für Java-Arbeit sinnvoll — ans Ende der Datei, und $java ins format aufnehmen:

toml
format = "[$directory$git_branch$git_status]($style)$java$character"

[java]
format = "[☕$version]($style) "
style = "italic yellow"
# Nur in Java-Projekten anzeigen — starship erkennt pom.xml/build.gradle selbst
Achtung: [java] ruft java -version auf. Dein command_timeout steht auf 200 ms — das reicht auf dem i7-9750H, aber wenn der Prompt zäh wird, ist das der Verdächtige. Alternative ohne Fork: ${custom.jdk} mit command = 'basename ${JAVA_HOME:-none}'.

Terminal. Du hast alacritty, foot, kitty und ghostty parallel installiert — alle vier werden vom Theme mitgefärbt. Entscheide dich für eines:

bash
omarchy default terminal ghostty    # setzt auch Super+Return und xdg-terminal-exec
omarchy restart terminal

Kurz zur Auswahl: ghostty ist der beste Allrounder (schnell, gute Ligatur-/Font-Behandlung, native Wayland). foot ist am sparsamsten — auf einem Laptop mit Akku messbar. kitty kann Bilder und Grafik im Terminal. alacritty ist am schlichtesten. Auf einem MacBook würde ich foot oder ghostty nehmen.

4.3 Stufe 2 — Hyprland

Alle deine ~/.config/hypr/*.lua bestehen derzeit nur aus Kommentaren, du fährst also 100 % Stock. Änderungen greifen beim Speichern automatisch.

Nach jeder Änderung validieren — sonst merkst du Syntaxfehler erst, wenn was fehlt:

bash
hyprctl reload && hyprctl configerrors

Keybindings (~/.config/hypr/bindings.lua). Erst schauen, was schon belegt ist:

bash
omarchy menu keybindings --print

Ein belegtes Kürzel muss vor dem Neubelegen ge-unbind-et werden:

lua
-- SUPER+SHIFT+M: Projekt-Terminal im Publisher-Repo
o.bind("SUPER + SHIFT + M", "mzone-cli", "ghostty --working-directory=/home/mzone/gitea/vps")

-- Bestehendes Kürzel ersetzen: erst lösen, dann neu binden
hl.unbind("SUPER + F")
o.bind("SUPER + F", "Dateimanager", { launch = "nautilus" })

{ launch = "…" } statt eines nackten Strings wickelt den Start in uwsm-app — das Programm hängt dann nicht am Terminal-Prozessbaum. Für GUI-Apps immer die launch-Form nehmen.

Look'n'feel (~/.config/hypr/looknfeel.lua). Realistische Einschätzung für deine Hardware: Blur ist auf der MacBook-GPU der teuerste Effekt und kostet spürbar Akku. Animationen sind vergleichsweise billig.

lua
hl.config({
  general    = { gaps_in = 4, gaps_out = 8, border_size = 2 },
  decoration = { rounding = 8, dim_inactive = true, dim_strength = 0.12 },
})

Für maximale Akkulaufzeit unterwegs: rounding = 0, Blur aus, animations.enabled = false.

Fensterregeln. ⚠️ Die Hyprland-Syntax für Window Rules ändert sich zwischen Versionen regelmäßig. Vor dem Schreiben immer gegenprüfen: https://wiki.hypr.land/Configuring/Basics/Window-Rules/ und cat /usr/share/omarchy/default/hypr/windows.lua als Vorlage. Omarchys Helper ist o.window(match, rules).

Typischer Java-Bedarf: IntelliJs Splash-Screen und Completion-Popups verhalten sich unter Wayland ohne Regel oft daneben (eigenes Tile, falscher Fokus).

Monitore (~/.config/hypr/monitors.lua):

bash
hyprctl monitors all                 # Namen und unterstützte Modi
lua
hl.monitor({ output = "eDP-1",     mode = "3072x1920@60", position = "0x1440", scale = 2 })
hl.monitor({ output = "DP-1",      mode = "2560x1440@60", position = "0x0",    scale = 1 })

Auf dem MacBook-Retina-Panel ist scale = 2 richtig; bei scale = 1.5 matschen XWayland-Apps (u. a. ältere JetBrains-Builds).

4.4 Stufe 3 — Bar, Menü, Hooks

Bar (~/.config/omarchy/shell.json, hot-reload beim Speichern). Deine ist exakt das Default-Layout.

bash
omarchy bar move omarchy.weather --section right
omarchy bar position bottom
omarchy bar transparent toggle
omarchy bar reset

Für ein eigenes Widget — z. B. „aktives JDK" in der Bar — ein Stock-Plugin klonen statt das Paket anzufassen:

bash
omarchy plugin clone omarchy.clock
# → ~/.config/omarchy/plugins/mzone.clock/  · Speichern lädt automatisch neu

Das ist Quickshell/QML. Wenn du QML nicht magst: der Aufwand steht m. E. nur dafür, wenn du das Widget wirklich täglich ablesen willst. Ein JDK-Anzeiger in der Bar ist ohnehin fragwürdig, weil usejava pro Shell wirkt — die Bar könnte gar nicht wissen, welche Shell du meinst. Der Prompt (§4.2) ist dafür der richtige Ort.

Idle & Lock. Bei dir: Screensaver nach 150 s, Sperre nach 300 s. In Sekunden:

jsonc
"idle": { "screensaver": 600, "lock": 1200 }

Menü (~/.config/omarchy/extensions/omarchy-menu.jsonc, hot-reload). Die Datei ist bei dir noch reine Doku. Die Eltern-Ebene ergibt sich aus der Punkt-Notation der ID:

jsonc
{
  "dev": { "icon": "", "label": "Dev" },
  "dev.mzone":   { "icon": "", "label": "mzone-cli",
                   "action": "ghostty --working-directory=/home/mzone/gitea/vps" },
  "dev.mvnstop": { "icon": "", "label": "mvnd stoppen", "action": "mvnd --stop",
                   "when": "command -v mvnd" },
  "dev.docker":  { "icon": "", "label": "lazydocker",
                   "action": "omarchy-launch-or-focus-tui lazydocker" }
}

when blendet die Zeile aus, wenn das Kommando fehlschlägt; checked hängt ein ✓ an, wenn es erfolgreich ist.

Hooks — Skripte, die bei Systemereignissen laufen:

text
~/.config/omarchy/hooks/
  theme-set.d/        nach Theme-Wechsel   (Theme-Slug in $1)
  font-set.d/         nach Font-Wechsel    (Font-Name in $1)
  post-boot.d/        nach Desktop-Start
  post-update.d/      während omarchy update
  battery-low.d/      Akku niedrig         (Prozent in $1)
bash
omarchy hook install theme-set ~/bin/mein-theme-hook

In *.d/ liegen bei dir schon .sample-Dateien als Vorlage. Praktischer Anwendungsfall für dich: bei theme-set das IntelliJ-Theme nachziehen.

4.5 Was ich lassen würde

4.6 System-Pflege

bash
omarchy update                       # System + Omarchy + Migrationen
omarchy version
omarchy channel current              # stable | rc | edge | dev
omarchy debug --no-sudo --print      # Diagnose — immer mit diesen Flags
omarchy commands                     # ALLE Befehle mit Beschreibung
omarchy commands --json              # maschinenlesbar
omarchy <gruppe> --help              # z. B. omarchy theme --help

omarchy commands ist der beste Einstieg — es gibt weit mehr als man vermutet (Audio-Routing, DDC-Helligkeit für externe Monitore, Hibernation-Setup, Fingerprint, QR-Code aus dem Screenshot lesen, OCR-Textextraktion).


5. Extras

5.1 Java-IDE & LSP

IntelliJ IDEA — Community liegt in extra, Ultimate im AUR:

bash
omarchy pkg add intellij-idea-community-edition
# oder
omarchy pkg aur add intellij-idea-ultimate-edition

Für dein Spring-Boot-4.1-Projekt: in IntelliJ das Projekt-SDK explizit auf /usr/lib/jvm/java-21-openjdk setzen (File → Project Structure → SDKs), nicht auf „Detected". Sonst nimmt es den System-Default aus §1.3.

Wenn die Oberfläche unter Wayland zickt (Fokusverlust, unscharfe Schrift), im JetBrains Toolbox/idea.vmoptions: -Dawt.toolkit.name=WLToolkit erzwingt den nativen Wayland-Toolkit; das Gegenteil (-Dawt.toolkit.name=XToolkit) fällt auf XWayland zurück und ist der stabilere Fallback.

nvim als Java-Editor. Du fährst LazyVim — da ist der Weg genau einer:

vim
:LazyExtras

… lang.java auswählen und mit x aktivieren, dann nvim neu starten. LazyVim zieht nvim-jdtls, den Debug-Adapter und die Test-Integration selbst. Zusätzlich das Sprachserver-Paket:

bash
omarchy pkg aur add jdtls

jdtls braucht mindestens Java 21 zum Laufen (auch wenn es Java-11-Projekte indiziert). Da dein USEJAVA_DEFAULT auf 21 steht, passt das. Falls du mal in einer Java-11-Shell nvim startest, jdtls aber meckert, setz in der jdtls-Config ein festes JAVA_HOME.

Omarchy-integrierte Editoren (bekommen das Theme automatisch mit):

bash
omarchy install editor vscode        # bzw. zed | helix | emacs

5.2 Docker-DBs & Dev-Services

⚠️ Bei dir ist Docker installiert, aber der Dienst ist disabled und du bist nicht in der Gruppe docker (groups → mzone input wheel). Das zuerst:

bash
sudo systemctl enable --now docker
sudo usermod -aG docker "$USER"

Die Gruppenmitgliedschaft greift erst nach Neuanmeldung (nicht nur neue Shell). Zwischendurch testen: newgrp docker && docker ps.

Ein Wort zur Ehrlichkeit: usermod -aG docker ist faktisch Root-Äquivalenz — wer in der Gruppe ist, kann sich über einen Container Root auf dem Host holen. Auf einem Einzelplatz-Laptop ist das der übliche Kompromiss. Wenn dir das nicht passt, ist rootless Docker oder podman die Alternative.

Dann:

bash
omarchy install docker dbs           # interaktiver Picker: Postgres, MySQL, Redis, …

Das legt Container mit sinnvollen Dev-Defaults an (Ports gemappt, Volume persistent, Passwort gesetzt). Zu deinem Publisher-Stack passt Postgres; Keycloak läuft ja remote auf auth.maierzone.de, das brauchst du lokal nicht.

Bedienung danach: lazydocker (schon installiert).

5.3 Tailscale & Remote

bash
omarchy install service tailscale
sudo tailscale up                    # öffnet Browser zum Verknüpfen
tailscale status

Danach erreichst du deinen VPS über den MagicDNS-Namen statt über die öffentliche IP — und kannst SSH auf dem VPS auf das Tailnet beschränken.

Tailscale SSH (spart dir Key-Verteilung komplett, Auth läuft über die Tailscale-Identität):

bash
sudo tailscale up --ssh              # auf beiden Seiten
ssh mzone@<maschinenname>

SSH-Config für den klassischen Weg (~/.ssh/config):

text
Host vps
    HostName <dein-host>
    User mzone
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes
    ServerAliveInterval 60
bash
ssh-keygen -t ed25519 -C "mzone@omarchy"
ssh-copy-id vps

Weitere Bausteine aus dem Omarchy-Universum:

bash
omarchy install service 1password    # Secrets + Chromium-Extension
omarchy install service sunshine     # Remote-Desktop-Host (Moonlight-Client), öffnet LAN+Tailscale-Ports
omarchy setup security fingerprint   # Touch ID auf dem MacBook — falls der Sensor unterstützt wird

5.4 TUI-Feinschliff

Der Großteil ist schon da. Es fehlt praktisch nur:

bash
omarchy pkg add yazi                 # Dateimanager mit Bildvorschau

Sinnvolle Ergänzungen in ~/.config/bash/tui.sh:

bash
# yazi: beim Verlassen ins zuletzt besuchte Verzeichnis wechseln
y() {
  local tmp; tmp=$(mktemp -t yazi-cwd.XXXXXX) cwd
  yazi "$@" --cwd-file="$tmp"
  cwd=$(command cat -- "$tmp") && [[ -n $cwd && $cwd != "$PWD" ]] && builtin cd -- "$cwd"
  rm -f -- "$tmp"
}

alias lg='lazygit'
alias ld='lazydocker'
alias ll='eza -lah --git --icons --group-directories-first'
alias lt='eza --tree --level=2 --icons'
alias cat='bat --paging=never'

# Git-Branch per fzf wechseln
fbr() {
  local b; b=$(git branch --all | grep -v HEAD | fzf --height 40% --reverse) || return
  git checkout "$(sed 's#.*remotes/origin/##;s/^[* ] //' <<<"$b")"
}

fzf, zoxide (→ z <teilpfad>) und die fzf-Keybindings (Ctrl+R History, Ctrl+T Dateien, Alt+C cd) sind von Omarchy bereits verdrahtet — siehe /usr/share/omarchy/default/bash/init.

tmux. ~/.config/tmux/ existiert. Wenn du es ernsthaft nutzt, lohnen sich tpm + tmux-resurrect (Sessions überleben Reboots) und vim-tmux-navigator (nahtloses Ctrl+hjkl zwischen nvim-Splits und tmux-Panes).


6. Cheatsheet

bash
# ── Java ──────────────────────────────────────────────────────────
usejava                    aktives + verfügbare JDKs
usejava11 / 17 / 21 / 25   Shell umschalten (Tab-Completion aktiv)
usejava 25                 Langform
archlinux-java status      systemweiter Default
sudo archlinux-java set java-21-openjdk

# ── Build ─────────────────────────────────────────────────────────
mvn -v                     Maven + aktiv genutztes JDK
mvnd --status / --stop     Daemon prüfen / nach JDK-Wechsel stoppen
mvn dependency:tree

# ── Python ────────────────────────────────────────────────────────
uv init / add / run / sync
uv python install 3.11
uv tool install <tool>

# ── Omarchy ───────────────────────────────────────────────────────
omarchy commands           alle Befehle
omarchy theme list|set|bg next
omarchy font list|set
omarchy bar move <id> --section <left|center|right>
omarchy pkg add <pkg>      ·  omarchy pkg aur add <pkg>
omarchy install dev-env <sprache>
omarchy update  ·  omarchy debug --no-sudo --print
omarchy refresh hyprland|shell     Reset mit Backup

# ── Hyprland ──────────────────────────────────────────────────────
omarchy menu keybindings --print
hyprctl reload && hyprctl configerrors      nach JEDER .lua-Änderung
hyprctl monitors all

7. Referenzen