lib: pkgs: let wrap = { name, pkg, args ? [ ], envs ? { } }: let argsStr = lib.concatStringsSep " " (map (a: ''--add-flags "${a}"'') args); envsStr = lib.concatStringsSep " " (lib.mapAttrsToList (k: v: ''--set ${k} "${v}"'') envs); in pkgs.symlinkJoin { inherit name; paths = [ pkg ]; nativeBuildInputs = [ pkgs.makeWrapper ]; postBuild = "wrapProgram $out/bin/${name} ${argsStr} ${envsStr}"; }; wrapXdg = name: pkg: configDir: wrap { inherit name pkg; envs = { XDG_CONFIG_HOME = configDir; }; }; in { inherit wrap wrapXdg; }