winget-cli icon indicating copy to clipboard operation
winget-cli copied to clipboard

Shims like Scoop

Open Witchilich opened this issue 4 years ago • 12 comments

Description of the new feature/enhancement

Like how Scoop has. For example without adding anything to path, we can just type gpu-z to launch GPU-Z or use mpv.net from commandline with mpvnet <url>. UWP apps also have this, notepads for Notepads, wt for Windows Terminal etc.

Witchilich avatar May 29 '20 04:05 Witchilich

I'm using scoop instead of choco just because it adds the essential apps to the path automagically.

bog-dan-ro avatar May 29 '20 07:05 bog-dan-ro

@bog-dan-ro Scoop does not add anything to the path. It adds their Shims directory to path and adds shims to that path. Same as UWP's 'WindowApps' directory.

Witchilich avatar May 29 '20 14:05 Witchilich

Just to be clear, Chocolatey has this functionality as well, and has for a long time.

gep13 avatar May 29 '20 18:05 gep13

To follow up on what Gary mentioned and make sure the credit is in the proper place, I just wanted to note that Chocolatey brought about the idea of shims not to clutter your PATH - it existed long before Scoop was created as a concept called batch redirects. Later we moved to shim exes. Luke thought shimming was great and added it to Scoop. Just want to make sure the credit is in the proper place on shims.

References:

  • November 2013 - Issue for Shim Exes for Chocolatey w/commits in November 2013 - https://github.com/chocolatey-archive/chocolatey/issues/372
  • January 2014 - Added to Scoop - https://github.com/lukesampson/scoop/commit/5c52166fcd813aaee0865e50f516b09d696bf9c7#diff-6102f557c61df6fb4e37e4e68d8899348e48b633871262f5fd1c27ed42caf4dd

I think your confusion might be in that Chocolatey could defer to an installer as well, which might put things on PATH. Scoop doesn't use the installer at all, it just unpacks, so the shims are much more necessary. Chocolatey's docs on this - https://docs.chocolatey.org/en-us/features/shim

(NOTE: This is a repost of what I noted on a different issue).

ferventcoder avatar Mar 19 '21 19:03 ferventcoder

Windows already has some kind of shim in windowsapp folder. Like wt.exe for windows terminal; wsl.exe for the lixus sub system

quangkieu avatar Mar 19 '21 22:03 quangkieu

I think the manifest need someway to specify which to shim from final install folder

quangkieu avatar Mar 19 '21 22:03 quangkieu

We are working on support for portable / standalone executables like NuGet. This mechanism is being considered as a part of:

  • #182

denelon avatar Feb 18 '22 16:02 denelon

@denelon as taking about shim, I wonder if we could request open version of windows store shim for like wt.exe, wsl.exe to use in personal project

quangkieu avatar Feb 18 '22 17:02 quangkieu

@quangkieu what you are referring to is an App Execution Alias I believe. This is part of the behavior supported by MSIX packages. https://docs.microsoft.com/windows/msix/desktop/desktop-to-uwp-prepare

denelon avatar Feb 18 '22 19:02 denelon

Windows Package Manager 1.3 preview releases and the Windows Package Manager 1.3 release candidate use symbolic links for portable applications to avoid cluttering a user's path environment variable. We're still discussing the relative value of trying to create a mechanism affecting the path when an installer is used for a package. We've added install notes to give users information about a recently installed package that could contain information like the requirement to restart the terminal session to get any potential path entries that have been made by an installer.

denelon avatar Jul 07 '22 18:07 denelon

If an app depends on some .dll file within its directory, symbolic links do not work. Also, symbolic links require admin permission.

KaranKad avatar Oct 09 '22 08:10 KaranKad

Not every Windows executable supports command line usage. We should be able to list the ones that do in the app manifest and then the shims for them would be created automatically in an existing directory that's already in PATH.

restart the terminal session to get any potential path entries that have been made by an installer

That's what we want to avoid having to do 😉. Both the restarting of terminal and the pollution of PATH with new directories are bad.

FWIW, Homebrew also creates shims (or rather it permits maintainers to do so in the app manifests). See https://github.com/Homebrew/homebrew-cask/issues/18809: "Everyone agrees shim scripts are desirable, so lets allow them."

Winget is more modern and IMO more elegant than the other package managers, but this pain point is a major inconvenience that makes it difficult to recommend right now.

shoogle avatar Nov 01 '22 01:11 shoogle