···11+--- a/config.py 2025-08-03 00:37:13.058374602 +0200
22++++ b/config.py 2025-08-03 00:45:51.869382363 +0200
33+@@ -24,10 +24,18 @@
44+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
55+ # SOFTWARE.
66+77+-from libqtile import bar, layout, qtile, widget
88++from libqtile import bar, layout, qtile, widget, hook
99+ from libqtile.config import Click, Drag, Group, Key, Match, Screen
1010+ from libqtile.lazy import lazy
1111+ from libqtile.utils import guess_terminal
1212++from libqtile.log_utils import logger
1313++
1414++
1515++@hook.subscribe.startup
1616++def print_ready():
1717++ logger.warning("ready!") # warning to make it always visible
1818++
1919++
2020+2121+ mod = "mod4"
2222+ terminal = guess_terminal()
···11+{ lib, ... }:
22+{
33+ name = "qtile-extras";
44+55+ meta = {
66+ maintainers = with lib.maintainers; [
77+ sigmanificient
88+ gurjaka
99+ ];
1010+ };
1111+1212+ nodes.machine =
1313+ {
1414+ pkgs,
1515+ lib,
1616+ ...
1717+ }:
1818+ let
1919+ # We create a custom Qtile configuration file that adds a widget from
2020+ # qtile-extras to the bar. This ensure that the qtile-extras package
2121+ # also works, and that extraPackages behave as expected.
2222+ config-deriv = pkgs.callPackage ./config.nix { };
2323+ in
2424+ {
2525+ imports = [
2626+ ../common/x11.nix
2727+ ../common/user-account.nix
2828+ ];
2929+ test-support.displayManager.auto.user = "alice";
3030+3131+ services.xserver.windowManager.qtile = {
3232+ enable = true;
3333+ configFile = "${config-deriv}/config.py";
3434+ extraPackages = ps: [ ps.qtile-extras ];
3535+ };
3636+3737+ services.displayManager.defaultSession = lib.mkForce "qtile";
3838+3939+ environment.systemPackages = [ pkgs.kitty ];
4040+ };
4141+4242+ testScript = ''
4343+ from pathlib import Path
4444+4545+ with subtest("ensure x starts"):
4646+ machine.wait_for_x()
4747+ machine.wait_for_file("/home/alice/.Xauthority")
4848+ machine.succeed("xauth merge ~alice/.Xauthority")
4949+5050+ with subtest("ensure client is available"):
5151+ machine.succeed("qtile --version")
5252+5353+ with subtest("Qtile signals that it is ready"):
5454+ qtile_logfile = Path("/home/alice/.local/share/qtile/qtile.log")
5555+5656+ machine.succeed(f"mkdir -p {qtile_logfile.parent}")
5757+ machine.succeed(f"touch {qtile_logfile}")
5858+ machine.succeed(f"sh -c 'tail -f {qtile_logfile} | grep --line-buffered \'ready\' -m 1'")
5959+6060+ with subtest("ensure we can open a new terminal"):
6161+ machine.send_key("meta_l-ret")
6262+ machine.wait_for_window(r"alice.*?machine")
6363+ machine.screenshot("terminal")
6464+ '';
6565+}
+22
nixos/tests/qtile/add-startup-hook.patch
···11+--- a/config.py 2025-08-03 00:37:13.058374602 +0200
22++++ b/config.py 2025-08-03 00:45:51.869382363 +0200
33+@@ -24,10 +24,18 @@
44+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
55+ # SOFTWARE.
66+77+-from libqtile import bar, layout, qtile, widget
88++from libqtile import bar, layout, qtile, widget, hook
99+ from libqtile.config import Click, Drag, Group, Key, Match, Screen
1010+ from libqtile.lazy import lazy
1111+ from libqtile.utils import guess_terminal
1212++from libqtile.log_utils import logger
1313++
1414++
1515++@hook.subscribe.startup
1616++def print_ready():
1717++ logger.warning("ready!") # warning to make it always visible
1818++
1919++
2020+2121+ mod = "mod4"
2222+ terminal = guess_terminal()
···9696 '';
97979898 passthru = prevAttrs.passthru or { } // {
9999- useCudatoolkitRunfile = strings.versionOlder cudaMajorMinorVersion "11.3.999";
10099 # The CUDNN used with TensorRT.
101100 # If null, the default cudnn derivation will be used.
102101 # If a version is specified, the cudnn derivation with that version will be used,
···55in
66options.mkOption {
77 description = "Feature manifest is an attribute set which includes a mapping from package name to release";
88- example = trivial.importJSON ../../../../cuda/manifests/feature_11.5.2.json;
88+ example = trivial.importJSON ../../../../cuda/manifests/feature_11.8.0.json;
99 type = types.attrsOf Release.type;
1010}
···55in
66options.mkOption {
77 description = "Redistributable manifest is an attribute set which includes a mapping from package name to release";
88- example = trivial.importJSON ../../../../cuda/manifests/redistrib_11.5.2.json;
88+ example = trivial.importJSON ../../../../cuda/manifests/redistrib_11.8.0.json;
99 type = types.submodule {
1010 # Allow any attribute name as these will be the package names
1111 freeformType = types.attrsOf Release.type;
···1818 cuda_cudart
1919 cuda_nvcc
2020 cudaAtLeast
2121- cudaOlder
2222- cudatoolkit
2321 flags
2422 ;
2523 # versions 2.26+ with CUDA 11.x error with
···5452 which
5553 autoAddDriverRunpath
5654 python3
5757- ]
5858- ++ lib.optionals (cudaOlder "11.4") [ cudatoolkit ]
5959- ++ lib.optionals (cudaAtLeast "11.4") [ cuda_nvcc ];
5555+ cuda_nvcc
5656+ ];
60576161- buildInputs =
6262- lib.optionals (cudaOlder "11.4") [ cudatoolkit ]
6363- ++ lib.optionals (cudaAtLeast "11.4") [
6464- cuda_nvcc # crt/host_config.h
6565- cuda_cudart
6666- ]
6767- # NOTE: CUDA versions in Nixpkgs only use a major and minor version. When we do comparisons
6868- # against other version, like below, it's important that we use the same format. Otherwise,
6969- # we'll get incorrect results.
7070- # For example, lib.versionAtLeast "12.0" "12.0.0" == false.
7171- ++ lib.optionals (cudaAtLeast "12.0") [ cuda_cccl ];
5858+ buildInputs = [
5959+ cuda_nvcc # crt/host_config.h
6060+ cuda_cudart
6161+ ]
6262+ # NOTE: CUDA versions in Nixpkgs only use a major and minor version. When we do comparisons
6363+ # against other version, like below, it's important that we use the same format. Otherwise,
6464+ # we'll get incorrect results.
6565+ # For example, lib.versionAtLeast "12.0" "12.0.0" == false.
6666+ ++ lib.optionals (cudaAtLeast "12.0") [ cuda_cccl ];
72677368 env.NIX_CFLAGS_COMPILE = toString [ "-Wno-unused-function" ];
7469···8075 makeFlags = [
8176 "PREFIX=$(out)"
8277 "NVCC_GENCODE=${flags.gencodeString}"
8383- ]
8484- ++ lib.optionals (cudaOlder "11.4") [
8585- "CUDA_HOME=${cudatoolkit}"
8686- "CUDA_LIB=${lib.getLib cudatoolkit}/lib"
8787- "CUDA_INC=${lib.getDev cudatoolkit}/include"
8888- ]
8989- ++ lib.optionals (cudaAtLeast "11.4") [
9078 "CUDA_HOME=${cuda_nvcc}"
9179 "CUDA_LIB=${lib.getLib cuda_cudart}/lib"
9280 "CUDA_INC=${lib.getDev cuda_cudart}/include"
···526526 blas
527527 blas.provider
528528 ]
529529- # Including openmp leads to two copies being used. This segfaults on ARM.
529529+ # Including openmp leads to two copies being used on ARM, which segfaults.
530530 # https://github.com/pytorch/pytorch/issues/149201#issuecomment-2776842320
531531- # ++ lib.optionals stdenv.cc.isClang [ llvmPackages.openmp ]
531531+ ++ lib.optionals (stdenv.cc.isClang && !stdenv.hostPlatform.isAarch64) [ llvmPackages.openmp ]
532532 ++ lib.optionals cudaSupport (
533533 with cudaPackages;
534534 [
+1-1
pkgs/development/tools/infisical/default.nix
···2121 buildHashes = builtins.fromJSON (builtins.readFile ./hashes.json);
22222323 # the version of infisical
2424- version = "0.41.88";
2424+ version = "0.41.90";
25252626 # the platform-specific, statically linked binary
2727 src =
···4141 meta = with lib; {
4242 homepage = "https://www.keybase.io/";
4343 description = "Keybase official command-line utility and service";
4444+ mainProgram = "keybase";
4445 platforms = platforms.linux ++ platforms.darwin;
4546 maintainers = with maintainers; [
4647 avaq
+1
pkgs/top-level/aliases.nix
···17621762 retroarchBare = retroarch-bare; # Added 2024-11-23
17631763 retroarchFull = retroarch-full; # Added 2024-11-23
17641764 retroshare06 = retroshare;
17651765+ rewind-ai = throw "'rewind-ai' has been removed due to lack of of maintenance upstream"; # Added 2025-08-03
17651766 responsively-app = throw "'responsively-app' has been removed due to lack of maintainance upstream."; # Added 2025-06-25
17661767 rftg = throw "'rftg' has been removed due to lack of maintenance upstream."; # Added 2024-12-04
17671768 rigsofrods = rigsofrods-bin; # Added 2023-03-22
···173173 (
174174 final: _:
175175 {
176176- cuda_compat = runCommand "cuda_compat" { meta.platforms = [ ]; } "false"; # Prevent missing attribute errors
176176+ # Prevent missing attribute errors
177177+ # NOTE(@connorbaker): CUDA 12.3 does not have a cuda_compat package; indeed, none of the release supports
178178+ # Jetson devices. To avoid errors in the case that cuda_compat is not defined, we have a dummy package which
179179+ # is always defined, but does nothing, will not build successfully, and has no platforms.
180180+ cuda_compat = runCommand "cuda_compat" { meta.platforms = [ ]; } "false";
177181 }
178182 // lib.packagesFromDirectoryRecursive {
179183 inherit (final) callPackage;