diff options
Diffstat (limited to 'accounts')
-rw-r--r-- | accounts/gkleen@sif/zshrc | 68 |
1 files changed, 44 insertions, 24 deletions
diff --git a/accounts/gkleen@sif/zshrc b/accounts/gkleen@sif/zshrc index 1b7cc06c..bda73d76 100644 --- a/accounts/gkleen@sif/zshrc +++ b/accounts/gkleen@sif/zshrc | |||
@@ -45,7 +45,7 @@ genmail() { | |||
45 | s() { | 45 | s() { |
46 | dir=$(pwd) | 46 | dir=$(pwd) |
47 | [[ ${#@} -ge 1 ]] && dir=$1 | 47 | [[ ${#@} -ge 1 ]] && dir=$1 |
48 | 48 | ||
49 | shellFile=$(findNix ${@}) | 49 | shellFile=$(findNix ${@}) |
50 | [[ ${#@} -ge 1 ]] && shift | 50 | [[ ${#@} -ge 1 ]] && shift |
51 | 51 | ||
@@ -137,7 +137,7 @@ dir() { | |||
137 | *) printf "Invalid option: %s\n" $arg >&2; exit 2 ;; | 137 | *) printf "Invalid option: %s\n" $arg >&2; exit 2 ;; |
138 | esac | 138 | esac |
139 | done | 139 | done |
140 | 140 | ||
141 | shift $((OPTIND - 1)) | 141 | shift $((OPTIND - 1)) |
142 | 142 | ||
143 | if [[ -z ${dir} && ${#@} -ge 1 ]]; then | 143 | if [[ -z ${dir} && ${#@} -ge 1 ]]; then |
@@ -145,7 +145,7 @@ dir() { | |||
145 | shift | 145 | shift |
146 | fi | 146 | fi |
147 | 147 | ||
148 | [[ -n ${dir} ]] || return 2; | 148 | [[ -n ${dir} ]] || return 2; |
149 | 149 | ||
150 | if [[ ! -e ${dir} ]]; then | 150 | if [[ ! -e ${dir} ]]; then |
151 | if [[ -z "${gitWorktree}" ]]; then | 151 | if [[ -z "${gitWorktree}" ]]; then |
@@ -156,7 +156,7 @@ dir() { | |||
156 | else | 156 | else |
157 | gitWorktree="" | 157 | gitWorktree="" |
158 | fi | 158 | fi |
159 | 159 | ||
160 | ( | 160 | ( |
161 | cd ${dir} | 161 | cd ${dir} |
162 | export dir; | 162 | export dir; |
@@ -164,7 +164,7 @@ dir() { | |||
164 | ${findNix} && { nixShell=$(findNix) || return $? } | 164 | ${findNix} && { nixShell=$(findNix) || return $? } |
165 | 165 | ||
166 | [[ -n ${repoUrl} ]] && git clone -- ${repoUrl} . | 166 | [[ -n ${repoUrl} ]] && git clone -- ${repoUrl} . |
167 | 167 | ||
168 | if [[ -n ${templateArchive} ]]; then | 168 | if [[ -n ${templateArchive} ]]; then |
169 | ( | 169 | ( |
170 | archiveFile="" | 170 | archiveFile="" |
@@ -181,16 +181,36 @@ dir() { | |||
181 | templateArchive=${archiveFile} | 181 | templateArchive=${archiveFile} |
182 | fi | 182 | fi |
183 | 183 | ||
184 | case $(file --brief --mime-type --dereference ${templateArchive}) in | 184 | unpack=true |
185 | application/zip) unzip ${templateArchive} ;; | 185 | while ${unpack}; do |
186 | application/vnd.debian.binary-package) | 186 | case $(file --brief --mime-type --dereference ${templateArchive}) in |
187 | nix shell nixos#binutils --command ar x ${templateArchive} | 187 | application/zip) |
188 | mkdir control data | 188 | unzip ${templateArchive} |
189 | tar -C control -xvaf control.* | 189 | unpack=false |
190 | tar -C data -xvaf data.* | 190 | ;; |
191 | ;; | 191 | application/vnd.debian.binary-package) |
192 | *) tar -xvaf ${templateArchive} ;; | 192 | nix shell nixos#binutils --command ar x ${templateArchive} |
193 | esac | 193 | mkdir control data |
194 | tar -C control -xvaf control.* | ||
195 | tar -C data -xvaf data.* | ||
196 | unpack=false | ||
197 | ;; | ||
198 | application/x-rpm) | ||
199 | cpioArchive=$(mktemp -t "archive.XXXXXXXXXX.${templateArchive:t:r}.cpio") | ||
200 | nix shell nixos#busybox --command rpm2cpio ${templateArchive} > ${cpioArchive} | ||
201 | templateArchive=${cpioArchive} | ||
202 | unpack=true | ||
203 | ;; | ||
204 | application/x-cpio) | ||
205 | cpio --extract --make-directories --no-absolute-filenames -F ${templateArchive} | ||
206 | unpack=false | ||
207 | ;; | ||
208 | *) | ||
209 | tar -xvaf ${templateArchive} | ||
210 | unpack=false | ||
211 | ;; | ||
212 | esac | ||
213 | done | ||
194 | ) | 214 | ) |
195 | fi | 215 | fi |
196 | 216 | ||
@@ -202,7 +222,7 @@ dir() { | |||
202 | 222 | ||
203 | # typeset -a messages | 223 | # typeset -a messages |
204 | # messages=(${(z)$(notmuch search --output=messages ${notmuchMsg})}) | 224 | # messages=(${(z)$(notmuch search --output=messages ${notmuchMsg})}) |
205 | 225 | ||
206 | # for message (${messages}); do | 226 | # for message (${messages}); do |
207 | # typeset -A notmuchAtts | 227 | # typeset -A notmuchAtts |
208 | # notmuchAtts=() | 228 | # notmuchAtts=() |
@@ -253,7 +273,7 @@ dir() { | |||
253 | quickserve --root . --upload . --show-hidden --tar gz | 273 | quickserve --root . --upload . --show-hidden --tar gz |
254 | fi | 274 | fi |
255 | 275 | ||
256 | 276 | ||
257 | if [[ ${#@} -eq 0 ]] || ${forceShell}; then | 277 | if [[ ${#@} -eq 0 ]] || ${forceShell}; then |
258 | if [[ ${#@} -gt 0 ]]; then | 278 | if [[ ${#@} -gt 0 ]]; then |
259 | if [[ -z ${nixShell} ]]; then | 279 | if [[ -z ${nixShell} ]]; then |
@@ -264,11 +284,11 @@ dir() { | |||
264 | fi | 284 | fi |
265 | 285 | ||
266 | cd $(pwd) # Needed for mounting to work | 286 | cd $(pwd) # Needed for mounting to work |
267 | 287 | ||
268 | isSingleDir() { | 288 | isSingleDir() { |
269 | typeset -a contents | 289 | typeset -a contents |
270 | contents=(*(N) .*(N)) | 290 | contents=(*(N) .*(N)) |
271 | 291 | ||
272 | if [[ ${#contents} -eq 1 && -d ${contents[1]} ]]; then | 292 | if [[ ${#contents} -eq 1 && -d ${contents[1]} ]]; then |
273 | print ${contents[1]} | 293 | print ${contents[1]} |
274 | return 0 | 294 | return 0 |
@@ -278,7 +298,7 @@ dir() { | |||
278 | } | 298 | } |
279 | while d=$(isSingleDir); do cd ${d}; done | 299 | while d=$(isSingleDir); do cd ${d}; done |
280 | 300 | ||
281 | 301 | ||
282 | if [[ -z ${nixShell} ]]; then | 302 | if [[ -z ${nixShell} ]]; then |
283 | exec -- zsh | 303 | exec -- zsh |
284 | else | 304 | else |
@@ -302,7 +322,7 @@ tmpdir() { | |||
302 | printf "Unmounting %s\n" ${1} >&2 | 322 | printf "Unmounting %s\n" ${1} >&2 |
303 | fusermount -u ${1} || umount ${1} || sudo umount ${1} | 323 | fusermount -u ${1} || umount ${1} || sudo umount ${1} |
304 | } | 324 | } |
305 | 325 | ||
306 | if mountpoint -q -- ${dir}; then | 326 | if mountpoint -q -- ${dir}; then |
307 | unmount ${dir} || return $? | 327 | unmount ${dir} || return $? |
308 | else | 328 | else |
@@ -311,7 +331,7 @@ tmpdir() { | |||
311 | unmount ${subDir} || return $? | 331 | unmount ${subDir} || return $? |
312 | done <<<$(find ${dir} -xdev -type d -print0 | sort -zr) | 332 | done <<<$(find ${dir} -xdev -type d -print0 | sort -zr) |
313 | fi | 333 | fi |
314 | 334 | ||
315 | rm -rfv --one-file-system -- ${dir} | 335 | rm -rfv --one-file-system -- ${dir} |
316 | } | 336 | } |
317 | 337 | ||
@@ -323,7 +343,7 @@ tmpdir() { | |||
323 | "?"|":") printf "Invalid option: %s\n" $arg >&2; exit 2 ;; | 343 | "?"|":") printf "Invalid option: %s\n" $arg >&2; exit 2 ;; |
324 | esac | 344 | esac |
325 | done | 345 | done |
326 | 346 | ||
327 | ( | 347 | ( |
328 | trap cleanup EXIT | 348 | trap cleanup EXIT |
329 | 349 | ||
@@ -362,7 +382,7 @@ nix-ghci() { | |||
362 | pkgExpr="${1}" | 382 | pkgExpr="${1}" |
363 | shift | 383 | shift |
364 | fi | 384 | fi |
365 | 385 | ||
366 | nix-shell -p "with (import <nixpkgs> {}); pkgs.haskellPackages.ghcWithPackages (p: with p; [${pkgExpr}])" --run "ghci ${@}" | 386 | nix-shell -p "with (import <nixpkgs> {}); pkgs.haskellPackages.ghcWithPackages (p: with p; [${pkgExpr}])" --run "ghci ${@}" |
367 | } | 387 | } |
368 | 388 | ||