From 0ab07cfe16eb6831b300bcc12f5a7207cec5e26c Mon Sep 17 00:00:00 2001 From: mmc Date: Mon, 10 Aug 2026 10:11:32 -0500 Subject: [PATCH 1/4] fix(nix): declare wayland, x11 and openssl deps explicitly The build asks for these by name, but none of them were listed: CMake resolves wayland-scanner with find_program(... REQUIRED), reads wayland-protocols' pkgdatadir through pkg-config, requires OpenSSL for the crypto lib and the vendored sqlcipher, requires X11 for the xcb window manager, and links xkbcommon and udev by bare name. They resolved anyway, because qt6.qtbase propagates openssl, libx11, libxcb, libxcb-keysyms, libxkbcommon, systemd and wayland-scanner, and kdePackages.layer-shell-qt propagates wayland-protocols. Nothing declares that arrangement and nothing tests it. d344b477 is why it matters. Unvendoring the merged protocols made system wayland-protocols a hard configure-time requirement, FATAL_ERROR and all. nix/vicinae.nix was not touched, and the Nix build stayed green only because layer-shell-qt happened to carry it. Whenever that path is disturbed, by a buildInput dropped or a nixpkgs bump that changes what Qt propagates, configure fails with "wayland-protocols not found" in a diff that has nothing to do with Wayland. The derivation already sets strictDeps, so this finishes a rigour it had opted into. Every package added here was already in the build graph at the same version, so the closure is unchanged. --- nix/vicinae.nix | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/nix/vicinae.nix b/nix/vicinae.nix index debc17d94..88fc78d83 100644 --- a/nix/vicinae.nix +++ b/nix/vicinae.nix @@ -5,15 +5,23 @@ kdePackages, lib, libqalculate, + libx11, + libxcb, + libxcb-keysyms, + libxkbcommon, llvmPackages_21, ninja, nodejs, npmHooks, + openssl, pkg-config, qt6, stdenv, gcc15Stdenv, + udev, wayland, + wayland-protocols, + wayland-scanner, glaze, swift ? null, apple-sdk ? null, @@ -91,6 +99,9 @@ in qt6.qttools qt6.wrapQtAppsHook ] + ++ lib.optionals isLinux [ + wayland-scanner + ] ++ lib.optionals isDarwin [ swift ]; @@ -111,8 +122,15 @@ in ] ++ lib.optionals isLinux [ kdePackages.layer-shell-qt + libx11 + libxcb + libxcb-keysyms + libxkbcommon + openssl qt6.qtwayland + udev wayland + wayland-protocols ] ++ lib.optionals isDarwin [ apple-sdk From 5943d423fceb5a432f278b1a08ea35e60a60efd1 Mon Sep 17 00:00:00 2001 From: mmc Date: Mon, 10 Aug 2026 10:11:43 -0500 Subject: [PATCH 2/4] chore(nix): skip modules-load.d install in the nix build systemd only reads modules-load.d from /etc, /run and /usr/lib, and NixOS generates /etc/modules-load.d from boot.kernelModules. The vicinae.conf we install into the store path is therefore inert, and it suggests the package takes care of loading uinput when it does not. Loading uinput on NixOS belongs in the NixOS module, not here. --- nix/vicinae.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nix/vicinae.nix b/nix/vicinae.nix index 88fc78d83..cf81a4903 100644 --- a/nix/vicinae.nix +++ b/nix/vicinae.nix @@ -73,6 +73,7 @@ in "VICINAE_GIT_TAG" = "v${finalAttrs.version}"; "VICINAE_GIT_COMMIT_HASH" = manifestGet "short_rev"; "VICINAE_PROVENANCE" = "nix"; + "INSTALL_MODULES_LOAD_CONFIG" = "OFF"; "INSTALL_NODE_MODULES" = "OFF"; "USE_SYSTEM_CMARK_GFM" = "ON"; "USE_SYSTEM_GLAZE" = "ON"; From 441b65a4305399dc324b29ff177449d72289f9af Mon Sep 17 00:00:00 2001 From: mmc Date: Mon, 10 Aug 2026 10:12:14 -0500 Subject: [PATCH 3/4] fix(nix): drop dead compiler exports from the dev shell CMAKE_C_COMPILER and CMAKE_CXX_COMPILER are not environment variables. CMake reads CC and CXX and stores their values into the CMAKE_*_COMPILER cache entries; unlike CMAKE_TOOLCHAIN_FILE it never looks the compiler variables up in the environment, so both exports were no-ops. CC and CXX were redundant too: the shell is already built with mkShell.override { stdenv = package.stdenv; }, package.stdenv is gcc15Stdenv, and gcc15Stdenv.cc is pkgs.gcc15, the same wrapper the stdenv puts on PATH and exports itself. Pinning them by hand also quietly defeated that override, since the shell would have kept using gcc 15 if effectiveStdenv ever moved on. With the compiler exports gone, the hook only carries the QML import paths, and those are just as useful on macOS, so the isLinux guard on the shellHook goes too. Ref: https://cmake.org/cmake/help/latest/envvar/CC.html --- flake.nix | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/flake.nix b/flake.nix index 4f272b380..b7bed65a7 100644 --- a/flake.nix +++ b/flake.nix @@ -87,12 +87,7 @@ clang-tools ]; - shellHook = pkgs.lib.optionalString isLinux '' - export CC=${pkgs.gcc15}/bin/gcc - export CXX=${pkgs.gcc15}/bin/g++ - export CMAKE_C_COMPILER=$CC - export CMAKE_CXX_COMPILER=$CXX - + shellHook = '' export QML2_IMPORT_PATH=${pkgs.qt6.qtdeclarative}/lib/qt-6/qml export QML_IMPORT_PATH=${pkgs.qt6.qtdeclarative}/lib/qt-6/qml ''; From 85521f69cdbb0bdf17452773c8379da9be99a9b7 Mon Sep 17 00:00:00 2001 From: mmc Date: Mon, 10 Aug 2026 10:12:29 -0500 Subject: [PATCH 4/4] fix(nix): expose the full qt env to qmlls The dev shell builds a qtEnv aggregating qtdeclarative, qtsvg, qtimageformats, qttools and, on Linux, qtwayland and layer-shell-qt, but pointed the QML import paths at qtdeclarative alone. Comparing the two trees, that hid exactly the modules the aggregate exists for: org.kde.layershell and QtWayland. --- flake.nix | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index b7bed65a7..53f2b4e19 100644 --- a/flake.nix +++ b/flake.nix @@ -87,9 +87,12 @@ clang-tools ]; + # qmlls discovers QML modules through these, so point them at the + # aggregate env: qtdeclarative alone hides LayerShellQt and the + # modules shipped by the other Qt packages. shellHook = '' - export QML2_IMPORT_PATH=${pkgs.qt6.qtdeclarative}/lib/qt-6/qml - export QML_IMPORT_PATH=${pkgs.qt6.qtdeclarative}/lib/qt-6/qml + export QML2_IMPORT_PATH=${qtEnv}/lib/qt-6/qml + export QML_IMPORT_PATH=${qtEnv}/lib/qt-6/qml ''; }; }