!SgYlXivkogarTVcnZO:nixos.org

Nix Flakes

904 Members
184 Servers

Load older messages


SenderMessageTime
24 Oct 2023
@lorenzleutgeb:matrix.orgLorenz Leutgeb If nix flake show --json would print the URL (analogously to nix flake show), then nix flake show --json FLAKE | jq -r 'keys[0]' would be the utility that resolves a flake to its precise URL. 21:11:15
@lorenzleutgeb:matrix.orgLorenz Leutgeb * If nix flake show --json would print the URL (analogously to nix flake show), then nix flake show --json FLAKE | jq -r 'keys' would be the utility that resolves a flake to its precise URL. 21:11:43
@lorenzleutgeb:matrix.orgLorenz Leutgeb * If nix flake show --json would print the URL (analogously to nix flake show), then nix flake show --json FLAKE | jq -r 'keys' would be the utility that resolves a flake to its precise URL. And then we would have to deal with the #hello part separately... 21:12:14
25 Oct 2023
@federicodschonborn:matrix.org@federicodschonborn:matrix.org changed their profile picture.00:12:36
26 Oct 2023
@lehmanator:gnulinux.club@lehmanator:gnulinux.club

What is the flakes way of going about installing packages from different nixpkgs branches?

I have been seeing stuff like this everywhere, but no equivalent method for flakes that doesn't break reproducibility:

unstable = import <nixos-unstable> {};
environment.systemPackages = [ unstable.myPackage ];

or

unstable = fetchTarball https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz

I was thinking about making an overlay using flake-utils.lib.eachDefaultSystem to instantiate nixpkgs to be set as pkgs.unstable, but this feels wrong and I'm wondering if this will cause lots of cache misses & blow up my build times.

Is there a "best practices" way of going about this?

02:32:50
@petrichor:envs.net@petrichor:envs.net
In reply to @lehmanator:gnulinux.club

What is the flakes way of going about installing packages from different nixpkgs branches?

I have been seeing stuff like this everywhere, but no equivalent method for flakes that doesn't break reproducibility:

unstable = import <nixos-unstable> {};
environment.systemPackages = [ unstable.myPackage ];

or

unstable = fetchTarball https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz

I was thinking about making an overlay using flake-utils.lib.eachDefaultSystem to instantiate nixpkgs to be set as pkgs.unstable, but this feels wrong and I'm wondering if this will cause lots of cache misses & blow up my build times.

Is there a "best practices" way of going about this?

you can include it as another input to your flake, like nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
07:24:59
@lehmanator:gnulinux.club@lehmanator:gnulinux.club
In reply to @petrichor:envs.net
you can include it as another input to your flake, like nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";

Right, but how should I make its packages accessible by the system / home-manager?

I know I can do something like:

19:12:25
@lehmanator:gnulinux.club@lehmanator:gnulinux.club
In reply to @petrichor:envs.net
you can include it as another input to your flake, like nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
*

Right, but how should I make its packages accessible by the system / home-manager?

I know I can do something like:

19:12:32
@lehmanator:gnulinux.club@lehmanator:gnulinux.club
In reply to @petrichor:envs.net
you can include it as another input to your flake, like nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
*

Right, but how should I make its packages accessible by the system / home-manager?

I know I can do something like:

nixpkgs.overlays = [
  (final: prev: { pkgs.unstable = inputs.nixpkgs-unstable.legacyPackages.${prev.stdenv.system}; })
];

but I remember seeing one of the big maintainers saying that using a lot of overlays is discouraged and often causes slow builds, and suggested a better practice (which unfortunately I dont remember) for overriding / adding packages, but that was for one-off packages and not an entire instance of nixpkgs.

19:18:01
@lehmanator:gnulinux.club@lehmanator:gnulinux.clubThis was specifically when using flakes, as using the channels mechanism breaks reproducibility.19:21:22
27 Oct 2023
@federicodschonborn:matrix.org@federicodschonborn:matrix.org changed their profile picture.01:24:13
30 Oct 2023
@charles:computer.surgeryCharles
In reply to @lehmanator:gnulinux.club

What is the flakes way of going about installing packages from different nixpkgs branches?

I have been seeing stuff like this everywhere, but no equivalent method for flakes that doesn't break reproducibility:

unstable = import <nixos-unstable> {};
environment.systemPackages = [ unstable.myPackage ];

or

unstable = fetchTarball https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz

I was thinking about making an overlay using flake-utils.lib.eachDefaultSystem to instantiate nixpkgs to be set as pkgs.unstable, but this feels wrong and I'm wondering if this will cause lots of cache misses & blow up my build times.

Is there a "best practices" way of going about this?

when you do outputs = { self, ... }@inputs: ...; in your flake.nix, pass inputs to specialArgs, then you can use the flake inputs and outputs (via self) in your nixos modules. maybe home manager has something like specialArgs too
04:13:21
@charles:computer.surgeryCharles
In reply to @lehmanator:gnulinux.club

What is the flakes way of going about installing packages from different nixpkgs branches?

