diff --git a/helper_scripts/packages.sh b/helper_scripts/packages.sh new file mode 100644 index 0000000000000000000000000000000000000000..a1f60074309c20c0b43989129dac4dda0c5e11df --- /dev/null +++ b/helper_scripts/packages.sh @@ -0,0 +1,101 @@ +SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}") + +source "$SCRIPT_DIR/package_manager_identifiers.sh" + +# APT packages +APT_GIT_PACKAGE="$APT_IDENTIFIER:git" +APT_DOCKER_CE_PACKAGE="$APT_IDENTIFIER:docker-ce" +APT_VIRTUALBOX_PACKAGE="$APT_IDENTIFIER:virtualbox" +APT_VLC_PACKAGE="$APT_IDENTIFIER:vlc" +APT_NET_TOOLS_PACKAGE="$APT_IDENTIFIER:net-tools" +APT_DL_DRIVER_PACKAGE="$APT_IDENTIFIER:dl-driver" +APT_PROTONVPN_PACKAGE="$APT_IDENTIFIER:proton-vpn" +APT_WIREGUARDVPN_PACKAGE="$APT_IDENTIFIER:wireguard" +APT_DCONF_EDITOR="$APT_IDENTIFIER:dconf-editor" + +APT_GIT_PACKAGE_DISPLAY_NAME="Git" +APT_DOCKER_CE_PACKAGE_DISPLAY_NAME="Docker Community Edition" +APT_VIRTUALBOX_PACKAGE_DISPLAY_NAME="VirtualBox" +APT_VLC_PACKAGE_DISPLAY_NAME="VLC Media Player" +APT_NET_TOOLS_PACKAGE_DISPLAY_NAME="net-tools" +APT_DL_DRIVER_PACKAGE_DISPLAY_NAME="DisplayLink Driver" +APT_PROTONVPN_PACKAGE_DISPLAY_NAME="ProtonVPN" +APT_WIREGUARDVPN_PACKAGE_DISPLAY_NAME="WireGuard VPN" +APT_DCONF_EDITOR_DISPLAY_NAME="DConf Editor" + +# Snap packages +SNAP_VSCODE_PACKAGE="$SNAP_IDENTIFIER:vscode" +SNAP_RIDER_PACKAGE="$SNAP_IDENTIFIER:rider" +SNAP_KUBECTL_PACKAGE="$SNAP_IDENTIFIER:kubectl" +SNAP_FIREFOX_PACKAGE="$SNAP_IDENTIFIER:firefox" + +SNAP_VSCODE_PACKAGE_DISPLAY_NAME="Visual Studio Code" +SNAP_RIDER_PACKAGE_DISPLAY_NAME="JetBrains Rider" +SNAP_KUBECTL_PACKAGE_DISPLAY_NAME="kubectl" +SNAP_FIREFOX_PACKAGE_DISPLAY_NAME="Firefox" + +# Flatpak packages +FLATPAK_IDEA_COMMUNITY_PACKAGE="$FLATPAK_IDENTIFIER:intellij-idea-community" +FLATPAK_WEBSTORM_PACKAGE="$FLATPAK_IDENTIFIER:webstorm" +FLATPAK_ANDROID_STUDIO_PACKAGE="$FLATPAK_IDENTIFIER:android-studio" +FLATPAK_OBSIDIAN_PACKAGE="$FLATPAK_IDENTIFIER:obsidian" +FLATPAK_SPOTIFY_PACKAGE="$FLATPAK_IDENTIFIER:spotify" +FLATPAK_GIMP_PACKAGE="$FLATPAK_IDENTIFIER:gimp" +FLATPAK_FLAMESHOT_PACKAGE="$FLATPAK_IDENTIFIER:flameshot" +FLATPAK_NEXTCLOUD_CLIENT_PACKAGE="$FLATPAK_IDENTIFIER:nextcloud-client" +FLATPAK_FLATSEAL_PACKAGE="$FLATPAK_IDENTIFIER:flatseal" +FLATPAK_REMMINA_PACKAGE="$FLATPAK_IDENTIFIER:remmina" + +FLATPAK_IDEA_COMMUNITY_PACKAGE_DISPLAY_NAME="JetBrains IntelliJ IDEA Community" +FLATPAK_WEBSTORM_PACKAGE_DISPLAY_NAME="JetBrains WebStorm" +FLATPAK_ANDROID_STUDIO_PACKAGE_DISPLAY_NAME="Android Studio" +FLATPAK_OBSIDIAN_PACKAGE_DISPLAY_NAME="Obsidian" +FLATPAK_SPOTIFY_PACKAGE_DISPLAY_NAME="Spotify" +FLATPAK_GIMP_PACKAGE_DISPLAY_NAME="GIMP" +FLATPAK_FLAMESHOT_PACKAGE_DISPLAY_NAME="Flameshot" +FLATPAK_NEXTCLOUD_CLIENT_PACKAGE_DISPLAY_NAME="Nextcloud Client" +FLATPAK_FLATSEAL_PACKAGE_DISPLAY_NAME="Flatseal" +FLATPAK_REMMINA_PACKAGE_DISPLAY_NAME="Remmina" + +# Raw packages +RAW_GITEXTENSIONS_PACKAGE="$RAW_IDENTIFIER:gitextensions" +RAW_K3D_PACKAGE="$RAW_IDENTIFIER:k3d" + +RAW_GITEXTENSIONS_PACKAGE_DISPLAY_NAME="GitExtensions" +RAW_K3D_PACKAGE_DISPLAY_NAME="k3d" + +# Mainline kernel +MAINLINE_KERNEL_PACKAGE="$MAINLINE_KERNEL_IDENTIFIER" + +MAINLINE_KERNEL_PACKAGE_DISPLAY_NAME="Mainline Kernel" + +# Packages dictionary +declare -A PACKAGES +PACKAGES=( + ["$SNAP_VSCODE_PACKAGE"]="$SNAP_VSCODE_PACKAGE_DISPLAY_NAME" + ["$FLATPAK_IDEA_COMMUNITY_PACKAGE"]="$FLATPAK_IDEA_COMMUNITY_PACKAGE_DISPLAY_NAME" + ["$SNAP_RIDER_PACKAGE"]="$SNAP_RIDER_PACKAGE_DISPLAY_NAME" + ["$FLATPAK_WEBSTORM_PACKAGE"]="$FLATPAK_WEBSTORM_PACKAGE_DISPLAY_NAME" + ["$FLATPAK_ANDROID_STUDIO_PACKAGE"]="$FLATPAK_ANDROID_STUDIO_PACKAGE_DISPLAY_NAME" + ["$APT_GIT_PACKAGE"]="$APT_GIT_PACKAGE_DISPLAY_NAME" + ["$RAW_GITEXTENSIONS_PACKAGE"]="$RAW_GITEXTENSIONS_PACKAGE_DISPLAY_NAME" + ["$APT_DOCKER_CE_PACKAGE"]="$APT_DOCKER_CE_PACKAGE_DISPLAY_NAME" + ["$RAW_K3D_PACKAGE"]="$RAW_K3D_PACKAGE_DISPLAY_NAME" + ["$SNAP_KUBECTL_PACKAGE"]="$SNAP_KUBECTL_PACKAGE_DISPLAY_NAME" + ["$FLATPAK_OBSIDIAN_PACKAGE"]="$FLATPAK_OBSIDIAN_PACKAGE_DISPLAY_NAME" + ["$FLATPAK_SPOTIFY_PACKAGE"]="$FLATPAK_SPOTIFY_PACKAGE_DISPLAY_NAME" + ["$FLATPAK_GIMP_PACKAGE"]="$FLATPAK_GIMP_PACKAGE_DISPLAY_NAME" + ["$APT_VIRTUALBOX_PACKAGE"]="$APT_VIRTUALBOX_PACKAGE_DISPLAY_NAME" + ["$APT_VLC_PACKAGE"]="$APT_VLC_PACKAGE_DISPLAY_NAME" + ["$APT_NET_TOOLS_PACKAGE"]="$APT_NET_TOOLS_PACKAGE_DISPLAY_NAME" + ["$FLATPAK_FLAMESHOT_PACKAGE"]="$FLATPAK_FLAMESHOT_PACKAGE_DISPLAY_NAME" + ["$APT_DL_DRIVER_PACKAGE"]="$APT_DL_DRIVER_PACKAGE_DISPLAY_NAME" + ["$FLATPAK_NEXTCLOUD_CLIENT_PACKAGE"]="$FLATPAK_NEXTCLOUD_CLIENT_PACKAGE_DISPLAY_NAME" + ["$APT_PROTONVPN_PACKAGE"]="$APT_PROTONVPN_PACKAGE_DISPLAY_NAME" + ["$APT_WIREGUARDVPN_PACKAGE"]="$APT_WIREGUARDVPN_PACKAGE_DISPLAY_NAME" + ["$FLATPAK_FLATSEAL_PACKAGE"]="$FLATPAK_FLATSEAL_PACKAGE_DISPLAY_NAME" + ["$FLATPAK_REMMINA_PACKAGE"]="$FLATPAK_REMMINA_PACKAGE_DISPLAY_NAME" + ["$SNAP_FIREFOX_PACKAGE"]="$SNAP_FIREFOX_PACKAGE_DISPLAY_NAME" + ["$MAINLINE_KERNEL_PACKAGE"]="$MAINLINE_KERNEL_PACKAGE_DISPLAY_NAME" + ["$APT_DCONF_EDITOR"]="$APT_DOCKER_CE_PACKAGE_DISPLAY_NAME" +) diff --git a/install.sh b/install.sh index ee2047b28895635177c8cf2172a365f313d76fdb..039bd79f03830ff1765c73028df497bab53c7b25 100644 --- a/install.sh +++ b/install.sh @@ -3,73 +3,7 @@ set -e INSTALLER_DIR=$(dirname "${BASH_SOURCE[0]}") HELPER_SCRIPTS_DIR="$INSTALLER_DIR/helper_scripts" -source "$HELPER_SCRIPTS_DIR/package_manager_identifiers.sh" - -# APT packages -APT_GIT_PACKAGE="$APT_IDENTIFIER:git" -APT_DOCKER_CE_PACKAGE="$APT_IDENTIFIER:docker-ce" -APT_VIRTUALBOX_PACKAGE="$APT_IDENTIFIER:virtualbox" -APT_VLC_PACKAGE="$APT_IDENTIFIER:vlc" -APT_NET_TOOLS_PACKAGE="$APT_IDENTIFIER:net-tools" -APT_DL_DRIVER_PACKAGE="$APT_IDENTIFIER:dl-driver" -APT_PROTONVPN_PACKAGE="$APT_IDENTIFIER:proton-vpn" -APT_WIREGUARDVPN_PACKAGE="$APT_IDENTIFIER:wireguard" -APT_DCONF_EDITOR="$APT_IDENTIFIER:dconf-editor" - -# Snap packages -SNAP_VSCODE_PACKAGE="$SNAP_IDENTIFIER:vscode" -SNAP_RIDER_PACKAGE="$SNAP_IDENTIFIER:rider" -SNAP_KUBECTL_PACKAGE="$SNAP_IDENTIFIER:kubectl" -SNAP_FIREFOX_PACKAGE="$SNAP_IDENTIFIER:firefox" - -# Flatpak packages -FLATPAK_IDEA_COMMUNITY_PACKAGE="$FLATPAK_IDENTIFIER:intellij-idea-community" -FLATPAK_WEBSTORM_PACKAGE="$FLATPAK_IDENTIFIER:webstorm" -FLATPAK_ANDROID_STUDIO_PACKAGE="$FLATPAK_IDENTIFIER:android-studio" -FLATPAK_OBSIDIAN_PACKAGE="$FLATPAK_IDENTIFIER:obsidian" -FLATPAK_SPOTIFY_PACKAGE="$FLATPAK_IDENTIFIER:spotify" -FLATPAK_GIMP_PACKAGE="$FLATPAK_IDENTIFIER:gimp" -FLATPAK_FLAMESHOT_PACKAGE="$FLATPAK_IDENTIFIER:flameshot" -FLATPAK_NEXTCLOUD_CLIENT_PACKAGE="$FLATPAK_IDENTIFIER:nextcloud-client" -FLATPAK_FLATSEAL_PACKAGE="$FLATPAK_IDENTIFIER:flatseal" -FLATPAK_REMMINA_PACKAGE="$FLATPAK_IDENTIFIER:remmina" - -# Raw packages -RAW_GITEXTENSIONS_PACKAGE="$RAW_IDENTIFIER:gitextensions" -RAW_K3D_PACKAGE="$RAW_IDENTIFIER:k3d" - -# Mainline kernel -MAINLINE_KERNEL_PACKAGE="$MAINLINE_KERNEL_IDENTIFIER" - -declare -A PACKAGES -PACKAGES=( - ["$SNAP_VSCODE_PACKAGE"]="VS Code" - ["$FLATPAK_IDEA_COMMUNITY_PACKAGE"]="JetBrains IntelliJ IDEA Community" - ["$SNAP_RIDER_PACKAGE"]="JetBrains Rider" - ["$FLATPAK_WEBSTORM_PACKAGE"]="JetBrains WebStorm" - ["$FLATPAK_ANDROID_STUDIO_PACKAGE"]="Android Studio" - ["$APT_GIT_PACKAGE"]="Git" - ["$RAW_GITEXTENSIONS_PACKAGE"]="GitExtensions" - ["$APT_DOCKER_CE_PACKAGE"]="Docker Community Edition" - ["$RAW_K3D_PACKAGE"]="k3d" - ["$SNAP_KUBECTL_PACKAGE"]="kubectl" - ["$FLATPAK_OBSIDIAN_PACKAGE"]="Obsidian" - ["$FLATPAK_SPOTIFY_PACKAGE"]="Spotify" - ["$FLATPAK_GIMP_PACKAGE"]="GIMP" - ["$APT_VIRTUALBOX_PACKAGE"]="VirtualBox" - ["$APT_VLC_PACKAGE"]="VLC Media Player" - ["$APT_NET_TOOLS_PACKAGE"]="net-tools" - ["$FLATPAK_FLAMESHOT_PACKAGE"]="Flameshot" - ["$APT_DL_DRIVER_PACKAGE"]="DisplayLink Driver" - ["$FLATPAK_NEXTCLOUD_CLIENT_PACKAGE"]="Nextcloud Client" - ["$APT_PROTONVPN_PACKAGE"]="ProtonVPN" - ["$APT_WIREGUARDVPN_PACKAGE"]="WireGuard VPN" - ["$FLATPAK_FLATSEAL_PACKAGE"]="Flatseal" - ["$FLATPAK_REMMINA_PACKAGE"]="Remmina" - ["$SNAP_FIREFOX_PACKAGE"]="Firefox" - ["$MAINLINE_KERNEL_PACKAGE"]="Mainline Kernel" - ["$APT_DCONF_EDITOR"]="DConf Editor" -) +source "$HELPER_SCRIPTS_DIR/packages.sh" ORDERED_PACKAGES=( # Needed when order matters "$SNAP_VSCODE_PACKAGE" diff --git a/playbooks/setup.yaml b/playbooks/setup.yaml index 8ff63d9a2641a1f95e8f9c54866a6ea56d47d078..a064266f930bfc3cc0c45ff517d7e00e098451a8 100644 --- a/playbooks/setup.yaml +++ b/playbooks/setup.yaml @@ -3,6 +3,7 @@ dconf_config_path: "" vscode_config_path: "" vscode_extensions_path: "" + git_config_path: "" swap_sizes: "" tasks: @@ -16,8 +17,15 @@ loop: - ../tasks/setup/vscode_settings.yaml - ../tasks/setup/vscode_extensions.yaml - + - name: Include Swap Tasks include_tasks: "{{ item }}" loop: - ../tasks/setup/swap.yaml + + - name: Include Git Tasks + vars: + git_user_config_path: "{{ ansible_env.HOME }}/.gitconfig" + include_tasks: "{{ item }}" + loop: + - ../tasks/setup/git.yaml diff --git a/setup.sh b/setup.sh index 5597e063555da1923a082c730c3a66dcfbd21461..12a82afb3182911f87393924cad3db311e2698db 100644 --- a/setup.sh +++ b/setup.sh @@ -3,25 +3,66 @@ set -e INSTALLER_DIR=$(dirname "${BASH_SOURCE[0]}") HELPER_SCRIPTS_DIR="$INSTALLER_DIR/helper_scripts" +source "$HELPER_SCRIPTS_DIR/packages.sh" + +NONE_IDENTIFIER="none" +NONE_TEXT="None" + +declare -A GIT_EDITORS +GIT_EDITORS=( + ["$SNAP_VSCODE_PACKAGE"]="${PACKAGES["$SNAP_VSCODE_PACKAGE"]}" + ["$NONE_IDENTIFIER"]="$NONE_TEXT" +) + +ORDERED_GIT_EDITORS=( + "$NONE_IDENTIFIER" + "$SNAP_VSCODE_PACKAGE" +) + +declare -A GIT_DIFFTOOLS +GIT_DIFFTOOLS=( + ["$SNAP_VSCODE_PACKAGE"]="${PACKAGES["$SNAP_VSCODE_PACKAGE"]}" + ["$NONE_IDENTIFIER"]="$NONE_TEXT" +) + +ORDERED_GIT_DIFFTOOLS=( + "$NONE_IDENTIFIER" + "$SNAP_VSCODE_PACKAGE" +) + +declare -A GIT_MERGETOOLS +GIT_MERGETOOLS=( + ["$SNAP_VSCODE_PACKAGE"]="${PACKAGES["$SNAP_VSCODE_PACKAGE"]}" + ["$NONE_IDENTIFIER"]="$NONE_TEXT" +) + +ORDERED_GIT_MERGETOOLS=( + "$NONE_IDENTIFIER" + "$SNAP_VSCODE_PACKAGE" +) + SWAP_DEFAULT_UNIT="G" main() { - read -e -p "DConf config path (empty to skip): " dconf_config_path - read -e -p "Visual Studio Code User Settings (empty to skip): " vscode_config_path - read -e -p "Visual Studio Code Extensions File (empty to skip): " vscode_extensions_path - read -e -p "Comma separated swap sizes in Gigabytes (empty to skip): " swap_sizes - swap_sizes="${swap_sizes//','/"$SWAP_DEFAULT_UNIT "}" - - additional_ansible_args=() + # read -e -p "DConf config (empty to skip): " dconf_config_path + # read -e -p "Visual Studio Code User Settings (empty to skip): " vscode_config_path + # read -e -p "Visual Studio Code Extensions File (empty to skip): " vscode_extensions_path + read -e -p "Git Config (empty to skip): " git_config_path + # read -e -p "Comma separated swap sizes in Gigabytes (empty to skip): " swap_sizes + # swap_sizes="${swap_sizes//','/"$SWAP_DEFAULT_UNIT "}" if [[ -n "$swap_sizes" ]]; then - additional_ansible_args+=('--ask-become-pass') swap_sizes+="$SWAP_DEFAULT_UNIT" fi + additional_ansible_args=() + if [[ -n "$swap_sizes" || -n "$git_config_path" ]]; then + additional_ansible_args+=('--ask-become-pass') + fi + $HELPER_SCRIPTS_DIR/install_ansible.sh ansible-playbook "${INSTALLER_DIR}/playbooks/setup.yaml" \ - --extra-vars "dconf_config_path='$dconf_config' vscode_config_path='$vscode_config_path' vscode_extensions_path='$vscode_extensions_path' swap_sizes='$swap_sizes'" \ + --extra-vars "dconf_config_path='$dconf_config' vscode_config_path='$vscode_config_path' vscode_extensions_path='$vscode_extensions_path' swap_sizes='$swap_sizes' git_config_path='$git_config_path'" \ --inventory "${INSTALLER_DIR}/ansible_inventory.ini" \ $(IFS=' ' echo "${additional_ansible_args[*]}") } diff --git a/tasks/apt_packages.yaml b/tasks/apt_packages.yaml index 4db7a678ae72e8cd4e0a15dc1c166fdf00bdd455..71b8e6418b2e3f32badc02fe65e6909db4b38209 100644 --- a/tasks/apt_packages.yaml +++ b/tasks/apt_packages.yaml @@ -5,9 +5,7 @@ when: flatpak_packages != "" - name: Install Git (APT) - include_tasks: apt_templates/install_apt_package.yaml - vars: - app: git + include_tasks: apt_templates/packages/git.yaml when: "'git' in apt_packages" - name: Install Docker Community Edition (APT) diff --git a/tasks/apt_templates/packages/git.yaml b/tasks/apt_templates/packages/git.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f355504f0f9bf03469965bbddd4ba7329361ad66 --- /dev/null +++ b/tasks/apt_templates/packages/git.yaml @@ -0,0 +1,4 @@ +- name: Install Git (APT) + include_tasks: ../install_apt_package.yaml + vars: + app: git diff --git a/tasks/setup/git.yaml b/tasks/setup/git.yaml new file mode 100644 index 0000000000000000000000000000000000000000..305bde26759e98e34d1c5e04722bfed6c27143b0 --- /dev/null +++ b/tasks/setup/git.yaml @@ -0,0 +1,18 @@ +- name: Install Git + include_tasks: ../apt_templates/packages/git.yaml + when: git_config_path + +- name: Remove current Git Config + file: + path: "{{ git_user_config_path }}" + state: absent + +- name: Link Git Config + when: git_config_path + command: + cmd: "ln -s {{ git_config_path | realpath }} {{ git_user_config_path }}" + +- name: Print Git Config Warnings + include_tasks: ../general_templates/print_warning.yaml + vars: + warning: The Git Config was dynamically linked. Please don't remove the source.