Hello. I would like to have two links in system path: openvpn
and openvpn_24
, former working as usual, latter pointing to /nix/store/hash-openvpn_24/bin/openvpn
. Is this possible?
IMO you didn’t really specify what you want with it, but e.g.
$ nix-build '<nixpkgs>' -QA openvpn_24
/nix/store/n7dd2c7kzrpfwb4v86jk8ycpgsx2p7nh-openvpn-2.4.11
(you may be using nixos
as the channel name instead of nixpkgs
or whatever you’ve put there)
Ahh, I’m sorry, you wrote you want to have it in system path. In configuration.nix
you can do
environment.systemPackages = [ pkgs.openvpn_24 ];
which should be independent of your services.openvpn
options. Though I’m still unsure of what you want.
Just putting both on system path won’t help due to them having the same bin/openvpn
, so you’d have to use some wrapper that gives them new names or something.
Just putting both on system path won’t help
That’s why I said that I want a link openvpn_24
pointing to /nix/store/hash-openvpn_24/bin/openvpn
. I hoped there is a way to overrideAttrs
or tweak environment.*
to produce a link with different name.
For some reason I didn’t think of creating a wrapper, so thanks for reminding me of that. I guess I’ll go with that.
OK, now I see what you meant. Tested example:
environment.systemPackages = [
(with pkgs; runCommandNoCCLocal openvpn_24.name {} ''
mkdir -p "$out/bin"
ln -s '${openvpn_24}/bin/openvpn' "$out/bin/openvpn_24"
'')
];
Thank you I ended up with this:
> cat /etc/nixos/openvpn_24-wrapper.nix
{ runCommandNoCCLocal, openvpn_24 }:
runCommandNoCCLocal "openvpn_24-wrapper" {} ''
mkdir -p "$out/bin"
ln -s '${openvpn_24}/bin/openvpn' "$out/bin/openvpn_24"
''
and (callPackage ./openvpn_24-wrapper.nix {})
in environment.systemPackages
.
If not for you, I would use script wrapper, creating indirection. This is better.