{ pkgs, lib, config, ... }: let swayosd = lib.getExe' config.services.swayosd.package "swayosd-client"; pactl = lib.getExe' pkgs.pulseaudio "pactl"; grim = lib.getExe' pkgs.grim "grim"; slurp = lib.getExe' pkgs.slurp "slurp"; clipboard-copy = lib.getExe' pkgs.wl-clipboard "wl-copy"; commonOptions = import ./common-i3.nix rec { inherit config lib pkgs; menu = lib.getExe' pkgs.bemenu "bemenu-run"; terminal = if config.programs.kitty.enable then lib.getExe' config.programs.kitty.package "kitty" else lib.getExe' pkgs.foot "foot"; }; in { options.custom = with lib; { wm = { sway = { enable = mkEnableOption "Sway WM"; }; }; }; config = lib.mkIf config.custom.wm.sway.enable { services.swayosd = { enable = true; }; wayland.windowManager.sway = { enable = true; extraConfig = commonOptions.extraConfig; config = lib.mkMerge [ commonOptions.config { keybindings = { "${commonOptions.modifier}+Shift+e" = "exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit'"; "XF86AudioRaiseVolume" = "exec --no-startup-id '${swayosd} --output-volume=raise'"; "XF86AudioLowerVolume" = "exec --no-startup-id '${swayosd} --output-volume=lower'"; "XF86AudioMute" = "exec --no-startup-id '${swayosd} --output-volume=mute-toggle"; "XF86AudioMicMute" = "exec --no-startup-id '${pactl} set-source-mute @DEFAULT_SOURCE@ toggle'"; "${commonOptions.modifier}+o" = "exec --no-startup-id ${grim} -g \"\$(${slurp})\" ~/pictures/screenshots/$(date +%Y-%m-%d-%H-%M-%S).png"; "${commonOptions.modifier}+Shift+o" = "exec --no-startup-id ${grim} -g \"\$(${slurp})\" -t png - | ${clipboard-copy}"; "PRINT" = "exec --no-startup-id ${grim} -g \"\$(${slurp})\" -t png - | ${clipboard-copy}"; }; } ]; }; stylix.targets.sway.enable = true; }; }