!yUrHuDcxUngfTlDbiy:matrix.org

flakelight

38 Members
https://github.com/nix-community/flakelight12 Servers

Load older messages


SenderMessageTime
22 Sep 2025
@niclas:overby.meNiclas Overby Ⓝ Is there any way to achieve this with nixDirAliases? (With or without setting the right side of the alias as a string) 09:09:31
@niclas:overby.meNiclas Overby Ⓝimage.png
Download image.png
09:09:33
@niclas:overby.meNiclas Overby ⓃI apologize for the frequent change requests! 😅 I'm currently porting numerous repositories to Flakelight, and since developers configure flakes in so many different ways, it's challenging to gradually adopt Flakelight without implementing some of these suggested changes.09:15:16
@niclas:overby.meNiclas Overby Ⓝ* I apologize for the frequent change requests! 😅 I'm currently porting numerous repositories to Flakelight, and since developers configure flakes in so many different ways, it's challenging to gradually adopt Flakelight without implementing some of these suggested changes. (Or moving files around in the repositories, which the developers are not too happy about.)09:33:31
@niclas:overby.meNiclas Overby Ⓝ

Yet another idea. Supporting wildcards in the alias like this:

nixDirAliases = {
  nixosModules = [ "nixos/modules/*"]
};

So you could support the layout:

13:33:00
@niclas:overby.meNiclas Overby Ⓝimage.png
Download image.png
13:33:01
23 Sep 2025
@accelbread:matrix.orgaccelbread

The right side can be a path, yes; problem is the left side which doesn't support nesting.
I was considering having it recurse, but even then not sure if that would work since the key is not a concrete option.

for that you could write (assuming the dirs are dirs you want to load as attrs):

devShells = {
  ansible = flakelight.importDir "ansible/nix";
  autotest = flakelight.importDir "autotest/nix";
  dbusmock = flakelight.importDir "dbus-mock/nix";
};

or as I'd more likely write:

