summary refs log tree commit diff
path: root/pkgs/applications/window-managers
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/window-managers')
-rw-r--r--pkgs/applications/window-managers/2bwm/default.nix4
-rw-r--r--pkgs/applications/window-managers/afterstep/default.nix22
-rw-r--r--pkgs/applications/window-managers/awesome/default.nix10
-rw-r--r--pkgs/applications/window-managers/berry/default.nix28
-rw-r--r--pkgs/applications/window-managers/bevelbar/default.nix4
-rw-r--r--pkgs/applications/window-managers/bspwm/default.nix6
-rw-r--r--pkgs/applications/window-managers/bspwm/unstable.nix31
-rw-r--r--pkgs/applications/window-managers/btops/default.nix4
-rw-r--r--pkgs/applications/window-managers/cage/default.nix26
-rw-r--r--pkgs/applications/window-managers/cage/wlroots-0_14.patch36
-rw-r--r--pkgs/applications/window-managers/cagebreak/default.nix95
-rw-r--r--pkgs/applications/window-managers/cardboard/default.nix118
-rw-r--r--pkgs/applications/window-managers/clfswm/default.nix4
-rw-r--r--pkgs/applications/window-managers/cwm/default.nix8
-rw-r--r--pkgs/applications/window-managers/dwl/default.nix92
-rw-r--r--pkgs/applications/window-managers/dwm/default.nix48
-rw-r--r--pkgs/applications/window-managers/dwm/dwm-status.nix25
-rw-r--r--pkgs/applications/window-managers/dwm/git.nix37
-rw-r--r--pkgs/applications/window-managers/dzen2/default.nix8
-rw-r--r--pkgs/applications/window-managers/e16/default.nix62
-rw-r--r--pkgs/applications/window-managers/evilwm/default.nix4
-rw-r--r--pkgs/applications/window-managers/fbpanel/default.nix13
-rw-r--r--pkgs/applications/window-managers/fluxbox/default.nix8
-rw-r--r--pkgs/applications/window-managers/fvwm/default.nix48
-rw-r--r--pkgs/applications/window-managers/herbstluftwm/default.nix77
-rw-r--r--pkgs/applications/window-managers/herbstluftwm/test-path-environment.patch10
-rw-r--r--pkgs/applications/window-managers/hikari/default.nix47
-rw-r--r--pkgs/applications/window-managers/i3/altlayout.nix25
-rw-r--r--pkgs/applications/window-managers/i3/auto-layout.nix26
-rw-r--r--pkgs/applications/window-managers/i3/balance-workspace.nix23
-rw-r--r--pkgs/applications/window-managers/i3/blocks-gaps.nix14
-rw-r--r--pkgs/applications/window-managers/i3/blocks.nix4
-rw-r--r--pkgs/applications/window-managers/i3/default.nix20
-rw-r--r--pkgs/applications/window-managers/i3/easyfocus.nix6
-rw-r--r--pkgs/applications/window-managers/i3/gaps.nix24
-rw-r--r--pkgs/applications/window-managers/i3/i3-ratiosplit.nix26
-rw-r--r--pkgs/applications/window-managers/i3/i3-resurrect.nix22
-rw-r--r--pkgs/applications/window-managers/i3/i3ipc-glib.nix6
-rw-r--r--pkgs/applications/window-managers/i3/layout-manager.nix14
-rw-r--r--pkgs/applications/window-managers/i3/lock-blur.nix21
-rw-r--r--pkgs/applications/window-managers/i3/lock-color.nix14
-rw-r--r--pkgs/applications/window-managers/i3/lock-fancy-rapid.nix4
-rw-r--r--pkgs/applications/window-managers/i3/lock-fancy.nix6
-rw-r--r--pkgs/applications/window-managers/i3/lock.nix10
-rw-r--r--pkgs/applications/window-managers/i3/pystatus.nix6
-rw-r--r--pkgs/applications/window-managers/i3/status-rust.nix44
-rw-r--r--pkgs/applications/window-managers/i3/status.nix10
-rw-r--r--pkgs/applications/window-managers/i3/wk-switch.nix4
-rw-r--r--pkgs/applications/window-managers/i3/wmfocus.nix16
-rw-r--r--pkgs/applications/window-managers/i3/workstyle.nix27
-rw-r--r--pkgs/applications/window-managers/i3/wsr.nix33
-rw-r--r--pkgs/applications/window-managers/icewm/default.nix118
-rw-r--r--pkgs/applications/window-managers/ion-3/default.nix6
-rw-r--r--pkgs/applications/window-managers/jwm/0001-Fix-Gettext-Requirement.patch14
-rw-r--r--pkgs/applications/window-managers/jwm/default.nix40
-rw-r--r--pkgs/applications/window-managers/jwm/jwm-settings-manager.nix8
-rw-r--r--pkgs/applications/window-managers/kbdd/default.nix16
-rw-r--r--pkgs/applications/window-managers/labwc/default.nix73
-rw-r--r--pkgs/applications/window-managers/larswm/default.nix6
-rw-r--r--pkgs/applications/window-managers/leftwm/default.nix25
-rw-r--r--pkgs/applications/window-managers/lemonbar/default.nix31
-rw-r--r--pkgs/applications/window-managers/lemonbar/xft.nix24
-rw-r--r--pkgs/applications/window-managers/lwm/default.nix4
-rw-r--r--pkgs/applications/window-managers/matchbox/default.nix8
-rw-r--r--pkgs/applications/window-managers/neocomp/default.nix37
-rw-r--r--pkgs/applications/window-managers/notion/default.nix10
-rw-r--r--pkgs/applications/window-managers/openbox/default.nix10
-rw-r--r--pkgs/applications/window-managers/oroborus/default.nix6
-rw-r--r--pkgs/applications/window-managers/pekwm/default.nix45
-rw-r--r--pkgs/applications/window-managers/phosh/default.nix136
-rw-r--r--pkgs/applications/window-managers/picom/default.nix94
-rw-r--r--pkgs/applications/window-managers/qtile/default.nix19
-rw-r--r--pkgs/applications/window-managers/ratpoison/default.nix6
-rw-r--r--pkgs/applications/window-managers/river/default.nix73
-rw-r--r--pkgs/applications/window-managers/sawfish/default.nix86
-rw-r--r--pkgs/applications/window-managers/smallwm/default.nix4
-rw-r--r--pkgs/applications/window-managers/spectrwm/default.nix6
-rw-r--r--pkgs/applications/window-managers/stalonetray/default.nix4
-rw-r--r--pkgs/applications/window-managers/stumpish/default.nix4
-rw-r--r--pkgs/applications/window-managers/stumpwm/default.nix103
-rw-r--r--pkgs/applications/window-managers/stumpwm/fix-module-path.patch16
-rw-r--r--pkgs/applications/window-managers/sway/bg.nix15
-rw-r--r--pkgs/applications/window-managers/sway/contrib.nix6
-rw-r--r--pkgs/applications/window-managers/sway/default.nix33
-rw-r--r--pkgs/applications/window-managers/sway/fix-paths.patch11
-rw-r--r--pkgs/applications/window-managers/sway/idle.nix8
-rw-r--r--pkgs/applications/window-managers/sway/load-configuration-from-etc.patch38
-rw-r--r--pkgs/applications/window-managers/sway/lock-effects.nix31
-rw-r--r--pkgs/applications/window-managers/sway/lock-fancy.nix6
-rw-r--r--pkgs/applications/window-managers/sway/lock.nix8
-rw-r--r--pkgs/applications/window-managers/sway/wrapper.nix19
-rw-r--r--pkgs/applications/window-managers/sway/wsr.nix33
-rw-r--r--pkgs/applications/window-managers/sxhkd/default.nix8
-rw-r--r--pkgs/applications/window-managers/tabbed/default.nix6
-rw-r--r--pkgs/applications/window-managers/taffybar/default.nix20
-rw-r--r--pkgs/applications/window-managers/tinywl/default.nix12
-rw-r--r--pkgs/applications/window-managers/tinywm/default.nix4
-rw-r--r--pkgs/applications/window-managers/trayer/default.nix6
-rw-r--r--pkgs/applications/window-managers/vwm/default.nix12
-rw-r--r--pkgs/applications/window-managers/waybox/default.nix47
-rw-r--r--pkgs/applications/window-managers/wayfire/applications.nix29
-rw-r--r--pkgs/applications/window-managers/wayfire/default.nix24
-rw-r--r--pkgs/applications/window-managers/wayfire/wcm.nix18
-rw-r--r--pkgs/applications/window-managers/wayfire/wf-config.nix19
-rw-r--r--pkgs/applications/window-managers/wayfire/wf-shell.nix10
-rw-r--r--pkgs/applications/window-managers/weston/default.nix26
-rw-r--r--pkgs/applications/window-managers/windowchef/default.nix27
-rw-r--r--pkgs/applications/window-managers/windowlab/default.nix8
-rw-r--r--pkgs/applications/window-managers/windowmaker/default.nix19
-rw-r--r--pkgs/applications/window-managers/windowmaker/dockapps/AlsaMixer-app.nix38
-rw-r--r--pkgs/applications/window-managers/windowmaker/dockapps/alsamixer.app.nix27
-rw-r--r--pkgs/applications/window-managers/windowmaker/dockapps/default.nix20
-rw-r--r--pkgs/applications/window-managers/windowmaker/dockapps/libdockapp.nix30
-rw-r--r--pkgs/applications/window-managers/windowmaker/dockapps/wmCalClock.nix38
-rw-r--r--pkgs/applications/window-managers/windowmaker/dockapps/wmcalclock.nix32
-rw-r--r--pkgs/applications/window-managers/windowmaker/dockapps/wmsm-app.nix43
-rw-r--r--pkgs/applications/window-managers/windowmaker/dockapps/wmsm.app.nix29
-rw-r--r--pkgs/applications/window-managers/windowmaker/dockapps/wmsystemtray.nix24
-rw-r--r--pkgs/applications/window-managers/wio/default.nix67
-rw-r--r--pkgs/applications/window-managers/wmderland/0001-remove-flto.patch13
-rw-r--r--pkgs/applications/window-managers/wmderland/default.nix49
-rw-r--r--pkgs/applications/window-managers/wmderlandc/default.nix32
-rw-r--r--pkgs/applications/window-managers/wmfs/default.nix4
-rw-r--r--pkgs/applications/window-managers/wmii-hg/default.nix13
-rw-r--r--pkgs/applications/window-managers/xmonad/log-applet/default.nix15
-rw-r--r--pkgs/applications/window-managers/yabar/build.nix12
-rw-r--r--pkgs/applications/window-managers/yeahwm/default.nix4
127 files changed, 2380 insertions, 925 deletions
diff --git a/pkgs/applications/window-managers/2bwm/default.nix b/pkgs/applications/window-managers/2bwm/default.nix
index 0a2dd63130e..4072c74d7f8 100644
--- a/pkgs/applications/window-managers/2bwm/default.nix
+++ b/pkgs/applications/window-managers/2bwm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, patches
+{ lib, stdenv, fetchFromGitHub, patches
 , libxcb, xcbutilkeysyms, xcbutilwm
 , libX11, xcbutil, xcbutilxrm }:
 
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
 
   installPhase = "make install DESTDIR=$out PREFIX=\"\"";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/venam/2bwm";
     description = "A fast floating WM written over the XCB library and derived from mcwm";
     license = licenses.mit;
diff --git a/pkgs/applications/window-managers/afterstep/default.nix b/pkgs/applications/window-managers/afterstep/default.nix
index 001e624e1be..ec7d3ae5004 100644
--- a/pkgs/applications/window-managers/afterstep/default.nix
+++ b/pkgs/applications/window-managers/afterstep/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchurl, pkgconfig
-, libjpeg, libtiff, libpng, freetype
+{ lib, stdenv, fetchurl, pkg-config
+, libtiff
 , fltk, gtk
-, libX11, libXext, libICE
+, libICE, libSM
 , dbus
 , fetchpatch
 }:
@@ -24,15 +24,23 @@ stdenv.mkDerivation rec {
     })
   ];
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ libjpeg libtiff libpng freetype fltk gtk libX11 libXext libICE dbus dbus ];
+  postPatch = ''
+    # Causes fatal ldconfig cache generation attempt on non-NixOS Linux
+    for mkfile in autoconf/Makefile.common.lib.in libAfter{Base,Image}/Makefile.in; do
+      substituteInPlace $mkfile \
+        --replace 'test -w /etc' 'false'
+    done
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libtiff fltk gtk libICE libSM dbus ];
 
-  # A strange type of bug: dbus is not immediately found by pkgconfig
+  # A strange type of bug: dbus is not immediately found by pkg-config
   preConfigure = ''
      export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE $(pkg-config dbus-1 --cflags)"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A NEXTStep-inspired window manager";
     longDescription = ''
       AfterStep is a window manager for the Unix X Window
diff --git a/pkgs/applications/window-managers/awesome/default.nix b/pkgs/applications/window-managers/awesome/default.nix
index 609723b42d4..a526636063e 100644
--- a/pkgs/applications/window-managers/awesome/default.nix
+++ b/pkgs/applications/window-managers/awesome/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, luaPackages, cairo, librsvg, cmake, imagemagick, pkgconfig, gdk-pixbuf
+{ lib, stdenv, fetchFromGitHub, luaPackages, cairo, librsvg, cmake, imagemagick, pkg-config, gdk-pixbuf
 , xorg, libstartup_notification, libxdg_basedir, libpthreadstubs
 , xcb-util-cursor, makeWrapper, pango, gobject-introspection
 , which, dbus, nettools, git, doxygen
@@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
     doxygen
     imagemagick
     makeWrapper
-    pkgconfig
+    pkg-config
     xmlto docbook_xml_dtd_45
     docbook_xsl findXMLCatalogs
     asciidoctor
@@ -50,12 +50,12 @@ stdenv.mkDerivation rec {
                   xorg.xcbutil xorg.xcbutilimage xorg.xcbutilkeysyms
                   xorg.xcbutilrenderutil xorg.xcbutilwm libxkbcommon
                   xcbutilxrm ]
-                  ++ stdenv.lib.optional gtk3Support gtk3;
+                  ++ lib.optional gtk3Support gtk3;
 
   cmakeFlags = [
     #"-DGENERATE_MANPAGES=ON"
     "-DOVERRIDE_VERSION=${version}"
-  ] ++ stdenv.lib.optional luaPackages.isLuaJIT "-DLUA_LIBRARY=${lua}/lib/libluajit-5.1.so"
+  ] ++ lib.optional luaPackages.isLuaJIT "-DLUA_LIBRARY=${lua}/lib/libluajit-5.1.so"
   ;
 
   GI_TYPELIB_PATH = "${pango.out}/lib/girepository-1.0";