I have been seeing stuff like this everywhere, but no equivalent method for flakes that doesn't break reproducibility:

unstable = import <nixos-unstable> {};
environment.systemPackages = [ unstable.myPackage ];

or

unstable = fetchTarball https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz

I was thinking about making an overlay using flake-utils.lib.eachDefaultSystem to instantiate nixpkgs to be set as pkgs.unstable, but this feels wrong and I'm wondering if this will cause lots of cache misses & blow up my build times.

Is there a "best practices" way of going about this?

*

when you do outputs = { self, ... }@inputs: ...; in your flake.nix, pass inputs to specialArgs, then you can use the flake inputs and outputs (via self) in your nixos modules. maybe home manager has something like specialArgs too.

for example: https://or.computer.surgery/charles/servy-fleet/-/blob/3eae347d2cce33d1fed7371346b9d8b2aced891b/config/matrix-conduit/default.nix#L17

04:14:46
@virtu:matrix.im@virtu:matrix.im joined the room.14:16:51
31 Oct 2023
@virtu:matrix.im@virtu:matrix.im

Hey everyone. Flake novice here. I used a flake to create a reproducible development shell for one of my python applications. So far, so good.

Then I wanted to integrate my application into my configuration.nix and run it as a recurring service via systemd. To this end, (after browsing github for inspiration), in my nix config repo I created a pkgs/app/default.nix, which points to the github repo of my application, and a modules/app/default.nix, which defines settings and applies those appropriately. My configuration.nix imports the app's module and enables it. Although it took me a while cause I'm new to Nix, I got that setup working after a while.

Now I'd like to turn the second part (module, pkg definitions) into a flake, and have some questions about that. Because there's so many open questions, I'll just post them in the order that makes sense to me. Any help/pointers would be greatly appreciated:

  • When searching for flakes on github, I only found repos that turn other repos into flakes. Is there a reason to separate the flake part from the code part? Or is this mainly due to people turning other people's applications into flakes?
  • What if I want to turn code I maintain into a flake? Should I also use dedicated repos for the application and the flake? Since I already have a flake.nix file for the development shell in my application's repo, at first glance it doesn't make sense to me to have a dedicated repo for the module/pkg functionality because there's a chance the lock files are not in sync so you might be running different code/deps than you're using during development.
  • If it's therefore considered a best practice to put the functionality for the devshell and packaging into the same repo, is there some other set of best practices about the layout? On one hand, I don't want to stuff the code repo with nix-specific directories and files; on the other, putting everything into flake.nix might make the code cluttered.
  • Last but not least, how do I port the functionality from the {pkgs,module}/app/default.nix files so it can be used as a flake in my configuration.nix? If anyone has a (preferably simple) example repo on github, that would be great.
    Sorry for the lengthy list, but I felt putting all questions out there so people can immediately shoot down stupid questions and point me into the right direction. Thanks!
08:28:51
@mewp:nurupo.plmewpthe main difference between having a flake in the same repo vs a separate one is that if it's in the same repo, the whole repository ends up in the closure—which is fine most of the time, but sometimes you e.g. want to filter something out, because it isn't necessary for your builds08:53:53
@mewp:nurupo.plmewpI'd say that when possible, it makes sense to have the flake in the same repo08:54:09
@mewp:nurupo.plmewpI wouldn't want to have a devshell in a repository separate from the app—but I don't know if there is a general practice08:54:53
@mewp:nurupo.plmewpfor what it's worth, my encounters with flakes so far are mostly in repos that package themselves, in the same repo08:55:20
@mewp:nurupo.plmewp I don't entirely get the last point. pkgs.callPackage ./pkgs/app/default.nix {} will probably do what you want for packages, import ./modules/app/default.nix will do that for modules 08:56:36
@mewp:nurupo.plmewp as in, outputs.nixosModules.app = import ./modules/app/default.nix; 08:57:07
@virtu:matrix.im@virtu:matrix.im thanks mewp. can I bother you to share one or two of those repos with flakes that package themselves in the same repo? that would really help a lot. 09:12:52
@mewp:nurupo.plmewphttps://gitlab.com/eobuwie-foss/imaginator/ ← that's one of mine09:14:07
@mewp:nurupo.plmewpmost of my other repos are unfortunately private, but I'll try to find a public example09:14:51
@mewp:nurupo.plmewpoh, right, https://github.com/helix-editor/helix09:15:43
@mewp:nurupo.plmewpbut also see https://github.com/NixOS/flake-registry/blob/master/flake-registry.json09:15:50
@virtu:matrix.im@virtu:matrix.im I'll try to figure out a theme from those that I can apply to my problem. thanks, mewp! 09:18:29
@mewp:nurupo.plmewpdon't hesitate to ask more09:18:44
@fractivore:cyberia.club@fractivore:cyberia.club joined the room.14:29:10
1 Nov 2023
@kjeremy:matrix.orgkjeremy joined the room.14:06:45

Show newer messages


Back to Room ListRoom Version: 6