From 5c15a0829210bbe7a53f92131d5eb1cef3755ad5 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 | 31 +++++++++++++++++++++++++++++++ 3 files changed, 33 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..05399de --- /dev/null +++ b/apps/nogui/nushell/miniserve.nu @@ -0,0 +1,31 @@ +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 +] { + 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 + print "dirs" + glob -F $"($prefix)/**" | each {|g| + let b = $g | str replace $prefix "" + print $b + } + print "files" + glob -D $"($prefix)/**" | each {|g| + let f = $g | str replace $prefix "" + print $f + } + } else { + ^curl -F $"mkdir=($uploadDir)" $"($upload)?path=/" + ^curl -F $"path=@($path)" $"($upload)?path=($uploadDir)" + } + $"($url)/($serveDir)($baseName)" +}