From a708387ddd1b34bd715d4bc6165021c5939ffc2f Mon Sep 17 00:00:00 2001 From: oqyude Date: Fri, 10 Oct 2025 22:53:17 +0300 Subject: [PATCH] mounts manager added --- data/mounts (not done yet)/mounts.bat | 33 +++++++++++ data/mounts.csv | 6 ++ run.ps1 | 1 + ...{apps-data-check.ps1 => appdata-check.ps1} | 0 ...s-data-manager.ps1 => appdata-manager.ps1} | 0 src/modules/mounts-manager.ps1 | 59 +++++++++++++++++++ src/vars.ps1 | 4 +- 7 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 data/mounts (not done yet)/mounts.bat create mode 100644 data/mounts.csv rename src/modules/{apps-data-check.ps1 => appdata-check.ps1} (100%) rename src/modules/{apps-data-manager.ps1 => appdata-manager.ps1} (100%) create mode 100644 src/modules/mounts-manager.ps1 diff --git a/data/mounts (not done yet)/mounts.bat b/data/mounts (not done yet)/mounts.bat new file mode 100644 index 0000000..6177617 --- /dev/null +++ b/data/mounts (not done yet)/mounts.bat @@ -0,0 +1,33 @@ +@echo off + +:: .ssh +setlocal +set "from_1=%storage%\SSH\%user-name%" +set "to_1=%USERPROFILE%\.ssh" +rd /q "%to_1%" +mklink /D "%to_1%" "%from_1%" +endlocal + +:: Bash +setlocal +set "from_1=%storage%\User Folder\.bashrc" +set "to_1=%USERPROFILE%\.bashrc" +set "from_2=%storage%\User Folder\.inputrc" +set "to_2=%USERPROFILE%\.inputrc" +set "from_3=%storage%\User Folder\.gitconfig" +set "to_3=%USERPROFILE%\.gitconfig" +del /q "%to_1%" +del /q "%to_2%" +del /q "%to_3%" +mklink "%to_1%" "%from_1%" +mklink "%to_2%" "%from_2%" +mklink "%to_3%" "%from_3%" +endlocal + +:: WSL +setlocal +set "from_1=%storage%\User Folder\.wslconfig" +set "to_1=%USERPROFILE%\.wslconfig" +del /q "%to_1%" +mklink "%to_1%" "%from_1%" +endlocal \ No newline at end of file diff --git a/data/mounts.csv b/data/mounts.csv new file mode 100644 index 0000000..307f7ac --- /dev/null +++ b/data/mounts.csv @@ -0,0 +1,6 @@ +Enabled,Name,From,To +1,SSH,$storage\SSH\$env:USERNAME,$env:USERPROFILE\.ssh +1,bash_rc,$storage\User Folder\.bashrc,$env:USERPROFILE\.bashrc +1,bash_inputrc,$storage\User Folder\.inputrc,$env:USERPROFILE\.inputrc +1,bash_gitconfig,$storage\User Folder\.gitconfig,$env:USERPROFILE\.gitconfig +1,wslconfig,$storage\User Folder\.wslconfig,$env:USERPROFILE\.wslconfig diff --git a/run.ps1 b/run.ps1 index 65609eb..4142797 100644 --- a/run.ps1 +++ b/run.ps1 @@ -16,6 +16,7 @@ Write-Host "Administrator privileges confirmed." $modules = @{ "appsDataManager" = @("reconnect", "connect", "disconnect") "autostartManager" = @("update", "remove") + "mountsManager" = @("reconnect", "connect", "disconnect") } # Interactive module selection diff --git a/src/modules/apps-data-check.ps1 b/src/modules/appdata-check.ps1 similarity index 100% rename from src/modules/apps-data-check.ps1 rename to src/modules/appdata-check.ps1 diff --git a/src/modules/apps-data-manager.ps1 b/src/modules/appdata-manager.ps1 similarity index 100% rename from src/modules/apps-data-manager.ps1 rename to src/modules/appdata-manager.ps1 diff --git a/src/modules/mounts-manager.ps1 b/src/modules/mounts-manager.ps1 new file mode 100644 index 0000000..4512aab --- /dev/null +++ b/src/modules/mounts-manager.ps1 @@ -0,0 +1,59 @@ +param( + [string]$action = "reconnect" # connect | disconnect | reconnect +) + +Write-Host "Folder Symlink Manager started with action: $action" + +# CSV file with folder mappings +$config = $mountsAll # переменная с путём к CSV + +# Import CSV +$csv = Import-Csv -Path $config + +foreach ($entry in $csv) { + if ($entry.Enabled -ne "1") { continue } + + $Name = $entry.Name + + # Expand From and To strings + $rawFrom = $entry.From -replace '\$Name', $Name + $rawTo = $entry.To -replace '\$Name', $Name + + # Expand environment variables + $from = $ExecutionContext.InvokeCommand.ExpandString($rawFrom) + $to = $ExecutionContext.InvokeCommand.ExpandString($rawTo) + + # If To path is relative, make it absolute relative to the user + if (-not [System.IO.Path]::IsPathRooted($to)) { + $to = Join-Path $env:USERPROFILE $to + } + + Write-Host "==============================" + Write-Host "Processing $Name with action $action" + Write-Host " From: $from" + Write-Host " To : $to" + + switch ($action.ToLower()) { + "disconnect" { + Write-Host " Removing $to" + if (Test-Path $to) { Remove-Item $to -Recurse -Force } + } + "connect" { + Write-Host " Creating symlink $to -> $from" + if (-not (Test-Path $to)) { + New-Item -Path $to -ItemType SymbolicLink -Value $from | Out-Null + } + } + "reconnect" { + Write-Host " Removing $to" + if (Test-Path $to) { Remove-Item $to -Recurse -Force } + Write-Host " Creating symlink $to -> $from" + if (-not (Test-Path $to)) { + New-Item -Path $to -ItemType SymbolicLink -Value $from | Out-Null + } + } + default { + Write-Warning "Unknown action: $action" + } + } +} diff --git a/src/vars.ps1 b/src/vars.ps1 index 2ca4b1a..23aa500 100644 --- a/src/vars.ps1 +++ b/src/vars.ps1 @@ -1,8 +1,9 @@ # LOCAL # Modules -$appsDataManager = "$PSScriptRoot\modules\apps-data-manager.ps1" +$appsDataManager = "$PSScriptRoot\modules\appdata-manager.ps1" $autostartManager = "$PSScriptRoot\modules\autostart-manager.ps1" +$mountsManager = "$PSScriptRoot\modules\mounts-manager.ps1" # Package Manager Installers $winget = "$PSScriptRoot\winget.ps1" @@ -13,6 +14,7 @@ $data = "$root\data" # Setup Data Folder $apps = "$data\isolate" $appsAll = "$data\apps.csv" +$mountsAll = "$data\mounts.csv" # $appsUser = "$apps\$env:COMPUTERNAME" # $appsLegacy = "$apps\legacy"