From d9c3b5c59cd01f3923f8ba090a3c17087b099456 Mon Sep 17 00:00:00 2001 From: jolheiser Date: Thu, 12 Dec 2024 13:38:55 -0600 Subject: [PATCH] feat: serve Signed-off-by: jolheiser --- apps/nogui/nushell.nix | 1 + apps/nogui/nushell/jolheiser.nu | 1 + apps/nogui/nushell/miniserve.nu | 38 +++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 apps/nogui/nushell/miniserve.nu diff --git a/apps/nogui/nushell.nix b/apps/nogui/nushell.nix index d13c1a9..b9fcbce 100644 --- a/apps/nogui/nushell.nix +++ b/apps/nogui/nushell.nix @@ -33,6 +33,7 @@ xdg.configFile = { "nushell/jolheiser.nu".source = ./nushell/jolheiser.nu; "nushell/ssh.nu".source = ./nushell/ssh.nu; + "nushell/miniserve.nu".source = ./nushell/miniserve.nu; "nushell/ohmyposh.nu".source = ./nushell/ohmyposh.nu; }; } diff --git a/apps/nogui/nushell/jolheiser.nu b/apps/nogui/nushell/jolheiser.nu index 6cc998d..1216285 100644 --- a/apps/nogui/nushell/jolheiser.nu +++ b/apps/nogui/nushell/jolheiser.nu @@ -102,3 +102,4 @@ $env.EDITOR = 'hx' $env.SSH_AUTH_SOCK = '/run/user/1000/ssh-agent' source ~/.config/nushell/ohmyposh.nu source ~/.config/nushell/ssh.nu +source ~/.config/nushell/miniserve.nu diff --git a/apps/nogui/nushell/miniserve.nu b/apps/nogui/nushell/miniserve.nu new file mode 100644 index 0000000..5418c40 --- /dev/null +++ b/apps/nogui/nushell/miniserve.nu @@ -0,0 +1,38 @@ +export def serve [ + path: path # The path to serve + --dir (-d): string # The base dir in miniserve for the path + --public (-p) # Send to http://pubserve (via http://privserve) rather than http://files + --verbose (-v) # Print uploads +] { + let endpoint = if $public { "http://privserve" } else { "http://files" } + let url = if $public { "http://pubserve.serval-vibes.ts.net" } else { "http://files" } + let upload = $"($endpoint)/upload" + let baseName = $path | path basename + let cleanDir = if $dir != null { $"($dir | str trim --char '/')" } else { "" } + # When uploading, "" is invalid. It must either be "/" or relative "foo/bar/" + let uploadDir = $"($cleanDir)/" + let serveDir = if $cleanDir != "" { $uploadDir } else { "" } + if ($path | path type) == "dir" { + let prefix = $path | path expand + let baseDir = [$cleanDir, ($prefix | path basename | str trim --char '/')] | path join + glob -F $"($prefix)/**" | each {|g| + let b = $g | str replace $prefix "" | str trim --left --char '/' + let d = [$baseDir, $b] | path join + if $verbose { print $"Creating dir ($d)" } + ^curl -F $"mkdir=($d)" $"($upload)?path=/" | complete + } + glob -D $"($prefix)/**" | each {|g| + let f = $g | str replace $prefix "" | str trim --left --char '/' + let t = [$baseDir, $f] | path join + let p = $t | path dirname + if $verbose { print $"Uploading ($g) to ($t)" } + ^curl -F $"path=@($g)" $"($upload)?path=($p)" | complete + } + } else { + if $verbose { print $"Creating dir ($uploadDir)" } + ^curl -F $"mkdir=($uploadDir)" $"($upload)?path=/" | complete + if $verbose { print $"Uploading ($path | path expand) to ($serveDir)($baseName)" } + ^curl -F $"path=@($path)" $"($upload)?path=($uploadDir)" | complete + } + $"($url)/($serveDir)($baseName)" +}