| 22 Oct 2025 |
accelbread | might need to use genAttrs | 16:14:12 |
accelbread | Do you have a flake that reproduces this? | 17:01:39 |
accelbread | I couldn't reproduce the issue with my nixos config at the moment.
I pushed 5afd705 which cleans up the logic and slightly reduces the use of the nixos config in evaluating attrs; that may help, but unsure | 18:13:46 |
accelbread | v.config.nixpkgs.system should be the only thing needed from each config, and evaluating just that should be fast | 18:14:58 |
accelbread | * <nixos value>.config.nixpkgs.system should be the only thing needed from each config, and evaluating just that should be fast | 18:16:20 |
accelbread | * <nixos value>.config.nixpkgs.system should be the only thing needed from each config, and evaluating just that should be fast; rest should be lazy under evaluating the runCommand script | 18:17:02 |
accelbread | though overall, for something like pre-commit, would be better to write a flakelightModule that adds options for the precommit config, generates the preconfig packages, and sets the devShell/checks using those | 18:27:25 |
accelbread | would make it more reusable and encapsulated | 18:28:05 |
accelbread | upstream repo has flake-parts module; maybe they'd accept a flakelight module | 18:31:42 |
| 23 Oct 2025 |
Niclas Overby Ⓝ | The graph looks different, but it still takes substantial longer time to init the devshell, because it loads all the nixosConfigurations.
There are quite a lot of nixosConfigrations in the project, which might contribute to why it is slow in my project compared to yours. | 09:34:44 |
Niclas Overby Ⓝ | Redacted or Malformed Event | 09:34:48 |
Niclas Overby Ⓝ | I'm still not sure why the check is needed in the first place?
It seems to be a performance footgun with projects with many nixosConfigurations. | 09:36:36 |
Niclas Overby Ⓝ |  Download flamegraph.svg | 09:37:48 |
| 25 Oct 2025 |
Niclas Overby Ⓝ | Would you still like this? | 13:54:52 |
accelbread | that would help yes | 16:46:19 |
accelbread | In reply to @niclas:overby.me I'm still not sure why the check is needed in the first place? It seems to be a performance footgun with projects with many nixosConfigurations. if you have a nixos configuration, you wouldn't want nix flake check to pass if it didn't build right? same as why other packages are added to checks. though to evaluate what checks are available under checks.${systems} it needs to know the systems of the nixosConfigurations | 16:49:47 |
accelbread | i could add a config to not do that but trying to figure if i can make the calculation cheaper | 16:50:50 |
accelbread | how are you generating the graphs btw? | 17:40:16 |
accelbread | seems passing system to nixosSystem is deprecated, so pushed some updates to use the buildSystem/targetSystem replacements instead | 19:31:57 |
accelbread | also perf things might depend on which nix is in use; I'm using Lix 2.93.3 at the moment | 19:33:04 |
accelbread | I havent tested this, but heres what i'd do for integrating git-hooks.nix:
{ src, lib, config, ... }: {
options.git-hooks = {
type = lib.types.attrs;
default = { };
};
config = {
withOverlays = [
(final: prev: {
pre-commit-check = final.inputs.git-hooks.lib.${final.system}.run
({ inherit src; } // config.git-hooks);
})
];
checks = pkgs: { inherit (pkgs) pre-commit-hook; };
devShell = { pre-commit-check, ... }: {
inherit (pre-commit-check) shellHook;
packages = pre-commit-check.enabledPackages;
};
};
}
| 20:16:31 |
accelbread | can put that as nix/flakelightModules/git-hooks.nix or w/e and import the module in your flakelight config. (or if you have many repos, put this in your common config one)
Then in a flake you can use it as such:
{
inputs = {
flakelight.url = "github:nix-community/flakelight";
git-hooks.url = "github:cachix/git-hooks.nix";
};
outputs = { flakelight, ... }@inputs: flakelight ./. {
inherit (inputs);
# Pull it from file, outputs.flaklightModules.git-hooks,
# inputs.shared-flake.flakelightModules.git-hooks, or w/e
imports = [ ./git-hooks.nix ];
git-hooks.hooks = {
alejandra.enable = true;
statix.enable = true;
ruff-format.enable = true;
}
};
}
| 20:22:34 |
accelbread | You'd even be able to autoload it as nix/git-hooks.nix:
{
hooks = {
alejandra.enable = true;
statix.enable = true;
ruff-format.enable = true;
};
}
| 20:23:55 |
accelbread | * I havent tested this, but heres what i'd do for integrating git-hooks.nix:
{ src, lib, config, ... }: {
options.git-hooks = {
type = lib.types.attrs;
default = { };
};
config = {
withOverlays = [
(final: prev: {
pre-commit-check = final.inputs.git-hooks.lib.${final.system}.run
({ inherit src; } // config.git-hooks);
})
];
checks = pkgs: { inherit (pkgs) pre-commit-hook; };
devShell = { pre-commit-check, ... }: {
inherit (pre-commit-check) shellHook;
packages = pre-commit-check.enabledPackages;
};
};
}
(note that it also doesnt go through outputs which requires resolving stuff...)
| 20:25:15 |
accelbread | * I havent tested this, but heres what i'd do for integrating git-hooks.nix:
{ src, lib, config, ... }: {
options.git-hooks = {
type = lib.types.attrs;
default = { };
};
config = {
withOverlays = [
(final: prev: {
pre-commit-check = final.inputs.git-hooks.lib.${final.system}.run
({ inherit src; } // config.git-hooks);
})
];
checks = pkgs: { inherit (pkgs) pre-commit-check; };
devShell = { pre-commit-check, ... }: {
inherit (pre-commit-check) shellHook;
packages = pre-commit-check.enabledPackages;
};
};
}
(note that it also doesnt go through outputs which requires resolving stuff...)
| 20:29:16 |
| 27 Oct 2025 |
Niclas Overby Ⓝ | Here is my script:
#!/usr/bin/env nu
# Generate a flamegraph from a nix flake evaluation
# Usage: script.nu <flake-path>
def main [flake_path: string] {
print $"Evaluating flake: ($flake_path)"
# Create temporary directory for profile data
let tmp_dir = (mktemp -d)
let profile_path = ($tmp_dir | path join "nix.profile")
# Run nix eval with profiler output
nix eval --impure --no-eval-cache $flake_path --option eval-profiler flamegraph --option eval-profile-file $profile_path
# Generate flamegraph SVG from profile data
open $profile_path | inferno-flamegraph | save -f flamegraph.svg
print "Flamegraph saved to flamegraph.svg"
}
| 09:52:32 |
Niclas Overby Ⓝ | * Here is my script:
#!/usr/bin/env nu
# Generate a flamegraph from a nix flake evaluation
# Usage: script.nu <flake-path>
def main [flake_path: string] {
print $"Evaluating flake: ($flake_path)"
# Create temporary directory for profile data
let tmp_dir = (mktemp -d)
let profile_path = ($tmp_dir | path join "nix.profile")
# Run nix eval with profiler output
nix eval --impure --no-eval-cache $flake_path --option eval-profiler flamegraph --option eval-profile-file $profile_path
# Generate flamegraph SVG from profile data
open $profile_path | inferno-flamegraph | save -f flamegraph.svg
print "Flamegraph saved to flamegraph.svg"
}
| 09:52:40 |
Niclas Overby Ⓝ | * Here is my Nushell script:
#!/usr/bin/env nu
# Generate a flamegraph from a nix flake evaluation
# Usage: script.nu <flake-path>
def main [flake_path: string] {
print $"Evaluating flake: ($flake_path)"
# Create temporary directory for profile data
let tmp_dir = (mktemp -d)
let profile_path = ($tmp_dir | path join "nix.profile")
# Run nix eval with profiler output
nix eval --impure --no-eval-cache $flake_path --option eval-profiler flamegraph --option eval-profile-file $profile_path
# Generate flamegraph SVG from profile data
open $profile_path | inferno-flamegraph | save -f flamegraph.svg
print "Flamegraph saved to flamegraph.svg"
}
| 09:52:50 |
Niclas Overby Ⓝ | Yeah, I ended up moving pre-commit-check-run to a package, and refer to it from pkgs | 10:05:59 |
accelbread | makes sense. withOverlays does same thing if you dont want to export it from the flake | 18:04:47 |