Full Code of tteck/Proxmox for AI

main 930760840c27 cached
423 files
1.0 MB
346.6k tokens
1 requests
Download .txt
Showing preview only (1,123K chars total). Download the full file or copy to clipboard to get everything.
Repository: tteck/Proxmox
Branch: main
Commit: 930760840c27
Files: 423
Total size: 1.0 MB

Directory structure:
gitextract_ua0ju9th/

├── .github/
│   ├── CODE_OF_CONDUCT.md
│   ├── CONTRIBUTING.md
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yaml
│   │   └── config.yml
│   └── pull_request_template.md
├── CHANGELOG.md
├── CODE-AUDIT.md
├── LICENSE
├── README.md
├── USER_SUBMITTED_GUIDES.md
├── ct/
│   ├── actualbudget.sh
│   ├── adguard.sh
│   ├── adventurelog.sh
│   ├── agentdvr.sh
│   ├── alpine-docker.sh
│   ├── alpine-grafana.sh
│   ├── alpine-nextcloud.sh
│   ├── alpine-vaultwarden.sh
│   ├── alpine-zigbee2mqtt.sh
│   ├── alpine.sh
│   ├── apache-cassandra.sh
│   ├── apache-couchdb.sh
│   ├── apt-cacher-ng.sh
│   ├── archivebox.sh
│   ├── aria2.sh
│   ├── audiobookshelf.sh
│   ├── autobrr.sh
│   ├── bazarr.sh
│   ├── blocky.sh
│   ├── bunkerweb.sh
│   ├── caddy.sh
│   ├── calibre-web.sh
│   ├── casaos.sh
│   ├── changedetection.sh
│   ├── channels.sh
│   ├── cloudflared.sh
│   ├── cockpit.sh
│   ├── commafeed.sh
│   ├── create_lxc.sh
│   ├── cronicle.sh
│   ├── daemonsync.sh
│   ├── dashy.sh
│   ├── debian.sh
│   ├── deconz.sh
│   ├── deluge.sh
│   ├── docker.sh
│   ├── dockge.sh
│   ├── emby.sh
│   ├── emqx.sh
│   ├── ersatztv.sh
│   ├── esphome.sh
│   ├── evcc.sh
│   ├── fenrus.sh
│   ├── fhem.sh
│   ├── flaresolverr.sh
│   ├── flowiseai.sh
│   ├── forgejo.sh
│   ├── frigate.sh
│   ├── gitea.sh
│   ├── go2rtc.sh
│   ├── gokapi.sh
│   ├── gotify.sh
│   ├── grafana.sh
│   ├── grocy.sh
│   ├── headscale.sh
│   ├── heimdall-dashboard.sh
│   ├── hivemq.sh
│   ├── homarr.sh
│   ├── homeassistant-core.sh
│   ├── homeassistant.sh
│   ├── homebox.sh
│   ├── homebridge.sh
│   ├── homepage.sh
│   ├── homer.sh
│   ├── hyperhdr.sh
│   ├── hyperion.sh
│   ├── influxdb.sh
│   ├── iobroker.sh
│   ├── iventoy.sh
│   ├── jackett.sh
│   ├── jellyfin.sh
│   ├── jellyseerr.sh
│   ├── kavita.sh
│   ├── keycloak.sh
│   ├── kubo.sh
│   ├── lazylibrarian.sh
│   ├── lidarr.sh
│   ├── linkwarden.sh
│   ├── lldap.sh
│   ├── mafl.sh
│   ├── magicmirror.sh
│   ├── mariadb.sh
│   ├── matterbridge.sh
│   ├── mediamtx.sh
│   ├── medusa.sh
│   ├── memos.sh
│   ├── meshcentral.sh
│   ├── metube.sh
│   ├── mongodb.sh
│   ├── motioneye.sh
│   ├── mqtt.sh
│   ├── myspeed.sh
│   ├── mysql.sh
│   ├── n8n.sh
│   ├── navidrome.sh
│   ├── neo4j.sh
│   ├── nextcloudpi.sh
│   ├── nginxproxymanager.sh
│   ├── nocodb.sh
│   ├── node-red.sh
│   ├── notifiarr.sh
│   ├── ntfy.sh
│   ├── nzbget.sh
│   ├── octoprint.sh
│   ├── ollama.sh
│   ├── omada.sh
│   ├── ombi.sh
│   ├── omv.sh
│   ├── openhab.sh
│   ├── openobserve.sh
│   ├── openwebui.sh
│   ├── overseerr.sh
│   ├── owncast.sh
│   ├── pairdrop.sh
│   ├── paperless-ngx.sh
│   ├── pbs.sh
│   ├── peanut.sh
│   ├── petio.sh
│   ├── photoprism.sh
│   ├── pialert.sh
│   ├── pihole.sh
│   ├── pingvin.sh
│   ├── plex.sh
│   ├── pocketbase.sh
│   ├── podman-homeassistant.sh
│   ├── podman.sh
│   ├── postgresql.sh
│   ├── prometheus.sh
│   ├── prowlarr.sh
│   ├── qbittorrent.sh
│   ├── rabbitmq.sh
│   ├── radarr.sh
│   ├── rdtclient.sh
│   ├── readarr.sh
│   ├── readeck.sh
│   ├── redis.sh
│   ├── rockylinux.sh
│   ├── rtsptoweb.sh
│   ├── runtipi.sh
│   ├── sabnzbd.sh
│   ├── scrypted.sh
│   ├── sftpgo.sh
│   ├── shinobi.sh
│   ├── smokeping.sh
│   ├── sonarr.sh
│   ├── spoolman.sh
│   ├── stirling-pdf.sh
│   ├── syncthing.sh
│   ├── tandoor.sh
│   ├── tasmoadmin.sh
│   ├── tautulli.sh
│   ├── tdarr.sh
│   ├── technitiumdns.sh
│   ├── threadfin.sh
│   ├── tianji.sh
│   ├── traccar.sh
│   ├── traefik.sh
│   ├── transmission.sh
│   ├── trilium.sh
│   ├── ubuntu.sh
│   ├── umami.sh
│   ├── umbrel.sh
│   ├── unifi.sh
│   ├── unmanic.sh
│   ├── uptimekuma.sh
│   ├── vaultwarden.sh
│   ├── wallos.sh
│   ├── wastebin.sh
│   ├── watchyourlan.sh
│   ├── whisparr.sh
│   ├── whoogle.sh
│   ├── wikijs.sh
│   ├── wireguard.sh
│   ├── yunohost.sh
│   ├── zabbix.sh
│   ├── zigbee2mqtt.sh
│   ├── zipline.sh
│   ├── zoraxy.sh
│   └── zwave-js-ui.sh
├── install/
│   ├── actualbudget-install.sh
│   ├── adguard-install.sh
│   ├── adventurelog-install.sh
│   ├── agentdvr-install.sh
│   ├── alpine-docker-install.sh
│   ├── alpine-grafana-install.sh
│   ├── alpine-install.sh
│   ├── alpine-nextcloud-install.sh
│   ├── alpine-vaultwarden-install.sh
│   ├── alpine-zigbee2mqtt-install.sh
│   ├── apache-cassandra-install.sh
│   ├── apache-couchdb-install.sh
│   ├── apt-cacher-ng-install.sh
│   ├── archivebox-install.sh
│   ├── aria2-install.sh
│   ├── audiobookshelf-install.sh
│   ├── autobrr-install.sh
│   ├── bazarr-install.sh
│   ├── blocky-install.sh
│   ├── bunkerweb-install.sh
│   ├── caddy-install.sh
│   ├── calibre-web-install.sh
│   ├── casaos-install.sh
│   ├── changedetection-install.sh
│   ├── channels-install.sh
│   ├── cloudflared-install.sh
│   ├── cockpit-install.sh
│   ├── commafeed-install.sh
│   ├── cronicle-install.sh
│   ├── daemonsync-install.sh
│   ├── dashy-install.sh
│   ├── debian-install.sh
│   ├── deconz-install.sh
│   ├── deluge-install.sh
│   ├── docker-install.sh
│   ├── dockge-install.sh
│   ├── emby-install.sh
│   ├── emqx-install.sh
│   ├── ersatztv-install.sh
│   ├── esphome-install.sh
│   ├── evcc-install.sh
│   ├── fenrus-install.sh
│   ├── fhem-install.sh
│   ├── flaresolverr-install.sh
│   ├── flowiseai-install.sh
│   ├── forgejo-install.sh
│   ├── frigate-install.sh
│   ├── gitea-install.sh
│   ├── go2rtc-install.sh
│   ├── gokapi-install.sh
│   ├── gotify-install.sh
│   ├── grafana-install.sh
│   ├── grocy-install.sh
│   ├── headscale-install.sh
│   ├── heimdall-dashboard-install.sh
│   ├── hivemq-install.sh
│   ├── homarr-install.sh
│   ├── homeassistant-core-install.sh
│   ├── homeassistant-install.sh
│   ├── homebox-install.sh
│   ├── homebridge-install.sh
│   ├── homepage-install.sh
│   ├── homer-install.sh
│   ├── hyperhdr-install.sh
│   ├── hyperion-install.sh
│   ├── influxdb-install.sh
│   ├── iobroker-install.sh
│   ├── iventoy-install.sh
│   ├── jackett-install.sh
│   ├── jellyfin-install.sh
│   ├── jellyseerr-install.sh
│   ├── kavita-install.sh
│   ├── keycloak-install.sh
│   ├── kubo-install.sh
│   ├── lazylibrarian-install.sh
│   ├── lidarr-install.sh
│   ├── linkwarden-install.sh
│   ├── lldap-install.sh
│   ├── mafl-install.sh
│   ├── magicmirror-install.sh
│   ├── mariadb-install.sh
│   ├── matterbridge-install.sh
│   ├── mediamtx-install.sh
│   ├── medusa-install.sh
│   ├── memos-install.sh
│   ├── meshcentral-install.sh
│   ├── metube-install.sh
│   ├── mongodb-install.sh
│   ├── motioneye-install.sh
│   ├── mqtt-install.sh
│   ├── myspeed-install.sh
│   ├── mysql-install.sh
│   ├── n8n-install.sh
│   ├── navidrome-install.sh
│   ├── neo4j-install.sh
│   ├── nextcloudpi-install.sh
│   ├── nginxproxymanager-install.sh
│   ├── nocodb-install.sh
│   ├── node-red-install.sh
│   ├── notifiarr-install.sh
│   ├── ntfy-install.sh
│   ├── nzbget-install.sh
│   ├── octoprint-install.sh
│   ├── ollama-install.sh
│   ├── omada-install.sh
│   ├── ombi-install.sh
│   ├── omv-install.sh
│   ├── openhab-install.sh
│   ├── openobserve-install.sh
│   ├── openwebui-install.sh
│   ├── overseerr-install.sh
│   ├── owncast-install.sh
│   ├── pairdrop-install.sh
│   ├── paperless-ngx-install.sh
│   ├── pbs-install.sh
│   ├── peanut-install.sh
│   ├── petio-install.sh
│   ├── photoprism-install.sh
│   ├── pialert-install.sh
│   ├── pihole-install.sh
│   ├── pingvin-install.sh
│   ├── plex-install.sh
│   ├── pocketbase-install.sh
│   ├── podman-homeassistant-install.sh
│   ├── podman-install.sh
│   ├── postgresql-install.sh
│   ├── prometheus-install.sh
│   ├── prowlarr-install.sh
│   ├── qbittorrent-install.sh
│   ├── rabbitmq-install.sh
│   ├── radarr-install.sh
│   ├── rdtclient-install.sh
│   ├── readarr-install.sh
│   ├── readeck-install.sh
│   ├── redis-install.sh
│   ├── rtsptoweb-install.sh
│   ├── runtipi-install.sh
│   ├── sabnzbd-install.sh
│   ├── scrypted-install.sh
│   ├── sftpgo-install.sh
│   ├── shinobi-install.sh
│   ├── smokeping-install.sh
│   ├── sonarr-install.sh
│   ├── spoolman-install.sh
│   ├── stirling-pdf-install.sh
│   ├── syncthing-install.sh
│   ├── tandoor-install.sh
│   ├── tasmoadmin-install.sh
│   ├── tautulli-install.sh
│   ├── tdarr-install.sh
│   ├── technitiumdns-install.sh
│   ├── threadfin-install.sh
│   ├── tianji-install.sh
│   ├── traccar-install.sh
│   ├── traefik-install.sh
│   ├── transmission-install.sh
│   ├── trilium-install.sh
│   ├── ubuntu-install.sh
│   ├── umami-install.sh
│   ├── umbrel-install.sh
│   ├── unifi-install.sh
│   ├── unmanic-install.sh
│   ├── uptimekuma-install.sh
│   ├── vaultwarden-install.sh
│   ├── wallos-install.sh
│   ├── wastebin-install.sh
│   ├── watchyourlan-install.sh
│   ├── whisparr-install.sh
│   ├── whoogle-install.sh
│   ├── wikijs-install.sh
│   ├── wireguard-install.sh
│   ├── yunohost-install.sh
│   ├── zabbix-install.sh
│   ├── zigbee2mqtt-install.sh
│   ├── zipline-install.sh
│   ├── zoraxy-install.sh
│   └── zwave-js-ui-install.sh
├── misc/
│   ├── add-netbird-lxc.sh
│   ├── add-tailscale-lxc.sh
│   ├── all-templates.sh
│   ├── alpine-install.func
│   ├── build.func
│   ├── clean-lxcs.sh
│   ├── clean.sh
│   ├── code-server.sh
│   ├── container-restore-from-backup.sh
│   ├── copy-data/
│   │   ├── README.md
│   │   ├── home-assistant-container-copy-data-home-assistant-container.sh
│   │   ├── home-assistant-container-copy-data-home-assistant-core.sh
│   │   ├── home-assistant-container-copy-data-podman-home-assistant.sh
│   │   ├── home-assistant-core-copy-data-home-assistant-container.sh
│   │   ├── home-assistant-core-copy-data-home-assistant-core.sh
│   │   ├── plex-copy-data-plex.sh
│   │   ├── podman-home-assistant-copy-data-home-assistant-container.sh
│   │   ├── z2m-copy-data-z2m.sh
│   │   └── zwavejs2mqtt-copy-data-zwavejsui.sh
│   ├── core-restore-from-backup.sh
│   ├── cron-update-lxcs.sh
│   ├── crowdsec.sh
│   ├── daemonsync_2.2.0.0059_amd64.deb
│   ├── filebrowser.sh
│   ├── frigate-support.sh
│   ├── fstrim.sh
│   ├── glances.sh
│   ├── host-backup.sh
│   ├── hw-acceleration.sh
│   ├── install.func
│   ├── kernel-clean.sh
│   ├── kernel-pin.sh
│   ├── microcode.sh
│   ├── monitor-all.sh
│   ├── netdata.sh
│   ├── olivetin.sh
│   ├── pbs3-upgrade.sh
│   ├── post-pbs-install.sh
│   ├── post-pve-install.sh
│   ├── pve8-upgrade.sh
│   ├── pyenv.sh
│   ├── scaling-governor.sh
│   ├── update-lxcs-cron.sh
│   ├── update-lxcs.sh
│   ├── usb-passthrough.sh
│   └── webmin.sh
├── turnkey/
│   └── turnkey.sh
└── vm/
    ├── debian-vm.sh
    ├── haos-vm.sh
    ├── mikrotik-routeros.sh
    ├── nextcloud-vm.sh
    ├── openwrt.sh
    ├── owncloud-vm.sh
    ├── pimox-haos-vm.sh
    ├── ubuntu2204-vm.sh
    └── ubuntu2404-vm.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/CODE_OF_CONDUCT.md
================================================

# Contributor Covenant Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
  and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
  overall community

Examples of unacceptable behavior include:

* The use of sexualized language or imagery, and sexual attention or
  advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
  address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement.
All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: A violation through a single incident or series
of actions.

**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.

### 3. Temporary Ban

**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.

**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior,  harassment of an
individual, or aggression toward or disparagement of classes of individuals.

**Consequence**: A permanent ban from any sort of public interaction within
the community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].

Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].

