{ lib, config, pkgs, ... }: let cfg = config.snowhawk.dwl; in { options.snowhawk.dwl = { enable = lib.mkEnableOption "dwl"; package = lib.mkOption { type = with lib.types; package; default = pkgs.dwl; apply = p: p.overrideAttrs { postInstall = '' mkdir -p $out/share/wayland-sessions install $src/dwl.desktop -Dt $out/share/wayland-sessions ''; passthru.providedSessions = [ "dwl" ]; }; }; }; config = lib.mkIf cfg.enable { services.graphical-desktop.enable = lib.mkDefault true; services.displayManager = { sessionPackages = [ cfg.package ]; defaultSession = "dwl"; }; security = { polkit.enable = lib.mkDefault true; # Uncomment to make swaylock work # pam.services.swaylock = { }; }; # environment.sessionVariables.NIXOS_OZONE_WL = "1"; programs = { dconf.enable = lib.mkDefault true; xwayland.enable = lib.mkDefault true; }; xdg.portal.wlr.enable = lib.mkDefault true; xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1050913 xdg.portal.config.dwl.default = lib.mkDefault [ "wlr" "gtk" ]; services.xserver.desktopManager.runXdgAutostartIfNone = lib.mkDefault true; environment.systemPackages = with pkgs; [ wl-clipboard wmenu foot cfg.package ]; }; }