https://github.com/millette/dat-shell
Dat shell. Open a remote dat and explore with cd, ls, etc.
https://github.com/millette/dat-shell
cli dat hyperdrive shell
Last synced: 10 months ago
JSON representation
Dat shell. Open a remote dat and explore with cd, ls, etc.
- Host: GitHub
- URL: https://github.com/millette/dat-shell
- Owner: millette
- License: other
- Archived: true
- Created: 2017-12-05T14:29:36.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2020-04-22T11:29:51.000Z (over 5 years ago)
- Last Synced: 2024-11-03T06:33:04.515Z (about 1 year ago)
- Topics: cli, dat, hyperdrive, shell
- Language: JavaScript
- Homepage: https://dat-shell-millette.hashbase.io/
- Size: 314 KB
- Stars: 62
- Watchers: 6
- Forks: 13
- Open Issues: 16
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
- awesome-dat - dat-shell - Open a remote dat and explore with cd, ls, cp, (pseudo)ln, etc. (Using Dat / Dat Utilities)
README
# dat-shell
[][standardjs]
[](https://www.npmjs.com/package/dat-shell)
[](https://travis-ci.org/millette/dat-shell)
[](https://coveralls.io/github/millette/dat-shell?branch=master)
[](https://gemnasium.com/github.com/millette/dat-shell)
> Dat shell. Open a remote dat and explore with cd, ls, etc.
## DEPRECATED
Note that `dat-shell` hasn't been updated in a few years. Hoping to get back to it in 2020.
dat-shell is part of the [dat][] Peer-to-Peer universe. It's useful to explore remote dats by their key without having to download them. Think of it as bash for dats, letting you ```cd```, ```ls``` and ```cp``` at will.
![dat-shell screencast][screencast]
## Install
```sh
$ npm install --global dat-shell
```
### Requirements
You'll need node 8.9.1 (LTS) or above. I suggest using [n-install] to install the ```n``` node version manager.
You'll probably need ```git``` too since we're using my (temporary) fork of glob to support hyperdrives (dat archives), and that fork is only available on github and not (yet) on npm. See [below][merge-glob] to help merge my glob fork.
## Usage
```sh
$ dat-shell # dat-key is optionnal
```
For example, you can access this readme and scripts at:
```sh
$ dat-shell dat://ae8c136e04a66451c79325681d4593bc3ce30c8005dfa5fc6001e0898ec4573a
# or
$ dat-shell ae8c136e04a66451c79325681d4593bc3ce30c8005dfa5fc6001e0898ec4573a
# or
$ dat-shell dat://dat-shell-millette.hashbase.io/
```
You might wonder about but it's perfectly valid since the hostname maps to the ```ae8c...573a``` key through https discovery.
### Commands
* help: List of commands and their descriptions.
* .help: Internal repl commands.
* ln: Pseudo symbolic link (mkfifo).
* cp: Copy a file from remote dat to local filesystem.
* cat: View a file (concatenate).
* ls: List files.
* file: Detect mimetype.
* view: Generic view command (text, markdown, html, etc.).
* sl: Train yourself to avoid typos.
* cd: Change directory.
* pwd: Output current working directory.
* dat: dat -c to close; dat to open; dat to output current key.
* state: Output current state.
* version: Current dat-shell version.
* exit or quit: Exit dat-shell (or CTRL-D).
#### ln
ln is a bit weird, not sure how useful it's going to be. As it's currently implemented, ln creates a fifo, writes the specified remote file (in dat) to the fifo and waits for the user to read the fifo before closing and removing it.
For instance, inside dat-shell, you can do:
```
ln readme.md ~/tmp-readme.md # ~/tmp-readme.md will be overwritten with our temporary fifo
```
And in another terminal (bash, etc.):
```
cat ~/tmp-readme.md # or tail, cp, etc.
```
You can't currently ```ln``` a video file and play it with vlc or mplayer unfortunately.
## Upgrading
The cli now uses [update-notifier][] to let the user know about updates to this program.
Users have the ability to opt-out of the update notifier by changing
the optOut property to true in ~/.config/configstore/update-notifier-dat-shell.json.
The path is available in notifier.config.path.
Users can also opt-out by setting the environment variable NO_UPDATE_NOTIFIER
with any value or by using the --no-update-notifier flag on a per run basis.
To upgrade, simply
```sh
$ npm install --global dat-shell
```
## Contribute
Needless to say, I'm 100% open to contributions. Unit tests are coming soon, but for now make sure to follow the [StandardJS][standardjs] coding style (no semi-colons, etc). Run either ```yarn lint``` or ```npm run lint``` to verify.
## TODO
There's lots to do, classified here in bugs and features.
I should probably move most of the items below to GitHub issues and establish a roadmap.
### Merge glob
There's an [issue on glob to allow other fs implementations][glob280]. This allows glob to work on dat archives (and the hyperdrive beneath).
### Bugs
* [issue#1] Improve error messages
* [issue#2] Prevent cd into a file (doh)
* [issue#3] Copy to directory (currently, a destination filename is required)
* [issue#4] Improve screencast (demo), see
* [issue#16] Ctrl-D doesn't always quit
* [issue#11] ln should work as expected (for mplayer, etc.)
### Features
* [issue#7] Add file autocompletion
* [issue#8] Add text browser mode (*à la* lynx)
* [issue#9] Enable usage as: dat-shell KEY ls (non-interactive)
* [issue#10] Browse versions (history)
* [issue#12] Add status bar (show when files are updated, version, etc.)
* [issue#13] Unit tests, travis, coveralls
* [issue#14] Enumerate hosts
* [issue#15] Improve args quoting (*à la* bash)
* Add more command
* Add tail command
* Add tree command
* Improve ls handling (arguments, long version, etc.)
* Colors
* Make all commands async (promises)
* Improve user responses
* Make prompt configurable (*à la* bash)
* Make statusbar configurable
* Gemnasium badge
* Support plugins
* Add debugging options and output
* Evaluate [shelljs][] for integration
* Evaluate [cash][] for integration
* Evaluate [vorpal][] for integration
* Evaluate [nsh][] for integration
* Evaluate [coreutils][] for integration
* Evaluate [bashful][] for integration
* Add bookmark support (compatible with beaker, hopefully)
* Make sure it works cross-platform (posix, windows)
* Package self-contained binary with pkg
* "Implement" [standard-readme][]
### Optimizations (speed or size)
* Replace marked-terminal and update-notifier with smaller equivalents
### Ideas from #dat on freenode (IRC)
* creationix: would be cool to have the ability to run scripts in dat-shell
* creationix: pluggable vms for running scripts, scripts could list dependencies via dat urls, maybe even load native vm code from dats
* scriptjs: Would be nice if the licence for dat-shell was aligned with the dat ecosystem MIT please
## Related projects
* [Reimagining the browser as a network OS][] by Paul Frazee
### Maybe related
See [features] above.
* [shelljs][]
* [cash][]
* [vorpal][]
* [nsh][]
* [coreutils][]
* [bashful][]
## License
AGPL-v3 © 2017 [Robin Millette][]
[Robin Millette]:
[update-notifier]:
[dat]:
[shelljs]:
[cash]:
[vorpal]:
[n-install]:
[glob280]:
[merge-glob]: <#merge-glob>
[features]: <#features>
[standard-readme]:
[standardjs]:
[Reimagining the browser as a network OS]:
[mkfifo]:
[nsh]:
[coreutils]:
[bashful]:
[issue#1]:
[issue#2]:
[issue#3]:
[issue#4]:
[issue#5]:
[issue#6]:
[issue#7]:
[issue#8]:
[issue#9]:
[issue#10]:
[issue#11]:
[issue#12]:
[issue#13]:
[issue#14]:
[issue#15]:
[issue#16]:
[screencast]: output.gif "dat-shell screencast"