-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmagick.nu
123 lines (98 loc) · 3.17 KB
/
magick.nu
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# João Farias © BeyondMagic 2024 <[email protected]>
def link-file [
de: string # O caminho para ligar.
para: string # Onde ligar.
--administrador = false # Se é preciso de permissões administrativas.
]: nothing -> list<string> {
let args = [
--symbolic
--force
--no-target-directory
$de
$para
]
if $administrador {
^doas ln ...$args
} else {
^ln ...$args
}
[ $de $para ]
}
# List all packages to install.
export def list-packages []: nothing -> nothing {
open ./dados.toml
| get packages
}
# Link all files.
export def link []: nothing -> nothing {
let dados = open ./dados.toml
if ($dados | get ligações.administrador | any {|it| $it == true }) {
print "Asking for administative access using doas for linking files."
let result = ^doas true | complete
if $result.exit_code != 0 {
error make {
msg: "Linking of administative data cannot be done."
label: {
text: "Polkit could not elevative permissions."
span: (metadata $result).span
}
}
}
}
$dados.ligações | each {|ligação|
let tipo = $ligação.de | describe
# Para copiar só os arquivos de uma uma pasta.
if $tipo == 'string' and $ligação.de ends-with '/*' {
# Criar pasta principal do serviço.
if $ligação.administrador {
^doas mkdir -p ($ligação.para | path expand)
} else {
mkdir ($ligação.para | path expand)
}
# Para cada pasta, pegar suas subpastas e retornar os arquivos dentros dela.
glob $ligação.de | par-each {|pasta|
ls $pasta | get name
} | par-each {|grupo|
let serviço_pasta = ($ligação.para | path join ($grupo | first | path dirname | path basename)) | path expand
if $ligação.administrador {
^doas mkdir -p $serviço_pasta
} else {
mkdir $serviço_pasta
}
$grupo | par-each {|arquivo|
let de_expandido = ($arquivo | path expand)
let para_expandido = ($ligação.para | path expand | path join ($arquivo | path dirname | path basename) | path join ($arquivo | path basename))
link-file --administrador $ligação.administrador $de_expandido $para_expandido
}
}
# Uma pasta, onde todos os arquivos presentes serão ligados.
} else if $tipo == 'string' {
# Se for pasta, pegar o nome dos arquivos na pasta.
let arquivos = if $ligação.único {
[ $ligação.de ]
} else {
ls $ligação.de | get name
}
$arquivos | par-each {|de|
let de_expandido = ($de | path expand)
let para_completo = if $ligação.único {
($ligação.para | path dirname | path expand) + '/' + ($ligação.para | path basename)
} else {
($ligação.para | path expand) + '/' + ($de | path basename)
}
link-file --administrador $ligação.administrador $de_expandido $para_completo
}
# Lista de arquivos individuais a serem ligados.
} else if $tipo == 'list<string>' {
$ligação.de | par-each {|arquivo|
let de_expandido = ($arquivo | path expand)
let para_expandido = if $ligação.único {
($ligação.para)
} else {
($ligação.para | path expand --no-symlink) + ($arquivo | path basename)
}
link-file --administrador $ligação.administrador $de_expandido $para_expandido
}
}
}
}