!SgYlXivkogarTVcnZO:nixos.org

Nix Flakes

787 Members
153 Servers

Load older messages


SenderMessageTime
30 Apr 2025
@fkouhai:matrix.orgfkouhaiI found this https://discourse.nixos.org/t/why-is-my-nix-shell-rebuilding-every-day-solved/1552806:01:46
@simon.brandner:envs.netŠimon Brandner Should I add keep-outputs and keep-derivations into my system config or into the flake config? I am a bit confused by that... 06:14:18
@fkouhai:matrix.orgfkouhaiI'd try it out in the flake first06:38:46
@fkouhai:matrix.orgfkouhaialtho the user added it to their configuration.nix https://gitlab.com/engmark/root/-/commit/2d76e110f0e91dadcf376e8e8d7be01d14ab47cf06:40:15
@sheeldotme:matrix.orgsheeldotme yeah, thats for nixos. are you running nix develop manually Šimon Brandner ? or are you using direnv to trigger rebuilds? 14:32:37
@simon.brandner:envs.netŠimon BrandnerDo you mean I should set it system wide? I am using direnv14:33:20
@sheeldotme:matrix.orgsheeldotme nix develop --build is what you want, nix develop --command bash -c buildPhase launches a dev shell and tries to run the bash command buildPhase, it won't find it, since its an environment variable. What are the errors you get when you run --build? 14:36:16
@sheeldotme:matrix.orgsheeldotmeand you're just doing use flake in your .envrc? what does your flake look like?14:38:09
@sheeldotme:matrix.orgsheeldotme *

and you're just doing use flake in your .envrc?

what does your flake look like?

14:38:21
@simon.brandner:envs.netŠimon Brandner

Yes

Right now like so

{
  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
  };
  outputs = {nixpkgs, ...}: let
    system = "x86_64-linux";
    pkgs = import nixpkgs {
      inherit system;
      crossSystem = {
        config = "armv7l-linux-gnueabihf";
      };
    };
  in {
    devShells.${system}.default = import ./nix/shell.nix {inherit pkgs;};
  };
  nixConfig = {
    extraOptions = ''
      keep-outputs = true
      keep-derivations = true
    '';
  };
}

14:38:57
@sheeldotme:matrix.orgsheeldotmeright so that nixConfig can be configured like this https://nix.dev/manual/nix/2.28/command-ref/conf-file.html or it can go in whatever flake is producing your configuration files. have you looked at caching? that might save some time. 14:42:11
@sheeldotme:matrix.orgsheeldotmeWhat are you currently doing that seems to trigger the build? I'm wondering if its in your devshell, or if something else is triggering the rebuild, without seeing the dependencies its hard to say what the issue may be.14:44:31
@simon.brandner:envs.netŠimon Brandner

The shell.nix looks like so

{pkgs, ...}:
pkgs.mkShell {
  buildInputs = [
    pkgs.glibc
    pkgs.glibc.static
  ];

  makeFlags = [
    "CC=${pkgs.stdenv.cc.targetPrefix}cc"
    "CXX=${pkgs.stdenv.cc.targetPrefix}g++"
  ];
}

14:47:49
@sheeldotme:matrix.orgsheeldotmeHmm, nothing jumping out to me What platform are you on? When exactly does the devshell rebuild? (On every activation, after specific commands, how frequently?) Are you updating flake inputs or the dependencies of your shell frequently? Is the flake lock stable?15:01:17
@sheeldotme:matrix.orgsheeldotme* Hmm, nothing jumping out to me. When exactly does the devshell rebuild? (On every activation, after specific commands, how frequently?) Are you updating flake inputs or the dependencies of your shell frequently? Is the flake lock stable? If you're using nixos or nix-darwin, it could help to check if you're space constrained or if you have the garbage collector running frequently.15:03:35
@simon.brandner:envs.netŠimon Brandner

To be clear I only added the nixConfig bit today.

The rebuild happens once in a while I guess. E.g. yesterday evening I was using the dev shell (nix develop) but today in the morning gcc had to be rebuilt.

I haven't done any changes to my system or the flake in between those times

GC has this setup

    gc = {
      automatic = true;
      dates = "daily";
      options = "--delete-older-than 7d";
    };

Does this answer your questions?