@@ -82,7 +82,7 @@ stdenv.mkDerivation rec {
     inherit lua;
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Highly configurable, dynamic window manager for X";
     homepage    = "https://awesomewm.org/";
     license     = licenses.gpl2Plus;
diff --git a/pkgs/applications/window-managers/berry/default.nix b/pkgs/applications/window-managers/berry/default.nix
index 2a41a3d3c07..b2d28ca55f2 100644
--- a/pkgs/applications/window-managers/berry/default.nix
+++ b/pkgs/applications/window-managers/berry/default.nix
@@ -1,18 +1,32 @@
-{ stdenv, fetchFromGitHub
-, libX11, libXft, libXinerama, fontconfig, freetype }:
+{ lib, stdenv
+, fetchFromGitHub
+, libX11
+, libXext
+, libXft
+, libXinerama
+, fontconfig
+, freetype
+}:
 
 stdenv.mkDerivation rec {
   pname = "berry";
-  version = "0.1.5";
+  version = "0.1.7";
 
   src = fetchFromGitHub {
     owner = "JLErvin";
-    repo = "berry";
+    repo = pname;
     rev = version;
-    sha256 = "1wxbjzpwqb9x7vd7kb095fiqj271rki980dnwcxjxpqlmmrmjzyl";
+    sha256 = "sha256-2kFVOE5l1KQvDb5KDL7y0p4M7awJLrxJF871cyc0YZ8=";
   };
 
-  buildInputs = [ libX11 libXft libXinerama fontconfig freetype ];
+  buildInputs =[
+    libX11
+    libXext
+    libXft
+    libXinerama
+    fontconfig
+    freetype
+  ];
 
   preBuild = ''
     makeFlagsArray+=( PREFIX="${placeholder "out"}"
@@ -24,7 +38,7 @@ stdenv.mkDerivation rec {
                       FREETYPEINC="${freetype.dev}/include/freetype2" )
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A healthy, bite-sized window manager";
     longDescription = ''
       berry is a healthy, bite-sized window manager written in C for unix
diff --git a/pkgs/applications/window-managers/bevelbar/default.nix b/pkgs/applications/window-managers/bevelbar/default.nix
index 40cebb572af..74da42f88c9 100644
--- a/pkgs/applications/window-managers/bevelbar/default.nix
+++ b/pkgs/applications/window-managers/bevelbar/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libX11, libXrandr, libXft }:
+{ lib, stdenv, fetchFromGitHub, libX11, libXrandr, libXft }:
 
 stdenv.mkDerivation rec {
   pname = "bevelbar";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
 
   installFlags = [ "prefix=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "An X11 status bar with fancy schmancy 1985-ish beveled borders";
     inherit (src.meta) homepage;
     license = licenses.mit;
diff --git a/pkgs/applications/window-managers/bspwm/default.nix b/pkgs/applications/window-managers/bspwm/default.nix
index 7c7bdbe22a7..e7c0eecbf82 100644
--- a/pkgs/applications/window-managers/bspwm/default.nix
+++ b/pkgs/applications/window-managers/bspwm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libxcb, libXinerama
+{ lib, stdenv, fetchFromGitHub, libxcb, libXinerama
 , xcbutil, xcbutilkeysyms, xcbutilwm
 }:
 
@@ -17,10 +17,10 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tiling window manager based on binary space partitioning";
     homepage = "https://github.com/baskerville/bspwm";
-    maintainers = with maintainers; [ meisternu epitrochoid rvolosatovs ];
+    maintainers = with maintainers; [ meisternu epitrochoid ];
     license = licenses.bsd2;
     platforms = platforms.linux;
   };
diff --git a/pkgs/applications/window-managers/bspwm/unstable.nix b/pkgs/applications/window-managers/bspwm/unstable.nix
deleted file mode 100644
index e52e33ec544..00000000000
--- a/pkgs/applications/window-managers/bspwm/unstable.nix
+++ /dev/null
@@ -1,31 +0,0 @@
-{ stdenv, fetchFromGitHub, libxcb, libXinerama, xcbutil, xcbutilkeysyms, xcbutilwm }:
-
-stdenv.mkDerivation {
-  name = "bspwm-unstable-2016-09-30";
-
-
-  src = fetchFromGitHub {
-    owner   = "baskerville";
-    repo    = "bspwm";
-    rev     = "8664c007e44de162c1597fd7e163635b274fb747";
-    sha256  = "0clvpz32z38i8kr10hqlifa661szpfn93c63m2aq2h4dwmr44slz";
-  };
-
-  buildInputs = [ libxcb libXinerama xcbutil xcbutilkeysyms xcbutilwm ];
-
-  buildPhase = ''
-    make PREFIX=$out
-  '';
-
-  installPhase = ''
-    make PREFIX=$out install
-  '';
-
-  meta = {
-    description = "A tiling window manager based on binary space partitioning (git version)";
-    homepage = "https://github.com/baskerville/bspwm";
-    maintainers = [ stdenv.lib.maintainers.meisternu stdenv.lib.maintainers.epitrochoid ];
-    license = stdenv.lib.licenses.bsd2;
-    platforms = stdenv.lib.platforms.linux;
-  };
-}
diff --git a/pkgs/applications/window-managers/btops/default.nix b/pkgs/applications/window-managers/btops/default.nix
index 132e2ba6ddd..5f107337ee4 100644
--- a/pkgs/applications/window-managers/btops/default.nix
+++ b/pkgs/applications/window-managers/btops/default.nix
@@ -1,5 +1,5 @@
 # This file was generated by https://github.com/kamilchm/go2nix v1.2.1
-{ stdenv, buildGoPackage, fetchgit }:
+{ lib, buildGoPackage, fetchgit }:
 
 buildGoPackage rec {
   pname = "btops";
@@ -15,7 +15,7 @@ buildGoPackage rec {
 
   goDeps = ./deps.nix;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "bspwm desktop management that supports dymanic appending, removing, and renaming";
     homepage = "https://github.com/cmschuetz/btops";
     maintainers = with maintainers; [ mnacamura ];
diff --git a/pkgs/applications/window-managers/cage/default.nix b/pkgs/applications/window-managers/cage/default.nix
index 372ad1e27fc..963f8676883 100644
--- a/pkgs/applications/window-managers/cage/default.nix
+++ b/pkgs/applications/window-managers/cage/default.nix
@@ -1,44 +1,40 @@
-{ stdenv, fetchFromGitHub
-, meson, ninja, pkg-config, wayland, scdoc, makeWrapper
-, wlroots, wayland-protocols, pixman, libxkbcommon
-, systemd, libGL, libX11
+{ lib, stdenv, fetchFromGitHub
+, meson, ninja, pkg-config, wayland-scanner, scdoc, makeWrapper
+, wlroots, wayland, wayland-protocols, pixman, libxkbcommon
+, systemd, libGL, libX11, mesa
 , xwayland ? null
 , nixosTests
 }:
 
 stdenv.mkDerivation rec {
   pname = "cage";
-  version = "0.1.2.1";
+  version = "0.1.4";
 
   src = fetchFromGitHub {
     owner = "Hjdskes";
     repo = "cage";
     rev = "v${version}";
-    sha256 = "1i4rm3dpmk7gkl6hfs6a7vwz76ba7yqcdp63nlrdbnq81m9cy2am";
+    sha256 = "0vm96gxinhy48m3x9p1sfldyd03w3gk6iflb7n9kn06j1vqyswr6";
   };
 
-  postPatch = ''
-    substituteInPlace meson.build --replace \
-      "0.1.2" "${version}"
-  '';
-
-  nativeBuildInputs = [ meson ninja pkg-config wayland scdoc makeWrapper ];
+  nativeBuildInputs = [ meson ninja pkg-config wayland-scanner scdoc makeWrapper ];
 
   buildInputs = [
     wlroots wayland wayland-protocols pixman libxkbcommon
+    mesa # for libEGL headers
     systemd libGL libX11
   ];
 
-  mesonFlags = [ "-Dxwayland=${stdenv.lib.boolToString (xwayland != null)}" ];
+  mesonFlags = [ "-Dxwayland=${lib.boolToString (xwayland != null)}" ];
 
-  postFixup = stdenv.lib.optionalString (xwayland != null) ''
+  postFixup = lib.optionalString (xwayland != null) ''
     wrapProgram $out/bin/cage --prefix PATH : "${xwayland}/bin"
   '';
 
   # Tests Cage using the NixOS module by launching xterm:
   passthru.tests.basic-nixos-module-functionality = nixosTests.cage;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A Wayland kiosk that runs a single, maximized application";
     homepage    = "https://www.hjdskes.nl/projects/cage/";
     license     = licenses.mit;
diff --git a/pkgs/applications/window-managers/cage/wlroots-0_14.patch b/pkgs/applications/window-managers/cage/wlroots-0_14.patch
new file mode 100644
index 00000000000..2e56835f4fc
--- /dev/null
+++ b/pkgs/applications/window-managers/cage/wlroots-0_14.patch
@@ -0,0 +1,36 @@
+From 9a4523d47efeafd674d419169fe161e5a3b31cb3 Mon Sep 17 00:00:00 2001
+From: Jan Beich <jbeich@FreeBSD.org>
+Date: Thu, 3 Jun 2021 17:53:11 +0000
+Subject: [PATCH 1/3] view: chase swaywm/wlroots@9e58301df7f0
+
+view.c:238:52: error: no member named 'subsurfaces' in 'struct wlr_surface'
+        wl_list_for_each (subsurface, &view->wlr_surface->subsurfaces, parent_link) {
+                                       ~~~~~~~~~~~~~~~~~  ^
+/usr/include/wayland-util.h:443:30: note: expanded from macro 'wl_list_for_each'
+        for (pos = wl_container_of((head)->next, pos, member);  \
+                                    ^~~~
+/usr/include/wayland-util.h:409:32: note: expanded from macro 'wl_container_of'
+        (__typeof__(sample))((char *)(ptr) -                            \
+                                      ^~~
+
+Based on https://github.com/swaywm/sway/commit/3162766eef14
+---
+ view.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/view.c b/view.c
+index b9ba9c2..3f3b0ed 100644
+--- a/view.c
++++ b/view.c
+@@ -235,7 +235,10 @@ view_map(struct cg_view *view, struct wlr_surface *surface)
+ 	view->wlr_surface = surface;
+ 
+ 	struct wlr_subsurface *subsurface;
+-	wl_list_for_each (subsurface, &view->wlr_surface->subsurfaces, parent_link) {
++	wl_list_for_each (subsurface, &view->wlr_surface->subsurfaces_below, parent_link) {
++		subsurface_create(view, subsurface);
++	}
++	wl_list_for_each (subsurface, &view->wlr_surface->subsurfaces_above, parent_link) {
+ 		subsurface_create(view, subsurface);
+ 	}
+ 
diff --git a/pkgs/applications/window-managers/cagebreak/default.nix b/pkgs/applications/window-managers/cagebreak/default.nix
new file mode 100644
index 00000000000..d3da358b639
--- /dev/null
+++ b/pkgs/applications/window-managers/cagebreak/default.nix
@@ -0,0 +1,95 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cairo
+, fontconfig
+, libxkbcommon
+, makeWrapper
+, mesa
+, meson
+, ninja
+, nixosTests
+, pango
+, pixman
+, pkg-config
+, scdoc
+, systemd
+, wayland
+, wayland-protocols
+, withXwayland ? true , xwayland
+, wlroots
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cagebreak";
+  version = "1.7.1";
+
+  src = fetchFromGitHub {
+    owner = "project-repo";
+    repo = pname;
+    rev = version;
+    hash = "sha256-1IztedN5/I/4TDKHLJ26fSrDsvJ5QAr+cbzS2PQITDE=";
+  };
+
+  patches = [
+    # To fix the build with wlroots 0.14.0:
+    (fetchpatch {
+      # Add fixes for wlroots 0.14.0
+      url = "https://github.com/project-repo/cagebreak/commit/d57869d43add58331386fc8e89c14bb2b74afe17.patch";
+      sha256 = "0g6sl8y4kk0bm5x6pxqbxw2j0gyg3ybr2v9m70q2pxp70kms4lqg";
+    })
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper
+    meson
+    ninja
+    pkg-config
+    scdoc
+    wayland
+  ];
+
+  buildInputs = [
+    cairo
+    fontconfig
+    libxkbcommon
+    mesa # for libEGL headers
+    pango
+    pixman
+    systemd
+    wayland
+    wayland-protocols
+    wlroots
+  ];
+
+  mesonFlags = [
+    "-Dman-pages=true"
+    "-Dversion_override=${version}"
+    "-Dxwayland=${lib.boolToString withXwayland}"
+  ];
+
+  # TODO: investigate why is this happening
+  postPatch = ''
+    sed -i -e 's|<drm_fourcc.h>|<libdrm/drm_fourcc.h>|' *.c
+  '';
+
+  postInstall = ''
+    install -d $out/share/cagebreak/
+    install -m644 $src/examples/config $out/share/cagebreak/
+  '';
+
+  postFixup = lib.optionalString withXwayland ''
+    wrapProgram $out/bin/cagebreak --prefix PATH : "${xwayland}/bin"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/project-repo/cagebreak";
+    description = "A Wayland tiling compositor inspired by ratpoison";
+    license = licenses.mit;
+    maintainers = with maintainers; [ berbiche ];
+    platforms = platforms.linux;
+  };
+
+  passthru.tests.basic = nixosTests.cagebreak;
+}
diff --git a/pkgs/applications/window-managers/cardboard/default.nix b/pkgs/applications/window-managers/cardboard/default.nix
new file mode 100644
index 00000000000..17ef08af5e8
--- /dev/null
+++ b/pkgs/applications/window-managers/cardboard/default.nix
@@ -0,0 +1,118 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, fetchurl
+, fetchgit
+, ffmpeg
+, libGL
+, libX11
+, libcap
+, libdrm
+, libinput
+, libpng
+, libxcb
+, libxkbcommon
+, mesa
+, meson
+, ninja
+, pandoc
+, pixman
+, pkg-config
+, unzip
+, wayland
+, wayland-protocols
+, xcbutilerrors
+, xcbutilimage
+, xcbutilwm
+}:
+
+let
+  # cereal.wrap
+  cereal-wrap = fetchurl {
+    name = "cereal-1.3.0.tar.gz";
+    url = "https://github.com/USCiLab/cereal/archive/v1.3.0.tar.gz";
+    hash = "sha256-Mp6j4xMLAmwDpKzFDhaOfa/05uZhvGp9/sDXe1cIUdU=";
+  };
+  cereal-wrapdb = fetchurl {
+    name = "cereal-1.3.0-1-wrap.zip";
+    url = "https://wrapdb.mesonbuild.com/v1/projects/cereal/1.3.0/1/get_zip";
+    hash = "sha256-QYck5UT7fPLqtLDb1iOSX4Hnnns48Jj23Ae/LCfLSKY=";
+  };
+
+  # expected.wrap
+  expected-wrap = fetchgit {
+    name = "expected";
+    url = "https://gitlab.com/cardboardwm/expected";
+    rev = "0ee13cb2b058809aa9708c45ca18d494e72a759e";
+    sha256 = "sha256-gYr4/pjuLlr3k6Jcrg2/SzJLtbgyA+ZN2oMHkHXANDo=";
+  };
+
+  # wlroots.wrap
+  wlroots-wrap = fetchgit {
+    name = "wlroots";
+    url = "https://github.com/swaywm/wlroots";
+    rev = "0.12.0";
+    sha256 = "sha256-1rE3D+kQprjcjobc95/mQkUa5y1noY0MdoYJ/SpFQwY=";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "cardboard";
+  version = "0.0.0+unstable=2021-05-10";
+
+  src = fetchFromGitLab {
+    owner = "cardboardwm";
+    repo = pname;
+    rev = "b54758d85164fb19468f5ca52588ebea576cd027";
+    hash = "sha256-Kn5NyQSDyX7/nn2bKZPnsuepkoppi5XIkdu7IDy5r4w=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pandoc
+    pkg-config
+    unzip
+  ];
+  buildInputs = [
+    ffmpeg
+    libGL
+    libX11
+    libcap
+    libdrm
+    libinput
+    libpng
+    libxcb
+    libxkbcommon
+    mesa
+    pixman
+    wayland
+    wayland-protocols
+    xcbutilerrors
+    xcbutilimage
+    xcbutilwm
+  ];
+
+  postPatch = ''
+    (cd subprojects
+     tar xvf ${cereal-wrap}
+     unzip ${cereal-wrapdb}
+     cp -r ${expected-wrap} ${expected-wrap.name}
+     cp -r ${wlroots-wrap} ${wlroots-wrap.name}
+    )
+  '';
+
+  # "Inherited" from Nixpkgs expression for wlroots
+  mesonFlags = [
+    "-Dman=true"
+    "-Dwlroots:logind-provider=systemd"
+    "-Dwlroots:libseat=disabled"
+  ];
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/cardboardwm/cardboard";
+    description = "A scrollable, tiling Wayland compositor inspired on PaperWM";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/pkgs/applications/window-managers/clfswm/default.nix b/pkgs/applications/window-managers/clfswm/default.nix
index e3864319f7b..1c6f92a38f2 100644
--- a/pkgs/applications/window-managers/clfswm/default.nix
+++ b/pkgs/applications/window-managers/clfswm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, autoconf, sbcl, lispPackages, xdpyinfo, texinfo4
+{ lib, stdenv, fetchgit, autoconf, sbcl, lispPackages, xdpyinfo, texinfo4
 , makeWrapper }:
 
 stdenv.mkDerivation {
@@ -39,7 +39,7 @@ stdenv.mkDerivation {
     echo ${xdpyinfo} ${lispPackages.clx} ${lispPackages.cl-ppcre} > $out/nix-support/depends
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A(nother) Common Lisp FullScreen Window Manager";
     homepage    = "https://common-lisp.net/project/clfswm/";
     license     = licenses.gpl3;
diff --git a/pkgs/applications/window-managers/cwm/default.nix b/pkgs/applications/window-managers/cwm/default.nix
index 18baefdbf3e..24c59508157 100644
--- a/pkgs/applications/window-managers/cwm/default.nix
+++ b/pkgs/applications/window-managers/cwm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libX11, libXinerama, libXrandr, libXft, yacc, pkgconfig }:
+{ lib, stdenv, fetchFromGitHub, libX11, libXinerama, libXrandr, libXft, bison, pkg-config }:
 
 stdenv.mkDerivation rec {
 
@@ -12,12 +12,12 @@ stdenv.mkDerivation rec {
     sha256 = "0f9xmki2hx10k8iisfzc7nm1l31zkf1r06pdgn06ar9w9nizrld9";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ libX11 libXinerama libXrandr libXft yacc ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libX11 libXinerama libXrandr libXft bison ];
 
   prePatch = ''sed -i "s@/usr/local@$out@" Makefile'';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A lightweight and efficient window manager for X11";
     homepage    = "https://github.com/leahneukirchen/cwm";
     maintainers = with maintainers; [ _0x4A6F mkf ];
diff --git a/pkgs/applications/window-managers/dwl/default.nix b/pkgs/applications/window-managers/dwl/default.nix
new file mode 100644
index 00000000000..04944a1e909
--- /dev/null
+++ b/pkgs/applications/window-managers/dwl/default.nix
@@ -0,0 +1,92 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, pkg-config
+, libinput
+, libxcb
+, libxkbcommon
+, pixman
+, wayland
+, wayland-protocols
+, wlroots
+, enable-xwayland ? true, xwayland, libX11
+, patches ? [ ]
+, conf ? null
+, writeText
+, fetchpatch
+}:
+
+let
+  totalPatches = patches ++ [ ];
+in
+
+stdenv.mkDerivation rec {
+  pname = "dwl";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "djpohly";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-lfUAymLA4+E9kULZIueA+9gyVZYgaVS0oTX0LJjsSEs=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    libinput
+    libxcb
+    libxkbcommon
+    pixman
+    wayland
+    wayland-protocols
+    wlroots
+  ] ++ lib.optionals enable-xwayland [
+    libX11
+    xwayland
+  ];
+
+  # Allow users to set their own list of patches
+  patches = totalPatches;
+
+  # Last line of config.mk enables XWayland
+  prePatch = lib.optionalString enable-xwayland ''
+    sed -i -e '$ s|^#||' config.mk
+  '';
+
+  # Allow users to set an alternative config.def.h
+  postPatch = let
+    configFile = if lib.isDerivation conf || builtins.isPath conf
+                 then conf
+                 else writeText "config.def.h" conf;
+  in lib.optionalString (conf != null) "cp ${configFile} config.def.h";
+
+  dontConfigure = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -d $out/bin
+    install -m755 dwl $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/djpohly/dwl/";
+    description = "Dynamic window manager for Wayland";
+    longDescription = ''
+      dwl is a compact, hackable compositor for Wayland based on wlroots. It is
+      intended to fill the same space in the Wayland world that dwm does in X11,
+      primarily in terms of philosophy, and secondarily in terms of
+      functionality. Like dwm, dwl is:
+
+      - Easy to understand, hack on, and extend with patches
+      - One C source file (or a very small number) configurable via config.h
+      - Limited to 2000 SLOC to promote hackability
+      - Tied to as few external dependencies as possible
+    '';
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = with platforms; linux;
+  };
+}
+# TODO: custom patches from upstream website
+# TODO: investigate the modifications in the upstream unstable version
diff --git a/pkgs/applications/window-managers/dwm/default.nix b/pkgs/applications/window-managers/dwm/default.nix
index 8f9c28c7851..6235c93a281 100644
--- a/pkgs/applications/window-managers/dwm/default.nix
+++ b/pkgs/applications/window-managers/dwm/default.nix
@@ -1,30 +1,48 @@
-{stdenv, fetchurl, libX11, libXinerama, libXft, patches ? []}:
+{ lib, stdenv, fetchurl, libX11, libXinerama, libXft, writeText, patches ? [ ], conf ? null}:
 
-let
-  name = "dwm-6.2";
-in
-stdenv.mkDerivation {
-  inherit name;
+stdenv.mkDerivation rec {
+  pname = "dwm";
+  version = "6.2";
 
   src = fetchurl {
-    url = "https://dl.suckless.org/dwm/${name}.tar.gz";
+    url = "https://dl.suckless.org/dwm/${pname}-${version}.tar.gz";
     sha256 = "03hirnj8saxnsfqiszwl2ds7p0avg20izv9vdqyambks00p2x44p";
   };
 
   buildInputs = [ libX11 libXinerama libXft ];
 
-  prePatch = ''sed -i "s@/usr/local@$out@" config.mk'';
+  prePatch = ''
+    sed -i "s@/usr/local@$out@" config.mk
+  '';
 
   # Allow users set their own list of patches
   inherit patches;
 
-  buildPhase = " make ";
+  # Allow users to set the config.def.h file containing the configuration
+  postPatch =
+    let
+      configFile =
+        if lib.isDerivation conf || builtins.isPath conf
+        then conf else writeText "config.def.h" conf;
+    in
+    lib.optionalString (conf != null) "cp ${configFile} config.def.h";
 
-  meta = {
-    homepage = "https://suckless.org/";
-    description = "Dynamic window manager for X";
-    license = stdenv.lib.licenses.mit;
-    maintainers = with stdenv.lib.maintainers; [viric];
-    platforms = with stdenv.lib.platforms; all;
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  meta = with lib; {
+    homepage = "https://dwm.suckless.org/";
+    description = "An extremely fast, small, and dynamic window manager for X";
+    longDescription = ''
+      dwm is a dynamic window manager for X. It manages windows in tiled,
+      monocle and floating layouts. All of the layouts can be applied
+      dynamically, optimising the environment for the application in use and the
+      task performed.
+      Windows are grouped by tags. Each window can be tagged with one or
+      multiple tags. Selecting certain tags displays all windows with these
+      tags.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ viric neonfuz ];
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/applications/window-managers/dwm/dwm-status.nix b/pkgs/applications/window-managers/dwm/dwm-status.nix
index c7c72b4d402..7b22eb39925 100644
--- a/pkgs/applications/window-managers/dwm/dwm-status.nix
+++ b/pkgs/applications/window-managers/dwm/dwm-status.nix
@@ -1,37 +1,38 @@
-{ stdenv, lib, rustPlatform, fetchFromGitHub, dbus, gdk-pixbuf, libnotify, makeWrapper, pkgconfig, xorg
-, enableAlsaUtils ? true, alsaUtils, coreutils
-, enableNetwork ? true, dnsutils, iproute, wirelesstools }:
+{ lib, rustPlatform, fetchFromGitHub, dbus, gdk-pixbuf, libnotify, makeWrapper, pkg-config, xorg
+, enableAlsaUtils ? true, alsa-utils, coreutils
+, enableNetwork ? true, dnsutils, iproute2, wirelesstools }:
 
 let
-  bins = lib.optionals enableAlsaUtils [ alsaUtils coreutils ]
-    ++ lib.optionals enableNetwork [ dnsutils iproute wirelesstools ];
+  bins = lib.optionals enableAlsaUtils [ alsa-utils coreutils ]
+    ++ lib.optionals enableNetwork [ dnsutils iproute2 wirelesstools ];
 in
 
 rustPlatform.buildRustPackage rec {
   pname = "dwm-status";
-  version = "1.7.1";
+  version = "1.7.2";
 
   src = fetchFromGitHub {
     owner = "Gerschtli";
-    repo = "dwm-status";
+    repo = pname;
     rev = version;
-    sha256 = "172qkzbi37j6wx81pyqqffi9wxbg3bf8nis7d15ncn1yfd5r4gqh";
+    sha256 = "sha256-Y1J0nCVEmGKgQP+GEtPqK8l3SRuls5yesvJuowLDzUo=";
   };
 
-  nativeBuildInputs = [ makeWrapper pkgconfig ];
+  nativeBuildInputs = [ makeWrapper pkg-config ];
   buildInputs = [ dbus gdk-pixbuf libnotify xorg.libX11 ];
 
-  cargoSha256 = "041sd9zm1c3v6iihnwjcya2xg5yxb2y4biyxpjlfblz2srxa15dm";
+  cargoSha256 = "sha256-8/vzJXZjSQmefHMo5BXKTRiLy2F3wfIn8VgPMJxtIvY=";
 
   postInstall = lib.optionalString (bins != [])  ''
-    wrapProgram $out/bin/dwm-status --prefix "PATH" : "${stdenv.lib.makeBinPath bins}"
+    wrapProgram $out/bin/dwm-status --prefix "PATH" : "${lib.makeBinPath bins}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Highly performant and configurable DWM status service";
     homepage = "https://github.com/Gerschtli/dwm-status";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ gerschtli ];
+    mainProgram = pname;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/applications/window-managers/dwm/git.nix b/pkgs/applications/window-managers/dwm/git.nix
deleted file mode 100644
index 3751a8de69f..00000000000
--- a/pkgs/applications/window-managers/dwm/git.nix
+++ /dev/null
@@ -1,37 +0,0 @@
-{ stdenv, fetchgit, libX11, libXinerama, libXft, patches ? [], conf ? null }:
-
-let
-  name = "dwm-git-20180602";
-in
-
-stdenv.mkDerivation {
-  inherit name;
-
-  src = fetchgit {
-    url = "git://git.suckless.org/dwm";
-    rev = "b69c870a3076d78ab595ed1cd4b41cf6b03b2610";
-    sha256 = "10i079h79l4gdch1qy2vrrb2xxxkgkjmgphr5r9a75jbbagwvz0k";
-  };
-
-  buildInputs = [ libX11 libXinerama libXft ];
-
-  prePatch = ''sed -i "s@/usr/local@$out@" config.mk'';
-
-  # Allow users set their own list of patches
-  inherit patches;
-
-  # Allow users to override the entire config file AFTER appying the patches
-  postPatch = stdenv.lib.optionalString (conf!=null) ''
-    echo -n '${conf}' > config.def.h
-  '';
-
-  buildPhase = "make";
-
-  meta = with stdenv.lib; {
-    homepage = "https://suckless.org/";
-    description = "Dynamic window manager for X, development version";
-    license = licenses.mit;
-    maintainers = with maintainers; [xeji];
-    platforms = platforms.unix;
-  };
-}
diff --git a/pkgs/applications/window-managers/dzen2/default.nix b/pkgs/applications/window-managers/dzen2/default.nix
index 367c78ec5ca..84380bfc9d8 100644
--- a/pkgs/applications/window-managers/dzen2/default.nix
+++ b/pkgs/applications/window-managers/dzen2/default.nix
@@ -1,9 +1,9 @@
-{ stdenv, fetchurl, pkgconfig, libX11, libXft, libXinerama, libXpm }:
+{ lib, stdenv, fetchurl, pkg-config, libX11, libXft, libXinerama, libXpm }:
 
 stdenv.mkDerivation {
   name = "dzen2-0.9.5";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libX11 libXft libXinerama libXpm ];
 
   src = fetchurl {
@@ -30,8 +30,8 @@ stdenv.mkDerivation {
 
   meta = {
     homepage = "https://github.com/robm/dzen";
-    license = stdenv.lib.licenses.mit;
+    license = lib.licenses.mit;
     description = "X notification utility";
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/applications/window-managers/e16/default.nix b/pkgs/applications/window-managers/e16/default.nix
new file mode 100644
index 00000000000..7028dcfc09d
--- /dev/null
+++ b/pkgs/applications/window-managers/e16/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, freetype
+, imlib2
+, libSM
+, libXcomposite
+, libXdamage
+, libXext
+, libXfixes
+, libXft
+, libXinerama
+, libXrandr
+, libpulseaudio
+, libsndfile
+, pango
+, perl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "e16";
+  version = "1.0.23";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/enlightenment/e16-${version}.tar.xz";
+    sha256 = "028rn1plggacsvdd035qnnph4xw8nya34mmjvvl7d4gqj9pj293f";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    freetype
+    imlib2
+    libSM
+    libXcomposite
+    libXdamage
+    libXext
+    libXfixes
+    libXft
+    libXinerama
+    libXrandr
+    libpulseaudio
+    libsndfile
+    pango
+    perl
+  ];
+
+  postPatch = ''
+    substituteInPlace scripts/e_gen_menu --replace "/usr/local:" "/run/current-system/sw:/usr/local:"
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.enlightenment.org/e16";
+    description = "Enlightenment DR16 window manager";
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/pkgs/applications/window-managers/evilwm/default.nix b/pkgs/applications/window-managers/evilwm/default.nix
index 64dc784e812..94562cd0d22 100644
--- a/pkgs/applications/window-managers/evilwm/default.nix
+++ b/pkgs/applications/window-managers/evilwm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl,  libX11, libXext, libXrandr, libXrender,
+{ lib, stdenv, fetchurl,  libX11, libXext, libXrandr, libXrender,
   xorgproto, patches ? [] }:
 
 stdenv.mkDerivation rec {
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
   # Allow users set their own list of patches
   inherit patches;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.6809.org.uk/evilwm/";
     description = "Minimalist window manager for the X Window System";
 
diff --git a/pkgs/applications/window-managers/fbpanel/default.nix b/pkgs/applications/window-managers/fbpanel/default.nix
index cf45dfa8640..1a87f29f67c 100644
--- a/pkgs/applications/window-managers/fbpanel/default.nix
+++ b/pkgs/applications/window-managers/fbpanel/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl, pkgconfig
-, libX11, libXmu, libXpm, gtk2, libpng, libjpeg, libtiff, librsvg
+{ lib, stdenv, fetchurl, pkg-config
+, libX11, libXmu, libXpm, gtk2, libpng, libjpeg, libtiff, librsvg, gdk-pixbuf, gdk-pixbuf-xlib
 }:
 
 stdenv.mkDerivation rec {
@@ -10,13 +10,18 @@ stdenv.mkDerivation rec {
     sha256 = "e14542cc81ea06e64dd4708546f5fd3f5e01884c3e4617885c7ef22af8cf3965";
   };
   buildInputs =
-    [ pkgconfig libX11 libXmu libXpm gtk2 libpng libjpeg libtiff librsvg ];
+    [ pkg-config libX11 libXmu libXpm gtk2 libpng libjpeg libtiff librsvg gdk-pixbuf gdk-pixbuf-xlib.dev ];
 
   preConfigure = "patchShebangs .";
 
+  postConfigure = ''
+    substituteInPlace config.mk \
+      --replace "CFLAGSX =" "CFLAGSX = -I${gdk-pixbuf-xlib.dev}/include/gdk-pixbuf-2.0"
+  '';
+
   NIX_LDFLAGS="-lX11";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A stand-alone panel";
     maintainers = with maintainers; [ raskin ];
     platforms = platforms.linux;
diff --git a/pkgs/applications/window-managers/fluxbox/default.nix b/pkgs/applications/window-managers/fluxbox/default.nix
index b1a11d7153c..36a22cb46d7 100644
--- a/pkgs/applications/window-managers/fluxbox/default.nix
+++ b/pkgs/applications/window-managers/fluxbox/default.nix
@@ -1,10 +1,10 @@
-{ stdenv, fetchurl, pkgconfig
+{ lib, stdenv, fetchurl, pkg-config
 , freetype, fribidi
 , libXext, libXft, libXpm, libXrandr, libXrender, xorgproto
 , libXinerama
 , imlib2 }:
 
-with stdenv.lib;
+with lib;
 stdenv.mkDerivation rec {
 
   pname = "fluxbox";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
     sha256 = "1h1f70y40qd225dqx937vzb4k2cz219agm1zvnjxakn5jkz7b37w";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   buildInputs = [ freetype fribidi libXext libXft libXpm libXrandr libXrender xorgproto libXinerama imlib2 ];
 
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
     substituteInPlace util/fluxbox-generate_menu.in \
       --subst-var-by PREFIX "$out"
   '';
-  
+
   meta = {
     description = "Full-featured, light-resource X window manager";
     longDescription = ''
diff --git a/pkgs/applications/window-managers/fvwm/default.nix b/pkgs/applications/window-managers/fvwm/default.nix
index 6b3f4029755..07c3573fb2a 100644
--- a/pkgs/applications/window-managers/fvwm/default.nix
+++ b/pkgs/applications/window-managers/fvwm/default.nix
@@ -1,33 +1,43 @@
-{ gestures ? false
-, stdenv, fetchurl, pkgconfig
-, cairo, fontconfig, freetype, libXft, libXcursor, libXinerama
-, libXpm, libXt, librsvg, libpng, fribidi, perl
-, libstroke ? null
-}:
-
-assert gestures -> libstroke != null;
+{ autoreconfHook, enableGestures ? false, lib, stdenv, fetchFromGitHub
+, pkg-config, cairo, fontconfig, freetype, libXft, libXcursor, libXinerama
+, libXpm, libXt, librsvg, libpng, fribidi, perl, libstroke, readline, libxslt }:
 
 stdenv.mkDerivation rec {
   pname = "fvwm";
   version = "2.6.9";
 
-  src = fetchurl {
-    url = "https://github.com/fvwmorg/fvwm/releases/download/${version}/${pname}-${version}.tar.gz";
-    sha256 = "1bliqcnap7vb3m2rn8wvxyfhbf35h9x34s41fl4301yhrkrlrihv";
+  src = fetchFromGitHub {
+    owner = "fvwmorg";
+    repo = pname;
+    rev = version;
+    sha256 = "14jwckhikc9n4h93m00pzjs7xm2j0dcsyzv3q5vbcnknp6p4w5dh";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [
-    cairo fontconfig freetype
-    libXft libXcursor libXinerama libXpm libXt
-    librsvg libpng fribidi perl
-  ] ++ stdenv.lib.optional gestures libstroke;
+    cairo
+    fontconfig
+    freetype
+    libXft
+    libXcursor
+    libXinerama
+    libXpm
+    libXt
+    librsvg
+    libpng
+    fribidi
+    perl
+    readline
+    libxslt
+  ] ++ lib.optional enableGestures libstroke;
+
+  configureFlags = [ "--enable-mandoc" "--disable-htmldoc" ];
 
   meta = {
     homepage = "http://fvwm.org";
     description = "A multiple large virtual desktop window manager";
-    license = stdenv.lib.licenses.gpl2Plus;
-    platforms = stdenv.lib.platforms.linux;
-    maintainers = with stdenv.lib.maintainers; [ edanaher ];
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ edanaher ];
   };
 }
diff --git a/pkgs/applications/window-managers/herbstluftwm/default.nix b/pkgs/applications/window-managers/herbstluftwm/default.nix
index e547cea3c54..2ed6bc30366 100644
--- a/pkgs/applications/window-managers/herbstluftwm/default.nix
+++ b/pkgs/applications/window-managers/herbstluftwm/default.nix
@@ -1,47 +1,92 @@
-{ stdenv, fetchurl, cmake, pkgconfig, glib, libX11, libXext, libXinerama, libXrandr
-, withDoc ? stdenv.buildPlatform == stdenv.targetPlatform, asciidoc ? null }:
-
-# Doc generation is disabled by default when cross compiling because asciidoc
-# does not cross compile for now
-
-assert withDoc -> asciidoc != null;
+{ lib, stdenv, fetchurl, cmake, pkg-config, python3, libX11, libXext, libXinerama, libXrandr, libXft, libXrender, freetype, asciidoc
+, xdotool, xorgserver, xsetroot, xterm, runtimeShell
+, nixosTests }:
 
 stdenv.mkDerivation rec {
   pname = "herbstluftwm";
-  version = "0.8.3";
+  version = "0.9.3";
 
   src = fetchurl {
     url = "https://herbstluftwm.org/tarballs/herbstluftwm-${version}.tar.gz";
-    sha256 = "1qmb4pjf2f6g0dvcg11cw9njwmxblhqzd70ai8qnlgqw1iz3nkm1";
+    sha256 = "01f1bv9axjhw1l2gwhdwahljssj0h8q7a1bqwbpnwvln0ayv39qb";
   };
 
   outputs = [
     "out"
-  ] ++ stdenv.lib.optionals withDoc [
     "doc"
     "man"
   ];
 
   cmakeFlags = [
     "-DCMAKE_INSTALL_SYSCONF_PREFIX=${placeholder "out"}/etc"
-  ] ++ stdenv.lib.optional (!withDoc) "-DWITH_DOCUMENTATION=OFF";
+  ];
 
   nativeBuildInputs = [
     cmake
-    pkgconfig
-  ] ++ stdenv.lib.optional withDoc asciidoc;
+    pkg-config
+  ];
+
+  depsBuildBuild = [
+    asciidoc
+  ];
 
   buildInputs = [
     libX11
     libXext
     libXinerama
     libXrandr
+    libXft
+    libXrender
+    freetype
+  ];
+
+  patches = [
+    ./test-path-environment.patch
   ];
 
-  meta = {
+  postPatch = ''
+    patchShebangs doc/gendoc.py
+
+    # fix /etc/xdg/herbstluftwm paths in documentation and scripts
+    grep -rlZ /etc/xdg/herbstluftwm share/ doc/ scripts/ | while IFS="" read -r -d "" path; do
+      substituteInPlace "$path" --replace /etc/xdg/herbstluftwm $out/etc/xdg/herbstluftwm
+    done
+
+    # fix shebang in generated scripts
+    substituteInPlace tests/conftest.py --replace "/usr/bin/env bash" ${runtimeShell}
+    substituteInPlace tests/test_herbstluftwm.py --replace "/usr/bin/env bash" ${runtimeShell}
+  '';
+
+  doCheck = true;
+
+  checkInputs = [
+    (python3.withPackages (ps: with ps; [ ewmh pytest xlib ]))
+    xdotool
+    xorgserver
+    xsetroot
+    xterm
+    python3.pkgs.pytestCheckHook
+  ];
+
+  # make the package's module avalaible
+  preCheck = ''
+    export PYTHONPATH="$PYTHONPATH:../python"
+  '';
+
+  pytestFlagsArray = [ "../tests" ];
+  disabledTests = [
+    "test_title_different_letters_are_drawn"
+  ];
+
+  passthru = {
+    tests.herbstluftwm = nixosTests.herbstluftwm;
+  };
+
+  meta = with lib; {
     description = "A manual tiling window manager for X";
     homepage = "https://herbstluftwm.org/";
-    license = stdenv.lib.licenses.bsd2;
-    platforms = stdenv.lib.platforms.linux;
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ thibautmarty ];
   };
 }
diff --git a/pkgs/applications/window-managers/herbstluftwm/test-path-environment.patch b/pkgs/applications/window-managers/herbstluftwm/test-path-environment.patch
new file mode 100644
index 00000000000..dab30d8ac71
--- /dev/null
+++ b/pkgs/applications/window-managers/herbstluftwm/test-path-environment.patch
@@ -0,0 +1,10 @@
+--- a/tests/conftest.py
++++ b/tests/conftest.py
+@@ -43,6 +43,7 @@
+         self.next_client_id = 0
+         self.env = {
+             'DISPLAY': display,
++            'PATH': os.environ['PATH']
+         }
+         self.env = extend_env_with_whitelist(self.env)
+         self.hlwm_process = hlwm_process
diff --git a/pkgs/applications/window-managers/hikari/default.nix b/pkgs/applications/window-managers/hikari/default.nix
index 9bf68adaef4..5ee2c8c35e4 100644
--- a/pkgs/applications/window-managers/hikari/default.nix
+++ b/pkgs/applications/window-managers/hikari/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchzip,
-  pkgconfig, bmake,
-  cairo, glib, libevdev, libinput, libxkbcommon, linux-pam, pango, pixman,
-  libucl, wayland, wayland-protocols, wlroots,
-  features ? {
+{ lib, stdenv, fetchzip
+, pkg-config, bmake
+, cairo, glib, libevdev, libinput, libxkbcommon, linux-pam, pango, pixman
+, libucl, wayland, wayland-protocols, wlroots, mesa
+, features ? {
     gammacontrol = true;
     layershell   = true;
     screencopy   = true;
@@ -10,20 +10,16 @@
   }
 }:
 
-let
+stdenv.mkDerivation rec {
   pname = "hikari";
-  version = "2.1.2";
-in
-
-stdenv.mkDerivation {
-  inherit pname version;
+  version = "2.3.2";
 
   src = fetchzip {
     url = "https://hikari.acmelabs.space/releases/${pname}-${version}.tar.gz";
-    sha256 = "1qzbwc8dgsvp5jb4faapcrg9npsl11gq8jvhbbk2h7hj52c5lgmv";
+    sha256 = "sha256-At4b6mkArKe6knNWouLdZ9v8XhfHaUW+aB+CHyEBg8o=";
   };
 
-  nativeBuildInputs = [ pkgconfig bmake ];
+  nativeBuildInputs = [ pkg-config bmake ];
 
   buildInputs = [
     cairo
@@ -35,6 +31,7 @@ stdenv.mkDerivation {
     pango
     pixman
     libucl
+    mesa # for libEGL
     wayland
     wayland-protocols
     wlroots
@@ -42,30 +39,22 @@ stdenv.mkDerivation {
 
   enableParallelBuilding = true;
 
-  # Must replace GNU Make by bmake
-  buildPhase = with stdenv.lib; concatStringsSep " " (
-    [ "bmake" "-j$NIX_BUILD_CORES" "PREFIX=$out" ]
+  makeFlags = with lib; [ "PREFIX=$(out)" ]
     ++ optional stdenv.isLinux "WITH_POSIX_C_SOURCE=YES"
     ++ mapAttrsToList (feat: enabled:
          optionalString enabled "WITH_${toUpper feat}=YES"
-       ) features
-  );
+       ) features;
 
-  # Can't suid in nix store
-  # Run hikari as root (it will drop privileges as early as possible), or create
-  # a systemd unit to give it the necessary permissions/capabilities.
-  patchPhase = ''
+  postPatch = ''
+    # Can't suid in nix store
+    # Run hikari as root (it will drop privileges as early as possible), or create
+    # a systemd unit to give it the necessary permissions/capabilities.
     substituteInPlace Makefile --replace '4555' '555'
-  '';
 
-  installPhase = ''
-    bmake \
-      PREFIX=$out \
-      install
-    runHook postInstall
+    sed -i 's@<drm_fourcc.h>@<libdrm/drm_fourcc.h>@' src/*.c
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Stacking Wayland compositor which is actively developed on FreeBSD but also supports Linux";
     homepage    = "https://hikari.acmelabs.space";
     license     = licenses.bsd2;
diff --git a/pkgs/applications/window-managers/i3/altlayout.nix b/pkgs/applications/window-managers/i3/altlayout.nix
new file mode 100644
index 00000000000..d66ae357236
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/altlayout.nix
@@ -0,0 +1,25 @@
+{ lib, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "i3altlayout";
+  version = "0.3";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "1h0phf3s6ljffxw0bs73k041wildaz01h37iv5mxhami41wrh4qf";
+  };
+
+  pythonPath = with python3Packages; [ enum-compat i3ipc docopt ];
+
+  doCheck = false;
+
+  pythonImportsCheck = [ "i3altlayout" ];
+
+  meta = with lib; {
+    maintainers = with maintainers; [ magnetophon ];
+    description = "Helps you handle more efficiently your screen real estate in i3wm by auto-splitting windows on their longest side";
+    homepage = "https://github.com/deadc0de6/i3altlayout";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/auto-layout.nix b/pkgs/applications/window-managers/i3/auto-layout.nix
new file mode 100644
index 00000000000..754163547e7
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/auto-layout.nix
@@ -0,0 +1,26 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "i3-auto-layout";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner = "chmln";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0ps08lga6qkgc8cgf5cx2lgwlqcnd2yazphh9xd2fznnzrllfxxz";
+  };
+
+  cargoSha256 = "1i01kqvsykanzs7pi94gab9k2dqg1ki40mmjrwa22n0ypkbnvsmx";
+
+  # Currently no tests are implemented, so we avoid building the package twice
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Automatic, optimal tiling for i3wm";
+    homepage = "https://github.com/chmln/i3-auto-layout";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mephistophiles ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/balance-workspace.nix b/pkgs/applications/window-managers/i3/balance-workspace.nix
new file mode 100644
index 00000000000..4647f0a0721
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/balance-workspace.nix
@@ -0,0 +1,23 @@
+{ lib, buildPythonPackage, fetchPypi, i3ipc }:
+
+buildPythonPackage rec {
+  pname = "i3-balance-workspace";
+  version = "1.8.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "7b5d72b756f79878a058484825bb343b100433e00a01f80c9c6d1ccc9f4af57a";
+  };
+
+  propagatedBuildInputs = [ i3ipc ];
+
+  doCheck = false;  # project has no test
+  pythonImportsCheck = [ "i3_balance_workspace" ];
+
+  meta = {
+    description = "Balance windows and workspaces in i3wm";
+    homepage = "https://pypi.org/project/i3-balance-workspace/";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ pacien ];
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/blocks-gaps.nix b/pkgs/applications/window-managers/i3/blocks-gaps.nix
index 4a91865feca..4acc2fb669c 100644
--- a/pkgs/applications/window-managers/i3/blocks-gaps.nix
+++ b/pkgs/applications/window-managers/i3/blocks-gaps.nix
@@ -1,10 +1,10 @@
-{ fetchFromGitHub, stdenv, perl, makeWrapper
-, iproute, acpi, sysstat, alsaUtils
+{ fetchFromGitHub, lib, stdenv, perl, makeWrapper
+, iproute2, acpi, sysstat, alsa-utils
 , scripts ? [ "bandwidth" "battery" "cpu_usage" "disk" "iface"
               "load_average" "memory" "volume" "wifi" ]
 }:
 
-with stdenv.lib;
+with lib;
 
 let
   perlscripts = [ "battery" "cpu_usage" "openvpn" "temperature" ];
@@ -30,18 +30,18 @@ stdenv.mkDerivation rec {
 
   postFixup = ''
     wrapProgram $out/libexec/i3blocks/bandwidth \
-      --prefix PATH : ${makeBinPath (optional (elem "bandwidth" scripts) iproute)}
+      --prefix PATH : ${makeBinPath (optional (elem "bandwidth" scripts) iproute2)}
     wrapProgram $out/libexec/i3blocks/battery \
       --prefix PATH : ${makeBinPath (optional (elem "battery" scripts) acpi)}
     wrapProgram $out/libexec/i3blocks/cpu_usage \
       --prefix PATH : ${makeBinPath (optional (elem "cpu_usage" scripts) sysstat)}
     wrapProgram $out/libexec/i3blocks/iface \
-      --prefix PATH : ${makeBinPath (optional (elem "iface" scripts) iproute)}
+      --prefix PATH : ${makeBinPath (optional (elem "iface" scripts) iproute2)}
     wrapProgram $out/libexec/i3blocks/volume \
-      --prefix PATH : ${makeBinPath (optional (elem "volume" scripts) alsaUtils)}
+      --prefix PATH : ${makeBinPath (optional (elem "volume" scripts) alsa-utils)}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A flexible scheduler for your i3bar blocks -- this is a fork to use with i3-gaps";
     homepage = "https://github.com/Airblader/i3blocks-gaps";
     license = licenses.gpl3;
diff --git a/pkgs/applications/window-managers/i3/blocks.nix b/pkgs/applications/window-managers/i3/blocks.nix
index bfd76b44437..1574c587743 100644
--- a/pkgs/applications/window-managers/i3/blocks.nix
+++ b/pkgs/applications/window-managers/i3/blocks.nix
@@ -1,6 +1,6 @@
-{ fetchFromGitHub, fetchpatch, stdenv, autoreconfHook, pkg-config }:
+{ fetchFromGitHub, fetchpatch, lib, stdenv, autoreconfHook, pkg-config }:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation {
   pname = "i3blocks";
diff --git a/pkgs/applications/window-managers/i3/default.nix b/pkgs/applications/window-managers/i3/default.nix
index b37a83648ae..a51c80bf083 100644
--- a/pkgs/applications/window-managers/i3/default.nix
+++ b/pkgs/applications/window-managers/i3/default.nix
@@ -1,31 +1,29 @@
-{ fetchurl, stdenv, which, pkgconfig, makeWrapper, installShellFiles, libxcb, xcbutilkeysyms
+{ fetchurl, lib, stdenv, pkg-config, makeWrapper, meson, ninja, installShellFiles, libxcb, xcbutilkeysyms
 , xcbutil, xcbutilwm, xcbutilxrm, libstartup_notification, libX11, pcre, libev
 , yajl, xcb-util-cursor, perl, pango, perlPackages, libxkbcommon
-, xorgserver, xvfb_run }:
+, xorgserver, xvfb-run }:
 
 stdenv.mkDerivation rec {
   pname = "i3";
-  version = "4.18.2";
+  version = "4.19.2";
 
   src = fetchurl {
-    url = "https://i3wm.org/downloads/${pname}-${version}.tar.bz2";
-    sha256 = "030jym6b8b07yf4y6pb806hg8k77zsprv569gy0r72rh5zb1g1mj";
+    url = "https://i3wm.org/downloads/${pname}-${version}.tar.xz";
+    sha256 = "sha256-im7hd2idzyKWTSC2CTAU7k+gQZNF0/1RXVUS2ZgLsnk=";
   };
 
-  nativeBuildInputs = [ which pkgconfig makeWrapper installShellFiles ];
+  nativeBuildInputs = [ pkg-config makeWrapper meson ninja installShellFiles ];
 
   buildInputs = [
     libxcb xcbutilkeysyms xcbutil xcbutilwm xcbutilxrm libxkbcommon
     libstartup_notification libX11 pcre libev yajl xcb-util-cursor perl pango
     perlPackages.AnyEventI3 perlPackages.X11XCB perlPackages.IPCRun
     perlPackages.ExtUtilsPkgConfig perlPackages.InlineC
-    xorgserver xvfb_run
+    xorgserver xvfb-run
   ];
 
   configureFlags = [ "--disable-builddir" ];
 
-  enableParallelBuilding = true;
-
   postPatch = ''
     patchShebangs .
   '';
@@ -38,7 +36,7 @@ stdenv.mkDerivation rec {
   # https://github.com/NixOS/nixpkgs/issues/7957
   doCheck = false; # stdenv.hostPlatform.system == "x86_64-linux";
 
-  checkPhase = stdenv.lib.optionalString (stdenv.hostPlatform.system == "x86_64-linux")
+  checkPhase = lib.optionalString (stdenv.hostPlatform.system == "x86_64-linux")
   ''
     (cd testcases && xvfb-run ./complete-run.pl -p 1 --keep-xserver-output)
     ! grep -q '^not ok' testcases/latest/complete-run.log
@@ -55,7 +53,7 @@ stdenv.mkDerivation rec {
 
   separateDebugInfo = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tiling window manager";
     homepage    = "https://i3wm.org";
     maintainers = with maintainers; [ modulistic fpletz globin ];
diff --git a/pkgs/applications/window-managers/i3/easyfocus.nix b/pkgs/applications/window-managers/i3/easyfocus.nix
index 5c7a22eb769..a2ee445eaf1 100644
--- a/pkgs/applications/window-managers/i3/easyfocus.nix
+++ b/pkgs/applications/window-managers/i3/easyfocus.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, xorgproto, libxcb, xcbutilkeysyms
+{ lib, stdenv, fetchFromGitHub, pkg-config, xorgproto, libxcb, xcbutilkeysyms
 , xorg , i3ipc-glib , glib
 }:
 
@@ -13,7 +13,7 @@ stdenv.mkDerivation {
     sha256 = "1db23vzzmp0hnfss1fkd80za6d2pajx7hdwikw50pk95jq0w8wfm";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libxcb xcbutilkeysyms xorgproto xorg.libX11.dev i3ipc-glib glib.dev ];
 
   # Makefile has no rule for 'install'
@@ -22,7 +22,7 @@ stdenv.mkDerivation {
     cp i3-easyfocus $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Focus and select windows in i3";
     homepage = "https://github.com/cornerman/i3-easyfocus";
     maintainers = with maintainers; [teto];
diff --git a/pkgs/applications/window-managers/i3/gaps.nix b/pkgs/applications/window-managers/i3/gaps.nix
index fa1c97c14c1..8ab8c5630d0 100644
--- a/pkgs/applications/window-managers/i3/gaps.nix
+++ b/pkgs/applications/window-managers/i3/gaps.nix
@@ -1,26 +1,22 @@
-{ fetchurl, stdenv, i3, autoreconfHook }:
+{ fetchFromGitHub, lib, i3 }:
 
 i3.overrideAttrs (oldAttrs : rec {
+  pname = "i3-gaps";
+  version = "4.19.1";
 
-  name = "i3-gaps-${version}";
-  version = "4.18.2";
-
-  src = fetchurl {
-    url = "https://github.com/Airblader/i3/releases/download/${version}/i3-${version}.tar.bz2";
-    sha256 = "0lz08wf4b0yprzqsmymn94kiyg885dcwmh0p64v2rnf52s165g2g";
+  src = fetchFromGitHub {
+    owner = "Airblader";
+    repo = "i3";
+    rev = version;
+    sha256 = "sha256-Ydks0hioGAnVBGKraoy3a7Abq9/vHmSne+VFbrYXCug=";
   };
 
-  nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ autoreconfHook ];
-
-  # fatal error: GENERATED_config_enums.h: No such file or directory
-  enableParallelBuilding = false;
-
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A fork of the i3 tiling window manager with some additional features";
     homepage    = "https://github.com/Airblader/i3";
     maintainers = with maintainers; [ fmthoma ];
     license     = licenses.bsd3;
-    platforms   = platforms.all;
+    platforms   = platforms.linux ++ platforms.netbsd ++ platforms.openbsd;
 
     longDescription = ''
       Fork of i3wm, a tiling window manager primarily targeted at advanced users
diff --git a/pkgs/applications/window-managers/i3/i3-ratiosplit.nix b/pkgs/applications/window-managers/i3/i3-ratiosplit.nix
new file mode 100644
index 00000000000..fbd584f2baa
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/i3-ratiosplit.nix
@@ -0,0 +1,26 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "i3-ratiosplit";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "333fred";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0yfmr5zk2c2il9d31yjjbr48sqgcq6hp4a99hl5mjm2ajyhy5bz3";
+  };
+
+  cargoSha256 = "134sgc9d0j57swknl9sgil6212rws2hhp92s3cg1yzz5ygx21c76";
+
+  # Currently no tests are implemented, so we avoid building the package twice
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Resize newly created windows";
+    homepage = "https://github.com/333fred/i3-ratiosplit";
+    license = licenses.mit;
+    maintainers = with maintainers; [ svrana ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/i3-resurrect.nix b/pkgs/applications/window-managers/i3/i3-resurrect.nix
new file mode 100644
index 00000000000..a765d2e298e
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/i3-resurrect.nix
@@ -0,0 +1,22 @@
+{ lib, buildPythonApplication, click, i3ipc, psutil, natsort, fetchPypi, xprop, xdotool, importlib-metadata }:
+
+buildPythonApplication rec {
+  pname = "i3-resurrect";
+  version = "1.4.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0h181frdwpqfj9agw43qgicdvzv1i7xwky0vs0ksd8h18qxqp4hr";
+  };
+
+  propagatedBuildInputs = [ click psutil xprop natsort i3ipc xdotool importlib-metadata ];
+  doCheck = false; # no tests
+
+  meta = with lib; {
+    homepage = "https://github.com/JonnyHaystack/i3-resurrect";
+    description = "A simple but flexible solution to saving and restoring i3 workspaces";
+    license = licenses.gpl3;
+    platforms= platforms.linux;
+    maintainers = with maintainers; [ magnetophon ];
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/i3ipc-glib.nix b/pkgs/applications/window-managers/i3/i3ipc-glib.nix
index af353589a7e..572b12d986c 100644
--- a/pkgs/applications/window-managers/i3/i3ipc-glib.nix
+++ b/pkgs/applications/window-managers/i3/i3ipc-glib.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, xorgproto, libxcb
+{ lib, stdenv, fetchFromGitHub, pkg-config, xorgproto, libxcb
 , autoreconfHook, json-glib, gtk-doc, which
 , gobject-introspection
 }:
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
     sha256 = "01fzvrbnzcwx0vxw29igfpza9zwzp2s7msmzb92v01z0rz0y5m0p";
   };
 
-  nativeBuildInputs = [ autoreconfHook which pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook which pkg-config ];
 
   buildInputs = [ libxcb json-glib gtk-doc xorgproto gobject-introspection ];
 
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
     gtkdocize
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A C interface library to i3wm";
     homepage = "https://github.com/acrisci/i3ipc-glib";
     maintainers = with maintainers; [teto];
diff --git a/pkgs/applications/window-managers/i3/layout-manager.nix b/pkgs/applications/window-managers/i3/layout-manager.nix
index f4c2a53b7a2..8fd0364bb58 100644
--- a/pkgs/applications/window-managers/i3/layout-manager.nix
+++ b/pkgs/applications/window-managers/i3/layout-manager.nix
@@ -1,18 +1,18 @@
-{ stdenv, fetchFromGitHub, vim, makeWrapper, jq, rofi, xrandr, xdotool, i3, gawk, libnotify }:
+{ lib, stdenv, fetchFromGitHub, vim, makeWrapper, jq, rofi, xrandr, xdotool, i3, gawk, libnotify }:
 
 let
-  path = stdenv.lib.makeBinPath [ vim jq rofi xrandr xdotool i3 gawk libnotify ];
+  path = lib.makeBinPath [ vim jq rofi xrandr xdotool i3 gawk libnotify ];
 in
 
 stdenv.mkDerivation rec {
   pname = "i3-layout-manager";
-  version = "unstable-2019-12-06";
+  version = "unstable-2020-05-04";
 
   src = fetchFromGitHub {
     owner = "klaxalk";
     repo = pname;
-    rev = "064e13959413ba2d706185478a394e5852c0dc53";
-    sha256 = "1qm35sp1cfi3xj5j7xwa05dkb3353gwq4xh69ryc6382xx3wszg6";
+    rev = "df54826bba351d8bcd7ebeaf26c07c713af7912c";
+    sha256 = "0ccvr43yp26fnh5d82cw7jcfq2sbxzzmdx2cp15bmxr8ixr8knc3";
   };
 
   nativeBuildInputs = [ makeWrapper ];
@@ -29,9 +29,9 @@ stdenv.mkDerivation rec {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/klaxalk/i3-layout-manager";
-    description = "Saving, loading and managing layouts for i3wm.";
+    description = "Saving, loading and managing layouts for i3wm";
     license = licenses.mit;
     platforms = platforms.linux;
     maintainers = with maintainers; [ ];
diff --git a/pkgs/applications/window-managers/i3/lock-blur.nix b/pkgs/applications/window-managers/i3/lock-blur.nix
new file mode 100644
index 00000000000..a536a44d452
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/lock-blur.nix
@@ -0,0 +1,21 @@
+{ i3lock-color, lib, fetchFromGitHub }:
+
+i3lock-color.overrideAttrs (oldAttrs : rec {
+  pname = "i3lock-blur";
+  version = "2.10";
+
+  src = fetchFromGitHub {
+    owner = "karulont";
+    repo = "i3lock-blur";
+    rev = version;
+    sha256 = "sha256-rBQHYVD9rurzTEXrgEnOziOP22D2EePC1+EV9Wi2pa0=";
+  };
+
+  meta = with lib; {
+    description = "An improved screenlocker based upon XCB and PAM with background blurring filter";
+    homepage = "https://github.com/karulont/i3lock-blur/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.all;
+  };
+})
diff --git a/pkgs/applications/window-managers/i3/lock-color.nix b/pkgs/applications/window-managers/i3/lock-color.nix
index a64e5ea3369..63a49953115 100644
--- a/pkgs/applications/window-managers/i3/lock-color.nix
+++ b/pkgs/applications/window-managers/i3/lock-color.nix
@@ -1,20 +1,20 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, libxcb,
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, libxcb,
   xcbutilkeysyms , xcbutilimage, pam, libX11, libev, cairo, libxkbcommon,
   libxkbfile, libjpeg_turbo, xcbutilxrm
 }:
 
 stdenv.mkDerivation rec {
-  version = "2.12.c.5";
+  version = "2.13.c.4";
   pname = "i3lock-color";
 
   src = fetchFromGitHub {
     owner = "PandorasFox";
     repo = "i3lock-color";
     rev = version;
-    sha256 = "10h50a6p9ivqjz8hd5pn9l03vz6y9dxdx68bprqssfzdkzqnzaiv";
+    sha256 = "sha256-bbjkvgSKD57sdOtPYGLAKpQoIsJnF6s6ySq4dTWC3tI=";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [ libxcb xcbutilkeysyms xcbutilimage pam libX11
     libev cairo libxkbcommon libxkbfile libjpeg_turbo xcbutilxrm ];
 
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
     mv $out/share/man/man1/i3lock.1 $out/share/man/man1/i3lock-color.1
     sed -i 's/\(^\|\s\|"\)i3lock\(\s\|$\)/\1i3lock-color\2/g' $out/share/man/man1/i3lock-color.1
   '';
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A simple screen locker like slock, enhanced version with extra configuration options";
     longDescription = ''
       Simple screen locker. After locking, a colored background (default: white) or
@@ -55,8 +55,6 @@ stdenv.mkDerivation rec {
     maintainers = with maintainers; [ malyn ];
     license = licenses.bsd3;
 
-    # Needs the SSE2 instruction set. See upstream issue
-    # https://github.com/chrjguill/i3lock-color/issues/44
-    platforms = platforms.x86;
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/applications/window-managers/i3/lock-fancy-rapid.nix b/pkgs/applications/window-managers/i3/lock-fancy-rapid.nix
index f6e24d979a4..8884b1d5100 100644
--- a/pkgs/applications/window-managers/i3/lock-fancy-rapid.nix
+++ b/pkgs/applications/window-managers/i3/lock-fancy-rapid.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, xorg, i3lock }:
+{ lib, stdenv, fetchFromGitHub, xorg, i3lock }:
 
 stdenv.mkDerivation rec {
   pname = "i3lock-fancy-rapid";
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     install -D i3lock-fancy-rapid $out/bin/i3lock-fancy-rapid
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A faster implementation of i3lock-fancy";
     homepage = "https://github.com/yvbbrjdr/i3lock-fancy-rapid";
     maintainers = with maintainers; [ nickhu ];
diff --git a/pkgs/applications/window-managers/i3/lock-fancy.nix b/pkgs/applications/window-managers/i3/lock-fancy.nix
index 9b9b2dea132..7e42a8efd7e 100644
--- a/pkgs/applications/window-managers/i3/lock-fancy.nix
+++ b/pkgs/applications/window-managers/i3/lock-fancy.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, coreutils, scrot, imagemagick, gawk
+{ lib, stdenv, fetchFromGitHub, coreutils, scrot, imagemagick, gawk
 , i3lock-color, getopt, fontconfig
 }:
 
@@ -31,8 +31,8 @@ stdenv.mkDerivation rec {
     cp i3lock-fancy $out/bin/i3lock-fancy
     cp icons/lock*.png $out/share/i3lock-fancy/icons
   '';
-  meta = with stdenv.lib; {
-    description = "i3lock is a bash script that takes a screenshot of the desktop, blurs the background and adds a lock icon and text.";
+  meta = with lib; {
+    description = "i3lock is a bash script that takes a screenshot of the desktop, blurs the background and adds a lock icon and text";
     homepage = "https://github.com/meskarune/i3lock-fancy";
     maintainers = with maintainers; [ ];
     license = licenses.mit;
diff --git a/pkgs/applications/window-managers/i3/lock.nix b/pkgs/applications/window-managers/i3/lock.nix
index 2bca01eeefa..03506e889d7 100644
--- a/pkgs/applications/window-managers/i3/lock.nix
+++ b/pkgs/applications/window-managers/i3/lock.nix
@@ -1,16 +1,16 @@
-{ fetchurl, stdenv, which, pkgconfig, libxcb, xcbutilkeysyms, xcbutilimage,
+{ fetchurl, lib, stdenv, which, pkg-config, libxcb, xcbutilkeysyms, xcbutilimage,
   xcbutilxrm, pam, libX11, libev, cairo, libxkbcommon, libxkbfile }:
 
 stdenv.mkDerivation rec {
   pname = "i3lock";
-  version = "2.12";
+  version = "2.13";
 
   src = fetchurl {
     url = "https://i3wm.org/i3lock/${pname}-${version}.tar.bz2";
-    sha256 = "02dwaqxpclcwiwvpvq7zwz4sxcv9c15dbf17ifalj1p8djls3cnh";
+    sha256 = "02szjsaz7rqrdkd0r2nwgwa85c4hwfrcskxw7ryk695kmjcfhzv3";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ which libxcb xcbutilkeysyms xcbutilimage xcbutilxrm
     pam libX11 libev cairo libxkbcommon libxkbfile ];
 
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
     cp *.1 $out/share/man/man1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A simple screen locker like slock";
     longDescription = ''
       Simple screen locker. After locking, a colored background (default: white) or
diff --git a/pkgs/applications/window-managers/i3/pystatus.nix b/pkgs/applications/window-managers/i3/pystatus.nix
index beefdaf891c..bddaab61578 100644
--- a/pkgs/applications/window-managers/i3/pystatus.nix
+++ b/pkgs/applications/window-managers/i3/pystatus.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib
 , fetchFromGitHub
 , libpulseaudio
 , libnotify
@@ -29,7 +29,7 @@ python3Packages.buildPythonApplication rec {
   makeWrapperArgs = [
     # LC_TIME != C results in locale.Error: unsupported locale setting
     "--set" "LC_TIME" "C"
-    "--suffix" "LD_LIBRARY_PATH" ":" "${stdenv.lib.makeLibraryPath [ libpulseaudio ]}"
+    "--suffix" "LD_LIBRARY_PATH" ":" "${lib.makeLibraryPath [ libpulseaudio ]}"
   ];
 
   postPatch = ''
@@ -45,7 +45,7 @@ python3Packages.buildPythonApplication rec {
   # no tests in tarball
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/enkore/i3pystatus";
     description = "A complete replacement for i3status";
     longDescription = ''
diff --git a/pkgs/applications/window-managers/i3/status-rust.nix b/pkgs/applications/window-managers/i3/status-rust.nix
index 8bd3d581434..fe0cde61c6f 100644
--- a/pkgs/applications/window-managers/i3/status-rust.nix
+++ b/pkgs/applications/window-managers/i3/status-rust.nix
@@ -1,26 +1,56 @@
-{ stdenv, rustPlatform, fetchFromGitHub, pkgconfig, dbus, libpulseaudio }:
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, makeWrapper
+, dbus
+, libpulseaudio
+, notmuch
+, openssl
+, ethtool
+}:
 
 rustPlatform.buildRustPackage rec {
   pname = "i3status-rust";
-  version = "0.14.1";
+  version = "0.20.2";
 
   src = fetchFromGitHub {
     owner = "greshake";
     repo = pname;
     rev = "v${version}";
-    sha256 = "11qhzjml04njhfa033v98m4yd522zj91s6ffvrm0m6sk7m0wyjsc";
+    sha256 = "sha256-9PXvQrh0gmn/G+b7sbQffQkPnUKu1eVrvUoJlRBsOEM=";
   };
 
-  cargoSha256 = "0jmmxld4rsjj6p5nazi3d8j1hh7r34q6kyfqq4wv0sjc77gcpaxd";
+  cargoSha256 = "sha256-6orDR2Ml1Fy20uT47EDkEk0rGFxO0djHZsFiqlS1Tk8=";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config makeWrapper ];
 
-  buildInputs = [ dbus libpulseaudio ];
+  buildInputs = [ dbus libpulseaudio notmuch openssl ];
+
+  cargoBuildFlags = [
+    "--features=notmuch"
+    "--features=maildir"
+    "--features=pulseaudio"
+  ];
+
+  prePatch = ''
+    substituteInPlace src/util.rs \
+      --replace "/usr/share/i3status-rust" "$out/share"
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share
+    cp -R files/* $out/share
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/i3status-rs --prefix PATH : "${ethtool}/bin"
+  '';
 
   # Currently no tests are implemented, so we avoid building the package twice
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Very resource-friendly and feature-rich replacement for i3status";
     homepage = "https://github.com/greshake/i3status-rust";
     license = licenses.gpl3;
diff --git a/pkgs/applications/window-managers/i3/status.nix b/pkgs/applications/window-managers/i3/status.nix
index 6005ca3ab3a..8e9cb2d2b76 100644
--- a/pkgs/applications/window-managers/i3/status.nix
+++ b/pkgs/applications/window-managers/i3/status.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, libconfuse, yajl, alsaLib, libpulseaudio, libnl, pkgconfig, asciidoc, xmlto, docbook_xml_dtd_45, docbook_xsl }:
+{ fetchurl, lib, stdenv, libconfuse, yajl, alsa-lib, libpulseaudio, libnl, pkg-config, asciidoc, xmlto, docbook_xml_dtd_45, docbook_xsl }:
 
 stdenv.mkDerivation rec {
   name = "i3status-2.13";
@@ -8,8 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "0rhlzb96mw64z2jnhwz9nibc7pxg549626lz5642xxk5hpzwk2ff";
   };
 
-  nativeBuildInputs = [ pkgconfig asciidoc xmlto docbook_xml_dtd_45 docbook_xsl ];
-  buildInputs = [ libconfuse yajl alsaLib libpulseaudio libnl ];
+  nativeBuildInputs = [ pkg-config asciidoc xmlto docbook_xml_dtd_45 docbook_xsl ];
+  buildInputs = [ libconfuse yajl alsa-lib libpulseaudio libnl ];
 
   makeFlags = [ "all" "PREFIX=$(out)" ];
 
@@ -22,8 +22,8 @@ stdenv.mkDerivation rec {
     description = "Generates a status line for i3bar, dzen2, xmobar or lemonbar";
     homepage = "https://i3wm.org";
     maintainers = [ ];
-    license = stdenv.lib.licenses.bsd3;
-    platforms = stdenv.lib.platforms.all;
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.all;
   };
 
 }
diff --git a/pkgs/applications/window-managers/i3/wk-switch.nix b/pkgs/applications/window-managers/i3/wk-switch.nix
index 51881975266..d0055ef6365 100644
--- a/pkgs/applications/window-managers/i3/wk-switch.nix
+++ b/pkgs/applications/window-managers/i3/wk-switch.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python3Packages }:
+{ lib, fetchFromGitHub, python3Packages }:
 
 python3Packages.buildPythonApplication rec {
   pname = "i3-wk-switch";
@@ -21,7 +21,7 @@ python3Packages.buildPythonApplication rec {
     cp i3-wk-switch.py "$out/bin/i3-wk-switch"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "XMonad-like workspace switching for i3 and sway";
     maintainers = with maintainers; [ synthetica ];
     platforms = platforms.linux;
diff --git a/pkgs/applications/window-managers/i3/wmfocus.nix b/pkgs/applications/window-managers/i3/wmfocus.nix
index c4e22546d1c..7033e573049 100644
--- a/pkgs/applications/window-managers/i3/wmfocus.nix
+++ b/pkgs/applications/window-managers/i3/wmfocus.nix
@@ -1,20 +1,20 @@
-{ stdenv, fetchFromGitHub, rustPlatform
-, xorg, python3, pkgconfig, cairo, libxkbcommon }:
+{ lib, fetchFromGitHub, rustPlatform
+, xorg, python3, pkg-config, cairo, libxkbcommon }:
 
 rustPlatform.buildRustPackage rec {
   pname = "wmfocus";
-  version = "1.1.3";
+  version = "1.1.5";
 
   src = fetchFromGitHub {
     owner = "svenstaro";
     repo = pname;
-    rev = version;
-    sha256 = "17qdsqp9072yr7rcm6g1h620rff95ldawr8ldpkbjmkh0rc86skn";
+    rev = "v${version}";
+    sha256 = "09xffklpz62h6yiksxdlv3a9s1z0wr3ax9syl399avwdmq3c0y49";
   };
 
-  cargoSha256 = "1nsdvzrsgprwq7lsvfpymqslhggdzfk3840y8x92qjb0l2g4jhw1";
+  cargoSha256 = "0fmz3q3yadymbqnkdhjd2z2g4zgf3z81ccixwywndd9zb7p47zdr";
 
-  nativeBuildInputs = [ python3 pkgconfig ];
+  nativeBuildInputs = [ python3 pkg-config ];
   buildInputs = [ cairo libxkbcommon xorg.xcbutilkeysyms ];
 
   # For now, this is the only available featureset. This is also why the file is
@@ -22,7 +22,7 @@ rustPlatform.buildRustPackage rec {
   # users.
   cargoBuildFlags = [ "--features i3" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Visually focus windows by label";
     homepage = "https://github.com/svenstaro/wmfocus";
     license = licenses.mit;
diff --git a/pkgs/applications/window-managers/i3/workstyle.nix b/pkgs/applications/window-managers/i3/workstyle.nix
new file mode 100644
index 00000000000..3f7c252c2c3
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/workstyle.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "workstyle";
+  version = "unstable-2021-05-09";
+
+  src = fetchFromGitHub {
+    owner = "pierrechevalier83";
+    repo = pname;
+    rev = "f2023750d802259ab3ee7d7d1762631ec157a0b1";
+    sha256 = "04xds691sw4pi2nq8xvdhn0312wwia60gkd8b1bjqy11zrqbivbx";
+  };
+
+  cargoSha256 = "0xwv8spr96z4aimjlr15bhwl6i3zqp7jr45d9zr3sbi9d8dbdja2";
+
+  doCheck = false; # No tests
+
+  meta = with lib; {
+    description = "Sway workspaces with style";
+    homepage = "https://github.com/pierrechevalier83/workstyle";
+    license = licenses.mit;
+    maintainers = with maintainers; [ FlorianFranzen ];
+  };
+}
diff --git a/pkgs/applications/window-managers/i3/wsr.nix b/pkgs/applications/window-managers/i3/wsr.nix
new file mode 100644
index 00000000000..6af5717916b
--- /dev/null
+++ b/pkgs/applications/window-managers/i3/wsr.nix
@@ -0,0 +1,33 @@
+{ lib, fetchFromGitHub, rustPlatform, libxcb, python3 }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "i3wsr";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = "roosta";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-JzQWfC0kmnMArpIAE5fgb3YLmXktSCH5aUdrQH9pCbo=";
+  };
+
+  cargoSha256 = "sha256-ZvSdJLaw1nfaqpTBKIiHiXvNFSZhsmLk0PBrV6ykv/w=";
+
+  nativeBuildInputs = [ python3 ];
+  buildInputs = [ libxcb ];
+
+  # has not tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Automatically change i3 workspace names based on their contents";
+    longDescription = ''
+      Automatically sets the workspace names to match the windows on the workspace.
+      The chosen name for a workspace is a user-defined composite of the WM_CLASS X11
+      window property for each window in a workspace.
+    '';
+    homepage = "https://github.com/roosta/i3wsr";
+    license = licenses.mit;
+    maintainers = [ maintainers.sebbadk ];
+  };
+}
diff --git a/pkgs/applications/window-managers/icewm/default.nix b/pkgs/applications/window-managers/icewm/default.nix
index 57f4a764c90..77ed0c561cd 100644
--- a/pkgs/applications/window-managers/icewm/default.nix
+++ b/pkgs/applications/window-managers/icewm/default.nix
@@ -1,31 +1,90 @@
-{ stdenv, fetchFromGitHub, cmake, gettext, perl, asciidoc
-, libjpeg, libtiff, libungif, libpng, imlib, expat
-, freetype, fontconfig, pkgconfig, gdk-pixbuf, gdk-pixbuf-xlib, glib
-, mkfontdir, libX11, libXft, libXext, libXinerama
-, libXrandr, libICE, libSM, libXpm, libXdmcp, libxcb
-, libpthreadstubs, pcre, libXdamage, libXcomposite, libXfixes
-, libsndfile, fribidi }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, asciidoc
+, expat
+, fontconfig
+, freetype
+, fribidi
+, gdk-pixbuf
+, gdk-pixbuf-xlib
+, gettext
+, glib
+, imlib2
+, libICE
+, libSM
+, libX11
+, libXcomposite
+, libXdamage
+, libXdmcp
+, libXext
+, libXfixes
+, libXft
+, libXinerama
+, libXpm
+, libXrandr
+, libjpeg
+, libpng
+, libpthreadstubs
+, libsndfile
+, libtiff
+, giflib
+, libxcb
+, mkfontdir
+, pcre
+, perl
+}:
 
-with stdenv.lib;
 stdenv.mkDerivation rec {
   pname = "icewm";
-  version = "1.7.0";
+  version = "2.3.4";
 
   src = fetchFromGitHub {
-    owner  = "bbidulock";
-    repo   = "icewm";
-    rev    = version;
-    sha256 = "0x6axhwfwxxgnljf3201hvrwa90yacf3ln24lsywrk1bxq9am74b";
+    owner  = "ice-wm";
+    repo = pname;
+    rev = version;
+    hash = "sha256-UyLefj0eY/m3Of51NdhMNMq3z+kaLK28zDe63hbDK5A=";
   };
 
-  nativeBuildInputs = [ cmake pkgconfig perl asciidoc ];
-
+  nativeBuildInputs = [
+    asciidoc
+    cmake
+    perl
+    pkg-config
+  ];
   buildInputs = [
-    gettext libjpeg libtiff libungif libpng imlib expat
-    freetype fontconfig gdk-pixbuf gdk-pixbuf-xlib glib mkfontdir libX11
-    libXft libXext libXinerama libXrandr libICE libSM libXpm
-    libXdmcp libxcb libpthreadstubs pcre libsndfile fribidi
-    libXdamage libXcomposite libXfixes
+    expat
+    fontconfig
+    freetype
+    fribidi
+    gdk-pixbuf
+    gdk-pixbuf-xlib
+    gettext
+    glib
+    imlib2
+    libICE
+    libSM
+    libX11
+    libXcomposite
+    libXdamage
+    libXdmcp
+    libXext
+    libXfixes
+    libXft
+    libXinerama
+    libXpm
+    libXrandr
+    libjpeg
+    libpng
+    libpthreadstubs
+    libsndfile
+    libtiff
+    giflib
+    libxcb
+    mkfontdir
+    pcre
   ];
 
   cmakeFlags = [ "-DPREFIX=$out" "-DCFGDIR=/etc/icewm" ];
@@ -35,14 +94,23 @@ stdenv.mkDerivation rec {
     cp -r ../lib/themes/{gtk2,Natural,nice,nice2,warp3,warp4,yellowmotif} $out/share/icewm/themes/
   '';
 
-  meta = {
+  meta = with lib; {
+    homepage = "https://www.ice-wm.org/";
     description = "A simple, lightweight X window manager";
     longDescription = ''
-      IceWM is a window manager for the X Window System. The goal of
-      IceWM is speed, simplicity, and not getting in the user's way.
+      IceWM is a window manager for the X Window System. The goal of IceWM is
+      speed, simplicity, and not getting in the user’s way. It comes with a
+      taskbar with pager, global and per-window keybindings and a dynamic menu
+      system. Application windows can be managed by keyboard and mouse. Windows
+      can be iconified to the taskbar, to the tray, to the desktop or be made
+      hidden. They are controllable by a quick switch window (Alt+Tab) and in a
+      window list. A handful of configurable focus models are
+      menu-selectable. Setups with multiple monitors are supported by RandR and
+      Xinerama. IceWM is very configurable, themeable and well documented. It
+      includes an optional external background wallpaper manager with
+      transparency support, a simple session manager and a system tray.
     '';
-    homepage = "https://www.ice-wm.org/";
-    license = licenses.lgpl2;
+    license = licenses.lgpl2Only;
     maintainers = [ maintainers.AndersonTorres ];
     platforms = platforms.linux;
   };
diff --git a/pkgs/applications/window-managers/ion-3/default.nix b/pkgs/applications/window-managers/ion-3/default.nix
index 57c91c2cfb7..8f172ac8700 100644
--- a/pkgs/applications/window-managers/ion-3/default.nix
+++ b/pkgs/applications/window-managers/ion-3/default.nix
@@ -1,12 +1,12 @@
-{ stdenv, fetchurl, xlibsWrapper, lua, gettext, groff }:
+{ lib, stdenv, fetchurl, xlibsWrapper, lua, gettext, groff }:
 
 stdenv.mkDerivation {
   name = "ion-3-20090110";
   meta = {
     description = "Tiling tabbed window manager designed with keyboard users in mind";
     homepage = "http://modeemi.fi/~tuomov/ion";
-    platforms = with stdenv.lib.platforms; linux;
-    license = stdenv.lib.licenses.lgpl21;
+    platforms = with lib.platforms; linux;
+    license = lib.licenses.lgpl21;
   };
   src = fetchurl {
     url = "http://tuomov.iki.fi/software/dl/ion-3-20090110.tar.gz";
diff --git a/pkgs/applications/window-managers/jwm/0001-Fix-Gettext-Requirement.patch b/pkgs/applications/window-managers/jwm/0001-Fix-Gettext-Requirement.patch
new file mode 100644
index 00000000000..f7b6a4cb9f1
--- /dev/null
+++ b/pkgs/applications/window-managers/jwm/0001-Fix-Gettext-Requirement.patch
@@ -0,0 +1,14 @@
+diff --git a/configure.ac b/configure.ac
+index 347d325..dce95a0 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -489,7 +489,8 @@ fi
+ ############################################################################
+ AM_ICONV
+ AM_GNU_GETTEXT([external])
+-AM_GNU_GETTEXT_VERSION([0.19])
++AM_GNU_GETTEXT_VERSION([0.19.6])
++AM_GNU_GETTEXT_REQUIRE_VERSION([0.19.6])
+ LDFLAGS="$LDFLAGS $LIBINTL $LIBICONV"
+ 
+ ############################################################################
diff --git a/pkgs/applications/window-managers/jwm/default.nix b/pkgs/applications/window-managers/jwm/default.nix
index 601cf3cded6..3c97c5630b0 100644
--- a/pkgs/applications/window-managers/jwm/default.nix
+++ b/pkgs/applications/window-managers/jwm/default.nix
@@ -1,12 +1,11 @@
-{ stdenv, fetchFromGitHub, pkgconfig, automake, autoconf, libtool,
-  gettext, which, xorg, libX11, libXext, libXinerama, libXpm, libXft,
-  libXau, libXdmcp, libXmu, libpng, libjpeg, expat, xorgproto,
-  librsvg, freetype, fontconfig }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, automake, autoconf, libtool, gettext
+, which, xorg, libX11, libXext, libXinerama, libXpm, libXft, libXau, libXdmcp
+, libXmu, libpng, libjpeg, expat, xorgproto, librsvg, freetype, fontconfig }:
 
 stdenv.mkDerivation rec {
   pname = "jwm";
   version = "1685";
-  
+
   src = fetchFromGitHub {
     owner = "joewing";
     repo = "jwm";
@@ -14,11 +13,28 @@ stdenv.mkDerivation rec {
     sha256 = "1kyvy022sij898g2hm5spy5vq0kw6aqd7fsnawl2xyh06gwh29wg";
   };
 
-  nativeBuildInputs = [ pkgconfig automake autoconf libtool gettext which ];
+  patches = [ ./0001-Fix-Gettext-Requirement.patch ];
+
+  nativeBuildInputs = [ pkg-config automake autoconf libtool gettext which ];
 
-  buildInputs = [ libX11 libXext libXinerama libXpm libXft xorg.libXrender
-    libXau libXdmcp libXmu libpng libjpeg expat xorgproto
-    librsvg freetype fontconfig ];
+  buildInputs = [
+    libX11
+    libXext
+    libXinerama
+    libXpm
+    libXft
+    xorg.libXrender
+    libXau
+    libXdmcp
+    libXmu
+    libpng
+    libjpeg
+    expat
+    xorgproto
+    librsvg
+    freetype
+    fontconfig
+  ];
 
   enableParallelBuilding = true;
 
@@ -27,8 +43,8 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "http://joewing.net/projects/jwm/";
     description = "Joe's Window Manager is a light-weight X11 window manager";
-    license = stdenv.lib.licenses.gpl2;
-    platforms   = stdenv.lib.platforms.unix;
-    maintainers = [ stdenv.lib.maintainers.romildo ];
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.romildo ];
   };
 }
diff --git a/pkgs/applications/window-managers/jwm/jwm-settings-manager.nix b/pkgs/applications/window-managers/jwm/jwm-settings-manager.nix
index d6fe5b4200c..d3b685e7dcd 100644
--- a/pkgs/applications/window-managers/jwm/jwm-settings-manager.nix
+++ b/pkgs/applications/window-managers/jwm/jwm-settings-manager.nix
@@ -1,9 +1,9 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig, gettext, libXpm, libGL, fltk, hicolor-icon-theme, glib, gnome2, which }:
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, gettext, libXpm, libGL, fltk, hicolor-icon-theme, glib, gnome2, which }:
 
 stdenv.mkDerivation {
   pname = "jwm-settings-manager";
   version = "2018-10-19";
-  
+
   src = fetchFromGitHub {
     owner = "Israel-D";
     repo = "jwm-settings-manager";
@@ -13,7 +13,7 @@ stdenv.mkDerivation {
 
   nativeBuildInputs = [
     cmake
-    pkgconfig
+    pkg-config
     gettext
   ];
 
@@ -34,7 +34,7 @@ stdenv.mkDerivation {
       --replace 'DESTINATION usr/share' "DESTINATION share"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A full configuration manager for JWM";
     homepage = "https://joewing.net/projects/jwm";
     license = licenses.gpl3;
diff --git a/pkgs/applications/window-managers/kbdd/default.nix b/pkgs/applications/window-managers/kbdd/default.nix
index de1a68a56bf..2aade360745 100644
--- a/pkgs/applications/window-managers/kbdd/default.nix
+++ b/pkgs/applications/window-managers/kbdd/default.nix
@@ -1,24 +1,24 @@
-{ stdenv, fetchFromGitHub, pkgconfig, dbus-glib, autoreconfHook, xorg }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, dbus-glib, autoreconfHook, xorg }:
 
 stdenv.mkDerivation {
   pname = "kbdd";
-  version = "unstable-2017-01-29";
+  version = "unstable-2021-04-26";
 
   src = fetchFromGitHub {
     owner = "qnikst";
     repo = "kbdd";
-    rev = "0e1056f066ab6e3c74fd0db0c9710a9a2b2538c3";
-    sha256 = "068iqkqxh7928xlmz2pvnykszn9bcq2qgkkiwf37k1vm8fdmgzlj";
+    rev = "3145099e1fbbe65b27678be72465aaa5b5872874";
+    sha256 = "1gzcjnflgdqnjgphiqpzwbcx60hm0h2cprncm7i8xca3ln5q6ba1";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [ xorg.libX11 dbus-glib ];
 
   meta = {
     description = "Simple daemon and library to make per window layout using XKB";
     homepage = "https://github.com/qnikst/kbdd";
-    license = stdenv.lib.licenses.gpl3;
-    platforms = stdenv.lib.platforms.linux;
-    maintainers = [ stdenv.lib.maintainers.wedens ];
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.wedens ];
   };
 }
diff --git a/pkgs/applications/window-managers/labwc/default.nix b/pkgs/applications/window-managers/labwc/default.nix
new file mode 100644
index 00000000000..afa391e09d8
--- /dev/null
+++ b/pkgs/applications/window-managers/labwc/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, pkg-config
+, meson
+, ninja
+, cairo
+, glib
+, libinput
+, libxml2
+, pango
+, wayland
+, wayland-protocols
+, wlroots
+, libxcb
+, libxkbcommon
+, xwayland
+, libdrm
+, scdoc
+}:
+
+stdenv.mkDerivation rec {
+  pname = "labwc";
+  version = "0.2.1"; # We're effectively using that version
+
+  src = fetchFromGitHub {
+    owner = "johanmalm";
+    repo = pname;
+    rev = "6744e103014bcb0480133a029ec0f82f9b017e60";
+    sha256 = "0sdr4zkix8x3vmna4i946y3whpj7fqizpaac6yj7w0as9d6hj0iq";
+  };
+
+  patches = [
+    # To fix the build with wlroots 0.14:
+    (fetchpatch {
+      # output: access texture width/height directly
+      url = "https://github.com/johanmalm/labwc/commit/892e93dd84c514b4e6f34a0fab01c727edd2d8de.patch";
+      sha256 = "1p1pg1kd98727wlcspa2sffl7ijhvsfad6bj2rxsw322q0bz3yrh";
+    })
+    (fetchpatch {
+      # xdg: chase swaywm/wlroots@9e58301
+      url = "https://github.com/johanmalm/labwc/commit/874cc9e63706dd54d9f9fcb071f2d2e0c19d3d7e.patch";
+      sha256 = "0ypd47q5ffq4wjkrcr3068qjknn2s66zszyxg3dl0f87q2pxh6wx";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config meson ninja scdoc ];
+  buildInputs = [
+    cairo
+    glib
+    libinput
+    libxml2
+    pango
+    wayland
+    wayland-protocols
+    wlroots
+    libxcb
+    libxkbcommon
+    xwayland
+    libdrm
+  ];
+
+  mesonFlags = [ "-Dxwayland=enabled" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/johanmalm/labwc";
+    description = "Openbox alternative for Wayland";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/applications/window-managers/larswm/default.nix b/pkgs/applications/window-managers/larswm/default.nix
index b918c28938c..e9d400378e6 100644
--- a/pkgs/applications/window-managers/larswm/default.nix
+++ b/pkgs/applications/window-managers/larswm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, imake, gccmakedep, libX11, libXext, libXmu }:
+{ lib, stdenv, fetchurl, imake, gccmakedep, libX11, libXext, libXmu }:
 
 stdenv.mkDerivation {
   name = "larswm-7.5.3";
@@ -17,7 +17,7 @@ stdenv.mkDerivation {
   meta = {
     homepage = "http://www.fnurt.net/larswm";
     description = "9wm-like tiling window manager";
-    license = stdenv.lib.licenses.free;
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.free;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/applications/window-managers/leftwm/default.nix b/pkgs/applications/window-managers/leftwm/default.nix
index 06ebd7e0e92..e8330ee2936 100644
--- a/pkgs/applications/window-managers/leftwm/default.nix
+++ b/pkgs/applications/window-managers/leftwm/default.nix
@@ -1,35 +1,38 @@
-{ stdenv, fetchFromGitHub, rustPlatform, libX11, libXinerama, makeWrapper }:
+{ lib, fetchFromGitHub, rustPlatform, libX11, libXinerama }:
 
 let
-    rpath = stdenv.lib.makeLibraryPath [ libXinerama libX11 ];
+  rpathLibs = [ libXinerama libX11 ];
 in
 
 rustPlatform.buildRustPackage rec {
   pname = "leftwm";
-  version = "0.2.4";
+  version = "0.2.8";
 
   src = fetchFromGitHub {
     owner = "leftwm";
     repo = "leftwm";
     rev = version;
-    sha256 = "0xmkhkdpz1bpczrar9y6assdzhd7qxybnkjqs36h099fk9xqmsav";
+    sha256 = "sha256-T4A9NGT6sUSTKmLcAWjcp3Y8QQzZFAVSXevXtGm3szY=";
   };
 
-  cargoSha256 = "06wnx81fhs19pz5qnir6h2v2kmj73y1g354nadcx6650q9pnhdv4";
+  cargoSha256 = "sha256-2prRtdBxpYc2xI/bLZNlqs3mxESfO9GhNUSlKFF//eE=";
 
-  buildInputs = [ makeWrapper libX11 libXinerama ];
+  buildInputs = rpathLibs;
 
   postInstall = ''
-    wrapProgram $out/bin/leftwm --prefix LD_LIBRARY_PATH : "${rpath}"
-    wrapProgram $out/bin/leftwm-state --prefix LD_LIBRARY_PATH : "${rpath}"
-    wrapProgram $out/bin/leftwm-worker --prefix LD_LIBRARY_PATH : "${rpath}"
+    for p in $out/bin/leftwm*; do
+      patchelf --set-rpath "${lib.makeLibraryPath rpathLibs}" $p
+    done
   '';
 
-  meta = with stdenv.lib; {
-    description = "Leftwm - A tiling window manager for the adventurer";
+  dontPatchELF = true;
+
+  meta = with lib; {
+    description = "A tiling window manager for the adventurer";
     homepage = "https://github.com/leftwm/leftwm";
     license = licenses.mit;
     platforms = platforms.linux;
     maintainers = with maintainers; [ mschneider ];
+    changelog = "https://github.com/leftwm/leftwm/blob/${version}/CHANGELOG";
   };
 }
diff --git a/pkgs/applications/window-managers/lemonbar/default.nix b/pkgs/applications/window-managers/lemonbar/default.nix
index 89b4fecc206..8f553eb4b55 100644
--- a/pkgs/applications/window-managers/lemonbar/default.nix
+++ b/pkgs/applications/window-managers/lemonbar/default.nix
@@ -1,22 +1,25 @@
-{ stdenv, fetchurl, perl, libxcb }:
+{ lib, stdenv, fetchFromGitHub, perl, libxcb }:
 
-stdenv.mkDerivation {
-  name = "lemonbar-1.3";
-  
-  src = fetchurl {
-    url    = "https://github.com/LemonBoy/bar/archive/v1.3.tar.gz";
-    sha256 = "0zd3v8ys4jzi60pm3wq7p3pbbd5y0acimgiq46qx1ckmwg2q9rza";
+stdenv.mkDerivation rec {
+  pname = "lemonbar";
+  version = "1.4";
+
+  src = fetchFromGitHub {
+    owner = "LemonBoy";
+    repo = "bar";
+    rev = "v${version}";
+    sha256 = "sha256-lmppcnQ8r4jEuhegpTBxYqxfTTS/IrbtQVZ44HqnoWo=";
   };
-  
+
   buildInputs = [ libxcb perl ];
-  
-  prePatch = ''sed -i "s@/usr@$out@" Makefile'';
-  
-  meta = with stdenv.lib; {
+
+  installFlags = [ "DESTDIR=$(out)" "PREFIX=" ];
+
+  meta = with lib; {
     description = "A lightweight xcb based bar";
     homepage = "https://github.com/LemonBoy/bar";
-    maintainers = [ maintainers.meisternu ];
-    license = "Custom";   
+    maintainers = with maintainers; [ meisternu fortuneteller2k ];
+    license = licenses.mit;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/applications/window-managers/lemonbar/xft.nix b/pkgs/applications/window-managers/lemonbar/xft.nix
index a70e5a4dc5c..54e7820ec4c 100644
--- a/pkgs/applications/window-managers/lemonbar/xft.nix
+++ b/pkgs/applications/window-managers/lemonbar/xft.nix
@@ -1,23 +1,25 @@
-{ stdenv, fetchFromGitHub, perl, libxcb, libXft }:
+{ lib, stdenv, fetchFromGitHub, perl, libxcb, libXft }:
 
 stdenv.mkDerivation {
-  name = "lemonbar-xft-unstable-2016-02-17";
+  pname = "lemonbar-xft";
+  version = "unstable-2020-09-10";
 
   src = fetchFromGitHub {
-    owner  = "krypt-n";
-    repo   = "bar";
-    rev    = "a43b801ddc0f015ce8b1211f4c062fad12cd63a9";
-    sha256 = "0iqas07qjvabxyvna2m9aj5bcwnkdii1izl9jxha63vz0zlsc4gd";
+    owner = "drscream";
+    repo = "lemonbar-xft";
+    rev = "481e12363e2a0fe0ddd2176a8e003392be90ed02";
+    sha256 = "sha256-BNYBbUouqqsRQaPkpg+UKg62IV9uI34gKJuiAM94CBU=";
   };
 
   buildInputs = [ libxcb libXft perl ];
 
-  prePatch = ''sed -i "s@/usr@$out@" Makefile'';
+  installFlags = [ "DESTDIR=$(out)" "PREFIX=" ];
 
-  meta = {
+  meta = with lib; {
     description = "A lightweight xcb based bar with XFT-support";
-    homepage = "https://github.com/krypt-n/bar";
-    license = "Custom";
-    platforms = stdenv.lib.platforms.linux;
+    homepage = "https://github.com/drscream/lemonbar-xft";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ fortuneteller2k ];
   };
 }
diff --git a/pkgs/applications/window-managers/lwm/default.nix b/pkgs/applications/window-managers/lwm/default.nix
index 49cdc81b9ce..cf1088c8223 100644
--- a/pkgs/applications/window-managers/lwm/default.nix
+++ b/pkgs/applications/window-managers/lwm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl
+{ lib, stdenv, fetchurl
 , imake, libX11, libSM, libXext, libICE }:
 
 stdenv.mkDerivation rec {
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
     install -m644 lwm.man $out/share/man/man1/lwm.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Lightweight Window Manager";
     longDescription = ''
       lwm is a window manager for X that tries to keep out of your face. There
diff --git a/pkgs/applications/window-managers/matchbox/default.nix b/pkgs/applications/window-managers/matchbox/default.nix
index 3c537d6c931..51bb3010d33 100644
--- a/pkgs/applications/window-managers/matchbox/default.nix
+++ b/pkgs/applications/window-managers/matchbox/default.nix
@@ -1,10 +1,10 @@
-{ stdenv, fetchurl, pkgconfig, libmatchbox, libX11, libXext }:
+{ lib, stdenv, fetchurl, pkg-config, libmatchbox, libX11, libXext }:
 
 stdenv.mkDerivation rec {
   pname = "matchbox";
   version = "1.2";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libmatchbox ];
   NIX_LDFLAGS = "-lX11 -L${libX11}/lib -lXext -L${libXext}/lib";
 
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
   meta = {
     description = "X window manager for non-desktop embedded systems";
     homepage = "https://www.yoctoproject.org/software-item/matchbox/";
-    license = stdenv.lib.licenses.gpl2Plus;
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/applications/window-managers/neocomp/default.nix b/pkgs/applications/window-managers/neocomp/default.nix
index 57968922c39..e878f4f088e 100644
--- a/pkgs/applications/window-managers/neocomp/default.nix
+++ b/pkgs/applications/window-managers/neocomp/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , asciidoc
 , docbook_xml_dtd_45
@@ -16,27 +16,30 @@
 , libXinerama
 , libXrandr
 , libXrender
+, libXres
 , pcre
-, pkgconfig
+, pkg-config
 }:
-let
-  rev   = "v0.6-17-g271e784";
-in
+
 stdenv.mkDerivation rec {
-  pname = "neocomp-unstable";
-  version = "2019-03-12";
+  pname = "neocomp";
+  version = "unstable-2021-04-06";
 
   src = fetchFromGitHub {
-    inherit rev;
-    owner  = "DelusionalLogic";
-    repo   = "NeoComp";
-    sha256 = "1mp338vz1jm5pwf7pi5azx4hzykmvpkwzx1kw6a9anj272f32zpg";
+    owner = "DelusionalLogic";
+    repo = "NeoComp";
+    rev = "ccd340d7b2dcd3f828aff958a638cc23686aee6f";
+    sha256 = "sha256-tLLEwpAGNVTC+N41bM7pfskIli4Yvc95wH2/NT0OZ+8=";
   };
 
-  buildInputs = [
+  nativeBuildInputs = [
     asciidoc
     docbook_xml_dtd_45
     docbook_xsl
+    pkg-config
+  ];
+
+  buildInputs = [
     freetype
     judy
     libGL
@@ -50,15 +53,15 @@ stdenv.mkDerivation rec {
     libXinerama
     libXrandr
     libXrender
+    libXres
     pcre
-    pkgconfig
   ];
 
   makeFlags = [
     "PREFIX=${placeholder "out"}"
     "CFGDIR=${placeholder "out"}/etc/xdg/neocomp"
     "ASTDIR=${placeholder "out"}/share/neocomp/assets"
-    "COMPTON_VERSION=git-${rev}-${version}"
+    "COMPTON_VERSION=${version}"
   ];
 
   postPatch = ''
@@ -70,10 +73,10 @@ stdenv.mkDerivation rec {
       "#define MAX_PATH_LENGTH 128"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage        = "https://github.com/DelusionalLogic/NeoComp";
-    license         = licenses.gpl3;
-    maintainers     = with maintainers; [ twey ];
+    license         = licenses.gpl3Only;
+    maintainers     = with maintainers; [ twey fortuneteller2k ];
     platforms       = platforms.linux;
     description     = "A fork of Compton, a compositor for X11";
     longDescription = ''
diff --git a/pkgs/applications/window-managers/notion/default.nix b/pkgs/applications/window-managers/notion/default.nix
index 494bb9ff1b7..e59103d7d6d 100644
--- a/pkgs/applications/window-managers/notion/default.nix
+++ b/pkgs/applications/window-managers/notion/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig
+{ lib, stdenv, fetchFromGitHub, pkg-config
 , lua, gettext, which, groff, xmessage, xterm
 , readline, fontconfig, libX11, libXext, libSM
 , libXinerama, libXrandr, libXft
@@ -7,16 +7,16 @@
 
 stdenv.mkDerivation rec {
   pname = "notion";
-  version = "4.0.1";
+  version = "4.0.2";
 
   src = fetchFromGitHub {
     owner = "raboof";
     repo = pname;
     rev = version;
-    sha256 = "1s0fyacygvc9iz7b9v3b2cmzzqc02nh4g1p9bfcxbg254iscd502";
+    sha256 = "14swd0yqci8lxn259fkd9w92bgyf4rmjwgvgyqp78wlfix6ai4mv";
   };
 
-  nativeBuildInputs = [ pkgconfig makeWrapper groff ];
+  nativeBuildInputs = [ pkg-config makeWrapper groff ];
   buildInputs = [ lua gettext which readline fontconfig libX11 libXext libSM
                   libXinerama libXrandr libXft xlibsWrapper ];
 
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
       --prefix PATH ":" "${xmessage}/bin:${xterm}/bin" \
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tiling tabbed window manager";
     homepage = "https://notionwm.net";
     license   = licenses.lgpl21;
diff --git a/pkgs/applications/window-managers/openbox/default.nix b/pkgs/applications/window-managers/openbox/default.nix
index 39329e8004c..093b6d1884c 100644
--- a/pkgs/applications/window-managers/openbox/default.nix
+++ b/pkgs/applications/window-managers/openbox/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, autoreconfHook, pkgconfig, python3
+{ lib, stdenv, fetchurl, autoreconfHook, pkg-config, python3
 , libxml2, libXinerama, libXcursor, libXau, libXrandr, libICE, libSM
 , imlib2, pango, libstartup_notification, makeWrapper }:
 
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [
     autoreconfHook
-    pkgconfig
+    pkg-config
     makeWrapper
     python3.pkgs.wrapPython
   ];
@@ -42,7 +42,7 @@ stdenv.mkDerivation rec {
     # Use fetchurl to avoid "fetchpatch: ignores file renames" #32084
     # This patch adds python3 support
     (fetchurl {
-      url = "https://git.archlinux.org/svntogit/community.git/plain/openbox/trunk/py3.patch?id=90cb57ef53d952bb6ab4c33a184f815bbe1791c0";
+      url = "https://raw.githubusercontent.com/archlinux/svntogit-community/90cb57ef53d952bb6ab4c33a184f815bbe1791c0/openbox/trunk/py3.patch";
       sha256 = "1ks99awlkhd5ph9kz94s1r6m1bfvh42g4rmxd14dyg5b421p1ljc";
     })
   ];
@@ -62,7 +62,7 @@ stdenv.mkDerivation rec {
   meta = {
     description = "X window manager for non-desktop embedded systems";
     homepage = "http://openbox.org/";
-    license = stdenv.lib.licenses.gpl2Plus;
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/applications/window-managers/oroborus/default.nix b/pkgs/applications/window-managers/oroborus/default.nix
index 21b18a4917b..0124261e423 100644
--- a/pkgs/applications/window-managers/oroborus/default.nix
+++ b/pkgs/applications/window-managers/oroborus/default.nix
@@ -1,16 +1,16 @@
-{ stdenv, fetchurl, pkgconfig
+{ lib, stdenv, fetchurl, pkg-config
 , freetype, fribidi
 , libSM, libICE, libXt, libXaw, libXmu
 , libXext, libXft, libXpm, libXrandr
 , libXrender, xorgproto, libXinerama }:
 
-with stdenv.lib;
+with lib;
 stdenv.mkDerivation rec {
 
   pname = "oroborus";
   version = "2.0.20";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ freetype fribidi libSM libICE libXt libXaw libXmu libXext
                   libXft libXpm libXrandr libXrender xorgproto libXinerama ];
 
diff --git a/pkgs/applications/window-managers/pekwm/default.nix b/pkgs/applications/window-managers/pekwm/default.nix
index da2c11c873b..fcce16c08ba 100644
--- a/pkgs/applications/window-managers/pekwm/default.nix
+++ b/pkgs/applications/window-managers/pekwm/default.nix
@@ -1,22 +1,39 @@
-{ stdenv, fetchurl, pkgconfig
-, libpng, libjpeg
-, libXext, libXft, libXpm, libXrandr, libXinerama }:
+{ lib, stdenv
+, fetchFromGitHub
+, pkg-config
+, cmake
+, libXext
+, libXft
+, libXinerama
+, libXpm
+, libXrandr
+, libjpeg
+, libpng
+}:
 
 stdenv.mkDerivation rec {
-
   pname = "pekwm";
-  version = "0.1.17";
+  version = "0.1.18";
 
-  src = fetchurl {
-    url = "https://www.pekwm.org/projects/pekwm/files/${pname}-${version}.tar.bz2";
-    sha256 = "003x6bxj1lb2ljxz3v414bn0rdl6z68c0r185fxwgs1qkyzx67wa";
+  src = fetchFromGitHub {
+    owner = "pekdon";
+    repo = "pekwm";
+    rev = "release-${version}";
+    sha256 = "sha256-R1XDEk097ycMI3R4SjUEJv37CiMaDCQMvg7N8haN0MM=";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ libpng libjpeg
-  libXext libXft libXpm libXrandr libXinerama ];
+  nativeBuildInputs = [ pkg-config cmake ];
+  buildInputs = [
+    libXext
+    libXft
+    libXinerama
+    libXpm
+    libXrandr
+    libjpeg
+    libpng
+  ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A lightweight window manager";
     longDescription = ''
       pekwm is a window manager that once upon a time was based on the
@@ -24,7 +41,7 @@ stdenv.mkDerivation rec {
       longer resembles aewm++ at all. It has a much expanded
       feature-set, including window grouping (similar to ion, pwm, or
       fluxbox), autoproperties, xinerama, keygrabber that supports
-      keychains, and much more.      
+      keychains, and much more.
       - Lightweight and Unobtrusive, a window manager shouldn't be
         noticed.
       - Very configurable, we all work and think in different ways.
@@ -33,7 +50,7 @@ stdenv.mkDerivation rec {
       - Chainable Keygrabber, usability for everyone.
     '';
       homepage = "http://www.pekwm.org";
-      license = licenses.gpl2;
+      license = licenses.gpl2Plus;
       maintainers = [ maintainers.AndersonTorres ];
       platforms = platforms.linux;
   };
diff --git a/pkgs/applications/window-managers/phosh/default.nix b/pkgs/applications/window-managers/phosh/default.nix
new file mode 100644
index 00000000000..9fa0959ed50
--- /dev/null
+++ b/pkgs/applications/window-managers/phosh/default.nix
@@ -0,0 +1,136 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, meson
+, ninja
+, pkg-config
+, python3
+, wrapGAppsHook
+, libhandy
+, libxkbcommon
+, pulseaudio
+, glib
+, gtk3
+, gnome
+, gcr
+, pam
+, systemd
+, upower
+, wayland
+, dbus
+, xvfb-run
+, phoc
+, feedbackd
+, networkmanager
+, polkit
+, libsecret
+, writeText
+}:
+
+let
+  gvc = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GNOME";
+    repo = "libgnome-volume-control";
+    rev = "ae1a34aafce7026b8c0f65a43c9192d756fe1057";
+    sha256 = "0a4qh5pgyjki904qf7qmvqz2ksxb0p8xhgl2aixfbhixn0pw6saw";
+  };
+in stdenv.mkDerivation rec {
+  pname = "phosh";
+  version = "0.12.0";
+
+  src = fetchFromGitLab {
+    domain = "source.puri.sm";
+    owner = "Librem5";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1s0lgq04qz562iri535wpwvfkmmngdpclyl329cf7rc9ihy1kjvs";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    phoc
+    libhandy
+    libsecret
+    libxkbcommon
+    pulseaudio
+    glib
+    gcr
+    networkmanager
+    polkit
+    gnome.gnome-control-center
+    gnome.gnome-desktop
+    gnome.gnome-session
+    gtk3
+    pam
+    systemd
+    upower
+    wayland
+    feedbackd
+  ];
+
+  checkInputs = [
+    dbus
+    xvfb-run
+  ];
+
+  # Temporarily disabled - Test is broken (SIGABRT)
+  doCheck = false;
+
+  mesonFlags = [ "-Dsystemd=true" "-Dcompositor=${phoc}/bin/phoc" ];
+
+  postUnpack = ''
+    rmdir $sourceRoot/subprojects/gvc
+    ln -s ${gvc} $sourceRoot/subprojects/gvc
+  '';
+
+  postPatch = ''
+    chmod +x build-aux/post_install.py
+    patchShebangs build-aux/post_install.py
+  '';
+
+  checkPhase = ''
+    runHook preCheck
+    export NO_AT_BRIDGE=1
+    xvfb-run -s '-screen 0 800x600x24' dbus-run-session \
+      --config-file=${dbus.daemon}/share/dbus-1/session.conf \
+      meson test --print-errorlogs
+    runHook postCheck
+  '';
+
+  # Depends on GSettings schemas in gnome-shell
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix XDG_DATA_DIRS : "${gnome.gnome-shell}/share/gsettings-schemas/${gnome.gnome-shell.name}"
+      --set GNOME_SESSION "${gnome.gnome-session}/bin/gnome-session"
+    )
+  '';
+
+  postFixup = ''
+    mkdir -p $out/share/wayland-sessions
+    ln -s $out/share/applications/sm.puri.Phosh.desktop $out/share/wayland-sessions/
+    # The OSK0.desktop points to a dummy stub that's not needed
+    rm $out/share/applications/sm.puri.OSK0.desktop
+  '';
+
+  passthru = {
+    providedSessions = [
+     "sm.puri.Phosh"
+    ];
+  };
+
+  meta = with lib; {
+    description = "A pure Wayland shell prototype for GNOME on mobile devices";
+    homepage = "https://source.puri.sm/Librem5/phosh";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ archseer jtojnar masipcat zhaofengli ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/picom/default.nix b/pkgs/applications/window-managers/picom/default.nix
index 8ea724aa694..32eee9df0d8 100644
--- a/pkgs/applications/window-managers/picom/default.nix
+++ b/pkgs/applications/window-managers/picom/default.nix
@@ -1,51 +1,96 @@
-{ stdenv, lib, fetchFromGitHub, pkgconfig, uthash, asciidoc, docbook_xml_dtd_45
-, docbook_xsl, libxslt, libxml2, makeWrapper, meson, ninja
-, xorgproto, libxcb ,xcbutilrenderutil, xcbutilimage, pixman, libev
-, dbus, libconfig, libdrm, libGL, pcre, libX11
-, libXinerama, libXext, xwininfo, libxdg_basedir }:
+{ asciidoc
+, dbus
+, docbook_xml_dtd_45
+, docbook_xsl
+, fetchFromGitHub
+, lib
+, libconfig
+, libdrm
+, libev
+, libGL
+, libX11
+, libxcb
+, libxdg_basedir
+, libXext
+, libXinerama
+, libxml2
+, libxslt
+, makeWrapper
+, meson
+, ninja
+, pcre
+, pixman
+, pkg-config
+, stdenv
+, uthash
+, xcbutilimage
+, xcbutilrenderutil
+, xorgproto
+, xwininfo
+, withDebug ? false
+}:
 
 stdenv.mkDerivation rec {
   pname = "picom";
-  version = "8";
+  version = "8.2";
 
   src = fetchFromGitHub {
-    owner  = "yshui";
-    repo   = "picom";
-    rev    = "v${version}";
-    sha256 = "04svbv7v73q8yn9la69451rda6l2pgxcphv2zlkdqaxxdbp69195";
+    owner = "yshui";
+    repo = "picom";
+    rev = "v${version}";
+    sha256 = "0gjksayz2xpmgglvw17ppsan2imrd1fijs579kbf27xwp503xgfl";
     fetchSubmodules = true;
   };
 
   nativeBuildInputs = [
-    meson ninja
-    pkgconfig
-    uthash
     asciidoc
     docbook_xml_dtd_45
     docbook_xsl
     makeWrapper
+    meson
+    ninja
+    pkg-config
+    uthash
   ];
 
   buildInputs = [
-    dbus libX11 libXext
-    xorgproto
-    libXinerama libdrm pcre libxml2 libxslt libconfig libGL
-    libxcb xcbutilrenderutil xcbutilimage
-    pixman libev
+    dbus
+    libconfig
+    libdrm
+    libev
+    libGL
+    libX11
+    libxcb
     libxdg_basedir
+    libXext
+    libXinerama
+    libxml2
+    libxslt
+    pcre
+    pixman
+    xcbutilimage
+    xcbutilrenderutil
+    xorgproto
   ];
 
-  NIX_CFLAGS_COMPILE = "-fno-strict-aliasing";
+  # Use "debugoptimized" instead of "debug" so perhaps picom works better in
+  # normal usage too, not just temporary debugging.
+  mesonBuildType = if withDebug then "debugoptimized" else "release";
+  dontStrip = withDebug;
 
   mesonFlags = [
-    "-Dbuild_docs=true"
+    "-Dwith_docs=true"
   ];
 
   installFlags = [ "PREFIX=$(out)" ];
 
+  # In debug mode, also copy src directory to store. If you then run `gdb picom`
+  # in the bin directory of picom store path, gdb finds the source files.
   postInstall = ''
     wrapProgram $out/bin/picom-trans \
       --prefix PATH : ${lib.makeBinPath [ xwininfo ]}
+  '' + lib.optionalString withDebug ''
+    cp -r ../src $out/
   '';
 
   meta = with lib; {
@@ -56,10 +101,17 @@ stdenv.mkDerivation rec {
       extensions. It enables basic eye-candy effects. This fork adds
       additional features, such as additional effects, and a fork at a
       well-defined and proper place.
+
+      The package can be installed in debug mode as:
+
+        picom.override { withDebug = true; }
+
+      For gdb to find the source files, you need to run gdb in the bin directory
+      of picom package in the nix store.
     '';
     license = licenses.mit;
     homepage = "https://github.com/yshui/picom";
-    maintainers = with maintainers; [ ertes enzime twey ];
+    maintainers = with maintainers; [ ertes twey thiagokokada ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/applications/window-managers/qtile/default.nix b/pkgs/applications/window-managers/qtile/default.nix
index eccf5c163a8..08b3a9834b6 100644
--- a/pkgs/applications/window-managers/qtile/default.nix
+++ b/pkgs/applications/window-managers/qtile/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python37Packages, glib, cairo, pango, pkgconfig, libxcb, xcbutilcursor }:
+{ lib, fetchFromGitHub, python37Packages, glib, cairo, pango, pkg-config, libxcb, xcbutilcursor }:
 
 let cairocffi-xcffib = python37Packages.cairocffi.override {
     withXcffib = true;
@@ -31,10 +31,21 @@ python37Packages.buildPythonApplication rec {
 
   SETUPTOOLS_SCM_PRETEND_VERSION = version;
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ glib libxcb cairo pango python37Packages.xcffib ];
 
-  pythonPath = with python37Packages; [ xcffib cairocffi-xcffib setuptools setuptools_scm ]; 
+  pythonPath = with python37Packages; [
+    xcffib
+    cairocffi-xcffib
+    setuptools
+    setuptools-scm
+    python-dateutil
+    dbus-python
+    mpd2
+    psutil
+    pyxdg
+    pygobject3
+  ];
 
   postInstall = ''
     wrapProgram $out/bin/qtile \
@@ -45,7 +56,7 @@ python37Packages.buildPythonApplication rec {
 
   doCheck = false; # Requires X server #TODO this can be worked out with the existing NixOS testing infrastructure.
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.qtile.org/";
     license = licenses.mit;
     description = "A small, flexible, scriptable tiling window manager written in Python";
diff --git a/pkgs/applications/window-managers/ratpoison/default.nix b/pkgs/applications/window-managers/ratpoison/default.nix
index 4c7cdf1069f..472707bf35c 100644
--- a/pkgs/applications/window-managers/ratpoison/default.nix
+++ b/pkgs/applications/window-managers/ratpoison/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, perl, autoconf, automake
+{ lib, stdenv, fetchurl, pkg-config, perl, autoconf, automake
 , libX11, xorgproto, libXt, libXpm, libXft, libXtst, libXi
 , libXrandr, fontconfig, freetype, readline
 }:
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
     "--enable-history"
   ];
 
-  nativeBuildInputs = [ pkgconfig autoconf automake ];
+  nativeBuildInputs = [ pkg-config autoconf automake ];
 
   buildInputs =
     [ perl
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
     mv $out/share/ratpoison $contrib/share
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.nongnu.org/ratpoison/";
     description = "Simple mouse-free tiling window manager";
     license = licenses.gpl2Plus;
diff --git a/pkgs/applications/window-managers/river/default.nix b/pkgs/applications/window-managers/river/default.nix
new file mode 100644
index 00000000000..317c08c5d89
--- /dev/null
+++ b/pkgs/applications/window-managers/river/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, zig
+, wayland
+, pkg-config
+, scdoc
+, xwayland
+, wayland-protocols
+, wlroots
+, libxkbcommon
+, pixman
+, udev
+, libevdev
+, libinput
+, libX11
+, libGL
+}:
+
+stdenv.mkDerivation rec {
+  pname = "river";
+  version = "unstable-2021-06-27";
+
+  src = fetchFromGitHub {
+    owner = "ifreund";
+    repo = pname;
+    rev = "39578db1344ca298f2bb2fe2278a35108d5f2b66";
+    sha256 = "sha256-DQroN+FV7sq0PyczERZgnW73YKAVvj2JJQjfzidlBI8=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ zig wayland xwayland scdoc pkg-config ];
+
+  buildInputs = [
+    wayland-protocols
+    wlroots
+    pixman
+    libxkbcommon
+    pixman
+    udev
+    libevdev
+    libinput
+    libX11
+    libGL
+  ];
+
+  dontConfigure = true;
+
+  preBuild = ''
+    export HOME=$TMPDIR
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    zig build -Drelease-safe -Dcpu=baseline -Dxwayland -Dman-pages --prefix $out install
+    runHook postInstall
+  '';
+
+  /*
+    Builder patch install dir into river to get default config
+    When installFlags is removed, river becomes half broken.
+    See https://github.com/ifreund/river/blob/7ffa2f4b9e7abf7d152134f555373c2b63ccfc1d/river/main.zig#L56
+  */
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/ifreund/river";
+    description = "A dynamic tiling wayland compositor";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ fortuneteller2k ];
+  };
+}
diff --git a/pkgs/applications/window-managers/sawfish/default.nix b/pkgs/applications/window-managers/sawfish/default.nix
index 18c3d22f944..cb76f0c465c 100644
--- a/pkgs/applications/window-managers/sawfish/default.nix
+++ b/pkgs/applications/window-managers/sawfish/default.nix
@@ -1,54 +1,88 @@
-{ stdenv, fetchurl
-, pkgconfig, which, autoreconfHook
-, rep-gtk, pango, gdk-pixbuf
-, imlib, gettext, texinfo
-, libXinerama, libXrandr, libXtst, libICE, libSM
+{ lib
+, stdenv
+, fetchurl
+, autoreconfHook
+, gdk-pixbuf-xlib
+, gettext
+, gtk2
+, imlib
+, libICE
+, libSM
+, libXinerama
+, libXrandr
+, libXtst
+, librep
 , makeWrapper
+, pango
+, pkg-config
+, rep-gtk
+, texinfo
+, which
 }:
 
-with stdenv.lib;
-
 stdenv.mkDerivation rec {
-
   pname = "sawfish";
   version = "1.12.90";
-  sourceName = "sawfish_${version}";
 
   src = fetchurl {
-    url = "https://download.tuxfamily.org/sawfish/${sourceName}.tar.xz";
+    url = "https://download.tuxfamily.org/sawfish/${pname}_${version}.tar.xz";
     sha256 = "18p8srqqj9vjffg13qhspfz2gr1h4vfs10qzlv89g76r289iam31";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
-  buildInputs = [ which
-    rep-gtk pango gdk-pixbuf imlib gettext texinfo
-    libXinerama libXrandr libXtst libICE libSM
-    makeWrapper ];
+  nativeBuildInputs = [
+    autoreconfHook
+    gettext
+    librep
+    makeWrapper
+    pkg-config
+    texinfo
+    which
+  ];
+  buildInputs = [
+    gdk-pixbuf-xlib
+    gtk2
+    imlib
+    libICE
+    libSM
+    libXinerama
+    libXrandr
+    libXtst
+    librep
+    pango
+    rep-gtk
+  ];
 
-  patchPhase = ''
+  postPatch = ''
     sed -e 's|REP_DL_LOAD_PATH=|REP_DL_LOAD_PATH=$(REP_DL_LOAD_PATH):|g' -i Makedefs.in
     sed -e 's|$(repexecdir)|$(libdir)/rep|g' -i src/Makefile.in
   '';
 
+  strictDeps = true;
+
   postInstall = ''
-    for i in $out/lib/sawfish/sawfish-menu $out/bin/sawfish-about  $out/bin/sawfish-client $out/bin/sawfish-config $out/bin/sawfish; do
+    for i in $out/lib/sawfish/sawfish-menu \
+             $out/bin/sawfish-about \
+             $out/bin/sawfish-client \
+             $out/bin/sawfish-config \
+             $out/bin/sawfish; do
       wrapProgram $i \
         --prefix REP_DL_LOAD_PATH : "$out/lib/rep" \
         --set REP_LOAD_PATH "$out/share/sawfish/lisp"
     done
   '';
 
-  meta = {
+  meta = with lib; {
+    homepage = "http://sawfish.tuxfamily.org/";
     description = "An extensible, Lisp-based window manager";
     longDescription = ''
-      Sawfish is an extensible window manager using a Lisp-based scripting language.
-      Its policy is very minimal compared to most window managers. Its aim is simply
-      to manage windows in the most flexible and attractive manner possible.
-      All high-level WM functions are implemented in Lisp for future extensibility
-      or redefinition.
+      Sawfish is an extensible window manager using a Lisp-based scripting
+      language. Its policy is very minimal compared to most window managers. Its
+      aim is simply to manage windows in the most flexible and attractive manner
+      possible. All high-level WM functions are implemented in Lisp for future
+      extensibility or redefinition.
     '';
-    homepage = "http://sawfish.wikia.com";
-    license = licenses.gpl2;
-    maintainers = [ maintainers.AndersonTorres ];
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/applications/window-managers/smallwm/default.nix b/pkgs/applications/window-managers/smallwm/default.nix
index b6d3821e8d0..9dd2a25e5cf 100644
--- a/pkgs/applications/window-managers/smallwm/default.nix
+++ b/pkgs/applications/window-managers/smallwm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub
+{ lib, stdenv, fetchFromGitHub
 , doxygen, graphviz, libX11, libXrandr }:
 
 stdenv.mkDerivation rec {
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
     cp -r README.markdown doc/html doc/latex $out/share/doc/${pname}-${version}
   '';
 
-  meta = with stdenv.lib;{
+  meta = with lib;{
     description = "A small X window manager, extended from tinywm";
     homepage = "https://github.com/adamnew123456/SmallWM";
     license = licenses.bsd2;
diff --git a/pkgs/applications/window-managers/spectrwm/default.nix b/pkgs/applications/window-managers/spectrwm/default.nix
index c3ab5589486..be2c5bc3d6e 100644
--- a/pkgs/applications/window-managers/spectrwm/default.nix
+++ b/pkgs/applications/window-managers/spectrwm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, xorg }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, xorg }:
 
 stdenv.mkDerivation {
   pname = "spectrwm";
@@ -11,7 +11,7 @@ stdenv.mkDerivation {
     sha256 = "0bf0d25yr0craksamczn2mdy6cjp27l88smihlw9bw4p6a2qhi41";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = with xorg; [
     libXrandr
     libXcursor
@@ -28,7 +28,7 @@ stdenv.mkDerivation {
 
   makeFlags = [ "PREFIX=${placeholder "out"}" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tiling window manager";
     homepage    = "https://github.com/conformal/spectrwm";
     maintainers = with maintainers; [ christianharke ];
diff --git a/pkgs/applications/window-managers/stalonetray/default.nix b/pkgs/applications/window-managers/stalonetray/default.nix
index ad0baeb97dd..47903bb2276 100644
--- a/pkgs/applications/window-managers/stalonetray/default.nix
+++ b/pkgs/applications/window-managers/stalonetray/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libX11, xorgproto }:
+{ lib, stdenv, fetchurl, libX11, xorgproto }:
 
 stdenv.mkDerivation rec {
   pname = "stalonetray";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   hardeningDisable = [ "format" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Stand alone tray";
     homepage = "http://stalonetray.sourceforge.net";
     license = licenses.gpl2;
diff --git a/pkgs/applications/window-managers/stumpish/default.nix b/pkgs/applications/window-managers/stumpish/default.nix
index c76a9ba762e..c5c3d9db783 100644
--- a/pkgs/applications/window-managers/stumpish/default.nix
+++ b/pkgs/applications/window-managers/stumpish/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, substituteAll, fetchFromGitHub, gnused, ncurses, xorg, rlwrap }:
+{ lib, stdenv, substituteAll, fetchFromGitHub, gnused, ncurses, xorg, rlwrap }:
 
 stdenv.mkDerivation {
   pname = "stumpish";
@@ -33,7 +33,7 @@ stdenv.mkDerivation {
     cp util/stumpish/stumpish $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/stumpwm/stumpwm-contrib";
     description = "STUMPwm Interactive SHell";
     license = licenses.gpl2;
diff --git a/pkgs/applications/window-managers/stumpwm/default.nix b/pkgs/applications/window-managers/stumpwm/default.nix
deleted file mode 100644
index b059423c23c..00000000000
--- a/pkgs/applications/window-managers/stumpwm/default.nix
+++ /dev/null
@@ -1,103 +0,0 @@
-{ stdenv, fetchgit, autoconf, sbcl, lispPackages, xdpyinfo, texinfo4
-, makeWrapper , rlwrap, gnused, gnugrep, coreutils, xprop
-, extraModulePaths ? []
-, version }:
-
-let
-  contrib = (fetchgit {
-    url = "https://github.com/stumpwm/stumpwm-contrib.git";
-    rev = "9bebe3622b2b6c31a6bada9055ef3862fa79b86f";
-    sha256 = "1ml6mjk2fsfv4sf65fdbji3q5x0qiq99g1k8w7a99gsl2i8h60gc";
-  });
-  versionSpec = {
-    latest = {
-      name = "1.0.0";
-      rev = "refs/tags/1.0.0";
-      sha256 = "16r0lwhxl8g71masmfbjr7s7m7fah4ii4smi1g8zpbpiqjz48ryb";
-      patches = [];
-    };
-    "0.9.9" = {
-      name = "0.9.9";
-      rev = "refs/tags/0.9.9";
-      sha256 = "0hmvbdk2yr5wrkiwn9dfzf65s4xc2qifj0sn6w2mghzp96cph79k";
-      patches = [ ./fix-module-path.patch ];
-    };
-    git = {
-        name = "git-20170203";
-        rev = "d20f24e58ab62afceae2afb6262ffef3cc318b97";
-        sha256 = "1gi29ds1x6dq7lz8lamnhcvcrr3cvvrg5yappfkggyhyvib1ii70";
-        patches = [];
-    };
-  }.${version};
-in
-stdenv.mkDerivation {
-  name = "stumpwm-${versionSpec.name}";
-
-  src = fetchgit {
-    url = "https://github.com/stumpwm/stumpwm";
-    rev = versionSpec.rev;
-    sha256 = versionSpec.sha256;
-  };
-
-  # NOTE: The patch needs an update for the next release.
-  # `(stumpwm:set-module-dir "@MODULE_DIR@")' needs to be in it.
-  patches = versionSpec.patches;
-
-  buildInputs = [
-    texinfo4 makeWrapper autoconf
-    sbcl
-    lispPackages.clx
-    lispPackages.cl-ppcre
-    lispPackages.alexandria
-    xdpyinfo
-  ];
-
-
-  # Stripping destroys the generated SBCL image
-  dontStrip = true;
-
-  configurePhase = ''
-    ./autogen.sh
-    ./configure --prefix=$out --with-module-dir=$out/share/stumpwm/modules
-  '';
-
-  preBuild = ''
-    cp -r --no-preserve=mode ${contrib} modules
-    substituteInPlace  head.lisp \
-      --replace 'run-shell-command "xdpyinfo' 'run-shell-command "${xdpyinfo}/bin/xdpyinfo'
-  '';
-
-  installPhase = ''
-    mkdir -pv $out/bin
-    make install
-
-    mkdir -p $out/share/stumpwm/modules
-    cp -r modules/* $out/share/stumpwm/modules/
-    for d in ${stdenv.lib.concatStringsSep " " extraModulePaths}; do
-      cp -r --no-preserve=mode "$d" $out/share/stumpwm/modules/
-    done
-
-    # Copy stumpish;
-    cp $out/share/stumpwm/modules/util/stumpish/stumpish $out/bin/
-    chmod +x $out/bin/stumpish
-    wrapProgram $out/bin/stumpish \
-      --prefix PATH ":" "${stdenv.lib.makeBinPath [ rlwrap gnused gnugrep coreutils xprop ]}"
-
-    # Paths in the compressed image $out/bin/stumpwm are not
-    # recognized by Nix. Add explicit reference here.
-    mkdir $out/nix-support
-    echo ${xdpyinfo} > $out/nix-support/xdpyinfo
-  '';
-
-  passthru = {
-    inherit sbcl lispPackages contrib;
-  };
-
-  meta = with stdenv.lib; {
-    description = "A tiling window manager for X11";
-    homepage    = "https://github.com/stumpwm/";
-    license     = licenses.gpl2Plus;
-    platforms   = platforms.linux;
-    broken = true; # 2018-04-11
-  };
-}
diff --git a/pkgs/applications/window-managers/stumpwm/fix-module-path.patch b/pkgs/applications/window-managers/stumpwm/fix-module-path.patch
deleted file mode 100644
index 79bfaad3dec..00000000000
--- a/pkgs/applications/window-managers/stumpwm/fix-module-path.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-diff --git a/make-image.lisp.in b/make-image.lisp.in
-index 121e9d6..2210242 100644
---- a/make-image.lisp.in
-+++ b/make-image.lisp.in
-@@ -2,7 +2,10 @@
- 
- (load "load-stumpwm.lisp")
- 
--#-ecl (stumpwm:set-module-dir "@CONTRIB_DIR@")
-+(setf asdf::*immutable-systems*
-+      (uiop:list-to-hash-set (asdf:already-loaded-systems)))
-+
-+#-ecl (stumpwm:set-module-dir "@MODULE_DIR@")
- 
- #+sbcl
- (sb-ext:save-lisp-and-die "stumpwm" :toplevel (lambda ()
diff --git a/pkgs/applications/window-managers/sway/bg.nix b/pkgs/applications/window-managers/sway/bg.nix
index 86301492c46..1d5dea76b37 100644
--- a/pkgs/applications/window-managers/sway/bg.nix
+++ b/pkgs/applications/window-managers/sway/bg.nix
@@ -1,27 +1,28 @@
-{ stdenv, fetchFromGitHub
-, meson, ninja, pkgconfig, scdoc
+{ lib, stdenv, fetchFromGitHub
+, meson, ninja, pkg-config, scdoc
 , wayland, wayland-protocols, cairo, gdk-pixbuf
+, wayland-scanner
 }:
 
 stdenv.mkDerivation rec {
   pname = "swaybg";
-  version = "1.0";
+  version = "1.1";
 
   src = fetchFromGitHub {
     owner = "swaywm";
     repo = "swaybg";
-    rev = version;
-    sha256 = "1lmqz5bmig90gq2m7lwf02d2g7z4hzf8fhqz78c8vk92c6p4xwbc";
+    rev = "v${version}";
+    sha256 = "17508q9wsw6c1lsxlcbxj74z2naqhwi5c7lkbq24m4lk8qmy0576";
   };
 
-  nativeBuildInputs = [ meson ninja pkgconfig scdoc ];
+  nativeBuildInputs = [ meson ninja pkg-config scdoc wayland-scanner ];
   buildInputs = [ wayland wayland-protocols cairo gdk-pixbuf ];
 
   mesonFlags = [
     "-Dgdk-pixbuf=enabled" "-Dman-pages=enabled"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Wallpaper tool for Wayland compositors";
     longDescription = ''
       A wallpaper utility for Wayland compositors, that is compatible with any
diff --git a/pkgs/applications/window-managers/sway/contrib.nix b/pkgs/applications/window-managers/sway/contrib.nix
index fd44f4a5be5..caf34e543b7 100644
--- a/pkgs/applications/window-managers/sway/contrib.nix
+++ b/pkgs/applications/window-managers/sway/contrib.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 
 , fetchurl
 , coreutils
@@ -34,7 +34,7 @@ grimshot = stdenv.mkDerivation rec {
 
     install -Dm 0755 contrib/grimshot $out/bin/grimshot
     wrapProgram $out/bin/grimshot --set PATH \
-      "${stdenv.lib.makeBinPath [
+      "${lib.makeBinPath [
         sway-unwrapped
         wl-clipboard
         coreutils
@@ -55,7 +55,7 @@ grimshot = stdenv.mkDerivation rec {
     fi
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A helper for screenshots within sway";
     homepage = "https://github.com/swaywm/sway/tree/master/contrib";
     license = licenses.mit;
diff --git a/pkgs/applications/window-managers/sway/default.nix b/pkgs/applications/window-managers/sway/default.nix
index da58d844ee8..92de633f0fa 100644
--- a/pkgs/applications/window-managers/sway/default.nix
+++ b/pkgs/applications/window-managers/sway/default.nix
@@ -1,45 +1,56 @@
-{ stdenv, fetchFromGitHub, makeWrapper
-, meson, ninja, pkg-config, wayland, scdoc
-, libxkbcommon, pcre, json_c, dbus, libevdev
+{ lib, stdenv, fetchFromGitHub, substituteAll, swaybg
+, meson, ninja, pkg-config, wayland-scanner, scdoc
+, wayland, libxkbcommon, pcre, json_c, dbus, libevdev
 , pango, cairo, libinput, libcap, pam, gdk-pixbuf, librsvg
-, wlroots, wayland-protocols
+, wlroots, wayland-protocols, libdrm
+, nixosTests
+# Used by the NixOS module:
+, isNixOS ? false
 }:
 
 stdenv.mkDerivation rec {
   pname = "sway-unwrapped";
-  version = "1.5";
+  version = "1.6.1";
 
   src = fetchFromGitHub {
     owner = "swaywm";
     repo = "sway";
     rev = version;
-    sha256 = "0r3b7h778l9i20z3him9i2qsaynpn9y78hzfgv3cqi8fyry2c4f9";
+    sha256 = "0j4sdbsrlvky1agacc0pcz9bwmaxjmrapjnzscbd2i0cria2fc5j";
   };
 
   patches = [
     ./sway-config-no-nix-store-references.patch
     ./load-configuration-from-etc.patch
+
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit swaybg;
+    })
   ];
 
-  postPatch = ''
-    substituteInPlace meson.build --replace "v1.5" "1.5"
+  postPatch = lib.optionalString isNixOS ''
+    echo -e '\ninclude /etc/sway/config.d/*' >> config.in
   '';
 
   nativeBuildInputs = [
-    meson ninja pkg-config wayland scdoc
+    meson ninja pkg-config wayland-scanner scdoc
   ];
 
   buildInputs = [
     wayland libxkbcommon pcre json_c dbus libevdev
     pango cairo libinput libcap pam gdk-pixbuf librsvg
-    wlroots wayland-protocols
+    wlroots wayland-protocols libdrm
   ];
 
   mesonFlags = [
     "-Ddefault-wallpaper=false"
+    "-Dsd-bus-provider=libsystemd"
   ];
 
-  meta = with stdenv.lib; {
+  passthru.tests.basic = nixosTests.sway;
+
+  meta = with lib; {
     description = "An i3-compatible tiling Wayland compositor";
     longDescription = ''
       Sway is a tiling Wayland compositor and a drop-in replacement for the i3
diff --git a/pkgs/applications/window-managers/sway/fix-paths.patch b/pkgs/applications/window-managers/sway/fix-paths.patch
new file mode 100644
index 00000000000..c52f65b146b
--- /dev/null
+++ b/pkgs/applications/window-managers/sway/fix-paths.patch
@@ -0,0 +1,11 @@
+--- a/sway/config.c
++++ b/sway/config.c
+@@ -276,7 +276,7 @@
+ 
+ 	if (!(config->active_bar_modifiers = create_list())) goto cleanup;
+ 
+-	if (!(config->swaybg_command = strdup("swaybg"))) goto cleanup;
++	if (!(config->swaybg_command = strdup("@swaybg@/bin/swaybg"))) goto cleanup;
+ 
+ 	if (!(config->config_chain = create_list())) goto cleanup;
+ 	config->current_config_path = NULL;
diff --git a/pkgs/applications/window-managers/sway/idle.nix b/pkgs/applications/window-managers/sway/idle.nix
index 486ab79598d..8c1ae0b3592 100644
--- a/pkgs/applications/window-managers/sway/idle.nix
+++ b/pkgs/applications/window-managers/sway/idle.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub
-, meson, ninja, pkgconfig, scdoc
+{ lib, stdenv, fetchFromGitHub
+, meson, ninja, pkg-config, scdoc, wayland-scanner
 , wayland, wayland-protocols, systemd
 }:
 
@@ -19,12 +19,12 @@ stdenv.mkDerivation rec {
       --replace "version: '1.5'" "version: '${version}'"
   '';
 
-  nativeBuildInputs = [ meson ninja pkgconfig scdoc ];
+  nativeBuildInputs = [ meson ninja pkg-config scdoc wayland-scanner ];
   buildInputs = [ wayland wayland-protocols systemd ];
 
   mesonFlags = [ "-Dman-pages=enabled" "-Dlogind=enabled" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Idle management daemon for Wayland";
     longDescription = ''
       Sway's idle management daemon. It is compatible with any Wayland
diff --git a/pkgs/applications/window-managers/sway/load-configuration-from-etc.patch b/pkgs/applications/window-managers/sway/load-configuration-from-etc.patch
index 26a3d40d66c..46a170abc04 100644
--- a/pkgs/applications/window-managers/sway/load-configuration-from-etc.patch
+++ b/pkgs/applications/window-managers/sway/load-configuration-from-etc.patch
@@ -1,22 +1,26 @@
-From 26f9c65ef037892977a824f0d7d7111066856b53 Mon Sep 17 00:00:00 2001
-From: Michael Weiss <dev.primeos@gmail.com>
-Date: Sat, 27 Apr 2019 14:26:16 +0200
+From 92283df3acbffa5c1bb21f23cdd686113d905114 Mon Sep 17 00:00:00 2001
+From: Patrick Hilhorst <git@hilhorst.be>
+Date: Wed, 31 Mar 2021 21:14:13 +0200
 Subject: [PATCH] Load configs from /etc but fallback to /nix/store
 
 This change will load all configuration files from /etc, to make it easy
 to override them, but fallback to /nix/store/.../etc/sway/config to make
 Sway work out-of-the-box with the default configuration on non NixOS
 systems.
+
+Original patch by Michael Weiss, updated for Sway 1.6 by Patrick Hilhorst
+
+Co-authored-by: Michael Weiss <dev.primeos@gmail.com>
 ---
  meson.build   | 3 ++-
- sway/config.c | 1 +
- 2 files changed, 3 insertions(+), 1 deletion(-)
+ sway/config.c | 3 ++-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
 
 diff --git a/meson.build b/meson.build
-index 02b5d606..c03a9c0f 100644
+index b7a29660..8ae8ceb3 100644
 --- a/meson.build
 +++ b/meson.build
-@@ -129,7 +129,8 @@ if scdoc.found()
+@@ -164,7 +164,8 @@ if scdoc.found()
  	endforeach
  endif
  
@@ -25,18 +29,20 @@ index 02b5d606..c03a9c0f 100644
 +add_project_arguments('-DNIX_SYSCONFDIR="/@0@"'.format(join_paths(prefix, sysconfdir)), language : 'c')
  
  version = '"@0@"'.format(meson.project_version())
- if git.found()
+ git = find_program('git', native: true, required: false)
 diff --git a/sway/config.c b/sway/config.c
-index 4cd21bbc..dd855753 100644
+index 76b9ec08..fb5b51aa 100644
 --- a/sway/config.c
 +++ b/sway/config.c
-@@ -317,6 +317,7 @@ static char *get_config_path(void) {
- 		"$XDG_CONFIG_HOME/i3/config",
- 		SYSCONFDIR "/sway/config",
- 		SYSCONFDIR "/i3/config",
-+		NIX_SYSCONFDIR "/sway/config",
+@@ -374,7 +374,8 @@ static char *get_config_path(void) {
+ 		{ .prefix = home, .config_folder = ".i3"},
+ 		{ .prefix = config_home, .config_folder = "i3"},
+ 		{ .prefix = SYSCONFDIR, .config_folder = "sway"},
+-		{ .prefix = SYSCONFDIR, .config_folder = "i3"}
++		{ .prefix = SYSCONFDIR, .config_folder = "i3"},
++		{ .prefix = NIX_SYSCONFDIR, .config_folder = "sway"},
  	};
  
- 	char *config_home = getenv("XDG_CONFIG_HOME");
+ 	size_t num_config_paths = sizeof(config_paths)/sizeof(config_paths[0]);
 -- 
-2.19.2
+2.30.1
diff --git a/pkgs/applications/window-managers/sway/lock-effects.nix b/pkgs/applications/window-managers/sway/lock-effects.nix
index a6c8d5cd1c3..25714f1f8a9 100644
--- a/pkgs/applications/window-managers/sway/lock-effects.nix
+++ b/pkgs/applications/window-managers/sway/lock-effects.nix
@@ -1,32 +1,43 @@
-{ stdenv, fetchFromGitHub,
-  meson, ninja, pkgconfig, scdoc,
-  wayland, wayland-protocols, libxkbcommon,
-  cairo, gdk-pixbuf, pam
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, scdoc
+, wayland
+, wayland-protocols
+, libxkbcommon
+, cairo
+, gdk-pixbuf
+, pam
 }:
 
 stdenv.mkDerivation rec {
   pname = "swaylock-effects";
-  version = "v1.6-1";
+  version = "1.6-3";
 
   src = fetchFromGitHub {
     owner = "mortie";
     repo = "swaylock-effects";
-    rev = version;
-    sha256 = "044fc4makjx8v29fkx5xlil6vr1v4r0k6c8741pl67gzvlm4cx3i";
+    rev = "v${version}";
+    sha256 = "sha256-71IX0fC4xCPP6pK63KtvDMb3KoP1rw/Iz3S7BgiLSpg=";
   };
 
   postPatch = ''
     sed -iE "s/version: '1\.3',/version: '${version}',/" meson.build
   '';
 
-  nativeBuildInputs = [ meson ninja pkgconfig scdoc ];
+  nativeBuildInputs = [ meson ninja pkg-config scdoc ];
   buildInputs = [ wayland wayland-protocols libxkbcommon cairo gdk-pixbuf pam ];
 
   mesonFlags = [
-    "-Dpam=enabled" "-Dgdk-pixbuf=enabled" "-Dman-pages=enabled"
+    "-Dpam=enabled"
+    "-Dgdk-pixbuf=enabled"
+    "-Dman-pages=enabled"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Screen locker for Wayland";
     longDescription = ''
       Swaylock, with fancy effects
diff --git a/pkgs/applications/window-managers/sway/lock-fancy.nix b/pkgs/applications/window-managers/sway/lock-fancy.nix
index 338d626d990..bee1f925f60 100644
--- a/pkgs/applications/window-managers/sway/lock-fancy.nix
+++ b/pkgs/applications/window-managers/sway/lock-fancy.nix
@@ -1,9 +1,9 @@
-{ stdenv, fetchFromGitHub, coreutils, grim, gawk, swaylock
+{ lib, stdenv, fetchFromGitHub, coreutils, grim, gawk, swaylock
 , imagemagick, getopt, fontconfig, makeWrapper
 }:
 
 let
-  depsPath = stdenv.lib.makeBinPath [
+  depsPath = lib.makeBinPath [
     coreutils
     grim
     gawk
@@ -37,7 +37,7 @@ in stdenv.mkDerivation rec {
       --prefix PATH : "${depsPath}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "This is an swaylock bash script that takes a screenshot of the desktop, blurs the background and adds a lock icon and text";
     homepage = "https://github.com/Big-B/swaylock-fancy";
     license = licenses.mit;
diff --git a/pkgs/applications/window-managers/sway/lock.nix b/pkgs/applications/window-managers/sway/lock.nix
index 7cbba5e981b..6dccedad827 100644
--- a/pkgs/applications/window-managers/sway/lock.nix
+++ b/pkgs/applications/window-managers/sway/lock.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub
-, meson, ninja, pkgconfig, scdoc
+{ lib, stdenv, fetchFromGitHub
+, meson, ninja, pkg-config, scdoc, wayland-scanner
 , wayland, wayland-protocols, libxkbcommon, cairo, gdk-pixbuf, pam
 }:
 
@@ -19,14 +19,14 @@ stdenv.mkDerivation rec {
       --replace "version: '1.4'" "version: '${version}'"
   '';
 
-  nativeBuildInputs = [ meson ninja pkgconfig scdoc ];
+  nativeBuildInputs = [ meson ninja pkg-config scdoc wayland-scanner ];
   buildInputs = [ wayland wayland-protocols libxkbcommon cairo gdk-pixbuf pam ];
 
   mesonFlags = [
     "-Dpam=enabled" "-Dgdk-pixbuf=enabled" "-Dman-pages=enabled"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Screen locker for Wayland";
     longDescription = ''
       swaylock is a screen locking utility for Wayland compositors.
diff --git a/pkgs/applications/window-managers/sway/wrapper.nix b/pkgs/applications/window-managers/sway/wrapper.nix
index fe78e1a9ff9..07459295d75 100644
--- a/pkgs/applications/window-managers/sway/wrapper.nix
+++ b/pkgs/applications/window-managers/sway/wrapper.nix
@@ -1,9 +1,11 @@
-{ lib, stdenv
-, sway-unwrapped, swaybg
+{ lib
+, sway-unwrapped
 , makeWrapper, symlinkJoin, writeShellScriptBin
 , 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,24 +13,26 @@ assert extraSessionCommands != "" -> withBaseWrapper;
 with lib;
 
 let
+  sway = sway-unwrapped.override { inherit isNixOS; };
   baseWrapper = writeShellScriptBin "sway" ''
      set -o errexit
      if [ ! "$_SWAY_WRAPPER_ALREADY_EXECUTED" ]; then
+       export XDG_CURRENT_DESKTOP=sway
        ${extraSessionCommands}
        export _SWAY_WRAPPER_ALREADY_EXECUTED=1
      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);
@@ -42,12 +46,11 @@ in symlinkJoin {
     ${optionalString withGtkWrapper "gappsWrapperArgsHook"}
 
     wrapProgram $out/bin/sway \
-      --prefix PATH : "${swaybg}/bin" \
       ${optionalString withGtkWrapper ''"''${gappsWrapperArgs[@]}"''} \
       ${optionalString (extraOptions != []) "${concatMapStrings (x: " --add-flags " + x) extraOptions}"}
   '';
 
   passthru.providedSessions = [ "sway" ];
 
-  inherit (sway-unwrapped) meta;
+  inherit (sway) meta;
 }
diff --git a/pkgs/applications/window-managers/sway/wsr.nix b/pkgs/applications/window-managers/sway/wsr.nix
new file mode 100644
index 00000000000..64d9fd7d7db
--- /dev/null
+++ b/pkgs/applications/window-managers/sway/wsr.nix
@@ -0,0 +1,33 @@
+{ lib, fetchFromGitHub, rustPlatform, libxcb, python3 }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "swaywsr";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "pedroscaff";
+    repo = pname;
+    rev = "6c4671c702f647395d983aaf607286db1c692db6";
+    sha256 = "0bmpbhyvgnbi5baj6v0wdxpdh9cnlzvcc44vh3vihmzsp6i5q05a";
+  };
+
+  cargoSha256 = "1pmkyw60ggn5filb47nyf97g1arrw7nfa4yjndnx35zw12mkj61d";
+
+  nativeBuildInputs = [ python3 ];
+  buildInputs = [ libxcb ];
+
+  # has not tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Automatically change sway workspace names based on their contents";
+    longDescription = ''
+      Automatically sets the workspace names to match the windows on the workspace.
+      The chosen name for a workspace is a composite of the app_id or WM_CLASS X11
+      window property for each window in a workspace.
+    '';
+    homepage = "https://github.com/pedroscaff/swaywsr";
+    license = licenses.mit;
+    maintainers = [ maintainers.sebbadk ];
+  };
+}
diff --git a/pkgs/applications/window-managers/sxhkd/default.nix b/pkgs/applications/window-managers/sxhkd/default.nix
index 2404129b165..427f4c92f7b 100644
--- a/pkgs/applications/window-managers/sxhkd/default.nix
+++ b/pkgs/applications/window-managers/sxhkd/default.nix
@@ -1,23 +1,23 @@
-{ stdenv, fetchFromGitHub, asciidoc, libxcb, xcbutil, xcbutilkeysyms
+{ lib, stdenv, fetchFromGitHub, asciidoc, libxcb, xcbutil, xcbutilkeysyms
 , xcbutilwm
 }:
 
 stdenv.mkDerivation rec {
   pname = "sxhkd";
-  version = "0.6.1";
+  version = "0.6.2";
 
   src = fetchFromGitHub {
     owner = "baskerville";
     repo = "sxhkd";
     rev = version;
-    sha256 = "0j7bl2l06r0arrjzpz7al9j6cwzc730knbsijp7ixzz96pq7xa2h";
+    sha256 = "1winwzdy9yxvxnrv8gqpigl9y0c2px27mnms62bdilp4x6llrs9r";
   };
 
   buildInputs = [ asciidoc libxcb xcbutil xcbutilkeysyms xcbutilwm ];
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Simple X hotkey daemon";
     homepage = "https://github.com/baskerville/sxhkd";
     license = licenses.bsd2;
diff --git a/pkgs/applications/window-managers/tabbed/default.nix b/pkgs/applications/window-managers/tabbed/default.nix
index f0a427e6839..2eeae7f4da5 100644
--- a/pkgs/applications/window-managers/tabbed/default.nix
+++ b/pkgs/applications/window-managers/tabbed/default.nix
@@ -1,6 +1,6 @@
-{stdenv, fetchgit, xorgproto, libX11, libXft, customConfig ? null, patches ? [] }:
+{lib, stdenv, fetchgit, xorgproto, libX11, libXft, customConfig ? null, patches ? [] }:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation {
   name = "tabbed-20180310";
@@ -13,7 +13,7 @@ stdenv.mkDerivation {
 
   inherit patches;
 
-  postPatch = stdenv.lib.optionalString (customConfig != null) ''
+  postPatch = lib.optionalString (customConfig != null) ''
     cp ${builtins.toFile "config.h" customConfig} ./config.h
   '';
 
diff --git a/pkgs/applications/window-managers/taffybar/default.nix b/pkgs/applications/window-managers/taffybar/default.nix
index 681a5baec82..7d9e5f9c1cb 100644
--- a/pkgs/applications/window-managers/taffybar/default.nix
+++ b/pkgs/applications/window-managers/taffybar/default.nix
@@ -1,7 +1,9 @@
-{ stdenv, ghcWithPackages, makeWrapper, packages ? (x: []) }:
+{ lib, stdenv, ghcWithPackages, taffybar, makeWrapper, packages ? (x: []) }:
 
 let
-taffybarEnv = ghcWithPackages (self: [ self.taffybar ] ++ packages self);
+  taffybarEnv = ghcWithPackages (self: [
+    self.taffybar
+  ] ++ packages self);
 in stdenv.mkDerivation {
   name = "taffybar-with-packages-${taffybarEnv.version}";
 
@@ -13,8 +15,14 @@ in stdenv.mkDerivation {
       --set NIX_GHC "${taffybarEnv}/bin/ghc"
   '';
 
-  meta = {
-    platforms = stdenv.lib.platforms.unix;
-    license = stdenv.lib.licenses.bsd3;
-  };
+  # Trivial derivation
+  preferLocalBuild = true;
+  allowSubstitutes = false;
+
+  # For hacking purposes
+  passthru.env = taffybarEnv;
+  buildInputs = [ taffybarEnv ];
+  shellHook = "eval $(egrep ^export ${taffybarEnv}/bin/ghc)";
+
+  inherit (taffybar) meta;
 }
diff --git a/pkgs/applications/window-managers/tinywl/default.nix b/pkgs/applications/window-managers/tinywl/default.nix
index 4dc50fb8ed4..965ec67b6e9 100644
--- a/pkgs/applications/window-managers/tinywl/default.nix
+++ b/pkgs/applications/window-managers/tinywl/default.nix
@@ -1,5 +1,5 @@
-{ lib, stdenv, wlroots, pkg-config
-, libGL, libxkbcommon, pixman, udev, wayland, wayland-protocols
+{ lib, stdenv, wlroots, pkg-config, wayland-scanner
+, libxkbcommon, pixman, udev, wayland, wayland-protocols
 }:
 
 stdenv.mkDerivation {
@@ -8,10 +8,8 @@ stdenv.mkDerivation {
 
   sourceRoot = "source/tinywl";
 
-  nativeBuildInputs = [ pkg-config ];
-  buildInputs = [
-    libGL libxkbcommon pixman udev wayland wayland-protocols wlroots
-  ];
+  nativeBuildInputs = [ pkg-config wayland-scanner ];
+  buildInputs = [ libxkbcommon pixman udev wayland wayland-protocols wlroots ];
 
   installPhase = ''
     runHook preInstall
@@ -22,7 +20,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     homepage = "https://github.com/swaywm/wlroots/tree/master/tinywl";
-    description = ''"minimum viable product" Wayland compositor based on wlroots.'';
+    description = ''A "minimum viable product" Wayland compositor based on wlroots'';
     maintainers = with maintainers; [ qyliss ];
     license = licenses.cc0;
     inherit (wlroots.meta) platforms;
diff --git a/pkgs/applications/window-managers/tinywm/default.nix b/pkgs/applications/window-managers/tinywm/default.nix
index d6ff4ad51a2..8fa6a84b721 100644
--- a/pkgs/applications/window-managers/tinywm/default.nix
+++ b/pkgs/applications/window-managers/tinywm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub
+{ lib, stdenv, fetchFromGitHub
 , libX11 }:
 
 stdenv.mkDerivation rec {
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
     install -m644 annotated.c README -t $out/share/doc/${pname}-${version}
   '';
 
-  meta = with stdenv.lib;{
+  meta = with lib;{
     description = "A tiny window manger for X11";
     longDescription = ''
 
diff --git a/pkgs/applications/window-managers/trayer/default.nix b/pkgs/applications/window-managers/trayer/default.nix
index 5c3d8710e35..c210b39fe18 100644
--- a/pkgs/applications/window-managers/trayer/default.nix
+++ b/pkgs/applications/window-managers/trayer/default.nix
@@ -1,9 +1,9 @@
-{ stdenv, fetchFromGitHub, pkgconfig, gdk-pixbuf, gtk2 }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, gdk-pixbuf, gtk2 }:
 
 stdenv.mkDerivation rec {
   name = "trayer-1.1.8";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ gdk-pixbuf gtk2 ];
 
   src = fetchFromGitHub {
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/sargon/trayer-srg";
     license = licenses.mit;
     description = "A lightweight GTK2-based systray for UNIX desktop";
diff --git a/pkgs/applications/window-managers/vwm/default.nix b/pkgs/applications/window-managers/vwm/default.nix
index 8eb42bb9a97..9eea18f79d6 100644
--- a/pkgs/applications/window-managers/vwm/default.nix
+++ b/pkgs/applications/window-managers/vwm/default.nix
@@ -1,9 +1,9 @@
-{stdenv, fetchurl, ncurses, pkgconfig, glib, libviper, libpseudo, gpm,
+{lib, stdenv, fetchurl, ncurses, pkg-config, glib, libviper, libpseudo, gpm,
 libvterm}:
 
 stdenv.mkDerivation rec {
   name = "vwm-2.1.3";
- 
+
   src = fetchurl {
     url = "mirror://sourceforge/vwm/${name}.tar.gz";
     sha256 = "1r5wiqyfqwnyx7dfihixlnavbvg8rni36i4gq169aisjcg7laxaf";
@@ -19,11 +19,11 @@ stdenv.mkDerivation rec {
   preInstall = ''
     mkdir -p $out/bin $out/include
   '';
- 
-  nativeBuildInputs = [ pkgconfig ];
+
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ ncurses glib libviper libpseudo gpm libvterm ];
- 
-  meta = with stdenv.lib; {
+
+  meta = with lib; {
     homepage = "http://vwm.sourceforge.net/";
     description = "Dynamic window manager for the console";
     license = licenses.gpl2Plus;
diff --git a/pkgs/applications/window-managers/waybox/default.nix b/pkgs/applications/window-managers/waybox/default.nix
new file mode 100644
index 00000000000..ad3028b4ac0
--- /dev/null
+++ b/pkgs/applications/window-managers/waybox/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, meson
+, ninja
+, libxkbcommon
+, wayland
+, wayland-protocols
+, wlroots
+, pixman
+, udev
+, libGL
+, mesa
+}:
+
+stdenv.mkDerivation rec {
+  pname = "waybox";
+  version = "unstable-2021-04-07";
+
+  src = fetchFromGitHub {
+    owner = "wizbright";
+    repo = pname;
+    rev = "309ccd2faf08079e698104b19eff32b3a255b947";
+    hash = "sha256-G32cGmOwmnuVlj1hCq9NRti6plJbkAktfzM4aYzQ+k8=";
+  };
+
+  nativeBuildInputs = [ pkg-config meson ninja ];
+  buildInputs = [
+    libxkbcommon
+    wayland
+    wayland-protocols
+    wlroots
+    pixman
+    udev
+    libGL
+    mesa # for libEGL
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/wizbright/waybox";
+    description = "An openbox clone on Wayland";
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/wayfire/applications.nix b/pkgs/applications/window-managers/wayfire/applications.nix
index 6c22227c0c5..a77d3f8bf5d 100644
--- a/pkgs/applications/window-managers/wayfire/applications.nix
+++ b/pkgs/applications/window-managers/wayfire/applications.nix
@@ -1,23 +1,20 @@
-{ newScope, wayfirePlugins }:
+{ lib, newScope, wayfirePlugins }:
 
-let
-  self = with self; {
-    inherit wayfirePlugins;
+lib.makeExtensible (self: with self; {
+  inherit wayfirePlugins;
 
-    callPackage = newScope self;
+  callPackage = newScope self;
 
-    wayfire = callPackage ./. { };
+  wayfire = callPackage ./. { };
 
-    wcm = callPackage ./wcm.nix {
-      inherit (wayfirePlugins) wf-shell;
-    };
+  wcm = callPackage ./wcm.nix {
+    inherit (wayfirePlugins) wf-shell;
+  };
 
-    wrapWayfireApplication = callPackage ./wrapper.nix { };
+  wrapWayfireApplication = callPackage ./wrapper.nix { };
 
-    withPlugins = selector: self // {
-      wayfire = wrapWayfireApplication wayfire selector;
-      wcm = wrapWayfireApplication wcm selector;
-    };
+  withPlugins = selector: self // {
+    wayfire = wrapWayfireApplication wayfire selector;
+    wcm = wrapWayfireApplication wcm selector;
   };
-in
-self
+})
diff --git a/pkgs/applications/window-managers/wayfire/default.nix b/pkgs/applications/window-managers/wayfire/default.nix
index 8014be48649..120ff6cf697 100644
--- a/pkgs/applications/window-managers/wayfire/default.nix
+++ b/pkgs/applications/window-managers/wayfire/default.nix
@@ -1,29 +1,31 @@
-{ stdenv, lib, fetchurl, meson, ninja, pkg-config
-, cairo, libdrm, libexecinfo, libinput, libjpeg, libxkbcommon, wayland
-, wayland-protocols, wf-config, wlroots
+{ lib, stdenv, fetchurl, cmake, meson, ninja, pkg-config
+, cairo, doctest, libdrm, libexecinfo, libinput, libjpeg, libxkbcommon, wayland
+, wayland-protocols, wf-config, wlroots, mesa
 }:
 
 stdenv.mkDerivation rec {
   pname = "wayfire";
-  version = "0.5.0";
+  version = "0.7.2";
 
   src = fetchurl {
-    url = "https://github.com/WayfireWM/wayfire/releases/download/${version}/wayfire-${version}.tar.xz";
-    sha256 = "1zispx756b3jvmiwli2vp92vkfyzv3zdkffw0bmzgryh7balsq58";
+    url = "https://github.com/WayfireWM/wayfire/releases/download/v${version}/wayfire-${version}.tar.xz";
+    sha256 = "1gasijjyfl00zpy6j9hh6qpwv0sw42h9irycbnm693j3vw9mcy66";
   };
 
-  strictDeps = true;
-  nativeBuildInputs = [ meson ninja pkg-config wayland ];
+  nativeBuildInputs = [ cmake meson ninja pkg-config wayland ];
   buildInputs = [
-    cairo libdrm libexecinfo libinput libjpeg libxkbcommon wayland
-    wayland-protocols wf-config wlroots
+    cairo doctest libdrm libexecinfo libinput libjpeg libxkbcommon wayland
+    wayland-protocols wf-config wlroots mesa
   ];
 
+  # CMake is just used for finding doctest.
+  dontUseCmakeConfigure = true;
+
   mesonFlags = [ "--sysconfdir" "/etc" ];
 
   meta = with lib; {
     homepage = "https://wayfire.org/";
-    description = "3D wayland compositor";
+    description = "3D Wayland compositor";
     license = licenses.mit;
     maintainers = with maintainers; [ qyliss wucke13 ];
     platforms = platforms.unix;
diff --git a/pkgs/applications/window-managers/wayfire/wcm.nix b/pkgs/applications/window-managers/wayfire/wcm.nix
index cb0946cd88a..9d524019ad5 100644
--- a/pkgs/applications/window-managers/wayfire/wcm.nix
+++ b/pkgs/applications/window-managers/wayfire/wcm.nix
@@ -1,22 +1,20 @@
-{ stdenv, lib, fetchFromGitHub, meson, ninja, pkg-config, wayland, wrapGAppsHook
-, gnome3, libevdev, libxml2, wayfire, wayland-protocols, wf-config, wf-shell
+{ stdenv, lib, fetchurl, meson, ninja, pkg-config, wayland, wrapGAppsHook
+, gtk3, libevdev, libxml2, wayfire, wayland-protocols, wf-config, wf-shell
 }:
 
 stdenv.mkDerivation rec {
   pname = "wcm";
-  version = "0.5.0";
+  version = "0.7.0";
 
-  src = fetchFromGitHub {
-    owner = "WayfireWM";
-    repo = "wcm";
-    rev = "v${version}";
-    sha256 = "1b22gymqfn0c49nf39676q5bj25rxab874iayiq31cmn14r30dyg";
+  src = fetchurl {
+    url = "https://github.com/WayfireWM/wcm/releases/download/v${version}/wcm-${version}.tar.xz";
+    sha256 = "19za1fnlf5hz4n4mxxwqcr5yxp6mga9ah539ifnjnqrgvj19cjlj";
   };
 
   nativeBuildInputs = [ meson ninja pkg-config wayland wrapGAppsHook ];
   buildInputs = [
-    gnome3.gtk libevdev libxml2 wayfire wayland wayland-protocols wf-config
-    wf-shell
+    gtk3 libevdev libxml2 wayfire wayland
+    wayland-protocols wf-config wf-shell
   ];
 
   meta = with lib; {
diff --git a/pkgs/applications/window-managers/wayfire/wf-config.nix b/pkgs/applications/window-managers/wayfire/wf-config.nix
index 8962ab096ab..d1e653cc9e0 100644
--- a/pkgs/applications/window-managers/wayfire/wf-config.nix
+++ b/pkgs/applications/window-managers/wayfire/wf-config.nix
@@ -1,18 +1,25 @@
-{ stdenv, lib, fetchurl, meson, ninja, pkg-config, glm, libevdev, libxml2 }:
+{ stdenv, lib, fetchurl, cmake, meson, ninja, pkg-config
+, doctest, glm, libevdev, libxml2
+}:
 
 stdenv.mkDerivation rec {
   pname = "wf-config";
-  version = "0.5.0";
+  version = "0.7.1";
 
   src = fetchurl {
-    url = "https://github.com/WayfireWM/wf-config/releases/download/0.5.0/wf-config-0.5.0.tar.xz";
-    sha256 = "0xbvfy31pl6mj0nac921gqksyh6jb8ccap30p94lw6r6fb17wz57";
+    url = "https://github.com/WayfireWM/wf-config/releases/download/v${version}/wf-config-${version}.tar.xz";
+    sha256 = "1w75yxhz0nvw4mlv38sxp8k8wb5h99b51x3fdvizc3yaxanqa8kx";
   };
 
-  nativeBuildInputs = [ meson ninja pkg-config ];
-  buildInputs = [ libevdev libxml2 ];
+  nativeBuildInputs = [ cmake meson ninja pkg-config ];
+  buildInputs = [ doctest libevdev libxml2 ];
   propagatedBuildInputs = [ glm ];
 
+  # CMake is just used for finding doctest.
+  dontUseCmakeConfigure = true;
+
+  doCheck = true;
+
   meta = with lib; {
     homepage = "https://github.com/WayfireWM/wf-config";
     description = "Library for managing configuration files, written for Wayfire";
diff --git a/pkgs/applications/window-managers/wayfire/wf-shell.nix b/pkgs/applications/window-managers/wayfire/wf-shell.nix
index 2087402fa70..bd9bcb30d10 100644
--- a/pkgs/applications/window-managers/wayfire/wf-shell.nix
+++ b/pkgs/applications/window-managers/wayfire/wf-shell.nix
@@ -1,21 +1,21 @@
 { stdenv, lib, fetchurl, meson, ninja, pkg-config, wayland, git
-, alsaLib, gnome3, gtk-layer-shell, pulseaudio, wayfire, wf-config
+, alsa-lib, gtkmm3, gtk-layer-shell, pulseaudio, wayfire, wf-config
 }:
 
 stdenv.mkDerivation rec {
   pname = "wf-shell";
-  version = "0.5.0";
+  version = "0.7.0";
 
   # > Note to packagers: do not use the autogenerated "Source code"
   # > archives from GitHub, but the wf-shell-0.4.0.tar.xz file.
   src = fetchurl {
-    url = "https://github.com/WayfireWM/wf-shell/releases/download/${version}/wf-shell-${version}.tar.xz";
-    sha256 = "1w4jhy84v9ky9s1iw36msn8189a3pwkvvivyhl44pfc4fy31wj7s";
+    url = "https://github.com/WayfireWM/wf-shell/releases/download/v${version}/wf-shell-${version}.tar.xz";
+    sha256 = "1isybm9lcpxwyf6zh2vzkwrcnw3q7qxm21535g4f08f0l68cd5bl";
   };
 
   nativeBuildInputs = [ meson ninja pkg-config wayland ];
   buildInputs = [
-    alsaLib gnome3.gtkmm gtk-layer-shell pulseaudio wayfire wf-config
+    alsa-lib gtkmm3 gtk-layer-shell pulseaudio wayfire wf-config
   ];
 
   mesonFlags = [ "--sysconfdir" "/etc" ];
diff --git a/pkgs/applications/window-managers/weston/default.nix b/pkgs/applications/window-managers/weston/default.nix
index 4a09cac9344..598e78be264 100644
--- a/pkgs/applications/window-managers/weston/default.nix
+++ b/pkgs/applications/window-managers/weston/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, meson, ninja, pkgconfig
+{ lib, stdenv, fetchurl, meson, ninja, pkg-config, wayland-scanner
 , wayland, libGL, mesa, libxkbcommon, cairo, libxcb
 , libXcursor, xlibsWrapper, udev, libdrm, mtdev, libjpeg, pam, dbus, libinput, libevdev
 , colord, lcms2, pipewire ? null
@@ -7,17 +7,17 @@
 # beware of null defaults, as the parameters *are* supplied by callPackage by default
 }:
 
-with stdenv.lib;
+with lib;
 stdenv.mkDerivation rec {
   pname = "weston";
-  version = "8.0.0";
+  version = "9.0.0";
 
   src = fetchurl {
     url = "https://wayland.freedesktop.org/releases/${pname}-${version}.tar.xz";
-    sha256 = "0j3q0af3595g4wcicldgy749zm2g2b6bswa6ya8k075a5sdv863m";
+    sha256 = "1zlql0xgiqc3pvgbpnnvj4xvpd91pwva8qf83xfb23if377ddxaw";
   };
 
-  nativeBuildInputs = [ meson ninja pkgconfig ];
+  nativeBuildInputs = [ meson ninja pkg-config wayland-scanner ];
   buildInputs = [
     wayland libGL mesa libxkbcommon cairo libxcb libXcursor xlibsWrapper udev libdrm
     mtdev libjpeg pam dbus libinput libevdev pango libunwind freerdp vaapi libva
@@ -45,9 +45,19 @@ stdenv.mkDerivation rec {
   passthru.providedSessions = [ "weston" ];
 
   meta = {
-    description = "Reference implementation of a Wayland compositor";
-    homepage = "https://wayland.freedesktop.org/";
-    license = licenses.mit;
+    description = "A lightweight and functional Wayland compositor";
+    longDescription = ''
+      Weston is the reference implementation of a Wayland compositor, as well
+      as a useful environment in and of itself.
+      Out of the box, Weston provides a very basic desktop, or a full-featured
+      environment for non-desktop uses such as automotive, embedded, in-flight,
+      industrial, kiosks, set-top boxes and TVs. It also provides a library
+      allowing other projects to build their own full-featured environments on
+      top of Weston's core. A small suite of example or demo clients are also
+      provided.
+    '';
+    homepage = "https://gitlab.freedesktop.org/wayland/weston";
+    license = licenses.mit; # Expat version
     platforms = platforms.linux;
     maintainers = with maintainers; [ primeos ];
   };
diff --git a/pkgs/applications/window-managers/windowchef/default.nix b/pkgs/applications/window-managers/windowchef/default.nix
new file mode 100644
index 00000000000..f5a5e6dbd5c
--- /dev/null
+++ b/pkgs/applications/window-managers/windowchef/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, libxcb, libXrandr
+, xcbutil, xcbutilkeysyms, xcbutilwm, xcbproto
+}:
+
+stdenv.mkDerivation rec {
+  pname = "windowchef";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner  = "tudurom";
+    repo   = "windowchef";
+    rev    = "v${version}";
+    sha256 = "1m4vly7w2f28lrj26rhh3x9xsp3d97m5cxj91fafgh5rds4ygyhp";
+  };
+
+  buildInputs = [ libxcb libXrandr xcbutil xcbutilkeysyms xcbutilwm xcbproto];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A stacking window manager that cooks windows with orders from the Waitron";
+    homepage = "https://github.com/tudurom/windowchef";
+    maintainers = with maintainers; [ bhougland ];
+    license = licenses.isc;
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/windowlab/default.nix b/pkgs/applications/window-managers/windowlab/default.nix
index d0a1de7f600..f4fea3f434c 100644
--- a/pkgs/applications/window-managers/windowlab/default.nix
+++ b/pkgs/applications/window-managers/windowlab/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig
+{ lib, stdenv, fetchurl, pkg-config
 , libX11, libXext, libXft }:
 
 let version = "1.40"; in
@@ -11,7 +11,7 @@ stdenv.mkDerivation {
     sha256 = "1fx4jwq4s98p2wpvawsiww7d6568bpjgcjpks61dzfj8p2j32s4d";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libX11 libXext libXft ];
 
   postPatch =
@@ -26,11 +26,11 @@ stdenv.mkDerivation {
       sed "s|/usr/local|$out|g" Makefile.orig >> Makefile
     '';
 
-  meta = with stdenv.lib;
+  meta = with lib;
     { description = "Small and simple stacking window manager";
       homepage    = "http://nickgravgaard.com/windowlab/";
       license     = licenses.gpl2;
       maintainers = with maintainers; [ ehmry ];
       platforms   = platforms.linux;
     };
-}
\ No newline at end of file
+}
diff --git a/pkgs/applications/window-managers/windowmaker/default.nix b/pkgs/applications/window-managers/windowmaker/default.nix
index 64783ac5fbe..8c354c616fd 100644
--- a/pkgs/applications/window-managers/windowmaker/default.nix
+++ b/pkgs/applications/window-managers/windowmaker/default.nix
@@ -1,30 +1,31 @@
-{ stdenv, fetchurl, pkgconfig
+{ lib, stdenv, fetchurl, pkg-config
 , libX11, libXext, libXft, libXmu, libXinerama, libXrandr, libXpm
-, imagemagick, libpng, libjpeg, libexif, libtiff, libungif, libwebp }:
+, imagemagick, libpng, libjpeg, libexif, libtiff, giflib, libwebp }:
 
 stdenv.mkDerivation rec {
   pname = "windowmaker";
-  version = "0.95.8";
+  version = "0.95.9";
   srcName = "WindowMaker-${version}";
 
   src = fetchurl {
     url = "http://windowmaker.org/pub/source/release/${srcName}.tar.gz";
-    sha256 = "12p8kljqgx5hnic0zvs5mxwp7kg21sb6qjagb2qw8ydvf5amrgwx";
+    sha256 = "055pqvlkhipyjn7m6bb3fs4zz9rd1ynzl0mmwbhp05ihc3zmh8zj";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   buildInputs = [ libX11 libXext libXft libXmu libXinerama libXrandr libXpm
-                  imagemagick libpng libjpeg libexif libtiff libungif libwebp ];
+                  imagemagick libpng libjpeg libexif libtiff giflib libwebp ];
 
   configureFlags = [
     "--with-x"
     "--enable-modelock"
     "--enable-randr"
-    "--enable-magick"
+    "--enable-webp"
+    "--disable-magick" # Many distros reported imagemagick fails to be found
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://windowmaker.org/";
     description = "NeXTSTEP-like window manager";
     longDescription = ''
@@ -40,5 +41,3 @@ stdenv.mkDerivation rec {
     maintainers = [ maintainers.AndersonTorres ];
   };
 }
-
-# TODO: investigate support for WEBP (its autodetection is failing)
diff --git a/pkgs/applications/window-managers/windowmaker/dockapps/AlsaMixer-app.nix b/pkgs/applications/window-managers/windowmaker/dockapps/AlsaMixer-app.nix
new file mode 100644
index 00000000000..e22b02825b7
--- /dev/null
+++ b/pkgs/applications/window-managers/windowmaker/dockapps/AlsaMixer-app.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, dockapps-sources, pkg-config, libX11, libXpm, libXext, alsa-lib }:
+
+stdenv.mkDerivation rec {
+  pname = "AlsaMixer.app";
+  version = "0.2.1";
+
+  src = dockapps-sources;
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libX11 libXpm libXext alsa-lib ];
+
+  setSourceRoot = ''
+    export sourceRoot=$(echo */${pname})
+  '';
+
+  dontConfigure = true;
+
+  preInstall = ''
+    install -d ${placeholder "out"}/bin
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -t ${placeholder "out"}/bin AlsaMixer.app
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    ln -s ${placeholder "out"}/bin/AlsaMixer.app ${placeholder "out"}/bin/AlsaMixer
+  '';
+
+  meta = with lib; {
+    description = "Alsa mixer application for Windowmaker";
+    homepage = "https://www.dockapps.net/alsamixerapp";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.bstrik ];
+  };
+}
diff --git a/pkgs/applications/window-managers/windowmaker/dockapps/alsamixer.app.nix b/pkgs/applications/window-managers/windowmaker/dockapps/alsamixer.app.nix
deleted file mode 100644
index 4e1256399e7..00000000000
--- a/pkgs/applications/window-managers/windowmaker/dockapps/alsamixer.app.nix
+++ /dev/null
@@ -1,27 +0,0 @@
-{ stdenv, fetchgit, pkgconfig, libX11, libXpm, libXext, alsaLib }:
-
-stdenv.mkDerivation {
-  name = "alsamixer.app-0.2.1";
-  src = fetchgit {
-     url = "git://repo.or.cz/dockapps.git";
-     rev = "38c74350b02f35824554ce0c4f0f251d71762040";
-     sha256 = "0g9cwhlqg065fbhav4g4n16a4cqkk9jykl3y0zwbn5whhacfqyhl";
-  };
-
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ libX11 libXpm libXext alsaLib ];
-
-  postUnpack = "sourceRoot=\${sourceRoot}/AlsaMixer.app";
-
-  installPhase = ''
-    mkdir -pv $out/bin;
-    cp AlsaMixer.app $out/bin/AlsaMixer;
-    '';
-
-  meta = {
-    description = "Alsa mixer application for Windowmaker";
-    homepage = "http://windowmaker.org/dockapps/?name=AlsaMixer.app";
-    license = stdenv.lib.licenses.gpl2;
-    maintainers = [ stdenv.lib.maintainers.bstrik ];
-  };
-}
diff --git a/pkgs/applications/window-managers/windowmaker/dockapps/default.nix b/pkgs/applications/window-managers/windowmaker/dockapps/default.nix
new file mode 100644
index 00000000000..8a66fdbd67f
--- /dev/null
+++ b/pkgs/applications/window-managers/windowmaker/dockapps/default.nix
@@ -0,0 +1,20 @@
+{ config, lib, pkgs }:
+
+lib.makeScope pkgs.newScope (self: with self; {
+
+  dockapps-sources = pkgs.fetchgit {
+    url = "https://repo.or.cz/dockapps.git";
+    rev = "b2b9d872ee61c9b329e4597c301e4417cbd9c3ea";
+    sha256 = "sha256-BuSnwPIj3gUWMjj++SK+117xm/77u4gXLQzRFttei0w=";
+  };
+
+  libdockapp = callPackage ./libdockapp.nix { };
+
+  AlsaMixer-app = callPackage ./AlsaMixer-app.nix { };
+
+  wmCalClock = callPackage ./wmCalClock.nix { };
+
+  wmsm-app = callPackage ./wmsm-app.nix { };
+
+  wmsystemtray = callPackage ./wmsystemtray.nix { };
+})
diff --git a/pkgs/applications/window-managers/windowmaker/dockapps/libdockapp.nix b/pkgs/applications/window-managers/windowmaker/dockapps/libdockapp.nix
new file mode 100644
index 00000000000..aaf99ec932e
--- /dev/null
+++ b/pkgs/applications/window-managers/windowmaker/dockapps/libdockapp.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, dockapps-sources, autoreconfHook, pkg-config
+, libX11, libXext, libXpm, mkfontdir, fontutil }:
+
+stdenv.mkDerivation rec {
+  pname = "libdockapp";
+  version = "0.7.3";
+
+  src = dockapps-sources;
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ libX11 libXext libXpm fontutil mkfontdir ];
+
+  setSourceRoot = ''
+    export sourceRoot=$(echo */${pname})
+  '';
+
+  # There is a bug on --with-font
+  configureFlags = [
+    "--with-examples=no"
+    "--with-font=no"
+  ];
+
+  meta = with lib; {
+    description = "A library providing a framework for dockapps";
+    homepage = "https://www.dockapps.net/libdockapp";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.bstrik ];
+  };
+}
diff --git a/pkgs/applications/window-managers/windowmaker/dockapps/wmCalClock.nix b/pkgs/applications/window-managers/windowmaker/dockapps/wmCalClock.nix
new file mode 100644
index 00000000000..9f49b4508c1
--- /dev/null
+++ b/pkgs/applications/window-managers/windowmaker/dockapps/wmCalClock.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, dockapps-sources
+, libX11, libXpm, libXext }:
+
+stdenv.mkDerivation rec {
+  pname = "wmCalClock";
+  version = "1.25";
+
+  src = dockapps-sources;
+
+  buildInputs = [ libX11 libXpm libXext ];
+
+  setSourceRoot = ''
+    export sourceRoot=$(echo */${pname}/Src)
+  '';
+
+  preBuild = ''
+    makeFlagsArray+=(
+      CC="cc"
+      INCDIR="-I${libX11.dev}/include -I${libXext.dev}/include -I${libXpm.dev}/include"
+      LIBDIR="-I${libX11}/lib -I${libXext}/lib -I${libXpm}/lib"
+    )
+  '';
+
+  preInstall = ''
+    install -d ${placeholder "out"}/bin
+    install -d ${placeholder "out"}/man/man1
+  '';
+
+  installFlags = [ "DESTDIR=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "A Calendar clock with antialiased text";
+    homepage = "https://www.dockapps.net/wmcalclock";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.bstrik ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/windowmaker/dockapps/wmcalclock.nix b/pkgs/applications/window-managers/windowmaker/dockapps/wmcalclock.nix
deleted file mode 100644
index 48f4753d674..00000000000
--- a/pkgs/applications/window-managers/windowmaker/dockapps/wmcalclock.nix
+++ /dev/null
@@ -1,32 +0,0 @@
-{ stdenv, fetchurl, pkgconfig, libX11, libXpm, libXext }:
-
-stdenv.mkDerivation {
-  name = "wmCalClock-1.25";
-  src = fetchurl {
-     url = "http://www.cs.mun.ca/~gstarkes/wmaker/dockapps/files/wmCalClock-1.25.tar.gz";
-     sha256 = "4b42b55bb7c1d7c58b5ee1f0058c683d3e4f3e3380d3a69c54a50b983c7c1b3f";
-  };
-
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ libX11 libXpm libXext ];
-
-  postUnpack = "sourceRoot=\${sourceRoot}/Src";
-
-  buildPhase=''
-    make prefix=$out
-  '';
-
-  installPhase = ''
-    mkdir -pv $out/bin
-    mkdir -pv $out/man/man1
-    make DESTDIR=$out install
-  '';
-
-  meta = {
-    description = "Clock for Windowmaker";
-    homepage = "http://www.cs.mun.ca/~gstarkes/wmaker/dockapps/time.html#wmcalclock";
-    license = stdenv.lib.licenses.gpl2;
-    maintainers = [ stdenv.lib.maintainers.bstrik ];
-    platforms = stdenv.lib.platforms.linux;
-  };
-}
diff --git a/pkgs/applications/window-managers/windowmaker/dockapps/wmsm-app.nix b/pkgs/applications/window-managers/windowmaker/dockapps/wmsm-app.nix
new file mode 100644
index 00000000000..c201c55dcea
--- /dev/null
+++ b/pkgs/applications/window-managers/windowmaker/dockapps/wmsm-app.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, dockapps-sources
+, libX11
+, libXpm
+, libXext
+, libdockapp }:
+
+stdenv.mkDerivation rec {
+  pname = "wmsm.app";
+  version = "0.2.1";
+
+  src = dockapps-sources;
+
+  buildInputs = [ libX11 libXpm libXext libdockapp ];
+
+  setSourceRoot = ''
+    export sourceRoot=$(echo */${pname}/wmsm)
+  '';
+
+  NIX_CFLAGS_COMPILE = "-std=gnu89";
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "PREFIX	= /usr/X11R6/bin" "" \
+      --replace "/usr/bin/install" "install"
+  '';
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  preInstall = ''
+    runHook preInstall
+    install -d ${placeholder "out"}/bin
+    runHook postInstall
+  '';
+
+  installFlags = [ "PREFIX=${placeholder "out"}/bin" ];
+
+  meta = with lib; {
+    description = "System monitor for Windowmaker";
+    homepage = "https://www.dockapps.net/wmsmapp";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.bstrik ];
+  };
+}
diff --git a/pkgs/applications/window-managers/windowmaker/dockapps/wmsm.app.nix b/pkgs/applications/window-managers/windowmaker/dockapps/wmsm.app.nix
deleted file mode 100644
index ad255414a69..00000000000
--- a/pkgs/applications/window-managers/windowmaker/dockapps/wmsm.app.nix
+++ /dev/null
@@ -1,29 +0,0 @@
-{ stdenv, fetchurl, pkgconfig, libX11, libXpm, libXext }:
-
-stdenv.mkDerivation {
-  name = "wmsm.app-0.2.1";
-  src = fetchurl {
-     url = "http://linux-bsd-unix.strefa.pl/wmsm.app-0.2.1.tar.bz2";
-     sha256 = "369a8f2e5673c6b7ab0cf85166f38fbf553dd966c3c1cfeec0e32837defd32c7";
-  };
-
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ libX11 libXpm libXext ];
-
-  postUnpack = "sourceRoot=\${sourceRoot}/wmsm";
-
-  NIX_CFLAGS_COMPILE = "-std=gnu89";
-
-  installPhase = ''
-    substituteInPlace Makefile --replace "PREFIX	= /usr/X11R6/bin" "" --replace "/usr/bin/install" "install"
-    mkdir -pv $out/bin;
-    make PREFIX=$out/bin install;
-    '';
-
-  meta = {
-    description = "System monitor for Windowmaker";
-    homepage = "http://linux-bsd-unix.strefa.pl";
-    license = stdenv.lib.licenses.gpl2;
-    maintainers = [ stdenv.lib.maintainers.bstrik ];
-  };
-}
diff --git a/pkgs/applications/window-managers/windowmaker/dockapps/wmsystemtray.nix b/pkgs/applications/window-managers/windowmaker/dockapps/wmsystemtray.nix
index 3e073cd8e91..ced4cad8055 100644
--- a/pkgs/applications/window-managers/windowmaker/dockapps/wmsystemtray.nix
+++ b/pkgs/applications/window-managers/windowmaker/dockapps/wmsystemtray.nix
@@ -1,20 +1,22 @@
-{ stdenv, fetchurl, pkgconfig, libX11, libXpm, libXext, libXfixes, libXmu }:
+{ lib, stdenv, fetchurl, pkg-config, libX11, libXpm, libXext, libXfixes, libXmu }:
+
+stdenv.mkDerivation rec {
+  pname = "wmsystemtray";
+  version = "1.4";
 
-stdenv.mkDerivation {
-  name = "wmsystemtray-1.4";
   src = fetchurl {
-     url = "mirror://sourceforge/project/wmsystemtray/wmsystemtray/wmsystemtray-1.4.tar.gz";
-     sha256 = "8edef43691e9fff071000e29166c7c1ad420c0956e9068151061e881c8ac97e9";
+    url = "mirror://sourceforge/project/${pname}/${pname}/${pname}-${version}.tar.gz";
+     sha256 = "sha256-jt70NpHp//BxAA4pFmx8GtQgwJVukGgVEGHogcisl+k=";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libX11 libXpm libXext libXfixes libXmu ];
 
-  meta = {
-    description = "Systemtray for Windowmaker";
+  meta = with lib; {
+    description = "A system tray for Windowmaker";
     homepage = "http://wmsystemtray.sourceforge.net";
-    license = stdenv.lib.licenses.gpl2;
-    maintainers = [ stdenv.lib.maintainers.bstrik ];
-    platforms = stdenv.lib.platforms.linux;
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.bstrik ];
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/applications/window-managers/wio/default.nix b/pkgs/applications/window-managers/wio/default.nix
new file mode 100644
index 00000000000..03ec26f6fb8
--- /dev/null
+++ b/pkgs/applications/window-managers/wio/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, fetchFromBitbucket
+, meson
+, ninja
+, pkg-config
+, alacritty
+, cage
+, cairo
+, libxkbcommon
+, udev
+, wayland
+, wayland-protocols
+, wlroots
+, mesa
+, xwayland
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wio";
+  version = "0.0.0+unstable=2021-06-27";
+
+  src = fetchFromBitbucket {
+    owner = "anderson_torres";
+    repo = pname;
+    rev = "e0b258777995055d69e61a0246a6a64985743f42";
+    sha256 = "sha256-8H9fOnZsNjjq9XvOv68F4RRglGNluxs5/jp/h4ROLiI=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    makeWrapper
+  ];
+  buildInputs = [
+    cairo
+    libxkbcommon
+    mesa # for libEGL
+    udev
+    wayland
+    wayland-protocols
+    wlroots
+    xwayland
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/wio \
+      --prefix PATH ":" "${lib.makeBinPath [ alacritty cage ]}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://wio-project.org/";
+    description = "That Plan 9 feel, for Wayland";
+    longDescription = ''
+      Wio is a Wayland compositor for Linux and FreeBSD which has a similar look
+      and feel to plan9's rio.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = with platforms; linux;
+  };
+
+  passthru.providedSessions = [ "wio" ];
+}
+# TODO: factor Linux-specific options
diff --git a/pkgs/applications/window-managers/wmderland/0001-remove-flto.patch b/pkgs/applications/window-managers/wmderland/0001-remove-flto.patch
new file mode 100644
index 00000000000..cae1eac0a20
--- /dev/null
+++ b/pkgs/applications/window-managers/wmderland/0001-remove-flto.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 17a4944..33406f3 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -10,7 +10,7 @@ include(BuildType)
+ # Request C++14 standard, using new CMake variables.
+ set(CMAKE_CXX_STANDARD 14)
+ set(CMAKE_CXX_STANDARD_REQUIRED True)
+-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto -Wall")
++set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
+ 
+ # If the BuildType is Debug, then add -rdynamic.
+ # (used to print stacktrace with function names)
diff --git a/pkgs/applications/window-managers/wmderland/default.nix b/pkgs/applications/window-managers/wmderland/default.nix
new file mode 100644
index 00000000000..c0fcdd859b2
--- /dev/null
+++ b/pkgs/applications/window-managers/wmderland/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchFromGitHub, cmake, libnotify, libX11, xorgproto, nixosTests }:
+
+stdenv.mkDerivation {
+  pname = "wmderland";
+  version = "unstable-2020-07-17";
+
+  src = fetchFromGitHub {
+    owner = "aesophor";
+    repo = "wmderland";
+    rev = "a40a3505dd735b401d937203ab6d8d1978307d72";
+    sha256 = "0npmlnybblp82mfpinjbz7dhwqgpdqc1s63wc1zs8mlcs19pdh98";
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  cmakeBuildType = "MinSizeRel";
+
+  patches = [ ./0001-remove-flto.patch ];
+
+  postPatch = ''
+    substituteInPlace src/util.cc \
+      --replace "notify-send" "${libnotify}/bin/notify-send"
+  '';
+
+  buildInputs = [
+    libX11
+    xorgproto
+  ];
+
+  postInstall = ''
+    install -Dm0644 -t $out/share/wmderland/contrib $src/example/config
+    install -Dm0644 -t $out/share/xsessions $src/example/wmderland.desktop
+  '';
+
+  passthru = {
+    tests.basic = nixosTests.wmderland;
+    providedSessions = [ "wmderland" ];
+  };
+
+  meta = with lib; {
+    description = "Modern and minimal X11 tiling window manager";
+    homepage = "https://github.com/aesophor/wmderland";
+    license = licenses.mit;
+    platforms = libX11.meta.platforms;
+    maintainers = with maintainers; [ takagiy ];
+  };
+}
diff --git a/pkgs/applications/window-managers/wmderlandc/default.nix b/pkgs/applications/window-managers/wmderlandc/default.nix
new file mode 100644
index 00000000000..24690eeaa46
--- /dev/null
+++ b/pkgs/applications/window-managers/wmderlandc/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, cmake, libX11, xorgproto }:
+
+stdenv.mkDerivation {
+  pname = "wmderlandc";
+  version = "unstable-2020-07-17";
+
+  src = fetchFromGitHub {
+    owner = "aesophor";
+    repo = "wmderland";
+    rev = "a40a3505dd735b401d937203ab6d8d1978307d72";
+    sha256 = "0npmlnybblp82mfpinjbz7dhwqgpdqc1s63wc1zs8mlcs19pdh98";
+  };
+
+  sourceRoot = "source/ipc-client";
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    libX11
+    xorgproto
+  ];
+
+  meta = with lib; {
+    description = "A tiny program to interact with wmderland";
+    homepage = "https://github.com/aesophor/wmderland/tree/master/ipc-client";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ takagiy ];
+  };
+}
diff --git a/pkgs/applications/window-managers/wmfs/default.nix b/pkgs/applications/window-managers/wmfs/default.nix
index a53fc560abc..83c7d787d88 100644
--- a/pkgs/applications/window-managers/wmfs/default.nix
+++ b/pkgs/applications/window-managers/wmfs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, gnumake,
+{ lib, stdenv, fetchFromGitHub, gnumake,
   libX11, libXinerama, libXrandr, libXpm, libXft, imlib2 }:
 stdenv.mkDerivation {
   pname = "wmfs";
@@ -33,7 +33,7 @@ stdenv.mkDerivation {
     "MANPREFIX=${placeholder "out"}/share/man"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Window manager from scratch";
     license = licenses.bsd2;
     maintainers = [ maintainers.balsoft ];
diff --git a/pkgs/applications/window-managers/wmii-hg/default.nix b/pkgs/applications/window-managers/wmii-hg/default.nix
index 721e618b1d4..d0c35ab7cbb 100644
--- a/pkgs/applications/window-managers/wmii-hg/default.nix
+++ b/pkgs/applications/window-managers/wmii-hg/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, unzip, pkgconfig, libixp_hg, txt2tags, dash, python, which
+{ lib, stdenv, fetchurl, unzip, pkg-config, libixp_hg, txt2tags, dash, python, which
 , libX11 , libXrender, libXext, libXinerama, libXrandr, libXft }:
 
 stdenv.mkDerivation rec {
@@ -29,8 +29,8 @@ stdenv.mkDerivation rec {
     EOF
   '';
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ unzip libixp_hg txt2tags dash python which
+  nativeBuildInputs = [ pkg-config unzip ];
+  buildInputs = [ libixp_hg txt2tags dash python which
                   libX11 libXrender libXext libXinerama libXrandr libXft ];
 
   # For some reason including mercurial in buildInputs did not help
@@ -39,9 +39,8 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://suckless.org/"; # https://wmii.suckless.org/ does not exist anymore
     description = "A small window manager controlled by a 9P filesystem";
-    maintainers = with stdenv.lib.maintainers; [ kovirobi ];
-    license = stdenv.lib.licenses.mit;
-    inherit version;
-    platforms = with stdenv.lib.platforms; linux;
+    maintainers = with lib.maintainers; [ kovirobi ];
+    license = lib.licenses.mit;
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/applications/window-managers/xmonad/log-applet/default.nix b/pkgs/applications/window-managers/xmonad/log-applet/default.nix
index 7c6041b576e..2e41cc2c97c 100644
--- a/pkgs/applications/window-managers/xmonad/log-applet/default.nix
+++ b/pkgs/applications/window-managers/xmonad/log-applet/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook, glib, dbus-glib
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook, glib, dbus-glib
 , desktopSupport ? "gnomeflashback", xorg
 , gtk2
-, gtk3, gnome3, mate
+, gtk3, gnome, mate
 , libxfce4util, xfce4-panel
 }:
 
@@ -20,12 +20,12 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ glib dbus-glib xorg.xcbutilwm ]
-    ++ stdenv.lib.optionals (desktopSupport == "gnomeflashback") [ gtk3 gnome3.gnome-panel ]
-    ++ stdenv.lib.optionals (desktopSupport == "mate") [ gtk3 mate.mate-panel ]
-    ++ stdenv.lib.optionals (desktopSupport == "xfce4") [ gtk2 libxfce4util xfce4-panel ]
+    ++ lib.optionals (desktopSupport == "gnomeflashback") [ gtk3 gnome.gnome-panel ]
+    ++ lib.optionals (desktopSupport == "mate") [ gtk3 mate.mate-panel ]
+    ++ lib.optionals (desktopSupport == "xfce4") [ gtk2 libxfce4util xfce4-panel ]
   ;
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
 
   configureFlags =  [ "--with-panel=${desktopSupport}" ];
 
@@ -35,9 +35,10 @@ stdenv.mkDerivation rec {
   # --define-variable=prefix=$prefix
   PKG_CONFIG_LIBXFCE4PANEL_1_0_LIBDIR = "$(out)/lib";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/kalj/xmonad-log-applet";
     license = licenses.bsd3;
+    broken = desktopSupport == "gnomeflashback" || desktopSupport == "xfce4";
     description = "An applet that will display XMonad log information (${desktopSupport} version)";
     platforms = platforms.linux;
     maintainers = with maintainers; [ abbradar ];
diff --git a/pkgs/applications/window-managers/yabar/build.nix b/pkgs/applications/window-managers/yabar/build.nix
index 10806ba78cf..f9b5d227b0e 100644
--- a/pkgs/applications/window-managers/yabar/build.nix
+++ b/pkgs/applications/window-managers/yabar/build.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub, cairo, gdk-pixbuf, libconfig, pango, pkgconfig
-, xcbutilwm, alsaLib, wirelesstools, asciidoc, libxslt, makeWrapper, docbook_xsl
+{ stdenv, fetchFromGitHub, cairo, gdk-pixbuf, libconfig, pango, pkg-config
+, xcbutilwm, alsa-lib, wirelesstools, asciidoc, libxslt, makeWrapper, docbook_xsl
 , configFile ? null, lib
 , rev, sha256, version, patches ? []
 }:
@@ -19,10 +19,10 @@ stdenv.mkDerivation {
 
   hardeningDisable = [ "format" ];
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [
     cairo gdk-pixbuf libconfig pango xcbutilwm docbook_xsl
-    alsaLib wirelesstools asciidoc libxslt makeWrapper
+    alsa-lib wirelesstools asciidoc libxslt makeWrapper
   ];
 
   postPatch = ''
@@ -45,11 +45,11 @@ stdenv.mkDerivation {
     }
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A modern and lightweight status bar for X window managers";
     homepage    = "https://github.com/geommer/yabar";
     license     = licenses.mit;
     platforms   = platforms.linux;
-    maintainers = with maintainers; [ ma27 ];
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/applications/window-managers/yeahwm/default.nix b/pkgs/applications/window-managers/yeahwm/default.nix
index a8323ff1d38..3cf997c22c2 100644
--- a/pkgs/applications/window-managers/yeahwm/default.nix
+++ b/pkgs/applications/window-managers/yeahwm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl
+{ lib, stdenv, fetchurl
 , lesstif
 , libX11, libXext, libXmu, libXinerama }:
 
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
     install -m644 yeahwm.1.gz ${placeholder "out"}/share/man/man1/
   '';
 
-  meta = with stdenv.lib;{
+  meta = with lib;{
     description = "An X window manager based on evilwm and aewm";
     longDescription = ''
       YeahWM is a h* window manager for X based on evilwm and aewm.