For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
at [https://www.contributor-covenant.org/translations][translations].

[homepage]: https://www.contributor-covenant.org
[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations


================================================
FILE: .github/CONTRIBUTING.md
================================================
<div align="center">
  <a href="#">
    <img src="https://raw.githubusercontent.com/tteck/Proxmox/main/misc/images/logo.png" height="100px" />
 </a>
</div>
<h2 align="center">Contributing to Proxmox VE Helper Scripts</h2>

Everybody is invited and welcome to contribute to Proxmox VE Helper Scripts. 

- Pull requests submitted against [**main**](https://github.com/tteck/Proxmox/tree/main) are meticulously scrutinized, so please do not take it personally if the project maintainer rejects your request. By adhering to the established patterns and conventions throughout the codebase, you greatly increase the likelihood that your changes will get merged into [**main**](https://github.com/tteck/Proxmox/tree/main).

- It is important to stress that complaining about a decision after it has been made is not productive behavior for the pull request submitter. It is crucial for all contributors to respect the decision-making process and collaborate effectively towards achieving the best possible outcome for the project.

- The repository will only accept Alpine applications that make use of the Alpine Package Keeper.


================================================
FILE: .github/FUNDING.yml
================================================
ko_fi: proxmoxhelperscripts


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yaml
================================================
name: Problems with a script.
description: Generate a report on an issue pertaining specifically to a script. For other inquires please share them in the Discussions section.
body:
  - type: markdown
    attributes:
      value: |
        **IMPORTANT:** Failure to comply with the following guidelines may result in immediate closure.
        - Prior to submitting, kindly search the closed issues to check if the problem you are reporting has already been addressed and resolved. If you come across a closed issue that pertains to your problem, please leave a comment on that issue instead of creating a new one.
        - If the default Linux distribution is not adhered to, script support will be discontinued.
        - When encountering the error message `[ERROR] in line 23: exit code *: while executing command "$@" > /dev/null 2>&1`, make sure to run the script in verbose mode to accurately determine the underlying issue.
        - For suggestions, questions or feature/script requests, please share them in the [Discussions section.](https://github.com/tteck/Proxmox/discussions)
  - type: input
    id: guidelines
    attributes:
      label: Please verify that you have read and understood the guidelines.
      placeholder: 'yes'
    validations:
      required: true
  - type: textarea
    id: bug
    attributes:
      label: A clear and concise description of the issue.
    validations:
      required: true
  - type: dropdown
    id: settings
    validations:
      required: true
    attributes:
      label: What settings are you currently utilizing?
      options:
        - 
        - Default Settings
        - Advanced Settings
  - type: markdown
    attributes:
      value: (if Advanced Settings, please try Default Settings before creating an issue)
  - type: dropdown
    id: distribution
    validations:
      required: true
    attributes:
      label: Which Linux distribution are you employing?
      options:
        - 
        - Alpine
        - Debian 11
        - Debian 12
        - Ubuntu 20.04
        - Ubuntu 22.04
        - Ubuntu 24.04
  - type: textarea
    id: screenshot
    attributes:
      label: If relevant, including screenshots or a code block can be helpful in clarifying the issue.
      placeholder: Code blocks begin and conclude by enclosing the code with three backticks (```) above and below it.
    validations:
      required: false
  - type: textarea
    id: reproduce
    attributes:
      label: Please provide detailed steps to reproduce the issue.
      placeholder: First do this, then this ...
    validations:
      required: false


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: Helper-Scripts Community Support
    url: https://github.com/tteck/Proxmox/discussions
    about: Please ask and answer questions here.


================================================
FILE: .github/pull_request_template.md
================================================
> [!NOTE]
I am meticulous when it comes to merging code into the main branch, so please understand that I may reject pull requests that do not meet the project's standards. It's never personal. Also, game-related scripts have a lower chance of being merged.

## Description

Provide a summary of the changes made and/or reference the issue being addressed.

Fixes # (issue)

## Type of change

Please check the relevant option(s):

- [ ] Bug fix (non-breaking change that resolves an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (a fix or feature that would cause existing functionality to change unexpectedly)
- [ ] New script (a fully functional and thoroughly tested script or set of scripts.)
- [ ] Self-review performed (I have reviewed my code, ensuring it follows established patterns and conventions)
- [ ] Documentation update required (this change requires an update to the documentation)



================================================
FILE: CHANGELOG.md
================================================
<div align="center">
  <a href="#">
    <img src="https://raw.githubusercontent.com/tteck/Proxmox/main/misc/images/logo.png" height="100px" />
 </a>
</div>
<h1 align="center">Changelog</h1>

<h3 align="center">All notable changes to this project will be documented in this file.</h3>

> [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.

> [!NOTE]
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.

## 2024-10-27

### Changed

- **Open WebUI LXC** [(Commit)](https://github.com/tteck/Proxmox/commit/8a21f6e7f025a911865395d4c0fa9a001bd0d512)
  - Refactor Script to add an option to install Ollama.

## 2024-10-26

### Changed

- **AdventureLog LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/adventurelog-install.sh)
  - NEW Script

## 2024-10-25

### Changed

- **Zoraxy LXC** [(Commit)](https://github.com/tteck/Proxmox/commit/468a5d367ded4cf453a1507452e112ac3e234e2a)
  - Switch built from source to a pre-compiled binary version.
  - Breaking Change

## 2024-10-23

### Changed

- **Wallos LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/wallos-install.sh)
  - NEW Script
- **Open WebUI LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/openwebui-install.sh)
  - NEW Script

## 2024-10-19

### Changed

- **Cockpit LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/cockpit-install.sh)
  - NEW Script
- **Neo4j LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/neo4j-install.sh)
  - NEW Script

## 2024-10-18

### Changed

- **ArchiveBox LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/archivebox-install.sh)
  - NEW Script

## 2024-10-15

### Changed

- **evcc LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/evcc-install.sh)
  - NEW Script

## 2024-10-10

### Changed

- **MySQL LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/mysql-install.sh)
  - NEW Script
- **Tianji LXC** [(Commit)](https://github.com/tteck/Proxmox/commit/4c83a790ac9b040da1f11ad2cbe13d3fc5f480e9)
  - Breaking Change
  - Switch from `pm2` process management to `systemd`

## 2024-10-03

### Changed

- **Home Assistant Core LXC** [(Commit)](https://github.com/tteck/Proxmox/commit/f2937febe69b2bad8b3a14eb84aa562a8f14cc6a) [(Commit)](https://github.com/tteck/Proxmox/commit/f2966ced7f457fd506f865f7f5b70ea12c4b0049)
  - Refactor Code
  - Breaking Change
  - Home Assistant has transitioned to using `uv` for managing the virtual environment and installing additional modules.

## 2024-09-16

### Changed

- **HomeBox LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/homebox-install.sh)
  - NEW Script
- **Zipline LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/zipline-install.sh)
  - NEW Script

## 2024-09-13

### Changed

- **Tianji LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/tianji-install.sh)
  - NEW Script

## 2024-08-21

### Changed

- **WireGuard LXC** [(Commit)](https://github.com/tteck/Proxmox/commit/723365a79df7cc0fd29b1af8f7ef200a7e0921b1)
  - Refactor Code
  - Breaking Change

## 2024-08-19

### Changed

- **CommaFeed LXC** [(Commit)](https://github.com/tteck/Proxmox/commit/0a33d1739ec3a49011411929bd46a260e92e99f9)
  - Refactor Code
  - Breaking Change

## 2024-08-06

### Changed

- **lldap LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/lldap-install.sh)
  - NEW Script

## 2024-07-26

### Changed

- **Gitea LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/gitea-install.sh)
  - NEW Script

## 2024-06-30

### Changed

- **All Scripts** [(Commit)](https://github.com/tteck/Proxmox/commit/39ea1d4a20b83c07d084ebafdc811eec3548f289)
  - Requires Proxmox Virtual Environment version 8.1 or later.

## 2024-06-27

### Changed

- **Kubo LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/kubo-install.sh)
  - NEW Script
- **RabbitMQ LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/rabbitmq-install.sh)
  - NEW Script
- **Scrutiny LXC**
  - Removed from website, broken.

## 2024-06-26

### Changed

- **Scrutiny LXC**
  - NEW Script

## 2024-06-14

### Changed

- **MySpeed LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/myspeed-install.sh)
  - NEW Script

## 2024-06-13

### Changed

- **PeaNUT LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/peanut-install.sh)
  - NEW Script
- **Website**
  - If the Changelog has changed recently, the link on the website will pulse.
- **Spoolman LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/spoolman-install.sh)
  - NEW Script

## 2024-06-12

### Changed

- **MeTube LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/metube-install.sh)
  - NEW Script
- **Matterbridge LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/matterbridge-install.sh)
  - NEW Script
- **Website**
  - Reopen the gh-pages site (https://tteck.github.io/Proxmox/) 

## 2024-06-11

### Changed

- **Zabbix LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/zabbix-install.sh)
  - NEW Script

## 2024-06-06

### Changed

- **Petio LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/petio-install.sh)
  - NEW Script
- **Website**
  - Important notices will now be displayed on the landing page.

## 2024-06-04

### Changed

- **FlareSolverr LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/flaresolverr-install.sh)
  - NEW Script

## 2024-05-31

### Changed

- **Advanced Settings** [(Commit)](https://github.com/tteck/Proxmox/commit/fc9dff220b4ea426d3a75178ad8accacae4683ca)
  - Passwords are now masked

## 2024-05-30

### Changed

- **Forgejo LXC**
  - NEW Script

## 2024-05-28

### Changed

- **Notifiarr LXC**
  - NEW Script

## 2024-05-25

### Changed

- **Threadfin LXC**
  - NEW Script

## 2024-05-23

### Changed

- **BunkerWeb LXC**
  - NEW Script

## 2024-05-20

### Changed

- **Traefik LXC**
  - NEW Script

## 2024-05-19

### Changed

- **NetBird**
  - NEW Script
- **Tailscale**
  - Refactor Code

## 2024-05-18

### Changed

- **MongoDB LXC**
  - NEW Script

## 2024-05-17

### Changed

- **New Website**
  - We have officially moved to [Helper-Scripts.com](https://helper-scripts.com)

## 2024-05-16

### Changed

- **iVentoy LXC**
  - NEW Script

## 2024-05-13

### Changed

- **Headscale LXC**
  - NEW Script

## 2024-05-11

### Changed

- **Caddy LXC**
  - NEW Script

## 2024-05-09

### Changed

- **Umami LXC**
  - NEW Script

## 2024-05-08

### Changed

- **Kernel Pin**
  - NEW Script
- **Home Assistant Core LXC**
  - Ubuntu 24.04 ONLY

## 2024-05-07

### Changed

- **Pocketbase LXC**
  - NEW Script

## 2024-05-05

### Changed

- **Fenrus LXC**
  - NEW Script

## 2024-05-02

### Changed

- **OpenMediaVault LXC**
  - Set Debian 12 as default
  - OpenMediaVault 7 (sandworm)

## 2024-04-30

### Changed

- **Tdarr LXC**
  - Default settings are now **Unprivileged**
  - Unprivileged Hardware Acceleration

## 2024-04-29

### Changed

- **ErsatzTV LXC**
  - NEW Script

## 2024-04-28

### Changed

- **Scrypted LXC**
  - Unprivileged Hardware Acceleration
- **Emby LXC**
  - Unprivileged Hardware Acceleration

## 2024-04-27

### Changed

- **Frigate LXC**
  - Unprivileged Hardware Acceleration https://github.com/tteck/Proxmox/discussions/2711#discussioncomment-9244629
- **Ubuntu 24.04 VM**
  - NEW Script

## 2024-04-26

### Changed

- **Glances**
  - NEW Script

## 2024-04-25

### Changed

- **Jellyfin LXC**
  - Default settings are now **Unprivileged**
  - Unprivileged Hardware Acceleration
  - Groups are set automatically
  - Checks for the existence of `/dev/dri/card0` if not found, use `/dev/dri/card1`. Set the GID to `44`
  - Set the GID for `/dev/dri/renderD128` to `104`
  - Not tested <8.1.11
- **Plex LXC**
  - Default settings are now **Unprivileged**
  - Unprivileged Hardware Acceleration
  - Groups are set automatically
  - Checks for the existence of `/dev/dri/card0` if not found, use `/dev/dri/card1`. Set the GID to `44`
  - Set the GID for `/dev/dri/renderD128` to `104`
  - Not tested <8.1.11

## 2024-04-24

### Changed

- **Traccar LXC**
  - NEW Script
- **Calibre-Web LXC**
  - NEW Script

## 2024-04-21

### Changed

- **Aria2 LXC**
  - NEW Script

## 2024-04-15

### Changed

- **Homarr LXC**
  - Add back to website
- **Umbrel LXC**
  - Add back to website
- **OpenMediaVault LXC**
  - Add back to website

## 2024-04-12

### Changed

- **OpenMediaVault LXC**
  - Removed from website

## 2024-04-09

### Changed

- **PairDrop LXC**
  - Add back to website

## 2024-04-05

### Changed

- **Medusa LXC**
  - NEW Script
- **WatchYourLAN LXC**
  - NEW Script

## 2024-04-04

### Changed

- **Actual Budget LXC**
  - NEW Script

## 2024-04-03

### Changed

- **LazyLibrarian LXC**
  - NEW Script

## 2024-04-01

### Changed

- **Frigate LXC**
  - NEW Script

## 2024-03-26

### Changed

- **MediaMTX LXC**
  - NEW Script

## 2024-03-25

### Changed

- **Proxmox VE Post Install**
  - ~Requires Proxmox Virtual Environment Version 8.1.1 or later.~
  - Requires Proxmox Virtual Environment Version 8.0 or later.
- **Proxmox Backup Server LXC**
  - NEW Script

## 2024-03-24

### Changed

- **SmokePing LXC**
  - NEW Script

## 2024-03-13

### Changed

- **FlowiseAI LXC**
  - NEW Script

## 2024-03-11

### Changed

- **Wastebin LXC**
  - NEW Script

## 2024-03-08

### Changed

- **Proxmox VE Post Install**
  - Requires Proxmox Virtual Environment Version 8.1.1 or later.

## 2024-02-26

### Changed

- **Mafl LXC**
  - NEW Script

## 2024-02-23

### Changed

- **Tandoor Recipes LXC**
  - NEW Script (Thanks @MickLesk)

## 2024-02-21

### Changed

- **All scripts**
  - As of today, the scripts require the Bash shell specifically. ([more info](https://github.com/tteck/Proxmox/discussions/2536))

## 2024-02-19

### Changed

- **PairDrop LXC**
  - Removed from the website ([more info](https://github.com/tteck/Proxmox/discussions/2516))

## 2024-02-16

### Changed

- **Proxmox VE LXC Filesystem Trim**
  - NEW Script ([more info](https://github.com/tteck/Proxmox/discussions/2505#discussion-6226037))

## 2024-02-11

### Changed

- **HiveMQ CE LXC**
  - NEW Script
- **Apache-CouchDB LXC**
  - NEW Script

## 2024-02-06

### Changed

- **All Scripts**
  - The scripts will only work with PVE7 Version 7.4-13 or later, or PVE8 Version 8.1.1 or later.

## 2024-02-05

### Changed

- **Gokapi LXC**
  - NEW Script
- **Nginx Proxy Manager LXC**
  - Option to install v2.10.4

## 2024-02-04

### Changed

- **Pi-hole LXC**
  - Option to add Unbound

## 2024-02-02

### Changed

- **Readeck LXC**
  - NEW Script

## 2024-01-25

### Changed

- **PairDrop LXC**
  - NEW Script

## 2024-01-20

### Changed

- **Apache-Cassandra LXC**
  - NEW Script
- **Redis LXC**
  - NEW Script

## 2024-01-17

### Changed

- **ntfy LXC**
  - NEW Script
- **HyperHDR LXC**
  - NEW Script

## 2024-01-16

### Changed

- **Website Improvements**
  - Refine and correct pointers.
  - Change hover colors to intuitively indicate categories/items.
  - Implement opening links in new tabs for better navigation.
  - Enhance the Copy button to better indicate that the command has been successfully copied.
  - Introduce a Clear Search button.
  - While not directly related to the website, it's worth mentioning that the logo in newly created LXC notes now serves as a link to the website, conveniently opening in a new tab.

## 2024-01-12

### Changed

- **Apt-Cacher-NG LXC**
  - NEW Script
- **New Feature**
  - The option to utilize Apt-Cacher-NG (Advanced settings) when creating LXCs. The added functionality is expected to decrease bandwidth usage and expedite package installation and updates. https://github.com/tteck/Proxmox/discussions/2332

## 2024-01-09

### Changed

- **Verbose mode**
  - Only entries with `$STD` will be shown

## 2024-01-07

### Changed

- **Stirling-PDF LXC**
  - NEW Script
- **SFTPGo LXC**
  - NEW Script

## 2024-01-04

### Changed

- **CommaFeed LXC**
  - NEW Script

## 2024-01-03

### Changed

- **Sonarr LXC**
  - Breaking Change
  - Complete recode
  - https://github.com/tteck/Proxmox/discussions/1738#discussioncomment-8005107

## 2024-01-01

### Changed

- **Gotify LXC**
  - NEW Script

## 2023-12-19

### Changed

- **Proxmox VE Netdata**
  - NEW Script

## 2023-12-10

### Changed

- **Homarr LXC**
  - Removed, again.

## 2023-12-02

### Changed

- **Runtipi LXC**
  - NEW Script

## 2023-12-01

### Changed

- **Mikrotik RouterOS VM**
  - Now Mikrotik RouterOS CHR VM
  - code refactoring
  - update to CHR
  - thanks to @NiccyB
- **Channels DVR Server LXC**
  - NEW Script

## 2023-11-19

### Changed

- **Dockge LXC**
  - NEW Script

## 2023-11-18

### Changed

- **Ubuntu 22.04 VM**
  - NEW Script

## 2023-11-14

### Changed

- **TurnKey Nextcloud VM**
  - NEW Script
- **TurnKey ownCloud VM**
  - NEW Script

## 2023-11-11

### Changed

- **Homarr LXC**
  - Returns with v0.14.0 (The authentication update).

## 2023-11-9

### Changed

- **AgentDVR LXC**
  - NEW Script

## 2023-11-8

### Changed

- **Linkwarden LXC**
  - NEW Script

## 2023-11-2

### Changed

- **PhotoPrism LXC**
  - Transitioned to PhotoPrism's latest installation package, featuring Linux binaries.

## 2023-11-1

### Changed

- **Owncast LXC**
  - NEW Script

## 2023-10-31

### Changed

- **Debian 12 VM**
  - NEW Script

## 2023-10-29

### Changed

- **Unmanic LXC**
  - NEW Script

## 2023-10-27

### Changed

- **Webmin**
  - A full code overhaul.

## 2023-10-15

### Changed

- **TasmoAdmin LXC**
  - NEW Script

## 2023-10-14

### Changed

- **Sonarr LXC**
  - Include an option to install v4 (experimental)

## 2023-10-11

### Changed

- **Proxmox VE CPU Scaling Governor**
  - A full code overhaul.
  - Include an option to configure a crontab for ensuring that the CPU Scaling Governor configuration persists across reboots.

## 2023-10-08

### Changed

- **Proxmox VE LXC Updater**
  - Now displays which containers require a reboot.
- **File Browser**
  - Uninstall by re-executing the script
  - Option to use No Authentication

## 2023-10-05

### Changed

- **Pingvin Share LXC**
  - NEW Script

## 2023-09-30

### Changed

- **All Templates**
  - NEW Script

## 2023-09-28

### Changed

- **Alpine Nextcloud Hub LXC**
  - NEW Script (Thanks to @nicedevil007)

## 2023-09-14

### Changed

- **Proxmox VE Processor Microcode**
  - Allow users to select available microcode packages.

## 2023-09-13

### Changed

- **Pi.Alert LXC**
  - NEW Script
- **Proxmox VE Kernel Clean**
  - Code overhaul with a fresh start. This script offers the flexibility to select specific kernels for removal, unlike the previous version, which was an all-or-nothing approach.

## 2023-09-11

### Changed

- **Paperless-ngx LXC**
  - Modify the script to incorporate Redis and PostgreSQL, while also introducing an option to include Adminer during installation.

## 2023-09-10

### Changed

- **TurnKey Game Server LXC**
  - NEW Script

## 2023-09-09

### Changed

- **Proxmox VE Host Backup**
  - Users are now able to specify both the backup path and the directory in which they wish to work.

## 2023-09-07

### Changed

- **Proxmox VE Host Backup**
  - NEW Script

## 2023-09-06

### Changed

- **Proxmox VE LXC Cleaner**
  - Added a new menu that allows you to choose which containers you want to exclude from the clean process.
- **Tailscale**
  - Added a menu that enables you to choose the specific container where you want to install Tailscale.

## 2023-09-05

### Changed

- **Proxmox VE LXC Updater**
  - Added a new menu that allows you to choose which containers you want to exclude from the update process.

## 2023-09-01

### Changed

- **TurnKey Media Server LXC**
  - NEW Script

## 2023-08-31

### Changed

- **TurnKey ZoneMinder LXC**
  - NEW Script
- **TurnKey OpenVPN LXC**
  - NEW Script

## 2023-08-30

### Changed

- **TurnKey**
  - Introducing a **NEW** Category on the Site.
  - My intention is to maintain the TurnKey scripts in their simplest form, contained within a single file, and with minimal options, if any.
- **TurnKey Core LXC**
  - NEW Script
- **TurnKey File Server LXC**
  - NEW Script
- **TurnKey Gitea LXC**
  - NEW Script
- **TurnKey GitLab LXC**
  - NEW Script
- **TurnKey Nextcloud LXC**
  - NEW Script
- **TurnKey Observium LXC**
  - NEW Script
- **TurnKey ownCloud LXC**
  - NEW Script
- **TurnKey Torrent Server LXC**
  - NEW Script
- **TurnKey Wordpress LXC**
  - NEW Script

## 2023-08-24

### Changed

- **qBittorrent LXC**
  - Added back to repository with UPnP disabled and password changed.

## 2023-08-24

### Changed

- **qBittorrent LXC**
  - Removed from this repository for potential malicious hidden code https://github.com/tteck/Proxmox/discussions/1725

## 2023-08-16

### Changed

- **Homarr LXC**
  - NEW Script

## 2023-08-10

### Changed

- **Proxmox VE Processor Microcode**
  - AMD microcode-20230808 Release

## 2023-08-09

### Changed

- **Omada Controller LXC**
  - Update via script
- **Proxmox VE Processor Microcode**
  - [Intel microcode-20230808 Release](https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files/releases/tag/microcode-20230808)

## 2023-08-01

### Changed

- **Overseerr LXC**
  - NEW Script
- **Jellyseerr LXC**
  - NEW Script

## 2023-07-24

### Changed

- **Ombi LXC**
  - NEW Script

## 2023-07-23

### Changed

- **Zoraxy LXC**
  - NEW Script

## 2023-07-18

### Changed

- **Proxmox VE Cron LXC Updater**
  - NEW Script

## 2023-07-11

### Changed

- **Scrypted LXC**
  - Add VAAPI hardware transcoding

## 2023-07-07

### Changed

- **Real-Debrid Torrent Client LXC**
  - NEW Script

## 2023-07-05

### Changed

- There have been more than 110 commits since June 18th, although not all of them are significant, with a majority focused on ensuring compatibility with Proxmox VE 8 and Debian 12.

## 2023-06-18

### Changed

- **OpenObserve LXC**
  - NEW Script

## 2023-06-17

### Changed

- **UniFi Network Application LXC**
  - Now distribution agnostic.
- **Omada Controller LXC**
  - Now distribution agnostic.
## 2023-06-16

### Changed

- **Proxmox VE Monitor-All**
  - Skip instances based on onboot and templates. [8c2a3cc](https://github.com/tteck/Proxmox/commit/8c2a3cc4d774fa13d17f695d6bdf9a4deedb1372). 

## 2023-06-12

### Changed

- **Proxmox VE Edge Kernel**
  - Removed, with the Proxmox opt-in kernels and the upcoming Proxmox Virtual Environment 8, edge kernels are no longer needed.
- **Proxmox VE Kernel Clean**
  - Now compatible with PVE8.

## 2023-06-11

### Changed

- **Proxmox VE Post Install**
  - Now compatible with both Proxmox Virtual Environment 7 (PVE7) and Proxmox Virtual Environment 8 (PVE8). 

## 2023-06-02

### Changed

- **Proxmox VE 7 Post Install**
  - In a non-clustered environment, you can choose to disable high availability, which helps save system resources.

## 2023-05-27

### Changed

- **Proxmox VE 7 Post Install**
  - If an Intel N-series processor is detected, ~the script provides options to install both the Proxmox 6.2 kernel and the Intel microcode.~ and using PVE7, recommend using PVE8

## 2023-05-23

### Changed

- **OpenWrt VM**
  - NEW Script

## 2023-05-17

### Changed

- **Alpine-AdGuard Home LXC**
  - Removed, it wasn't installed through the Alpine package manager.
- **Alpine-Whoogle LXC**
  - Removed, it wasn't installed through the Alpine package manager.

## 2023-05-16

### Changed

- **Proxmox VE LXC Updater**
  - Add information about the boot disk, which provides an easy way to determine if you need to expand the disk.
- **Proxmox VE Processor Microcode**
  - [Intel microcode-20230512 Release](https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files/releases/tag/microcode-20230512)

## 2023-05-13

### Changed

- **Tautulli LXC**
  - NEW Script

## 2023-05-12

### Changed

- **Bazarr LXC**
  - NEW Script

## 2023-05-08

### Changed

- **Proxmox VE Intel Processor Microcode**
  - Renamed to **Proxmox VE Processor Microcode**
  - Automatically identifies the processor vendor (Intel/AMD) and installs the appropriate microcode.

## 2023-05-07

### Changed

- **FHEM LXC**
  - NEW Script

## 2023-05-01

### Changed

- **OctoPrint LXC**
  - NEW Script
- **Proxmox VE Intel Processor Microcode**
  - NEW Script

## 2023-04-30

### Changed

- **Proxmox VE Monitor-All**
  - NEW Script
  - Replaces Proxmox VE LXC Monitor

## 2023-04-28

### Changed

- **Proxmox VE LXC Monitor**
  - NEW Script

## 2023-04-26

### Changed

- **The site can now be accessed through a more memorable URL, which is [helper-scripts.com](http://helper-scripts.com).**

## 2023-04-23

### Changed

- **Non-Alpine LXC's**
  - Advanced settings provide the option for users to switch between Debian and Ubuntu distributions. However, some applications or services, such as Deconz, grocy or Omada, may not be compatible with the selected distribution due to dependencies.

## 2023-04-16

### Changed

- **Home Assistant Core LXC**
  - Python 3.11.2

## 2023-04-15

### Changed

- **InfluxDB LXC**
  - Choosing InfluxDB v1 will result in Chronograf being installed automatically.
- **[User Submitted Guides](https://github.com/tteck/Proxmox/blob/main/USER_SUBMITTED_GUIDES.md)**
  -  Informative guides that demonstrate how to install various software packages using Proxmox VE Helper Scripts.

## 2023-04-14

### Changed

- **Cloudflared LXC**
  - NEW Script

## 2023-04-05

### Changed

- **Jellyfin LXC**
  - Set Ubuntu 22.04 as default
  - Use the Deb822 format jellyfin.sources configuration (jellyfin.list configuration has been obsoleted)

## 2023-04-02

### Changed

- **Home Assistant OS VM**
  - Include a choice within the "Advanced" settings to configure the CPU model between kvm64 (default) or host.

## 2023-03-31

### Changed

- **Home Assistant OS VM**
  - Include a choice within the "Advanced" settings to configure the disk cache between none (default) or Write Through.

## 2023-03-27

### Changed

- **Removed Alpine-ESPHome LXC**
  - Nonoperational
- **All Scripts**
  - Incorporate code that examines whether SSH is being used and, if yes, offers a suggestion against it without restricting or blocking its usage.

## 2023-03-25

### Changed

- **Alpine-ESPHome LXC**
  - NEW Script
- **Alpine-Whoogle LXC**
  - NEW Script

## 2023-03-22

### Changed

- **The latest iteration of the scripts**
  - Going forward, versioning will no longer be utilized in order to avoid breaking web-links in blogs and YouTube videos.
  - The scripts have been made more legible as the repetitive code has been moved to function files, making it simpler to share among the scripts and hopefully easier to maintain. This also makes it simpler to contribute to the project.
  - When a container is created with privileged mode enabled, the USB passthrough feature is automatically activated.

## 2023-03-18

### Changed

- **Alpine-AdGuard Home LXC** (Thanks @nicedevil007)
  - NEW Script
- **Alpine-Docker LXC**
  - NEW Script
- **Alpine-Zigbee2MQTT LXC**
  - NEW Script

## 2023-03-15

### Changed

- **Alpine-Grafana LXC** (Thanks @nicedevil007)
  - NEW Script

## 2023-03-10

### Changed

- **Proxmox LXC Updater** 
  - You can use the command line to exclude multiple containers simultaneously.

## 2023-03-08

### Changed

- **Proxmox CPU Scaling Governor**
  - Menu options dynamically based on the available scaling governors.

## 2023-03-07

### Changed

- **Alpine-Vaultwarden LXC**
  - NEW Script
- **All LXC Scripts**
  - Retrieve the time zone from Proxmox and configure the container to use the same time zone

## 2023-02-24

### Changed

- **qBittorrent LXC** (Thanks @romka777)
  - NEW Script
- **Jackett LXC** (Thanks @romka777)
  - NEW Script

## 2023-02-23

### Changed

- **Proxmox LXC Updater** 
  - Skip all templates, allowing for the starting, updating, and shutting down of containers to be resumed automatically.
  - Exclude an additional container by adding the CTID at the end of the shell command ( -s 103).

## 2023-02-16

### Changed

- **RSTPtoWEB LXC** 
  - NEW Script
- **go2rtc LXC** 
  - NEW Script

## 2023-02-12

### Changed

- **OliveTin** 
  - NEW Script

## 2023-02-10

### Changed

- **Home Assistant OS VM** 
  - Code Refactoring

## 2023-02-05

### Changed

- **Devuan LXC** 
  - NEW Script

## 2023-02-02

### Changed

- **Audiobookshelf LXC** 
  - NEW Script
- **Rocky Linux LXC** 
  - NEW Script

## 2023-01-28

### Changed

- **LXC Cleaner** 
  - Code refactoring to give the user the option to choose whether cache or logs will be deleted for each app/service.
  - Leaves directory structure intact

## 2023-01-27

### Changed

- **LXC Cleaner** 
  - NEW Script

## 2023-01-26

### Changed

- **ALL LXC's** 
  - Add an option to disable IPv6 (Advanced)

## 2023-01-25

### Changed

- **Home Assistant OS VM** 
  - switch to v5
  - add an option to set MTU size (Advanced)
  - add arch check (no ARM64) (issue from community.home-assistant.io)
  - add check to insure VMID isn't already used before VM creation (Advanced) (issue from forum.proxmox.com)
  - code refactoring
- **PiMox Home Assistant OS VM** 
  - switch to v5
  - add an option to set MTU size (Advanced)
  - add arch check (no AMD64)
  - add pve check (=>7.2)
  - add check to insure VMID isn't already used before VM creation (Advanced)
  - code refactoring
- **All LXC's** 
  - add arch check (no ARM64) (issue from forum.proxmox.com)

## 2023-01-24

### Changed

- **Transmission LXC** 
  - NEW Script

## 2023-01-23

### Changed

- **ALL LXC's** 
  - Add [Midnight Commander (mc)](https://www.linuxcommand.org/lc3_adv_mc.php)

## 2023-01-22

### Changed

- **Autobrr LXC** 
  - NEW Script

## 2023-01-21

### Changed

- **Kavita LXC** 
  - NEW Script

## 2023-01-19

### Changed

- **SABnzbd LXC** 
  - NEW Script

## 2023-01-17

### Changed

- **Homer LXC** 
  - NEW Script

## 2023-01-14

### Changed

- **Tdarr LXC** 
  - NEW Script
- **Deluge LXC** 
  - NEW Script

## 2023-01-13

### Changed

- **Lidarr LXC** 
  - NEW Script
- **Prowlarr LXC** 
  - NEW Script
- **Radarr LXC** 
  - NEW Script
- **Readarr LXC** 
  - NEW Script
- **Sonarr LXC** 
  - NEW Script
- **Whisparr LXC** 
  - NEW Script

## 2023-01-12

### Changed

- **ALL LXC's** 
  - Add an option to set MTU size (Advanced)

## 2023-01-11

### Changed

- **Home Assistant Core LXC** 
  - Auto Initialize
- **Cronicle Primary/Worker LXC** 
  - NEW Script

## 2023-01-09

### Changed

- **ALL LXC's** 
  - v5
- **k0s Kubernetes LXC** 
  - NEW Script
- **Podman LXC** 
  - NEW Script

## 2023-01-04

### Changed

- **YunoHost LXC** 
  - NEW Script

## 2022-12-31

### Changed

- **v5 Scripts** (Testing before moving forward https://github.com/tteck/Proxmox/discussions/881)
  - Adguard Home LXC
  - Docker LXC
  - Home Assistant Core LXC
  - PhotoPrism LXC
  - Shinobi NVR LXC
  - Vaultwarden LXC

## 2022-12-27

### Changed

- **Home Assistant Container LXC** 
  - Add an option to use Fuse Overlayfs (ZFS) (Advanced)

- **Docker LXC** 
  - Add an option to use Fuse Overlayfs (ZFS) (Advanced)
  - If the LXC is created Privileged, the script will automatically set up USB passthrough.

## 2022-12-22

### Changed

- **All LXC's** 
  - Add an option to run the script in Verbose Mode (Advanced)

## 2022-12-20

### Changed

- **Hyperion LXC** 
  - NEW Script

## 2022-12-17

### Changed

- **Home Assistant Core LXC** 
  - Linux D-Bus Message Broker
  - Mariadb & PostgreSQL Ready
  - Bluetooth Ready
  - Fix for Inconsistent Dependency Versions (dbus-fast & bleak)

## 2022-12-16

### Changed

- **Home Assistant Core LXC** 
  - Python 3.10.8

## 2022-12-09

### Changed

- **Change Detection LXC** 
  - NEW Script

## 2022-12-03

### Changed

- **All LXC's** 
  - Add options to set DNS Server IP Address and DNS Search Domain (Advanced)

## 2022-11-27

### Changed

- **Shinobi LXC** 
  - NEW Script

## 2022-11-24

### Changed

- **Home Assistant OS VM** 
  - Add option to set machine type during VM creation (Advanced)

## 2022-11-23

### Changed

- **All LXC's** 
  - Add option to enable root ssh access during LXC creation (Advanced)

## 2022-11-21

### Changed

- **Proxmox LXC Updater** 
  - Now updates Ubuntu, Debian, Devuan, Alpine Linux, CentOS-Rocky-Alma, Fedora, ArchLinux [(@Uruknara)](https://github.com/tteck/Proxmox/commits?author=Uruknara)

## 2022-11-13

### Changed

- **All LXC's** 
  - Add option to continue upon Internet NOT Connected

## 2022-11-11

### Changed

- **HA Bluetooth Integration Preparation** 
  - [NEW Script](https://github.com/tteck/Proxmox/discussions/719)

## 2022-11-04

### Changed

- **Scrypted LXC** 
  - NEW Script

## 2022-11-01

### Changed

- **Alpine LXC** 
  - NEW Script
- **Arch LXC** 
  - NEW Script

## 2022-10-27

### Changed

- **Container & Core Restore from Backup** 
  - [NEW Scripts](https://github.com/tteck/Proxmox/discussions/674)

## 2022-10-07

### Changed

- **Home Assistant OS VM** 
  - Add "Latest" Image

## 2022-10-05

### Changed

- **Umbrel LXC** 
  - NEW Script (Docker)
- **Blocky LXC** 
  - NEW Script (Adblocker - DNS)

## 2022-09-29

### Changed

- **Home Assistant Container LXC** 
  - If the LXC is created Privileged, the script will automatically set up USB passthrough.
- **Home Assistant Core LXC** 
  - NEW Script
- **PiMox HAOS VM** 
  - NEW Script

## 2022-09-23

### Changed

- **EMQX LXC** 
  - NEW Script

## 2022-09-22

### Changed

- **NextCloudPi LXC** 
  - NEW Script

## 2022-09-21

### Changed

- **Proxmox Backup Server Post Install** 
  - NEW Script
- **Z-wave JS UI LXC** 
  - NEW Script (and all sub scripts 🤞)
- **Zwave2MQTT LXC** 
  - Bye Bye Script

## 2022-09-20

### Changed

- **OpenMediaVault LXC** 
  - NEW Script

## 2022-09-16

### Changed

- **Paperless-ngx LXC** 
  - NEW Script (Thanks @Donkeykong307)

## 2022-09-11

### Changed

- **Trilium LXC** 
  - NEW Script

## 2022-09-10

### Changed

- **Syncthing LXC** 
  - NEW Script

## 2022-09-09

### Changed

- **CasaOS LXC** 
  - NEW Script
- **Proxmox Kernel Clean** 
  - Now works with Proxmox Backup Server

## 2022-09-08

### Changed

- **Navidrome LXC** 
  - NEW Script
- **Homepage LXC** 
  - NEW Script

## 2022-08-31

### Changed

- **All LXC's** 
  - Add Internet & DNS Check

## 2022-08-22

### Changed

- **Wiki.js LXC** 
  - NEW Script
- **Emby Media Server LXC**
  - NEW Script

## 2022-08-20

### Changed

- **Mikrotik RouterOS VM** 
  - NEW Script

## 2022-08-19

### Changed

- **PhotoPrism LXC** 
  - Fixed .env bug (Thanks @cklam2)

## 2022-08-13

### Changed

- **Home Assistant OS VM** 
  - Option to create VM using Stable, Beta or Dev Image

## 2022-08-11

### Changed

- **Home Assistant OS VM** 
  - Validate Storage

## 2022-08-04

### Changed

- **VS Code Server** 
  - NEW Script

## 2022-08-02

### Changed

- **All LXC/VM** 
  - v4 Script - Whiptail menu's

## 2022-07-26

### Changed

- **Home Assistant OS VM** 
  - Set the real time clock (RTC) to local time.
  - Disable the USB tablet device (save resources / not needed).

## 2022-07-24

### Changed

- **Home Assistant OS VM** 
  - Present the drive to the guest as a solid-state drive rather than a rotational hard disk. There is no requirement that the underlying storage actually be backed by SSD's. 
  - When the VM’s filesystem marks blocks as unused after deleting files, the SCSI controller will relay this information to the storage, which will then shrink the disk image accordingly.
  - 👉 [more info](https://github.com/tteck/Proxmox/discussions/378)

## 2022-07-22

### Changed

- **n8n LXC** (thanks to @cyakimov)
  - NEW Script

## 2022-07-21

### Changed

- **grocy LXC**
  - NEW Script

## 2022-07-17

### Changed

- **Vaultwarden LXC**
  - NEW Vaultwarden Update (post 2022-05-29 installs only) Script
  - NEW Web-vault Update (any) Script

## 2022-07-14

### Changed

- **MagicMirror Server LXC**
  - NEW Script

## 2022-07-13

### Changed

- **Proxmox Edge Kernel Tool**
  - NEW Script

## 2022-07-11

### Changed

- **Home Assistant OS VM**
  - Supports lvmthin, zfspool, nfs, dir and btrfs storage types.

## 2022-07-08

### Changed

- **openHAB LXC**
  - NEW Script

## 2022-07-03

### Changed

- **Tailscale**
  - NEW Script

## 2022-07-01

### Changed

- **Home Assistant OS VM**
  - Allow different storage types (lvmthin, nfs, dir).

## 2022-06-30

### Changed

- **Prometheus LXC**
  - NEW Script

## 2022-06-06

### Changed

- **Whoogle LXC**
  - NEW Script

## 2022-05-29

### Changed

- **Vaultwarden LXC**
  - Code refactoring
- **CrowdSec**
  - NEW Script

## 2022-05-21

### Changed

- **Home Assistant OS VM**
  - Code refactoring

## 2022-05-19

### Changed

- **Keycloak LXC**
  - NEW Script

## 2022-05-18

### Changed

- **File Browser**
  - NEW Script

## 2022-05-13

### Changed

- **PostgreSQL LXC**
  - NEW Script

## 2022-05-10

### Changed

- **deCONZ LXC**
  - NEW Script

## 2022-05-07

### Changed

- **NocoDB LXC**
  - ADD update script

## 2022-05-06

### Changed

- **PhotoPrism LXC**
  - ADD GO Dependencies for full functionality

## 2022-05-05

### Changed

- **Ubuntu LXC**
  - ADD option to define version (18.04 20.04 21.10 22.04)

## 2022-04-28

### Changed

- **v3 Script**
  - Remove Internet Check

## 2022-04-27

### Changed

- **Home Assistant OS VM**
  - ADD Option to set Bridge, VLAN and MAC Address
- **v3 Script**
  - Improve Internet Check (prevent ‼ ERROR 4@57)

## 2022-04-26

### Changed

- **Home Assistant OS VM**
  - Fixed bad path
  - ADD Option to create VM using Latest or Stable image
- **UniFi Network Application LXC**
  - ADD Local Controller Option

## 2022-04-25

### Changed

- **v3 Script**
  - Improve Error Handling

## 2022-04-23

### Changed

- **v3 Script**
  - ADD Internet Connection Check
- **Proxmox VE 7 Post Install**
  - NEW v3 Script
- **Proxmox Kernel Clean**
  - NEW v3 Script

## 2022-04-22

### Changed

- **Omada Controller LXC**
  - Update script to install version 5.1.7
- **Uptime Kuma LXC**
  - ADD Update script

## 2022-04-20

### Changed

- **Ubuntu LXC**
  - ADD option to install version 20.04 or 21.10
- **v3 Script**
  - ADD option to set Bridge

## 2022-04-19

### Changed

- **ALL LXC's**
  - New [V3 Install Script](https://github.com/tteck/Proxmox/issues/162) 
- **ioBroker LXC**
  - New Script V3

## 2022-04-13

### Changed

- **Uptime Kuma LXC**
  - New Script V2

## 2022-04-11

### Changed

- **Proxmox LXC Updater**
  - ADD option to skip stopped containers
- **Proxmox VE 7 Post Install**
  - ADD PVE 7 check

## 2022-04-10

### Changed

- **Debian 11 LXC**
  - ADD An early look at the v3 install script

## 2022-04-09

### Changed

- **NocoDB LXC**
  - New Script V2

## 2022-04-05

### Changed

- **MeshCentral LXC**
  - New Script V2

## 2022-04-01

### Changed

- **Scripts** (V2)
  - FIX Pressing enter without making a selection first would cause an Error 

## 2022-03-28

### Changed

- **Docker LXC**
  - Add Docker Compose Option (@wovalle)

## 2022-03-27

### Changed

- **Heimdall Dashboard LXC**
  - New Update Script

## 2022-03-26

### Changed

- **UniFi Network Application LXC**
  - New Script V2
- **Omada Controller LXC**
  - New Script V2

## 2022-03-25

### Changed

- **Proxmox CPU Scaling Governor**
  - New Script


## 2022-03-24

### Changed

- **Plex Media Server LXC**
  - Switch to Ubuntu 20.04 to support HDR tone mapping
- **Docker LXC**
  - Add Portainer Option

## 2022-03-23

### Changed

- **Heimdall Dashboard LXC**
  - New Script V2

## 2022-03-20

### Changed

- **Scripts** (V2)
  - ADD choose between Automatic or Manual DHCP  

## 2022-03-18

### Changed

- **Technitium DNS LXC**
  - New Script V2
- **WireGuard LXC**
  - Add WGDashboard

## 2022-03-17

### Changed

- **Docker LXC**
  - New Script V2

## 2022-03-16

### Changed

- **PhotoPrism LXC**
  - New Update/Branch Script

## 2022-03-15

### Changed

- **Dashy LXC**
  - New Update Script

## 2022-03-14

### Changed

- **Zwavejs2MQTT LXC**
  - New Update Script

## 2022-03-12

### Changed

- **PhotoPrism LXC**
  - New Script V2

## 2022-03-11

### Changed

- **Vaultwarden LXC**
  - New V2 Install Script

## 2022-03-08

### Changed

- **Scripts** (V2)
  - Choose between Privileged or Unprivileged CT and Automatic or Password Login 
- **ESPHome LXC**
  - New V2 Install Script
- **Zwavejs2MQTT LXC**
  - New V2 Install Script
- **Motioneye LXC**
  - New V2 Install Script
- **Pihole LXC**
  - New V2 Install Script
- **GamUntu LXC**
  - New V2 Install Script

## 2022-03-06

### Changed

- **Zwavejs2MQTT LXC**
  - New GUI script to copy data from one Zwavejs2MQTT LXC to another Zwavejs2MQTT LXC

## 2022-03-05

### Changed

- **Homebridge LXC**
  - New Script V2

## 2022-03-04

### Changed

- **Proxmox Kernel Clean**
  - New Script

## 2022-03-03

### Changed

- **WireGuard LXC**
  - New Script V2

## 2022-03-02

### Changed

- **Proxmox LXC Updater**
  - New Script
- **Dashy LXC**
  - New Script V2
- **Grafana LXC**
  - New Script V2
- **InfluxDB/Telegraf LXC**
  - New Script V2

## 2022-03-01

### Changed

- **Daemon Sync Server LXC**
  - New Script V2

## 2022-02-28

### Changed

- **Vaultwarden LXC**
  - Add Update Script

## 2022-02-24

### Changed

- **Nginx Proxy Manager LXC**
  - New V2 Install Script

## 2022-02-23

### Changed

- **Adguard Home LXC**
  - New V2 Install Script
- **Zigbee2MQTT LXC**
  - New V2 Install Script
- **Home Assistant Container LXC**
  - Update Menu usability improvements

## 2022-02-22

### Changed

- **Home Assistant Container LXC**
  - New V2 Install Script
- **Node-Red LXC**
  - New V2 Install Script
- **Mariadb LXC**
  - New V2 Install Script
- **MQTT LXC**
  - New V2 Install Script
- **Debian 11 LXC**
  - New V2 Install Script
- **Ubuntu 21.10 LXC**
  - New V2 Install Script

## 2022-02-20

### Changed

- **Home Assistant Container LXC**
  - New Script to migrate to the latest Update Menu

## 2022-02-19

### Changed

- **Nginx Proxy Manager LXC**
  - Add Update Script
- **Vaultwarden LXC**
  - Make unattended install & Cleanup Script

## 2022-02-18

### Changed

- **Node-Red LXC**
  - Add Install [Themes Script](https://raw.githubusercontent.com/tteck/Proxmox/main/misc/images/node-red-themes.png)

## 2022-02-16

### Changed

- **Home Assistant Container LXC**
  - Add Options to [Update Menu](https://raw.githubusercontent.com/tteck/Proxmox/main/misc/images/update-menu.png)

## 2022-02-14

### Changed

- **Home Assistant Container LXC**
  - Add [Update Menu](https://raw.githubusercontent.com/tteck/Proxmox/main/misc/images/update-menu.png)

## 2022-02-13

### Changed

- **Mariadb LXC**
  - Add [Adminer](https://raw.githubusercontent.com/tteck/Proxmox/main/misc/images/adminer.png) (formerly phpMinAdmin), a full-featured database management tool

## 2022-02-12

### Changed

- **Home Assistant Container LXC (Podman)**
  - Add Yacht web interface for managing Podman containers
  - new GUI script to copy data from a **Home Assistant LXC** to a **Podman Home Assistant LXC**
  - Improve documentation for several LXC's

## 2022-02-10

### Changed

- **GamUntu LXC**
  - New Script
- **Jellyfin Media Server LXC**
  - new script to fix [start issue](https://github.com/tteck/Proxmox/issues/29#issue-1127457380)
- **MotionEye NVR LXC**
  - New script

## 2022-02-09

### Changed

- **Zigbee2MQTT LXC**
  - added USB passthrough during installation (no extra script)
  - Improve documentation
- **Zwavejs2MQTT LXC**
  - added USB passthrough during installation (no extra script)
- **Jellyfin Media Server LXC**
  - Moved to testing due to issues. 
  - Changed install method.
- **Home Assistant Container LXC (Podman)** 
  - add script for easy Home Assistant update

## 2022-02-06

### Changed

- **Debian 11 LXC**
  - Add Docker Support
- **Ubuntu 21.10 LXC**
  - Add Docker Support

## 2022-02-05

### Changed

- **Vaultwarden LXC**
  - New script

## 2022-02-01

### Changed

- **All Scripts**
  - Fix issue where some networks were slow to assign a IP address to the container causing scripts to fail.

## 2022-01-30

### Changed

- **Zigbee2MQTT LXC**
  - Clean up / Improve script
  - Improve documentation

## 2022-01-29

### Changed

- **Node-Red LXC**
  - Clean up / Improve script
  - Improve documentation

## 2022-01-25

### Changed

- **Jellyfin Media Server LXC**
  - new script

## 2022-01-24

### Changed

- **Plex Media Server LXC**
  - better Hardware Acceleration Support
  - `va-driver-all` is preinstalled
  - now using Ubuntu 21.10
- **misc**
  - new GUI script [(Screenshot)](https://raw.githubusercontent.com/tteck/Proxmox/main/misc/images/pms-copy-data.png) to copy data from one Plex Media Server LXC to another Plex Media Server LXC 


## Initial Catch up - 2022-01-23
 
### Changed

- **Plex Media Server LXC**
  - add Hardware Acceleration Support
  - add script to install Intel Drivers
- **Zwavejs2MQTT LXC**
  - new script to solve no auto start at boot
- **Nginx Proxy Manager LXC** 
  - new script to use Debian 11
- **Ubuntu 21.10 LXC** 
  - new script
- **Mariadb LXC** 
  - add MariaDB Package Repository
- **MQTT LXC** 
  - add Eclipse Mosquitto Package Repository
- **Home Assistant Container LXC** 
  - change if ZFS filesystem is detected, execute automatic installation of static fuse-overlayfs
  - add script for easy Home Assistant update
- **Home Assistant Container LXC (Podman)** 
  - change if ZFS filesystem is detected, execute automatic installation of static fuse-overlayfs
- **Home Assistant OS VM** 
  - change disk type from SATA to SCSI to follow Proxmox official recommendations of choosing VirtIO-SCSI with SCSI disk
  - clean up
- **Proxmox VE 7 Post Install** 
  - new *No-Nag* method
- **misc**
  - new GUI script to copy data from one Home Assistant LXC to another Home Assistant LXC
  - new GUI script to copy data from one Zigbee2MQTT LXC to another Zigbee2MQTT LXC


================================================
FILE: CODE-AUDIT.md
================================================
<div align="center">
<img src="https://raw.githubusercontent.com/tteck/Proxmox/main/misc/images/logo.png" height="100px" />
</div>
<h2><div align="center">Exploring the Scripts and Steps Involved in an Application LXC Installation</div></h2>

1) [adguard.sh](https://github.com/tteck/Proxmox/blob/main/ct/adguard.sh): This script collects system parameters. (Also holds the function to update the application.)
2) [build.func](https://github.com/tteck/Proxmox/blob/main/misc/build.func): Adds user settings and integrates collected information.
3) [create_lxc.sh](https://github.com/tteck/Proxmox/blob/main/ct/create_lxc.sh): Constructs the LXC container.
4) [adguard-install.sh](https://github.com/tteck/Proxmox/blob/main/install/adguard-install.sh): Executes functions from [install.func](https://github.com/tteck/Proxmox/blob/main/misc/install.func), and installs the application.
5) [adguard.sh](https://github.com/tteck/Proxmox/blob/main/ct/adguard.sh) (again): To display the completion message.

The installation process uses reusable scripts: [build.func](https://github.com/tteck/Proxmox/blob/main/misc/build.func), [create_lxc.sh](https://github.com/tteck/Proxmox/blob/main/ct/create_lxc.sh), and [install.func](https://github.com/tteck/Proxmox/blob/main/misc/install.func), which are not specific to any particular application.

To gain a better understanding, focus on reviewing [adguard-install.sh](https://github.com/tteck/Proxmox/blob/main/install/adguard-install.sh). This script contains the commands and configurations for installing and configuring AdGuard Home within the LXC container.


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2021-2024 tteck

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
<div style="border: 2px solid #d1d5db; padding: 20px; border-radius: 8px; background-color: #f9fafb;"> <h2 align="center">Proxmox VE Helper-Scripts: A Community Legacy</h2> <p>Dear Community,</p> <p>As we prepare to archive this repository, we’re excited to announce a new home for the project: <a href="https://github.com/community-scripts/ProxmoxVE">https://github.com/community-scripts/ProxmoxVE</a>. While we’re still settling in, this will soon become the go-to place for the latest Proxmox VE scripts.</p> <p>Thank you for your continued support.</p> <br>The Community </div>
<div align="center">
  <a href="#">
    <img src="https://raw.githubusercontent.com/tteck/Proxmox/main/misc/images/logo.png" height="100px" />
 </a>
</div>
<h1 align="center">Proxmox VE Helper-Scripts</h1>

<p align="center">
  <a href="https://helper-scripts.com">Website</a> | 
  <a href="https://github.com/tteck/Proxmox/blob/main/.github/CONTRIBUTING.md">Contribute</a> |
  <a href="https://github.com/tteck/Proxmox/blob/main/USER_SUBMITTED_GUIDES.md">Guides</a> |
  <a href="https://github.com/tteck/Proxmox/blob/main/CHANGELOG.md">Changelog</a> |
  <a href="https://ko-fi.com/D1D7EP4GF">Support</a>
</p>

---

These scripts empower users to create a Linux container or virtual machine interactively, providing choices for both simple and advanced configurations. The basic setup adheres to default settings, while the advanced setup gives users the ability to customize these defaults. 

Options are displayed to users in a dialog box format. Once the user makes their selections, the script collects and validates their input to generate the final configuration for the container or virtual machine.
<p align="center">
Be cautious and thoroughly evaluate scripts and automation tasks obtained from external sources. <a href="https://github.com/tteck/Proxmox/blob/main/CODE-AUDIT.md">Read more</a>
</p>
<sub><div align="center"> Proxmox® is a registered trademark of Proxmox Server Solutions GmbH. </div></sub>


================================================
FILE: USER_SUBMITTED_GUIDES.md
================================================
<div align="center">
  <a href="#">
    <img src="https://raw.githubusercontent.com/tteck/Proxmox/main/misc/images/logo.png" height="100px" />
 </a>
</div>
<h2 align="center">User Submitted Guides </h2>

<sub> In order to contribute a guide on installing with Proxmox VE Helper Scripts, you should open a pull request that adds the guide to the `USER_SUBMITTED_GUIDES.md` file. </sub>

[Proxmox Automation with Proxmox Helper Scripts!](https://www.youtube.com/watch?v=kcpu4z5eSEU)

[Installing Home Assistant OS using Proxmox 8](https://community.home-assistant.io/t/installing-home-assistant-os-using-proxmox-8/201835)

[How To Separate Zigbee2MQTT From Home Assistant In Proxmox](https://smarthomescene.com/guides/how-to-separate-zigbee2mqtt-from-home-assistant-in-proxmox/)

[How To Install Home Assistant On Proxmox: The Easy Way](https://smarthomescene.com/guides/how-to-install-home-assistant-on-proxmox-the-easy-way/)

[Home Assistant: Installing InfluxDB (LXC)](https://www.derekseaman.com/2023/04/home-assistant-installing-influxdb-lxc.html)

[Home Assistant: Proxmox Quick Start Guide](https://www.derekseaman.com/2023/10/home-assistant-proxmox-ve-8-0-quick-start-guide-2.html)

[Home Assistant: Installing Grafana (LXC) with Let’s Encrypt SSL](https://www.derekseaman.com/2023/04/home-assistant-installing-grafana-lxc.html)

[Proxmox: Plex LXC with Alder Lake Transcoding](https://www.derekseaman.com/2023/04/proxmox-plex-lxc-with-alder-lake-transcoding.html)

[How To Backup Home Assistant In Proxmox](https://smarthomescene.com/guides/how-to-backup-home-assistant-in-proxmox/)

[Running Frigate on Proxmox](https://www.homeautomationguy.io/blog/running-frigate-on-proxmox)

[Frigate VM on Proxmox with PCIe Coral TPU](https://www.derekseaman.com/2023/06/home-assistant-frigate-vm-on-proxmox-with-pcie-coral-tpu.html)

[Moving Home Assistant’s Database To MariaDB On Proxmox](https://smarthomescene.com/guides/moving-home-assistants-database-to-mariadb-on-proxmox/)

[How-to: Proxmox VE 7.4 to 8.0 Upgrade](https://www.derekseaman.com/2023/06/how-to-proxmox-7-4-to-8-0-upgrade.html)

[iGPU Transcoding In Proxmox with Jellyfin](https://www.youtube.com/watch?v=XAa_qpNmzZs)

[Proxmox + NetData](<https://dbt3ch.com/books/proxmox-netdata-for-better-insights-and-notifications/page/proxmox-netdata-for-better-insights-and-notifications>)

[Proxmox Homelab Series](<https://blog.kye.dev/proxmox-series>)

[The fastest installation of Docker and Portainer on Proxmox VE](https://lavr.site/en-fastest-install-docker-portainer-proxmox/)

[How To Setup Proxmox Backuper Server Using Helper Scripts](<https://youtu.be/6C2JOsrZZZw?si=kkrrcL_nLCDBJkOB>)


================================================
FILE: ct/actualbudget.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ___        __              __   ____            __           __
   /   | _____/ /___  ______ _/ /  / __ )__  ______/ /___ ____  / /_
  / /| |/ ___/ __/ / / / __ `/ /  / __  / / / / __  / __ `/ _ \/ __/
 / ___ / /__/ /_/ /_/ / /_/ / /  / /_/ / /_/ / /_/ / /_/ /  __/ /_
/_/  |_\___/\__/\__,_/\__,_/_/  /_____/\__,_/\__,_/\__, /\___/\__/
                                                  /____/
EOF
}
header_info
echo -e "Loading..."
APP="Actual Budget"
var_disk="4"
var_cpu="2"
var_ram="2048"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /opt/actualbudget ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating ${APP}"
systemctl stop actualbudget.service
cd /opt/actualbudget
git pull &>/dev/null
yarn install &>/dev/null
systemctl start actualbudget.service
msg_ok "Successfully Updated ${APP}"
exit
}

start
build_container
description
msg_info "Setting Container to Normal Resources"
pct set $CTID -memory 1024
pct set $CTID -cores 1
msg_ok "Set Container to Normal Resources"
msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:5006${CL} \n"


================================================
FILE: ct/adguard.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ___       __                           __
   /   | ____/ /___ ___  ______ __________/ /
  / /| |/ __  / __  / / / / __  / ___/ __  / 
 / ___ / /_/ / /_/ / /_/ / /_/ / /  / /_/ /  
/_/  |_\__,_/\__, /\__,_/\__,_/_/   \__,_/   
            /____/                           
 
EOF
}
header_info
echo -e "Loading..."
APP="Adguard"
var_disk="2"
var_cpu="1"
var_ram="512"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /opt/AdGuardHome ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then
  read -r -p "Warning: Storage is dangerously low, continue anyway? <y/N> " prompt
  [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit
fi
wget -qL https://static.adguard.com/adguardhome/release/AdGuardHome_linux_amd64.tar.gz
msg_info "Stopping AdguardHome"
systemctl stop AdGuardHome
msg_ok "Stopped AdguardHome"

msg_info "Updating AdguardHome"
tar -xvf AdGuardHome_linux_amd64.tar.gz &>/dev/null
mkdir -p adguard-backup
cp -r /opt/AdGuardHome/AdGuardHome.yaml /opt/AdGuardHome/data adguard-backup/
cp AdGuardHome/AdGuardHome /opt/AdGuardHome/AdGuardHome
cp -r adguard-backup/* /opt/AdGuardHome/
msg_ok "Updated AdguardHome"

msg_info "Starting AdguardHome"
systemctl start AdGuardHome
msg_ok "Started AdguardHome"

msg_info "Cleaning Up"
rm -rf AdGuardHome_linux_amd64.tar.gz AdGuardHome adguard-backup
msg_ok "Cleaned"
msg_ok "Updated Successfully"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} Setup should be reachable by going to the following URL.
         ${BL}http://${IP}:3000${CL} \n"


================================================
FILE: ct/adventurelog.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck
# Co-Author: MickLesk (Canbiz)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ___       __                 __                  __               
   /   | ____/ /   _____  ____  / /___  __________  / /   ____  ____ _
  / /| |/ __  / | / / _ \/ __ \/ __/ / / / ___/ _ \/ /   / __ \/ __ `/
 / ___ / /_/ /| |/ /  __/ / / / /_/ /_/ / /  /  __/ /___/ /_/ / /_/ / 
/_/  |_\__,_/ |___/\___/_/ /_/\__/\__,_/_/   \___/_____/\____/\__, /  
                                                             /____/   
EOF
}
header_info
echo -e "Loading..."
APP="AdventureLog"
var_disk="7"
var_cpu="2"
var_ram="2048"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}
function update_script() {
header_info
if [[ ! -d /opt/adventurelog ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then
  read -r -p "Warning: Storage is dangerously low, continue anyway? <y/N> " prompt
  [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit
fi
RELEASE=$(curl -s https://api.github.com/repos/seanmorley15/AdventureLog/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
  msg_info "Stopping Services"
  systemctl stop adventurelog-backend
  systemctl stop adventurelog-frontend
  msg_ok "Services Stopped"

  msg_info "Updating ${APP} to ${RELEASE}"
  cp /opt/adventurelog/backend/server/.env /opt/server.env
  cp /opt/adventurelog/frontend/env /opt/frontend.env
  wget -q "https://github.com/seanmorley15/AdventureLog/archive/refs/tags/v${RELEASE}.zip"
  unzip -q v${RELEASE}.zip
  mv AdventureLog-${RELEASE} /opt/adventurelog
  mv /opt/server.env /opt/adventurelog/backend/server/.env
  cd /opt/adventurelog/backend/server
  pip install --upgrade pip &>/dev/null
  pip install -r requirements.txt &>/dev/null
  python3 manage.py collectstatic --noinput &>/dev/null
  python3 manage.py migrate &>/dev/null
  
  mv /opt/frontend.env /opt/adventurelog/frontend/.env
  cd /opt/adventurelog/frontend
  pnpm install &>/dev/null
  pnpm run build &>/dev/null
  echo "${RELEASE}" >/opt/${APP}_version.txt
  msg_ok "Updated ${APP}"

  msg_info "Starting Services"
  systemctl start adventurelog-backend
  systemctl start adventurelog-frontend
  msg_ok "Started Services"

  msg_info "Cleaning Up"
  rm -rf v${RELEASE}.zip
  msg_ok "Cleaned"
  msg_ok "Updated Successfully"
else
  msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} Setup should be reachable by going to the following URL.
         ${BL}http://${IP}:3000${CL} \n"

================================================
FILE: ct/agentdvr.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ___                    __  ____ _    ______
   /   | ____ ____  ____  / /_/ __ \ |  / / __ \
  / /| |/ __ `/ _ \/ __ \/ __/ / / / | / / /_/ /
 / ___ / /_/ /  __/ / / / /_/ /_/ /| |/ / _, _/
/_/  |_\__, /\___/_/ /_/\__/_____/ |___/_/ |_|
      /____/
EOF
}
header_info
echo -e "Loading..."
APP="AgentDVR"
var_disk="8"
var_cpu="2"
var_ram="2048"
var_os="ubuntu"
var_version="22.04"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="0"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /opt/agentdvr ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_error "There is currently no update path available."
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP}${CL} should be reachable by going to the following URL.
         ${BL}http://${IP}:8090${CL} \n"


================================================
FILE: ct/alpine-docker.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
  clear
  cat <<"EOF"
    ____             __            
   / __ \____  _____/ /_  __  _____
  / / / / __ \/ ___/ //_/ _ \/ ___/
 / /_/ / /_/ / /__/ ,< /  __/ /    
/_____/\____/\___/_/|_|\___/_/     
 Alpine
 
EOF
}
header_info
echo -e "Loading..."
APP="Alpine-Docker"
var_disk="2"
var_cpu="1"
var_ram="1024"
var_os="alpine"
var_version="3.19"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
  if ! apk -e info newt >/dev/null 2>&1; then
    apk add -q newt
  fi
  while true; do
    CHOICE=$(
      whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 1 \
        "1" "Check for Docker Updates" 3>&2 2>&1 1>&3
    )
    exit_status=$?
    if [ $exit_status == 1 ]; then
      clear
      exit-script
    fi
    header_info
    case $CHOICE in
    1)
      apk update && apk upgrade
      exit
      ;;
    esac
  done
}

start
build_container
description

msg_ok "Completed Successfully!\n"


================================================
FILE: ct/alpine-grafana.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
  clear
  cat <<"EOF"
   ______           ____                 
  / ____/________ _/ __/___ _____  ____ _
 / / __/ ___/ __  / /_/ __  / __ \/ __  /
/ /_/ / /  / /_/ / __/ /_/ / / / / /_/ / 
\____/_/   \__,_/_/  \__,_/_/ /_/\__,_/  
 Alpine
 
EOF
}
header_info
echo -e "Loading..."
APP="Alpine-Grafana"
var_disk="1"
var_cpu="1"
var_ram="256"
var_os="alpine"
var_version="3.19"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
  if ! apk -e info newt >/dev/null 2>&1; then
    apk add -q newt
  fi
  LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
  while true; do
    CHOICE=$(
      whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 3 \
        "1" "Check for Grafana Updates" \
        "2" "Allow 0.0.0.0 for listening" \
        "3" "Allow only ${LXCIP} for listening" 3>&2 2>&1 1>&3
    )
    exit_status=$?
    if [ $exit_status == 1 ]; then
      clear
      exit-script
    fi
    header_info
    case $CHOICE in
    1)
      apk update && apk upgrade
      exit
      ;;
    2)
      sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/grafana
      service grafana restart
      exit
      ;;
    3)
      sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/grafana
      service grafana restart
      exit
      ;;
    esac
  done
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:3000${CL} \n"


================================================
FILE: ct/alpine-nextcloud.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
  clear
  cat <<"EOF"
    _   __          __       __                __   __  __      __
   / | / /__  _  __/ /______/ /___  __  ______/ /  / / / /_  __/ /_
  /  |/ / _ \| |/_/ __/ ___/ / __ \/ / / / __  /  / /_/ / / / / __ \
 / /|  /  __/>  </ /_/ /__/ / /_/ / /_/ / /_/ /  / __  / /_/ / /_/ /
/_/ |_/\___/_/|_|\__/\___/_/\____/\__,_/\__,_/  /_/ /_/\__,_/_.___/
Alpine
EOF
}
header_info
echo -e "Loading..."
APP="Alpine-Nextcloud"
var_disk="2"
var_cpu="2"
var_ram="1024"
var_os="alpine"
var_version="3.19"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
  if [[ ! -d /usr/share/webapps/nextcloud ]]; then
    msg_error "No ${APP} Installation Found!"
    exit
  fi
  if ! apk -e info newt >/dev/null 2>&1; then
    apk add -q newt
  fi
  while true; do
    CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select"  11 58 3 \
      "1" "Nextcloud Login Credentials" ON \
      "2" "Renew Self-signed Certificate" OFF \
      3>&1 1>&2 2>&3)      
    exit_status=$?
    if [ $exit_status == 1 ]; then
      clear
      exit-script
    fi
    header_info
    case $CHOICE in
    1)
      cat nextcloud.creds
      exit
      ;;
    2)
      openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/nextcloud-selfsigned.key -out /etc/ssl/certs/nextcloud-selfsigned.crt -subj "/C=US/O=Nextcloud/OU=Domain Control Validated/CN=nextcloud.local" > /dev/null 2>&1
      rc-service nginx restart
      exit
      ;;
    esac
  done
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}https://${IP}${CL} \n"


================================================
FILE: ct/alpine-vaultwarden.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
  clear
  cat <<"EOF"
 _    __            ____                          __         
| |  / /___ ___  __/ / /__      ______ __________/ /__  ____ 
| | / / __ `/ / / / / __/ | /| / / __ `/ ___/ __  / _ \/ __ \
| |/ / /_/ / /_/ / / /_ | |/ |/ / /_/ / /  / /_/ /  __/ / / /
|___/\__,_/\__,_/_/\__/ |__/|__/\__,_/_/   \__,_/\___/_/ /_/ 
 Alpine                                                 

EOF
}
header_info
echo -e "Loading..."
APP="Alpine-Vaultwarden"
var_disk="0.3"
var_cpu="1"
var_ram="256"
var_os="alpine"
var_version="3.19"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
  if ! apk -e info newt >/dev/null 2>&1; then
    apk add -q newt
  fi
  while true; do
    CHOICE=$(
      whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 2 \
        "1" "Update Vaultwarden" \
        "2" "Reset ADMIN_TOKEN" 3>&2 2>&1 1>&3
    )
    exit_status=$?
    if [ $exit_status == 1 ]; then
      clear
      exit-script
    fi
    header_info
    case $CHOICE in
    1)
      apk update && apk upgrade && rc-service vaultwarden restart -q
      exit
      ;;
    2)
      if NEWTOKEN=$(whiptail --backtitle "Proxmox VE Helper Scripts" --passwordbox "Setup your ADMIN_TOKEN (make it strong)" 10 58 3>&1 1>&2 2>&3); then
        if [[ -z "$NEWTOKEN" ]]; then exit-script; fi
        if ! command -v argon2 >/dev/null 2>&1; then apk add argon2 &>/dev/null; fi
        TOKEN=$(echo -n ${NEWTOKEN} | argon2 "$(openssl rand -base64 32)" -e -id -k 19456 -t 2 -p 1)
        if [[ ! -f /var/lib/vaultwarden/config.json ]]; then
          sed -i "s|export ADMIN_TOKEN=.*|export ADMIN_TOKEN='${TOKEN}'|" /etc/conf.d/vaultwarden
        else
          sed -i "s|\"admin_token\": .*|\"admin_token\": \"${TOKEN}\",|" /var/lib/vaultwarden/config.json
        fi
        rc-service vaultwarden restart -q
      fi      
      clear
      exit
      ;;
    esac
  done
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:8000${CL} \n"


================================================
FILE: ct/alpine-zigbee2mqtt.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
  clear
  cat <<"EOF"
 _____   _       __             ___   __  _______  ____________
/__  /  (_)___ _/ /_  ___  ___ |__ \ /  |/  / __ \/_  __/_  __/
  / /  / / __  / __ \/ _ \/ _ \__/ // /|_/ / / / / / /   / /   
 / /__/ / /_/ / /_/ /  __/  __/ __// /  / / /_/ / / /   / /    
/____/_/\__, /_.___/\___/\___/____/_/  /_/\___\_\/_/   /_/     
       /____/ Alpine
 
EOF
}
header_info
echo -e "Loading..."
APP="Alpine-Zigbee2MQTT"
var_disk="0.3"
var_cpu="1"
var_ram="256"
var_os="alpine"
var_version="3.19"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="0"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
  if ! apk -e info newt >/dev/null 2>&1; then
    apk add -q newt
  fi
  while true; do
    CHOICE=$(
      whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 1 \
        "1" "Check for Zigbee2MQTT Updates" 3>&2 2>&1 1>&3
    )
    exit_status=$?
    if [ $exit_status == 1 ]; then
      clear
      exit-script
    fi
    header_info
    case $CHOICE in
    1)
      apk update && apk upgrade
      exit
      ;;
    esac
  done
}

start
build_container
description

msg_ok "Completed Successfully!\n"


================================================
FILE: ct/alpine.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ___    __      _          
   /   |  / /___  (_)___  ___ 
  / /| | / / __ \/ / __ \/ _ \
 / ___ |/ / /_/ / / / / /  __/
/_/  |_/_/ .___/_/_/ /_/\___/ 
        /_/                   

EOF
}
header_info
echo -e "Loading..."
APP="Alpine"
var_disk="0.1"
var_cpu="1"
var_ram="512"
var_os="alpine"
var_version="3.19"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW="-password alpine"
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 1 \
  "1" "Check for Alpine Updates" ON \
  3>&1 1>&2 2>&3)

header_info
if [ "$UPD" == "1" ]; then
apk update && apk upgrade
exit;
fi
}

start
build_container
description

msg_ok "Completed Successfully!\n"


================================================
FILE: ct/apache-cassandra.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ___                     __            ______                                __
   /   |  ____  ____ ______/ /_  ___     / ____/___ _______________ _____  ____/ /________ _
  / /| | / __ \/ __ `/ ___/ __ \/ _ \   / /   / __ `/ ___/ ___/ __ `/ __ \/ __  / ___/ __ `/
 / ___ |/ /_/ / /_/ / /__/ / / /  __/  / /___/ /_/ (__  |__  ) /_/ / / / / /_/ / /  / /_/ /
/_/  |_/ .___/\__,_/\___/_/ /_/\___/   \____/\__,_/____/____/\__,_/_/ /_/\__,_/_/   \__,_/
      /_/

EOF
}
header_info
echo -e "Loading..."
APP="Apache-Cassandra"
var_disk="4"
var_cpu="1"
var_ram="2048"
var_os="debian"
var_version="12"
VERBOSE="yes"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -f /etc/systemd/system/cassandra.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_error "There is currently no update path available."
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"


================================================
FILE: ct/apache-couchdb.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ___                     __            ______                 __    ____  ____ 
   /   |  ____  ____ ______/ /_  ___     / ____/___  __  _______/ /_  / __ \/ __ )
  / /| | / __ \/ __ `/ ___/ __ \/ _ \   / /   / __ \/ / / / ___/ __ \/ / / / __  |
 / ___ |/ /_/ / /_/ / /__/ / / /  __/  / /___/ /_/ / /_/ / /__/ / / / /_/ / /_/ / 
/_/  |_/ .___/\__,_/\___/_/ /_/\___/   \____/\____/\__,_/\___/_/ /_/_____/_____/  
      /_/                                                                         
                                
EOF
}
header_info
echo -e "Loading..."
APP="Apache-CouchDB"
var_disk="10"
var_cpu="2"
var_ram="4096"
var_os="debian"
var_version="12"
VERBOSE="yes"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -f /etc/systemd/system/couchdb.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_error "There is currently no update path available."
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:5984/_utils/${CL} \n"


================================================
FILE: ct/apt-cacher-ng.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ___          __     ______           __                 _   ________
   /   |  ____  / /_   / ____/___ ______/ /_  ___  _____   / | / / ____/
  / /| | / __ \/ __/__/ /   / __ `/ ___/ __ \/ _ \/ ___/__/  |/ / / __
 / ___ |/ /_/ / /_/__/ /___/ /_/ / /__/ / / /  __/ /  /__/ /|  / /_/ /
/_/  |_/ .___/\__/   \____/\__,_/\___/_/ /_/\___/_/     /_/ |_/\____/
      /_/

EOF
}
header_info
echo -e "Loading..."
APP="Apt-Cacher-NG"
var_disk="2"
var_cpu="1"
var_ram="512"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating $APP LXC"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
msg_ok "Updated $APP LXC"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} maintenance page should be reachable by going to the following URL.
         ${BL}http://${IP}:3142/acng-report.html${CL} \n"


================================================
FILE: ct/archivebox.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ___              __    _            ____
   /   |  __________/ /_  (_)   _____  / __ )____  _  __
  / /| | / ___/ ___/ __ \/ / | / / _ \/ __  / __ \| |/_/
 / ___ |/ /  / /__/ / / / /| |/ /  __/ /_/ / /_/ />  <
/_/  |_/_/   \___/_/ /_/_/ |___/\___/_____/\____/_/|_|

EOF
}
header_info
echo -e "Loading..."
APP="ArchiveBox"
var_disk="8"
var_cpu="2"
var_ram="1024"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /opt/archivebox ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then
  read -r -p "Warning: Storage is dangerously low, continue anyway? <y/N> " prompt
  [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit
fi
msg_info "Stopping ${APP}"
systemctl stop archivebox
msg_ok "Stopped ${APP}"

msg_info "Updating ${APP}"
cd /opt/archivebox/data
pip install --upgrade --ignore-installed archivebox
sudo -u archivebox archivebox init
msg_ok "Updated ${APP}"

msg_info "Starting ${APP}"
systemctl start archivebox
msg_ok "Started ${APP}"

msg_ok "Updated Successfully"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:8000/admin/login${CL} \n"


================================================
FILE: ct/aria2.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ___         _      ___
   /   |  _____(_)___ |__ \
  / /| | / ___/ / __ `/_/ /
 / ___ |/ /  / / /_/ / __/
/_/  |_/_/  /_/\__,_/____/
EOF
}
header_info
echo -e "Loading..."
APP="Aria2"
var_disk="8"
var_cpu="2"
var_ram="1028"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating $APP LXC"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
msg_ok "Updated $APP LXC"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:6880${CL}"


================================================
FILE: ct/audiobookshelf.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
                   ___       __                __        __         ______
  ____ ___  ______/ (_)___  / /_  ____  ____  / /_______/ /_  ___  / / __/
 / __ `/ / / / __  / / __ \/ __ \/ __ \/ __ \/ //_/ ___/ __ \/ _ \/ / /_  
/ /_/ / /_/ / /_/ / / /_/ / /_/ / /_/ / /_/ / ,< (__  ) / / /  __/ / __/  
\__,_/\__,_/\__,_/_/\____/_.___/\____/\____/_/|_/____/_/ /_/\___/_/_/     
                                                                          
EOF
}
header_info
echo -e "Loading..."
APP="audiobookshelf"
var_disk="4"
var_cpu="2"
var_ram="2048"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -f /etc/apt/trusted.gpg.d/audiobookshelf-ppa.asc ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
echo "This application receives updates through the APT package manager."
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:13378${CL} \n"


================================================
FILE: ct/autobrr.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ___         __        __             
   /   | __  __/ /_____  / /_  __________
  / /| |/ / / / __/ __ \/ __ \/ ___/ ___/
 / ___ / /_/ / /_/ /_/ / /_/ / /  / /    
/_/  |_\__,_/\__/\____/_.___/_/  /_/     
                                         
EOF
}
header_info
echo -e "Loading..."
APP="Autobrr"
var_disk="8"
var_cpu="2"
var_ram="2048"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -f /root/.config/autobrr/config.toml ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Stopping ${APP} LXC"
systemctl stop autobrr.service
msg_ok "Stopped ${APP} LXC"

msg_info "Updating ${APP} LXC"
rm -rf /usr/local/bin/*
wget -q $(curl -s https://api.github.com/repos/autobrr/autobrr/releases/latest | grep download | grep linux_x86_64 | cut -d\" -f4)
tar -C /usr/local/bin -xzf autobrr*.tar.gz
rm -rf autobrr*.tar.gz
msg_ok "Updated ${APP} LXC"

msg_info "Starting ${APP} LXC"
systemctl start autobrr.service
msg_ok "Started ${APP} LXC"
msg_ok "Updated Successfully"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:7474${CL} \n"


================================================
FILE: ct/bazarr.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ____
   / __ )____ _____  ____ ___________
  / __  / __ `/_  / / __ `/ ___/ ___/
 / /_/ / /_/ / / /_/ /_/ / /  / /
/_____/\__,_/ /___/\__,_/_/  /_/

EOF
}
header_info
echo -e "Loading..."
APP="Bazarr"
var_disk="4"
var_cpu="2"
var_ram="1024"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /var/lib/bazarr/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating $APP LXC"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
msg_ok "Updated $APP LXC"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:6767${CL} \n"


================================================
FILE: ct/blocky.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ____  __           __        
   / __ )/ /___  _____/ /____  __
  / __  / / __ \/ ___/ //_/ / / /
 / /_/ / / /_/ / /__/ ,< / /_/ / 
/_____/_/\____/\___/_/|_|\__, /  
                        /____/   
EOF
}
header_info
echo -e "Loading..."
APP="Blocky"
var_disk="2"
var_cpu="1"
var_ram="512"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating $APP LXC"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
msg_ok "Updated $APP LXC"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"


================================================
FILE: ct/bunkerweb.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ____              __            _       __     __
   / __ )__  ______  / /_____  ____| |     / /__  / /_
  / __  / / / / __ \/ //_/ _ \/ ___/ | /| / / _ \/ __ \
 / /_/ / /_/ / / / / ,< /  __/ /   | |/ |/ /  __/ /_/ /
/_____/\__,_/_/ /_/_/|_|\___/_/    |__/|__/\___/_.___/

EOF
}
header_info
echo -e "Loading..."
APP="BunkerWeb"
var_disk="4"
var_cpu="2"
var_ram="1024"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /etc/bunkerweb ]]; then msg_error "No ${APP} Installation Found!"; exit; fi

RELEASE=$(curl -s https://api.github.com/repos/bunkerity/bunkerweb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then

  msg_info "Updating ${APP} to ${RELEASE}"
  cat <<EOF >/etc/apt/preferences.d/bunkerweb
Package: bunkerweb
Pin: version ${RELEASE}
Pin-Priority: 1001
EOF
  apt-get update
  apt-get install -y nginx=1.26.2*
  apt-get install -y bunkerweb=${RELEASE}
  echo "${RELEASE}" >/opt/${APP}_version.txt
  msg_ok "Updated ${APP} to ${RELEASE}"

else
  msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} setup should be reachable by going to the following URL.
         ${BL}http://${IP}/setup${CL} \n"


================================================
FILE: ct/caddy.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
   ______          __    __
  / ____/___ _____/ /___/ /_  __
 / /   / __ `/ __  / __  / / / /
/ /___/ /_/ / /_/ / /_/ / /_/ /
\____/\__,_/\__,_/\__,_/\__, /
                       /____/
EOF
}
header_info
echo -e "Loading..."
APP="Caddy"
var_disk="2"
var_cpu="1"
var_ram="512"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /etc/caddy ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating $APP LXC"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
msg_ok "Updated $APP LXC"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"


================================================
FILE: ct/calibre-web.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# Co-Author: remz1337
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
   ______      ___ __                _       __     __
  / ____/___ _/ (_) /_  ________    | |     / /__  / /_
 / /   / __ `/ / / __ \/ ___/ _ \___| | /| / / _ \/ __ \
/ /___/ /_/ / / / /_/ / /  /  __/___/ |/ |/ /  __/ /_/ /
\____/\__,_/_/_/_.___/_/   \___/    |__/|__/\___/_.___/

EOF
}
header_info
echo -e "Loading..."
APP="Calibre-Web"
var_disk="4"
var_cpu="2"
var_ram="2048"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
  if [[ ! -f /etc/systemd/system/cps.service ]]; then
    msg_error "No ${APP} Installation Found!"
    exit
  fi
  header_info
  msg_info "Updating $APP LXC"
  systemctl stop cps
  cd /opt/kepubify
  rm kepubify-linux-64bit
  curl -fsSLO https://github.com/pgaskin/kepubify/releases/latest/download/kepubify-linux-64bit &>/dev/null
  chmod +x kepubify-linux-64bit
  menu_array=("1" "Enables gdrive as storage backend for your ebooks" OFF \
    "2" "Enables sending emails via a googlemail account without enabling insecure apps" OFF \
    "3" "Enables displaying of additional author infos on the authors page" OFF \
    "4" "Enables login via LDAP server" OFF \
    "5" "Enables login via google or github oauth" OFF \
    "6" "Enables extracting of metadata from epub, fb2, pdf files, and also extraction of covers from cbr, cbz, cbt files" OFF \
    "7" "Enables extracting of metadata from cbr, cbz, cbt files" OFF \
    "8" "Enables syncing with your kobo reader" OFF )
  if [ -f "/opt/calibre-web/options.txt" ]; then
    cps_options="$(cat /opt/calibre-web/options.txt)"
    IFS=',' read -ra ADDR <<< "$cps_options"
    for i in "${ADDR[@]}"; do
	  if [ $i == "gdrive" ]; then
	    line=0
	  elif [ $i == "gmail" ]; then
	    line=1
          elif [ $i == "goodreads" ]; then
	    line=2
	  elif [ $i == "ldap" ]; then
	    line=3
	  elif [ $i == "oauth" ]; then
	    line=4
	  elif [ $i == "metadata" ]; then
	    line=5
	  elif [ $i == "comics" ]; then
	    line=6
	  elif [ $i == "kobo" ]; then
	    line=7
	  fi
      array_index=$(( 3*line + 2 ))
      menu_array[$array_index]=ON
    done
  fi
  if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi
  CHOICES=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CALIBRE-WEB OPTIONS" --separate-output --checklist "Choose Additional Options" 15 125 8 "${menu_array[@]}" 3>&1 1>&2 2>&3)
  spinner &
  SPINNER_PID=$!
  options=()
  if [ ! -z "$CHOICES" ]; then
    for CHOICE in $CHOICES; do
      case "$CHOICE" in
      "1")
        options+=( gdrive )
        ;;
      "2")
        options+=( gmail )
        ;;
      "3")
        options+=( goodreads )
        ;;
      "4")
        options+=( ldap )
        apt-get install -qqy libldap2-dev libsasl2-dev
        ;;
      "5")
        options+=( oauth )
        ;;
      "6")
        options+=( metadata )
        ;;
      "7")
        options+=( comics )
        ;;
      "8")
        options+=( kobo )
        ;;
      *)
        echo "Unsupported item $CHOICE!" >&2
        exit 1
        ;;
      esac
    done
  fi
  if [ ! -z "$options" ] && [ ${#options[@]} -gt 0 ]; then
    cps_options=$(IFS=, ; echo "${options[*]}")
    echo $cps_options > /opt/calibre-web/options.txt
    pip install --upgrade calibreweb[$cps_options]
  else
    rm /opt/calibre-web/options.txt 2> /dev/null
    pip install --upgrade calibreweb
  fi
  systemctl start cps
  msg_ok "Updated $APP LXC"
  exit
}

start
build_container
description

msg_info "Setting Container to Normal Resources"
pct set $CTID -memory 512
pct set $CTID -cores 1
msg_ok "Set Container to Normal Resources"
msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:8083${CL} \n"


================================================
FILE: ct/casaos.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
   ______                 ____  _____
  / ____/___ __________ _/ __ \/ ___/
 / /   / __ `/ ___/ __ `/ / / /\__ \ 
/ /___/ /_/ (__  ) /_/ / /_/ /___/ / 
\____/\__,_/____/\__,_/\____//____/  
                                     
EOF
}
header_info
echo -e "Loading..."
APP="CasaOS"
var_disk="8"
var_cpu="2"
var_ram="2048"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating ${APP} LXC"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
msg_ok "Updated ${APP} LXC"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} Setup should be reachable by going to the following URL.
         ${BL}http://${IP} ${CL} \n"


================================================
FILE: ct/changedetection.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
   ________                              ____       __            __  _           
  / ____/ /_  ____ _____  ____ ____     / __ \___  / /____  _____/ /_(_)___  ____ 
 / /   / __ \/ __ `/ __ \/ __ `/ _ \   / / / / _ \/ __/ _ \/ ___/ __/ / __ \/ __ \
/ /___/ / / / /_/ / / / / /_/ /  __/  / /_/ /  __/ /_/  __/ /__/ /_/ / /_/ / / / /
\____/_/ /_/\__,_/_/ /_/\__, /\___/  /_____/\___/\__/\___/\___/\__/_/\____/_/ /_/ 
                       /____/                                                     
EOF
}
header_info
echo -e "Loading..."
APP="Change Detection"
var_disk="8"
var_cpu="2"
var_ram="1024"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -f /etc/systemd/system/changedetection.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating ${APP} LXC"
if ! dpkg -s libjpeg-dev >/dev/null 2>&1; then
  apt-get update
  apt-get install -y libjpeg-dev
fi
pip3 install changedetection.io --upgrade &>/dev/null
pip3 install playwright --upgrade &>/dev/null
if [[ -f /etc/systemd/system/browserless.service ]]; then
  git -C /opt/browserless/ fetch --all &>/dev/null
  git -C /opt/browserless/ reset --hard origin/main &>/dev/null
  npm update --prefix /opt/browserless &>/dev/null
  npm run build --prefix /opt/browserless &>/dev/null
  npm run build:function --prefix /opt/browserless &>/dev/null
  npm prune production --prefix /opt/browserless &>/dev/null
  systemctl restart browserless
else
  msg_error "No Browserless Installation Found!"
fi
systemctl restart changedetection
msg_ok "Updated Successfully"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:5000${CL} \n"


================================================
FILE: ct/channels.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
   ________                           __        ____ _    ______     _____
  / ____/ /_  ____ _____  ____  ___  / /____   / __ \ |  / / __ \   / ___/___  ______   _____  _____
 / /   / __ \/ __ `/ __ \/ __ \/ _ \/ / ___/  / / / / | / / /_/ /   \__ \/ _ \/ ___/ | / / _ \/ ___/
/ /___/ / / / /_/ / / / / / / /  __/ (__  )  / /_/ /| |/ / _, _/   ___/ /  __/ /   | |/ /  __/ /
\____/_/ /_/\__,_/_/ /_/_/ /_/\___/_/____/  /_____/ |___/_/ |_|   /____/\___/_/    |___/\___/_/

EOF
}
header_info
echo -e "Loading..."
APP="Channels"
var_disk="8"
var_cpu="2"
var_ram="1024"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="0"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /opt/channels-dvr ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_error "There is currently no update path available."
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} Setup should be reachable by going to the following URL.
         ${BL}http://${IP}:8089 ${CL} \n"


================================================
FILE: ct/cloudflared.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
   ________                ________                    __
  / ____/ /___  __  ______/ / __/ /___ _________  ____/ /
 / /   / / __ \/ / / / __  / /_/ / __ `/ ___/ _ \/ __  / 
/ /___/ / /_/ / /_/ / /_/ / __/ / /_/ / /  /  __/ /_/ /  
\____/_/\____/\__,_/\__,_/_/ /_/\__,_/_/   \___/\__,_/   
                                                         
EOF
}
header_info
echo -e "Loading..."
APP="Cloudflared"
var_disk="2"
var_cpu="1"
var_ram="512"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating $APP LXC"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
msg_ok "Updated $APP LXC"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"


================================================
FILE: ct/cockpit.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck
# Co-Author: havardthom
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"     
   ______           __         _ __
  / ____/___  _____/ /______  (_) /_
 / /   / __ \/ ___/ //_/ __ \/ / __/
/ /___/ /_/ / /__/ ,< / /_/ / / /_
\____/\____/\___/_/|_/ .___/_/\__/
                    /_/
EOF
}
header_info
echo -e "Loading..."
APP="Cockpit"
var_disk="4"
var_cpu="2"
var_ram="1024"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
if [[ ! -d /etc/cockpit ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \
  "1" "Update LXC" ON \
  "2" "Install cockpit-file-sharing" OFF \
  "3" "Install cockpit-identities" OFF \
  "4" "Install cockpit-navigator" OFF \
  3>&1 1>&2 2>&3)

header_info
if [ "$UPD" == "1" ]; then
  msg_info "Updating ${APP} LXC"
  apt-get update &>/dev/null
  apt-get -y upgrade &>/dev/null
  msg_ok "Updated ${APP} LXC"
  exit
fi
if [ "$UPD" == "2" ]; then
  msg_info "Installing dependencies (patience)"
  apt-get install -y attr &>/dev/null
  apt-get install -y nfs-kernel-server &>/dev/null
  apt-get install -y samba &>/dev/null
  apt-get install -y samba-common-bin &>/dev/null
  apt-get install -y winbind &>/dev/null
  apt-get install -y gawk &>/dev/null
  msg_ok "Installed dependencies"
  msg_info "Installing Cockpit file sharing"
  LATEST=$(curl -s https://api.github.com/repos/45Drives/cockpit-file-sharing/releases/latest  | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
  wget -q https://github.com/45Drives/cockpit-file-sharing/releases/download/v${LATEST}/cockpit-file-sharing_${LATEST}-1focal_all.deb
  dpkg -i cockpit-file-sharing_${LATEST}-1focal_all.deb &>/dev/null
  rm cockpit-file-sharing_${LATEST}-1focal_all.deb
  msg_ok "Installed Cockpit file sharing"
  exit
fi
if [ "$UPD" == "3" ]; then
  msg_info "Installing dependencies (patience)"
  apt-get install -y psmisc &>/dev/null
  apt-get install -y samba &>/dev/null
  apt-get install -y samba-common-bin &>/dev/null
  msg_ok "Installed dependencies"
  msg_info "Installing Cockpit identities"
  LATEST=$(curl -s https://api.github.com/repos/45Drives/cockpit-identities/releases/latest  | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
  wget -q https://github.com/45Drives/cockpit-identities/releases/download/v${LATEST}/cockpit-identities_${LATEST}-1focal_all.deb
  dpkg -i cockpit-identities_${LATEST}-1focal_all.deb &>/dev/null
  rm cockpit-identities_${LATEST}-1focal_all.deb
  msg_ok "Installed Cockpit identities"
  exit
fi
if [ "$UPD" == "4" ]; then
  msg_info "Installing dependencies"
  apt-get install -y rsync &>/dev/null
  apt-get install -y zip &>/dev/null
  msg_ok "Installed dependencies"
  msg_info "Installing Cockpit navigator"
  LATEST=$(curl -s https://api.github.com/repos/45Drives/cockpit-navigator/releases/latest  | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
  wget -q https://github.com/45Drives/cockpit-navigator/releases/download/v${LATEST}/cockpit-navigator_${LATEST}-1focal_all.deb
  dpkg -i cockpit-navigator_${LATEST}-1focal_all.deb &>/dev/null
  rm cockpit-navigator_${LATEST}-1focal_all.deb
  msg_ok "Installed Cockpit navigator"
  exit
fi
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:9090${CL} \n"


================================================
FILE: ct/commafeed.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
   ______                                ______              __
  / ____/___  ____ ___  ____ ___  ____ _/ ____/__  ___  ____/ /
 / /   / __ \/ __ `__ \/ __ `__ \/ __ `/ /_  / _ \/ _ \/ __  /
/ /___/ /_/ / / / / / / / / / / / /_/ / __/ /  __/  __/ /_/ /
\____/\____/_/ /_/ /_/_/ /_/ /_/\__,_/_/    \___/\___/\__,_/

EOF
}
header_info
echo -e "Loading..."
APP="CommaFeed"
var_disk="4"
var_cpu="2"
var_ram="2048"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /opt/commafeed ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
RELEASE=$(curl -sL https://api.github.com/repos/Athou/commafeed/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
  msg_info "Stopping ${APP}"
  systemctl stop commafeed
  msg_ok "Stopped ${APP}"

  msg_info "Updating ${APP} to ${RELEASE}"
  wget -q https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip
  unzip -q commafeed-${RELEASE}-h2-jvm.zip
  rsync -a --exclude 'data/' commafeed-${RELEASE}-h2/ /opt/commafeed/
  rm -rf commafeed-${RELEASE}-h2  commafeed-${RELEASE}-h2-jvm.zip
  echo "${RELEASE}" >/opt/${APP}_version.txt
  msg_ok "Updated ${APP} to ${RELEASE}"

  msg_info "Starting ${APP}"
  systemctl start commafeed
  msg_ok "Started ${APP}"
  msg_ok "Updated Successfully"
else
  msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:8082${CL} \n"


================================================
FILE: ct/create_lxc.sh
================================================
#!/usr/bin/env bash

# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

# This sets verbose mode if the global variable is set to "yes"
# if [ "$VERBOSE" == "yes" ]; then set -x; fi

# This function sets color variables for formatting output in the terminal
YW=$(echo "\033[33m")
BL=$(echo "\033[36m")
RD=$(echo "\033[01;31m")
GN=$(echo "\033[1;92m")
CL=$(echo "\033[m")
CM="${GN}✓${CL}"
CROSS="${RD}✗${CL}"
BFR="\\r\\033[K"
HOLD=" "

# This sets error handling options and defines the error_handler function to handle errors
set -Eeuo pipefail
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR

# This function handles errors
function error_handler() {
  if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi
  printf "\e[?25h"
  local exit_code="$?"
  local line_number="$1"
  local command="$2"
  local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
  echo -e "\n$error_message\n"
}

# This function displays a spinner.
function spinner() {
    local chars="/-\|"
    local spin_i=0
    printf "\e[?25l"
    while true; do
        printf "\r \e[36m%s\e[0m" "${chars:spin_i++%${#chars}:1}"
        sleep 0.1
    done
}

# This function displays an informational message with a yellow color.
function msg_info() {
  local msg="$1"
  echo -ne " ${HOLD} ${YW}${msg}   "
  spinner &
  SPINNER_PID=$!
}

# This function displays a success message with a green color.
function msg_ok() {
  if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi
  printf "\e[?25h"
  local msg="$1"
  echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
}

# This function displays a error message with a red color.
function msg_error() {
  if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi
  printf "\e[?25h"
  local msg="$1"
  echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
}

# This checks for the presence of valid Container Storage and Template Storage locations
msg_info "Validating Storage"
VALIDCT=$(pvesm status -content rootdir | awk 'NR>1')
if [ -z "$VALIDCT" ]; then
  msg_error "Unable to detect a valid Container Storage location."
  exit 1
fi
VALIDTMP=$(pvesm status -content vztmpl | awk 'NR>1')
if [ -z "$VALIDTMP" ]; then
  msg_error "Unable to detect a valid Template Storage location."
  exit 1
fi

# This function is used to select the storage class and determine the corresponding storage content type and label.
function select_storage() {
  local CLASS=$1
  local CONTENT
  local CONTENT_LABEL
  case $CLASS in
  container)
    CONTENT='rootdir'
    CONTENT_LABEL='Container'
    ;;
  template)
    CONTENT='vztmpl'
    CONTENT_LABEL='Container template'
    ;;
  *) false || exit "Invalid storage class." ;;
  esac
  
  # This Queries all storage locations
  local -a MENU
  while read -r line; do
    local TAG=$(echo $line | awk '{print $1}')
    local TYPE=$(echo $line | awk '{printf "%-10s", $2}')
    local FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
    local ITEM="  Type: $TYPE Free: $FREE "
    local OFFSET=2
    if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
      local MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
    fi
    MENU+=("$TAG" "$ITEM" "OFF")
  done < <(pvesm status -content $CONTENT | awk 'NR>1')
  
  # Select storage location
  if [ $((${#MENU[@]}/3)) -eq 1 ]; then
    printf ${MENU[0]}
  else
    local STORAGE
    while [ -z "${STORAGE:+x}" ]; do
      STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
      "Which storage pool you would like to use for the ${CONTENT_LABEL,,}?\nTo make a selection, use the Spacebar.\n" \
      16 $(($MSG_MAX_LENGTH + 23)) 6 \
      "${MENU[@]}" 3>&1 1>&2 2>&3) || exit "Menu aborted."
    done
    printf $STORAGE
  fi
}

# Test if required variables are set
[[ "${CTID:-}" ]] || exit "You need to set 'CTID' variable."
[[ "${PCT_OSTYPE:-}" ]] || exit "You need to set 'PCT_OSTYPE' variable."

# Test if ID is valid
[ "$CTID" -ge "100" ] || exit "ID cannot be less than 100."

# Test if ID is in use
if pct status $CTID &>/dev/null; then
  echo -e "ID '$CTID' is already in use."
  unset CTID
  exit "Cannot use ID that is already in use."
fi

# Get template storage
TEMPLATE_STORAGE=$(select_storage template) || exit
msg_ok "Using ${BL}$TEMPLATE_STORAGE${CL} ${GN}for Template Storage."

# Get container storage
CONTAINER_STORAGE=$(select_storage container) || exit
msg_ok "Using ${BL}$CONTAINER_STORAGE${CL} ${GN}for Container Storage."

# Update LXC template list
msg_info "Updating LXC Template List"
pveam update >/dev/null
msg_ok "Updated LXC Template List"

# Get LXC template string
TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-}
mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLATE_SEARCH.*\)/\1/p" | sort -t - -k 2 -V)
[ ${#TEMPLATES[@]} -gt 0 ] || exit "Unable to find a template when searching for '$TEMPLATE_SEARCH'."
TEMPLATE="${TEMPLATES[-1]}"

# Download LXC template if needed
if ! pveam list $TEMPLATE_STORAGE | grep -q $TEMPLATE; then
  msg_info "Downloading LXC Template"
  pveam download $TEMPLATE_STORAGE $TEMPLATE >/dev/null ||
    exit "A problem occured while downloading the LXC template."
  msg_ok "Downloaded LXC Template"
fi

# Combine all options
DEFAULT_PCT_OPTIONS=(
  -arch $(dpkg --print-architecture))

PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
[[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs $CONTAINER_STORAGE:${PCT_DISK_SIZE:-8})

# Create container
msg_info "Creating LXC Container"
pct create $CTID ${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE} ${PCT_OPTIONS[@]} >/dev/null ||
  exit "A problem occured while trying to create container."
msg_ok "LXC Container ${BL}$CTID${CL} ${GN}was successfully created."


================================================
FILE: ct/cronicle.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
   ______                 _      __   
  / ____/________  ____  (_)____/ /__ 
 / /   / ___/ __ \/ __ \/ / ___/ / _ \
/ /___/ /  / /_/ / / / / / /__/ /  __/
\____/_/   \____/_/ /_/_/\___/_/\___/ 
                                      
EOF
}
header_info
echo -e "Loading..."
APP="Cronicle"
var_disk="2"
var_cpu="1"
var_ram="512"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 2 \
  "1" "Update ${APP}" ON \
  "2" "Install ${APP} Worker" OFF \
  3>&1 1>&2 2>&3)

if [ "$UPD" == "1" ]; then
header_info
if [[ ! -d /opt/cronicle ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
  if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
    if ! command -v npm >/dev/null 2>&1; then
      echo "Installing NPM..."
      apt-get install -y npm >/dev/null 2>&1
      echo "Installed NPM..."
    fi
  fi
msg_info "Updating ${APP}"
/opt/cronicle/bin/control.sh upgrade &>/dev/null
msg_ok "Updated ${APP}"
exit
fi
if [ "$UPD" == "2" ]; then
  if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
    if ! command -v npm >/dev/null 2>&1; then
      echo "Installing NPM..."
      apt-get install -y npm >/dev/null 2>&1
      echo "Installed NPM..."
    fi
  fi
LATEST=$(curl -sL https://api.github.com/repos/jhuckaby/Cronicle/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
IP=$(hostname -I | awk '{print $1}')
msg_info "Installing Dependencies"

apt-get install -y git &>/dev/null
apt-get install -y make &>/dev/null
apt-get install -y g++ &>/dev/null
apt-get install -y gcc &>/dev/null
apt-get install -y ca-certificates &>/dev/null
apt-get install -y gnupg &>/dev/null
msg_ok "Installed Dependencies"

msg_info "Setting up Node.js Repository"
mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
msg_ok "Set up Node.js Repository"

msg_info "Installing Node.js"
apt-get update &>/dev/null
apt-get install -y nodejs &>/dev/null
msg_ok "Installed Node.js"

msg_info "Installing Cronicle Worker"
mkdir -p /opt/cronicle
cd /opt/cronicle
tar zxvf <(curl -fsSL https://github.com/jhuckaby/Cronicle/archive/${LATEST}.tar.gz) --strip-components 1 &>/dev/null
npm install &>/dev/null
node bin/build.js dist &>/dev/null
sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json
/opt/cronicle/bin/control.sh start &>/dev/null
cp /opt/cronicle/bin/cronicled.init /etc/init.d/cronicled &>/dev/null
chmod 775 /etc/init.d/cronicled
update-rc.d cronicled defaults &>/dev/null
msg_ok "Installed Cronicle Worker"
echo -e "\n Add Masters secret key to /opt/cronicle/conf/config.json \n"
exit
fi
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} Primary should be reachable by going to the following URL.
         ${BL}http://${IP}:3012${CL} \n"


================================================
FILE: ct/daemonsync.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ____                                      _____                 
   / __ \____ ____  ____ ___  ____  ____     / ___/__  ______  _____
  / / / / __  / _ \/ __  __ \/ __ \/ __ \    \__ \/ / / / __ \/ ___/
 / /_/ / /_/ /  __/ / / / / / /_/ / / / /   ___/ / /_/ / / / / /__  
/_____/\__,_/\___/_/ /_/ /_/\____/_/ /_/   /____/\__, /_/ /_/\___/  
                                                /____/              
EOF
}
header_info
echo -e "Loading..."
APP="Daemon Sync"
var_disk="8"
var_cpu="1"
var_ram="512"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating $APP LXC"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
msg_ok "Updated $APP LXC"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:8084${CL} \n"


================================================
FILE: ct/dashy.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ____             __         
   / __ \____ ______/ /_  __  __
  / / / / __  / ___/ __ \/ / / /
 / /_/ / /_/ (__  ) / / / /_/ / 
/_____/\__,_/____/_/ /_/\__, /  
                       /____/   
EOF
}
header_info
echo -e "Loading..."
APP="Dashy"
var_disk="6"
var_cpu="2"
var_ram="2048"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /opt/dashy/public/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi

RELEASE=$(curl -sL https://api.github.com/repos/Lissy93/dashy/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
  msg_info "Stopping ${APP}"
  systemctl stop dashy
  msg_ok "Stopped ${APP}"

  msg_info "Backing up conf.yml"
  cd ~
  if [[ -f /opt/dashy/public/conf.yml ]]; then
    cp -R /opt/dashy/public/conf.yml conf.yml
  else
    cp -R /opt/dashy/user-data/conf.yml conf.yml
  fi
  msg_ok "Backed up conf.yml"

  msg_info "Updating ${APP} to ${RELEASE}"
  rm -rf /opt/dashy
  mkdir -p /opt/dashy
  wget -qO- https://github.com/Lissy93/dashy/archive/refs/tags/${RELEASE}.tar.gz | tar -xz -C /opt/dashy --strip-components=1
  cd /opt/dashy
  npm install
  npm run build
  echo "${RELEASE}" >/opt/${APP}_version.txt
  msg_ok "Updated ${APP} to ${RELEASE}"

  msg_info "Restoring conf.yml"
  cd ~
  cp -R conf.yml /opt/dashy/user-data
  msg_ok "Restored conf.yml"

  msg_info "Cleaning"
  rm -rf conf.yml /opt/dashy/public/conf.yml
  msg_ok "Cleaned"

  msg_info "Starting Dashy"
  systemctl start dashy
  msg_ok "Started Dashy"
  msg_ok "Updated Successfully"
else
  msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:4000${CL} \n"


================================================
FILE: ct/debian.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ____       __    _           
   / __ \___  / /_  (_)___  ____ 
  / / / / _ \/ __ \/ / __ `/ __ \
 / /_/ /  __/ /_/ / / /_/ / / / /
/_____/\___/_.___/_/\__,_/_/ /_/ 
                                 
EOF
}
header_info
echo -e "Loading..."
APP="Debian"
var_disk="2"
var_cpu="1"
var_ram="512"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating $APP LXC"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
msg_ok "Updated $APP LXC"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"


================================================
FILE: ct/deconz.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
       __     __________  _   _______
  ____/ /__  / ____/ __ \/ | / /__  /
 / __  / _ \/ /   / / / /  |/ /  / / 
/ /_/ /  __/ /___/ /_/ / /|  /  / /__
\__,_/\___/\____/\____/_/ |_/  /____/
 
EOF
}
header_info
echo -e "Loading..."
APP="deCONZ"
var_disk="4"
var_cpu="2"
var_ram="1024"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="0"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -f /etc/apt/sources.list.d/deconz.list ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating $APP LXC"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
msg_ok "Updated $APP LXC"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
             ${BL}http://${IP}${CL}\n"


================================================
FILE: ct/deluge.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ____       __               
   / __ \___  / /_  ______ ____ 
  / / / / _ \/ / / / / __ `/ _ \
 / /_/ /  __/ / /_/ / /_/ /  __/
/_____/\___/_/\__,_/\__, /\___/ 
                   /____/       
 
EOF
}
header_info
echo -e "Loading..."
APP="Deluge"
var_disk="4"
var_cpu="2"
var_ram="2048"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -f /etc/systemd/system/deluged.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating $APP LXC"
apt-get update &>/dev/null
pip3 install deluge[all] --upgrade
msg_ok "Updated $APP LXC"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:8112${CL} \n"


================================================
FILE: ct/docker.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ____             __            
   / __ \____  _____/ /_  __  _____
  / / / / __ \/ ___/ //_/ _ \/ ___/
 / /_/ / /_/ / /__/ ,< /  __/ /    
/_____/\____/\___/_/|_|\___/_/     
 
EOF
}
header_info
echo -e "Loading..."
APP="Docker"
var_disk="4"
var_cpu="2"
var_ram="2048"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating ${APP} LXC"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
msg_ok "Updated ${APP} LXC"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"


================================================
FILE: ct/dockge.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ____             __
   / __ \____  _____/ /______ ____
  / / / / __ \/ ___/ //_/ __ `/ _ \
 / /_/ / /_/ / /__/ ,< / /_/ /  __/
/_____/\____/\___/_/|_|\__, /\___/
                      /____/
EOF
}
header_info
echo -e "Loading..."
APP="Dockge"
var_disk="18"
var_cpu="2"
var_ram="2048"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /opt/dockge ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating ${APP}"
cd /opt/dockge
docker compose pull
docker compose up -d
msg_ok "Updated ${APP}"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:5001${CL} \n"


