#!/bin/bash
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.
#

# Install `gnupg` and `gpg` - Typically pre-installed in Ubuntu
sudo apt-get install gnupg gpg

# Install `sops`
curl -LO https://github.com/getsops/sops/releases/download/v3.8.1/sops-v3.8.1.linux.amd64
sudo mv sops-v3.8.1.linux.amd64 /usr/local/bin/sops
sudo chmod +x /usr/local/bin/sops

# Install `envsubst`
sudo apt-get install gettext-base

# Install `age`
#   Ubuntu 22.04+:
sudo apt-get install age

# (Only for Gitea) Install `apg`
sudo apt-get install apg

# # (Only for Minio) `kubectl minio` plugin and Minio Client
# curl https://github.com/minio/operator/releases/download/v5.0.12/kubectl-minio_5.0.12_linux_amd64 -Lo kubectl-minio
# curl https://dl.min.io/client/mc/release/linux-amd64/mc -o minioc
# chmod +x kubectl-minio minioc
# sudo mv kubectl-minio minioc /usr/local/bin/
# # (Only for HTTPS Ingress for Minio tenant) Install `openssl`
# sudo apt-get install openssl

# Flux client
curl -s https://fluxcd.io/install.sh | sudo bash
# Autocompletion
. <(flux completion bash)
