# Installation



## Package Installation [#package-installation]

mangowm is available as a pre-built package on several distributions. Choose your distribution below.

***

### AerynOS [#aerynos]

mangowm is available in the **AerynOS package repository**.

You can install it using the `moss` package manager:

```bash
sudo moss install mangowm
```

* The Default config will be located at `/usr/share/defaults/mango`.

***

### Arch Linux [#arch-linux]

mangowm is available in the &#x2A;*Arch User Repository (AUR)**.

You can install it using an AUR helper like `yay` or `paru`:

```bash
yay -S mangowm-git
```

> **Tip:** This package pulls the latest git version, ensuring you have the newest features and fixes.

***

### Fedora [#fedora]

The package is in the third-party **Terra repository**. First, add the Terra Repository.

> **Warning:** Both commands require root privileges. Use `sudo` if needed.

```bash
dnf install --nogpgcheck --repofrompath 'terra,https://repos.fyralabs.com/terra$releasever' terra-release
```

Then, install the package:

```bash
dnf install mangowm
```

***

### Gentoo [#gentoo]

The package is hosted in the community-maintained **GURU** repository.

1. **Add the GURU repository**

   ```bash
   emerge --ask --verbose eselect-repository
   eselect repository enable guru
   emerge --sync guru
   ```

2. **Unmask packages**
   Add the required packages to your `package.accept_keywords` file:
   * `gui-libs/scenefx`
   * `gui-wm/mangowm`

3. **Install mango**
   ```bash
   emerge --ask --verbose gui-wm/mangowm
   ```

***

### Guix System [#guix-system]

The package definition is described in the source repository.

1. **Add mango channel**
   Add to `$HOME/.config/guix/channels.scm`:

   ```scheme
   (cons (channel
           (name 'mangowm)
           (url "https://github.com/mangowm/mango.git")
           (branch "main"))
         %default-channels)
   ```

2. **Install**
   After running `guix pull`, you can install mangowm:

   ```bash
   guix install mangowm
   ```

   Or add it to your system configuration using the mangowm module:

   ```scheme
   (use-modules (mangowm))

   (packages (cons*
               mangowm-git
               ... ;; Other packages
               %base-packages))
   ```

> **Tip:** For more information, see the [Guix System documentation](https://guix.gnu.org/manual/devel/en/html_node/Channels.html).

***

### NixOS [#nixos]

The repository provides a Flake with a NixOS module.

1. **Add flake input**

   ```nix
   # flake.nix
   {
     inputs = {
       nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
       mangowm = {
         url = "github:mangowm/mango";
         inputs.nixpkgs.follows = "nixpkgs";
       };
       # other inputs ...
     };
   }
   ```

2. **Import the NixOS module**

   **Option A — Import in `configuration.nix`:**

   ```nix
   # configuration.nix (or any other file that you import)
   {inputs, ...}: {
     imports = [
       inputs.mangowm.nixosModules.mango
       # .. other imports ...
     ];

     # ...
   }
   ```

   **Option B — Import directly in flake:**

   ```nix
   # flake.nix
   {
     # ...

     outputs = { self, nixpkgs, mangowm, ...}@inputs: let
       inherit (nixpkgs) lib;
       # ...
     in {
       nixosConfigurations.YourHostName = lib.nixosSystem {
         modules = [
           mangowm.nixosModules.mango # or inputs.mangowm.nixosModules.mango
           # other imports ...
         ];
       };
     }
   }
   ```

3. **Enable the module**

   ```nix
   # configuration.nix (or any other file that you import)
   {
     programs.mango.enable = true;
   }
   ```

4. **Start mango on login**

   The following are common examples. Refer to the official NixOS documentation for full configuration options.

   **Option A — greetd:** Autologin on first start; login screen after logout.

   ```nix
   services.greetd = {
     enable = true;
     settings = {
       initial_session = {
         command = "mango";
         user = "your-username"; # auto-login on first start, no password required
       };
       default_session = {
         command = "${pkgs.greetd.tuigreet}/bin/tuigreet --cmd mango";
         user = "greeter";
       };
     };
   };
   ```

   **Option B — Display manager autologin:** Autologin via an existing display manager (e.g. SDDM, GDM). [`addLoginEntry`](/docs/nix-options#addloginentry) (default: `true`) automatically registers mango as a session.

   ```nix
   services.displayManager = {
     defaultSession = "mango"; # derived from mango.desktop filename
     autoLogin = {
       enable = true;
       user = "your-username";
     };
   };
   ```

   **Option C — getty autologin:** No login screen, boots directly into mango on TTY1.

   For bash/zsh:

   ```nix
   services.getty.autologinUser = "your-username";

   environment.loginShellInit = ''
     [ "$(tty)" = /dev/tty1 ] && exec mango
   '';
   ```

   For fish:

   ```nix
   services.getty.autologinUser = "your-username";

   programs.fish.loginShellInit = ''
     if test (tty) = /dev/tty1
         exec mango
     end
   '';
   ```

5. **All available options**

   See [Nix Module Options](/docs/nix-options) for the full list of NixOS and Home Manager options.

***

### PikaOS [#pikaos]

mangowm is available in the **PikaOS package repository**.

You can install it using the `pikman` package manager:

```bash
pikman install mangowm
```

***

## Building from Source [#building-from-source]

If your distribution isn't listed above, or you want the latest unreleased changes, you can build mangowm from source.

> **Info:** Ensure the following dependencies are installed before proceeding:
>
> * `wayland`
> * `wayland-protocols`
> * `libinput`
> * `libdrm`
> * `libxkbcommon`
> * `pixman`
> * `libdisplay-info`
> * `libliftoff`
> * `hwdata`
> * `seatd`
> * `pcre2`
> * `cjson`
> * `pixman`
> * `xorg-xwayland`
> * `libxcb`

You will need to build `wlroots` and `scenefx` manually as well.

1. **Build wlroots**
   Clone and install the specific version required (check README for latest version).

   ```bash
   git clone -b 0.19.3 https://gitlab.freedesktop.org/wlroots/wlroots.git
   cd wlroots
   meson build -Dprefix=/usr
   sudo ninja -C build install
   ```

2. **Build scenefx**
   This library handles the visual effects.

   ```bash
   git clone -b 0.4.1 https://github.com/wlrfx/scenefx.git
   cd scenefx
   meson build -Dprefix=/usr
   sudo ninja -C build install
   ```

3. **Build mangowm**
   Finally, compile the compositor itself.
   ```bash
   git clone https://github.com/mangowm/mango.git
   cd mango
   meson build -Dprefix=/usr
   sudo ninja -C build install
   ```
