@@ -263,65 +263,6 @@ Configuring a ship's domain causes the `:acme` app to request an HTTPS certifica
264The built-in logic for listening on port 80 is similar. Urbit tries to bind port 80; if it cannot, it tries 8080, then increments until it can bind a port. Port 80 is available to unprivileged process on recent version of macOS. Otherwise, the process needs to either be run as root, or be given special permission (CAP\_NET_BIND on Linux).
264The built-in logic for listening on port 80 is similar. Urbit tries to bind port 80; if it cannot, it tries 8080, then increments until it can bind a port. Port 80 is available to unprivileged process on recent version of macOS. Otherwise, the process needs to either be run as root, or be given special permission (CAP\_NET_BIND on Linux).
266−## Messaging {#messaging}
268−Let’s get started using the `:chat-cli` application, also known more simply as _Chat_. It's the simplest way to talk to people using the command line interface.
272−The most common use for `:chat-cli` right now is, of course, communicating in group chats.
276−In `:chat-cli`, any kind of medium for a message is called a _chat_. There are four "types" of chats, but for now we'll be dealing with the _channel_, a publicly accessible chatroom for general use. We'll discuss the other three kinds in the [chat management](#chat-management) section later on.
278−Join the Urbit Community from Dojo using `:group-store|join ~bitbet-bolbel/urbit-community`. Once you've joined, join the General chat from chat-cli. Use `ctrl-x` to switch from the Dojo prompt to the Chat prompt.
283−~sampel-palnet:chat-cli/ ;join ~darrux-landes/general
286−Now that you're in, try post a line to `~darrux-landes/general`:
289−~sampel-palnet:chat-cli= Hello, world!
292−You'll see your message printed below messages from others that came before it. You can always type `;chats` in the `chat-cli` prompt to list all the chats you're in:
295−~sampel-palnet:chat-cli= ;chats
296−~darrux-landes/general
299−Glyphs will be automatically assigned to channels, but have the option of binding a glyph (single non-alphanumeric character) to the channel you're joining; the syntax is in the form of `;join ~/~dopzod/books +`. The chosen glyph will be the symbol that ends your prompt, and it will be what you use as a shortcut to switch to this channel.
302−~sampel-palnet:chat-cli= ;+
303−~sampel-palnet:chat-cli+
306−Use `;leave` to unsubscribe from a channel:
309−~sampel-palnet:chat-cli= ;leave ~darrux-landes/general
312−Now, let's create a channel we can invite some friends to:
315−~sampel-palnet:chat-cli= ;create channel /my-channel
318−Now you can tell your friends to `;join ~your-urbit/my-channel`.
320−In order to see messages in `:chat-cli` you may need to do the following in Dojo:
@@ -384,1027 +325,3 @@ Detailed message output will look something like this:
384let's try selecting this message!
325let's try selecting this message!
387−### Creating and managing chats {#chat-management}
389−As mentioned before, any urbit can host any number of chats. Existing chats can be deleted or modified with various commands. All commands in this section should be sent from the `chat-cli>` prompt.
393−Syntax: `;create [type] /name +`, where `+` represents an optional glyph.
395−Creates and joins a chat, where `[type]` is any of the following:
396−- `channel`: public chat. Has a blacklist for write control.
397−- `village`: invite-only chat.
398−- `journal`: publicly readable, invite-only for writing.
399−- `mailbox`: publicly writeable, invite-only for reading.
401−Let's create an example mailbox:
404−~sampel-palnet:chat-cli> ;create mailbox /coolbox ^
409−Syntax: `;delete /name`
413−#### Permission management
415−You can permit and ban people from reading and/or writing to the chats you host, using `;invite` and `;banish` command respectively.
417−Syntax: `;invite [rw] /name ~ships`
419−Where `rw` is either `r`, `w`, or `rw`, representing "read" and "write" permissions.
420−And where `~ships` is a comma-seperated list of ships to invite.
422−For example, to grant two people full access to a `village` we created:
425−~sampel-palnet:chat-cli> ;invite rw /hidden-village ~ravmel-ropdyl, ~rapfyr-diglyt
428−Similarly, if we later want to revoke the writing permissions for one of them, but still allow them to read new messages, we can run:
431−~sampel-palnet:chat-cli> ;banish w /hidden-village ~rapfyr-diglyt
436−Glyphs are found at the end of your prompt, as a quick indicator of where
437−your messages will be sent.
439−Glyphs are assigned by chat hash out of the following list:
442−! @ # $ % ^ & ( ) - = _ + [ ] { } ; ' \ : " , . < > ?
445−Alphanumeric characters and `|#/*~` are reserved; all others can be manually assigned.
447−For example, `-` the glyph at the end of the prompt below might indicates that
448−messages sent from this prompt will go to some chat with that glyph:
451−~sampel-palnet:chat-cli-
454−To see what chat is bound to a glyph, use the `;what` command followed by the
455−glyph in question, or use `;what` without specifying a glyph to see all of your
456−subscriptions which are bound to glyphs. For example, to see `=`:
459−~sampel-palnet:chat-cli> ;what =
463−To see all of your glyph bindings:
466−~sampel-palnet:chat-cli> ;what
467−> ~paldev/numismatic-forum
468−. ~middev/ny-martians
472−When the messaging target doesn't have a glyph, we see their name at the end of
473−the prompt instead. Here we're talking into `~dannum-mitryl/homework`:
476−~sampel-palnet:chat-cli[~dannum-mitryl/homework]
481−Syntax: `;bind [glyph] ~host/chat-name`
483−Assigns the chosen glyph to a chat.
488−~sampel-palnet:chat-cli> ;bind + ~dopzod/urbit-help
493−Syntax: `;unbind [glyph] ~host/chat-name`
495−Unassigns the chosen glyph from a chat owned by your ship.
500−~sampel-palnet:chat-cli> ;unbind + ~dopzod/urbit-help
503−If you don't specify a chat, all bindings for that glyph are removed.
507−Received posts are prefixed with a glyph to let you know what the
508−audience is. You can activate an individual post to see the full
511−There are a few special-purpose "glyphs":
513−- `|` - Informational messages
514−- `*` - Posts to a target you don't have a glyph binding for
523−Set audience to `~ship/chat`.
525−#### Set audience by glyph
529−Set audience to the chat previously bound to the chosen glyph.
531−#### Set audience to own chat
535−Set audience to a chat on your own ship.
537−### Miscellaneous configuration
541−Syntax: `;set timezone [+/-][hours]`
543−Adjust the display of timestamps to a specific timezone. Relative to UTC.
547−Syntax: `;set width [number]`
549−Set the rendering width of `:chat-cli` to a specific number of characters.
554−Syntax: `;set showtime`
556−Show the timestamp for each message. This is set by default.
560−Syntax: `;unset showtime`
562−Stop showing the timestamp for each message.
564−#### Sound notification on
566−Syntax: `;set notify`
568−Emit a terminal bell sound if your six-syllable ship name is mentioned in
569−a message. This is set by default.
571−#### Sound notification off
573−Syntax `;unset notify`
575−Do not notify when your ship name is mentioned.
580−Amazon S3, which stands for Amazon Simple Storage Service, is a technology that was introduced by Amazon Web Services for cloud storage that has since been extended more broadly into a [standard programming interface](https://en.wikipedia.org/wiki/Amazon_S3#S3_API_and_competing_services).
582−Our S3 support lets you store credentials for your S3 object storage buckets on your Urbit ship; once you have done so, you will get additional functionality for uploading your own media within Chat and Groups (for avatars).
584−To enable S3 support on your ship you'll need to first set up a bucket, and then add its credentials to Landscape using *either* Landscape or the Dojo.
588−If you’re using AWS, it will have to support signature v2, not v4. We've found DigitalOcean's Spaces to work well also. The bucket has to be publicly readable, allow CORS from `*` origins, allow GET and PUT methods, and allow `*` headers. Your provider should have details on setting access permissions and CORS.
590−### Add your credentials: Landscape
592−Navigate to your `https://<your-ship-url>/~profile/settings`, or click your sigil in the upper-right corner of the window. Fill out the **S3 Credentials** and **S3 Buckets** sections and you're all set!
594−### Add your credentials: Dojo
596−Once you have gotten your bucket setup, poke the `s3-store` on your ship with your details. You can do this in Dojo or in web Dojo.
599−:s3-store|set-endpoint 'endpoint.mys3provider.com'
600−:: AWS endpoint example: s3-us-west-2.amazonaws.com
601−:: Digital Ocean endpoint example: sfo2.digitaloceanspaces.com
602−:s3-store|set-access-key-id 'MYACCESSKEYID'
603−:s3-store|set-secret-access-key 'MYSECRETACCESSKEY'
604−:s3-store|set-current-bucket 'yourbucketname'
607−Done! If you need to peek at s3-store’s state, you can always run :s3-store +dbug (inside Dojo, not web Dojo, unfortunately). You’ll see the additional functionality appear in Groups and Chat.
609−## Shell {#using-the-shell}
611−The Dojo is our shell; it processes system commands and returns output. It's a
612−good place to quickly experiment with Urbit. On the surface the Dojo is just a
613−Hoon REPL. On the inside, the Dojo is a system for operating on and transforming
618−You can use the Dojo to run arbitrary Hoon code, as well as non-Hoon system
623−Evaluate a Hoon expression (whitespace matters):
626−~your-urbit:dojo> (add 2 2)
627−~your-urbit:dojo> %+ add 2 2
630−Tall-form Hoon may require multiple lines:
633−~your-urbit:dojo> %+ add
638−Hoon uses something called [the subject](@/docs/tutorials/hoon/hoon-school/the-subject-and-its-legs.md).
639−The Dojo has its own subject and that's where Hoon's equivalent of variables,
640−called faces, are stored.
642−Use `=var` to save faces to the Dojo subject.
645−~your-urbit:dojo> =foo (add 2 2)
648−Note, however, that `=var` is Dojo syntax, not Hoon syntax. You cannot bind a
649−face in a `.hoon` file in this way.
653−Use `=dir` to set the current working directory:
656−~your-urbit:dojo> =dir %/gen
659−(`%` represents your current directory. For a complete explanation on urbit
660−paths, see the [filesystem section](#filesystem).)
662−Generators (files in `/gen`) are run with `+`:
665−~your-urbit:dojo> +hello 'world'
668−Save output to a file in `%clay` with `*`:
671−~your-urbit:dojo> *some/file/path/hoon 'hello world'
674−Run system commands from `:hood`, like `reload`, using `|`:
677−~your-urbit:dojo> |reload %eyre
682−Generators are short Hoon scripts, saved as `.hoon` files in the `/gen`
683−directory. Many Dojo commands exist in the form of generators. The syntax for
684−running a generator is `+genname` for a generator saved as `genname.hoon`.
688−Accepts a path and displays the file. Similar to Unix `cat`.
691−~your-urbit:dojo> +cat %/gen/curl/hoon
696−Generates a code that is used to remotely log into your ship. No
700−~your-urbit:dojo> +code
703−You can change your code to a new randomly generated one by entering `|code
704−%reset`. Please note that this will prevent [Bridge](@/docs/glossary/bridge.md)
705−from being able to derive your code in the future.
709−Retrieves data from a URL. Accepts a `tape`. Similar to Unix `curl`.
712−~your-urbit:dojo> +curl "http://nyt.com"
717−Just prints the argument. Accepts a `@ta`.
720−~your-urbit:dojo> +hello 'mars'
725−Similar to Unix `ls`. Accepts a path.
728−~your-urbit:dojo> +ls %/gen
729−~your-urbit:dojo> +ls /~talsur-todres/home/2/gen/program
734−Compile the current state of the kernel and output a
735−noun. Usually downloaded to a file in unix. No arguments.
738−~your-urbit:dojo> .urbit/pill +solid
743−Testrunner. Can test multiple generators at once, conventionally ones
744−in the `/test` folder. Takes a path.
747−~your-urbit:dojo> +test /lib
752−Generate a ticket for an urbit ship. Takes an urbit name (`@p`).
756−~your-urbit:dojo> +ticket ~talsur-todres-your-urbit
761−Generate a recursive directory listing. Takes a path.
764−~your-urbit:dojo> +tree %/sys
769−The hood is the system daemon. See `gen/hood` and `app/hood`.
771−`|hi` - Sends a direct message. Sort of like Unix `write`. Accepts
772−an urbit name (`@p`) and a string (`tape`, which is text wrapped with double-quotes).
775−~your-urbit:dojo> |hi ~binzod "you there?"
778−`|link` / `|unlink` - Link / unlink a remote app. Accepts an
779−Urbit name and an app name.
782−~your-urbit:dojo> |link ~talsur-todres %octo
785−`|mass` - Prints the current memory usage of all the kernel modules.
789−~your-urbit:dojo> |mass
792−`|reload` - Reloads a kernel module (vane) from source. Accepts any
793−number of vane names.
796−~your-urbit:dojo> |reload %clay %eyre
799−`|reset` - Reloads `hoon.hoon` and all modules. No arguments.
802−~your-urbit:dojo> |reset
805−`|start` - Starts an app. Accepts an app name.
808−~your-urbit:dojo> |start %curl
815−#### Sources and sinks
817−A Dojo command is either a **source** or a **sink**. A source is just something
818−that can be printed to your console or the result of some computation. A
819−sink is an **effect**: a change to the filesystem, a network message, a
820−change to your environment, or a typed message to an app.
822−Sources can be chained together, but we can only produce one effect per
827−#### `=` - Set variable
829−Set any environment variable:
832−~your-urbit:dojo> =foo 42
833−~your-urbit:dojo> (add 2 foo)
838−Make sure to note that `=var` is Dojo syntax, not Hoon syntax. You cannot bind a
839−variable in a `.hoon` file in this way.
841−#### Special variables
843−There are a few special variables that the Dojo maintains.
845−#### `:` - Send to app
847−`:app` goes to a local `app`, `:~ship/app` goes to the `app` on `~ship`.
849−Send a `helm-hi` message to `hood`:
852−~your-urbit:dojo> :hood &helm-hi 'hi'
855−Apps usually expect marked data, so `&` is often used here.
857−#### `*` - Save in `%clay`
859−Save a new `.hoon` file in `gen`:
862−~your-urbit:dojo> *%/gen/foo/hoon '# hello'
865−The last component of the path is expected to be the mark (or mime
868−#### `.` - Export to Unix
870−Export a noun to Unix with `.`:
873−~your-urbit:dojo> .foo/bar/baz (add 2 2)
876−Which creates a file at `pier/.urb/put/foo/bar.baz`.
878−This is very often used with `+solid`:
881−~your-urbit:dojo> .urbit/pill +solid
884−Which outputs a new `urbit.pill` to `pier/.urb/put/urbit.pill`
888−#### `_` - Run a function
890−Use `_` to run a gate (or function):
892−Write an arbitrary function and pass data to it:
895−~your-urbit:dojo> _|=([a=@] (mul a 3)) 3
899−Use a function to get the status code from an http request:
902−~your-urbit:dojo> _|=([p=@ud q=* r=*] p) +http://google.com
906−#### `+` `-` - HTTP requests
908−`+http[s]://example.com` - sends a GET request
910−`+http[s]://example.com &json [%s 'hi']` - sends a POST request with the
911−JSON `"hi"` in the body.
913−`-http[s]://example.com &json [%s 'hi']` - sends a PUT request with the
914−JSON `"hi"` in the body.
916−Note that the first of these is a source while the last two are sinks.
918−#### `+` - Generators
920−Generators are simple Hoon scripts loaded from the filesystem. They live
923−An example of a generator that is built into your urbit is `+code`. It produces
924−the code needed to log into your ship remotely.
927−~your-urbit:dojo> +code
928−fintyr-haldet-fassev-solhex
933−You can use `=` to set an environment variable in Dojo, but there are
934−a few reserved names that have special uses.
938−Current working `%clay` desk and revision. Read / write.
943−~your-urbit:dojo> =dir %/gen
944−~your-urbit:dojo> +ls %
945−404/hoon docs/ dojo/hoon lib/ listen/hoon md static/udon talk/ testing/udon tree/main/ unmark/ womb/
950−Current set of libraries (`/lib`) in your environment. Can be set
951−with `/+`. Read / write.
956−~your-urbit:dojo> /+ number-to-words
958−Now we can use arms from lib/number-to-words.hoon
960−~your-urbit:dojo> (to-words:eng-us:number-to-words 123.456)
965−Current set of structures (`/sur`) in your environment. Can be set
966−with `/-`. Read / write.
971−~your-urbit:dojo> /- sole
973−Now we can use arms in sur/sole.hoon.
975−~your-urbit:dojo> `sole-effect:sole`[%bel ~]
980−The current (128-bit `@da`) time. Read-only.
985−~your-urbit:dojo> now
986−~2016.3.21..21.10.57..429a
991−The current urbit ship. Read-only.
996−~your-urbit:dojo> our
1002−512 bits of entropy. Read-only.
1007−~your-urbit:dojo> eny
1008−\/0vnt.d474o.gpahj.jcf3o.448fh.2lamb.82ljm.8ol8u.b02vi.mrvvp.b7et2.knb7m.l8he\/
1009− 8.8qb9s.drm36.77n9b.a0qst.30g03.l5lb5.nvsbc.v39tn
1015−If you encounter `%dy-edit-busy` while entering commands, it is
1016−because your Dojo is blocked on a timer or an HTTP request. Type backspace
1017−and your Dojo will end the blocked command.
1020−## Filesystem {#filesystem}
1022−Urbit has its own revision-controlled filesystem, Clay. Clay is a typed, global,
1023−referentially transparent namespace. An easy way to think about it is like typed
1026−The most common way to use Clay is to mount a Clay node in a Unix directory. The mounted directory is always at the root of your pier directory.
1030−This quick-start guide will walk you through some common commands. Follow along
1031−using your Dojo. When you get a `>=` message after entering a command, this means
1032−that the command was successful.
1034−It's important to note that whenever you want to sync changes from your Unix
1035−directory to your ship, you must use the `|commit %desk` command, where `%desk`
1036−is the desk that you'd like to sync to.
1038−When developing it's a good idea to use a separate desk. Create a `%sandbox`
1039−desk based on the `%home` desk:
1042−~your-urbit:dojo> |merge %sandbox ~your-urbit %home
1045−Running `our` produces your ship-name, meaning that you can run the following
1046−command instead of typing out the entire thing. Useful for comets due to their
1050−~your-urbit:dojo> |merge %sandbox our %home
1053−Most of the time we want to use Clay from Unix. Mount the entire contents of
1054−your `sandbox` desk to Unix:
1057−~your-urbit:dojo> |mount /=sandbox=
1060−To explore the filesystem from inside Urbit `+ls` and `+cat` are useful. `+ls`
1061−displays files in the current directory, and `+cat` displays the contents of
1064−We can use `%` to mean "current directory." The result of the command below
1065−is just like using `ls` in a Unix terminal.
1068−~your-urbit:dojo> +ls %
1071−Notice how `+cat %` does the same thing. That's because everything in Clay,
1072−including directories, is a file.
1074−Sync from your friend `~some-ship`'s `%experiment` desk to your
1078−~your-urbit:dojo> |sync %sandbox ~some-ship %experiment
1081−If and when your sync is successful, you will receive a message:
1084−activated sync from %experiment on ~some-ship to %sandbox
1087−The ship that you sync from will get their own message indicating that you're
1088−both connected as peers:
1091−; ~your-urbit is your neighbor.
1100−A path in Clay is a list of URL-safe text, restricted to the characters
1101−`[a z]`,`[0 9]`, `.`, `-`, `_`, and `~`. Formally this is a `(list knot)`,
1102−meaning that each segment, delineated by `/`, is of the `knot` ASCII-text type.
1103−In other words, paths are expressed as `/foo/bar/baz`. File extensions are
1104−separated from file names with `/`, not `.`. Extensions are syntactically
1105−identical to subdirectories, except that they must terminate the path.
1107−Paths begin with a piece of data called a `beak`. A beak is formally a
1108−`(p=ship q=desk r=case)`; it has three components, and might look like
1109−`/~dozbud-namsep/home/11`.
1111−The first `beak` component is `ship`, which is, as you might guess, the name of
1112−an Urbit ship. The second component is `desk`, which is a workspace meant to
1113−contain other directories; the default desk is `%home`. The third component is
1114−`case`, which represents version information in various ways: date and time;
1115−a version sequence, which is a value incremented by one whenever a file on the
1116−given `desk` is modified; or an arbitrary plaintext label.
1118−You can find what your `beak` is at any given moment by
1119−typing `%` in the Dojo and looking at the first three results.
1121−We use `beak`s because, unlike the current internet, the Urbit network uses a
1122−global namespace. That means that a file named `example.hoon` in the `/gen`
1123−directory on the `%home` desk of your ship `~lodleb-ritrul` would have a
1124−universal address to anyone else on the network:
1125−`/~lodleb-ritrul/home/186/gen/example/hoon`. That, of
1126−course, doesn't mean that everyone on the network has privileges to access that
1129−The structure that combines a `beak` with further path information is called a
1134−The `%` command, which we gestured at in the above section, represents the
1135−**relative path**, which is the path where you are currently working. If your
1136−working directory is just your home desk, indicated by the
1137−prompt `~your-planet:dojo>`, then running the command below will print your
1138−working directory's `beam` information: your `beak`, and a `~` that represents
1139−the empty list since no path is present.
1145−`%`s can be stacked to indicate one level further up in the hierarchy for each
1146−additional `%`. Try the following command:
1149−~your-planet:dojo> %%%
1152−You'll probably notice that it only has your ship name and the empty list. The
1153−two additional `%`s abandoned the `case` and the `desk` information by moving
1154−up twice the hierarchy.
1156−There are no local relative paths. `/foo/bar` must be written as
1161−You don't need to write out the explicit path every time you want to reference
1162−somewhere outside of your working directory. You can substitute `=` for the
1165−Recall that a full address in the the Urbit namespace is a `beam`: the
1166−`/ship/desk/case/path`. If you've switched to another desk before, you're
1167−already familiar with substitution syntax:
1170−~your-urbit:dojo> =dir /=sandbox=
1173−The above command uses substitution to use your current `ship` and
1174−`case`; only the `desk` argument, which is located between the other two, is
1175−given something new. Without substitution, you would need to write:
1178−~your-urbit:dojo> =dir /~your-urbit/sandbox/85
1181−Substitutions work the same way in `beak`s (the `ship/desk/case` part) and
1182−paths. For example, if you are in the `/gen` directory, you can reference a file
1183−in the `/app` directory like below. (`+cat` displays the contents of a file).
1186−~your-urbit:dojo> =dir %/gen
1187−~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen> +cat /===/app/curl/hoon
1190−Note what was substituted out, and note that we don't need to separate `=` with
1193−If we changed our working directory to something called `/gen/gmail`, we could
1194−access a file called
1197−~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen> =dir %/gmail
1198−~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen/gmail> +cat /===/app/=/split/hoon
1201−Because both paths share a directory named `/gmail` at the same position in the
1202−address hierarchy – which, if you recall, is just a `list` – the above command
1205−We can do the same thing between desks. If `%sandbox` has been merged with
1206−`%home`, the following command will produce the same results as the above
1210−~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen/gmail> +cat /=sandbox=/app/=/split/hoon
1213−Most commonly this is used to avoid having to know the current revision
1214−number in the `dojo`: `/~lodleb-ritrul/home/~2018.10.2..00.35.44..d7e8/gen/example/hoon`
1216−#### Changing directories
1218−Change the working directory with `=dir`. It's our equivalent of the Unix `cd`.
1220−For example, the syntax to navigate to `/home/gen/ask` is:
1223−~your-urbit:dojo> =dir /=home=/gen/ask
1226−This command will turn your prompt into something like this:
1229−~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen/ask>
1232−Using `=dir` without anything else uses the null path, which returns you to
1236−~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen/ask> =dir
1239−Your dojo prompt will turn back into `~your-urbit:dojo>`.
1241−To go up levels in the path hierarchy, recall the relative path expression
1242−`%`. Stacking them represents another level higher in the hierarchy than
1243−the current working directory for each `%` beyond the initial. The command below
1244−brings you one level up:
1247−~your-urbit:dojo> =dir %/gen
1248−~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen> =dir %%
1251−### Revision-control
1255−Syntax: `|mount /clay/path [Unix-name]`
1257−Mount the `clay-path` at the Unix mount point `Unix-name`.
1262−|mount %/gen generators
1265−Mounts `%/gen` to `/generators` inside your pier directory.
1270−|unmount [clay-path || Unix-name]
1273−Unmount the path or name from Unix.
1281−Unmounts the Clay path `%/gen` from whatever name it was mounted as.
1284−|unmount %generators
1287−Unmounts the Unix path `/generators`.
1292−|merge desk beak[, =gem strategy]
1295−Merges a `beak` into a `desk` using an optional merge `strategy`.
1297−A `beak` is a ship-desk-case triple, encoded as a
1298−path(`/~dozbud/home/2`)
1303−|merge %home-work /=home=, =gem %fine
1306−Merge `/=home=` into `%home-work` using merge strategy `%fine`.
1309−|merge %examples ~wacbex-ribmex %examples
1312−Merge the `%examples` desk from `~waxbex-ribmex`
1317−|sync desk plot [plot-desk]
1320−Subscribe to continuous updates from remote `plot` on local `desk`.
1321−`plot-desk` can specify the remote `desk` name. When omitted it defaults
1322−to being the same as `desk`. Non-comet urbits have
1323−`|sync %home ~parent %kids` automatically set up (where `~parent` is the
1324−planet that issued a moon, the star that issued a planet, or the galaxy
1325−that issued a star).
1330−|sync %home-local ~dozbud %home
1338−|unsync desk plot [plot-desk]
1341−Unsubscribe from updates from remote `plot` on local `desk` with
1342−optional `plot-desk`. Arguments must match original `|sync` command.
1347−|unsync %home-local ~dozbud %home
1356−Label the current version of `desk` `name`.
1361−|label %home release
1364−### Merge strategies
1366−See [Clay merge strategies](@/docs/tutorials/arvo/clay.md#merge-strategies).
1372−Syntax: `+cat path [path ...]`
1374−Similar to Unix `cat`. `+cat` takes one or more `path`s, and prints their
1375−contents. If that `path` is a file, the contents of the file is printed. If the
1376−`path` terminates in a directory, the list of names at that path is produced.
1382−Similar to Unix `ls`. `+ls` takes a single `path`.
1384−Produces a list of names at the `path`.
1387−~your-urbit:dojo> +cat %/our/home/gen/curl/hoon
1394−Remove the data at `path`. `Path` must be a path to the actual node, not a
1399−Syntax: `|cp to from`
1401−Copy the file at `from` into the path `to`.
1405−Syntax: `|mv to from`
1407−Move the file at `from` into the path `to`.
1409−In Clay, `|mv` is just a shorthand for `|cp` then `|rm`. The `|rm`
1410−doesn't happen unless the `|cp` succeeds.