install.fairie/dotfiles/.local/share/chezmoi/home/dot_local/bin/executable_install-software
Brian Zalewski 1b3e6bf596 Update dotfiles/.local/share/chezmoi/home/dot_local/bin/executable_install-software, dotfiles/.local/share/chezmoi/home/.chezmoidata.yaml, dotfiles/.local/share/chezmoi/home/.chezmoiscripts/windows/run_onchange_before_11-install-windows-packages.tmpl
Deleted dotfiles/.local/share/chezmoi/home/.chezmoiscripts/archlinux/run_onchange_before_11-install-archlinux-packages.tmpl, dotfiles/.local/share/chezmoi/home/.chezmoiscripts/centos/run_onchange_before_10-install-centos-packages.tmpl, dotfiles/.local/share/chezmoi/home/.chezmoiscripts/darwin/run_onchange_before_11-install-darwin-packages.tmpl, dotfiles/.local/share/chezmoi/home/.chezmoiscripts/debian/run_onchange_before_11-install-debian-packages.tmpl, dotfiles/.local/share/chezmoi/home/.chezmoiscripts/fedora/run_onchange_before_11-install-fedora-packages.tmpl, dotfiles/.local/share/chezmoi/home/.chezmoiscripts/freebsd/run_onchange_before_10-install-freebsd-dependencies.tmpl, dotfiles/.local/share/chezmoi/home/.chezmoiscripts/opensuse/run_onchange_before_11-install-opensuse-packages.tmpl, dotfiles/.local/share/chezmoi/home/.chezmoiscripts/ubuntu/run_onchange_before_11-install-packages.tmpl
2022-11-27 01:49:09 +00:00

