diff --git a/nixos/modules/programs/sway.nix b/nixos/modules/programs/sway.nix index fc8a06d106a..3591893ff3c 100644 --- a/nixos/modules/programs/sway.nix +++ b/nixos/modules/programs/sway.nix @@ -1,13 +1,61 @@ { config, pkgs, lib, ... }: with lib; -{ - options.programs.sway.enable = mkEnableOption "sway"; - config = mkIf config.programs.sway.enable { - environment.systemPackages = [ pkgs.sway pkgs.xwayland ]; +let + cfg = config.programs.sway; + sway = pkgs.sway; + + swayWrapped = pkgs.writeScriptBin "sway" '' + #! ${pkgs.stdenv.shell} + ${cfg.extraSessionCommands} + PATH="${sway}/bin:$PATH" + exec ${pkgs.dbus.dbus-launch} --exit-with-session "${sway}/bin/sway" + ''; + swayJoined = pkgs.symlinkJoin { + name = "sway-wrapped"; + paths = [ swayWrapped sway ]; + }; +in +{ + options.programs.sway = { + enable = mkEnableOption "sway"; + + extraSessionCommands = mkOption { + default = ""; + type = types.lines; + example = '' + export XKB_DEFAULT_LAYOUT=us,ru + export XKB_DEFAULT_OPTIONS=grp:alt_shift_toggle, + export QT_QPA_PLATFORM=wayland + export QT_WAYLAND_DISABLE_WINDOWDECORATION="1" + ''; + description = '' + Shell commands executed just before sway is started. + ''; + }; + + extraPackages = mkOption { + type = with types; listOf package; + default = with pkgs; [ ]; + example = literalExample '' + with pkgs; [ + i3status + xwayland j4-dmenu-desktop dunst + qt5.qtwayland + imagemagick + ] + ''; + description = '' + Extra packages to be installed system wide. + ''; + }; + }; + + config = mkIf cfg.enable { + environment.systemPackages = [ swayJoined ] ++ cfg.extraPackages; security.wrappers.sway = { - source = "${pkgs.sway}/bin/sway"; + source = "${swayJoined}/bin/sway"; capabilities = "cap_sys_ptrace,cap_sys_tty_config=eip"; owner = "root"; group = "sway"; @@ -15,5 +63,8 @@ with lib; }; users.extraGroups.sway = {}; + + hardware.opengl.enable = mkDefault true; + fonts.enableDefaultFonts = mkDefault true; }; } diff --git a/pkgs/applications/window-managers/sway/default.nix b/pkgs/applications/window-managers/sway/default.nix index 8de87d2e8fd..6227ccd2c9f 100644 --- a/pkgs/applications/window-managers/sway/default.nix +++ b/pkgs/applications/window-managers/sway/default.nix @@ -1,8 +1,9 @@ { stdenv, fetchFromGitHub -, makeWrapper, cmake, pkgconfig, asciidoc, libxslt, docbook_xsl -, wayland, wlc, libxkbcommon, pixman, fontconfig, pcre, json_c, dbus_libs -, pango, cairo, libinput, libcap, xwayland, pam, gdk_pixbuf, libpthreadstubs +, cmake, pkgconfig, asciidoc, libxslt, docbook_xsl +, wayland, wlc, libxkbcommon, pcre, json_c, dbus_libs +, pango, cairo, libinput, libcap, pam, gdk_pixbuf, libpthreadstubs , libXdmcp +, buildDocs ? true }: stdenv.mkDerivation rec { @@ -17,28 +18,17 @@ stdenv.mkDerivation rec { }; nativeBuildInputs = [ - makeWrapper cmake pkgconfig - asciidoc libxslt docbook_xsl - ]; + cmake pkgconfig + ] ++ stdenv.lib.optional buildDocs [ asciidoc libxslt docbook_xsl ]; buildInputs = [ - wayland wlc libxkbcommon pixman fontconfig pcre json_c dbus_libs - pango cairo libinput libcap xwayland pam gdk_pixbuf libpthreadstubs + wayland wlc libxkbcommon pcre json_c dbus_libs + pango cairo libinput libcap pam gdk_pixbuf libpthreadstubs libXdmcp ]; - patchPhase = '' - sed -i s@/etc/sway@$out/etc/sway@g CMakeLists.txt; - ''; + enableParallelBuilding = true; - makeFlags = "PREFIX=$(out)"; cmakeFlags = "-DVERSION=${version}"; - installPhase = "PREFIX=$out make install"; - - LD_LIBRARY_PATH = stdenv.lib.makeLibraryPath [ wlc dbus_libs ]; - preFixup = '' - wrapProgram $out/bin/sway \ - --prefix LD_LIBRARY_PATH : "${LD_LIBRARY_PATH}"; - ''; meta = with stdenv.lib; { description = "i3-compatible window manager for Wayland"; diff --git a/pkgs/development/libraries/wlc/default.nix b/pkgs/development/libraries/wlc/default.nix index 95a8603e08c..7fcf4fbbe5f 100644 --- a/pkgs/development/libraries/wlc/default.nix +++ b/pkgs/development/libraries/wlc/default.nix @@ -1,11 +1,17 @@ -{ stdenv, fetchFromGitHub, cmake, pkgconfig -, wayland, pixman, libxkbcommon, libinput, libxcb, xcbutilwm, xcbutilimage, mesa -, libdrm, udev, libX11, libXdamage, systemd, dbus_libs, wayland-protocols -, libpthreadstubs, libXau, libXdmcp, libXext, libXxf86vm +{ stdenv, fetchFromGitHub, fetchpatch, cmake, pkgconfig +, wayland, pixman, libxkbcommon, libinput, xcbutilwm, xcbutilimage, mesa_noglu +, libX11, dbus_libs, wayland-protocols +, libpthreadstubs, libXdmcp, libXext , withOptionalPackages ? true, zlib, valgrind, doxygen }: -stdenv.mkDerivation rec { +let + # for 0.0.10 + xwaylandPatch = fetchpatch { + url = "https://github.com/Cloudef/wlc/commit/a130f6006560fb8ac02fb59a90ced1659563f9ca.diff"; + sha256 = "0kzcbqklcyg8bganm65di8cif6dpc8bkrsvkjia09kr92lymxm2c"; + }; +in stdenv.mkDerivation rec { name = "wlc-${version}"; version = "0.0.10"; @@ -17,16 +23,21 @@ stdenv.mkDerivation rec { sha256 = "09kvwhrpgkxlagn9lgqxc80jbg56djn29a6z0n6h0dsm90ysyb2k"; }; + patches = [ + xwaylandPatch + ]; + nativeBuildInputs = [ cmake pkgconfig ]; buildInputs = [ - wayland pixman libxkbcommon libinput libxcb xcbutilwm xcbutilimage mesa - libdrm udev libX11 libXdamage systemd dbus_libs wayland-protocols - libpthreadstubs libXau libXdmcp libXext libXxf86vm ] + wayland pixman libxkbcommon libinput xcbutilwm xcbutilimage mesa_noglu + libX11 dbus_libs wayland-protocols + libpthreadstubs libXdmcp libXext ] ++ stdenv.lib.optionals withOptionalPackages [ zlib valgrind doxygen ]; doCheck = true; checkTarget = "test"; + enableParallelBuilding = true; meta = with stdenv.lib; { description = "A library for making a simple Wayland compositor";