diff --git a/nixos/modules/programs/sway.nix b/nixos/modules/programs/sway.nix index 107e783c0c2..2b69851b340 100644 --- a/nixos/modules/programs/sway.nix +++ b/nixos/modules/programs/sway.nix @@ -31,6 +31,7 @@ let extraOptions = cfg.extraOptions; withBaseWrapper = cfg.wrapperFeatures.base; withGtkWrapper = cfg.wrapperFeatures.gtk; + isNixOS = true; }; in { options.programs.sway = { @@ -120,8 +121,11 @@ in { systemPackages = [ swayPackage ] ++ cfg.extraPackages; etc = { "sway/config".source = mkOptionDefault "${swayPackage}/etc/sway/config"; - #"sway/security.d".source = mkOptionDefault "${swayPackage}/etc/sway/security.d/"; - #"sway/config.d".source = mkOptionDefault "${swayPackage}/etc/sway/config.d/"; + "sway/config.d/nixos.conf".source = pkgs.writeText "nixos.conf" '' + # Import the most important environment variables into the D-Bus and systemd + # user environments (e.g. required for screen sharing and Pinentry prompts): + exec dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK + ''; }; }; security.pam.services.swaylock = {}; diff --git a/pkgs/applications/window-managers/sway/default.nix b/pkgs/applications/window-managers/sway/default.nix index 2636d9100d5..03abea94a2e 100644 --- a/pkgs/applications/window-managers/sway/default.nix +++ b/pkgs/applications/window-managers/sway/default.nix @@ -4,6 +4,8 @@ , pango, cairo, libinput, libcap, pam, gdk-pixbuf, librsvg , wlroots, wayland-protocols, libdrm , nixosTests +# Used by the NixOS module: +, isNixOS ? false }: stdenv.mkDerivation rec { @@ -27,6 +29,10 @@ stdenv.mkDerivation rec { }) ]; + postPatch = lib.optionalString isNixOS '' + echo -e '\ninclude /etc/sway/config.d/*' >> config.in + ''; + nativeBuildInputs = [ meson ninja pkg-config wayland scdoc ]; diff --git a/pkgs/applications/window-managers/sway/wrapper.nix b/pkgs/applications/window-managers/sway/wrapper.nix index 319023eb2e5..e83d4e7d628 100644 --- a/pkgs/applications/window-managers/sway/wrapper.nix +++ b/pkgs/applications/window-managers/sway/wrapper.nix @@ -4,6 +4,8 @@ , withBaseWrapper ? true, extraSessionCommands ? "", dbus , withGtkWrapper ? false, wrapGAppsHook, gdk-pixbuf, glib, gtk3 , extraOptions ? [] # E.g.: [ "--verbose" ] +# Used by the NixOS module: +, isNixOS ? false }: assert extraSessionCommands != "" -> withBaseWrapper; @@ -11,6 +13,7 @@ assert extraSessionCommands != "" -> withBaseWrapper; with lib; let + sway = sway-unwrapped.override { inherit isNixOS; }; baseWrapper = writeShellScriptBin "sway" '' set -o errexit if [ ! "$_SWAY_WRAPPER_ALREADY_EXECUTED" ]; then @@ -19,16 +22,16 @@ let fi if [ "$DBUS_SESSION_BUS_ADDRESS" ]; then export DBUS_SESSION_BUS_ADDRESS - exec ${sway-unwrapped}/bin/sway "$@" + exec ${sway}/bin/sway "$@" else - exec ${dbus}/bin/dbus-run-session ${sway-unwrapped}/bin/sway "$@" + exec ${dbus}/bin/dbus-run-session ${sway}/bin/sway "$@" fi ''; in symlinkJoin { - name = "sway-${sway-unwrapped.version}"; + name = "sway-${sway.version}"; paths = (optional withBaseWrapper baseWrapper) - ++ [ sway-unwrapped ]; + ++ [ sway ]; nativeBuildInputs = [ makeWrapper ] ++ (optional withGtkWrapper wrapGAppsHook); @@ -48,5 +51,5 @@ in symlinkJoin { passthru.providedSessions = [ "sway" ]; - inherit (sway-unwrapped) meta; + inherit (sway) meta; }