Home

Awesome

subpath-serve

A small server used to serve text files from my dotfiles (though it could be used to serve any text files/folder).

Any request to /... tries to match against some file basepath from a root folder (defaults to ./serve).

A request to the base path (/) without anything else returns a newline delimited list of everything in the ./serve folder.

Does not build an index at build/initial server start, so the ./serve folder can be modified while the server is running to change results; each request searches the folder for the query.

Appending ?dark to the end of a URL converts a request to an HTML response with a dark theme, and converts the index to link to each page.

Appending ?redirect to the end of the URL redirects to the corresponding -git-http-prefix, e.g.:

.gitignore?redirect -> https://github.com/purarue/dotfiles/blob/master/.gitignore

Example Requests:

matching strategy

An example of how this matches. If the files in ./serve are:

./folder1/a
./folder2/a
./folder3/b
Request toResolves to
/a./folder1/a
/b./folder3/b
/folder2/a./folder2/a

It matches ./folder1/a just because that's the one it found first, if there's a possibility of a conflict, its better to provide a unique subpath.

Run

usage: subpath-serve [FLAG...]
For instructions, see https://github.com/purarue/subpath-serve

  -folder string
    	path to serve subpath-serve on (default "./serve")
  -git-http-prefix string
    	Optionally, provide a prefix which when the matched filepath is appended to, links to a git web view (e.g. https://github.com/purarue/dotfiles/blob/master)
  -port int
    	port to serve subpath-serve on (default 8050)

As an example, you can use my dotfiles:

git clone "https://github.com/purarue/dotfiles.git" "./serve"
subpath-serve
curl localhost:8050/rc.conf

The response contains the X-Filepath header, which includes the full path to the matched file.

Install

Install golang.

You can clone and run go build, or:

go install -v "github.com/purarue/subpath-serve@latest"

which downloads, builds and puts the binary on your $GOBIN.