diff --git a/scripts/Windows/Software/Nextcloud/Main.ps1 b/scripts/Windows/Software/Nextcloud/Main.ps1
index 26a9cdf7..02af3336 100644
--- a/scripts/Windows/Software/Nextcloud/Main.ps1
+++ b/scripts/Windows/Software/Nextcloud/Main.ps1
@@ -3,30 +3,123 @@ param(
     [hashtable] $Arguments
 )
 
+. "$PSScriptRoot/../../Scripts/PowerManagement.ps1";
 . "$PSScriptRoot/../../../Common/Scripts/Software.ps1";
 
-Start-SoftwareInstaller @PSBoundParameters `
-    -Installer {
-        Install-ChocoPackage nextcloud-client -ArgumentList "-y","--params='/KeepUpdateCheck'";
-    } `
-    -UserConfigurator {
-        if (-not (Test-Path $context.GetNextcloudConfigFile())) {
-            Write-Information "Setting up Nextcloud configuration";
+& {
+    param($Parameters)
 
-            Write-Information "Ensuring all Let's Encrypt certificates are cached";
-            $null = Invoke-WebRequest https://valid-isrgrootx1.letsencrypt.org/;
+    <#
+        .SYNOPSIS
+        Gets the path to the Nextcloud configuration file.
+    #>
+    function Get-ConfigFile {
+        return "$env:APPDATA/Nextcloud/nextcloud.cfg";
+    }
 
-            while (-not (Test-Path $context.GetNextcloudConfigFile())) {
-                Write-Host "Nextcloud has been installed!";
-                Read-Host "Please log in in the Nextcloud app and hit enter to continue";
+    <#
+        .SYNOPSIS
+        Adds a new nextcloud sync to the current user.
+    #>
+    function Add-NextcloudSync {
+        param(
+            [string] $RemotePath,
+            [string] $LocalPath,
+            [switch] $VirtualFiles
+        )
 
-                if (-not (Test-Path $context.GetNextcloudConfigFile())) {
-                    Write-Error "The login seems to have failed. Please try again.";
+        Write-Host "Adding a Nextcloud sync";
+        Write-Host "$RemotePath <=> $LocalPath";
+        $configName = "Folders";
+        $virtualName = "WithPlaceholders";
+        $LocalPath = $LocalPath.Replace("\", "/");
+        $RemotePath = $RemotePath.Replace("\", "/");
+        $oldContent = Get-Content (Get-ConfigFile);
+        $additionalSettings = @();
+        $pattern = "^\d+\\$configName(?:$virtualName)?\\(\d+)";
+
+        $folderID = (
+            $oldContent | `
+                Where-Object { $_ -match "$pattern" } | `
+                ForEach-Object { $_ -replace "$pattern.*$","`$1" } | `
+                Sort-Object -Unique | `
+                Measure-Object -Maximum).Maximum + 1;
+
+        if ($VirtualFiles.IsPresent) {
+            $configName += $virtualName;
+            $additionalSettings = @("0\$configName\$folderID\virtualFilesMode=wincfapi");
+        }
+
+        $newSettings = (
+            @(
+                "0\$configName\$folderID\localPath=$LocalPath",
+                "0\$configName\$folderID\targetPath=$RemotePath"
+            ) + $additionalSettings
+        ) -join "`n";
+
+        & {
+            $accountSectionEntered = $false;
+            $accountSectionLeft = $false;
+
+            for ($i = 0; $i -lt $oldContent.Count; $i++) {
+                $line = $oldContent[$i];
+
+                if ($line -eq "[Accounts]") {
+                    $accountSectionEntered = $true;
+                }
+
+                if ($line -eq "" -and $accountSectionEntered) {
+                    $accountSectionLeft = $true;
+                    $newSettings;
+                }
+
+                $line;
+
+                if (
+                    (-not $accountSectionLeft) -and
+                    ($i -eq ($oldContent.Count - 1))) {
+                    $newSettings;
                 }
             }
+        } | Set-Content (Get-ConfigFile);
+    }
 
-            $context.Reboot();
-            exit;
-        }
-    };
 
+    Start-SoftwareInstaller @Parameters `
+        -Installer {
+            Install-ChocoPackage nextcloud-client -ArgumentList "-y","--params='/KeepUpdateCheck'";
+        } `
+        -UserConfigurator {
+            param($Arguments)
+            $user = $Arguments.Name;
+
+            & {
+                $syncs = Get-UserConfig -UserName $user "nextcloud.folderSyncs";
+                $configExists = { (Test-Path (Get-ConfigFile) ) };
+
+                if ($syncs.Count -gt 0) {
+                    if (-not (& $configExists)) {
+                        while (-not (& $configExists)) {
+                            Read-Host "Please log in to the Nextcloud app and hit enter to continue";
+
+                            if (-not (& $configExists)) {
+                                Write-Error -ErrorAction Continue "The login seems to have failed. Please try again.";
+                            }
+                        }
+                    }
+
+                    Write-Host "Stopping Nextcloud process";
+                    $nextcloudProcess = Get-Process nextcloud;
+                    $nextcloudPath = [string]$nextcloudProcess[0].Path;
+                    $nextcloudProcess | Stop-Process -Force;
+
+                    foreach ($sync in $syncs) {
+                        Add-NextcloudSync -LocalPath $sync.localPath -RemotePath $sync.remotePath -VirtualFiles:$sync.virtualFiles;
+                    }
+
+                    Write-Host "Restarting Nextcloud";
+                    Start-Process $nextcloudPath;
+                }
+            };
+        };
+} $PSBoundParameters;