================================================
FILE: ct/emby.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ______          __         
   / ____/___ ___  / /_  __  __
  / __/ / __  __ \/ __ \/ / / /
 / /___/ / / / / / /_/ / /_/ / 
/_____/_/ /_/ /_/_.___/\__, /  
                      /____/   
EOF
}
header_info
echo -e "Loading..."
APP="Emby"
var_disk="8"
var_cpu="2"
var_ram="2048"
var_os="ubuntu"
var_version="22.04"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /opt/emby-server ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
LATEST=$(curl -sL https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
msg_info "Stopping ${APP}"
systemctl stop emby-server
msg_ok "Stopped ${APP}"

msg_info "Updating ${APP}"
wget https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_amd64.deb &>/dev/null
dpkg -i emby-server-deb_${LATEST}_amd64.deb &>/dev/null
rm emby-server-deb_${LATEST}_amd64.deb
msg_ok "Updated ${APP}"

msg_info "Starting ${APP}"
systemctl start emby-server
msg_ok "Started ${APP}"
msg_ok "Updated Successfully"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
             ${BL}http://${IP}:8096${CL}\n"


================================================
FILE: ct/emqx.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ________  _______   _  __
   / ____/  |/  / __ \ | |/ /
  / __/ / /|_/ / / / / |   / 
 / /___/ /  / / /_/ / /   |  
/_____/_/  /_/\___\_\/_/|_|  
                             
EOF
}
header_info
echo -e "Loading..."
APP="EMQX"
var_disk="4"
var_cpu="2"
var_ram="1024"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating $APP LXC"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
msg_ok "Updated $APP LXC"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} Setup should be reachable by going to the following URL.
         ${BL}http://${IP}:18083${CL} \n"


