2245 lines
57 KiB
Text
2245 lines
57 KiB
Text
#!/usr/bin/env zx
|
|
|
|
# Store data in YML file and then generate the data below with:
|
|
# yq e -o=j '.' .chezmoidata.yaml
|
|
const installData = {
|
|
"softwarePackages": {
|
|
"altair": {
|
|
"cask": "altair-graphql-client",
|
|
"choco": "altair-graphql",
|
|
"snap": "altair",
|
|
"yay": "altair"
|
|
},
|
|
"angular-cli": {
|
|
"brew": "angular-cli",
|
|
"npm": "@angular/cli"
|
|
},
|
|
"ansible-lint": {
|
|
"pipx": "ansible-lint"
|
|
},
|
|
"ansible": {
|
|
"brew": "ansible",
|
|
"dnf": "ansible",
|
|
"pipx": "ansible"
|
|
},
|
|
"ansibleconnect": {
|
|
"_deps": [
|
|
"sshpass",
|
|
"tmux"
|
|
],
|
|
"pipx": "ansibleconnect"
|
|
},
|
|
"aqua": {
|
|
"brew": "aquaproj/aqua/aqua"
|
|
},
|
|
"asciicinema": {
|
|
"pipx": "asciicinema"
|
|
},
|
|
"astronvim": {
|
|
"_deps": [
|
|
"bottom",
|
|
"lazygit",
|
|
"neovim",
|
|
"node",
|
|
"python",
|
|
"ripgrep",
|
|
"tree-sitter"
|
|
]
|
|
},
|
|
"auto-install": {
|
|
"npm": "auto-install"
|
|
},
|
|
"automake": {
|
|
"brew": "automake"
|
|
},
|
|
"bat": {
|
|
"apk": "bat",
|
|
"apt": "bat",
|
|
"brew": "bat",
|
|
"cargo": "bat",
|
|
"choco": "bat",
|
|
"pacman": "bat",
|
|
"pkg": "bat",
|
|
"port": "bat",
|
|
"scoop": "bat",
|
|
"zypper": "bat"
|
|
},
|
|
"blockinfile": {
|
|
"go": "github.com/ProfessorManhattan/blockinfile@latest"
|
|
},
|
|
"bundler": {
|
|
"gem": "bundler"
|
|
},
|
|
"delta": {
|
|
"brew": "git-delta",
|
|
"cargo": "git-delta",
|
|
"choco": "delta",
|
|
"dnf": "git-delta",
|
|
"pacman": "git-delta",
|
|
"pkg": "git-delta",
|
|
"scoop": "delta"
|
|
},
|
|
"bash-completion": {
|
|
"brew": "bash-completion"
|
|
},
|
|
"bitly": {
|
|
"npm": "bitly-cli-client"
|
|
},
|
|
"bottom": {
|
|
"brew": "bottom",
|
|
"pacman": "bottom",
|
|
"scoop": "bottom",
|
|
"snap": "bottom"
|
|
},
|
|
"browser-sync": {
|
|
"npm": "browser-sync"
|
|
},
|
|
"bw": {
|
|
"choco": "bitwarden-cli",
|
|
"snap": "bw"
|
|
},
|
|
"caniuse": {
|
|
"npm": "caniuse-cmd"
|
|
},
|
|
"carbon-now": {
|
|
"npm": "carbon-now-cli"
|
|
},
|
|
"carthage": {
|
|
"brew:darwin": "carthage"
|
|
},
|
|
"chef": {
|
|
"gem": "chef"
|
|
},
|
|
"chrome-cli": {
|
|
"brew:darwin": "chrome-cli"
|
|
},
|
|
"clocker": {
|
|
"cask": "clocker"
|
|
},
|
|
"cookiecutter": {
|
|
"brew": "cookiecutter",
|
|
"pipx": "cookiecutter"
|
|
},
|
|
"cocoapods": {
|
|
"brew:darwin": "cocoapods",
|
|
"gem:darwin": "cocoapods"
|
|
},
|
|
"commitizen": {
|
|
"_bin": "cz",
|
|
"npm": "commitizen"
|
|
},
|
|
"cordova": {
|
|
"npm": "cordova"
|
|
},
|
|
"delve": {
|
|
"brew": "delve",
|
|
"go": "github.com/go-delve/delve/cmd/dlv@latest"
|
|
},
|
|
"dframe": {
|
|
"npm": "deviceframe"
|
|
},
|
|
"editly": {
|
|
"npm": "editly"
|
|
},
|
|
"electron": {
|
|
"brew": "electron",
|
|
"npm": "electron"
|
|
},
|
|
"emma": {
|
|
"npm": "emma-cli"
|
|
},
|
|
"emoj": {
|
|
"npm": "emoj"
|
|
},
|
|
"emplace": {
|
|
"cargo": "emplace",
|
|
"nix": "emplace",
|
|
"scoop": "emplace"
|
|
},
|
|
"empty-trash": {
|
|
"npm": "empty-trash-cli"
|
|
},
|
|
"eslint": {
|
|
"brew": "eslint",
|
|
"npm": "eslint"
|
|
},
|
|
"fastify": {
|
|
"npm": "fastify-cli"
|
|
},
|
|
"feathers": {
|
|
"npm": "@feathersjs/cli"
|
|
},
|
|
"firebase": {
|
|
"npm": "firebase-tools"
|
|
},
|
|
"ffmpeg": {
|
|
"apk": "ffmpeg",
|
|
"apt": "ffmpeg",
|
|
"brew": "ffmpeg",
|
|
"choco": "ffmpeg",
|
|
"dnf": "ffmpeg",
|
|
"pacman": "ffmpeg",
|
|
"scoop": "ffmpeg"
|
|
},
|
|
"fkill": {
|
|
"npm": "fkill-cli"
|
|
},
|
|
"fonts": {
|
|
"cask": [
|
|
"epk/epk/font-sf-mono-nerd-font",
|
|
"homebrew/cask-fonts/font-hack-nerd-font",
|
|
"homebrew/cask-fonts/font-meslo-lg-nerd-font"
|
|
]
|
|
},
|
|
"fpm": {
|
|
"gem": "fpm"
|
|
},
|
|
"gdown": {
|
|
"pipx": "gdown"
|
|
},
|
|
"gdu": {
|
|
"brew": "gdu",
|
|
"go": "github.com/dundee/gdu/v5/cmd/gdu@latest",
|
|
"pacman": "gdu",
|
|
"snap": "gdu-disk-usage-analyzer"
|
|
},
|
|
"gdu:debian": {
|
|
"apt": "gdu"
|
|
},
|
|
"gfi": {
|
|
"npm": "google-font-installer"
|
|
},
|
|
"git": {
|
|
"apk": "git",
|
|
"apt": "git",
|
|
"brew": "git",
|
|
"dnf": "git"
|
|
},
|
|
"git-filter-repo": {
|
|
"brew": "git-filter-repo",
|
|
"pipx": "git-filter-repo"
|
|
},
|
|
"git-lfs": {
|
|
"_deps": [
|
|
"git"
|
|
],
|
|
"brew": "git-lfs",
|
|
"scoop": "git-lfs"
|
|
},
|
|
"git-open": {
|
|
"npm": "git-open"
|
|
},
|
|
"gixy": {
|
|
"pipx": "gixy"
|
|
},
|
|
"go-outline": {
|
|
"go": "github.com/ramya-rao-a/go-outline@latest"
|
|
},
|
|
"gomodifytags": {
|
|
"brew": "gomodifytags",
|
|
"go": "github.com/fatih/gomodifytags@latest"
|
|
},
|
|
"gopkgs": {
|
|
"go": "github.com/uudashr/gopkgs/v2/cmd/gopkgs@latest"
|
|
},
|
|
"gopls": {
|
|
"brew": "gopls",
|
|
"go": "golang.org/x/tools/gopls@latest"
|
|
},
|
|
"gotests": {
|
|
"brew": "gotests",
|
|
"go": "github.com/cweill/gotests/...@latest"
|
|
},
|
|
"gphotos-sync": {
|
|
"pipx": "gphotos-sync"
|
|
},
|
|
"gnu:darwin": {
|
|
"brew": [
|
|
"coreutils",
|
|
"findutils",
|
|
"gawk",
|
|
"gnu-getopt",
|
|
"gnu-indent",
|
|
"gnu-tar",
|
|
"gnu-sed",
|
|
"gnutls",
|
|
"grep"
|
|
]
|
|
},
|
|
"gtop": {
|
|
"brew": "gtop",
|
|
"npm": "gtop"
|
|
},
|
|
"gulp": {
|
|
"brew": "gulp",
|
|
"npm": "gulp"
|
|
},
|
|
"http-prompt": {
|
|
"brew": "http-prompt",
|
|
"pipx": "http-prompt"
|
|
},
|
|
"httpstat": {
|
|
"brew": "httpstat",
|
|
"pipx": "httpstat"
|
|
},
|
|
"ideviceinstaller": {
|
|
"brew:darwin": "ideviceinstaller"
|
|
},
|
|
"imagemagick": {
|
|
"apk": "imagemagick",
|
|
"apt": "imagemagick",
|
|
"brew": "imagemagick",
|
|
"choco": "imagemagick",
|
|
"dnf": "imagemagick",
|
|
"scoop": "imagemagick"
|
|
},
|
|
"imgur-uploader": {
|
|
"npm": "imgur-uploader-cli"
|
|
},
|
|
"impl": {
|
|
"go": "github.com/josharian/impl@latest"
|
|
},
|
|
"ionic": {
|
|
"npm": "@ionic/cli"
|
|
},
|
|
"ios-deploy": {
|
|
"brew:darwin": "ios-deploy",
|
|
"npm:darwin": "ios-deploy"
|
|
},
|
|
"ipfs": {
|
|
"brew": "ipfs",
|
|
"choco": "go-ifps",
|
|
"nix": "ipfs",
|
|
"port": "ipfs",
|
|
"scoop": "go-ipfs",
|
|
"snap": "ipfs"
|
|
},
|
|
"ipfs-desktop": {
|
|
"cask": "ipfs",
|
|
"choco": "ipfs-desktop",
|
|
"pacman": "ipfs-desktop",
|
|
"scoop": "ipfs-desktop"
|
|
},
|
|
"ipfs-deploy": {
|
|
"_bin": "ipd",
|
|
"npm": "ipfs-deploy"
|
|
},
|
|
"is-up": {
|
|
"npm": "is-up-cli"
|
|
},
|
|
"lazygit": {
|
|
"brew": "lazygit",
|
|
"choco": "lazygit",
|
|
"go": "github.com/jesseduffield/lazygit@latest",
|
|
"pacman": "lazygit",
|
|
"scoop": "lazygit"
|
|
},
|
|
"libimobiledevice": {
|
|
"brew:darwin": "libimobiledevice"
|
|
},
|
|
"localtunnel": {
|
|
"brew": "localtunnel",
|
|
"npm": "localtunnel"
|
|
},
|
|
"mjml": {
|
|
"cask": "mjml",
|
|
"npm": "mjml"
|
|
},
|
|
"molecule": {
|
|
"brew": "molecule",
|
|
"pipx": "molecule"
|
|
},
|
|
"nativefier": {
|
|
"_deps": [
|
|
"imagemagick"
|
|
],
|
|
"npm": "nativefier"
|
|
},
|
|
"ncc": {
|
|
"brew": "ncc",
|
|
"npm": "@vercel/ncc"
|
|
},
|
|
"netcat": {
|
|
"apt": "netcat",
|
|
"brew": "netcat",
|
|
"choco": "netcat",
|
|
"dnf": "netcat",
|
|
"pacman": "netcat",
|
|
"scoop": "netcat"
|
|
},
|
|
"nb": {
|
|
"_deps": [
|
|
"bat",
|
|
"netcat",
|
|
"pandoc",
|
|
"rg",
|
|
"tig",
|
|
"w3m"
|
|
],
|
|
"basher": "xwmx/nb",
|
|
"bpkg": "xwmx/nb",
|
|
"brew": "nb",
|
|
"npm": "nb.sh"
|
|
},
|
|
"nectar": {
|
|
"npm": "nectarjs"
|
|
},
|
|
"neovim": {
|
|
"apk": "neovim",
|
|
"apt": [
|
|
"neovim",
|
|
"python3-neovim"
|
|
],
|
|
"brew": "neovim",
|
|
"choco": "neovim",
|
|
"dnf": [
|
|
"neovim",
|
|
"python3-neovim"
|
|
],
|
|
"flatpak": "io.neovim.nvim",
|
|
"nix": "neovim",
|
|
"pacman": [
|
|
"neovim",
|
|
"python-pynvim"
|
|
],
|
|
"pkg": [
|
|
"neovim",
|
|
"py27-pynvim",
|
|
"py36-pynvim"
|
|
],
|
|
"port": "neovim",
|
|
"winget": "Neovim.Neovim",
|
|
"zypper": [
|
|
"neovim",
|
|
"python-neovim",
|
|
"python3-neovim"
|
|
]
|
|
},
|
|
"ngxtop": {
|
|
"pipx": "ngxtop"
|
|
},
|
|
"node": {
|
|
"brew": "node",
|
|
"scoop": "nodejs"
|
|
},
|
|
"nest": {
|
|
"npm": "@nestjs/cli"
|
|
},
|
|
"newman": {
|
|
"brew": "newman",
|
|
"npm": "newman"
|
|
},
|
|
"np": {
|
|
"npm": "np"
|
|
},
|
|
"npm-check": {
|
|
"npm": "npm-check"
|
|
},
|
|
"oclif": {
|
|
"npm": "oclif"
|
|
},
|
|
"oh-my-posh": {
|
|
"brew": "jandedobbeleer/oh-my-posh/oh-my-posh",
|
|
"scoop": [
|
|
"clink",
|
|
"https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/oh-my-posh.json"
|
|
]
|
|
},
|
|
"package-size": {
|
|
"npm": "package-size"
|
|
},
|
|
"pageres": {
|
|
"npm": "pageres-cli"
|
|
},
|
|
"pandoc": {
|
|
"_deps": [
|
|
"python"
|
|
],
|
|
"apt": "pandoc",
|
|
"brew": [
|
|
"pandoc",
|
|
"librsvg",
|
|
"homebrew/cask/basictex"
|
|
],
|
|
"choco": [
|
|
"pandoc",
|
|
"rsvg-convert",
|
|
"miktex"
|
|
],
|
|
"crew": "pandoc",
|
|
"dnf": "pandoc",
|
|
"nix": "pandoc",
|
|
"pacman": "pandoc",
|
|
"winget": "pandoc"
|
|
},
|
|
"papertrail": {
|
|
"gem": "papertrail"
|
|
},
|
|
"pipx": {
|
|
"brew": "pipx"
|
|
},
|
|
"pkg": {
|
|
"npm": "pkg"
|
|
},
|
|
"playwright": {
|
|
"npm": "playwright"
|
|
},
|
|
"pm2": {
|
|
"npm": "pm2"
|
|
},
|
|
"pre-commit": {
|
|
"brew": "pre-commit",
|
|
"pipx": "pre-commit"
|
|
},
|
|
"prettier": {
|
|
"brew": "prettier",
|
|
"npm": "prettier"
|
|
},
|
|
"psi": {
|
|
"npm": "psi"
|
|
},
|
|
"python": {
|
|
"apt": "python3-pip",
|
|
"brew": "python",
|
|
"dnf": "python3-pip",
|
|
"pacman": "python-pip",
|
|
"scoop": "python"
|
|
},
|
|
"pywhat": {
|
|
"brew": "pywhat",
|
|
"pipx": "pywhat",
|
|
"port": "pywhat"
|
|
},
|
|
"ramda": {
|
|
"npm": "ramda-cli"
|
|
},
|
|
"rclone": {
|
|
"apt": "rclone",
|
|
"brew": "rclone",
|
|
"choco": [
|
|
"rclone",
|
|
"winfsp",
|
|
"nssm"
|
|
],
|
|
"dnf": "rclone",
|
|
"pacman": "rclone"
|
|
},
|
|
"ripgrep": {
|
|
"_bin": "rg",
|
|
"apt": "ripgrep",
|
|
"brew": "ripgrep",
|
|
"cargo": "ripgrep",
|
|
"choco": "ripgrep",
|
|
"dnf": "ripgrep",
|
|
"nix": "ripgrep",
|
|
"pacman": "ripgrep",
|
|
"pkg": "ripgrep",
|
|
"port": "ripgrep",
|
|
"scoop": "ripgrep",
|
|
"zypper": "ripgrep"
|
|
},
|
|
"ripgrep-all": {
|
|
"_bin": "rga",
|
|
"brew": [
|
|
"ffmpeg",
|
|
"pandoc",
|
|
"poppler",
|
|
"rga",
|
|
"tesseract"
|
|
],
|
|
"choco": "ripgrep-all",
|
|
"nix": "ripgrep-all",
|
|
"pacman": "ripgrep-all"
|
|
},
|
|
"rofi": {
|
|
"apt": "rofi",
|
|
"dnf": "rofi",
|
|
"pacman": "rofi",
|
|
"pkg": "rofi",
|
|
"port": "rofi",
|
|
"zypper": "rofi"
|
|
},
|
|
"rsync": {
|
|
"apt": "rsync",
|
|
"brew": "rsync",
|
|
"choco": "rsync",
|
|
"dnf": "rsync"
|
|
},
|
|
"sad": {
|
|
"brew": "ms-jpq/sad/sad",
|
|
"pacman": "sad"
|
|
},
|
|
"secretive": {
|
|
"cask": "secretive"
|
|
},
|
|
"semantic-release": {
|
|
"npm": "semantic-release"
|
|
},
|
|
"sentry-cli": {
|
|
"brew": "getsentry/tools/sentry-cli",
|
|
"github": "github.com/getsentry/sentry-cli",
|
|
"npm": "@sentry/cli",
|
|
"scoop": "sentry-cli",
|
|
"yay": "sentry-cli-bin"
|
|
},
|
|
"serve": {
|
|
"npm": "serve"
|
|
},
|
|
"serverless": {
|
|
"brew": "serverless",
|
|
"npm": "serverless"
|
|
},
|
|
"share": {
|
|
"npm": "share-cli"
|
|
},
|
|
"sharp": {
|
|
"npm": "sharp-cli"
|
|
},
|
|
"shotcut": {
|
|
"choco": "shotcut",
|
|
"flatpak": "org.shotcut.Shotcut",
|
|
"snap": "shotcut"
|
|
},
|
|
"sloth": {
|
|
"cask": "stats"
|
|
},
|
|
"social-analyzer": {
|
|
"brew": "social-analyzer",
|
|
"pipx": "social-analyzer"
|
|
},
|
|
"speed-test": {
|
|
"npm": "speed-test"
|
|
},
|
|
"spotdl": {
|
|
"_deps": [
|
|
"ffmpeg"
|
|
],
|
|
"pipx": "spotdl"
|
|
},
|
|
"sshpass": {
|
|
"apt": "sshpass",
|
|
"brew": "hudochenkov/sshpass/sshpass",
|
|
"dnf": "sshpass"
|
|
},
|
|
"starred": {
|
|
"pipx": "starred"
|
|
},
|
|
"statcode": {
|
|
"pipx": "statcode",
|
|
"yay": "statcode"
|
|
},
|
|
"stats": {
|
|
"cask": "stats"
|
|
},
|
|
"stegcloak": {
|
|
"npm": "stegcloak"
|
|
},
|
|
"supdock": {
|
|
"npm": "supdock"
|
|
},
|
|
"surge": {
|
|
"npm": "surge"
|
|
},
|
|
"svgo": {
|
|
"brew": "svgo",
|
|
"npm": "svgo"
|
|
},
|
|
"t": {
|
|
"gem": "t"
|
|
},
|
|
"terminalizer": {
|
|
"npm": "terminalizer"
|
|
},
|
|
"tig": {
|
|
"brew": "tig",
|
|
"nix": "tig",
|
|
"pkg": "tig"
|
|
},
|
|
"tinypng": {
|
|
"npm": "tinypng-cli"
|
|
},
|
|
"tldr": {
|
|
"brew": "tldr",
|
|
"npm": "tldr"
|
|
},
|
|
"trellis": {
|
|
"brew": "roots/tap/trellis-cli"
|
|
},
|
|
"trufflehog": {
|
|
"brew": "trufflesecurity/trufflehog/trufflehog"
|
|
},
|
|
"tmux": {
|
|
"apt": "tmux",
|
|
"brew": [
|
|
"awk",
|
|
"gnu-sed",
|
|
"perl",
|
|
"tmux"
|
|
]
|
|
},
|
|
"tree-sitter": {
|
|
"cargo": "tree-sitter-cli"
|
|
},
|
|
"ts2c": {
|
|
"npm": "ts2c"
|
|
},
|
|
"typescript": {
|
|
"_bin": "tsc",
|
|
"brew": "typescript",
|
|
"npm": "tsc"
|
|
},
|
|
"virtualenv": {
|
|
"brew": "virtualenv",
|
|
"pipx": "virtualenv"
|
|
},
|
|
"volta": {
|
|
"brew": "volta",
|
|
"scoop": "volta"
|
|
},
|
|
"w3m": {
|
|
"apt": "w3m",
|
|
"brew": "w3m",
|
|
"dnf": "w3m",
|
|
"pacman": "w3m",
|
|
"port": "w3m",
|
|
"zypper": "w3m"
|
|
},
|
|
"wget": {
|
|
"apk": "wget",
|
|
"apt": "wget",
|
|
"brew": "rsync",
|
|
"dnf": "wget",
|
|
"whalebrew": "whalebrew/wget"
|
|
},
|
|
"wifi-password": {
|
|
"bpkg": "rauchg/wifi-password",
|
|
"brew": "wifi-password",
|
|
"npm": "wifi-password-cli"
|
|
},
|
|
"wordpressify": {
|
|
"npm": "wordpressify"
|
|
},
|
|
"wrangler": {
|
|
"npm": "@cloudflare/wrangler"
|
|
},
|
|
"yamllint": {
|
|
"brew": "yamllint",
|
|
"pipx": "yamllint"
|
|
},
|
|
"youtube-dl": {
|
|
"pipx": "youtube-dl",
|
|
"port": "youtube-dl",
|
|
"brew": "youtube-dl"
|
|
},
|
|
"zx": {
|
|
"brew": "zx",
|
|
"npm": "zx"
|
|
},
|
|
"act": {
|
|
"brew": "act",
|
|
"choco": "act-cli",
|
|
"go": "github.com/nektos/act@latest",
|
|
"ports": "act",
|
|
"scoop": "act",
|
|
"yay": "act"
|
|
},
|
|
"argocli": {
|
|
"brew": "argocd",
|
|
"github": "https://github.com/argoproj/argo-workflows"
|
|
},
|
|
"azurefunctions": {
|
|
"brew": "azure/functions/azure-functions-core-tools@4",
|
|
"choco": "azure-functions-core-tools",
|
|
"github": "github.com/Azure/azure-functions-core-tools",
|
|
"npm": "azure-functions-core-tools@4"
|
|
},
|
|
"bandwhich": {
|
|
"brew": "bandwhich",
|
|
"github": "github.com/imsnif/bandwhich",
|
|
"pacman": "bandwhich",
|
|
"pkg": "bandwhich"
|
|
},
|
|
"bane": {
|
|
"github": "github.com/genuinetools/bane",
|
|
"go": "github.com/genuinetools/bane@latest"
|
|
},
|
|
"betwixt": {
|
|
"github": "github.com/kdzwinel/betwixt"
|
|
},
|
|
"bin": {
|
|
"github": "github.com/marcosnils/bin",
|
|
"go": "github.com/marcosnils/bin@latest"
|
|
},
|
|
"bitwarden": {
|
|
"cask": "bitwarden",
|
|
"choco": "bitwarden",
|
|
"github": "github.com/bitwarden/desktop",
|
|
"snap": "bitwarden",
|
|
"yay": "bitwarden-git"
|
|
},
|
|
"bivac": {
|
|
"github": "github.com/camptocamp/bivac"
|
|
},
|
|
"boilr": {
|
|
"github": "github.com/tmrts/boilr",
|
|
"go": "github.com/tmrts/boilr@latest"
|
|
},
|
|
"budibase-cli": {
|
|
"github": "github.com/Budibase/budibase",
|
|
"npm": "@budibase/cli"
|
|
},
|
|
"captain": {
|
|
"github": "github.com/jenssegers/captain"
|
|
},
|
|
"cerebro": {
|
|
"cask": "cerebro",
|
|
"choco": "cerebro",
|
|
"github": "github.com/cerebroapp/cerebro",
|
|
"yay": "cerebro"
|
|
},
|
|
"clair": {
|
|
"brew": "clair",
|
|
"github": "github.com/quay/clair"
|
|
},
|
|
"cloudflared": {
|
|
"brew": "cloudflare/cloudflare/cloudflared",
|
|
"github": "github.com/cloudflare/cloudflared"
|
|
},
|
|
"cmctl": {
|
|
"github": "github.com/cert-manager/cert-manager"
|
|
},
|
|
"confd": {
|
|
"brew": "confd",
|
|
"choco": "confd",
|
|
"github": "github.com/kelseyhightower/confd",
|
|
"yay": "confd"
|
|
},
|
|
"consul-cli": {
|
|
"github": "github.com/mantl/consul-cli"
|
|
},
|
|
"croc": {
|
|
"brew": "croc",
|
|
"choco": "croc",
|
|
"github": "github.com/schollz/croc",
|
|
"go": "github.com/schollz/croc/v9@latest",
|
|
"pacman": "croc",
|
|
"pkg": "croc",
|
|
"scoop": "croc"
|
|
},
|
|
"ctop": {
|
|
"brew": "ctop",
|
|
"github": "github.com/bcicen/ctop",
|
|
"yay": "ctop-bin"
|
|
},
|
|
"cumulus": {
|
|
"cask": "cumulus",
|
|
"github": "github.com/gillesdemey/Cumulus"
|
|
},
|
|
"curator": {
|
|
"pip": "elasticsearch-curator"
|
|
},
|
|
"dasel": {
|
|
"brew": "dasel",
|
|
"github": "github.com/TomWright/dasel",
|
|
"go": "github.com/tomwright/dasel/cmd/dasel@master"
|
|
},
|
|
"dat": {
|
|
"github": "github.com/dat-ecosystem-archive/dat",
|
|
"npm": "dat@next"
|
|
},
|
|
"dat-desktop": {
|
|
"cask": "dat",
|
|
"github": "github.com/datproject/dat-desktop"
|
|
},
|
|
"dive": {
|
|
"brew": "dive",
|
|
"github": "github.com/wagoodman/dive",
|
|
"go": "github.com/wagoodman/dive@latest",
|
|
"yay": "dive"
|
|
},
|
|
"desed": {
|
|
"cargo": "desed",
|
|
"dnf": "desed",
|
|
"github": "github.com/SoptikHa2/desed",
|
|
"pkg": "desed"
|
|
},
|
|
"deta": {
|
|
"github": "github.com/deta/deta-cli"
|
|
},
|
|
"direnv": {
|
|
"apt": "direnv",
|
|
"brew": "direnv",
|
|
"github": "github.com/direnv/direnv"
|
|
},
|
|
"docker-slim": {
|
|
"brew": "docker-slim",
|
|
"dnf": "golang-github-docker-slim",
|
|
"github": "github.com/docker-slim/docker-slim",
|
|
"yay": "docker-slim"
|
|
},
|
|
"dockle": {
|
|
"brew": "goodwithtech/r/dockle",
|
|
"github": "github.com/goodwithtech/dockle",
|
|
"yay": "dockle-bin"
|
|
},
|
|
"doctl": {
|
|
"brew": "doctl",
|
|
"github": "github.com/digitalocean/doctl",
|
|
"pacman": "doctl",
|
|
"pkg": "doctl",
|
|
"snap": "doctl"
|
|
},
|
|
"dog": {
|
|
"brew": "dog",
|
|
"github": "github.com/ogham/dog",
|
|
"pacman": "dog",
|
|
"pkg": "dog"
|
|
},
|
|
"drone": {
|
|
"brew": "drone/drone/drone",
|
|
"github": "github.com/harness/drone-cli",
|
|
"scoop": "drone"
|
|
},
|
|
"duf": {
|
|
"brew": "duf",
|
|
"choco": "duf",
|
|
"github": "github.com/muesli/duf",
|
|
"pacman": "duf",
|
|
"pkg": "duf",
|
|
"scoop": "duf",
|
|
"snap": "duf-utility"
|
|
},
|
|
"dust": {
|
|
"apk": "dust",
|
|
"github": "github.com/bootandy/dust",
|
|
"pacman": "dust"
|
|
},
|
|
"envconsul": {
|
|
"github": "github.com/hashicorp/envconsul"
|
|
},
|
|
"etcd": {
|
|
"apt": "etcd",
|
|
"brew": "etcd",
|
|
"choco": "etcd",
|
|
"dnf": "etcd",
|
|
"github": "github.com/etcd-io/etcd",
|
|
"yay": "etcd"
|
|
},
|
|
"fd": {
|
|
"apk": "fd",
|
|
"apt": "fd-find",
|
|
"brew": "fd",
|
|
"cargo": "fd-find",
|
|
"choco": "fd",
|
|
"github": "github.com/sharkdp/fd",
|
|
"pacman": "fd",
|
|
"pkg": "fd",
|
|
"scoop": "fd"
|
|
},
|
|
"ffsend": {
|
|
"apk": "ffsend",
|
|
"brew": "ffsend",
|
|
"github": "github.com/timvisee/ffsend",
|
|
"pkg": "ffsend",
|
|
"scoop": "ffsend",
|
|
"snap": "ffsend",
|
|
"yay": "ffsend"
|
|
},
|
|
"filebrowser": {
|
|
"brew": "filebrowser/tap/filebrowser",
|
|
"github": "github.com/filebrowser/filebrowser"
|
|
},
|
|
"fission": {
|
|
"github": "github.com/fission/fission"
|
|
},
|
|
"fly": {
|
|
"brew": "fly",
|
|
"github": "https://github.com/concourse/concourse",
|
|
"yay": "fly-cli"
|
|
},
|
|
"fm": {
|
|
"github": "github.com/knipferrc/fm",
|
|
"go": "github.com/knipferrc/fm@latest"
|
|
},
|
|
"fq": {
|
|
"apk": "fq",
|
|
"brew": "wader/tap/fq",
|
|
"go": "github.com/wader/fq@latest",
|
|
"github": "github.com/wader/fq",
|
|
"pacman": "fq",
|
|
"scoop": "fq"
|
|
},
|
|
"fselect": {
|
|
"brew": "fselect",
|
|
"choco": "fselect",
|
|
"cargo": "fselect",
|
|
"github": "github.com/jhspetersson/fselect",
|
|
"yay": "fselect"
|
|
},
|
|
"fuego": {
|
|
"github": "github.com/sgarciac/fuego",
|
|
"snap": "fuego"
|
|
},
|
|
"g-assist": {
|
|
"snap": "g-assist",
|
|
"github": "github.com/Melvin-Abraham/Google-Assistant-Unofficial-Desktop-Client"
|
|
},
|
|
"gdrive": {
|
|
"brew": "gdrive",
|
|
"github": "github.com/prasmussen/gdrive",
|
|
"yay": "gdrive"
|
|
},
|
|
"ghorg": {
|
|
"github": "github.com/gabrie30/ghorg",
|
|
"yay": "ghorg"
|
|
},
|
|
"gitify": {
|
|
"cask": "gitify",
|
|
"github": "github.com/manosim/gitify",
|
|
"yay": "gitify-bin"
|
|
},
|
|
"gitleaks": {
|
|
"brew": "gitleaks",
|
|
"github": "github.com/zricethezav/gitleaks",
|
|
"pkg": "gitleaks",
|
|
"yay": "gitleaks"
|
|
},
|
|
"gitomatic": {
|
|
"github": "github.com/muesli/gitomatic"
|
|
},
|
|
"glab": {
|
|
"apk": "glab",
|
|
"brew": "glab",
|
|
"github": "github.com/profclems/glab",
|
|
"scoop": "glab",
|
|
"snap": "glab",
|
|
"yay": "gitlab-glab-bin"
|
|
},
|
|
"glow": {
|
|
"brew": "glow",
|
|
"github": "github.com/charmbracelet/glow",
|
|
"pkg": "glow",
|
|
"scoop": "glow",
|
|
"yay": "glow"
|
|
},
|
|
"gojq": {
|
|
"brew": "gojq",
|
|
"github": "github.com/itchyny/gojq",
|
|
"go": "github.com/itchyny/gojq@latest"
|
|
},
|
|
"go-chromecast": {
|
|
"github": "github.com/vishen/go-chromecast",
|
|
"go": "github.com/vishen/go-chromecast@latest"
|
|
},
|
|
"gping": {
|
|
"brew": "gping",
|
|
"cargo": "gping",
|
|
"choco": "gping",
|
|
"github": "github.com/orf/gping",
|
|
"scoop": "gping",
|
|
"pacman": "gping"
|
|
},
|
|
"grex": {
|
|
"brew": "grex",
|
|
"cargo": "grex",
|
|
"choco": "grex",
|
|
"github": "github.com/pemistahl/grex",
|
|
"scoop": "grex"
|
|
},
|
|
"gron": {
|
|
"brew": "gron",
|
|
"github": "github.com/tomnomnom/gron",
|
|
"go": "github.com/tomnomnom/gron@latest"
|
|
},
|
|
"hclq": {
|
|
"github": "github.com/mattolenik/hclq",
|
|
"go": "github.com/mattolenik/hclq@latest"
|
|
},
|
|
"hexyl": {
|
|
"apt": "hexyl",
|
|
"brew": "hexyl",
|
|
"cargo": "hexyl",
|
|
"github": "github.com/sharkdp/hexyl",
|
|
"pacman": "hexyl",
|
|
"pkg": "hexyl",
|
|
"scoop": "hexyl",
|
|
"snap": "hexyl"
|
|
},
|
|
"hey": {
|
|
"brew": "hey",
|
|
"github": "github.com/rakyll/hey"
|
|
},
|
|
"hostctl": {
|
|
"brew": "guumaster/tap/hostctl",
|
|
"github": "github.com/guumaster/hostctl",
|
|
"scoop": "hostctl",
|
|
"yay": "hostctl"
|
|
},
|
|
"htmlq": {
|
|
"brew": "htmlq",
|
|
"cargo": "htmlq",
|
|
"github": "github.com/mgdm/htmlq"
|
|
},
|
|
"hyperfine": {
|
|
"apk": "hyperfine",
|
|
"brew": "hyperfine",
|
|
"cargo": "hyperfine",
|
|
"choco": "hyperfine",
|
|
"dnf": "hyperfine",
|
|
"github": "github.com/sharkdp/hyperfine",
|
|
"pacman": "hyperfine",
|
|
"pkg": "hyperfine"
|
|
},
|
|
"jiq": {
|
|
"github": "github.com/fiatjaf/jiq/cmd/jiq",
|
|
"go": "github.com/fiatjaf/jiq/cmd/jiq@latest"
|
|
},
|
|
"jitsi-meet-electron": {
|
|
"cask": "jisti-meet",
|
|
"choco": "jitsi-meet-electron",
|
|
"github": "github.com/jitsi/jitsi-meet-electron",
|
|
"pkg": "jisti-meet",
|
|
"yay": "jitsi-meet-desktop-bin"
|
|
},
|
|
"jo": {
|
|
"brew": "jo",
|
|
"apt": "jo",
|
|
"snap": "jo",
|
|
"github": "github.com/jpmens/jo",
|
|
"pkg": "jo",
|
|
"scoop": "jo",
|
|
"yay": "jo"
|
|
},
|
|
"jq": {
|
|
"brew": "jq",
|
|
"choco": "jq",
|
|
"apk": "jq",
|
|
"apt": "jq",
|
|
"dnf": "jq",
|
|
"github": "github.com/stedolan/jq",
|
|
"pkg": "jq"
|
|
},
|
|
"kdash": {
|
|
"brew": "kdash-rs/kdash/kdash",
|
|
"cargo": "kdash",
|
|
"choco": "kdash",
|
|
"github": "github.com/kdash-rs/kdash",
|
|
"scoop": "kdash"
|
|
},
|
|
"kn": {
|
|
"brew": "kn",
|
|
"github": "github.com/knative/client",
|
|
"yay": "knative-client-bin"
|
|
},
|
|
"kubenav": {
|
|
"github": "github.com/kubenav/kubenav",
|
|
"yay": "kubenav-bin"
|
|
},
|
|
"license": {
|
|
"go": "github.com/nishanths/license@latest",
|
|
"yay": "nishanths-license-git"
|
|
},
|
|
"linkerd2": {
|
|
"brew": "linkerd",
|
|
"github": "github.com/linkerd/linkerd2",
|
|
"yay": "linkerd"
|
|
},
|
|
"linuxkit": {
|
|
"brew": "linuxkit/linuxkit/linuxkit",
|
|
"github": "github.com/linuxkit/linuxkit"
|
|
},
|
|
"logcli": {
|
|
"brew": "logcli",
|
|
"github": "github.com/grafana/loki",
|
|
"yay": "logcli-git"
|
|
},
|
|
"manta": {
|
|
"cask": "manta",
|
|
"github": "github.com/hql287/Manta"
|
|
},
|
|
"mark-text": {
|
|
"cask": "mark-text",
|
|
"choco": "marktext",
|
|
"github": "github.com/marktext/marktext",
|
|
"yay": "marktext"
|
|
},
|
|
"masscode": {
|
|
"cask": "masscode",
|
|
"github": "github.com/antonreshetov/massCode"
|
|
},
|
|
"mc": {
|
|
"brew": "minio/stable/mc",
|
|
"binary:linux": "https://dl.min.io/client/mc/release/linux-amd64/mc",
|
|
"binary:windows": "https://dl.min.io/client/mc/release/windows-amd64/mc.exe",
|
|
"go": "github.com/minio/mc@latest"
|
|
},
|
|
"mergestat": {
|
|
"brew": "mergestat/mergestat/mergestat",
|
|
"github": "github.com/mergestat/mergestat"
|
|
},
|
|
"mjml-app": {
|
|
"github": "github.com/mjmlio/mjml-app"
|
|
},
|
|
"mkcert": {
|
|
"brew": "mkcert",
|
|
"choco": "mkcert",
|
|
"github": "github.com/FiloSottile/mkcert",
|
|
"pacman": "mkcert",
|
|
"scoop": "mkcert"
|
|
},
|
|
"mockoon": {
|
|
"cask": "mockoon",
|
|
"choco": "mockoon",
|
|
"github": "github.com/mockoon/mockoon",
|
|
"snap": "mockoon",
|
|
"yay": "mockoon-bin"
|
|
},
|
|
"mole": {
|
|
"brew": "davrodpin/homebrew-mole/mole",
|
|
"github": "github.com/davrodpin/mole",
|
|
"yay": "mole-bin"
|
|
},
|
|
"motrix": {
|
|
"cask": "motrix",
|
|
"choco": "motrix",
|
|
"github": "github.com/agalwood/Motrix",
|
|
"scoop": "motrix",
|
|
"yay": "motrix-bin"
|
|
},
|
|
"mqttx": {
|
|
"cask": "mqttx",
|
|
"github": "github.com/emqx/MQTTX",
|
|
"snap": "mqttx",
|
|
"yay": "mqttx-bin"
|
|
},
|
|
"muffet": {
|
|
"brew": "muffet",
|
|
"github": "github.com/raviqqe/muffet",
|
|
"go": "github.com/raviqqe/muffet/v2@latest",
|
|
"yay": "muffet-bin"
|
|
},
|
|
"mullvad-vpn": {
|
|
"cask": "mullvadvpn",
|
|
"github": "github.com/mullvad/mullvadvpn-app",
|
|
"yay": "mullvad-vpn"
|
|
},
|
|
"nebula": {
|
|
"github": "github.com/slackhq/nebula",
|
|
"pacman": "nebula"
|
|
},
|
|
"nnn": {
|
|
"apk": "nnn",
|
|
"apt": "nnn",
|
|
"brew": "nnn",
|
|
"github": "github.com/jarun/nnn",
|
|
"pacman": "nnn",
|
|
"pkg": "nnn"
|
|
},
|
|
"node-prune": {
|
|
"github": "github.com/tj/node-prune",
|
|
"go": "github.com/tj/node-prune@latest"
|
|
},
|
|
"nomino": {
|
|
"cargo": "nomino",
|
|
"github": "github.com/yaa110/nomino",
|
|
"yay": "nomino"
|
|
},
|
|
"nuclear": {
|
|
"cask": "nuclear",
|
|
"choco": "nuclear",
|
|
"github": "github.com/nukeop/nuclear",
|
|
"snap": "nuclear",
|
|
"yay": "nuclear-player-bin"
|
|
},
|
|
"osquery": {
|
|
"cask": "osquery",
|
|
"choco": "osquery",
|
|
"github": "github.com/osquery/osquery",
|
|
"yay": "osquery-git"
|
|
},
|
|
"ots": {
|
|
"brew": "ots",
|
|
"github": "github.com/sniptt-official/ots",
|
|
"go": "github.com/sniptt-official/ots@latest"
|
|
},
|
|
"oq": {
|
|
"brew": "oq",
|
|
"github": "github.com/Blacksmoke16/oq",
|
|
"snap": "oq",
|
|
"yay": "oq"
|
|
},
|
|
"page-fetch": {
|
|
"go": "github.com/detectify/page-fetch@latest"
|
|
},
|
|
"pass": {
|
|
"apt": "pass",
|
|
"brew": "pass",
|
|
"dnf": "pass",
|
|
"pacman": "pass",
|
|
"pkg": "password-store"
|
|
},
|
|
"pastel": {
|
|
"brew": "pastel",
|
|
"cargo": "pastel",
|
|
"github": "github.com/sharkdp/pastel",
|
|
"snap": "pastel",
|
|
"yay": "pastel"
|
|
},
|
|
"peco": {
|
|
"apt": "peco",
|
|
"brew": "peco",
|
|
"choco": "peco",
|
|
"github": "github.com/peco/peco",
|
|
"pacman": "peco"
|
|
},
|
|
"pony": {
|
|
"github": "github.com/jessfraz/pony",
|
|
"go": "github.com/jessfraz/pony@latest"
|
|
},
|
|
"pretzel": {
|
|
"github": "github.com/amiechen/pretzel"
|
|
},
|
|
"procs": {
|
|
"apk": "procs",
|
|
"brew": "procs",
|
|
"cargo": "procs",
|
|
"dnf": "procs",
|
|
"github": "github.com/dalance/procs",
|
|
"pacman": "procs",
|
|
"scoop": "procs",
|
|
"snap": "procs"
|
|
},
|
|
"psu": {
|
|
"github": "github.com/greenled/portainer-stack-utils"
|
|
},
|
|
"pup": {
|
|
"brew": "pup",
|
|
"github": "github.com/ericchiang/pup",
|
|
"go": "github.com/ericchiang/pup@latest"
|
|
},
|
|
"q": {
|
|
"brew": "q",
|
|
"github": "github.com/harelba/q"
|
|
},
|
|
"raindrop": {
|
|
"cask": "raindropio",
|
|
"github": "github.com/raindropio/desktop"
|
|
},
|
|
"rancher": {
|
|
"brew": "rancher-cli",
|
|
"github": "github.com/rancher/cli",
|
|
"yay": "rancher-cli-bin"
|
|
},
|
|
"responsively": {
|
|
"cask": "responsively",
|
|
"choco": "responsively",
|
|
"github": "github.com/responsively-org/responsively-app"
|
|
},
|
|
"rip": {
|
|
"brew": "rm-improved",
|
|
"cargo": "rm-improved",
|
|
"github": "github.com/nivekuil/rip",
|
|
"yay": "rm-improved"
|
|
},
|
|
"runjs": {
|
|
"cask": "runjs",
|
|
"choco": "runjs",
|
|
"github": "github.com/lukehaas/RunJS",
|
|
"yay": "runjs-bin"
|
|
},
|
|
"s5cmd": {
|
|
"brew": "peak/tap/s5cmd",
|
|
"github": "github.com/peak/s5cmd",
|
|
"go": "github.com/peak/s5cmd@latest"
|
|
},
|
|
"schema": {
|
|
"go": "github.com/Confbase/schema"
|
|
},
|
|
"scrcpy": {
|
|
"apt": "scrcpy",
|
|
"brew": "scrcpy",
|
|
"choco": "scrcpy",
|
|
"dnf": "scrcpy",
|
|
"github": "github.com/Genymobile/scrcpy",
|
|
"pkg": "scrcpy",
|
|
"snap": "scrcpy",
|
|
"yay": "scrcpy"
|
|
},
|
|
"scrcpy-gui": {
|
|
"github": "github.com/Tomotoes/scrcpy-gui"
|
|
},
|
|
"sd": {
|
|
"apk": "sd",
|
|
"brew": "sd",
|
|
"cargo": "sd",
|
|
"choco": "sd-cli",
|
|
"dnf": "sd",
|
|
"github": "github.com/chmln/sd",
|
|
"pacman": "sd",
|
|
"pkg": "sd"
|
|
},
|
|
"sftpgo": {
|
|
"brew": "sftpgo",
|
|
"choco": "sftpgo",
|
|
"github": "github.com/drakkan/sftpgo",
|
|
"pkg": "sftpgo",
|
|
"yay": "sftpgo-bin"
|
|
},
|
|
"shfmt": {
|
|
"apk": "shfmt",
|
|
"brew": "shfmt",
|
|
"github": "github.com/mvdan/sh",
|
|
"go": "mvdan.cc/sh/v3/cmd/shfmt@latest",
|
|
"pacman": "shfmt",
|
|
"pkg": "shfmt",
|
|
"scoop": "shfmt",
|
|
"snap": "shfmt"
|
|
},
|
|
"skm": {
|
|
"brew": "timothyye/tap/skm",
|
|
"github": "github.com/TimothyYe/skm",
|
|
"go": "github.com/TimothyYe/skm/cmd/skm@latest"
|
|
},
|
|
"skype": {
|
|
"cask": "skype",
|
|
"choco": "skype",
|
|
"snap": "skype"
|
|
},
|
|
"slack": {
|
|
"cask": "slack",
|
|
"choco": "slack",
|
|
"snap": "slack"
|
|
},
|
|
"sqlectron": {
|
|
"cask": "sqlectron",
|
|
"github": "github.com/sqlectron/sqlectron-gui",
|
|
"yay": "sqlectron-gui"
|
|
},
|
|
"ssh-vault": {
|
|
"brew": "ssh-vault",
|
|
"github": "github.com/ssh-vault/ssh-vault"
|
|
},
|
|
"ssl-proxy": {
|
|
"github": "github.com/suyashkumar/ssl-proxy"
|
|
},
|
|
"staticcheck": {
|
|
"apt": "go-staticcheck",
|
|
"brew": "staticcheck",
|
|
"dnf": "golang-honnef-tools",
|
|
"go": "honnef.co/go/tools/cmd/staticcheck@latest",
|
|
"pacman": "staticcheck",
|
|
"port": "staticcheck",
|
|
"scoop": "staticcheck"
|
|
},
|
|
"switchhosts": {
|
|
"github": "github.com/oldj/SwitchHosts"
|
|
},
|
|
"sync-ssh-keys": {
|
|
"github": "github.com/samber/sync-ssh-keys",
|
|
"yay": "sync-ssh-keys-bin"
|
|
},
|
|
"sysbench": {
|
|
"apk": "sysbench",
|
|
"apt": "sysbench",
|
|
"brew": "sysbench",
|
|
"dnf": "sysbench",
|
|
"pacman": "sysbench",
|
|
"pkg": "sysbench"
|
|
},
|
|
"sysget": {
|
|
"github": "github.com/Eugeny/tabby"
|
|
},
|
|
"tabby": {
|
|
"cask": "tabby",
|
|
"choco": "tabby",
|
|
"github": "github.com/Eugeny/tabby"
|
|
},
|
|
"task": {
|
|
"brew": "go-task/tap/go-task",
|
|
"choco": "go-task",
|
|
"go": "github.com/go-task/task/v3/cmd/task@latest",
|
|
"github": "github.com/go-task/task",
|
|
"scoop": "task"
|
|
},
|
|
"teleport": {
|
|
"brew": "teleport",
|
|
"pkg": "teleport",
|
|
"yay": "teleport-bin"
|
|
},
|
|
"teller": {
|
|
"brew": "spectralops/tap/teller",
|
|
"github": "github.com/tellerops/teller"
|
|
},
|
|
"tflint": {
|
|
"brew": "tflint",
|
|
"choco": "tflint",
|
|
"github": "github.com/terraform-linters/tflint"
|
|
},
|
|
"tilt": {
|
|
"brew": "tilt",
|
|
"github": "github.com/tilt-dev/tilt",
|
|
"yay": "tilt-bin"
|
|
},
|
|
"temps": {
|
|
"github": "github.com/jackd248/temps"
|
|
},
|
|
"tokei": {
|
|
"apk": "tokei",
|
|
"brew": "tokei",
|
|
"cargo": "tokei",
|
|
"dnf": "tokei",
|
|
"github": "github.com/XAMPPRocky/tokei",
|
|
"pacman": "tokei",
|
|
"pkg": "tokei",
|
|
"scoop": "tokei"
|
|
},
|
|
"transfer": {
|
|
"github": "github.com/rinetd/transfer",
|
|
"go": "github.com/rinetd/transfer@latest"
|
|
},
|
|
"trivy": {
|
|
"github": "github.com/aquasecurity/trivy",
|
|
"yay": "trivy-bin"
|
|
},
|
|
"up": {
|
|
"brew": "up",
|
|
"github": "github.com/akavel/up",
|
|
"pkg": "up",
|
|
"yay": "up"
|
|
},
|
|
"vault": {
|
|
"brew": "hashicorp/tap/vault",
|
|
"yay": "vault-cli"
|
|
},
|
|
"vector": {
|
|
"brew": "vectordotdev/brew/vector"
|
|
},
|
|
"velero": {
|
|
"brew": "velero",
|
|
"choco": "velero",
|
|
"github": "github.com/vmware-tanzu/velero",
|
|
"yay": "velero-bin"
|
|
},
|
|
"waypoint": {
|
|
"brew": "hashicorp/tap/waypoint",
|
|
"scoop": "waypoint"
|
|
},
|
|
"websocat": {
|
|
"brew": "websocat",
|
|
"cargo": "websocat",
|
|
"github": "github.com/vi/websocat",
|
|
"pkg": "websocat",
|
|
"port": "websocat"
|
|
},
|
|
"webtorrent": {
|
|
"cask": "webtorrent",
|
|
"choco": "webtorrent-desktop",
|
|
"github": "github.com/webtorrent/webtorrent-desktop",
|
|
"yay": "webtorrent-desktop"
|
|
},
|
|
"whaler": {
|
|
"github": "github.com/P3GLEG/Whaler"
|
|
},
|
|
"winrm-cli": {
|
|
"yay": "winrm-cli-git"
|
|
},
|
|
"wkhtmltopdf": {
|
|
"apt": "wkhtmltopdf",
|
|
"cask": "wkhtmltopdf",
|
|
"choco": "wkhtmltopdf",
|
|
"github": "github.com/wkhtmltopdf/wkhtmltopdf",
|
|
"pacman": "wkhtmltopdf"
|
|
},
|
|
"xurls": {
|
|
"go": "mvdan.cc/xurls/v2/cmd/xurls@latest",
|
|
"github": "github.com/mvdan/xurls"
|
|
},
|
|
"ykman": {
|
|
"brew": "ykman",
|
|
"pipx": "yubikey-manager"
|
|
},
|
|
"yq": {
|
|
"brew": "yq",
|
|
"choco": "yq",
|
|
"apk": "yq",
|
|
"github": "github.com/stedolan/jq",
|
|
"go": "github.com/mikefarah/yq/v4@latest",
|
|
"snap": "yq"
|
|
},
|
|
"yubikey-authenticator": {
|
|
"ansible:darwin": "professormanhattan.yubikey",
|
|
"choco": "yubico-authenticator",
|
|
"flatpak": "com.yubico.yubioath"
|
|
},
|
|
"yubikey-manager": {
|
|
"brew": "ykman",
|
|
"dnf": "yubikey-manager",
|
|
"pacman": "yubikey-manager",
|
|
"pipx": "yubikey-manager"
|
|
},
|
|
"yubikey-manager-qt": {
|
|
"ansible:darwin": "professormanhattan.yubikey",
|
|
"appimage": "https://developers.yubico.com/yubikey-manager-qt/Releases/yubikey-manager-qt-1.2.4b-linux.AppImage",
|
|
"choco": "yubikey-manager",
|
|
"dnf": "yubikey-manager-qt",
|
|
"pacman": "yubikey-manager-qt",
|
|
"scoop": "yubikey-manager-qt"
|
|
}
|
|
},
|
|
"installerPostInstallScripts": {
|
|
"astronvim": "nvim --headless -c 'autocmd User PackerComplete quitall'\n",
|
|
"bottom": {
|
|
"snap": "sudo snap connect bottom:mount-observe\nsudo snap connect bottom:hardware-observe\nsudo snap connect bottom:system-observe\nsudo snap connect bottom:process-control\n"
|
|
},
|
|
"gdu": {
|
|
"brew": "brew link --overwrite gdu",
|
|
"snap": "sudo snap connect gdu-disk-usage-analyzer:mount-observe :mount-observe\nsudo snap connect gdu-disk-usage-analyzer:system-backup :system-backup\nsudo snap alias gdu-disk-usage-analyzer.gdu gdu\n"
|
|
},
|
|
"git-lfs": "git lfs install",
|
|
"nb": "nb completions install",
|
|
"oh-my-posh": {
|
|
"scoop": "clink autorun install"
|
|
},
|
|
"pipx": {
|
|
"brew": "pipx ensurepath"
|
|
},
|
|
"python": {
|
|
"brew": "python3 -m pip install --upgrade setuptools\npython3 -m pip install --upgrade pip\n"
|
|
},
|
|
"volta": "volta setup\nvolta install node@latest\n"
|
|
},
|
|
"softwarePlugins": {
|
|
"dotnet": {
|
|
"plugins": [
|
|
"Microsoft.CST.AttackSurfaceAnalyzer.CLI"
|
|
]
|
|
},
|
|
"helm": {
|
|
"plugins": [
|
|
"https://github.com/databus23/helm-diff",
|
|
"https://github.com/jkroepke/helm-secrets"
|
|
]
|
|
},
|
|
"krew": {
|
|
"plugins": [
|
|
"access-matrix",
|
|
"datree",
|
|
"deprecations",
|
|
"get-all",
|
|
"konfig",
|
|
"modify-secret",
|
|
"neat",
|
|
"node-shell",
|
|
"resource-capacity",
|
|
"score",
|
|
"sniff",
|
|
"tree",
|
|
"tunnel",
|
|
"view-allocations",
|
|
"who-can"
|
|
]
|
|
},
|
|
"quicklook": {
|
|
"plugins": [
|
|
{
|
|
"plugin": "apparency",
|
|
"corporate": false
|
|
},
|
|
"provisionql",
|
|
"qlcolorcode",
|
|
"qlimagesize",
|
|
"qlmarkdown",
|
|
"qlstephen",
|
|
"qlvideo",
|
|
"quicklook-json",
|
|
"quicklookapk",
|
|
{
|
|
"plugin": "suspicious-package",
|
|
"corporate": false
|
|
},
|
|
"webpquicklook"
|
|
]
|
|
},
|
|
"vagrant": {
|
|
"plugins": [
|
|
"vagrant-bindfs",
|
|
"vagrant-digitalocean",
|
|
"vagrant-google",
|
|
"vagrant-libvirt",
|
|
"vagrant-parallels",
|
|
"vagrant-share",
|
|
"vagrant-vmware-desktop",
|
|
"vagrant-vbguest"
|
|
]
|
|
},
|
|
"vim": {
|
|
"plugins": [
|
|
"https://github.com/dense-analysis/ale.git",
|
|
"https://github.com/pearofducks/ansible-vim.git",
|
|
"https://github.com/neoclide/coc.nvim.git",
|
|
"https://github.com/ekalinin/dockerfile.vim.git",
|
|
"https://github.com/editorconfig/editorconfig-vim.git",
|
|
"https://github.com/junegunn/fzf.git",
|
|
"https://github.com/junegunn/fzf.vim.git",
|
|
"https://github.com/itchyny/lightline.vim.git",
|
|
"https://github.com/scrooloose/nerdtree.git",
|
|
"https://github.com/stanangeloff/php.vim.git",
|
|
"https://github.com/hdima/python-syntax.git",
|
|
"https://github.com/vim-syntastic/syntastic.git",
|
|
"https://github.com/vim-airline/vim-airline.git",
|
|
"https://github.com/kristijanhusak/vim-carbon-now-sh.git",
|
|
"https://github.com/ryanoasis/vim-devicons.git",
|
|
"https://github.com/tpope/vim-fugitive.git",
|
|
"https://github.com/airblade/vim-gitgutter.git",
|
|
"https://github.com/fatih/vim-go.git",
|
|
"https://github.com/pangloss/vim-javascript.git",
|
|
"https://github.com/mxw/vim-jsx.git",
|
|
"https://github.com/plasticboy/vim-markdown.git",
|
|
"https://github.com/terryma/vim-multiple-cursors.git",
|
|
"https://github.com/prettier/vim-prettier.git",
|
|
"https://github.com/tpope/vim-sensible.git",
|
|
"https://github.com/tpope/vim-surround.git",
|
|
"https://github.com/nanotee/zoxide.vim.git"
|
|
]
|
|
},
|
|
"visualStudioCode": {
|
|
"plugins": [
|
|
"Angular.ng-template",
|
|
"attilabuti.vscode-mjml",
|
|
"bierner.markdown-emoji",
|
|
"ChakrounAnas.turbo-console-log",
|
|
"ChFlick.firecode",
|
|
"chrmarti.regex",
|
|
"cweijan.vscode-mysql-client2",
|
|
"DavidAnson.vscode-markdownlint",
|
|
"dbaeumer.vscode-eslint",
|
|
"denoland.vscode-deno",
|
|
"eamodio.gitlens",
|
|
"EditorConfig.EditorConfig",
|
|
"esbenp.prettier-vscode",
|
|
"ericadamski.carbon-now-sh",
|
|
"firsttris.vscode-jest-runner",
|
|
"formulahendry.auto-rename-tag",
|
|
"formulahendry.code-runner",
|
|
"GitHub.vscode-pull-request-github",
|
|
"GitLab.gitlab-workflow",
|
|
"GoogleCloudTools.cloudcode",
|
|
"golang.Go",
|
|
"HashiCorp.terraform",
|
|
"hediet.vscode-drawio",
|
|
"IBM.output-colorizer",
|
|
"Kelvin.vscode-sshfs",
|
|
"mads-hartmann.bash-ide-vscode",
|
|
"ms-azuretools.vscode-docker",
|
|
"ms-kubernetes-tools.vscode-kubernetes-tools",
|
|
"ms-vscode-remote.remote-containers",
|
|
"ms-vscode-remote.remote-ssh",
|
|
"ms-vscode-remote.remote-wsl",
|
|
"ms-python.python",
|
|
"ms-vscode.PowerShell",
|
|
"MS-vsliveshare.vsliveshare",
|
|
"MS-vsliveshare.vsliveshare-audio",
|
|
"njpwerner.autodocstring",
|
|
"nrwl.angular-console",
|
|
"philnash.ngrok-for-vscode",
|
|
"PKief.material-icon-theme",
|
|
"pranaygp.vscode-css-peek",
|
|
"quicktype.quicktype",
|
|
"rbbit.typescript-hero",
|
|
"redhat.ansible",
|
|
"redhat.vscode-yaml",
|
|
"richie5um2.vscode-sort-json",
|
|
"Rubymaniac.vscode-paste-and-indent",
|
|
"salbert.comment-ts",
|
|
"shd101wyy.markdown-preview-enhanced",
|
|
"softwaredotcom.swdc-vscode",
|
|
"steoates.autoimport",
|
|
"stylelint.vscode-stylelint",
|
|
"timonwong.shellcheck",
|
|
"toba.vsfire",
|
|
"tyriar.sort-lines",
|
|
"usernamehw.errorlens",
|
|
"valentjn.vscode-ltex",
|
|
"VisualStudioExptTeam.vscodeintellicode",
|
|
"vsciot-vscode.vscode-arduino",
|
|
"vsls-contrib.codetour",
|
|
"vsls-contrib.gistfs",
|
|
"wayou.vscode-todo-highlight",
|
|
"wix.vscode-import-cost",
|
|
"yatki.vscode-surround"
|
|
]
|
|
}
|
|
},
|
|
"installerPreference": [
|
|
"flatpak",
|
|
"snap",
|
|
"whalebrew",
|
|
"apt",
|
|
"dnf",
|
|
"pacman",
|
|
"apk",
|
|
"nix",
|
|
"pkg",
|
|
"zypper",
|
|
"brew",
|
|
"crew",
|
|
"port",
|
|
"yay",
|
|
"choco",
|
|
"scoop",
|
|
"winget",
|
|
"go",
|
|
"cargo",
|
|
"npm",
|
|
"pipx",
|
|
"gem",
|
|
"cask",
|
|
"bpkg",
|
|
"basher",
|
|
"appimage",
|
|
"binary"
|
|
]
|
|
}
|
|
|
|
|
|
### Creates the installOrders object which maps package managers to arrays of packages to install
|
|
function generateInstallOrders() {
|
|
const installOrders = {}
|
|
const packagesToInstall = process.argv.slice(1)
|
|
const preferenceOrder = installData.installerPreference[OSType()]
|
|
const softwarePackages = installData.softwarePackages
|
|
for(let package of packagesToInstall) {
|
|
if (softwarePackages[package]) {
|
|
console.log(package + ' found in map')
|
|
for (let preference of preferenceOrder) {
|
|
if (softwarePackages[package][preference]) {
|
|
console.log('Using ' + preference + ' to install ' + package)
|
|
if (!installOrders[preference]) {
|
|
installOrders[preference] = []
|
|
}
|
|
installOrders[preference].push(package)
|
|
break
|
|
}
|
|
}
|
|
} else {
|
|
console.log(package + ' not found in map')
|
|
}
|
|
}
|
|
return installOrders
|
|
}
|
|
|
|
### Acquire OS type
|
|
async function OSType() {
|
|
const osType = await $`
|
|
if [ -d /Applications ] && [ -d /Library ]; then
|
|
echo 'darwin'
|
|
elif command -v apt > /dev/null; then
|
|
echo 'apt'
|
|
elif command -v dnf > /dev/null; then
|
|
echo 'dnf'
|
|
elif command -v pacman > /dev/null; then
|
|
echo 'pacman'
|
|
elif command -v zypper > /dev/null; then
|
|
echo 'zypper'
|
|
elif command -v pkg > /dev/null; then
|
|
echo 'freebsd'
|
|
else
|
|
echo 'windows'
|
|
fi
|
|
`
|
|
return osType
|
|
}
|
|
|
|
### Post-install hook
|
|
async function afterInstall(packageManager) {
|
|
const PACKAGE_MANAGER = packageManager
|
|
await $`
|
|
if [ "$PACKAGE_MANAGER" = 'appimage' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'apk' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'apt' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'basher' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'binary' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'bpkg' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'brew' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'cargo' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'cask' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'choco' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'crew' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'dnf' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'flatpak' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'gem' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'go' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'nix' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'npm' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'pacman' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'pkg' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'port' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'scoop' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'snap' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'whalebrew' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'winget' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'yay' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'zypper' ]; then
|
|
fi
|
|
`
|
|
}
|
|
|
|
### Pre-install hook
|
|
async function beforeInstall(packageManager) {
|
|
const PACKAGE_MANAGER = packageManager
|
|
await $`
|
|
if [ "$PACKAGE_MANAGER" = 'appimage' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'apk' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'apt' ]; then
|
|
sudo apt-get update
|
|
elif [ "$PACKAGE_MANAGER" = 'basher' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'binary' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'bpkg' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'brew' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'cargo' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'cask' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'choco' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'crew' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'dnf' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'flatpak' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'gem' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'go' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'nix' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'npm' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'pacman' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'pkg' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'port' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'scoop' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'snap' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'whalebrew' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'winget' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'yay' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'zypper' ]; then
|
|
fi
|
|
`
|
|
}
|
|
|
|
### Ensure the package manager is available
|
|
async function ensurePackageManager(packageManager) {
|
|
const PACKAGE_MANAGER = packageManager
|
|
await $`
|
|
### Ensures Homebrew is installed
|
|
ensurePackageManagerHomebrew() {
|
|
if ! command -v brew > /dev/null; then
|
|
if type sudo &> /dev/null && sudo -n true; then
|
|
echo | bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
|
else
|
|
logg info 'Homebrew is not installed. Password may be required.'
|
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" || BREW_EXIT_CODE="$?"
|
|
if [ -n "$BREW_EXIT_CODE" ]; then
|
|
if command -v brew > /dev/null; then
|
|
logg warn 'Homebrew was installed but part of the installation failed. Attempting to fix..'
|
|
BREW_DIRS="share/man share/doc share/zsh/site-functions etc/bash_completion.d"
|
|
for BREW_DIR in $BREW_DIRS; do
|
|
if [ -d "$(brew --prefix)/$BREW_DIR" ]; then
|
|
sudo chown -R "$(whoami)" "$(brew --prefix)/$BREW_DIR"
|
|
fi
|
|
done
|
|
brew update --force --quiet
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
if [ "$PACKAGE_MANAGER" = 'appimage' ]; then
|
|
# Do nothing
|
|
elif [ "$PACKAGE_MANAGER" = 'apk' ]; then
|
|
if command -v apk > /dev/null; then
|
|
logg '`apk` is available'
|
|
else
|
|
logg error '`apk` is not installed' && exit 102
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'apt' ]; then
|
|
if command -v apt > /dev/null; then
|
|
logg '`apt` is available'
|
|
else
|
|
logg error '`apt` is not installed' && exit 103
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'basher' ]; then
|
|
if command -v basher > /dev/null; then
|
|
logg '`basher` is available'
|
|
else
|
|
# TODO - Install basher
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'binary' ]; then
|
|
# Do nothing
|
|
elif [ "$PACKAGE_MANAGER" = 'bpkg' ]; then
|
|
if command -v bpkg > /dev/null; then
|
|
logg '`bpkg` is available'
|
|
else
|
|
# TODO - Install bpkg
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'brew' ] || [ "$PACKAGE_MANAGER" = 'cask' ]; then
|
|
if command -v brew > /dev/null; then
|
|
logg '`brew` is available'
|
|
else
|
|
ensurePackageManagerHomebrew
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'cargo' ]; then
|
|
if command -v cargo > /dev/null; then
|
|
logg '`cargo` is available'
|
|
else
|
|
# TODO - Install Cargo via Homebrew based method
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'choco' ]; then
|
|
if command -v choco > /dev/null; then
|
|
logg '`choco` is available'
|
|
else
|
|
logg 'Installing Chocolatey'
|
|
powershell "Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))"
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'crew' ]; then
|
|
if command -v crew > /dev/null; then
|
|
logg '`crew` is available'
|
|
else
|
|
# Source: https://github.com/chromebrew/chromebrew
|
|
curl -Ls git.io/vddgY | bash
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'dnf' ]; then
|
|
if command -v dnf > /dev/null; then
|
|
logg '`dnf` is available'
|
|
elif command -v yum > /dev/null; then
|
|
logg '`yum` is available'
|
|
else
|
|
logg 'Both `dnf` and `yum` are not available' && exit 110
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'flatpak' ]; then
|
|
if command -v flatpak > /dev/null; then
|
|
logg '`flatpak` is available'
|
|
else
|
|
ensurePackageManagerHomebrew
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'gem' ]; then
|
|
if command -v gem > /dev/null; then
|
|
logg '`gem` is available'
|
|
else
|
|
ensurePackageManagerHomebrew
|
|
# TODO - is this enough to make `gem install` available?
|
|
brew install ruby
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'go' ]; then
|
|
if command -v go > /dev/null; then
|
|
logg '`go` is available'
|
|
else
|
|
ensurePackageManagerHomebrew
|
|
brew install go
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'nix' ]; then
|
|
if command -v nix > /dev/null; then
|
|
logg '`nix` is available'
|
|
elif [ -d /Applications ] && [ -d /Library ]; then
|
|
# macOS
|
|
sh <(curl -L https://nixos.org/nix/install)
|
|
else
|
|
# Linux
|
|
sh <(curl -L https://nixos.org/nix/install) --daemon
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'npm' ]; then
|
|
if command -v volta > /dev/null && command -v npm > /dev/null && command -v node > /dev/null; then
|
|
logg '`volta`, `npm`, and `node` are all available'
|
|
else
|
|
if ! command -v volta > /dev/null; then
|
|
ensurePackageManagerHomebrew
|
|
if ! command -v volta > /dev/null; then
|
|
logg 'Installing `volta` via `brew`'
|
|
brew install volta
|
|
fi
|
|
logg 'Ensuring `node` and `npm` are installed using `volta`'
|
|
if [ -z "$VOLTA_HOME" ]; then
|
|
volta setup
|
|
fi
|
|
export PATH="$VOLTA_HOME/bin:$PATH"
|
|
volta install node
|
|
fi
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'pacman' ]; then
|
|
if command -v pacman > /dev/null; then
|
|
logg '`pacman` is available'
|
|
else
|
|
logg '`pacman` is not installed' && exit 106
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'pkg' ]; then
|
|
if command -v pkg > /dev/null; then
|
|
logg '`pkg` is available'
|
|
else
|
|
logg '`pkg` is not installed' && exit 107
|
|
elif [ "$PACKAGE_MANAGER" = 'port' ]; then
|
|
if command -v port > /dev/null; then
|
|
logg '`port` is available'
|
|
else
|
|
# TODO - Install port on macOS
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'scoop' ]; then
|
|
if command -v scoop > /dev/null; then
|
|
logg '`scoop` is available'
|
|
else
|
|
# TODO - does this work? can we run PowerShell in a bash script?
|
|
powershell 'Set-ExecutionPolicy RemoteSigned -Scope CurrentUser'
|
|
powershell 'irm get.scoop.sh | iex'
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'snap' ]; then
|
|
if command -v snap > /dev/null; then
|
|
logg '`snap` is available'
|
|
else
|
|
logg 'Installing `snap` via system package manager'
|
|
if command -v apt > /dev/null; then
|
|
# Source: https://snapcraft.io/docs/installing-snap-on-linux-mint
|
|
if [ -f /etc/apt/preferences.d/nosnap.pref ]; then
|
|
sudo mv /etc/apt/preferences.d/nosnap.pref /etc/apt/nosnap.pref.bak
|
|
fi
|
|
sudo apt install -y snapd
|
|
# TODO: Following may be required on Kali -> https://snapcraft.io/docs/installing-snap-on-kali
|
|
# systemctl enable --now snapd apparmor
|
|
elif command -v dnf > /dev/null; then
|
|
sudo dnf install -y snapd
|
|
if [ ! -d /snap ]; then
|
|
sudo ln -s /var/lib/snapd/snap /snap
|
|
fi
|
|
elif command -v yum > /dev/null; then
|
|
sudo yum install -y snapd
|
|
sudo systemctl enable --now snapd.socket
|
|
if [ ! -d /snap ]; then
|
|
sudo ln -s /var/lib/snapd/snap /snap
|
|
fi
|
|
elif command -v pacman > /dev/null; then
|
|
if [ -f /etc/arch-release ]; then
|
|
sudo git clone https://aur.archlinux.org/snapd.git /usr/local/src/snapd
|
|
cd /usr/local/src/snapd
|
|
sudo makepkg -si
|
|
else
|
|
sudo pacman -S snapd
|
|
sudo systemctl enable --now snapd.socket
|
|
if [ ! -d /snap ]; then
|
|
sudo ln -s /var/lib/snapd/snap /snap
|
|
fi
|
|
fi
|
|
elif command -v zypper > /dev/null; then
|
|
# TODO: See https://snapcraft.io/docs/installing-snap-on-opensuse
|
|
else
|
|
logg 'Could not find a package manager to install `snap` with'
|
|
fi
|
|
if command -v snap > /dev/null; then
|
|
logg 'Ensuring latest `snap` is available by running `sudo snap install core`'
|
|
sudo snap install core
|
|
fi
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'whalebrew' ];
|
|
if command -v whalebrew > /dev/null; then
|
|
logg '`whalebrew` is available'
|
|
else
|
|
ensurePackageManagerHomebrew
|
|
logg 'Installing `whalebrew` via `brew`'
|
|
brew install whalebrew
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'winget' ]; then
|
|
# TODO
|
|
elif [ "$PACKAGE_MANAGER" = 'yay' ]; then
|
|
if command -v yay > /dev/null; then
|
|
logg '`yay` is available'
|
|
else
|
|
logg 'Installing `yay` requirements'
|
|
sudo pacman -S --needed base-devel git
|
|
if [ -d /usr/local/src ]; then
|
|
logg 'Cloning `yay` source code to `/usr/local/src/yay`'
|
|
git clone https://aur.archlinux.org/yay.git /usr/local/src/yay
|
|
cd /usr/local/src/yay
|
|
makepkg -si
|
|
logg '`yay` installed`
|
|
else
|
|
logg error '`/usr/local/src` is not present on the system' && exit 105
|
|
fi
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'zypper' ]; then
|
|
if command -v zypper > /dev/null; then
|
|
logg '`zypper` is available'
|
|
else
|
|
logg '`zypper` is not installed' && exit 104
|
|
fi
|
|
fi
|
|
`
|
|
}
|
|
|
|
### Installs a list of packages via the specified package manager
|
|
async function installPackageList(packageManager, packages) {
|
|
const PACKAGE_MANAGER = packageManager
|
|
const PACKAGES = packages
|
|
await $`
|
|
logg 'Installing '"${PACKAGES}"' via `'"${PACKAGE_MANAGER}"'`'
|
|
if [ "$PACKAGE_MANAGER" = 'appimage' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'apk' ]; then
|
|
sudo apk add ${PACKAGES}
|
|
elif [ "$PACKAGE_MANAGER" = 'apt' ]; then
|
|
sudo apt-get install -y ${PACKAGES}
|
|
elif [ "$PACKAGE_MANAGER" = 'basher' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'binary' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'bpkg' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'brew' ]; then
|
|
brew install ${PACKAGES}
|
|
elif [ "$PACKAGE_MANAGER" = 'cargo' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'cask' ]; then
|
|
brew install --cask ${PACKAGES}
|
|
elif [ "$PACKAGE_MANAGER" = 'choco' ]; then
|
|
choco install -y ${choco}
|
|
elif [ "$PACKAGE_MANAGER" = 'crew' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'dnf' ];
|
|
if command -v dnf > /dev/null; then
|
|
dnf install -y ${PACKAGES}
|
|
elif command -v yum > /dev/null; then
|
|
yum install -y ${PACKAGES}
|
|
else
|
|
logg warn 'Both `dnf` and `yum` are not present on the system'
|
|
fi
|
|
elif [ "$PACKAGE_MANAGER" = 'flatpak' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'gem' ]; then
|
|
gem install ${PACKAGES}
|
|
elif [ "$PACKAGE_MANAGER" = 'go' ]; then
|
|
for GO_PACKAGE in ${PACKAGES}; do
|
|
go install "$GO_PACKAGE"
|
|
elif [ "$PACKAGE_MANAGER" = 'nix' ]; then
|
|
# TODO
|
|
elif [ "$PACKAGE_MANAGER" = 'npm' ]; then
|
|
volta install ${PACKAGES}
|
|
elif [ "$PACKAGE_MANAGER" = 'pacman' ]; then
|
|
sudo pacman -Sy --noconfirm --needed ${PACKAGES}
|
|
elif [ "$PACKAGE_MANAGER" = 'pkg' ]; then
|
|
# TODO
|
|
elif [ "$PACKAGE_MANAGER" = 'port' ]; then
|
|
sudo port install ${PACKAGES}
|
|
elif [ "$PACKAGE_MANAGER" = 'scoop' ]; then
|
|
scoop install ${PACKAGES}
|
|
elif [ "$PACKAGE_MANAGER" = 'snap' ]; then
|
|
sudo snap install -y ${PACKAGES}
|
|
elif [ "$PACKAGE_MANAGER" = 'whalebrew' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'winget' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'yay' ]; then
|
|
elif [ "$PACKAGE_MANAGER" = 'zypper' ]; then
|
|
fi
|
|
`
|
|
}
|
|
|
|
async function main() {
|
|
const installOrders = generateInstallOrders()
|
|
const packageManagers = Object.keys(installOrders)
|
|
for (const packageManager of packageManagers) {
|
|
await ensurePackageManager(packageManager)
|
|
}
|
|
for (const packageManager of packageManagers) {
|
|
await beforeInstall(packageManager)
|
|
}
|
|
for (const packageManager of packageManagers) {
|
|
const asyncOrders = []
|
|
asyncOrders.push(Promise.resolve(installPackageList(packageManager, installOrders[packageManager])))
|
|
await Promise.all(asyncOrders)
|
|
}
|
|
for (const packageManager of packageManagers) {
|
|
await afterInstall(packageManager)
|
|
}
|
|
}
|
|
|
|
main()
|