---
title: Software Installation
description: Installs the list of software that correlates to the software group that was chosen.
sidebar_label: 12 Software Installation
slug: /scripts/after/run_onchange_after_12-install-packages.sh.tmpl
githubLocation: https://github.com/megabyte-labs/install.doctor/blob/master/home/.chezmoiscripts/universal/run_onchange_after_12-install-packages.sh.tmpl
scriptLocation: https://github.com/megabyte-labs/install.doctor/raw/master/home/.chezmoiscripts/universal/run_onchange_after_12-install-packages.sh.tmpl
repoLocation: home/.chezmoiscripts/universal/run_onchange_after_12-install-packages.sh.tmpl
---
# Software Installation

Installs the list of software that correlates to the software group that was chosen.

## Overview

This script initializes the installation process that handles the bulk of the software package installations.



## Source Code

```
#!/usr/bin/env bash
# @file Software Installation
# @brief Installs the list of software that correlates to the software group that was chosen.
# @description
#     This script initializes the installation process that handles the bulk of the software package installations.

{{ includeTemplate "universal/profile" }}
{{ includeTemplate "universal/logg" }}
{{- $softwareGroup := nospace (cat "_" .host.softwareGroup) }}
{{- $softwareList := list (index .softwareGroups $softwareGroup | toString | replace "[" "" | replace "]" "") | uniq | join " " }}

# software: {{ $softwareList }}
# software map: {{ include (joinPath .chezmoi.homeDir ".local" "share" "chezmoi" "software.yml") | sha256sum }}

if command -v install-program > /dev/null; then
  if command -v zx > /dev/null; then
    logg info 'Installing packages defined in .chezmoidata.yaml under the .softwareGroups key'
    logg info 'Installing: {{ $softwareList }}'
    # Ask for the administrator password upfront
    logg info 'A sudo password may be required for some of the installations'
    sudo echo "Sudo access granted."
    export DEBIAN_FRONTEND=noninteractive
    export HOMEBREW_NO_ENV_HINTS=true
    if ! command -v gcc-11; then
      if command -v gcc; then
        logg info 'gcc-11 command missing. Symlinking to gcc'
        sudo ln -s "$(which gcc)" /usr/local/bin/gcc-11
      else
        logg warn 'gcc either needs to be added to the PATH or it is missing'
      fi
    fi
    if [ -f "$HOME/.bashrc" ]; then
      . "$HOME/.bashrc"
    else
      logg warn 'No ~/.bashrc file to import before running install-program'
    fi
    export LC_ALL="en_US.UTF-8"
    logg info 'Printing environment variables for GO'
    env | grep GO
    install-program {{ $softwareList }}
    # TODO - Figure out how to configure no logs to print to ~/.ansible.log -- should be printing to the value specified in the ansible.cfg
    rm -rf "$HOME/.ansible.log"
  else
    logg error 'zx is not available'
  fi
else
  logg error 'install-program is not in the PATH. It should be located in ~/.local/bin.'
fi
```
