diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 60f7adcac189..83538fb3bc07 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -827,7 +827,7 @@ in { qgis = handleTest ./qgis.nix { qgisPackage = pkgs.qgis; }; qgis-ltr = handleTest ./qgis.nix { qgisPackage = pkgs.qgis-ltr; }; qownnotes = handleTest ./qownnotes.nix {}; - qtile = handleTestOn ["x86_64-linux" "aarch64-linux"] ./qtile.nix {}; + qtile = handleTestOn ["x86_64-linux" "aarch64-linux"] ./qtile/default.nix {}; quake3 = handleTest ./quake3.nix {}; quicktun = handleTest ./quicktun.nix {}; quickwit = handleTest ./quickwit.nix {}; diff --git a/nixos/tests/qtile/add-widget.patch b/nixos/tests/qtile/add-widget.patch new file mode 100644 index 000000000000..622ba35a1999 --- /dev/null +++ b/nixos/tests/qtile/add-widget.patch @@ -0,0 +1,19 @@ +--- a/config.py 2024-05-31 14:49:23.852287845 +0200 ++++ b/config.py 2024-05-31 14:51:00.935182266 +0200 +@@ -29,6 +29,8 @@ + from libqtile.lazy import lazy + from libqtile.utils import guess_terminal + ++from qtile_extras import widget ++ + mod = "mod4" + terminal = guess_terminal() + +@@ -162,6 +164,7 @@ + # NB Systray is incompatible with Wayland, consider using StatusNotifier instead + # widget.StatusNotifier(), + widget.Systray(), ++ widget.AnalogueClock(), + widget.Clock(format="%Y-%m-%d %a %I:%M %p"), + widget.QuickExit(), + ], diff --git a/nixos/tests/qtile/config.nix b/nixos/tests/qtile/config.nix new file mode 100644 index 000000000000..2536b9e2a8ae --- /dev/null +++ b/nixos/tests/qtile/config.nix @@ -0,0 +1,24 @@ +{ stdenvNoCC, fetchurl }: +stdenvNoCC.mkDerivation { + name = "qtile-config"; + version = "0.0.1"; + + src = fetchurl { + url = "https://raw.githubusercontent.com/qtile/qtile/v0.28.1/libqtile/resources/default_config.py"; + hash = "sha256-Y5W277CWVNSi4BdgEW/f7Px/MMjnN9W9TDqdOncVwPc="; + }; + + prePatch = '' + cp $src config.py + ''; + + patches = [ ./add-widget.patch ]; + + dontUnpack = true; + dontBuild = true; + + installPhase = '' + mkdir -p $out + cp config.py $out/config.py + ''; +} diff --git a/nixos/tests/qtile.nix b/nixos/tests/qtile/default.nix similarity index 57% rename from nixos/tests/qtile.nix rename to nixos/tests/qtile/default.nix index 96afaa342c52..718063fa8bb5 100644 --- a/nixos/tests/qtile.nix +++ b/nixos/tests/qtile/default.nix @@ -1,15 +1,26 @@ -import ./make-test-python.nix ({ lib, ...} : { +import ../make-test-python.nix ({ lib, ...} : { name = "qtile"; meta = { maintainers = with lib.maintainers; [ sigmanificient ]; }; - nodes.machine = { pkgs, lib, ... }: { - imports = [ ./common/x11.nix ./common/user-account.nix ]; + nodes.machine = { pkgs, lib, ... }: let + # We create a custom Qtile configuration file that adds a widget from + # qtile-extras to the bar. This ensure that the qtile-extras package + # also works, and that extraPackages behave as expected. + + config-deriv = pkgs.callPackage ./config.nix { }; + in { + imports = [ ../common/x11.nix ../common/user-account.nix ]; test-support.displayManager.auto.user = "alice"; - services.xserver.windowManager.qtile.enable = true; + services.xserver.windowManager.qtile = { + enable = true; + configFile = "${config-deriv}/config.py"; + extraPackages = ps: [ ps.qtile-extras ]; + }; + services.displayManager.defaultSession = lib.mkForce "qtile"; environment.systemPackages = [ pkgs.kitty ];