================================================
FILE: ct/ersatztv.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck
# Co-Author: MickLesk (Canbiz)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE
# Source: https://github.com/ErsatzTV/ErsatzTV/


function header_info {
clear
cat <<"EOF"
    ______                __      _______    __
   / ____/_____________ _/ /_____/_  __/ |  / /
  / __/ / ___/ ___/ __ `/ __/_  / / /  | | / / 
 / /___/ /  (__  ) /_/ / /_  / /_/ /   | |/ /  
/_____/_/  /____/\__,_/\__/ /___/_/    |___/   
                                                         
EOF
}
header_info
echo -e "Loading..."
APP="ErsatzTV"
var_disk="5"
var_cpu="1"
var_ram="1024"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}
function update_script() {
header_info
if [[ ! -d /opt/ErsatzTV ]]; then msg_error "No ${APP} Installation Found!"; exit; fi

msg_info "Stopping ErsatzTV"
systemctl stop ersatzTV
msg_ok "Stopped ErsatzTV"

msg_info "Updating ErsatzTV"
RELEASE=$(curl -s https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1)
cp -R /opt/ErsatzTV/ ErsatzTV-backup
rm ErsatzTV-backup/ErsatzTV
rm -rf /opt/ErsatzTV
wget -qO- "https://github.com/ErsatzTV/ErsatzTV/releases/download/${RELEASE}/ErsatzTV-${RELEASE}-linux-x64.tar.gz" | tar -xz -C /opt
mv "/opt/ErsatzTV-${RELEASE}-linux-x64" /opt/ErsatzTV
cp -R ErsatzTV-backup/* /opt/ErsatzTV/
rm -rf ErsatzTV-backup
msg_ok "Updated ErsatzTV"

msg_info "Starting ErsatzTV"
systemctl start ersatzTV
msg_ok "Started ErsatzTV"
msg_ok "Updated Successfully"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} Setup should be reachable by going to the following URL.
         ${BL}http://${IP}:8409${CL} \n"


================================================
FILE: ct/esphome.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ___________ ____  __  __                   
   / ____/ ___// __ \/ / / /___  ____ ___  ___ 
  / __/  \__ \/ /_/ / /_/ / __ \/ __ `__ \/ _ \
 / /___ ___/ / ____/ __  / /_/ / / / / / /  __/
/_____//____/_/   /_/ /_/\____/_/ /_/ /_/\___/ 
                                               
EOF
}
header_info
echo -e "Loading..."
APP="ESPHome"
var_disk="4"
var_cpu="2"
var_ram="1024"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -f /etc/systemd/system/esphomeDashboard.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Stopping ESPHome"
systemctl stop esphomeDashboard
msg_ok "Stopped ESPHome"