15:06:24
@sheeldotme:matrix.orgsheeldotmeIt does seem strange that it triggered a rebuild if you didnt modify the flake or its dependencies. https://github.com/nix-community/nix-direnv?tab=readme-ov-file#manual-reload-of-the-nix-environment may be helpful, at least it wont rebuild when you don't want to, it'll give you that option.15:25:01
@sheeldotme:matrix.orgsheeldotme Maybe du -hsc /nix/store and see if that is taking up a lot of your system storage, if so that may be our answer. 15:26:05
@simon.brandner:envs.netŠimon BrandnerI am not sure I follow a 100%?15:41:52
@simon.brandner:envs.netŠimon Brandner(it indeed is taking up a lot of space)15:45:53
@simon.brandner:envs.netŠimon Brandner(not sure what to make of it in the context of this issue)15:46:05
@sheeldotme:matrix.orgsheeldotmeSorry, I wasn't being very clear. I guess I meant: could the issue be that its being garbage collected prematurely because there isn't much room in the store leading to the rebuilds?16:48:28
@simon.brandner:envs.netŠimon BrandnerNo worries, but no, that is not the case17:24:48
@skyesoss:matrix.org@skyesoss:matrix.org joined the room.19:53:43
1 May 2025
@leons_pferd:matrix.orgLeon joined the room.00:03:29
@leons_pferd:matrix.orgLeon

Hey guys I have a question.
I was used to instantiate nixpkgs like this

pkgs = import inputs.nixpkgs {
    overlays = [
      inputs.nur.overlays.default
    ];
    system = "x86_64-linux"; # system arch (checkout hardware-configuration.nix -> nixpkgs.hostPlatform);
    config.allowUnfree = true;
  };

And then pass this configured instance as specialArgs to nixpkgs.lib.nixosSystem like this:

  nixosConfigurations.${systemSettings.hostname} = inputs.nixpkgs.lib.nixosSystem {
    modules = [ ./configuration.nix ];
    specialArgs = {
      inherit pkgs;
      inherit inputs;
      inherit systemSettings;
    };
  };

I thought that this ensures that the correctly defined nixpkgs is used throughout my configuration.nix. But now I'm getting this warning:

evaluation warning: You have set specialArgs.pkgs, which means that options like nixpkgs.config
                    and nixpkgs.overlays will be ignored. If you wish to reuse an already created
                    pkgs, which you know is configured correctly for this NixOS configuration,
                    please import the `nixosModules.readOnlyPkgs` module from the nixpkgs flake or
                    `(modulesPath + "/misc/nixpkgs/read-only.nix"), and set `{ nixpkgs.pkgs = <your pkgs>; }`.
                    This properly disables the ignored options to prevent future surprises.

Removing the inherit pkgs; line gets rid of the warning and everything stills works but now I don't understand how my modules know about the nixpkgs instance that they should be using.

I tried googling but found it really difficult to find information regarding this. Any help would be highly appreciated!
In general help for understanding how this nixpkgs.lib.nixosSystem actually works would be nice :slight_smile:

00:09:22
@dramforever:matrix.orgdramforever
In reply to @leons_pferd:matrix.org

Hey guys I have a question.
I was used to instantiate nixpkgs like this

pkgs = import inputs.nixpkgs {
    overlays = [
      inputs.nur.overlays.default
    ];
    system = "x86_64-linux"; # system arch (checkout hardware-configuration.nix -> nixpkgs.hostPlatform);
    config.allowUnfree = true;
  };

And then pass this configured instance as specialArgs to nixpkgs.lib.nixosSystem like this:

  nixosConfigurations.${systemSettings.hostname} = inputs.nixpkgs.lib.nixosSystem {
    modules = [ ./configuration.nix ];
    specialArgs = {
      inherit pkgs;
      inherit inputs;
      inherit systemSettings;
    };
  };

I thought that this ensures that the correctly defined nixpkgs is used throughout my configuration.nix. But now I'm getting this warning:

evaluation warning: You have set specialArgs.pkgs, which means that options like nixpkgs.config
                    and nixpkgs.overlays will be ignored. If you wish to reuse an already created
                    pkgs, which you know is configured correctly for this NixOS configuration,
                    please import the `nixosModules.readOnlyPkgs` module from the nixpkgs flake or
                    `(modulesPath + "/misc/nixpkgs/read-only.nix"), and set `{ nixpkgs.pkgs = <your pkgs>; }`.
                    This properly disables the ignored options to prevent future surprises.

Removing the inherit pkgs; line gets rid of the warning and everything stills works but now I don't understand how my modules know about the nixpkgs instance that they should be using.

I tried googling but found it really difficult to find information regarding this. Any help would be highly appreciated!
In general help for understanding how this nixpkgs.lib.nixosSystem actually works would be nice :slight_smile:

don't use specialArgs to pass pkgs, use { nixpkgs.pkgs = pkgs; } to pass it the non-special way
00:20:09
@dramforever:matrix.orgdramforeverthat's what the message is trying to tell you00:20:35
@dramforever:matrix.orgdramforever if you don't pass it anything, then, well, nixpkgs.lib.nixosSystem is from nixpkgs so it knows to use the thing from nixpkgs 00:21:08
@leons_pferd:matrix.orgLeon Do you know what the nixosModules.readOnlyPkgs is that the warning is talking about? 09:08:06

Show newer messages


Back to Room ListRoom Version: 6