!SgYlXivkogarTVcnZO:nixos.org

Nix Flakes

806 Members
164 Servers

Load older messages


SenderMessageTime
8 May 2025
@kdobieder:matrix.orgkdobieder *

Well I'd like to pass some things to the flake and this is what I came up with:

{
  description = "Custom Flake";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
    nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
    myvendor-scripts.url = "git+https://git.myvendor.de/linux/scripts";
  };

  outputs = { nixpkgs, nixpkgs-unstable, myvendor-scripts, ... }: let
    getModule = {system, flakefolder}: let
      homeManagerModule = import ./modules {
        lib = nixpkgs.lib;
        pkgs = nixpkgs.legacyPackages.${system};
        pkgs-unstable = nixpkgs-unstable.legacyPackages.${system};
        flakefolder = flakefolder;
        myvendor-scripts = myvendor-scripts;
      };
    in {
      home-manager = homeManagerModule ;
    };
  in {
    getModule = getModule;
  };
}

But this way I have to define everything a module would need - like lib, config, etc. Doesn't seem to be a good solution. Am I missing something?

10:58:08
@dramforever:matrix.orgdramforever just don't pass it lib, config, etc 11:27:18
@dramforever:matrix.orgdramforevermodules are supposed to be a function11:27:30
@dramforever:matrix.orgdramforeverideally, module inputs can be set through options11:29:09
@kdobieder:matrix.orgkdobiederHow would that be done? 11:29:44
@dramforever:matrix.orgdramforeverhttps://nixos.org/manual/nixos/stable/#sec-writing-modules11:31:35
@kdobieder:matrix.orgkdobiederI don't see how that mentions passing options from a consuming flake to an imported home manager module.11:33:47
@dramforever:matrix.orgdramforeverthere is no mention of that because that has nothing to do with flakes11:34:20
@dramforever:matrix.orgdramforever

when you have something like in a "consuming flake"

      homeConfigurations.dram = home-manager.lib.homeManagerConfiguration {
        ...
        modules = [
          foo
          bar
          ./home.nix
        ];
      };

all three modules are on equal footing, they can each have options and config, and any one module can set the values of options defined in any module

11:36:12
@dramforever:matrix.orgdramforever *

when you have something like in a "consuming flake"

      homeConfigurations.dram = home-manager.lib.homeManagerConfiguration {
        ...
        modules = [
          foo
          bar
          ./home.nix
        ];
      };

all three modules are on equal footing, they can each have options and config, and any module can set the values of options defined in any module

11:36:25
@dramforever:matrix.orgdramforever do note that you can't have the value of an option affect the definition of options themselves (so, in short, no using config in imports or options) 11:37:20
@kdobieder:matrix.orgkdobieder Okay, I see. The problem I have is that I want to pass a custom variable to bar for example. 11:37:33
@dramforever:matrix.orgdramforeverthat would be a cyclic dependency11:37:35
@dramforever:matrix.orgdramforeverwhat is the argument used for?11:38:32
@kdobieder:matrix.orgkdobieder That would be the folder of the consuming flake, because the imported home manager module should provide a nix-rebuild command which does home-manager switch --flake ${flakefolder}#main. flakefolder is the variable I want to pass downstream. 11:40:11
@kdobieder:matrix.orgkdobieder * That would be the folder of the consuming flake, because the imported home manager module should provide a nix-rebuild command which does home-manager switch --flake ${flakefolder}#main (and other corporate stuff). flakefolder is the variable I want to pass downstream. 11:40:38
@dramforever:matrix.orgdramforever

you would have something like

{ config, lib, ... }:

{
  options = {
    my-scripts.flakefolder = lib.mkOption {
      type = with lib.types; types.str;
      description = "The flake folder for my-scripts";
    };
  };

  config = {
    home.packages = [
      (something config.my-scripts.flakefolder)
    ];
  };
}
11:45:12
@dramforever:matrix.orgdramforever(note: untested)11:45:29
@dramforever:matrix.orgdramforever

and then in your regular module you would set

  my-scripts.flakefolder = "git+file:///home/whatever/you-get-the-idea";
11:45:49
@dramforever:matrix.orgdramforeverthis way the module works just like any other option you already have in home-manager11:48:58
@kdobieder:matrix.orgkdobiederAh I see, thank you.11:51:22
@tengkuizdihar:matrix.orgFPS DEV GUY (izdihar) joined the room.12:00:10
@kdobieder:matrix.orgkdobieder

So that would result in something like this?

  outputs = { nixpkgs, nixpkgs-unstable, myvendor-scripts, ... }: let
    getModule = {system}: let
      homeManagerModule = import ./modules {
        inherit myvendor-scripts;
        pkgs = nixpkgs.legacyPackages.${system};
        pkgs-unstable = nixpkgs-unstable.legacyPackages.${system};
      };
    in {
      home-manager = homeManagerModule ;
    };
  in {
    getModule = getModule;
  };

config and lib can't be used in submodules then.

12:39:13
9 May 2025
@fionnafire:matrix.orgFionna joined the room.03:23:08
10 May 2025
@headb:edwardh.devEdward Hesketh joined the room.19:44:36
@strutztm:strutztm.de@strutztm:strutztm.de left the room.19:53:11
@headb:edwardh.devEdward Hesketh changed their display name from headb to Edward Hesketh.23:32:18
12 May 2025
@gsaurel:laas.frnim65s

I have a bunch of eg.

    inputs.patch-arsenik = {
      url = "https://patch-diff.githubusercontent.com/raw/NixOS/nixpkgs/pull/386205.patch";
      flake = false;
    };

in the flake for my systems, applied with patchedNixpkgs = inputs.nixpkgs.legacyPackages.x86_64-linux.applyPatches { src = inputs.nixpkgs; patches = [ inputs.patch-arsenik ]; };, for some of my PRs I want in my pkgs but are not merged. This allow to have up-to-date patches with low effort.

But recently, github rate limits have been hitting me on like 100% of my nix flake update. Anybody has a workaround ?

16:35:42
@gsaurel:laas.frnim65s If I could set an access token on githubusercontent, it would work (eg. as in curl "https://patch-diff.githubusercontent.com/raw/NixOS/nixpkgs/pull/386205.patch?access_token=$GITHUB_TOKEN"), but I have no idea how to configure that without exposing the token directly in my flake.nix, which is a public file 16:39:36
@gsaurel:laas.frnim65s *

I have a bunch of eg.

    inputs.patch-arsenik = {
      url = "https://patch-diff.githubusercontent.com/raw/NixOS/nixpkgs/pull/386205.patch";
      flake = false;
    };

in the flake for my systems, applied with patchedNixpkgs = inputs.nixpkgs.legacyPackages.x86_64-linux.applyPatches { src = inputs.nixpkgs; patches = [ inputs.patch-arsenik ]; };, for some PRs I want in my pkgs but are not merged. This allow to have up-to-date patches with low effort.

But recently, github rate limits have been hitting me on like 100% of my nix flake update. Anybody has a workaround ?

16:41:03

Show newer messages


Back to Room ListRoom Version: 6