!SgYlXivkogarTVcnZO:nixos.org

Nix Flakes

784 Members
153 Servers

Load older messages


SenderMessageTime
8 May 2025
@dramforever:matrix.orgdramforever

The Home Manager module should be able to install packages from nixpkgs.
pkgs

10:54:50
@dramforever:matrix.orgdramforever *

The Home Manager module should be able to install packages from nixpkgs.

use pkgs

10:54:55
@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 would need - like lib, config, etc. Doesn't seem to be a good solution. Am I missing something?

10:57:18
@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.org@fionnafire:matrix.org 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

Show newer messages


Back to Room ListRoom Version: 6