[Nix-dev] Extend wrapper created with makeWrapper

Guillaume Maudoux (Layus) layus.on at gmail.com
Mon May 8 10:04:46 CEST 2017


wrapProgram is a thin wrapper around makeWrapper, both defined in 
make-wrapper.sh
All they do is exactly the same as the custom wrapper make below.

You can nlook for uses of makeWrapper / wrapProgram across nixpkgs.
kdeWrapper, wrapQtProgram & co are refinements of this concept. They 
call wrapProgram with extra, custom settings for resp. KDE, Qt, GNOME & 
co. To avoid stacking wrappers, they sometimes provide an extension 
mechanism. kdeWrapper does not.

For now, I would keep the custom hack. It is the simplest solution.

https://github.com/abbradar/nixpkgs/blob/124e5dd3eb9e3e8fe322d3c62e4501b2043ac898/pkgs/build-support/setup-hooks/make-wrapper.sh

-- Layus.

On 07/05/17 22:40, José Luis Lafuente wrote:
> The wrapper derivation approach works nicely, thanks!
>
> I'm trying to understand how to achieve the same with stackable 
> wrappers, but not sure how. The examples in 
> https://github.com/NixOS/nixpkgs/pull/24858 
> <https://github.com/NixOS/nixpkgs/pull/24858> are using wrapQtProgam 
> and wrapPythonPrograms. In both cases there is a way to extend the 
> created wrapper, you can set `makeWrapperArgs` for wrapPythonPrograms, 
> or you can pass extra arguments to wrapQtProgram. But okular uses 
> kdeWrapper, which doesn't seem to offer a way to extend the created 
> wrapper. Is it really not possible to extend the wrapper created with 
> kdeWrapper, or am I missing something?
>
> On Fri, May 5, 2017 at 4:12 PM, Guillaume Maudoux (Layus) 
> <layus.on at gmail.com <mailto:layus.on at gmail.com>> wrote:
>
>     Stackable wrappers are implemented in
>     https://github.com/NixOS/nixpkgs/pull/24858
>     <https://github.com/NixOS/nixpkgs/pull/24858>, but you will need
>     to wait for that package to land in master, and then get included
>     in some channel :-).
>
>     You can also create a trivial wrapper derivation:
>
>     |# file ~/.nixpkgs/config.nix { pkgs, ...}: { packageOverrides =
>     super: rec { customOkular = pkgs.writeScriptBin "okular" ''
>     #!/usr/bin/env bash export MYVAR=something exec
>     ${pkgs.okular}/bin/okular "$@" ''; ... |
>
>     and then nix-env -iA nixos.customOkular :-).
>
>     — Layus.
>
>     On 05/05/17 15:02, José Luis Lafuente wrote:
>
>>     Hi,
>>
>>     I want to override an existing package to use it locally. I would
>>     like to just set an environment variable before the program is
>>     executed, but the derivation is using `wrapProgram`, so there is
>>     already a wrapper for the program. Is possible to override the
>>     derivation to add another environment variable to the wrapper?
>>     The derivation I want to modify is okular
>>     (https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/kde/okular.nix
>>     <https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/kde/okular.nix>)
>>
>>
>>     Thanks in advance,
>>     José Luis
>>
>>
>>     _______________________________________________
>>     nix-dev mailing list
>>     nix-dev at lists.science.uu.nl <mailto:nix-dev at lists.science.uu.nl>
>>     https://mailman.science.uu.nl/mailman/listinfo/nix-dev
>>     <https://mailman.science.uu.nl/mailman/listinfo/nix-dev>
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.science.uu.nl/pipermail/nix-dev/attachments/20170508/3d01ebe0/attachment.html>


More information about the nix-dev mailing list