2168 lines
53 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"
]
}
### Default installer preference order
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")
### Post-install hook
afterInstall() {
if [ "$1" = 'appimage' ]; then
elif [ "$1" = 'apk' ]; then
elif [ "$1" = 'apt' ]; then
elif [ "$1" = 'basher' ]; then
elif [ "$1" = 'binary' ]; then
elif [ "$1" = 'bpkg' ]; then
elif [ "$1" = 'brew' ]; then
elif [ "$1" = 'cargo' ]; then
elif [ "$1" = 'cask' ]; then
elif [ "$1" = 'choco' ]; then
elif [ "$1" = 'crew' ]; then
elif [ "$1" = 'dnf' ]; then
elif [ "$1" = 'flatpak' ]; then
elif [ "$1" = 'gem' ]; then
elif [ "$1" = 'go' ]; then
elif [ "$1" = 'nix' ]; then
elif [ "$1" = 'npm' ]; then
elif [ "$1" = 'pacman' ]; then
elif [ "$1" = 'pkg' ]; then
elif [ "$1" = 'port' ]; then
elif [ "$1" = 'scoop' ]; then
elif [ "$1" = 'snap' ]; then
elif [ "$1" = 'whalebrew' ]; then
elif [ "$1" = 'winget' ]; then
elif [ "$1" = 'yay' ]; then
elif [ "$1" = 'zypper' ]; then
fi
}
### Pre-install hook
beforeInstall() {
if [ "$1" = 'appimage' ]; then
elif [ "$1" = 'apk' ]; then
elif [ "$1" = 'apt' ]; then
sudo apt-get update
elif [ "$1" = 'basher' ]; then
elif [ "$1" = 'binary' ]; then
elif [ "$1" = 'bpkg' ]; then
elif [ "$1" = 'brew' ]; then
elif [ "$1" = 'cargo' ]; then
elif [ "$1" = 'cask' ]; then
elif [ "$1" = 'choco' ]; then
elif [ "$1" = 'crew' ]; then
elif [ "$1" = 'dnf' ]; then
elif [ "$1" = 'flatpak' ]; then
elif [ "$1" = 'gem' ]; then
elif [ "$1" = 'go' ]; then
elif [ "$1" = 'nix' ]; then
elif [ "$1" = 'npm' ]; then
elif [ "$1" = 'pacman' ]; then
elif [ "$1" = 'pkg' ]; then
elif [ "$1" = 'port' ]; then
elif [ "$1" = 'scoop' ]; then
elif [ "$1" = 'snap' ]; then
elif [ "$1" = 'whalebrew' ]; then
elif [ "$1" = 'winget' ]; then
elif [ "$1" = 'yay' ]; then
elif [ "$1" = 'zypper' ]; then
fi
}
### Ensure the package manager is available
ensurePackageManager() {
if [ "$1" = 'appimage' ]; then
# Do nothing
elif [ "$1" = 'apk' ]; then
if command -v apk > /dev/null; then
logg '`apk` is available'
else
logg error '`apk` is not installed' && exit 102
fi
elif [ "$1" = 'apt' ]; then
if command -v apt > /dev/null; then
logg '`apt` is available'
else
logg error '`apt` is not installed' && exit 103
fi
elif [ "$1" = 'basher' ]; then
if command -v basher > /dev/null; then
logg '`basher` is available'
else
# TODO - Install basher
fi
elif [ "$1" = 'binary' ]; then
# Do nothing
elif [ "$1" = 'bpkg' ]; then
if command -v bpkg > /dev/null; then
logg '`bpkg` is available'
else
# TODO - Install bpkg
fi
elif [ "$1" = 'brew' ] || [ "$1" = 'cask' ]; then
if command -v brew > /dev/null; then
logg '`brew` is available'
else
ensurePackageManagerHomebrew
fi
elif [ "$1" = 'cargo' ]; then
if command -v cargo > /dev/null; then
logg '`cargo` is available'
else
# TODO - Install Cargo via Homebrew based method
fi
elif [ "$1" = '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 [ "$1" = '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 [ "$1" = '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 [ "$1" = 'flatpak' ]; then
if command -v flatpak > /dev/null; then
logg '`flatpak` is available'
else
ensurePackageManagerHomebrew
fi
elif [ "$1" = '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 [ "$1" = 'go' ]; then
if command -v go > /dev/null; then
logg '`go` is available'
else
ensurePackageManagerHomebrew
brew install go
fi
elif [ "$1" = '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 [ "$1" = '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 [ "$1" = 'pacman' ]; then
if command -v pacman > /dev/null; then
logg '`pacman` is available'
else
logg '`pacman` is not installed' && exit 106
fi
elif [ "$1" = 'pkg' ]; then
if command -v pkg > /dev/null; then
logg '`pkg` is available'
else
logg '`pkg` is not installed' && exit 107
elif [ "$1" = 'port' ]; then
if command -v port > /dev/null; then
logg '`port` is available'
else
# TODO - Install port on macOS
fi
elif [ "$1" = '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 [ "$1" = '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
CURRENT_DIRECTORY="$(pwd)"
cd /usr/local/src/snapd
sudo makepkg -si
cd "$CURRENT_DIRECTORY"
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 [ "$1" = 'whalebrew' ];
if command -v whalebrew > /dev/null; then
logg '`whalebrew` is available'
else
ensurePackageManagerHomebrew
logg 'Installing `whalebrew` via `brew`'
brew install whalebrew
fi
elif [ "$1" = 'winget' ]; then
# TODO
elif [ "$1" = '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
CURRENT_DIRECTORY="$(pwd)"
cd /usr/local/src/yay
makepkg -si
cd "$CURRENT_DIRECTORY"
logg '`yay` installed`
else
logg error '`/usr/local/src` is not present on the system' && exit 105
fi
fi
elif [ "$1" = 'zypper' ]; then
if command -v zypper > /dev/null; then
logg '`zypper` is available'
else
logg '`zypper` is not installed' && exit 104
fi
fi
}
### Ensure 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
}
### Installs a list of packages via the specified package manager
installPackageList() {
ensurePackageManager "$1"
if [ "$1" = 'appimage' ]; then
elif [ "$1" = 'apk' ]; then
elif [ "$1" = 'apt' ]; then
sudo apt-get install -y $@
elif [ "$1" = 'basher' ]; then
elif [ "$1" = 'binary' ]; then
elif [ "$1" = 'bpkg' ]; then
elif [ "$1" = 'brew' ]; then
elif [ "$1" = 'cargo' ]; then
elif [ "$1" = 'cask' ]; then
elif [ "$1" = 'choco' ]; then
choco install -y $@
elif [ "$1" = 'crew' ]; then
elif [ "$1" = 'dnf' ];
if command -v dnf > /dev/null; then
dnf install -y $@
elif command -v yum > /dev/null; then
yum install -y $@
else
logg warn 'Both `dnf` and `yum` are not present on the system'
fi
elif [ "$1" = 'flatpak' ]; then
elif [ "$1" = 'gem' ]; then
gem install $@
elif [ "$1" = 'go' ]; then
for GO_PACKAGE in "$@"; do
go install "$GO_PACKAGE"
elif [ "$1" = 'nix' ]; then
# TODO
elif [ "$1" = 'npm' ]; then
volta install $@
elif [ "$1" = 'pacman' ]; then
sudo pacman -Sy --noconfirm --needed $@
elif [ "$1" = 'pkg' ]; then
# TODO
elif [ "$1" = 'port' ]; then
for PORT_PACKAGE in "$@"; do
sudo port install $PORT_PACKAGE
done
elif [ "$1" = 'scoop' ]; then
scoop install $@
elif [ "$1" = 'snap' ]; then
sudo snap install -y $@
elif [ "$1" = 'whalebrew' ]; then
elif [ "$1" = 'winget' ]; then
elif [ "$1" = 'yay' ]; then
elif [ "$1" = 'zypper' ]; then
fi
}