Add aarch64 support for Omarchy 3.x
Building upon what @nilszeilon did in #876 this reworks things quite a bit, especially around the initial user creation to help folks on a new asahi-alarm m1/m2 install (or fresh parallels VM created through archboot) get their non-root user created so we can execute the omarchy install automatically as that new user.
The changes include architecture detection, platform-specific package management, bootloader configuration, and custom binary handling for aarch64.
TL;DR;
It should work on any new aarch64 VM (tested with Parallels and VMware) as well as Asahi-Alarm for m1/m2 macs.
On a VM
Get the parallels or vmware images with wget & sudo installed (or install Arch on your own VM w/ the necessary deps). Both of these downloads are good through Dec 12th. If you need a new one after that, ping me and I can try to help.
Once your VM is booted, if you're using Parallels, choose "Install Parallels Tools" from the "Action" menu. If you're using VMware you do not have to manually initiate any VMware Tools installation, it's fully automated.
Finally after logging into the VM as root execute the wget command below 👇 Protip: that wget url should be in the bash history of both VMs if you press the up arrow on the keyboard a few times.
wget -qO- https://raw.githubusercontent.com/jondkinney/armarchy/amarchy-3-x/boot.sh | OMARCHY_REPO=jondkinney/armarchy OMARCHY_REF=amarchy-3-x bash
If you want to type in a shorter url, this shortlink will expand to the above: curl -fsSL hdwy.link/armarchy-3-x | bash you can inspect it by omitting the | bash first if you like which will just print the text it's going to pipe to bash.
On Asahi Alarm (for M1/M2 Macs)
Do the install from within macOS (IMPORTANT: choose the minimal option when prompted) once complete, it'll have you reboot into Arch. Log in as the root user (password: root).
Next, setup wifi with: nmcli device wifi connect <SSID> password <password> then install wget with pacman -S wget and finally, manually type the wget command above ☝️ noting the (accidental) difference between the fork name "aRmarchy" and branch name "amarchy" without the "r" (sorry about that!).
Note: I've generally not had a problem with installing over wifi when testing Asahi-Alarm on my M1 Max MacBook Pro w/ 32gb RAM, but YMMV. Use ethernet for a more stable experience.
Key Features
- Full ARM64 architecture support for both virtualized environments (Parallels) and bare metal (Asahi Linux)
- It probably would work on a Pi, too?
- Automatic architecture detection with special handling for Asahi Linux systems
- Platform-specific package management with fallback strategies for (some) missing ARM packages
Major Changes
1. Architecture Detection & Environment Setup
- Early detection of ARM architecture (aarch64/arm64) in
install.sh - Asahi Linux detection through multiple methods (OS release, kernel name, installed packages)
- Environment variables (OMARCHY_ARM, ASAHI_ALARM) for conditional logic throughout installation
2. Package Management
Repository Configuration
- ARM-specific pacman configuration (pacman.conf.arm) with:
- Arch Linux ARM repositories (core, extra, alarm, aur)
- Asahi Linux ARM repository for Apple Silicon specific packages
- Disabled multilib (not available on ARM)
- Omarchy repository placeholder (currently unavailable for ARM)
- Custom mirrorlists:
- mirrorlist.arm for Arch Linux ARM mirrors
- mirrorlist.asahi-alarm for Asahi-specific packages
Package Installation Strategy
- Split package lists:
- omarchy-base.packages: Cross-platform packages
- omarchy-arm.packages: ARM-specific requirements
- omarchy-x86.packages: x86_64-only packages
- Yay AUR helper installed on ARM for packages not in official repos
- Custom installation scripts for ARM packages unavailable through standard channels
3. Audio System Configuration
- Critical
pipewire-jackinstallation in preflight to preventjack2conflicts - Asahi audio support with
asahi-audiopackage - DRM content support via
widevinefromasahi-alarmrepository - Custom manual bild of the Omarchy microfork of Chromium to support
widevine
4. Application Support
Custom ARM Installations
- 1Password: Direct download and installation from official ARM64 tarball
- Obsidian: ARM64 AppImage installation with desktop integration
- Omarchy Chromium: Custom ARM64 build (v139.0.7258.154-2) with widevine support
- Omarchy LazyVim: Built from source for ARM compatibility (no arm omarchy mirror avail)
- Walker: Prebuilt ARM64 binary to avoid long compilation times (and lock to currently included x86 version)
- ASDControl: Prebuilt ARM64 binary for Apple Silicon display control
Vulkan Configuration
- Walker compatibility fix: Added Vulkan ICD configuration for ARM64 (VK_ICD_FILENAMES environment variable)
- Note from jon: @nilszeilon recently added this, it may work, but may also install too new of a version through yay? I'm hard-coding the prebuild walker binary for now, but this could prove useful in the future.
5. Bootloader Configuration
Limine Support
- ARM64 Limine bootloader support with:
-
BOOTAA64.EFIinstallation for UEFI ARM systems - Architecture-aware kernel detection (uses
Imageinstead ofvmlinuz) - Modified
mkinitcpiohooks (nomicrocodeon ARM) - Automatic skip for Asahi Linux (uses U-Boot)
- Also skip for VMware (for now) since VMware can't find the config file for some reason.
- I hope to fix this in the future
-
Boot Configuration
- Conditional bootloader setup based on platform:
- x86_64: Standard Limine with
microcode, UKI support - ARM64 (non-Asahi): Limine without
microcode - Asahi Linux: Skip Limine installation (U-Boot managed)
- VMware: Skip Limine installation (for now)
- x86_64: Standard Limine with
6. Virtual Machine Detection
- Screensaver disabled in virtual machines through hypridle configuration
-
systemd-detect-virtintegration to detect VM environments
7. Helper Scripts Updates
Updated Scripts
-
omarchy-refresh-pacman-mirrorlist: Architecture-awaremirrorlistselection -
omarchy-snapshot: Architecture-specific restoration tools -
omarchy-limine-update: ARM64 kernel detection support, updateslimine.confautomatically.
New Scripts
- limine-arm64.sh: ARM64-specific Limine installation
- Multiple ARM installation scripts in install/arm_install_scripts/
8. Error Handling & Compatibility
Graceful Degradation
-
mkinitcpiowarnings: Continue on non-fatal warnings (missingfsckhelpers, for example) - Package availability: Fallback strategies for missing ARM packages
- Binary compatibility: Prebuilt binaries for performance-critical applications
Platform-Specific Fixes
- Yaru icon cache: Manual update required on ARM
- Build dependencies: Handled through temporary yay installation
Testing Environments
- Arch Linux ARM in Parallels Desktop VMs
- Arch Linux ARM in VMware Desktop VMs
- Asahi Linux ARM on Apple Silicon Macs (M1/M2)
- Dual boot required, on Limine, only U-Boot.
- Fresh installations via archboot ISO
Migration Notes
- Existing
x86_64installations are unaffected - ARM support is automatically detected and configured
- No manual intervention required for standard installations as a root user after account / user details are entered.
- Does support choosing an existing non-root user if one is detected!
- Also has checks to ensure required data is provided and valid (first name, last name, email)
- Allows quitting the script with ctrl+c
Future Improvements
- Omarchy repository support for ARM64 packages (pending) cc: @dhh @ryanrhughes
- Native ARM builds for currently prebuilt binaries
- Additional ARM-specific optimizations
##Breaking Changes
None (hopefully) - all changes are intended to be additive and maintain backward compatibility with existing x86_64 installations. At least, that's the goal.
Dependencies
- Arch Linux ARM or Asahi Linux ARM base system
- Standard Arch Linux ARM repositories
- Asahi Linux ARM repository (for Apple Silicon systems)
Install Video
Here's a video showing the full install process. If you slow it down to 0.25x you can scrub around to a point of interest and sort of see what's going on.
https://share.cleanshot.com/rmD5JKqY
Fin!
And with any luck, you'll be greeted with a lovely Tokyo Night!
VMware vs Parallels
When installing to VMware, we automatically add the Open VMware Tools. Note that currently the clipboard does not synchronize even with VMware Tools properly installed.
We also have to add some env vars on VMware to allow Hyprland to load properly. However, note that this likely performs worse than parallels because it's doing all of the rendering through software instead of using any discrete GPU capabilities. I think Parallels uses some discrete GPU because these settings are not necessary for it to work on Parallels. So I'd recommend Parallels, but VMware is free, so choose what you want.
env = WLR_NO_HARDWARE_CURSORS,1
env = WLR_RENDERER_ALLOW_SOFTWARE,1
env = WLR_RENDERER,pixman
env = __GLX_VENDOR_LIBRARY_NAME,mesa
env = LIBGL_ALWAYS_SOFTWARE,1
You also need to enable 3d acceleration in VMware (this is already done in the provided download image)
Parallels Tools
We handle the VMware tools automatically, but we can't do the same for Parallels. It's pretty simple though, the installer will error out and tell you what to do if you don't have the Parallels Tools mounted. The easiest path is to just choose "Install Parallels Tools" from the "Action" menu before running the Omarchy wget install command. The installer will take it from there!
With Parallels Tools installed, make sure you set two critical settings to have the best experience. The first one at the Parallels Desktop preferences level, the second one at the VM configuration level.
This ensures that command (super) + space will work inside of the VM and not trigger the macOS spotlight shortcut.
This allows for the mouse to flow in/out of the VM window (if you're not in full screen) without having to manually release the mouse cursor by pressing ctrl + option.
Just saw this PR as I was working on getting my Asahi Alarm setup working with Omarchy (using your and @nilszeilon's older branches) but running into issues. Switched to this with a half broken setup and it seems to have sorted it out. Still early days as I just booted into Hyprland, but looking very favorable even for a system in a strange state. Great work! 🙌
(Oh yeah, M1 MacBook Air here)
Brilliant work! @jondkinney This is going bring a bell of a lot of people to Omarchy.
Am I correct here by saying that the idea is that bare metal users install Asahi Alarm with minimal installation first and then wget the omarchy installation script like in the @nilszeilon 's discussion page?
Am I correct here by saying that the idea is that bare metal users install Asahi Alarm with minimal installation first and then wget the omarchy installation script like in the @nilszeilon 's discussion page?
Yep! The exact command is mentioned in the PR description above. References my fork and new 3.x branch.
wget -qO- https://raw.githubusercontent.com/jondkinney/armarchy/amarchy-3-x/boot.sh | OMARCHY_REPO=jondkinney/armarchy OMARCHY_REF=amarchy-3-x bash
@jondkinney coming here from #876. I used my VMware Fusion VM as prepared via https://github.com/jondkinney/armarchy/blob/vm-testing/full_install_guide.md, then ran this installer script.
Still got the issue with Limine claiming not to find a configuration, although I went and checked everything. I opened a thread in the omarchy-install-help Discord channel as well where I dumped all outputs.
The installer definitely had an issue with the nvme partitions, and couldn't create the boot entry at first. It couldn't parse the disk name correctly from the output. I went through the steps manually.
Otherwise the installer went through.
After booting with Grub instead, I tried to start Hyprland directly from the TTY, but it crashes.
Is it just me or are things broken when trying to remove packages/webapps/anything? I tried to remove docker and it wouldn't go away, same for typora
Thanks for this @jondkinney!! Got it working with an M1 macbook air and it works great! I'm still thinkering with the os, it's my first linux experience, but loving it so far.
I had to install obsidian through the AUR, obsidian-appimage worked great.
I suspect there are a couple of things not set up properly with the web apps and chromium based on the behaviors I saw on videos, they dont get tiled automatically, but i suspect is something with chromium cause i cant open a chromium window if i have a webapp open...
I found this settings for the monitor to work great with the macbook air display, the default won't show Btop in a quarter tile because the size is smaller than 24px,
env = GDK_SCALE,2.1
monitor= eDP-1, 2560x1600@60, auto, 1.666667
I'll try to dive into the documentations on the weekend and try to wrap my head around the os so i can better understand what's going on. thanks for everything!
neat turn key solution! anyone any luck running amd64 AUR packages (amd64 Appimage inside actually)
I had to install obsidian through the AUR, obsidian-appimage worked great.
Obsidian should have been installed automatically for you. Was it not?
Edit: it's possible that the state of the repo at the time you installed was missing the fuse2 package. If so, that would prevent Obsidian from launching. This should be fixed.
I suspect there are a couple of things not set up properly with the web apps and chromium based on the behaviors I saw on videos, they dont get tiled automatically, but i suspect is something with chromium cause i cant open a chromium window if i have a webapp open...
Yea, not sure what's causing that. We're manually installing the chromium micro-fork since the micro-fork isn't available to us on ARM just yet through the omarchy package mirror. I'm going to look into this today.
Edit: I changed the way that chromium is installed. I think it should tile properly now. See https://github.com/basecamp/omarchy/pull/1897#issuecomment-3352490231 for more details.
Finally (allocated 16Gb for system)
update
experienced lockscreen app died
I suspect there are a couple of things not set up properly with the web apps and chromium based on the behaviors I saw on videos, they dont get tiled automatically, but i suspect is something with chromium cause i cant open a chromium window if i have a webapp open...
I updated the way we're installing chromium yesterday to grab the omarchy-chromium-bin from the AUR instead of manually installing it. I think this will fix those issues for you if you reinstall. If you've customized too much and can't easily reinstall, then try to remove the existing chromium install and get it from the AUR with yay -S somarchy-chromium-bin. In particular, you want to ensure that /usr/bin/chromium is actually a bash script, not the chromium binary. The chromium binary should be located at /usr/lib/chromium/chromium.
The beginning of /usr/bin/chromium should look like this.
So to uninstall the existing chromium you may have to remove that file that manually and ensure it gets recreated when installing the bin from the AUR. Though I've not explicitly tried this, so I may be missing some other steps. But hopefully this points you in the right direction.
This looks great, @jondkinney -- Thank you for sharing your work! 💯
One question: is this supposed to cover only VMs or physical machines (Mx Macs) as well? In your description, you mention:
It should work on any new aarch64 VM (though only tested with Parallels so far) as well as Asahi-Alarm for m1/m2 macs.
But all the comments seem to mention "Parallels" only 🤔
One question: is this supposed to cover only VMs or physical machines (Mx Macs) as well? All the comments seem to mention "Parallels" only 🤔
It works for m1/m2 macs through Asahi Alarm, and it works with Parallels and VMware with Parallels tools and VMware tools automatically installed, respectively. VMware tools is fully automatic, but on Parallels you have to mount the Parallels Tools ISO first by choosing "Actions > Install Parallels Tools" from the Parallels menus prior to executing the wget omarchy install command. If you do that, it'll detect that mounted ISO and install the parallels tools for you, automatically.
In the TL;DR there's a section about how to install it on Asahi-Alarm on physical m1/m2 macs. And at the end of the description there's a note about VMware vs Parallels.
Hey! Just tried this on a partition on my M2 Pro laptop. I've been trying both your patches and nilszelion stuff originally, but I've run into different issues every time. I decided this morning to try again with a clean install of asahi this time since just running the command was stopping at a random point, and the command stopped at the same random point :(
It basically asks me if I want to create a new user or not, sets up the user, asks for git config stuff, and then exits the installation completely after saying "Removing temporary passwordless sudo".
Is there anything blatantly obvious that I am missing? How can I better debug this issue?
The Omarchy fomo is real 😂
Edit: Added picture of wget command output
Hey! Just tried this on a partition on my M2 Pro laptop.
Hey @Kylar13 -- How did you partition your M2 disk? Did you keep the macOS partition intact, and was able to get back to macOS? I'm afraid Arch bootloader will mess with boot options and lock me out of macOS.
The Omarchy fomo is real 😂
It is! hahaha
Hey @Kylar13 -- How did you partition your M2 disk? Did you keep the macOS partition intact, and was able to get back to macOS? I'm afraid Arch bootloader will mess with boot options and lock me out of macOS.
Just used the asahi installer, it takes care of making the partitions and requires confirmation for all actions so you can follow along to what it is doing! If at any point you need to reinstall or erase Arch, this link explains how the partitions are set up quite well and how to manage them.
They way the boot order is set up by the installer is Asahi as default and then showing boot options in the macOS bootloader if you long press the power button. It's only once you go into Asahi that you get the grub bootloader.
It basically asks me if I want to create a new user or not, sets up the user, asks for git config stuff, and then exits the installation completely after saying "Removing temporary passwordless sudo".
Sorry about that! It was a silly mistake on my part that caused that immediate exit as a command I was running to check if we're in virtualization or not was returning a non-zero exit code. It is fixed in the latest update to this branch. Please try again! You should also see a much prettier overall experience as I tuned the Asahi Alarm install with ASCII instead of ANSI / unicode characters so it works properly and looks good.
The Omarchy fomo is real 😂
Indeed! Hope you get to see this 👇 on your m1 soon!
Sorry about that! It was a silly mistake on my part that caused that immediate exit as a command I was running to check if we're in virtualization or not was returning a non-zero exit code. It is fixed in the latest update to this branch. Please try again! You should also see a much prettier overall experience as I tuned the Asahi Alarm install with ASCII instead of ANSI / unicode characters so it works properly and looks good.
Hell yeah!! I was able to finish the install, thanks a lot for your work man.
Indeed! Hope you get to see this 👇 on your m1 soon!
![]()
Just FYI, I in fact did not get this screen, just the following:
I does say that the installation completed, and I did get into omarchy after manually rebooting, so everything did work, but just so you're aware
Just FYI, I in fact did not get this screen, just the following
I does say that the installation completed, and I did get into omarchy after manually rebooting, so everything did work, but just so you're aware
Thanks for the screenshot! I had some wrong paths to the images in there from local testing, so when I fixed those I thought it would fix that error, too. But it was something else. I think my latest push will have this sorted. Not that you necessairily need to try the install again, unless you're feeling extra ambitious. Thanks again.
I’m getting this error while trying to install Omarchy using your script on the VMware Fusion image you provided.
My setup: Omarchy running on VMware Fusion 13.6.4 (24832108) on macOS Tahoe 26.1 in a Macbook Pro M4
I noticed this in the full log
Thank you for your work!
@BrielOtero Looks like the AUR was down while you were trying to install. I have some enhancements for that github fallback in a branch that I'm testing and I also just rebased to omarchy's dev branch. If you want to point to this branch as the OMARCHY_REF and test, hopefully it'll work to better resolve the deps for YARU. https://github.com/jondkinney/armarchy/tree/amarchy-3-x-dev
Just specify OMARCHY_REF=amarchy-3-x-dev everything else is the same in that wget command documented in the description here.
Is it just me or are things broken when trying to remove packages/webapps/anything? I tried to remove docker and it wouldn't go away, same for typora
I was able to successfully remove the 3 google webapps (contacts, photos, calendar) and they no longer show in the application list in the super + space menu, which happened immediately.
Then when I went to remove all the docker things, that also worked (the packages uninstalled successfully), but the "Docker" desktop app does still show in the application menu/list.
To remove that you just need to remove the Docker.desktop entry that walker/elephant reads.
rm ~/.local/share/applications/Docker.desktop
After doing that walker immediately stopped showing "Docker" in the list. I didn't have to refresh walker or reboot or anything.
Removing Typora successfully removed the package, and deleted the desktop entry. So I think we just need to figure out which docker package we tie into the uninstall for to remove the desktop entry. It's almost certainly lazydocker since that's what the desktop entry launches.
This is a fantastic work, @jondkinney ! I installed yesterday from the dev branch (OMARCHY_REF=amarchy-3-x-dev) and I notice a few things:
- Setting up the wifi in Asahi before running the script only works when specifying the
wlan0inteface:nmcli device wifi connect "<SSID>" password "<password>" ifname wlan0(not a problem with your script, of course, but I hope it helps others). - The setup failed from the beginning trying to install git. I later realized that problem is that the the geo-configured Omarchy mirrors were unavailable. Setting up the
deandeumirrors fixed the issue for me. - Natural scrolling, once set to
on, only works in terminal, but it doesn't work in other apps such as Chrome or Obsidian. - I was able to install Microsoft Edge from AUR, but nothing happens when choosing Edge from the apps menu.
- When you update Omarchy via the Update menu, it always reports that the kernel was updated and you need to restart.
I didn't move forward because my muscle memory needs natural scrolling 😅 but I hope to run this soon. The system is super fast and lightweight. Thank you!
@BrielOtero Looks like the AUR was down while you were trying to install. I have some enhancements for that github fallback in a branch that I'm testing and I also just rebased to omarchy's dev branch. If you want to point to this branch as the OMARCHY_REF and test, hopefully it'll work to better resolve the deps for YARU. https://github.com/jondkinney/armarchy/tree/amarchy-3-x-dev
Just specify
OMARCHY_REF=amarchy-3-x-deveverything else is the same in that wget command documented in the description here.
After 20 attempts, I finally managed to install it!
However, something went wrong — I got this issue on the first boot, and there’s no UI appearing.
I’m not sure which logs I can look at to diagnose the problem.
Still rocking omarchy after a couple weeks, any ideas on what the best approach would be to upgrade @jondkinney?
PSA - I've deleted amarchy-3-x-dev since the main amarchy-3-x is the most up to date, and will continue to be. In fact, amarchy-3-x runs Omarchy 3.1+ as it's fully rebased to the latest on dev as of the release of Omarchy 3.1.
@Kylar13 as to your question about how to upgrade, I'd recommend
- Open a terminal and navigate to
~/.local/share/omarchy - Launch
lazygit - Stash all of your changes
- Press capital A (to stage all modified and untracked files)
- Press capital S (to bring up the stash menu)
- Press capital U (to stash all changes including untracked files)
- Optionally give the stash a name, or just press enter
- Tab to the branch list and pull by pressing the
pkey - Tab to the stash pane and press the space key to apply the stash
- Note, this will keep the stash in the stash list (rather than the
gkey popping the stash) in case there are conflicts/issues and you need to abort, reset, pull, whatever, keeping your stashed changes safe.
- Note, this will keep the stash in the stash list (rather than the
- Either the stash will apply without issue/warning/conflicts and you're upgraded...OR resolve conflicts as they arise in lazygit (look up a video if you haven't done this before) and then you'll be upgraded once all conflicts are resolved.
Note: this screen shot doesn't show the stash pane. It's the last one, so just tab until that's focused.
However, something went wrong — I got this issue on the first boot, and there’s no UI appearing.
I’m not sure which logs I can look at to diagnose the problem.
@BrielOtero - this was due to the way the ~/.local/share/omarchy/default/hypr/autostart.sh was handling executing the commands when launching hyprland. I fixed it with a custom script https://github.com/basecamp/omarchy/pull/1897/files#diff-c1cf8d2dde07ed746045565e9e514a7990903a366d067c40d03379201db26fdfR2 which is also referenced in the autostart file, itself https://github.com/basecamp/omarchy/pull/1897/files#diff-ba572be45d4f09469c0bcacb29a18016d8244d393bd19ccfa15830eefd3ec23dR1
If you stash any changes, and pull, then apply those changes, you should be "upgraded". I gave a more in-depth guide here https://github.com/basecamp/omarchy/pull/1897#issuecomment-3422142628
However, something went wrong — I got this issue on the first boot, and there’s no UI appearing.
I’m not sure which logs I can look at to diagnose the problem.
@BrielOtero - this was due to the way the
~/.local/share/omarchy/default/hypr/autostart.shwas handling executing the commands when launching hyprland. I fixed it with a custom script https://github.com/basecamp/omarchy/pull/1897/files#diff-c1cf8d2dde07ed746045565e9e514a7990903a366d067c40d03379201db26fdfR2 which is also referenced in the autostart file, itself https://github.com/basecamp/omarchy/pull/1897/files#diff-ba572be45d4f09469c0bcacb29a18016d8244d393bd19ccfa15830eefd3ec23dR1If you stash any changes, and pull, then apply those changes, you should be "upgraded". I gave a more in-depth guide here #1897 (comment)
@jondkinney Thanks a lot! I got it running, and it works amazingly well. Really impressive work!
Hi I know the supported methods are through Parallels/VMware Fusion but I was trying it on UTM hoping that I could use software rendering (since I had tested Arch for aarch64 on UTM and managed to get hyprland working with software rendering) - however I'm running into a few issues and unable to get it to fallback to software rendering, I can see the omarchy splash screen, then theres a blinking cursor where I got back to the tty to debug what happened.
I know this is quite outside the scope but was just curious at getting it to run on UTM without hardware acceleration.
...on UTM hoping that I could use software rendering
Where are you specifying the software rendering? We have to do this for VMware as well, and I write it to the default/hypr/envs.conf here https://github.com/basecamp/omarchy/pull/1897/files#diff-edac98df7e6402cd650fc2447f4679b4d381d1e5cc0b3367003a5216ede878ffR51 maybe give that a shot?
I’m not sure which logs I can look at to diagnose the problem.