From 0f6411596efe3d78bc097ca3d8438688931b5002 Mon Sep 17 00:00:00 2001 From: n <54501296+2hexed@users.noreply.github.com> Date: Sun, 21 Dec 2025 23:40:52 +0530 Subject: [PATCH] nixos/mangowc: module implementation --- nixos/modules/programs/wayland/mangowc.nix | 50 ++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 nixos/modules/programs/wayland/mangowc.nix diff --git a/nixos/modules/programs/wayland/mangowc.nix b/nixos/modules/programs/wayland/mangowc.nix new file mode 100644 index 000000000000..18744f0e8b4d --- /dev/null +++ b/nixos/modules/programs/wayland/mangowc.nix @@ -0,0 +1,50 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + cfg = config.programs.mangowc; +in +{ + options.programs.mangowc = { + enable = lib.mkEnableOption "MangoWC, a Wayland compositor based on dwl and scenefx"; + + package = lib.mkPackageOption pkgs "mangowc" { + default = [ "mangowc" ]; + example = "pkgs.mangowc.override { enableXWayland = false; }"; + }; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = [ cfg.package ]; + + # Necessary Wayland plumbing + xdg.portal = { + enable = true; + + extraPortals = with pkgs; [ + xdg-desktop-portal-wlr + xdg-desktop-portal-gtk + ]; + + config.mango = { + default = [ + "gtk" + ]; + + "org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ]; + "org.freedesktop.impl.portal.ScreenCast" = [ "wlr" ]; + "org.freedesktop.impl.portal.ScreenShot" = [ "wlr" ]; + + # wlr does not have this interface, let gtk handle + "org.freedesktop.impl.portal.Inhibit" = [ "gtk" ]; + }; + }; + + # Set up the session for Display Managers (GDM, SDDM, etc.) + services.displayManager.sessionPackages = [ cfg.package ]; + }; +}