-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathunlink.ps1
78 lines (68 loc) · 2.95 KB
/
unlink.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#Requires -RunAsAdministrator
Param
(
[switch]
[alias("f")]
$Force
)
Function UnlinkFiles
{
Param (
[Parameter(Mandatory = $true, Position = 0)]
[alias("s", "source")]
[string] $SourceFolder,
[Parameter(Mandatory = $true, Position = 1)]
[alias("t", "target")]
[string] $TargetFolder
)
Get-ChildItem -Path "$SourceFolder" -File | ForEach-Object {
$file = "$TargetFolder\$( $_.Name -replace 'dot-', '.' )"
if ((Test-Path -Path $file) -and ((Get-Item $file).LinkType -eq 'SymbolicLink'))
{
(Get-Item $file).Delete()
}
}
}
Function DoIt
{
Get-ChildItem -Path "$( $PSScriptRoot )\stow\" -Directory -Exclude "powershell","vscode" | ForEach-Object {
Write-Host "Unlinking '$_' from '$( $ENV:UserProfile )'"
UnlinkFiles $_.FullName "$( $ENV:UserProfile )"
}
Write-Host "Unlinking files"
UnlinkFiles "$( $PSScriptRoot )\stow\maven\.m2\" "$( $ENV:UserProfile )\.m2\"
UnlinkFiles "$( $PSScriptRoot )\stow\shell\.config\" "$( $ENV:UserProfile )\.config\"
UnlinkFiles "$( $PSScriptRoot )\stow\shell\.config\bash\" "$( $ENV:UserProfile )\.config\bash\"
UnlinkFiles "$( $PSScriptRoot )\stow\shell\.config\bat\" "$( $ENV:UserProfile )\.config\bat\"
UnlinkFiles "$( $PSScriptRoot )\stow\shell\.config\bat\themes\" "$( $ENV:UserProfile )\.config\bat\themes\"
UnlinkFiles "$( $PSScriptRoot )\stow\shell\.config\gh\" "$( $ENV:UserProfile )\.config\gh\"
UnlinkFiles "$( $PSScriptRoot )\stow\shell\.config\tmux\" "$( $ENV:UserProfile )\.config\tmux\"
UnlinkFiles "$( $PSScriptRoot )\stow\shell\.config\vim\" "$( $ENV:UserProfile )\.config\vim\"
UnlinkFiles "$( $PSScriptRoot )\stow\shell\.config\vim\colors\" "$( $ENV:UserProfile )\.config\vim\colors\"
UnlinkFiles "$( $PSScriptRoot )\stow\shell\.config\vim\syntax\" "$( $ENV:UserProfile )\.config\vim\syntax\"
UnlinkFiles "$( $PSScriptRoot )\stow\ssh\.ssh\" "$( $ENV:UserProfile )\.ssh\"
UnlinkFiles "$( $PSScriptRoot )\stow\ssh\.ssh\config.d\" "$( $ENV:UserProfile )\.ssh\config.d\"
Write-Host "Unlinking 'bat' from '$( $ENV:AppData )\bat'"
UnlinkFiles "$( $PSScriptRoot )\stow\bat\" "$( $ENV:AppData )\bat\"
UnlinkFiles "$( $PSScriptRoot )\stow\bat\themes" "$( $ENV:AppData )\bat\themes"
Write-Host "Unlinking 'git' from '$( $ENV:AppData )\Git'"
UnlinkFiles "$( $PSScriptRoot )\stow\git\" "$( $ENV:AppData )\Git\"
Write-Host "Unlinking 'powershell' from '$( $ENV:UserProfile )\Documents\WindowsPowerShell'"
UnlinkFiles "$( $PSScriptRoot )\stow\powershell\" "$( $ENV:UserProfile )\Documents\WindowsPowerShell\"
Write-Host "Unlinking 'vscode' from '$( $ENV:UserProfile )\Code\User'"
UnlinkFiles "$( $PSScriptRoot )\stow\vscode\" "$( $ENV:AppData )\Code\User\"
}
if ($Force)
{
DoIt
Write-Host "Please logout from your shell for the changes to be applied."
}
else
{
$reply = Read-Host 'This will unlink the dotfiles from your home directory. No files will actually be deleted. Are you sure? (y/n)'
if ($reply -match "[yY]")
{
DoIt
Write-Host "Please logout from your shell for the changes to be applied."
}
}