msg_info "Updating ESPHome"
if [[ -d /srv/esphome ]]; then
  source /srv/esphome/bin/activate &>/dev/null
fi
pip3 install -U esphome &>/dev/null
msg_ok "Updated ESPHome"

msg_info "Starting ESPHome"
systemctl start esphomeDashboard
msg_ok "Started ESPHome"
msg_ok "Updated Successfully"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:6052${CL} \n"


================================================
FILE: ct/evcc.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: MickLesk (Canbiz)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"     
  ___ _   ____________
 / _ \ | / / ___/ ___/
/  __/ |/ / /__/ /__  
\___/|___/\___/\___/  

EOF
}
header_info
echo -e "Loading..."
APP="evcc"
var_disk="4"
var_cpu="1"
var_ram="1024"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -f /etc/apt/sources.list.d/evcc-stable.list ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating evcc LXC"
apt update &>/dev/null
apt --only-upgrade install -y evcc &>/dev/null
msg_ok "Updated Successfully"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} Setup should be reachable by going to the following URL.
         ${BL}http://${IP}:7070${CL} \n"


================================================
FILE: ct/fenrus.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# Co-Author: Scorpoon
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ______
   / ____/__  ____  _______  _______
  / /_  / _ \/ __ \/ ___/ / / / ___/
 / __/ /  __/ / / / /  / /_/ (__  )
