Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f92aaa9f59 | ||
|
|
e70bbff278 | ||
|
|
d2f8263fb8 | ||
|
|
15421962e6 | ||
|
|
a10fd676f6 | ||
|
|
bc506e4f67 | ||
|
|
f156a27cf4 | ||
|
|
7166c00efc |
@@ -1,4 +1,22 @@
|
|||||||
# Lix 2.95 "Kakigōri" (2026-03-13)
|
# Lix 2.95 "Kakigōri" (2026-03-13)
|
||||||
|
# Lix 2.95.1 (2026-03-19)
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
- fix static builds [cl/5385](https://gerrit.lix.systems/c/lix/+/5385)
|
||||||
|
|
||||||
|
Static builds using musl were broken in 2.95.0 and should work again now.
|
||||||
|
|
||||||
|
Many thanks to [eldritch horrors](https://git.lix.systems/pennae) for this.
|
||||||
|
|
||||||
|
- flake config warnings are now printed to stderr [lix#1155](https://git.lix.systems/lix-project/lix/issues/1155) [cl/5379](https://gerrit.lix.systems/c/lix/+/5379)
|
||||||
|
|
||||||
|
The settings listed in a flake-config confirmation prompt are now printed to stderr rather than stdout, which allows `nix print-dev-env` to emit valid bash again even in the presence of untrusted settings.
|
||||||
|
|
||||||
|
Many thanks to [lheckemann](https://git.lix.systems/lheckemann) for this.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Lix 2.95.0 (2026-03-13)
|
# Lix 2.95.0 (2026-03-13)
|
||||||
|
|||||||
@@ -219,6 +219,9 @@
|
|||||||
inherit versionSuffix officialRelease;
|
inherit versionSuffix officialRelease;
|
||||||
stdenv = currentStdenv;
|
stdenv = currentStdenv;
|
||||||
busybox-sandbox-shell = final.busybox-sandbox-shell or final.default-busybox-sandbox-shell;
|
busybox-sandbox-shell = final.busybox-sandbox-shell or final.default-busybox-sandbox-shell;
|
||||||
|
# See below
|
||||||
|
lowdown = final.lowdown_3_0;
|
||||||
|
lowdown-unsandboxed = final.lowdown_3_0.override { enableDarwinSandbox = false; };
|
||||||
};
|
};
|
||||||
|
|
||||||
lix-clang-tidy = final.callPackage ./subprojects/lix-clang-tidy { };
|
lix-clang-tidy = final.callPackage ./subprojects/lix-clang-tidy { };
|
||||||
@@ -245,9 +248,21 @@
|
|||||||
# And same thing for our build-release-notes package.
|
# And same thing for our build-release-notes package.
|
||||||
build-release-notes = final.nix.passthru.build-release-notes;
|
build-release-notes = final.nix.passthru.build-release-notes;
|
||||||
|
|
||||||
lowdown =
|
# As soon as Nixpkgs updates to >= 3.0.0, change to lowdown_2_0!
|
||||||
assert lib.versionAtLeast prev.lowdown.version "2.0.0";
|
# We don't change the default version in order to not change the hash
|
||||||
prev.lowdown;
|
# of Nix/Lix from upstream Nixpkgs.
|
||||||
|
lowdown_3_0 =
|
||||||
|
assert lib.versionOlder prev.lowdown.version "3.0.0";
|
||||||
|
prev.lowdown.overrideAttrs (
|
||||||
|
finalAttrs: _prevAttrs: {
|
||||||
|
version = "3.0.0";
|
||||||
|
|
||||||
|
src = final.fetchurl {
|
||||||
|
url = "https://kristaps.bsd.lv/lowdown/snapshots/lowdown-${finalAttrs.version}.tar.gz";
|
||||||
|
sha512 = "94e97234d598382c3c3dc27f9bfdb3a3a2fcf7dbb6a8df3c85ee09f27f792449034a41d49d9cfd3d8450d2de01b8562c20c3d120e65c81af4d7d6c9454119e93";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
capnproto = prev.capnproto.overrideAttrs (old: {
|
capnproto = prev.capnproto.overrideAttrs (old: {
|
||||||
patches =
|
patches =
|
||||||
@@ -275,6 +290,15 @@
|
|||||||
# Binary package for various platforms.
|
# Binary package for various platforms.
|
||||||
build = forAllSystems (system: self.packages.${system}.nix);
|
build = forAllSystems (system: self.packages.${system}.nix);
|
||||||
|
|
||||||
|
# Ensure support for lowdown < 3.0 doesn't regress for NixOS 25.11
|
||||||
|
build-lowdown_2_0.aarch64-linux = lib.genAttrs [ "aarch64-linux" ] (
|
||||||
|
system:
|
||||||
|
self.packages.${system}.nix.override {
|
||||||
|
lowdown = nixpkgsFor.${system}.native.lowdown;
|
||||||
|
lowdown-unsandboxed = nixpkgsFor.${system}.native.lowdown-unsandboxed;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
# Building Lix twice in CI is expensive, but we can catch a lot of static
|
# Building Lix twice in CI is expensive, but we can catch a lot of static
|
||||||
# build regressions by at least making sure it evals and configures.
|
# build regressions by at least making sure it evals and configures.
|
||||||
configure-static = lib.genAttrs linux64BitSystems (
|
configure-static = lib.genAttrs linux64BitSystems (
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ class Builtin:
|
|||||||
</dt>
|
</dt>
|
||||||
<dd>
|
<dd>
|
||||||
|
|
||||||
{indent(self.documentation, " " * 3)}
|
{indent(self.documentation, " " * 3)}
|
||||||
|
|
||||||
{
|
{
|
||||||
f"This function is only available if the [{self.experimental_feature}](@docroot@/contributing/experimental-features.md#xp-feature-{self.experimental_feature}) experimental feature is enabled."
|
f"This function is only available if the [{self.experimental_feature}](@docroot@/contributing/experimental-features.md#xp-feature-{self.experimental_feature}) experimental feature is enabled."
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ class Setting:
|
|||||||
aliases = [f"`{item}`" for item in self.aliases]
|
aliases = [f"`{item}`" for item in self.aliases]
|
||||||
description = dedent(f"""
|
description = dedent(f"""
|
||||||
|
|
||||||
{indent(indentation, self.documentation)}
|
{indent(indentation, self.documentation)}
|
||||||
|
|
||||||
{indent(indentation, PLATFORM_WARNING.format(platforms=str(platforms)[1:-1])) if self.platforms else ""}
|
{indent(indentation, PLATFORM_WARNING.format(platforms=str(platforms)[1:-1])) if self.platforms else ""}
|
||||||
{indent(indentation, XP_WARNING.format(feature=self.experimental_feature, name=self.name)) if self.experimental_feature is not None else ""}
|
{indent(indentation, XP_WARNING.format(feature=self.experimental_feature, name=self.name)) if self.experimental_feature is not None else ""}
|
||||||
|
|||||||
@@ -74,7 +74,11 @@ std::string renderMarkdownToTerminal(std::string_view markdown, StandardOutputSt
|
|||||||
.vmargin = 0,
|
.vmargin = 0,
|
||||||
#endif /* LOWDOWN_SEPARATE_TERM_OPTS */
|
#endif /* LOWDOWN_SEPARATE_TERM_OPTS */
|
||||||
.feat = LOWDOWN_COMMONMARK | LOWDOWN_FENCED | LOWDOWN_DEFLIST | LOWDOWN_TABLES,
|
.feat = LOWDOWN_COMMONMARK | LOWDOWN_FENCED | LOWDOWN_DEFLIST | LOWDOWN_TABLES,
|
||||||
|
#ifdef LOWDOWN_CONSOLIDATED_OFLAGS
|
||||||
|
.oflags = LOWDOWN_NOLINK,
|
||||||
|
#else
|
||||||
.oflags = LOWDOWN_TERM_NOLINK,
|
.oflags = LOWDOWN_TERM_NOLINK,
|
||||||
|
#endif /* LOWDOWN_CONSOLIDATED_OFLAGS */
|
||||||
};
|
};
|
||||||
if (!shouldANSI(fileno)) {
|
if (!shouldANSI(fileno)) {
|
||||||
opts.oflags |= LOWDOWN_TERM_NOANSI;
|
opts.oflags |= LOWDOWN_TERM_NOANSI;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include "lix/libutil/rpc.hh"
|
#include "lix/libutil/rpc.hh"
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <csignal>
|
#include <csignal>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <format>
|
#include <format>
|
||||||
#include <kj/io.h>
|
#include <kj/io.h>
|
||||||
@@ -224,7 +225,11 @@ bool prepareChildSetup(build::Request::Reader request)
|
|||||||
};
|
};
|
||||||
const fs::path dst = chrootRootDir / target.relative_path();
|
const fs::path dst = chrootRootDir / target.relative_path();
|
||||||
fs::create_directories(dst.parent_path());
|
fs::create_directories(dst.parent_path());
|
||||||
writeFile(dst, std::string_view((const char *) sh, sizeof(sh)));
|
kj::AutoCloseFd fd(open(dst.c_str(), O_RDWR | O_CREAT, 0755));
|
||||||
|
if (fd == nullptr) {
|
||||||
|
throw SysError("cannot create sandbox shell");
|
||||||
|
}
|
||||||
|
writeFull(fd.get(), std::string_view((const char *) sh, sizeof(sh)));
|
||||||
fs::permissions(dst, fs::perms(0555));
|
fs::permissions(dst, fs::perms(0555));
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -35,12 +35,14 @@ static bool batchAskForSetting(
|
|||||||
TrustedList & trustedList,
|
TrustedList & trustedList,
|
||||||
std::map<std::string, std::string> & untrustedSettings)
|
std::map<std::string, std::string> & untrustedSettings)
|
||||||
{
|
{
|
||||||
printWarning("The following settings require your decision:");
|
std::string warning("The following settings require your decision:");
|
||||||
for (const auto & [name, valueS] : untrustedSettings) {
|
for (const auto & [name, valueS] : untrustedSettings) {
|
||||||
// FIXME: filter ANSI escapes, newlines, \r, etc.
|
// FIXME: filter ANSI escapes, newlines, \r, etc.
|
||||||
logger->cout("- %s = %s", name, valueS);
|
warning += fmt("\n- %s = %s", name, valueS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printWarning("%s", warning);
|
||||||
|
|
||||||
auto reply = logger
|
auto reply = logger
|
||||||
->ask(
|
->ask(
|
||||||
fmt("Do you want to allow configuration settings to be applied?\nThis may allow the "
|
fmt("Do you want to allow configuration settings to be applied?\nThis may allow the "
|
||||||
|
|||||||
@@ -1348,7 +1348,10 @@ Pid LinuxLocalDerivationGoal::startChild(AutoCloseFD setupFD, AutoCloseFD logPTY
|
|||||||
(wantUserNS ? CLONE_NEWUSER : 0) | (wantNetNS ? CLONE_NEWNET : 0) | CLONE_VM | CLONE_FILES,
|
(wantUserNS ? CLONE_NEWUSER : 0) | (wantNetNS ? CLONE_NEWNET : 0) | CLONE_VM | CLONE_FILES,
|
||||||
[]() -> int {
|
[]() -> int {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
raise(SIGSTOP);
|
// NOTE: musl apparently caches the pid of the process, which fucks with raise().
|
||||||
|
// we must explicitly use getpid() to bypass this cache instead of using raise; a
|
||||||
|
// raise(SIGSTOP) would stop the *daemon* process, and this breaks sandbox setup.
|
||||||
|
kill(getpid(), SIGSTOP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)};
|
)};
|
||||||
|
|||||||
@@ -20,8 +20,6 @@ lix_doc = static_library(
|
|||||||
rnix,
|
rnix,
|
||||||
],
|
],
|
||||||
rust_args : [
|
rust_args : [
|
||||||
# Empty when default_library=static
|
|
||||||
rust_dynamic_args,
|
|
||||||
lix_doc_rust_args,
|
lix_doc_rust_args,
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -383,6 +383,11 @@ if lowdown.version().version_compare('>= 1.4.0')
|
|||||||
add_project_arguments('-DLOWDOWN_SEPARATE_TERM_OPTS', language: 'cpp')
|
add_project_arguments('-DLOWDOWN_SEPARATE_TERM_OPTS', language: 'cpp')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# TODO(sterni): drop the corresponding #ifdef after NixOS 25.11 is EOL which still distributes lowdown < 3.0.0
|
||||||
|
if lowdown.version().version_compare('>= 3.0.0')
|
||||||
|
add_project_arguments('-DLOWDOWN_CONSOLIDATED_OFLAGS', language: 'cpp')
|
||||||
|
endif
|
||||||
|
|
||||||
# HACK(Qyriad): rapidcheck's pkg-config doesn't include the libs lol
|
# HACK(Qyriad): rapidcheck's pkg-config doesn't include the libs lol
|
||||||
# Note: technically we 'check' for rapidcheck twice, for the internal-api-docs handling above,
|
# Note: technically we 'check' for rapidcheck twice, for the internal-api-docs handling above,
|
||||||
# but Meson will cache the result of the first one, and the required : arguments are different.
|
# but Meson will cache the result of the first one, and the required : arguments are different.
|
||||||
|
|||||||
+4
-1
@@ -366,7 +366,10 @@ stdenv.mkDerivation (finalAttrs: {
|
|||||||
"-Dc_link_args=-fuse-ld=lld"
|
"-Dc_link_args=-fuse-ld=lld"
|
||||||
"-Dcpp_link_args=-fuse-ld=lld"
|
"-Dcpp_link_args=-fuse-ld=lld"
|
||||||
]
|
]
|
||||||
++ lib.optional hostPlatform.isStatic "-Denable-embedded-sandbox-shell=true"
|
++ lib.optionals hostPlatform.isStatic [
|
||||||
|
"-Denable-embedded-sandbox-shell=true"
|
||||||
|
"-Denable-contrib-plugins=false"
|
||||||
|
]
|
||||||
++ lib.optional ciBuildAndDeleteBothLibraries "-Ddefault_library=both"
|
++ lib.optional ciBuildAndDeleteBothLibraries "-Ddefault_library=both"
|
||||||
# musl doesn't support fibers, and we can't detect this with meson alone.
|
# musl doesn't support fibers, and we can't detect this with meson alone.
|
||||||
++ lib.optional hostPlatform.isMusl "-Ddisable-fibers=true"
|
++ lib.optional hostPlatform.isMusl "-Ddisable-fibers=true"
|
||||||
|
|||||||
+2
-2
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"version": "2.95.0",
|
"version": "2.95.1",
|
||||||
"official_release": false,
|
"official_release": true,
|
||||||
"release_name": "Kakigōri"
|
"release_name": "Kakigōri"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user