Latest
This commit is contained in:
parent
b67595624c
commit
59c7401138
24 changed files with 283 additions and 85 deletions
|
@ -5,7 +5,9 @@ xattr -d com.apple.quarantine rclone
|
||||||
# TODOs
|
# TODOs
|
||||||
|
|
||||||
This page outlines various projects and tasks that we are currently working on. Creating a GitHub issue for each of these items would be overkill.
|
This page outlines various projects and tasks that we are currently working on. Creating a GitHub issue for each of these items would be overkill.
|
||||||
|
* [Title](https://www.ipfire.org/)
|
||||||
|
* `git-credential-manager configure`
|
||||||
|
* [Title](https://github.com/git-ecosystem/git-credential-manager/blob/release/docs/wsl.md)
|
||||||
* [Title](https://github.com/KnowledgeCanvas/knowledge)
|
* [Title](https://github.com/KnowledgeCanvas/knowledge)
|
||||||
* Configure Navi to automatically download and use the best cheat repositories
|
* Configure Navi to automatically download and use the best cheat repositories
|
||||||
* Finish TS from 1400 stars
|
* Finish TS from 1400 stars
|
||||||
|
@ -76,6 +78,7 @@ The following links include software that need to be reviewed before including t
|
||||||
|
|
||||||
The following items are Docker containers that we may want to include as default containers deployed in our system.
|
The following items are Docker containers that we may want to include as default containers deployed in our system.
|
||||||
|
|
||||||
|
* [Title](https://github.com/sipt/shuttle)
|
||||||
* https://github.com/erxes/erxes - CRM
|
* https://github.com/erxes/erxes - CRM
|
||||||
* https://github.com/pawelmalak/flame - Homepage
|
* https://github.com/pawelmalak/flame - Homepage
|
||||||
* https://github.com/thelounge/thelounge - IRC
|
* https://github.com/thelounge/thelounge - IRC
|
||||||
|
|
|
@ -325,10 +325,13 @@ softwareGroups:
|
||||||
- axel
|
- axel
|
||||||
- bin
|
- bin
|
||||||
- bitly
|
- bitly
|
||||||
|
- brew-gem
|
||||||
|
- brew-pkg
|
||||||
- charm
|
- charm
|
||||||
- cod
|
- cod
|
||||||
- desed
|
- desed
|
||||||
- difftastic
|
- difftastic
|
||||||
|
- dockutil
|
||||||
- duti
|
- duti
|
||||||
- emplace
|
- emplace
|
||||||
- emoj
|
- emoj
|
||||||
|
@ -518,6 +521,8 @@ softwareGroups:
|
||||||
Essentials: &Essentials
|
Essentials: &Essentials
|
||||||
- clamav
|
- clamav
|
||||||
- docker
|
- docker
|
||||||
|
- meta-package-manager
|
||||||
|
- openssl-osx-ca
|
||||||
- rkhunter
|
- rkhunter
|
||||||
Essentials-Desktop: &Essentials-Desktop
|
Essentials-Desktop: &Essentials-Desktop
|
||||||
- autokey
|
- autokey
|
||||||
|
@ -664,6 +669,7 @@ softwareGroups:
|
||||||
- crunch
|
- crunch
|
||||||
- exiftool
|
- exiftool
|
||||||
- ffmpeg
|
- ffmpeg
|
||||||
|
- gifsicle
|
||||||
- imagemagick
|
- imagemagick
|
||||||
- jpegoptim
|
- jpegoptim
|
||||||
- korkut
|
- korkut
|
||||||
|
@ -675,6 +681,7 @@ softwareGroups:
|
||||||
- vidmerger
|
- vidmerger
|
||||||
- wkhtmltopdf
|
- wkhtmltopdf
|
||||||
- youtube-dl
|
- youtube-dl
|
||||||
|
- yt-dlp
|
||||||
Media-Desktop: &Media-Desktop
|
Media-Desktop: &Media-Desktop
|
||||||
- adobe-creative-cloud
|
- adobe-creative-cloud
|
||||||
- audacity
|
- audacity
|
||||||
|
@ -768,6 +775,7 @@ softwareGroups:
|
||||||
- platformio
|
- platformio
|
||||||
- please
|
- please
|
||||||
- porter
|
- porter
|
||||||
|
- proxyman
|
||||||
- rust
|
- rust
|
||||||
- snapcraft
|
- snapcraft
|
||||||
- solidity
|
- solidity
|
||||||
|
@ -791,6 +799,7 @@ softwareGroups:
|
||||||
- cockpit
|
- cockpit
|
||||||
- cups
|
- cups
|
||||||
- lexicon
|
- lexicon
|
||||||
|
- squid
|
||||||
Networking: &Networking
|
Networking: &Networking
|
||||||
- etcd
|
- etcd
|
||||||
- cloudflared
|
- cloudflared
|
||||||
|
@ -1377,6 +1386,8 @@ softwareGroups:
|
||||||
note: Unused Docker assistance package
|
note: Unused Docker assistance package
|
||||||
- pkg: catfs
|
- pkg: catfs
|
||||||
note: CatFS is reportedly in the alpha stage of development and we experienced issues when trying to use it.
|
note: CatFS is reportedly in the alpha stage of development and we experienced issues when trying to use it.
|
||||||
|
- pkg: ccat
|
||||||
|
note: bat can be used instead and has more features
|
||||||
- pkg: cerebro
|
- pkg: cerebro
|
||||||
note: macOS system search more native way of providing similar features. Better alternatives are available.
|
note: macOS system search more native way of providing similar features. Better alternatives are available.
|
||||||
- pkg: chromium
|
- pkg: chromium
|
||||||
|
|
|
@ -31,6 +31,14 @@
|
||||||
type = "file"
|
type = "file"
|
||||||
url = "https://curl.se/ca/cacert.pem"
|
url = "https://curl.se/ca/cacert.pem"
|
||||||
|
|
||||||
|
### Update scripts
|
||||||
|
[".local/bin/update"]
|
||||||
|
type = "git-repo"
|
||||||
|
url = "https://github.com/UpdateCommand/update.git"
|
||||||
|
clone.args = ["--depth", "1"]
|
||||||
|
pull.args = ["--ff-only"]
|
||||||
|
refreshPeriod = "{{ $refreshPeriod }}"
|
||||||
|
|
||||||
### Betelgeuse Theme
|
### Betelgeuse Theme
|
||||||
[".local/src/betelgeuse"]
|
[".local/src/betelgeuse"]
|
||||||
type = "git-repo"
|
type = "git-repo"
|
||||||
|
|
|
@ -28,13 +28,67 @@ if [ -d /Applications ] && [ -d /Library ] && [ -z "$NO_RESTART" ]; then
|
||||||
logg info 'If system updates were downloaded / installed, a reboot might be required.'
|
logg info 'If system updates were downloaded / installed, a reboot might be required.'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
### Install Xcode CLI tools on macOS
|
### Ensure dependencies are installed on Linux
|
||||||
if [ -d /Applications ] && [ -d /Library ]; then
|
if ! command -v curl > /dev/null || ! command -v git > /dev/null || ! command -v expect > /dev/null || ! command -v rsync > /dev/null; then
|
||||||
logg info 'Ensuring xcode-select is installed for developer tools'
|
if command -v apt-get > /dev/null; then
|
||||||
xcode-select -p >/dev/null 2>&1 || sudo xcode-select --install
|
# @description Ensure `build-essential`, `curl`, `expect`, `git`, `rsync`, `procps`, and `file` are installed on Debian / Ubuntu
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y build-essential curl expect git rsync procps file
|
||||||
|
elif command -v dnf > /dev/null; then
|
||||||
|
# @description Ensure `curl`, `expect`, `git`, `rsync`, `procps-ng`, and `file` are installed on Fedora (as well as the Development Tools package)
|
||||||
|
sudo dnf groupinstall -y 'Development Tools'
|
||||||
|
sudo dnf install -y curl expect git rsync procps-ng file
|
||||||
|
elif command -v yum > /dev/null; then
|
||||||
|
# @description Ensure `curl`, `expect`, `git`, `rsync`, `procps-ng`, and `file` are installed on CentOS (as well as the Development Tools package)
|
||||||
|
sudo yum groupinstall -y 'Development Tools'
|
||||||
|
sudo yum install -y curl expect git rsync procps-ng file
|
||||||
|
elif command -v pacman > /dev/null; then
|
||||||
|
# @description Ensure `base-devel`, `curl`, `expect`, `git`, `rsync`, `procps-ng`, and `file` are installed on Archlinux
|
||||||
|
sudo pacman update
|
||||||
|
sudo pacman -Sy base-devel curl expect git rsync procps-ng file
|
||||||
|
elif command -v zypper > /dev/null; then
|
||||||
|
# @description Ensure `curl`, `expect`, `git`, `rsync`, `procps`, and `file` are installed on OpenSUSE (as well as the devel_basis pattern)
|
||||||
|
sudo zypper install -yt pattern devel_basis
|
||||||
|
sudo zypper install -y curl expect git rsync procps file
|
||||||
|
elif command -v apk > /dev/null; then
|
||||||
|
# @description Ensure `curl`, `expect`, `git`, `rsync`, `procps`, and `file` are installed on Alpine
|
||||||
|
apk add build-base curl expect git rsync procps file
|
||||||
|
elif [ -d /Applications ] && [ -d /Library ]; then
|
||||||
|
# @description Ensure CLI developer tools are available on macOS (via `xcode-select`)
|
||||||
|
sudo xcode-select -p >/dev/null 2>&1 || xcode-select --install
|
||||||
|
elif [[ "$OSTYPE" == 'cygwin' ]] || [[ "$OSTYPE" == 'msys' ]] || [[ "$OSTYPE" == 'win32' ]]; then
|
||||||
|
# @description Ensure `curl`, `expect`, `git`, and `rsync` are installed on Windows
|
||||||
|
choco install -y curl expect git rsync
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
### Install Homebrew
|
### Ensure Linux Homebrew is loaded
|
||||||
|
loadLinuxbrew() {
|
||||||
|
if ! command -v brew > /dev/null; then
|
||||||
|
if [ -d "$HOME/.linuxbrew" ]; then
|
||||||
|
eval "$("$HOME/.linuxbrew/bin/brew" shellenv)"
|
||||||
|
elif [ -d "/home/linuxbrew/.linuxbrew" ]; then
|
||||||
|
eval "(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
### Ensures Homebrew folders have proper owners / permissions
|
||||||
|
fixHomebrewPermissions() {
|
||||||
|
if command -v brew > /dev/null; then
|
||||||
|
logg info 'Applying proper permissions on Homebrew folders'
|
||||||
|
sudo chmod -R go-w "$(brew --prefix)/share"
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
### Installs Homebrew
|
||||||
ensurePackageManagerHomebrew() {
|
ensurePackageManagerHomebrew() {
|
||||||
if ! command -v brew > /dev/null; then
|
if ! command -v brew > /dev/null; then
|
||||||
if command -v sudo > /dev/null && sudo -n true; then
|
if command -v sudo > /dev/null && sudo -n true; then
|
||||||
|
@ -43,23 +97,19 @@ ensurePackageManagerHomebrew() {
|
||||||
logg info 'Homebrew is not installed. Password may be required.'
|
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="$?"
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" || BREW_EXIT_CODE="$?"
|
||||||
if [ -n "$BREW_EXIT_CODE" ]; then
|
if [ -n "$BREW_EXIT_CODE" ]; then
|
||||||
if command -v brew > /dev/null; then
|
logg warn 'Homebrew was installed but part of the installation failed to complete successfully.'
|
||||||
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
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
ensurePackageManagerHomebrew
|
|
||||||
|
|
||||||
# @description Enable auto-update service
|
### Logic
|
||||||
|
loadLinuxbrew
|
||||||
|
ensurePackageManagerHomebrew
|
||||||
|
loadLinuxbrew
|
||||||
|
fixHomebrewPermissions
|
||||||
|
|
||||||
|
### Enable auto-update service
|
||||||
if brew autoupdate status | grep 'Autoupdate is not configured.' > /dev/null; then
|
if brew autoupdate status | grep 'Autoupdate is not configured.' > /dev/null; then
|
||||||
logg info 'Enabling Homebrew auto-update service (every 24 hours)'
|
logg info 'Enabling Homebrew auto-update service (every 24 hours)'
|
||||||
brew autoupdate start --cleanup --greedy --upgrade
|
brew autoupdate start --cleanup --greedy --upgrade
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# @file Ensure Auto-Update
|
||||||
|
# @brief Configures macOS to automatically check for system updates
|
||||||
|
# @description
|
||||||
|
# This script adds a macOS LaunchDaemon for the root user that checks for updates and automatically
|
||||||
|
# applies them. It will run if the file is available at `$HOME/Library/LaunchDaemons/com.apple.automatedupdates.plist`.
|
||||||
|
|
||||||
|
{{ includeTemplate "universal/profile" }}
|
||||||
|
{{ includeTemplate "universal/logg" }}
|
||||||
|
|
||||||
|
### Enable automated updates on macOS
|
||||||
|
if [ -d /Applications ] && [ -d /System ]; then
|
||||||
|
if [ -f "$HOME/Library/LaunchDaemons/com.apple.automatedupdates.plist" ] && [ ! -f "/Library/LaunchDaemons/com.apple.automatedupdates.plist" ]; then
|
||||||
|
logg info 'Configuring macOS to automatically apply system updates'
|
||||||
|
sudo mkdir -p /Library/LaunchDaemons
|
||||||
|
sudo cp -f "$HOME/Library/LaunchDaemons/com.apple.automatedupdates.plist" "/Library/LaunchDaemons/com.apple.automatedupdates.plist"
|
||||||
|
logg info 'Loading `/Library/LaunchDaemons/com.apple.automatedupdates.plist`'
|
||||||
|
sudo launchctl load "/Library/LaunchDaemons/com.apple.automatedupdates.plist" && logg success 'launchctl load successful'
|
||||||
|
fi
|
||||||
|
fi
|
|
@ -104,6 +104,27 @@ if command -v rclone > /dev/null; then
|
||||||
sudo systemctl enable "s3-${USER}"
|
sudo systemctl enable "s3-${USER}"
|
||||||
sudo systemctl restart "s3-${USER}"
|
sudo systemctl restart "s3-${USER}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -d /Applications ] && [ -d /System ]; then
|
||||||
|
### Enable Rclone mounts
|
||||||
|
logg info 'Ensuring Rclone mount-on-reboot definitions are in place'
|
||||||
|
if [ -f "$HOME/Library/LaunchDaemons/rclone.private.plist" ] && [ ! -f "/Library/LaunchDaemons/rclone.private.plist" ]; then
|
||||||
|
logg info 'Adding /Volumes/Private as S3 bucket mount, enabled at boot'
|
||||||
|
sudo mkdir -p /Library/LaunchDaemons
|
||||||
|
sudo cp -f "$HOME/Library/LaunchDaemons/rclone.private.plist" '/Library/LaunchDaemons/rclone.private.plist'
|
||||||
|
sudo launchctl load '/Library/LaunchDaemons/rclone.private.plist' && logg success 'launchctl load successful'
|
||||||
|
fi
|
||||||
|
if [ -f "$HOME/Library/LaunchDaemons/rclone.public.plist" ] && [ ! -f "/Library/LaunchDaemons/rclone.public.plist" ]; then
|
||||||
|
logg info 'Adding /Volumes/Public as S3 bucket mount, enabled at boot'
|
||||||
|
sudo mkdir -p /Library/LaunchDaemons
|
||||||
|
sudo cp -f "$HOME/Library/LaunchDaemons/rclone.public.plist" '/Library/LaunchDaemons/rclone.public.plist'
|
||||||
|
sudo launchctl load '/Library/LaunchDaemons/rclone.public.plist' && logg success 'launchctl load successful'
|
||||||
|
fi
|
||||||
|
if [ -f "$HOME/Library/LaunchDaemons/rclone.user.plist" ] && ! launchctl list | grep 'rclone.user' > /dev/null; then
|
||||||
|
logg info 'Adding ~/Public as S3 bucket mount, enabled at boot'
|
||||||
|
launchctl load "$HOME/Library/LaunchDaemons/rclone.user.plist" && logg success 'user launchctl load successful'
|
||||||
|
fi
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
logg info '`rclone` is not available'
|
logg info '`rclone` is not available'
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -12,7 +12,7 @@ if [ -d "${XDG_DATA_HOME:-$HOME/.local/share}/emsdk" ]; then
|
||||||
cd "${XDG_DATA_HOME:-$HOME/.local/share}/emsdk"
|
cd "${XDG_DATA_HOME:-$HOME/.local/share}/emsdk"
|
||||||
logg info 'Pulling latest changes for Emscripten source code'
|
logg info 'Pulling latest changes for Emscripten source code'
|
||||||
git pull && logg success 'Successfully pulled latest Emscripten source code'
|
git pull && logg success 'Successfully pulled latest Emscripten source code'
|
||||||
./emsdk install latest && logg success 'Installed latest Emscripten target'
|
./emsdk install latest > /dev/null && logg success 'Installed latest Emscripten target'
|
||||||
./emsdk activate latest && logg success 'Activated latest Emscripten target'
|
./emsdk activate latest > /dev/null && logg success 'Activated latest Emscripten target'
|
||||||
logg info 'Profile source inclusions are already implemented in Bash / ZSH profile'
|
logg info 'Profile source inclusions are already implemented in Bash / ZSH profile'
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -200,6 +200,13 @@ if command -v warp-cli > /dev/null; then
|
||||||
if [ -d /System ] && [ -d /Applications ]; then
|
if [ -d /System ] && [ -d /Applications ]; then
|
||||||
sudo cp -f "$HOME/Library/Managed Preferences/com.cloudflare.warp.plist" '/Library/Managed Preferences/com.cloudflare.warp.plist'
|
sudo cp -f "$HOME/Library/Managed Preferences/com.cloudflare.warp.plist" '/Library/Managed Preferences/com.cloudflare.warp.plist'
|
||||||
sudo plutil -convert binary1 '/Library/Managed Preferences/com.cloudflare.warp.plist'
|
sudo plutil -convert binary1 '/Library/Managed Preferences/com.cloudflare.warp.plist'
|
||||||
|
|
||||||
|
### Enable CloudFlare WARP credentials auto-populate (since file is deleted when not managed with MDM)
|
||||||
|
if [ -f "$HOME/Library/LaunchDaemons/com.cloudflare.warp.plist" ] && [ ! -f "/Library/LaunchDaemons/com.cloudflare.warp.plist" ]; then
|
||||||
|
sudo mkdir -p /Library/LaunchDaemons
|
||||||
|
sudo cp -f "$HOME/Library/LaunchDaemons/com.cloudflare.warp.plist" '/Library/LaunchDaemons/com.cloudflare.warp.plist'
|
||||||
|
sudo launchctl load "/Library/LaunchDaemons/com.cloudflare.warp.plist"
|
||||||
|
fi
|
||||||
elif [ -f "${XDG_CONFIG_HOME:-$HOME/.config}/warp/mdm.xml" ]; then
|
elif [ -f "${XDG_CONFIG_HOME:-$HOME/.config}/warp/mdm.xml" ]; then
|
||||||
sudo mkdir -p /var/lib/cloudflare-warp
|
sudo mkdir -p /var/lib/cloudflare-warp
|
||||||
sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/warp/mdm.xml" /var/lib/cloudflare-warp/mdm.xml
|
sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/warp/mdm.xml" /var/lib/cloudflare-warp/mdm.xml
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<key>KeepAlive</key>
|
<key>KeepAlive</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>Label</key>
|
<key>Label</key>
|
||||||
<string>rclone.public</string>
|
<string>rclone.user</string>
|
||||||
<key>ProgramArguments</key>
|
<key>ProgramArguments</key>
|
||||||
<array>
|
<array>
|
||||||
<string>/usr/local/bin/rclone-mount</string>
|
<string>/usr/local/bin/rclone-mount</string>
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
if [ -d /Applications ] && [ -d /System ]; then
|
|
||||||
### Enable automated updates on macOS
|
|
||||||
if [ -f "$HOME/Library/LaunchDaemons/com.apple.automatedupdates.plist" ] && [ ! -f "/Library/LaunchDaemons/com.apple.automatedupdates.plist" ]; then
|
|
||||||
sudo mkdir -p /Library/LaunchDaemons
|
|
||||||
sudo cp -f "$HOME/Library/LaunchDaemons/com.apple.automatedupdates.plist" "/Library/LaunchDaemons/com.apple.automatedupdates.plist"
|
|
||||||
sudo launchctl load "/Library/LaunchDaemons/com.apple.automatedupdates.plist"
|
|
||||||
fi
|
|
||||||
|
|
||||||
### Enable CloudFlare WARP credentials auto-populate (since file is deleted when not managed with MDM)
|
|
||||||
if [ -f "$HOME/Library/LaunchDaemons/com.cloudflare.warp.plist" ] && [ ! -f "/Library/LaunchDaemons/com.cloudflare.warp.plist" ]; then
|
|
||||||
sudo mkdir -p /Library/LaunchDaemons
|
|
||||||
sudo cp -f "$HOME/Library/LaunchDaemons/com.cloudflare.warp.plist" '/Library/LaunchDaemons/com.cloudflare.warp.plist'
|
|
||||||
sudo launchctl load "/Library/LaunchDaemons/com.cloudflare.warp.plist"
|
|
||||||
fi
|
|
||||||
|
|
||||||
### Enable Rclone mounts
|
|
||||||
if [ -f "$HOME/Library/LaunchDaemons/rclone.private.plist" ] && [ ! -f "/Library/LaunchDaemons/rclone.private.plist" ]; then
|
|
||||||
sudo mkdir -p /Library/LaunchDaemons
|
|
||||||
sudo cp -f "$HOME/Library/LaunchDaemons/rclone.private.plist" '/Library/LaunchDaemons/rclone.private.plist'
|
|
||||||
sudo launchctl load '/Library/LaunchDaemons/rclone.private.plist'
|
|
||||||
fi
|
|
||||||
if [ -f "$HOME/Library/LaunchDaemons/rclone.public.plist" ] && [ ! -f "/Library/LaunchDaemons/rclone.public.plist" ]; then
|
|
||||||
sudo mkdir -p /Library/LaunchDaemons
|
|
||||||
sudo cp -f "$HOME/Library/LaunchDaemons/rclone.public.plist" '/Library/LaunchDaemons/rclone.public.plist'
|
|
||||||
sudo launchctl load '/Library/LaunchDaemons/rclone.public.plist'
|
|
||||||
fi
|
|
||||||
if [ -f "$HOME/Library/LaunchDaemons/rclone.user.plist" ]; then
|
|
||||||
launchctl load "$HOME/Library/LaunchDaemons/rclone.user.plist"
|
|
||||||
fi
|
|
||||||
fi
|
|
|
@ -69,12 +69,8 @@ if [ "$BASH_SUPPORT" = 'true' ]; then
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
### Bash Completion
|
|
||||||
if [ -f "/usr/local/etc/profile.d/bash_completion.sh" ]; then
|
|
||||||
. "/usr/local/etc/profile.d/bash_completion.sh"
|
|
||||||
fi
|
|
||||||
|
|
||||||
### Bash Completion (Homebrew)
|
### Bash Completion (Homebrew)
|
||||||
|
autoload -U +X bashcompinit && bashcompinit
|
||||||
if command -v brew > /dev/null; then
|
if command -v brew > /dev/null; then
|
||||||
if [[ -r "${HOMEBREW_PREFIX}/etc/profile.d/bash_completion.sh" ]]; then
|
if [[ -r "${HOMEBREW_PREFIX}/etc/profile.d/bash_completion.sh" ]]; then
|
||||||
. "${HOMEBREW_PREFIX}/etc/profile.d/bash_completion.sh"
|
. "${HOMEBREW_PREFIX}/etc/profile.d/bash_completion.sh"
|
||||||
|
@ -142,6 +138,6 @@ if [ "$BASH_SUPPORT" = 'true' ]; then
|
||||||
|
|
||||||
### zoxide
|
### zoxide
|
||||||
if command -v zoxide > /dev/null; then
|
if command -v zoxide > /dev/null; then
|
||||||
eval "$(zoxide init --cmd cd bash)"
|
eval "$(zoxide init --cmd cd bash)" > /dev/null
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
9
home/dot_config/fish/config.fish
Normal file
9
home/dot_config/fish/config.fish
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
### Homebrew Completions
|
||||||
|
# Source: https://docs.brew.sh/Shell-Completion#configuring-completions-in-fish
|
||||||
|
if test -d (brew --prefix)"/share/fish/completions"
|
||||||
|
set -gx fish_complete_path $fish_complete_path (brew --prefix)/share/fish/completions
|
||||||
|
end
|
||||||
|
|
||||||
|
if test -d (brew --prefix)"/share/fish/vendor_completions.d"
|
||||||
|
set -gx fish_complete_path $fish_complete_path (brew --prefix)/share/fish/vendor_completions.d
|
||||||
|
end
|
|
@ -61,6 +61,7 @@
|
||||||
whitespace = trailing-space,space-before-tab
|
whitespace = trailing-space,space-before-tab
|
||||||
[credential]
|
[credential]
|
||||||
helper = cache --timeout=3600
|
helper = cache --timeout=3600
|
||||||
|
credentialStore = {{ if eq .host.distro.id "darwin" }}keychain{{ else }}{{ if eq .host.distro.id "windows" }}wincredman{{ else }}secretservice{{ end }}{{ end }}
|
||||||
[credential "https://github.com"]
|
[credential "https://github.com"]
|
||||||
helper = !gh auth git-credential
|
helper = !gh auth git-credential
|
||||||
[credential "https://gist.github.com"]
|
[credential "https://gist.github.com"]
|
||||||
|
|
|
@ -361,6 +361,11 @@ export RUSTUP_HOME="$XDG_DATA_HOME/rustup"
|
||||||
### SDKMan
|
### SDKMan
|
||||||
export SDKMAN_DIR="$XDG_DATA_HOME/sdkman"
|
export SDKMAN_DIR="$XDG_DATA_HOME/sdkman"
|
||||||
|
|
||||||
|
### Update
|
||||||
|
if [ -d "$HOME/.local/bin/update/bin" ]; then
|
||||||
|
export PATH="$PATH:$HOME/.local/bin/update/bin"
|
||||||
|
fi
|
||||||
|
|
||||||
### Vagrant
|
### Vagrant
|
||||||
export VAGRANT_ALIAS_FILE="$XDG_CONFIG_HOME/vagrant/aliases"
|
export VAGRANT_ALIAS_FILE="$XDG_CONFIG_HOME/vagrant/aliases"
|
||||||
export VAGRANT_DEFAULT_PROVIDER=virtualbox
|
export VAGRANT_DEFAULT_PROVIDER=virtualbox
|
||||||
|
|
10
home/dot_config/update/update-run-first/README.md
Normal file
10
home/dot_config/update/update-run-first/README.md
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# Run first
|
||||||
|
|
||||||
|
You can put any scripts you want into this directory, and the program
|
||||||
|
will run your scripts first, before any of the update commands.
|
||||||
|
|
||||||
|
You may freely create subdirectories.
|
||||||
|
|
||||||
|
The program runs the executable files.
|
||||||
|
|
||||||
|
The program skips the non-executable files.
|
3
home/dot_config/update/update-run-last/README.md
Normal file
3
home/dot_config/update/update-run-last/README.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# Run last
|
||||||
|
|
||||||
|
All executable scripts in this folder get run after all the other update commands.
|
5
home/dot_local/bin/executable_install-program-cache.tmpl
Normal file
5
home/dot_local/bin/executable_install-program-cache.tmpl
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
if command -v brew > /dev/null; then
|
||||||
|
brew info --json=v1 --installed
|
||||||
|
fi
|
|
@ -62,7 +62,7 @@ setopt SHARE_HISTORY
|
||||||
if [ ! -d "$XDG_CACHE_HOME/zsh" ]; then
|
if [ ! -d "$XDG_CACHE_HOME/zsh" ]; then
|
||||||
mkdir -p "$XDG_CACHE_HOME/zsh"
|
mkdir -p "$XDG_CACHE_HOME/zsh"
|
||||||
fi
|
fi
|
||||||
autoload -U +X compinit && compinit -d "$XDG_CACHE_HOME/zsh/zcompdump-$ZSH_VERSION"
|
|
||||||
zstyle ':completion:*:*:*:*:*' menu select
|
zstyle ':completion:*:*:*:*:*' menu select
|
||||||
zstyle ':completion:*' cache-path "$XDG_CACHE_HOME/zsh/zcompcache"
|
zstyle ':completion:*' cache-path "$XDG_CACHE_HOME/zsh/zcompcache"
|
||||||
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
|
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
|
||||||
|
@ -259,10 +259,6 @@ xterm*|rxvt*|Eterm|aterm|kterm|gnome*|alacritty)
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
### Homebrew ZSH Completions
|
|
||||||
# Must be sourced before compinit / Oh-My-ZSH inclusion
|
|
||||||
FPATH="$HOMEBREW_PREFIX/share/zsh/site-functions:${FPATH}"
|
|
||||||
|
|
||||||
### Antigen
|
### Antigen
|
||||||
if [ -f "$HOME/.local/scripts/antigen.zsh" ]; then
|
if [ -f "$HOME/.local/scripts/antigen.zsh" ]; then
|
||||||
source "$HOME/.local/scripts/antigen.zsh"
|
source "$HOME/.local/scripts/antigen.zsh"
|
||||||
|
@ -392,6 +388,19 @@ if command -v fzf > /dev/null; then
|
||||||
zstyle ':autocomplete:*' fzf-completion yes
|
zstyle ':autocomplete:*' fzf-completion yes
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
### Homebrew ZSH Completions
|
||||||
|
# Must be sourced before compinit / Oh-My-ZSH inclusion
|
||||||
|
FPATH="$HOMEBREW_PREFIX/share/zsh/site-functions:${FPATH}"
|
||||||
|
|
||||||
|
### ZSH compinit
|
||||||
|
autoload -Uz +X compinit && compinit -d "$XDG_CACHE_HOME/zsh/zcompdump-$ZSH_VERSION"
|
||||||
|
|
||||||
|
### Bash Completions
|
||||||
|
autoload -U +X bashcompinit && bashcompinit
|
||||||
|
if [ -f "/usr/local/etc/profile.d/bash_completion.sh" ]; then
|
||||||
|
. "/usr/local/etc/profile.d/bash_completion.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
### Atuin
|
### Atuin
|
||||||
if command -v atuin > /dev/null; then
|
if command -v atuin > /dev/null; then
|
||||||
eval "$(atuin init zsh)"
|
eval "$(atuin init zsh)"
|
||||||
|
@ -451,9 +460,6 @@ if command -v thefuck > /dev/null; then
|
||||||
eval "$(thefuck --alias)"
|
eval "$(thefuck --alias)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
### Bash Completions
|
|
||||||
autoload -U +X bashcompinit && bashcompinit
|
|
||||||
|
|
||||||
### HashiCorp Vault
|
### HashiCorp Vault
|
||||||
if command -v vault > /dev/null; then
|
if command -v vault > /dev/null; then
|
||||||
complete -o nospace -C vault vault
|
complete -o nospace -C vault vault
|
||||||
|
|
|
@ -252,25 +252,28 @@ fi
|
||||||
# @description Ensure basic system packages are available on the device
|
# @description Ensure basic system packages are available on the device
|
||||||
if ! command -v curl > /dev/null || ! command -v git > /dev/null || ! command -v expect > /dev/null || ! command -v rsync > /dev/null; then
|
if ! command -v curl > /dev/null || ! command -v git > /dev/null || ! command -v expect > /dev/null || ! command -v rsync > /dev/null; then
|
||||||
if command -v apt-get > /dev/null; then
|
if command -v apt-get > /dev/null; then
|
||||||
# @description Ensure `build-essential`, `curl`, `expect`, `git`, and `rsync` are installed on Debian / Ubuntu
|
# @description Ensure `build-essential`, `curl`, `expect`, `git`, `rsync`, `procps`, and `file` are installed on Debian / Ubuntu
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y build-essential curl expect git rsync
|
sudo apt-get install -y build-essential curl expect git rsync procps file
|
||||||
elif command -v dnf > /dev/null; then
|
elif command -v dnf > /dev/null; then
|
||||||
# @description Ensure `curl`, `expect`, `git`, and `rsync` are installed on Fedora
|
# @description Ensure `curl`, `expect`, `git`, `rsync`, `procps-ng`, and `file` are installed on Fedora (as well as the Development Tools package)
|
||||||
sudo dnf install -y curl expect git rsync
|
sudo dnf groupinstall -y 'Development Tools'
|
||||||
|
sudo dnf install -y curl expect git rsync procps-ng file
|
||||||
elif command -v yum > /dev/null; then
|
elif command -v yum > /dev/null; then
|
||||||
# @description Ensure `curl`, `expect`, `git`, and `rsync` are installed on CentOS
|
# @description Ensure `curl`, `expect`, `git`, `rsync`, `procps-ng`, and `file` are installed on CentOS (as well as the Development Tools package)
|
||||||
sudo yum install -y curl expect git rsync
|
sudo yum groupinstall -y 'Development Tools'
|
||||||
|
sudo yum install -y curl expect git rsync procps-ng file
|
||||||
elif command -v pacman > /dev/null; then
|
elif command -v pacman > /dev/null; then
|
||||||
# @description Ensure `curl`, `expect`, `git`, and `rsync` are installed on Archlinux
|
# @description Ensure `base-devel`, `curl`, `expect`, `git`, `rsync`, `procps-ng`, and `file` are installed on Archlinux
|
||||||
sudo pacman update
|
sudo pacman update
|
||||||
sudo pacman -Sy curl expect git rsync
|
sudo pacman -Sy base-devel curl expect git rsync procps-ng file
|
||||||
elif command -v zypper > /dev/null; then
|
elif command -v zypper > /dev/null; then
|
||||||
# @description Ensure `curl`, `expect`, `git`, and `rsync` are installed on OpenSUSE
|
# @description Ensure `curl`, `expect`, `git`, `rsync`, `procps`, and `file` are installed on OpenSUSE (as well as the devel_basis pattern)
|
||||||
sudo zypper install -y curl expect git rsync
|
sudo zypper install -yt pattern devel_basis
|
||||||
|
sudo zypper install -y curl expect git rsync procps file
|
||||||
elif command -v apk > /dev/null; then
|
elif command -v apk > /dev/null; then
|
||||||
# @description Ensure `curl`, `expect`, `git`, and `rsync` are installed on Alpine
|
# @description Ensure `curl`, `expect`, `git`, `rsync`, `procps`, and `file` are installed on Alpine
|
||||||
apk add curl expect git rsync
|
apk add build-base curl expect git rsync procps file
|
||||||
elif [ -d /Applications ] && [ -d /Library ]; then
|
elif [ -d /Applications ] && [ -d /Library ]; then
|
||||||
# @description Ensure CLI developer tools are available on macOS (via `xcode-select`)
|
# @description Ensure CLI developer tools are available on macOS (via `xcode-select`)
|
||||||
sudo xcode-select -p >/dev/null 2>&1 || xcode-select --install
|
sudo xcode-select -p >/dev/null 2>&1 || xcode-select --install
|
||||||
|
|
84
software.yml
84
software.yml
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
# eslint-disable eslint-comments/disable-enable-pair, max-len, max-lines, no-warning-comments
|
# eslint-disable eslint-comments/disable-enable-pair, max-len, max-lines, no-warning-comments
|
||||||
# rhino mkvtoolnix testdisk ccat git-credential-manager source-highlight giter8 saltstack squid ettercap calc mongodb wdiff dialog john reaver oath-toolkit xhyve elm icdiff ddrescue gitlab-ci-multi-runner tcl-tk flac zenity terragrunt dbus grpc diffutils sonarqube haproxy cabal-install sonar-scanner wakeonlan tmate solr tcptraceroute hashcat handbrake iproute2mac 2fsprogs hydra you-get cabextract trash sphinx-doc iftop htop-osx dockutil xctool aspell w3m grc screenfetch moreutils brew-cask-completion openconnect media-info lftp unison logstash pstree rpm opam iperf3 libav gifsicle iperf colordiff lmdb mcrypt httprack aircrack-ng ntfs-3g glide glog parallel bison rename kubernetes-helm gdbm mobile-shell geckodriver pv sdl swig winetricks doxygen mtr graphicsmagick dos2unix highlight putty llvm flow watch gdb ant mariadb mercurial pidof autoconf maven readline libtool chromedriver pkg-config
|
# ettercap calc mongodb wdiff dialog john reaver oath-toolkit xhyve elm icdiff ddrescue gitlab-ci-multi-runner tcl-tk flac zenity terragrunt dbus grpc diffutils sonarqube haproxy cabal-install sonar-scanner tmate solr tcptraceroute hashcat handbrake iproute2mac 2fsprogs hydra you-get cabextract trash sphinx-doc iftop htop-osx w3m grc moreutils brew-cask-completion openconnect media-info lftp unison logstash pstree rpm iperf3 libav iperf colordiff lmdb mcrypt httprack aircrack-ng ntfs-3g glog parallel rename kubernetes-helm gdbm mobile-shell geckodriver pv sdl swig winetricks doxygen mtr graphicsmagick dos2unix highlight putty llvm flow watch gdb ant mariadb mercurial pidof autoconf maven readline libtool chromedriver pkg-config
|
||||||
# `softwarePackages` is a map of possible package managers to use while installing a program. The installer will
|
# `softwarePackages` is a map of possible package managers to use while installing a program. The installer will
|
||||||
# look at the `installerPreference` variable and find the first package manager that is in the package's possible
|
# look at the `installerPreference` variable and find the first package manager that is in the package's possible
|
||||||
# installation method and then use that. It is also sensitive to the type of operating system so a package with
|
# installation method and then use that. It is also sensitive to the type of operating system so a package with
|
||||||
|
@ -868,6 +868,11 @@ softwarePackages:
|
||||||
_home: https://astronvim.github.io/
|
_home: https://astronvim.github.io/
|
||||||
_name: AstroNvim
|
_name: AstroNvim
|
||||||
_post: nvim --headless -c 'autocmd User PackerComplete quitall' &
|
_post: nvim --headless -c 'autocmd User PackerComplete quitall' &
|
||||||
|
dockutil:
|
||||||
|
_bin: dockutil
|
||||||
|
_github: https://github.com/kcrawford/dockutil
|
||||||
|
_name: DockUtil
|
||||||
|
brew:darwin: dockutil
|
||||||
platformio:
|
platformio:
|
||||||
_bin: platformio
|
_bin: platformio
|
||||||
_github: https://github.com/platformio/platformio-core
|
_github: https://github.com/platformio/platformio-core
|
||||||
|
@ -1053,6 +1058,13 @@ softwarePackages:
|
||||||
_home: https://jamiemason.github.io/syncpack/
|
_home: https://jamiemason.github.io/syncpack/
|
||||||
_name: Syncpack
|
_name: Syncpack
|
||||||
npm: syncpack
|
npm: syncpack
|
||||||
|
ccat:
|
||||||
|
_bin: ccat
|
||||||
|
_github: https://github.com/owenthereal/ccat
|
||||||
|
_name: ccat
|
||||||
|
brew: ccat
|
||||||
|
go: github.com/owenthereal/ccat@latest
|
||||||
|
pacman: ccat
|
||||||
flake8:
|
flake8:
|
||||||
_bin: flake8
|
_bin: flake8
|
||||||
_desc: Flake8 is a python tool that glues together pycodestyle, pyflakes, mccabe, and third-party plugins to check the style and quality of some python code.
|
_desc: Flake8 is a python tool that glues together pycodestyle, pyflakes, mccabe, and third-party plugins to check the style and quality of some python code.
|
||||||
|
@ -1100,17 +1112,49 @@ softwarePackages:
|
||||||
_name: bane
|
_name: bane
|
||||||
github: github.com/genuinetools/bane
|
github: github.com/genuinetools/bane
|
||||||
go: github.com/genuinetools/bane@latest
|
go: github.com/genuinetools/bane@latest
|
||||||
|
openssl-osx-ca:
|
||||||
|
_bin: openssl-osx-ca
|
||||||
|
_github: https://github.com/raggi/openssl-osx-ca
|
||||||
|
_name: OpenSSL macOS CA
|
||||||
|
_service: openssl-osx-ca
|
||||||
|
brew:darwin: raggi/ale/openssl-osx-ca
|
||||||
|
meta-package-manager:
|
||||||
|
_bin: mpm
|
||||||
|
_github: https://github.com/kdeldycke/meta-package-manager
|
||||||
|
_name: Meta Package Manager
|
||||||
|
brew: meta-package-manager
|
||||||
|
pipx: meta-package-manager
|
||||||
|
yt-dlp:
|
||||||
|
_bin: yt-dlp
|
||||||
|
_github: https://github.com/yt-dlp/yt-dlp/wiki/Installation
|
||||||
|
_name: YouTube Download
|
||||||
|
brew: yt-dlp
|
||||||
|
choco: yt-dlp
|
||||||
|
pacman: yt-dlp
|
||||||
|
pipx: yt-dlp
|
||||||
|
scoop: yt-dlp
|
||||||
|
port: yt-dlp
|
||||||
|
winget: yt-dlp
|
||||||
|
brew-gem:
|
||||||
|
_bin: brew-gem
|
||||||
|
_github: https://github.com/sportngin/brew-gem
|
||||||
|
_name: Homebrew RubyGems
|
||||||
|
brew: brew-gem
|
||||||
|
brew-pkg:
|
||||||
|
_bin: brew-pkg
|
||||||
|
_github: https://github.com/timsutton/brew-pkg
|
||||||
|
_name: Homebrew Pkg
|
||||||
|
brew:darwin: timsutton/formulae/brew-pkg
|
||||||
bash-completion:
|
bash-completion:
|
||||||
_bin: null
|
_bin: null
|
||||||
_desc: null
|
_desc: null
|
||||||
_docs: https://docs.brew.sh/Shell-Completion
|
_docs: https://docs.brew.sh/Shell-Completion
|
||||||
_github: null
|
_github: null
|
||||||
_home: null
|
_home: null
|
||||||
_name: null
|
_name: Bash Completion Formula
|
||||||
_when:darwin: '! brew list bash-completion | grep bash-completion > /dev/null'
|
_when: '! brew list bash-completion | grep bash-completion > /dev/null'
|
||||||
_when:linux: '! brew list bash-completion | grep bash-completion > /dev/null'
|
brew: bash-completion@2
|
||||||
brew:darwin: bash-completion
|
brew: bash-completion@2
|
||||||
brew:linux: bash-completion
|
|
||||||
axel:
|
axel:
|
||||||
_bin: axel
|
_bin: axel
|
||||||
_docs: null
|
_docs: null
|
||||||
|
@ -6637,6 +6681,18 @@ softwarePackages:
|
||||||
- gifski
|
- gifski
|
||||||
- peek
|
- peek
|
||||||
yay: peek-git
|
yay: peek-git
|
||||||
|
|
||||||
|
gifsicle:
|
||||||
|
_bin: gifsicle
|
||||||
|
_github: https://github.com/kohler/gifsicle
|
||||||
|
_name: Gifsicle
|
||||||
|
apt: gifsicle
|
||||||
|
brew: gifsicle
|
||||||
|
dnf: gifsicle
|
||||||
|
pacman: gifsicle
|
||||||
|
choco: gifsicle
|
||||||
|
scoop: gifsicle
|
||||||
|
port: gifsicle
|
||||||
pgcli:
|
pgcli:
|
||||||
_bin: pgcli
|
_bin: pgcli
|
||||||
_desc: '[pgcli](https://www.pgcli.com/) is a free and open-source CLI for Postgres that does auto-completion and syntax highlighting.'
|
_desc: '[pgcli](https://www.pgcli.com/) is a free and open-source CLI for Postgres that does auto-completion and syntax highlighting.'
|
||||||
|
@ -10050,6 +10106,21 @@ softwarePackages:
|
||||||
dnf: tigervnc-server
|
dnf: tigervnc-server
|
||||||
pacman: tigervnc
|
pacman: tigervnc
|
||||||
zypper: tigervnc
|
zypper: tigervnc
|
||||||
|
proxyman:
|
||||||
|
_bin: proxyman
|
||||||
|
_github: https://github.com/ProxymanApp/Proxyman
|
||||||
|
_name: Proxyman
|
||||||
|
_when:cask: '! test -d /Applications/Proxyman.app && ! test -d $HOME/Applications/Proxyman.app'
|
||||||
|
cask: proxyman
|
||||||
|
squid:
|
||||||
|
_bin: squid
|
||||||
|
_github: https://github.com/squid-cache/squid
|
||||||
|
_name: Squid
|
||||||
|
_service: squid
|
||||||
|
apt: squid
|
||||||
|
brew: squid
|
||||||
|
dnf: squid
|
||||||
|
pacman: squid
|
||||||
zap:
|
zap:
|
||||||
_bin: zap
|
_bin: zap
|
||||||
_desc: Delightful AppImage package manager
|
_desc: Delightful AppImage package manager
|
||||||
|
@ -10179,6 +10250,7 @@ softwarePlugins:
|
||||||
plugins:
|
plugins:
|
||||||
- microsoft.cst.attacksurfaceanalyzer.cli
|
- microsoft.cst.attacksurfaceanalyzer.cli
|
||||||
- dotnet-format
|
- dotnet-format
|
||||||
|
- git-credential-manager
|
||||||
gcloud:
|
gcloud:
|
||||||
cmd: bash -c 'if ! gcloud components list | grep "Installed.*{PLUGIN}" &> /dev/null; then gcloud components install "{PLUGIN}"; fi'
|
cmd: bash -c 'if ! gcloud components list | grep "Installed.*{PLUGIN}" &> /dev/null; then gcloud components install "{PLUGIN}"; fi'
|
||||||
plugins:
|
plugins:
|
||||||
|
|
Loading…
Reference in a new issue