nixos/modules/dwl.nix

114 lines
2.6 KiB
Nix

{ lib, config, pkgs, inputs, ... }:
let
cfg = config.snowhawk.dwl;
in
{
options.snowhawk.dwl = {
enable = lib.mkEnableOption "dwl";
package = lib.mkOption {
type = with lib.types; package;
default = inputs.zdwl.packages."x86_64-linux".default;
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 = {
enable = true;
sessionPackages = [ cfg.package ];
defaultSession = "dwl";
# TODO: greetd?
sddm = {
enable = lib.mkDefault true;
wayland.enable = lib.mkDefault true;
};
};
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 = {
enable = true;
wlr.enable = lib.mkDefault true;
extraPortals = [
pkgs.xdg-desktop-portal-gtk
pkgs.xdg-desktop-portal-wlr
];
};
# 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.variables = {
QT_QPA_PLATFORM = "wayland;xcb";
MOZ_ENABLE_WAYLAND = 1;
SDL_VIDEODRIVER = "wayland,x11"; # TODO: Test me
_JAVA_AWT_WM_NONREPARENTING = 1;
XDG_CURRENT_DESKTOP = "dwl";
XDG_SESSION_DESKTOP = "dwl";
};
environment.systemPackages = with pkgs; [
grim
slurp
satty
dwlmsg
wdisplays
xorg.xlsclients
wl-clipboard
wmenu
kitty
cfg.package
pipewire-controller
(pkgs.writeShellApplication {
name = "sattySnap";
runtimeInputs = [ satty grim gawk gnugrep dwlmsg ];
text =
let
sattyArgs = lib.cli.toGNUCommandLineShell { } {
early-exit = true;
filename = "-";
fullscreen = true;
initial-tool = "crop";
};
in
''
grim -o "$(dwlmsg -g | grep "selmon 1" | awk '{ print $1 }')" - | satty ${sattyArgs}
'';
})
];
home-manager.sharedModules = [
{ snowhawk.satty.enable = lib.mkDefault true; }
];
};
}