feat: add xontribs, hyprspace, and gcc15-fixes overlay
ci/woodpecker/push/woodpecker Pipeline failed

- packages/xontribs.nix: xontrib-prompt-starship, -broot, -term-integrations
  wheels for use with `programs.xonsh.extraPackages` (or xonsh.override)
- packages/hyprspace.nix + hyprspace flake input (flake=false): rebuild
  plugin against the consumer's hyprland; exposed via overlays.hyprspace
- overlays/gcc15-fixes.nix: hotdoc/kitty/libsecret/xdg-desktop-portal/afdko
  workarounds so fleet nodes on the same pin can opt in with one line
- flake.nix: lift overlays out of eachSystem to the root (overlays.default
  was previously nested per-system, which doesn't match flake schema)
This commit is contained in:
Oleks
2026-04-23 20:18:35 +03:00
parent 7599dbd981
commit 4e2bb71ed5
5 changed files with 165 additions and 8 deletions
Generated
+18
View File
@@ -69,6 +69,23 @@
"url": "https://git.oleks.space/oleks/fleet-pins" "url": "https://git.oleks.space/oleks/fleet-pins"
} }
}, },
"hyprspace": {
"flake": false,
"locked": {
"lastModified": 1764820995,
"narHash": "sha256-IMa4mvkF0w7OAy+yEzPFYs2an332K30lf5qfUOAS9Cw=",
"owner": "KZDKM",
"repo": "Hyprspace",
"rev": "0467be86b18cfc324fab04afbd40fe9ef80f7fa9",
"type": "github"
},
"original": {
"owner": "KZDKM",
"repo": "Hyprspace",
"rev": "0467be86b18cfc324fab04afbd40fe9ef80f7fa9",
"type": "github"
}
},
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1771848320, "lastModified": 1771848320,
@@ -89,6 +106,7 @@
"inputs": { "inputs": {
"flake-utils": "flake-utils", "flake-utils": "flake-utils",
"fleet-pins": "fleet-pins", "fleet-pins": "fleet-pins",
"hyprspace": "hyprspace",
"nixpkgs": [ "nixpkgs": [
"fleet-pins", "fleet-pins",
"nixpkgs-projects" "nixpkgs-projects"
+39 -8
View File
@@ -5,6 +5,13 @@
fleet-pins.url = "git+https://git.oleks.space/oleks/fleet-pins?ref=main"; fleet-pins.url = "git+https://git.oleks.space/oleks/fleet-pins?ref=main";
nixpkgs.follows = "fleet-pins/nixpkgs-projects"; nixpkgs.follows = "fleet-pins/nixpkgs-projects";
flake-utils.url = "github:numtide/flake-utils"; flake-utils.url = "github:numtide/flake-utils";
# Hyprspace source; no flake.nix in the repo so we consume it as raw src.
# Pin tracks the last v0.52-compatible commit of Hyprspace.
hyprspace = {
url = "github:KZDKM/Hyprspace/0467be86b18cfc324fab04afbd40fe9ef80f7fa9";
flake = false;
};
}; };
outputs = outputs =
@@ -13,6 +20,7 @@
nixpkgs, nixpkgs,
fleet-pins, fleet-pins,
flake-utils, flake-utils,
hyprspace,
... ...
}: }:
let let
@@ -27,13 +35,33 @@
"s390x-linux" = "s390x-linux"; "s390x-linux" = "s390x-linux";
}; };
mkPackages = pkgs: { mkPackages =
hello-world = pkgs.callPackage ./packages/hello-world.nix { }; pkgs:
geesefs = pkgs.callPackage ./packages/geesefs.nix { }; let
xonsh = pkgs.callPackage ./packages/xonsh.nix { xontribs = import ./packages/xontribs.nix {
xonsh-unwrapped = import ./packages/xonsh-unwrapped.nix { inherit (pkgs) python3Packages fetchurl;
inherit (pkgs) lib python3Packages fetchFromGitHub;
}; };
in
{
hello-world = pkgs.callPackage ./packages/hello-world.nix { };
geesefs = pkgs.callPackage ./packages/geesefs.nix { };
xonsh = pkgs.callPackage ./packages/xonsh.nix {
xonsh-unwrapped = import ./packages/xonsh-unwrapped.nix {
inherit (pkgs) lib python3Packages fetchFromGitHub;
};
};
}
# Xontribs: pass into `programs.xonsh.extraPackages` or
# `pkgs.xonsh.override { extraPackages = ps: [...]; }`.
// xontribs;
# Overlay providing Hyprspace. Requires `pkgs.hyprland` to be present
# (consumer applies the Hyprland flake's overlay first). Kept out of
# `mkPackages` because standalone `nix build .#hyprspace` has no
# Hyprland in scope.
hyprspaceOverlay = final: _prev: {
hyprspace = final.callPackage ./packages/hyprspace.nix {
src = hyprspace;
}; };
}; };
@@ -127,8 +155,6 @@
default = packages.hello-world; default = packages.hello-world;
}; };
overlays.default = final: prev: mkPackages final;
devShells.default = pkgs.mkShell { devShells.default = pkgs.mkShell {
name = "oleks-hub-shell"; name = "oleks-hub-shell";
buildInputs = [ self.packages.${system}.default ]; buildInputs = [ self.packages.${system}.default ];
@@ -196,5 +222,10 @@
native native
// { // {
packages = (native.packages or { }) // cross; packages = (native.packages or { }) // cross;
overlays = {
default = final: _prev: mkPackages final;
gcc15-fixes = import ./overlays/gcc15-fixes.nix;
hyprspace = hyprspaceOverlay;
};
}; };
} }
+43
View File
@@ -0,0 +1,43 @@
# Narrow fixes for packages that fail under the fleet's pinned nixpkgs
# with GCC 15 / current upstream breakage. Remove entries as upstream fixes
# land so consumers can drop them on the next pin bump.
final: prev: {
# hotdoc's bundled cmark declares `project(cmark VERSION 0.28.3)` without
# LANGUAGES, which makes CMake probe CXX; GCC 15 fails the probe. Adding
# LANGUAGES C skips the CXX check.
hotdoc = prev.hotdoc.overrideAttrs (old: {
postPatch = (old.postPatch or "") + ''
substituteInPlace cmark/CMakeLists.txt \
--replace-fail "project(cmark VERSION 0.28.3)" "project(cmark VERSION 0.28.3 LANGUAGES C)"
'';
});
# kitty's bundled base64 lib has incompatible pointer types that GCC 15
# promotes from warning to error.
kitty = prev.kitty.overrideAttrs (old: {
env = (old.env or { }) // {
NIX_CFLAGS_COMPILE = (old.env.NIX_CFLAGS_COMPILE or "") + " -Wno-error=incompatible-pointer-types";
};
});
# Skip D-Bus-dependent checks that fail under remote-builder sandboxes.
libsecret = prev.libsecret.overrideAttrs (_: {
doCheck = false;
});
xdg-desktop-portal = prev.xdg-desktop-portal.overrideAttrs (_: {
doCheck = false;
});
# afdko has two pre-existing test failures that block
# nototools → noto-fonts-color-emoji.
pythonPackagesExtensions = (prev.pythonPackagesExtensions or [ ]) ++ [
(pyFinal: pyPrev: {
afdko = pyPrev.afdko.overrideAttrs (old: {
disabledTests = (old.disabledTests or [ ]) ++ [
"test_non_varying_glyphs_bug356"
"test_ufo_contentsplist_parsing"
];
});
})
];
}
+22
View File
@@ -0,0 +1,22 @@
# Rebuilds the Hyprspace plugin against the consumer's Hyprland. Requires
# `pkgs.hyprland` to already be in scope (consumers apply the upstream
# Hyprland flake overlay first). `src` comes from the hyprspace flake
# input pinned in ../flake.nix.
{
gcc14Stdenv,
hyprland,
src,
}:
gcc14Stdenv.mkDerivation {
pname = "Hyprspace";
version = "unstable-${src.shortRev or "dirty"}";
inherit src;
inherit (hyprland) nativeBuildInputs;
buildInputs = [ hyprland ] ++ hyprland.buildInputs;
dontUseCmakeConfigure = true;
installFlags = [ "PREFIX=$(out)" ];
postInstall = ''
mv $out/lib/Hyprspace.so $out/lib/libHyprspace.so
'';
}
+43
View File
@@ -0,0 +1,43 @@
{
python3Packages,
fetchurl,
}:
let
mkWheel =
{
pname,
version,
url,
sha256,
}:
python3Packages.buildPythonPackage {
inherit pname version;
src = fetchurl { inherit url sha256; };
format = "wheel";
doCheck = false;
dontCheckRuntimeDeps = true;
};
in
{
xontrib-prompt-starship = mkWheel {
pname = "xontrib-prompt-starship";
version = "0.3.7";
url = "https://files.pythonhosted.org/packages/94/71/968450a151d003bb80ed6fbfb190f22cfac076cbd4442dc58b48c5545644/xontrib_prompt_starship-0.3.7-py3-none-any.whl";
sha256 = "12a213fc454c9547c6426d19c4a43982be48500019378267bdab465d0749dccd";
};
xontrib-broot = mkWheel {
pname = "xontrib-broot";
version = "0.2.1";
url = "https://files.pythonhosted.org/packages/a8/97/a595ef322a40bcfaf885af8538d48cd0c506b8e06e3834458909c6b9bf90/xontrib_broot-0.2.1-py3-none-any.whl";
sha256 = "5eee2af0740fcc0355937b1365a15bcfebbe7c045215f0a597a519ce05cca96f";
};
xontrib-term-integrations = mkWheel {
pname = "xontrib-term-integrations";
version = "0.2.0";
url = "https://files.pythonhosted.org/packages/0e/df/76f0d98fb67267124f498b0da6b598939e85d5ef9aad49c3476929395ea0/xontrib_term_integrations-0.2.0-py3-none-any.whl";
sha256 = "cc55f4a1885361349d1a5a39aa6f44abc080e318355335bc14e7ea28c5b30776";
};
}