Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fully document how to use extra modules with plain flake.nix #287

Open
antifuchs opened this issue Dec 8, 2023 · 0 comments
Open

Fully document how to use extra modules with plain flake.nix #287

antifuchs opened this issue Dec 8, 2023 · 0 comments
Labels
bug Something isn't working

Comments

@antifuchs
Copy link

Describe the bug

I've just spent about an hour figuring out how to properly import the language/c and language/rust "extra" modules in my flake-parts based project flake, and how to set these up such that my project compiles.

To that end, it would have been very useful to have documentation for the following:

  • On what level exactly to put the import paths to pull in the extra/language/c.nix &c paths
  • On what level exactly to set language.c.include and friends
  • That language.* can be set but won't have any effect without those imports at exactly the right level in the first place.

This is similar to #283; I wish I'd guessed right the first time, instead I spent a while debugging inscrutable error messages.

To Reproduce

This flake definition works:

{
  outputs = inputs @ {
    self,
    flake-parts,
    nixpkgs,
    fenix,
    ...
  }:
    flake-parts.lib.mkFlake {inherit inputs;} {
      systems = [
        "x86_64-linux"
        "aarch64-linux"
      ];

      imports = [
        inputs.devshell.flakeModule
        inputs.flake-parts.flakeModules.easyOverlay
      ];

      perSystem = {
        config,
        pkgs,
        final,
        system,
        ...
      }: {
        formatter = pkgs.alejandra;

        devshells = {
          default = {
            imports = [
              "${inputs.devshell}/extra/language/rust.nix"
              "${inputs.devshell}/extra/language/c.nix"
            ];
            language.rust = {
              enableDefaultToolchain = false;
              packageSet = fenix.packages.${system}.stable;
            };

            language.c.includes = [pkgs.udev];
          };
        };
      };
    };

  inputs = {
    flake-parts.url = "github:hercules-ci/flake-parts";
    devshell.url = "github:numtide/devshell";
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
    fenix = {
      url = "github:nix-community/fenix";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };
}

However, the following things do not:

  • Putting the "${inputs.devshell}/extra/language/rust.nix" import at the mkFlake level (errors with "attribute 'pkgs' missing").
  • Putting language.c.includes at the devshells level (with or without import): No error, no effect. With that in place, the whole setup masks this additional problem (where things "should" work but don't):
  • Putting that import at the devshells level (outside the default): No error, no effect

Expected behavior

Some things that would have made my life easier:

System information

flake-parts 34fed993f1674c8d06d58b37ce1e0fe5eebcb9f5
devshell 44ddedcbcfc2d52a76b64fb6122f209881bd3e1e

Additional context

@antifuchs antifuchs added the bug Something isn't working label Dec 8, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant