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..f79326e565a7a0cf4daf4af871def091d0fe3859 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:
@@ -21,3 +22,10 @@
       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.