---
# eslint-disable eslint-comments/disable-enable-pair, max-len, max-lines, no-warning-comments
#
# `softwarePackages` is a map of possible package managers to use while installing a program. The installer will
# look at the `installerPreference` variable and find the first package manager that is in the package's possible
# installation method and then use that. It is also sensitive to the type of operating system so a package with
# only `apt` defined will not install on macOS.
#
# Everything should be fairly straight forward. Take a look at the `installerPreference` for a list of package managers. If a package
# has dependencies, the dependencies are defined under the `_deps` key. All of the `_deps` should also be defined in the
# `softwarePackages` map. The installer will check for the presence of the package's key in the PATH. If the package's key
# does not match the executable's name, then the `_bin` key can be defined so that the installer will look at that instead.
#
# Full example of a softwarePackage:
# altair:
#   _appimageName: SwitchHosts.AppImage               # Name of file that the appimage: field downloads to
#   _bin: ng                                          # Instead of checking if the object key (altair) is in the PATH, check if "ng" is in the PATH and only proceed if it is not available
#   _deps:                                            # Any piece of data can be a string or array. _deps will take each dep and run that through the installer first. If you need to just install dependencies with apt (for instance), you can also set the _deps equals to [altair:deps] and then define the apt dependencies like that instead of creating a new entry for each apt dependency.
#     - angular-cli
#   _docker: docker run --rm bannmann/docker-cheat    # Command that the _bin value should alias to (similar to Whalebrew)
#   _groups:                                          # Groups that should be created / user added to
#     - docker
#   _when: |                                          # Run the script defined with _when and only proceed if it exits with a 0
#     test -f /usr
#   _pre: |
#     echo "_pre allows you to define a script that runs before the installation"
#   _post:brew:debian: |
#     echo "_post allows you to define a script that runs after the installation"
#   _service: smbd                                    # System service to enable, restart, and/or start (can also be an array).
#   _restricted: true                                 # True if it should be skipped on a restricted machine (i.e. a work machine).
#   _epel: true                                       # True if https://docs.fedoraproject.org/en-US/epel/ should be enabled
#   ansible: professormanhattan.docker
#   apk: altair
#   appimage: https://developers.yubico.com/yubikey-manager-qt/Releases/yubikey-manager-qt-1.2.4b-linux.AppImage
#   appinstaller: https://example.com/package.appinstaller # TODO - https://pieces.app has example of this type of file
#   basher: xwmx/nb
#   binary:darwin: https://dl.min.io/client/mc/release/darwin/mc     # Any piece of data can have the OS type (darwin, linux, windows) or release ID (arch, debian, ubuntu, centos, fedora) added to the end. The script will try to execute it first before trying to run other items.
#   binary:linux: https://dl.min.io/client/mc/release/linux-amd64/mc
#   binary:windows: https://dl.min.io/client/mc/release/windows-amd64/mc.exe
#   bpkg: xwmx/nb
#   brew: altair
#   cargo: tree-sitter-cli
#   cask: altair-graphql-client
#   crew: altair
#   choco: altair-graphql
#   _rpmFusion: true                                  # Enable the RPM Fusion Free repository if true
#   dnf: altair
#   flatpak: com.yubico.yubioath
#   gem: altair
#   go: github.com/ProfessorManhattan/blockinfile@latest
#   krew:
#     - ctx
#     - ns
#   nix: emplace
#   npm: altair
#   pacman: altair
#   pipx: altair
#   pkg-darwin: https://google.com/macos-pkgfile.pkg
#   pkg-freebsd: altair
#   pkg-termux: altair
#   port: altair
#   scoop: altair
#   script >-
#     curl -sS https://getcomposer.org/installer | php
#     sudo mv composer.phar /usr/local/bin/composer
#     sudo chmod +x /usr/local/bin/composer
#   _snapClassic: true                                # Install the snap in classic mode
#   snap: altair
#   whalebrew:
#   winget: Neovim.Neovim
#   xbps: altair
#   yay: altair
#   zypper: altair
# angular-cli:
#   _bin: ng                                          # Only install if "ng" is not available in the PATH
#   _name: Gitify                                     # Pretty name of the package
#   _home: https://angular.io/                        # Homepage if there is one
#   _desc: GitHub notifications on the menu bar       # Short description of the package
#   _docs: https://docs.angular.io/                   # Link to documentation (if available)
#   _github: https://github.com/manosim/gitify        # GitHub link to the package
#   _type: menubar                                    # Type of package (either application, cli, webapp, or menubar)
#   npm:
#     - '@angular/cli'
#     - gulp

installerPreference:
  apt:
    - flatpak
    - snap
    - whalebrew
    - apt
    - brew
    - go
    - cargo
    - npm
    - pipx
    - pip
    - gem
    - appimage
    - script
    - ansible
    - binary
  darwin:
    - whalebrew
    - cask
    - brew
    # Removed because port installation from default list because encountered this error: Creating user "macports" make: *** [install] Killed: 9 --- might be due to remote managed macOS settings.
    # - port
    - go
    - cargo
    - npm
    - pipx
    - pip
    - gem
    - pkg-darwin
    - script
    - ansible
    - binary
  dnf:
    - flatpak
    - snap
    - whalebrew
    - dnf
    - brew
    - go
    - cargo
    - npm
    - pipx
    - pip
    - gem
    - appimage
    - script
    - ansible
    - binary
  freebsd:
    - pkg
    - go
    - cargo
    - npm
    - gem
    - script
  pacman:
    - flatpak
    - snap
    - whalebrew
    - pacman
    - brew
    - yay
    - go
    - cargo
    - npm
    - pipx
    - pip
    - gem
    - appimage
    - script
    - ansible
    - binary
  ubuntu:
    - snap
    - flatpak
    - whalebrew
    - apt
    - brew
    - go
    - cargo
    - npm
    - pipx
    - pip
    - gem
    - appimage
    - script
    - ansible
    - binary
  windows:
    - choco
    - scoop
    - winget
    - go
    - cargo
    - npm
    - pipx
    - gem
    - script
    - ansible
    - binary
  zypper:
    - flatpak
    - snap
    - whalebrew
    - zypper
    - brew
    - go
    - cargo
    - npm
    - pipx
    - gem
    - appimage
    - script
    - ansible
    - binary
softwarePackages:
  _envchain:deps:
    _github: false
    apt:
      - gnome-keyring
      - gcc
      - gnome-keyring
      - libsecret-1-dev
      - make
      - libreadline-dev
    dnf:
      - gcc
      - gnome-keyring
      - libsecret-devel
      - make
      - readline-devel
    pacman:
      - gcc
      - gnome-keyring
      - libsecret
      - make
      - readline
  _kde:
    _github: false
    _deps:
      - kde-plasma-desktop
  _misc-flatpaks:
    _github: false
    _deps:
      - bottles
      - cockpit-client
      - connections
      - dconf-editor
      - deja-dup
      - dialect
      - drawing
      - flatseal
      - forklift
      - gnome-calendar
      - gnome-document-viewer
      - gnome-extension-manager
      - gnome-eyedropper
      - gnome-file-roller
      - gnome-image-viewer
      - gnome-network-displays
      - gnome-passwords-keys
      - gnome-photos
      - gnome-sound-recorder
      # OSes usually have a text editor preinstalled
      # - gnome-text-editor
      - gnome-video-player
      - gnome-weather
      - junction
      - kooha
      - newsflash
      - pinapp
      - vup
      - warp-transfer
      - web-font-generator
      - what-ip
      - live-captions
      - libre-menu-editor
      - iso-image-writer
      - trayscale
  _nautilus-extensions:
    _github: false
    _deps:
      - nautilus-brasero
      - nautilus-gtkhash
      - nautilus-gsconnect
      - nautilus-image-converter
      - nautilus-python
      - nautilus-seahorse
      - nautilus-search-tool
      - nautilus-share
      - nautilus-wipe
  ack:
    _bin: ack
    _github: https://github.com/beyondgrep/ack3
    _name: Ack
    apt: ack
    brew: ack
    choco: ack
    dnf: ack
    pacman: ack
    port: perl/p5-app-ack
  act:
    _bin: act
    _desc: '[Act](https://github.com/nektos/act) Run GitHub actions locally'
    _docs: https://github.com/nektos/act#example-commands
    _github: https://github.com/nektos/act
    _home: https://github.com/nektos/act
    _name: Act
    brew: act
    choco: act-cli
    go: github.com/nektos/act@
    nix: nixpkgs.act
    port: act
    scoop: act
    yay: act
  adobe-creative-cloud:
    _bin: adobe-creative-cloud
    _name: Adobe Creative Cloud
    _github: false
    _when:cask: '! test -d "/Applications/Adobe Creative Cloud" && ! test -d "$HOME/Applications/Adobe Creative Cloud"'
    cask: adobe-creative-cloud
  ai-shell:
    _bin: ai
    _github: https://github.com/BuilderIO/ai-shell
    _name: AI Shell
    npm: '@builder.io/ai-shell'
  aiac:
    _bin: aiac
    _github: https://github.com/gofireflyio/aiac
    _name: AIAC
    brew: gofireflyio/aiac/aiac
    go: github.com/gofireflyio/aiac/v3@latest
  aicommits:
    _bin: aicommits
    _github: https://github.com/Nutlope/aicommits
    _name: AI Commits
    brew: aicommits
    npm: aicommits
  aider:
    _bin: aider
    _github: https://github.com/paul-gauthier/aider
    _name: Aider AI Chat
    pipx: aider-chat
  aifiles:
    _bin: aifiles
    _deps:
      - pandoc
      - exiftool
      - poppler
      - csvkit
    _github: https://github.com/jjuliano/aifiles
    _name: AI Files
    _todo: Implement this when XDG spec is supported so we can store configs in ~/.config
    npm: aifiles
  airdrop-cli:
    _bin: airdrop
    _github: https://github.com/vldmrkl/airdrop-cli
    _name: Airdrop CLI
    brew:darwin: vldmrkl/formulae/airdrop-cli
  airtame:
    _app: Airtame.app
    _bin: airtame
    _github: false
    _name: Airtame
    cask: airtame
    choco: airtame
    flatpak: com.airtame.Client
    snap: airtame-application
  alda:
    _bin: alda
    _github: https://github.com/alda-lang/alda
    _name: Alda
    brew: alda
  allure:
    _bin: allure
    _desc: '[Allure Report](https://docs.qameta.io/allure-testops/) is a flexible, lightweight multi-language test reporting tool. It provides clear graphical reports and allows everyone involved in the development process to extract the maximum of information from the everyday testing process.'
    _docs: https://docs.qameta.io/allure-report/
    _github: https://github.com/allure-framework/allure2
    _home: https://docs.qameta.io/allure-testops/
    _name: Allure
    _post:binary:darwin: |
      #!/usr/bin/env bash
      echo "TODO"
    _post:binary:linux: |
      #!/usr/bin/env bash
      # TODO How to pass the path of the file downloaded in `binary` step? That can replace the `wget` command below
      mkdir -p /usr/local/share/allure
      cd /usr/local/share/allure
      wget https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/2.20.1/allure-commandline-2.20.1.zip -O /usr/local/share/allure/allure.zip
      unzip -o allure.zip
      ln -s /usr/local/share/allure/allure<version>/bin/allure
    _post:binary:windows: |
      # TODO
    binary: https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/2.20.1/allure-commandline-2.20.1.zip
    # TODO: Find latest version from https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/maven-metadata.xml and use it in the _binary_ URL
    brew: allure
    scoop: allure
    yay: allure
  alt-tab:
    _app: AltTab.app
    _bin: alt-tab
    _github: https://github.com/lwouis/alt-tab-macos
    _name: Alt+Tab for macOS that works like alt+tab on Windows
    cask: alt-tab
  altair:
    _app: Altair GraphQL Client.app
    _bin:snap: altair
    _desc: '[Altair GraphQL Client](https://altairgraphql.dev/) A beautiful feature-rich GraphQL Client for all platforms.'
    _docs: https://altairgraphql.dev/docs/
    _env:
      ALTAIR_APPDATA:
        cask: "$HOME/Library/Application Support/Altair GraphQL Client"
        choco: "TODO"
        snap: "$HOME/snap/altair/current/.config/Altair GraphQL Client"
    _github: https://github.com/altair-graphql/altair
    _home: https://altairgraphql.dev/
    _name: Altair GraphQL Client
    cask: altair-graphql-client
    choco: altair-graphql
    snap: altair
    yay: altair
  amethyst:
    _app: Amethyst.app
    _bin: amethyst
    _github: https://github.com/ianyh/Amethyst
    _name: Amethyst
    cask: amethyst
  android-commandlinetools:
    _bin: false
    _deps:
      - java
    _github: false
    _name: Android Studio Command Line Tools
    _when:cask: '! test -d "${HOMEBREW_PREFIX:-/opt/homebrew}/share/android-commandlinetools"'
    cask: android-commandlinetools
  android-platform-tools:
    _bin: adb
    _github: false
    _name: Android Platform Tools
    cask: android-platform-tools
  android-studio:
    _app: Android Studio.app
    _github: false
    _bin: android-studio
    _deps:
      - android-commandlinetools
      - java
    _desc: >-
      [Android Studio](https://developer.android.com/studio) is the official integrated development environment for Google's Android operating system, built on JetBrains' IntelliJ IDEA software and designed specifically for Android development. This role installs Android Studio on nearly any operating system and also ensures a configurable list of command-line tools and SDKs are installed and seamlessly integrated with the system (i.e. the role adds the appropriate items to the `PATH` environment variable).
    _docs: https://developer.android.com/docs
    _env:
      ANDROID_STUDIO_APPDATA:
        cask: "TODO"
        choco: "TODO"
        flatpak: "TODO"
        snap: "TODO"
    _home: https://developer.android.com/studio
    _name: Android Studio
    cask: android-studio
    choco: androidstudio
    flatpak: com.google.AndroidStudio
    snap: android-studio
    yay: android-studio
  angular-cli:
    _bin: ng
    _desc: '[Angular](https://angular.io) The web development framework for building the future'
    _docs: https://angular.io/docs
    _github: https://github.com/angular/angular
    _home: https://angular.io
    _name: Angular
    brew: angular-cli
    npm: '@angular/cli'
  ansible:
    _bin: ansible
    _desc: '[Ansible](https://www.ansible.com/) Ansible is a radically simple IT automation platform that makes your applications and systems easier to deploy and maintain'
    _docs: https://docs.ansible.com/
    _github: https://github.com/ansible/ansible
    _home: https://www.ansible.com/
    _name: Ansible
    _post:pipx: |
      #!/usr/bin/env bash
      pipx inject ansible PyObjC PyObjC-core docker lxml netaddr pexpect python-vagrant pywinrm requests-credssp watchdog
    # brew: ansible
    # dnf: ansible
    pipx: ansible
  ansible-lint:
    _bin: ansible-lint
    _desc: '[Ansible Lint](https://github.com/ansible/ansible-lint/) is a command-line tool for linting playbooks, roles and collections aimed toward any Ansible users'
    _docs: https://ansible-lint.readthedocs.io/
    _github: https://github.com/ansible/ansible-lint/
    _home: https://github.com/ansible/ansible-lint/
    _name: Ansible Lint
    pipx: ansible-lint
  ansibleconnect:
    _bin: ansibleconnect
    _deps:
      - sshpass
      - tmux
    _desc: '[ansibleconnect](https://github.com/psykulsk/ansibleconnect) allows you to connect to all hosts from the inventory with one command'
    _docs: https://github.com/psykulsk/ansibleconnect
    _github: https://github.com/psykulsk/ansibleconnect
    _home: https://github.com/psykulsk/ansibleconnect
    _name: Ansibleconnect
    pipx: ansibleconnect
  ansibler:
    _bin: ansibler
    _desc: Megabyte Labs Python project used to extract test information from Molecule and save it as JSON that can be rendered into charts
    _docs: https://pypi.org/project/ansibler/
    _github: https://github.com/megabyte-labs/ansibler
    _home: https://pypi.org/project/ansibler/
    _name: Ansibler
    pipx: ansibler
  ansifilter:
    _bin: ansifilter
    _name: Ansifilter
    _github: false
    brew: ansifilter
    choco: ansifilter
    port: ansifilter
  apktool:
    _bin: apktool
    _github: https://github.com/iBotPeaches/Apktool
    _name: APKTool
    brew: apktool
    choco: apktool
  appium:
    _bin: appium
    _desc: '[Appium](https://appium.io/) is an open source automation tool for running scripts and testing native applications, mobile-web applications and hybrid applications on Android or iOS using a webdriver.'
    _docs: https://appium.io/docs/en/about-appium/intro/
    _github: https://github.com/appium/appium
    _home: https://appium.io/
    _name: Appium
    _service: appium
    brew: appium
    npm: appium
  appium-desktop:
    _app: Appium Server GUI.app
    _bin: appium-desktop
    _github: https://github.com/appium/appium-desktop
    _name: Appium Desktop
    appimage: appium/appium-desktop
    cask: appium
    choco: appium-desktop
  appium-inspector:
    _app: Appium Inspector.app
    _bin: appium-inspector
    _github: https://github.com/appium/appium-inspector
    _name: Appium Inspector
    appimage: appium/appium-inspector
    cask: appium-inspector
    choco: appium-desktop
  appnest-readme:
    _bin: readme
    _desc: '[Readme](https://github.com/andreasbm/readme/) automatically generate a beautiful best-practice README file based on the contents of your repository'
    _docs: https://github.com/andreasbm/readme/
    _github: https://github.com/andreasbm/readme/
    _home: https://github.com/andreasbm/readme/
    _name: Readme
    npm: '@appnest/readme'
  apprise:
    _bin: apprise
    _deps:
      - pywin32
      - terminal-notifier
    _github: https://github.com/caronc/apprise
    _name: Apprise
    dnf: apprise
    pipx: apprise
  apt-cacher-ng:
    _bin: null
    _desc: '[Apt-Cacher-NG](https://wiki.debian.org/AptCacherNg) is a caching proxy server (or apt proxy) for Debian based distributions like Ubuntu, Kubuntu, Xubuntu, Edubuntu, Linux Mint, etc, which is used to cache the downloaded packages locally on your server.'
    _docs: https://www.unix-ag.uni-kl.de/~bloch/acng/html/index.html
    _github: https://salsa.debian.org/blade/apt-cacher-ng
    _home: https://wiki.debian.org/AptCacherNg
    _name: AptCacherNG
    _systemd: apt-cacher-ng
    ansible: professormanhattan.aptcacherng
  aqua:
    _bin: aqua
    _desc: '[aqua](https://aquaproj.github.io/) is a Declarative CLI Version manager written in Go. It supports Lazy Install, Registry, and continuous update with Renovate.'
    _docs: https://aquaproj.github.io
    _github: https://github.com/aquaproj/aqua
    _home: https://aquaproj.github.io
    _name: aqua
    _post: |
      #!/usr/bin/env bash
      # @file Aqua Initialization
      # @brief Updates and installs any Aqua dependencies that are defined in Aqua's configuration file.
      # @description
      #     This script updates Aqua and then installs any Aqua dependencies that are defined.

      if command -v aqua > /dev/null; then
        gum log -sl info 'Updating Aqua'
        aqua update-aqua
        gum log -sl info 'Installing Aqua dependencies (if any are defined)'
        aqua install -a
      else
        gum log -sl info 'Skipping aqua install script because aqua was not installed'
      fi
    binary:linux: https://github.com/aquaproj/aqua/releases/download/v2.0.0-0/aqua_linux_amd64.tar.gz
    binary:windows: https://github.com/aquaproj/aqua/releases/download/v2.0.0-0/aqua_windows_amd64.tar.gz
    brew: aquaproj/aqua/aqua
    go: github.com/aquaproj/aqua/v2/cmd/aqua@latest
  arduino-ide:
    _app: Arduino.app
    _bin: arduino
    _github: https://github.com/arduino/arduino-ide
    cask: arduino
    choco: arduino
    flatpak: cc.arduino.IDE2
  argc:
    _bin: argc
    _github: https://github.com/sigoden/argc
    _name: Argc
    cargo: argc
  argo-cli:
    _bin: argocd
    _desc: ArgoCD is a declarative GitOps continuous delivery platform.
    _docs: https://argoproj.github.io/argo-workflows/walk-through/argo-cli/
    _github: https://github.com/argoproj/argo-cd
    _home: https://argo-cd.readthedocs.io/en/stable/
    _name: argo
    brew: argocd
    choco: argocd-cli
    github: https://github.com/argoproj/argo-workflows
    pacman:
      - argocd
      - argocd-cli
  aria2:
    _bin: aria2c
    _desc: '[aria2](https://aria2.github.io/) is a lightweight multi-protocol & multi-source command-line download utility. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink. [AriaNg](http://ariang.mayswind.net/) is a modern web frontend that makes working with aria2 easier.'
    _docs: https://aria2.github.io/manual/en/html/
    _github: https://github.com/aria2/aria2
    _name: Aria2/AriaNg
    ansible: professormanhattan.aria
    apt: aria2
    brew: aria2
    choco: aria2
    dnf:fedora: aria2
    pacman: aria2
    port: aria2
    scoop: aria2
  ariang:
    _app: AriaNg Native.app
    _github: https://github.com/mayswind/AriaNg
    cask: ariang
  arping:
    _bin: arping
    _github: https://github.com/ThomasHabets/arping
    _name: ARPing
    apt: arping
    brew: arping
    choco: arping
    dnf: arping
    pacman: arping
  asciinema:
    _bin: asciinema
    _desc: '[Asciinema](https://asciinema.org) allows you to record and share your terminal sessions, the simple way'
    _docs: https://asciinema.org/docs/
    _github: https://github.com/asciinema/asciinema
    _home: https://asciinema.org/
    _name: asciinema
    apk: asciinema
    apt: asciinema
    brew: asciinema
    dnf: asciinema
    pacman: asciinema
    pipx: asciinema
  asdf:
    _bin: asdf
    _desc: '[asdf](https://asdf-vm.com/#/) is a CLI tool that can manage multiple language runtime versions on a per-project basis or globally. It is like gvm, nvm, rbenv, and pyenv all in one. This role installs asdf on Linux or macOS.'
    _docs: https://asdf-vm.com/guide/introduction.html
    _github: https://github.com/asdf-vm/asdf
    _home: https://asdf-vm.com/
    _name: asdf-vm
    ansible: professormanhattan.asdf
  assh:
    _bin: assh
    _desc: '[assh](https://manfred.life/assh) makes your ssh client smarter'
    _docs: https://github.com/moul/assh
    _github: https://github.com/moul/assh
    _home: https://manfred.life/assh
    _name: assh
    brew: assh
    go: moul.io/assh/v2
    yay: assh
  astronvim:
    _deps:
      - bottom
      - lazygit
      - neovim
      - node
      - python
      - ripgrep
      - tree-sitter
    _desc: '[AstroNvim](https://astronvim.github.io/) is an aesthetic and feature-rich neovim config that is extensible and easy to use with a great set of plugins'
    _docs: https://astronvim.github.io/
    _github: https://github.com/AstroNvim/AstroNvim
    _home: https://astronvim.github.io/
    _name: AstroNvim
    # TODO: Add timeouts to all commands in install-program
    _post: |
      #!/usr/bin/env bash
      echo "Waiting on command that installs nvim plugins"
      # bash -ci "nvim --headless -c 'quitall'"
  atuin:
    _bin: atuin
    _github: https://github.com/ellie/atuin
    _name: Atuin
    _post: |
      #!/usr/bin/env bash
      source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/private.sh"
      atuin register -u "$ATUIN_USERNAME" -e "$ATUIN_EMAIL" -p "$ATUIN_PASSWORD"
      atuin import auto
      atuin sync
    brew: atuin
    cargo: atuin
    pacman: atuin
    pkg-termux: atuin
    port: atuin
  audacity:
    _app: Audacity.app
    _bin: audacity
    _desc: An open-source audio editor
    _docs: https://support.audacityteam.org/
    _github: https://github.com/audacity/audacity
    _home: https://www.audacityteam.org/
    _name: Audacity
    appimage: Audacity
    apt: audacity
    cask: audacity
    choco: audacity
    dnf: audacity
    flatpak: org.audacityteam.Audacity
    scoop: extras/audacity
    snap: audacity
  auto-install:
    _bin: auto-install
    _desc: '[auto-install](https://github.com/siddharthkp/auto-install) installs dependencies as you code'
    _docs: https://github.com/siddharthkp/auto-install
    _github: https://github.com/siddharthkp/auto-install
    _home: https://github.com/siddharthkp/auto-install
    _name: auto-install
    npm: auto-install
  autodoc:
    _bin: doc
    _github: https://github.com/context-labs/autodoc
    _name: Autodoc
    npm: '@context-labs/autodoc'
  autokey:
    _bin: null
    _desc: '[AutoKey](https://github.com/autokey/autokey) is a free, open-source scripting application for Linux. AutoKey allows the user to define hotkeys and trigger phrases which expand to predefined text, automating frequent or repetitive tasks such as correcting typographical errors or common spelling mistakes and inserting boiler plate sections of text. [AutoHotKey](https://www.autohotkey.com/) is a similar piece of software that is only available on the Windows platform.'
    _docs: https://autokey.github.io/
    _github: https://github.com/autokey/autokey
    _home: https://code.google.com/archive/p/autokey/
    _name: Autokey
    ansible:linux: professormanhattan.autokey
    ansible:windows: professormanhattan.autokey
    apt: autokey
    choco: autohotkey
    dnf: autokey
    yay: autokey-gtk
  automake:
    _bin: automake
    _github: false
    _desc: '[GNU Automake](https://www.gnu.org/software/automake/) is a tool for automatically generating Makefile.in files compliant with the GNU Coding Standards'
    _docs: https://www.gnu.org/software/automake/manual/automake.html
    _home: https://www.gnu.org/software/automake/
    _name: GNU Automake
    apk: automake
    apt: automake
    brew: automake
    dnf: automake
    pacman: automake
    pkg: automake
  autorestic:
    _bin: autorestic
    _desc: '[Autorestic](https://autorestic.vercel.app/) is a wrapper around [Restic](https://restic.net/). The Restic CLI can be a bit overwhelming and difficult to manage if you have many different location that you want to backup to multiple locations. Autorestic makes managing all your S3 backups easier by making it config / cron driven.'
    _docs: https://autorestic.vercel.app/quick
    _github: https://github.com/cupcakearmy/autorestic/
    _home: https://autorestic.vercel.app/
    _name: Autorestic
    ansible: professormanhattan.autorestic
    brew: autorestic
  aws-shell:
    _bin: aws-shell
    _desc: An integrated shell for working with the AWS CLI.
    _docs: https://github.com/awslabs/aws-shell
    _github: https://github.com/awslabs/aws-shell
    _home: https://pypi.org/project/aws-shell/
    _name: AWS Shell
    brew: aws-shell
    pipx: aws-shell
  awscli:
    _bin: aws
    _desc: 'The [AWS CLI](https://aws.amazon.com/cli/) is a unified tool to manage your AWS services. With just one tool to download and configure, you can control multiple AWS services from the command line and automate them through scripts.'
    _docs: https://docs.aws.amazon.com/cli/index.html
    _github: https://github.com/aws/aws-cli
    _home: https://aws.amazon.com/
    _name: AWS CLI
    ansible: professormanhattan.awscli
    binary:darwin: https://awscli.amazonaws.com/AWSCLIV2.pkg
    binary:linux: https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip
    binary:windows: https://awscli.amazonaws.com/AWSCLIV2.msi
    brew: awscli@2
    choco: awscli
  awxcli:
    _bin: awx
    _desc: '[ansible-tower-cli](https://docs.ansible.com/ansible-tower/latest/html/towercli/index.html) is a CLI program that interacts with Ansible Tower or AWX. It is the official command-line client for both Ansible Tower and AWX. It uses naming and structure consistent with the AWX HTTP API, provides consistent output formats with optional machine-parsable formats, and auto-detects API versions, available endpoints, and feature support.'
    _docs: https://docs.ansible.com/ansible-tower/latest/html/towercli/index.html
    _github: https://github.com/ansible/awx
    _home: https://docs.ansible.com/automation.html
    _name: AWX CLI
    ansible: professormanhattan.awxcli
    pipx: https://releases.ansible.com/ansible-tower/cli/ansible-tower-cli-latest.tar.gz
  axel:
    _bin: axel
    _github: https://github.com/axel-download-accelerator/axel
    _name: Axel
    apt: axel
    brew: axel
    choco: axel
    dnf:fedora: axel
    pacman: axel
    port: axel
  azure-cli:
    _bin: az
    _desc: 'The [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/) is a set of commands used to create and manage Azure resources. The Azure CLI is available across Azure services and is designed to get you working quickly with Azure, with an emphasis on automation. It is the official CLI, released by Microsoft.'
    _docs: https://docs.microsoft.com/en-us/cli/azure/
    _github: https://github.com/Azure/azure-cli
    _home: https://azure.microsoft.com/
    _name: Azure CLI
    ansible: professormanhattan.azurecli
    brew: azure-cli
    choco: azure-cli
    winget: Microsoft.AzureCLI
    yay: azure-cli
  azure-functions:
    _bin: func
    _desc: '[azure-functions-core-tools](https://github.com/Azure/azure-functions-core-tools) A local development experience for creating, developing, testing, running, and debugging Azure Functions'
    _github: https://github.com/Azure/azure-functions-core-tools
    _name: azure-functions-core-tools
    brew: azure/functions/azure-functions-core-tools@4
    choco: azure-functions-core-tools
    github: github.com/Azure/azure-functions-core-tools
    npm: azure-functions-core-tools@4
  backup:
    _bin: backup
    _github: https://github.com/backup/backup
    _name: Backup
    gem: backup -v5.0.0.beta.1
  balenaetcher:
    _app: balenaEtcher.app
    _appImageName: balenaEtcher.AppImage
    _bin: null
    _desc: '[balenaEtcher](https://www.balena.io/etcher/) is a powerful OS image flasher built with web technologies to ensure flashing an SDCard or USB drive is a pleasant and safe experience. It protects from accidentally writing to hard-drives, ensures every byte of data was written correctly, and much more. It can also directly flash Raspberry Pi devices that support USB device boot mode. It will run on any platform officially supported by Electron.'
    _docs: https://www.balena.io/docs/learn/welcome/introduction/
    _github: https://github.com/balena-io/etcher
    _home: https://www.balena.io/etcher/
    _name: balenaEtcher
    ansible:linux: professormanhattan.etcher
    # Waiting for zap to allow headless automation of AppImage Catalog images
    # Currently, it fails because there are multiple versions to select
    # appimage: etcher
    appimage: etcher
    cask: balenaetcher
    choco: etcher
    yay: balena-etcher
  bandwhich:
    _bin: bandwhich
    _desc: '[Bandwhich](https://github.com/imsnif/bandwhich) is a CLI utility for displaying current network utilization by process, connection and remote IP/hostname.'
    _github: https://github.com/imsnif/bandwhich
    _name: Bandwhich
    ansible: professormanhattan.bandwhich
    brew: bandwhich
    github: github.com/imsnif/bandwhich
    pacman: bandwhich
    pkg: bandwhich
  bane:
    _bin: bane
    _desc: '[bane](https://github.com/genuinetools/bane) Custom & better AppArmor profile generator for Docker containers'
    _github: https://github.com/genuinetools/bane
    _name: bane
    github: github.com/genuinetools/bane
    go: github.com/genuinetools/bane@latest
  barrier:
    _app: Barrier.app
    _bin: barrier
    _github: https://github.com/debauchee/barrier
    _name: Barrier
    _todo: TODO
    cask: barrier
    choco: barrier
    flatpak: com.github.debauchee.barrier
  bash-completion:
    _bin: null
    _docs: https://docs.brew.sh/Shell-Completion
    _name: Bash Completion Formula
    _github: https://github.com/scop/bash-completion
    apt: bash-completion
    brew: bash-completion@2
    dnf: bash-completion
    pacman: bash-completion
  bashly:
    _bin: bashly
    _github: https://github.com/DannyBen/bashly
    _name: Bashly
    gem: bashly
  basictex:
    _github: false
    _name: Basictex
    _when: '! test -d /Library/TeX'
    cask: basictex
  bat:
    _bin: bat
    _desc: '[bat](https://github.com/sharkdp/bat) is a cat(1) clone with syntax highlighting and Git integration.'
    _github: https://github.com/sharkdp/bat
    _name: bat
    ansible: professormanhattan.bat
    apk: bat
    apt: bat
    brew: bat
    cargo: bat
    choco: bat
    pacman: bat
    pkg: bat
    port: bat
    scoop: bat
    zypper: bat
  bat-extras:
    _bin: batman
    _github: https://github.com/eth-p/bat-extras
    _name: Bat Extras
    brew: bat-extras
    emerge: sys-apps/bat-extras
    pacman: bat-extras
  bats:
    _bin: bats
    _github: https://github.com/bats-core/bats-core
    _name: Bats Bash Testing
    brew: bats-core
    npm: bats
  bazelisk:
    _bin: bazelisk
    _desc: A user-friendly launcher for Bazel.
    _docs: https://bazel.build/docs
    _github: https://github.com/bazelbuild/bazelisk
    _home: https://bazel.build/
    _name: Bazel
    brew: bazelisk
    choco: bazelisk
    go: github.com/bazelbuild/bazelisk@latest
    npm: '@bazel/bazelisk'
    scoop: main/bazel
  beekeeper-studio:
    _app: Beekeeper Studio.app
    _github: https://github.com/beekeeper-studio/beekeeper-studio
    _name: Beekeeper Studio
    _bin: beekeeper-studio
    cask: beekeeper-studio
    choco: beekeeper-studio
    flatpak: io.beekeeperstudio.Studio
  beets:
    _bin: beet
    _desc: 'The purpose of [Beets](https://beets.io/) is to get your music collection right once and for all. It catalogs your collection, automatically improving its metadata as it goes using the MusicBrainz database. Then it provides a bouquet of tools for manipulating and accessing your music.'
    _docs: https://beets.readthedocs.io/en/stable/
    _github: https://github.com/beetbox/beets
    _home: https://beets.io/
    _name: Beets
    ansible: professormanhattan.beets
    pipx: beets
  betwixt:
    _app: Betwixt.app
    _bin: null
    _desc: Web Debugging Proxy based on Chrome DevTools Network panel
    _docs: https://github.com/kdzwinel/betwixt
    _github: https://github.com/kdzwinel/betwixt
    _home: https://github.com/kdzwinel/betwixt
    _name: Betwixt
    cask: betwixt
  bfg:
    _bin: bfg
    _docs: https://rtyley.github.io/bfg-repo-cleaner/
    _github: https://github.com/rtyley/bfg-repo-cleaner
    _home: https://rtyley.github.io/bfg-repo-cleaner/
    _name: BFG Repo Cleaner
    brew: bfg
    choco: bfg-repo-cleaner
    port: bfg
  bin:
    _bin: bin
    _desc: Effortless binary manager
    _github: https://github.com/marcosnils/bin
    _name: bin
    github: github.com/marcosnils/bin
    go: github.com/marcosnils/bin@latest
  binwalk:
    _bin: binwalk
    _github: https://github.com/ReFirmLabs/binwalk
    _name: Binwalk
    apt: binwalk
    brew: binwalk
    choco: binwalk
    dnf: binwalk
    pacman: binwalk
  bismuth:
    _bin: bismuth
    _github: https://github.com/Bismuth-Forge/bismuth
    _name: Bismuth
    apt: kwin-bismuth
    dnf: bismuth
    pacman: kwin-bismuth
  bitly:
    _bin: bitly
    _desc: Shorten links with Bitly in your terminal!
    _github: https://github.com/xxczaki/bitly-cli-client
    _name: bitly
    npm: bitly-cli-client
  bitwarden:
    _app: Bitwarden.app
    _bin: bitwarden
    _desc: The desktop vault (Windows, macOS, & Linux)
    _github: https://github.com/bitwarden/desktop
    _name: BitWarden
    cask: bitwarden
    choco: bitwarden
    flatpak: com.bitwarden.desktop
    github: github.com/bitwarden/desktop
    mas: 1352778147
    snap: bitwarden
    yay: bitwarden-git
  bitwarden-cli:
    _bin: bw
    _desc: '[Bitwarden CLI](https://github.com/bitwarden/cli) (i.e. bw) is a free and open-source official CLI for the [Bitwarden](https://bitwarden.com/) password manager. bw is available on Linux, macOS, and Microsoft Windows.'
    _docs: https://bitwarden.com/help/
    _github: https://github.com/bitwarden/clients
    _home: https://bitwarden.com/
    _name: Bitwarden CLI
    ansible: professormanhattan.bw
    brew: bitwarden-cli
    choco: bitwarden-cli
    npm: '@bitwarden/cli'
    scoop: bitwarden-cli
    snap: bw
  bivac:
    _bin: null
    _desc: '[Bivac](https://bivac.io/) - Backup Interface for Volumes Attached to Containers - allows to backup Container volumes using Restic'
    _github: https://github.com/camptocamp/bivac
    _home: https://bivac.io/
    _name: bivac
    github: github.com/camptocamp/bivac
  blackhole:
    _bin: false
    _desc: Audio loopback device for macOS (supports sound passthrough to screen recording software on macOS)
    _docs: https://github.com/ExistentialAudio/BlackHole#user-guides
    _github: https://github.com/ExistentialAudio/BlackHole
    _home: https://github.com/ExistentialAudio/BlackHole
    _name: BlackHole
    _when:cask: '! test -d /Library/Audio/Plug-Ins/HAL/BlackHole16ch.driver && ! test -d ~/Library/Audio/Plug-Ins/HAL/BlackHole16ch.driver'
    cask: blackhole-16ch
  blender:
    _app: Blender.app
    _bin: blender
    _desc: Blender is the free and open source 3D creation suite. It supports the entirety of the 3D pipeline-modeling, rigging, animation, simulation, rendering, compositing, motion tracking and video editing.
    _docs: https://docs.blender.org/manual/en/latest/
    _github: https://github.com/blender/blender
    _home: https://www.blender.org/
    _name: Blender
    apt: blender
    cask: blender
    choco: blender
    dnf: blender
    flatpak: org.blender.Blender
    scoop: extras/blender
    snap: blender --classic
  blocky:
    _bin: blocky
    _github: https://github.com/0xERR0R/blocky
    _name: Blocky
    _post:brew: |
      #!/usr/bin/env bash
      cp -f "$HOME/.local/etc/blocky/config.yaml" "$(brew --prefix)/etc/blocky/config.yaml"
    _post:linux: |
      #!/usr/bin/env bash
      sudo mkdir -p /usr/local/etc/blocky
      if [ -d /usr/lib/systemd/system ]; then
        sudo cp -f "$HOME/.local/etc/blocky/config.yaml" /usr/local/etc/blocky/config.yaml
        sudo cp -f "$HOME/.local/etc/blocky/blocky.service" /usr/lib/systemd/system/blocky.service
      else
        echo "/usr/lib/systemd/system is missing from the file system"
      fi
    _service: blocky
    _service:brew:
      - name: blocky
        sudo: true
    _serviceEnabled: true
    brew: blocky
    go: github.com/0xERR0R/blocky@mastergithub.com/0xERR0R/blocky@master
  blueutil:
    _bin: blueutil
    _github: https://github.com/toy/blueutil
    _name: BlueUtil
    brew:darwin: blueutil
  boilr:
    _bin: null
    _desc: boilerplate template manager that generates files or directories from template repositories
    _github: https://github.com/tmrts/boilr
    _name: boilr
    github: github.com/tmrts/boilr
    go: github.com/tmrts/boilr@latest
  boringtun:
    _bin: boringtun-cli
    _desc: BoringTun is an implementation of the WireGuard® protocol designed for portability and speed.
    _github: https://github.com/cloudflare/boringtun
    _name: BoringTun
    _todo: Add sudo boringtun-cli utun
    brew: boringtun
    cargo:darwin: boringtun-cli
    cargo:linux: boringtun-cli
  bottles:
    _bin: bottles
    _github: https://github.com/bottlesdevs/Bottles
    flatpak: com.usebottles.bottles
  bottom:
    _bin: bottom
    _bin:brew: btm
    _desc: '[bottom](https://clementtsang.github.io/bottom/) is yet another cross-platform graphical process/system monitor. It is a customizable cross-platform graphical process/system monitor for the terminal that supports Linux, macOS, and Windows'
    _docs: https://clementtsang.github.io/bottom/nightly/
    _github: https://github.com/ClementTsang/bottom
    _home: https://clementtsang.github.io/
    _name: bottom
    brew: bottom
    pacman: bottom
    scoop: bottom
    snap: bottom
  brasero:
    _bin: brasero
    _name: Brasero
    _github: https://github.com/GNOME/brasero
    apt: brasero
    dnf: brasero
    pacman: brasero
  brave-browser:
    _app: Brave Browser.app
    _bin: brave
    _desc: '[Brave Browser](https://brave.com/) is a free and open-source web browser developed by Brave Software, Inc. based on the Chromium web browser. It includes the ability to access Tor websites and has a built-in plugin that replaces ads and pays you to surf the web. It is a privacy-focused browser, which automatically blocks online advertisements and website trackers in its default settings. It also supports Chrome extensions.'
    _docs: https://support.brave.com/hc/en-us/articles/360035410812-Quickstart-guide-New-to-Brave-Start-here-
    _env:
      BRAVE_BROWSER_APPDATA:
        cask: "$HOME/Library/Application Support/BraveSoftware/Brave-Browser/Default"
        choco: "%APPDATA%/Local/BraveSoftware/Brave-Browser/User Data"
        flatpak: "$HOME/.var/app/com.brave.Browser/config/BraveSoftware/Brave-Browser/Default"
        snap: "$HOME/snap/brave/current/.config/BraveSoftware/Brave-Browser/Default"
    _github: https://github.com/brave/brave-browser
    _home: https://brave.com/
    _name: Brave Browser
    _post: |
      #!/usr/bin/env bash
      # @brief See `google-chrome` `_post` script for more details
      function chromeSetUp() {
        ### Ensure Chrome policies directory is present
        gum log -sl info 'Processing policy directories for Chromium based browsers'
        for POLICY_DIR in "/etc/brave/policies"; do
          if [ -d "$(dirname "$POLICY_DIR")" ]; then
            ### Managed policies
            if [ ! -f "$POLICY_DIR/managed/policies.json" ]; then
              gum log -sl info "Ensuring directory $POLICY_DIR/managed exists"
              sudo mkdir -p "$POLICY_DIR/managed"
              gum log -sl info "Copying ${XDG_CONFIG_HOME:-$HOME/.config}/chrome/managed.json to $POLICY_DIR/managed/policies.json"
              sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/chrome/managed.json" "$POLICY_DIR/managed/policies.json"
            fi

            ### Recommended policies
            if [ ! -f "$POLICY_DIR/recommended/policies.json" ]; then
              gum log -sl info "Ensuring directory $POLICY_DIR/recommended exists" && sudo mkdir -p "$POLICY_DIR/recommended"
              gum log -sl info "Copying ${XDG_CONFIG_HOME:-$HOME/.config}/chrome/recommended.json to $POLICY_DIR/recommended/policies.json"
              sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/chrome/recommended.json" "$POLICY_DIR/recommended/policies.json"
            fi
          else
            gum log -sl info "Skipping extension injection into $POLICY_DIR - create these folders prior to running to create managed configs"
          fi
        done

        ### Add Chrome extension JSON
        gum log -sl info 'Populating Chrome extension JSON'
        for EXTENSION_DIR in "/etc/brave/extensions" "$HOME/Library/Application Support/BraveSoftware/Brave-Browser/External Extensions"; do
          ### Ensure program-type is installed
          if [ -d "$(dirname "$EXTENSION_DIR")" ]; then
            ### Ensure extension directory exists
            if [[ "$EXTENSION_DIR" == '/opt/'* ]] || [[ "$EXTENSION_DIR" == '/etc/'* ]]; then
              if [ ! -d "$EXTENSION_DIR" ]; then
                gum log -sl info "Creating directory $EXTENSION_DIR" && sudo mkdir -p "$EXTENSION_DIR"
              fi
            else
              if [ ! -d "$EXTENSION_DIR" ]; then
                gum log -sl info "Creating directory $EXTENSION_DIR" && mkdir -p "$EXTENSION_DIR"
              fi
            fi

            ### Add extension JSON
            gum log -sl info "Adding Chrome extensions to $EXTENSION_DIR"
            for EXTENSION in {{ list (.chromeExtensions | toString | replace "[" "" | replace "]" "") | uniq | join " " }}; do
              gum log -sl info "Adding Chrome extension manifest ($EXTENSION)"
              if ! echo "$EXTENSION" | grep 'https://chrome.google.com/webstore/detail/' > /dev/null; then
                EXTENSION="https://chrome.google.com/webstore/detail/$EXTENSION"
              fi
              EXTENSION_ID="$(echo "$EXTENSION" | sed 's/^.*\/\([^\/]*\)$/\1/')"
              if [[ "$EXTENSION_DIR" == '/opt/'* ]] || [[ "$EXTENSION_DIR" == '/etc/'* ]]; then
                sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/chrome/extension.json" "$EXTENSION_DIR/${EXTENSION_ID}.json"
              else
                cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/chrome/extension.json" "$EXTENSION_DIR/${EXTENSION_ID}.json"
              fi
            done
          else
            gum log -sl info "$EXTENSION_DIR does not exist"
          fi
        done
      }
      chromeSetUp
    cask: brave-browser
    choco: brave
    flatpak: com.brave.Browser
    snap: brave
  brew-gem:
    _bin: brew-gem
    _github: https://github.com/sportngin/brew-gem
    _name: Homebrew RubyGems
    brew: brew-gem
  brew-pkg:
    _github: https://github.com/timsutton/brew-pkg
    _name: Homebrew Pkg
    _when:brew:darwin: '! brew list brew-pkg'
    brew:darwin: timsutton/formulae/brew-pkg
  broot:
    _bin: broot
    _desc: '[broot](https://dystroy.org/broot/) offers a new way to see and navigate directory trees.'
    _docs: https://dystroy.org/broot/documentation/usage/
    _github: https://github.com/Canop/broot
    _home: https://dystroy.org/broot/
    _name: Broot
    ansible: professormanhattan.broot
    apk: broot
    brew: broot
    cargo: broot
    emerge: broot
    pkgin: broot
    port: broot
  browser-sync:
    _bin: browser-sync
    _desc: '[Browsersync](https://browsersync.io/) allows you to keep multiple browsers & devices in sync when building websites'
    _docs: https://browsersync.io/docs
    _github: https://github.com/BrowserSync/browser-sync
    _home: https://browsersync.io/
    _name: Browsersync
    npm: browser-sync
  browserosaurus:
    _app: Browserosaurus.app
    _bin: null
    _desc: The browser prompter for macOS
    _docs: https://github.com/will-stone/browserosaurus
    _github: https://github.com/will-stone/browserosaurus
    _home: https://browserosaurus.com/
    _name: Browserosaurus
    cask: browserosaurus
  budibase-cli:
    _bin: budi
    _desc: '[Budibase](https://budibase.com) The Budibase CLI is how you initialise, manage and update your Budibase installation'
    _docs: https://docs.budibase.com/docs/budibase-cli-reference
    _github: https://github.com/Budibase/budibase
    _home: https://budibase.com
    _name: budibase-cli
    github: github.com/Budibase/budibase
    npm: '@budibase/cli'
  buildkite-agent:
    _bin: buildkite-agent
    _github: https://github.com/buildkite/agent
    _name: BuildKite Agent
    brew: buildkite/buildkite/buildkite-agent
  bun:
    _bin: bun
    _github: https://github.com/oven-sh/bun
    _name: Bun
    brew: oven-sh/bun/bun
    npm: bun
    proto: bun
  bundler:
    _bin: bundler
    _desc: '[Bundler](https://bundler.io/) provides a consistent environment for Ruby projects by tracking and installing the exact gems and versions that are needed'
    _docs: https://bundler.io/docs.html
    _github: https://github.com/rubygems/rubygems/tree/master/bundler
    _home: https://bundler.io/
    _name: Bundler
    gem: bundler
  caddy:
    _bin: caddy
    _github: https://github.com/caddyserver/caddy
    _name: Caddy
    _service: caddy
    brew: caddy
    choco: caddy
    scoop: caddy
  cakebrew:
    _app: Cakebrew.app
    _bin: null
    _desc: Manage your Homebrew formulas with style using Cakebrew.
    _docs: https://www.cakebrew.com/
    _github: https://github.com/brunophilipe/Cakebrew
    _home: http://www.cakebrew.com/
    _name: Cakebrew
    cask: cakebrew
  caniuse:
    _bin: caniuse
    _desc: caniuse-cmd is a caniuse command line tool, providing all the power of caniuse.com with none of the nice UI or interactivity
    _github: https://github.com/sgentle/caniuse-cmd
    npm: caniuse-cmd
  capacitor:
    _bin: cap
    _github: https://github.com/ionic-team/capacitor
    _name: Capacitor
    npm: '@capacitor/cli'
  captain:
    _bin: captain
    _desc: Helps manage docker-compose.yml files from anywhere in the file system
    _github: https://github.com/jenssegers/captain
    _name: captain
    go: github.com/jenssegers/captain@latest
  carapace:
    _bin: carapace
    _github: https://github.com/rsteube/carapace-bin
    _name: Carapace
    brew: rsteube/tap/carapace
    nix-shell: carapace
    pacman: carapace-bin
    scoop: extras/carapace-bin
    winget: rsteube.Carapace
  carbon-now:
    _bin: carbon-now
    _desc: '[Carbon](https://carbon.now.sh/) lets you create and share beautiful images of your source code'
    _github: https://github.com/carbon-app/carbon
    _home: https://carbon.now.sh/
    _name: Carbon
    npm: carbon-now-cli
  carthage:
    _bin: carthage
    _desc: A simple, decentralized dependency manager for Cocoa
    _github: https://github.com/Carthage/Carthage
    _name: Carthage
    brew:darwin: carthage
  catfs:
    _bin: catfs
    _deps:
      - fuse
    _desc: Cache anything filesystem written in Rust
    _docs: https://github.com/kahing/catfs#usage
    _github: https://github.com/kahing/catfs
    _home: https://github.com/kahing/catfs
    _name: Catfs
    ansible:linux: professormanhattan.s3filesystem
    cargo:linux: catfs
  catlight:
    _app: Catlight.app
    _github: https://github.com/catlightio/CatLight
    _name: Catlight
    cask: catlight
    deb: https://catlight.io/downloads/linux/beta
  ccat:
    _bin: ccat
    _github: https://github.com/owenthereal/ccat
    _name: ccat
    brew: ccat
    go: github.com/owenthereal/ccat@latest
    pacman: ccat
  ceph:
    _bin: ceph-client
    _deps:
      - dokany
    _github: https://github.com/ceph/ceph
    _name: CephFS
    apt: cephadm
    brew: megabyte-labs/tap/ceph-client
    dnf: cephadm
    zypper: cephadm
  cerebro:
    _app: Cerebro.app
    _bin: null
    _desc: Open-source productivity booster with a brain
    _github: https://github.com/cerebroapp/cerebro
    _name: Cerebro
    cask: cerebro
    choco: cerebro
    github: github.com/cerebroapp/cerebro
    yay: cerebro
  certbot:
    _bin: certbot
    _desc: >-
      [Certbot](https://certbot.eff.org/) is part of EFF’s effort to encrypt the entire Internet. Secure communication over the Web relies on HTTPS, which requires the use of a digital certificate that lets browsers verify the identity of web servers (e.g., is that really google.com?). Web servers obtain their certificates from trusted third parties called certificate authorities (CAs). Certbot is an easy-to-use client that fetches a certificate from [Let’s Encrypt](https://letsencrypt.org/)—an open certificate authority launched by the EFF, Mozilla, and others—and deploys it to a web server.
    _docs: https://eff-certbot.readthedocs.io/en/stable/
    _github: https://github.com/certbot/certbot
    _home: https://certbot.eff.org/
    _name: CertBot
    _post: |
      #!/usr/bin/env bash
      pipx inject certbot certbot-dns-cloudflare
    _post:windows: |
      #!/usr/bin/env bash
      echo "Add method for Windows"
    pipx: certbot
  cf-terraforming:
    _bin: cf-terraforming
    _github: https://github.com/cloudflare/cf-terraforming
    _name: CloudFlare Terraforming
    cask: cloudflare/cloudflare/cf-terraforming
  cfssl:
    _bin: cfssl
    _desc: "[CFSSL](https://cfssl.org/) is CloudFlare's PKI/TLS swiss army knife. It is both a command line tool and an HTTP API server for signing, verifying, and bundling TLS certificates"
    _github: https://github.com/cloudflare/cfssl
    _home: https://cfssl.org/
    _name: CFSSL
    brew: cfssl
    pacman: cfssl
  charm:
    _bin: charm
    _desc: The Charm Tool and Library
    _docs: https://github.com/charmbracelet/charm
    _github: https://github.com/charmbracelet/charm
    _home: https://charm.sh
    _name: Charm
    brew: charmbracelet/tap/charm
    go: github.com/charmbracelet/charm@main
    nix-env: nixpkgs.charm
    pacman: charm
  chatgpt-menubar:
    _app: Chatgpt.app
    _bin: null
    _desc: ChatGPT for Mac, living in your menubar.
    _docs: https://github.com/vincelwt/chatgpt-mac
    _github: https://github.com/vincelwt/chatgpt-mac
    _home: https://github.com/vincelwt/chatgpt-mac
    _name: ChatGPT Menubar for macOS
    cask: vincelwt-chatgpt
  chatgpt-nofwl:
    _app: NoFWL.app
    _bin: null
    _desc: ChatGPT desktop application (Mac, Windows and Linux)
    _docs: https://app.nofwl.com/docs/chatgpt/config
    _github: https://github.com/lencx/nofwl
    _home: https://app.nofwl.com/
    _name: ChatGPT Desktop (NoFWL Version)
    appimage: lencx/nofwl
    apt: https://github.com/lencx/nofwl/releases/download/v0.1.0/NoFWL_0.1.0_linux_x86_64.deb
    cask: lencx/nofwl/nofwl --no-quarantine
    msi: https://github.com/lencx/nofwl/releases/download/v0.1.0/NoFWL_0.1.0_windows_x86_64.msi
  cheat:
    _bin: cheat
    _desc: Cheat allows you to create and view interactive cheatsheets on the command-line. It was designed to help remind *nix system administrators of options for commands that they use frequently, but not frequently enough to remember.
    _docker: docker run --rm bannmann/docker-cheat
    _docs: https://github.com/cheat/cheat
    _github: https://github.com/cheat/cheat
    _home: https://github.com/cheat/cheat
    _name: Cheat
    brew: cheat
    go: github.com/cheat/cheat/cmd/cheat@latest
    nix: nixos.cheat
    snap: cheat
    yay: cheat
  chef-workstation:
    _app: Chef Workstation App.app
    _bin: chef-workstation
    _github: https://github.com/chef/chef
    _name: Chef Workstation
    apt: https://packages.chef.io/files/stable/chef-workstation/21.10.640/ubuntu/20.04/chef-workstation_21.10.640-1_amd64.deb
    cask: chef-workstation
    choco: chef-workstation
    dnf: https://packages.chef.io/files/stable/chef-workstation/21.10.640/el/8/chef-workstation-21.10.640-1.el8.x86_64.rpm
  chezmoi:
    _bin: chezmoi
    _desc: Manage your dotfiles across multiple diverse machines, securely.
    _docs: https://www.chezmoi.io/user-guide/command-overview/
    _github: https://github.com/twpayne/chezmoi
    _home: https://www.chezmoi.io/
    _name: Chezmoi
    apk: chezmoi
    brew: chezmoi
    choco: chezmoi
    nix: chezmoi
    pacman: chezmoi
    pkg: chezmoi
    snap: chezmoi --classic
    xbps: chezmoi
    zypper: chezmoi
  chrome-cli:
    _bin: chrome-cli
    _desc: chrome-cli is a command line utility for controlling Google Chrome compatible browsers on OS X. It is a native binary that uses the Scripting Bridge to communicate with Chrome
    _github: https://github.com/prasmussen/chrome-cli
    brew:darwin: chrome-cli
  chrome-gnome-shell:
    _bin: null
    _desc: Browser extension for Google Chrome/Chromium, Firefox, Vivaldi (and other Browser Extension, Chrome Extension or WebExtensions capable browsers) and native host messaging connector that provides integration with GNOME Shell and the corresponding extensions repository
    _github: https://gitlab.gnome.org/GNOME/gnome-browser-extension
    _home: ttps://wiki.gnome.org/Projects/GnomeShellIntegration
    apt: chrome-gnome-shell
    dnf: chrome-gnome-shell
    pacman: chrome-gnome-shell
  chromium:
    _bin: chromium
    _github: https://github.com/chromium/chromium
    _deps:
      - chrome-gnome-shell
    _post: |
      #!/usr/bin/env bash
      function chromeSetUp() {
        ### Ensure Chrome policies directory is present
        gum log -sl info 'Processing policy directories for Chromium based browsers'
        for POLICY_DIR in "/etc/chromium/policies"; do
          if [ -d "$(dirname "$POLICY_DIR")" ]; then
            ### Managed policies
            if [ ! -f "$POLICY_DIR/managed/policies.json" ]; then
              gum log -sl info "Ensuring directory $POLICY_DIR/managed exists"
              sudo mkdir -p "$POLICY_DIR/managed"
              gum log -sl info "Copying ${XDG_CONFIG_HOME:-$HOME/.config}/chrome/managed.json to $POLICY_DIR/managed/policies.json"
              sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/chrome/managed.json" "$POLICY_DIR/managed/policies.json"
            fi

            ### Recommended policies
            if [ ! -f "$POLICY_DIR/recommended/policies.json" ]; then
              gum log -sl info "Ensuring directory $POLICY_DIR/recommended exists" && sudo mkdir -p "$POLICY_DIR/recommended"
              gum log -sl info "Copying ${XDG_CONFIG_HOME:-$HOME/.config}/chrome/recommended.json to $POLICY_DIR/recommended/policies.json"
              sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/chrome/recommended.json" "$POLICY_DIR/recommended/policies.json"
            fi
          else
            gum log -sl info "Skipping extension injection into $POLICY_DIR - create these folders prior to running to create managed configs"
          fi
        done

        ### Add Chrome extension JSON
        gum log -sl info 'Populating Chrome extension JSON'
        ### TODO - Find `EXTENSION_DIR` for macOS in Application Support folder like `$HOME/Library/Application Support/Google/Chrome/External Extensions` for Google Chrome
        for EXTENSION_DIR in "/etc/chromium/extensions"; do
          ### Ensure program-type is installed
          if [ -d "$(dirname "$EXTENSION_DIR")" ]; then
            ### Ensure extension directory exists
            if [[ "$EXTENSION_DIR" == '/opt/'* ]] || [[ "$EXTENSION_DIR" == '/etc/'* ]]; then
              if [ ! -d "$EXTENSION_DIR" ]; then
                gum log -sl info "Creating directory $EXTENSION_DIR" && sudo mkdir -p "$EXTENSION_DIR"
              fi
            else
              if [ ! -d "$EXTENSION_DIR" ]; then
                gum log -sl info "Creating directory $EXTENSION_DIR" && mkdir -p "$EXTENSION_DIR"
              fi
            fi

            ### Add extension JSON
            gum log -sl info "Adding Chrome extensions to $EXTENSION_DIR"
            for EXTENSION in {{ list (.chromeExtensions | toString | replace "[" "" | replace "]" "") | uniq | join " " }}; do
              gum log -sl info "Adding Chrome extension manifest ($EXTENSION)"
              if ! echo "$EXTENSION" | grep 'https://chrome.google.com/webstore/detail/' > /dev/null; then
                EXTENSION="https://chrome.google.com/webstore/detail/$EXTENSION"
              fi
              EXTENSION_ID="$(echo "$EXTENSION" | sed 's/^.*\/\([^\/]*\)$/\1/')"
              if [[ "$EXTENSION_DIR" == '/opt/'* ]] || [[ "$EXTENSION_DIR" == '/etc/'* ]]; then
                sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/chrome/extension.json" "$EXTENSION_DIR/${EXTENSION_ID}.json"
              else
                cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/chrome/extension.json" "$EXTENSION_DIR/${EXTENSION_ID}.json"
              fi
            done
          else
            gum log -sl info "$EXTENSION_DIR does not exist"
          fi
        done
      }
      chromeSetUp
    apt: chromium
    dnf: chromium
    flatpak: org.chromium.Chromium
    snap: chromium
  clair:
    _bin: clair
    _desc: Vulnerability Static Analysis for Containers
    _docs: https://quay.github.io/clair/
    _github: https://github.com/quay/clair
    _name: clair
    brew: clair
    github: github.com/quay/clair
  clamav:
    _bin: clamav-config
    _desc: '[ClamAV](https://www.clamav.net/) is an open-source antivirus engine for detecting trojans, viruses, malware & other malicious threats.'
    _docs: https://docs.clamav.net/
    _github: https://github.com/Cisco-Talos/clamav
    _home: https://www.clamav.net/
    _name: ClamAV
    _post: |
      #!/usr/bin/env bash

      ### Add freshclam.conf
      if [ -f "$HOME/.local/etc/clamav/freshclam.conf" ]; then
        sudo mkdir -p /usr/local/etc/clamav
        sudo cp -f "$HOME/.local/etc/clamav/freshclam.conf" /usr/local/etc/clamav/freshclam.conf
        if [ -d "${HOMEBREW_PREFIX:-/opt/homebrew}/etc/clamav" ] && [ ! -f "${HOMEBREW_PREFIX:-/opt/homebrew}/etc/clamav/freshclam.conf" ]; then
          ln -s /usr/local/etc/clamav/freshclam.conf "${HOMEBREW_PREFIX:-/opt/homebrew}/etc/clamav/freshclam.conf"
        fi
      fi

      ### Add clamd.conf
      if [ -f "$HOME/.local/etc/clamav/clamd.conf" ]; then
        sudo mkdir -p /usr/local/etc/clamav
        sudo cp -f "$HOME/.local/etc/clamav/clamd.conf" /usr/local/etc/clamav/clamd.conf
        if [ -d "${HOMEBREW_PREFIX:-/opt/homebrew}/etc/clamav" ] && [ ! -f "${HOMEBREW_PREFIX:-/opt/homebrew}/etc/clamav/clamd.conf" ]; then
          ln -s /usr/local/etc/clamav/clamd.conf "${HOMEBREW_PREFIX:-/opt/homebrew}/etc/clamav/clamd.conf"
        fi
      fi

      ### Update database
      freshclam

      ### Setting up launchd services on macOS
      if [ -d /Applications ] && [ -d /System ]; then
        sudo mkdir -p /var/log/clamav
        # sudo chown $USER /var/log/clamav
        sudo cp -f "$HOME/.local/etc/clamav/clamdscan.plist.tmpl" /Library/LaunchDaemons/clamdscan.plist
        sudo cp -f "$HOME/.local/etc/clamav/freshclam.plist.tmpl" /Library/LaunchDaemons/freshclam.plist
        sudo launchctl load -w /Library/LaunchDaemons/clamdscan.plist
        sudo launchctl load -w /Library/LaunchDaemons/freshclam.plist
      fi
    _service:apt: clamav-freshclam
    _service:brew:
      - name: clamav
        sudo: true
    _service:dnf: clamd-freshclam
    _service:pacman: clamav-freshclam
    _serviceEnabled: true
    apt:
      - clamav
      - clamdscan
    brew: clamav
    dnf:
      - clamav
      - clamav-update
    pacman: clamav
  clangd:
    _bin: clangd
    _desc: '[clangd](https://clangd.llvm.org/) is an language server that understands your C++ code and adds smart features to your editor'
    _docs: https://clangd.llvm.org/guides/
    _github: https://github.com/llvm/llvm-project/tree/main/clang-tools-extra/clangd
    _home: https://clangd.llvm.org/
    _name: clangd
    apt: clangd
    brew: llvm
    choco: llvm
    dnf: clang-tools-extra
    pacman: clang
    scoop: llvm
  clipboard:
    _bin: cb
    _github: https://github.com/Slackadays/Clipboard.git
    _name: Clipboard
    apk: clipboard
    brew: clipboard
    emerge: app-misc/clipboard
    flatpak: app.getclipboard.Clipboard
    nix-env: nixpkgs.clipboard-jh
    scoop: clipboard
    snap: clipboard
    xbps: clipboard
    yay: clipboard
  cloc:
    _bin: cloc
    _github: https://github.com/AlDanial/cloc
    _name: Cloc
    apk: cloc
    apt: cloc
    brew: cloc
    choco: cloc
    dnf: cloc
    emerge: dev-util/cloc
    npm: cloc
    pacman: cloc
    pkg-freebsd: cloc
    pkg_add: cloc
    port: cloc
    scoop: cloc
  clocker:
    _app: Clocker.app
    _bin: null
    _desc: Clocker is designed to help you keep track of your friends and colleagues in different time zones.
    _github: https://github.com/n0shake/clocker
    cask: clocker
  cloudflare-cli:
    _bin: cfcli
    _github: https://github.com/danielpigott/cloudflare-cli
    _name: CloudFlare CLI
    npm: cloudflare-cli
  cloudflared:
    _bin: cloudflared
    _desc: '[CloudFlare Argo Tunnel Client](https://developers.cloudflare.com/argo-tunnel/) contains the command-line client for CloudFlare Argo Tunnel, a tunneling daemon that proxies any local webserver through the Cloudflare network.'
    _github: https://github.com/cloudflare/cloudflared
    _name: CloudFlared
    _post: |
      #!/usr/bin/env bash

      {{- $registrationToken := "" }}
      {{- if and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "cloudflared" .host.hostname)) -}}
      {{-   $registrationToken = (includeTemplate (print "cloudflared/" .host.hostname) | decrypt) -}}
      {{- end }}
      ### Set up CloudFlare tunnels
      if command -v cloudflared > /dev/null && [ -d "$HOME/.local/etc/cloudflared" ]; then
        # Show warning message about ~/.cloudflared already existing
        if [ -d "$HOME/.cloudflared" ]; then
          gum log -sl warn '~/.cloudflared is already in the home directory - to ensure proper deployment, remove previous tunnel configuration folders'
        fi

        ### Ensure /usr/local/etc/cloudflared exists
        if [ -d /usr/local/etc/cloudflared ]; then
          gum log -sl info 'Creating folder /usr/local/etc/cloudflared'
          sudo mkdir -p /usr/local/etc/cloudflared
        fi

        # Copy over configuration files
        gum log -sl info 'Ensuring /usr/local/etc/cloudflared exists' && sudo mkdir -p /usr/local/etc/cloudflared
        gum log -sl info 'Copying over configuration files from ~/.local/etc/cloudflared to /usr/local/etc/cloudflared'
        sudo cp -f "$HOME/.local/etc/cloudflared/cert.pem" /usr/local/etc/cloudflared/cert.pem
        sudo cp -f "$HOME/.local/etc/cloudflared/config.yml" /usr/local/etc/cloudflared/config.yml

        # Register tunnel (if not already registered)
        if sudo cloudflared tunnel list | grep "host-{{ .host.hostname }}" > /dev/null; then
          gum log -sl info 'CloudFlare tunnel is already registered'
        else
          gum log -sl info 'Creating a CloudFlare tunnel to this host'
          sudo cloudflared tunnel create "host-{{ .host.hostname }}"
        fi
        TUNNEL_ID="$(sudo cloudflared tunnel list | grep 'host-{{ .host.hostname }}' | sed 's/ .*//')"
        gum log -sl info "Tunnel ID: $TUNNEL_ID"
        if [ -f "/usr/local/etc/cloudflared/${TUNNEL_ID}.json" ]; then
          gum log -sl info 'Symlinking tunnel configuration to /usr/local/etc/cloudflared/credentials.json'
          rm -f /usr/local/etc/cloudflared/credentials.json
          sudo ln -s "/usr/local/etc/cloudflared/${TUNNEL_ID}.json" /usr/local/etc/cloudflared/credentials.json
        else
          gum log -sl info 'Handling case where the tunnel registration is not present in /usr/local/etc/cloudflared'
          {{ if eq $registrationToken "" -}}
          gum log -sl warn 'Registration token is unavailable - you might have to delete the pre-existing tunnel or set up secrets properly'
          {{- else -}}
          gum log -sl info 'Registration token retrieved from encrypted blob stored at home/.chezmoitemplates/cloudflared/{{ .host.hostname }}'
          {{ if eq (substr 0 1 $registrationToken) "{" -}}
          gum log -sl info 'Registration token stored in credential file form'
          echo -n '{{ $registrationToken }}' | sudo tee /usr/local/etc/cloudflared/credentials.json > /dev/null
          {{ else }}
          gum log -sl info 'Registration token is in token form - it will be used in conjunction with sudo cloudflared service install'
          {{- end }}
          {{- end }}
        fi

        # Set up service
        if [ -d /Applications ] && [ -d /System ]; then
          # System is macOS
          if [ -f /Library/LaunchDaemons/com.cloudflare.cloudflared.plist ]; then
            gum log -sl info 'cloudflared service is already installed'
          else
            gum log -sl info 'Running sudo cloudflared service install'
            sudo cloudflared service install{{ if and (ne $registrationToken "") (eq (substr 0 1 $registrationToken) "{") -}} {{ $registrationToken }}{{ end }}
          fi
          gum log -sl info 'Ensuring cloudflared service is installed'
          sudo launchctl start com.cloudflare.cloudflared
        elif [ -f /etc/os-release ]; then
          # System is Linux
          if systemctl --all --type service | grep -q "cloudflared" > /dev/null; then
            gum log -sl info 'cloudflared service is already available as a service'
          else
            gum log -sl info 'Running sudo cloudflared service install'
            sudo cloudflared service install{{ if and (ne $registrationToken "") (eq (substr 0 1 $registrationToken) "{") -}} {{ $registrationToken }}{{ end }}
          fi
          gum log -sl info 'Ensuring cloudflared service is started'
          sudo systemctl start cloudflared
          gum log -sl info 'Enabling cloudflared as a boot systemctl service'
          sudo systemctl enable cloudflared
        else
          # System is Windows
          cloudflared service install
          mkdir C:\Windows\System32\config\systemprofile\.cloudflared
          # Copy same cert.pem as being used above
          # copy C:\Users\%USERNAME%\.cloudflared\cert.pem C:\Windows\System32\config\systemprofile\.cloudflared\cert.pem
          # https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/tunnel-guide/local/as-a-service/windows/
        fi
      else
        gum log -sl info 'cloudflared was not installed so CloudFlare Tunnels cannot be enabled. (Or the ~/.local/etc/cloudflared folder is not present)'
      fi
    ansible: professormanhattan.cloudflared
    binary:linux: https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64
    brew:darwin: cloudflare/cloudflare/cloudflared
    github: github.com/cloudflare/cloudflared
  cmake:
    _bin: cmake
    _desc: CMake is an open-source, cross-platform family of tools designed to build, test and package software.
    _docs: https://cmake.org/documentation/
    _github: https://github.com/Kitware/CMake
    _home: https://cmake.org/
    _name: Chezmoi
    brew: cmake
    choco: cmake
    snap: cmake --classic
  cmctl:
    _bin: cmctl
    _desc: A CLI tool that can help you to manage cert-manager resources inside your cluster
    _docs: https://cert-manager.io/docs/
    _github: https://github.com/cert-manager/cert-manager
    _home: https://cert-manager.io/docs/usage/cmctl/
    _name: cmctl
    brew: cmctl
  cockpit:
    _bin: cockpit
    _desc: '[Cockpit](https://cockpit-project.org/) allows you to view many aspects of system performance and make configuration changes, though the task list may depend on the particular flavor of Linux that you are using.'
    _docs: https://cockpit-project.org/documentation.html
    _github: https://github.com/cockpit-project/cockpit
    _home: https://cockpit-project.org/
    _name: Cockpit
    _post: |
      #!/usr/bin/env bash
      sudo usermod -a -G libvirtdbus libvirt
    _service:pacman: cockpit.socket
    _systemd: cockpit
    _systemd:pacman: cockpit.socket
    ansible:linux: professormanhattan.cockpit
    apt:
      - 389-ds-base
      - cockpit
      - cockpit-389-ds
      - cockpit-machines
      - cockpit-networkmanager
      - cockpit-packagekit
      - cockpit-podman
      - cockpit-storaged
      - libvirt-dbus
    dnf:centos:
      - 389-ds-base
      - cockpit
      - cockpit-machines
      - cockpit-networkmanager
      - cockpit-packagekit
      - cockpit-podman
      - cockpit-storaged
      - libvirt-dbus
    dnf:fedora:
      - 389-ds-base
      - cockpit
      - cockpit-389-ds
      - cockpit-machines
      - cockpit-networkmanager
      - cockpit-packagekit
      - cockpit-podman
      - cockpit-storaged
      - libvirt-dbus
    pacman:
      - 389-ds-base
      - cockpit
      - cockpit-389-ds
      - cockpit-machines
      - cockpit-networkmanager
      - cockpit-packagekit
      - cockpit-podman
      - cockpit-storaged
      - libvirt-dbus
  cockpit-client:
    _bin: cockpit-client
    _github: https://github.com/cockpit-project/cockpit
    _home: https://cockpit-project.org/
    _name: Cockpit Desktop Client
    flatpak: org.cockpit_project.CockpitClient
  cocoapods:
    _bin: null
    _desc: '[CocoaPods](https://cocoapods.org/) is an application level dependency manager for Objective-C, Swift and any other languages that run on the Objective-C runtime, such as RubyMotion, that provides a standard format for managing external libraries.'
    _docs: https://guides.cocoapods.org/using/getting-started.html
    _github: https://github.com/CocoaPods/CocoaPods
    _home: https://cocoapods.org/
    _name: cocoapods
    ansible:darwin: professormanhattan.cocoapods
    brew:darwin: cocoapods
    gem:darwin: cocoapods
  cod:
    _bin: cod
    _desc: Cod is a completion daemon for bash/fish/zsh that automatically adds auto-completions when --help is used
    _docs: https://github.com/dim-an/cod
    _github: https://github.com/dim-an/cod
    _home: https://github.com/dim-an/cod
    _name: Cod
    _todo: Check for brew install later on (5/14/2023)
    go: github.com/dim-an/cod@master
  codeclimate:
    _bin: codeclimate
    _github: https://github.com/codeclimate/codeclimate
    _name: CodeClimate
    _todo: Add check to ensure Docker is loaded / running
    _usesDocker: true
    brew: codeclimate/formulae/codeclimate
    brew:darwin: codeclimate/formulae/codeclimate
    script:linux: cd /tmp && curl -L https://github.com/codeclimate/codeclimate/archive/master.tar.gz | tar xvz && cd codeclimate-* && sudo make install
  codeedit:
    _app: CodeEdit.app
    _bin: codeedit
    _github: https://github.com/CodeEditApp/CodeEdit
    _name: CodeEdit
    _todo: TODO once this is out of alpha
    cask: codeedit
  coder:
    _bin: coder
    _desc: A tool that provisions remote development environments via Terraform
    _docs: https://coder.com/docs/v1/latest
    _github: https://github.com/coder/coder
    _home: https://coder.com/
    _name: Coder
    brew: coder
  cointop:
    _bin: cointop
    _desc: '[Cointop](https://github.com/miguelmota/cointop) is a fast and lightweight interactive terminal based UI application for tracking and monitoring cryptocurrency coin stats in real-time.'
    _docs: https://docs.cointop.sh/
    _github: https://github.com/cointop-sh/cointop
    _home: https://cointop.sh/
    _name: Cointop
    ansible:darwin: professormanhattan.cointop
    ansible:linux: professormanhattan.cointop
    brew: cointop
    port: cointop
  commitizen:
    _bin: cz
    _desc: Commitizen is a tool designed for teams. Its main purpose is to define a standard way of committing rules and communicating it
    _docs: https://commitizen-tools.github.io/commitizen/
    _github: https://github.com/commitizen/cz-cli
    _home: https://commitizen-tools.github.io/commitizen/
    _name: commitizen
    npm: commitizen
  commitlint:
    _bin: commitlint
    _desc: Lint commit messages
    _docs: https://commitlint.js.org/#/?id=documentation
    _github: https://github.com/conventional-changelog/commitlint
    _home: https://commitlint.js.org
    _name: commitlint
    npm: '@commitlint/cli'
  common:
    _bin: null
    _github: false
    _desc: 'For example, this role sets the timezone, sets the hostname, sets up the swap space, ensures auto-login is either disabled or enabled, and customizes GRUB (on Linux). It also ensures that specified groups are present on the system. On Windows, the role ensures all the available updates are installed, ensures [Scoop](https://scoop.sh/) is installed, and ensures common dependencies like [Bandizip](https://en.bandisoft.com/bandizip/) (a compressed-file manager) are installed.'
    _name: Common
    ansible: professormanhattan.common
  composer:
    _bin: composer
    _desc: '[Composer](https://getcomposer.org/) is an application-level package manager for the PHP programming language that provides a standard format for managing dependencies of PHP software and required libraries. It was developed by Nils Adermann and Jordi Boggiano, who continue to manage the project.'
    _docs: https://getcomposer.org/doc/
    _github: https://github.com/composer/composer
    _home: https://getcomposer.org/
    _name: Composer
    ansible: professormanhattan.composer
    brew: composer
    choco: composer
    pacman: composer
    scoop: composer
    script:darwin: cd ~ && curl -sS https://getcomposer.org/installer | php && sudo mv composer.phar /usr/local/bin/composer &&  sudo chmod +x /usr/local/bin/composer
    script:linux: cd ~ && curl -sS https://getcomposer.org/installer | php && sudo mv composer.phar /usr/local/bin/composer &&  sudo chmod +x /usr/local/bin/composer
  confd:
    _bin: confd
    _desc: Manage local application configuration files using templates and data from etcd or consul
    _github: https://github.com/kelseyhightower/confd
    _name: confd
    brew: confd
    choco: confd
    github: github.com/kelseyhightower/confd
    yay: confd
  connections:
    _bin: connections
    _github: false
    _gitlab: https://gitlab.gnome.org/GNOME/connections
    flatpak: org.gnome.Connections
  consul-cli:
    _bin: consul
    _desc: '[Consul](https://www.consul.io/) uses service identities and traditional networking practices to help organizations securely connect applications running in any environment'
    _docs: https://developer.hashicorp.com/consul/docs
    _github: https://www.github.com/hashicorp/consul
    _home: https://www.consul.io/
    _name: Consul
    _service: consul
    apt: consul
    brew: consul
    pkg: consul
    yay: consul-bin
  consul-template:
    _bin: consul-template
    _desc: '[Consul-Template](https://github.com/hashicorp/consul-template) provides a convenient way to populate values from [Consul](https://www.consul.io/) into the file system using the consul-template daemon. It was created by [HashiCorp](https://www.hashicorp.com/) (the creators of Consul).'
    _docs: https://learn.hashicorp.com/tutorials/consul/consul-template
    _github: https://github.com/hashicorp/consul-template
    _home: https://www.hashicorp.com/
    _name: Consul Template
    ansible: professormanhattan.consultemplate
    brew: consul-template
    choco: consul-template
    scoop: main/consul
  container-structure-test:
    _github: https://github.com/GoogleContainerTools/container-structure-test
    _bin: container-structure-test
    _desc: The Container Structure Tests provide a powerful framework to validate the structure of a container image. These tests can be used to check the output of commands in an image, as well as verify metadata and contents of the filesystem
    _name: Container Structure Tests
    _post:binary:linux: |
      #!/usr/bin/env bash
      echo "TODO"
    binary:linux: https://storage.googleapis.com/container-structure-test/latest/container-structure-test-linux-amd64
    brew: container-structure-test
    yay: container-structure-test
  cookiecutter:
    _bin: cookiecutter
    _desc: A cross-platform command-line utility that creates projects from cookiecutters (project templates)
    _docs: https://cookiecutter.readthedocs.io/
    _github: https://github.com/cookiecutter/cookiecutter
    _name: cookiecutter
    brew: cookiecutter
    pipx: cookiecutter
  cordova:
    _bin: cordova
    _desc: >-
      [Apache Cordova](https://cordova.apache.org/) is a tool to create cross-platform apps from standard web technologies (HTML, CSS, and JavaScript). Its primary purpose is to provide a bridge for native device API access and to bundle for distribution
    _docs: https://cordova.apache.org/docs/en/latest/
    _github: https://github.com/apache/cordova
    _home: https://cordova.apache.org/
    _name: Apache Cordova
    npm: cordova
  coreutils:
    _bin:
      - cat
      - ls
      - rm
    _bin:darwin: gchown
    _github: false
    apt: coreutils
    brew: coreutils
    dnf: coreutils
    pacman: coreutils
  croc:
    _bin: croc
    _desc: Easily and securely send things from one computer to another
    _github: https://github.com/schollz/croc
    _name: croc
    brew: croc
    choco: croc
    github: github.com/schollz/croc
    go: github.com/schollz/croc/v9@latest
    pacman: croc
    pkg: croc
    scoop: croc
  crunch:
    _app: Crunch.app
    _bin: crunch
    _desc: The crunch command line executable is a *nix executable that supports parallel PNG image optimization with local (off of the system PATH) installs of the pngquant and zopflipng project dependencies.
    _docs: https://github.com/chrissimpkins/Crunch
    _github: https://github.com/chrissimpkins/Crunch
    _home: https://github.com/chrissimpkins/Crunch
    _name: Crunch
    cask: crunch
    script: cd /tmp && rm -rf Crunch && git clone https://github.com/chrissimpkins/Crunch.git && make build-dependencies && make install-executable && cd /tmp && rm -rf Crunch && rm -rf ~/zopfli && rm -rf ~/pngquant && echo "TODO WARNING - The ~/zopfli and ~/pngquant directories were deleted and may be required (but were removed due to HOME directory pollution)"
  crunch-app:
    _app: Crunch.app
    _bin: null
    _desc: The macOS companion app for the crunch CLI tool that compresses PNG images.
    _docs: https://github.com/chrissimpkins/Crunch/blob/master/docs/MACOSGUI.md
    _github: https://github.com/chrissimpkins/Crunch
    _home: https://github.com/chrissimpkins/Crunch
    _name: Crunch macOS App
    cask: crunch
  cryptomator:
    _app: Cryptomator.app
    _github: https://github.com/cryptomator/cryptomator
    _bin: cryptomator
    cask: cryptomator
    choco: cryptomator
    flatpak: org.cryptomator.Cryptomator
  csvkit:
    _bin: csvcut
    _github: https://github.com/wireservice/csvkit
    brew: csvkit
  ctop:
    _bin: ctop
    _desc: Top-like interface for container metrics
    _github: https://github.com/bcicen/ctop
    _name: ctop
    brew: ctop
    github: github.com/bcicen/ctop
    yay: ctop-bin
  cumulus:
    _app: Cumulus.app
    _bin: null
    _desc: A SoundCloud player that lives in the menubar
    _github: https://github.com/gillesdemey/Cumulus
    _name: Cumulus
    cask: cumulus
    github: github.com/gillesdemey/Cumulus
  cups:
    _bin: cupsctl
    _desc: '[CUPS](https://www.cups.org/) is a modular printing system for Unix-like computer operating systems which allows a computer to act as a print server. A computer running CUPS is a host that can accept print jobs from client computers, process them, and send them to the appropriate printer.'
    _github: https://github.com/apple/cups
    _name: CUPS
    _ports:
      - port: 631
        proto: tcp
    _systemd: smbd
    ansible: professormanhattan.cups
    apt:
      - avahi-daemon
      - cups
    brew: cups
    dnf: cups
    pacman:
      - avahi-daemon
      - cups
  curator:
    _bin: curator
    _desc: Elasticsearch Curator helps you curate, or manage, your Elasticsearch indices and snapshots
    _docs: https://www.elastic.co/guide/en/elasticsearch/client/curator
    _github: https://github.com/elastic/curator
    _home: https://www.elastic.co/guide/en/elasticsearch/client/curator
    _name: curator
    pipx: elasticsearch-curator
  curl:
    _bin: curl
    _desc: cURL is a computer software project providing a library (libcurl) and command-line tool (curl) for transferring data using various network protocols.
    _docs: https://curl.se/docs/
    _github: https://github.com/curl/curl
    _home: https://curl.se/
    _name: cURL
    apk: curl
    apt: curl
    brew: curl
    choco: curl
    dnf: curl
    pacman: curl
    pkg: curl
    scoop: curl
    xbps: curl
    zypper: curl
  curlie:
    _bin: curlie
    _desc: Curlie is a frontend to curl that adds the ease of use of httpie, without compromising on features and performance.
    _docs: https://curlie.io/
    _github: https://github.com/rs/curlie
    _home: https://curlie.io/
    _name: Curlie
    brew: curlie
    go: github.com/rs/curlie@latest
    pkg: curlie
    port: curlie
    scoop: curlie
  cutter:
    _app: Cutter.app
    _github: https://github.com/rizinorg/cutter
    _bin: cutter
    cask: cutter
    choco: cutter
    flatpak: re.rizin.cutter
  d2vm:
    _bin: d2vm
    _github: https://github.com/linka-cloud/d2vm
    _name: Docker 2 VM
    brew: linka-cloud/tap/d2vm
  dagu:
    _bin: dagu
    _github: https://github.com/dagu-dev/dagu
    _name: Dagu
    _post: |
      #!/usr/bin/env bash
      sudo mkdir -p /var/log/dagu
    brew: yohamta/tap/dagu
  dasel:
    _bin: dasel
    _desc: Select, put and delete data from JSON, TOML, YAML, XML and CSV files with a single tool
    _github: https://github.com/TomWright/dasel
    _name: dasel
    brew: dasel
    github: github.com/TomWright/dasel
    go: github.com/tomwright/dasel/cmd/dasel@master
  dat:
    _bin: dat
    _desc: Peer-to-peer sharing & live syncronization of files via command line
    _github: https://github.com/datproject/dat
    _name: dat
    github: github.com/dat-ecosystem-archive/dat
    npm: dat@next
  dat-desktop:
    _app: Dat Desktop.app
    _bin: null
    _desc: Peer to peer data syncronization
    _github: https://github.com/datproject/dat-desktop
    _name: Dat Desktop
    appimage: dat-ecosystem-archive/dat-desktop
    cask: dat
    exe: https://github.com/dat-ecosystem-archive/dat-desktop/releases/download/v3.0.1/Dat-Desktop-Setup-3.0.1.exe
  dconf-editor:
    _bin: dconf-editor
    _github: https://github.com/GNOME/dconf-editor/tree/master
    _gitlab: https://gitlab.gnome.org/GNOME/dconf-editor
    flatpak: ca.desrt.dconf-editor
  debloat:
    _bin: null
    _github: false
    _desc: This repository is the home of an Ansible role that Debloats Windows
    _name: Debloat Windows
    ansible: professormanhattan.debloat
  debsecan:
    _bin: debsecan-by-type
    _github: false
    _desc: debsecan analyzes the list of installed packages on the current host and reports vulnerabilities found on the system.
    _gitlab: https://gitlab.com/fweimer/debsecan
    _home: https://wiki.debian.org/DebianSecurity/debsecan
    _name: Debian Security Analyzer
    apt: debsecan
  defaultbrowser:
    _bin: null
    _github: false
    _desc: This role performs the necessary logic to set the default browser on nearly any platform.
    _name: Default Browser Setter
    ansible: professormanhattan.defaultbrowser
  deja-dup:
    _bin: dejadup
    _home: https://apps.gnome.org/DejaDup/
    _gitlab: https://gitlab.gnome.org/World/deja-dup
    _github: false
    flatpak: org.gnome.DejaDup
  delta:
    _bin: delta
    _desc: '[delta](https://github.com/dandavison/delta) is a viewer for git and diff output'
    _docs: https://dandavison.github.io/delta/
    _github: https://github.com/dandavison/delta
    _home: https://github.com/dandavison/delta
    _name: Delta
    ansible: professormanhattan.delta
    brew: git-delta
    cargo: git-delta
    choco: delta
    dnf:fedora: git-delta
    pacman: git-delta
    pkg: git-delta
    scoop: delta
  delve:
    _bin: dlv
    _desc: Delve is a debugger for the Go programming language.
    _docs: https://github.com/go-delve/delve/tree/master/Documentation
    _github: https://github.com/go-delve/delve
    _home: https://github.com/go-delve/delve
    _name: Delve
    brew: delve
    go: github.com/go-delve/delve/cmd/dlv@latest
  deno:
    _bin: deno
    _desc: '[Deno](https://deno.land/) is a modern runtime for JavaScript and TypeScript. It is advertised as a simple runtime that uses V8 and Rust. It is boasted as secure-by-default because there is no file, network, or environment access unless explicitly enabled. Deno compiles apps into single executables. An app made with Deno generally specifies its dependencies as URLs mainly hosted in the [Deno standard module repository](https://deno.land/std).'
    _docs: https://deno.land/manual
    _github: https://github.com/denoland/deno
    _home: https://deno.land/
    _name: Deno
    ansible: professormanhattan.deno
    brew: deno
    cargo: deno
    choco: deno
    nix: deno
    scoop: deno
  desed:
    _bin: desed
    _desc: Debugger for sed used to demystify and debug the sed scripts, from comfort of terminal
    _docs: https://github.com/SoptikHa2/desed#controls
    _github: https://github.com/SoptikHa2/desed
    _home: https://github.com/SoptikHa2/desed
    _name: desed
    cargo: desed
    dnf:fedora: desed
    github: github.com/SoptikHa2/desed
    pkg: desed
    xbps-freebsd: desed
  desk:
    _bin: desk
    _github: https://github.com/jamesob/desk
    _name: Desk
    brew: desk
  desktop:
    _bin: null
    _github: false
    _desc: This role is essentially the place where all desktop-specific tasks that are substantial enough for their own role are placed.
    _name: Desktop
    ansible: professormanhattan.desktop
  deta:
    _bin: deta
    _desc: Command line interface for managing Deta micros and deployments
    _docs: https://docs.deta.sh/docs/cli/install
    _github: https://github.com/deta/deta-cli
    _home: https://www.deta.sh/
    _name: deta
    github: github.com/deta/deta-cli
    script:darwin: curl -fsSL https://get.deta.dev/cli.sh | sh
    script:linux: curl -fsSL https://get.deta.dev/cli.sh | sh
    script:windows: iwr https://get.deta.dev/cli.ps1 -useb | iex
  devbox:
    _bin: devbox
    _github: https://github.com/jetpack-io/devbox
    _todo: Revisit because install via script would require expect since piping y to the installer is not working
    # nix-env: nixpkgs.devbox
    # script: curl -fsSL https://get.jetpack.io/devbox | bash
  devpod:
    _bin: devpod
    _github: https://github.com/loft-sh/devpod
    _name: DevPod
    cask: devpod
  devspace:
    _bin: devspace
    _github: https://github.com/devspace-sh/devspace
    _name: DevSpace
    brew: devspace
    npm: devspace
    scoop: devspace
  devtoys:
    _app: DevToys.app
    _bin: devtoys
    _github: https://github.com/ObuchiYuki/DevToysMac
    cask: devtoys
  devtoys-windows:
    _bin: devtoys
    _github: https://github.com/veler/DevToys
    _name: Windows DevToys
    choco: devtoys
    winget: devtoys
  dframe:
    _bin: dframe
    _desc: Put device frames around your mobile/web/progressive app screenshots
    _github: https://github.com/c0bra/deviceframe
    npm: deviceframe
  dialect:
    _bin: dialect
    _github: https://github.com/dialect-app/dialect/
    apt: dialect
    dnf: dialect
    flatpak: app.drey.Dialect
  dialog:
    _bin: dialog
    _github: false
    _home: https://invisible-island.net/dialog/
    _name: Dialog
    apt: dialog
    brew: dialog
    choco: dialog
    dnf: dialog
    pacman: dialog
  difftastic:
    _bin: difft
    _desc: Difftastic is a structural diff tool that understands syntax.
    _docs: https://difftastic.wilfred.me.uk/git.html
    _github: https://github.com/Wilfred/difftastic
    _home: https://difftastic.wilfred.me.uk/
    _name: Difftastic
    brew: difftastic
    cargo: difftastic
  direnv:
    _bin: direnv
    _desc: '[direnv](https://direnv.net/) is an extension for your shell. It augments existing shells with a new feature that can load and unload environment variables depending on the current directory.'
    _docs: https://direnv.net/
    _github: https://github.com/direnv/direnv
    _home: https://direnv.net/
    _name: direnv
    ansible: professormanhattan.direnv
    apt: direnv
    brew: direnv
    github: github.com/direnv/direnv
  discord:
    _github: false
    _app: Discord.app
    _bin: discord
    _name: Discord
    cask: discord
    choco: discord
    flatpak: com.discordapp.Discord
  distrobox:
    _bin: distrobox
    _github: https://github.com/89luca89/distrobox
    _name: Distrobox
    apk: distrobox
    apt: distrobox
    dnf: distrobox
    pacman: distrobox
  dive:
    _bin: dive
    _desc: '[dive](https://github.com/wagoodman/dive) is a tool for exploring a docker image, layer contents, and discovering ways to shrink the size of the Docker/OCI image.'
    _description: A tool for exploring each layer in a docker image
    _github: https://github.com/wagoodman/dive
    _home: https://github.com/wagoodman/dive
    _name: dive
    ansible: professormanhattan.dive
    brew: dive
    github: github.com/wagoodman/dive
    go: github.com/wagoodman/dive@latest
    yay: dive
  dns:
    _bin: null
    _github: false
    _desc: This role ensures that DNS requests are encrypted if you supply it the appropriate configuration. It uses systemd on Linux. On macOS/Windows, it installs and configures [Stubby](https://github.com/getdnsapi/stubby).
    _name: DNS
    ansible: professormanhattan.dns
  dnsmasq:
    _bin: dnsmasq
    _desc: '[Dnsmasq](https://wiki.debian.org/dnsmasq) is free software providing Domain Name System caching, a Dynamic Host Configuration Protocol server, router advertisement and network boot features, intended for small computer networks.'
    _docs: https://thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html
    _github: https://github.com/imp/dnsmasq
    _name: dnsmasq
    _service: dnsmasq
    ansible: professormanhattan.dnsmasq
    apt: dnsmasq
    brew: dnsmasq
    dnf: dnsmasq
    pacman: dnsmasq
    port: dnsmasq
  docker:
    _github: https://github.com/microsoft/docker
    _bin: docker
    _deps:
      - docker-images
    _name: Docker CLI
    apt:
      - containerd.io
      - docker-ce
      - docker-ce-cli
      - docker-compose-plugin
    dnf:
      - containerd.io
      - docker-ce
      - docker-ce-cli
      - docker-compose-plugin
    pacman:
      - containerd.io
      - docker-ce
      - docker-ce-cli
      - docker-compose-plugin
    script:darwin: echo "Docker CLI installed by Docker Desktop on macOS"
    zypper:
      - containerd.io
      - docker-ce
      - docker-ce-cli
      - docker-compose-plugin
  docker-credential-helper:
    _bin:darwin: docker-credential-osxkeychain
    _bin:linux: docker-credential-secretservice
    _bin:windows: docker-credential-wincred
    _desc: Programs to keep Docker login credentials safe by storing in platform keystores
    _docs: https://github.com/docker/docker-credential-helpers
    _github: https://github.com/docker/docker-credential-helpers
    _home: https://github.com/docker/docker-credential-helpers
    _name: Docker Credential Helper
    _preload: true
    brew: docker-credential-helper
  docker-desktop:
    _app: Docker.app
    _desc: '[Docker](https://www.docker.com/) is a set of platform-as-a-service products that use OS-level virtualization to deliver software in packages called containers. Containers are isolated from one another and bundle their own software, libraries and configuration files; they can communicate with each other through well-defined channels. [Docker Desktop](https://www.docker.com/products/docker-desktop/) adds a sleek UI for Docker and makes it easier to manage Docker on macOS and Windows.'
    _docs: https://docs.docker.com/
    _github: https://github.com/docker/compose
    _home: https://www.docker.com/
    _name: Docker Desktop
    _post: "#!/usr/bin/env bash\n# @file DockerHub Login\n# @brief Logs into DockerHub for Docker Desktop\n# @description\n#     This script logs into DockerHub so that Docker Desktop is pre-authenticated. This\n#     functionality requires that the `DOCKERHUB_USER` be passed in as an environment variable (or \n#     directly editted in the `~/.config/chezmoi/chezmoi.yaml` file) and that the `DOCKERHUB_TOKEN`\n#     be passed in as a secret (either via the encrypted secret method or passed in as an environment\n#     variable).\n\n### Login to DockerHub\nif command -v docker > /dev/null; then\n  DOCKERHUB_TOKEN=\"{{ if (stat (joinPath .chezmoi.sourceDir \".chezmoitemplates\" \"secrets\" \"DOCKERHUB_TOKEN\")) }}{{- includeTemplate \"secrets/DOCKERHUB_TOKEN\" | decrypt | trim -}}{{ else }}{{- env \"DOCKERHUB_TOKEN\" -}}{{ end }}\"\n  DOCKERHUB_USER=\"{{ .user.docker.username }}\"\n  if [ -d \"/Applications/Docker.app\" ] || [ -d \"$HOME/Applications/Docker.app\" ]; then\n    gum log -sl info 'Ensuring Docker.app is open' && open --background -a Docker --args --accept-license --unattended\n  fi\n  gum log -sl info 'Headlessly authenticating with DockerHub registry' && echo \"$DOCKERHUB_TOKEN\" | docker login -u \"$DOCKERHUB_USER\" --password-stdin > /dev/null && gum log -sl info 'Successfully authenticated with DockerHub registry'\nfi\n\n### Symlink on macOS\nif [ -f \"$HOME/Library/Containers/com.docker.docker/Data/docker.raw.sock\" ]; then\n  gum log -sl info 'Symlinking /var/run/docker.sock to macOS Library location' && sudo ln -s \"$HOME/Library/Containers/com.docker.docker/Data/docker.raw.sock\" /var/run/docker.sock\nfi\n"
    apt: https://desktop.docker.com/linux/main/amd64/docker-desktop-4.16.2-amd64.deb
    cask: docker
    choco: docker-desktop
    dnf: https://desktop.docker.com/linux/main/amd64/docker-desktop-4.16.2-x86_64.rpm
    pacman: https://desktop.docker.com/linux/main/amd64/docker-desktop-4.16.2-x86_64.pkg.tar.zst
  docker-images:
    _github: false
    _desc: This entry is used to trigger a post-installation docker image pre-load. See the `docker-images` entry in `.chezmoidata.yaml`.
    script: echo "Enabling docker-images pre-load"
  docker-langserver:
    _bin: docker-langserver
    _desc: A Docker language server
    _docs: https://github.com/rcjsuen/dockerfile-language-server-nodejs
    _github: https://github.com/rcjsuen/dockerfile-language-server-nodejs
    _home: https://github.com/rcjsuen/dockerfile-language-server-nodejs
    _name: Docker Language Server
    npm: dockerfile-language-server-nodejs
  docker-plugins:
    _github: false
    _desc: This entry is used to trigger a post-installation Docker plugin installation. See `docker-plugins` entry in `.chezmoidata.yaml`.
  docker-pushrm:
    _bin: docker-pushrm
    _github: https://github.com/christian-korneck/docker-pushrm
    _name: Docker PushRM
    script: |
      if [ ! -f "${XDG_CONFIG_HOME:-$HOME/.config}/docker/cli-plugins/docker-pushrm" ]; then
        gum log -sl info 'Acquiring release information for Docker push-rm'
        RELEASE_TAG="$(curl -sSL https://api.github.com/repos/christian-korneck/docker-pushrm/releases/latest | jq -r '.tag_name')"
        mkdir -p "${XDG_CONFIG_HOME:-$HOME/.config}/docker/cli-plugins"
        gum log -sl info 'Downloading Docker push-rm' && curl https://github.com/christian-korneck/docker-pushrm/releases/download/$RELEASE_TAG/docker-pushrm_darwin_amd64 -o "${XDG_CONFIG_HOME:-$HOME/.config}/docker/cli-plugins/docker-pushrm"
        chmod +x "${XDG_CONFIG_HOME:-$HOME/.config}/docker/cli-plugins/docker-pushrm"
        gum log -sl info 'Added Docker push-rm'
      else
        gum log -sl info 'Docker push-rm already added'
      fi
  docker-slim:
    _bin: slim
    _desc: "[DockerSlim](https://dockersl.im/) will optimize and secure your containers by understanding your application and what it needs using various analysis techniques. It will throw away what you don't need, reducing the attack surface of your container. What if you need some of those extra things to debug your container? You can use dedicated debugging side-car containers for that."
    _docs: https://github.com/docker-slim/docker-slim#basic-usage-info
    _github: https://github.com/docker-slim/docker-slim
    _home: https://dockersl.im/
    _name: Docker Slim
    brew: docker-slim
    dnf:fedora: golang-github-docker-slim
    github: github.com/docker-slim/docker-slim
    yay: docker-slim
  dockfmt:
    _bin: dockfmt
    _github: https://github.com/jessfraz/dockfmt
    _name: dockfmt
    go: github.com/jessfraz/dockfmt@latest
  dockle:
    _bin: dockle
    _desc: Container Image Linter for Security, Helping build the Best-Practice Docker Image, Easy to start
    _github: https://github.com/goodwithtech/dockle
    _name: dockle
    brew: goodwithtech/r/dockle
    github: github.com/goodwithtech/dockle
    yay: dockle-bin
  dockly:
    _bin: dockly
    _github: https://github.com/lirantal/dockly
    _name: Dockly
    npm: dockly
  dockutil:
    _bin: dockutil
    _github: https://github.com/kcrawford/dockutil
    _name: DockUtil
    brew:darwin: dockutil
  doctl:
    _bin: doctl
    _desc: The official command line interface for the DigitalOcean API
    _github: https://github.com/digitalocean/doctl
    _name: doctl
    brew: doctl
    github: github.com/digitalocean/doctl
    pacman: doctl
    pkg: doctl
    snap: doctl
  dog:
    _bin: dog
    _desc: A command-line DNS client
    _github: https://github.com/ogham/dog
    _name: dog
    brew: dog
    github: github.com/ogham/dog
    pacman: dog
    pkg: dog
  doitlive:
    _bin: doitlive
    _github: https://github.com/sloria/doitlive
    _name: Do It Live!
    brew: doitlive
    pipx: doitlive
  dokany:
    _bin: dokany
    _github: https://github.com/dokan-dev/dokany
    _name: Dokany
    _note: Required for CephFS on Windows
    choco: dokany
  dotenv-linter:
    _bin: dotenv-linter
    _desc: '[Dotenv Linter](https://dotenv-linter.github.io) is a lightning-fast linter for .env files. Written in Rust'
    _github: https://github.com/dotenv-linter/dotenv-linter
    _home: https://dotenv-linter.github.io/
    _name: Dotenv Linter
    brew: dotenv-linter
    cargo: dotenv-linter
    scoop: dotenv-linter
    yay: dotenv-linter
  dotenv-vault:
    _bin: dotenv-vault
    _name: Dotenv Vault
    _github: https://github.com/dotenv-org/dotenv-vault
    brew: dotenv-org/brew/dotenv-vault
    npm: dotenv-vault
  dotnet:
    _bin: dotnet
    _desc: "[.Net](https://dotnet.microsoft.com/) lets you create beautiful apps and scalable cloud services, faster and easier with the free, open-source platform that's loved by developers and trusted by organizations"
    _docs: https://learn.microsoft.com/en-us/dotnet/
    _github: https://github.com/dotnet
    _home: https://dotnet.microsoft.com/
    _name: .Net
    brew: dotnet
    choco: dotnet
    yay: dotnet-sdk-bin
  dprint:
    _bin: dprint
    _desc: '[dprint](https://dprint.dev/) is a pluggable and configurable code formatting platform written in Rust.'
    _docs: https://dprint.dev/
    _github: https://github.com/dprint
    _home: https://dprint.dev/
    _name: DPrint
    brew: dprint
    cargo: dprint
    npm: dprint
    scoop: dprint
    script:darwin: curl -fsSL https://dprint.dev/install.sh | sh
    script:linux: curl -fsSL https://dprint.dev/install.sh | sh
    script:windows: iwr https://dprint.dev/install.ps1 -useb | iex
  drawing:
    _bin: drawing
    _github: https://github.com/maoschanz/drawing
    flatpak: com.github.maoschanz.drawing
  drawio:
    _app: draw.io.app
    _bin: null
    _desc: Desktop version of the popular diagrams.net diagramming software
    _docs: https://www.drawio.com/doc/
    _github: https://github.com/jgraph/drawio-desktop
    _home: https://www.diagrams.net/
    _name: DrawIO Desktop
    appimage: draw.io
    cask: drawio
    choco: drawio
  drone-cli:
    _bin: drone
    _desc: The Drone command line tools are used to interact with the Drone from the command line, and provide important utilities for managing users and repository settings
    _docs: https://docs.drone.io/cli/install/
    _github: https://github.com/harness/drone-cli
    _home: https://www.drone.io/
    _name: Drone CLI
    brew: drone/drone/drone
    github: github.com/harness/drone-cli
    scoop: drone
  dua:
    _bin: dua
    _github: https://github.com/Byron/dua-cli
    brew: dua-cli
    cargo: dua-cli
    dnf:fedora: dua-cli
    pacman: dua-cli
    pkgin: dua-cli
    port: dua-cli
    scoop: dua
    xbps: dua-cli
  duf:
    _bin: duf
    _desc: "[duf](https://github.com/muesli/duf) is a Disk Usage/Free Utility - a better 'df' alternative. It displays a chart within your terminal that gives you an overview of hard-drive usage statistics."
    _docs: https://github.com/muesli/duf#usage
    _github: https://github.com/muesli/duf
    _home: https://github.com/muesli/duf
    _name: duf
    ansible: professormanhattan.duf
    brew: duf
    choco: duf
    github: github.com/muesli/duf
    pacman: duf
    pkg: duf
    scoop: duf
  dust:
    _bin: dust
    _desc: A more intuitive version of du in rust
    _docs: https://github.com/bootandy/dust#usage
    _github: https://github.com/bootandy/dust
    _home: https://github.com/bootandy/dust
    _name: dust
    apk: dust
    brew:darwin: dust
    brew:linux: tgotwig/linux-dust/dust
    cargo: du-dust
    github: github.com/bootandy/dust
    pacman: dust
  duti:
    _bin: duti
    _github: https://github.com/moretension/duti
    _name: Duti
    brew:darwin: duti
  eartrumpet:
    _bin: null
    _desc: Advanced, sleek volume controls for Windows
    _docs: https://github.com/File-New-Project/EarTrumpet
    _github: https://github.com/File-New-Project/EarTrumpet
    _home: https://eartrumpet.app/
    _name: EarTrumpet
    choco: eartrumpet
    winget: File-New-Project.EarTrumpet
  easyengine:
    _bin: ee
    _desc: "[EasyEngine](https://easyengine.io/) is a command-line control panel for Nginx to manage WordPress sites running on Nginx, PHP, MySQL, and Let's Encrypt."
    _docs: https://easyengine.io/handbook/
    _github: https://github.com/EasyEngine/easyengine
    _home: https://easyengine.io/
    _name: EasyEngine
    _post: |
      #!/usr/bin/env bash
      if [ -n "$CLOUDFLARE_EMAIL" ] && [ -n "$CLOUDFLARE_API_KEY" ]; then
        ee config set le-mail "$CLOUDFLARE_EMAIL"
        ee config set cloudflare-api-key "$CLOUDFLARE_API_KEY"
      fi
    brew: easyengine
    script:linux: wget -qO ee rt.cx/ee4 && sudo bash ee
  edex-ui:
    _app: eDEX-UI.app
    _bin: edex-ui
    _desc: A cross-platform, customizable science fiction terminal emulator with advanced monitoring & touchscreen support.
    _docs: https://github.com/GitSquared/edex-ui
    _github: https://github.com/GitSquared/edex-ui
    _home: https://github.com/GitSquared/edex-ui
    _name: EDEX UI
    appimage: edex-ui
    cask: edex-ui
    port: edex-ui
  editly:
    _bin: editly
    _desc: Editly is a tool and framework for declarative NLE (non-linear video editing) using Node.js and ffmpeg. Editly allows you to easily and programmatically create a video from a set of clips, images, audio and titles, with smooth transitions and music overlaid.
    _docs: https://github.com/mifi/editly#usage-command-line-video-editor
    _github: https://github.com/mifi/editly
    _home: https://github.com/mifi/editly
    _name: Editly
    npm: editly
  eget:
    _bin: eget
    _github: https://github.com/zyedidia/eget
    _name: eget
    brew: eget
    choco: eget
    go: github.com/zyedidia/eget@latest
  ejs:
    _bin: ejs
    _github: https://github.com/mde/ejs
    _name: EJS
    npm: ejs
  electron:
    _app: Electron.app
    _bin: electron
    _desc: '[Electron](https://www.electronjs.org/) allows you to build cross-platform desktop apps with JavaScript, HTML, and CSS'
    _docs: https://www.electronjs.org/docs/latest/
    _github: https://github.com/electron/electron
    _home: https://www.electronjs.org/
    _name: Electron
    cask: electron
    choco: electron
    npm: electron
  element:
    _app: Element.app
    _bin: element
    _github: https://github.com/vector-im/element-web
    _name: Element
    cask: element
    choco: element-desktop
    flatpak: im.riot.Riot
  emma:
    _bin: emma
    _desc: Advanced package search for NPM
    _docs: https://www.npmjs.com/package/emma-cli#example
    _github: https://github.com/maticzav/emma-cli
    _home: https://www.npmjs.com/package/emma-cli
    _name: Emma
    npm: emma-cli
  emoj:
    _bin: emoj
    _desc: Find relevant emoji from text on the command-line
    _github: https://github.com/sindresorhus/emoj
    _name: emoj
    npm: emoj
  emplace:
    _bin: emplace
    _desc: Emplace objects and arrays - pointer to pointer style
    _docs: https://github.com/tversteeg/emplace
    _github: https://github.com/tversteeg/emplace
    _home: https://github.com/tversteeg/emplace
    _name: Emplace
    cargo: emplace --locked
    nix: emplace
    scoop: emplace
  empty-trash:
    _bin: empty-trash
    _desc: CLI to empty trash on macOS, Windows, and Linux
    _docs: https://github.com/sindresorhus/empty-trash-cli
    _github: https://github.com/sindresorhus/empty-trash-cli
    _home: https://github.com/sindresorhus/empty-trash-cli
    _name: Empty Trash CLI
    npm: empty-trash-cli
  endlessh:
    _bin: endlessh
    _desc: '[Endlessh](https://github.com/skeeto/endlessh) is an SSH tarpit that very slowly sends an endless, random SSH banner. It keeps SSH clients locked up for hours or even days at a time. The purpose is to put your real SSH server on another port and then let the script kiddies get stuck in this tarpit instead of bothering a real server.'
    _docs: https://github.com/skeeto/endlessh
    _github: https://github.com/skeeto/endlessh
    _home: https://github.com/skeeto/endlessh
    _name: Endlessh
    _post: |
      #!/usr/bin/env bash
      # @file Endlessh Configuration
      # @brief Applies the Endlessh configuration and starts the service on Linux systems
      # @description
      #     Endlessh is a endless SSH tarpit that slowly shows an infinitely long SSH welcome banner on the default
      #     SSH port. It is intended to break unsophisticated malware that targets SSH.
      #
      #     If the `endlessh` program is installed, this script applies the configuration stored in `home/private_dot_ssh/endlessh/config.tmpl`
      #     (that unpacks with Chezmoi to `~/.ssh/endlessh/config`) to the system location and then starts the service.
      #
      #     **Note:** _This script runs under the assumption that the actual SSH port which is defined in `home/.chezmoidata.yaml`
      #     is assigned to a non-standard port like 2214. This allows the default port to be used for `endlessh`._
      #
      #     ## Links
      #
      #     * [Endlessh GitHub repository](https://github.com/skeeto/endlessh)
      #     * [Endlessh configuration](https://github.com/megabyte-labs/install.doctor/blob/master/home/private_dot_ssh/endlessh/config.tmpl)

      ### Configures endlessh service
      function configureEndlessh() {
        ### Update the service configuration file
        gum log -sl info 'Updating endlessh service configuration file'
        sudo sed -i 's/^.*#AmbientCapabilities=CAP_NET_BIND_SERVICE/AmbientCapabilities=CAP_NET_BIND_SERVICE/' /usr/lib/systemd/system/endlessh.service
        sudo sed -i 's/^.*PrivateUsers=true/#PrivateUsers=true/' /usr/lib/systemd/system/endlessh.service
        gum log -sl info 'Reloading systemd' && sudo systemctl daemon-reload

        ### Update capabilities of `endlessh`
        gum log -sl info 'Updating capabilities of endlessh' && sudo setcap 'cap_net_bind_service=+ep' /usr/bin/endlessh

        ### Restart / enable Endlessh
        gum log -sl info 'Enabling the endlessh service' && sudo systemctl enable endlessh
        gum log -sl info 'Restarting the endlessh service' && sudo systemctl restart endlessh
      }

      ### Update /etc/endlessh/config if environment is not WSL
      if [[ ! "$(test -d proc && grep Microsoft /proc/version > /dev/null)" ]]; then
        if command -v endlessh > /dev/null; then
          if [ -d /etc/endlessh ]; then
            gum log -sl info 'Copying ~/.ssh/endlessh/config to /etc/endlessh/config' && sudo cp -f "$HOME/.ssh/endlessh/config" /etc/endlessh/config

            configureEndlessh || CONFIGURE_EXIT_CODE=$?
            if [ -n "$CONFIGURE_EXIT_CODE" ]; then
              gum log -sl error 'Configuring endlessh service failed' && exit 1
            else
              gum log -sl info 'Successfully configured endlessh service'
            fi
          elif [ -f /etc/endlessh.conf ]; then
            gum log -sl info 'Copying ~/.ssh/endlessh/config to /etc/endlessh.conf' && sudo cp -f "$HOME/.ssh/endlessh/config" /etc/endlessh.conf

            configureEndlessh || CONFIGURE_EXIT_CODE=$?
            if [ -n "$CONFIGURE_EXIT_CODE" ]; then
              gum log -sl error 'Configuring endlessh service failed' && exit 1
            else
              gum log -sl info 'Successfully configured endlessh service'
            fi
          else
            gum log -sl warn 'Neither the /etc/endlessh folder nor the /etc/endlessh.conf file exist'
          fi
        else
          gum log -sl info 'Skipping Endlessh configuration because the endlessh executable is not available in the PATH'
        fi
      else
        gum log -sl info 'Skipping Endlessh configuration since environment is WSL'
      fi
    _service: endlessh
    # CentOS 9 not in EPEL
    # ansible:linux: professormanhattan.sshtarpit
    apt: endlessh
    dnf:fedora: endlessh
    yay: endlessh-git
  enola:
    _bin: enola
    _desc: Hunt down social media accounts by username across social networks (Sherlock Go clone)
    _docs: https://github.com/TheYahya/enola
    _github: https://github.com/TheYahya/enola
    _home: https://github.com/TheYahya/enola
    _name: Enola
    go: github.com/theyahya/enola/cmd/enola@latest
  envchain:
    _bin: envchain
    _deps:
      - _envchain:deps
    _desc: Environment variables meet macOS Keychain and gnome-keyring
    _docs: https://github.com/sorah/envchain#usage
    _github: https://github.com/sorah/envchain
    _home: https://github.com/sorah/envchain
    _name: envchain
    _post: |
      #!/usr/bin/env bash
      # @file Store Secrets in Keyring
      # @brief Stores secret environment variables into the System keyring
      # @description
      #     This script imports secret environment variables into the System keyring if `envchain` is installed.
      #     Secrets stored in the folder 'home/.chezmoitemplates/secrets' following the Install Doctor method are
      #     imported into the System keyring by this script. There is only one namespace called `default` where the
      #     secrets are stored. Executing `envchain default env` displays all the environment variables and their values.
      #
      #     ## Secrets
      #
      #     For more information about storing secrets like SSH keys and API keys, refer to our [Secrets documentation](https://install.doctor/docs/customization/secrets).

      ### Import environment variables into `envchain`
      if command -v envchain > /dev/null; then
        {{- if (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) }}
        gum log -sl info 'Importing environment variables into the System keyring'
        for file in {{ joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "*" }}; do
          cat "$file" | chezmoi decrypt | envchain -s default "$(basename $file)" > /dev/null || gum log -sl info 'Importing "$(basename $file)" failed'
        done
        {{- else }}
        gum log -sl warn 'Unable to import any variables into envchain because ~/.config/age/chezmoi.txt was not created by the secrets encryption process yet'
        {{- end }}
      else
        gum log -sl info 'envchain is not installed or it is not available in the PATH'
      fi
    brew: envchain
    github: github.com/sorah/envchain
  envconsul:
    _bin: envconsul
    _desc: Launch a subprocess with environment variables using data from @hashicorp Consul and Vault
    _github: https://github.com/hashicorp/envconsul
    _name: envconsul
    ansible: professormanhattan.envconsul
    brew: envconsul
    github: github.com/hashicorp/envconsul
  envio:
    _bin: envio
    _github: https://github.com/humblepenguinn/envio
    _name: Envio
    cargo: envio
  environment:
    _bin: null
    _github: false
    ansible: professormanhattan.environment
  envpane:
    _bin: null
    _desc: An OS X preference pane for environment variables
    _docs: https://github.com/hschmidt/EnvPane
    _github: https://github.com/hschmidt/EnvPane
    _home: https://github.com/hschmidt/EnvPane
    _name: EnvPane
    _when:script: '! test -d "$HOME/Library/PreferencePanes/EnvPane.prefPane"'
    script:darwin: '(cd ~/Library/PreferencePanes && rm -rf EnvPane.prefPane && curl -sL https://github.com/hschmidt/EnvPane/releases/download/releases%2F0.8/EnvPane-0.8.tar.bz2 | tar -xjf -)'
  eslint:
    _bin: eslint
    _desc: '[ESLint](https://eslint.org/) allows you to find and fix problems in your JavaScript code'
    _docs: https://eslint.org/docs
    _github: https://github.com/eslint/eslint
    _home: https://eslint.org/
    _name: ESLint
    brew: eslint
    npm: eslint
  eslint-dashboard:
    _bin: eslint-dashboard
    _github: https://github.com/fengzilong/eslint-dashboard
    _name: ESLint Dashboard
    npm: eslint-dashboard
  eslint-interactive:
    _bin: eslint-interactive
    _github: https://github.com/mizdra/eslint-interactive
    _name: ESLint Interactive
    npm: eslint-interactive
  eslintd:
    _bin: eslint_d
    _docs: https://github.com/mantoni/eslint_d.js
    _github: https://github.com/mantoni/eslint_d.js
    _home: https://github.com/mantoni/eslint_d.js
    _name: ESLint_d
    npm: eslint_d
  espanso:
    _app: Espanso.app
    _bin: espanso
    _github: https://github.com/espanso/espanso
    _name: Espanso
    _post:appimage: |
      #!/usr/bin/env bash
      espanso service register && espanso start
    _post:snap: |
      #!/usr/bin/env bash
      espanso service register && espanso start
    appimage: federico-terzi/espanso
    cask: espanso
    choco: espanso
    snap: espanso --channel=latest/edge --classic
  esprint:
    _bin: esprint
    _github: https://github.com/pinterest/esprint
    _name: ESPrint
    npm: esprint
  etcd:
    _bin: etcd
    _desc: Distributed reliable key-value store for the most critical data of a distributed system
    _github: https://github.com/etcd-io/etcd
    _name: etcd
    _service: etcd
    _serviceEnabled: true
    apt: etcd
    brew: etcd
    choco: etcd
    dnf:fedora: etcd
    github: github.com/etcd-io/etcd
    yay: etcd
  ettercap:
    _bin: ettercap
    _github: https://github.com/Ettercap/ettercap
    _name: Ettercap
    apt: ettercap
    brew: ettercap
    choco: ettercap
    dnf: ettercap
    pacman: ettercap
  eul:
    _app: eul.app
    _bin: null
    _desc: Menu bar application that shows system stats like CPU, RAM, and disk usage on macOS
    _docs: https://github.com/gao-sun/eul
    _github: https://github.com/gao-sun/eul
    _home: https://github.com/gao-sun/eul
    _name: Eul
    cask: eul
    mas: 1537133867
  exa:
    _bin: exa
    _desc: A modern replacement for ls.
    _docs: https://the.exa.website/introduction
    _github: https://github.com/ogham/exa
    _home: https://the.exa.website/
    _name: Exa
    apt: exa
    brew: exa
    cargo: exa
    dnf: exa
    emerge: sys-apps/exa
    nix: exa
    pacman: exa
    zypper: exa
  exiftool:
    _bin: exiftool
    _desc: '[exiftool](https://exiftool.org/) is a platform-independent Perl library plus a command-line application for reading, writing and editing meta information in a wide variety of files'
    _docs: https://exiftool.org/exiftool_pod.html
    _github: https://github.com/exiftool/exiftool
    _home: https://exiftool.org/
    _name: exiftool
    ansible: professormanhattan.exiftool
    apt: libimage-exiftool-perl
    brew: exiftool
    choco: exiftool
    dnf: perl-Image-ExifTool.noarch
    pacman: perl-image-exiftool
    port: exiftool
    scoop: exiftool
  expect:
    _bin: expect
    _name: Expect
    _github: false
    apt: expect
    brew: expect
    dnf: expect
    pacman: expect
    port: expect
  extensions:
    _bin: null
    _github: false
    _desc: This role acts as a catch-all for extensions for various system software.
    _name: Extensions
    ansible: professormanhattan.extensions
  fabric:
    _bin: fab
    _github: https://github.com/fabric/fabric
    _name: Fabric
    brew: fabric
    pipx: fabric
  fail2ban:
    _bin: fail2ban-client
    _github: https://github.com/fail2ban/fail2ban
    _notes: |
      fail2ban cannot be installed on Qubes Fedora 36 without messing with the qubes-firewall since firewalld is required.
    _post: |
      #!/usr/bin/env bash
      # @file Fail2ban Configuration
      # @brief Applies the system `fail2ban` jail configuration and then restarts the service
      # @description
      #     Fail2ban is an SSH security program that temporarily bans IP addresses that could possibly be
      #     attempting to gain unauthorized system access. This script applies the "jail" configuration
      #     located at `home/private_dot_ssh/fail2ban/` to the system location. It then enables and restarts
      #     the `fail2ban` configuration.
      #
      #     ## Links
      #
      #     * [`fail2ban` configuration folder](https://github.com/megabyte-labs/install.doctor/tree/master/home/private_dot_ssh/fail2ban)

      ### Notify of script start
      gum log -sl info 'Configuring fail2ban'

      ### Restart fail2ban
      function restartFailToBan() {
        if [ -d /Applications ] && [ -d /System ]; then
          ### macOS
          gum log -sl info 'Enabling the fail2ban Homebrew service'
          brew services restart fail2ban
        else
          # Linux
          gum log -sl info 'Enabling the fail2ban service'
          sudo systemctl enable fail2ban
          gum log -sl info 'Restarting the fail2ban service'
          sudo systemctl restart fail2ban
        fi
      }

      ### Update the jail.local file if environment is not WSL
      gum log -sl info 'Checking if script is being run in WSL environment'
      if [[ ! "$(test -d /proc && grep Microsoft /proc/version > /dev/null)" ]]; then
        if [ -d /etc/fail2ban ]; then
          gum log -sl info 'Copying ~/.ssh/fail2ban/jail.local to /etc/fail2ban/jail.local'
          sudo cp -f "$HOME/.ssh/fail2ban/jail.local" /etc/fail2ban/jail.local
          restartFailToBan
        elif [ -d /usr/local/etc/fail2ban ]; then
          gum log -sl info 'Copying ~/.ssh/fail2ban/jail.local to /usr/local/etc/fail2ban/jail.local'
          sudo cp -f "$HOME/.ssh/fail2ban/jail.local" /usr/local/etc/fail2ban/jail.local
          restartFailToBan
        elif [ -d "${HOMEBREW_PREFIX:-/opt/homebrew}/etc/fail2ban" ]; then
          gum log -sl info "Copying ~/.ssh/fail2ban/jail.local to ${HOMEBREW_PREFIX:-/opt/homebrew}/etc/fail2ban/jail.local"
          sudo cp -f "$HOME/.ssh/fail2ban/jail.local" "${HOMEBREW_PREFIX:-/opt/homebrew}/etc/fail2ban/jail.local"
          restartFailToBan
        else
          gum log -sl warn 'The /etc/fail2ban (Linux), the /usr/local/etc/fail2ban, and the ${HOMEBREW_PREFIX:-/opt/homebrew}/etc/fail2ban (macOS) folder do not exist'
        fi
      else
        gum log -sl info 'Skipping sshd_config application since environment is WSL'
      fi
    _service: fail2ban
    _service:brew:
      - name: fail2ban
        sudo: true
    _serviceEnabled: true
    _when:linux: '! command -v qubes-firewall > /dev/null && test -f /proc/version && ! grep Microsoft /proc/version > /dev/null'
    apt: fail2ban
    brew: fail2ban
    dnf: fail2ban
    pacman: fail2ban
    port: fail2ban
  fastify:
    _bin: fastify
    _desc: Run a Fastify application with one command
    _github: https://github.com/fastify/fastify-cli
    _home: https://www.fastify.io/
    _name: fastify
    npm: fastify-cli
  fastlane:
    _bin: fastlane
    _github: https://github.com/fastlane/fastlane
    _home: https://fastlane.tools/
    _name: Fastlane
    brew: fastlane
    gem: fastlane
  fcp:
    _bin: fcp
    _desc: A significantly faster alternative to the classic Unix cp(1) command, copying large files and directories in a fraction of the time.
    _docs: https://github.com/Svetlitski/fcp#usage
    _github: https://github.com/Svetlitski/fcp
    _home: https://github.com/Svetlitski/fcp
    _name: fcp
    brew: fcp
    cargo: fcp
    nix: unstable.fcp
  fd:
    _bin: fd
    _bin:apt: fdfind
    _desc: "[fd](https://github.com/sharkdp/fd) is a program that can search for files on your filesystem. It is a simple, fast, and user-friendly alternative to find. While it does not aim to support all of find's powerful functionality, it provides sensible (opinionated) defaults for a majority of use cases."
    _github: https://github.com/sharkdp/fd
    _name: fd
    ansible: professormanhattan.fd
    apk: fd
    apt: fd-find
    brew: fd
    cargo: fd-find
    choco: fd
    github: github.com/sharkdp/fd
    pacman: fd
    pkg: fd
    scoop: fd
  fdupes:
    _bin: fdupes
    _github: https://github.com/adrianlopezroche/fdupes
    _name: fdupes
    apt: fdupes
    brew: fdupes
    dnf: fdupes
    pacman: fdupes
  feathers:
    _bin: feathers
    _desc: The command line interface for scaffolding Feathers applications
    _github: https://github.com/feathersjs-ecosystem/cli
    npm: '@feathersjs/cli'
  ferdium:
    _app: Ferdium.app
    _github: https://github.com/ferdium/ferdium-app
    _bin: ferdium
    _env:
      FERDIUM_APPDATA:
        cask: "$HOME/Library/Application Support/Ferdium"
        choco: TODO
        flatpak: "$HOME/.var/app/org.ferdium.Ferdium/config/Ferdium"
        snap: "$HOME/snap/ferdium/current/.config/Ferdium"
    cask: ferdium
    choco: ferdium
    flatpak: org.ferdium.Ferdium
    snap: ferdium
  ffmpeg:
    _bin: ffmpeg
    _desc: '[FFmpeg](https://www.ffmpeg.org/) is the leading multimedia framework. It is able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created. It supports the most obscure ancient formats up to the cutting edge.'
    _github: https://github.com/FFmpeg/FFmpeg
    _name: FFmpeg
    ansible: professormanhattan.ffmpeg
    apk: ffmpeg
    apt: ffmpeg
    brew: ffmpeg
    choco: ffmpeg
    dnf: ffmpeg
    pacman: ffmpeg
    scoop: ffmpeg
  ffsend:
    _bin: ffsend
    _desc: '[ffsend](https://github.com/timvisee/ffsend) (formerly [Firefox Send](https://support.mozilla.org/en-US/kb/what-happened-firefox-send)) allows you to easily and securely share files and directories from the command line through a safe, private and encrypted link using a single simple command. Files are shared using the [Send](https://send.vis.ee/) service and may be up to 1GB. Others are able to download these files with this tool, or through their web browser.'
    _github: https://github.com/timvisee/ffsend
    _name: ffsend
    ansible: professormanhattan.ffsend
    apk: ffsend
    brew: ffsend
    github: github.com/timvisee/ffsend
    pkg: ffsend
    scoop: ffsend
    snap: ffsend
    yay: ffsend
  fiddler:
    _bin: fiddler
    _desc: The community-trusted free Windows-only tool that logs HTTP(s) network traffic.
    _docs: https://docs.telerik.com/fiddler/configure-fiddler/tasks/configurefiddler
    _github: false
    _home: https://www.telerik.com/fiddler
    _name: Fiddler
    _todo: Add headless installation method for Linux
    choco: fiddler
    scoop: extras/fiddler
  fig:
    _app: Fig.app
    _bin: fig
    _desc: '[Fig](https://fig.io/) adds autocomplete to your terminal. As you type, Fig pops up subcommands, options, and contextually relevant arguments in your existing terminal.'
    _docs: https://fig.io/user-manual
    _github: https://github.com/withfig/autocomplete
    _home: https://fig.io/
    _name: Fig
    _post: |
      #!/usr/bin/env bash
      source ~/.config/shell/private.sh && fig login --token "$FIG_TOKEN"
    cask: fig
  figlet:
    _bin: figlet
    _github: https://github.com/cmatsuoka/figlet
    _name: Figlet
    apt: figlet
    brew: figlet
    choco: figlet
    dnf: figlet
    pacman: figlet
    zypper: figlet
  figma:
    _app: Figma.app
    _bin: null
    _desc: Collaborative team software
    _docs: https://help.figma.com/hc/en-us
    _github: false
    _home: https://www.figma.com/
    _name: Figma
    appimage: Figma-Linux/figma-linux
    cask: figma
    choco: figma
    flatpak: io.github.Figma_Linux.figma_linux
    snap: figma-linux
  filebrowser:
    _bin: filebrowser
    _desc: '[File Browser](https://filebrowser.org/) is a tool that lets you browse and edit files on any mounting point in the operating system.'
    _docs: https://filebrowser.org/installation
    _github: https://github.com/filebrowser/filebrowser
    _home: https://filebrowser.org/
    _name: File Browser
    ansible: professormanhattan.filebrowser
    brew: filebrowser/tap/filebrowser
    github: github.com/filebrowser/filebrowser
  filezilla:
    _app: FileZilla.app
    _bin: filezilla
    _desc: '[FileZilla](https://filezilla-project.org/) is a free software, cross-platform FTP application, consisting of FileZilla Client and FileZilla Server. Client binaries are available for Windows, Linux, and macOS, server binaries are available for Windows only.'
    _docs: https://wiki.filezilla-project.org/Documentation
    _github: https://svn.filezilla-project.org/filezilla/
    _home: https://filezilla-project.org/
    _name: FileZilla
    ansible:darwin: professormanhattan.filezilla
    apt: filezilla
    choco: filezilla
    dnf: filezilla
    flatpak: org.filezillaproject.Filezilla
    pacman: filezilla
  findutils:
    _bin: gfind
    _github: false
    brew: findutils
  finish:
    _bin: null
    _github: false
    _desc: This role should be the last role in the playbook.
    _name: Finish
    ansible: professormanhattan.finish
  firebase:
    _github: https://github.com/firebase/firebase-tools
    _bin: firebase
    _desc: The Firebase Command Line Interface (CLI) Tools can be used to test, manage, and deploy your Firebase project from the command line
    npm: firebase-tools
  firefox:
    _app: Firefox.app
    _bin: firefox
    _github: false
    _deps:
      - htmlq
    _desc: '[Mozilla Firefox](https://www.mozilla.org/en-US/firefox/new/), or simply Firefox, is a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. Firefox uses the Gecko layout engine to render web pages, which implements current and anticipated web standards.'
    _docs: https://developer.mozilla.org/en-US/
    _env:
      FIREFOX_APPDATA:
        apt: "$HOME/.mozilla/firefox"
        cask: "$HOME/Library/Application Support/Firefox/Profiles"
        choco: "TODO"
        dnf: "$HOME/.mozilla/firefox"
        flatpak: "$HOME/.var/app/org.mozilla.firefox/.mozilla/firefox"
        pacman: "$HOME/.mozilla/firefox"
        snap: "$HOME/snap/firefox/common/.mozilla/firefox"
    _home: https://www.mozilla.org/en-US/firefox/new/
    _name: Mozilla Firefox
    _post: |
      #!/usr/bin/env bash
      # @file Firefox Settings / Add-Ons / Profiles
      # @brief This script configures system-wide settings, sets up Firefox Profile Switcher, creates various profiles from different sources, and installs a configurable list of Firefox Add-Ons.
      # @description
      #     The Firefox setup script performs a handful of tasks that automate the setup of Firefox as well as
      #     useful utilities that will benefit Firefox power-users. The script also performs the same logic on
      #     [LibreWolf](https://librewolf.net/) installations.
      #
      #     ## Features
      #
      #     * Installs and sets up [Firefox Profile Switcher](https://github.com/null-dev/firefox-profile-switcher)
      #     * Sets up system-wide enterprise settings (with configurations found in `~/.local/share/firefox`)
      #     * Sets up a handful of default profiles to use with the Firefox Profile Switcher
      #     * Automatically installs the plugins defined in the firefoxAddOns key of [`home/.chezmoidata.yaml`](https://github.com/megabyte-labs/install.doctor/blob/master/home/.chezmoidata.yaml) to the Standard and Private profiles
      #     * Configures the default profile to clone its settings from the profile stored in firefoxPublicProfile of `home/.chezmoidata.yaml`
      #     * Optionally, if the Chezmoi encryption key is present, then the default profile will be set to the contents of an encrypted `.tar.gz` that must be stored in the cloud somewhere (with the firefoxPrivateProfile key in `home/.chezmoidata.yaml` defining the URL of the encrypted `.tar.gz`)
      #
      #     ## Profiles
      #
      #     The script sets up numerous profiles for user flexibility. They can be switched by using the Firefox Profile Switcher
      #     that this script sets up. The map of the profiles is generated by using the template file stored in `~/.local/share/firefox/profiles.ini`.
      #     The following details the features of each profile:
      #
      #     | Name             | Description                                                                                 |
      #     |------------------|---------------------------------------------------------------------------------------------|
      #     | Factory          | Default browser settings (system-wide configurations still apply)                           |
      #     | default-release  | Same as Factory (unmodified and generated by headlessly opening Firefox / LibreWolf)        |
      #     | Git (Public)     | Pre-configured profile with address stored in `firefoxPublicProfile`                        |
      #     | Standard         | Cloned from the profile above with `firefoxAddOns` also installed                           |
      #     | Miscellaneous    | Cloned from the Factory profile (with the user.js found in `~/.config/firefox` applied)     |
      #     | Development      | Same as Miscellaneous                                                                       |
      #     | Automation       | Same as Miscellaneous                                                                       |
      #     | Private          | Populated from an encrypted profile stored in the cloud (also installs `firefoxAddOns`)     |
      #
      #     ## Notes
      #
      #     * The Firefox Profile Switcher is only compatible with Firefox and not LibreWolf
      #     * This script is only designed to properly provision profiles on a fresh installation (so it does not mess around with pre-existing / already configured profiles)
      #     * Additional profiles for LibreWolf are not added because the Firefox Profile Switcher is not compatible with LibreWolf
      #
      #     ## Links
      #
      #     * [System-wide configurations](https://github.com/megabyte-labs/install.doctor/tree/master/home/dot_local/share/firefox) as well as the location of the `profile.ini` and some other configurations
      #     * [User-specific configurations](https://github.com/megabyte-labs/install.doctor/blob/master/home/dot_config/firefox/user.js) added to all profiles except Factory

      function installFirefoxProfileConnector() {
        gum log -sl info 'Installing the Firefox Profile Connector'
        if command -v apt-get > /dev/null; then
          sudo apt-get install -y https://github.com/null-dev/firefox-profile-switcher-connector/releases/latest/download/linux-x64.deb
        elif command -v dnf > /dev/null; then
          sudo dnf install -y https://github.com/null-dev/firefox-profile-switcher-connector/releases/latest/download/linux-x64.rpm
        elif command -v yay > /dev/null; then
          yay -Ss firefox-profile-switcher-connector
        else
          gum log -sl warn 'apt-get, dnf, and yay were all unavailable so the Firefox Profile Connector helper executable could not be installed'
        fi
      }

      function firefoxSetup() {
        ### Installs the Firefox Profile Connector on Linux systems (Snap / Flatpak installs are not included in this function, but instead inline below)
        ### Add Firefox enterprise profile
        # TODO - figure out how to do this for other installations like Flatpak and macOS and Librewolf
        for FIREFOX_DIR in '/usr/lib/firefox' '/usr/lib/firefox-esr' '/etc/firefox' '/etc/firefox-esr' '/Applications/Firefox.app/Contents/Resources'; do
          if [ -d "$FIREFOX_DIR" ] && [ -d "${XDG_DATA_HOME:-$HOME/.local/share}/firefox" ] && command -v rsync > /dev/null; then
            gum log -sl info "Syncing enterprise profiles from ${XDG_DATA_HOME:-$HOME/.local/share}/firefox to $FIREFOX_DIR"
            sudo rsync -artvu "${XDG_DATA_HOME:-$HOME/.local/share}/firefox/" "$FIREFOX_DIR" > /dev/null
          fi
        done

        ### Loop through various Firefox profile locations
        for SETTINGS_DIR in "$HOME/snap/firefox/common/.mozilla/firefox" "$HOME/.var/app/org.mozilla.firefox/.mozilla/firefox" "$HOME/Library/Application Support/Firefox/Profiles" "$HOME/.mozilla/firefox"; do
          ### Determine executable to use
          gum log -sl info "Processing Firefox profile location $SETTINGS_DIR"
          unset FIREFOX_EXE
          if [ "$SETTINGS_DIR" == "$HOME/.var/app/org.mozilla.firefox/.mozilla/firefox" ]; then
            if ! command -v org.mozilla.firefox > /dev/null || [ ! -d "$HOME/.var/app/org.mozilla.firefox" ]; then
              continue
            else
              FIREFOX_EXE="$(which org.mozilla.firefox)"
              ### Firefox Profile Switcher
              BASE_DIR="$HOME/.var/app/org.mozilla.firefox"
              BIN_INSTALL_DIR="$BASE_DIR/data/firefoxprofileswitcher-install"
              MANIFEST_INSTALL_DIR="$BASE_DIR/.mozilla/native-messaging-hosts"
              DOWNLOAD_URL="https://github.com/null-dev/firefox-profile-switcher-connector/releases/latest/download/linux-x64.deb"

              ### Ensure Firefox Profile Switcher is not already installed
              if [ ! -f "$BIN_INSTALL_DIR/usr/bin/ff-pswitch-connector" ] || [ ! -f "$MANIFEST_INSTALL_DIR/ax.nd.profile_switcher_ff.json" ]; then
                ### Download profile switcher
                mkdir -p "$BIN_INSTALL_DIR"
                TMP_FILE="$(mktemp)"
                gum log -sl info 'Downloading Firefox Profile Switch connector'
                curl -sSL "$DOWNLOAD_URL" -o "$TMP_FILE"
                ar p "$TMP_FILE" data.tar.xz | tar xfJ - --strip-components=2 -C "$BIN_INSTALL_DIR" usr/bin/ff-pswitch-connector
                rm -f "$TMP_FILE"

                ### Create manifest
                gum log -sl info 'Copying profile switcher configuration to manifest directory'
                mkdir -p "$MANIFEST_INSTALL_DIR"
                cat "${XDG_DATA_HOME:-$HOME/.local/share}/firefox/profile-switcher.json" | sed 's=PATH_PLACEHOLDER='"$BIN_INSTALL_DIR"'=' > "$MANIFEST_INSTALL_DIR/ax.nd.profile_switcher_ff.json"
              fi
            fi
          elif [ "$SETTINGS_DIR" == "$HOME/.var/app/io.gitlab.librewolf-community/.librewolf" ]; then
            if ! command -v io.gitlab.librewolf-community > /dev/null || [ ! -d "$HOME/.var/app/io.gitlab.librewolf-community" ]; then
              continue
            else
              continue
              # FIREFOX_EXE="$(which io.gitlab.librewolf-community)"
            fi
          elif [ "$SETTINGS_DIR" == "$HOME/Library/Application Support/Firefox/Profiles" ]; then
            FIREFOX_EXE="/Applications/Firefox.app/Contents/MacOS/firefox"
            if [ ! -f "$FIREFOX_EXE" ] || [ ! -d /Applications ]; then
              continue
            else
              ### Download Firefox Profile Switcher
              if [ ! -d /usr/local/Cellar/firefox-profile-switcher-connector ]; then
                gum log -sl info 'Ensuring Firefox Profile Switcher is installed'
                brew install --quiet null-dev/firefox-profile-switcher/firefox-profile-switcher-connector
              fi

              ### Ensure Firefox Profile Switcher configuration is symlinked
              if [ ! -d "/Library/Application Support/Mozilla/NativeMessagingHosts/ax.nd.profile_switcher_ff.json" ]; then
                gum log -sl info 'Ensuring Firefox Profile Switcher is configured'
                sudo mkdir -p "/Library/Applcation Support/Mozilla/NativeMessagingHosts"
                sudo ln -sf "$(brew ls -l firefox-profile-switcher-connector | grep -i ax.nd.profile_switcher_ff.json | head -n1)" "/Library/Application Support/Mozilla/NativeMessagingHosts/ax.nd.profile_switcher_ff.json"
              fi
            fi
          elif [ "$SETTINGS_DIR" == "$HOME/Library/Application Support/LibreWolf/Profiles" ]; then
            continue
            # FIREFOX_EXE="/Applications/LibreWolf.app/Contents/MacOS/librewolf"
            # if [ ! -f "$FIREFOX_EXE" ] || [ ! -d /Applications ]; then
            #   gum log -sl info "$FIREFOX_EXE is not a file"
            #   continue
            # fi
          elif [ "$SETTINGS_DIR" == "$HOME/snap/firefox/common/.mozilla/firefox" ]; then
            FIREFOX_EXE="/snap/bin/firefox"
            if [ ! -f "$FIREFOX_EXE" ] || [ ! -d "$HOME/snap/firefox" ]; then
              continue
            else
              ### Firefox Profile Switcher
              BASE_DIR="$HOME/snap/firefox/common"
              BIN_INSTALL_DIR="$BASE_DIR/firefoxprofileswitcher-install"
              MANIFEST_INSTALL_DIR="$BASE_DIR/.mozilla/native-messaging-hosts"
              DOWNLOAD_URL="https://github.com/null-dev/firefox-profile-switcher-connector/releases/latest/download/linux-x64.deb"

              ### Ensure Firefox Profile Switcher is not already installed
              if [ ! -f "$BIN_INSTALL_DIR/usr/bin/ff-pswitch-connector" ] || [ ! -f "$MANIFEST_INSTALL_DIR/ax.nd.profile_switcher_ff.json" ]; then
                ### Download profile switcher
                mkdir -p "$BIN_INSTALL_DIR"
                TMP_FILE="$(mktemp)"
                gum log -sl info 'Downloading Firefox Profile Switch connector'
                curl -sSL "$DOWNLOAD_URL" -o "$TMP_FILE"
                ar p "$TMP_FILE" data.tar.xz | tar xfJ - --strip-components=2 -C "$BIN_INSTALL_DIR" usr/bin/ff-pswitch-connector
                rm -f "$TMP_FILE"

                ### Create manifest
                gum log -sl info 'Copying profile switcher configuration to manifest directory'
                mkdir -p "$MANIFEST_INSTALL_DIR"
                cat "${XDG_DATA_HOME:-$HOME/.local/share}/firefox/profile-switcher.json" | sed 's/PATH_PLACEHOLDER/'"$BIN_INSTALL_DIR"'/' > "$MANIFEST_INSTALL_DIR/ax.nd.profile_switcher_ff.json"
              fi
            fi
          elif [ "$SETTINGS_DIR" == "$HOME/.mozilla/firefox" ]; then
            if command -v firefox-esr > /dev/null; then
              FIREFOX_EXE="$(which firefox-esr)"
              installFirefoxProfileConnector
            elif command -v firefox > /dev/null && [ "$(which firefox)" != *'snap'* ] && [ "$(which firefox)" != *'flatpak'* ] && [ ! -d /Applications ] && [ ! -d /System ]; then
              # Conditional check ensures Snap / Flatpak / macOS Firefox versions do not try to install to the wrong folder
              FIREFOX_EXE="$(which firefox)"
              installFirefoxProfileConnector
            else
              if [ -d /Applications ] && [ -d /System ]; then
                # Continue on macOS without logging because profiles are not stored here on macOS
                continue
              else
                gum log -sl warn 'Unable to register Firefox executable'
                gum log -sl info "Settings directory: $SETTINGS_DIR"
                continue
              fi
            fi
          fi
          ### Initiatize Firefox default profiles
          gum log -sl info "Processing executable located at $FIREFOX_EXE"
          if command -v "$FIREFOX_EXE" > /dev/null; then
            ### Create default profile by launching Firefox headlessly
            gum log -sl info "Firefox executable set to $FIREFOX_EXE"
            if [ ! -d "$SETTINGS_DIR" ]; then
              gum log -sl info 'Running Firefox (or its derivative) headlessly to generate default profiles'
              timeout 14 "$FIREFOX_EXE" --headless
              gum log -sl info 'Finished running Firefox headlessly'
            elif [ -d /Applications ] && [ -d /System ] && [ ! -f "$SETTINGS_DIR/../installs.ini" ]; then
              gum log -sl info 'Running Firefox (or its derivative) headlessly to generate default profiles because install.ini is not at the macOS default location.'
              timeout 14 "$FIREFOX_EXE" --headless
              gum log -sl info 'Finished running Firefox headlessly (while fixing the missing macOS installs.ini issue)'
            fi

            ### Ensure settings directory exists (since the application was brought up temporarily headlessly)
            if [ ! -d "$SETTINGS_DIR" ]; then
              gum log -sl warn "The settings directory located at $SETTINGS_DIR failed to be populated by running the browser headlessly"
              continue
            fi

            ### Add the populated profiles.ini
            gum log -sl info "Copying "${XDG_DATA_HOME:-$HOME/.local/share}/firefox/profiles.ini" to profile directory"
            gum log -sl info "The settings directory is $SETTINGS_DIR"
            if [ -d /Applications ] && [ -d /System ]; then
              # macOS
              gum log -sl info "Copying ~/.local/share/firefox/profiles.ini to $SETTINGS_DIR/../profiles.ini"
              cp -f "${XDG_DATA_HOME:-$HOME/.local/share}/firefox/profiles.ini" "$SETTINGS_DIR/../profiles.ini"
              SETTINGS_INI="$SETTINGS_DIR/../installs.ini"
            else
              # Linux
              gum log -sl info "Copying ~/.local/share/firefox/profiles.ini to $SETTINGS_DIR/profiles.ini"
              cp -f "${XDG_DATA_HOME:-$HOME/.local/share}/firefox/profiles.ini" "$SETTINGS_DIR/profiles.ini"
              SETTINGS_INI="$SETTINGS_DIR/installs.ini"
            fi

            ### Default profile (created by launching Firefox headlessly)
            DEFAULT_RELEASE_PROFILE="$(find "$SETTINGS_DIR" -mindepth 1 -maxdepth 1 -name "*.default" -not -name "profile.default")"
            if [ -n "$DEFAULT_RELEASE_PROFILE" ]; then
              gum log -sl info "Syncing $DEFAULT_RELEASE_PROFILE to $SETTINGS_DIR/profile.default"
              rsync -a "$DEFAULT_RELEASE_PROFILE/" "$SETTINGS_DIR/profile.default"
            else
              gum log -sl warn 'Unable to sync default Mozilla Firefox profile'
            fi

            ### Ensure original installs.ini is removed
            if [ -f "$SETTINGS_INI" ]; then
              # DEFAULT_PROFILE_PROFILE="$SETTINGS_DIR/$(cat "$SETTINGS_INI" | grep 'Default=' | sed 's/.*Profiles\///')"
              gum log -sl info 'Removing previous installs.ini file'
              rm -f "$SETTINGS_INI"
            else
              gum log -sl info 'installs.ini was not present in the Mozilla Firefox settings folder'
            fi

            ### Miscellaneous default profiles
            for NEW_PROFILE in "automation" "development" "miscellaneous"; do
              if [ ! -d "$SETTINGS_DIR/profile.${NEW_PROFILE}" ] && [ -d "$SETTINGS_DIR/profile.default" ]; then
                gum log -sl info "Cloning $NEW_PROFILE from profile.default"
                rsync -a "$SETTINGS_DIR/profile.default/" "$SETTINGS_DIR/profile.${NEW_PROFILE}"
                rsync -a "${XDG_DATA_HOME:-$HOME/.local/share}/firefox/" "$SETTINGS_DIR/profile.${NEW_PROFILE}"
                cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/firefox/user.js" "$SETTINGS_DIR/profile.${NEW_PROFILE}"
              fi
            done

            ### Public git profile
            if [ -d "$SETTINGS_DIR/profile.git" ]; then
              gum log -sl info 'Resetting the Firefox git profile'
              cd "$SETTINGS_DIR/profile.git"
              git reset --hard HEAD
              git clean -fxd
              gum log -sl info 'Pulling latest updates to the Firefox git profile'
              git pull origin master
            else
              gum log -sl info 'Cloning the public Firefox git profile'
              cd "$SETTINGS_DIR" && git clone "$FIREFOX_PUBLIC_PROFILE" profile.git
            fi

            ### Copy user.js to profile.git profile
            cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/firefox/user.js" "$SETTINGS_DIR/profile.git"

            ### Git profile w/ plugins installed (installation happens below)
            if [ ! -d "$SETTINGS_DIR/profile.plugins" ]; then
              gum log -sl info "Syncing $SETTINGS_DIR/profile.git to $SETTINGS_DIR/profile.plugins"
              rsync -a "$SETTINGS_DIR/profile.git/" "$SETTINGS_DIR/profile.plugins"
              rsync -a "${XDG_DATA_HOME:-$HOME/.local/share}/firefox/" "$SETTINGS_DIR/profile.plugins"
              cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/firefox/user.js" "$SETTINGS_DIR/profile.plugins"
            fi

            ### Private hosted profile
            # Deprecated in favor of using the Restic profile tasks saved in `~/.config/task/Taskfile.yml`
            # if [ ! -d "$SETTINGS_DIR/profile.private" ]; then
            #     gum log -sl info 'Downloading the encrypted Firefox private profile'
            #     cd "$SETTINGS_DIR"
            #     curl -sSL '{ { .firefoxPrivateProfile } }' -o profile.private.tar.gz.age
            #     gum log -sl info 'Decrypting the Firefox private profile'
            #     chezmoi decrypt profile.private.tar.gz.age > profile.private.tar.gz || EXIT_DECRYPT_CODE=$?
            #     if [ -z "$EXIT_DECRYPT_CODE" ]; then
            #         rm -f profile.private.tar.gz.age
            #         gum log -sl info 'Decompressing the Firefox private profile'
            #         tar -xzf profile.private.tar.gz
            #         gum log -sl info 'The Firefox private profile was successfully installed'
            #         cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/firefox/user.js" "$SETTINGS_DIR/profile.private"
            #         gum log -sl info 'Copied ~/.config/firefox/user.js to profile.private profile'
            #     else
            #         gum log -sl error 'Failed to decrypt the private Firefox profile'
            #     fi
            # fi

            ### Install Firefox addons (using list declared in .chezmoidata.yaml)
            for SETTINGS_PROFILE in "profile.plugins" "profile.private"; do
              if [ -d "$SETTINGS_DIR/$SETTINGS_PROFILE" ]; then
                for FIREFOX_PLUGIN in {{ list (.firefoxAddOns | toString | replace "[" "" | replace "]" "") | uniq | join " " }}; do
                  gum log -sl info "Processing the $FIREFOX_PLUGIN Firefox add-on"
                  PLUGIN_HTML="$(mktemp)"
                  curl --silent "https://addons.mozilla.org/en-US/firefox/addon/$FIREFOX_PLUGIN/" > "$PLUGIN_HTML"
                  PLUGIN_TMP="$(mktemp)"
                  if ! command -v htmlq > /dev/null && command -v brew > /dev/null; then
                    gum log -sl info 'Installing htmlq using Homebrew since it is a dependency for populating Firefox add-ons' && brew install htmlq
                  fi
                  cat "$PLUGIN_HTML" | htmlq '#redux-store-state' | sed 's/^<scri.*application\/json">//' | sed 's/<\/script>$//' > "$PLUGIN_TMP"
                  PLUGIN_ID="$(jq '.addons.bySlug["'"$FIREFOX_PLUGIN"'"]' "$PLUGIN_TMP")"
                  if [ "$PLUGIN_ID" != 'null' ]; then
                    PLUGIN_FILE_ID="$(jq -r '.addons.byID["'"$PLUGIN_ID"'"].guid' "$PLUGIN_TMP")"
                    if [ "$PLUGIN_FILE_ID" != 'null' ]; then
                      PLUGIN_URL="$(cat "$PLUGIN_HTML" | htmlq '.InstallButtonWrapper-download-link' --attribute href)"
                      PLUGIN_FILENAME="${PLUGIN_FILE_ID}.xpi"
                      PLUGIN_FOLDER="$(echo "$PLUGIN_FILENAME" | sed 's/.xpi$//')"
                      if [ ! -d "$SETTINGS_DIR/$SETTINGS_PROFILE/extensions/$PLUGIN_FOLDER" ]; then
                        gum log -sl info 'Downloading add-on XPI file for '"$PLUGIN_FILENAME"' ('"$FIREFOX_PLUGIN"')'
                        if [ ! -d "$SETTINGS_DIR/$SETTINGS_PROFILE/extensions" ]; then
                          mkdir -p "$SETTINGS_DIR/$SETTINGS_PROFILE/extensions"
                        fi
                        curl -sSL "$PLUGIN_URL" -o "$SETTINGS_DIR/$SETTINGS_PROFILE/extensions/$PLUGIN_FILENAME"
                        # Unzipping like this causes Firefox to complain about unsigned plugins
                        # TODO - figure out how to headlessly enable the extensions in such a way that is compatible with Flatpak / Snap
                        # using the /usr/lib/firefox/distribution/policies.json works but this is not compatible with Flatpak / Snap out of the box
                        # it seems since they do not have access to the file system by default. Also, using the policies.json approach forces
                        # all Firefox profiles to use the same extensions. Ideally, we should find a way to enable the extensions scoped
                        # to the user profile.
                        # gum log -sl info 'Unzipping '"$PLUGIN_FILENAME"' ('"$FIREFOX_PLUGIN"')'
                        # unzip "$SETTINGS_DIR/$SETTINGS_PROFILE/extensions/$PLUGIN_FILENAME" -d "$SETTINGS_DIR/$SETTINGS_PROFILE/extensions/$PLUGIN_FOLDER"
                        gum log -sl info 'Installed '"$FIREFOX_PLUGIN"''
                      fi
                    else
                      gum log -sl warn 'A null Firefox add-on filename was detected for '"$FIREFOX_PLUGIN"''
                    fi
                  else
                    gum log -sl warn 'A null Firefox add-on ID was detected for '"$FIREFOX_PLUGIN"''
                  fi
                done
              fi
            done
          fi
        done
      }
      firefoxSetup
    apt: firefox
    apt:debian: firefox-esr
    cask: firefox
    choco: firefox
    dnf: firefox
    flatpak: org.mozilla.firefox
    pacman: firefox
  firefox-profile:
    _bin: firefox-profile
    _github: https://github.com/saadtazi/firefox-profile-js
    _name: Firefox Profile CLI
    npm: firefox-profile
  firewall-applet:
    _bin: firewall-applet
    _github: false
    apt: firewall-applet
    dnf: firewall-applet
    pacman: firewall-applet
  firewall-config:
    _bin: firewall-config
    _github: false
    apt: firewall-config
    dnf: firewall-config
    pacman: firewall-config
  firewalld:
    _bin: firewall-cmd
    _github: https://github.com/firewalld/firewalld
    _name: FirewallD
    _notes: https://computingforgeeks.com/install-and-use-firewalld-on-ubuntu/
    _pre: |
      #!/usr/bin/env bash
      if command -v ufw > /dev/null; then sudo ufw disable; fi
    _service: firewalld
    apt: firewalld
    dnf: firewalld
    emerge: net-firewall/firewalld
    pacman: firewalld
    zypper: firewalld
  fiscript:
    _app: FiScript.app
    _bin: fiscript
    _github: https://github.com/Mortennn/FiScript
    _name: FiScript
    cask: fiscript
  fission:
    _bin: fission
    _desc: Fast and Simple Serverless Functions for Kubernetes
    _docs: https://fission.io/docs/
    _github: https://github.com/fission/fission
    _home: https://fission.io/
    _name: Fission
    exe: https://github.com/fission/fission/releases/download/v1.19.0/fission-v1.19.0-windows-amd64.exe
    github: github.com/fission/fission
    nix-env: nixos.fission
    script:darwin: cd /tmp && curl -sSLo fission https://github.com/fission/fission/releases/download/v1.19.0/fission-v1.19.0-darwin-amd64 && chmod +x fission && sudo mv fission /usr/local/bin/
    script:linux: cd /tmp && curl -sSLo fission https://github.com/fission/fission/releases/download/v1.19.0/fission-v1.19.0-linux-amd64 && chmod +x fission && sudo mv fission /usr/local/bin/
  fkill:
    _bin: fkill
    _desc: Fabulously kill processes. Cross-platform
    _github: https://github.com/sindresorhus/fkill
    _name: fkill
    npm: fkill-cli
  flake8:
    _bin: flake8
    _desc: Flake8 is a python tool that glues together pycodestyle, pyflakes, mccabe, and third-party plugins to check the style and quality of some python code.
    _docs: https://flake8.pycqa.org/en/latest/
    _github: https://github.com/PyCQA/flake8
    _home: https://flake8.pycqa.org/en/latest/
    _name: Flake8
    brew: flake8
    pipx: flake8
  flameshot:
    _app: flameshot.app
    _bin: flameshot
    _desc: Powerful yet simple to use screenshot software
    _docs: https://flameshot.org/docs/overview/overview/
    _github: https://github.com/flameshot-org/flameshot
    _home: https://flameshot.org/
    _name: Flameshot
    _scoopExtras: true
    apt: flameshot
    cask: flameshot
    choco: flameshot
    dnf: flameshot
    eopkg: flameshot
    flatpak: org.flameshot.Flameshot
    nix: nixos.flameshot
    pacman: flameshot
    port: flameshot
    scoop: flameshot
    snap: flameshot
    winget: flameshot
    xbps: flameshot
    zypper: flameshot
  flatseal:
    _bin: flatseal
    _github: https://github.com/tchx84/Flatseal
    flatpak: com.github.tchx84.Flatseal
  fleetctl:
    _bin: fleetctl
    _desc: Open-source platform for IT and security teams with thousands of computers. (Linux, macOS, Windows, ChromeOS, AWS, Google Cloud, Azure, data center, containers, IoT)
    _docs: https://fleetdm.com/docs
    _github: https://github.com/fleetdm/fleet
    _home: https://fleetdm.com/
    _name: Fleet CLI
    npm: fleetctl
  flow-launcher:
    _bin: null
    _desc: Quick file search & app launcher for Windows with community-made plugins
    _docs: https://www.flowlauncher.com/docs/
    _github: https://github.com/Flow-Launcher/Flow.Launcher
    _home: https://flowlauncher.com/
    _name: Flow Launcher
    choco: Flow-Launcher
    scoop: Flow-Launcher
    winget: Flow Launcher
  flutter:
    _bin: flutter
    _desc: '[Flutter](https://flutter.dev/) transforms the app development process. Build, test, and deploy beautiful mobile, web, desktop, and embedded apps from a single codebase'
    _docs: https://docs.flutter.dev/
    _github: https://github.com/flutter/flutter
    _home: https://flutter.dev/
    _name: Flutter
    cask: flutter
    choco: flutter
    snap: flutter --classic
    yay: flutter
  fly:
    _bin: fly
    _desc: CLI to manage Concourse CI installation
    _home: https://concourse-ci.org/
    _github: https://github.com/concourse/concourse
    _name: fly
    cask: fly
    github: https://github.com/concourse/concourse
    yay: fly-cli
  fm:
    _bin: fm
    _desc: Terminal file manager
    _github: https://github.com/mistakenelf/fm
    _name: fm
    github: github.com/mistakenelf/fm
    go: github.com/mistakenelf/fm@latest
  footloose:
    _bin: footloose
    _desc: Container Machines - Containers that look like Virtual Machines
    _docs: https://github.com/weaveworks/footloose
    _github: https://github.com/weaveworks/footloose
    _home: https://github.com/weaveworks/footloose
    _name: Footloose
    brew: weaveworks/tap/footloose
    go: github.com/weaveworks/footloose@master
  forever:
    _bin: forever
    _github: https://github.com/foreversd/forever
    _name: Forever
    npm: forever
  forklift:
    _bin: forklift
    _github: https://github.com/Johnn3y/Forklift
    flatpak: com.github.Johnn3y.Forklift
  fpm:
    _bin: fpm
    _deps:
      - fpm:deps
    _desc: '[fpm](https://github.com/jordansissel/fpm) (short for Effing package management) allows you to build packages for multiple platforms with great ease. The source of your package can be a gem, Python module, pear, directory, .tar.gz, rpm, deb, Node.js package, or pacman package. The target packages it supports are deb, rpm, solaris, freebsd, tar, directory, Mac OS X .pkg file, or pacman package.'
    _github: https://github.com/jordansissel/fpm
    _name: fpm
    ansible: professormanhattan.fpm
    gem: fpm
  fpm:deps:
    _github: false
    apt:
      - build-essential
      - ruby-dev
      - rubygems
    brew:
      - gnu-tar
    dnf:
      - gcc
      - libffi-devel
      - make
      - rpm-build
      - ruby-devel
      - rubygems
    pacman:
      - base-devel
      - gcc
  fq:
    _bin: fq
    _desc: jq for binary formats
    _github: https://github.com/wader/fq
    _name: fq
    apk: fq
    brew: wader/tap/fq
    github: github.com/wader/fq
    go: github.com/wader/fq@latest
    pacman: fq
    scoop: fq
  fritzing:
    _bin: fritzing
    _desc: Fritzing is an open-source hardware initiative that makes electronics accessible as a creative material for anyone. We offer a software tool, a community website and services in the spirit of Processing and Arduino, fostering a creative ecosystem that allows users to document their prototypes, share them with others, teach electronics in a classroom, and layout and manufacture professional PCBs.
    _docs: https://fritzing.org/learning/get-started
    _github: https://github.com/fritzing/fritzing-app
    _home: https://fritzing.org/
    _name: Fritzing
    _todo: Add installation source for macOS
    choco: fritzing
    flatpak: org.fritzing.Fritzing
  frpc:
    _bin: frpc
    _desc: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
    _docs: https://github.com/fatedier/frp
    _github: https://github.com/fatedier/frp
    _home: https://github.com/fatedier/frp
    _name: frpc (client)
    brew: frpc
  frps:
    _bin: frps
    _desc: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
    _docs: https://github.com/fatedier/frp
    _github: https://github.com/fatedier/frp
    _home: https://github.com/fatedier/frp
    _name: frps (server)
    brew: frps
  fselect:
    _bin: fselect
    _desc: Extension to find files with SQL-like queries
    _github: https://github.com/jhspetersson/fselect
    _name: fselect
    brew: fselect
    cargo: fselect
    choco: fselect
    github: github.com/jhspetersson/fselect
    yay: fselect
  fuego:
    _bin: fuego
    _desc: Fuego is a command line client for the Firestore database
    _docs: https://github.com/sgarciac/fuego
    _github: https://github.com/sgarciac/fuego
    _home: https://github.com/sgarciac/fuego
    _name: Fuego
    brew: fuego-firestore
    go: github.com/sgarciac/fuego@latest
    snap: fuego
  fury:
    _bin: fury
    _github: https://github.com/gemfury/gemfury
    _name: Fury
    brew: gemfury/tap/gemfury
  fuse:
    _github: https://github.com/libfuse/libfuse
    _bin: null
    _desc: '[macFUSE](https://osxfuse.github.io/) allows you to extend macOS via third party file systems.'
    _name: Fuse
    _when:cask: '! test -d /usr/local/Caskroom/macfuse && ! test -d "$HOMEBREW_PREFIX/Caskroom/macfuse"'
    ansible:darwin: professormanhattan.fuse
    apt:
      - fuse
      - libfuse-dev
    cask: macfuse
  fx:
    _bin: fx
    _desc: A terminal JSON viewer.
    _docs: https://github.com/antonmedv/fx/blob/master/doc/doc.md
    _github: https://github.com/antonmedv/fx
    _home: https://github.com/antonmedv/fx
    _name: FX
    brew: fx
    go: github.com/antonmedv/fx@latest
    pacman: fx
    pkg: fx
    scoop: fx
    snap: fx
  fzf:
    _bin: fzf
    _desc: "[fzf](https://github.com/junegunn/fzf) is a general-purpose command-line fuzzy finder. It's an interactive Unix filter for command-line that can be used with any list; files, command history, processes, hostnames, bookmarks, git commits, etc."
    _docs: https://github.com/junegunn/fzf#usage
    _github: https://github.com/junegunn/fzf
    _home: https://github.com/junegunn/fzf
    _name: fzf
    ansible: professormanhattan.fzf
    apk: fzf
    apt: fzf
    brew: fzf
    dnf:fedora: fzf
    nix: nixpkgs.fzf
    pacman: fzf
    pkg-freebsd: fzf
    pkg_add: fzf
    pkgin: fzf
    port: fzf
    xbps: fzf
    zypper: fzf
  gawk:
    _bin: gawk
    _desc: An implementation of the AWK programming language
    _docs: https://www.gnu.org/software/gawk/manual/
    _github: false
    _home: https://www.gnu.org/software/gawk/
    _name: gawk
    apt: gawk
    brew: gawk
    choco: gawk
    dnf: gawk
    pacman: gawk
    port: gawk
    scoop: gawk
  gcc:
    _bin: gcc
    _name: GCC
    _github: https://github.com/gcc-mirror/gcc
    apt: gcc
    brew: gcc
    dnf: gcc
    pacman: gcc
    port: gcc11
  gcloud:
    _bin: gcloud
    _github: false
    _desc: '[Google Cloud SDK](https://cloud.google.com/sdk) includes tools and libraries for interacting with Google Cloud products and services. With it, you can orchestrate virtual machine instances directly from your command line, manage Compute Engine networks/firewalls/disks, simulate Pub/Sub locally, and much more.'
    _name: Google Cloud SDK
    ansible: professormanhattan.googlecloudsdk
    cask: google-cloud-sdk
    choco: gcloudsdk
    snap: google-cloud-sdk --classic
    yay: google-cloud-sdk
  gcsf:
    _bin: gcsf
    _github: https://github.com/harababurel/gcsf
    _name: GCSF
    cargo: gcsf
  gdbgui:
    _bin: gdbgui
    _github: https://github.com/cs01/gdbgui
    pipx: gdbgui
  gdown:
    _bin: gdown
    _desc: Download a large file from Google Drive
    _github: https://github.com/wkentaro/gdown
    pipx: gdown
  gdrive:
    _bin: gdrive
    _desc: Google Drive CLI Client
    _docs: https://github.com/prasmussen/gdrive#usage
    _github: https://github.com/prasmussen/gdrive
    _home: https://github.com/prasmussen/gdrive
    _name: gdrive
    brew: gdrive
    choco: gdrive
    github: github.com/prasmussen/gdrive
    go: github.com/prasmussen/gdrive@latest
    port: gdrive
    scoop: gdrive
    yay: gdrive
  gdu:
    _bin: gdu
    _github: https://github.com/dundee/gdu
    _post:brew: |
      #!/usr/bin/env bash
      brew link --overwrite gdu
    _post:snap: |
      #!/usr/bin/env bash
      sudo snap connect gdu-disk-usage-analyzer:mount-observe :mount-observe
      sudo snap connect gdu-disk-usage-analyzer:system-backup :system-backup
      sudo snap alias gdu-disk-usage-analyzer.gdu gdu
    apt:debian: gdu
    brew: gdu
    go: github.com/dundee/gdu/v5/cmd/gdu@latest
    pacman: gdu
    snap: gdu-disk-usage-analyzer
  generator-ngx-rocket:
    _bin: ngx
    _github: https://github.com/ngx-rocket/generator-ngx-rocket
    _name: Angular
    npm: generator-ngx-rocket
  genymotion:
    _app: Genymotion.app
    _github: false
    cask: genymotion
    choco: genymotion
    # TODO: Figure out how to install on Android
  gfi:
    _bin: gfi
    _desc: Google Font Installer is a NodeJS module/CLI that lets you Search, Download and Install fonts offered by Google Web Fonts
    _github: https://github.com/lordgiotto/google-font-installer
    npm: google-font-installer
  gh:
    _bin: gh
    _desc: '[gh](https://cli.github.com/) is GitHub on the command line. It brings pull requests, issues, and other GitHub concepts to the terminal next to where you are already working with git and your code.'
    _docs: https://cli.github.com/manual/
    _github: https://github.com/cli/cli
    _home: https://cli.github.com/
    _name: Github CLI
    ansible: professormanhattan.gh
    brew: gh
    choco: gh
    port: gh
    scoop: gh
    winget: GitHub.cli
  ghcup:
    _bin: ghcup
    _github: https://github.com/haskell/ghcup-hs
    _name: GHCup
    brew: ghcup
  ghorg:
    _bin: ghorg
    _desc: "[ghorg](https://github.com/gabrie30/ghorg) allows you to quickly clone all of an org's, or user's repositories into a single directory."
    _github: https://github.com/gabrie30/ghorg
    _name: ghorg
    _post: |
      #!/usr/bin/env bash
      ghorg reclone
    ansible: professormanhattan.ghorg
    brew: gabrie30/utils/ghorg
    github: github.com/gabrie30/ghorg
    go: github.com/gabrie30/ghorg@latest
    yay: ghorg
  gifsicle:
    _bin: gifsicle
    _github: https://github.com/kohler/gifsicle
    _name: Gifsicle
    apt: gifsicle
    brew: gifsicle
    choco: gifsicle
    dnf: gifsicle
    pacman: gifsicle
    port: gifsicle
    scoop: gifsicle
  gimp:
    _app: GIMP.app
    _bin: gimp
    _desc: '[GIMP](https://www.gimp.org/) is a free and open-source raster graphics editor used for image manipulation and image editing, free-form drawing, transcoding between different image file formats, and more specialized tasks. GIMP is released under GPLv3+ license and is available for Linux, macOS, and Microsoft Windows.'
    _docs: https://www.gimp.org/docs/
    _github: https://github.com/GNOME/gimp
    _home: https://www.gimp.org/
    _name: GIMP
    ansible: professormanhattan.gimp
    apt: gimp
    cask: gimp
    choco: gimp
    dnf: gimp
    flatpak: org.gimp.GIMP
    pacman: gimp
    snap: gimp
  gist:
    _bin: gist
    _github: https://github.com/defunkt/gist
    _desc: '[gist](https://github.com/defunkt/gist) provides a command that you can use from your terminal to upload content to https://gist.github.com/. This role will optionally set up a dotfile that handles authentication if you pass the appropriate configuration.'
    _name: gist
    ansible: professormanhattan.gist
    gem: gist
  git:
    _bin: git
    _github: https://github.com/git/git
    apk: git
    apt: git
    brew: git
    dnf: git
  git-branchless:
    _bin: git-branchless
    _github: https://github.com/arxanas/git-branchless
    _name: Git Branchless
    _todo: |
      echo "TODO: Consider implementing:"
      echo "echo >> ~/.bashrc "alias git='git-branchless wrap --'""
    apk: git-branchless
    brew: git-branchless
    cargo: --locked git-branchless
    pacman: git-branchless
    port: git-branchless
    scoop: git-branchless
  git-bug:
    _bin: git-bug
    _github: https://github.com/MichaelMure/git-bug
    _name: Git Bug
    brew: git-bug
    pkg-freebsd: git-bug
    scoop: git-bug
  git-extras:
    _bin: git-extras
    _desc: '[Git Extras](https://github.com/tj/git-extras) includes extra git utilities that include repo summary, repl, changelog population, author commit percentages, and more.'
    _name: git-extras
    _github: https://github.com/tj/git-extras
    ansible:windows: professormanhattan.gitextras
    apt: git-extras
    brew: git-extras
    dnf: git-extras
    pacman: git-extras
  git-filter-repo:
    _bin: git-filter-repo
    _github: https://github.com/newren/git-filter-repo
    _desc: '[gitfilterrepo](https://github.com/newren/git-filter-repo) is a versatile tool for rewriting history'
    ansible: professormanhattan.gitfilterrepo
    brew: git-filter-repo
    pipx: git-filter-repo
  git-jump:
    _bin: git-jump
    _github: https://github.com/mykolaharmash/git-jump
    _name: Git Jump
    brew: mykolaharmash/git-jump/git-jump
    npm: git-jump
  git-lfs:
    _bin: git-lfs
    _github: https://github.com/git-lfs/git-lfs
    _deps:
      - git
    _desc: Git LFS (Large File Storage) replaces large files such as audio samples, videos, datasets, and graphics with text pointers inside Git, while storing the file contents on a remote server like GitHub.com or GitHub Enterprise.
    _name: Git LFS
    _post: |
      #!/usr/bin/env bash
      sudo git lfs install --system
      git lfs install
    ansible: professormanhattan.gitlfs
    brew: git-lfs
    scoop: git-lfs
  git-notify:
    _bin: git-notify
    _desc: Communicate important updates to your team via git commit messages
    _github: https://github.com/jevakallio/git-notify
    _name: Git Notify
    npm: git-notify
  git-open:
    _bin: git-open
    _desc: Open the repo website (GitHub, GitLab, Bitbucket) in your browser
    _github: https://github.com/paulirish/git-open
    npm: git-open
  git-secret:
    _bin: git-secret
    _desc: '[git-secret](https://git-secret.io/) is a bash tool to store your private data inside a git repo. How’s that? Basically, it just encrypts, using GPG, the tracked files with the public keys of all the users that you trust. So everyone of them can decrypt these files using only their personal secret key.'
    _docs: https://git-secret.io/#commands
    _epel: true
    _github: https://github.com/sobolevn/git-secret
    _home: https://git-secret.io/
    _name: Git Secret
    ansible:darwin: professormanhattan.gitsecret
    ansible:linux: professormanhattan.gitsecret
    apt: git-secret
    brew: git-secret
    dnf:fedora: git-secret
  git-stats:
    _bin: git-stats
    _desc: '[gitstats](https://github.com/IonicaBizau/git-stats) can track and display local git statistics. It includes the capability of displaying a GitHub-like contributions calendar in the terminal.'
    _github: https://github.com/IonicaBizau/git-stats
    _name: git-stats
    ansible: professormanhattan.gitstats
    npm: git-stats
  git-subrepo:
    _bin: git-subrepo
    _github: https://github.com/ingydotnet/git-subrepo
    _name: Git Sub Repo
    brew: git-subrepo
  git-town:
    _bin: git-town
    _github: https://github.com/git-town/git-town
    _name: Git Town
    _post: |
      #!/usr/bin/env bash
      git town aliases add
    brew: git-town
    go: github.com/git-town/git-town@latest
  gitdock:
    _app: GitDock.app
    _bin: null
    _desc: '[GitDock](https://gitlab.com/mvanremmerden/gitdock) is an app that displays all your GitLab activities in one place. Instead of the GitLab typical project- or group-centric approach, it collects all your information from a user-centric perspective.'
    _docs: https://gitlab.com/mvanremmerden/gitdock#how-to-use-gitdock-%EF%B8%8F
    _github: https://gitlab.com/mvanremmerden/gitdock
    _home: https://gitlab.com/mvanremmerden/gitdock
    _name: GitDock
    ansible:darwin: professormanhattan.gitdock
    cask: gitdock
  github-classroom-assistant:
    _app: Classroom Assistant.app
    _bin: github-classroom-assistant
    _github: https://github.com/education/classroom-assistant
    _name: GitHub Classroom Assistant
    apt: https://github.com/education/classroom-assistant/releases/download/v2.0.4/classroom-assistant_2.0.4_amd64.deb
    cask: classroom-assistant
    dnf: https://github.com/education/classroom-assistant/releases/download/v2.0.4/classroom-assistant-2.0.4-1.x86_64.rpm
    exe: https://github.com/education/classroom-assistant/releases/download/v2.0.4/Classroom.Assistant-2.0.4.Setup.exe
  github-desktop:
    _app: GitHub Desktop.app
    _bin: github
    _github: https://github.com/desktop/desktop
    cask: github
    choco: github-desktop
    flatpak: io.github.shiftey.Desktop
  github-runner:
    _bin: false
    _desc: '[GitHub Runner](https://docs.github.com/en/actions/hosting-your-own-runners) is a system that you deploy and manage to execute jobs from GitHub Actions on GitHub.com.'
    _docs: https://docs.github.com/en/actions/hosting-your-own-runners
    _github: https://github.com/actions/runner
    _home: https://docs.github.com/en/actions/hosting-your-own-runners
    _name: GitHub Runner
    _post: |
      #!/usr/bin/env bash
      # @file GitHub Runner Registration
      # @brief Registers a GitHub action runner with GitHub
      # @description
      #     This script registers the host as a self-hosted GitHub runner with scope set
      #     in the `.user.github.runnerOrg` input in the `.chezmoi.yaml.tmpl` file. If your organization is `megabyte-labs`, then
      #     the value of `.user.github.runnerOrg` should be `megabyte-labs`. A self-hosted runner is an application
      #     that that allows you to run tasks from GitHub CI.
      #
      #     This script adds 3 labels to the runner: self-hosted, _hostname_, and _operating-system family_.
      #
      #     The script automatically acquires the GitHub Action runner token (as long as you specify your `.user.github.runnerOrg` value in `.chezmoi.yaml.tmpl`).
      #     In order to authenticate with GitHub, you should have the `GITHUB_TOKEN` environment variable in place with the appropriate permissions
      #     specified when you generate the token.
      #
      #     ## Links
      #
      #     * [Secrets / Environment variables documentation](https://install.doctor/docs/customization/secrets)


      ### Check if GitHub runner is installed
      if [ -f "${XDG_DATA_HOME:-$HOME/.local/share}/github-runnerconfig.sh" ]; then
        if [ -f "${XDG_DATA_HOME:-$HOME/.local/share}/github-runner/.runner" ]; then
          gum log -sl info "GitHub Actions runner is already configured (${XDG_DATA_HOME:-$HOME/.local/share}/github-runner/.runner file is present)"
        else
          gum log -sl info 'Creating runner configuration'
          ### Configure labels
          LABELS="self-hosted,{{ .chezmoi.hostname }},{{ .host.distro.family }}"
          if [ '{{ .host.distro.family }}' != '{{ .host.distro.id }}' ]; then
            LABELS="${LABELS},{{ .host.distro.id }}"
          fi
          if command -v VirtualBox > /dev/null; then
            LABELS="${LABELS},virtualbox"
          fi
          if command -v docker > /dev/null; then
            LABELS="${LABELS},docker"
          fi

          if [ -n "$GITHUB_TOKEN" ]; then
            if command -v jq > /dev/null; then
              ### Acquire token
              gum log -sl info 'Acquiring runner token'
              RUNNER_TOKEN="$(curl -sSL -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer $GITHUB_TOKEN" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/orgs/{{ .user.github.runnerOrg }}/actions/runners/registration-token | jq -r '.token')"
              ### Generate the configuration
              gum log -sl info 'Joining GitHub runner to https://github.com/{{ .user.github.runnerOrg }}'
              "${XDG_DATA_HOME:-$HOME/.local/share}/github-runner/config.sh" --unattended --url https://github.com/{{ .user.github.runnerOrg }} --token "$RUNNER_TOKEN" --labels "$LABELS" || EXIT_CODE=$?
              if [ -n "$EXIT_CODE" ]; then
                gum log -sl error 'GitHub runner configuration failed' && exit 1
              fi
              ### Install / start the service
              gum log -sl info 'Configuring runner service'
              "${XDG_DATA_HOME:-$HOME/.local/share}/github-runner/svc.sh" install && gum log -sl info 'Successfully installed the GitHub Actions runner service'
              gum log -sl info 'Starting runner service'
              "${XDG_DATA_HOME:-$HOME/.local/share}/github-runner/svc.sh" start && gum log -sl info 'Started the GitHub Actions runner service'
            else
              gum log -sl warn 'jq is required by the GitHub runner configuration script'
            fi
          else
            gum log -sl warn 'The GITHUB_TOKEN environment variable is not present'
          fi
        fi
      else
        gum log -sl info "The GitHub Actions runner installation is not present at ${XDG_DATA_HOME:-$HOME/.local/share}/github-runner"
      fi
    _when: '! test -d "${XDG_DATA_HOME:-$HOME/.local/share}/github-runner"'
    script: |
      #!/usr/bin/env bash
      if [ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/private.sh" ]; then
        source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/private.sh"
      fi
      if [ -n "$GITHUB_TOKEN" ]; then
        RELEASES="$(curl -sSL --compressed --header "Authorization: Bearer $GITHUB_TOKEN" "https://api.github.com/repos/actions/runner/releases/latest")"
      else
        RELEASES="$(curl -sSL --compressed "https://api.github.com/repos/actions/runner/releases/latest")"
      fi
      LATEST_VERSION="$(echo "$RELEASES" | grep -o '"tag_name": "[^"]*' | grep -o '[^"]*$')"
      ARCHITECTURE="$(uname -m | sed 's/86_//' | sed 's/v7l//')"
      OS_FAMILY="$(test -d /Applications && echo osx || echo linux)"
      curl -sSL "https://github.com/actions/runner/releases/download/$LATEST_VERSION/actions-runner-${OS_FAMILY}-${ARCHITECTURE}-${LATEST_VERSION:1}.tar.gz" > "/tmp/actions-runner-${OS_FAMILY}-${ARCHITECTURE}-${LATEST_VERSION:1}.tar.gz"
      mkdir -p "${XDG_DATA_HOME:-$HOME/.local/share}/github-runner"
      tar xzf "/tmp/actions-runner-${OS_FAMILY}-${ARCHITECTURE}-${LATEST_VERSION:1}.tar.gz" -C "${XDG_DATA_HOME:-$HOME/.local/share}/github-runner"
      chown -Rf "$USER" "${XDG_DATA_HOME:-$HOME/.local/share}/github-runner"
      rm -f "/tmp/actions-runner-${OS_FAMILY}-${ARCHITECTURE}-${LATEST_VERSION:1}.tar.gz"
  gitify:
    _app: Gitify.app
    _bin: null
    _description: GitHub notifications on the menu bar
    _github: https://github.com/manosim/gitify
    _home: https://github.com/manosim/gitify
    _name: Gitify
    cask: gitify
    github: github.com/manosim/gitify
    yay: gitify-bin
  gitkraken:
    _app: GitKraken.app
    _bin: gitkraken
    _desc: '[GitKraken](https://www.gitkraken.com/) is a software product for developers and dev teams. The Git Client is a leading software tool helping developers maximize their productivity with a beautiful, intuitive GUI.'
    _docs: https://support.gitkraken.com/
    _github: Not open-source
    _home: https://www.gitkraken.com/
    _name: GitKraken
    ansible: professormanhattan.gitkraken
    cask: gitkraken
    choco: gitkraken
    flatpak: com.axosoft.GitKraken
    snap: gitkraken --classic
  gitlab-runner:
    _bin: gitlab-runner
    _desc: '[GitLab Runner](https://docs.gitlab.com/runner/) is an application that works with GitLab CI/CD to run jobs in a pipeline.'
    _docs: https://docs.gitlab.com/runner/
    _github: https://github.com/gitlabhq/gitlab-runner
    _home: https://gitlab.com/gitlab-org/gitlab-runner
    _name: Gitlab Runner
    _post: "#!/usr/bin/env bash\n# @file GitLab Runner Configuration\n# @brief Registers GitLab Runner(s) with the given GitLab instance\n# @description\n#     This script registers the runner(s) with the given GitLab instance. SaaS GitLab can also be provided as the GitLab instance to register\n#     the runners with. The script configures the runners to use either Docker or VirtualBox Executor. Refer to\n#     [this page](https://docs.gitlab.com/runner/executors/docker.html) and [this page](https://docs.gitlab.com/runner/executors/virtualbox.html)\n#     for details about the available configuration settings.\n#\n#     Runners are always tagged with these 2 values: `hostname` and `docker`/`virtualbox` depending on the type of executor. If a list of tags is provided,\n#     the runner is tagged with these values in addition to the above mentioned values. If the list of tags is empty, no additonal tags are added and the\n#     runner is configured to pickup `untagged` jobs.\n#\n#     Configuring other type of executors is not supported by this script.\n#\n#     ## Secrets\n#\n#     The following chart details the secret(s) that are needed to configure the runner:\n#\n#     | Secret                 | Description                                                |\n#     |------------------------|------------------------------------------------------------|\n#     | `GITLAB_RUNNER_TOKEN`  | The token generated when the runner was created in GitLab  |\n#\n#     For more information about storing secrets like SSH keys and API keys, refer to our Secrets documentation provided below\n#\n#     ## Configuration Variables\n#\n#     The following chart details the input variable(s) that are used to determine the configuration of the runner:\n#\n#     | Variable            | Description                                                                                              |\n#     |---------------------|----------------------------------------------------------------------------------------------------------|\n#     | `glurl`             | The URL of the Gitlab instance to associate the Runner with                                              |\n#     | `runnerImage`       | Docker image to use to configure the runner. Needed only when configuring `Docker` executor              |\n#     | `runnerDescription` | Description of this runner                                                                               |\n#     | `runnerTags`        | Comma separated list of tags for this runner. See details in the description for more info               |\n#     | `baseVM`            | Name of the VirtualBox VM to use for creating runner. Needed only when configuring `VirtualBox` executor |\n#\n#     ## Links\n#\n#     * [Secrets / Environment variables documentation](https://install.doctor/docs/customization/secrets)\n\n### Check if Docker is installed and operational so Docker executor(s) can be registered\nif command -v docker > /dev/null && docker run --rm hello-world > /dev/null; then\n  HAS_DOCKER=1\nelse\n  HAS_DOCKER=0\n  gum log -sl warn 'Docker is not installed or it is not operational'\nfi\n\n### Check if VirtualBox is installed and operational so VirtualBox executor(s) can be registered\nif command -v VirtualBox > /dev/null; then\n  HAS_VIRTUALBOX=1\nelse\n  HAS_VIRTUALBOX=0\n  gum log -sl warn 'VirtualBox is not installed'\nfi\n\n### Configure runners if Docker or VirtualBox is installed\nif [ $HAS_DOCKER -eq 0 ] && [ $HAS_VIRTUALBOX -eq 0 ]; then\n  gum log -sl warn 'Docker and VirtualBox are not installed. Not registering runner(s).'\nelse\n  ### Run logic if gitlab-runner is installed\n  if command -v gitlab-runner > /dev/null; then\n    ### Populate appropriate token\n    case \"$OSTYPE\" in\n      solaris*) echo \"TODO\" ;;\n      darwin*)  GITLAB_RUNNER_TOKEN=\"{{ if (stat (joinPath .chezmoi.sourceDir \".chezmoitemplates\" \"secrets\" \"GITLAB_RUNNER_TOKEN_DARWIN\")) }}{{ includeTemplate \"secrets/GITLAB_RUNNER_TOKEN_DARWIN\" | decrypt | trim }}{{ else }}{{ env \"GITLAB_RUNNER_TOKEN_DARWIN\" }}{{ end }}\" ;; \n      linux*)   GITLAB_RUNNER_TOKEN=\"{{ if (stat (joinPath .chezmoi.sourceDir \".chezmoitemplates\" \"secrets\" \"GITLAB_RUNNER_TOKEN_LINUX\")) }}{{ includeTemplate \"secrets/GITLAB_RUNNER_TOKEN_LINUX\" | decrypt | trim }}{{ else }}{{ env \"GITLAB_RUNNER_TOKEN_LINUX\" }}{{ end }}\" ;;\n      bsd*)     echo \"TODO\" ;;\n      msys*)    GITLAB_RUNNER_TOKEN=\"{{ if (stat (joinPath .chezmoi.sourceDir \".chezmoitemplates\" \"secrets\" \"GITLAB_RUNNER_TOKEN_WINDOWS\")) }}{{ includeTemplate \"secrets/GITLAB_RUNNER_TOKEN_WINDOWS\" | decrypt | trim }}{{ else }}{{ env \"GITLAB_RUNNER_TOKEN_WINDOWS\" }}{{ end }}\" ;;\n      cygwin*)  GITLAB_RUNNER_TOKEN=\"{{ if (stat (joinPath .chezmoi.sourceDir \".chezmoitemplates\" \"secrets\" \"GITLAB_RUNNER_TOKEN_WINDOWS\")) }}{{ includeTemplate \"secrets/GITLAB_RUNNER_TOKEN_WINDOWS\" | decrypt | trim }}{{ else }}{{ env \"GITLAB_RUNNER_TOKEN_WINDOWS\" }}{{ end }}\" ;;\n      *)        echo \"unknown: $OSTYPE\" ;;\n    esac\n\n    ### Check if Runner Token value is present before attempting to register runner(s)\n    if [ $GITLAB_RUNNER_TOKEN != \"\" ]; then\n      ### Registering runners\n      {{ $cmd := `gitlab-runner register \\\n        --non-interactive \\\n        --token $GITLAB_RUNNER_TOKEN \\` }}\n      ### Register Docker based runners if Docker is installed and operational\n      if [ $HAS_DOCKER -eq 1 ]; then\n        gum log -sl info 'Registering GitLab Runner(s) that use Docker executor'\n        {{- range .host.gitlabRunners }}\n        {{- if index . \"runnerImage\" }}\n        {{- $cmd }}\n        --url {{ .glurl }} \\\n        --executor \"docker\" \\\n        --description \"{{ .runnerDescription }} - on {{ $.chezmoi.hostname }}\" \\\n        --docker-image {{ .runnerImage }} \\\n        {{ if and .runnerTags (gt (len .runnerTags) 0) }}--tag-list \"{{ .runnerTags }},{{ $.chezmoi.hostname }},docker\"\n        {{- else }}--tag-list \"{{ $.chezmoi.hostname }},docker\" --run-untagged{{ end }} || echo 'Runner registration failed\"\n        {{ end -}}\n        {{ end }}\n      fi\n    \n      ### Register VirtualBox based runners if VirtualBox is installed\n      if [ $HAS_VIRTUALBOX -eq 1 ]; then\n        gum log -sl info 'Registering GitLab Runner(s) that use VirtualBox executor'\n        {{- range .host.gitlabRunners }}\n        {{- if index . \"baseVM\" }}\n        {{- $cmd }}\n        --url {{ .glurl }} \\\n        --executor \"virtualbox\" \\\n        --description \"{{ .runnerDescription }} - on {{ $.chezmoi.hostname }}\" \\\n        --virtualbox-base-name \"{{ .baseVM }}\" \\\n        {{ if and .runnerTags (gt (len .runnerTags) 0) }}--tag-list \"{{ .runnerTags }},{{ $.chezmoi.hostname }},virtualbox\"\n        {{- else }}--tag-list \"{{ $.chezmoi.hostname }},virtualbox\" --run-untagged{{ end }} || echo 'Runner registration failed\"\n        {{ end -}}\n        {{ end }}\n      fi\n    else\n      gum log -sl warn 'GITLAB_RUNNER_TOKEN is not set. Not registering runner(s)'\n    fi\n  else\n    gum log -sl warn 'gitlab-runner is not installed or is not available in PATH'\n  fi\nfi\n"
    _service: gitlab-runner
    _serviceEnabled: true
    ansible: professormanhattan.gitlabrunner
    brew: gitlab-runner
    choco: gitlab-runner
    pacman: gitlab-runner
    port: gitlab-runner
    scoop: gitlab-runner
  gitlabform:
    _bin: gitlabform
    _github: https://github.com/gitlabform/gitlabform/
    pipx: gitlabform
  gitleaks:
    _bin: gitleaks
    _desc: Extension to scan git repos (or files) for secrets using regex and entropy
    _github: https://github.com/zricethezav/gitleaks
    _name: gitleaks
    brew: gitleaks
    dnf:fedora: gitleaks
    github: github.com/zricethezav/gitleaks
    pkg: gitleaks
    yay: gitleaks
  gitmoji-cli:
    _bin: gitmoji
    _github: https://github.com/carloscuesta/gitmoji-cli
    _npm: Gitmoji CLI
    brew: gitmoji
    npm: gitmoji-cli
  gitomatic:
    _bin: gitomatic
    _desc: '[git-o-matic](https://github.com/muesli/gitomatic) is a tool to monitor git repositories and automatically pull & push changes'
    _github: https://github.com/muesli/gitomatic
    _name: git-o-matic
    _post: "#!/usr/bin/env bash\n# @file git-o-matic Configuration\n# @brief Starts service on Linux systems to monitor Git repositories\n# @description\n#     git-o-matic is a tool to monitor git repositories and automatically pull/push changes. Multiple repositories can be\n#     monitored by running multiple instances of `gitomatic`. This script supports SSH Key based authentication only.\n#\n#     If the `gitomatic` program is installed, this script creates and starts a Systemd service to monitor the repositories.\n#     The repositories are cloned if they are not available at the path.\n#\n#     ## Notes\n#     * The author name and email address for commits are the same as `.user.name` and `.user.email` (configured in the `home/.chezmoi.yaml.tmpl` file)\n#     * `gitomatic` automatically pushes and pulls changes. The script does not change this behavior\n#     * `gitomatic` checks for changes every minute. This setting is not changed by this script\n#     * The User's default SSH Key is used for authentication\n#\n#     ## Links\n#\n#     * [gitomatic GitHub repository](https://github.com/muesli/gitomatic/)\n#     * [Systemd Unit file](https://github.com/megabyte-labs/install.doctor/blob/master/home/dot_config/gitomatic/gitomatic.service.tmpl)\n#     * [Helper script](https://github.com/megabyte-labs/install.doctor/blob/master/home/dot_local/bin/executable_gitomatic_service.tmpl)\n\nif command -v gitomatic > /dev/null; then\n  ### Copy bin to /usr/local/bin\n  gum log -sl info \"Copying $HOME/.local/bin/gitomatic-service to /usr/local/bin/gitomatic-service\" && sudo cp -f \"$HOME/.local/bin/gitomatic-service\" /usr/local/bin/gitomatic-service\n  \n  ### Copy gitomatic to global directory\n  if [ ! -f /usr/local/bin/gitomatic ]; then\n    gum log -sl info 'Copying gitomatic executable to /usr/local/bin/gitomatic' && sudo cp -f \"$(which gitomatic)\" /usr/local/bin/gitomatic\n  fi\n\n  if [ -d /Applications ] && [ -d /System ]; then\n    ### macOS\n    gum log -sl info 'Copying gitomatic plist file to /Library/LaunchDaemons' && sudo cp -f \"${XDG_CONFIG_HOME:-$HOME/.config}/gitomatic/com.github.muesli.gitomatic.plist\" /Library/LaunchDaemons/com.github.muesli.gitomatic.plist\n    if ! sudo launchctl list | grep 'gitomatic' > /dev/null; then\n      gum log -sl info 'Running sudo launchctl load /Library/LaunchDaemons/com.github.muesli.gitomatic.plist' && sudo launchctl load /Library/LaunchDaemons/com.github.muesli.gitomatic.plist\n      gum log -sl info 'Running sudo launchctl start /Library/LaunchDaemons/com.github.muesli.gitomatic.plist' && sudo launchctl start /Library/LaunchDaemons/com.github.muesli.gitomatic.plist\n    else\n      gum log -sl info \"gitomatic services appear to already be loaded\"\n    fi\n  else\n    ### Linux\n    gum log -sl info 'Copying gitomatic systemd unit file to /etc/systemd/system/' && sudo cp -f \"${XDG_CONFIG_HOME:-$HOME/.config}/gitomatic/gitomatic.service\" /etc/systemd/system/gitomatic.service\n    gum log -sl info 'Reloading systemd daemon' && sudo systemctl daemon-reload\n    gum log -sl info 'Enabling and starting gitomatic service' && sudo systemctl enable --now gitomatic\n  fi\nelse\n  gum log -sl info 'gitomatic is not installed or it is not available in PATH'\nfi\n"
    ansible: professormanhattan.gitomatic
    github: github.com/muesli/gitomatic
    go: github.com/muesli/gitomatic@latest
    pacman: gitomatic
    scoop: gitomatic
  gitql:
    _bin: gitql
    _github: https://github.com/filhodanuvem/gitql
    _name: GitQL
    brew: gitql
  gitui:
    _bin: gitui
    _desc: Blazing fast TUI for git written in Rust
    _docs: https://github.com/extrawurst/gitui
    _github: https://github.com/extrawurst/gitui
    _home: https://github.com/extrawurst/gitui
    _name: Git UI
    brew: gitui
    cargo: gitui
    choco: delta
    dnf:fedora: gitui
    nix: nixpkgs.gitui
    pacman: gitui
    pkg: gitui
    port: gitui
    scoop: gitui
    winget: gitui
  gixy:
    _bin: gixy
    _github: https://github.com/yandex/gixy
    pipx: gixy
  glab:
    _bin: glab
    _desc: An open-source GitLab command line tool bringing GitLab's cool features to your command line
    _github: https://github.com/profclems/glab
    _name: glab
    apk: glab
    brew: glab
    github: github.com/profclems/glab
    scoop: glab
    # Only available on edge release (i.e. sudo snap install --edge glab)
    # snap: glab
    yay: gitlab-glab-bin
  glances:
    _bin: glances
    _github: https://github.com/nicolargo/glances
    _desc: '[Glances](https://github.com/nicolargo/glances) is a cross-platform monitoring tool which aims to present a maximum of information in a minimum of space through a curses or a web interface. It can adapt the displayed information depending on the terminal size dynamically. It is a top/htop alternative for Linux, BSD, macOS, and even Windows.'
    _name: Glances
    _post:pipx: |
      #!/usr/bin/env bash
      pipx inject glances glances[all]
    ansible: professormanhattan.glances
    apt:ubuntu:
      - python3-dev
      - python3-jinja2
      - python3-pip
      - python3-psutil
      - python3-setuptools
      - gcc
      - glances
      - lm-sensors
      - wireless-tools
    brew: glances
    dnf:
      - gcc
      - glances
      - lm_sensors
      - python3-devel
      - python3-pip
    pacman:
      - glances
      - python
      - lm_sensors
      - wireless_tools
    pipx: glances
    port: glances
  glen:
    _bin: glen
    _desc: A CLI to gather GitLab project and group variables
    _github: https://github.com/lingrino/glen
    go: github.com/lingrino/glen@latest
  glow:
    _bin: glow
    _desc: Glow is a terminal based markdown reader designed from the ground up to bring out the beauty—and power—of the CLI
    _github: https://github.com/charmbracelet/glow
    _name: glow
    brew: glow
    github: github.com/charmbracelet/glow
    pkg: glow
    scoop: glow
    yay: glow
  glusterfs:
    # TODO - The master / peer logic still needs to be implemented in the .chezmoiscripts
    _bin: gluster
    _desc: '[Gluster](https://www.gluster.org/) is a free and open source software scalable network filesystem. Gluster is a software defined distributed storage that can scale to several petabytes. It provides interfaces for object, block and file storage.'
    _docs: https://docs.gluster.org/en/latest/
    _github: https://github.com/gluster/glusterfs
    _home: https://www.gluster.org/
    _name: GlusterFS
    _service: glusterd
    # ansible:linux: professormanhattan.glusterfs
    apt: glusterfs-server
    dnf:fedora: glusterfs-server
    pacman: glusterfs
  gnome:
    _bin: gnome
    _github: https://github.com/GNOME/gnome-shell
    _name: GNOME
    apt: gnome
    dnf: gnome
    pacman: gnome
    zypper: gnome
  gnome-boxes:
    _bin: gnome-boxes
    _github: https://github.com/GNOME/gnome-boxes
    _desc: GNOME Boxes is an application of the GNOME Desktop Environment, used to access virtual systems. Boxes uses the QEMU, KVM, and libvirt virtualization technologies
    _docs: https://help.gnome.org/users/gnome-boxes/stable/
    _home: https://apps.gnome.org/app/org.gnome.Boxes/
    _name: GNOME Boxes
    apt: gnome-boxes
    dnf: gnome-boxes
    flatpak: org.gnome.Boxes
    pacman: gnome-boxes
  gnome-calendar:
    _bin: calendar
    _github: https://github.com/GNOME/gnome-calendar
    flatpak: org.gnome.Calendar
  gnome-document-viewer:
    _bin: document-viewer
    _github: https://github.com/GNOME/evince
    flatpak: org.gnome.Evince
  gnome-extension-manager:
    _bin: gnome-extension-manager
    _github: https://github.com/mjakeman/extension-manager
    flatpak: com.mattjakeman.ExtensionManager
  gnome-eyedropper:
    _github: https://github.com/FineFindus/eyedropper
    _bin: eyedropper
    flatpak: com.github.finefindus.eyedropper
  gnome-file-roller:
    _github: https://github.com/GNOME/file-roller
    _bin: file-roller
    flatpak: org.gnome.FileRoller
  gnome-image-viewer:
    _bin: image-viewer
    _github: https://github.com/GNOME/eog
    flatpak: org.gnome.eog
  gnome-network-displays:
    _bin: network-displays
    _github: https://github.com/GNOME/gnome-network-displays
    flatpak: org.gnome.NetworkDisplays
  gnome-passwords-keys:
    _bin: seahorse
    _github: https://github.com/GNOME/seahorse
    flatpak: org.gnome.seahorse.Application
  gnome-photos:
    _bin: photos
    _github: https://github.com/GNOME/gnome-photos
    flatpak: org.gnome.Photos
  gnome-sound-recorder:
    _bin: sound-recorder
    _github: false
    _gitlab: https://gitlab.gnome.org/World/vocalis
    flatpak: org.gnome.SoundRecorder
  gnome-text-editor:
    _bin: text-editor
    _github: https://github.com/GNOME/gnome-text-editor
    flatpak: org.gnome.TextEditor
  gnome-tweaks:
    _bin: gnome-tweaks
    _name: GNOME Tweaks
    _github: https://github.com/GNOME/gnome-tweaks
    apt: gnome-tweaks
    dnf: gnome-tweaks
    pacman: gnome-tweaks
  gnome-video-player:
    _bin: video-player
    _github: https://github.com/GNOME/totem
    flatpak: org.gnome.Totem
  gnome-weather:
    _bin: gnome-weather
    _github: https://github.com/GNOME/gnome-weather
    flatpak: org.gnome.Weather
  gnu:
    _github: false
    _deps:darwin:
      - coreutils
      - findutils
      - gawk
      - gnu-indent
      - gnu-tar
      - gnu-sed
      - gnutls
      - grep
  gnu-indent:
    _bin: gindent
    _github: false
    brew: gnu-indent
  gnu-sed:
    _bin: gsed
    _github: false
    brew: gnu-sed
  gnu-tar:
    _bin: gtar
    _github: false
    brew: gnu-tar
  gnutls:
    _github: false
    _bin: gnutls-certtool
    brew: gnutls
  go:
    _bin: go
    _desc: '[Go](https://golang.org/) is a statically typed, compiled programming language designed at Google by Robert Griesemer, Rob Pike, and Ken Thompson. Go is syntactically similar to C, but with memory safety, garbage collection, structural typing, and CSP-style concurrency.'
    _docs: https://go.dev/doc/
    _github: https://github.com/golang/go
    _home: https://go.dev/
    _name: Go
    ansible: professormanhattan.go
    apt: golang-go
    brew: go
    choco: golang
    pacman: go
    port: go
    scoop: go
    snap: go --classic
  go-chromecast:
    _bin: go-chromecast
    _desc: CLI for Google Chromecast, Home devices and Cast Groups
    _github: https://github.com/vishen/go-chromecast
    _name: go-chromecast
    github: github.com/vishen/go-chromecast
    go: github.com/vishen/go-chromecast@latest
  go-outline:
    _bin: go-outline
    _github: https://github.com/ramya-rao-a/go-outline
    go: github.com/ramya-rao-a/go-outline@latest
  goaccess:
    _bin: goaccess
    _desc: GoAccess is a real-time web log analyzer and interactive viewer that runs in a terminal in *nix systems or through your browser.
    _docs: https://goaccess.io/get-started
    _github: https://github.com/allinurl/goaccess
    _home: https://goaccess.io/
    _name: GoAccess
    apt: goaccess
    brew: goaccess
    dnf:fedora: goaccess
    emerge: net-analyzer/goaccess
    pacman: goaccess
    pkgin: goaccess
  gojq:
    _bin: gojq
    _desc: gojq is a pure Go implementation of jq that is mostly backwards compatible (but not completely)
    _github: https://github.com/itchyny/gojq
    _name: gojq
    brew: gojq
    github: github.com/itchyny/gojq
    go: github.com/itchyny/gojq@latest
  golangci-lint:
    _bin: golangci-lint
    _desc: Fast linters Runner for Go
    _github: https://github.com/golangci/golangci-lint
    _home: https://golangci-lint.run/
    brew: golangci-lint
    go: github.com/golangci/golangci-lint/cmd/golangci-lint@latest
  gomodifytags:
    _bin: gomodifytags
    _desc: Go tool to modify struct field tags
    _github: https://github.com/fatih/gomodifytags
    brew: gomodifytags
    go: github.com/fatih/gomodifytags@latest
  gomplate:
    _bin: gomplate
    _desc: A flexible commandline tool for template rendering. Supports lots of local and remote datasources.
    _docker: docker run hairyhenderson/gomplate:stable
    _docs: https://docs.gomplate.ca/
    _github: https://github.com/hairyhenderson/gomplate
    _home: https://gomplate.ca/
    _name: Gomplate
    apk: gomplate
    brew: gomplate
    choco: gomplate
    port: gomplate
  goofys:
    _bin: goofys
    _deps:
      - fuse
    _desc: A high-performance, POSIX-ish Amazon S3 file system written in Go
    _docs: https://github.com/kahing/goofys#usage
    _github: https://github.com/kahing/goofys
    _home: https://github.com/kahing/goofys
    _name: Goofys
    ansible:linux: professormanhattan.goofys
    brew:linux: goofys
    go:linux: github.com/kahing/goofys@latest
  google-assistant:
    _app: Google Assistant.app
    _bin: g-assist
    _desc: '[Google Assistant for Desktop](https://github.com/Melvin-Abraham/Google-Assistant-Unofficial-Desktop-Client) is a cross-platform unofficial Google Assistant Client for Desktop.'
    _github: https://github.com/Melvin-Abraham/Google-Assistant-Unofficial-Desktop-Client
    _name: Google Assistant for Desktop
    ansible:windows: professormanhattan.googleassistant
    cask: google-assistant
    github: github.com/Melvin-Abraham/Google-Assistant-Unofficial-Desktop-Client
    snap: g-assist
    winget: g-assist
  google-chrome:
    _app: Google Chrome.app
    _bin: null
    _deps:
      - chrome-gnome-shell
    _desc: '[Google Chrome](https://www.google.com/chrome/) is a cross-platform web browser developed by Google. It was first released in 2008 for Microsoft Windows, and was later ported to Linux, macOS, iOS, and Android where it is the default browser built into the OS.'
    _docs: https://developer.chrome.com/docs/extensions/reference/
    _env:
      GOOGLE_CHROME_APPDATA:
        cask: "$HOME/Library/Application Support/Google/Chrome/Default"
        flatpak: "$HOME/.var/app/com.google.Chrome/config/google-chrome/Default"
    _github: Not open-source
    _home: https://www.google.com/chrome/
    _name: Google Chrome
    _post: |
      #!/usr/bin/env bash
      # @file Chrome Settings / Extensions
      # @brief This script configures Chrome, Brave, and Chromium system-wide managed / recommended policies settings. It also pre-loads a configurable list of Chrome extensions to Chrome, Brave, Chromium, and Edge (if they are installed).
      # @description
      #     This Chrome setup script applies system-wide settings and pre-loads Chrome extensions into the browser profiles. The
      #     extensions still must be enabled but they appear in the Chrome extensions menu and can be enabled with the toggle. The
      #     system settings are applied to Chrome, Chromium, and Brave. Extensions are installed to the same browsers plus Microsoft Edge.
      #
      #     ## Features
      #
      #     * Adds `~/.config/chrome/managed.json` to the `managed/policies.json` system locations
      #     * Adds `~/.config/chrome/recommended.json` to the `recommended/policies.json` system locations
      #     * Pre-loads extension metadata for all the extensions defined under `chromeExtensions` in the [`home/.chezmoidata.yaml`](https://github.com/megabyte-labs/install.doctor/blob/master/home/.chezmoidata.yaml) file
      #
      #     ## TODO
      #
      #     * Automatically enable the extensions that are pre-loaded
      #     * Create several profiles with different characteristics (similar to the Firefox setup script)
      #     * Ensure the directories that the script cycles through to install managed settings and extensions are complete for all installation types (i.e. there might need to be some additions for Flatpak installations since their folder structure is different)
      #     * Document how [`chromium-flags.conf`](https://github.com/megabyte-labs/install.doctor/blob/master/home/dot_config/chromium-flags.conf) can be or is integrated
      #
      #     ## Links
      #
      #     * [`managed.json`](https://github.com/megabyte-labs/install.doctor/blob/master/home/dot_config/chrome/managed.json)
      #     * [`recommended.json`](https://github.com/megabyte-labs/install.doctor/blob/master/home/dot_config/chrome/recommended.json)

      function chromeSetUp() {
        ### Ensure Chrome policies directory is present
        gum log -sl info 'Processing policy directories for Chromium based browsers'
        for POLICY_DIR in "/opt/google/chrome/policies"; do
          if [ -d "$(dirname "$POLICY_DIR")" ]; then
            ### Managed policies
            if [ ! -f "$POLICY_DIR/managed/policies.json" ]; then
              gum log -sl info "Ensuring directory $POLICY_DIR/managed exists"
              sudo mkdir -p "$POLICY_DIR/managed"
              gum log -sl info "Copying ${XDG_CONFIG_HOME:-$HOME/.config}/chrome/managed.json to $POLICY_DIR/managed/policies.json"
              sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/chrome/managed.json" "$POLICY_DIR/managed/policies.json"
            fi

            ### Recommended policies
            if [ ! -f "$POLICY_DIR/recommended/policies.json" ]; then
              gum log -sl info "Ensuring directory $POLICY_DIR/recommended exists" && sudo mkdir -p "$POLICY_DIR/recommended"
              gum log -sl info "Copying ${XDG_CONFIG_HOME:-$HOME/.config}/chrome/recommended.json to $POLICY_DIR/recommended/policies.json"
              sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/chrome/recommended.json" "$POLICY_DIR/recommended/policies.json"
            fi
          else
            gum log -sl info "Skipping extension injection into $POLICY_DIR - create these folders prior to running to create managed configs"
          fi
        done

        ### Add Chrome extension JSON
        gum log -sl info 'Populating Chrome extension JSON'
        for EXTENSION_DIR in "/opt/google/chrome/extensions" "$HOME/Library/Application Support/Google/Chrome/External Extensions"; do
          ### Ensure program-type is installed
          if [ -d "$(dirname "$EXTENSION_DIR")" ]; then
            ### Ensure extension directory exists
            if [[ "$EXTENSION_DIR" == '/opt/'* ]] || [[ "$EXTENSION_DIR" == '/etc/'* ]]; then
              if [ ! -d "$EXTENSION_DIR" ]; then
                gum log -sl info "Creating directory $EXTENSION_DIR" && sudo mkdir -p "$EXTENSION_DIR"
              fi
            else
              if [ ! -d "$EXTENSION_DIR" ]; then
                gum log -sl info "Creating directory $EXTENSION_DIR" && mkdir -p "$EXTENSION_DIR"
              fi
            fi

            ### Add extension JSON
            gum log -sl info "Adding Chrome extensions to $EXTENSION_DIR"
            for EXTENSION in {{ list (.chromeExtensions | toString | replace "[" "" | replace "]" "") | uniq | join " " }}; do
              gum log -sl info "Adding Chrome extension manifest ($EXTENSION)"
              if ! echo "$EXTENSION" | grep 'https://chrome.google.com/webstore/detail/' > /dev/null; then
                EXTENSION="https://chrome.google.com/webstore/detail/$EXTENSION"
              fi
              EXTENSION_ID="$(echo "$EXTENSION" | sed 's/^.*\/\([^\/]*\)$/\1/')"
              if [[ "$EXTENSION_DIR" == '/opt/'* ]] || [[ "$EXTENSION_DIR" == '/etc/'* ]]; then
                sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/chrome/extension.json" "$EXTENSION_DIR/${EXTENSION_ID}.json"
              else
                cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/chrome/extension.json" "$EXTENSION_DIR/${EXTENSION_ID}.json"
              fi
            done
          else
            gum log -sl info "$EXTENSION_DIR does not exist"
          fi
        done
      }
      chromeSetUp
    ansible: professormanhattan.chrome
    cask: google-chrome
    choco: googlechrome
    flatpak: com.google.Chrome
    yay: google-chrome
  google-drive:
    _app: Google Drive.app
    _bin: google-drive
    _desc: Google Drive for Desktop integrates a Google Drive account into your macOS / Windows workstation by adding a menubar with options to synchronize folders to the cloud.
    _docs: false
    _github: false
    _home: https://www.google.com/drive/download/
    _name: Google Drive
    cask: google-drive
    choco: googledrive
  google-web-designer:
    _bin: google-web-designer
    _github: false
    _desc: Google Web Designer gives you the power to create beautiful and compelling videos, images, and HTML5 ads. Use animation and interactive elements to build out your creative vision, then scale your content for different sizes or audiences with responsive and dynamic workflows.
    _name: Google Web Designer
    cask: google-web-designer
    choco: google-web-designer
  gopass:
    _bin: gopass
    _desc: The slightly more awesome standard unix password manager for teams
    _docs: https://github.com/gopasspw/gopass/tree/master/docs
    _github: https://github.com/gopasspw/gopass
    _home: https://www.gopass.pw/
    _name: GoPass
    apk: gopass
    brew: gopass
    choco:
      - gpg4win
      - gopass
    dnf: gopass
    go: github.com/gopasspw/gopass@latest
    pacman: gopass
    scoop: gopass
    winget: gopass.gopass
  gopkgs:
    _bin: gopkgs
    _desc: Tool to get list available Go packages
    _github: https://github.com/uudashr/gopkgs
    go: github.com/uudashr/gopkgs/v2/cmd/gopkgs@latest
  gopls:
    _bin: gopls
    _github: false
    brew: gopls
    go: golang.org/x/tools/gopls@latest
  goreleaser:
    _bin: goreleaser
    _github: https://github.com/goreleaser/goreleaser
    _name: Go Releaser
    brew: goreleaser
    go: github.com/goreleaser/goreleaser@latest
    nix-env: goreleaser
    snap: goreleaser --classic
    yay: goreleaser-bin
  gotests:
    _bin: gotests
    _desc: Automatically generate Go test boilerplate from your source code
    _github: https://github.com/cweill/gotests
    brew: gotests
    go: github.com/cweill/gotests/...@latest
  gphotos-sync:
    _bin: gphotos-sync
    _desc: Google Photos Sync is a backup tool for your Google Photos cloud storage.
    _docs: https://gilesknap.github.io/gphotos-sync/main/index.html
    _github: https://github.com/gilesknap/gphotos-sync
    _home: https://gilesknap.github.io/gphotos-sync/main/index.html
    _name: Google Photos Sync
    pacman: gphotos-sync
    pipx: gphotos-sync
  gping:
    _bin: gping
    _desc: '[gping](https://github.com/orf/gping) is like the regular ping command except it also displays a chart labeled with response timing statistics.'
    _github: https://github.com/orf/gping
    _name: gping
    ansible: professormanhattan.gping
    brew: gping
    cargo: gping
    choco: gping
    github: github.com/orf/gping
    pacman: gping
    scoop: gping
  gpt-engineer:
    _bin: gpt-engineer
    _github: https://github.com/AntonOsika/gpt-engineer
    _name: GPT Engineer
    pipx: gpt-engineer
  gradle:
    _bin: gradle
    _desc: '[Gradle](https://gradle.org/) is a build automation tool for multi-language software development. It controls the development process in the tasks of compilation and packaging to testing, deployment, and publishing. Supported languages include Java, C/C++, JavaScript.'
    _docs: https://docs.gradle.org/current/userguide/userguide.html
    _github: https://github.com/gradle/gradle
    _home: https://gradle.org/
    _name: Gradle
    ansible: professormanhattan.gradle
    brew: gradle
    choco: gradle
    port: gradle
    scoop: gradle
    snap: gradle --classic
  graphql-playground:
    _app: GraphQL Playground.app
    _bin: graphql-playground
    _github: https://github.com/graphql/graphql-playground
    _name: GraphQL Playground
    appimage: graphql/graphql-playground
    cask: graphql-playground
    exe: https://github.com/graphql/graphql-playground/releases/download/v1.8.10/graphql-playground-electron-setup-1.8.10.exe
  grep:
    _bin: grep
    _github: false
    apt: grep
    brew: grep
    dnf: grep
    pacman: grep
    zypper: grep
  grex:
    _bin: grex
    _desc: A command-line tool and library for generating regular expressions from user-provided test cases
    _docs: https://github.com/pemistahl/grex#5-how-to-use
    _github: https://github.com/pemistahl/grex
    _home: https://pemistahl.github.io/grex-js/
    _name: grex
    brew: grex
    cargo: grex
    choco: grex
    github: github.com/pemistahl/grex
    scoop: grex
    snap: grex
  gron:
    _bin: gron
    _desc: Extension to make JSON greppable
    _github: https://github.com/tomnomnom/gron
    _name: gron
    brew: gron
    github: github.com/tomnomnom/gron
    go: github.com/tomnomnom/gron@latest
  grype:
    _bin: grype
    _desc: A vulnerability scanner for container images and filesystems
    _docs: https://github.com/anchore/grype#getting-started
    _github: https://github.com/anchore/grype
    _home: https://github.com/anchore/grype
    _name: Grype
    brew: anchore/grype/grype
    choco: grype
    port: grype
    yay: grype-bin
  gtop:
    _bin: gtop
    _desc: System monitoring dashboard for terminal
    _github: https://github.com/aksakalli/gtop
    brew: gtop
    npm: gtop
  guacamole:
    _bin: null
    _desc: '[Apache Guacamole](https://guacamole.apache.org/) is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH.'
    _docs: https://guacamole.apache.org/doc/gug/configuring-guacamole.html
    _github: https://github.com/apache/guacamole-client
    _home: https://guacamole.apache.org/
    _name: Guacamole
    ansible: professormanhattan.guacamole
  gulp:
    _bin: gulp
    _desc: '[Gulp](https://gulpjs.com/) is a toolkit to automate & enhance your workflow'
    _docs: https://gulpjs.com/docs/en/getting-started/quick-start
    _github: https://github.com/gulpjs/gulp
    _home: https://gulpjs.com/
    _name: Gulp
    # Brew gulp is deprecated
    # brew: gulp
    npm: gulp
  gum:
    _bin: gum
    _desc: A tool for glamorous shell scripts. Provides styling and fancy prompts.
    _docs: https://github.com/charmbracelet/gum
    _github: https://github.com/charmbracelet/gum
    _home: https://charm.sh/
    _name: Gum
    apk: gum
    brew: gum
    go: github.com/charmbracelet/gum@latest
    nix: nixpkgs.gum
    pacman: gum
    pkg-termux: gum
  gup:
    _bin: gup
    _github: https://github.com/nao1215/gup
    _name: Gup
    brew: nao1215/tap/gup
    go: github.com/nao1215/gup@latest
  gvm:
    _bin: null
    _desc: '[gvm](https://github.com/moovweb/gvm) lets you manage Go environments and switch between Go versions.'
    _github: https://github.com/moovweb/gvm
    _name: rvm
    ansible: professormanhattan.gvm
  hadolint:
    _bin: hadolint
    _desc: A smarter Dockerfile linter that helps you build best practice Docker images. The linter parses the Dockerfile into an AST and performs rules on top of the AST
    _github: https://github.com/hadolint/hadolint
    _name: hadolint
    brew: hadolint
    dnf:fedora: hadolint
    scoop: hadolint
  handbrake:
    _app: HandBrake.app
    _bin: handbrake
    _github: https://github.com/HandBrake/HandBrake
    cask: handbrake
    choco: handbrake
    flatpak: fr.handbrake.ghb
  handlr:
    _bin: handlr
    _desc: A better xdg-utils
    _docs: https://github.com/chmln/handlr#usage
    _github: https://github.com/chmln/handlr
    _home: https://github.com/chmln/handlr
    _name: Handlr
    cargo: handlr --locked
    yay: handlr-bin
  haproxy:
    _bin: haproxy
    _github: https://github.com/haproxy/haproxy
    _name: HAProxy
    _service: haproxy
    apk: haproxy
    apt: haproxy
    brew: haproxy
    choco: haproxy
    dnf: haproxy
    pacman: haproxy
    zypper: haproxy
  has:
    _bin: has
    _github: https://github.com/kdabir/has
    _name: Has
    brew: kdabir/tap/has
  hbs-cli:
    _bin: hbs
    _desc: This is a CLI tool to render handlebars templates, with the ability to require in Partials, Helpers and JSON Data
    _github: https://github.com/keithamus/hbs-cli
    npm: hbs-cli
  hclq:
    _bin: hclq
    _desc: Command-line processor for HashiCorp config files, like sed for HCL — Terraform, Consul, Nomad, Vault
    _github: https://github.com/mattolenik/hclq
    _name: hclq
    github: github.com/mattolenik/hclq
    go: github.com/mattolenik/hclq@latest
  helix:
    _bin: hx
    _desc: A post-modern modal text editor.
    _docs: https://docs.helix-editor.com/
    _github: https://github.com/helix-editor/helix
    _home: https://helix-editor.com/
    _name: Helix Editor
    _repology: helix
    brew: helix
    choco: helix
    flatpak: com.helix_editor.Helix
    pacman: helix
    scoop: helix
    winget: Helix.Helix
  helm:
    _bin: helm
    _desc: The Kubernetes Package Manager. Helm is the best way to find, share, and use software built for Kubernetes.
    _docs: https://helm.sh/docs
    _github: https://github.com/helm/helm
    _home: https://helm.sh/
    _name: Helm
    brew: helm
    choco: kubernetes-helm
    scoop: helm
    snap: helm --classic
  helm-docs:
    _bin: helm-docs
    _github: https://github.com/norwoodj/helm-docs
    _name: Helm Docs
    brew: norwoodj/tap/helm-docs
    scoop: helm-docs
  helmfile:
    _bin: helmfile
    _github: https://github.com/helmfile/helmfile
    _name: Helmfile
    brew: helmfile
    pacman: helmfile
    scoop: helmfile
    zypper: helmfile
  heroku-cli:
    _bin: heroku
    _github: https://github.com/heroku/cli
    _desc: '[Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli) lets you create and manage Heroku apps directly from the terminal. It’s an essential part of using Heroku.'
    _name: Heroku CLI
    ansible: professormanhattan.heroku
    brew: heroku/brew/heroku
    choco: heroku-cli
    npm: heroku
    scoop: heroku-cli
    yay: heroku-cli
  hexyl:
    _bin: hexyl
    _desc: '[hexyl](https://github.com/sharkdp/hexyl) is a simple hex viewer for the terminal. It uses a colored output to distinguish different categories of bytes (NULL bytes, printable ASCII characters, ASCII whitespace characters, other ASCII characters and non-ASCII).'
    _github: https://github.com/sharkdp/hexyl
    _name: hexyl
    ansible: professormanhattan.hexyl
    apt: hexyl
    brew: hexyl
    cargo: hexyl
    dnf:fedora: hexyl
    github: github.com/sharkdp/hexyl
    nix: hexyl
    pacman: hexyl
    pkg-freebsd: hexyl
    pkg-termux: hexyl
    port: hexyl
    scoop: hexyl
    xbps: hexyl
  hey:
    _bin: hey
    _desc: HTTP load generator, ApacheBench (ab) replacement, formerly known as rakyll/boom
    _github: https://github.com/rakyll/hey
    _name: hey
    brew: hey
    github: github.com/rakyll/hey
  hiddenbar:
    _app: Hidden Bar.app
    _bin: null
    _desc: macOS menu bar application that allows you to add menu bar items to a hideable drawer
    _docs: https://github.com/dwarvesf/hidden
    _github: https://github.com/dwarvesf/hidden
    _home: https://dwarves.foundation/opensource/
    _name: Hidden Bar
    cask: hiddenbar
    mas: 1452453066
  himalaya:
    _bin: himalaya
    _github: https://github.com/soywod/himalaya
    _desc: '[Himalaya](https://github.com/soywod/himalaya) is a CLI email client written in Rust.'
    _name: Himalaya
    ansible: professormanhattan.himalaya
    brew: himalaya
    scoop: himalaya
  hishtory:
    _bin: hishtory
    _github: https://github.com/ddworken/hishtory
    _name: hiSHtory
    _post: |
      #!/usr/bin/env bash
      echo y | hishtory init "$HISHTORY_USER_SECRET"
    _todo: Check for Homebrew version
    script: curl -sSL --compressed https://hishtory.dev/install.py | python3 -
  hoard:
    _bin: hoard
    _github: https://github.com/Hyde46/hoard
    _name: Hoard
    # brew: Hyde46/hoard/hoard # Fails with cURL trying to download non-existant release file
    cargo: hoard-rs
    nix-env: hoard
    # Might be paru instead of pacman
    pacman: hoard
    port: hoard-cli
  holehe:
    _bin: holehe
    _github: https://github.com/megadose/holehe
    _name: Holehe
    pipx: holehe
  hostctl:
    _bin: hostctl
    _desc: This tool gives more control over the use of hosts file
    _github: https://github.com/guumaster/hostctl
    _name: hostctl
    brew: guumaster/tap/hostctl
    github: github.com/guumaster/hostctl
    scoop: hostctl
    yay: hostctl
  hosthomepage:
    _bin: null
    _name: Host Home Page
    _github: false
    ansible: professormanhattan.hosthomepage
  hosts:
    _bin: null
    _github: false
    _desc: This role is intended to be used with the [main ProfessorManhattan playbook](https://gitlab.com/ProfessorManhattan/Playbooks). It integrates tightly with the configuration variables that come with the playbook.
    _name: Hosts
    ansible: professormanhattan.hosts
  howdoi:
    _bin: howdoi
    _github: https://github.com/gleitz/howdoi
    _name: howdoi
    brew: howdoi
    pipx: howdoi
  hss:
    _bin: hss
    _github: https://github.com/six-ddc/hss
    _name: hss
    brew: hss
    port: hss
    script: cd /tmp && git clone https://github.com/six-ddc/hss.git && cd hss && make && make install && cd /tmp && rm -rf hss
  hstr:
    _bin: hstr
    _github: https://github.com/dvorka/hstr
    _name: HiSToRy
    apk: hstr
    apt: hstr
    brew: hstr
    dnf: hstr
    emerge: app-shells/hstr
    nix-env: hstr
    pkg-freebsd: hstr
    port: histr
    xbps: hstr
  htmlhint:
    _bin: htmlhint
    _desc: The static code analysis tool you need for your HTML
    _docs: https://htmlhint.com/docs/user-guide/getting-started
    _github: https://github.com/htmlhint/HTMLHint
    _home: https://htmlhint.com/
    _name: HTMLHint
    npm: htmlhint
  htmlq:
    _bin: htmlq
    _desc: A lightweight and flexible command-line JSON processor for HTML
    _github: https://github.com/mgdm/htmlq
    _name: htmlq
    brew: htmlq
    cargo: htmlq
    github: github.com/mgdm/htmlq
  htop:
    _bin: htop
    _desc: '[htop](https://htop.dev/) is an interactive system-monitor process-viewer and process-manager. It is designed as an alternative to the Unix program top. It shows a frequently updated list of the processes running on a computer, normally ordered by the amount of CPU usage.'
    _docs: https://www.man7.org/linux/man-pages/man1/htop.1.html
    _github: https://github.com/htop-dev/htop
    _home: https://htop.dev/
    _name: htop
    ansible:darwin: professormanhattan.htop
    ansible:linux: professormanhattan.htop
    apt: htop
    brew: htop
    dnf: htop
    pacman: htop
    port: htop
  http-prompt:
    _bin: http-prompt
    _desc: HTTP Prompt is an interactive command-line HTTP client featuring autocomplete and syntax highlighting, built on HTTPie and prompt_toolkit.
    _docs: https://docs.http-prompt.com/en/latest/
    _github: https://github.com/httpie/http-prompt
    _home: https://http-prompt.com/
    _name: HTTP Prompt
    brew: http-prompt
    pipx: http-prompt
  http-toolkit:
    _app: HTTP Toolkit.app
    _github: https://github.com/httptoolkit/httptoolkit
    _name: HTTP Toolkit
    apt: https://github.com/httptoolkit/httptoolkit-desktop/releases/download/v1.14.8/HttpToolkit-1.14.8.deb
    cask: http-toolkit
    winget: HTTPToolKit.HTTPToolKit
    yay: httptoolkit
  httpie:
    _bin: httpie
    _desc: '[HTTPie](https://httpie.io/) is a terminal-based, user-friendly command-line HTTP client for the API era. It comes with JSON support, syntax highlighting, persistent sessions, wget-like downloads, plugins, and more.'
    _name: HTTPie
    _github: https://github.com/httpie/cli
    _todo: Look into https://github.com/httpie/desktop as alternative to Postman and other HTTP request clients
    ansible: professormanhattan.httpie
    brew: httpie
    choco: httpie
    dnf: httpie
    pacman: httpie
    pipx: httpie
    port: httpie
    snap: httpie
  httpstat:
    _bin: httpstat
    _desc: curl statistics made simple
    _docs: https://github.com/reorx/httpstat#usage
    _github: https://github.com/reorx/httpstat
    _home: https://github.com/reorx/httpstat
    _name: httpstat
    brew: httpstat
    pipx: httpstat
  hub:
    _bin: hub
    _desc: Add GitHub support to git on the command-line
    _github: https://hub.github.com/
    apt: hub
    brew: hub
    choco: hub
    dnf:fedora: hub
    pacman: hub
    pkg: hub
    scoop: hub
  hugo:
    _bin: hugo
    _desc: The world’s fastest framework for building websites.
    _docs: https://gohugo.io/documentation/
    _github: https://github.com/gohugoio/hugo
    _home: https://gohugo.io/
    _name: Hugo
    apt: hugo
    brew: hugo
    choco: hugo
    dnf: hugo
    eopkg: hugo
    go: github.com/gohugoio/hugo@latest
    pacman: hugo
    port: hugo
    scoop: main/hugo
    snap: hugo
    zypper: hugo
  hurl:
    _bin: hurl
    _github: https://github.com/Orange-OpenSource/hurl
    brew: hurl
    cargo: hurl
    choco: hurl
    npm: '@orangeopensource/hurl'
    pkg-freebsd: hurl
    port: hurl
    scoop: hurl
    winget: hurl
  husky:
    _bin: husky
    _desc: Husky improves your commits and more
    _github: https://github.com/typicode/husky
    _home: https://typicode.github.io/husky/
    _name: Husky
    npm: husky
  hyper:
    _appImageName: Hyper
    _bin: null
    _desc: '[Hyper](https://hyper.is/) is an electron-based terminal. It is written using web technologies such as HTML, CSS, JavaScript etc. It looks very modern and has lots of customization options.'
    _docs: https://hyper.is/blog
    _github: https://github.com/vercel/hyper
    _home: https://hyper.is/
    _name: Hyper
    ansible: professormanhattan.hyper
    appimage: hyper
    brew: hyper
    choco: hyper
    yay: hyper
  hyperfine:
    _bin: hyperfine
    _desc: '[hyperfine](https://github.com/sharkdp/hyperfine) is a cross-platform command-line benchmarking tool that can be used to determine the performance of shell commands.'
    _docs: https://docs.rs/crate/hyperfine/1.2.0
    _github: https://github.com/sharkdp/hyperfine
    _name: hyperfine
    ansible: professormanhattan.hyperfine
    apk: hyperfine
    brew: hyperfine
    cargo: hyperfine
    choco: hyperfine
    dnf: hyperfine
    github: github.com/sharkdp/hyperfine
    pacman: hyperfine
    pkg: hyperfine
  hyperkit:
    _bin: hyperkit
    _deps:darwin:
      - xcode
    _github: https://github.com/moby/hyperkit
    _name: HyperKit
    brew:darwin: hyperkit
  ideviceinstaller:
    _bin: ideviceinstaller
    _github: https://github.com/libimobiledevice/ideviceinstaller
    brew:darwin: ideviceinstaller
  iina:
    _app: iina.app
    _bin: null
    _desc: The modern video player for macOS.
    _docs: https://iina.io/
    _github: https://github.com/iina/iina
    _home: https://iina.io/
    _name: iina macOS Video Player
    cask: iina
  imagemagick:
    _bin: convert
    _github: https://github.com/ImageMagick/ImageMagick
    apk: imagemagick
    apt:
      - imagemagick
      - libx11-dev
    brew: imagemagick
    choco: imagemagick
    dnf:fedora: imagemagick
    scoop: imagemagick
  imageoptim:
    _app: ImageOptim.app
    _bin: null
    _desc: Image compressor that utilizes other applications like ImageOptim under the hood
    _github: https://github.com/ImageOptim/ImageOptim
    _home: https://imageoptim.com/mac
    cask: imageoptim
  imageoptim-cli:
    _bin: imageoptim
    _deps:
      - imageoptim
    _desc: Image compressor that utilizes other applications like ImageOptim under the hood
    _github: https://github.com/ImageOptim/ImageOptim
    _home: https://imageoptim.com/mac
    brew:darwin-x86_64: imageoptim-cli
    npm:darwin: imageoptim-cli
  imagine:
    _app: Imagine.app
    _bin: null
    _desc: Imagine is a desktop app for compression of PNG and JPEG, with a modern and friendly UI.
    _docs: https://github.com/meowtec/Imagine
    _github: https://github.com/meowtec/Imagine
    _home: https://github.com/meowtec/Imagine
    _name: Imagine
    appimage: meowtec/Imagine
    exe: https://github.com/meowtec/Imagine/releases/download/v0.7.4/Imagine-Setup-0.7.4.exe
    script:darwin: curl -sSL https://github.com/meowtec/Imagine/releases/download/v0.7.4/Imagine-0.7.4.dmg > /tmp/Imagine.dmg && sudo hdiutil attach /tmp/Imagine.dmg && sudo cp -R "/Volumes/Imagine 0.7.4/Imagine.app" /Applications && sudo hdiutil detach "/Volumes/Imagine 0.7.4" && rm -f /tmp/Imagine.dmg
  imgur-uploader:
    _bin: imgur-uploader
    _desc: Upload images to imgur
    _github: https://github.com/kevva/imgur-uploader-cli
    npm: imgur-uploader-cli
  impl:
    _bin: impl
    _desc: impl generates method stubs for implementing an interface
    _github: https://github.com/josharian/impl
    go: github.com/josharian/impl@latest
  infracost:
    _bin: infracost
    _desc: '[infracost](https://www.infracost.io/) provides cloud cost estimates for Terraform in pull requests'
    _docs: https://www.infracost.io/docs
    _github: https://github.com/infracost/infracost
    _home: https://www.infracost.io/
    _name: infracost
    brew: infracost
    choco: infracost
    yay: infracost
  inkscape:
    _app: Inkscape.app
    _bin: inkscape
    _desc: '[Inkscape](https://inkscape.org/) is a free and open-source vector graphics editor used to create vector images, primarily in Scalable Vector Graphics format. Other formats can be imported and exported. Inkscape can render primitive vector shapes and text. This role installs Inkscape on nearly any platform.'
    _docs: https://inkscape.org/*docs/
    _github: https://github.com/inkscape/inkscape
    _home: https://inkscape.org
    _name: Inkscape
    ansible: professormanhattan.inkscape
    apt: inkscape
    cask: inkscape
    choco: inkscape
    dnf: inkscape
    flatpak: org.inkscape.Inkscape
    pacman: inkscape
    snap: inkscape
  intellij-idea-ce:
    _app: IntelliJ IDEA CE.app
    _bin: intellij-idea-community
    _desc: '[IntelliJ IDEA](https://www.jetbrains.com/idea/) is an integrated development environment written in Java for developing computer software. It is developed by JetBrains, and is available as an Apache 2 Licensed community edition, and in a proprietary commercial edition. Both can be used for commercial development.'
    _docs: https://www.jetbrains.com/help/
    _github: https://github.com/JetBrains/intellij-community
    _home: https://www.jetbrains.com/idea/
    _name: IntelliJ IDEA (CE)
    ansible: professormanhattan.intellij
    cask: intellij-idea-ce
    choco: intellijidea-community
    snap: intellij-idea-community --classic
  iodine:
    _bin: iodined
    _github: https://github.com/yarrick/iodine
    _name: Iodine
    brew: iodine
    choco: iodine
  ionic:
    _bin: ionic
    _desc: '[Ionic Framework](https://ionicframework.com/) The Ionic command line interface (CLI) is your go-to tool for developing Ionic apps'
    _docs: https://ionicframework.com/docs
    _github: https://github.com/ionic-team/ionic-cli
    _home: https://ionicframework.com/
    _name: Ionic Framework
    npm: '@ionic/cli'
  ios-deploy:
    _bin: ios-deploy
    _desc: Install and debug iPhone apps from the command line, without using Xcode
    _github: https://github.com/ios-control/ios-deploy
    brew:darwin: ios-deploy
    npm:darwin: ios-deploy
  ios-sim:
    _bin: ios-sim
    _github: https://github.com/ios-control/ios-sim
    _name: ios-sim
    npm:darwin: ios-sim
  ipfs:
    _bin: ipfs
    _desc: A peer-to-peer hypermedia protocol designed to preserve and grow humanity's knowledge by making the web upgradeable, resilient, and more open
    _docs: https://docs.ipfs.tech/
    _github: https://github.com/ipfs/ipfs
    _home: https://ipfs.tech/
    _name: IPFS
    _service: ipfs
    brew: ipfs
    choco: go-ifps
    nix: ipfs
    port: ipfs
    scoop: go-ipfs
    snap: ipfs
  ipfs-deploy:
    _bin: ipd
    _desc: A peer-to-peer hypermedia protocol designed to preserve and grow humanity's knowledge by making the web upgradeable, resilient, and more open
    _docs: https://docs.ipfs.tech/
    _github: https://github.com/ipfs/ipfs
    _home: https://ipfs.tech/
    _name: IPFS
    npm: ipfs-deploy
  ipfs-desktop:
    _app: IPFS Desktop.app
    _bin: null
    _desc: An unobtrusive and user-friendly desktop application for IPFS on Windows, Mac and Linux.
    _docs: https://docs.ipfs.tech/install/ipfs-desktop/
    _github: https://github.com/ipfs/ipfs-desktop
    _home: https://ipfs.tech/
    _name: IPFS Desktop
    appimage: https://github.com/ipfs-shipyard/ipfs-desktop/releases/download/v0.28.0/ipfs-desktop-0.28.0-linux-x86_64.AppImage
    cask: ipfs
    choco: ipfs-desktop
    scoop: extras/ipfs-desktop
    winget: IPFS.IPFS-Desktop
  ipmitool:
    _bin: ipmitool
    _github: https://github.com/ipmitool/ipmitool
    _name: IPMI Tool
    apt: ipmitool
    brew: ipmitool
    dnf: ipmitool
    pacman: ipmitool
  iproute2mac:
    _bin: ip
    _github: https://github.com/brona/iproute2mac
    _name: iproute2mac
    brew:darwin: iproute2mac
  iredis:
    _bin: iredis
    _desc: A terminal client for Redis with auto-completion and syntax highlightin
    _docs: https://github.com/laixintao/iredis
    _github: https://github.com/laixintao/iredis
    _home: https://pypi.org/project/iredis/
    _name: iRedis
    apt: iredis
    brew: iredis
    pipx: iredis
  irssi:
    _bin: irssi
    _desc: Irssi is a modular text mode chat client. It comes with IRC support built in, and there are third party ICB, SILC, XMPP (Jabber), PSYC and Quassel protocol modules available.
    _docs: https://irssi.org/documentation/
    _github: https://github.com/irssi/irssi
    _home: https://irssi.org/
    _name: irssi
    apt: irssi
    brew: irssi
    dnf: irssi
    pacman: irssi
    port: irssi
  is-up:
    _bin: is-up
    _desc: Check whether a website is up or down using the isitup.org API
    _github: https://github.com/sindresorhus/is-up-cli
    npm: is-up-cli
  iso-image-writer:
    _github: https://github.com/KDE/isoimagewriter
    _bin: iso-image-writer
    _name: ISO Image Writer
    flatpak: org.kde.isoimagewriter
  isort:
    _bin: isort
    _desc: isort is a Python utility / library to sort imports alphabetically, and automatically separated into sections and by type.
    _docs: https://pycqa.github.io/isort/index.html
    _github: https://github.com/PyCQA/isort
    _home: https://pycqa.github.io/isort/
    _name: iSort
    brew: isort
    pipx: isort
  iterm2:
    _app: iTerm.app
    _bin: null
    _desc: '[iTerm2](https://eugeny.github.io/iterm2/) is a highly configurable terminal emulator, SSH and serial client for Windows, macOS and Linux.'
    _docs: https://iterm2.com/documentation.html
    _github: https://github.com/gnachman/iTerm2
    _home: https://iterm2.com/
    _name: iTerm2
    _post:cask: |
      #!/usr/bin/env bash
      echo "Setting iTerm2 options location to Install Doctor Chezmoi location" && defaults write com.googlecode.iterm2 PrefsCustomFolder -string "${XDG_DATA_HOME:-$HOME/.local/share}/chezmoi/home/Library/Preferences/com.googlecode.iterm2.plist"
      echo "Setting iTerm2 to automatically sync with managed options" && defaults write com.googlecode.iterm2 NoSyncNeverRemindPrefsChangesLostForFile_selection -int 2
    ansible:darwin: professormanhattan.iterm2
    cask: iterm2
  java:
    _bin: false
    _desc: '[Java](https://www.java.com/en/) is a class-based, object-oriented programming language that is designed to have as few implementation dependencies as possible.'
    _docs: https://docs.oracle.com/en/cloud/paas/nosql-cloud/index.html
    _github: https://github.com/oracle/nosql-java-sdk
    _home: https://www.java.com/en/
    _name: Java
    _when:cask: '! brew list temurin > /dev/null'
    ansible: professormanhattan.java
    apt: openjdk-11-jdk
    brew: openjdk
    cask: temurin
    choco: jdk11
    dnf: java-11-openjdk-devel.x86_64
    pacman: jdk-openjdk
    port: openjdk11
    scoop: openjdk11
  jc:
    _bin: jc
    _github: https://github.com/kellyjonbrazil/jc
    _name: jc
    apt: jc
    brew: jc
    dnf: jc
    nix-env: nixpkgs.jc
    pacman: jc
    pipx: jc
    zypper: jc
  jenv:
    _bin: jenv
    _desc: '[jenv](https://www.jenv.be/) lets you switch between Java versions. It sets JAVA_HOME inside your shell, in a way that can be set globally, local to the current working directory or per shell.'
    _docs: https://github.com/gcuisinier/jenv/wiki
    _github: https://github.com/jenv/jenv
    _home: https://www.jenv.be/
    _name: jenv
    ansible: professormanhattan.jenv
    brew: jenv
  jest:
    _bin: jest
    _desc: Delightful JavaScript testing.
    _docs: https://jestjs.io/docs/getting-started
    _github: https://github.com/jestjs/jest
    _home: https://jestjs.io/
    _name: Jest
    npm: jest
  jiq:
    _bin: jiq
    _desc: Create jq queries interactively by leveraging a live reload feature in the terminal
    _github: https://github.com/fiatjaf/jiq
    _name: jiq
    github: github.com/fiatjaf/jiq/cmd/jiq
    go: github.com/fiatjaf/jiq/cmd/jiq@latest
  jitsi-meet:
    _app: Jitsi Meet.app
    _bin: jitsi-meet
    _desc: Desktop application for Jitsi Meet built with Electron
    _github: https://github.com/jitsi/jitsi-meet-electron
    _name: Jitsi Meet Electron
    cask: jitsi-meet
    choco: jitsi-meet-electron
    flatpak: org.jitsi.jitsi-meet
    github: github.com/jitsi/jitsi-meet-electron
    pkg: jitsi-meet
    yay: jitsi-meet-desktop-bin
  jo:
    _bin: jo
    _desc: '[jo](https://github.com/jpmens/jo) is a free and open-source command-line tool that allows you to create JSON objects.'
    _github: https://github.com/jpmens/jo
    _name: jo
    ansible: professormanhattan.jo
    apt: jo
    brew: jo
    github: github.com/jpmens/jo
    pkg: jo
    scoop: jo
    snap: jo
    yay: jo
  john:
    _bin: john
    _github: https://github.com/openwall/john
    _name: John
    apt: john
    brew: john
    choco: john
    dnf: john
    pacman: john
  jpegoptim:
    _bin: jpegoptim
    _github: https://github.com/tjko/jpegoptim
    _name: JPEGOptim
    apt: jpegoptim
    brew: jpegoptim
    choco: jpegoptim
    dnf: jpegoptim
    pacman: jpegoptim
    zypper: jpegoptim
  jq:
    _bin: jq
    _desc: '[jq](https://github.com/stedolan/jq) is like sed for JSON data. You can use it to slice and filter and map and transform structured data with the same ease that sed, awk, grep and friends let you play with text.'
    _docs: https://stedolan.github.io/jq/manual/
    _github: https://github.com/stedolan/jq
    _home: https://stedolan.github.io/jq
    _name: jq
    ansible: professormanhattan.jq
    apk: jq
    apt: jq
    brew: jq
    choco: jq
    dnf: jq
    github: github.com/stedolan/jq
    pkg: jq
  jqp:
    _bin: jqp
    _desc: A TUI playground to experiment with jq
    _docs: https://github.com/noahgorstein/jqp#usage
    _github: https://github.com/noahgorstein/jqp
    _home: https://github.com/noahgorstein/jqp
    _name: jqp
    brew: noahgorstein/tap/jqp
    port: jqp
    yay: jqp
  json-server:
    _bin: json-server
    _desc: Get a full fake REST API with zero coding in less than 30 seconds (seriously)
    _docs: https://github.com/typicode/json-server
    _github: https://github.com/typicode/json-server
    _home: https://github.com/typicode/json-server
    _name: JSON Server
    npm: json-server
  juicefs:
    _bin: juicefs
    _github: https://github.com/juicedata/juicefs
    _name: JuiceFS
    _post: |
      #!/usr/bin/env sh
      . "$HOME/.local/bin/installx/juicefs.sh"
    brew: juicefs
    scoop: juicefs
    snap: juicefs
    yay: juicefs
  juju:
    _bin: juju
    _github: https://github.com/juju/juju
    _desc: '[Juju](https://juju.is/) is a Charmed Operator Framework, composed of a Charmed Operator Lifecycle Manager, and the Charmed Operator SDK. It allows you to deploy, integrate, and manage Kubernetes, container, and VM-native applications seamlessly across hybrid clouds. Juju drives Day 0 through Day 2 operations in your complex environment.'
    _docs: https://juju.is/docs
    _home: https://juju.is/
    _name: Juju
    ansible: professormanhattan.juju
    brew: juju
    choco: juju
    snap: juju --classic
  junction:
    _bin: junction
    _github: https://github.com/sonnyp/Junction
    flatpak: re.sonny.Junction
  just:
    _bin: just
    _github: https://github.com/casey/just
    _name: Just
    apk: just
    apt: just
    brew: just
    cargo: just
    choco: just
    dnf: just
    eopkg: just
    nix-env: nixpkgs.just
    pacman: just
    pkg-freebsd: just
    port: just
    scoop: just
    snap: --edge --classic just
    winget: Casey.Just
    xbps: just
  k9s:
    _bin: k9s
    _github: https://github.com/derailed/k9s
    _name: K9s
    brew: derailed/k9s/k9s
    choco: k9s
    pacman: k9s
    port: k9s
    scoop: k9s
  kap:
    _app: Kap.app
    _bin: kap
    _github: https://github.com/wulkano/Kap
    _name: Kap
    cask: kap
  kasmvnc:
    _bin: kasmvncpasswd
    _github: https://github.com/kasmtech/KasmVNC
    script:linux: |
      RELEASES=$(curl -sS "https://api.github.com/repos/kasmtech/KasmVNC/releases/latest") || :
      LATEST_VERSION=$(echo $RELEASES | grep -o '"tag_name": "[^"]*' | grep -o '[^"]*$') || :
      if command -v apt-get > /dev/null; then
        . /etc/os-release
        cd /tmp
        case $VERSION_CODENAME in
        bullseye )
          wget "https://github.com/kasmtech/KasmVNC/releases/download/$LATEST_VERSION/kasmvncserver_bullseye_${LATEST_VERSION:1}_amd64.deb" || :
          ;;
        buster )
          wget "https://github.com/kasmtech/KasmVNC/releases/download/$LATEST_VERSION/kasmvncserver_buster_${LATEST_VERSION:1}_amd64.deb" || :
          ;;
        focal )
          wget "https://github.com/kasmtech/KasmVNC/releases/download/$LATEST_VERSION/kasmvncserver_focal_${LATEST_VERSION:1}_amd64.deb" || :
          ;;
        jammy )
          wget "https://github.com/kasmtech/KasmVNC/releases/download/$LATEST_VERSION/kasmvncserver_jammy_${LATEST_VERSION:1}_amd64.deb" || :
          ;;
        * )
          ;;
        esac
        if ls kasmvncserver*.deb > /dev/null 2>&1; then sudo apt-get install ./kasmvncserver_*.deb; sudo addgroup $USER ssl-cert; fi
      elif command -v dnf > /dev/null; then
        wget "https://github.com/kasmtech/KasmVNC/releases/download/$LATEST_VERSION/kasmvncserver_centos_core_${LATEST_VERSION:1}_x86_64.rpm" || :
        if ls kasmvncserver*.rpm > /dev/null 2>&1; then sudo rpm -ivh ./kasmvncserver_*.rpm; sudo usermod -a -G kasmvnc-cert $USER; fi
      elif command -v zypper > /dev/null; then
        wget "https://github.com/kasmtech/KasmVNC/releases/download/$LATEST_VERSION/kasmvncserver_opensuse_15_${LATEST_VERSION:1}_x86_64.rpm" || :
        if ls kasmvncserver*.rpm > /dev/null 2>&1; then sudo rpm -ivh ./kasmvncserver_*.rpm; sudo usermod -a -G kasmvnc-cert $USER; fi
      elif command -v apk > /dev/null; then
        wget "https://github.com/kasmtech/KasmVNC/releases/download/$LATEST_VERSION/kasmvnc.alpine_317_x86_64.tgz" || :
        if ls kasmvncserver*.rpm > /dev/null 2>&1; then sudo tar -xzf "./kasmvnc.alpine_317_x86_64.tgz" -C /; fi
      fi
    yay: kasmvncserver-bin
  kcpassword:
    _bin: kcpassword
    _github: https://github.com/xfreebird/kcpassword
    _name: kcpassword
    brew:darwin: xfreebird/utils/kcpassword
  kdash:
    _bin: kdash
    _desc: A simple and fast dashboard for Kubernetes
    _github: https://github.com/kdash-rs/kdash
    _home: https://kdash.cli.rs/
    _name: kdash
    brew: kdash-rs/kdash/kdash
    cargo: kdash
    choco: kdash
    github: github.com/kdash-rs/kdash
    scoop: kdash
  kde-plasma-desktop:
    _bin: plasmashell
    _github: https://github.com/KDE/plasma-desktop
    _deps:
      - kdeplasma-addons
    apt: kde-plasma-desktop
    dnf: kde-plasma-desktop
    pacman: kde-plasma-desktop
  kdenlive:
    _app: kdenlive.app
    _bin: kdenlive
    _github: https://github.com/KDE/kdenlive
    _name: Kdenlive
    cask: kdenlive
    choco: kdenlive
    flatpak: org.kde.kdenlive
  kdeplasma-addons:
    _github: https://github.com/KDE/kdeplasma-addons
    apt: kdeplasma-addons
    dnf: kdeplasma-addons
    pacman: kdeplasma-addons
  keybase:
    _app: Keybase.app
    _bin: null
    _desc: '[Keybase](https://keybase.io/) is secure messaging and file-sharing. Keybase uses public key cryptography to ensure your messages stay private. Keybase works for families, roommates, clubs, and groups of friends. Keybase connects to public identities, too. You can connect with communities from Twitter, Reddit, and elsewhere.'
    _docs: https://book.keybase.io/docs
    _github: https://github.com/keybase/client
    _home: https://keybase.io/
    _name: Keybase
    _post: |
      #!/usr/bin/env bash
      # @file Keybase Configuration
      # @brief Updates Keybase's system configuration with the Keybase configuration stored in the `home/dot_config/keybase/config.json` location.
      # @description
      #     This script ensures Keybase utilizes a configuration that, by default, adds a security fix.

      if command -v keybase > /dev/null; then
        KEYBASE_CONFIG="${XDG_CONFIG_HOME:-$HOME/.config}/keybase/config.json"
        if [ -f "$KEYBASE_CONFIG" ]; then
          gum log -sl info 'Ensuring /etc/keybase is a directory' && sudo mkdir -p /etc/keybase
          gum log -sl info "Copying $KEYBASE_CONFIG to /etc/keybase/config.json" && sudo cp -f "$KEYBASE_CONFIG" /etc/keybase/config.json
        else
          gum log -sl warn "No Keybase config located at $KEYBASE_CONFIG"
        fi
      else
        gum log -sl info 'The keybase executable is not available'
      fi
    _post:cask: |
      #!/usr/bin/env bash
      if [ ! -f /usr/local/bin/keybase ] && [ -f /Applications/Keybase.app/Contents/SharedSupport/bin/keybase ]; then echo "Fixing missing keybase executable symlink permission issue" && sudo ln -s /Applications/Keybase.app/Contents/SharedSupport/bin/keybase /usr/local/bin/keybase; fi
    _when:ansible: '! test -f /opt/keybase/Keybase'
    ansible: professormanhattan.keybase
    cask: keybase
    choco: keybase
    pacman:
      - keybase
      - keybase-gui
    yay: keybase-bin
  keycastr:
    _app: KeyCastr.app
    _bin: null
    _desc: Keystroke visualizer for macOS screen recordings
    _docs: https://github.com/keycastr/keycastr
    _github: https://github.com/keycastr/keycastr
    _home: https://github.com/keycastr/keycastr
    _name: Keycastr
    cask: keycastr
  kitty:
    _bin: null
    _desc: '[KiTTY](https://sw.kovidgoyal.net/kitty/) is designed for power keyboard users. To that end all its controls work with the keyboard (although it fully supports mouse interactions as well). Its configuration is a simple, human editable, single file for easy reproducibility.'
    _docs: https://sw.kovidgoyal.net/kitty/quickstart/
    _github: https://github.com/kovidgoyal/kitty
    _home: https://sw.kovidgoyal.net/kitty/
    _name: KiTTY
    ansible: professormanhattan.kitty
  kn:
    _bin: kn
    _desc: The Knative CLI (kn) provides a quick and easy interface for creating Knative resources, such as Knative Services and Event Sources
    _github: https://github.com/knative/client
    _name: kn
    brew: kn
    github: github.com/knative/client
    yay: knative-client-bin
  kodi:
    _app: Kodi.app
    _bin: kodi
    _desc: '[Kodi](https://kodi.tv/) is a free and open-source media player software application developed by the XBMC Foundation, a non-profit technology consortium. Kodi is available for multiple operating systems and hardware platforms, with a software 10-foot user interface for use with televisions and remote controls.'
    _docs: https://kodi.wiki/view/Main_Page
    _github: https://github.com/xbmc/xbmc
    _home: https://kodi.tv/
    _name: Kodi
    ansible: professormanhattan.kodi
    apt: kodi
    cask: kodi
    choco: kodi
    dnf: kodi
    flatpak: tv.kodi.Kodi
    pacman: kodi
  koodo-reader:
    _app: Koodo Reader.app
    _bin: koodo-reader
    _github: https://github.com/koodo-reader/koodo-reader
    _name: Koodo Reader
    cask: koodo-reader
    flatpak: io.github.troyeguo.koodo-reader
    scoop: extras/koodo-reader
    winget: AppbyTroye.KoodoReader
  kooha:
    _bin: kooha
    _github: https://github.com/SeaDve/Kooha
    flatpak: io.github.seadve.Kooha
  korkut:
    _bin: korkut
    _github: https://github.com/oguzhaninan/korkut
    _name: Korkut
    npm: korkut
  krew:
    _bin: kubectl-krew
    _github: https://github.com/kubernetes-sigs/krew
    _name: KubeCTL
    brew: krew
  krita:
    _app: krita.app
    _bin: krita
    _github: https://github.com/KDE/krita
    cask: krita
    choco: krita
    flatpak: org.kde.krita
  ksnip:
    _app: ksnip.app
    _bin: ksnip
    _github: https://github.com/ksnip/ksnip
    _name: kSnip
    _post:snap: |
      #!/usr/bin/env bash
      sudo snap connect ksnip:network-observe && sudo snap connect ksnip:network-manager-observe && sudo snap connect ksnip:removable-media
    cask: ksnip
    choco: ksnip
    flatpak: org.ksnip.ksnip
    snap: ksnip
  kube-shell:
    _bin: kube-shell
    _desc: An integrated shell for working with the Kubernetes
    _docs: https://github.com/cloudnativelabs/kube-shell
    _github: https://github.com/cloudnativelabs/kube-shell
    _home: https://github.com/cloudnativelabs/kube-shell
    _name: Kube Shell
    pipx: kube-shell
  kubectx:
    _bin: kubectx
    _desc: Faster way to switch between clusters and namespaces in kubectl
    _github: https://github.com/ahmetb/kubectx
    _name: kubectx
    brew: kubectx
    choco:
      - kubens
      - kubectx
    pacman: kubectx
    port: kubectx
    snap: kubectx --classic
  kubekey:
    _bin: kk
    _desc: kk stands for KubeKey and it is an installer for [KubeSphere](https://github.com/kubesphere/kubesphere)
    _docs: https://github.com/kubesphere/kubekey#usage
    _github: https://github.com/kubesphere/kubekey
    _home: https://kubesphere.io/
    _name: KubeKey
    brew: kubekey
  kubenav:
    _app: kubenav.app
    _bin: null
    _desc: kubenav is the navigator for your Kubernetes clusters right in your pocket
    _docs: https://github.com/kubenav/kubenav
    _github: https://github.com/kubenav/kubenav
    _home: https://kubenav.io/
    _name: kubenav
    cask: kubenav
    github: github.com/kubenav/kubenav
    yay: kubenav-bin
  kubernetes-cli:
    _bin: kubectl
    _desc: kubectl is a command line tool for communicating with a Kubernetes cluster's control plane, using the Kubernetes API
    _docs: https://kubernetes.io/docs/reference/kubectl/kubectl/
    _github: https://github.com/kubernetes/kubectl
    _name: kubectl
    brew: kubectl
    choco: kubernetes-cli
    snap: kubectl --classic
  kubernetes-kompose:
    _bin: kompose
    _desc: Go from Docker Compose to Kubernetes
    _docs: https://kompose.io/getting-started/
    _github: https://github.com/kubernetes/kompose
    _home: https://kompose.io/
    _name: kompose
    brew: kompose
    choco: kubernetes-kompose
    snap: kompose
  kubeval:
    _bin: kubeval
    _desc: Validate your Kubernetes configuration files, supports multiple Kubernetes versions
    _github: https://github.com/instrumenta/kubeval/
    _home: https://www.kubeval.com/
    _name: kubeval
    _post:binary:darwin: |
      #!/usr/bin/env bash
      tar xf kubeval-darwin-amd64.tar.gz
      sudo cp kubeval /usr/local/bin
    _post:binary:linux: |
      #!/usr/bin/env bash
      tar xf kubeval-linux-amd64.tar.gz
      sudo cp kubeval /usr/local/bin
    _pre:scoop: scoop bucket add instrumenta https://github.com/instrumenta/scoop-instrumenta
    binary:darwin: https://github.com/instrumenta/kubeval/releases/latest/download/kubeval-darwin-amd64.tar.gz
    binary:linux: https://github.com/instrumenta/kubeval/releases/latest/download/kubeval-linux-amd64.tar.gz
    # Following Homebrew does not work properly
    # brew: instrumenta/instrumenta/kubeval
    go: github.com/instrumenta/kubeval@latest
    scoop: kubeval
  kustomize:
    _bin: kustomize
    _github: https://github.com/kubernetes-sigs/kustomize
    _name: Kustomize
    brew: kustomize
    choco: kustomize
    go: sigs.k8s.io/kustomize/kustomize/v5@latest
    port: kustomize
  kvantum:
    _bin: kvantummanager
    _desc: Kvantum is an SVG-based theme engine for Qt4/Qt5 and KDE, i.e. a program for styling Qt applications with SVG images, with an emphasis on elegance, usability and practicality.
    _docs: https://github.com/tsujan/Kvantum/blob/master/Kvantum/doc/Theme-Config.pdf
    _github: https://github.com/tsujan/Kvantum
    _home: https://github.com/tsujan/Kvantum
    _name: Kvantum
    apt:
      - qt5-style-kvantum
      - qt5-style-kvantum-themes
    dnf:fedora: kvantum
    eopkg: kvantum
    pacman: kvantum
  kvm:
    _github: false
    _bin:
      - kvm
      - qemu-img
    _bin:brew:
      - libvirtd
      - qemu-img
    _desc: Kernel-based Virtual Machine (or [KVM](https://www.linux-kvm.org/page/Main_Page)) is a virtualization module in the Linux kernel that allows the kernel to function as a hypervisor. It was merged into the Linux kernel mainline in kernel version 2.6.20, which was released on February 5, 2007.
    _docs: https://www.linux-kvm.org/page/Documents
    _groups:
      - kvm
      - libvirt
    _home: https://www.linux-kvm.org/page/Main_Page
    _name: KVM
    _service: libvirt
    _serviceEnabled: true
    ansible: professormanhattan.kvm
    apt:
      - bridge-utils
      - libvirt-clients
      - libvirt-daemon-system
      - qemu-kvm
      - virt-manager
      - virtinst
    brew:
      - libvirt
      - qemu
    dnf:
      - bridge-utils
      - libvirt
      - qemu-kvm
      - virt-install
      - virt-manager
      - virt-top
      - virt-viewer
    pacman:
      - bridge-utils
      - libvirt
      - virt-manager
  langflow:
    _bin: langflow
    _github: https://github.com/logspace-ai/langflow
    _name: LangFlow
    pipx: langflow
  lapce:
    _app: Lapce.app
    _bin: lapce
    _desc: Lightning-fast and Powerful Code Editor written in Rust
    _docs: https://docs.lapce.dev/
    _github: https://github.com/lapce/lapce
    _home: https://lapce.dev/
    _name: Lapce
    cask: lapce
    emerge: app-editors/lapce
    flatpak: dev.lapce.lapce
    nix-env: nixpkgs.lapce
    scoop: lapce
    winget: lapce
  lazygit:
    _bin: lazygit
    _desc: Simple terminal UI for git commands
    _github: https://github.com/jesseduffield/lazygit
    brew: lazygit
    choco: lazygit
    eopkg: lazygit
    go: github.com/jesseduffield/lazygit@latest
    pacman: lazygit
    port: lazygit
    scoop: lazygit
    xbps: lazygit
  ledger-live:
    _app: Ledger Live.app
    _bin: ledger-live
    _github: https://github.com/LedgerHQ/ledger-live
    _desc: '[Ledger Live](https://www.ledger.com/ledger-live) is a new generation wallet desktop application providing a unique interface to maintain multiple cryptocurrencies for your Ledger Nano S / Blue. Manage your device, create accounts, receive and send cryptoassets and many more.'
    _home: https://www.ledger.com/ledger-live
    _name: Ledger Live
    ansible: professormanhattan.ledgerlive
    appimage: ledger-live-desktop
    cask: ledger-live
    choco: ledger-live
  lens:
    _app: Lens.app
    _bin: lens
    _bin:snap: kontena-lens
    _desc: '[Lens IDE](https://k8slens.dev/) provides the full situational awareness for everything that runs in Kubernetes. It is an IDE designed for those who work with Kubernetes on a daily basis'
    _docs: https://docs.k8slens.dev/main/
    _github: https://github.com/lensapp/lens
    _home: https://k8slens.dev/
    _name: Lens
    ansible: professormanhattan.lens
    cask: lens
    choco: lens
    snap: kontena-lens --classic
    yay: lens
  lepton:
    _app: Lepton.app
    _bin: lepton
    _bin:snap: lepton
    _desc: Cross-platform snippet manager
    _github: https://github.com/hackjutsu/Lepton
    _home: https://hackjutsu.com/Lepton/
    _name: lepton
    cask: lepton
    snap: lepton
  lexicon:
    _bin: lexicon
    _desc: '[Lexicon](https://github.com/AnalogJ/lexicon) provides a way to manipulate DNS records on multiple DNS providers in a standardized/agnostic way.'
    _github: https://github.com/AnalogJ/lexicon
    _name: Lexicon
    _post:pipx: |
      #!/usr/bin/env bash
      pipx inject dns-lexicon dns-lexicon[full]
    ansible: professormanhattan.lexicon
    pipx: dns-lexicon
  libguestfs-tools:
    _bin: guestfish
    _github: https://github.com/libguestfs/libguestfs
    apt: libguestfs-tools
    dnf: libguestfs-tools
  libimobiledevice:
    _bin: null
    _github: https://github.com/libimobiledevice/libimobiledevice
    _home: https://libimobiledevice.org/
    brew:darwin: libimobiledevice
  libre-menu-editor:
    _bin: libre-menu-editor
    _name: Libre Menu Editor for GNOME
    flatpak: page.codeberg.libre_menu_editor.LibreMenuEditor
    _github: false
  libreoffice:
    _app: LibreOffice.app
    _bin: libreoffice
    _github: https://github.com/LibreOffice/core
    _desc: '[LibreOffice](https://www.libreoffice.org/) is a free and open-source office productivity software suite, a project of The Document Foundation. It was forked in 2010 from OpenOffice.org, which was an open-sourced version of the earlier StarOffice.'
    _docs: https://documentation.libreoffice.org/en/english-documentation/
    _home: https://www.libreoffice.org/
    _name: LibreOffice
    apt: libreoffice
    cask: libreoffice
    choco: libreoffice-fresh
    dnf: libreoffice
    flatpak: org.libreoffice.LibreOffice
    mas: 1630474372
    pacman: libreoffice
  librewolf:
    _app: LibreWolf.app
    _bin: librewolf
    _gitlab: https://gitlab.com/librewolf-community/browser/linux
    _github: https://github.com/librewolf-community/browser-linux
    _scoopExtras: true
    cask: librewolf
    choco: librewolf
    flatpak: io.gitlab.librewolf-community
    scoop: librewolf
    winget: librewolf
    yay: librewolf
  license:
    _bin: license
    _desc: Command-line license text generator
    _github: https://github.com/nishanths/license
    _name: license
    go: github.com/nishanths/license@latest
    yay: nishanths-license-git
  lighthouse:
    _bin: lighthouse
    _github: https://github.com/GoogleChrome/lighthouse
    _name: Lighthouse
    npm: lighthouse
  lightproxy:
    _app: LightProxy.app
    _bin: lightproxy
    _github: https://github.com/alibaba/lightproxy
    _name: LightProxy
    cask: lightproxy
  linkerd2:
    _bin: linkerd
    _desc: Linkerd is an ultralight, security-first service mesh for Kubernetes
    _github: https://github.com/linkerd/linkerd2
    _home: https://linkerd.io/
    _name: linkerd2
    brew: linkerd
    github: github.com/linkerd/linkerd2
    yay: linkerd
  linkliar:
    _app: LinkLiar.app
    _bin: null
    _desc: Menu bar application for macOS that allows you to spoof your MAC address
    _docs: https://halo.github.io/LinkLiar/usage.html
    _github: https://github.com/halo/LinkLiar
    _home: https://halo.github.io/LinkLiar/
    _name: Link Liar
    cask: linkliar
  liquidjs:
    _bin: liquidjs
    _desc: A simple, expressive and safe template engine.
    _docs: https://liquidjs.com/tutorials/intro-to-liquid.html
    _github: https://github.com/harttle/liquidjs
    _home: https://liquidjs.com/
    _name: LiquidJS
    npm: liquidjs
  litecli:
    _bin: litecli
    _desc: CLI for SQLite Databases with auto-completion and syntax highlighting
    _docs: https://litecli.com/features/
    _github: https://github.com/dbcli/litecli
    _home: https://litecli.com/
    _name: LiteCLI
    brew: litecli
    pipx: litecli
    yay: litecli
  live-captions:
    _bin: live-captions
    _github: https://github.com/abb128/LiveCaptions
    _desc: Linux Desktop application that provides live captioning
    flatpak: net.sapples.LiveCaptions
  localtunnel:
    _bin: lt
    _desc: localtunnel exposes your localhost to the world for easy testing and sharing
    _github: https://github.com/localtunnel/localtunnel
    _home: https://theboroer.github.io/localtunnel-www/
    _name: localtunnel
    brew: localtunnel
    npm: localtunnel
  logcli:
    _bin: logcli
    _desc: Run LogQL queries against a Loki server
    _github: https://github.com/grafana/loki
    _home: https://grafana.com/loki
    _name: logcli
    brew: logcli
    github: github.com/grafana/loki
    yay: logcli-git
  logi-options-plus:
    _app: logioptionsplus.app
    _bin: logi-options-plus
    _env:
      LOGI_OPTIONS_PLUS_APPDATA:
        cask: "$HOME/Library/Application Support/LogiOptionsPlus"
        choco: "TODO"
    _github: false
    _name: Logi Options+
    cask: logi-options-plus
    choco: logioptionsplus
    exe: https://download01.logi.com/web/ftp/pub/techsupport/optionsplus/logioptionsplus_installer.exe
    winget: Logitech.OptionsPlus
  logi-tune:
    _bin: logi-tune
    _github: false
    _name: Logi Tune
    dmg: https://software.vc.logitech.com/downloads/tune/LogiTuneInstaller.dmg
    exe: https://software.vc.logitech.com/downloads/tune/LogiTuneInstall.exe
  lolcat:
    _bin: lolcat
    _github: https://github.com/busyloop/lolcat
    _name: lolcat
    brew: lolcat
    choco: lolcat
    snap: lolcat
  lollypop:
    _bin: lollypop
    _gitlab: https://gitlab.gnome.org/World/lollypop
    _github: https://github.com/hamonikr/lollypop
    _desc: '[Lollypop](https://wiki.gnome.org/Apps/Lollypop) is a lightweight modern music player designed to work excellently on the GNOME desktop environment. Lollypop also features a party mode which will automatically select party-related playlists to play; a full-screen view which lets you visually access the player from your couch thanks to its HiDPI support; and native support for replay gain.'
    _docs: https://gitlab.gnome.org/World/lollypop/issues
    _home: https://wiki.gnome.org/Apps/Lollypop
    _name: Lollypop
    ansible:linux: professormanhattan.lollypop
    apt: lollypop
    dnf: lollypop
    flatpak: org.gnome.Lollypop
    pacman: lollypop
    yay: lollypop-stable-git
  loop:
    _bin: loop
    _github: https://github.com/Miserlou/Loop
    _name: Loop
    cargo: loop-rs
    pacman: loop
    snap: loop-rs --beta
  lpass:
    _bin: null
    _desc: >-
      [LastPass CLI](https://github.com/lastpass/lastpass-cli) is a user-friendly command-line client for [LastPass](https://www.lastpass.com/). LastPass is a freemium password manager that stores encrypted passwords online. The standard version of LastPass comes with a web interface, but also includes plugins for various web browsers and apps for many smartphones. It also includes support for bookmarklets. It is similar to but not open-source like [Bitwarden](https://gitlab.com/megabyte-labs/ansible-roles/bw).
    _docs: LastPass command line interface tool
    _github: https://github.com/lastpass/lastpass-cli
    _name: LastPass CLI
    ansible: professormanhattan.lpass
  lsd:
    _bin: lsd
    _desc: '[LSD](https://github.com/Peltoche/lsd) (LSDeluxe), a clone of ls, is the next gen ls command with colorful output, file type icons, and more.'
    _docs: https://github.com/lsd-rs/lsd
    _github: https://github.com/Peltoche/lsd
    _home: https://github.com/lsd-rs/lsd
    _name: LSD (LSDeluxe)
    _notes: Only the Chocolatey definition is included because LSD is only used on Windows (when `exa` is not available)
    apt: lsd
    brew: lsd
    cargo: lsd
    choco: lsd
    dnf: lsd
    eopkg: lsd
    pacman: lsd
    pkg-freebsd: lsd
    pkg-termux: lsd
    port: lsd
    scoop: lsd
    xbps: lsd
    zypper: lsd
  lsyncd:
    _bin: lsyncd
    _desc: Lsyncd (Live Syncing Daemon) synchronizes local directories with remote targets (via SSH and more)
    _docs: https://lsyncd.github.io/lsyncd/
    _github: https://github.com/lsyncd/lsyncd
    _home: false
    _name: Lsyncd
    apt: lsyncd
    brew: lsyncd
    dnf: lsyncd
    pacman: lsyncd
  lua:
    _bin: lua
    _github: https://github.com/lua/lua
    _name: Lua
    apt: lua
    brew: lua
    choco: lua
    dnf: lua
    pacman: lua
  lulu:
    _app: LuLu.app
    _bin: null
    _desc: Powerful firewall application for macOS
    _docs: https://objective-see.org/products/lulu.html
    _github: https://github.com/objective-see/LuLu
    _home: https://objective-see.org/products/lulu.html
    _name: LuLu
    cask: lulu
  lux:
    _bin: lux
    _github: https://github.com/iawia002/lux
    _name: Lux
    brew: lux
    choco: github.com/iawia002/lux
    go: github.com/iawia002/lux@latest
    scoop: lux
    xbps: lux
  lxc:
    _bin: lxc
    _desc: Linux Containers is an operating-system-level virtualization method for running multiple isolated Linux systems on a control host using a single Linux kernel.
    _docs: https://linuxcontainers.org/lxc/documentation/
    _github: https://github.com/lxc/lxc
    _home: https://linuxcontainers.org/lxc/
    _name: LXC
    _service: lxc
    apt: lxc
    brew: lxc
    dnf: lxc
    pacman: lxc
  lxd:
    _bin: null
    _desc: '[LXD](https://linuxcontainers.org) is a next generation system container manager. It offers a user experience similar to virtual machines but using Linux containers instead'
    _docs: https://linuxcontainers.org/lxd/docs/master/
    _github: https://github.com/lxc/lxd
    _groups:
      - lxd
    _home: https://linuxcontainers.org/lxd/
    _name: LXDC
    ansible:linux: professormanhattan.lxdc
    snap: lxd
  lxd-ui:
    _bin: lxd-ui
    _github: https://github.com/canonical/lxd-ui
    _name: LXD UI
    _post: |
      #!/usr/bin/env bash
      lxd init && lxc config set core.https_address "[::]:8443"
    snap: lxd
  lxdc:
    _github: false
    _deps:
      - lxc
      - lxd
  m-cli:
    _bin: m
    _desc: Swiss Army Knife for macOS. A wrapper for many types of macOS-specific commands.
    _docs: https://github.com/rgcr/m-cli
    _github: https://github.com/rgcr/m-cli
    _home: https://github.com/rgcr/m-cli
    _name: m-cli
    brew:darwin: m-cli
  maas:
    _bin: maas
    _desc: '[MAAS](https://maas.io/) allows very fast server provisioning for your data centre. It allows self-service, remote installation of Windows, CentOS, ESXi and Ubuntu on real servers. It turns your data centre into a bare metal cloud.'
    _docs: https://maas.io/docs
    _github: https://github.com/maas/maas
    _home: https://maas.io/
    _name: MAAS
    _ports:
      - port: 5240
        proto: tcp
      - port: 5240
        proto: udp
      - port: 5248
        proto: tcp
      - port: 5248
        proto: udp
      - port: 5241-5247
        proto: tcp
      - port: 5241-5247
        proto: udp
      - port: 5250-5270
        proto: tcp
      - port: 5250-5270
        proto: udp
    ansible:ubuntu: professormanhattan.maas
    snap:ubuntu: maas
  mackup:
    _bin: mackup
    _desc: '[mackup](https://github.com/lra/mackup) lets you keep your application settings in sync.'
    _docs: https://github.com/lra/mackup
    _github: https://github.com/lra/mackup
    _home: https://github.com/lra/mackup
    _name: mackup
    ansible: professormanhattan.mackup
    brew: mackup
    pipx: mackup
  macprefs:
    _bin: macprefs
    _github: https://github.com/clintmod/macprefs
    _name: MacPrefs
    brew: clintmod/formulas/macprefs
  macvim:
    _app: MacVim.app
    _github: https://github.com/macvim-dev/macvim
    _todo: Integrate this into macOS setup
    cask: macvim
  mage-ai:
    _bin: mage
    _desc: The modern replacement for Airflow. Build, run, and manage data pipelines for integrating and transforming data.
    _docs: https://docs.mage.ai/introduction/overview
    _github: https://github.com/mage-ai/mage-ai
    _home: https://www.mage.ai
    _name: Mage AI
    pipx: mage-ai
  magic-wormhole:
    _bin: wormhole
    _github: https://github.com/magic-wormhole/magic-wormhole
    _name: Magic Wormhole
    brew: magic-wormhole
  mailcatcher:
    _bin: mailcatcher
    _github: https://github.com/sj26/mailcatcher
    _name: Mail Catcher
    _service: mailcatcher
    brew: mailcatcher
    gem: mailcatcher
  mailspring:
    _app: Mailspring.app
    _bin: mailspring
    _desc: '[Mailspring](https://getmailspring.com/) comes packed with powerful features like Unified Inbox, Snooze, Send Later, Mail Rules, Templates and more. Mailspring Pro, which you can unlock with a monthly subscription, adds even more features for people who send a ton of email: link tracking, read receipts, mailbox analytics, contact and company profiles. All of these features run in the client - Mailspring does not send your email credentials to the cloud.'
    _docs: https://community.getmailspring.com/docs/
    _env:
      MAILSPRING_APPDATA:
        cask: "$HOME/Library/Application Support/Mailspring"
        choco: "TODO"
        flatpak: "TODO"
        snap: "TODO"
    _github: https://github.com/Foundry376/Mailspring
    _home: https://getmailspring.com/
    _name: Mailspring
    cask: mailspring
    choco: mailspring
    flatpak: com.getmailspring.Mailspring
    snap: mailspring
    yay: mailspring
  mailsy:
    _bin: mailsy
    _github: https://github.com/BalliAsghar/Mailsy
    _name: Mailsy
    brew: mailsy
    npm: mailsy
  majestic:
    _bin: majestic
    _github: https://github.com/Raathigesh/majestic
    _name: Majestic
    npm: majestic
  makeself:
    _bin: makeself
    _github: https://github.com/megastep/makeself
    _name: MakeSelf
    brew: makeself
  malwarebytes:
    _app: Malwarebytes.app
    _bin: malwarebytes
    _desc: Cybersecurity. For every one.
    _home: https://www.malwarebytes.com/
    _github: false
    _name: Malwarebytes
    cask: malwarebytes
    choco: malwarebytes
  mambaforge:
    _bin: conda
    _github: https://github.com/mamba-org/mamba
    _name: Mamba Forge
    _post: |
      #!/usr/bin/env bash
      echo y | conda update -n base -c conda-forge conda
    cask: mambaforge
    choco: mambaforge
    script:linux: bash <(curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh")
  manta:
    _app: Manta.app
    _bin: null
    _desc: Flexible invoicing desktop app with beautiful & customizable templates
    _github: https://github.com/hql287/Manta
    _name: Manta
    appimage: https://github.com/hql287/Manta/releases/download/v1.1.4/Manta-1.1.4-x86_64.AppImage
    cask: manta
    exe: https://github.com/hql287/Manta/releases/download/v1.1.4/Manta.Setup.1.1.4.exe
    github: github.com/hql287/Manta
  mariadb:
    _bin: mariadb
    _github: false
    _name: MariaDB
    _service: mariadb
    apk: mariadb-server
    apt: mariadb-server
    brew: mariadb
    choco: mariadb
    dnf: mariadb-server
    pacman: mariadb-server
  mark-text:
    _app: MarkText.app
    _bin: marktext
    _desc: A simple and elegant markdown editor, available for Linux, macOS and Windows
    _env:
      MARK_TEXT_APPDATA:
        cask: "$HOME/Library/Application Support/marktext"
        choco: "TODO"
        flatpak: "TODO"
        winget: "TODO"
    _github: https://github.com/marktext/marktext
    _name: MarkText
    cask: mark-text
    choco: marktext
    flatpak: com.github.marktext.marktext
    winget: marktext
    yay: marktext
  markdownlint-cli:
    _bin: markdownlint
    _desc: MarkdownLint command line interface
    _docs: https://github.com/igorshubovych/markdownlint-cli
    _github: https://github.com/igorshubovych/markdownlint-cli
    _home: https://github.com/igorshubovych/markdownlint-cli
    _name: Markdownlint CLI
    brew: markdownlint-cli
    pipx: markdownlint-cli
  markmap:
    _bin: markmap
    _desc: Visualize your Markdown as mindmaps with Markmap.
    _docs: https://markmap.js.org/docs/markmap
    _github: https://github.com/markmap/markmap
    _home: https://markmap.js.org/
    _name: Markmap
    npm: markmap-cli
  marp:
    _bin: marp
    _desc: A CLI interface for Marp and Marpit based converters
    _docs: https://github.com/marp-team/marp-cli
    _github: https://github.com/marp-team/marp-cli
    _home: https://marp.app/
    _name: Marp
    brew: marp-cli
    npm: '@marp-team/marp-cli'
    scoop: marp
  mas:
    _bin: mas
    _desc: '[MAS CLI](https://github.com/mas-cli/mas) is a simple command line interface for the Mac App Store. Designed for scripting and automation.'
    _name: MAS CLI
    _github: https://github.com/mas-cli/mas
    ansible:darwin: professormanhattan.mas
    brew:darwin: mas
    port: mas
  mask:
    _bin: mask
    _github: https://github.com/jacobdeichert/mask
    _name: Mask
    brew: mask
    cargo: mask
  masscan:
    _bin: masscan
    _github: https://github.com/robertdavidgraham/masscan
    _name: Masscan
    brew: masscan
    choco: masscan
  masscode:
    _app: massCode.app
    _bin: null
    _desc: A free and open source code snippets manager for developers
    _github: https://github.com/antonreshetov/massCode
    _name: MassCode
    cask: masscode
    github: github.com/antonreshetov/massCode
  mc:
    _bin: mc
    _desc: MinIO Client is a replacement for ls, cp, mkdir, diff and rsync commands for filesystems and object storage
    _github: https://github.com/minio/mc
    _home: https://min.io/
    _name: mc
    _post:binary:linux: |
      #!/usr/bin/env bash
      # TODO
    _post:binary:windows: |
      #!/usr/bin/env bash
      # TODO
    binary:linux: https://dl.min.io/client/mc/release/linux-amd64/mc
    binary:windows: https://dl.min.io/client/mc/release/windows-amd64/mc.exe
    brew: minio/stable/mc
    go: github.com/minio/mc@latest
  mcfly:
    _bin: mcfly
    _desc: "[McFly](https://github.com/cantino/mcfly) replaces your default CTRL-r shell history search with an intelligent search engine that takes into account your working directory and the context of recently executed commands. McFly's suggestions are prioritized in real time with a small neural network."
    _github: https://github.com/cantino/mcfly
    _name: McFly
    ansible:darwin: professormanhattan.mcfly
    ansible:linux: professormanhattan.mcfly
    brew: mcfly
    port: mcfly
    script:darwin: curl -LSfs https://raw.githubusercontent.com/cantino/mcfly/master/ci/install.sh | sh -s -- --git cantino/mcfly
    script:linux: curl -LSfs https://raw.githubusercontent.com/cantino/mcfly/master/ci/install.sh | sh -s -- --git cantino/mcfly
  medis:
    _app: Medis.app
    _bin: medis
    _github: https://github.com/luin/medis
    _name: Medis
    cask: medis
  medusa:
    _bin: medusa
    _github: https://github.com/medusajs/medusa
    _name: Medusa
    npm: '@medusajs/medusa-cli'
  meetingbar:
    _app: MeetingBar.app
    _bin: null
    _desc: Meeting menu bar application that shows calendar event details on macOS
    _docs: https://github.com/leits/MeetingBar
    _github: https://github.com/leits/MeetingBar
    _home: https://apps.apple.com/app/id1532419400
    _name: Meeting Bar
    cask: meetingbar
    mas: 1532419400
  meld:
    _app: Meld.app
    _bin: meld
    _github: https://github.com/GNOME/meld
    cask: meld
    choco: meld
    flatpak: org.gnome.meld
  meta:
    _bin: meta
    _github: https://github.com/mateodelnorte/meta
    _name: Meta
    npm: meta
  meta-package-manager:
    _bin: mpm
    _github: https://github.com/kdeldycke/meta-package-manager
    _name: Meta Package Manager
    brew: meta-package-manager
    pipx: meta-package-manager
  metasploit:
    _github: https://github.com/rapid7/metasploit-framework
    _name: Metasploit Framework
    _when: '! test -f /opt/metasploit-framework/bin/msfconsole'
    script: curl -sSL --compressed https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > /tmp/msfinstall && chmod 755 /tmp/msfinstall && sudo /tmp/msfinstall
  micromamba:
    _bin: micromamba
    _github: https://github.com/mamba-org/mamba
    _name: MicroMamba
    _post: |
      #!/usr/bin/env bash
      micromamba self-update
    brew: micromamba
  microsoft-edge:
    _app: Microsoft Edge.app
    _bin: microsoft-edge
    _desc: '[Microsoft Edge](https://www.microsoft.com/en-us/edge) is a cross-platform web browser developed by Microsoft. It was first released for Windows 10 and Xbox One in 2015, then for Android and iOS in 2017, for macOS in 2019, and as a preview for Linux in October 2020.'
    _docs: https://docs.microsoft.com/en-us/microsoft-edge/
    _env:
      MICROSOFT_EDGE_APPDATA:
        cask: "$HOME/Library/Application Support/Microsoft Edge/Default"
        choco: "TODO"
        flatpak: "TODO"
    _github: false
    _home: https://www.microsoft.com/en-us/edge
    _name: Microsoft Edge
    _post: |
      #!/usr/bin/env bash
      # @brief See `google-chrome` `_post` script for more details
      function chromeSetUp() {
        ### Ensure Chrome policies directory is present
        # gum log -sl info 'Processing policy directories for Chromium based browsers'
        ### TODO - Find POLICY_DIR location for Microsoft Edge
        # for POLICY_DIR in "/opt/google/chrome/policies" "/etc/chromium/policies" "/etc/brave/policies"; do
        #   if [ -d "$(dirname "$POLICY_DIR")" ]; then
        #     ### Managed policies
        #     if [ ! -f "$POLICY_DIR/managed/policies.json" ]; then
        #       gum log -sl info "Ensuring directory $POLICY_DIR/managed exists"
        #       sudo mkdir -p "$POLICY_DIR/managed"
        #       gum log -sl info "Copying ${XDG_CONFIG_HOME:-$HOME/.config}/chrome/managed.json to $POLICY_DIR/managed/policies.json"
        #       sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/chrome/managed.json" "$POLICY_DIR/managed/policies.json"
        #     fi
        #     ### Recommended policies
        #     if [ ! -f "$POLICY_DIR/recommended/policies.json" ]; then
        #       gum log -sl info "Ensuring directory $POLICY_DIR/recommended exists" && sudo mkdir -p "$POLICY_DIR/recommended"
        #       gum log -sl info "Copying ${XDG_CONFIG_HOME:-$HOME/.config}/chrome/recommended.json to $POLICY_DIR/recommended/policies.json"
        #       sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/chrome/recommended.json" "$POLICY_DIR/recommended/policies.json"
        #     fi
        #   else
        #     gum log -sl info "Skipping extension injection into $POLICY_DIR - create these folders prior to running to create managed configs"
        #   fi
        # done

        ### Add Chrome extension JSON
        gum log -sl info 'Populating Chrome extension JSON'
        for EXTENSION_DIR in "$HOME/Library/Application Support/Microsoft/Edge/External Extensions"; do
          ### Ensure program-type is installed
          if [ -d "$(dirname "$EXTENSION_DIR")" ]; then
            ### Ensure extension directory exists
            if [[ "$EXTENSION_DIR" == '/opt/'* ]] || [[ "$EXTENSION_DIR" == '/etc/'* ]]; then
              if [ ! -d "$EXTENSION_DIR" ]; then
                gum log -sl info "Creating directory $EXTENSION_DIR" && sudo mkdir -p "$EXTENSION_DIR"
              fi
            else
              if [ ! -d "$EXTENSION_DIR" ]; then
                gum log -sl info "Creating directory $EXTENSION_DIR" && mkdir -p "$EXTENSION_DIR"
              fi
            fi

            ### Add extension JSON
            gum log -sl info "Adding Chrome extensions to $EXTENSION_DIR"
            for EXTENSION in {{ list (.chromeExtensions | toString | replace "[" "" | replace "]" "") | uniq | join " " }}; do
              gum log -sl info "Adding Chrome extension manifest ($EXTENSION)"
              if ! echo "$EXTENSION" | grep 'https://chrome.google.com/webstore/detail/' > /dev/null; then
                EXTENSION="https://chrome.google.com/webstore/detail/$EXTENSION"
              fi
              EXTENSION_ID="$(echo "$EXTENSION" | sed 's/^.*\/\([^\/]*\)$/\1/')"
              if [[ "$EXTENSION_DIR" == '/opt/'* ]] || [[ "$EXTENSION_DIR" == '/etc/'* ]]; then
                sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/chrome/extension.json" "$EXTENSION_DIR/${EXTENSION_ID}.json"
              else
                cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/chrome/extension.json" "$EXTENSION_DIR/${EXTENSION_ID}.json"
              fi
            done
          else
            gum log -sl info "$EXTENSION_DIR does not exist"
          fi
        done
      }
      chromeSetUp
    cask: microsoft-edge
    choco: microsoft-edge
    flatpak: com.microsoft.Edge
    yay: microsoft-edge-stable-bin
  microsoft-git:
    _bin: scalar
    _github: https://github.com/microsoft/VFSForGit
    _name: Microsoft Git (with Git VFS)
    cask: microsoft/git/microsoft-git
    script:linux: |
      #!/usr/bin/env bash
      mkdir -p "$HOME/.local/src"
      rm -rf "$HOME/.local/src/microsoft-git"
      git clone https://github.com/microsoft/git "$HOME/.local/src/microsoft-git"
      cd "$HOME/.local/src/microsoft-git"
      make -j12 prefix=/usr/local
      sudo make -j12 prefix=/usr/local install
    winget: microsoft.git
  microsoft-office:
    _app: Microsoft Word.app
    _bin: null
    _github: false
    _desc: '[Microsoft Office](https://www.microsoft.com/en-us/microsoft-365/microsoft-office), or simply Office, is a family of client software, server software, and services developed by Microsoft.'
    _docs: https://docs.microsoft.com/en-us/microsoft-365/?view=o365-worldwide
    _home: https://www.office.com/
    _name: Office
    cask: microsoft-office
    choco: office365business
  microsoft-remote-desktop:
    _app: Microsoft Remote Desktop.app
    _bin: microsoft-remote-desktop
    _github: false
    _name: Microsoft Remote Desktop
    cask: microsoft-remote-desktop
    mas: 1295203466
  microsoft-teams:
    _app: Microsoft Teams.app
    _bin: teams
    _github: false
    _desc: '[Microsoft Teams](https://www.microsoft.com/en-us/microsoft-teams/group-chat-software) is a proprietary business communication platform developed by Microsoft, as part of the Microsoft 365 family of products. Teams primarily competes with the similar service Slack, offering workspace chat and videoconferencing, file storage, and application integration.'
    _name: Microsoft Teams
    ansible: professormanhattan.teams
    cask: microsoft-teams
    choco: microsoft-teams
    flatpak: com.microsoft.Teams
    snap: teams-for-linux
    yay: teams-for-linux
  microsoft-todo:
    _app: Ao.app
    _bin:snap: microsoft-todo-unofficial
    _desc: '[Microsoft To Do](https://todo.microsoft.com/tasks/) is a productivity application developed by Microsoft. It lets you create to do lists, reminders, and notes for any purpose. Sync lists across devices and Microsoft 365 accounts to access daily planner and task manager features anywhere.'
    _docs: https://support.microsoft.com/en-us/todo
    _github: false
    _home: https://todo.microsoft.com/tasks/
    _name: Microsoft To-Do
    ansible: professormanhattan.microsofttodo
    cask: ao
    mas: 1274495053
    snap: microsoft-todo-unofficial
  miller:
    _bin: mlr
    _github: https://github.com/johnkerl/miller
    _name: Miller
    apt: miller
    brew: miller
    choco: miller
    dnf: miller
    port: miller
  minikube:
    _bin: minikube
    _deps:
      - docker
    _deps:darwin:
      - hyperkit
    _desc: minikube quickly sets up a local Kubernetes cluster on macOS, Linux, and Windows
    _docs: https://minikube.sigs.k8s.io/docs/
    _github: https://github.com/kubernetes/minikube
    _name: minikube
    # TODO - Prefer HyperV on Windows https://minikube.sigs.k8s.io/docs/drivers/hyperv/
    _post: |
      #!/usr/bin/env bash
      if command -v hyperkit > /dev/null; then minikube config set driver hyperkit; elif command -v docker > /dev/null; then minikube config set driver docker; elif command -v VBoxManage > /dev/null; then minikube config set driver virtualbox; fi
    _todo: A full installation of Xcode.app 9.0 is required. Also, hyperkit x86_64 architecture is required for this software. So automate install of Xcode.app 9.0 and add check for x86_64 prior to installing this
    brew: minikube
    choco: minikube
  mise:
    _bin: mise
    _github: https://github.com/jdx/mise
    _name: mise
    _post: |
      #!/usr/bin/env bash
      mise install
      if [ -d "${XDG_DATA_HOME:-$HOME/.local/share}/mise/installs/java/openjdk-20/Contents" ]; then
        sudo mkdir -p /Library/Java/JavaVirtualMachines/openjdk-20.jdk
        sudo ln -s "${XDG_DATA_HOME:-$HOME/.local/share}/mise/installs/java/openjdk-20/Contents" /Library/Java/JavaVirtualMachines/openjdk-20.jdk/Contents
      fi
    apk: mise
    brew: mise
    cargo: mise-cli
    nix-env: mise
    npm: '@jdxcode/mise'
    port: port
  mitmproxy:
    _bin: mitmproxy
    _desc: '[mitmproxy](https://mitmproxy.org/) is an interactive, SSL/TLS-capable intercepting proxy with a console interface for HTTP/1, HTTP/2, and WebSockets. It also includes mitmweb which is a web-based interface for mitmproxy.'
    _docs: https://docs.mitmproxy.org/stable
    _github: https://github.com/mitmproxy/mitmproxy
    _home: https://mitmproxy.org/
    _name: mitmproxy
    ansible: professormanhattan.mitmproxy
    apt: mitmproxy
    cask: mitmproxy
    choco: mitmproxy
    pacman: mitmproxy
  mjml:
    _app: MJML.app
    _bin:npm: mjml
    _desc: The desktop app for MJML
    _docs: https://documentation.mjml.io/
    _github: https://github.com/mjmlio/mjml-app
    _home: https://mjmlio.github.io/mjml-app/
    _name: MJML App
    cask: mjml
    github: github.com/mjmlio/mjml-app
    npm: mjml
  mkcert:
    _bin: mkcert
    _desc: A simple zero-config tool to make locally trusted development certificates with any names
    _github: https://github.com/FiloSottile/mkcert
    _name: mkcert
    brew: mkcert
    choco: mkcert
    github: github.com/FiloSottile/mkcert
    pacman: mkcert
    scoop: mkcert
  mockoon:
    _app: Mockoon.app
    _bin:snap: mockoon
    _desc: Mockoon is the easiest and quickest way to run mock APIs locally. No remote deployment, no account required, open source
    _github: https://github.com/mockoon/mockoon
    _name: Mockoon
    cask: mockoon
    choco: mockoon
    github: github.com/mockoon/mockoon
    npm: '@mockoon/cli'
    snap: mockoon
    winget: mockoon
    yay: mockoon-bin
  modern-flyouts:
    _bin: modern-flyouts
    _github: https://github.com/ModernFlyouts-Community/ModernFlyouts
    _name: Modern Flyouts
    choco: modernflyouts
    winapp: modernflyouts-preview/9MT60QV066RP
    winget: ModernFlyouts.ModernFlyouts
  mods:
    _bin: mods
    _desc: AI for the command-line that leverages OpenAI or LocalAI (if configured to do so)
    _docs: https://github.com/charmbracelet/mods
    _github: https://github.com/charmbracelet/mods
    _home: https://charm.sh/
    _name: Mods
    brew: charmbracelet/tap/mods
    go: github.com/charmbracelet/mods@latest
    yay: mods
  mole:
    _bin: mole
    _desc: CLI application to create ssh tunnels focused on resiliency and user experience
    _docs: https://davrodpin.github.io/mole/
    _github: https://github.com/davrodpin/mole
    _home: https://davrodpin.github.io/mole/
    _name: mole
    brew: davrodpin/homebrew-mole/mole
    github: github.com/davrodpin/mole
    yay: mole-bin
  molecule:
    _bin: molecule
    _desc: Molecule aids in the development and testing of Ansible roles
    _docs: https://molecule.readthedocs.io/en/latest/getting-started.html
    _github: https://github.com/ansible-community/molecule
    _home: https://molecule.readthedocs.io/en/latest/
    _name: Ansible Molecule
    _post:pipx: |
      #!/usr/bin/env bash
      pipx inject molecule ansible PyObjC PyObjC-core docker lxml netaddr pexpect python-vagrant pywinrm requests-credssp watchdog apache-libcloud gcloud junit-xml molecule-docker molecule-gce molecule-vagrant pycrypto
    # brew: molecule
    pipx: molecule
  monero:
    _app: monero-wallet-gui.app
    _bin: monero
    _bin:flatpak: org.getmonero.Monero
    _desc: '[Monero](https://www.getmonero.org/) is a leading cryptocurrency focused on private and censorship-resistant transactions. This role installs the Monero wallet application which is required for interacting with the Monero network.'
    _docs: https://www.getmonero.org/resources/user-guides/
    _github: https://github.com/monero-project/monero
    _home: https://www.getmonero.org/
    _name: Monero
    _restricted: true
    _service: monero
    ansible: professormanhattan.monero
    cask: monero-wallet
    choco: monero
    flatpak: org.getmonero.Monero
  monero-cli:
    _bin: monerod
    _desc: CLI for Monero, a leading cryptocurrency focused on private and censorship-resistant transactions.
    _docs: https://www.getmonero.org/resources/user-guides/
    _github: https://github.com/monero-project/monero
    _home: https://www.getmonero.org/
    _restricted: true
    brew: monero
    scoop: monero
  mongodb:
    _bin: mongod
    _github: https://github.com/mongodb/mongo
    _name: MongoDB
    _service: mongodb
    _service:brew: mongodb-community
    brew: mongodb/brew/mongodb-community
    choco: mongodb
  mongodb-atlas:
    _bin: atlas
    _desc: Install the Atlas CLI to quickly provision and manage Atlas database deployments from the terminal. (Official MongoDB hosted service provider CLI)
    _docs: https://www.mongodb.com/docs/atlas/cli/stable/command/atlas/
    _github: https://github.com/mongodb/mongodb-atlas-cli
    _home: https://www.mongodb.com/docs/atlas/cli/stable/
    _name: MongoDB Atlas
    brew: mongodb-atlas
    choco: mongodb-atlas
  mongodb-compass:
    _app: MongoDB Compass.app
    _bin: mongodb-compass
    _github: https://github.com/mongodb-js/compass
    _name: MongoDB Compass
    apt: https://downloads.mongodb.com/compass/mongodb-compass_1.38.0_amd64.deb
    cask: mongodb-compass
    choco: mongodb-compass
    dnf: https://downloads.mongodb.com/compass/mongodb-compass-1.38.0.x86_64.rpm
  monitorcontrol:
    _app: MonitorControl.app
    _bin: null
    _desc: Menu bar application for macOS that allows you to control the screen brightness and volume
    _docs: https://github.com/MonitorControl/MonitorControl
    _github: https://github.com/MonitorControl/MonitorControl
    _home: https://github.com/MonitorControl/MonitorControl
    _name: Monitor Control
    cask: monitorcontrol
  mono:
    _bin: mono
    _desc: Mono open source ECMA CLI, C# and .NET implementation.
    _docs: https://www.mono-project.com/docs/
    _github: https://github.com/mono/mono
    _home: https://www.mono-project.com/
    _name: Mono
    apt: mono-complete
    brew: mono
    choco: mono
    dnf: mono-complete
    port: mono
    scoop: main/mono
    winget: Mono.Mono
  mosh:
    _bin: mosh
    _desc: Remote terminal application that allows roaming, supports intermittent connectivity, and provides intelligent local echo and line editing of user keystrokes.
    _docs: https://mosh.org/#usage
    _github: https://github.com/mobile-shell/mosh
    _home: https://mosh.org/
    _name: Mosh
    apk: mosh
    apt: mosh
    brew: mosh
    dnf: mosh
    emerge: net-misc/mosh
    pacman: mosh
    pkg-freebsd: net/mosh
    pkg_add: mosh
    port: mosh
    zypper: mosh
  motrix:
    _app: Motrix.app
    _bin: motrix
    _desc: '[Motrix](https://motrix.app/) is a full-featured download manager that supports downloading HTTP, FTP, BitTorrent, Magnet, etc.'
    _github: https://github.com/agalwood/Motrix
    _home: https://motrix.app/
    _name: Motrix
    ansible: professormanhattan.motrix
    cask: motrix
    choco: motrix
    flatpak: net.agalwood.Motrix
    github: github.com/agalwood/Motrix
    scoop: motrix
    yay: motrix-bin
  mpg123:
    _bin: mpg123
    _github: false
    _desc: mpg123 is a free and open-source audio player. It supports MPEG audio formats, including MP3
    _home: https://mpg123.org/
    _name: mpg123
    apt: mpg123
    brew: mpg123
    choco: mpg123
    dnf: mpg123
    pacman: mpg123
    port: mpg123
    scoop: mpg123
  mpv:
    _app: mpv.app
    _bin: mpv
    _github: https://github.com/mpv-player/mpv
    _name: MPV
    _todo: This software does not run on macOS versions other than Mojave, Catalina, Big Sur and Ventura --- probably adding support - this issue will likely fix itself
    brew: mpv
    cask: mpv
    choco: mpv
    flatpak: io.mpv.Mpv
  mqttx:
    _app: MQTTX.app
    _bin: mqttx
    _desc: MQTT X - Elegant Cross-platform MQTT 5.0 Desktop Client
    _github: https://github.com/emqx/MQTTX
    _name: MQTT X
    cask: mqttx
    flatpak: com.emqx.MQTTX
    github: github.com/emqx/MQTTX
    snap: mqttx
    yay: mqttx-bin
  mudlet:
    _app: mudlet.app
    _bin: mudlet
    _desc: A full-featured cross-OS MUD client
    _docs: https://wiki.mudlet.org/?pk_vid=b53bfe5eba0aac5a1685341616dc4f27
    _github: https://github.com/Mudlet/Mudlet
    _home: https://www.mudlet.org/
    _name: Mudlet
    cask: mudlet
    choco: mudlet
    snap: mudlet-linux
  muffet:
    _bin: muffet
    _desc: Fast website link checker in Go
    _github: https://github.com/raviqqe/muffet
    _name: muffet
    brew: muffet
    github: github.com/raviqqe/muffet
    go: github.com/raviqqe/muffet/v2@latest
    yay: muffet-bin
  mullvad-vpn:
    _app: Mullvad VPN.app
    _bin: null
    _desc: The Mullvad VPN client app for desktop and mobile
    _github: https://github.com/mullvad/mullvadvpn-app
    _name: Mullvad VPN
    apt: https://github.com/mullvad/mullvadvpn-app/releases/download/2022.5/MullvadVPN-2022.5_amd64.deb
    cask: mullvadvpn
    dnf: https://github.com/mullvad/mullvadvpn-app/releases/download/2022.5/MullvadVPN-2022.5_x86_64.rpm
    exe: https://github.com/mullvad/mullvadvpn-app/releases/download/2022.5/MullvadVPN-2022.5.exe
    github: github.com/mullvad/mullvadvpn-app
    yay: mullvad-vpn
  multi-gitter:
    _bin: multi-gitter
    _github: https://github.com/lindell/multi-gitter
    _name: Multi-Gitter
    brew: lindell/multi-gitter/multi-gitter
    go: github.com/lindell/multi-gitter@latest
  multipass:
    _app: Multipass.app
    _bin: multipass
    _desc: '[Multipass](https://multipass.run/) makes it so that you can get an instant Ubuntu VM with a single command. Multipass can launch and run virtual machines and configure them with cloud-init like a public cloud. It is a product of [Canonical](https://canonical.com/), the same company that publishes Ubuntu.'
    _docs: https://multipass.run/docs
    _github: https://github.com/canonical/multipass
    _home: https://multipass.run/
    _name: Multipass
    _post:cask: |
      #!/usr/bin/env bash
      multipass set local.driver=virtualbox
    _post:choco: |
      #!/usr/bin/env bash
      multipass set local.driver=virtualbox
    ansible: professormanhattan.multipass
    cask: multipass
    choco: multipass
    snap: multipass
  mutagen:
    _bin: mutagen
    _github: https://github.com/mutagen-io/mutagen
    _name: Mutagen
    _post: |
      #!/usr/bin/env bash
      mutagen daemon register
    brew: mutagen-io/mutagen/mutagen
  mycli:
    _bin: mycli
    _desc: A terminal client for MySQL with auto-completion and syntax highlighting.
    _docs: https://www.mycli.net/docs
    _github: https://github.com/dbcli/mycli
    _home: https://www.mycli.net/
    _name: MyCLI
    apt: mycli
    brew: mycli
    pipx: mycli
  mymonero:
    _app: MyMonero.app
    _bin: null
    _desc: Easy-to-use Monero client with managed keys
    _docs: https://github.com/mymonero/mymonero-app-js
    _github: https://github.com/mymonero/mymonero-app-js
    _home: https://mymonero.com/
    cask: mymonero
    choco: mymonero
  nativefier:
    _bin: nativefier
    _deps:
      - imagemagick
    _desc: Make any web page a desktop application
    _github: https://github.com/nativefier/nativefier
    _name: nativefier
    npm: nativefier
  nativescript:
    _bin: ns
    _github: https://github.com/NativeScript/NativeScript
    _name: NativeScript
    npm: nativescript
  nautilus-brasero:
    _github: false
    apt: nautilus-extension-brasero
    dnf: brasero-nautilus
    pacman: brasero-nautilus
  nautilus-gsconnect:
    _github: false
    apt: nautilus-gsconnect
    dnf: nautilus-gsconnect
    pacman: nautilus-gsconnect
  nautilus-gtkhash:
    _github: false
    apt: nautilus-gtkhash
    dnf: gtkhash-nautilus
    pacman: nautilus-gtkhash
  nautilus-image-converter:
    _github: false
    apt: nautilus-image-converter
    dnf:fedora: nautilus-image-converter
    pacman: nautilus-image-converter
  nautilus-python:
    _github: false
    apt: nautilus-python
    dnf:fedora: nautilus-python
    pacman: nautilus-python
  nautilus-seahorse:
    _github: false
    apt: nautilus-seahorse
    dnf: seahorse-nautilus
    pacman: nautilus-seahorse
  nautilus-search-tool:
    _github: false
    apt: nautilus-search-tool
    dnf:fedora: nautilus-search-tool
    pacman: nautilus-search-tool
  nautilus-share:
    _github: false
    apt: nautilus-share
    pacman: nautilus-share
  nautilus-wipe:
    _github: false
    apt: nautilus-wipe
    pacman: nautilus-wipe
  navi:
    _bin: navi
    _desc: An interactive cheatsheet tool for the command-line
    _docs: https://github.com/denisidoro/navi/blob/master/docs/installation.md
    _github: https://github.com/denisidoro/navi
    _home: https://github.com/denisidoro/navi
    _name: Navi
    _repology: navi
    brew: navi
    cargo: navi --locked
    emerge: app-misc/navi
    nix-env: nixpkgs.navi
    pacman: navi
  nb:
    _bin: nb
    _deps:
      - bat
      - netcat
      - pandoc
      - ripgrep
      - tig
      - w3m
    _desc: '[nb](https://xwmx.github.io/nb) is a command line and local web note‑taking, bookmarking, archiving, and knowledge base application with plain text data storage, encryption, filtering, pinning, #tagging,  search, Git-backed versioning and syncing, Pandoc-backed conversion and many more features.'
    _github: https://github.com/xwmx/nb
    _home: https://xwmx.github.io/nb
    _name: nb
    # Permission denied: /usr/share/zsh/site-functions after running sudo nb completions install and nb completions install on macOS arm64
    # _post: nb completions install
    ansible: professormanhattan.nb
    basher: xwmx/nb
    bpkg: xwmx/nb
    brew: nb
    npm: nb.sh
  ncc:
    _bin: ncc
    _desc: Compile a Node.js project into a single file. Supports TypeScript, binary addons, dynamic requires.
    _github: https://github.com/vercel/ncc
    brew: ncc
    npm: '@vercel/ncc'
  ndb:
    _bin: ndb
    _github: https://github.com/GoogleChromeLabs/ndb
    _name: ndb
    npm: ndb
  nebula:
    _bin: nebula
    _desc: A scalable overlay networking tool with a focus on performance, simplicity and security
    _docs: https://nebula.defined.net/docs/
    _github: https://github.com/slackhq/nebula
    _home: https://github.com/slackhq/nebula
    _name: nebula
    _service: nebula
    _service:brew:
      - name: nebula
        sudo: true
    _serviceEnabled: true
    brew: nebula
    dnf: nebula
    pacman: nebula
  nectar:
    _bin: nectar
    _desc: JavaScript native compiler. No bytecode no VM, just pure native binaries.
    _docs: https://nectar.js.org/docs/
    _github: https://github.com/NerdLang/nerd
    _home: https://nectar.js.org/
    _name: nerctarjs
    npm: nectarjs
  neofetch:
    _bin: neofetch
    _github: https://github.com/dylanaraps/neofetch
    _name: NeoFetch
    apk:
      - ncurses
      - neofetch
    apt: neofetch
    brew: neofetch
    dnf: neofetch
    eopkg: neofetch
    nix-env: neofetch
    pacman: neofetch
    pkg-freebsd: neofetch
    pkg-termux: neofetch
    scoop: neofetch
    xbps: neofetch
    zypper: neofetch
  neovide:
    _app: Neovide.app
    _bin: neovide
    _desc: No Nonsense Neovim Client in Rust
    _docs: https://neovide.dev/installation.html
    _github: https://github.com/neovide/neovide
    _home: https://neovide.dev/
    _name: Neovide
    cask: neovide
    pacman: neovide
    scoop: neovide
    snap: neovide
  neovim:
    _bin: nvim
    _deps:
      - clangd
      - terraform-ls
      - neovim-node-host
    _desc: '[neovim](https://neovim.io/) is Vim-fork focused on extensibility and usability'
    _docs: https://neovim.io/doc/general/
    _github: https://github.com/neovim/neovim
    _home: https://neovim.io/
    _name: neovim
    apk: neovim
    apt:
      - neovim
      - python3-neovim
    brew: neovim
    choco: neovim
    dnf:
      - neovim
      - python3-neovim
    # Need to figure out how to include neovim plugin suite
    # flatpak: io.neovim.nvim
    nix: neovim
    pacman:
      - neovim
      - python-pynvim
    pkg:
      - neovim
      - py27-pynvim
      - py36-pynvim
    port: neovim
    winget: Neovim.Neovim
    zypper:
      - neovim
      - python-neovim
      - python3-neovim
  neovim-node-host:
    _bin: neovim-node-host
    _github: https://github.com/neovim/node-client
    _name: Neovim Node Host
    npm: neovim
  nest:
    _bin: nest
    _desc: CLI tool for Nest applications
    _docs: https://docs.nestjs.com/cli/overview
    _github: https://github.com/nestjs/nest-cli
    _name: nest
    npm: '@nestjs/cli'
  netcat:
    _bin: netcat
    _github: false
    _desc: netcat (often abbreviated to nc) is a computer networking utility for reading from and writing to network connections using TCP or UDP.
    _home: https://nc110.sourceforge.io/
    _name: netcat
    apt: netcat
    brew: netcat
    choco: netcat
    dnf: netcat
    pacman: netcat
    scoop: netcat
  netdata:
    _bin: netdata
    _deps:
      - debsecan
      - speedtest-cli
    _desc: '[Netdata](https://www.netdata.cloud/) is an open source tool designed to collect real-time metrics, such as CPU usage, disk activity, bandwidth usage, website visits, etc., and then display them in live, easy-to-interpret charts.'
    _docs: https://learn.netdata.cloud/docs/
    _github: https://github.com/netdata/netdata
    _groups:
      - netdata
    _home: https://www.netdata.cloud/
    _name: Netdata
    _post: "#!/usr/bin/env bash\n# @file Netdata\n# @brief Connects Netdata with Netdata's free cloud dashboard and applies some system optimizations, if necessary\n# @description\n#     This script connects Netdata with Netdata Cloud if Netdata is installed, the `NETDATA_TOKEN` is provided, and the\n#     `NETDATA_ROOM` is defined. This allows you to graphically browse through system metrics on all your connected devices\n#     from a single free web application.\n#\n#     This script installs additional alerts and enables notifications if Netdata is installed. Email notifications are configured\n#     using the provided primary email address. If the OS is Debian based, Netdata shows the number of CVEs in currently installed packages.\n\nensureNetdataOwnership() {\n  ### Ensure /usr/local/var/lib/netdata/cloud.d is owned by user\n  if [ -d /usr/local/var/lib/netdata ]; then\n    gum log -sl info 'Ensuring permissions are correct on /usr/local/var/lib/netdata' && sudo chown -Rf netdata:netdata /usr/local/var/lib/netdata 2> /dev/null || sudo chown -Rf netdata:$(id -g -n) /usr/local/var/lib/netdata\n  elif [ -d /var/lib/netdata ]; then\n    gum log -sl info 'Ensuring permissions are correct on /var/lib/netdata' && sudo chown -Rf netdata:netdata /var/lib/netdata 2> /dev/null || sudo chown -Rf netdata:$(id -g -n) /var/lib/netdata\n  elif [ -d \"${HOMEBREW_PREFIX:-/opt/homebrew}/var/lib/netdata\" ]; then\n    gum log -sl info \"Ensuring permissions are correct on ${HOMEBREW_PREFIX:-/opt/homebrew}/var/lib/netdata\" && sudo chown -Rf netdata:netdata \"${HOMEBREW_PREFIX:-/opt/homebrew}/var/lib/netdata\" 2> /dev/null || sudo chown -Rf netdata:$(id -g -n) \"${HOMEBREW_PREFIX:-/opt/homebrew}/var/lib/netdata\"\n  else\n    gum log -sl warn 'No /var/lib/netdata folder found'\n  fi\n}\n\n### Claim the instance with Netdata Cloud\nif command -v netdata-claim.sh > /dev/null; then\n  ### Add user / group with script in ~/.local/bin/add-usergroup, if it is available\n  if command -v add-usergroup > /dev/null; then\n    sudo add-usergroup \"$USER\" netdata\n  fi\n\n  ### Ensure ownership\n  ensureNetdataOwnership\n\n  ### netdata-claim.sh must be run as netdata user\n  sudo -H -u netdata bash -c 'export NETDATA_ROOM=\"{{- if (stat (joinPath .chezmoi.sourceDir \".chezmoitemplates\" \"secrets\" \"NETDATA_ROOM\")) -}}{{- includeTemplate \"secrets/NETDATA_ROOM\" | decrypt | trim -}}{{- else -}}{{- env \"NETDATA_ROOM\" -}}{{- end -}}\" && export NETDATA_TOKEN=\"{{- if (stat (joinPath .chezmoi.sourceDir \".chezmoitemplates\" \"secrets\" \"NETDATA_TOKEN\")) -}}{{- includeTemplate \"secrets/NETDATA_TOKEN\" | decrypt | trim -}}{{- else -}}{{- env \"NETDATA_TOKEN\" -}}{{- end -}}\" && yes | netdata-claim.sh -token=\"$NETDATA_TOKEN\" -rooms=\"$NETDATA_ROOM\" -url=\"https://app.netdata.cloud\"'\n  \n  ### Kernel optimizations\n  # These are mentioned while installing via the kickstart.sh script method. We are using Homebrew for the installation though.\n  # Assuming these optimizations do not cause any harm.\n  if [ -d /Applications ] && [ -d /System ]; then\n    ### macOS\n    gum log -sl info 'System is macOS so Netdata kernel optimizations are not required'\n  else\n    ### Linux\n    if [ -d /sys/kernel/mm/ksm ]; then\n      gum log -sl info 'Adding Netdata kernel optimization for /sys/kernel/mm/ksm/run'\n      echo 1 | sudo tee /sys/kernel/mm/ksm/run\n      gum log -sl info 'Adding Netdata kernel optimization for /sys/kernel/mm/ksm/sleep_millisecs'\n      echo 1000 | sudo tee /sys/kernel/mm/ksm/sleep_millisecs\n    else\n      gum log -sl info 'The /sys/kernel/mm/ksm directory does not exist so Netdata kernel optimizations are not being applied'\n    fi\n  fi\n\n  ### Install additional alerts and enable notifications\n  if command -v netdata > /dev/null; then\n    ### Copy the additional alert definitions\n    if [ -d /usr/local/etc/netdata ]; then\n      NETDATA_ETC='/usr/local/etc/netdata/'\n    elif [ -d /etc/netdata ]; then\n      NETDATA_ETC='/etc/netdata'\n    elif [ -d \"${HOMEBREW_PREFIX:-/opt/homebrew}/etc/netdata\" ]; then\n      NETDATA_ETC=\"${HOMEBREW_PREFIX:-/opt/homebrew}/etc/netdata\"\n    else\n      gum log -sl error 'No etc location found for netdata' && exit 1\n    fi\n    gum log -sl info \"Copying ${XDG_CONFIG_HOME:-$HOME/.config}/netdata/health.d/ to $NETDATA_ETC\" && sudo cp -rf \"${XDG_CONFIG_HOME:-$HOME/.config}/netdata/health.d/\" \"$NETDATA_ETC\"\n    \n    if command -v gsed > /dev/null; then\n      SED_UTIL=\"gsed\"\n    else\n      SED_UTIL=\"sed\"\n    fi\n\n    ### Blocky\n    gum log -sl info \"Adding Blocky metrics collection to $NETDATA_ETC/go.d/prometheus.conf\"\n    sudo \"$SED_UTIL\" -i \"/jobs:/a\\  - name: blocky_local \\n    url: 'http://127.0.0.1:4000/metrics'\" \"$NETDATA_ETC/go.d/prometheus.conf\"\n    \n    ### SFTPGo\n    gum log -sl info \"Adding SFTPGo metrics collection to $NETDATA_ETC/go.d/prometheus.conf\"\n    sudo \"$SED_UTIL\" -i \"/jobs:/a\\  - name: sftpgo_local \\n    url: 'http://127.0.0.1:57500/metrics'\" \"$NETDATA_ETC/go.d/prometheus.conf\"\n\n    # Backup current health alarm configuration and apply new one\n    if [ -d /usr/local/lib/netdata ]; then\n      NETDATA_LIB='/usr/local/lib/netdata'\n    elif [ -d /usr/lib/netdata ]; then\n      NETDATA_LIB='/usr/lib/netdata'\n    elif [ -d \"${HOMEBREW_PREFIX:-/opt/homebrew}/lib/netdata\" ]; then\n      NETDATA_LIB=\"${HOMEBREW_PREFIX:-/opt/homebrew}/lib/netdata\"\n    else\n      gum log -sl error 'No lib location found for netdata' && exit 1\n    fi\n    gum log -sl info \"Copying ${XDG_CONFIG_HOME:-$HOME/.config}/netdata/health_alarm_notify.conf to $NETDATA_LIB/conf.d/health_alarm_notify.conf\" && sudo cp -f \"${XDG_CONFIG_HOME:-$HOME/.config}/netdata/health_alarm_notify.conf\" \"$NETDATA_LIB/conf.d/health_alarm_notify.conf\"\n  else\n    gum log -sl warn 'netdata is not available in the PATH or is not installed'\n  fi\n\n  ### Ensure the apt command is available before running `debsecan` logic\n  if command -v apt-get > /dev/null; then\n    ### Configure Netdata to gather information about CVEs in the installed packages\n    if command -v debsecan > /dev/null; then\n      DEBSECAN_GIT=\"${XDG_DATA_HOME:-$HOME/.local/share}/netdata-debsecan\"\n      ### Installing the script to generate report on CVEs in installed packages\n      gum log -sl info 'Installing script to generate report on CVEs in installed packages' && sudo cp -f \"$DEBSECAN_GIT/usr_local_bin_debsecan-by-type\" \"/usr/local/bin/debsecan-by-type\"\n      ### Generate initial debsecan reports in /var/log/debsecan/\n      gum log -sl info 'Generating initial debsecan reports in /var/log/debsecan/' && debsecan-by-type\n      ### Configure dpkg to refresh the file after each run\n      gum log -sl info 'Configuring dpkg to refresh the file after each run' && sudo cp -f \"$DEBSECAN_GIT/etc_apt_apt.conf.d_99debsecan\"  /etc/apt/apt.conf.d/99-debsecan\n      ### Add a cron job to refresh the file every hour\n      gum log -sl info 'Adding a cron job to refresh the file every hour' && sudo cp -f \"$DEBSECAN_GIT/etc_cron.d_debsecan\" /etc/cron.d/debsecan\n      ### Install the module/configuration file\n      gum log -sl info 'Installing the module and configuration file'\n      sudo \"$DEBSECAN_GIT/debsecan.chart.py\" /usr/libexec/netdata/python.d/debsecan.chart.py\n      sudo \"$DEBSECAN_GIT/debsecan.conf\" /etc/netdata/python.d/debsecan.conf\n    else\n      gum log -sl warn 'apt-get is available but debsecan is not available in the PATH or is not installed'\n    fi\n  fi\n\n  ### Ensure / report whether speedtest-cli is installed\n  if ! command -v speedtest-cli > /dev/null; then\n    if command -v pipx > /dev/null; then\n      pipx install speedtest-cli\n    else\n      gum log -sl warn 'speedtest-cli not installed and pipx is not available'\n    fi\n  fi\n\n  ### Configure Netdata to gather information about Internet connection speed\n  if command -v speedtest-cli > /dev/null; then\n    ### Installing the script to generate report on Internet connection speed\n    gum log -sl info 'Installing script to generate report on Internet connection speed'\n    LIBEXEC_PATH=\"$(netdata -W buildinfo | grep 'Configure' | sed \"s/.*--libexecdir=\\([^ \\']*\\).*/\\1/\")\"\n    if [ -d /usr/libexec/netdata/charts.d ]; then\n      sudo cp -f \"${XDG_DATA_HOME:-$HOME/.local/share}/netdata-speedtest/speedtest.chart.sh\" \"/usr/libexec/netdata/charts.d/speedtest.chart.sh\"\n    elif [ -d \"$LIBEXEC_PATH/netdata/charts.d\" ]; then\n      gum log -sl info \"$LIBEXEC_PATH/netdata/charts.d present on system\"\n      cp -f \"${XDG_DATA_HOME:-$HOME/.local/share}/netdata-speedtest/speedtest.chart.sh\" \"$LIBEXEC_PATH/netdata/charts.d/speedtest.chart.sh\"\n    else\n      gum log -sl warn \"Failed to find appropriate directory to add Netdata speedtest chart script\"\n    fi\n  else\n    gum log -sl warn 'speedtest-cli is not available in the PATH or is not installed'\n  fi\n\n  ### Ensure ownership again\n  ensureNetdataOwnership\n\n  ### Restart Netdata service\n  if command -v systemctl > /dev/null; then\n    gum log -sl info 'Enabling netdata service' && sudo systemctl enable netdata\n    gum log -sl info 'Restarting netdata service' && sudo systemctl restart netdata\n  elif [ -d /Applications ] && [ -d /System ]; then\n    gum log -sl info 'Starting / enabling netdata service' && brew services restart netdata\n  else\n    gum log -sl warn 'systemctl is not available'\n  fi\nelse\n  gum log -sl info 'netdata-claim.sh is not available in the PATH'\nfi\n"
    _service: netdata
    _service:brew:
      - name: netdata
        sudo: true
    _serviceEnabled: true
    ansible: professormanhattan.netdata
    brew: netdata
    pacman: netdata
    port: netdata
    script: curl https://my-netdata.io/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh
  networkmanager:
    _bin: networkmanager
    _github: https://github.com/BornToBeRoot/NETworkManager
    _name: NETworkManager
    scoop: networkmanager
    winget: BornToBeRoot.NETworkManager
  newman:
    _bin: newman
    _desc: Command-line collection runner for Postman
    _github: https://github.com/postmanlabs/newman
    _home: https://www.getpostman.com
    _name: newman
    brew: newman
    npm: newman
  newsflash:
    _bin: newsflash
    _github: false
    _gitlab: https://gitlab.com/news-flash/news_flash_gtk
    flatpak: com.gitlab.newsflash
  nextcloud:
    _app: Nextcloud.app
    _bin: nextcloudcmd
    _desc: '[Nextcloud Client](https://nextcloud.com) is a tool to keep your files synchronized between your Nextcloud server and your desktop. Select one or more directories on your local machine and always have access to your latest files wherever you are'
    _docs: https://docs.nextcloud.com/server/latest/user_manual/en/
    _github: https://github.com/nextcloud/desktop
    _home: https://nextcloud.com
    _name: Nextcloud Client
    cask: nextcloud
    choco: nextcloud-client
    flatpak: com.nextcloud.desktopclient.nextcloud
  nginx:
    _bin: nginx
    _desc: It also generates sites-enabled proxies using YML configurations. Easter eggs included. [Nginx](https://www.nginx.com/), stylized as NGINX, nginx or NginX, is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache. The software was created by Igor Sysoev and publicly released in 2004. Nginx is free and open-source software, released under the terms of the 2-clause BSD license.
    _docs: https://nginx.org/en/docs/
    _github: https://github.com/nginx/nginx
    _home: https://nginx.org/
    _name: NGINX
    _ports:
      - port: 80
        proto: tcp
      - port: 443
        proto: tcp
    _post: |
      #!/usr/bin/env bash
      # @file NGINX Amplify Join
      # @brief Set up NGINX Amplify and joins the cloud monitoring service dashboard
      # @description
      #     This script installs NGINX Amplify and connects with the user's NGINX Amplify instance, assuming the `NGINX_AMPLIFY_API_KEY`
      #     is defined. NGINX Amplify is a free web application that serves as a way of browsing through metrics of all your connected
      #     NGINX instances.
      #
      #     ## Links
      #
      #     * [NGINX Amplify login](https://amplify.nginx.com/login)
      #     * [NGINX Amplify documentation](https://docs.nginx.com/nginx-amplify/#)

      if command -v nginx > /dev/null; then
        gum log -sl info 'Downloading the NGINX Amplify installer script'
        TMP="$(mktemp)"
        curl -sSL https://github.com/nginxinc/nginx-amplify-agent/raw/master/packages/install.sh > "$TMP"
        gum log -sl info 'Running the NGINX Amplify setup script'
        API_KEY="{{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "NGINX_AMPLIFY_API_KEY")) }}{{- includeTemplate "secrets/NGINX_AMPLIFY_API_KEY" | decrypt | trim -}}{{ else }}{{- env "NGINX_AMPLIFY_API_KEY" -}}{{ end }}" sh "$TMP"
      fi
    _service: nginx
    _serviceEnabled: true
    _todo: Check out /opt/homebrew/etc/nginx/nginx.conf / nginx/servers
    ansible: professormanhattan.nginx
    apt: nginx
    brew: nginx
    choco: nginx
    dnf: nginx
    pacman: nginx
    port: nginx
    scoop: nginx
  nginx-unit:
    _bin: unitd
    _github: https://github.com/nginx/unit
    _name: NGINX Unit
    _service: unit
    brew: nginx/unit/unit
  ngrok:
    _bin: ngrok
    _github: false
    _desc: '[Ngrok](https://ngrok.com/) exposes local servers behind NATs and firewalls to the public internet over secure tunnels. Ngrok also provides a real-time web UI where you can introspect all HTTP traffic running over your tunnels. You can replay any request against your tunnels with one click. The main feature is the ability to generate an internet-accessible URL that directs traffic to your local web server even if it is behind a firewall or proxy.'
    _home: https://ngrok.com/)
    _name: Ngrok
    ansible: professormanhattan.ngrok
    cask: ngrok
    choco: ngrok
    snap: ngrok
  ngxtop:
    _bin: ngxtop
    _desc: Real-time metrics for nginx server
    _github: https://github.com/lebinh/ngxtop
    _name: ngxtop
    pipx: ngxtop
  ninja:
    _bin: ninja
    _github: https://github.com/ninja-build/ninja
    _name: Ninja
    apt: ninja
    brew: ninja
    dnf: ninja
    pacman: ninja
    zypper: ninja
  nitroshare:
    _app: nitroshare.app
    _bin: nitroshare
    _desc: Network file transfer application for Windows, OS X, & Linux
    _docs: https://nitroshare.net/
    _github: https://github.com/nitroshare/nitroshare-desktop
    _home: https://nitroshare.net/
    _name: NitroShare
    apt: nitroshare
    cask: nitroshare
    choco: nitroshare
    dnf: nitroshare
    pacman: nitroshare
  nmap:
    _bin: nmap
    _desc: >-
      [Nmap](https://github.com/nmap/nmap) (short for Network Mapper) is a free and open source utility for network discovery and security auditing. Many systems and network administrators also find it useful for tasks such as network inventory, managing service upgrade schedules, and monitoring host or service uptime. Nmap uses raw IP packets in novel ways to determine what hosts are available on the network, what services those hosts are offering, what operating systems they are running, what type of packet filters/firewalls are in use, and dozens of other characteristics. It was designed to rapidly scan large networks, but works fine against single hosts. Nmap runs on all major operating systems.
    _docs: https://nmap.org/docs.html
    _github: https://github.com/nmap/nmap
    _home: https://nmap.org/
    _name: Nmap
    _post:snap: |
      #!/usr/bin/env bash
      sudo snap connect nmap:network-control
    ansible: professormanhattan.nmap
    apt: nmap
    brew: nmap
    choco: nmap
    dnf: nmap
    pacman: nmap
    port: nmap
    scoop: nmap
    snap: nmap
  nnn:
    _bin: nnn
    _desc: A full-featured terminal file manager
    _github: https://github.com/jarun/nnn
    _name: nnn
    apk: nnn
    apt: nnn
    brew: nnn
    github: github.com/jarun/nnn
    pacman: nnn
    pkg: nnn
  node:
    _bin: node
    _desc: '[Node.js](https://nodejs.org/en/) is an open-source, cross-platform, back-end JavaScript runtime environment that runs on the V8 engine and executes JavaScript code outside a web browser.'
    _docs: https://nodejs.org/en/docs/
    _github: https://github.com/nodejs/node
    _home: https://nodejs.org/en/
    _name: Node.js
    ansible: professormanhattan.nodejs
    brew: node
    scoop: nodejs
  node-prune:
    _bin: node-prune
    _desc: Extension to remove unnecessary files from node_modules
    _github: https://github.com/tj/node-prune
    _name: node-prune
    github: github.com/tj/node-prune
    go: github.com/tj/node-prune@latest
  nodemon:
    _bin: nodemon
    _github: https://github.com/remy/nodemon
    _name: Nodemon
    npm: nodemon
  nomad:
    _bin: nomad
    _github: https://github.com/hashicorp/nomad
    _desc: '[HashiCorp Nomad](https://www.nomadproject.io/) is a simple and flexible scheduler and workload orchestrator to deploy and manage containers and non-containerized applications across on-prem and clouds at scale.'
    _docs: https://developer.hashicorp.com/nomad/docs
    _home: https://www.nomadproject.io/
    _name: HashiCorp Nomad
    _service: nomad
    ansible: professormanhattan.nomad
    brew: nomad
    choco: nomad
    yay: nomad-git
  nomino:
    _bin: nomino
    _desc: Batch rename utility for developers
    _github: https://github.com/yaa110/nomino
    _name: nomino
    cargo: nomino
    github: github.com/yaa110/nomino
    yay: nomino
  nordvpn:
    _bin: null
    _desc: '[NordVPN](https://nordvpn.com/) is a virtual private network service provider. It has desktop applications for Windows, macOS, and Linux, mobile apps for Android and iOS, as well as an application for Android TV. Manual setup is available for wireless routers, NAS devices and other platforms.'
    _docs: https://support.nordvpn.com/
    _github: https://github.com/jotyGill/openpyn-nordvpn
    _home: https://nordvpn.com/
    _name: NordVPN
    ansible: professormanhattan.nordvpn
  normit:
    _bin: normit
    _deps:
      - mpg123
    _desc: '[Normit](https://github.com/pawurb/normit) allows you to easily translate any text from one language to another. It also includes the ability to generate audio through speech synthesis as well.'
    _github: https://github.com/pawurb/normit
    _name: Normit
    ansible: professormanhattan.normit
    npm: normit
  notion:
    _app: Notion.app
    _bin: null
    _desc: Notion is the connected workspace where better, faster work happens.
    _docs: https://www.notion.so/help/guides/category/documentation
    _env:
      NOTION_APPDATA:
        cask: "$HOME/Library/Application Support/Notion"
        choco: "TODO"
    _github: https://github.com/makenotion/notion-sdk-js
    _home: https://www.notion.so/
    _name: Notion AI
    _note: Waiting on Linux install alternative.
    cask: notion
    choco: notion
    mas: 1559269364
  np:
    _bin: np
    _desc: A better `npm publish`
    _github: https://github.com/sindresorhus/np
    _name: np
    npm: np
  # Error installing aiohttp dependency
  # starred:
  #   _bin: starred
  #   pipx: starred
  npkill:
    _bin: npkill
    _github: https://github.com/voidcosmos/npkill
    _name: npkill
    npm: npkill
  npm-check:
    _bin: npm-check
    _desc: Check for outdated, incorrect, and unused dependencies.
    _github: https://github.com/dylang/npm-check
    _name: npm-check
    npm: npm-check
  npm-check-updates:
    _bin: ncu
    _github: https://github.com/raineorshine/npm-check-updates
    _name: NPM Check Updates
    npm: npm-check-updates
  ntfy:
    _bin: nfty
    _github: https://github.com/dschep/ntfy
    _name: NFTY
    _post: |
      #!/usr/bin/env bash
      sudo mkdir -p /usr/local/etc/branding
      sudo cp -f "$HOME/.local/etc/branding/logo-color-256x256.png" /usr/local/etc/branding/logo-color-256x256.png
      sudo mkdir -p /usr/local/share/sounds
      sudo rsync -rtvp "${XDG_DATA_HOME:-$HOME/.local/share}/sounds/" /usr/local/share/sounds
      if command -v apt-get > /dev/null; then
        sudo apt install python-dbus
      fi
      if command -v termux-setup-storage > /dev/null; then
        apt install termux-api
      fi
    pip3: ntfy[emoji,matrix,pid,slack]
  ntl:
    _bin: ntl
    _github: https://github.com/ruyadorno/ntl
    _name: NTL
    npm: ntl
  nuclear:
    _app: nuclear.app
    _bin: nuclear
    _desc: Streaming music player that finds free music
    _github: https://github.com/nukeop/nuclear
    _home: https://nuclear.js.org/
    _name: Nuclear
    cask: nuclear
    choco: nuclear
    flatpak: org.js.nuclear.Nuclear
    github: github.com/nukeop/nuclear
    snap: nuclear
    yay: nuclear-player-bin
  nugetpackageexplorer:
    _bin: nugetpackageexplorer
    _github: https://github.com/NuGetPackageExplorer/NuGetPackageExplorer
    _name: NuGet Package Explorer
    choco: nugetpackageexplorer
    winapp: nuget-package-explorer/9WZDNCRDMDM3
    winget: NuGet Package Explorer
  nushell:
    _bin: nu
    _github: https://github.com/nushell/nushell
    _name: Nu
    apk: nushell
    apt: nushell
    brew: nushell
    choco: nushell
    dnf: nushell
    pacman: nushell
    port: nushell
    scoop: nushell
    winget: nushell
  nve:
    _bin: nve
    _github: https://github.com/ehmicky/nve
    _name: nve
    npm: nve
  nx:
    _bin: nx
    _github: https://github.com/nrwl/nx
    _name: NX
    npm: nx
  obs-studio:
    _app: OBS.app
    _bin: obs-studio
    _github: https://github.com/obsproject/obs-studio
    _name: OBS Studio
    cask: obs
    choco: obs-studio
    flatpak: com.obsproject.Studio
  obsidian:
    _app: Obsidian.app
    _bin: null
    _desc: Obsidian is the private and flexible note‑taking app that adapts to the way you think.
    _docs: https://help.obsidian.md/Home
    _github: false
    _home: https://obsidian.md/
    _name: Obsidian
    appimage: Obsidian
    cask: obsidian
    choco: obsidian
    flatpak: md.obsidian.Obsidian
    scoop: extras/obsidian
    winget: Obsidian.Obsidian
  obsidian-cli:
    _bin: obs
    _github: https://github.com/Yakitrak/obsidian-cli
    _name: Obsidian CLI
    _pre:scoop: scoop bucket add scoop-yakitrak https://github.com/yakitrak/scoop-yakitrak.git
    brew: megabyte-labs/tap/obs-cli
    scoop: obs
  oclif:
    _bin: oclif
    _desc: "[oclif](https://oclif.io/) is a framework for building CLIs in Node.js. This framework was built out of the Heroku CLI but generalized to build any custom CLI. It's designed both for single-file CLIs with a few flag options, or for very complex CLIs that have subcommands (like git or heroku)"
    _docs: https://oclif.io/docs/
    _github: https://github.com/oclif/oclif
    _home: https://oclif.io/
    _name: oclif
    npm: oclif
  octosql:
    _bin: octosql
    _github: https://github.com/cube2222/octosql
    _name: OctoSQL
    brew: cube2222/octosql/octosql
    scoop: octosql
  oh-my-posh:
    _bin: oh-my-posh
    _desc: A blazing fast cross platform/shell prompt renderer
    _docs: https://ohmyposh.dev/docs
    _github: https://github.com/jandedobbeleer/oh-my-posh
    _home: https://ohmyposh.dev/
    _name: oh-my-posh
    _post:scoop: |
      #!/usr/bin/env bash
      clink autorun install
    brew: jandedobbeleer/oh-my-posh/oh-my-posh
    scoop:
      - clink
      - https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/oh-my-posh.json
  onionshare:
    _bin: onionshare
    _desc: '[OnionShare](https://.onionshare.org/) is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network.'
    _docs: https://docs.onionshare.org/2.5/en/
    _github: https://github.com/onionshare/onionshare
    _home: https://onionshare.org/
    _name: OnionShare
    ansible: professormanhattan.onionshare
    apt: onionshare
    cask: onionshare
    choco: onionshare
    dnf: onionshare
    flatpak: org.onionshare.OnionShare
    snap: onionshare
  onlykey:
    _app: OnlyKey App.app
    _bin: onlykey
    _bin:snap: onlykey-app
    _github: https://github.com/trustcrypto/OnlyKey-App
    _name: onlykey
    _post:snap: |
      #!/usr/bin/env bash
      sudo curl -sSL https://raw.githubusercontent.com/trustcrypto/trustcrypto.github.io/pages/49-onlykey.rules -o /etc/udev/rules.d/49-onlykey.rules
      sudo chmod 644 /etc/udev/rules.d/49-onlykey.rules
      sudo udevadm control --reload-rules
      sudo udevadm trigger
    ansible:darwin: professormanhattan.onlykey
    choco: onlykey
    script:darwin: cd /tmp && curl -sSL https://github.com/trustcrypto/OnlyKey-App/releases/download/v5.3.6/OnlyKey.App.5.3.6.dmg > OnlyKey.dmg  && hdiutil attach "/tmp/OnlyKey.dmg" &&  sudo cp -R "/Volumes/OnlyKey App/OnlyKey App.app" /Applications && sudo hdiutil detach "/Volumes/OnlyKey App" && rm -f "/tmp/OnlyKey.dmg"
    snap: onlykey-app
  onlykey-agent:
    _bin: onlykey-agent
    _deps:
      - onlykey-cli-deps
    _github: https://github.com/trustcrypto/onlykey-agent
    _name: OnlyKey Agent
    brew: onlykey-agent
    pipx: onlykey-agent
  onlykey-cli:
    _bin: onlykey-cli
    _deps:
      - onlykey-cli-deps
    _github: https://github.com/trustcrypto/python-onlykey
    _name: OnlyKey CLI
    pipx: onlykey
  onlykey-cli-deps:
    _github: false
    _post:linux: |
      #!/usr/bin/env bash
      sudo curl -sSL https://raw.githubusercontent.com/trustcrypto/trustcrypto.github.io/pages/49-onlykey.rules -o /etc/udev/rules.d/49-onlykey.rules
      sudo chmod 644 /etc/udev/rules.d/49-onlykey.rules
      sudo udevadm control --reload-rules
      sudo udevadm trigger
    apt:
      - python3-pip
      - python3-tk
      - libusb-1.0-0-dev
      - libudev-dev
    brew:darwin:
      - libusb
    dnf:
      - python3-pip
      - python3-devel
      - python3-tkinter
      - libusb-devel
      - libudev-devel
      - gcc
      - redhat-rpm-config
    pacman:
      - git
      - python3-setuptools
      - python3
      - libusb
      - python3-pip
    zypper:
      - python3-pip
      - python3-devel
      - python3-tk
      - libusb-1_0-devel
      - libudev-devel
  opencommit:
    _bin: opencommit
    _desc: GPT CLI to auto-generate impressive commits in 1 second
    _docs: https://github.com/di-sukharev/opencommit
    _github: https://github.com/di-sukharev/opencommit
    _home: https://www.npmjs.com/package/opencommit
    _name: OpenCommit
    npm: opencommit
  openinterminal:
    _app: OpenInTerminal.app
    _bin: null
    _desc: Finder Toolbar app for macOS to open the current directory in Terminal, iTerm, Hyper or Alacritty
    _docs: https://github.com/Ji4n1ng/OpenInTerminal
    _github: https://github.com/Ji4n1ng/OpenInTerminal
    _home: https://github.com/Ji4n1ng/OpenInTerminal
    _name: OpenInTerminal
    cask: openinterminal
  openjdk:
    _bin: javac
    _desc: Latest version of the OpenJDK (Java Development Kit)
    _docs: https://openjdk.org/groups/build/doc/building.html
    _github: https://github.com/openjdk/jdk
    _home: https://openjdk.org/
    _name: OpenJDK
    apt: default-jdk
    brew: openjdk
    choco: openjdk
    dnf: java-latest-openjdk.x86_64
    pacman: jdk-openjdk
  openshift-cli:
    _bin: oc
    _desc: The OpenShift Command Line, part of OKD
    _docs: https://docs.openshift.com/container-platform/4.8/cli_reference/openshift_cli/getting-started-cli.html
    _github: https://github.com/openshift/oc
    _home: https://www.redhat.com/en/technologies/cloud-computing/openshift
    _name: OpenShift CLI
    brew: openshift-cli
    choco: openshift-cli
  openssh-server:
    _service: sshd
    _github: false
    _when: test -f /proc/version && ! grep Microsoft /proc/version > /dev/null && ! test -d /Applications'
    apt: openssh-server
    dnf: openssh-server
    pacman: openssh
  openssl:
    _bin: openssl
    _github: false
    _name: OpenSSL
    apt: openssl
    brew: openssl
    choco: openssl
    dnf: openssl
    pacman: openssl
    port: openssl
    scoop: openssl
  openssl-osx-ca:
    _bin: openssl-osx-ca
    _github: https://github.com/raggi/openssl-osx-ca
    _name: OpenSSL macOS CA
    _service:brew:darwin:
      - name: openssl-osx-ca
        sudo: true
    _serviceEnabled: true
    brew:darwin: raggi/ale/openssl-osx-ca
  openvpn:
    _bin: openvpn
    _github: https://github.com/OpenVPN/openvpn
    _name: OpenVPN
    _service: openvpn
    _service:brew:
      - name: openvpn
        sudo: true
    apt: openvpn
    brew: openvpn
    choco: openvpn
    dnf: openvpn
    pacman: openvpn
  opn-cli:
    _bin: opn-cli
    _github: https://github.com/andeman/opn-cli
    _name: OPNSense CLI
    pipx: opn-cli
  oq:
    _bin: oq
    _desc: A performant, and portable jq wrapper to facilitate the consumption and output of formats other than JSON; using jq filters to transform the data
    _github: https://github.com/Blacksmoke16/oq
    _home: https://blacksmoke16.github.io/oq/
    _name: oq
    brew: oq
    github: github.com/Blacksmoke16/oq
    snap: oq
    yay: oq
  orbstack:
    _app: OrbStack.app
    _github: https://github.com/orbstack/orbstack
    _bin: orb
    _name: OrbStack
    cask: orbstack
  osquery:
    _bin: osqueryctl
    _desc: SQL powered operating system instrumentation, monitoring, and analytics
    _docs: https://osquery.readthedocs.io/en/stable/
    _github: https://github.com/osquery/osquery
    _home: https://osquery.io/
    _name: osquery
    cask: osquery
    choco: osquery
    github: github.com/osquery/osquery
    yay: osquery-git
  osx-sign:
    _bin: electron-osx-sign
    _github: https://github.com/electron/osx-sign
    _name: macOS Code Sign
    npm: '@electron/osx-sign'
  ots:
    _bin: ots
    _desc: Share end-to-end encrypted secrets with others via a one-time URL
    _github: https://github.com/sniptt-official/ots
    _home: https://ots.sniptt.com/
    _name: ots
    brew: ots
    github: github.com/sniptt-official/ots
    go: github.com/sniptt-official/ots@latest
  p7zip:
    _bin: p7zip
    _name: p7zip
    _github: https://github.com/p7zip-project/p7zip
    apt: p7zip
    brew: p7zip
    dnf: p7zip
    pacman: p7zip
  package-size:
    _bin: package-size
    _desc: Get the bundle size of an npm package
    _github: https://github.com/egoist/package-size
    _name: package-size
    npm: package-size
  packer:
    _bin: packer
    _desc: '[Packer](https://www.packer.io/) is a free and open source tool for creating golden images for multiple platforms from a single source configuration. Packer is lightweight, runs on every major operating system, and is highly performant, creating machine images for multiple platforms in parallel. It is a [HashiCorp](https://www.hashicorp.com/) product.'
    _docs: https://developer.hashicorp.com/packer/docs
    _github: https://github.com/hashicorp/packer
    _home: https://www.packer.io/
    _name: Packer
    ansible: professormanhattan.packer
    apt: packer
    brew: packer
    choco: packer
    pacman: packer
  page-fetch:
    _bin: page-fetch
    _desc: Fetch web pages using headless Chrome, storing all fetched resources including JavaScript files
    _github: https://github.com/detectify/page-fetch
    _name: page-fetch
    go: github.com/detectify/page-fetch@latest
  pageres:
    _bin: pageres
    _desc: Capture website screenshots
    _github: https://github.com/sindresorhus/pageres-cli
    _name: pageres
    npm: pageres-cli
  pake:
    _bin: pake
    _github: https://github.com/tw93/Pake
    npm: pake-cli
  pandoc:
    _bin: pandoc
    _deps:
      - python
    _deps:darwin:
      - basictex
      - python
    _desc: '[Pandoc](https://pandoc.org/) is a Haskell library for converting from one documentation markup format to another. If you need to convert files from one markup format into another, then look no further. Pandoc is your swiss-army knife. It converts from and to dozens of formats like HTML, markdown, docx, JSON, YAML, and CSV, to name a few.'
    _docs: https://pandoc.org/getting-started.html
    _github: https://github.com/jgm/pandoc
    _home: https://pandoc.org/
    _name: Pandoc
    ansible: professormanhattan.pandoc
    apt: pandoc
    brew:
      - pandoc
      - librsvg
    choco:
      - pandoc
      - rsvg-convert
      - miktex
    crew: pandoc
    dnf: pandoc
    nix: pandoc
    pacman: pandoc
    winget: pandoc
  papertrail:
    _bin: papertrail
    _desc: Command-line client for Papertrail hosted log management service. Tails and searches app server logs and system syslog. Supports Boolean search and works with grep and pipe output (Unix)
    _github: https://github.com/papertrail/papertrail-cli
    _name: papertrail
    gem: papertrail
  parallels:
    _app: Parallels Desktop.app
    _bin: parallels
    _github: false
    _desc: '[Parallels Desktop for Mac](https://www.parallels.com/) is software providing hardware virtualization for Macintosh computers with Intel processors. It is developed by Parallels, since 2018 a subsidiary of Corel.'
    _docs: https://kb.parallels.com/
    _home: https://www.parallels.com/
    _name: Parallels
    _notes: On macOS, full disk access is required for Terminal. For Homebrew Cask, this requires the terminal to have full disk access
    ansible:darwin: professormanhattan.parallels
    cask: parallels
    mas: 1085114709
  pass:
    _bin: pass
    _desc: pass is a very simple password store that keeps passwords inside gpg2(1) encrypted files
    _home: https://www.passwordstore.org/
    _github: false
    _name: pass
    apt: pass
    brew: pass
    dnf: pass
    pacman: pass
    pkg: password-store
  pastel:
    _bin: pastel
    _desc: A command-line tool to generate, analyze, convert and manipulate colors
    _github: https://github.com/sharkdp/pastel
    _name: pastel
    brew: pastel
    cargo: pastel
    github: github.com/sharkdp/pastel
    snap: pastel
    yay: pastel
  patch-package:
    _bin: patch-package
    _github: https://github.com/ds300/patch-package
    _name: Patch Package
    npm: patch-package
  pb:
    _app: PB for Desktop.app
    _bin: pushbullet
    _github: https://github.com/sidneys/pb-for-desktop
    _name: Pushbullet for Desktop
    appimage: sidneys/pb-for-desktop
    cask: pb
    choco: pushbullet
  peco:
    _bin: peco
    _desc: '[peco](https://github.com/peco/peco) can be a great tool to filter stuff like logs, process stats, find files, because unlike grep, you can type as you think and look through the current results.'
    _github: https://github.com/peco/peco
    _home: https://peco.github.io/
    _name: Peco
    ansible: professormanhattan.peco
    apt: peco
    brew: peco
    choco: peco
    github: github.com/peco/peco
    pacman: peco
  peek:
    _bin: peek
    _desc: '[Peek](https://github.com/phw/peek) is an animated GIF screen recorder with an easy-to-use interface. It is available for Linux systems that are running GNOME. It is not a general purpose screencast app with extended features. It focuses on simply creating small screencasts of an area of the screen that are output as a GIF, WebM, or MP4 video.'
    _github: https://github.com/phw/peek
    _name: Peek
    _rpmFusion: true
    ansible:linux: professormanhattan.peek
    apt:
      - software-properties-common
      - peek
    dnf:
      - ffmpeg
      - gstreamer1-plugins-ugly
      - peek
    flatpak: com.uploadedlobster.peek
    pacman:
      - gst-plugins-good
      - gst-plugins-ugly
      - gifski
      - peek
    yay: peek-git
  percol:
    _bin: percol
    _github: https://github.com/mooz/percol
    _name: Percol
    pipx: percol
  pfsense-fauxapi:
    _bin: fauxapi
    _github: https://github.com/ndejong/pfsense_fauxapi_client_python
    _name: pfSense CLI (fauxapi)
    pipx: pfsense-fauxapi
  pgcli:
    _bin: pgcli
    _desc: '[pgcli](https://www.pgcli.com/) is a free and open-source CLI for Postgres that does auto-completion and syntax highlighting.'
    _docs: https://www.pgcli.com/docs
    _github: https://github.com/dbcli/pgcli
    _home: https://www.pgcli.com/
    _name: pgcli
    ansible: professormanhattan.pgcli
    brew: pgcli
    choco: pgcli
    pipx: pgcli
    port: pgcli
  php:
    _bin: php
    _deps:
      - php-extensions
    _desc: '[PHP](https://www.php.net/) is a general-purpose scripting language especially suited to web development. It was originally created by Danish-Canadian programmer Rasmus Lerdorf in 1994. The PHP reference implementation is now produced by The PHP Group.'
    _docs: https://www.php.net/docs.php
    _github: https://github.com/php/php-src
    _home: https://www.php.net/
    _name: PHP
    _service: php
    ansible: professormanhattan.php
    apt: php
    brew: php
    choco: php
    dnf: php
    pacman: php
    port: php
    scoop: php
  php-extensions:
    _deps:
      - postgresql
    _name: PHP Extensions
    _github: false
    _note: Needs testing
    apt:
      - libpcre3-dev
      - libpq-dev
      - php-apcu
      - php-cgi
      - php-cli
      - php-common
      - php-curl
      - php-dev
      - php-fpm
      - php-gd
      - php-intl
      - php-imap
      - php-json
      - php-mbstring
      - php-opcache
      - php-pgsql
      - php-redis
      - php-snmp
      - php-sqlite3
      - php-xml
    dnf:
      - pcre-devel
      - postgresql-devel
      - php-apcu
      - php-cgi
      - php-cli
      - php-common
      - php-curl
      - php-devel
      - php-fpm
      - php-gd
      - php-intl
      - php-json
      - php-mbstring
      - php-opcache
      - php-pgsql
      - php-redis
      - php-snmp
      - php-sqlite3
      - php-xml
    pacman:
      - libpcre3-dev
      - postgresql-libs
      - php-apcu
      - php-cgi
      - php-cli
      - php-common
      - php-curl
      - php-dev
      - php-fpm
      - php-gd
      - php-intl
      - php-imap
      - php-json
      - php-mbstring
      - php-opcache
      - php-redis
      - php-snmp
      - php-sqlite3
      - php-xml
    zypper:
      - pcre-devel
      - postgresql-devel
      - php-apcu
      - php-cgi
      - php-cli
      - php-common
      - php-curl
      - php-devel
      - php-fpm
      - php-gd
      - php-intl
      - php-json
      - php-mbstring
      - php-opcache
      - php-redis
      - php-snmp
      - php-sqlite3
      - php-xml
  phpmon:
    _app: PHP Monitor.app
    _bin: phpmon
    _github: https://github.com/nicoverbruggen/phpmon
    _name: PHP Mon
    _pre: |
      #!/usr/bin/env bash
      if ! command -v valet > /dev/null; then
        if ! command -v composer > /dev/null; then
          brew install composer
        fi
        composer global require laravel/valet
        valet install
        valet trust
      fi
    cask: nicoverbruggen/homebrew-cask/phpmon
  pick:
    _bin: pick
    _github: https://github.com/mptre/pick
    _name: Pick
    apt: pick
    brew: pick
    dnf: pick
    emerge: pick
    pkg-freebsd: pick
    pkg_add: pick
    port: pick
    xbps: pick
    yay: pick
  pidcat:
    _bin: pidcat
    _github: https://github.com/JakeWharton/pidcat
    _name: PidCat
    brew: pidcat
  pieces:
    _app: Pieces.app
    _bin: pieces-for-developers
    _desc: Pieces is a first-in-kind productivity suite that optimizes developer tools and eliminates the chaos of context switching.
    _docs: https://docs.pieces.app/
    _github: false
    _home: https://pieces.app/
    _name: Pieces
    appinstaller: https://builds.pieces.app/stages/production/appinstaller/pieces_for_x.appinstaller
    cask: pieces
    exe: https://builds.pieces.app/stages/production/pieces_for_x/windows-exe/download
    snap: pieces-for-developers
  pieces-cli:
    _bin: pieces
    _desc: Pieces is a first-in-kind productivity suite that optimizes developer tools and eliminates the chaos of context switching.
    _docs: https://docs.pieces.app/
    _github: false
    _home: https://pieces.app/
    _name: Pieces CLI
    cask: pieces-cli
  pieces-os:
    _app: Pieces.app
    _bin: pieces-os
    _docs: https://docs.pieces.app/
    _env:
      PIECES_OS_APPDATA:
        cask: "$HOME/Library/Application Support/com.pieces.os"
        snap: "TODO"
    _github: false
    _home: https://pieces.app/
    _name: Pieces OS
    _note: Waiting for choco package
    _post:snap: |
      #!/usr/bin/env bash
      sudo snap connect pieces-os:dotnet-runtime-aspnetcore
    appinstaller: https://builds.pieces.app/stages/production/appinstaller/os_server.appinstaller
    cask: pieces-os
    exe: https://builds.pieces.app/stages/production/os_server/windows-exe/download
    snap: pieces-os
  pigz:
    _bin: pigz
    _github: https://github.com/madler/pigz
    _name: PIGZ
    apt: pigz
    brew: pigz
    dnf: pigz
    pacman: pigz
  pika:
    _app: Pika.app
    _bin: null
    _desc: An open-source colour picker app for macOS
    _docs: https://github.com/superhighfives/pika
    _github: https://github.com/superhighfives/pika
    _home: https://superhighfives.com/pika
    _name: Pika
    cask: pika
  pinapp:
    _bin: pinapp
    _github: https://github.com/fabrialberio/PinApp
    flatpak: io.github.fabrialberio.pinapp
  pip:
    _bin: pip
    _desc: '[pip](https://pypi.org/project/pip/) is a package-management system written in Python used to install and manage software packages. It connects to an online repository of public and paid-for private packages, called the Python Package Index.'
    _docs: https://pip.pypa.io/en/stable/user_guide/
    _github: https://github.com/pypa/pip
    _home: https://pip.pypa.io/en/stable/
    _name: PIP
    ansible: professormanhattan.pip
  pipedream-cli:
    _bin: pd
    _desc: Connect APIs, remarkably fast. Free for developers.
    _docs: https://pipedream.com/docs/cli/reference/
    _github: https://github.com/PipedreamHQ/pipedream
    _home: https://pipedream.com/
    _name: Pipedream CLI
    brew: pipedreamhq/pd-cli/pipedream
  pipelight:
    _bin: pipelight
    _github: https://github.com/pipelight/pipelight
    _name: Pipelight
    cargo:linux: --git https://github.com/pipelight/pipelight
    yay: pipelight
  pipx:
    _bin: pipx
    _desc: "[pipx](https://pypi.org/project/pipx/) is a tool to help you install and run end-user applications written in Python. It's roughly similar to macOS's brew, JavaScript's npx, and Linux's apt"
    _docs: https://pypa.github.io/pipx/
    _github: https://github.com/pypa/pipx
    _home: https://pypi.org/project/pipx/
    _post:brew: |
      #!/usr/bin/env bash
      pipx ensurepath
    brew: pipx
  pkg:
    _bin: pkg
    _desc: This command line interface enables you to package your Node.js project into an executable that can be run even on devices without Node.js installed.
    _github: https://github.com/vercel/pkg
    _name: pkg
    npm: pkg
  pkgx:
    _bin: pkgx
    _desc: The next-generation, cross‐platform package manager
    _docs: https://docs.pkgx.sh/
    _github: https://github.com/pkgxdev/pkgx
    _home: https://pkgx.sh/
    _name: pkgx
    brew: pkgxdev/made/pkgx
  platformio:
    _bin: platformio
    _github: https://github.com/platformio/platformio-core
    _name: PlatformIO
    brew: platformio
    pipx: platformio
  playwright:
    _bin: playwright
    _desc: '[Playwright](https://playwright.dev) enables reliable end-to-end testing for modern web apps. It allows testing Chromium, Firefox and WebKit with a single API'
    _docs: https://playwright.dev/docs/intro
    _github: https://github.com/Microsoft/playwright
    _home: https://playwright.dev
    _name: Playwright
    npm: playwright
  please:
    _bin: plz
    _github: https://github.com/thought-machine/please
    _name: Please
    brew: thought-machine/please/please
  plex:
    _app: Plex.app
    _bin: plex
    _desc: '[Plex](https://www.plex.tv/) is a global streaming service of free ad-supported video, with TV shows and movies from distributors such as Crackle, Warner Bros., MGM, Endemol Shine Group, Lionsgate, and Legendary. Plex is also a client–server media player system plus an ancillary software suite.'
    _github: false
    _home: https://www.plex.tv/
    _name: Plex
    ansible: professormanhattan.plex
    cask: plex
    choco: plex
    flatpak: tv.plex.PlexDesktop
  plex-htpc:
    _app: Plex HTPC.app
    _bin: plex-htpc
    _github: false
    _home: https://www.plex.tv/
    _name: Plex HTPC
    cask: plex-htpc
    choco: plex-home-theater
    flatpak: tv.plex.PlexHTPC
    snap: plex-htpc
  plex-media-server:
    _app: Plex Media Server.app
    _bin: plex-media-server
    _github: false
    _name: Plex Media Server
    _ports:
      - port: 32400
        proto: tcp
      - port: 3005
        proto: tcp
      - port: 5353
        proto: udp
      - port: 8324
        proto: tcp
      - port: 32410-32414
        proto: udp
      - port: 1900
        proto: udp
      - port: 32469
        proto: tcp
    cask: plex-media-server
    choco: plexmediaserver
    snap: plexmediaserver
    yay: plex-media-server
  plumber:
    _bin: plumber
    _github: https://github.com/streamdal/plumber
    _name: Plumber
    brew: streamdal/public/plumber
    exe: https://github.com/streamdal/plumber/releases/latest/download/plumber-windows.exe
  plymouth:
    _github: false
    _post: |
      #!/usr/bin/env bash
      # @file Plymouth Theme / Configuration
      # @brief Configures Plymouth to use a custom theme
      # @description
      #     This script installs Plymouth and then configures it to use our custom Betelgeuse theme.

      ### Create /etc/plymouth/plymouthd.conf
      if [ -f /etc/plymouth/plymouthd.conf ]; then
        ### Back up original plymouthd.conf
        if [ ! -f /etc/plymouth/plymouthd.conf.bak ]; then
          gum log -sl info 'Backing up /etc/plymouth/plymouthd.conf to /etc/plymouth/plymouthd.conf.bak'
          sudo cp -f /etc/plymouth/plymouthd.conf /etc/plymouth/plymouthd.conf.bak
        fi

        ### Create new plymouthd.conf
        gum log -sl info 'Populating the /etc/plymouth/plymouthd.conf file'
        echo "[Daemon]" | sudo tee /etc/plymouth/plymouthd.conf > /dev/null
        echo "Theme={{ .theme }}" | sudo tee -a /etc/plymouth/plymouthd.conf > /dev/null
        echo "ShowDelay=1" | sudo tee -a /etc/plymouth/plymouthd.conf > /dev/null
      fi

      ### Apply update-alternatives
      if command -v update-alternatives > /dev/null; then
        if [ -f "/usr/local/share/plymouth/themes/{{ .theme }}/{{ .theme }}.plymouth" ]; then
          sudo update-alternatives --install /usr/share/plymouth/themes/default.plymouth default.plymouth "/usr/local/share/plymouth/themes/{{ .theme }}/{{ .theme }}.plymouth" 100
          gum log -sl info 'Installed default.plymouth'
          # Required sometimes
          sudo update-alternatives --set default.plymouth "/usr/local/share/plymouth/themes/{{ .theme }}/{{ .theme }}.plymouth"
          gum log -sl info 'Set default.plymouth'
        else
          gum log -sl warn "/usr/local/share/plymouth/themes/{{ .theme }}/{{ .theme }}.plymouth does not exist!"
        fi
      else
        gum log -sl warn 'update-alternatives is not available'
      fi

      ### Update /etc/plymouth/plymouthd.conf
      # Replaced by code above
      # if [ -f /etc/plymouth/plymouthd.conf ]; then
      #     gum log -sl info 'Setting ShowDelay=1 in /etc/plymouth/plymouthd.conf'
      #     if cat /etc/plymouth/plymouthd.conf | grep ShowDelay; then
      #         sudo sed -i 's/^ShowDelay=.*/ShowDelay=1/' /etc/plymouth/plymouthd.conf
      #     else
      #         echo 'ShowDelay=1' | sudo tee -a /etc/plymouth/plymouthd.conf > /dev/null
      #     fi
      # else
      #     gum log -sl warn '/etc/plymouth/plymouthd.conf does not exist!'
      # fi

      ### Symlink /usr/local/share/plymouth/themes to /usr/share/plymouth/themes
      if [ ! -d '/usr/share/plymouth/themes/{{ .theme }}' ]; then
        gum log -sl info 'Symlinking /usr/local/share/plymouth/themes/{{ .theme }} to /usr/share/plymouth/themes/{{ .theme }}'
        sudo ln -s '/usr/local/share/plymouth/themes/{{ .theme }}' '/usr/share/plymouth/themes/{{ .theme }}'
      fi

      ### Set default Plymouth theme
      if command -v plymouth-set-default-theme > /dev/null; then
        sudo plymouth-set-default-theme -R '{{ .theme }}' || EXIT_CODE=$?
        if [ -n "$EXIT_CODE" ]; then
          gum log -sl warn 'There may have been an issue while setting the Plymouth default theme with plymouth-set-default-theme'
        else
          gum log -sl info 'Set Plymouth default theme with plymouth-set-default-theme'
        fi
      else
        gum log -sl warn 'Could not apply default Plymouth theme because plymouth-set-default-theme is missing'
      fi

      ### Apply update-alternatives (again - required sometimes)
      if command -v update-alternatives > /dev/null; then
        if [ -f "/usr/local/share/plymouth/themes/{{ .theme }}/{{ .theme }}.plymouth" ]; then
          # Required sometimes
          sudo update-alternatives --set default.plymouth "/usr/local/share/plymouth/themes/{{ .theme }}/{{ .theme }}.plymouth"
          gum log -sl info 'Set default.plymouth (second time is required sometimes)'
        else
          gum log -sl warn "/usr/local/share/plymouth/themes/{{ .theme }}/{{ .theme }}.plymouth does not exist!"
        fi
      else
        gum log -sl warn 'update-alternatives is not available'
      fi

      ### Update kernel / initrd images
      # Set `export DEBUG_MODE=true` to bypass GRUB2 / Plymouth application
      if [ "$DEBUG_MODE" != 'true' ]; then
        if command -v update-initramfs > /dev/null; then
          gum log -sl info 'Running sudo update-initramfs -u'
          sudo update-initramfs -u
          gum log -sl info 'Updated kernel / initrd images for Plymouth'
        elif command -v dracut > /dev/null; then
          gum log -sl info 'Running sudo dracut --regenerate-all -f'
          sudo dracut --regenerate-all -f
          gum log -sl info 'Updated kernel / initrd images for Plymouth'
        else
          gum log -sl warn 'Unable to update kernel / initrd images because neither update-initramfs or dracut are available'
        fi
      fi
    apt:
      - libplymouth5
      - plymouth
      - plymouth-themes
      - plymouth-label
    dnf:
      - plymouth
      # - plymouth-x11
      - plymouth-plugin-script
    pacman:
      - plymouth
  pm2:
    _bin: pm2
    _desc: PM2 is a production process manager for Node.js applications with a built-in load balancer. It allows you to keep applications alive forever, to reload them without downtime and to facilitate common system admin tasks
    _docs: https://pm2.keymetrics.io/docs/usage/quick-start/
    _github: https://github.com/Unitech/pm2
    _home: https://pm2.keymetrics.io/
    _name: pm2
    npm: pm2
  pnpm:
    _bin: pnpm
    _desc: '[pnpm](https://github.com/pnpm/pnpm) is a fast, disk space efficient package manager'
    _docs: https://pnpm.io/motivation
    _github: https://github.com/pnpm/pnpm
    _home: https://pnpm.io/
    _name: pnpm
    ansible: professormanhattan.pnpm
    brew: pnpm
    npm: pnpm
    scoop: pnpm
    yay: pnpm
  pnpm-lock-export:
    _bin: pnpm-lock-export
    _github: https://github.com/cvent/pnpm-lock-export
    _desc: A CLI utility that reads a package.json and pnpm-lock.yaml, and outputs an npm ci compatible package-lock.json
    npm: pnpm-lock-export
  pock:
    _app: Pock.app
    _bin: null
    _desc: Widgets manager for MacBook Touch Bar
    _docs: https://github.com/pock/pock
    _github: https://github.com/pock/pock
    _home: https://pock.app/
    _name: Pock
    cask: pock
  podman:
    _bin: podman
    _github: https://github.com/containers/podman
    _name: Podman
    apk: podman
    apt: podman
    bitbake: podman
    brew: podman
    dnf: podman
    emerge: app-containers/podman
    pacman: podman
    zypper: podman
  poetry:
    _bin: poetry
    _desc: '[Poetry](https://python-poetry.org) helps you declare, manage and install dependencies of Python projects, ensuring you have the right stack everywhere.'
    _docs: https://python-poetry.org/docs/
    _github: https://github.com/python-poetry/poetry
    _home: https://python-poetry.org/
    _name: Poetry
    ansible: professormanhattan.poetry
    brew: poetry
    yay: python-poetry-git
  polybar:
    _bin: polybar
    _github: https://github.com/polybar/polybar
    _name: Polybar
    apt: polybar
    dnf: polybar
    pacman: polybar
    pkg-freebsd: polybar
    xbps: polybar
    zypper: polybar
  pony:
    _bin: pony
    _desc: Local file-based password, API key, secret, recovery code store backed by GPG
    _github: https://github.com/jessfraz/pony
    _name: pony
    github: github.com/jessfraz/pony
    go: github.com/jessfraz/pony@latest
  poppler:
    _github: https://github.com/Belval/pdf2image
    brew: poppler
  portal:
    _bin: portal
    _desc: Portal is a quick and easy command-line file transfer utility from any computer to another
    _docs: https://github.com/SpatiumPortae/portal
    _github: https://github.com/SpatiumPortae/portal
    _home: https://portal.spatiumportae.com/
    _name: Portal
    brew: portal
    scoop: portal
    winget: SpatiumPortae.portal
    yay: portal-bin
  porter:
    _bin: porter
    _desc: Porter enables you to package your application artifact, client tools, configuration and deployment logic together as an installer that you can distribute, and install with a single command.
    _docs: https://getporter.org/docs/
    _github: https://github.com/getporter/porter
    _home: https://getporter.org/
    _name: Porter
    script:darwin: curl -L https://cdn.porter.sh/latest/install-mac.sh | bash
    script:linux: curl -L https://cdn.porter.sh/latest/install-linux.sh | bash
    script:windows: iwr "https://cdn.porter.sh/latest/install-windows.ps1" -UseBasicParsing | iex
  portmaster:
    _bin: null
    _desc: "[Portmaster](https://safing.io/portmaster/) is a free and open-source application that puts you back in charge over all your computer's network connections."
    _docs: https://docs.safing.io/portmaster/architecture/overview
    _github: https://github.com/safing/portmaster
    _home: https://safing.io/
    _name: Portmaster
    _when:linux: '! test -f /opt/safing/portmaster/portmaster-start'
    ansible:linux: professormanhattan.portmaster
    ansible:windows: professormanhattan.portmaster
    apt: https://updates.safing.io/latest/linux_amd64/packages/portmaster-installer.deb
    choco: portmaster
    dnf: https://updates.safing.io/latest/linux_amd64/packages/portmaster-installer.rpm
    exe: https://updates.safing.io/latest/windows_amd64/packages/portmaster-installer.exe
    scoop: portmaster-np
  postfix:
    _bin: postfix
    _desc: Postfix is an e-mail server that can be used to send e-mail
    _docs: https://www.postfix.org/documentation.html
    _github: https://github.com/vdukhovni/postfix
    _home: https://www.postfix.org/
    _name: Postfix
    _post: |
      #!/usr/bin/env bash
      # @file SendGrid Postfix Configuration
      # @brief Configures Postfix to use SendGrid as a relay host so you can use the `mail` program to send e-mail from the command-line
      # @description
      #     This script follows the instructions from [SendGrid's documentation on integrating Postfix](https://docs.sendgrid.com/for-developers/sending-email/postfix).
      #     After this script runs, you should be able to send outgoing e-mails using SendGrid as an SMTP handler. In other words, you will
      #     be able to use the `mail` CLI command to send e-mails. The following is an example mailing the contents of `~/.bashrc` to `name@email.com`:
      #
      #     ```shell
      #     cat ~/.bashrc | mail -s "My subject" name@email.com
      #     ```

      if [ -n "$SENDGRID_API_KEY" ] && [ "$SENDGRID_API_KEY" != "" ]; then
        if command -v postfix > /dev/null; then
          ### Ensure dependencies are installed
          if command -v apt-get > /dev/null; then
            gum log -sl info 'Installing libsasl2-modules'
            sudo apt-get update
            sudo apt-get install -y libsasl2-modules || EXIT_CODE=$?
          elif command -v dnf > /dev/null; then
            sudo dnf install -y cyrus-sasl-plain || EXIT_CODE=$?
          elif command -v yum > /dev/null; then
            sudo yum install -y cyrus-sasl-plain || EXIT_CODE=$?
          fi
          if [ -n "$EXIT_CODE" ]; then
            gum log -sl warn 'There was an error ensuring the Postfix-SendGrid dependencies were installed'
          fi

          if [ -d /etc/postfix ]; then
            ### Add the SendGrid Postfix settings to the Postfix configuration
            if [ -f "${XDG_CONFIG_HOME:-$HOME/.config}/postfix/main.cf" ]; then
              CONFIG_FILE=/etc/postfix/main.cf
              if cat "$CONFIG_FILE" | grep '### INSTALL DOCTOR MANAGED' > /dev/null; then
                gum log -sl info 'Removing Install Doctor-managed block of code in /etc/postfix/main.cf block'
                START_LINE="$(echo `grep -n -m 1 "### INSTALL DOCTOR MANAGED ### START" "$CONFIG_FILE" | cut -f1 -d ":"`)"
                END_LINE="$(echo `grep -n -m 1 "### INSTALL DOCTOR MANAGED ### END" "$CONFIG_FILE" | cut -f1 -d ":"`)"
                if [ -n "$START_LINE" ] && [ -n "$END_LINE" ]; then
                  if command -v gsed > /dev/null; then
                    sudo gsed -i "${START_LINE},${END_LINE}d" "$CONFIG_FILE"
                  else
                    sudo sed -i "${START_LINE},${END_LINE}d" "$CONFIG_FILE"
                  fi
                else
                  gum log -sl info 'No start-line or end-line detected - configuration appears to already be clean'
                fi
              fi

              ### Add Postfix main configuration
              logg "Adding the following configuration from ${XDG_CONFIG_HOME:-$HOME/.config}/postfix/main.cf to /etc/postfix/main.cf"
              cat "${XDG_CONFIG_HOME:-$HOME/.config}/postfix/main.cf" | sudo tee -a "$CONFIG_FILE" > /dev/null
              echo "" | sudo tee -a "$CONFIG_FILE" > /dev/null
            fi

            ### Ensure proper permissions on `sasl_passwd` and update Postfix hashmaps
            if [ -f "${XDG_CONFIG_HOME:-$HOME/.config}/postfix/sasl_passwd" ]; then
              gum log -sl info "Copying file from ${XDG_CONFIG_HOME:-$HOME/.config}/postfix/sasl_passwd to /etc/postfix/sasl_passwd"
              sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/postfix/sasl_passwd" /etc/postfix/sasl_passwd
              gum log -sl info 'Assigning proper permissions to /etc/postfix/sasl_passwd'
              sudo chmod 600 /etc/postfix/sasl_passwd
              gum log -sl info 'Updating Postfix hashmaps for /etc/postfix/sasl_passwd'
              sudo postmap /etc/postfix/sasl_passwd
            else
              gum log -sl warn '~/.config/postfix/sasl_passwd file is missing'
            fi

            ### Forward root e-mails
            if [ -d /root ]; then
              gum log -sl info "Forwarding root e-mails to $PRIMARY_EMAIL"
              echo "$PRIMARY_EMAIL" | sudo tee /root/.forward > /dev/null || gum log -sl error 'Failed to set root user .forward file'
            elif [ -d /var/root ]; then
              gum log -sl info "Forwarding root e-mails to $PRIMARY_EMAIL"
              echo "$PRIMARY_EMAIL" | sudo tee /var/root/.forward > /dev/null || gum log -sl error 'Failed to set root user .forward file'
            else
              gum log -sl warn 'Unable to identify root user home directory'
            fi

            ### Ensure /etc/postfix/header_checks exists
            if [ ! -d /etc/postfix/header_checks ]; then
              gum log -sl info 'Creating /etc/postfix/header_checks since it does not exist'
              sudo touch /etc/postfix/header_checks
            fi

            ### Re-write header From for SendGrid
            if ! cat /etc/postfix/header_checks | grep "no-reply@${PUBLIC_SERVICES_DOMAIN}" > /dev/null; then
              gum log -sl info 'Added From REPLACE to /etc/postfix/header_checks'
              echo "/^From:.*@${PUBLIC_SERVICES_DOMAIN}/ REPLACE From: no-reply@${PUBLIC_SERVICES_DOMAIN}" | sudo tee -a /etc/postfix/header_checks > /dev/null
            fi

            ### Update aliases
            if [ -f /etc/aliases ]; then
              gum log -sl info "Forward root e-mails to $PRIMARY_EMAIL"
              ALIASES_TMP="$(mktemp)"
              gum log -sl info "Setting $PRIMARY_EMAIL as root e-mail in temporary file"
              sudo sed "s/#root.*/root:\ $PRIMARY_EMAIL/" /etc/aliases > "$ALIASES_TMP"
              gum log -sl info 'Moving temporary file to /etc/aliases'
              sudo mv -f "$ALIASES_TMP" /etc/aliases
              if ! cat /etc/aliases | grep "$USER_USERNAME: root" > /dev/null; then
                gum log -sl info 'Forward user e-mail to root@localhost'
                echo "$USER_USERNAME: root" | sudo tee -a /etc/aliases > /dev/null
              fi

              ### Ensure old /etc/aliases.db is removed
              if [ -f /etc/aliases.db ]; then
                gum log -sl info 'Ensuring /etc/aliases.db is removed' && sudo rm -f /etc/aliases.db
              else
                gum log -sl info '/etc/aliases.db was not found'
              fi

              ### Re-generate the /etc/aliases.db file
              if [ -f /etc/aliases ]; then
                gum log -sl info 'Ensuring proper permissions on the /etc/aliases file' && sudo chown $(stat -c "%U:%G" /etc/sudoers) /etc/aliases
                gum log -sl info 'Generating Postfix aliases' && sudo postalias /etc/aliases > /dev/null
              else
                gum log -sl warn '/etc/aliases is missing which is required for Postfix'
              fi
              # The `sudo newaliases` mode is probably used to regenerate the /etc/aliases.db
              # but since we are removing it to ensure proper permissions, this method is commented out.
              # gum log -sl info 'Running newaliases to regenerate the alias database' && sudo newaliases
            else
              gum log -sl warn '/etc/aliases does not appear to exist'
            fi

            if [ -d /Applications ] && [ -d /System ]; then
              ### macOS
              # Source: https://budiirawan.com/install-mail-server-mac-osx/
              if [ -f "${XDG_CONFIG_HOME:-$HOME/.config}/postfix/com.apple.postfix.master.plist" ] && ! sudo launchctl list | grep 'postfix.master' > /dev/null; then
                gum log -sl info 'Copying com.apple.postfix.master.plist'
                sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/postfix/com.apple.postfix.master.plist" /System/Library/LaunchDaemons/com.apple.postfix.master.plist
                sudo launchctl load /System/Library/LaunchDaemons/com.apple.postfix.master.plist && gum log -sl info 'launchctl load of com.apple.postfix.master successful'
              fi
              if ! sudo postfix status > /dev/null; then
                gum log -sl info 'Starting postfix'
                sudo postfix start > /dev/null
              else
                gum log -sl info 'Reloading postfix'
                sudo postfix reload > /dev/null
              fi
            else
              ### Enable / restart postfix on Linux
              gum log -sl info 'Enabling / restarting postfix'
              sudo systemctl enable postfix
              sudo systemctl restart postfix
            fi
          else
            gum log -sl warn '/etc/postfix is not a directory! Skipping SendGrid Postfix setup.'
          fi
        else
          gum log -sl info 'Skipping Postfix configuration because Postfix is not installed'
        fi
      fi
    apt: postfix
    dnf: postfix
    pacman: postfix
    port: postfix
    script:darwin: echo "Postfix is included by macOS already"
  postgresql:
    _bin: postgresql
    _github: https://github.com/postgres/postgres
    _name: PostgreSQL
    _service: postgresql
    _service:brew: postgresql@14
    apt: postgresql
    brew: postgresql
    choco: postgresql
    dnf: postgresql
    pacman: postgresql
    zypper: postgresql
  postman:
    _app: Postman.app
    _bin: postman
    _github: https://github.com/postmanlabs/postman-app-support
    _desc: "[Postman](https://www.postman.com/) is a collaboration platform for API development. Postman's features simplify each step of building an API and streamline collaboration so you can create better APIs — faster."
    _docs: https://learning.postman.com/docs/getting-started/introduction/
    _home: https://www.postman.com/
    _name: Postman
    ansible: professormanhattan.postman
    cask: postman
    choco: postman
    flatpak: com.getpostman.Postman
    snap: postman
    yay: postman-bin
  powerline:
    _bin: powerline
    _github: https://github.com/powerline/powerline
    apt: powerline
    dnf: powerline
    pacman: powerline
    pipx: powerline-status
  powershell:
    _app: PowerShell.app
    _bin: powershell
    _github: https://github.com/PowerShell/PowerShell
    _desc: '[PowerShell](https://docs.microsoft.com/en-us/powershell/scripting/overview?view=powershell-7.1) is a task automation and configuration management framework from Microsoft, consisting of a command-line shell and the associated scripting language. Initially a Windows component only, known as Windows PowerShell, it was made open-source and cross-platform in 2016 with the introduction of PowerShell Core.'
    _docs: https://docs.microsoft.com/en-us/powershell/scripting/overview?view=powershell-7.1
    _name: Powershell
    _post:cask: |
      #!/usr/bin/env bash
      brew install mono-libgdiplus
    ansible: professormanhattan.powershell
    cask: powershell
    snap: powershell --classic
  pppc-utility:
    _app: PPPC Utility.app
    _bin: pppc-utility
    _github: https://github.com/jamf/PPPC-Utility
    _name: Privacy Preferences Policy Control (PPPC) Utility
    cask: pppc-utility
  pre-commit:
    _bin: pre-commit
    _desc: Automatically installs a git pre-commit script in your git repository which runs your `npm test` on pre-commit
    _github: https://github.com/observing/pre-commit
    _name: pre-commit
    brew: pre-commit
    pipx: pre-commit
  prefsniff:
    _bin: prefsniff
    _github: https://github.com/zcutlip/prefsniff
    _name: PrefSniff
    pipx: prefsniff
  prepare:
    _bin: null
    _github: false
    _desc: An Ansible Role that prepares hosts for playbook execution
    ansible: professormanhattan.prepare
  prettier:
    _bin: prettier
    _desc: '[Prettier](https://prettier.io/docs/en/index.html) is an opinionated code formatter. It enforces a consistent style by parsing your code and re-printing it with its own rules that take the maximum line length into account, wrapping code when necessary'
    _docs: https://prettier.io/docs/en/index.html
    _github: https://github.com/prettier/prettier
    _home: https://prettier.io/
    _name: Prettier
    brew: prettier
    npm: prettier
  prettierd:
    _bin: prettierd
    _desc: Prettier, as a daemon, for improved formatting speed.
    _docs: https://github.com/fsouza/prettierd
    _github: https://github.com/fsouza/prettierd
    _home: https://github.com/fsouza/prettierd
    _name: Prettierd
    brew: fsouza/prettierd/prettierd
    npm: '@fsouza/prettierd'
  pretzel:
    _app: Pretzel.app
    # cask: pretzel
    _bin: null
    _desc: Pretzel is Mac desktop app that shows and find keyboard shortcuts based on your current app
    _docs: https://github.com/amiechen/pretzel
    _github: https://github.com/amiechen/pretzel
    _home: https://github.com/amiechen/pretzel
    _name: Pretzel
    _todo: Waiting for SHASUM error on Homebrew cask to resolve
  prezi-video:
    _app: Prezi Video.app
    _bin: prezi-video
    _github: false
    _name: Prezi Video
    cask: prezi-video
  privaxy:
    _app: Privaxy.app
    _bin: privaxy
    _desc: Privaxy is the next generation tracker and advertisement blocker. It blocks ads and trackers by MITMing HTTP(s) traffic.
    _docs: false
    _github: https://github.com/Barre/privaxy
    _home: false
    _name: Privaxy
    appimage: barre/privaxy
    apt: https://github.com/Barre/privaxy/releases/download/v0.5.2/privaxy_0.5.2_amd64.deb
    script:darwin: curl -sSL https://github.com/Barre/privaxy/releases/download/v0.5.2/Privaxy_0.5.2_universal.dmg > /tmp/Privaxy.dmg && sudo hdiutil attach /tmp/Privaxy.dmg && sudo cp -R /Volumes/Privaxy/Privaxy.app /Applications && sudo hdiutil detach /Volumes/Privaxy && rm -f /tmp/Privaxy.dmg
  privileges:
    _app: Privileges.app
    _bin: privileges
    _github: https://github.com/SAP/macOS-enterprise-privileges
    _name: Privileges
    cask: privileges
  privoxy:
    _bin: privoxy
    _desc: Privoxy is a non-caching web proxy with advanced filtering capabilities for enhancing privacy, modifying web page data and HTTP headers, controlling access, and removing ads and other obnoxious Internet junk
    _docs: https://www.privoxy.org/user-manual/index.html
    _github: https://github.com/unisx/privoxy
    _groups:
      - privoxy
    _home: https://www.privoxy.org/
    _name: Privoxy
    _post: "#!/usr/bin/env bash\n# @file Privoxy Configuration\n# @brief This script applies the Privoxy configuration stored at `${XDG_CONFIG_HOME:-HOME/.config}/privoxy/config` to the system and then restarts Privoxy\n# @description\n#     Privoxy is a web proxy that can be combined with Tor to provide an HTTPS / HTTP proxy that can funnel all traffic\n#     through Tor. This script:\n#\n#     1. Determines the system configuration file location\n#     2. Applies the configuration stored at `${XDG_CONFIG_HOME:-HOME/.config}/privoxy/config`\n#     3. Enables and restarts the Privoxy service with the new configuration\n#\n#     ## Links\n#\n#     * [Privoxy configuration](https://github.com/megabyte-labs/install.doctor/tree/master/home/dot_config/privoxy/config)\n\n### Define the Privoxy configuration location based on whether system is macOS or Linux\nif [ -d /Applications ] && [ -d /System ]; then\n  ### macOS\n  if [ -d \"/usr/local/etc/privoxy\" ]; then\n    PRIVOXY_CONFIG_DIR=/usr/local/etc/privoxy\n  elif [ -d \"${HOMEBREW_PREFIX:-/opt/homebrew}/etc/privoxy\" ]; then\n    PRIVOXY_CONFIG_DIR=\"${HOMEBREW_PREFIX:-/opt/homebrew}/etc/privoxy\"\n  else\n    gum log -sl warn 'Unable to detect Privoxy configuration directory'\n  fi\nelse\n  ### Linux\n  PRIVOXY_CONFIG_DIR=/etc/privoxy\nfi\nPRIVOXY_CONFIG=\"$PRIVOXY_CONFIG_DIR/config\"\n\n### Copy Privoxy configuration stored at `${XDG_CONFIG_HOME:-HOME/.config}/privoxy/config` to the system location\nif command -v privoxy > /dev/null; then\n  if [ -d  \"$PRIVOXY_CONFIG_DIR\" ]; then\n    sudo cp -f \"${XDG_CONFIG_HOME:-HOME/.config}/privoxy/config\" \"$PRIVOXY_CONFIG\"\n    sudo chmod 600 \"$PRIVOXY_CONFIG\"\n    if command -v add-usergroup > /dev/null; then\n      sudo add-usergroup \"$USER\" privoxy\n    fi\n    sudo chown privoxy:privoxy \"$PRIVOXY_CONFIG\" 2> /dev/null || sudo chown privoxy:$(id -g -n) \"$PRIVOXY_CONFIG\"\n    \n    ### Restart Privoxy after configuration is applied\n    if [ -d /Applications ] && [ -d /System ]; then\n      ### macOS\n      brew services restart privoxy\n    else\n      if [[ ! \"$(test -d /proc && grep Microsoft /proc/version > /dev/null)\" ]]; then\n        ### Linux\n        sudo systemctl enable privoxy\n        sudo systemctl restart privoxy\n      else\n        gum log -sl info 'The system is a WSL environment so the Privoxy systemd service will not be enabled / restarted'\n      fi\n    fi\n  else\n    gum log -sl warn 'The '\"$PRIVOXY_CONFIG_DIR\"' directory is missing'\n  fi\nelse\n  logg logg 'privoxy is missing from the PATH - skipping configuration'\nfi\n"
    _service: privoxy
    _serviceEnabled: true
    apt: privoxy
    brew: privoxy
    dnf: privoxy
    pacman: privoxy
    port: privoxy
  procs:
    _bin: procs
    _desc: A modern replacement for ps written in Rust
    _github: https://github.com/dalance/procs
    _name: procs
    apk: procs
    brew: procs
    cargo: procs
    dnf: procs
    github: github.com/dalance/procs
    pacman: procs
    scoop: procs
    snap: procs
  profilecreator:
    _app: ProfileCreator.app
    _bin: null
    _desc: Profile manifest creator GUI for macOS
    _docs: https://github.com/ProfileCreator/ProfileCreator
    _github: https://github.com/ProfileCreator/ProfileCreator
    _home: https://github.com/ProfileCreator/ProfileCreator
    _name: Profile Creator
    cask: profilecreator
    mas: 2141249187
  progress:
    _bin: progress
    _github: https://github.com/Xfennec/progress
    _name: Progress
    apt: progress
    brew: progress
    dnf: progress
    pacman: progress
    port: progress
    zypper: progress
  projen:
    _bin: projen
    _github: https://github.com/projen/projen
    _name: Projen
    npm: projen
  protonmail-bridge:
    _app: Proton Mail Bridge.app
    _github: https://github.com/ProtonMail/proton-bridge
    _bin: protonmail-bridge
    cask: protonmail-bridge
    choco: protonmailbridge
    flatpak: ch.protonmail.protonmail-bridge
    yay: protonmail-bridge
  protonmail-import-export:
    _app: ProtonMail Import-Export app.app
    _bin: protonmail-import-export
    _github: false
    cask: protonmail-import-export
    flatpak: ch.protonmail.protonmail-import-export-app
  protonvpn:
    _app: ProtonVPN.app
    _bin: protonvpn
    _desc: '[Proton](https://www.proton.org/) is a free and open-source raster graphics editor used for image manipulation and image editing, free-form drawing, transcoding between different image file formats, and more specialized tasks. Proton is released under GPLv3+ license and is available for Linux, macOS, and Microsoft Windows.'
    _docs: https://protonmail.com/support/
    _github: https://github.com/ProtonVPN/linux-app
    _home: https://protonmail.com/
    _name: ProtonVPN
    _post:dnf:fedora: |
      #!/usr/bin/env bash
      sudo dnf install -y python3-pip && pip3 install --user 'dnspython>=1.16.0'
    _post:yay: |
      #!/usr/bin/env bash
      sudo pacman -Syu libappindicator-gtk3 gnome-shell-extension-appindicator
    _pre:apt: |
      #!/usr/bin/env bash
      sudo apt-get install -y https://repo.protonvpn.com/debian/dists/stable/main/binary-all/protonvpn-stable-release_1.0.3_all.deb && sudo apt-get update
    _pre:dnf: |
      #!/usr/bin/env bash
      sudo dnf install -y https://repo.protonvpn.com/fedora-36-stable/release-packages/protonvpn-stable-release-1.0.1-1.noarch.rpm && sudo dnf update
    # ansible: professormanhattan.proton
    apt:
      - gir1.2-appindicator3-0.1
      - gnome-shell-extension-appindicator
      - protonvpn
    cask: protonvpn
    choco: protonvpn
    dnf:fedora:
      - gnome-extensions-app
      - gnome-shell-extension-appindicator
      - gnome-tweaks
      - libappindicator-gtk3
      - protonvpn
    yay: protonvpn
  protonvpn-cli:
    _bin: protonvpn
    _github: https://github.com/ProtonVPN/linux-cli
    _deps:script:darwin:
      - dialog
      - openvpn
    _desc: The ProtonVPN CLI official release for Linux along with an unofficial ProtonVPN CLI for macOS
    _name: ProtonVPN CLI
    _todo: Populate this once the ProtonVPN CLI is released to the package managers
    apt: protonvpn-cli
    dnf: protonvpn-cli
    pacman: protonvpn-cli
    script:darwin: |
      sudo rm -rf /usr/local/src/protonvpn-cli
      sudo git clone https://github.com/phx/protonvpn-cli-macos /usr/local/src/protonvpn-cli
      cd /usr/local/src/protonvpn-cli && pip3 install -r requirements.txt
      sudo python3 setup.py install
  provisionql:
    _github: https://github.com/ealeksandrov/ProvisionQL
    _name: ProvisionQL
    _when:cask: '! test -d "$HOME/Library/QuickLook/ProvisionQL.qlgenerator"'
    cask: provisionql
  proxyman:
    _app: Proxyman.app
    _bin: proxyman-cli
    _github: https://github.com/ProxymanApp/Proxyman
    _name: Proxyman
    cask: proxyman
  psi:
    _bin: psi
    _desc: Run mobile and desktop performance tests for your deployed site using Google PageSpeed Insights v5 with tidy reporting for your build process
    _github: https://github.com/GoogleChromeLabs/psi
    _name: psi
    npm: psi
  psscriptanalyzer:
    _bin: psscriptanalyzer
    _github: https://github.com/PowerShell/PSScriptAnalyzer
    _name: PSScriptAnalyzer
    choco: psscriptanalyzer
  psu:
    _bin: portainer-stack-utils
    _desc: CLI client for Portainer
    _docs: https://github.com/greenled/portainer-stack-utils
    _github: https://github.com/greenled/portainer-stack-utils
    _home: https://hub.docker.com/r/greenled/portainer-stack-utils/
    _name: psu
    go: github.com/greenled/portainer-stack-utils@master
  pueue:
    _bin: pueue
    _github: https://github.com/Nukesor/pueue
    _name: Pueue
    _service: pueue
    apk: pueue
    apt: pueue
    brew: pueue
    cargo: pueue --locked
    dnf: pueue
    pacman: pueue
  pulumi:
    _bin: pulumi
    _desc: Pulumi - Infrastructure as Code in any programming language. Build infrastructure intuitively on any cloud using familiar languages
    _docs: https://www.pulumi.com/docs/quickstart/
    _github: https://github.com/pulumi/pulumi
    _home: https://www.pulumi.com/
    _name: Pulumi
    brew: pulumi/tap/pulumi
    choco: pulumi
  pup:
    _bin: pup
    _desc: '[pup](https://github.com/ericchiang/pup) is a command line tool for processing HTML. It reads from stdin, prints to stdout, and allows the user to filter parts of the page using CSS selectors.'
    _github: https://github.com/ericchiang/pup
    _name: pup
    ansible: professormanhattan.pup
    brew: pup
    github: github.com/ericchiang/pup
    go: github.com/ericchiang/pup@latest
  pushpin:
    _bin: pushpin
    _github: https://github.com/fastly/pushpin
    _name: Pushpin
    brew: pushpin
  pv:
    _bin: pv
    _github: https://github.com/icetee/pv
    apt: pv
  pwnat:
    _bin: pwnat
    _github: https://github.com/samyk/pwnat
    _name: pwnat
    brew: pwnat
  python:
    _bin: python3
    _github: https://github.com/python/cpython
    _post:brew: |
      #!/usr/bin/env bash
      python3 -m pip install --upgrade setuptools
      python3 -m pip install --upgrade pip
    apt: python3-pip
    brew: python
    dnf: python3-pip
    pacman: python-pip
    scoop: python
  python2:
    _bin: python2
    _github: false
    apt: python2
    # Prepare an alternate method for installing python2 on macOS - python2 package no longer works
    # brew: python2
    choco: python2
    dnf: python2
    pacman: python2
    scoop: python2
  pywhat:
    _bin: what
    _desc: Identify anything. pyWhat easily lets you identify emails, IP addresses, and more. Feed it a .pcap file or some text and it'll tell you what it is!
    _github: https://github.com/bee-san/pyWhat
    brew: pywhat
    pipx: pywhat
    port: pywhat
  pywin32:
    _bin: pywin32
    _github: https://github.com/mhammond/pywin32
    _name: Pywin32
    pipx:windows: pywin32
  qbittorrent:
    _app: qBittorrent.app
    _bin: qbittorrent
    _desc: '[qBittorrent](https://www.qbittorrent.org/) is a cross-platform free and open-source BitTorrent client. qBittorrent is a native application written in C++. It uses Boost, Qt 5 toolkit, and libtorrent-rasterbar library. Its optional search engine is written in Python.'
    _docs: https://github.com/qbittorrent/qBittorrent/wiki
    _github: https://github.com/qbittorrent/qBittorrent
    _home: https://www.qbittorrent.org/
    _name: qBittorrent
    ansible: professormanhattan.qbittorrent
    apt: qbittorrent
    cask: qbittorrent
    choco: qbittorrent
    dnf: qbittorrent
    flatpak: org.qbittorrent.qBittorrent
    pacman: qbittorrent
    yay: qbittorrent-git
  qlcolorcode:
    _github: https://github.com/n8gray/QLColorCode
    _name: QLColorCode
    _when:cask: '! test -d "$HOME/Library/QuickLook/QLColorCode.qlgenerator"'
    cask: qlcolorcode
  qlmarkdown:
    _github: https://github.com/toland/qlmarkdown
    _name: QLMarkdown
    _when:cask: '! test -d "$HOME/Library/QuickLook/ProvisionQL.qlgenerator"'
    cask: qlmarkdown
  qlplugins:
    _bin: null
    _github: false
    _deps:
      - provisionql
      - qlcolorcode
      - qlmarkdown
      - qlstephen
      - qlvideo
      - quicklook-json
      - quicklookapk
      - webpquicklook
    _name: null
  qlstephen:
    _github: https://github.com/whomwah/qlstephen
    _name: QLStephen
    _when:cask: '! test -d "$HOME/Library/QuickLook/QLStephen.qlgenerator"'
    cask: qlstephen
  qlvideo:
    _github: https://github.com/Marginal/QLVideo
    _name: QLVideo
    _when:cask: '! test -d "$HOME/Library/QuickLook/ProvisionQL.qlgenerator"'
    cask: qlvideo
  quark-engine:
    _bin: quark
    _desc: Dig Vulnerabilities in the BlackBox (requirement of APKLabs VSCode plugin)
    _docs: https://quark-engine.readthedocs.io/en/latest/index.html
    _github: https://github.com/quark-engine/quark-engine
    _home: https://github.com/quark-engine/quark-engine
    _name: Quark-Engine
    pipx: quark-engine
  quasar:
    _bin: null
    _desc: '[Quasar](https://github.com/quasar/Quasar) is a fast and light-weight remote administration tool coded in C#. The usage ranges from user support through day-to-day administrative work to employee monitoring. Providing high stability and an easy-to-use user interface, Quasar is the perfect remote administration solution for you.'
    _docs: https://github.com/quasar/Quasar/wiki
    _github: https://github.com/quasar/Quasar
    _home: https://github.com/quasar/Quasar
    _name: Quasar
    ansible:windows: professormanhattan.quasar
  quickemu:
    _bin: quickemu
    _github: https://github.com/quickemu-project/quickemu
    _pre: |
      #!/usr/bin/env bash
      sudo apt-add-repository ppa:flexiondotorg/quickemu && sudo apt update
    apt:ubuntu: quickemu
  quickgui:
    _github: https://github.com/quickemu-project/quickgui
    _pre: |
      #!/usr/bin/env bash
      sudo add-apt-repository ppa:yannick-mauray/quickgui && sudo apt update
    apt:ubuntu: quickgui
  quicklook-json:
    _github: false
    _name: QLJSON
    _when:cask: '! test -d "$HOME/Library/QuickLook/QuickLookJSON.qlgenerator"'
    cask: quicklook-json
  quicklookapk:
    _github: https://github.com/hezi/QuickLookAPK
    _name: QLAPK
    _when:cask: '! test -d "$HOME/Library/QuickLook/QuickLookAPK.qlgenerator"'
    cask: quicklookapk
  quicktype:
    _bin: quicktype
    _github: https://github.com/quicktype/quicktype
    _name: Quicktype
    npm: quicktype
  ramda:
    _bin: ramda
    _desc: A CLI tool for processing data with functional pipelines
    _docs: https://github.com/raine/ramda-cli#synopsis
    _github: https://github.com/raine/ramda-cli
    _home: https://github.com/raine/ramda-cli
    _name: Ramda
    npm: ramda-cli
  rancher-cli:
    _bin: rancher
    _desc: The Rancher Command Line Interface (CLI) is a unified tool for interacting with your Rancher Server
    _docs: https://ranchermanager.docs.rancher.com/reference-guides/cli-with-rancher/rancher-cli
    _github: https://github.com/rancher/cli
    _name: rancher
    brew: rancher-cli
    github: github.com/rancher/cli
    yay: rancher-cli-bin
  rancher-desktop:
    _github: https://github.com/rancher-sandbox/rancher-desktop/
    cask: rancher
  raspberry-pi-imager:
    _app: Raspberry Pi Imager.app
    _bin: rpi-imager
    _desc: '[Raspberry Pi Imager](https://www.raspberrypi.org/software/) is the quick and easy way to install Raspberry Pi OS and other operating systems to a microSD card, ready to use with your Raspberry Pi.'
    _docs: https://www.raspberrypi.com/documentation/computers/getting-started.html
    _github: https://github.com/raspberrypi/rpi-imager
    _home: https://www.raspberrypi.com/software/
    _name: Raspberry Pi Imager
    ansible: professormanhattan.raspberryimager
    cask: raspberry-pi-imager
    choco: rpi-imager
    dnf: rpi-imager
    flatpak: org.raspberrypi.rpi-imager
    snap: rpi-imager
    yay: rpi-imager
  raycast:
    _app: Raycast.app
    _bin: null
    _desc: Everything you need to extend Raycast (the search provider for macOS)
    _docs: https://developers.raycast.com/
    _env:
      RAYCAST_APPDATA:
        cask: "$HOME/Library/Application Support/com.raycast.macos"
    _github: https://github.com/raycast/extensions
    _home: https://www.raycast.com/
    _name: Raycast
    cask: raycast
  rclone:
    _bin: rclone
    _desc: '[Rclone](https://rclone.org/) is an open source, multi threaded, command line computer program to manage content on cloud and other high latency storage. Its capabilities include sync, transfer, crypt, cache, union, compress and mount. The rclone website lists [fifty supported backends](https://rclone.org/overview/) including S3 services and Google Drive.'
    _docs: https://rclone.org/docs/
    _github: https://github.com/rclone/rclone
    _groups:
      - rclone
    _home: https://rclone.org/
    _name: Rclone
    _post: |
      #!/usr/bin/env bash
      # @file Rclone S3 Mounts
      # @brief This script configures Rclone to provide several S3-compliant mounts by leveraging CloudFlare R2
      # @description
      #     Install Doctor leverages Rclone and CloudFlare R2 to provide S3-compliant bucket mounts that allow you to retain stateful files and configurations.
      #     In general, these buckets are used for backing up files like your browser profiles, Docker backup files, and other files that cannot be stored as
      #     as code in your Install Doctor fork.
      #
      #     This script sets up Rclone to provide several folders that are synchronized with S3-compliant buckets (using CloudFlare R2 by default).
      #     The script ensures required directories are created and that proper permissions are applied. This script will only run if `rclone` is
      #     available in the `PATH`. It also requires the user to provide `CLOUDFLARE_R2_ID` and `CLOUDFLARE_R2_SECRET` as either environment variables
      #     or through the encrypted repository-fork-housed method detailed in the [Secrets documentation](https://install.doctor/docs/customization/secrets).
      #
      #     ## Mounts
      #
      #     The script will setup five mounts by default and enable / start `systemd` services on Linux systems so that the mounts are available
      #     whenever the device is turned on. The mounts are:
      #
      #     | Mount Location        | Description                                                                                                           |
      #     |-----------------------|-----------------------------------------------------------------------------------------------------------------------|
      #     | `/mnt/Private`        | Private system-wide bucket used for any private files that should not be able to be accessed publicly over HTTPS      |
      #     | `/mnt/Public`         | Public system-wide bucket that can be accessed by anyone over HTTPS with the bucket's URL (provided by CloudFlare R2) |
      #     | N/A                   | Private system-wide bucket used for storing Docker-related backups / files                                            |
      #     | N/A                   | Private system-wide bucket similar to `/mnt/Private` but intended for system file backups                             |
      #     | `$HOME/Public` | Private user-specific bucket (used for backing up application settings)                                               |
      #
      #     ## Permissions
      #
      #     The system files are all assigned proper permissions and are owned by the user `rclone` with the group `rclone`. The exception to this is the
      #     user-specific mount which uses the user's user name and user group.
      #
      #     ## Samba
      #
      #     If Samba is installed, then by default Samba will create two shares that are symlinked to the `/mnt/s3-private` and `/mnt/s3-public`
      #     buckets. This feature allows you to easily access the two buckets from other devices in your local network. If Rclone buckets are not
      #     available then the Samba setup script will just create regular empty folders as shares.
      #
      #     ## Notes
      #
      #     * The mount services all leverage the executable found at `$HOME/.local/bin/rclone-mount` to mount the shares.
      #
      #     ## Links
      #
      #     * [Rclone mount script](https://github.com/megabyte-labs/install.doctor/tree/master/home/dot_local/bin/executable_rclone-mount)
      #     * [Rclone default configurations](https://github.com/megabyte-labs/install.doctor/tree/master/home/dot_config/rclone)
      #     * [Rclone documentation](https://rclone.org/docs/)

      if command -v rclone > /dev/null; then
        {{- if and (or (and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_ID"))) (env "CLOUDFLARE_R2_ID")) (or (and (stat (joinPath .host.home ".config" "age" "chezmoi.txt")) (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_SECRET"))) (env "CLOUDFLARE_R2_SECRET")) (ne .user.cloudflare.r2 "") }}
        gum log -sl info 'Removing ~/.config/rclone/rclone.conf Install Doctor managed block'
        CONFIG_FILE="${XDG_CONFIG_HOME:-$HOME/.config}/rclone/rclone.conf"
        if cat "$CONFIG_FILE" | grep '# INSTALL DOCTOR MANAGED S3 START' > /dev/null; then
          # TODO: Remove old block
          START_LINE="$(echo `grep -n -m 1 "# INSTALL DOCTOR MANAGED S3 START" "$CONFIG_FILE" | cut -f1 -d ":"`)"
          END_LINE="$(echo `grep -n -m 1 "# INSTALL DOCTOR MANAGED S3 END" "$CONFIG_FILE" | cut -f1 -d ":"`)"
          if command -v gsed > /dev/null; then
            gsed -i "$START_LINE,${END_LINE}d" "$CONFIG_FILE" > /dev/null
          else
            sed -i "$START_LINE,${END_LINE}d" "$CONFIG_FILE" > /dev/null
          fi
        fi
        gum log -sl info 'Adding ~/.config/rclone/rclone.conf INSTALL DOCTOR managed block'
        sudo tee -a "$CONFIG_FILE" > /dev/null <<EOT
      # INSTALL DOCTOR MANAGED S3 START
      [User-{{ .user.username}}]
      access_key_id = {{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_ID_USER")) }}{{- includeTemplate "secrets/CLOUDFLARE_R2_ID_USER" | decrypt | trim -}}{{ else }}{{- env "CLOUDFLARE_R2_ID_USER" -}}{{ end }}
      acl = private
      endpoint = {{ .user.cloudflare.r2 }}.r2.cloudflarestorage.com
      provider = Cloudflare
      region = auto
      secret_access_key = {{ if (stat (joinPath .chezmoi.sourceDir ".chezmoitemplates" "secrets" "CLOUDFLARE_R2_SECRET_USER")) }}{{- includeTemplate "secrets/CLOUDFLARE_R2_SECRET_USER" | decrypt | trim -}}{{ else }}{{- env "CLOUDFLARE_R2_SECRET_USER" -}}{{ end }}
      type = s3
      # INSTALL DOCTOR MANAGED S3 END
      EOT
        {{- end }}
        sudo chown -f root "$CONFIG_FILE"
        sudo chmod -f 600 "$CONFIG_FILE"

        gum log -sl info 'Ensuring /var/cache/rclone exists'
        sudo mkdir -p /var/cache/rclone
        sudo chmod 750 /var/cache/rclone
        ### Add user / group with script in ~/.local/bin/add-usergroup, if it is available
        if command -v add-usergroup > /dev/null; then
          sudo add-usergroup "$USER" rclone
        fi
        sudo chown -Rf rclone:rclone /var/cache/rclone

        gum log -sl info 'Ensuring /var/log/rclone exists'
        sudo mkdir -p /var/log/rclone
        sudo chmod 750 /var/log/rclone
        sudo chown -Rf rclone:rclone /var/log/rclone

        gum log -sl info 'Adding ~/.local/bin/rclone-mount to /usr/local/bin'
        sudo cp -f "$HOME/.local/bin/rclone-mount" /usr/local/bin/rclone-mount
        sudo chmod +x /usr/local/bin/rclone-mount

        gum log -sl info 'Adding ~/.config/rclone/rcloneignore to /etc/rcloneignore'
        sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/rclone/rcloneignore" /etc/rcloneignore
        sudo chown -Rf rclone:rclone /etc/rcloneignore
        sudo chmod 640 /etc/rcloneignore

        gum log -sl info 'Adding ~/.config/rclone/system-rclone.conf to /etc/rclone.conf'
        sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/rclone/system-rclone.conf" /etc/rclone.conf
        sudo chown -Rf rclone:rclone /etc/rclone.conf
        sudo chmod 600 /etc/rclone.conf

        if [ -d /Applications ] && [ -d /System ]; then
          ### Enable Rclone mounts
          gum log -sl info 'Ensuring Rclone mount-on-reboot definitions are in place'
          if [ -f "$HOME/Library/LaunchDaemons/rclone.private.plist" ] && [ ! -f "/Library/LaunchDaemons/rclone.private.plist" ]; then
            gum log -sl info 'Adding /Volumes/Private as S3 bucket mount, enabled at boot'
            sudo mkdir -p /Library/LaunchDaemons
            sudo cp -f "$HOME/Library/LaunchDaemons/rclone.private.plist" '/Library/LaunchDaemons/rclone.private.plist'
            sudo launchctl load '/Library/LaunchDaemons/rclone.private.plist' && gum log -sl info 'launchctl load successful'
          fi
          if [ -f "$HOME/Library/LaunchDaemons/rclone.public.plist" ] && [ ! -f "/Library/LaunchDaemons/rclone.public.plist" ]; then
            gum log -sl info 'Adding /Volumes/Public as S3 bucket mount, enabled at boot'
            sudo mkdir -p /Library/LaunchDaemons
            sudo cp -f "$HOME/Library/LaunchDaemons/rclone.public.plist" '/Library/LaunchDaemons/rclone.public.plist'
            sudo launchctl load '/Library/LaunchDaemons/rclone.public.plist' && gum log -sl info 'launchctl load successful'
          fi
          if [ -f "$HOME/Library/LaunchDaemons/rclone.user.plist" ] && ! launchctl list | grep 'rclone.user' > /dev/null; then
            gum log -sl info 'Adding ~/Public as S3 bucket mount, enabled at boot'
            launchctl load "$HOME/Library/LaunchDaemons/rclone.user.plist" && gum log -sl info 'user launchctl load successful'
          fi
        elif [ -d /etc/systemd/system ]; then
          find "${XDG_CONFIG_HOME:-$HOME/.config}/rclone/system" -mindepth 1 -maxdepth 1 -type f | while read RCLONE_SERVICE; do
            ### Add systemd service file
            gum log -sl info "Adding S3 system mount service defined at $RCLONE_SERVICE"
            FILENAME="$(basename "$RCLONE_SERVICE")"
            SERVICE_ID="$(echo "$FILENAME" | sed 's/.service//')"
            sudo cp -f "$RCLONE_SERVICE" "/etc/systemd/system/$(basename "$RCLONE_SERVICE")"

            ### Ensure mount folder is created
            gum log -sl info "Ensuring /mnt/$SERVICE_ID is created with proper permissions"
            sudo mkdir -p "/mnt/$SERVICE_ID"
            sudo chmod 750 "/mnt/$SERVICE_ID"

            ### Enable / restart the service
            gum log -sl info "Enabling / restarting the $SERVICE_ID S3 service"
            sudo systemctl enable "$SERVICE_ID"
            sudo systemctl restart "$SERVICE_ID"
          done

          ### Add user Rclone mount
          gum log -sl info 'Adding user S3 rclone mount (available at ~/.local/mnt/s3)'
          sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/rclone/s3-user.service" "/etc/systemd/system/s3-${USER}.service"
          gum log -sl info 'Enabling / restarting the S3 user mount'
          sudo systemctl enable "s3-${USER}"
          sudo systemctl restart "s3-${USER}"
        fi
      else
        gum log -sl info 'rclone is not available'
      fi
    ansible: professormanhattan.rclone
    apt: rclone
    brew:linux: rclone
    choco:
      - rclone
      - winfsp
      - nssm
    dnf: rclone
    pacman: rclone
    port: rclone
    scoop: rclone
    script:darwin: |
      #!/usr/bin/env bash
      TMP="$(mktemp)"
      curl https://rclone.org/install.sh > "$TMP"
      sudo bash "$TMP"
      rm -f "$TMP"
  recoverpy:
    _bin: recoverpy
    _deps:
      - coreutils
      - grep
      - progress
      - util-linux
    _desc: '[RecoverPy](https://github.com/PabloLec/RecoverPy) is a powerful tool that leverages your system capabilities to recover lost file. Unlike others, you can not only recover deleted files but also overwritten data.'
    _docs: https://github.com/PabloLec/RecoverPy#usage
    _github: https://github.com/PabloLec/RecoverPy
    _home: https://github.com/PabloLec/RecoverPy
    _name: RecoverPy
    _when: echo '! pip3 list | grep recoverpy > /dev/null' | bash
    ansible:linux: professormanhattan.recoverpy
    script:linux: python3 -m pip install recoverpy
  recuva:
    _bin: recuva
    _desc: Recuva recovers files from your Windows computer, recycle bin, digital camera card, or MP3 player!
    _docs: https://www.ccleaner.com/recuva
    _github: false
    _home: https://www.ccleaner.com/recuva
    _name: Recuva
    choco: recuva
    scoop: extras/recuva
  redis-desktop-manager:
    _bin: redis-desktop-manager
    _desc: '[Redis Desktop Manager](https://rdm.dev/) is an open source cross-platform Desktop Manager for Redis based on Qt 5.'
    _docs: https://docs.rdm.dev/en/docs-fix-edit-url/
    _github: https://github.com/uglide/RedisDesktopManager
    _home: https://resp.app/
    _name: Redis Desktop Manager
    ansible:linux: professormanhattan.rdm
    flatpak: app.resp.RESP
    snap: redis-desktop-manager
  redis-insight:
    _app: RedisInsight.app
    _bin: redis-insight
    _github: https://github.com/RedisInsight/RedisInsight
    _name: Redis Insight
    cask: redisinsight
    flatpak: com.redis.RedisInsight
    mas: 2142946629
  reek:
    _bin: reek
    _github: https://github.com/troessner/reek
    _name: Reek
    gem: reek
  remmina:
    _bin: remmina
    _github: https://github.com/FreeRDP/Remmina
    _desc: Remmina is a GTK Remmina Remote Desktop Client which provides remote access, screen and file sharing to your desktop
    _docs: https://gitlab.com/Remmina/Remmina/-/wikis/home
    _env:
      REMMINA_APPDATA:
        flatpak: "$HOME/.var/app/org.remmina.Remmina/config/remmina/remmina.pref"
        snap: "$HOME/snap/remmina/current/.config/remmina/remmina.pref"
    _home: https://remmina.org/
    _name: Remmina
    apt: remmina
    dnf: remmina
    flatpak: org.remmina.Remmina
    pacman: remmina
    snap: remmina
    yay: remmina-git
  remote-desktop:
    _github: false
    _deps:
      - gnome-boxes
      - microsoft-remote-desktop
      - remmina
      - xrdp
  repo:
    _bin: repo
    _github: false
    _name: Repo
    apt: repo
    brew: repo
    dnf: repo
    pacman: repo
    # TODO: Include Windows install method
  responsively:
    _app: ResponsivelyApp.app
    _bin: null
    _desc: A modified web browser that helps in responsive web development
    _github: https://github.com/responsively-org/responsively-app
    _name: Responsively
    cask: responsively
    choco: responsively
    github: github.com/responsively-org/responsively-app
  restic:
    _bin: restic
    _desc: '[Restic](https://restic.net/) is a modern backup program that can back up your files from Linux, BSD, Mac and Windows to many different storage types, including self-hosted and online services. It is a single executable that you can run without a server or complex setup. It can be used to only back-up the parts of files that actually changed. It uses cryptography in every part of the process. Restic is entirely free to use and completely open source.'
    _docs: https://restic.readthedocs.io/en/latest/
    _github: https://github.com/restic/restic
    _home: https://restic.net/
    _name: Restic
    ansible: professormanhattan.restic
    apk: restic
    apt: restic
    brew: restic
    dnf: restic
    eopkg: restic
    nix: restic
    pacman: restic
    pkg-freebsd: restic
    pkg_add: restic
    port: restic
    scoop: restic
    zypper: restic
  resume:
    _bin: resume
    _desc: CLI tool to easily setup a new resume
    _docs: https://jsonresume.org/getting-started/
    _github: https://github.com/jsonresume/resume-cli
    _home: https://jsonresume.org/
    _name: JSON Resume CLI
    npm: resume-cli
  ripgrep:
    _bin: rg
    _desc: '[ripgrep](https://github.com/BurntSushi/ripgrep) is a line-oriented search tool that recursively searches your current directory for a regex pattern. By default, ripgrep will respect your .gitignore and automatically skip hidden files/directories and binary files. This role also installs ripgrep-all. [ripgrep-all](https://github.com/phiresky/ripgrep-all) is just like ripgrep except it also searches in PDFs, E-Books, Office documents, zip, tar.gz, etc.'
    _github: https://github.com/BurntSushi/ripgrep
    _name: ripgrep
    ansible: professormanhattan.ripgrep
    apt: ripgrep
    brew: ripgrep
    cargo: ripgrep
    choco: ripgrep
    dnf: ripgrep
    nix: ripgrep
    pacman: ripgrep
    pkg: ripgrep
    port: ripgrep
    scoop: ripgrep
    zypper: ripgrep
  ripgrep-all:
    _bin: rga
    _desc: rga is a line-oriented search tool that allows you to look for a regex in a multitude of file types. rga wraps the awesome ripgrep and enables it to search in pdf, docx, sqlite, jpg, movie subtitles (mkv, mp4), etc.
    _github: https://github.com/phiresky/ripgrep-all
    brew:
      - ffmpeg
      - pandoc
      - poppler
      - rga
      - tesseract
    choco: ripgrep-all
    nix: ripgrep-all
    pacman: ripgrep-all
  rkhunter:
    _bin: rkhunter
    _desc: rkhunter is a Unix-based tool that scans for rootkits, backdoors and possible local exploits
    _home: https://rkhunter.sourceforge.net/
    _name: rkhunter
    _github: false
    _notes: The _post script removes an entry for VMware with a space in it that causes rkhunter to hiccup
    _post: |
      #!/usr/bin/env bash
      if [ -d /Applications ] && [ -d /System ]; then
        ### macOS
        gum log -sl info 'Updating file "$(brew --prefix)/Cellar/rkhunter/1.4.6/etc/rkhunter.conf"' && gsed -i  "s/^#WEB_CMD.*$/WEB_CMD=curl\ -L/" "$(brew --prefix)/Cellar/rkhunter/1.4.6/etc/rkhunter.conf"
      else
        ### Linux
        gum log -sl info 'Updating file /etc/rkhunter.conf' && sed -i  "s/^#WEB_CMD.*$/WEB_CMD=curl\ -L/" /etc/rkhunter.conf
      fi
      export PATH="$(echo "$PATH" | sed 's/VMware Fusion.app/VMwareFusion.app/')"
      sudo rkhunter --propupd || RK_PROPUPD_EXIT_CODE=$?
      if [ -n "$RK_PROPUPD_EXIT_CODE" ]; then
        echo "FIXME sudo rkhunter --propupd returned non-zero exit code"
      fi
      sudo rkhunter --update || RK_UPDATE_EXIT_CODE=$?
      if [ -n "$RK_UPDATE_EXIT_CODE" ]; then
        echo "FIXME sudo rkhunter --update returned non-zero exit code"
      fi
    _service:pacman: cronie
    apt: rkhunter
    brew: rkhunter
    dnf: rkhunter
    pacman:
      - cronie
      - rkhunter
      - s-nail
  rm-improved:
    _bin: rip
    _desc: A safe and ergonomic alternative to rm
    _docs: https://github.com/nivekuil/rip
    _github: https://github.com/nivekuil/rip
    _home: https://github.com/nivekuil/rip
    _name: rip (Rm ImProved)
    brew: rm-improved
    cargo: rm-improved
    github: github.com/nivekuil/rip
    yay: rm-improved
  robotframework:
    _bin: robot
    _desc: Generic automation framework for acceptance testing and RPA
    _docs: https://robotframework.org/robotframework/#user-guide
    _github: https://github.com/robotframework/robotframework
    _home: https://robotframework.org/
    _name: Robot Framework
    pipx: robotframework
  rofi:
    _bin: rofi
    _desc: Rofi is a window switcher, application launcher and dmenu replacement
    _docs: https://davatorium.github.io/rofi/
    _github: https://github.com/davatorium/rofi
    _home: https://davatorium.github.io/rofi/
    _name: rofi
    apt: rofi
    dnf:fedora: rofi
    pacman: rofi
    pkg: rofi
    port: rofi
    zypper: rofi
  rsync:
    _bin: rsync
    _desc: rsync is an open source utility that provides fast incremental file transfer.
    _docs: https://rsync.samba.org/documentation.html
    _github: https://github.com/WayneD/rsync
    _home: https://rsync.samba.org/
    _name: rsync
    apt: rsync
    brew: rsync
    choco: rsync
    dnf: rsync
  rsyslog:
    _bin: rsyslogd
    _github: https://github.com/rsyslog/rsyslog
    _name: RSyslog
    _ports:
      - port: 514
        proto: tcp
    _service: rsyslog
    apt: rsyslog
    brew: rsyslog
    dnf: rsyslog
    pacman: rsyslog
  rtop:
    _bin: rtop
    _github: https://github.com/rapidloop/rtop
    _name: rtop
    go: github.com/rapidloop/rtop@latest
  rubocop:
    _bin: rubocop
    _github: https://github.com/rubocop/rubocop
    _name: Rubocop
    gem: rubocop
  ruby:
    _bin: ruby
    _desc: Ruby is an interpreted, high-level, general-purpose programming language which supports multiple programming paradigms. It was designed with an emphasis on programming productivity and simplicity. In Ruby, everything is an object, including primitive data types. It was developed in the mid-1990s in Japan.
    _docs: https://www.ruby-lang.org/en/documentation/
    _github: https://github.com/ruby/ruby
    _home: https://www.ruby-lang.org/en/
    _name: Ruby
    ansible: professormanhattan.ruby
    apt: ruby-dev
    brew: ruby
    choco: ruby
    dnf: ruby-devel
    pacman: ruby
    port: ruby
    scoop: ruby
  ruff:
    _bin: ruff
    _desc: An extremely fast Python linter, written in Rust.
    _docs: https://beta.ruff.rs/docs/
    _github: https://github.com/charliermarsh/ruff
    _home: https://beta.ruff.rs/docs/
    _name: Ruff
    apk: ruff
    brew: ruff
    pacman: ruff
    pipx: ruff
  runitor:
    _bin: runitor
    _github: https://github.com/bdd/runitor
    _name: Runitor
    go: bdd.fi/x/runitor/cmd/runitor@latest
  runjs:
    _app: RunJS.app
    _bin: null
    _desc: A JavaScript playground that auto-evaluates as you type
    _github: https://github.com/lukehaas/RunJS
    _name: RunJS
    cask: runjs
    choco: runjs
    github: github.com/lukehaas/RunJS
    yay: runjs-bin
  rust:
    _bin: rustc
    _desc: '[Rust](https://www.rust-lang.org/) is a multi-paradigm programming language designed for performance and safety, especially safe concurrency.'
    _docs: https://www.rust-lang.org/learn
    _github: https://github.com/rust-lang/rust
    _home: https://www.rust-lang.org/
    _name: Rust
    _post:snap: |
      #!/usr/bin/env bash
      rustup toolchain install stable
    ansible: professormanhattan.rust
    brew: rust
    choco: rust
    dnf:
      - cargo
      - rust
    pacman: rust
    port:
      - cargo
      - rust
    scoop: rust
    script:darwin: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
    script:linux: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
  rustdesk:
    _app: RustDesk.app
    _bin: rustdesk
    _desc: Open source virtual / remote desktop infrastructure for everyone! The open source TeamViewer alternative. Display and control your PC and Android devices from anywhere at anytime.
    _docs: https://rustdesk.com/docs/en/
    _github: https://github.com/rustdesk/rustdesk
    _home: https://rustdesk.com/
    _name: RustDesk
    apt: https://github.com/rustdesk/rustdesk/releases/download/1.1.9/rustdesk-1.1.9.deb
    cask: rustdesk
    choco: rustdesk
    dnf: https://github.com/rustdesk/rustdesk/releases/download/1.1.9/rustdesk-1.1.9-fedora28-centos8.rpm
    pacman: rustdesk
    scoop: rustdesk
    zypper: https://github.com/rustdesk/rustdesk/releases/download/1.1.9/rustdesk-1.1.9-suse.rpm
  rustscan:
    _bin: rustscan
    _desc: An Nmap-based port scanner that scans all 65k ports in 3 seconds
    _docs: https://rustscan.github.io/RustScan/
    _github: https://github.com/RustScan/RustScan
    _home: https://github.com/RustScan/RustScan
    _name: RustScan
    brew: rustscan
    yay: rustscan
  rusty:
    _bin: rusty
    _github: https://github.com/zahidkhawaja/rusty
    _name: Rusty AI CLI
    _todo: Get cargo crate link once this is resolved https://github.com/zahidkhawaja/rusty/issues/7
  s-search:
    _bin: s
    _desc: Open a web search in your terminal.
    _docs: https://github.com/zquestz/s
    _github: https://github.com/zquestz/s
    _home: https://github.com/zquestz/s
    _name: s
    brew: s-search
  s5cmd:
    _bin: s5cmd
    _desc: '[s5cmd](https://github.com/peak/s5cmd) is a very fast S3 and local filesystem execution tool. It comes with support for a multitude of operations including tab completion and wildcard support for files, which can be very handy for your object storage workflow while working with large number of files. s5cmd is the fastest way of interacting with S3 buckets because it can utilize multiple threads unlike similar tools.'
    _github: https://github.com/peak/s5cmd
    _name: s5cmd
    ansible: professormanhattan.s5cmd
    brew: peak/tap/s5cmd
    github: github.com/peak/s5cmd
    go: github.com/peak/s5cmd@latest
  sad:
    _bin: sad
    _desc: sad is a Batch File Edit tool. It will show you a really nice diff of proposed changes before you commit them
    _github: https://github.com/ms-jpq/sad
    brew: ms-jpq/sad/sad
    pacman: sad
  safe-rm:
    _bin: safe-rm
    _github: https://github.com/kaelzhang/shell-safe-rm
    _name: safe-rm
    npm: safe-rm
  sake:
    _bin: sake
    _desc: Sake is a task runner for local and remote hosts
    _docs: https://sakecli.com/examples
    _github: https://github.com/alajmo/sake
    _home: https://sakecli.com/
    _name: Sake
    brew: alajmo/sake/sake
    go: github.com/alajmo/sake@latest
    script:darwin: curl -sfL https://raw.githubusercontent.com/alajmo/sake/main/install.sh | sh
    script:linux: curl -sfL https://raw.githubusercontent.com/alajmo/sake/main/install.sh | sh
  samba:
    _bin: smbd
    _bin:dnf: smb
    _desc: '[Samba](https://www.samba.org/) is a free and open-source software that allows files to be shared across Windows and Linux systems simply and easily. To be exact, it is an open-source implementation of the SMB/CIFS protocol.'
    _docs: https://www.samba.org/samba/docs/
    _github: https://github.com/samba-team/samba
    _groups:
      - sambausers
    _home: https://www.samba.org/
    _name: Samba
    _post: |
      #!/usr/bin/env bash
      # @file Samba Configuration
      # @brief This script configures Samba by applying the configuration stored in `${XDG_DATA_HOME:-$HOME/.config}/samba/config` if the `smbd` application is available
      # @description
      #     This script applies the Samba configuration stored in `${XDG_DATA_HOME:-$HOME/.config}/samba/config` if Samba is installed.
      #     The script and default configuration set up two Samba shares.
      #
      #     ## Security
      #
      #     Both shares are configured by default to only accept connections
      #     from hosts with DNS that ends in `.local.PUBLIC_SERVICES_DOMAIN`, where `PUBLIC_SERVICES_DOMAIN` is an environment variable that
      #     can be passed into Install Doctor. So, if your `PUBLIC_SERVICES_DOMAIN` environment variable is set to `megabyte.space`, then
      #     a device with a FQDN of `alpha.local.megabyte.space` pointing to its LAN location will be able to connect but a device
      #     with a FQDN of `alpha.megabyte.space` will not be able to connect.
      #
      #     ## Samba Shares / S3 Backup
      #
      #     If CloudFlare R2 credentials are provided, Samba is configured to store its shared files in the Rclone mounts so that your
      #     Samba shares are synchronized to the S3 buckets. If not, new folders are created. Either way, the folder / symlink that the
      #     shares host data from are stored at `/mnt/Private` and `/mnt/Public` (*Note: Different paths are used on macOS*).
      #
      #     1. The **public** share (named "Public") can be accessed by anyone (including write permissions with the default settings)
      #     2. The **private** share (named "Private") can be accessed by specifying the PAM credentials of anyone who has an account that is included in the `sambausers` group
      #
      #     ## Symlinks
      #
      #     Symlinks are disabled for security reasons. This is because, with symlinking enabled, people can create symlinks on the shares and use the symlinks to access system files outside of the
      #     Samba shares. There are commented-out lines in the default configuration that you can uncomment to enable the symlinks in shares.
      #
      #     ## Printers
      #
      #     Printer sharing is not enabled by default. There are commented lines in the default configuration that should provide a nice stepping
      #     stone if you want to use Samba for printer sharing (with CUPS).
      #
      #     ## Environment Variables
      #
      #     The following chart details some of the environment variables that are used to determine the configuration of the
      #     Samba shares:
      #
      #     | Environment Variable        | Description                                                                                         |
      #     |-----------------------------|-----------------------------------------------------------------------------------------------------|
      #     | `PUBLIC_SERVICES_DOMAIN`    | Used to determine which hosts can connect to the Samba share (e.g. `.local.PUBLIC_SERVICES_DOMAIN`) |
      #     | `SAMBA_NETBIOS_NAME`        | Determines the NetBIOS name (defaults to the `HOSTNAME` environment variable value)                 |
      #     | `SAMBA_WORKGROUP`           | Controls Samba workgroup name (defaults to "BETELGEUSE")                                            |
      #
      #     ## Links
      #
      #     * [Default Samba configuration](https://github.com/megabyte-labs/install.doctor/tree/master/home/dot_local/samba/config.tmpl)
      #     * [Secrets / Environment variables documentation](https://install.doctor/docs/customization/secrets)

      ### Configure Samba server
      if command -v smbd > /dev/null; then
        # Add user / group with script in ~/.local/bin/add-usergroup, if it is available
        if command -v add-usergroup > /dev/null; then
          sudo add-usergroup "$USER" rclone
        fi

        ### Define share locations
        if [ -d /Applications ] && [ -d /System ]; then
          ### macOS does not have `/mnt` folder so use `/Volumes` location
          MNT_FOLDER='Volumes'
        else
          MNT_FOLDER='mnt'
        fi
        PRIVATE_SHARE="/$MNT_FOLDER/Private"
        PUBLIC_SHARE="/$MNT_FOLDER/Public"

        gum log -sl info "Ensuring $PRIVATE_SHARE is created"
        sudo mkdir -p "$PRIVATE_SHARE"
        sudo chmod 750 "$PRIVATE_SHARE"
        sudo chown -Rf root:rclone "$PRIVATE_SHARE"

        gum log -sl info "Ensuring $PUBLIC_SHARE is created"
        sudo mkdir -p "$PUBLIC_SHARE"
        sudo chmod 755 "$PUBLIC_SHARE"
        sudo chown -Rf root:rclone "$PUBLIC_SHARE"

        gum log -sl info "Ensuring $HOME/Public is created"
        mkdir -p "$HOME/Public"
        chmod 755 "$HOME/Public"
        chown -Rf "$USER":rclone "$HOME/Public"

        ### Copy the Samba server configuration file
        if [ -d /Applications ] && [ -d /System ]; then
          sudo sharing -a "$PRIVATE_SHARE" -S "Private (System)" -n "Private (System)" -g 000 -s 001 -E 1 -R 1 && gum log -sl info "Configured $PRIVATE_SHARE as a private Samba share" || gum log -sl info 'sharing command failed - it is likely that the share was already set up'
          sudo sharing -a "$PUBLIC_SHARE" -S "Public (System)" -n "Public (System)" -g 001 -s 001 -E 1 -R 0 && gum log -sl info "Configured $PUBLIC_SHARE as a public Samba share" || gum log -sl info 'sharing command failed - it is likely that the share was already set up'
          sudo sharing -a "$HOME/Public" -S "Public (User)" -n "Public (User)" -g 001 -s 001 -E 1 -R 0 && gum log -sl info "Configured $HOME/Public as a public Samba share" || gum log -sl info 'sharing command failed - it is likely that the share was already set up'
        else
          gum log -sl info "Copying Samba server configuration to /etc/samba/smb.conf"
          sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/samba/config" "/etc/samba/smb.conf"

          ### Reload configuration file changes
          gum log -sl info 'Reloading the smbd config'
          smbcontrol smbd reload-config
        fi
      else
        gum log -sl info "Samba server is not installed"
      fi
    _service: smbd
    _service:dnf: smb
    apt: samba
    brew: samba
    dnf: samba
    pacman: samba
    port: samba4
  sanoid:
    _bin: sanoid
    _deps:
      - pv
    _desc: '[Sanoid](https://github.com/jimsalterjrs/sanoid/) is a free and open source snapshot management tool. Sanoid is a policy-driven snapshot management tool for ZFS filesystems. When combined with the Linux KVM hypervisor, you can use it to make your systems functionally immortal.'
    _github: https://github.com/jimsalterjrs/sanoid/
    _name: Sanoid
    # Only install Sanoid when there are ZFS shares listed in the command `zfs list`
    _when:linux: command -v zfs > /dev/null && ! zfs list
    ansible:linux: professormanhattan.sanoid
    apt:
      - libcapture-tiny-perl
      - libconfig-inifiles-perl
      - libdata-dump-perl
      # Unavailable on Ubuntu 22.04
      # - mhash2
      - sanoid
  santa:
    _bin: santactl
    _desc: A binary authorization system for MacOS (santa) role is a daemon that makes execution decisions based on the contents of a local database, a GUI agent that notifies the user in case of a block decision and a command-line utility for managing the system and synchronizing the database with a server.
    _docs: https://santa.dev/
    _github: https://github.com/google/santa
    _home: https://santa.dev/
    _name: A binary authorization system for MacOS
    cask: santa
  sapling:
    _bin: sl
    _github: https://github.com/facebook/sapling
    _name: Sapling
    brew: sapling
    pacman: sapling-scm-bin
    script:windows: |
      curl -sSL https://github.com/facebook/sapling/releases/latest > ~/Downloads/sapling_windows_0.2.20231113-145254+995db0d6_amd64.zip
      Expand-Archive ~/Downloads/sapling_windows_0.2.20231113-145254+995db0d6_amd64.zip 'C:\Program Files'
      setx PATH "$env:PATH;C:\Program Files\Sapling" -m
      Set-Alias -Name sl -Value 'C:\Program Files\Sapling\sl.exe' -Force -Option Constant,ReadOnly,AllScope
  scap-security-guide:
    _bin: oscap
    _github: https://github.com/ComplianceAsCode/content
    _name: OpenSCAP
    apt:
      - ssg-debderived
      - ssg-applications
    apt:debian:
      - ssg-debian
      - ssg-applications
    dnf: scap-security-guide
  schema:
    _bin: schema
    _desc: A tool to infer and instantiate schemas and translate between data formats
    _github: https://github.com/Confbase/schema
    _name: schema
    go: github.com/Confbase/schema@latest
  scrcpy:
    _bin: scrcpy
    _desc: '[scrcpy](https://github.com/Genymobile/scrcpy) is a free and open-source application that provides display of Android devices connected on USB (or over TCP/IP). It also allows you to control the Android device. It does not require any root access.'
    _github: https://github.com/Genymobile/scrcpy
    _name: scrcpy
    ansible: professormanhattan.scrcpy
    apt: scrcpy
    brew: scrcpy
    choco: scrcpy
    dnf: scrcpy
    github: github.com/Genymobile/scrcpy
    pkg: scrcpy
    snap: scrcpy
    yay: scrcpy
  scrcpy-gui:
    _bin: scrcpy-gui
    _desc: A simple & beautiful GUI application for scrcpy
    _github: https://github.com/Tomotoes/scrcpy-gui
    _name: Scrcpy GUI
    flatpak: in.srev.guiscrcpy
  sd:
    _bin: sd
    _desc: Intuitive find & replace CLI (sed alternative)
    _github: https://github.com/chmln/sd
    _name: sd
    apk: sd
    brew: sd
    cargo: sd
    choco: sd-cli
    dnf:fedora: sd
    github: github.com/chmln/sd
    pacman: sd
    pkg: sd
  sddm:
    _bin: sddm
    _github: https://github.com/sddm/sddm
    _name: SDDM
    _post: |
      #!/usr/bin/env bash
      sudo systemctl set-default graphical.target
    _service: sddm
    apt: sddm
    dnf: sddm
    pacman: sddm
    zypper: sddm
  sdkman-cli:
    _bin: sdk
    _github: https://github.com/sdkman/sdkman-cli
    _name: SDKMan
    script: |
      #!/usr/bin/env bash
      # @file SDKMAN Install
      # @brief Ensures SDKMAN is installed.
      # @description
      #     This script ensures SDKMAN (a Java version manager) is installed using the method recommended on [their
      #     website](https://sdkman.io/).

      ### Re-source ~/.bashrc
      if [ -z "$SDKMAN_DIR" ]; then
        gum log -sl info 'SDKMAN_DIR is undefined so ~/.bashrc is being re-sourced' && source ~/.bashrc
      fi

      ### SDKMan ~/.bashrc settings
      if command -v brew > /dev/null && command -v sdkman-cli > /dev/null; then
        export SDKMAN_DIR="$(brew --prefix sdkman-cli)/libexec"
        . "$SDKMAN_DIR/bin/sdkman-init.sh"
      elif [ -d "${XDG_DATA_HOME:-$HOME/.local/share}/sdkman" ]; then
        export SDKMAN_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/sdkman"
        . "$SDKMAN_DIR/bin/sdkman-init.sh"
      else
        logg logg 'Unable to find SDKMAN instance'
      fi

      ### Ensure SDKMan is installed (https://sdkman.io/)
      if [ ! -d "$SDKMAN_DIR" ]; then
        gum log -sl info 'Installing SDKMan via curl -s https://get.sdkman.io?rcupdate=false'
        gum log -sl info "Install directory: $SDKMAN_DIR"
        curl -s "https://get.sdkman.io?rcupdate=false" | bash
        if [ -f "$SDKMAN_DIR/bin/sdkman-init.sh" ]; then
          . "$SDKMAN_DIR/bin/sdkman-init.sh"
          gum log -sl info 'Running sdk install java' && sdk install java
        else
          gum log -sl warn 'SDKMAN_DIR/bin/sdkman-init.sh is missing'
        fi
      else
        gum log -sl info 'SDKMan appears to already be installed.'
        gum log -sl info 'Running sdk update'
        if command -v sdk > /dev/null; then
          sdk update
        else
          gum log -sl warn 'Unable to run sdk update because the sdk command is unavailable'
        fi
      fi
  seafile-client:
    _app: Seafile Client.app
    _github: https://github.com/haiwen/seafile-client
    _bin: seafile-client
    _todo: Look into integration of the full Seafile stack outlined [here](https://github.com/haiwen/seafile)
    cask: seafile-client
    choco: seafile-client
    flatpak: com.seafile.Client
  search-gpt:
    _bin: searchgpt
    _github: https://github.com/tobiasbueschel/search-gpt
    _name: Search GPT
    npm: search-gpt
  secretive:
    _app: Secretive.app
    _bin: null
    _desc: Store SSH keys in the Secure Enclave
    _github: https://github.com/maxgoedjen/secretive
    cask: secretive
  security:
    _bin: null
    _github: false
    _desc: This role turns on auto-updates and configures sudo, for instance.
    _name: Security
    ansible: professormanhattan.security
  semantic-release:
    _bin: semantic-release
    _desc: '[semantic-release](https://semantic-release.gitbook.io) automates the whole package release workflow including: determining the next version number, generating the release notes, and publishing the package'
    _docs: https://semantic-release.gitbook.io
    _github: https://github.com/semantic-release/semantic-release
    _home: https://semantic-release.gitbook.io
    _name: semantic-release
    npm: semantic-release
  sentry-cli:
    _bin: sentry-cli
    _desc: sentry-cli can connect to the Sentry API and manage some data for your projects
    _github: https://github.com/getsentry/sentry-cli/
    _name: sentry-cli
    brew:darwin: getsentry/tools/sentry-cli
    github: github.com/getsentry/sentry-cli
    npm: '@sentry/cli'
    scoop: sentry-cli
    yay: sentry-cli-bin
  serve:
    _bin: serve
    _desc: serve helps you serve a static site, single page application or just a static file (no matter if on your device or on the local network). It also provides a neat interface for listing the directory's contents
    _github: https://github.com/vercel/serve
    _name: serve
    npm: serve
  serverless:
    _bin: serverless
    _github: https://github.com/serverless/serverless
    _desc: Build applications with serverless architectures
    _docs: https://www.serverless.com/framework/docs
    _home: https://www.serverless.com/
    _name: serverless
    brew: serverless
    npm: serverless
  sftpgo:
    _bin: sftpgo
    _deps:
      - sftpgo-plugin-auth
    _desc: Fully featured and highly configurable SFTP server with optional HTTP/S, FTP/S and WebDAV support - S3, Google Cloud Storage, Azure Blob
    _github: https://github.com/drakkan/sftpgo
    _name: sftpgo
    _post: |
      #!/usr/bin/env bash
      sudo mkdir -p /usr/local/etc/sftpgo
      sudo cp -f "$HOME/.local/etc/sftpgo/sftpgo.json" /usr/local/etc/sftpgo/sftpgo.json
      sudo cp -f "$HOME/.local/etc/sftpgo/banner" /usr/local/etc/sftpgo/banner
      sudo mkdir -p /usr/local/etc/branding
      sudo cp -f "$HOME/.local/etc/branding/favicon.ico" /usr/local/etc/branding/favicon.ico
      sudo cp -f "$HOME/.local/etc/branding/logo-color-256x256.png" /usr/local/etc/branding/logo-color-256x256.png
      sudo cp -f "$HOME/.local/etc/branding/logo-color-900x900.png" /usr/local/etc/branding/logo-color-900x900.png
      sudo sftpgo initprovider
    _service: sftpgo
    _service:brew:
      - name: sftpgo
        sudo: true
    _serviceEnabled: true
    brew: sftpgo
    choco: sftpgo
    github: github.com/drakkan/sftpgo
    pkg: sftpgo
    yay: sftpgo-bin
  sftpgo-plugin-auth:
    _bin: sftpgo-plugin-auth
    _desc: A plugin for SFTPGo to enable LDAP/Active Directory authentication
    _github: https://github.com/sftpgo/sftpgo-plugin-auth
    _name: SFTPGo Authentication Plugin
    _post: |
      #!/usr/bin/env bash
      sudo mv -f $(which sftpgo-plugin-auth) /usr/local/bin/sftpgo-plugin-auth
    go: github.com/sftpgo/sftpgo-plugin-auth@latest
  share:
    _bin: share
    _desc: Quickly share files from your command line
    _github: https://github.com/marionebl/share-cli
    _name: share
    npm: share-cli
  sharex:
    _bin: null
    _desc: '[ShareX](https://getsharex.com/) is a free and open source program that lets you capture or record any area of your screen and share it with a single press of a key. It also allows uploading images, text or other types of files to many supported destinations you can choose from.'
    _docs: https://getsharex.com/docs/faq
    _github: https://github.com/ShareX/ShareX
    _home: https://getsharex.com/
    _name: ShareX
    ansible:windows: professormanhattan.sharex
    choco: sharex
  sharp:
    _bin: sharp
    _desc: CLI for sharp (a Node.js image processing module)
    _github: https://github.com/vseventer/sharp-cli
    _name: sharp
    npm: sharp-cli
  shc:
    _bin: shc
    _desc: Shell script compiler
    _docs: https://github.com/neurobin/shc
    _github: https://github.com/neurobin/shc
    _home: https://neurobin.org/projects/softwares/unix/shc/
    _name: shc
    ansible:darwin: professormanhattan.shc
    ansible:linux: professormanhattan.shc
    brew: shc
    port: shc
  shdoc:
    _bin: shdoc
    _deps:script:
      - gawk
    _desc: '[shdoc](https://github.com/reconquest/shdoc) is a tool to generate Documentation for shell scripts (bash, sh, zsh)'
    _github: https://github.com/reconquest/shdoc
    _name: shdoc
    ansible:darwin: professormanhattan.shdoc
    ansible:linux: professormanhattan.shdoc
    script:darwin: cd /tmp && git clone --recursive https://github.com/reconquest/shdoc && cd shdoc && sudo make install && cd /tmp && sudo rm -rf shdoc
    script:linux: cd /tmp && git clone --recursive https://github.com/reconquest/shdoc && cd shdoc && sudo make install && cd /tmp && sudo rm -rf shdoc
    yay: shdoc-git
  sheldon:
    _bin: sheldon
    _completions: sheldon completions --shell {SHELL}
    _github: https://github.com/rossmacarthur/sheldon
    _name: Sheldon
    brew: sheldon
    cargo: sheldon
  shell-gpt:
    _bin: sgpt
    _github: https://github.com/TheR1D/shell_gpt
    _name: Shell GPT
    pipx: shell-gpt
  shellcheck:
    _bin: shellcheck
    _desc: A static analysis tool for shell scripts
    _docker: docker run --rm -v "$PWD:/mnt" koalaman/shellcheck:stable
    _docs: https://github.com/koalaman/shellcheck/wiki/Directive
    _github: https://github.com/koalaman/shellcheck
    _home: https://www.shellcheck.net/
    _name: Shellcheck
    apt: shellcheck
    brew: shellcheck
    cabal: shellcheck
    choco: shellcheck
    dnf: shellcheck
    emerge: shellcheck
    eopkg: shellcheck
    nix: nixpkgs.shellcheck
    pacman: shellcheck
    pkg-freebsd: shellcheck
    pkg_add: shellcheck
    port: shellcheck
    scoop: shellcheck
    snap: shellcheck
    stack: shellcheck
    zypper: shellcheck
  shfmt:
    _bin: shfmt
    _desc: '[shfmt](https://github.com/mvdan/sh) is a shell parser, formatter, and interpreter with bash support that is written with [Go](https://gitlab.com/megabyte-labs/ansible-roles/go).'
    _github: https://github.com/mvdan/sh
    _home: https://pkg.go.dev/mvdan.cc/sh/v3
    _name: shfmt
    ansible: professormanhattan.shfmt
    apk: shfmt
    brew: shfmt
    github: github.com/mvdan/sh
    go: mvdan.cc/sh/v3/cmd/shfmt@latest
    pacman: shfmt
    pkg: shfmt
    scoop: shfmt
    snap: shfmt
  shml:
    _bin: shml
    _github: https://github.com/odb/shml
    _name: SHML
    brew: shml
    npm: shml
  shotcut:
    _app: Shotcut.app
    _bin: shotcut
    _desc: '[Shotcut](https://shotcut.org/) is a free and open-source cross-platform video editing application for FreeBSD, Linux, macOS and Windows. Started in 2011 by Dan Dennedy, Shotcut is developed on the MLT Multimedia Framework, in development since 2004 by the same author.'
    _docs: https://shotcut.org/howtos/getting-started/
    _github: https://github.com/mltframework/shotcut
    _home: https://shotcut.org/
    _name: Shotcut
    ansible: professormanhattan.shotcut
    apt: shotcut
    cask: shotcut
    choco: shotcut
    dnf: shotcut
    flatpak: org.shotcut.Shotcut
    snap: shotcut --classic
  shotwell:
    _bin: shotwell
    _desc: '[Shotwell](https://shotwell-project.org/doc/html/) is an image organizer designed to provide personal photo management for the GNOME desktop environment. In 2010, it replaced F-Spot as the standard image tool for several GNOME-based Linux distributions, including Fedora in version 13 and Ubuntu in its 10.10 Maverick Meerkat release.'
    _docs: http://shotwell-project.org/doc/html/
    _github: https://github.com/GNOME/shotwell
    _home: https://wiki.gnome.org/Apps/Shotwell
    _name: Shotwell
    ansible:linux: professormanhattan.shotwell
    apt: shotwell
    dnf: shotwell
    flatpak: org.gnome.Shotwell
    pacman: shotwell
  shuttle:
    _bin: cargo-shuttle
    _github: https://github.com/shuttle-hq/shuttle
    _name: Shuttle
    cargo: cargo-shuttle
    pacman: cargo-shuttle
    script: curl -sSfL https://www.shuttle.rs/install | bash
  shx:
    _bin: shx
    _github: https://github.com/shelljs/shx
    _name: shx
    npm: shx
  sidekick:
    _app: Sidekick.app
    _bin: sidekick
    _github: false
    _name: Sidekick
    cask: pushplaylabs-sidekick
  signal:
    _app: Signal.app
    _bin: signal
    _desc: Signal is a cross-platform centralized encrypted instant messaging service developed by the non-profit Signal Foundation and its subsidiary, the Signal Messenger LLC. Users can send one-to-one and group messages, which can include files, voice notes, images, and videos.
    _docs: https://support.signal.org/hc/en-us
    _github: https://github.com/signalapp/Signal-Desktop
    _home: https://signal.org
    _name: Signal Desktop
    cask: signal
    choco: signal
    flatpak: org.signal.Signal
    scoop: signal
  skaffold:
    _bin: skaffold
    _github: https://github.com/GoogleContainerTools/skaffold
    _name: Skaffold
    brew: skaffold
    choco: skaffold
    port: skaffold
    scoop: extras/skaffold
  skate:
    _bin: skate
    _desc: Skate is a personal key-value store. Use it to save and retrieve anything you’d like—even binary data. It’s fully encrypted, backed up to the cloud (that you can self-host if you want) and can be synced with all your machines
    _github: https://github.com/charmbracelet/skate
    _name: skate
    brew: charmbracelet/tap/skate
    go: github.com/charmbracelet/skate@latest
    nix: nixpkgs.skate
    pacman: skate
  skhd:
    _bin: skhd
    _desc: Keyboard shortcut daemon for macOS
    _docs: https://github.com/koekeishiya/skhd/issues/1
    _github: https://github.com/koekeishiya/skhd
    _home: https://github.com/koekeishiya/skhd
    _name: skhd
    _post:brew: |
      #!/usr/bin/env bash
      skhd --start-service
    brew:darwin: koekeishiya/formulae/skhd
  skm:
    _bin: skm
    _desc: A simple and powerful SSH keys manager
    _github: https://github.com/TimothyYe/skm
    _name: skm
    github: github.com/TimothyYe/skm
    go: github.com/TimothyYe/skm/cmd/skm@latest
  skype:
    _app: Skype.app
    _bin: skype
    _desc: '[Skype](https://www.skype.com/en/) is a proprietary telecommunications application that specializes in providing video chat and voice calls between computers, tablets, mobile devices, the Xbox One console, and smartwatches over the Internet. Skype also provides instant messaging services. Users may transmit text, video, audio and images.'
    _description: Skype is for connecting with the people that matter most in your life and work
    _docs: https://docs.microsoft.com/en-us/skype-sdk/skypeuris/skypeuriapireference
    _github: Not open-source
    _home: https://www.skype.com/en/
    _name: Skype
    ansible: professormanhattan.skype
    cask: skype
    choco: skype
    flatpak: com.skype.Client
    snap: skype
    yay: skypeforlinux-stable-bin
  slack:
    _app: Slack.app
    _bin: slack
    _desc: '[Slack](https://slack.com/) is a proprietary business communication platform developed by American software company Slack Technologies. Slack offers many IRC-style features, including persistent chat rooms organized by topic, private groups, and direct messaging.'
    _docs: https://api.slack.com/docs
    _github: https://github.com/slackhq/SlackTextViewController
    _home: https://slack.com/
    _name: Slack
    ansible: professormanhattan.slack
    cask: slack
    choco: slack
    flatpak: com.slack.Slack
    mas: 803453959
    snap: slack
  slack-term:
    _bin: slack-term
    _desc: '[slack-term](https://github.com/erroneousboat/slack-term) features a colorful interface as well as keyboard shortcuts. It is one of, if not the, most well-received [Slack](https://slack.com/) client available on GitHub.'
    _github: https://github.com/erroneousboat/slack-term
    _name: slack-term
    ansible: professormanhattan.slackterm
    go: github.com/erroneousboat/slack-term@latest
  slides:
    _bin: slides
    _desc: A terminal application that allows you to present slides rendered from markdown
    _docs: https://github.com/maaslalani/slides
    _github: https://github.com/maaslalani/slides
    _home: https://maaslalani.com/slides/
    _name: Slides
    brew: slides
    go: github.com/maaslalani/slides@latest
    nix-env: nixpkgs.slides
    snap: slides
    yay: slides
  sloth:
    _app: Sloth.app
    _bin: null
    _desc: Mac app that shows all open files, directories, sockets, pipes and devices in use by all running processes. Nice GUI for lsof.
    _docs: https://github.com/sveinbjornt/Sloth
    _github: https://github.com/sveinbjornt/Sloth
    _home: https://sveinbjorn.org/sloth
    _name: Sloth
    cask: sloth
  snapcraft:
    _bin: snapcraft
    _github: https://github.com/canonical/snapcraft
    _deps:
      - snapd
    _name: Snapcraft
    brew: snapcraft
    snap: snapcraft --classic
  snapd:
    _bin: snap
    _github: https://github.com/snapcore/snapd
    _desc: '[Snap](https://snapcraft.io/) is a software packaging and deployment system developed by Canonical for operating systems that use the Linux kernel. The packages, called snaps, and the tool for using them, snapd, work across a range of Linux distributions and allow upstream software developers to distribute their applications directly to users. Snaps are self-contained applications running in a sandbox with mediated access to the host system.'
    _home: https://snapcraft.io/
    _name: Snap
    # ansible:linux: professormanhattan.snapd
    _service: snapd
  snitch:
    _app: Little Snitch.app
    # Used for OpenSnitch, which is "temporarily" disabled until it works as expected
    # _bin: opensnitchd
    _desc: '[Little Snitch](https://www.obdev.at/products/littlesnitch/index.html) (macOS) and [OpenSnitch](https://github.com/evilsocket/opensnitch) (Linux) are application firewalls that make Internet connections visible. You can then configure which applications can access the internet (or LAN) as well as monitor the traffic patterns of applications.'
    _docs: https://www.obdev.at/products/littlesnitch/getting-started.html
    _github: https://github.com/evilsocket/opensnitch
    _home: https://www.obdev.at/products/littlesnitch/index.html
    _name: OpenSnitch/Little Snitch
    # Not loading on Ubuntu 22.04
    # ansible: professormanhattan.snitch
    cask: little-snitch
  social-analyzer:
    _bin: social-analyzer
    _desc: API, CLI, and Web App for analyzing and finding a person's profile in 1000 social media \ websites
    _github: https://github.com/qeeqbox/social-analyzer
    _name: social-analyzer
    pipx: social-analyzer
  soduto:
    _app: Soduto.app
    _github: https://github.com/soduto/Soduto
    _name: Soduto
    cask: soduto
  soft-serve:
    _bin: soft
    _desc: A tasty, self-hostable Git server for the command line
    _docs: https://github.com/charmbracelet/soft-serve
    _github: https://github.com/charmbracelet/soft-serve
    _home: https://charm.sh/
    _name: Soft Serve
    brew: charmbracelet/tap/soft-serve
    go: github.com/charmbracelet/soft-serve/cmd/soft@latest
    nix-env: nixpkgs.soft-serve
    pacman: soft-serve
  solargraph:
    _bin: solargraph
    _desc: Ruby language server
    _docs: https://solargraph.org/guides/getting-started
    _github: https://github.com/castwide/solargraph
    _home: https://solargraph.org/
    _name: Solargraph
    brew: solargraph
    gem: solargraph
  solidity:
    _bin: solcjs
    _desc: Javascript bindings for the Solidity compiler
    _github: https://github.com/ethereum/solc-js
    _name: solcjs
    npm: solc
  sparkleshare:
    _app: SparkleShare.app
    _bin: sparkleshare
    _github: https://github.com/hbons/SparkleShare
    _name: Sparkle Share
    cask: sparkleshare
    choco: sparkleshare
    flatpak: org.sparkleshare.SparkleShare
  speed-test:
    _bin: speed-test
    _desc: Test your internet connection speed and ping using speedtest.net from the CLI
    _github: https://github.com/sindresorhus/speed-test
    _name: speed-test
    npm: speed-test
  speedtest-cli:
    _bin: speedtest-cli
    _desc: Command line interface for testing internet bandwidth using speedtest.net
    _github: https://github.com/sivel/speedtest-cli
    _name: speedtest-cli
    pipx: speedtest-cli
  sphinx:
    _bin: sphinx-build
    _github: https://github.com/sphinx-doc/sphinx
    _name: Sphinx
    apt: python3-sphinx
    choco: sphinx
    dnf: python-sphinx
    pipx: sphinx
  spotdl:
    _bin: spotdl
    _deps:
      - ffmpeg
    _desc: Download your Spotify playlists and songs along with album art and metadata
    _docs: https://spotdl.readthedocs.io/en/latest/
    _github: https://github.com/spotDL/spotify-downloader
    _name: spotdl
    pipx: spotdl
  sql-language-server:
    _bin: sql-language-server
    _desc: An SQL language server
    _docs: https://github.com/joe-re/sql-language-server
    _github: https://github.com/joe-re/sql-language-server
    _home: https://github.com/joe-re/sql-language-server
    _name: SQL Language Server
    brew: sql-language-server
    npm: sql-language-server
  sqlectron:
    _app: sqlectron.app
    _bin: null
    _desc: A simple and lightweight SQL client desktop with cross database and platform support
    _github: https://github.com/sqlectron/sqlectron-gui
    _name: SQLectron
    cask: sqlectron
    github: github.com/sqlectron/sqlectron-gui
    yay: sqlectron-gui
  sqlite:
    _bin: sqlite3
    _desc: SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine.
    _docs: https://sqlite.org/docs.html
    _github: https://github.com/sqlite/sqlite
    _home: https://sqlite.org/index.html
    _name: SQLite
    apt: sqlite3
    brew: sqlite
    choco: sqlite
    dnf: sqlite
    pacman: sqlite
    port: sqlite3
    scoop: sqlite
  squid:
    _bin: squid
    _github: https://github.com/squid-cache/squid
    _name: Squid
    _preload: true
    _service: squid
    apt: squid
    brew: squid
    dnf: squid
    pacman: squid
  ssh:
    _bin: null
    _github: false
    _desc: On top of tightening up SSH security settings, this role also installs fail2ban on Linux systems. If provided, the role will also populate all your SSH keys and set their permissions appropriately
    _name: SSH
    ansible: professormanhattan.ssh
  ssh-vault:
    _bin: ssh-vault
    _desc: '[sshvault](https://ssh-vault.com/) lets you encrypt/decrypt using SSH private keys. It is written in Go and the documentation can be read in under a minute.'
    _docs: https://ssh-vault.com/post/how-it-works/
    _github: https://github.com/ssh-vault/ssh-vault
    _home: https://ssh-vault.com/
    _name: ssh-vault
    ansible: professormanhattan.sshvault
    brew: ssh-vault
    github: github.com/ssh-vault/ssh-vault
  sshfs:
    _bin: sshfs
    _name: SSHFS
    _github: https://github.com/libfuse/sshfs
    apt: sshfs
    brew:linux: sshfs
    choco: sshfs
    dnf: sshfs
    pacman: sshfs
    port: sshfs
    scoop: sshfs-np
  sshpass:
    _bin: sshpass
    _github: https://github.com/kevinburke/sshpass
    _desc: SSHPass is a tool for non-interactivly performing password authentication with SSH's so called "interactive keyboard password authentication". Most user should use SSH's more secure public key authentiaction instead.
    _home: https://sourceforge.net/projects/sshpass/
    _name: sshpass
    apt: sshpass
    brew: hudochenkov/sshpass/sshpass
    dnf: sshpass
  sshs:
    _bin: sshs
    _github: https://github.com/quantumsheep/sshs
    _name: SSHS
    brew: sshs
    choco: sshs
  sshuttle:
    _bin: sshuttle
    _github: https://github.com/sshuttle/sshuttle
    _name: SShuttle
    apt: sshuttle
    brew: sshuttle
    dnf: sshuttle
    emerge: net-proxy/sshuttle
    nix-env: nixos.sshuttle
    nix-pkg: nixpkgs.sshuttle
    pacman: sshuttle
    pipx: sshuttle
    port: sshuttle
    zypper: sshuttle
  ssl-proxy:
    _bin: ssl-proxy
    _desc: Simple zero-config SSL reverse proxy with real autogenerated certificates
    _github: https://github.com/suyashkumar/ssl-proxy
    _name: ssl-proxy
    go: github.com/suyashkumar/ssl-proxy@latest
  stacer:
    _bin: stacer
    _desc: Popular desktop GUI for monitoring and cleaning Linux systems.
    _docs: https://github.com/oguzhaninan/Stacer/blob/native/README.md
    _github: https://github.com/oguzhaninan/Stacer
    _home: https://oguzhaninan.github.io/Stacer-Web/
    _name: Stacer
    appimage: https://github.com/oguzhaninan/Stacer/releases/download/v1.1.0/Stacer-1.1.0-x64.AppImage
    apt: https://github.com/oguzhaninan/Stacer/releases/download/v1.1.0/stacer_1.1.0_amd64.deb
    apt:debian: stacer
    apt:ubuntu: stacer
    dnf: https://github.com/oguzhaninan/Stacer/releases/download/v1.1.0/stacer-1.1.0-amd64.rpm
    dnf:fedora: stacer
    yay: stacer
  standard-notes:
    _app: Standard Notes.app
    _bin: standard-notes
    _desc: End-to-end encrypted notes app
    _docs: https://standardnotes.com/help
    _github: https://github.com/standardnotes/app
    _home: https://standardnotes.com/
    _name: Standard Notes
    cask: standard-notes
    flatpak: org.standardnotes.standardnotes
  starred:
    _bin: starred
    _desc: Creates your own Awesome List sorted by GitHub stars by using the GitHub API
    _docs: https://github.com/maguowei/starred
    _github: https://github.com/maguowei/starred
    _home: https://pypi.org/project/starred/
    _name: Starred
    pipx: starred
  starship:
    _bin: null
    _github: https://github.com/starship/starship
    _desc: '[Starship](https://starship.rs/) is the minimal, blazing fast, and extremely customizable prompt for any shell! It shows the information you need, while staying sleek and minimal. Unlike most other prompts, it is compatible with nearly every type of terminal. If you want to retain the same look and feel across different terminals, then look no further.'
    _name: Starship
    ansible: professormanhattan.starship
  statcode:
    _bin: statcode
    _docs: Man pages for HTTP status codes
    _github: https://github.com/shobrook/statcode
    pipx: statcode
    yay: statcode
  staticcheck:
    _bin: staticcheck
    _desc: State of the art linter for the Go programming language
    _docs: https://staticcheck.io/docs/
    _github: https://github.com/dominikh/go-tools
    _home: https://staticcheck.io/
    _name: staticcheck
    brew: staticcheck
    dnf:fedora: golang-honnef-tools
    go: honnef.co/go/tools/cmd/staticcheck@latest
    pacman: staticcheck
    port: staticcheck
    scoop: staticcheck
  stats:
    _app: Stats.app
    _bin: null
    _desc: System monitor for the menu bar
    _github: https://github.com/exelban/stats
    _name: stats
    _service: null
    cask: stats
  steam:
    _app: Steam.app
    _bin: steam
    _github: false
    _name: steam
    cask: steam
    choco: steam
    flatpak: com.valvesoftware.Steam
  steampipe:
    _bin: steampipe
    _github: https://github.com/turbot/steampipe
    _name: Steampipe
    brew: turbot/tap/steampipe
  stegcloak:
    _bin: stegcloak
    _desc: StegCloak is a pure JavaScript steganography module designed in functional programming style, to hide secrets inside text by compressing and encrypting the secret before cloaking it with special unicode invisible characters
    _github: https://github.com/KuroLabs/stegcloak
    _home: https://stegcloak.surge.sh/
    _name: stegcloak
    npm: stegcloak
  storybook:
    _bin: storybook
    _github: https://github.com/storybookjs/storybook
    _name: Storybook
    npm: storybook
  sttr:
    _bin: sttr
    _desc: Cross-platform, CLI app to perform various operations on string
    _docs: https://github.com/abhimanyu003/sttr
    _github: https://github.com/abhimanyu003/sttr
    _home: https://github.com/abhimanyu003/sttr
    _name: sttr
    brew: abhimanyu003/sttr/sttr
    go: github.com/abhimanyu003/sttr@latest
    snap: sttr
    yay: sttr-bin
  stubby:
    _bin: stubby
    _github: https://github.com/getdnsapi/stubby
    _desc: DNS privacy enabled stub resolver service based on getdns
    _docs: https://dnsprivacy.org/wiki/display/DP/DNS+Privacy+Daemon+-+Stubby
    _name: Stubby
    _post:brew:darwin: |
      #!/usr/bin/env bash
      bash "$(brew --prefix stubby)/sbin/stubby-setdns-macos.sh"
    _service: stubby
    brew:darwin: stubby
  supervisor:
    _bin: supervisord
    _github: https://github.com/Supervisor/supervisor
    _name: Supervisor
    _service: supervisor
    apt: supervisor
    brew: supervisor
    dnf: supervisor
    pacman: supervisor
    pipx: supervisor
    zypper: supervisor
  surge:
    _bin: surge
    _desc: CLI for the surge.sh CDN
    _github: https://github.com/sintaxi/surge
    _name: surge
    npm: surge
  svgo:
    _bin: svgo
    _desc: SVG Optimizer is a Node.js-based tool for optimizing SVG vector graphics files.
    _github: https://github.com/svg/svgo
    _name: svgo
    brew: svgo
    npm: svgo
  swarm:
    _bin: null
    _desc: Docker Swarm is an orchestration management tool that runs Docker applications. It helps in creating and deploying a cluster of Docker nodes
    _docs: https://docs.docker.com/engine/swarm/
    _github: https://github.com/moby/swarmkit
    _name: Docker Swarm
    ansible: professormanhattan.swarm
  swiftbar:
    _app: SwiftBar.app
    _github: https://github.com/swiftbar/SwiftBar
    _name: SwiftBar
    cask: swiftbar
  swiftformat:
    _bin: swiftformat
    _github: https://github.com/nicklockwood/SwiftFormat
    _name: SwiftFormat
    brew: swiftformat
  swifty:
    _app: Swifty.app
    _bin: swifty
    _github: https://github.com/swiftyapp/swifty
    _name: Swifty
    appimage: swiftyapp/swifty
    cask: swifty
    exe: https://github.com/swiftyapp/swifty/releases/download/v0.6.13/Swifty-Setup-0.6.13.exe
  swimat:
    _app: Swimat.app
    _bin: null
    _desc: Swift code auto-formatter for Xcode
    _docs: https://jintin.github.io/Swimat/
    _github: https://github.com/Jintin/Swimat
    _home: https://jintin.github.io/Swimat/
    _name: Swimat
    cask: swimat
  switchhosts:
    _app: SwitchHosts.app
    _bin: null
    _desc: '[SwitchHosts](https://github.com/oldj/SwitchHosts) is an application for managing the etc hosts file. It allows you to easily switch between different etc hosts file configurations.'
    _docs: https://github.com/oldj/SwitchHosts
    _github: https://github.com/oldj/SwitchHosts
    _home: https://swh.app/
    _name: SwitchHosts
    ansible: professormanhattan.switchhosts
    appimage: oldj/SwitchHosts
    cask: switchhosts
    choco: switchhosts
    github: github.com/oldj/SwitchHosts
    scoop: switchhosts
  sync-ssh-keys:
    _bin: sync-ssh-keys
    _desc: Sync public ssh keys to ~/.ssh/authorized_keys, based on Github/Gitlab organization membership
    _github: https://github.com/samber/sync-ssh-keys
    _name: sync-ssh-keys
    go: github.com/samber/sync-ssh-keys@latest
    yay: sync-ssh-keys-bin
  syncpack:
    _bin: syncpack
    _desc: Consistent dependency versions in large JavaScript Monorepos.
    _docs: https://jamiemason.github.io/syncpack/installation
    _github: https://github.com/JamieMason/syncpack
    _home: https://jamiemason.github.io/syncpack/
    _name: Syncpack
    npm: syncpack
  syncthing:
    _bin: syncthing
    _github: https://github.com/syncthing/syncthing
    _name: Syncthing
    _service: syncthing
    _serviceEnabled: true
    brew: syncthing
    choco: syncthing
    port: syncthing
    scoop: syncthing
  synp:
    _bin: synp
    _desc: Convert yarn.lock to package-lock.json and vice versa
    _github: https://github.com/imsnif/synp
    _name: synp
    npm: synp
  sysbench:
    _bin: sysbench
    _desc: System performance benchmark tool
    _github: https://github.com/akopytov/sysbench
    _name: sysbench
    apk: sysbench
    apt: sysbench
    brew: sysbench
    dnf:fedora: sysbench
    pacman: sysbench
    pkg: sysbench
  sysdig:
    _bin: sysdig
    _desc: '[sysdig](https://www.sysdig.com/) is a simple tool for deep system visibility, exploration and troubleshooting, with native support for containers.'
    _docs: https://docs.sysdig.com/
    _github: https://github.com/draios
    _groups:
      - sysdig
    _home: https://sysdig.com/
    _name: sysdig
    ansible: professormanhattan.sysdig
    brew: sysdig
    pacman:
      - sysdig
      - sysdig-dkms
  sysget:
    _bin: sysget
    _desc: One package manager to rule them all
    _github: https://github.com/emilengler/sysget
    _name: sysget
    _note: TODO
  sysz:
    _bin: sysz
    _deps:
      - fzf
    _desc: An fzf terminal UI for systemctl
    _docs: https://github.com/joehillen/sysz
    _github: https://github.com/joehillen/sysz
    _home: https://github.com/joehillen/sysz
    _name: syz
    bin: https://github.com/joehillen/sysz
    nix-env: nixpkgs.sysz
    pacman: sysz
    script:linux: cd /tmp && git clone https://github.com/joehillen/sysz.git && cd sysz && sudo make install && cd /tmp && rm -rf sysz
  t:
    _bin: t
    _desc: A command-line power tool for Twitter
    _github: https://github.com/sferik/t
    gem: t
  t-rec:
    _bin: t-rec
    _deps:cargo:
      - imagemagick
    _desc: '[t-rec](https://github.com/sassman/t-rec-rs) is a blazingly fast terminal recorder that generates animated GIF images for the web written in Rust'
    _docs: https://crates.io/crates/t-rec
    _github: https://github.com/sassman/t-rec-rs
    _home: https://crates.io/crates/t-rec
    _name: t-rec
    ansible: professormanhattan.trec
    brew: t-rec
    cargo: t-rec
    port: t-rec
    snap: t-rec --classic
    yay: t-rec
  tabby:
    _app: Tabby.app
    _bin: tabby
    _desc: '[Tabby](https://eugeny.github.io/tabby/) is a highly configurable terminal emulator, SSH and serial client for Windows, macOS and Linux.'
    _docs: https://openbase.com/js/tabby/documentation
    _github: https://github.com/Eugeny/tabby
    _home: https://tabby.sh/
    _name: Tabby
    _notes: TODO Update the direct links periodically and keep eye out for Snap / Flatpak
    _post: |
      #!/usr/bin/env bash
      # @file Tabby Plugins
      # @brief This script installs the default Tabby plugins which are defined in `${XDG_CONFIG_HOME:-$HOME/.config}/tabby/plugins/package.json`
      # @description
      #     This script pre-installs a handful of useful Tabby plugins which are defined in `${XDG_CONFIG_HOME:-$HOME/.config}/tabby/plugins/package.json`.
      #     These default plugins can be customized by editting the `package.json` file stored in your Install Doctor fork in the Tabby `plugins/package.json`
      #     file.
      #
      #     ## Default Plugins Configuration
      #
      #     The script will install all the plugins defined in the `package.json` file by navigating to the `~/.config/tabby/plugins` folder
      #     and then run `npm install`. The default configuration will include the following plugins:
      #
      #     ```json
      #     {
      #       ...
      #       // Notable dependencies listed below
      #       "dependencies": {
      #         "tabby-docker": "^0.2.0",
      #         "tabby-save-output": "^3.1.0",
      #         "tabby-search-in-browser": "^0.0.1",
      #         "tabby-workspace-manager": "^0.0.4"
      #       },
      #       ...
      #     }
      #     ```
      #
      #     ## Default Plugin Descriptions
      #
      #     The following chart provides a short description of the default plugins that are pre-installed alongside Tabby:
      #
      #     | NPM Package               | Description                                                         |
      #     |---------------------------|---------------------------------------------------------------------|
      #     | `tabby-docker`            | Allows you to shell directly into Docker containers                 |
      #     | `tabby-save-output`       | This plugin lets you stream console output into a file.             |
      #     | `tabby-search-in-browser` | Allows you to open a internet browser and search for selected text. |
      #     | `tabby-workspace-manager` | Allows you to create multiple workspace profiles.                   |
      #
      #     ## Links
      #
      #     * [Tabby plugins `package.json`](https://github.com/megabyte-labs/install.doctor/tree/master/home/dot_config/tabby/plugins/package.json)
      #     * [Secrets / Environment variables documentation](https://install.doctor/docs/customization/secrets) which details how to store your Tabby configuration in as an encrypted file

      if [ -f "${XDG_CONFIG_HOME:-$HOME/.config}/tabby/plugins/package.json" ]; then
        if [ -d "${XDG_CONFIG_HOME:-$HOME/.config}/tabby/plugins/node_modules" ]; then
          gum log -sl info 'Skipping Tabby plugin installation because it looks like the plugins were already installed since node_modules is present in ~/.config/tabby/plugins'
        else
          gum log -sl info 'Installing Tabby plugins defined in '"${XDG_CONFIG_HOME:-$HOME/.config}/tabby/plugins/package.json"''
          cd "${XDG_CONFIG_HOME:-$HOME/.config}/tabby/plugins"
          npm install --quiet
          gum log -sl info 'Finished installing Tabby plugins'
        fi
      else
        gum log -sl info 'Skipping Tabby plugin installation because is not present'
      fi
    ansible:linux: professormanhattan.tabby
    apt: https://github.com/Eugeny/tabby/releases/download/v1.0.188/tabby-1.0.188-linux-x64.deb
    cask: tabby
    choco: tabby
    dnf: https://github.com/Eugeny/tabby/releases/download/v1.0.188/tabby-1.0.188-linux-x64.rpm
    github: github.com/Eugeny/tabby
    pacman: https://github.com/Eugeny/tabby/releases/download/v1.0.188/tabby-1.0.188-linux-x64.pacman
  tailscale:
    _app: Tailscale.app
    _bin: tailscale
    _desc: '[Tailscale](https://tailscale.com/) lets you easily manage access to private resources, quickly SSH into devices on your network, and work securely from anywhere in the world.'
    _docs: https://tailscale.com/kb/
    _github: https://github.com/tailscale/tailscale
    _home: https://tailscale.com/
    _name: Tailscale
    _post: |
      #!/usr/bin/env bash
      # @file Tailscale
      # @brief Connects the Tailscale client with the Tailscale network
      # @description
      #     This script ensures the `tailscaled` system daemon is installed on macOS. Then, on both macOS and Linux, it connects to the Tailscale
      #     network if the `TAILSCALE_AUTH_KEY` variable is provided.

      ### Install the Tailscale system daemon
      if [ -d /Applications ] && [ -d System ]; then
        ### macOS
        if command -v tailscaled > /dev/null; then
          gum log -sl info 'Ensuring tailscaled system daemon is installed'
          sudo tailscaled install-system-daemon
          gum log -sl info 'tailscaled system daemon is now installed and will load on boot'
        else
          gum log -sl info 'tailscaled does not appear to be installed'
        fi
      fi

      ### Connect to Tailscale network
      if command -v tailscale > /dev/null && [ "$TAILSCALE_AUTH_KEY" != "" ]; then
        gum log -sl info 'Connecting to Tailscale with user-defined authentication key'
        timeout 14 tailscale up --authkey="$TAILSCALE_AUTH_KEY" --accept-routes || EXIT_CODE=$?
        if [ -n "$EXIT_CODE" ]; then
          gum log -sl warn 'tailscale up timed out'
        else
          gum log -sl info 'Connected to Tailscale network'
        fi
      fi
    _service:brew: tailscale
    _service:pacman: tailscaled
    ansible: professormanhattan.tailscale
    brew: tailscale
    cask: tailscale
    choco: tailscale
    go: tailscale.com/cmd/tailscale{,d}@main
    mas: 1475387142
    pacman: tailscale
    port: tailscale
  talksheet:
    _bin: talksheet
    _github: https://github.com/danthelion/talksheet
    _name: Talksheet
    pipx: talksheet
  taplo:
    _bin: taplo
    _desc: A TOML toolkit written in Rust that includes TOML formatting abilities
    _docker: docker run tamasfe/taplo
    _docs: https://taplo.tamasfe.dev/cli/introduction.html
    _github: https://github.com/tamasfe/taplo
    _home: https://taplo.tamasfe.dev/
    _name: Taplo
    cargo: taplo-cli --locked
    npm: '@taplo/cli'
  tart:
    _bin: tart
    _github: https://github.com/cirruslabs/tart
    _todo: Verify that this installs properly (error on arm64 macOS)
    brew:darwin: cirruslabs/cli/gitlab-tart-executor
  task:
    _bin: task
    _desc: A task runner / simpler Make alternative written in Go
    _docs: https://taskfile.dev/usage/
    _github: https://github.com/go-task/task
    _home: https://taskfile.dev
    _name: Task
    brew: go-task
    choco: go-task
    github: github.com/go-task/task
    go: github.com/go-task/task/v3/cmd/task@latest
    scoop: task
  taskwarrior:
    _bin: taskwarrior
    _github: https://github.com/GothenburgBitFactory/taskwarrior
    _name: Task Warrior
    apt: taskwarrior
    brew:
      - task
      - taskd
      - tasksh
    dnf: task
    emerge: task
    nix-env: taskwarrior
    pacman: task
    port: task
    sbopkg: task
    xbps: task
    zypper: taskwarrior
  teamviewer:
    _app: TeamViewer.app
    _bin: teamviewer
    _desc: '[TeamViewer](https://www.teamviewer.com/en-us/) is a proprietary software for remote access to as well as remote control and maintenance of computers and other devices, which was first released in 2005. The functionality has been expanded step by step, most recently for example through the integration of TeamViewer Meeting.'
    _docs: https://www.teamviewer.com/en-us/documents/
    _github: Not open-source
    _home: https://www.teamviewer.com/en-us/
    _name: TeamViewer
    ansible:linux: professormanhattan.teamviewer
    apt: https://download.teamviewer.com/download/linux/teamviewer_amd64.deb
    cask: teamviewer
    choco: teamviewer
    dnf: https://download.teamviewer.com/download/linux/teamviewer.x86_64.rpm
    yay: teamviewer
    zypper: https://download.teamviewer.com/download/linux/teamviewer-suse.x86_64.rpm
  telegram:
    _app: Telegram.app
    _github: https://github.com/telegramdesktop/tdesktop
    _bin: telegram
    _name: Telegram
    cask: telegram
    choco: telegram
    flatpak: org.telegram.desktop
    mas: 747648890
  teleport:
    _bin: teleport
    _desc: '[Teleport](https://goteleport.com/) is a free and open-source tool that allows engineers and security professionals to unify access for SSH servers, Kubernetes clusters, web applications, and databases across all environments. It is an identity-aware, multi-protocol access proxy which understands SSH, HTTPS, Kubernetes API, MySQL and PostgreSQL wire protocols.'
    _github: https://github.com/gravitational/teleport
    _name: Teleport
    ansible: professormanhattan.teleport
    brew: teleport
    pkg: teleport
    yay: teleport-bin
  teller:
    _bin: teller
    _desc: Cloud native secrets management for developers - never leave your command line for secrets
    _github: https://github.com/tellerops/teller
    _name: teller
    brew: spectralops/tap/teller
    github: github.com/tellerops/teller
  temps:
    _bin: null
    _desc: Simple menubar application based on Electron with actual weather information and forecast
    _github: https://github.com/jackd248/temps
    _name: Temps
    github: github.com/jackd248/temps
  terminal-notifier:
    _bin: terminal-notifier
    _github: https://github.com/julienXX/terminal-notifier
    _name: Terminal Notifier
    brew:darwin: terminal-notifier
  terminalizer:
    _bin: terminalizer
    _desc: Record your terminal and generate animated gif images or share a web player
    _github: https://github.com/faressoft/terminalizer
    _home: https://www.terminalizer.com/
    _name: terminalizer
    npm: terminalizer
  termius:
    _bin: termius
    _desc: '[Termius](https://www.termius.com/) is the SSH client that works on Desktop and Mobile.'
    _home: https://www.termius.com/
    _name: Termius
    _github: false
    _post:binary:windows: |
      # TODO
    # TODO
    ansible: professormanhattan.termius
    binary:windows: https://autoupdate.termius.com/windows/Termius.exe
    brew: termius
    pipx: termius
    snap: termius-app
    yay: termius
  terraform:
    _github: https://github.com/hashicorp/terraform
    _deps:
      - tfenv
  terraform-ls:
    _bin: terraform-ls
    _desc: '[terraform-ls](https://github.com/tfutils/tfenv) is the official Terraform language server maintained by HashiCorp that provides IDE features to any LSP-compatible editor.'
    _docs: https://github.com/hashicorp/terraform-ls
    _github: https://github.com/hashicorp/terraform-ls
    _home: https://github.com/hashicorp/terraform-ls
    _name: terraform-ls
    _service: false
    brew: terraform-ls
  textql:
    _bin: textql
    _desc: CLI that allows you to execute SQL against structured text like CSV or TSV
    _docs: https://github.com/dinedal/textql
    _github: https://github.com/dinedal/textql
    _home: https://github.com/dinedal/textql
    _name: TextQL
    brew: textql
    go: github.com/dinedal/textql@master
    yay: textql-git
  tfenv:
    _bin: tfenv
    _desc: '[tfenv](https://github.com/tfutils/tfenv) is a Terraform version manager inspired by [rbenv](https://github.com/rbenv/rbenv). It supports macOS, Linux, and Windows.'
    _docs: https://github.com/tfutils/tfenv#usage
    _github: https://github.com/tfutils/tfenv
    _home: https://github.com/tfutils/tfenv
    _name: tfenv
    _post: |
      #!/usr/bin/env bash
      if command -v tfenv > /dev/null; then
        tfenv use latest
      fi
    ansible:darwin: professormanhattan.tfenv
    ansible:linux: professormanhattan.tfenv
    brew: tfenv
    port: tfenv
    yay: tfenv
  tflint:
    _bin: tflint
    _desc: '[tflint](https://github.com/terraform-linters/tflint) is a framework that can help in finding possible errors for major cloud providers, warn about deprecated syntax and unused declarations and enforce best practices. This role installs tflint on nearly any platform.'
    _github: https://github.com/terraform-linters/tflint
    _name: tflint
    ansible: professormanhattan.tflint
    brew: tflint
    choco: tflint
    github: github.com/terraform-linters/tflint
  tfsec:
    _bin: tfsec
    _github: https://github.com/aquasecurity/tfsec
    _name: Aqua TFSec
    brew: tfsec
    choco: tfsec
    scoop: tfsec
  tgpt:
    _bin: tgpt
    _github: https://github.com/aandrew-me/tgpt
    _name: Terminal GPT
    go: github.com/aandrew-me/tgpt/v2@latest
    scoop: https://raw.githubusercontent.com/aandrew-me/tgpt/main/tgpt.json
    yay: tgpt-bin
  thefuck:
    _bin: fuck
    _desc: Magnificent CLI tool that corrects your previous console command whenever something fails due to misspelling.
    _docs: https://github.com/nvbn/thefuck
    _github: https://github.com/nvbn/thefuck
    _home: https://github.com/nvbn/thefuck
    _name: The Fuck
    brew: thefuck
    crew: thefuck
    pacman: thefuck
    pipx: thefuck
    pkg-freebsd: thefuck
  thunderbird:
    _app: Thunderbird.app
    _bin: thunderbird
    _github: false
    cask: thunderbird
    choco: thunderbird
    flatpak: org.mozilla.Thunderbird
  tig:
    _bin: tig
    _desc: Tig is an ncurses-based text-mode interface for git. It functions mainly as a Git repository browser, but can also assist in staging changes for commit at chunk level and act as a pager for output from various Git commands
    _github: https://github.com/jonas/tig
    _home: https://jonas.github.io/tig/
    _name: tig
    brew: tig
    nix: tig
    pkg: tig
  tigervnc:
    _bin: tigervncpasswd
    _github: https://github.com/TigerVNC/tigervnc
    _name: TigerVNC Server
    _ports:
      - port: 5900-5904
        proto: tcp
    apt: tigervnc-standalone-server
    dnf: tigervnc-server
    pacman: tigervnc
    zypper: tigervnc
  tilt:
    _bin: tilt
    _desc: Define your dev environment as code. For microservice apps on Kubernetes
    _docs: https://docs.tilt.dev/
    _github: https://github.com/tilt-dev/tilt
    _home: https://tilt.dev/
    _name: tilt
    brew: tilt
    github: github.com/tilt-dev/tilt
    yay: tilt-bin
  timeshift:
    _bin: timeshift
    _desc: '[Timeshift](https://github.com/teejee2008/timeshift) is a free and open source system restore tool for Linux. Timeshift for Linux is an application that provides functionality similar to the System Restore feature in Windows and the Time Machine tool in Mac OS. Timeshift protects your system by taking incremental snapshots of the file system at regular intervals. These snapshots can be restored at a later date to undo all changes to the system.'
    _github: https://github.com/teejee2008/timeshift
    _home: https://teejeetech.com/timeshift/
    _name: Timeshift
    _post: |
      #!/usr/bin/env bash
      # @file Timeshift Configuration
      # @brief Updates the Timeshift system configuration with the Timeshift configuration stored in the `home/dot_config/timeshift/timeshift.json` location.
      # @description
      #     This script applies a Timeshift configuration that defines how Timeshift should maintain system backups.
      if command -v timeshift > /dev/null; then
        gum log -sl info 'Ensuring /etc/timeshift is a directory'
        sudo mkdir -p /etc/timeshift
        TIMESHIFT_CONFIG="${XDG_CONFIG_HOME:-$HOME/.config}/timeshift/timeshift.json"
        gum log -sl info "Copying $TIMESHIFT_CONFIG to /etc/timeshift/timeshift.json"
        sudo cp -f "$TIMESHIFT_CONFIG" /etc/timeshift/timeshift.json
      else
        gum log -sl info 'The timeshift executable is not available'
      fi
    # Unavailable on CentOS Stream 9
    # ansible:linux: professormanhattan.timeshift
    apt: timeshift
    dnf:fedora: timeshift
    yay: timeshift
  timewarrior:
    _bin: timew
    _github: https://github.com/GothenburgBitFactory/timewarrior
    _name: Time Warrior
    apt: timewarrior
    brew: timewarrior
    dnf: timew
    emerge: app-misc/timew
    nix-env: timewarrior
    pacman: timew
  tinypng:
    _bin: tinypng
    _desc: Handy command line tool for shrinking PNG images using the TinyPNG API
    _github: https://github.com/websperts/tinypng-cli
    _name: tinypng
    _service: null
    npm: tinypng-cli
  tldr:
    _bin: tldr
    _desc: Simplified and community-driven man pages
    _github: https://github.com/tldr-pages/tldr
    _home: https://tldr.sh/
    _name: tldr
    brew: tldr
    npm: tldr
  tmate:
    _bin: tmate
    _github: https://github.com/tmate-io/tmate
    _name: tmate
    apt: tmate
    brew: tmate
    dnf: tmate
    emerge: app-misc/tmate
    opkg: tmate
    pacman: tmate
    pkg-freebsd: tmate
    pkg_add: tmate
    zypper: tmate
  tmux:
    _bin: tmux
    _desc: '[Tmux](https://github.com/tmux/tmux/wiki) is a terminal multiplexer. It enables a number of terminals to be created, accessed, and controlled from a single screen. Tmux may be detached from a screen and continue running in the background, then later reattached.'
    _docs: https://github.com/tmux/tmux/wiki
    _github: https://github.com/tmux/tmux
    _name: tmux
    ansible: professormanhattan.tmux
    apt: tmux
    brew:
      - awk
      - gnu-sed
      - perl
      - tmux
  tmuxinator:
    _bin: tmuxinator
    _desc: Manage complex tmux sessions easily
    _docs: https://github.com/tmuxinator/tmuxinator
    _github: https://github.com/tmuxinator/tmuxinator
    _home: https://github.com/tmuxinator/tmuxinator
    _name: Tmuxinator
    brew: tmuxinator
  tokei:
    _bin: tokei
    _desc: Tokei is a program that displays statistics about the code
    _github: https://github.com/XAMPPRocky/tokei
    _name: tokei
    apk: tokei
    brew: tokei
    cargo: tokei
    dnf:fedora: tokei
    github: github.com/XAMPPRocky/tokei
    pacman: tokei
    pkg: tokei
    scoop: tokei
  tomcat:
    _bin: catalina
    _github: https://github.com/apache/tomcat
    _name: Tomcat
    _post:darwin: |
      #!/usr/bin/env bash
      sed 's/8080/8180/g' /usr/local/etc/tomcat/server.xml > /usr/local/etc/tomcat/server.xml
    _post:linux: |
      #!/usr/bin/env bash
      sed 's/8080/8180/g' /usr/local/etc/tomcat/server.xml > /usr/local/etc/tomcat/server.xml
    _service: tomcat
    apt: tomcat
    brew: tomcat
    choco: tomcat
    dnf: tomcat
    pacman: tomcat
  toml-sort:
    _bin: toml-sort
    _desc: A Python module that auto-formats TOML files
    _docs: https://pypi.org/project/toml-sort/
    _github: https://github.com/pappasam/toml-sort
    _home: https://pypi.org/project/toml-sort/
    _name: TOML Sort
    pipx: toml-sort
  tor:
    _bin: tor
    _desc: "[Tor](https://www.torproject.org/) is free and open-source software for enabling anonymous communication by directing Internet traffic through a free, worldwide, volunteer overlay network consisting of more than seven thousand relays in order to conceal a user's location and usage from anyone conducting network surveillance or traffic analysis. On Linux you can combine Tor with [Privoxy](https://www.privoxy.org/) which allows you to tunnel all of your traffic through the Tor network."
    _docs: https://tb-manual.torproject.org/
    _github: https://github.com/TheTorProject
    _home: https://www.torproject.org/
    _name: TOR
    _post: |
      #!/usr/bin/env bash
      # @file Tor Configuration
      # @brief This script applies the Tor configuration stored at `${XDG_CONFIG_HOME:-HOME/.config}/tor/torrc` to the system and then restarts Tor
      # @description
      #     Tor is a network that uses onion routing, originally published by the US Navy. It is leveraged by privacy enthusiasts
      #     and other characters that deal with sensitive material, like journalists and people buying drugs on the internet.
      #     This script:
      #
      #     1. Determines the system configuration file location
      #     2. Applies the configuration stored at `${XDG_CONFIG_HOME:-HOME/.config}/tor/torrc`
      #     3. Enables and restarts the Tor service with the new configuration
      #
      #     ## Links
      #
      #     * [Tor configuration](https://github.com/megabyte-labs/install.doctor/tree/master/home/dot_config/tor/torrc)

      ### Determine the Tor configuration location by checking whether the system is macOS or Linux
      if [ -d /Applications ] && [ -d /System ]; then
        ### macOS
        TORRC_CONFIG_DIR=/usr/local/etc/tor
      else
        ### Linux
        TORRC_CONFIG_DIR=/etc/tor
      fi
      TORRC_CONFIG="$TORRC_CONFIG_DIR/torrc"

      ### Apply the configuration if the `torrc` binary is available in the `PATH`
      if command -v toron > /dev/null; then
        if [ -d  "$TORRC_CONFIG_DIR" ]; then
          ### Copy the configuration from `${XDG_CONFIG_HOME:-$HOME/.config}/tor/torrc` to the system configuration file location
          sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/tor/torrc" "$TORRC_CONFIG"
          sudo chmod 600 "$TORRC_CONFIG"
          ### Enable and restart the Tor service
          if [ -d /Applications ] && [ -d /System ]; then
            ### macOS
            brew services restart tor
          else
            if [[ ! "$(test -d /proc && grep Microsoft /proc/version > /dev/null)" ]]; then
              ### Linux
              sudo systemctl enable tor
              sudo systemctl restart tor
            else
              gum log -sl info 'Environment is WSL so the Tor systemd service will not be enabled / restarted'
            fi
          fi
        else
          gum log -sl warn 'The '"$TORRC_CONFIG_DIR"' directory is missing'
        fi
      else
        gum log -sl warn 'toron is missing from the PATH'
      fi
    _restricted: true
    _service: tor
    _serviceEnabled: true
    ansible:linux: professormanhattan.tor
    apt: tor
    brew: tor
    dnf: tor
    pacman: tor
    port: tor
  tor-browser:
    _app: Tor Browser.app
    _bin: tor-browser
    _desc: Tor, short for The Onion Router, is free and open-source software for enabling anonymous communication. It directs Internet traffic through a free, worldwide, volunteer overlay network, consisting of more than seven thousand relays, to conceal a user's location and usage.
    _docs: https://www.torproject.org/docs/documentation.html.en
    _env:
      TOR_BROWSER_APPDATA:
        cask: "$HOME/Library/Application Support/TorBrowser-Data/Tor"
        choco: "TODO"
        flatpak: "TODO"
    _github: https://github.com/TheTorProject/gettorbrowser
    _home: https://www.torproject.org/
    _name: Tor Browser
    _restricted: true
    cask: tor-browser
    choco: tor-browser
    flatpak: com.github.micahflee.torbrowser-launcher
  tradingview:
    _app: TradingView.app
    _bin: tradingview
    _github: https://github.com/tradingview/lightweight-charts
    _name: Trading View
    cask: tradingview
    msix: https://tvd-packages.tradingview.com/stable/latest/win32/TradingView.msix
    snap: tradingview
  translate:
    _bin: trans
    _desc: '[Translate Shell](https://github.com/soimort/translate-shell) (formerly Google Translate CLI) is a command-line translator powered by Google Translate (default), Bing Translator, Yandex.Translate, and Apertium. It gives you easy access to these translation engines in your terminal. It is feature-rich and, although there is some overlap, it complements [Normit](https://gitlab.com/megabyte-labs/ansible-roles/normit) well.'
    _github: https://github.com/soimort/translate-shell
    _name: Translate Shell
    ansible:darwin: professormanhattan.translate
    ansible:linux: professormanhattan.translate
    apt:ubuntu: translate-shell
    brew: translate-shell
    dnf: translate-shell
    pacman: translate-shell
  trayscale:
    _bin: trayscale
    _desc: Unofficial Menu Bar for Tailscale on Linux
    _github: https://github.com/DeedleFake/trayscale
    _name: Trayscale
    flatpak: dev.deedles.Trayscale
  tree:
    _bin: tree
    _desc: '[tree-cli](https://github.com/MrRaindrop/tree-cli) is a recursive directory listing program that produces a depth indented listing of files. With no arguments, tree lists the files in the current directory. When directory arguments are given, tree lists all the files and/or directories found in the given directories each in turn. Upon completion of listing all files/directories found, tree returns the total number of files and/or directories listed.'
    _name: tree-cli
    _github: https://github.com/MrRaindrop/tree-cli
    ansible: professormanhattan.tree
    apt: tree
    brew: tree
    choco: tree
    dnf: tree
    pacman: tree
  tree-sitter:
    _bin: tree-sitter
    _desc: CLI tool for creating and testing tree-sitter parsers
    _github: https://github.com/tree-sitter/tree-sitter-cli
    _name: tree-sitter-cli
    cargo: tree-sitter-cli
  trellis:
    _bin: trellis
    _desc: A CLI to manage Trellis projects
    _github: https://github.com/roots/trellis-cli
    _home: https://roots.io/trellis/
    _name: trellis
    brew: roots/tap/trellis-cli
  trivy:
    _bin: trivy
    _desc: Scanner for vulnerabilities in container images, file systems, and Git repositories, as well as for configuration issues
    _github: https://github.com/aquasecurity/trivy
    _name: trivy
    brew: trivy
    github: github.com/aquasecurity/trivy
    yay: trivy-bin
  trufflehog:
    _bin: trufflehog
    _desc: Find credentials all over the place
    _github: https://github.com/trufflesecurity/trufflehog
    _home: https://trufflesecurity.com/trufflehog/
    _name: trufflehog
    brew: trufflesecurity/trufflehog/trufflehog
  trunk:
    _bin: trunk
    _desc: An all-in-one linter / code auto-fixer augmented by a freemium web service
    _docs: https://docs.trunk.io/
    _github: false
    _home: https://trunk.io/
    cask: trunk-io
    npm: '@trunkio/launcher'
    script: curl https://get.trunk.io -fsSL | bash -s -- -y
  ts2c:
    _bin: ts2c
    _desc: Convert Javascript/TypeScript to C
    _github: https://github.com/andrei-markeev/ts2c
    _name: ts2c
    npm: ts2c
  tunnelblick:
    _app: Tunnelblick.app
    _desc: Tunnelblick is a macOS menubar tray application that helps you control OpenVPN.
    _docs: https://tunnelblick.net/documents.html
    _github: https://github.com/Tunnelblick/Tunnelblick
    _home: https://tunnelblick.net/
    _name: Tunnelblick
    cask: tunnelblick
  turbo:
    _bin: turbo
    _github: https://github.com/vercel/turbo
    _name: Turbo
    npm: turbo
  typescript:
    _bin: tsc
    _desc: TypeScript is a strongly typed programming language that builds on JavaScript, giving you better tooling at any scale.
    _docs: https://www.typescriptlang.org/docs/
    _github: https://github.com/microsoft/TypeScript
    _home: https://www.typescriptlang.org/
    _name: TypeScript
    brew: typescript
    npm: tsc
  typescript-to-lua:
    _bin: tstl
    _github: https://github.com/TypeScriptToLua/TypeScriptToLua
    _name: TypeScript to Lua Converter
    npm: typescript-to-lua
  ugm:
    _bin: ugm
    _desc: A terminal based UNIX user and group browser
    _docs: https://github.com/ariasmn/ugm
    _github: https://github.com/ariasmn/ugm
    _home: https://github.com/ariasmn/ugm
    _name: ugm
    go: github.com/ariasmn/ugm@latest
  ulauncher:
    _bin: ulauncher
    _desc: '[Ulauncher](https://ulauncher.io/) is a software packaging and deployment system developed by Canonical for operating systems that use the Linux kernel. The packages, called ulaunchers, and the tool for using them, ulauncher, work across a range of Linux distributions and allow upstream software developers to distribute their applications directly to users. Ulaunchers are self-contained applications running in a sandbox with mediated access to the host system.'
    _docs: https://docs.ulauncher.io/
    _github: https://github.com/Ulauncher/Ulauncher/
    _home: https://ulauncher.io/
    _name: Ulauncher
    ansible: professormanhattan.ulauncher
  ultra:
    _bin: ultra
    _desc: Ultra fast monorepo script runner and build tool
    _docs: https://github.com/folke/ultra-runner
    _github: https://github.com/folke/ultra-runner
    _home: https://www.npmjs.com/package/ultra-runner
    _name: Ultra Task Runner
    npm: ultra-runner
  unbuffer:
    _bin: unbuffer
    _name: Unbuffer
    _github: false
    apt: unbuffer
    # expect package on Homebrew contains unbuffer
    brew: expect
    dnf: unbuffer
    pacman: unbuffer
  unikraft:
    _bin: kraft
    _github: https://github.com/unikraft/unikraft
    _name: Unikraft
    brew: unikraft/cli/kraftkit
    script: curl --proto '=https' --tlsv1.2 -sSf https://get.kraftkit.sh | sh
  unison:
    _bin: unison
    _github: https://github.com/bcpierce00/unison
    _name: Unison
    brew: unison
    choco: unison
  up:
    _bin: up
    _desc: up, which is short for [Ultimate Plumber](https://github.com/akavel/up), is a tool for writing Linux pipes in a terminal-based UI interactively, with an instant live preview of command results.
    _github: https://github.com/akavel/up
    _name: Ultimate Plumber (up)
    ansible: professormanhattan.up
    brew: up
    github: github.com/akavel/up
    pkg: up
    yay: up
  upscayl:
    _bin: upscayl
    _github: https://github.com/upscayl/upscayl
    _name: Upscayl
    _todo: Recheck for Homebrew Cask
    appimage: Upscayl
    choco: upscayl
    flatpak: org.upscayl.Upscayl
    snap: upscayl
  upt:
    _bin: upt
    _desc: Universal package-management tool for Windows, macOS and Linux
    _github: https://github.com/sigoden/upt
    _name: upt
    cargo: upt
    'cargo:': upt
  upx:
    _bin: upx
    _desc: '[UPX](https://upx.github.io/) is an advanced executable file compressor. UPX will typically reduce the file size of programs and DLLs by around 50%-70%, thus reducing disk space, network load times, download times and other distribution and storage costs. It supports compressing a wide variety of binary-like files. Surprisingly, it even compresses executables better than WinZip. Best of all, it is free and open source.'
    _docs: https://github.com/upx/upx
    _github: https://github.com/upx/upx
    _home: https://upx.github.io/
    _name: UPX
    ansible: professormanhattan.upx
    apt: upx
    brew: upx
    choco: upx
    dnf:fedora: upx
    pacman: upx
    port: upx
    scoop: upx
  usql:
    _bin: usql
    _github: https://github.com/xo/usql
    _name: Universal SQL CLI
    brew: xo/xo/usql
    choco: usql
    go: github.com/xo/usql@latest
    scoop: usql
  util-linux:
    _github: false
    _bin:
      - cal
      - chmem
      - hexdump
    apt: util-linux
    dnf: util-linux
    pacman: util-linux
  utm:
    _app: UTM.app
    _bin: utm
    _github: https://github.com/utmapp/UTM
    _name: UTM
    cask: utm
  vagrant:
    _bin: vagrant
    _desc: '[Vagrant](https://www.vagrantup.com/) is an open-source software product for building and maintaining portable virtual software development environments (e.g., for VirtualBox, KVM, Hyper-V, Docker containers, VMware, and AWS).'
    _docs: https://www.vagrantup.com/docs
    _github: https://github.com/hashicorp/vagrant
    _home: https://www.vagrantup.com/
    _name: Vagrant
    ansible: professormanhattan.vagrant
    apt: vagrant
    brew: hashicorp/tap/vagrant
    cask: vagrant
    choco: vagrant
    dnf:fedora: vagrant
    pacman: vagrant
    scoop: vagrant
  vagrant-manager:
    _app: Vagrant Manager.app
    _bin: null
    _desc: Status bar menu application that allows you to manage Vagrant available on macOS and Windows
    _docs: https://github.com/lanayotech/vagrant-manager
    _github: https://github.com/lanayotech/vagrant-manager
    _home: https://www.vagrantmanager.com/
    _name: Vagrant Manager
    cask: vagrant-manager
    choco: vagrant-manager
  vagrant-vmware-utility:
    _bin: false
    _name: Vagrant VMWare Utility
    _github: https://github.com/hashicorp/vagrant-vmware-desktop
    _post:cask: |
      #!/usr/bin/env bash
      sudo ln -s /opt/vagrant-vmware-desktop/bin/vagrant-vmware-utility /usr/local/bin/vagrant-vmware-utility
    _when:cask: '! test -f /opt/vagrant-vmware-desktop/bin/vagrant-vmware-utility'
    ansible: professormanhattan.vmware
    cask: vagrant-vmware-utility
    choco: vagrant-vmware-utility
    script: rm -rf /tmp/vagrant-vmware-utility_1.0.21_linux_amd64.zip && curl https://releases.hashicorp.com/vagrant-vmware-utility/1.0.21/vagrant-vmware-utility_1.0.21_linux_amd64.zip -o /tmp/vagrant-vmware-utility_1.0.21_linux_amd64.zip && unzip /tmp/vagrant-vmware-utility_1.0.21_linux_amd64.zip && sudo mv -f /tmp/vagrant-vmware-utility /usr/local/bin/vagrant-vmware-utility && sudo chmod +x /usr/local/bin/vagrant-vmware-utility
  vale:
    _bin: vale
    _github: https://github.com/errata-ai/vale
    _name: Vale
    brew: vale
    choco: vale
    go: github.com/errata-ai/vale@latest
  vault:
    _bin: vault
    _desc: '[HashiCorp Vault](https://www.vaultproject.io/) secures, stores, and tightly controls access to tokens, passwords, certificates, API keys, and other secrets. Basically, it is a tool for managing any data that you want to tightly control access to. It also has some advanced integrations with systems like AWS.'
    _docs: https://developer.hashicorp.com/vault/docs
    _github: https://github.com/hashicorp/vault
    _home: https://vaultproject.io/
    _name: HashiCorp Vault
    _service: vault
    _service:brew: hashicorp/tap/vault
    ansible: professormanhattan.vault
    brew: hashicorp/tap/vault
    yay: vault-cli
  vdirsyncer:
    _bin: vdirsyncer
    _github: https://github.com/pimutils/vdirsyncer
    _name: vdirsyncer
    _todo: echo "TODO - Implement the following command after automating the process of setting up contact groups / calendars to sync" && echo "vdirsyncer discover contacts" && echo "vdirsyncer sync contacts" && echo "TODO - Add to cron" && echo "*/30 * * * * /usr/local/bin/vdirsyncer sync > /dev/null" && echo "This should be in _post instead of _pre - it is here for testing purposes"
    pipx: vdirsyncer
  vector:
    _bin: vector
    _desc: Vector is a lightweight, ultra-fast tool for building observability pipelines that lets you collect, transform, and route all your logs and metrics with one simple tool.
    _docs: https://vector.dev/docs
    _github: https://github.com/vectordotdev/vector
    _home: https://vector.dev/
    _name: Vector
    _service: vector
    # Unlisted on their website and formulae didn't seem to be registering the bin in the PATH
    brew: vectordotdev/brew/vector
    helm: https://helm.vector.dev
    pacman: vector
    script:darwin: curl --proto '=https' --tlsv1.2 -sSf https://sh.vector.dev | bash
    script:linux: curl --proto '=https' --tlsv1.2 -sSf https://sh.vector.dev | bash
  velero:
    _bin: velero
    _desc: '[Velero](https://velero.io/) gives you tools to back up and restore your Kubernetes cluster resources and persistent volumes'
    _docs: https://velero.io/docs/
    _github: https://github.com/vmware-tanzu/velero
    _home: https://velero.io/
    _name: velero
    brew: velero
    choco: velero
    github: github.com/vmware-tanzu/velero
    yay: velero-bin
  vermin:
    _bin: vermin
    _github: https://github.com/mhewedy/vermin
    _name: Vermin
    go: github.com/mhewedy/vermin@latest
  vhs:
    _bin: vhs
    _desc: Your CLI home video recorder
    _docs: https://github.com/charmbracelet/vhs
    _github: https://github.com/charmbracelet/vhs
    _home: https://charm.sh/
    _name: VHS
    brew: vhs
    go: github.com/charmbracelet/vhs@latest
    nix-env: nixpkgs.vhs
    pacman: vhs
    port: vhs
    scoop: vhs
    xbps: vhs
  vidmerger:
    _bin: vidmerger
    _deps:
      - ffmpeg
    _desc: Merge video & audio files via CLI
    _docs: https://github.com/tgotwig/vidmerger
    _github: https://github.com/tgotwig/vidmerger
    _home: https://github.com/tgotwig/vidmerger
    _name: VidMerger
    brew: tgotwig/vidmerger/vidmerger
    choco: vidmerger
  vim:
    _bin: vim
    _desc: '[Vim](https://www.vim.org/) is a greatly improved version of the good old UNIX editor Vi'
    _docs: https://www.vim.org/docs.php
    _github: https://github.com/vim/vim
    _home: https://www.vim.org/
    _name: VIM
    _post: |
      #!/usr/bin/env bash
      gum log -sl info "Installing VIM plugins" && vim +'PlugInstall --sync' +qall
      # @description This script installs the extensions defined in `${XDG_CONFIG_HOME:-$HOME/.config}/coc/extensions/package.json`
      #     which should correlate to the Coc extensions defined in `${XDG_CONFIG_HOME:-$HOME/.config}/vim/vimrc`.
      installCocExtensions() {
        if [ -f "${XDG_CONFIG_HOME:-$HOME/.config}/coc/extensions/package.json" ]; then
          gum log -sl info "Running npm i --no-package-lock in ${XDG_CONFIG_HOME:-$HOME/.config}/coc/extensions"
          cd "${XDG_CONFIG_HOME:-$HOME/.config}/coc/extensions" && npm i --no-package-lock
          gum log -sl info "Running vim +CocUpdateSync +qall" && vim +CocUpdateSync +qall
        else
          gum log -sl info "Skipping Coc extension installation because ${XDG_CONFIG_HOME:-$HOME/.config}/coc/extensions/package.json is missing"
        fi
      }
      gum log -sl info "Updating VIM coc extensions" && installCocExtensions
    ansible: professormanhattan.vim
    apt: vim
    brew: vim
    choco: vim
    dnf: vim
    pacman: vim
    port: vim
    scoop: vim
  virtualbox:
    _app: VirtualBox.app
    _bin: null
    _desc: '[VirtualBox](https://www.virtualbox.org/) is a free and open-source hosted hypervisor for x86 virtualization, developed by Oracle Corporation. Created by Innotek, it was acquired by Sun Microsystems in 2008, which was in turn acquired by Oracle in 2010. VirtualBox may be installed on Windows, macOS, Linux, Solaris and OpenSolaris.'
    _docs: https://www.virtualbox.org/wiki/Documentation
    _github: https://github.com/mirror/vbox
    _home: https://www.virtualbox.org/
    _name: VirtualBox
    _post: |
      #!/usr/bin/env bash
      # @file VirtualBox Extension Pack
      # @brief Ensures the VirtualBox extension pack is installed.
      # @description
      #     This script ensures the VirtualBox extension pack that corresponds with VirtualBox's version is properly installed.

      ### Run logic if VirtualBox is installed
      if command -v VirtualBox > /dev/null; then
        ### Install VirtualBox extension pack if it is not installed already
        if [ ! -d /usr/lib/virtualbox/ExtensionPacks/Oracle_VM_VirtualBox_Extension_Pack ] && [ ! -d /Applications/VirtualBox.app/Contents/MacOS/ExtensionPacks/Oracle_VM_VirtualBox_Extension_Pack ]; then
          gum log -sl info 'Acquiring VirtualBox version information'
          VBOX_VERSION="$(VirtualBox --help | head -n 1 | cut -f 6 -d' ')"
          VBOX_VERSION="${VBOX_VERSION//v}"

          ### Set up folders
          # Check for macOS installation before creating ExtensionPacks folder on Linux machines
          if [ ! -d /Applications/VirtualBox.app ]; then
            sudo mkdir -p /usr/lib/virtualbox/ExtensionPacks
          fi
          mkdir -p /tmp/vbox
          cd /tmp/vbox

          ### Download extension pack
          gum log -sl info 'Downloading VirtualBox extension pack'
          curl -sSL https://download.virtualbox.org/virtualbox/$VBOX_VERSION/Oracle_VM_VirtualBox_Extension_Pack-$VBOX_VERSION.vbox-extpack -o /tmp/vbox/Oracle_VM_VirtualBox_Extension_Pack-$VBOX_VERSION.vbox-extpack || gum log -sl error 'Failed to download the VirtualBox extension pack so the extension pack installation will be skipped'

          ### Install extension pack
          if [ -f /tmp/vbox/Oracle_VM_VirtualBox_Extension_Pack-$VBOX_VERSION.vbox-extpack ]; then
            gum log -sl info 'Installing VirtualBox extension pack'
            echo 'y' | sudo VBoxManage extpack install --replace /tmp/vbox/Oracle_VM_VirtualBox_Extension_Pack-$VBOX_VERSION.vbox-extpack
            gum log -sl info 'Successfully installed VirtualBox extension pack'
          fi
        else
          gum log -sl info 'VirtualBox Extension pack is already installed'
        fi
      else
        gum log -sl info 'VirtualBox is not installed so VirtualBox Extension pack will not be installed'
      fi
    _post:choco: |
      # TODO
      # TODO
      # TODO
      # TODO
      cd C:/Program Files/Oracle/VirtualBox/
      # TODOFigure out how to get version without Ansible here and download / install the extpack
      wget https://download.virtualbox.org/virtualbox/' + vbox_version + '/Oracle_VM_VirtualBox_Extension_Pack-' + vbox_version + '.vbox-extpack'
      echo y | VBoxManage extpack install --replace ./Oracle_VM_VirtualBox_Extension_Pack.vbox-extpack
    _pre:dnf: |
      #!/usr/bin/env bash
      . /etc/os-release
      cat <<EOF | sudo tee /etc/yum.repos.d/virtualbox.repo
      [virtualbox]
      name=Fedora $releasever - $basearch - VirtualBox
      baseurl=http://download.virtualbox.org/virtualbox/rpm/$ID/$VERSION_ID/\$basearch
      enabled=1
      gpgcheck=1
      repo_gpgcheck=1
      gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc
      EOF
      sudo dnf -y install @development-tools
      sudo dnf -y install kernel-headers kernel-devel dkms elfutils-libelf-devel qt5-qtx11extras
    _todo: Add support for arm64 - currently brew install --cask virtualbox requires intel 64 bit
    ansible: professormanhattan.virtualbox
    apt: virtualbox
    cask: virtualbox
    choco: virtualbox
    dnf: virtualbox
    pacman: virtualbox
  virtualenv:
    _bin: virtualenv
    _desc: Tool for creating isolated virtual python environments
    _docs: https://virtualenv.pypa.io/en/latest/
    _github: https://github.com/pypa/virtualenv
    _name: virtualenv
    brew: virtualenv
    pipx: virtualenv
  visual-studio:
    # TODO - Figure out why we included this _post script
    # _post:cask: 'APP_LINK="$(find "${HOMEBREW_PREFIX:-/opt/homebrew}/Caskroom/visual-studio" -mindepth 2 -maxdepth 2 -name "*.app*" | head -n1)" && open "$APP_LINK"'
    _app: Visual Studio.app
    _bin: null
    _desc: '[Microsoft Visual Studio](https://visualstudio.microsoft.com/) is an integrated development environment from Microsoft. It is used to develop computer programs, as well as websites, web apps, web services and mobile apps.'
    _docs: https://docs.microsoft.com/en-us/visualstudio/windows/?view=vs-2022
    _github: Not open-source
    _home: https://visualstudio.microsoft.com/
    _name: Visual Studio
    ansible:windows: professormanhattan.visualstudio
    cask: visual-studio
    choco: visualstudio2022community
  vlc:
    _app: VLC.app
    _bin: vlc
    _desc: '[VLC](https://www.videolan.org/) media player is a free and open-source, portable, cross-platform media player software, and streaming media server developed by the VideoLAN project. VLC is available for desktop operating systems, and mobile platforms, such as Android, iOS, iPadOS, Tizen, Windows 10 Mobile, and Windows Phone.'
    _docs: https://www.videolan.org/doc/
    _github: https://github.com/videolan/vlc
    _home: https://www.videolan.org/vlc/
    _name: VLC Media Player
    ansible: professormanhattan.vlc
    apt: vlc
    cask: vlc
    choco: vlc
    flatpak: org.videolan.VLC
    snap: vlc
  vmware:
    _app: VMware Fusion.app
    _bin: vmware
    _bin:cask: vmware-id
    _github: false
    _desc: '[VMWare Workstation](https://www.vmware.com/products/workstation-pro.html) (or [VMWare Fusion](https://www.vmware.com/products/fusion.html) in the case of macOS) is a hosted hypervisor that runs on x64 versions of Windows and Linux operating systems. It enables users to set up virtual machines on a single physical machine and use them simultaneously along with the host machine. It is similar to [VirtualBox](https://gitlab.com/megabyte-labs/ansible-roles/virtualbox).'
    _docs: https://docs.vmware.com/
    _home: https://www.vmware.com/
    _name: VMWare
    _post: |
      #!/usr/bin/env bash
      # @file VMWare Configuration
      # @brief Installs VMWare Workstation Pro on Linux devices, applies a "publicly-retrieved" license key (see disclaimer), and automatically accepts the terms and conditions
      # @description
      #     This script ensures the user included `vmware` in their software installation list. It then checks for presence of the `vmware` utility. If it is not present, then the script:
      #
      #     1. Downloads the [VMWare Workstation Pro](https://www.vmware.com/content/vmware/vmware-published-sites/us/products/workstation-pro.html.html) Linux installer
      #     2. Installs VMWare Workstation Pro
      #     3. Passes options to the installation script that automatically apply a publicly retrived license key and accept the Terms & Conditions
      #
      #     This script first checks if `vagrant`, `vmware`, and `vagrant-vmware-utility` are available in the `PATH`. If they are present, then the script
      #     configures the [`vagrant-vmware-utility`](https://developer.hashicorp.com/vagrant/docs/providers/vmware/vagrant-vmware-utility) by generating the required security certificates and enabling the service.
      #     This system package enables the capability of controlling both VMWare Workstation and VMWare Fusion with Vagrant.
      #
      #     Since this script runs only when `vagrant`, `vmware`, and `vagrant-vmware-utility` are in the `PATH`, this means that it will run
      #     when you use an installation template that includes all three pieces of software in the software list defined in
      #     `home/.chezmoidata.yaml`.
      #
      #     **DISCLAIMER:** If you plan on using VMWare Workstation for anything but evaluation purposes, then we highly suggest purchasing a copy
      #     of VMWare Workstation. The "publicly-retrived" license keys are scattered throughout GitHub and we are not exactly
      #     sure why they work. You can pass in your own key by utilizing the `VMWARE_WORKSTATION_LICENSE_KEY` environment variable. More details on
      #     using environment variables or repository-housed encrypted secrets can be found in our [Secrets documentation](https://install.doctor/docs/customization/secrets).
      #
      #     ## VMWare on macOS
      #
      #     This script only installs VMWare Workstation on Linux. The macOS-variant titled VMWare Fusion can be installed using a Homebrew
      #     cask so a "work-around" script does not have to be used.
      #
      #     ## VMWare vs. Parallels vs. VirtualBox vs. KVM vs. Hyper-V
      #
      #     There are a handful of VM virtualization providers you can choose from. VMWare is a nice compromise between OS compatibility and performance.
      #     Parallels, on the hand, might be better for macOS since it is designed specifically for macOS. Finally, VirtualBox is a truly free,
      #     open-source option that does not come with the same optimizations that VMWare and Parallels provide.
      #
      #     Other virtualization options include KVM (Linux / macOS) and Hyper-V (Windows). These options are better used for headless
      #     systems.
      #
      #     ## Links
      #
      #     * [VMWare Workstation homepage](https://www.vmware.com/content/vmware/vmware-published-sites/us/products/workstation-pro.html.html)
      #     * [Vagrant VMWare Utility on GitHub](https://github.com/hashicorp/vagrant-vmware-desktop)
      #     * [`home/.chezmoidata.yaml`](https://github.com/megabyte-labs/install.doctor/blob/master/home/.chezmoidata.yaml)
      #     * [Default license key gist](https://gist.github.com/PurpleVibe32/30a802c3c8ec902e1487024cdea26251)

      ### Run logic if VMware is installed
      if command -v vmware > /dev/null; then
        ### Build kernel modules if they are not present
        if [ ! -f "/lib/modules/$(uname -r)/misc/vmmon.ko" ] || [ ! -f "/lib/modules/$(uname -r)/misc/vmnet.ko" ]; then
          ### Build VMWare host modules
          gum log -sl info 'Building VMware host modules'
          if sudo vmware-modconfig --console --install-all; then
            gum log -sl info 'Built VMWare host modules successfully with sudo vmware-modconfig --console --install-all'
          else
            gum log -sl info 'Acquiring VMware version from CLI'
            VMW_VERSION="$(vmware --version | cut -f 3 -d' ')"
            mkdir -p /tmp/vmw_patch
            cd /tmp/vmw_patch
            gum log -sl info 'Downloading VMware host module patches' && curl -sSL "https://github.com/mkubecek/vmware-host-modules/archive/workstation-$VMW_VERSION.tar.gz" -o /tmp/vmw_patch/workstation.tar.gz
            tar -xzf /tmp/vmw_patch/workstation.tar.gz
            cd vmware*
            gum log -sl info 'Running sudo make and sudo make install'
            sudo make
            sudo make install
            gum log -sl info 'Successfully configured VMware host module patches'
          fi

          ### Sign VMware host modules if Secure Boot is enabled
          if [ -f /sys/firmware/efi ]; then
            gum log -sl info 'Signing host modules'
            mkdir -p /tmp/vmware
            cd /tmp/vmware
            openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VMware/"
            "/usr/src/linux-headers-$(uname -r)/scripts/sign-file" sha256 ./MOK.priv ./MOK.der "$(modinfo -n vmmon)"
            "/usr/src/linux-headers-$(uname -r)/scripts/sign-file" sha256 ./MOK.priv ./MOK.der "$(modinfo -n vmnet)"
            echo '' | mokutil --import MOK.der
            gum log -sl info 'Successfully signed VMware host modules. Reboot the host before powering on VMs'
          fi

          ### Patch VMware with Unlocker
          if [ ! -f /usr/lib/vmware/isoimages/darwin.iso ]; then
            gum log -sl info 'Acquiring VMware Unlocker latest release version'
            UNLOCKER_URL="$(curl -sSL 'https://api.github.com/repos/DrDonk/unlocker/releases/latest' | jq  -r '.assets[0].browser_download_url')"
            mkdir -p /tmp/vmware-unlocker
            cd /tmp/vmware-unlocker
            gum log -sl info 'Downloading unlocker.zip'
            curl -sSL "$UNLOCKER_URL" -o unlocker.zip
            unzip unlocker.zip
            cd linux
            gum log -sl info 'Running the unlocker'
            echo "y" | sudo ./unlock
            gum log -sl info 'Successfully unlocked VMware for macOS compatibility'
          else
            gum log -sl info '/usr/lib/vmware/isoimages/darwin.iso is already present on the system so VMware macOS unlocking will not be performed'
          fi

          if [[ ! "$(test -d /proc && grep Microsoft /proc/version > /dev/null)" ]]; then
            ### Start / enable VMWare service
            gum log -sl info 'Ensuring vmware.service is enabled and running'
            sudo systemctl enable vmware.service
            sudo systemctl restart vmware.service

            ### Start / enable VMWare Workstation Server service
            gum log -sl info 'Ensuring vmware-workstation-server.service is enabled and running'
            sudo systemctl enable vmware-workstation-server.service
            sudo systemctl restart vmware-workstation-server.service

            ### Start / enable VMWare USB Arbitrator service
            if command -v vmware-usbarbitrator.service > /dev/null; then
              gum log -sl info 'Ensuring vmware-usbarbitrator.service is enabled and running'
              sudo systemctl enable vmware-usbarbitrator.service
              sudo systemctl restart vmware-usbarbitrator.service
            else
              gum log -sl warn 'vmware-usbarbitrator does not exist in the PATH'
            fi
          fi
        else
          gum log -sl info 'VMware host modules are present'
        fi
      else
        gum log -sl warn 'VMware Workstation is not installed so the VMware Unlocker will not be installed'
      fi

      # @description Only run logic if both Vagrant and VMWare are installed
      if command -v vagrant > /dev/null && command -v vmware-id > /dev/null; then
        # @description  Vagrant VMWare Utility configuration
        if command -v vagrant-vmware-utility > /dev/null; then
          if [ -f /usr/local/bin/certificates/vagrant-utility.key ]; then
            gum log -sl info 'Assuming Vagrant VMWare Utility certificates have been properly generated since /usr/local/bin/certificates/vagrant-utility.key is present'
          else
            gum log -sl info 'Generating Vagrant VMWare Utility certificates'
            sudo vagrant-vmware-utility certificate generate
            gum log -sl info 'Generated Vagrant VMWare Utility certificates via vagrant-vmware-utility certificate generate'
          fi
          gum log -sl info 'Ensuring the Vagrant VMWare Utility service is enabled'
          sudo vagrant-vmware-utility service install || EXIT_CODE=$?
          if [ -n "$EXIT_CODE" ]; then
            gum log -sl info 'The Vagrant VMWare Utility command vagrant-vmware-utility service install failed. It is probably already setup.'
          fi
        fi
      else
        gum log -sl info 'Vagrant is not installed so the Vagrant plugins will not be installed'
        gum log -sl info 'Vagrant or VMWare is not installed so the Vagrant VMWare utility will not be configured'
      fi
    ansible: professormanhattan.vmware
    cask: vmware-fusion
    script:linux: |
      if ! command -v vmware > /dev/null; then
        ### Download VMWare Workstation
        VMWARE_WORKSTATION_URL=https://www.vmware.com/go/getworkstation-linux
        VMWARE_WORKSTATION_DIR=/tmp/workstation-downloads
        mkdir -p "$VMWARE_WORKSTATION_DIR"
        gum log -sl info 'Downloading VMware Workstation Installer' && curl -sSLA "Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20220101 Firefox/102.0" "$VMWARE_WORKSTATION_URL" -o "$VMWARE_WORKSTATION_DIR/tryworkstation-linux-64.sh"
        ### Register product key / license
        if [ -n "$VMWARE_WORKSTATION_LICENSE_KEY" ]; then
          gum log -sl info 'Registering VMware Workstation Pro license with serial number' && sudo "$VMWARE_WORKSTATION_DIR/tryworkstation-linux-64.sh" --eulas-agreed --console --required --set-setting vmware-workstation serialNumber "$VMWARE_WORKSTATION_LICENSE_KEY"
        else
          gum log -sl info 'Agreeing to VMWare Workstation Pro license (without serial number)' && sudo "$VMWARE_WORKSTATION_DIR/tryworkstation-linux-64.sh" --eulas-agreed --console --required
        fi
        gum log -sl info 'VMware Workstation installed successfully'
      else
        gum log -sl info 'VMware Workstation is already installed'
      fi
  volta:
    _bin: volta
    _desc: '[Volta](https://volta.sh/) is a hassle-free Javascript Tool Manager. It is a fast, reliable and universal tool manager. It supports multiple package managers and provides extensibility hooks for site-specific customization.'
    _docs: https://docs.volta.sh/
    _github: https://github.com/volta-cli/volta
    _home: https://volta.sh
    _name: volta-vm
    _post: |
      #!/usr/bin/env bash
      export VOLTA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}/volta"
      export PATH="$VOLTA_HOME/bin:$PATH"
      volta setup
      volta install node@latest
      volta install yarn@latest
    ansible: professormanhattan.volta
    brew: volta
    scoop: volta
  vpn:
    _bin: null
    _github: false
    _desc: You can populate a configuration to power this role. When configured properly, the system's built-in VPN client will be configured with your desired settings.
    _name: System VPN
    ansible: professormanhattan.vpn
  vscode:
    _app: Visual Studio Code.app
    _bin: code
    _desc: '[Visual Studio Code](https://code.visualstudio.com/) is a freeware source-code editor made by Microsoft for Windows, Linux and macOS. Features include support for debugging, syntax highlighting, intelligent code completion, snippets, code refactoring, and embedded Git.'
    _docs: https://code.visualstudio.com/api/references/vscode-api
    _github: https://github.com/microsoft/vscode
    _home: https://code.visualstudio.com/
    _name: Visual Studio Code
    _post: |
      #!/usr/bin/env bash
      # @file VSCode Extensions / Global NPM Modules Fallback
      # @brief Installs all of the Visual Studio Code extensions specified in the [`home/dot_config/Code/User/extensions.json`](https://github.com/megabyte-labs/install.doctor/blob/master/home/dot_config/Code/User/extensions.json) file and installs NPM packages to the system `/` directory as a catch-all for tools that recursively search upwards for shared NPM configurations.
      # @description
      #     This script loops through all the extensions listed in the [`home/dot_config/Code/User/extensions.json`](https://github.com/megabyte-labs/install.doctor/blob/master/home/dot_config/Code/User/extensions.json)
      #     file. It installs the extensions when either Visual Studio Code or VSCodium is installed. If both are installed, then both will
      #     have the plugins automatically installed.
      #
      #     The `extensions.json` file is used to house the plugin list so that if you decide to remove this auto-installer script then
      #     VSCode will retain some functionality from the file. It will show a popover card that recommends installing any plugins in the
      #     list that are not already installed.
      #
      #     ## Plugin Settings
      #
      #     Most of the plugin settings have been configured and optimized to work properly with the other default settings
      #     included by Install Doctor. These settings can be found in the [`home/dot_config/Code/User/settings.json` file](https://github.com/megabyte-labs/install.doctor/blob/master/home/dot_config/Code/User/settings.json).
      #     If you manage to come up with an improvement, please open a pull request so other users can benefit from your work.
      #
      #     ## Default Extensions
      #
      #     The default plugins in the `extensions.json` list are catered mostly towards full-stack web development. The technologies
      #     that are catered to by the default extensions relate to TypeScript, JavaScript, Go, Python, Rust, and many more technologies.
      #     Most of the plugins are not language-specific.
      #
      #     ## Global NPM Modules Fallback
      #
      #     This script makes fallback linter and code auto-fixer configurations globally available. Normally, configurations, like
      #     the ones used for ESLint, are installed at the project level by specifying the NPM package configuration
      #     in the `package.json` file (or via an `.eslintrc` file). However, whenever no configuration is present, IDEs like
      #     Visual Studio Code will recursively search upwards in the directory tree, trying to find an ESLint configuration.
      #
      #     This script addresses this issue by installing a set of shared NPM packages that enhance the functionality of tools like ESLint
      #     by placing a `package.json` with all the necessary settings into the highest directory possible and then installing the package's
      #     modules. This normally results in a `package.json` file and `node_modules/` folder at the root of the system.
      #
      #     ## NPM Packages Included
      #
      #     To reduce clutter, all the configurations are mapped out in the `package.json` file. Our default `package.json` file includes
      #     the following configuration:
      #
      #     ```json
      #     <!-- AUTO-GENERATED:START (REMOTE:url=https://gitlab.com/megabyte-labs/install.doctor/-/raw/master/home/dot_config/Code/User/package.json) -->
      #     {
      #       ...
      #       // Notable dependencies listed below
      #       "dependencies": {
      #         "eslint-config-strictlint": "latest",
      #         "jest-preset-ts": "latest",
      #         "prettier-config-strictlint": "latest",
      #         "remark-preset-strictlint": "latest",
      #         "stylelint-config-strictlint": "latest"
      #       },
      #       ...
      #     }
      #     <!-- AUTO-GENERATED:END -->
      #     ```
      #
      #     ## Strict Lint
      #
      #     More details on the shared configurations can be found at [StrictLint.com](https://strictlint.com).
      #     Strict Lint is another brand maintained by Megabyte Labs that is home to many of the well-crafted
      #     shared configurations that are included in our default NPM configuration fallback settings.
      #
      #     ## Notes
      #
      #     * If the system root directory is not writable (even with `sudo`), then the shared modules are installed to the provisioning user's `$HOME` directory
      #
      #     ## Links
      #
      #     * [`package.json` configuration file](https://github.com/megabyte-labs/install.doctor/blob/master/home/dot_config/Code/User/package.json)
      #     * [StrictLint.com documentation](https://strictlint.com/docs)
      #     * [Visual Studio Code settings folder](https://github.com/megabyte-labs/install.doctor/blob/master/home/dot_config/Code/User)
      #     * [Visual Studio Code `extensions.json`](https://github.com/megabyte-labs/install.doctor/blob/master/home/dot_config/Code/User/extensions.json)

      ### Hides useless error during extension installations
      # Error looks like:
      #     (node:53151) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
      #     (Use `Electron --trace-deprecation ...` to show where the warning was created)
      export NODE_OPTIONS=--throw-deprecation

      # @description Install Visual Studio Code extensions if they are not already installed (by checking the `code --list-extensions` output)
      if command -v code > /dev/null; then
        EXTENSIONS="$(code --list-extensions)"
        jq -r '.recommendations[]' "${XDG_CONFIG_HOME:-$HOME/.config}/Code/User/extensions.json" | while read EXTENSION; do
          if ! echo "$EXTENSIONS" | grep -iF "$EXTENSION" > /dev/null; then
            gum log -sl info 'Installing Visual Studio Code extension '"$EXTENSION"'' && code --install-extension "$EXTENSION"
            gum log -sl info 'Installed '"$EXTENSION"''
          else
            gum log -sl info ''"$EXTENSION"' already installed'
          fi
        done
      else
        gum log -sl info 'code executable not available - skipping plugin install process for it'
      fi

      if command -v code > /dev/null && command -v npm > /dev/null && [ -f "${XDG_DATA_HOME:-$HOME/.local/share}/vscode/package.json" ]; then
        ### Install linter fallback node_modules / package.json to system or home directory
        if sudo cp -f "${XDG_DATA_HOME:-$HOME/.local/share}/vscode/package.json" /package.json; then
          gum log -sl info 'Successfully copied linter fallback configurations package.json to /package.json'
          gum log -sl info 'Installing system root directory node_modules'
          cd / && sudo npm i --quiet --no-package-lock || EXIT_CODE=$?
        else
          gum log -sl warn 'Unable to successfully copy linter fallback configurations package.json to /package.json'
          gum log -sl info 'Installing linter fallback configurations node_modules to home directory instead'
          cp -f "${XDG_DATA_HOME:-$HOME/.local/share}/vscode/package.json" "$HOME/package.json"
          cd ~ && npm i --quiet --no-package-lock || EXIT_CODE=$?
        fi

        ### Log message if install failed
        if [ -n "$EXIT_CODE" ]; then
          gum log -sl warn 'Possible error(s) were detected while installing linter fallback configurations to the home directory.'
          gum log -sl info "Exit code: $EXIT_CODE"
        else
          gum log -sl info 'Installed linter fallback configuration node_modules'
        fi
      else
        gum log -sl info 'Skipping installation of fallback linter configurations because one or more of the dependencies is missing.'
      fi
    ansible: professormanhattan.vscode
    cask: visual-studio-code
    choco: vscode
    flatpak: com.visualstudio.code
    snap: code --classic
    yay: visual-studio-code-bin
  vscodium:
    _app: VSCodium.app
    _bin: codium
    _github: https://github.com/VSCodium/vscodium
    _post: |
      #!/usr/bin/env bash
      # @brief See `_post` entry for `vscode` for a description
      export NODE_OPTIONS=--throw-deprecation
      # @description Check for the presence of the `codium` command in the `PATH` and install extensions for VSCodium if it is present
      if command -v codium > /dev/null; then
        EXTENSIONS="$(codium --list-extensions)"
        jq -r '.recommendations[]' "${XDG_CONFIG_HOME:-$HOME/.config}/Code/User/extensions.json" | while read EXTENSION; do
          if ! echo "$EXTENSIONS" | grep -iF "$EXTENSION" > /dev/null; then
            gum log -sl info 'Installing VSCodium extension '"$EXTENSION"'' && codium --install-extension "$EXTENSION" && gum log -sl info 'Installed '"$EXTENSION"''
          else
            gum log -sl info ''"$EXTENSION"' already installed'
          fi
        done
      else
        gum log -sl info 'codium executable not available - skipping plugin install process for it'
      fi
    appimage: vscodium/vscodium
    cask: vscodium
    choco: vscodium
    flatpak: com.vscodium.codium
    nix: nixpkgs.vscodium
    scoop: vscodium
    snap: codium --classic
    winget: vscodium
    yay: vscodium-bin
  vup:
    _bin: vup
    _github: https://github.com/vup-app/vup
    flatpak: app.vup.Vup
  w3m:
    _bin: w3m
    _desc: w3m is a pager/text-based WWW browser. You can browse local documents and/or documents on the WWW using a terminal emulator.
    _docs: https://w3m.sourceforge.net/MANUAL
    _github: https://github.com/tats/w3m
    _home: https://tracker.debian.org/pkg/w3m
    _name: w3m
    apt: w3m
    brew: w3m
    dnf: w3m
    pacman: w3m
    port: w3m
    zypper: w3m
  wails:
    _bin: wails
    _desc: '[Wails](https://github.com/wailsapp/wails) offers a different approach to providing web interfaces to Go programs: it provides the ability to wrap both Go code and a web frontend into a single binary.'
    _name: Wails
    _github: https://github.com/wailsapp/wails
    ansible: professormanhattan.wails
    go: github.com/wailsapp/wails/cmd/wails@latest
  wallpaper-cli:
    _bin: wallpaper
    _github: https://github.com/sindresorhus/wallpaper-cli
    _name: Wallpaper CLI
    npm: wallpaper-cli
  warp:
    _app: Cloudflare WARP.app
    _bin: warp-cli
    _github: false
    _desc: '[Cloudflare WARP Client](https://cloudflarewarp.com/) is a free app that makes your Internet safer'
    _home: https://cloudflarewarp.com/
    _name: Cloudflare WARP Client
    _post: |
      #!/usr/bin/env bash
      # @file CloudFlare WARP
      # @brief Installs CloudFlare WARP, ensures proper security certificates are in place, and connects the device to CloudFlare WARP.
      # @description
      #     This script is intended to connect the device to CloudFlare's Zero Trust network with nearly all of its features unlocked.
      #     Homebrew is used to install the `warp-cli` on macOS. On Linux, it can install `warp-cli` on most Debian systems and some RedHat
      #     systems. CloudFlare WARP's [download page](https://pkg.cloudflareclient.com/packages/cloudflare-warp) is somewhat barren.
      #
      #     ## MDM Configuration
      #
      #     If CloudFlare WARP successfully installs, it first applies MDM configurations (managed configurations). If you would like CloudFlare
      #     WARP to connect completely headlessly (while losing some "user-posture" settings), then you can populate the following three secrets:
      #
      #     1. `CLOUDFLARE_TEAMS_CLIENT_ID` - The ID from a CloudFlare Teams service token. See [this article](https://developers.cloudflare.com/cloudflare-one/identity/service-tokens/).
      #     2. `CLOUDFLARE_TEAMS_CLIENT_SECRET` - The secret from a CloudFlare Teams service token.
      #     3. `CLOUDFLARE_TEAMS_ORG` - The ID of your Zero Trust organization. This variable must be passed in as an environment variable and is housed in the `home/.chezmoi.yaml.tmpl` file. If you do not want to pass an environment variable, you can change the default value in `home/.chezmoi.yaml.tmpl` on your own fork.
      #
      #     The two variables above can be passed in using either of the methods described in the [Secrets documentation](https://install.doctor/docs/customization/secrets).
      #
      #     ## Headless CloudFlare WARP Connection
      #
      #     Even if you do not provide the two variables mentioned above, the script will still headlessly connect your device to the public CloudFlare WARP
      #     network, where you will get some of the benefits of a VPN for free. Otherwise, if they were passed in, then the script
      #     finishes by connecting to CloudFlare Teams.
      #
      #     ## Application Certificates
      #
      #     This script applies the techniques described on the [CloudFlare Zero Trust Install certificate manually page](https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/user-side-certificates/install-cloudflare-cert/)
      #     to configure the following utilities that leverage seperate certificate authorities:
      #
      #     * Python
      #     * NPM
      #     * Git
      #     * Google Cloud SDK
      #     * AWS CLI
      #     * Google Drive for desktop
      #
      #     Settings used to configure Firefox are housed inside of the Firefox configuration files stored as seperate configuration files
      #     outside of this script. **Note: The scripts that enable CloudFlare certificates for all these programs are currently commented out
      #     in this script.**
      #
      #     ## Notes
      #
      #     According to CloudFlare Teams [documentation on MDM deployment](https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/deployment/mdm-deployment/),
      #     on macOS the `com.cloudflare.warp.plist` file gets erased on reboot. Also, according to the documentation, the only way around this is to leverage
      #     an MDM SaaS provider like JumpCloud.
      #
      #     ## Links
      #
      #     * [Linux managed configuration](https://github.com/megabyte-labs/install.doctor/tree/master/home/dot_config/warp/private_mdm.xml.tmpl)
      #     * [macOS managed configuration](https://github.com/megabyte-labs/install.doctor/tree/master/home/Library/Managed%20Preferences/private_com.cloudflare.warp.plist.tmpl)

      SSL_CERT_PATH="/etc/ssl/cert.pem"

      ### Install CloudFlare WARP (on non-WSL *nix systems)
      if [[ ! "$(test -d /proc && grep Microsoft /proc/version > /dev/null)" ]]; then
        if [ -d /System ] && [ -d /Applications ]; then
          ### Install on macOS
          if [ ! -d "/Applications/Cloudflare WARP.app" ]; then
            brew install --cask --no-quarantine --quiet cloudflare-warp
          else
            gum log -sl info 'Cloudflare WARP already installed'
          fi
        elif [ '{{ .host.distro.id }}' = 'debian' ]; then
          ### Add CloudFlare WARP desktop app apt-get source
          if [ ! -f /etc/apt/sources.list.d/cloudflare-client.list ]; then
            gum log -sl info 'Adding CloudFlare WARP keyring'
            curl https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
            gum log -sl info 'Adding apt source reference'
            echo "deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
          fi

          ### Update apt-get and install the CloudFlare WARP CLI
          sudo apt-get update && sudo apt-get install -y cloudflare-warp
        elif [ '{{ .host.distro.id }}' = 'ubuntu' ]; then
          ### Add CloudFlare WARP desktop app apt-get source
          if [ ! -f /etc/apt/sources.list.d/cloudflare-client.list ]; then
            gum log -sl info 'Adding CloudFlare WARP keyring'
            curl https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
            gum log -sl info 'Adding apt source reference'
            echo "deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
          fi

          ### Update apt-get and install the CloudFlare WARP CLI
          sudo apt-get update && sudo apt-get install -y cloudflare-warp
        elif command -v dnf > /dev/null && command -v rpm > /dev/null; then
          ### This is made for CentOS 8 and works on Fedora 36 (hopefully 36+ as well) with `nss-tools` as a dependency
          sudo dnf instal -y nss-tools || NSS_TOOL_EXIT=$?
          if [ -n "$NSS_TOOL_EXIT" ]; then
            gum log -sl warn 'Unable to install nss-tools which was a requirement on Fedora 36 and assumed to be one on other systems as well.'
          fi
          ### According to the download site, this is the only version available for RedHat-based systems
          sudo rpm -ivh https://pkg.cloudflareclient.com/cloudflare-release-el8.rpm || RPM_EXIT_CODE=$?
          if [ -n "$RPM_EXIT_CODE" ]; then
            gum log -sl error 'Unable to install CloudFlare WARP using RedHat 8 RPM package'
          fi
        fi
      fi


      ### Ensure certificate is installed
      # Source: https://developers.cloudflare.com/cloudflare-one/static/documentation/connections/Cloudflare_CA.crt
      # Source: https://developers.cloudflare.com/cloudflare-one/static/documentation/connections/Cloudflare_CA.pem
      if [ -d /System ] && [ -d /Applications ] && command -v warp-cli > /dev/null; then
        ### Ensure certificate installed on macOS
        if [ -z "$SSH_CONNECTION" ]; then
          # if [ -z "$HEADLESS_INSTALL" ]; then
          #     gum log -sl info '**macOS Manual Security Permission** Requesting security authorization for Cloudflare trusted certificate'
          #     sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "$HOME/.local/etc/ssl/cloudflare/Cloudflare_CA.crt"
          # fi
          gum log -sl info 'Updating the OpenSSL CA Store to include the Cloudflare certificate'
          echo | sudo tee -a "$SSL_CERT_PATH" < "$HOME/.local/etc/ssl/cloudflare/Cloudflare_CA.pem" > /dev/null
          echo "" | sudo tee -a "$SSL_CERT_PATH"
        else
          gum log -sl warn 'Session is SSH so adding Cloudflare encryption key to trusted certificates via the security program is being bypassed since it requires Touch ID / Password verification.'
        fi
        if [ -f "/usr/local/opt/openssl@3/bin/c_rehash" ]; then
          # Location on Intel macOS
          gum log -sl info 'Ensuring /usr/local/etc/openssl@3/certs directory exists' && mkdir -p /usr/local/etc/openssl@3/certs
          gum log -sl info 'Adding Cloudflare certificate to /usr/local/etc/openssl@3/certs/Cloudflare_CA.pem'
          echo | sudo cat - "$HOME/.local/etc/ssl/cloudflare/Cloudflare_CA.pem" >> /usr/local/etc/openssl@3/certs/Cloudflare_CA.pem
          gum log -sl info 'Running /usr/local/opt/openssl@3/bin/c_rehash'
          /usr/local/opt/openssl@3/bin/c_rehash > /dev/null && gum log -sl info 'OpenSSL certificate rehash successful'
        elif [ -f "${HOMEBREW_PREFIX:-/opt/homebrew}/opt/openssl@3/bin/c_rehash" ]; then
          # Location on arm64 macOS and custom Homebrew locations
          gum log -sl info "Ensuring ${HOMEBREW_PREFIX:-/opt/homebrew}/etc/openssl@3/certs directory exists" && mkdir -p "${HOMEBREW_PREFIX:-/opt/homebrew}/etc/openssl@3/certs"
          gum log -sl info "Adding Cloudflare certificate to ${HOMEBREW_PREFIX:-/opt/homebrew}/etc/openssl@3/certs/Cloudflare_CA.pem"
          echo | sudo cat - "$HOME/.local/etc/ssl/cloudflare/Cloudflare_CA.pem" >> "${HOMEBREW_PREFIX:-/opt/homebrew}/etc/openssl@3/certs/Cloudflare_CA.pem"
          gum log -sl info "Running ${HOMEBREW_PREFIX:-/opt/homebrew}/opt/openssl@3/bin/c_rehash"
          "${HOMEBREW_PREFIX:-/opt/homebrew}/opt/openssl@3/bin/c_rehash" > /dev/null && gum log -sl info 'OpenSSL certificate rehash successful'
        else
          gum log -sl warn 'Unable to add Cloudflare_CA.pem because /usr/local/etc/openssl@3/certs and /opt/homebrew/etc/openssl@3/certs do not exist!'
        fi
      elif command -v warp-cli > /dev/null; then
        # System is Linux
        if command -v dpkg-reconfigure > /dev/null; then
          if [ -d /usr/local/share/ca-certificates ]; then
            gum log -sl info 'Copying CloudFlare Teams PEM file to /usr/local/share/ca-certificates/Cloudflare_CA.crt'
            sudo cp -f "$HOME/.local/etc/ssl/cloudflare/Cloudflare_CA.pem" /usr/local/share/ca-certificates/Cloudflare_CA.crt
            gum log -sl info 'dpkg-reconfigure executable detected so using Debian/Ubuntu method of updating system trusted certificates to include CloudFlare Teams certificate'
            sudo dpkg-reconfigure ca-certificates -p high
            SSL_CERT_PATH="/etc/ssl/certs/ca-certificates.crt"
          else
            gum log -sl warn 'No /usr/local/share/ca-certificates folder present'
          fi
        elif command -v update-ca-trust > /dev/null; then
          if [ -d /etc/pki/ca-trust/source/anchors ]; then
            gum log -sl info 'Copying CloudFlare Teams certificates to /etc/pki/ca-trust/source/anchors'
            sudo cp -f "$HOME/.local/etc/ssl/cloudflare/Cloudflare_CA.crt" "$HOME/.local/etc/ssl/cloudflare/Cloudflare_CA.pem" /etc/pki/ca-trust/source/anchors
            gum log -sl info 'update-ca-trust executable detected so using CentOS/Fedora method of updating system trusted certificates to include CloudFlare Teams certificate'
            sudo update-ca-trust
            SSL_CERT_PATH="/etc/pki/tls/certs/ca-bundle.crt"
          else
            gum log -sl warn '/etc/pki/ca-trust/source/anchors does not exist so skipping the system certificate update process'
          fi
        fi
      fi

      if command -v warp-cli > /dev/null; then
        ### Application certificate configuration
        # Application-specific certificate authority modification is currently commented out because
        # it is merely for traffic inspection and `npm install` fails when configured to use the CloudFlare
        # certificate and the WARP client is not running.
        ### Git
        if command -v git > /dev/null; then
          gum log -sl info "Configuring git to use $SSL_CERT_PATH"
          git config --global http.sslcainfo "$SSL_CERT_PATH"
        fi

        ### NPM
        if command -v npm > /dev/null; then
          gum log -sl info "Configuring npm to use $SSL_CERT_PATH"
          npm config set cafile "$SSL_CERT_PATH"
        fi

        ### Python
        if command -v python3 > /dev/null; then
          ### Ensure Certifi package is available globally
          if ! pip3 list | grep certifi > /dev/null; then
            if command -v brew > /dev/null; then
              gum log -sl info 'Ensuring Python certifi is installed via Homebrew'
              brew install --quiet certifi
            else
              gum log -sl info 'Ensuring certifi is installed globally for Python 3'
              pip3 install certifi
            fi
          fi

          ### Copy CloudFlare PEM file to Python 3 location
          gum log -sl info "Configuring python3 / python to use "$HOME/.local/etc/ssl/cloudflare/Cloudflare_CA.pem""
          echo | cat - "$HOME/.local/etc/ssl/cloudflare/Cloudflare_CA.pem" >> $(python3 -m certifi)
        fi

        ### Google Cloud SDK
        if command -v gcloud > /dev/null; then
          gum log -sl info "Configuring gcloud to use "$HOME/.local/etc/ssl/cloudflare/Cloudflare_CA.pem" and "$HOME/.local/etc/ssl/gcloud/ca.pem""
          mkdir -p "$HOME/.local/etc/ssl/gcloud"
          cat "$HOME/.local/etc/ssl/curl/cacert.pem" "$HOME/.local/etc/ssl/cloudflare/Cloudflare_CA.pem" > "$HOME/.local/etc/ssl/gcloud/ca.pem"
          gcloud config set core/custom_ca_certs_file "$HOME/.local/etc/ssl/gcloud/ca.pem"
        fi

        ### Google Drive for desktop (macOS)
        if [ -d "/Applications/Google Drive.app" ]; then
          if [ -d "/Applications/Google Drive.app/Contents/Resources" ]; then
            gum log -sl info "Combining Google Drive roots.pem with CloudFlare certificate"
            mkdir -p "$HOME/.local/etc/ssl/google-drive"
            cat "$HOME/.local/etc/ssl/cloudflare/Cloudflare_CA.pem" "/Applications/Google Drive.app/Contents/Resources/roots.pem" >> "$HOME/.local/etc/ssl/google-drive/roots.pem"
            sudo defaults write /Library/Preferences/com.google.drivefs.settings TrustedRootsCertsFile -string "$HOME/.local/etc/ssl/google-drive/roots.pem"
          else
            gum log -sl warn 'Google Drive.app installed but roots.pem is not available yet'
          fi
        fi


        ### Ensure MDM settings are applied (deletes after reboot on macOS)
        ### TODO: Ensure `.plist` can be added to `~/Library/Managed Preferences` and not just `/Library/Managed Preferences`
        # Source: https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/deployment/mdm-deployment/
        # Source for JumpCloud: https://developers.cloudflare.com/cloudflare-one/static/documentation/connections/CloudflareWARP.mobileconfig
        if [ -d /System ] && [ -d /Applications ]; then
          sudo cp -f "$HOME/Library/Managed Preferences/com.cloudflare.warp.plist" '/Library/Managed Preferences/com.cloudflare.warp.plist'
          sudo plutil -convert binary1 '/Library/Managed Preferences/com.cloudflare.warp.plist'

          ### Enable CloudFlare WARP credentials auto-populate (since file is deleted when not managed with MDM)
          if [ -f "$HOME/Library/LaunchDaemons/com.cloudflare.warp.plist" ] && [ ! -f "/Library/LaunchDaemons/com.cloudflare.warp.plist" ]; then
            sudo mkdir -p /Library/LaunchDaemons
            sudo cp -f "$HOME/Library/LaunchDaemons/com.cloudflare.warp.plist" '/Library/LaunchDaemons/com.cloudflare.warp.plist'
            sudo launchctl load "/Library/LaunchDaemons/com.cloudflare.warp.plist"
          fi
        elif [ -f "${XDG_CONFIG_HOME:-$HOME/.config}/warp/mdm.xml" ]; then
          sudo mkdir -p /var/lib/cloudflare-warp
          sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/warp/mdm.xml" /var/lib/cloudflare-warp/mdm.xml
        fi

        ### Register CloudFlare WARP
        if warp-cli --accept-tos status | grep 'Registration Missing' > /dev/null; then
          gum log -sl info 'Registering CloudFlare WARP'
          warp-cli --accept-tos register
        else
          gum log -sl info 'Either there is a misconfiguration or the device is already registered with CloudFlare WARP'
        fi

        ### Connect CloudFlare WARP
        if warp-cli --accept-tos status | grep 'Disconnected' > /dev/null; then
          gum log -sl info 'Connecting to CloudFlare WARP'
          warp-cli --accept-tos connect > /dev/null && gum log -sl info 'Connected to CloudFlare WARP'
        else
          gum log -sl info 'Either there is a misconfiguration or the device is already connected with CloudFlare WARP'
        fi
      else
        gum log -sl warn 'warp-cli was not installed so CloudFlare WARP cannot be joined'
      fi
      # Needs tuning - possibly unrelated, but internet wasn't working on Ubuntu after installing this and removed it during debugging
      # ansible: professormanhattan.warp
    apt: cloudflare-warp
    cask: cloudflare-warp
    choco: warp
  warp-terminal:
    _app: Warp.app
    _bin: warp
    _desc: Warp is a blazingly-fast modern Rust based GPU-accelerated terminal built to make you and your team more productive.
    _docs: https://docs.warp.dev/getting-started/readme
    _env:
      WARP_TERMINAL_APPDATA:
        cask: "$HOME/Library/Application Support/dev.warp.Warp-Stable"
    _github: https://github.com/warpdotdev/Warp
    _home: https://www.warp.dev/
    _name: Warp Terminal
    appimage: https://app.warp.dev/get_warp?linux=true&package=appimage
    apt: https://app.warp.dev/get_warp?package=deb
    cask: warp
    dnf: https://app.warp.dev/get_warp?package=rpm
    pacman: https://app.warp.dev/get_warp?linux=true&package=pacman
  warp-transfer:
    _bin: warp-transfer
    _github: false
    flatpak: app.drey.Warp
  watchexec:
    _bin: watchexec
    _desc: Executes commands in response to file modifications.
    _docs: https://watchexec.github.io/docs/glob-patterns.html
    _github: https://github.com/watchexec/watchexec
    _home: https://watchexec.github.io/
    _name: Watchexec
    apk: watchexec
    # Apt is from an unofficial channel
    # apt: watchexec
    baulk: watchexec
    brew: watchexec
    cargo: watchexec-cli
    choco: watchexec
    emerge: watchexec
    nix: watchexec
    pacman: watchexec
    scoop: watchexec
    xbps: watchexec
  watchman:
    _bin: watchman
    _desc: '[Watchman](https://github.com/facebook/watchman), an open-source Facebook product, can be used to watch files and record when they change. It can also trigger actions when matching files change.'
    _github: https://github.com/facebook/watchman
    _name: Watchman
    ansible: professormanhattan.watchman
    brew: watchman
    choco: watchman
    port: watchman
    scoop: watchman
  waypoint:
    _bin: waypoint
    _desc: '[HashiCorp Waypoint](https://www.waypointproject.io/) allows developers to deploy, manage, and observe their applications through a consistent abstraction of underlying infrastructure. Waypoint works with Kubernetes, ECS and many other platforms.'
    _docs: https://developer.hashicorp.com/waypoint/docs
    _github: https://github.com/hashicorp/waypoint
    _home: https://www.waypointproject.io/
    _name: HashiCorp Waypoint
    ansible: professormanhattan.waypoint
    brew: hashicorp/tap/waypoint
    scoop: waypoint
  wazuh:
    # TODO: Add logic to .chezmoiscripts that ensures the proper Wazuh settings are in place
    _bin: wazuh-agentd
    _desc: '[Wazuh](https://wazuh.com/) is a free, open source and enterprise-ready security monitoring solution for threat detection, integrity monitoring, incident response and compliance.'
    _docs: https://documentation.wazuh.com/current/index.html
    _github: https://github.com/wazuh/wazuh
    _home: https://wazuh.com/
    _name: Wazuh
    _service:linux: wazuh-agent
    _service:windows: wazuh-agent
    _when:darwin: '! test -f /Library/Ossec/bin/agent-auth'
    _when:linux: '! test -f /var/ossec/bin/agent-auth'
    _when:windows: '! test -f "C:\Program Files (x86)\ossec-agent\agent-auth.exe"'
    choco: wazuh-agent
    script:darwin: if ! csrutil status | grep enabled > /dev/null; then cd /tmp && curl -sSL https://packages.wazuh.com/4.x/macos/wazuh-agent-4.4.4-1.pkg > wazuh-agent.pkg && sudo launchctl setenv WAZUH_MANAGER "$WAZUH_MANAGER" && sudo installer -pkg wazuh-agent.pkg -target / && sudo chmod 755 /Library/Ossec && sudo chmod 755 /Library/Ossec/bin && rm /tmp/wazuh-agent.pkg && sudo wazuh-control start; else echo "WARNING - Skipping Wazuh Agent installation because System Integrity Protection is enabled. Disabling it requires booting into recovery and running csrutil disable, installing Wazuh Agent normally, and then re-enabling it again in recovery mode."; fi
    script:linux: if command -v apt-get > /dev/null; then curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | sudo gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import && sudo chmod 644 /usr/share/keyrings/wazuh.gpg && echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" | sudo tee -a /etc/apt/sources.list.d/wazuh.list && sudo apt-get update && sudo apt-get install -y wazuh-agent; elif command -v dnf > /dev/null; then echo "[wazuh]" | sudo tee -a /etc/yum.repos.d/wazuh.repo && echo "gpgcheck=1" | sudo tee -a /etc/yum.repos.d/wazuh.repo && echo "gpgkey=https://packages.wazuh.com/key/GPG-KEY-WAZUH" | sudo tee -a /etc/yum.repos.d/wazuh.repo && echo "enabled=1" | sudo tee -a /etc/yum.repos.d/wazuh.repo && echo "name=EL-\$releasever - Wazuh" | sudo tee -a /etc/yum.repos.d/wazuh.repo && echo "baseurl=https://packages.wazuh.com/4.x/yum/" | sudo tee -a /etc/yum.repos.d/wazuh.repo && echo "protect=1" | sudo tee -a /etc/yum.repos.d/wazuh.repo && sudo rpm --import https://packages.wazuh.com/key/GPG-KEY-WAZUH && sudo dnf install -y wazuh-agent; elif command -v zypper > /dev/null; then echo "[wazuh]" | sudo tee -a /etc/zypp/repos.d/wazuh.repo && echo "gpgcheck=1" | sudo tee -a /etc/zypp/repos.d/wazuh.repo && echo "gpgkey=https://packages.wazuh.com/key/GPG-KEY-WAZUH" | sudo tee -a /etc/zypp/repos.d/wazuh.repo && echo "enabled=1" | sudo tee -a /etc/zypp/repos.d/wazuh.repo && echo "name=EL-$releasever - Wazuh" | sudo tee -a /etc/zypp/repos.d/wazuh.repo && echo "baseurl=https://packages.wazuh.com/4.x/yum/" | sudo tee -a /etc/zypp/repos.d/wazuh.repo && echo "protect=1" | sudo tee -a /etc/zypp/repos.d/wazuh.repo && sudo rpm --import https://packages.wazuh.com/key/GPG-KEY-WAZUH && sudo zypper install -y wazuh-agent; elif command -v apk > /dev/null; then sudo wget -O /etc/apk/keys/alpine-devel@wazuh.com-633d7457.rsa.pub https://packages.wazuh.com/key/alpine-devel%40wazuh.com-633d7457.rsa.pub && echo "https://packages.wazuh.com/4.x/alpine/v3.12/main" | sudo tee -a /etc/apk/repositories && sudo apk update && sudo apk add wazuh-agent; fi
  web-ext:
    _bin: web-ext
    _github: https://github.com/mozilla/web-ext
    _name: Web Extension CLI by Mozilla
    npm: web-ext
  web-font-generator:
    _bin: web-font-generator
    _github: https://github.com/rafaelmardojai/webfont-kit-generator
    flatpak: com.rafaelmardojai.WebfontKitGenerator
  webpquicklook:
    _github: https://github.com/emin/WebPQuickLook
    _name: QLWebP
    _when:cask: '! test -d "$HOME/Library/QuickLook/WebpQuickLook.qlgenerator"'
    cask: webpquicklook
  websocat:
    _bin: websocat
    _desc: CLI for interacting with web sockets
    _github: https://github.com/vi/websocat
    _name: websocat
    brew: websocat
    cargo: websocat
    github: github.com/vi/websocat
    pkg: websocat
    port: websocat
  webtorrent:
    _app: WebTorrent.app
    _bin: webtorrent
    _desc: Streaming torrent app for Mac, Windows, and Linux
    _github: https://github.com/webtorrent/webtorrent-desktop
    _home: webtorrent.io/desktop
    _name: WebTorrent Desktop
    cask: webtorrent
    choco: webtorrent-desktop
    flatpak: io.webtorrent.WebTorrent
    github: github.com/webtorrent/webtorrent-desktop
    yay: webtorrent-desktop
  wego:
    _bin: wego
    _github: https://github.com/schachmat/wego
    _name: WeGo
    brew: wego
    go: github.com/schachmat/wego@latest
  wetty:
    _bin: wetty
    _github: https://github.com/butlerx/wetty
    _name: Wetty
    npm: wetty
  wget:
    _bin: wget
    _desc: The [wget](https://www.gnu.org/software/wget/) command is a command line utility for downloading files from the Internet. It supports downloading multiple files, downloading in the background, resuming downloads, limiting the bandwidth used for downloads and viewing headers.
    _home: https://www.gnu.org/software/wget/
    _name: wget
    _github: false
    ansible: professormanhattan.wget
    apk: wget
    apt: wget
    brew: wget
    dnf: wget
    # whalebrew: whalebrew/wget # Temporarily commentted out for debugging
  whalebrew:
    _bin: whalebrew
    _desc: Homebrew, but with Docker images (see https://github.com/whalebrew/whalebrew-packages for available packages)
    _docs: https://github.com/whalebrew/whalebrew#usage
    _github: https://github.com/whalebrew/whalebrew
    _home: https://github.com/whalebrew/whalebrew
    _name: Whalebrew
    brew: whalebrew
    script:darwin: curl -L "https://github.com/whalebrew/whalebrew/releases/download/0.4.0/whalebrew-$(uname -s)-$(uname -m)" -o /usr/local/bin/whalebrew; chmod +x /usr/local/bin/whalebrew
    script:linux: curl -L "https://github.com/whalebrew/whalebrew/releases/download/0.4.0/whalebrew-$(uname -s)-$(uname -m)" -o /usr/local/bin/whalebrew; chmod +x /usr/local/bin/whalebrew
  what-ip:
    _bin: whatip
    _github: false
    _gitlab: https://gitlab.gnome.org/GabMus/whatip
    flatpak: org.gabmus.whatip
  whereami:
    _bin: whereami
    _github: https://github.com/rafaelrinaldi/whereami
    _name: Where Am I?
    npm: '@rafaelrinaldi/whereami'
  wifi-password:
    _bin: wifi-password
    _desc: Get the password of the wifi you're on
    _github: https://github.com/rauchg/wifi-password
    _name: wifi-password
    bpkg: rauchg/wifi-password
    brew:darwin: wifi-password
    npm: wifi-password-cli
  windows-adk:
    _bin: null
    _desc: >-
      [Windows ADK](https://www.microsoft.com/en-us/windows-server/windows-admin-center) was unveiled by Microsoft on September 14, 2017 as the necessary evolution of the Windows Server graphical user interface. Windows ADK offers a flexible, locally-deployed, browser-based management platform and tools. The idea behind this project is to help simplify the management of servers by placing a majority of the frequently referenced tools used by system administrators in one spot. You can run it on both Windows 10 and Windows Server.
    _docs: https://learn.microsoft.com/en-us/windows-hardware/get-started/adk-install
    _github: false
    _home: https://learn.microsoft.com/en-us/windows-hardware/get-started/adk-install
    _name: Windows ADK
    ansible:windows: professormanhattan.windowsadk
    choco: windows-adk
  windows-admin-center:
    _bin: null
    _desc: >-
      [Windows Admin Center](https://www.microsoft.com/en-us/windows-server/windows-admin-center) was unveiled by Microsoft on September 14, 2017 as the necessary evolution of the Windows Server graphical user interface. Windows Admin Center offers a flexible, locally-deployed, browser-based management platform and tools. The idea behind this project is to help simplify the management of servers by placing a majority of the frequently referenced tools used by system administrators in one spot. You can run it on both Windows 10 and Windows Server.
    _docs: https://github.com/MicrosoftDocs/windowsserverdocs/blob/main/WindowsServerDocs/manage/windows-admin-center/overview.md
    _github: false
    _home: https://www.microsoft.com/en-us/windows-server/windows-admin-center
    _name: Windows Admin Center
    ansible:windows: professormanhattan.windowsadmincenter
    choco: windows-admin-center
  windows-power-toys:
    _bin: null
    _desc: '[Microsoft PowerToys](https://docs.microsoft.com/en-us/windows/powertoys/) is a set of utilities for Windows power-users to tune and streamline their Windows 10 experience for greater productivity. It includes tools like a Color Picker, File Explorer add-ons, Keyboard Manager, Shortcut Guide, and more.'
    _docs: https://learn.microsoft.com/en-us/windows/powertoys/
    _github: https://github.com/microsoft/PowerToys
    _home: https://learn.microsoft.com/en-us/windows/powertoys/
    _name: Microsoft PowerToys
    ansible:windows: professormanhattan.windowspowertoys
    choco: powertoys
    scoop: powertoys
  winrm-cli:
    _bin: winrm-cli
    _desc: Command-line tool to remotely execute commands on Windows machines through WinRM
    _docs: https://github.com/masterzen/winrm-cli
    _github: https://github.com/masterzen/winrm-cli
    _home: https://github.com/masterzen/winrm-cli
    _name: winrm-cli
    go: github.com/masterzen/winrm-cli@latest
    yay: winrm-cli-git
  winui-gallery:
    _github: https://github.com/microsoft/WinUI-Gallery
    _name: WinUI Gallery
    winapp: winui-3-gallery/9P3JFPWWDZRC
  wipe-modules:
    _bin: wipe-modules
    _github: https://github.com/bntzio/wipe-modules
    _name: wipe-modules
    npm: wipe-modules
  wireguard-client:
    _app: WireGuard.app
    _bin: wireguard-client
    _github: https://github.com/WireGuard/wireguard-monolithic-historical
    _deps:
      - wireguard-tools
    _name: WireGuard Client
    choco: wireguard
    mas: 1451685025
    scoop: wireguard-np
  wireguard-tools:
    _bin: wg
    _name: WireGuard Tools
    _github: https://github.com/WireGuard/wireguard-tools
    _post: |
      #!/usr/bin/env bash
      # @file macOS WireGuard Profiles
      # @brief Installs WireGuard VPN profiles on macOS devices
      # @description
      #     This script installs WireGuard VPN profiles on macOS. It scans `${XDG_CONFIG_HOME:-$HOME/.config}/vpn` for all the `*.conf` files
      #     and then copies those profiles to `/etc/wireguard`. It also performs a couple preparation tasks like ensuring the target
      #     WireGuard system configuration file directory exists and is assigned the proper permissions.
      #
      #     ## Creating VPN Profiles
      #
      #     More details on embedding your VPN profiles into your Install Doctor fork can be found by reading the [Secrets documentation](https://install.doctor/docs/customization/secrets#vpn-profiles).
      #
      #     ## TODO
      #
      #     * Populate Tunnelblick on macOS using the VPN profiles located in `${XDG_CONFIG_HOME:-$HOME/.config}/vpn`
      #     * For the Tunnelblick integration, ensure the username / password is populated from the `OVPN_USERNAME` and `OVPN_PASSWORD` variables
      #
      #     ## Links
      #
      #     * [VPN profile folder](https://github.com/megabyte-labs/install.doctor/blob/master/home/dot_config/vpn)
      #     * [VPN profile documentation](https://install.doctor/docs/customization/secrets#vpn-profiles)

      # TODO - Populate Tunnelblick on macOS using the .ovpn profiles located in $HOME/.config/vpn (execpt in the `openvpn` entry of software.yml)
      # along with the secrets for the protonVPN OpenVPN (check vpn-linux.tmpl)

      ### Backs up previous network settings to `/Library/Preferences/com.apple.networkextension.plist.old` before applying new VPN profiles
      if [ -f /Library/Preferences/com.apple.networkextension.plist ] && [ ! -f "/Library/Preferences/com.apple.networkextension.plist.old" ]; then
        gum log -sl info 'Backing up /Library/Preferences/com.apple.networkextension.plist to /Library/Preferences/com.apple.networkextension.plist.old'
        sudo cp -f /Library/Preferences/com.apple.networkextension.plist /Library/Preferences/com.apple.networkextension.plist.old
      else
        gum log -sl info 'The /Library/Preferences/com.apple.networkextension.plist does not exist or is already backed up to com.apple.networkextension.plist.old'
      fi

      ### Ensures the `/etc/wireguard` directory exists and has the lowest possible permission-level
      if [ ! -d /etc/wireguard ]; then
        gum log -sl info 'Creating /etc/wireguard since it does not exist yet'
        sudo mkdir -p /etc/wireguard
        sudo chmod 600 /etc/wireguard
      fi

      ### TODO - Should adding the .conf files to /etc/wireguard only be done on macOS or is this useful on Linux as well?
      ### Cycles through the `*.conf` files in `${XDG_CONFIG_HOME:-$HOME/.config}/vpn` and adds them to the `/etc/wireguard` folder
      find "${XDG_CONFIG_HOME:-$HOME/.config}/vpn" -mindepth 1 -maxdepth 1 -type f -name "*.conf" | while read WG_CONF; do
        WG_FILE="$(basename "$WG_CONF")"
        gum log -sl info 'Adding '"$WG_FILE"' to /etc/wireguard'
        sudo cp -f "$WG_CONF" "/etc/wireguard/$WG_FILE"
      done
    apk: wireguard-tools
    apt: wireguard
    brew: wireguard-tools
    dnf: wireguard-tools
    emerge: wireguard-tools
    nix: nixpkgs.wireguard-tools
    opkg: wireguard
    pacman: wireguard-tools
    port: wireguard-tools
    slackpkg: wireguard-tools
    zypper: wireguard-tools
  wireshark:
    _app: Wireshark.app
    _bin: wireshark-gui
    _desc: '[Wireshark](https://www.wireshark.org/) is a free and open-source packet analyzer. It is used for network troubleshooting, analysis, software and communications protocol development, and education. Originally named Ethereal, the project was renamed Wireshark in May 2006 due to trademark issues.'
    _docs: https://www.wireshark.org/docs/
    _github: https://github.com/wireshark/wireshark
    _home: https://www.wireshark.org/
    _name: Wireshark
    _pre:cask: |
      #!/usr/bin/env bash
      if command -v idl2wrs > /dev/null; then brew uninstall wireshark; fi
    apt: wireshark
    cask: wireshark
    choco: wireshark
    dnf:
      - wireshark
      - wireshark-cli
    flatpak: org.wireshark.Wireshark
    pacman:
      - wireshark-cli
      - wireshark-qt
  wishlist:
    _bin: wishlist
    _desc: TUI for listing definitions defined in the SSH directory
    _docs: https://github.com/charmbracelet/wishlist
    _github: https://github.com/charmbracelet/wishlist
    _home: https://charm.sh
    _name: Wishlist
    brew: charmbracelet/tap/wishlist
    nix-env: nixpkgs.wishlist
    scoop: wishlist
    yay: wishlist-bin
  wkhtmltopdf:
    _bin: wkhtmltopdf
    _desc: '[wkhtmltopdf](https://github.com/wkhtmltopdf/wkhtmltopdf) is a command line tool to render HTML into PDF and various image formats using the QT Webkit rendering engine.'
    _github: https://github.com/wkhtmltopdf/wkhtmltopdf
    _name: wkhtmltopdf
    # CentOS Stream 9 does not have a supported GitHub release available
    # ansible: professormanhattan.wkhtmltopdf
    apt: wkhtmltopdf
    cask: wkhtmltopdf
    choco: wkhtmltopdf
    github: github.com/wkhtmltopdf/wkhtmltopdf
    pacman: wkhtmltopdf
  wordops:
    _bin: wo
    _desc: Install and manage a high performance WordPress stack with a few keystrokes
    _docs: https://docs.wordops.net/
    _github: https://github.com/WordOps/WordOps
    _home: https://wordops.net/
    _name: WordOps
    script:debian: wget -qO wo wops.cc && sudo bash wo
  wordpressify:
    _bin: wordpressify
    _desc: A build system designed to automate your WordPress development workflow
    _docs: https://www.wordpressify.co/docs
    _github: https://github.com/luangjokaj/wordpressify
    _home: https://www.wordpressify.co/
    _name: wordpressify
    npm: wordpressify
  wp-cli:
    _bin: wp
    _desc: '[WP-CLI](https://wp-cli.org/) is the command-line interface for [WordPress](https://wordpress.org/). You can update plugins, configure multisite installations and much more. You can do all this without using a web browser.'
    _github: https://github.com/wp-cli/wp-cli
    _home: https://wp-cli.org/
    _name: WP-CLI
    ansible:darwin: professormanhattan.wpcli
    ansible:linux: professormanhattan.wpcli
    brew: wp-cli
  wpfui:
    _github: https://github.com/lepoco/wpfui
    _name: WPF UI
    winapp: wpf-ui/9N9LKV8R9VGM
    winget: WPF UI
  wrangler:
    _bin: wrangler
    _desc: wrangler is a CLI tool designed for folks who are interested in using Cloudflare Workers. Deploy serverless code instantly across the globe to give it exceptional performance, reliability, and scale.
    _docs: https://developers.cloudflare.com/workers/
    _github: https://github.com/cloudflare/wrangler
    _home: https://workers.cloudflare.com/
    _name: wrangler
    brew: cloudflare-wrangler2
    npm: wrangler
  wrk:
    _bin: wrk
    _desc: '[wrk](https://github.com/reconquest/wrk) is a modern HTTP benchmarking tool capable of generating significant load when run on a single multi-core CPU. It combines a multithreaded design with scalable event notification systems such as epoll and kqueue'
    _docs: https://github.com/blangel/wrk
    _github: https://github.com/wg/wrk
    _home: https://github.com/blangel/wrk
    _name: wrk
    ansible: professormanhattan.wrk
    apt: wrk
    brew: wrk
    pacman: wrk
    port: wrk
    xbps: wrk
  wsl:
    _bin: null
    _desc: Sets up Windows Subsystem For Linux
    _github: false
    _name: wsl
    ansible: professormanhattan.wsl
  x64dbg:
    _bin: x64dbg
    _desc: An open-source user mode debugger for Windows. Optimized for reverse engineering and malware analysis.
    _docs: https://github.com/x64dbg/x64dbg/wiki
    _github: https://github.com/x64dbg/x64dbg
    _home: https://x64dbg.com/
    _name: x64dbg
    choco: x64dbg.portable
    scoop: extras/x64dbg
  xcode:
    _app: Xcode.app
    _bin: xcode
    _deps:script:darwin:
      - xcodeinstall
    _desc: "[Xcode](https://developer.apple.com/xcode/) is Apple's integrated development environment for macOS, used to develop software for macOS, iOS, iPadOS, watchOS, and tvOS."
    _docs: https://developer.apple.com/documentation/xcode
    _github: false
    _home: https://developer.apple.com/xcode/
    _name: XCode
    _post: |
      #!/usr/bin/env bash
      sudo xcodebuild -license accept && sudo xcodebuild -runFirstLaunch
    mas: 497799835
    #script:darwin: |
    #  echo "NOTE - This may not work headlessly due to requirement of 2FA"
    #  ### Load AWS secrets
    #  source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/private.sh"
    #  ### Setup passwordless sudo
    #  if ! sudo cat /etc/sudoers | grep '# TEMPORARY FOR INSTALL DOCTOR XCODEINSTALL' > /dev/null; then
    #    if [ -n "$SUDO_PASSWORD" ]; then
    #      printf '%s\n' "$SUDO_PASSWORD" | sudo -p "" -S echo "$(whoami) ALL=(ALL:ALL) NOPASSWD: ALL # TEMPORARY FOR INSTALL DOCTOR XCODEINSTALL" | sudo tee -a /etc/sudoers
    #    else
    #      echo "$(whoami) ALL=(ALL:ALL) NOPASSWD: ALL # TEMPORARY FOR INSTALL DOCTOR XCODEINSTALL" | sudo tee -a /etc/sudoers
    #    fi
    #  fi
    #  ### Remove old files
    #  echo "Removing old ~/.xcodeinstall folder"
    #  rm -rf ~/.xcodeinstall
    #  ### Authenticate
    #  echo "Authenticating"
    #  xcodeinstall authenticate -s "$AWS_DEFAULT_REGION"
    #  ### Download files
    #  while read XCODE_DOWNLOAD_ITEM; do
    #    if [[ "$XCODE_DOWNLOAD_ITEM" != *"Command Line Tools"* ]]; then
    #      DOWNLOAD_ID="$(echo "$XCODE_DOWNLOAD_ITEM" | sed 's/^\[\(.*\)\] .*/\1/')"
    #      echo "Downloading $XCODE_DOWNLOAD_ITEM"
    #      echo "$DOWNLOAD_ID" | xcodeinstall download -s "$AWS_DEFAULT_REGION"
    #    fi
    #  done < <(xcodeinstall list -s "$AWS_DEFAULT_REGION" | grep --invert-match 'Release Candidate' | grep --invert-match ' beta ' | grep ' Xcode \d\d ')
    #  ### Install Xcode
    #  echo "Installing Xcode"
    #  xcodeinstall install --name "$(basename "$(find ~/.xcodeinstall/download -maxdepth 1 -name "*.xip")")"
    #  ### Install Command Line Tools
    #  # Commentted out because it is already installed by xcode-select in the provision.sh script
    #  # xcodeinstall install --name "$(basename "$(find ~/.xcodeinstall/download -maxdepth 1 -name "*Command Line Tools*")")"
    #  ### Install Additional Tools
    #  echo "Installing Additional Tools"
    #  while read ADDITIONAL_TOOLS; do
    #    hdiutil attach "$ADDITIONAL_TOOLS"
    #    rm -rf "/Applications/Additional Tools"
    #    cp -rf "/Volumes/Additional Tools" "/Applications/Additional Tools"
    #    hdiutil detach "$(find /Volumes -name "Additional Tools")"
    #  done < <(find ~/.xcodeinstall/download -name "Additional Tools*")
    #  ### Install Font Tools
    #  echo "Installing Font Tools"
    #  while read FONT_TOOLS; do
    #    hdiutil attach "$FONT_TOOLS"
    #    cd "$(find /Volumes -maxdepth 1 -name "*Font Tools*")"
    #    sudo installer -pkg "$(find . -maxdepth 1 -name "*Font Tools*.pkg")" -target /
    #    cd / && hdiutil detach "$(find /Volumes -maxdepth 1 -name "*Font Tools*")"
    #  done < <(find ~/.xcodeinstall/download -name "Font Tools*")
    #  ### Remove cache / downloaded files
    #  rm -rf ~/.xcodeinstall
    #  ### Remove passwordless sudo
    #  if ! command -v gsed > /dev/null; then
    #    brew install gnu-sed
    #  fi
    #  sudo gsed -i '/# TEMPORARY FOR INSTALL DOCTOR XCODEINSTALL/d' /etc/sudoers
  xcodeinstall:
    _bin: xcodeinstall
    _github: https://github.com/sebsto/xcodeinstall
    _name: Xcode Install
    brew: sebsto/macos/xcodeinstall
  xcodes:
    _bin: xcodes
    _desc: CLI utility to download, install, and switch to alternate versions of Xcode
    _docs: https://github.com/XcodesOrg/xcodes
    _github: https://github.com/XcodesOrg/xcodes
    _home: https://github.com/XcodesOrg/xcodes
    _name: Xcodes
    brew:darwin: xcodesorg/made/xcodes
  xcodes-app:
    _app: Xcodes.app
    _bin: null
    _desc: macOS desktop app that allows you to download, install, and switch to alternate versions of Xcode
    _docs: https://github.com/XcodesOrg/XcodesApp
    _github: https://github.com/XcodesOrg/XcodesApp
    _home: https://github.com/XcodesOrg/XcodesApp
    _name: Xcodes App
    cask: xcodes
  xcpretty:
    _bin: xcpretty
    _github: https://github.com/xcpretty/xcpretty
    _name: xcpretty
    gem:darwin: xcpretty
  xdotool:
    _bin: xdotool
    _github: https://github.com/jordansissel/xdotool
    _name: xdotool
    _post:brew:darwin: |
      #!/usr/bin/env bash
      defaults write org.x.X11 enable_test_extensions -boolean true
    apt: xdotool
    brew: xdotool
    dnf: xdotool
    pacman: xdotool
    pkg-freebsd: xdotool
    port: xdotool
    zypper: xdotool
  xh:
    _bin: xh
    _github: https://github.com/ducaale/xh
    _name: XH
    apk: xh
    apt: xh
    brew: xh
    cargo: xh
    choco: xh
    nix-env: nixpkgs.xh
    pacman: xh
    pkg-android: xh
    pkg-freebsd: xh
    scoop: xh
  xhyve:
    _bin: xhyve
    _github: https://github.com/machyve/xhyve
    _name: xhyve
    _notes: Has not been modified for several years and has been disabled on Homebrew
    brew:darwin: xhyve
    port: xhyve
  xpanes:
    _bin: xpanes
    _github: https://github.com/greymd/tmux-xpanes
    _name: xpanes
    apt: https://github.com/greymd/tmux-xpanes/releases/download/v4.1.4/tmux-xpanes_v4.1.4.deb
    brew: tmux-xpanes
    dnf: xpanes
    script: curl -sSL --compressed https://raw.githubusercontent.com/greymd/tmux-xpanes/v4.1.4/bin/xpanes > /tmp/xpanes && sudo mv /tmp/xpanes /usr/local/bin/xpanes
  xpra:
    _app: Xpra.app
    _bin: xpra
    _github: https://github.com/Xpra-org/xpra
    _name: xpra
    cask: xpra
    choco: xpra
    exe: https://xpra.org/dists/windows/Xpra-x86_64_Setup.exe
    flatpak: org.xpra.xpra
    msi: https://xpra.org/dists/windows/Xpra-x86_64.msi
  xrdp:
    _bin: xrdp
    _github: https://github.com/neutrinolabs/xrdp
    _home: http://www.xrdp.org/
    _name: xrdp
    _note: Should work like professormanhattan.remotedesktop
    _ports:
      - port: 3389
        proto: tcp
    _post: |
      #!/usr/bin/env bash
      sudo adduser xrdp ssl-cert
    _service: xrdp
    _service:yay:
      - xrdp
      - xrdp-sesman
    apt: xrdp
    dnf: xrdp
    pacman: xrdp
    yay: xrdp
    zypper: xrdp
  xsv:
    _bin: xsv
    _github: https://github.com/BurntSushi/xsv
    _name: xsv
    brew: xsv
    cargo: xsv
    nix-env: xsv
    port: xsv
  xurls:
    _bin: xurls
    _desc: Extract urls from text
    _github: https://github.com/mvdan/xurls
    _name: xurls
    brew: xurls
    go: mvdan.cc/xurls/v2/cmd/xurls@latest
  xxh:
    _bin: xxh
    _github: https://github.com/xxh/xxh
    _name: xxh
    brew: xxh
    pipx: xxh-xxh
    port: xxh
  xz:
    _bin: xz
    _github: https://github.com/xz-mirror/xz
    _name: xz
    apk: xz
    apt: xz
    brew: xz
    choco: xz
    dnf: xz
    pacman: xz
    port: xz
    scoop: xz
  yamllint:
    _bin: yamllint
    _desc: A linter for YAML files. yamllint does not only check for syntax validity, but also for weirdnesses like key repetition and cosmetic problems such as lines length, trailing spaces, indentation, etc.
    _github: https://github.com/adrienverge/yamllint
    _name: yamllint
    _service: null
    brew: yamllint
    pipx: yamllint
  yank:
    _bin: yank
    _bin:apt: yank-cli
    _desc: '[yank](https://github.com/mptre/yank) is a terminal agnostic solution which allows copying output from Termial easily, without the need to use Terminal multiplexers.'
    _github: https://github.com/mptre/yank
    _name: yank
    ansible: professormanhattan.yank
    apt: yank
    brew: yank
    choco: win32yank
    dnf: yank
    nix: yank
    pacman: yank
    pkg-freebsd: yank
    pkg_add: yank
    port: yank
    scoop: win32yank
    zypper: yank
  yapf:
    _bin: yapf
    _desc: A formatter for Python files maintained by Google
    _docs: false
    _github: https://github.com/google/yapf
    _home: false
    _name: YAPF
    pipx: yapf
  yarn:
    _bin: yarn
    _desc: "[Yarn](https://yarnpkg.com/) is a relatively new and open source JavaScript package manager developed by Facebook. Yarn is fully compatible with the npm registry (i.e. [npmjs.com](https://www.npmjs.com/)) and can work alongside npm, but it's aim it to be a safer, more secure and more reliable alternative."
    _docs: https://yarnpkg.com/getting-started
    _github: https://github.com/yarnpkg/berry
    _home: https://yarnpkg.com/
    _name: Yarn
    _preload: true
    ansible: professormanhattan.yarn
    brew: yarn
    choco: yarn
    npm: yarn
    pacman: yarn
    port: yarn
    scoop: yarn
    script: curl -o- -L https://yarnpkg.com/install.sh | bash
  yarnhook:
    _bin: yarnhook
    _desc: yarnhook keeps your node_modules up-to-date when your yarn.lock, package-lock.json or shrinkwrap.yaml changes due to git operations like checkout, merge, rebase, pull etc.
    _github: https://github.com/frontsideair/yarnhook
    _name: Yarnhook
    npm: yarnhook
  yj:
    _bin: yj
    _desc: CLI program that allows you to convert between YAML, TOML, JSON, and HCL.
    _docker: docker run sclevine/yj
    _docs: https://github.com/sclevine/yj
    _github: https://github.com/sclevine/yj
    _home: https://github.com/sclevine/yj
    _name: YJ
    brew: yj
    go: github.com/sclevine/yj/v5@v5.1.0
  you-get:
    _bin: you-get
    _github: https://github.com/soimort/you-get
    _name: You-Get
    brew: you-get
    pipx: you-get
    pkg-freebsd: you-get
  youtube-dl:
    _bin: youtube-dl
    _desc: '[youtube-dl](https://github.com/ytdl-org/youtube-dl) is an open-source download manager for video and audio from YouTube and over 1000 other video hosting websites. It is released under the Unlicense software license and is one of the most popular projects on GitHub.'
    _docs: https://github.com/ytdl-org/youtube-dl/blob/master/README.md#readme
    _github: https://github.com/ytdl-org/youtube-dl
    _home: https://youtube-dl.org/
    _name: youtube-dl
    ansible: professormanhattan.youtubedl
    brew: youtube-dl
    pipx: youtube-dl
    port: youtube-dl
  youtube-music:
    _app: YouTube Music.app
    _desc: YouTube Music desktop app bundled with custom plugins (and built-in ad blocker / downloader)
    _github: https://github.com/th-ch/youtube-music
    _home: https://th-ch.github.io/youtube-music/
    _todo: Might have to add _post cask xattr -cr /Applications/YouTube\ Music.app to fix permissions
    appimage: th-ch/youtube-music
    apt: https://github.com/th-ch/youtube-music/releases/download/v1.19.0/youtube-music_1.19.0_amd64.deb
    exe: https://github.com/th-ch/youtube-music/releases/download/v1.19.0/YouTube-Music-Setup-1.19.0.exe
    scoop: extras/youtube-music
    script:darwin: |
      DL_URL="https://github.com/th-ch/youtube-music/releases/download/v1.20.0/YouTube-Music-1.20.0.dmg"
      if [ $(arch) = 'arm64' ]; then
        DL_URL="https://github.com/th-ch/youtube-music/releases/download/v1.20.0/YouTube-Music-1.20.0-arm64.dmg"
      fi
      echo "Downloading YouTube Music" && curl -sSL "$DL_URL" > /tmp/YouTube-Music.dmg
      echo "Attaching volume" && sudo hdiutil attach /tmp/YouTube-Music.dmg
      echo "Copying to /Applications"
      if [ -d "/Volumes/YouTube Music 1.20.0" ]; then
        sudo cp -R "/Volumes/YouTube Music 1.20.0/YouTube Music.app" /Applications
        echo "Detaching" && sudo hdiutil detach "/Volumes/YouTube Music 1.20.0"
      elif [ -d "/Volumes/YouTube Music 1.20.0-arm64" ]; then
        sudo cp -R "/Volumes/YouTube Music 1.20.0-arm64/YouTube Music.app" /Applications
        echo "Detaching" && sudo hdiutil detach "/Volumes/YouTube Music 1.20.0-arm64"
      fi
      echo "Removing /tmp/YouTube-Music.dmg" && rm -f /tmp/YouTube-Music.dmg
    winget: th-ch.YouTubeMusic
    yay: youtube-music-bin
  yq:
    _bin: yq
    _desc: '[yq](https://github.com/mikefarah/yq) is a free, open-source command-line YAML processor. It aims to be like [jq](https://gitlab.com/megabyte-labs/ansible-roles/jq) except for YAML files. It can read and write values to YAML files.'
    _docs: https://mikefarah.gitbook.io/yq/how-it-works
    _github: https://github.com/mikefarah/yq
    _home: https://mikefarah.gitbook.io/yq/
    _name: yq
    _preload: true
    ansible: professormanhattan.yq
    apk: yq
    brew: yq
    choco: yq
    github: github.com/stedolan/jq
    go: github.com/mikefarah/yq/v4@latest
    snap: yq
  yt-dlp:
    _bin: yt-dlp
    _github: https://github.com/yt-dlp/yt-dlp/wiki/Installation
    _name: YouTube Download
    brew: yt-dlp
    choco: yt-dlp
    pacman: yt-dlp
    pipx: yt-dlp
    port: yt-dlp
    scoop: yt-dlp
    winget: yt-dlp
  yubikey-agent:
    _bin: yubikey-agent
    _docs: https://github.com/FiloSottile/yubikey-agent
    _github: https://github.com/FiloSottile/yubikey-agent
    _home: https://github.com/FiloSottile/yubikey-agent
    _name: OpenSSL
    _service: yubikey-agent
    _todo: Experiment with this to see if it is worthwhile adding to the stack
    brew: yubikey-agent
  yubikey-authenticator:
    _app: Yubico Authenticator.app
    _bin: yubioath
    _docs: The Yubico Authenticator app works across Windows, macOS, Linux, iOS and Android. Get the same set of codes across all Yubico Authenticator apps for desktops as well as for all leading mobile platforms. Portable credentials across devices.
    _home: https://www.yubico.com/products/yubico-authenticator/
    _github: https://github.com/Yubico/yubioath-flutter
    _name: Yubico Authenticator
    cask: yubico-authenticator
    choco: yubico-authenticator
    flatpak: com.yubico.yubioath
    mas: 1497506650
    script:darwin: curl -sSL https://developers.yubico.com/yubioath-flutter/Releases/yubico-authenticator-latest-mac.dmg > "/tmp/Yubico Authenticator.dmg" && hdiutil attach "/tmp/Yubico Authenticator.dmg" &&  sudo cp -R "/Volumes/Yubico Authenticator/Yubico Authenticator.app" /Applications && sudo hdiutil detach "/Volumes/Yubico Authenticator" && rm -f "/tmp/Yubico Authenticator.dmg"
  yubikey-manager:
    _bin: ykman
    _desc: Use the YubiKey Manager to configure FIDO2, OTP and PIV functionality on your YubiKey on Windows, macOS, and Linux operating systems.
    _github: https://github.com/Yubico/yubikey-manager
    _home: https://www.yubico.com/support/download/yubikey-manager/
    _name: Yubikey Manager
    brew: ykman
    dnf:fedora: yubikey-manager
    pacman: yubikey-manager
    pipx: yubikey-manager
  yubikey-manager-qt:
    _app: YubiKey Manager.app
    _bin: yubikey-manager-qt
    _desc: Cross-platform application for configuring any YubiKey over all USB interfaces.
    _github: https://github.com/Yubico/yubikey-manager-qt
    _home: https://developers.yubico.com/yubikey-manager-qt/
    _name: YubiKey Manager
    appimage: Yubico/yubikey-manager-qt
    cask: yubico-yubikey-manager
    choco: yubikey-manager
    dnf:fedora: yubikey-manager-qt
    pacman: yubikey-manager-qt
    scoop: yubikey-manager-qt
  zap:
    _bin: zap
    _desc: Delightful AppImage package manager
    _docs: https://zap.srev.in/
    _github: https://github.com/srevinsaju/zap
    _home: https://zap.srev.in/
    _name: Zap
    _preload: true
    ansible:linux: professormanhattan.zap
    binary:linux: https://github.com/srevinsaju/zap/releases/download/continuous/zap-amd64
    script:linux: curl https://raw.githubusercontent.com/srevinsaju/zap/main/install.sh | sudo bash -s
  zaproxy:
    _app: ZAP.app
    _bin: zaproxy
    _desc: The world’s most widely used web app scanner. Free and open source. Actively maintained by a dedicated international team of volunteers. A GitHub Top 1000 project.
    _docs: https://www.zaproxy.org/docs/
    _github: https://github.com/zaproxy/zaproxy
    _home: https://www.zaproxy.org/
    _name: OWASP ZAP
    cask: zap
    choco: zap
    flatpak: org.zaproxy.ZAP
    pkg-freebsd: zaproxy
    scoop: zaproxy
    snap: zaproxy --classic
  zenity:
    _bin: zenity
    _github: https://github.com/ncruces/zenity
    _name: Zenity
    brew: ncruces/tap/zenity
    go: github.com/ncruces/zenity/cmd/zenity@latest
    scoop: https://ncruces.github.io/scoop/zenity.json
  zola:
    _bin: zola
    _desc: A static site generator built with Rust
    _github: https://github.com/getzola/zola
    apk: zola
    brew: zola
    choco: zola
    flatpak: org.getzola.zola
    pacman: zola
    pkg-freebsd: zola
    pkg_add: zola
    pkgin: zola
    port: zola
    scoop: zola
    snap: zola
    xbps: zola
  zoom:
    _app: zoom.us.app
    _bin: zoom
    _desc: '[Zoom](https://zoom.us/) is a videotelephony software program developed by Zoom Video Communications. This role installs Zoom on nearly any platform. The Zoom free plan provides a video chatting service that allows up to 100 participants concurrently, with a 40-minute time restriction.'
    _docs: https://support.zoom.us/hc/en-us/categories/200101697-Getting-Started-with-Zoom
    _github: Not open-source
    _home: https://zoom.us/
    _name: Zoom
    ansible: professormanhattan.zoom
    cask: zoom
    choco: zoom
    flatpak: us.zoom.Zoom
    snap: zoom
    yay: zoom
  zoxide:
    _bin: zoxide
    _desc: '[zoxide](https://github.com/ajeetdsouza/zoxide) is a blazing fast replacement for your cd command, inspired by z and autojump'
    _github: https://github.com/ajeetdsouza/zoxide
    _name: zoxide
    _preload: true
    ansible: professormanhattan.zoxide
    brew: zoxide
  zsh:
    _bin: zsh
    _desc: '[Oh My Zsh](https://ohmyz.sh/) is a delightful, open source, community-driven framework for managing your Zsh configurations. It comes bundled with thousands of helpful functions, helpers, plugins, themes, and a few things that make you shout oh my zsh! This role also installs some CLI tools that accompany Oh My Zsh! to make it even more amazing.'
    _github: https://github.com/zsh-users/zsh
    _name: Zsh
    _preload: true
    ansible:darwin: professormanhattan.zsh
    ansible:linux: professormanhattan.zsh
    apt: zsh
    brew: zsh
    dnf: zsh
    pacman: zsh
    port: zsh
  zsh-completions:
    _github: https://github.com/zsh-users/zsh-completions
    _name: ZSH Completions
    brew: zsh-completions
  zx:
    _bin: zx
    _desc: Bash is great, but when it comes to writing more complex scripts, many people prefer a more convenient programming language. JavaScript is a perfect choice, but the Node.js standard library requires additional hassle before using. The zx package provides useful wrappers around child_process, escapes arguments and gives sensible defaults.
    _github: https://github.com/google/zx
    _name: zx
    _preload: true
    brew: zx
    npm: zx