/_/    \___/_/ /_/_/   \__,_/____/

EOF
}
header_info
echo -e "Loading..."
APP="Fenrus"
var_disk="4"
var_cpu="1"
var_ram="512"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /opt/${APP} ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_error "There is currently no update path available."
exit
msg_info "Updating ${APP}"
systemctl stop ${APP}
git clone https://github.com/revenz/Fenrus.git
cd Fenrus || exit
gitVersionNumber=$(git rev-parse HEAD)

if [[ "${gitVersionNumber}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
  mkdir /opt/fenrus-data-backup
  cp -r "/opt/${APP}/data/" /opt/fenrus-data-backup/data
  if [[ ! -d /opt/fenrus-data-backup/data ]]; then msg_error "Backup of data folder failed! exiting..."; rm -r /opt/fenrus-data-backup/; exit; fi 
  export DOTNET_CLI_TELEMETRY_OPTOUT=1
  dotnet publish -c Release -o "/opt/${APP}/" Fenrus.csproj
  cp -r /opt/fenrus-data-backup/data/ "/opt/${APP}/"
  echo "${gitVersionNumber}" >"/opt/${APP}_version.txt"
  rm -r /opt/fenrus-data-backup/
  msg_ok "Updated $APP"
else
  msg_ok "No update required. ${APP} is already up to date"
fi
cd ..
rm -r Fenrus/

systemctl start ${APP}
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:5000${CL} \n"


================================================
FILE: ct/fhem.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ________                 
   / ____/ /_  ___  ____ ___ 
  / /_  / __ \/ _ \/ __ `__ \
 / __/ / / / /  __/ / / / / /
/_/   /_/ /_/\___/_/ /_/ /_/ 
                             
EOF
}
header_info
echo -e "Loading..."
APP="Fhem"
var_disk="8"
var_cpu="2"
var_ram="2048"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -f /etc/systemd/system/fhem.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating ${APP} LXC"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
msg_ok "Updated Successfully"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:8083${CL} \n"


================================================
FILE: ct/flaresolverr.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# Co-Author: remz1337
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ________               _____       __                    
   / ____/ /___ _________ / ___/____  / /   _____  __________
  / /_  / / __ `/ ___/ _ \\__ \/ __ \/ / | / / _ \/ ___/ ___/
 / __/ / / /_/ / /  /  __/__/ / /_/ / /| |/ /  __/ /  / /    
/_/   /_/\__,_/_/   \___/____/\____/_/ |___/\___/_/  /_/     

EOF
}
header_info
echo -e "Loading..."
APP="FlareSolverr"
var_disk="4"
var_cpu="2"
var_ram="2048"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
  header_info
  if [[ ! -f /etc/systemd/system/flaresolverr.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
  whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "SET RESOURCES" "Please set the resources in your ${APP} LXC to ${var_cpu}vCPU and ${var_ram}RAM for the build process before continuing" 10 75
  RELEASE=$(wget -q https://github.com/FlareSolverr/FlareSolverr/releases/latest -O - | grep "title>Release" | cut -d " " -f 4)
  if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
    msg_info "Updating $APP LXC"
    systemctl stop flaresolverr
    wget -q https://github.com/FlareSolverr/FlareSolverr/releases/download/$RELEASE/flaresolverr_linux_x64.tar.gz
    tar -xzf flaresolverr_linux_x64.tar.gz -C /opt
    rm flaresolverr_linux_x64.tar.gz
    systemctl start flaresolverr
    echo "${RELEASE}" >/opt/${APP}_version.txt
    msg_ok "Updated $APP LXC"
  else
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
  fi
  exit
}

start
build_container
description

msg_info "Setting Container to Normal Resources"
pct set $CTID -memory 512
pct set $CTID -cores 1
msg_ok "Set Container to Normal Resources"
msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:8191${CL} \n"


================================================
FILE: ct/flowiseai.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    ________              _           ___    ____
   / ____/ /___ _      __(_)_______  /   |  /  _/
  / /_  / / __ \ | /| / / / ___/ _ \/ /| |  / /
 / __/ / / /_/ / |/ |/ / (__  )  __/ ___ |_/ /
/_/   /_/\____/|__/|__/_/____/\___/_/  |_/___/

EOF
}
header_info
echo -e "Loading..."
APP="FlowiseAI"
var_disk="10"
var_cpu="4"
var_ram="4096"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -f /etc/systemd/system/flowise.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "SET RESOURCES" "Please set the resources in your ${APP} LXC to ${var_cpu}vCPU and ${var_ram}RAM for the build process before continuing" 10 75
msg_info "Updating ${APP}"
systemctl stop flowise
npm install -g flowise --upgrade
systemctl start flowise
msg_ok "Updated ${APP}"
exit
}

start
build_container
description

msg_info "Setting Container to Normal Resources"
pct set $CTID -memory 2048
pct set $CTID -cores 2
msg_ok "Set Container to Normal Resources"
msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:3000${CL} \n"


================================================
FILE: ct/forgejo.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
  clear
  cat <<"EOF"
    ______                        _     
   / ____/___  _________  ___    (_)___ 
  / /_  / __ \/ ___/ __ `/ _ \  / / __ \
 / __/ / /_/ / /  / /_/ /  __/ / / /_/ /
/_/    \____/_/   \__, /\___/_/ /\____/ 
                 /____/    /___/        
 
EOF
}
header_info
echo -e "Loading..."
APP="Forgejo"
var_disk="10"
var_cpu="2"
var_ram="2048"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /opt/forgejo ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Stopping ${APP}"
systemctl stop forgejo
msg_ok "Stopped ${APP}"

msg_info "Updating ${APP}"
RELEASE=$(curl -s https://codeberg.org/api/v1/repos/forgejo/forgejo/releases/latest | grep -oP '"tag_name":\s*"\K[^"]+' | sed 's/^v//')
wget -qO forgejo-$RELEASE-linux-amd64 "https://codeberg.org/forgejo/forgejo/releases/download/v${RELEASE}/forgejo-${RELEASE}-linux-amd64"
rm -rf /opt/forgejo/*
cp -r forgejo-$RELEASE-linux-amd64 /opt/forgejo/forgejo-$RELEASE-linux-amd64
chmod +x /opt/forgejo/forgejo-$RELEASE-linux-amd64
ln -sf /opt/forgejo/forgejo-$RELEASE-linux-amd64 /usr/local/bin/forgejo
msg_ok "Updated ${APP}"

msg_info "Cleaning"
rm -rf forgejo-$RELEASE-linux-amd64
msg_ok "Cleaned"

msg_info "Starting ${APP}"
systemctl start forgejo
msg_ok "Started ${APP}"
msg_ok "Updated Successfully"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:3000${CL} \n"


================================================
FILE: ct/frigate.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Authors: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
  clear
  cat <<"EOF"
    ______     _             __
   / ____/____(_)___ _____ _/ /____
  / /_  / ___/ / __ `/ __ `/ __/ _ \
 / __/ / /  / / /_/ / /_/ / /_/  __/
/_/   /_/  /_/\__, /\__,_/\__/\___/
             /____/

EOF
}
header_info
echo -e "Loading..."
APP="Frigate"
var_disk="20"
var_cpu="4"
var_ram="4096"
var_os="debian"
var_version="11"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="0"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
  if [[ ! -f /etc/systemd/system/frigate.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
  msg_error "To update Frigate, create a new container and transfer your configuration."
  exit  
}

start
build_container
description

msg_info "Setting Container to Normal Resources"
pct set $CTID -memory 1024
msg_ok "Set Container to Normal Resources"
msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:5000${CL} \n"
echo -e "go2rtc should be reachable by going to the following URL.
         ${BL}http://${IP}:1984${CL} \n"


================================================
FILE: ct/gitea.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# Co-author: Rogue-King
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
   ______ _  __
  / ____/(_)/ /____  ____ _
 / / __// // __/ _ \/ __  /
/ /_/ // // /_/  __/ /_/ /
\____//_/ \__/\___/\__,_/

EOF
}
header_info
echo -e "Loading..."
APP="Gitea"
var_disk="8"
var_cpu="1"
var_ram="1024"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[  ! -f /usr/local/bin/gitea ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
RELEASE=$(wget -q https://github.com/go-gitea/gitea/releases/latest -O - | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//')
msg_info "Updating $APP to ${RELEASE}"
wget -q https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-amd64
systemctl stop gitea
rm -rf /usr/local/bin/gitea 
mv gitea* /usr/local/bin/gitea
chmod +x /usr/local/bin/gitea
systemctl start gitea
msg_ok "Updated $APP Successfully"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:3000${CL} \n"


================================================
FILE: ct/go2rtc.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
               ___        __      
   ____ _____ |__ \ _____/ /______
  / __ `/ __ \__/ // ___/ __/ ___/
 / /_/ / /_/ / __// /  / /_/ /__  
 \__, /\____/____/_/   \__/\___/  
/____/                            
 
EOF
}
header_info
echo -e "Loading..."
APP="go2rtc"
var_disk="4"
var_cpu="2"
var_ram="2048"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /opt/go2rtc ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating $APP"
systemctl stop go2rtc
cd /opt/go2rtc
rm go2rtc_linux_amd64
wget -q https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64
chmod +x go2rtc_linux_amd64
systemctl start go2rtc
msg_ok "Updated $APP"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:1984${CL} \n"


================================================
FILE: ct/gokapi.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
   ______      __               _
  / ____/___  / /______ _____  (_)
 / / __/ __ \/ //_/ __ `/ __ \/ /
/ /_/ / /_/ / ,< / /_/ / /_/ / /
\____/\____/_/|_|\__,_/ .___/_/
                     /_/
EOF
}
header_info
echo -e "Loading..."
APP="Gokapi"
var_disk="4"
var_cpu="1"
var_ram="512"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /opt/gokapi ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_error "There is currently no update path available."
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} Setup should be reachable by going to the following URL.
         ${BL}http://${IP}:53842/setup${CL} \n"


================================================
FILE: ct/gotify.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
   ______      __  _ ____
  / ____/___  / /_(_) __/_  __
 / / __/ __ \/ __/ / /_/ / / /
/ /_/ / /_/ / /_/ / __/ /_/ /
\____/\____/\__/_/_/  \__, /
                     /____/
EOF
}
header_info
echo -e "Loading..."
APP="Gotify"
var_disk="2"
var_cpu="1"
var_ram="512"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /opt/gotify ]]; then msg_error "No ${APP} Installation Found!"; exit; fi

RELEASE=$(curl -s https://api.github.com/repos/gotify/server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
  msg_info "Stopping ${APP}"
  systemctl stop gotify
  msg_ok "Stopped ${APP}"

  msg_info "Updating ${APP} to ${RELEASE}"
  cd /opt/gotify
  wget -q https://github.com/gotify/server/releases/download/v${RELEASE}/gotify-linux-amd64.zip
  unzip -oq gotify-linux-amd64.zip
  rm -rf gotify-linux-amd64.zip
  chmod +x gotify-linux-amd64
  echo "${RELEASE}" >/opt/${APP}_version.txt
  msg_ok "Updated ${APP} to ${RELEASE}"

  msg_info "Starting ${APP}"
  systemctl start gotify
  msg_ok "Started ${APP}"
  msg_ok "Updated Successfully"
else
  msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP} ${CL} \n"


================================================
FILE: ct/grafana.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
   ______           ____                 
  / ____/________ _/ __/___ _____  ____ _
 / / __/ ___/ __  / /_/ __  / __ \/ __  /
/ /_/ / /  / /_/ / __/ /_/ / / / / /_/ / 
\____/_/   \__,_/_/  \__,_/_/ /_/\__,_/  
 
EOF
}
header_info
echo -e "Loading..."
APP="Grafana"
var_disk="2"
var_cpu="1"
var_ram="512"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -f /etc/apt/sources.list.d/grafana.list ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating ${APP}"
apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null
msg_ok "Updated Successfully"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:3000${CL} \n"


================================================
FILE: ct/grocy.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
   ____ __________  _______  __
  / __  / ___/ __ \/ ___/ / / /
 / /_/ / /  / /_/ / /__/ /_/ / 
 \__, /_/   \____/\___/\__, /  
/____/                /____/   
 
EOF
}
header_info
echo -e "Loading..."
APP="grocy"
var_disk="2"
var_cpu="1"
var_ram="512"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -f /etc/apache2/sites-available/grocy.conf ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
php_version=$(php -v | head -n 1 | awk '{print $2}')
if [[ ! $php_version == "8.3"* ]]; then
  msg_info "Updating PHP"
  curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
  echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ bookworm main" >/etc/apt/sources.list.d/php.list
  apt-get update
  apt-get install -y php8.3 php8.3-cli php8.3-{bz2,curl,mbstring,intl,sqlite3,fpm,gd,zip,xml}
  systemctl reload apache2
  apt autoremove
  msg_ok "Updated PHP"
fi
msg_info "Updating ${APP}"
bash /var/www/html/update.sh
msg_ok "Updated Successfully"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}${CL} \n"


================================================
FILE: ct/headscale.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    __  __               __                __
   / / / /__  ____ _____/ /_____________ _/ /__
  / /_/ / _ \/ __ `/ __  / ___/ ___/ __ `/ / _ \
 / __  /  __/ /_/ / /_/ (__  ) /__/ /_/ / /  __/
/_/ /_/\___/\__,_/\__,_/____/\___/\__,_/_/\___/

EOF
}
header_info
echo -e "Loading..."
APP="Headscale"
var_disk="2"
var_cpu="1"
var_ram="512"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /etc/headscale ]]; then msg_error "No ${APP} Installation Found!"; exit; fi

