|
1 | 1 | #!/usr/bin/env -S pkgx --quiet deno^2.1 run --ext=ts --allow-sys=uid --allow-run --allow-env=PKGX_DIR,HOMEBREW_PREFIX,HOME --allow-read=/usr/local/pkgs,${HOME}/.local/pkgs |
2 | 2 | import { dirname, fromFileUrl, join } from "jsr:@std/path@^1"; |
3 | 3 | import { ensureDir, existsSync } from "jsr:@std/fs@^1"; |
4 | | -import { parse as parse_args } from "jsr:@std/flags@0.224.0"; |
| 4 | +import { parseArgs } from "jsr:@std/cli@^1"; |
5 | 5 | import * as semver from "jsr:@std/semver@^1"; |
6 | 6 |
|
7 | 7 | function standardPath() { |
8 | | - const basePath = "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"; |
9 | | - // for pkgm installed via homebrew |
10 | | - const homebrew = `${Deno.env.get("HOMEBREW_PREFIX") || "/opt/homebrew"}/bin`; |
11 | | - if (Deno.build.os === "darwin") { |
12 | | - return `${homebrew}:${basePath}`; |
13 | | - } else { |
14 | | - return basePath; |
| 8 | + let path = "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"; |
| 9 | + |
| 10 | + // for pkgx installed via homebrew |
| 11 | + let homebrewPrefix = ""; |
| 12 | + switch (Deno.build.os) { |
| 13 | + case "darwin": |
| 14 | + homebrewPrefix = "/opt/homebrew"; // /usr/local is already in the path |
| 15 | + break; |
| 16 | + case "linux": |
| 17 | + homebrewPrefix = `/home/linuxbrew/.linuxbrew:${ |
| 18 | + Deno.env.get("HOME") |
| 19 | + }/.linuxbrew`; |
| 20 | + break; |
15 | 21 | } |
| 22 | + if (homebrewPrefix) { |
| 23 | + homebrewPrefix = Deno.env.get("HOMEBREW_PREFIX") ?? homebrewPrefix; |
| 24 | + path = `${homebrewPrefix}/bin:${path}`; |
| 25 | + } |
| 26 | + |
| 27 | + return path; |
16 | 28 | } |
17 | 29 |
|
18 | | -const parsedArgs = parse_args(Deno.args, { |
| 30 | +const parsedArgs = parseArgs(Deno.args, { |
19 | 31 | alias: { |
20 | 32 | v: "version", |
21 | 33 | h: "help", |
@@ -140,7 +152,17 @@ async function install(args: string[], basePath: string) { |
140 | 152 | basePath, |
141 | 153 | ...to_install, |
142 | 154 | ]; |
143 | | - const cmd = needs_sudo ? "/usr/bin/sudo" : args.shift()!; |
| 155 | + let cmd = ""; |
| 156 | + if (needs_sudo) { |
| 157 | + cmd = "/usr/bin/sudo"; |
| 158 | + args.unshift( |
| 159 | + "-E", // we already cleared the env, it's safe |
| 160 | + "env", |
| 161 | + `PATH=${env.PATH}`, |
| 162 | + ); |
| 163 | + } else { |
| 164 | + cmd = args.shift()!; |
| 165 | + } |
144 | 166 | status = await new Deno.Command(cmd, { args, env, clearEnv: true }) |
145 | 167 | .spawn().status; |
146 | 168 | Deno.exit(status.code); |
|
0 commit comments