Skip to content

Wawona/Wawona

Repository files navigation

Wawona

Nix CI (Linux/Android) Nix CI (macOS/iOS)

Wawona is a native Wayland Compositor for macOS, iOS, and Android.

Wawona - Wayland Compositor Preview 1
More previews Wawona - Wayland Compositor Preview 2 Wawona - Wayland Compositor Preview 3

Project Vision: Read about long-term objectives in Project Goals.

FAQ

How do I build this?

  1. Use an Apple Silicon Mac.
  2. Install Nix.
  3. Configure your environment (see below).
  4. Build with the Nix flake.

Build Output Monitor (nom)

Wawona's flake includes nix-output-monitor as .#nom and in all dev shells.

  • Direct use: nom build .#wawona-macos
  • Via flake app: nix run .#nom -- build .#wawona-macos
  • In nix develop: use shortcuts nb (nom build), nd (nom develop), and ns (nom shell)

Environment Configuration

This project uses a simple .envrc file to manage your Apple Development Team ID.

  1. Create or edit .envrc:

    echo 'export TEAM_ID="your_apple_team_id_here"' > .envrc

    Replace your_apple_team_id_here with your actual Apple Development Team ID.

  2. The environment is automatically loaded when you use nix develop - no additional tools required!

For build targets and Nix pipeline details, see Compilation Guide and Nix Build System.

How do I run Weston or Waypipe?

  • Weston natively on macOS: nix run .#weston (full compositor) or nix run .#weston-terminal (terminal client)
  • Waypipe (remote apps): Configure SSH in Settings > Waypipe, set Remote Command (e.g. nix run ~/Wawona#weston-terminal), tap Run Waypipe

See Usage Guide and Settings Reference.

"I don't have nix"

hm. Fresh out of luck, I guess! ¯\_(ツ)_/¯

Why Nix?

I use Nix to maintain a clean repository free of vendored dependency source code while ensuring hermetic, reproducible builds across all platforms. Nix allows us to define precise build environments for iOS, macOS, and Android without polluting your system.

Reproducibility & Usability

  • Hermetic Builds: Every dependency, from the Rust toolchain to system libraries like libwayland or ffmpeg, is pinned to exact versions in flake.lock. This guarantees that if it builds on CI, it will build on your machine.
  • Zero-Config Environments: Running nix develop (or using direnv) automatically enters a shell with all required compilers, headers, and auxiliary tools (like xcodegen or android-sdk) ready to go.
  • Composable Modules: The flake.nix exports clean, reusable packages and development shells. You can easily integrate Wawona into other NixOS configurations or use its individual modules as building blocks for your own Wayland projects.

B*tch, I worked hard to make nix your ONLY dependency, use it!

Xcode And iOS Builds

Cross-compiling for iOS still depends on Apple's proprietary SDKs and toolchains, so Wawona now follows the same high-level pattern as Nixpkgs xcodeenv: expose the host Xcode installation as an impure Nix package, build the Rust and native dependencies with Nix, then let xcodebuild package the app.

The Apple integration layer now does four distinct jobs:

  1. Expose host Xcode into Nix through a thin xcodeenv-style wrapper.
  2. Build Rust/static dependencies such as libwawona.a and the iOS support libraries with Nix.
  3. Generate the Xcode project with store-path references to those prebuilt artifacts.
  4. Package or launch the app through first-class flake outputs.

This keeps the wrapper minimal and lets the same flow work on local machines and on GitHub macOS runners.

Common iOS outputs
  • nix build .#wawona-ios-app-sim
  • nix build .#wawona-ios-app-device
  • nix build .#wawona-ios-ipa --impure
  • nix build .#wawona-ios-xcarchive --impure
  • nix run .#wawona-ios
  • nix run .#wawona-ios-project
  • nix run .#wawona-ios-provision
Requirements
  1. Install Xcode.
  2. Select the Xcode you want to use with xcode-select, unless the default selected Xcode is already correct.
  3. For local release signing, export TEAM_ID and build with --impure so the automatic-signing path can see it.

Example:

export TEAM_ID="YOURTEAMID"
nix build .#wawona-ios-ipa --impure

Contributing & Supporting

Wawona is a massive undertaking to bring a native Wayland compositor to Apple platforms and Android, and I cannot sustain this project alone. Your support whether through code, issues, ideas, or donations is essential to its progress and survival.

You can help by:

  • Opening issues for bugs or feature requests
  • Submitting pull requests for improvements
  • Sharing ideas and suggestions
  • Spreading the word to others
  • Supporting ongoing development through donations if you find Wawona useful or believe in its goals

Thank you for being part of the journey!

Donate here: Ko‑fi: https://ko-fi.com/aspauldingcode

Share Wawona with friends!

Discord:

https://discord.gg/wHVSV52uw5

License

This project is licensed under the MIT License - see the LICENSE file for details.

Third-party dependencies (Rust crates, native libs, Android) use MIT, Apache 2.0, BSD, MPL-2.0, LGPL, or GPL as applicable. For a full list and how to disclose them, see Third-Party Licenses. A NOTICE template is in NOTICE.example.

About

A native macOS Wayland Compositor

Resources

License

Stars

Watchers

Forks

Sponsor this project

  •  

Packages

 
 
 

Contributors