-
Hello, I started my project using the executable template from this repository.
It seems that the problem is caused by the difference between the name of the executable and the Here is the source code for the reproduction:
{
inputs = {
opam-nix.url = "github:tweag/opam-nix";
flake-utils.url = "github:numtide/flake-utils";
nixpkgs.follows = "opam-nix/nixpkgs";
};
outputs = { self, flake-utils, opam-nix, nixpkgs }@inputs:
# Don't forget to put the package name instead of `throw':
let package = "hello_world";
in flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
on = opam-nix.lib.${system};
devPackagesQuery = {
# You can add "development" packages here. They will get added to the devShell automatically.
ocaml-lsp-server = "*";
ocamlformat = "*";
};
query = devPackagesQuery // {
## You can force versions of certain packages here, e.g:
## - force the ocaml compiler to be taken from opam-repository:
ocaml-base-compiler = "*";
## - or force the compiler to be taken from nixpkgs and be a certain version:
# ocaml-system = "4.14.0";
## - or force ocamlfind to be a certain version:
# ocamlfind = "1.9.2";
};
scope = on.buildOpamProject' { } ./. query;
overlay = final: prev: {
# You can add overrides here
${package} = prev.${package}.overrideAttrs (_: {
# Prevent the ocaml dependencies from leaking into dependent environments
doNixSupport = false;
});
};
scope' = scope.overrideScope' overlay;
# The main package containing the executable
main = scope'.${package};
# Packages from devPackagesQuery
devPackages = builtins.attrValues
(pkgs.lib.getAttrs (builtins.attrNames devPackagesQuery) scope');
in {
legacyPackages = scope';
packages.default = main;
devShells.default = pkgs.mkShell {
inputsFrom = [ main ];
buildInputs = devPackages ++ [
# You can add packages from nixpkgs here
];
};
});
}
(lang dune 3.12)
(name hello_world)
(generate_opam_files true)
(package
(name hello_world))
(executable
(name hello_world)
(public_name hello-world)) ; different from hello_world
let () = print_endline "Hello, world!" |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 1 reply
-
Is Otherwise, you can add |
Beta Was this translation helpful? Give feedback.
Is
nix shell . -c hello-world
not acceptable for you?Otherwise, you can add
apps.default = { type = "app"; program = "${self.packages.${system}.default}/bin/hello-world"; }
to your flake, so that Nix knows which executable to run precisely.