devshell icon indicating copy to clipboard operation
devshell copied to clipboard

possible way to expose devshell.toml's path?

Open nrdxp opened this issue 4 years ago • 4 comments

Issue

I wanted to add a feature to the git.hooks module to allow specifying a path to a hook. I got all the logic wired in and working, but the issue is that I have to specify a full path :disappointed:

nix doesn't seem to have the ability to convert a string with a relative path to a full path, and since toml doesn't have a native notion of a path, I'm kinda stuck. builtins.toPath is depricated and doesn't really do anything.

The only work around I can think of is if we define a variable somewhere containing the current devshell.toml's path. Then I can specify a path relative to the location of the devshell.toml to the git.hook source file. I'm sure this will come in handy for similar reasons in other modules.

I guess the alternative would be to leave it as a nix only option, but setting from toml would be ideal.

Context

my devshell.toml is not at the root of the project, otherwise I probably would have thought to use DEVSHELL_ROOT

nrdxp avatar Feb 16 '21 20:02 nrdxp

Do you want the file to be added to the /nix/store or just point to its location in the repo?

Where is that path being used?

zimbatm avatar Feb 17 '21 09:02 zimbatm

Whatever you believe would be the best solution, if indeed we find a good solution

Here is a draft pr so you can see the implementation. #96

The directory containting the devshell.toml. The pre-commit file I would like to specify is also there. The nix specific parts are in the default.nix.

nrdxp avatar Feb 17 '21 18:02 nrdxp

A couple of days ago, I also had a thought on relative-to-toml file paths in the context of wanting to load per-repo devshell modules (without resorting to .nix)

blaggacao avatar Feb 17 '21 21:02 blaggacao

The module has a _file attribute that exposes its location. Ideally, it would be possible to set the type of attribute to types.path and have it be resolved if it starts with ./. @infinisil do you know if that would be possible?

Otherwise, we will have to revert to something less ideal like a post-processing step. Or install config.resolveRoot = builtins.dirOf file when the user uses importTOML

zimbatm avatar Feb 28 '21 11:02 zimbatm