`pixi shell` blocks

Yes, pixi does exactly that. When you globally install a tool, you create individual environments for each tool, and we only expose the executables from the package that you are interested in. This is completely controllable via the “global manifest file”.

version = 1
[envs.coreutils]
channels = ["conda-forge"]
dependencies = { coreutils = "*" }
exposed = { tee = "tee", md5sum = "md5sum", split = "split", cat = "cat", shuf = "shuf", mkfifo = "mkfifo", pathchk = "pathchk", runcon = "runcon", expand = "expand", tty = "tty", basename = "basename", install = "install", nice = "nice", truncate = "truncate", echo = "echo", du = "du", ptx = "ptx", join = "join", pwd = "pwd", test = "test", csplit = "csplit", sort = "sort", whoami = "whoami", touch = "touch", unlink = "unlink", b2sum = "b2sum", sleep = "sleep", fmt = "fmt", stty = "stty", logname = "logname", chgrp = "chgrp", printenv = "printenv", seq = "seq", uname = "uname", sha224sum = "sha224sum", od = "od", date = "date", base64 = "base64", realpath = "realpath", readlink = "readlink", dircolors = "dircolors", timeout = "timeout", tac = "tac", numfmt = "numfmt", wc = "wc", basenc = "basenc", comm = "comm", nproc = "nproc", expr = "expr", cksum = "cksum", printf = "printf", groups = "groups", chcon = "chcon", factor = "factor", tail = "tail", env = "env", pr = "pr", head = "head", kill = "kill", uniq = "uniq", stat = "stat", link = "link", sum = "sum", tsort = "tsort", mknod = "mknod", users = "users", dd = "dd", who = "who", sha1sum = "sha1sum", mktemp = "mktemp", cut = "cut", sha256sum = "sha256sum", dir = "dir", mkdir = "mkdir", nl = "nl", shred = "shred", fold = "fold", rmdir = "rmdir", sha384sum = "sha384sum", mv = "mv", dirname = "dirname", id = "id", base32 = "base32", pinky = "pinky", ln = "ln", hostid = "hostid", chroot = "chroot", ls = "ls", true = "true", cp = "cp", sync = "sync", yes = "yes", unexpand = "unexpand", chown = "chown", chmod = "chmod", uptime = "uptime", rm = "rm", vdir = "vdir", false = "false", sha512sum = "sha512sum", "[" = "[", tr = "tr", paste = "paste", nohup = "nohup" }

[envs.git-lfs]
channels = ["conda-forge"]
dependencies = { git-lfs = "*" }
exposed = { git-lfs = "git-lfs" }

You can modify the file by hand or use pixi global install foobar

The exposed binaries can also be renamed - which allows you to install multiple versions side by side (for example, you could type exposed = { git-lfs-old = "git-lfs" }).

Unlike Homebrew, pixi (or really the conda ecosystem) also comes with a SAT solver and old versions are never deleted. That means you can still install python=3.5 or whatever.

Pixi also does not care where you put it on the PATH :slight_smile:

2 Likes