devShells = lib.genAttrs [ "ansible" "autotest" "dbus-mock" ] (n: flakelight.importDir "${n}/nix";
03:30:37
@accelbread:matrix.orgaccelbread *

The right side can be a path, yes; problem is the left side which doesn't support nesting.
I was considering having it recurse, but even then not sure if that would work since the key is not a concrete option.

for that you could write (assuming the dirs are dirs you want to load as attrs):

devShells = {
  ansible = flakelight.importDir "ansible/nix";
  autotest = flakelight.importDir "autotest/nix";
  dbusmock = flakelight.importDir "dbus-mock/nix";
};

or as I'd more likely write:

devShells = lib.genAttrs [ "ansible" "autotest" "dbus-mock" ] (n: flakelight.importDir "${n}/nix");
03:32:02
@accelbread:matrix.orgaccelbread *

The right side can be a path, yes; problem is the left side which doesn't support nesting.
I was considering having it recurse, but even then not sure if that would work since the key is not a concrete option.

for that you could write (assuming the dirs are dirs you want to load as attrs):

devShells = {
  ansible = flakelight.importDir "ansible/nix";
  autotest = flakelight.importDir "autotest/nix";
  dbusmock = flakelight.importDir "dbus-mock/nix";
};

or as I'd more likely write:

devShells = lib.genAttrs
  [ "ansible" "autotest" "dbus-mock" ]
  (n: flakelight.importDir "${n}/nix");
03:33:36
@accelbread:matrix.orgaccelbreadNot a problem! feedback is good. I've been moving flakes at work to all use a consistent layout since its been a pain to modify repos when they all use different layouts :P03:37:47
@accelbread:matrix.orgaccelbread What is the porting from? I kinda imagined the porting flow would be using outputs and perSystem to make the old code work, and then moving nix code to flakelight options 03:38:56
@accelbread:matrix.orgaccelbread

Yeah, for this usecase, I'd recommend putting the namespace in the file name rather than dir since with dirs its different in the filesystem and the nix code. nix flake show or nix eval .#nixosModules --apply __attrNames would show all of them without namespacing. IMO making it .#nixosModules.desktops-gnome.nix would be more descriptive.

though if you want that layout, i'd set nixDirAliases.nixosModules = [ "nixos/modules" ] and then have nixos/modules/default.nix be:

{flakelight, lib, ...}:
lib.pipe ./. [
  builtins.readDir
  (lib.filterAttrs (_: v: v == "directory")
  lib.attrNames
  (map (d: flakelight.importDir (./. + d)))
  (lib.foldr (a: b: a // b) {})
] 

I'm not sure how the glob would match in general, and what to do about matching files etc. I think this case would be good to specify how it should be loaded.

03:57:24
@accelbread:matrix.orgaccelbreadWhile in this case you just want directories, not sure if ignoring them would generalize03:58:14
@accelbread:matrix.orgaccelbread I was considering adding another helper function to the flakelight lib for loading an option from a dir exactly like flakelight does but mulling over the api. would probably be like optionType -> name -> path -> [ value ] 04:05:51
@accelbread:matrix.orgaccelbread * I was considering adding another helper function to the flakelight lib for loading an option from a dir exactly like flakelight does but mulling over the api. would probably be like optionType -> name -> asPaths -> path -> [ value ] 04:06:43
@accelbread:matrix.orgaccelbread * I was considering adding another helper function to the flakelight lib for loading an option from a dir exactly like flakelight does but mulling over the api. would probably be like { optionType, name, asPaths } -> path -> [ value ] 04:07:32
@accelbread:matrix.orgaccelbread * I was considering adding another helper function to the flakelight lib for loading an option from a dir exactly like flakelight does but mulling over the api. would probably be like name -> { optionType, asPaths } -> path -> [ value ] 04:08:15
@accelbread:matrix.orgaccelbread I guess it could also be nixDirAliases.nixosModules = lib.pipe ./nixos/modules [ builtins.readDir lib.attrNames (map (d: "nixos/modules/${d}"))] 04:39:04
@niclas:overby.meNiclas Overby Ⓝ I could use outputs and perSystem, but that would undermine the core value proposition. The goal is to demonstrate Flakelight's ability to significantly reduce boilerplate compared to developers' existing setups. If I rely on outputs and perSystem, the boilerplate reduction becomes minimal, making it harder to showcase the real benefits that would motivate adoption. 09:50:50
@niclas:overby.meNiclas Overby Ⓝ

I guess the idea is just to use directories to better organize modules.

Your suggestion with using default.nix is the exact thing I want to minimize and ideally avoid.
It is hard to read for users without any Nix experience (I really try to keep the Nix files simple, so they are primarily declarative), and again it is boilerplate, that ideally it could be fully avoided with e.g. the wildcard feature.

10:18:36
@niclas:overby.meNiclas Overby ⓃIf I could define a function in lib, and access it when setting nixDirAliases, then that could of course work. But IMHO it would be better, if there was a way to achieve it directly with nixDirAliases like with the wildcard. 10:22:34
@a-kenji:matrix.orgkenji changed their display name from a-kenji to kenji.10:41:07
@niclas:overby.meNiclas Overby Ⓝ *

I guess the idea is just to use directories to better organize modules.

Your suggestion with using default.nix is the thing I want to minimize and ideally avoid.
It is hard to read for users without any Nix experience (I really try to keep the Nix files simple, so they are primarily declarative), and again it is boilerplate, that ideally it could be fully avoided with e.g. the wildcard feature.

12:09:07
@niclas:overby.meNiclas Overby Ⓝ *

I guess the developer's idea is to use the directories to categorize modules.

Your suggestion with using default.nix is the thing I want to minimize and ideally avoid.
It is hard to read for users without any Nix experience (I really try to keep the Nix files simple, so they are primarily declarative), and again it is boilerplate, that ideally it could be fully avoided with e.g. the wildcard feature.

12:12:51
@niclas:overby.meNiclas Overby Ⓝ* If I could define a function in lib, and access it when setting nixDirAliases, then that could of course work. But IMHO it would be better, if there was a way to achieve it directly with nixDirAliases like with the wildcard or something else. 12:13:49
24 Sep 2025
@niclas:overby.meNiclas Overby Ⓝ *

I guess the developer's idea is to use the directories to categorize modules.

Your suggestion with using default.nix is the thing I want to minimize and ideally avoid.
It is hard to read for users without any Nix experience (I really try to keep the Nix files simple, so they are primarily declarative), and again it is boilerplate, that ideally could be avoided with e.g. the wildcard feature.

11:30:28
25 Sep 2025
@accelbread:matrix.orgaccelbreadhmm i'm thinking wildcard should be a lib function somwhere i dont see one in builtins or nixpkgs lib05:25:50
@accelbread:matrix.orgaccelbread

maybe it would work to have a common nix lib provide a lib glob function?

though using nixDirAliases.nixosModules = lib.pipe ./nixos/modules [ builtins.readDir lib.attrNames (map (d: "nixos/modules/${d}"))] would be less code than pulling in a lib if thats all thats in it

05:29:41
@accelbread:matrix.orgaccelbread could put it in a function like subdirs = path: map (d: "${path}/${d}") (lib.attrNames (builtins.readDir (./. + path))) 05:33:45
@niclas:overby.meNiclas Overby Ⓝ

How can you access lib here?:

nixDirAliases = {
  nixosModules = lib.subdirs "nixos/modules"
};
13:10:21

Show newer messages


Back to Room ListRoom Version: 10