| 8 Mar 2025 |
tomberek | You might need a wrapping drv for now. | 06:20:45 |
fzakaria | Here is my strawman https://pastebin.com/wnHmj4pW | 06:46:30 |
fzakaria | i think it's a wrapping drv? | 06:46:36 |
| . joined the room. | 07:01:28 |
| ncfavier changed their profile picture. | 10:43:32 |
| deprecated, moved to @poz:poz.pet joined the room. | 12:27:30 |
deprecated, moved to @poz:poz.pet | hey, I added the modulo operator to nix: https://github.com/NixOS/nix/pull/12617
I'd be grateful for any reviews, likes under the PR or advice on how to get it merged quick (I've seen a lot of PRs be untouched for a long time and I'm not hopeful for mine) | 12:36:10 |
| TuXic joined the room. | 13:49:09 |
| Colgrave left the room. | 16:46:35 |
WeetHet | https://discourse.nixos.org/t/determinate-nix-3-0/61202/80
Pure eval doesn’t exist outside of flakes (unfortunately), that flag is more or less a broken promise.
I wonder what was meant by that? Does it mean that nix-build --pure-eval doesn't actually perform evaluation purely?
| 17:55:04 |
WeetHet | I don't think you can break evaluation purity with pure-eval | 17:55:47 |
WeetHet | And it's not like it's that difficult to use, I've ran nix darwin using this script for a couple of months just fine
{ pkgs ? import <nixpkgs> { }
, writeShellScriptBin ? pkgs.writeScriptBin
, directory
, ...
}:
writeShellScriptBin "darwin-rebuild-npins" ''
set -eo pipefail
pushd ${directory} > /dev/null
echo "building the system configuration..."
system=$(nix-instantiate --eval --expr builtins.currentSystem | tr -d \")
systemConfig=$(nix-build --pure-eval --no-out-link --argstr system $system --argstr name $(hostname) --expr "import (
builtins.path {
path = \"$(pwd)\";
sha256 = \"$(nix-hash --type sha256 --base32 .)\";
}
)" | tee /dev/tty)
profile=/nix/var/nix/profiles/system
if [ "$USER" != root ] && [ ! -w $(dirname "$profile") ]; then
sudo nix-env -p "$profile" --set "$systemConfig"
else
nix-env -p "$profile" --set "$systemConfig"
fi
"$systemConfig/activate-user"
if [ "$USER" != root ]; then
sudo "$systemConfig/activate"
else
"$systemConfig/activate"
fi
popd > /dev/null
''
| 17:57:44 |
emily | a lot of things that user posts are wrong. you do have to copy your sources with pure eval though, which sort of reduces to being flakes in many ways people care about | 17:57:56 |
WeetHet | In reply to @emilazy:matrix.org a lot of things that user posts are wrong. you do have to copy your sources with pure eval though, which sort of reduces to being flakes in many ways people care about Needing to copy sources is unfortunate, sure, but seeing as flakes also do that anyways, shouldn't matter much
And this approach doesn't require any changes to be done to the cppnix source code
| 18:00:43 |
raitobezarius | "needing to copy sources" is not an absolute need, I think, no? | 18:01:30 |
raitobezarius | lazy trees is exactly about removing that requirement | 18:01:35 |
raitobezarius | more generally, the problem of purity in presence of sources is the one of installing a virtual filesystem layer | 18:01:55 |
emily | I think "you have to write your own deployment thing and it has to have the main thing people hate about the flakes UX" is not insignificant | 18:02:43 |
raitobezarius | i'm gonna steal this, thank you | 18:02:47 |
WeetHet | In reply to @raitobezarius:matrix.org lazy trees is exactly about removing that requirement Absolutely, but again, that's kinda detached from the flakes as builtins.path can also absolutely be made lazy | 18:02:51 |
raitobezarius | In reply to @weethet:catgirl.cloud
And it's not like it's that difficult to use, I've ran nix darwin using this script for a couple of months just fine
{ pkgs ? import <nixpkgs> { }
, writeShellScriptBin ? pkgs.writeScriptBin
, directory
, ...
}:
writeShellScriptBin "darwin-rebuild-npins" ''
set -eo pipefail
pushd ${directory} > /dev/null
echo "building the system configuration..."
system=$(nix-instantiate --eval --expr builtins.currentSystem | tr -d \")
systemConfig=$(nix-build --pure-eval --no-out-link --argstr system $system --argstr name $(hostname) --expr "import (
builtins.path {
path = \"$(pwd)\";
sha256 = \"$(nix-hash --type sha256 --base32 .)\";
}
)" | tee /dev/tty)
profile=/nix/var/nix/profiles/system
if [ "$USER" != root ] && [ ! -w $(dirname "$profile") ]; then
sudo nix-env -p "$profile" --set "$systemConfig"
else
nix-env -p "$profile" --set "$systemConfig"
fi
"$systemConfig/activate-user"
if [ "$USER" != root ]; then
sudo "$systemConfig/activate"
else
"$systemConfig/activate"
fi
popd > /dev/null
''
this I meant ^ | 18:02:55 |
emily | there's also some talk that maybe some eval perf improvements only apply to flakes but not non-flakes pure eval, though I find that claim dubious without substantiation | 18:03:00 |
WeetHet | In reply to @emilazy:matrix.org there's also some talk that maybe some eval perf improvements only apply to flakes but not non-flakes pure eval, though I find that claim dubious without substantiation It's me saying that and I observed that directly | 18:03:31 |
emily | WeetHet: btw, I suggest you use darwin-rebuild activate from the built system | 18:03:34 |
emily | (and raitobezarius too if copying it) | 18:03:39 |
emily | it will reduce churn down the line | 18:03:54 |
raitobezarius | In reply to @emilazy:matrix.org there's also some talk that maybe some eval perf improvements only apply to flakes but not non-flakes pure eval, though I find that claim dubious without substantiation I think there's one place where it's actually true | 18:03:57 |
WeetHet | In reply to @emilazy:matrix.org WeetHet: btw, I suggest you use darwin-rebuild activate from the built system I'm using flakes rn due to the above said performance issues | 18:04:06 |
raitobezarius | Flakes are not configurable (except with that new configurable flakes features) | 18:04:06 |
raitobezarius | Non-Flakes are by nature already configurable via --argstr | 18:04:13 |