RELEASE=$(curl -s https://api.github.com/repos/juanfont/headscale/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
  msg_info "Stopping ${APP}"
  systemctl stop headscale
  msg_ok "Stopped ${APP}"

  msg_info "Updating $APP to v${RELEASE}"
  wget -q https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_amd64.deb
  dpkg -i headscale_${RELEASE}_linux_amd64.deb
  rm headscale_${RELEASE}_linux_amd64.deb
  echo "${RELEASE}" >/opt/${APP}_version.txt
  msg_ok "Updated $APP to ${RELEASE}"
  
  msg_info "Starting ${APP}"
  systemctl start headscale
  msg_ok "Started ${APP}"
  msg_ok "Updated Successfully"
else
  msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"


================================================
FILE: ct/heimdall-dashboard.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
            _               _       _ _      ___          _     _                         _ 
  /\  /\___(_)_ __ ___   __| | __ _| | |    /   \__ _ ___| |__ | |__   ___   __ _ _ __ __| |
 / /_/ / _ \ | '_ ` _ \ / _` |/ _` | | |   / /\ / _` / __| '_ \| '_ \ / _ \ / _` | '__/ _` |
/ __  /  __/ | | | | | | (_| | (_| | | |  / /_// (_| \__ \ | | | |_) | (_) | (_| | | | (_| |
\/ /_/ \___|_|_| |_| |_|\__,_|\__,_|_|_| /___,' \__,_|___/_| |_|_.__/ \___/ \__,_|_|  \__,_|
                                                                                            
EOF
}
header_info
echo -e "Loading..."
APP="Heimdall-Dashboard"
var_disk="2"
var_cpu="1"
var_ram="512"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /opt/Heimdall ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
RELEASE=$(curl -sX GET "https://api.github.com/repos/linuxserver/Heimdall/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
  msg_info "Stopping ${APP}"
  systemctl stop heimdall
  sleep 1
  msg_ok "Stopped ${APP}"

  msg_info "Backing up Data"
  cp -R /opt/Heimdall/database database-backup
  cp -R /opt/Heimdall/public public-backup
  sleep 1
  msg_ok "Backed up Data"

  msg_info "Updating Heimdall Dashboard to ${RELEASE}"
  wget -q https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz
  tar xzf ${RELEASE}.tar.gz
  VER=$(curl -s https://api.github.com/repos/linuxserver/Heimdall/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
  cp -R Heimdall-${VER}/* /opt/Heimdall
  cd /opt/Heimdall
  apt-get install -y composer &>/dev/null
  COMPOSER_ALLOW_SUPERUSER=1 composer dump-autoload &>/dev/null
  echo "${RELEASE}" >/opt/${APP}_version.txt
  msg_ok "Updated Heimdall Dashboard to ${RELEASE}"

  msg_info "Restoring Data"
  cd ~
  cp -R database-backup/* /opt/Heimdall/database
  cp -R public-backup/* /opt/Heimdall/public
  sleep 1
  msg_ok "Restored Data"

  msg_info "Cleanup"
  rm -rf {${RELEASE}.tar.gz,Heimdall-${VER},public-backup,database-backup,Heimdall}
  sleep 1
  msg_ok "Cleaned"

  msg_info "Starting ${APP}"
  systemctl start heimdall.service
  sleep 2
  msg_ok "Started ${APP}"
  msg_ok "Updated Successfully"
else
  msg_ok "No update required.  ${APP} is already at ${RELEASE}."
fi
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:7990${CL} \n"


================================================
FILE: ct/hivemq.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    __  ___            __  _______      ____________
   / / / (_)   _____  /  |/  / __ \    / ____/ ____/
  / /_/ / / | / / _ \/ /|_/ / / / /   / /   / __/
 / __  / /| |/ /  __/ /  / / /_/ /   / /___/ /___
/_/ /_/_/ |___/\___/_/  /_/\___\_\   \____/_____/

EOF
}
header_info
echo -e "Loading..."
APP="HiveMQ"
var_disk="4"
var_cpu="1"
var_ram="1024"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_error "There is currently no update path available."
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"


================================================
FILE: ct/homarr.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    __  __
   / / / /___  ____ ___  ____ ___________
  / /_/ / __ \/ __ `__ \/ __ `/ ___/ ___/
 / __  / /_/ / / / / / / /_/ / /  / /
/_/ /_/\____/_/ /_/ /_/\__,_/_/  /_/

EOF
}
header_info
echo -e "Loading..."
APP="Homarr"
var_disk="8"
var_cpu="2"
var_ram="2048"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /opt/homarr ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating $APP (Patience)"
systemctl stop homarr
cd /opt/homarr
if ! git pull; then
  echo "Already up to date."
  systemctl start homarr
  echo "No update required."
  exit
fi
yarn install
yarn build
systemctl start homarr
msg_ok "Updated $APP"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:3000${CL} \n"


================================================
FILE: ct/homeassistant-core.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
  clear
  cat <<"EOF"
                                _           _     _              _       ___               
  /\  /\___  _ __ ___   ___    /_\  ___ ___(_)___| |_ __ _ _ __ | |_    / __\___  _ __ ___ 
 / /_/ / _ \| '_ ` _ \ / _ \  //_\\/ __/ __| / __| __/ _` | '_ \| __|  / /  / _ \| '__/ _ \
/ __  / (_) | | | | | |  __/ /  _  \__ \__ \ \__ \ || (_| | | | | |_  / /__| (_) | | |  __/
\/ /_/ \___/|_| |_| |_|\___| \_/ \_/___/___/_|___/\__\__,_|_| |_|\__| \____/\___/|_|  \___|
                                                                                           
EOF
}
header_info
echo -e "Loading..."
APP="Home Assistant-Core"
var_disk="8"
var_cpu="2"
var_ram="1024"
var_os="ubuntu"
var_version="24.04"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
  if [[ ! -d /srv/homeassistant ]]; then
    msg_error "No ${APP} Installation Found!"
    exit
  fi
  PY=$(ls /srv/homeassistant/lib/)
  IP=$(hostname -I | awk '{print $1}')
  UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \
    "1" "Update Core" ON \
    "2" "Install HACS" OFF \
    "3" "Install FileBrowser" OFF \
    3>&1 1>&2 2>&3)
  header_info
  if [ "$UPD" == "1" ]; then
    if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SELECT BRANCH" --yesno "Use Beta Branch?" 10 58); then
      clear
      header_info
      echo -e "${GN}Updating to Beta Version${CL}"
      BR="--pre "
    else
      clear
      header_info
      echo -e "${GN}Updating to Stable Version${CL}"
      BR=""
    fi
    if [[ "$PY" == "python3.11" ]]; then echo -e "⚠️  Home Assistant will soon require Python 3.12."; fi

    msg_info "Stopping Home Assistant"
    systemctl stop homeassistant
    msg_ok "Stopped Home Assistant"

    msg_info "Updating Home Assistant"
    source /srv/homeassistant/bin/activate
    uv pip install ${BR}--upgrade homeassistant &>/dev/null
    msg_ok "Updated Home Assistant"

    msg_info "Starting Home Assistant"
    systemctl start homeassistant
    sleep 2
    msg_ok "Started Home Assistant"
    msg_ok "Update Successful"
    echo -e "\n  Go to http://${IP}:8123 \n"
    exit
  fi
  if [ "$UPD" == "2" ]; then
    msg_info "Installing Home Assistant Community Store (HACS)"
    apt update &>/dev/null
    apt install unzip &>/dev/null
    cd .homeassistant
    bash <(curl -fsSL https://get.hacs.xyz) &>/dev/null
    msg_ok "Installed Home Assistant Community Store (HACS)"
    echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n"
    exit
  fi
  if [ "$UPD" == "3" ]; then
    set +Eeuo pipefail
    read -r -p "Would you like to use No Authentication? <y/N> " prompt
    msg_info "Installing FileBrowser"
    RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g')
    curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/$RELEASE/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null

    if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
      filebrowser config init -a '0.0.0.0' &>/dev/null
      filebrowser config set -a '0.0.0.0' &>/dev/null
      filebrowser config set --auth.method=noauth &>/dev/null
      filebrowser users add ID 1 --perm.admin &>/dev/null  
    else
      filebrowser config init -a '0.0.0.0' &>/dev/null
      filebrowser config set -a '0.0.0.0' &>/dev/null
      filebrowser users add admin helper-scripts.com --perm.admin &>/dev/null
    fi
    msg_ok "Installed FileBrowser"

    msg_info "Creating Service"
    service_path="/etc/systemd/system/filebrowser.service"
    echo "[Unit]
Description=Filebrowser
After=network-online.target
[Service]
User=root
WorkingDirectory=/root/
ExecStart=/usr/local/bin/filebrowser -r /root/.homeassistant
[Install]
WantedBy=default.target" >$service_path

    systemctl enable --now -q filebrowser.service
    msg_ok "Created Service"

    msg_ok "Completed Successfully!\n"
    echo -e "FileBrowser should be reachable by going to the following URL.
         ${BL}http://$IP:8080${CL}   admin|helper-scripts.com\n"
    exit
  fi
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:8123${CL}"


================================================
FILE: ct/homeassistant.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
  clear
  cat <<"EOF"
    __  __                        ___              _      __              __ 
   / / / /___  ____ ___  ___     /   |  __________(_)____/ /_____ _____  / /_
  / /_/ / __ \/ __  __ \/ _ \   / /| | / ___/ ___/ / ___/ __/ __  / __ \/ __/
 / __  / /_/ / / / / / /  __/  / ___ |(__  |__  ) (__  ) /_/ /_/ / / / / /_  
/_/ /_/\____/_/ /_/ /_/\___/  /_/  |_/____/____/_/____/\__/\__,_/_/ /_/\__/  
 
EOF
}
header_info
echo -e "Loading..."
APP="Home Assistant"
var_disk="16"
var_cpu="2"
var_ram="2048"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
  if [[ ! -d /var/lib/docker/volumes/hass_config/_data ]]; then
    msg_error "No ${APP} Installation Found!"
    exit
  fi
  UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \
    "1" "Update ALL Containers" ON \
    "2" "Remove ALL Unused Images" OFF \
    "3" "Install HACS" OFF \
    "4" "Install FileBrowser" OFF \
    3>&1 1>&2 2>&3)
  header_info
  if [ "$UPD" == "1" ]; then
    msg_info "Updating All Containers"
    CONTAINER_LIST="${1:-$(docker ps -q)}"
    for container in ${CONTAINER_LIST}; do
      CONTAINER_IMAGE="$(docker inspect --format "{{.Config.Image}}" --type container ${container})"
      RUNNING_IMAGE="$(docker inspect --format "{{.Image}}" --type container "${container}")"
      docker pull "${CONTAINER_IMAGE}"
      LATEST_IMAGE="$(docker inspect --format "{{.Id}}" --type image "${CONTAINER_IMAGE}")"
      if [[ "${RUNNING_IMAGE}" != "${LATEST_IMAGE}" ]]; then
        echo "Updating ${container} image ${CONTAINER_IMAGE}"
        DOCKER_COMMAND="$(runlike "${container}")"
        docker rm --force "${container}"
        eval ${DOCKER_COMMAND}
      fi
    done
    msg_ok "Updated All Containers"
    exit
  fi
  if [ "$UPD" == "2" ]; then
    msg_info "Removing ALL Unused Images"
    docker image prune -af
    msg_ok "Removed ALL Unused Images"
    exit
  fi
  if [ "$UPD" == "3" ]; then
    msg_info "Installing Home Assistant Community Store (HACS)"
    apt update &>/dev/null
    apt install unzip &>/dev/null
    cd /var/lib/docker/volumes/hass_config/_data
    bash <(curl -fsSL https://get.hacs.xyz) &>/dev/null
    msg_ok "Installed Home Assistant Community Store (HACS)"
    echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n"
    exit
  fi
  if [ "$UPD" == "4" ]; then
    IP=$(hostname -I | awk '{print $1}')
    msg_info "Installing FileBrowser"
    RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g')
    curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/v2.23.0/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null
    filebrowser config init -a '0.0.0.0' &>/dev/null
    filebrowser config set -a '0.0.0.0' &>/dev/null
    filebrowser users add admin helper-scripts.com --perm.admin &>/dev/null
    msg_ok "Installed FileBrowser"

    msg_info "Creating Service"
    service_path="/etc/systemd/system/filebrowser.service"
    echo "[Unit]
Description=Filebrowser
After=network-online.target
[Service]
User=root
WorkingDirectory=/root/
ExecStart=/usr/local/bin/filebrowser -r /
[Install]
WantedBy=default.target" >$service_path

    systemctl enable --now filebrowser.service &>/dev/null
    msg_ok "Created Service"

    msg_ok "Completed Successfully!\n"
    echo -e "FileBrowser should be reachable by going to the following URL.
         ${BL}http://$IP:8080${CL}   admin|helper-scripts.com\n"
    exit
  fi
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:8123${CL}
Portainer should be reachable by going to the following URL.
         ${BL}https://${IP}:9443${CL}\n"


================================================
FILE: ct/homebox.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck
# Co-Author: MickLesk (Canbiz)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    __  __                     ____            
   / / / /___  ____ ___  ___  / __ )____  _  __
  / /_/ / __ \/ __ `__ \/ _ \/ __  / __ \| |/_/
 / __  / /_/ / / / / / /  __/ /_/ / /_/ />  <
/_/ /_/\____/_/ /_/ /_/\___/_____/\____/_/|_|
                                                   
EOF
}
header_info
echo -e "Loading..."
APP="HomeBox"
var_disk="4"
var_cpu="1"
var_ram="1024"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}
function update_script() {
header_info
if [[ ! -f /opt/homebox ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then
  read -r -p "Warning: Storage is dangerously low, continue anyway? <y/N> " prompt
  [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit
fi
RELEASE=$(curl -s https://api.github.com/repos/sysadminsmedia/homebox/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
  msg_info "Stopping ${APP}"
  systemctl stop homebox
  msg_ok "${APP} Stopped"

  msg_info "Updating ${APP} to ${RELEASE}"
  cd /opt
  rm -rf homebox_bak
  mv homebox homebox_bak
  wget -qO- https://github.com/sysadminsmedia/homebox/releases/download/${RELEASE}/homebox_Linux_x86_64.tar.gz | tar -xzf - -C /opt
  chmod +x /opt/homebox
  echo "${RELEASE}" >/opt/${APP}_version.txt
  msg_ok "Updated Homebox"

  msg_info "Starting ${APP}"
  systemctl start homebox
  msg_ok "Started ${APP}"

  msg_ok "Updated Successfully"
else
  msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} Setup should be reachable by going to the following URL.
         ${BL}http://${IP}:7745${CL} \n"


================================================
FILE: ct/homebridge.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    __  ______  __  _____________  ____  ________  ____________
   / / / / __ \/  |/  / ____/ __ )/ __ \/  _/ __ \/ ____/ ____/
  / /_/ / / / / /|_/ / __/ / __  / /_/ // // / / / / __/ __/   
 / __  / /_/ / /  / / /___/ /_/ / _, _// // /_/ / /_/ / /___   
/_/ /_/\____/_/  /_/_____/_____/_/ |_/___/_____/\____/_____/   
 
EOF
}
header_info
echo -e "Loading..."
APP="Homebridge"
var_disk="4"
var_cpu="1"
var_ram="1024"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -f /etc/apt/sources.list.d/homebridge.list ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating ${APP} LXC"
apt-get update &>/dev/null
apt-get install -y homebridge &>/dev/null
msg_ok "Updated Successfully"
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
         ${BL}http://${IP}:8581${CL} \n"


================================================
FILE: ct/homepage.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    __  __                                          
   / / / /___  ____ ___  ___  ____  ____ _____ ____ 
  / /_/ / __ \/ __ `__ \/ _ \/ __ \/ __ `/ __ `/ _ \
 / __  / /_/ / / / / / /  __/ /_/ / /_/ / /_/ /  __/
/_/ /_/\____/_/ /_/ /_/\___/ .___/\__,_/\__, /\___/ 
                          /_/          /____/       
EOF
}
header_info
echo -e "Loading..."
APP="Homepage"
var_disk="3"
var_cpu="2"
var_ram="1024"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /opt/homepage ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
  if ! command -v npm >/dev/null 2>&1; then
    echo "Installing NPM..."
    apt-get install -y npm >/dev/null 2>&1
    npm install -g pnpm >/dev/null 2>&1
    echo "Installed NPM..."
  fi
fi
RELEASE=$(curl -s https://api.github.com/repos/gethomepage/homepage/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
  msg_info "Updating Homepage to v${RELEASE} (Patience)"
  systemctl stop homepage
  wget -q https://github.com/gethomepage/homepage/archive/refs/tags/v${RELEASE}.tar.gz
  tar -xzf v${RELEASE}.tar.gz
  rm -rf v${RELEASE}.tar.gz
  cp -r homepage-${RELEASE}/* /opt/homepage/
  rm -rf homepage-${RELEASE}
  cd /opt/homepage
  npx update-browserslist-db@latest
  pnpm install
  pnpm build
  systemctl start homepage
  echo "${RELEASE}" >/opt/${APP}_version.txt
  msg_ok "Updated Homepage to v${RELEASE}"
else
  msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} Setup should be reachable by going to the following URL.
         ${BL}http://${IP}:3000${CL} \n"


================================================
FILE: ct/homer.sh
================================================
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/tteck/Proxmox/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
    __  __                         
   / / / /___  ____ ___  ___  _____
  / /_/ / __ \/ __ `__ \/ _ \/ ___/
 / __  / /_/ / / / / / /  __/ /    
/_/ /_/\____/_/ /_/ /_/\___/_/     
                                   
EOF
}
header_info
echo -e "Loading..."
APP="Homer"
var_disk="2"
var_cpu="1"
var_ram="512"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
  CT_TYPE="1"
  PW=""
  CT_ID=$NEXTID
  HN=$NSAPP
  DISK_SIZE="$var_disk"
  CORE_COUNT="$var_cpu"
  RAM_SIZE="$var_ram"
  BRG="vmbr0"
  NET="dhcp"
  GATE=""
  APT_CACHER=""
  APT_CACHER_IP=""
  DISABLEIP6="no"
  MTU=""
  SD=""
  NS=""
  MAC=""
  VLAN=""
  SSH="no"
  VERB="no"
  echo_default
}

function update_script() {
header_info
if [[ ! -d /opt/homer ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Stopping ${APP}"
systemctl stop homer
msg_ok "Stopped ${APP}"

msg_info "Backing up assets directory"
cd ~
mkdir -p assets-backup
cp -R /opt/homer/assets/. assets-backup
msg_ok "Backed up assets directory"

msg_info "Updating ${APP}"
rm -rf /opt/homer/*
cd /opt/homer
wget -q https://github.com/bastienwirtz/homer/releases/latest/download/homer.zip
unzip homer.zip &>/dev/null
msg_ok "Updated ${APP}"

msg_info "Restoring assets directory"
cd ~
cp -Rf assets-backup/.
Download .txt
gitextract_ua0ju9th/

├── .github/
│   ├── CODE_OF_CONDUCT.md
│   ├── CONTRIBUTING.md
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yaml
│   │   └── config.yml
│   └── pull_request_template.md
├── CHANGELOG.md
├── CODE-AUDIT.md
├── LICENSE
├── README.md
├── USER_SUBMITTED_GUIDES.md
├── ct/
│   ├── actualbudget.sh
│   ├── adguard.sh
│   ├── adventurelog.sh
│   ├── agentdvr.sh
│   ├── alpine-docker.sh
│   ├── alpine-grafana.sh
│   ├── alpine-nextcloud.sh
│   ├── alpine-vaultwarden.sh
│   ├── alpine-zigbee2mqtt.sh
│   ├── alpine.sh
│   ├── apache-cassandra.sh
│   ├── apache-couchdb.sh
│   ├── apt-cacher-ng.sh
│   ├── archivebox.sh
│   ├── aria2.sh
│   ├── audiobookshelf.sh
│   ├── autobrr.sh
│   ├── bazarr.sh
│   ├── blocky.sh
│   ├── bunkerweb.sh
│   ├── caddy.sh
│   ├── calibre-web.sh
│   ├── casaos.sh
│   ├── changedetection.sh
│   ├── channels.sh
│   ├── cloudflared.sh
│   ├── cockpit.sh
│   ├── commafeed.sh
│   ├── create_lxc.sh
│   ├── cronicle.sh
│   ├── daemonsync.sh
│   ├── dashy.sh
│   ├── debian.sh
│   ├── deconz.sh
│   ├── deluge.sh
│   ├── docker.sh
│   ├── dockge.sh
│   ├── emby.sh
│   ├── emqx.sh
│   ├── ersatztv.sh
│   ├── esphome.sh
│   ├── evcc.sh
│   ├── fenrus.sh
│   ├── fhem.sh
│   ├── flaresolverr.sh
│   ├── flowiseai.sh
│   ├── forgejo.sh
│   ├── frigate.sh
│   ├── gitea.sh
│   ├── go2rtc.sh
│   ├── gokapi.sh
│   ├── gotify.sh
│   ├── grafana.sh
│   ├── grocy.sh
│   ├── headscale.sh
│   ├── heimdall-dashboard.sh
│   ├── hivemq.sh
│   ├── homarr.sh
│   ├── homeassistant-core.sh
│   ├── homeassistant.sh
│   ├── homebox.sh
│   ├── homebridge.sh
│   ├── homepage.sh
│   ├── homer.sh
│   ├── hyperhdr.sh
│   ├── hyperion.sh
│   ├── influxdb.sh
│   ├── iobroker.sh
│   ├── iventoy.sh
│   ├── jackett.sh
│   ├── jellyfin.sh
│   ├── jellyseerr.sh
│   ├── kavita.sh
│   ├── keycloak.sh
│   ├── kubo.sh
│   ├── lazylibrarian.sh
│   ├── lidarr.sh
│   ├── linkwarden.sh
│   ├── lldap.sh
│   ├── mafl.sh
│   ├── magicmirror.sh
│   ├── mariadb.sh
│   ├── matterbridge.sh
│   ├── mediamtx.sh
│   ├── medusa.sh
│   ├── memos.sh
│   ├── meshcentral.sh
│   ├── metube.sh
│   ├── mongodb.sh
│   ├── motioneye.sh
│   ├── mqtt.sh
│   ├── myspeed.sh
│   ├── mysql.sh
│   ├── n8n.sh
│   ├── navidrome.sh
│   ├── neo4j.sh
│   ├── nextcloudpi.sh
│   ├── nginxproxymanager.sh
│   ├── nocodb.sh
│   ├── node-red.sh
│   ├── notifiarr.sh
│   ├── ntfy.sh
│   ├── nzbget.sh
│   ├── octoprint.sh
│   ├── ollama.sh
│   ├── omada.sh
│   ├── ombi.sh
│   ├── omv.sh
│   ├── openhab.sh
│   ├── openobserve.sh
│   ├── openwebui.sh
│   ├── overseerr.sh
│   ├── owncast.sh
│   ├── pairdrop.sh
│   ├── paperless-ngx.sh
│   ├── pbs.sh
│   ├── peanut.sh
│   ├── petio.sh
│   ├── photoprism.sh
│   ├── pialert.sh
│   ├── pihole.sh
│   ├── pingvin.sh
│   ├── plex.sh
│   ├── pocketbase.sh
│   ├── podman-homeassistant.sh
│   ├── podman.sh
│   ├── postgresql.sh
│   ├── prometheus.sh
│   ├── prowlarr.sh
│   ├── qbittorrent.sh
│   ├── rabbitmq.sh
│   ├── radarr.sh
│   ├── rdtclient.sh
│   ├── readarr.sh
│   ├── readeck.sh
│   ├── redis.sh
│   ├── rockylinux.sh
│   ├── rtsptoweb.sh
│   ├── runtipi.sh
│   ├── sabnzbd.sh
│   ├── scrypted.sh
│   ├── sftpgo.sh
│   ├── shinobi.sh
│   ├── smokeping.sh
│   ├── sonarr.sh
│   ├── spoolman.sh
│   ├── stirling-pdf.sh
│   ├── syncthing.sh
│   ├── tandoor.sh
│   ├── tasmoadmin.sh
│   ├── tautulli.sh
│   ├── tdarr.sh
│   ├── technitiumdns.sh
│   ├── threadfin.sh
│   ├── tianji.sh
│   ├── traccar.sh
│   ├── traefik.sh
│   ├── transmission.sh
│   ├── trilium.sh
│   ├── ubuntu.sh
│   ├── umami.sh
│   ├── umbrel.sh
│   ├── unifi.sh
│   ├── unmanic.sh
│   ├── uptimekuma.sh
│   ├── vaultwarden.sh
│   ├── wallos.sh
│   ├── wastebin.sh
│   ├── watchyourlan.sh
│   ├── whisparr.sh
│   ├── whoogle.sh
│   ├── wikijs.sh
│   ├── wireguard.sh
│   ├── yunohost.sh
│   ├── zabbix.sh
│   ├── zigbee2mqtt.sh
│   ├── zipline.sh
│   ├── zoraxy.sh
│   └── zwave-js-ui.sh
├── install/
│   ├── actualbudget-install.sh
│   ├── adguard-install.sh
│   ├── adventurelog-install.sh
│   ├── agentdvr-install.sh
│   ├── alpine-docker-install.sh
│   ├── alpine-grafana-install.sh
│   ├── alpine-install.sh
│   ├── alpine-nextcloud-install.sh
│   ├── alpine-vaultwarden-install.sh
│   ├── alpine-zigbee2mqtt-install.sh
│   ├── apache-cassandra-install.sh
│   ├── apache-couchdb-install.sh
│   ├── apt-cacher-ng-install.sh
│   ├── archivebox-install.sh
│   ├── aria2-install.sh
│   ├── audiobookshelf-install.sh
│   ├── autobrr-install.sh
│   ├── bazarr-install.sh
│   ├── blocky-install.sh
│   ├── bunkerweb-install.sh
│   ├── caddy-install.sh
│   ├── calibre-web-install.sh
│   ├── casaos-install.sh
│   ├── changedetection-install.sh
│   ├── channels-install.sh
│   ├── cloudflared-install.sh
│   ├── cockpit-install.sh
│   ├── commafeed-install.sh
│   ├── cronicle-install.sh
│   ├── daemonsync-install.sh
│   ├── dashy-install.sh
│   ├── debian-install.sh
│   ├── deconz-install.sh
│   ├── deluge-install.sh
│   ├── docker-install.sh
│   ├── dockge-install.sh
│   ├── emby-install.sh
│   ├── emqx-install.sh
│   ├── ersatztv-install.sh
│   ├── esphome-install.sh
│   ├── evcc-install.sh
│   ├── fenrus-install.sh
│   ├── fhem-install.sh
│   ├── flaresolverr-install.sh
│   ├── flowiseai-install.sh
│   ├── forgejo-install.sh
│   ├── frigate-install.sh
│   ├── gitea-install.sh
│   ├── go2rtc-install.sh
│   ├── gokapi-install.sh
│   ├── gotify-install.sh
│   ├── grafana-install.sh
│   ├── grocy-install.sh
│   ├── headscale-install.sh
│   ├── heimdall-dashboard-install.sh
│   ├── hivemq-install.sh
│   ├── homarr-install.sh
│   ├── homeassistant-core-install.sh
│   ├── homeassistant-install.sh
│   ├── homebox-install.sh
│   ├── homebridge-install.sh
│   ├── homepage-install.sh
│   ├── homer-install.sh
│   ├── hyperhdr-install.sh
│   ├── hyperion-install.sh
│   ├── influxdb-install.sh
│   ├── iobroker-install.sh
│   ├── iventoy-install.sh
│   ├── jackett-install.sh
│   ├── jellyfin-install.sh
│   ├── jellyseerr-install.sh
│   ├── kavita-install.sh
│   ├── keycloak-install.sh
│   ├── kubo-install.sh
│   ├── lazylibrarian-install.sh
│   ├── lidarr-install.sh
│   ├── linkwarden-install.sh
│   ├── lldap-install.sh
│   ├── mafl-install.sh
│   ├── magicmirror-install.sh
│   ├── mariadb-install.sh
│   ├── matterbridge-install.sh
│   ├── mediamtx-install.sh
│   ├── medusa-install.sh
│   ├── memos-install.sh
│   ├── meshcentral-install.sh
│   ├── metube-install.sh
│   ├── mongodb-install.sh
│   ├── motioneye-install.sh
│   ├── mqtt-install.sh
│   ├── myspeed-install.sh
│   ├── mysql-install.sh
│   ├── n8n-install.sh
│   ├── navidrome-install.sh
│   ├── neo4j-install.sh
│   ├── nextcloudpi-install.sh
│   ├── nginxproxymanager-install.sh
│   ├── nocodb-install.sh
│   ├── node-red-install.sh
│   ├── notifiarr-install.sh
│   ├── ntfy-install.sh
│   ├── nzbget-install.sh
│   ├── octoprint-install.sh
│   ├── ollama-install.sh
│   ├── omada-install.sh
│   ├── ombi-install.sh
│   ├── omv-install.sh
│   ├── openhab-install.sh
│   ├── openobserve-install.sh
│   ├── openwebui-install.sh
│   ├── overseerr-install.sh
│   ├── owncast-install.sh
│   ├── pairdrop-install.sh
│   ├── paperless-ngx-install.sh
│   ├── pbs-install.sh
│   ├── peanut-install.sh
│   ├── petio-install.sh
│   ├── photoprism-install.sh
│   ├── pialert-install.sh
│   ├── pihole-install.sh
│   ├── pingvin-install.sh
│   ├── plex-install.sh
│   ├── pocketbase-install.sh
│   ├── podman-homeassistant-install.sh
│   ├── podman-install.sh
│   ├── postgresql-install.sh
│   ├── prometheus-install.sh
│   ├── prowlarr-install.sh
│   ├── qbittorrent-install.sh
│   ├── rabbitmq-install.sh
│   ├── radarr-install.sh
│   ├── rdtclient-install.sh
│   ├── readarr-install.sh
│   ├── readeck-install.sh
│   ├── redis-install.sh
│   ├── rtsptoweb-install.sh
│   ├── runtipi-install.sh
│   ├── sabnzbd-install.sh
│   ├── scrypted-install.sh
│   ├── sftpgo-install.sh
│   ├── shinobi-install.sh
│   ├── smokeping-install.sh
│   ├── sonarr-install.sh
│   ├── spoolman-install.sh
│   ├── stirling-pdf-install.sh
│   ├── syncthing-install.sh
│   ├── tandoor-install.sh
│   ├── tasmoadmin-install.sh
│   ├── tautulli-install.sh
│   ├── tdarr-install.sh
│   ├── technitiumdns-install.sh
│   ├── threadfin-install.sh
│   ├── tianji-install.sh
│   ├── traccar-install.sh
│   ├── traefik-install.sh
│   ├── transmission-install.sh
│   ├── trilium-install.sh
│   ├── ubuntu-install.sh
│   ├── umami-install.sh
│   ├── umbrel-install.sh
│   ├── unifi-install.sh
│   ├── unmanic-install.sh
│   ├── uptimekuma-install.sh
│   ├── vaultwarden-install.sh
│   ├── wallos-install.sh
│   ├── wastebin-install.sh
│   ├── watchyourlan-install.sh
│   ├── whisparr-install.sh
│   ├── whoogle-install.sh
│   ├── wikijs-install.sh
│   ├── wireguard-install.sh
│   ├── yunohost-install.sh
│   ├── zabbix-install.sh
│   ├── zigbee2mqtt-install.sh
│   ├── zipline-install.sh
│   ├── zoraxy-install.sh
│   └── zwave-js-ui-install.sh
├── misc/
│   ├── add-netbird-lxc.sh
│   ├── add-tailscale-lxc.sh
│   ├── all-templates.sh
│   ├── alpine-install.func
│   ├── build.func
│   ├── clean-lxcs.sh
│   ├── clean.sh
│   ├── code-server.sh
│   ├── container-restore-from-backup.sh
│   ├── copy-data/
│   │   ├── README.md
│   │   ├── home-assistant-container-copy-data-home-assistant-container.sh
│   │   ├── home-assistant-container-copy-data-home-assistant-core.sh
│   │   ├── home-assistant-container-copy-data-podman-home-assistant.sh
│   │   ├── home-assistant-core-copy-data-home-assistant-container.sh
│   │   ├── home-assistant-core-copy-data-home-assistant-core.sh
│   │   ├── plex-copy-data-plex.sh
│   │   ├── podman-home-assistant-copy-data-home-assistant-container.sh
│   │   ├── z2m-copy-data-z2m.sh
│   │   └── zwavejs2mqtt-copy-data-zwavejsui.sh
│   ├── core-restore-from-backup.sh
│   ├── cron-update-lxcs.sh
│   ├── crowdsec.sh
│   ├── daemonsync_2.2.0.0059_amd64.deb
│   ├── filebrowser.sh
│   ├── frigate-support.sh
│   ├── fstrim.sh
│   ├── glances.sh
│   ├── host-backup.sh
│   ├── hw-acceleration.sh
│   ├── install.func
│   ├── kernel-clean.sh
│   ├── kernel-pin.sh
│   ├── microcode.sh
│   ├── monitor-all.sh
│   ├── netdata.sh
│   ├── olivetin.sh
│   ├── pbs3-upgrade.sh
│   ├── post-pbs-install.sh
│   ├── post-pve-install.sh
│   ├── pve8-upgrade.sh
│   ├── pyenv.sh
│   ├── scaling-governor.sh
│   ├── update-lxcs-cron.sh
│   ├── update-lxcs.sh
│   ├── usb-passthrough.sh
│   └── webmin.sh
├── turnkey/
│   └── turnkey.sh
└── vm/
    ├── debian-vm.sh
    ├── haos-vm.sh
    ├── mikrotik-routeros.sh
    ├── nextcloud-vm.sh
    ├── openwrt.sh
    ├── owncloud-vm.sh
    ├── pimox-haos-vm.sh
    ├── ubuntu2204-vm.sh
    └── ubuntu2404-vm.sh
Condensed preview — 423 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,150K chars).
[
  {
    "path": ".github/CODE_OF_CONDUCT.md",
    "chars": 5449,
    "preview": "\n# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make particip"
  },
  {
    "path": ".github/CONTRIBUTING.md",
    "chars": 1124,
    "preview": "<div align=\"center\">\n  <a href=\"#\">\n    <img src=\"https://raw.githubusercontent.com/tteck/Proxmox/main/misc/images/logo."
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 28,
    "preview": "ko_fi: proxmoxhelperscripts\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yaml",
    "chars": 2604,
    "preview": "name: Problems with a script.\ndescription: Generate a report on an issue pertaining specifically to a script. For other "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 189,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: Helper-Scripts Community Support\n    url: https://github.com/tteck/"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 948,
    "preview": "> [!NOTE]\nI am meticulous when it comes to merging code into the main branch, so please understand that I may reject pul"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 42055,
    "preview": "<div align=\"center\">\n  <a href=\"#\">\n    <img src=\"https://raw.githubusercontent.com/tteck/Proxmox/main/misc/images/logo."
  },
  {
    "path": "CODE-AUDIT.md",
    "chars": 1607,
    "preview": "<div align=\"center\">\n<img src=\"https://raw.githubusercontent.com/tteck/Proxmox/main/misc/images/logo.png\" height=\"100px\""
  },
  {
    "path": "LICENSE",
    "chars": 1067,
    "preview": "MIT License\n\nCopyright (c) 2021-2024 tteck\n\nPermission is hereby granted, free of charge, to any person obtaining a copy"
  },
  {
    "path": "README.md",
    "chars": 1999,
    "preview": "<div style=\"border: 2px solid #d1d5db; padding: 20px; border-radius: 8px; background-color: #f9fafb;\"> <h2 align=\"center"
  },
  {
    "path": "USER_SUBMITTED_GUIDES.md",
    "chars": 2655,
    "preview": "<div align=\"center\">\n  <a href=\"#\">\n    <img src=\"https://raw.githubusercontent.com/tteck/Proxmox/main/misc/images/logo."
  },
  {
    "path": "ct/actualbudget.sh",
    "chars": 1820,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/adguard.sh",
    "chars": 2268,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/adventurelog.sh",
    "chars": 3247,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/agentdvr.sh",
    "chars": 1388,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/alpine-docker.sh",
    "chars": 1529,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/alpine-grafana.sh",
    "chars": 2133,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/alpine-nextcloud.sh",
    "chars": 2292,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/alpine-vaultwarden.sh",
    "chars": 2663,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/alpine-zigbee2mqtt.sh",
    "chars": 1693,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/alpine.sh",
    "chars": 1336,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/apache-cassandra.sh",
    "chars": 1527,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/apache-couchdb.sh",
    "chars": 1708,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/apt-cacher-ng.sh",
    "chars": 1580,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/archivebox.sh",
    "chars": 1893,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/aria2.sh",
    "chars": 1304,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/audiobookshelf.sh",
    "chars": 1632,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/autobrr.sh",
    "chars": 1833,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/bazarr.sh",
    "chars": 1336,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/blocky.sh",
    "chars": 1266,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/bunkerweb.sh",
    "chars": 2012,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/caddy.sh",
    "chars": 1254,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/calibre-web.sh",
    "chars": 4369,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/casaos.sh",
    "chars": 1405,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/changedetection.sh",
    "chars": 2391,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/channels.sh",
    "chars": 1608,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/cloudflared.sh",
    "chars": 1415,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/cockpit.sh",
    "chars": 4025,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/commafeed.sh",
    "chars": 2289,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/create_lxc.sh",
    "chars": 5994,
    "preview": "#!/usr/bin/env bash\n\n# Copyright (c) 2021-2024 tteck\n# Author: tteck (tteckster)\n# License: MIT\n# https://github.com/tte"
  },
  {
    "path": "ct/cronicle.sh",
    "chars": 3715,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/daemonsync.sh",
    "chars": 1589,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/dashy.sh",
    "chars": 2509,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/debian.sh",
    "chars": 1266,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/deconz.sh",
    "chars": 1392,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/deluge.sh",
    "chars": 1406,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/docker.sh",
    "chars": 1249,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/dockge.sh",
    "chars": 1368,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/emby.sh",
    "chars": 1856,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/emqx.sh",
    "chars": 1356,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/ersatztv.sh",
    "chars": 2143,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/esphome.sh",
    "chars": 1760,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/evcc.sh",
    "chars": 1325,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/fenrus.sh",
    "chars": 2183,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/fhem.sh",
    "chars": 1383,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/flaresolverr.sh",
    "chars": 2478,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/flowiseai.sh",
    "chars": 1819,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/forgejo.sh",
    "chars": 2122,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/frigate.sh",
    "chars": 1605,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/gitea.sh",
    "chars": 1658,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/go2rtc.sh",
    "chars": 1520,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/gokapi.sh",
    "chars": 1327,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/gotify.sh",
    "chars": 2081,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/grafana.sh",
    "chars": 1417,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/grocy.sh",
    "chars": 1871,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/headscale.sh",
    "chars": 2053,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/heimdall-dashboard.sh",
    "chars": 3195,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/hivemq.sh",
    "chars": 1264,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/homarr.sh",
    "chars": 1491,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/homeassistant-core.sh",
    "chars": 4943,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/homeassistant.sh",
    "chars": 4507,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/homebox.sh",
    "chars": 2425,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/homebridge.sh",
    "chars": 1549,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/homepage.sh",
    "chars": 2462,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/homer.sh",
    "chars": 1994,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/hyperhdr.sh",
    "chars": 1435,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/hyperion.sh",
    "chars": 1491,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/influxdb.sh",
    "chars": 1319,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/iobroker.sh",
    "chars": 1410,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/iventoy.sh",
    "chars": 1350,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/jackett.sh",
    "chars": 2000,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/jellyfin.sh",
    "chars": 1408,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/jellyseerr.sh",
    "chars": 2760,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/kavita.sh",
    "chars": 1708,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/keycloak.sh",
    "chars": 2244,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/kubo.sh",
    "chars": 1909,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/lazylibrarian.sh",
    "chars": 1914,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/lidarr.sh",
    "chars": 1387,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/linkwarden.sh",
    "chars": 2180,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/lldap.sh",
    "chars": 1339,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/mafl.sh",
    "chars": 2030,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/magicmirror.sh",
    "chars": 1804,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/mariadb.sh",
    "chars": 1314,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/matterbridge.sh",
    "chars": 1542,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/mediamtx.sh",
    "chars": 1262,
    "preview": "#!/usr/bin/env bash\n\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright "
  },
  {
    "path": "ct/medusa.sh",
    "chars": 1389,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/memos.sh",
    "chars": 1850,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/meshcentral.sh",
    "chars": 1500,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/metube.sh",
    "chars": 2239,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/mongodb.sh",
    "chars": 1391,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/motioneye.sh",
    "chars": 1499,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/mqtt.sh",
    "chars": 1414,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/myspeed.sh",
    "chars": 2541,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/mysql.sh",
    "chars": 1322,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/n8n.sh",
    "chars": 1545,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/navidrome.sh",
    "chars": 1988,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/neo4j.sh",
    "chars": 1379,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/nextcloudpi.sh",
    "chars": 1579,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/nginxproxymanager.sh",
    "chars": 6526,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/nocodb.sh",
    "chars": 1511,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/node-red.sh",
    "chars": 3272,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/notifiarr.sh",
    "chars": 1392,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/ntfy.sh",
    "chars": 1297,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/nzbget.sh",
    "chars": 1409,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/octoprint.sh",
    "chars": 1638,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/ollama.sh",
    "chars": 1354,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/omada.sh",
    "chars": 1727,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/ombi.sh",
    "chars": 1960,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/omv.sh",
    "chars": 1631,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/openhab.sh",
    "chars": 1482,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/openobserve.sh",
    "chars": 1750,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/openwebui.sh",
    "chars": 1846,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/overseerr.sh",
    "chars": 1608,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/owncast.sh",
    "chars": 1459,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/pairdrop.sh",
    "chars": 1447,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/paperless-ngx.sh",
    "chars": 3888,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/pbs.sh",
    "chars": 1807,
    "preview": "#!/usr/bin/env bash\n\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright "
  },
  {
    "path": "ct/peanut.sh",
    "chars": 2576,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/petio.sh",
    "chars": 1398,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/photoprism.sh",
    "chars": 1928,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/pialert.sh",
    "chars": 1380,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/pihole.sh",
    "chars": 1346,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/pingvin.sh",
    "chars": 1975,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/plex.sh",
    "chars": 2193,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/pocketbase.sh",
    "chars": 1201,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/podman-homeassistant.sh",
    "chars": 4488,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/podman.sh",
    "chars": 1354,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/postgresql.sh",
    "chars": 1450,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/prometheus.sh",
    "chars": 2464,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/prowlarr.sh",
    "chars": 1413,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/qbittorrent.sh",
    "chars": 1556,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/rabbitmq.sh",
    "chars": 1898,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/radarr.sh",
    "chars": 1355,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/rdtclient.sh",
    "chars": 2067,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/readarr.sh",
    "chars": 1443,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/readeck.sh",
    "chars": 1678,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/redis.sh",
    "chars": 1197,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/rockylinux.sh",
    "chars": 1438,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/rtsptoweb.sh",
    "chars": 1514,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/runtipi.sh",
    "chars": 1315,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/sabnzbd.sh",
    "chars": 2158,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/scrypted.sh",
    "chars": 1497,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/sftpgo.sh",
    "chars": 1367,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/shinobi.sh",
    "chars": 1446,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/smokeping.sh",
    "chars": 1514,
    "preview": "#!/usr/bin/env bash\n\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright "
  },
  {
    "path": "ct/sonarr.sh",
    "chars": 1518,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/spoolman.sh",
    "chars": 2668,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/stirling-pdf.sh",
    "chars": 2080,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/syncthing.sh",
    "chars": 1553,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/tandoor.sh",
    "chars": 2390,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/tasmoadmin.sh",
    "chars": 1489,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/tautulli.sh",
    "chars": 1365,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/tdarr.sh",
    "chars": 1356,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/technitiumdns.sh",
    "chars": 1908,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/threadfin.sh",
    "chars": 1630,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/tianji.sh",
    "chars": 3380,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/traccar.sh",
    "chars": 1290,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/traefik.sh",
    "chars": 1872,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/transmission.sh",
    "chars": 1618,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/trilium.sh",
    "chars": 2093,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/ubuntu.sh",
    "chars": 1256,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/umami.sh",
    "chars": 2119,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/umbrel.sh",
    "chars": 1358,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/unifi.sh",
    "chars": 1436,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/unmanic.sh",
    "chars": 1424,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/uptimekuma.sh",
    "chars": 2335,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/vaultwarden.sh",
    "chars": 4709,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/wallos.sh",
    "chars": 2501,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/wastebin.sh",
    "chars": 2393,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/watchyourlan.sh",
    "chars": 2106,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/whisparr.sh",
    "chars": 1464,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/whoogle.sh",
    "chars": 1470,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/wikijs.sh",
    "chars": 1894,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/wireguard.sh",
    "chars": 1476,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/yunohost.sh",
    "chars": 1464,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/zabbix.sh",
    "chars": 1393,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/zigbee2mqtt.sh",
    "chars": 3394,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/zipline.sh",
    "chars": 2494,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/zoraxy.sh",
    "chars": 1922,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "ct/zwave-js-ui.sh",
    "chars": 2547,
    "preview": "#!/usr/bin/env bash\nsource <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)\n# Copyright ("
  },
  {
    "path": "install/actualbudget-install.sh",
    "chars": 1958,
    "preview": "#!/usr/bin/env bash\n\n# Copyright (c) 2021-2024 tteck\n# Author: tteck (tteckster)\n# License: MIT\n# https://github.com/tte"
  },
  {
    "path": "install/adguard-install.sh",
    "chars": 1357,
    "preview": "#!/usr/bin/env bash\n\n# Copyright (c) 2021-2024 tteck\n# Author: tteck (tteckster)\n# License: MIT\n# https://github.com/tte"
  },
  {
    "path": "install/adventurelog-install.sh",
    "chars": 5793,
    "preview": "#!/usr/bin/env bash\n\n# Copyright (c) 2021-2024 tteck\n# Author: tteck\n# Co-Author: MickLesk (Canbiz)\n# License: MIT\n# htt"
  },
  {
    "path": "install/agentdvr-install.sh",
    "chars": 1486,
    "preview": "#!/usr/bin/env bash\n\n# Copyright (c) 2021-2024 tteck\n# Author: tteck (tteckster)\n# License: MIT\n# https://github.com/tte"
  },
  {
    "path": "install/alpine-docker-install.sh",
    "chars": 2486,
    "preview": "#!/usr/bin/env bash\n\n# Copyright (c) 2021-2024 tteck\n# Author: tteck (tteckster)\n# License: MIT\n# https://github.com/tte"
  },
  {
    "path": "install/alpine-grafana-install.sh",
    "chars": 656,
    "preview": "#!/usr/bin/env bash\n\n# Copyright (c) 2021-2024 tteck\n# Author: tteck (tteckster)\n# License: MIT\n# https://github.com/tte"
  },
  {
    "path": "install/alpine-install.sh",
    "chars": 446,
    "preview": "#!/usr/bin/env bash\n\n# Copyright (c) 2021-2024 tteck\n# Author: tteck (tteckster)\n# License: MIT\n# https://github.com/tte"
  },
  {
    "path": "install/alpine-nextcloud-install.sh",
    "chars": 7416,
    "preview": "#!/usr/bin/env bash\n\n# Copyright (c) 2021-2024 tteck\n# Author: tteck (tteckster)\n# License: MIT\n# https://github.com/tte"
  },
  {
    "path": "install/alpine-vaultwarden-install.sh",
    "chars": 1046,
    "preview": "#!/usr/bin/env bash\n\n# Copyright (c) 2021-2024 tteck\n# Author: tteck (tteckster)\n# License: MIT\n# https://github.com/tte"
  },
  {
    "path": "install/alpine-zigbee2mqtt-install.sh",
    "chars": 879,
    "preview": "#!/usr/bin/env bash\n\n# Copyright (c) 2021-2024 tteck\n# Author: tteck (tteckster)\n# License: MIT\n# https://github.com/tte"
  }
]

// ... and 223 more files (download for full content)

About this extraction

This page contains the full source code of the tteck/Proxmox GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 423 files (1.0 MB), approximately 346.6k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!