on master help sign in
update operators manual wrt dist
83b98e2tinnus-napbus
content/using/os/basics.md+42−141
@@ -8,16 +8,20 @@ aliases = ["docs/using/messaging/", "docs/using/admin/"]
8hidetitle = "true"
8hidetitle = "true"
9+++
9+++
10
10
11−Your urbit (also called your _ship_) is a persistent Unix process that you
11+This document deals with:
12−mainly control from its console, called the `dojo`.
13
12
13+- Running an Urbit ship with the ordinary runtime [from the command line](/getting-started/cli).
14+- Basic setup, configuration and usage in Urbit's shell called the `dojo`.
15+
16+If you're looking for information on using the GUI application [Port](/getting-started#port), see the [Port guide](/using/running/port) instead.
17+
14−### Shutdown
18+## Shutdown
15
19
16You can turn your urbit off with `Ctrl-d` from the Chat or Dojo prompts.
20You can turn your urbit off with `Ctrl-d` from the Chat or Dojo prompts.
17
21
18You can force-quit your urbit with `Ctrl-z` from anywhere.
22You can force-quit your urbit with `Ctrl-z` from anywhere.
19
23
20−### Restart
24+## Restart
21
25
22To restart your urbit simply pass the name of your pier:
26To restart your urbit simply pass the name of your pier:
23
27
@@ -31,7 +35,7 @@ or
31$ ./urbit comet
35$ ./urbit comet
32```
36```
33
37
34−### Logging
38+## Logging
35
39
36To log an urbit's command line output to a file, use `script`:
40To log an urbit's command line output to a file, use `script`:
37
41
@@ -39,7 +43,7 @@ To log an urbit's command line output to a file, use `script`:
39$ script urbit.log ./urbit your-urbit
43$ script urbit.log ./urbit your-urbit
40```
44```
41
45
42−### Moving your pier
46+## Moving your pier
43
47
44Piers are designed to be portable, but it _must_ be done while the urbit
48Piers are designed to be portable, but it _must_ be done while the urbit
45is not running. Urbit networking is stateful, so you can't run two copies
49is not running. Urbit networking is stateful, so you can't run two copies
@@ -66,13 +70,13 @@ Delete the tar file, and, after installing Urbit on your new server, start your
66./urbit your-urbit
70./urbit your-urbit
67```
71```
68
72
69−### Hardware requirements
73+## Hardware requirements
70
74
71Urbit can run on any x86 computer (unofficial, unsupported [ARM binaries](https://botter-nidnul.github.io/AArch64_Urbit_Static_Binaries.html) are also available), ideally with at least 2GB of RAM.
75Urbit can run on any x86 computer (unofficial, unsupported [ARM binaries](https://botter-nidnul.github.io/AArch64_Urbit_Static_Binaries.html) are also available), ideally with at least 2GB of RAM.
72
76
73Urbit maintains a persistent log of the history of your ship. Eventually this log will be automatically trimmed when necessary, but for now it only increases in size. An actively used planet will consume 5-50 GB of storage space per year of operation.
77Urbit maintains a persistent log of the history of your ship. Eventually this log will be automatically trimmed when necessary, but for now it only increases in size. An actively used planet will consume 5-50 GB of storage space per year of operation.
74
78
75−### Console
79+## Console
76
80
77Your Urbit terminal is separated into two parts: the prompt (the bottom line) and the record (everything above that). The record is shared; all the output from all the apps in your command set appears in it. The prompt is multiplexed.
81Your Urbit terminal is separated into two parts: the prompt (the bottom line) and the record (everything above that). The record is shared; all the output from all the apps in your command set appears in it. The prompt is multiplexed.
78
82
@@ -107,13 +111,13 @@ Ctrl-u Kill to beginning of line
107Ctrl-y Yank from kill buffer
111Ctrl-y Yank from kill buffer
108```
112```
109
113
110−### Updates
114+## Updates
111
115
112−By default, you will automatically receive updates ([OTAs](/docs/glossary/ota-updates)) from your sponsor. To check your OTA source, run `|ota` in the [dojo](/docs/glossary/dojo).
116+By default, your `%base` [desk](/docs/glossary/desk) (which contains the [Arvo](/docs/glossary/arvo) kernel and core apps) receives updates ([OTAs](/docs/glossary/ota-updates)) from your sponsor. Other desks will receive updates from their respective publishers. To check the OTA source for each desk, run `+vats` in the [dojo](/docs/glossary/dojo). It will print out details for each desk - the `source` field shows which ship the desk gets updates from and the `updates` field shows `tracking` if automatic updates are enabled.
113
117
114−If for some reason (for example, if your sponsor is out of date), you can switch OTA sources by running `|ota ~otasrc %kids` in the dojo, where `~otasrc` is the ship from which you want to receive updates. It is a good idea to contact the source ship and ask permission to sync from them.
118+If for some reason updates are not enabled or the current source is not online or up to date, you can enable updates or change source with the `|install` command.
115
119
116−If OTAs are not succeeding, or if you are on an version of Urbit before the `|ota` command was introduced, you can run `|merge %home (sein:title our now our) %kids, =gem %take-that`. **Note:** This will wipe out any custom changes to the base distribution.
120+`|install (sein:title our now our) %landscape` will enable updates to the `%landscape` desk from your sponsor. `|install ~some-ship %landscape` will enable updates to the landscape desk from whatever ship is specified in place of `~some-ship`. For third party apps, make sure to correctly specify the publisher's ship. Each desk's updates are managed separately, so you'll need to run this for each desk separately. For the `%base` desk specifically, you sync from `%kids` rather than `%base` on the remote ship, so must specify it like `|install (sein:title our now our) %kids, =local %base`.
117
121
118#### Additional OTA Troubleshooting
122#### Additional OTA Troubleshooting
119
123
@@ -124,65 +128,41 @@ Please check the Support Wiki for additional OTA troubleshooting, such as:
124OTAs](https://github.com/urbit/support/wiki/Stuck-flow-preventing-planets-from-receiving-OTAs),
128OTAs](https://github.com/urbit/support/wiki/Stuck-flow-preventing-planets-from-receiving-OTAs),
125and [No content shows in Links page after OTA](https://github.com/urbit/support/wiki/No-content-shows-in-Links-page-after-OTA).
129and [No content shows in Links page after OTA](https://github.com/urbit/support/wiki/No-content-shows-in-Links-page-after-OTA).
126
130
127−### Landscape
131+## Web interface
128
132
129−On startup Urbit tries to bind to `localhost:80`. If you're already running something on port `80` -- such as any other HTTP server, or another urbit -- you'll find the urbit that you just started on `8080`, `8081`, and so on. For planets only, we also provide web domains through Urbit's own domain. Any planet `~your-urbit` is also at `your-urbit.arvo.network`, but only after you [set up DNS](#dns-setup).
133+On startup, urbit tries to bind to `localhost:80`. If you're already running something on port `80`, or your host OS will not allow urbit to bind port `80`, urbit will try `8080`, then `8081`, `8082`, and so on. For planets only, we also provide subdomains of `arvo.network` for free. Any planet `~your-urbit` is also at `your-urbit.arvo.network`, but only after you [set up DNS](#dns-setup).
130
134
131−Once running, you can sign into Landscape, your ship’s web interface, from `http://localhost` or `https://your-urbit.arvo.network`. Since our HTTPS isn't audited / battle tested, we just call it "secure" HTTPS. You can find that on `8443`. Or `8444` (and so on) if you're already running something on `8443`.
135+Once running, you can sign into your ship’s web interface from `http://localhost` (if bound to port `80`), `http://localhost:8080` (if bound to port `8080`), or `https://your-urbit.arvo.network` if you've set up DNS.
132
136
133−### Moons {#moons}
137+## Moons {#moons}
134
138
135−Planets can spawn moons, which are meant for connected devices: phones, smart TVs, digital thermostats. The basic idea is that your planet runs permanently in a data center somewhere, while moons run on all your devices. Each planet can issue ~4 billion (`2^32`) moons.
139+Planets can spawn moons, which are conceptually meant for connected devices: phones, smart TVs, digital thermostats. The basic idea is that your planet runs permanently in a data center somewhere, while moons run on all your devices. Each planet can issue ~4 billion (`2^32`) moons.
136
140
137To generate a random moon from your planet, run:
141To generate a random moon from your planet, run:
138
142
139```
143```
140~sampel-palnet:dojo> |moon
144~sampel-palnet:dojo> |moon
141moon: ~faswep-navred-sampel-palnet
145moon: ~faswep-navred-sampel-palnet
142−\/0w5cT5t.wCO6i.~e1xg.Oz0qb.QNO6I.3Kt2T.h9M9F.U3vU~.X3Qu0.gtb19.IYTkY.80kWZ.SI\/
146+0w5cT5t.wCO6i.~e1xg.Oz0qb.QNO6I.3Kt2T.h9M9F.U3vU~.X3Qu0.gtb19.IYTkY.80kWZ.SIEUE.DXa8i.TiDof.o3-1C.RHLKS.k81M0.ecz5o.ic0Bg.600g1
143− EUE.DXa8i.TiDof.o3-1C.RHLKS.k81M0.ecz5o.ic0Bg.600g1
144−\/ \/
145```
147```
146
148
147−You must manually edit the output of `|moon` to get the correct format for the `key`:
149+The `moon:` part is the name of the moon, in this case `~faswep-navred-sampel-palnet`. The next line starting with `0w5...` is the private key necessary to boot it.
148−
149−- strip out the `\/`
150−
151−- combine into one line, omitting spaces
152−
153−`key` would be `0w5cT5t.wCO6i.~e1xg.Oz0qb.QNO6I.3Kt2T.h9M9F.U3vU~.X3Qu0.gtb19.IYTkY.80kWZ.SIEUE.DXa8i.TiDof.o3-1C.RHLKS.k81M0.ecz5o.ic0Bg.600g1`
154−in this example.
155−
156−Put `key` in a file and that file becomes `keyfile`.
157−
158−You can use the resulting output in the same installation flow from the [Installing Urbit](/getting-started/) guide, following the same scheme as for booting a planet. That scheme is:
159−
160−```sh
161−$ ./urbit -w <moonname> -G <key> -c <piername>
162−```
163−
164−or
165−
166−```sh
167−$ ./urbit -w <moonname> -k <keyfile> -c <piername>
168−```
169
150
170−The `-c <piername>` argument is not required, but it is recommended; otherwise,
151+You can just copy the key (which in this case would be the `0w5[...]600g1` part) to the clipboard, or save it in a `.key` file, for example `faswep-navred-sampel-palnet.key`.
171−the resulting directory is a rather unwieldy moon name.
172
152
173−Here's how an example moon might be booted:
153+You can use the key and moon name in the same installation flow from the [Command line installation](/getting-started/cli) guide, following the same scheme as for booting a planet. That scheme is:
174
154
175```sh
155```sh
176−$ ./urbit -w faswep-navred-sampel-palnet -G <key> -c mymoon
156+$ ./urbit -w <moon-name> -G <key> -c <pier-name>
177```
157```
178
158
179or
159or
180
160
181```sh
161```sh
182−$ ./urbit -w faswep-navred-sampel-palnet -k <keyfile> -c mymoon
162+$ ./urbit -w <moon-name> -k <key-file> -c <pier-name>
183```
163```
184
164
185−Moons are automatically synced to their parent `%kids` desk, and can control applications on their parent planet using `|link`.
165+Note the `<moon-name>` excludes the leading `~`. The `-c <piername>` argument is not required, but it is recommended; otherwise, the resulting directory is a rather unwieldy moon name. Moons are automatically synced to their parent `%kids` desk, and can control applications on their parent planet using `|link`.
186
166
187To breach a moon -- that is, to reset its presence on the network so that it's treated as a freshly spawned ship by others -- run from the parent ship:
167To breach a moon -- that is, to reset its presence on the network so that it's treated as a freshly spawned ship by others -- run from the parent ship:
188
168
@@ -193,10 +173,12 @@ To breach a moon -- that is, to reset its presence on the network so that it's t
193To cycle the keys of a moon without breaching, run:
173To cycle the keys of a moon without breaching, run:
194
174
195```
175```
196−|moon-cycle-keys ~sampel-sipnym-wicdev-wisryt
176+|moon-cycle-keys ~faswep-navred-sampel-palnet
197```
177```
198
178
179+You can then run `|rekey` on the moon with the key given by the above command as the argument.
180+
199−### Escaping A Sponsor {#escape}
181+## Escaping A Sponsor {#escape}
200
182
201To use the network as a planet or star, you must be sponsored by an active star
183To use the network as a planet or star, you must be sponsored by an active star
202or galaxy, respectively. If your sponsor isn't suiting your needs, you can
184or galaxy, respectively. If your sponsor isn't suiting your needs, you can
@@ -204,55 +186,35 @@ escape to a different one. This can be done with
204[Bridge](https://bridge.urbit.org/) following the instructions
186[Bridge](https://bridge.urbit.org/) following the instructions
205[here](/using/id/using-bridge#escaping-your-sponsor).
187[here](/using/id/using-bridge#escaping-your-sponsor).
206
188
207−### Continuity breaches
208−
209−While the Urbit network is in this alpha state, we sometimes have to reboot the whole network. This happens either when major changes need to be shipped or we hit a bug that can't be fixed over the air.
210−
211−Because Urbit networking is stateful we call this a _continuity breach_. Everything has to be restarted from scratch. Your pier will continue to function after we have breached, but it won’t connect to the rest of the Urbit network.
212−
213−When this happens, back up any files you'd like to save, shut down your urbit, and recreate it (as if you were starting for the first time).
214−
215−### Life and rift number
189+## Life and rift number
216
190
217You can check your ship's _life_ and _rift_ number by running `+keys our` in
191You can check your ship's _life_ and _rift_ number by running `+keys our` in
218dojo. You can inspect another ship's life and rift number by running `+keys ~sampel-palnet`. For information on what life and rift are, see [Life and Rift](/docs/azimuth/life-and-rift).
192dojo. You can inspect another ship's life and rift number by running `+keys ~sampel-palnet`. For information on what life and rift are, see [Life and Rift](/docs/azimuth/life-and-rift).
219
193
220## DNS setup {#dns-setup}
194## DNS setup {#dns-setup}
221
195
222−We have a system that lets you request a domain name for your ship in the form of `ship.arvo.network`, where `ship` is your ship's name minus the `~`. This allows users to access their ships remotely using Landscape, our graphical web interface.
196+We have a system that lets you request a domain name for your ship in the form of `ship.arvo.network`, where `ship` is your ship's name minus the `~`. This allows users to access their ships remotely using Landscape, our graphical web interface. Stars and planets follow the same DNS request process, and galaxies have their own requirements. Moons and comets are not supported.
223−
224−Stars and planets follow the same process DNS request process, and galaxies have their own requirements. Moons and comets are not supported.
225−
226−### Planets and Stars
227
197
228For a planet or star's DNS request to be made and fulfilled, they must be hosting their ship someplace with a public IP address, and its HTTP server must be listening on port 80.
198For a planet or star's DNS request to be made and fulfilled, they must be hosting their ship someplace with a public IP address, and its HTTP server must be listening on port 80.
229
199
230−To get `ship.arvo.network` on a planet or star, you must set up DNS routing with its parent ship by starting the `:dns` app.
231−
232−To do so, simply run this command in your ship's Dojo, passing the IP address as an argument, using the .0.0.0.0 (`@if`) syntax. For example:
200+To initiate a DNS request, run the following thread in your ship's dojo, passing the IP address as an argument with .0.0.0.0 (`@if`) syntax. For example:
233
201
234```
202```
235−> -dns-address &dns-address [%if .1.2.3.4]
203+-dns-address [%if .1.2.3.4]
236```
204```
237
205
238−`:dns`, running locally, will make an HTTP request to that IP address on port 80 to confirm that it is itself available at that IP and port. If that fails, you'll receive a `%bail-early` message in `:chat-cli`; this request will retry a few times. If the self-check is successful, the request is relayed to `~zod`, and you'll receive a message saying, `request for DNS sent to ~zod`. Once `~zod` has acknowledged receipt of the request, your local `:dns` app will send a `:chat-cli` message saying `awaiting response from ~zod`.
206+The `%dns-address` thread, running locally, will make an HTTP request to that IP address on port 80 to confirm that it is itself available at that IP and port. If that fails, you'll receive a `couldn't access ship on port 80` message in the terminal; this request will retry a few times. If the self-check is successful, the request is relayed to `~zod`, and you'll receive a message saying, `request for DNS sent to ~zod`. Once `~zod` has acknowledged receipt of the request, the `%dns-address` thread will print a terminal message saying `awaiting response from ~zod`.
239
207
240−The request will be picked up shortly, and the `ship.arvo.network` DNS record will be set to the given IP address. Once that's set up, `~zod` will be notified and `~zod` will, in turn, notify your ship. That ship will now try to verify that it can reach itself on `ship.arvo.network` over port 80. If it can't, it'll send a message saying, `unable to access via ship.arvo.network`. If it can, it will configure itself with that domain and say `confirmed access via ship.arvo.network`.
208+The request will make take a little time to be fulfilled, but eventually the `ship.arvo.network` DNS record will be set to the given IP address. Once that's set up, `~zod` will be notified and `~zod` will, in turn, notify your ship. That ship will now try to verify that it can reach itself on `ship.arvo.network` over port 80. If it can't, it'll send a message saying, `unable to access via ship.arvo.network`. If it can, it will configure itself with that domain and say `confirmed access via ship.arvo.network`.
241
209
242Great! You're set up now. Try accessing your `ship.arvo.network` in your browser to use Landscape; we recommend Chrome or Brave.
210Great! You're set up now. Try accessing your `ship.arvo.network` in your browser to use Landscape; we recommend Chrome or Brave.
243
211
244### Configuring SSL
212### Configuring SSL
245
213
246−To enable SSL on your ship, use the `acme` agent, which will request a certificate through Let's Encrypt. First, make sure the agent is started:
214+To enable SSL on your ship, you must poke the `%acme` agent with the domain encoded in a path and it will request a certificate. The path format is `/tld/your_domain/your_subdomain`, so if your domain is `sampel-palnet.arvo.network`, you'd use it like so:
247
215
248```
216```
249−> |start %acme
250−```
251−
252−Next, provide the path for the SSL certificate by poking the `acme` agent. The path format is `/tld/your_domain/your_subdomain`, so if your domain is `sampel-palnet.arvo.network`, you'd use it like so:
253−
254−```
255−> :acme &path /network/arvo/sampel-palnet
217+:acme &path /network/arvo/sampel-palnet
256```
218```
257
219
258### Galaxies
220### Galaxies
@@ -267,69 +229,8 @@ There is a command for galaxies that will try to re-use their already-necessary
267
229
268This will make HTTP-requests to self-check availability over `galaxy.$AMES-DOMAIN` (currently galaxy.urbit.org), where `galaxy` is the galaxy's name minus the `~`.
230This will make HTTP-requests to self-check availability over `galaxy.$AMES-DOMAIN` (currently galaxy.urbit.org), where `galaxy` is the galaxy's name minus the `~`.
269
231
270−Otherwise, `-dns-auto` works the same as `:dns|ip` does with stars and planets: if it's available or unavailable, Chat messages, and so on.
232+Otherwise, `-dns-auto` works the same as `-dns-address` does with stars and planets: if it's available or unavailable, terminal messages, and so on.
271
233
272### Ports
234### Ports
273
235
274−The built-in logic for listening on port 80 is to try to bind to 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).
236+The built-in logic for listening on port 80 is to try to bind to 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 versions of macOS. Otherwise, the process needs to either be run as root, or be given special permission (`sudo setcap 'cap_net_bind_service=+ep' /path/to/urbit/binary` on Linux).
275−
276−### Hoon
277−
278−You can use Chat to evaluate Hoon code and share the results with everyone in a chat. To do so, preface your Hoon with `#`.
279−
280−```
281−~sampel-palnet:chat-cli= #(add 2 2)
282−```
283−
284−This will print as:
285−
286−```
287−~sampel-palnet# (add 2 2)
288− 4
289−```
290−
291−### URLs
292−
293−To share a URL, send it as its own message, with no content before or after it.
294−
295−```
296−~sampel-palnet:chat-cli= https://urbit.org/
297−```
298−
299−This will print as:
300−
301−```
302−~sampel-palnet/ https://urbit.org/
303−```
304−
305−### Expanding messages
306−
307−In the case of URLs, they may be too long to display on a single message line. For Hoon code, the code or result could be big. In `:chat-cli`, these get shortened when initially printed out. To view the entire contents, you can select the message in various ways.
308−
309−```
310−~sampel-palnet+ some message
311−----------[240]
312−~sampel-palnet+ let's try selecting this message!
313−~sampel-palnet+ another message
314−~sampel-palnet:chat-cli=
315−```
316−
317−In the above example, we can select the middle message by issuing any of the following command:
318−
319−```
320−;240
321−;40
322−;;
323−```
324−
325−`;n` looks for the last message whose sequence number ends in `n`. `;;` simply picks the second-to-last message.
326−
327−Detailed message output will look something like this:
328−
329−```
330−? 240
331− 0v5.g7r7l.n0d7m.mp4bn.gp6vr.sm5lj at ~2019.10.17..22.08.27..8a03
332− ~sampel-palnet
333− to ~dopzod/urbit-help
334−let's try selecting this message!
335−```
content/using/os/filesystem.md+29−47
@@ -8,7 +8,8 @@ Urbit has its own revision-controlled filesystem, Clay. Clay is a typed, global,
8referentially transparent namespace. An easy way to think about it is like typed
8referentially transparent namespace. An easy way to think about it is like typed
9`git`.
9`git`.
10
10
11−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.
11+The most common way to use Clay is to mount a Clay node in a Unix directory. The
12+mounted directory is always at the root of your pier directory.
12
13
13For more information on Clay, see the [Overview](/docs/arvo/clay/clay), and
14For more information on Clay, see the [Overview](/docs/arvo/clay/clay), and
14additional usage information at [Using Clay](/docs/arvo/clay/using).
15additional usage information at [Using Clay](/docs/arvo/clay/using).
@@ -21,32 +22,24 @@ that the command was successful.
21
22
22A [`desk`](/docs/glossary/desk) is something like an independently
23A [`desk`](/docs/glossary/desk) is something like an independently
23revision-controlled branch of your urbit's file-system. Your urbit's system
24revision-controlled branch of your urbit's file-system. Your urbit's system
24−files live in the `%home` `desk`.
25+files live in the `%base` desk.
25
26
26It's important to note that whenever you want to sync changes from your Unix
27It's important to note that whenever you want to sync changes from your Unix
27directory to your ship, you must use the `|commit %desk` command, where `%desk`
28directory to your ship, you must use the `|commit %desk` command, where `%desk`
28is the `desk` that you'd like to sync to.
29is the `desk` that you'd like to sync to.
29
30
30When developing it's a good idea to use a separate `desk`. Create a `%sandbox`
31When developing it's a good idea to use a separate `desk`. Create a `%sandbox`
31−`desk` based on the `%home` `desk`:
32+`desk` based on the `%base` `desk` (`our` produces your ship name):
32
33
33```
34```
34−~zod:dojo> |merge %sandbox ~zod %home
35+~zod:dojo> |merge %sandbox our %base
35```
36```
36
37
37−Running `our` produces your ship-name, meaning that you can run the following
38+Most of the time we want to use Clay from Unix. Mount the entire contents of
38−command instead of typing out the entire thing. This is especially useful for
39+your `%sandbox` desk to Unix:
39−comets due to their very long names.
40
40
41```
41```
42−~zod:dojo> |merge %sandbox our %home
43−```
44−
45−Most of the time we want to use Clay from Unix. Mount the entire contents of
46−your `sandbox` desk to Unix:
47−
48−```
49−~zod:dojo> |mount /=sandbox=
42+~zod:dojo> |mount %sandbox
50```
43```
51
44
52To explore the filesystem from inside Urbit `+ls` and `+cat` are useful. `+ls`
45To explore the filesystem from inside Urbit `+ls` and `+cat` are useful. `+ls`
@@ -93,19 +86,18 @@ and other basic tasks familiar to novice users of the Unix terminal.
93
86
94#### Paths
87#### Paths
95
88
96−A path in Clay is a list of URL-safe text, restricted to the characters `[a
89+A path in Clay is a list of URL-safe text, restricted to the characters `[a z]`,`[0 9]`, `.`, `-`, `_`, and `~`. This path is a list of strings each
97−z]`,`[0 9]`, `.`, `-`, `_`, and `~`. This path is a list of strings each
98prepended by `/`. In other words, paths are expressed as `/foo/bar/baz`. File
90prepended by `/`. In other words, paths are expressed as `/foo/bar/baz`. File
99extensions are separated from file names with `/`, not `.`. Extensions are
91extensions are separated from file names with `/`, not `.`. Extensions are
100syntactically identical to subdirectories, except that they must terminate the
92syntactically identical to subdirectories, except that they must terminate the
101path.
93path.
102
94
103Paths begin with three strings indicating the ship, desk, and revision, and
95Paths begin with three strings indicating the ship, desk, and revision, and
104−might look like `/~dozbud-namsep/home/11`.
96+might look like `/~dozbud-namsep/base/11`.
105
97
106The first component is `ship`, which is, as you might guess, the name of
98The first component is `ship`, which is, as you might guess, the name of
107an Urbit ship. The second component is `desk`, which is a workspace meant to
99an Urbit ship. The second component is `desk`, which is a workspace meant to
108−contain other directories; the default `desk` is `%home`. The third component is
100+contain other directories; the default `desk` is `%base`. The third component is
109the revision, which represents version information in various ways: date and time;
101the revision, which represents version information in various ways: date and time;
110a version sequence, which is a value incremented by one whenever a file on the
102a version sequence, which is a value incremented by one whenever a file on the
111given `desk` is modified; or an arbitrary plaintext label.
103given `desk` is modified; or an arbitrary plaintext label.
@@ -113,23 +105,24 @@ given `desk` is modified; or an arbitrary plaintext label.
113You can find what your current ship, desk, and revision is at any given moment by
105You can find what your current ship, desk, and revision is at any given moment by
114typing `%` in the Dojo and looking at the first three results. This will display
106typing `%` in the Dojo and looking at the first three results. This will display
115as a cell rather than a path, like
107as a cell rather than a path, like
108+
116```
109```
117−[~.~zod ~.home ~.~2021.3.19..16.11.20..0c60]
110+[~.~zod ~.base ~.~2021.3.19..16.11.20..0c60]
118```
111```
112+
119Here we see that the revision consists of the date, time, and a short hash.
113Here we see that the revision consists of the date, time, and a short hash.
120
114
121We use this format because, unlike the current internet, the Urbit network uses a
115We use this format because, unlike the current internet, the Urbit network uses a
122global namespace. That means that a file named `example.hoon` in the `/gen`
116global namespace. That means that a file named `example.hoon` in the `/gen`
123−directory on the `%home` desk of your ship `~lodleb-ritrul` would have a
117+directory on the `%base` desk of your ship `~lodleb-ritrul` would have a
124universal address to anyone else on the network:
118universal address to anyone else on the network:
125−`/~lodleb-ritrul/home/186/gen/example/hoon`. That, of
119+`/~lodleb-ritrul/base/186/gen/example/hoon`. That, of
126course, doesn't mean that everyone on the network has privileges to access that
120course, doesn't mean that everyone on the network has privileges to access that
127path. But given the revision-controlled and immutable nature of Urbit, this
121path. But given the revision-controlled and immutable nature of Urbit, this
128means that if the file requested is available, it will always be the same. This
122means that if the file requested is available, it will always be the same. This
129means that if an Urbit is serving a webpage, that exact version will always be
123means that if an Urbit is serving a webpage, that exact version will always be
130retrievable (assuming you have access to it).
124retrievable (assuming you have access to it).
131
125
132−
133#### Relative paths
126#### Relative paths
134
127
135The `%` command, which we gestured at in the above section, represents the
128The `%` command, which we gestured at in the above section, represents the
@@ -198,7 +191,7 @@ address hierarchy – which, if you recall, is just a `list` – the above comma
198works!
191works!
199
192
200We can do the same thing between desks. If `%sandbox` has been merged with
193We can do the same thing between desks. If `%sandbox` has been merged with
201−`%home`, the following command will produce the same results as the above
194+`%base`, the following command will produce the same results as the above
202command.
195command.
203
196
204```
197```
@@ -206,16 +199,16 @@ command.
206```
199```
207
200
208Most commonly this is used to avoid having to know the current revision
201Most commonly this is used to avoid having to know the current revision
209−number in the `dojo`: `/~lodleb-ritrul/home/~2021.3.19..16.11.20..0c60/gen/example/hoon`
202+number in the `dojo`: `/~lodleb-ritrul/base/~2021.3.19..16.11.20..0c60/gen/example/hoon`
210
203
211#### Changing directories
204#### Changing directories
212
205
213Change the working directory with `=dir`. It's our equivalent of the Unix `cd`.
206Change the working directory with `=dir`. It's our equivalent of the Unix `cd`.
214
207
215−For example, the syntax to navigate to `/home/gen/ask` is:
208+For example, the syntax to navigate to `/base/gen/ask` is:
216
209
217```
210```
218−~sampel-palnet:dojo> =dir /=home=/gen/ask
211+~sampel-palnet:dojo> =dir /=base=/gen/ask
219```
212```
220
213
221This command will turn your prompt into something like this:
214This command will turn your prompt into something like this:
@@ -225,7 +218,7 @@ This command will turn your prompt into something like this:
225```
218```
226
219
227Using `=dir` without anything else uses the null path, which returns you to
220Using `=dir` without anything else uses the null path, which returns you to
228−your home desk.
221+your base desk.
229
222
230```
223```
231~sampel-palnet:dojo/=/=/~2021.3.19..16.11.20..0c60/gen/ask> =dir
224~sampel-palnet:dojo/=/=/~2021.3.19..16.11.20..0c60/gen/ask> =dir
@@ -263,24 +256,18 @@ Mounts `%/gen` to `/generators` inside your pier directory.
263#### Unmount
256#### Unmount
264
257
265```
258```
266−|unmount [clay-path || Unix-name]
259+|unmount %mount-point
267```
260```
268
261
269−Unmount the path or name from Unix.
262+Unmount the the mount point from Unix.
270
263
271**Examples:**
264**Examples:**
272
265
273```
266```
274−|unmount %/gen
267+|unmount %foo
275```
268```
276
269
277−Unmounts the Clay path `%/gen` from whatever name it was mounted as.
270+Unmounts the Unix path `/foo`.
278−
279−```
280−|unmount %generators
281−```
282−
283−Unmounts the Unix path `/generators`.
284
271
285#### Merge
272#### Merge
286
273
@@ -318,22 +305,18 @@ Merge the `%examples` `desk` from `~waxbex-ribmex`
318
305
319Merge `/=home=` into `%home-work` using merge strategy `%fine`.
306Merge `/=home=` into `%home-work` using merge strategy `%fine`.
320
307
321−
322#### Sync
308#### Sync
323
309
324```
310```
325|sync %target-desk ~source-ship %target-desk
311|sync %target-desk ~source-ship %target-desk
326```
312```
327
313
328−Subscribe to continuous updates from remote `desk` on local `desk`. Non-comet
314+Subscribe to continuous updates from remote `desk` on local `desk`.
329−urbits have `|sync %home ~sponsor %kids` automatically set up (where `~sponsor`
330−is the planet that issued a moon, the star that issued a planet, or the galaxy
331−that issued a star).
332
315
333**Examples:**
316**Examples:**
334
317
335```
318```
336−|sync %home-local ~dozbud %home
319+|sync %foo ~dozbud %kids
337```
320```
338
321
339#### Unsync
322#### Unsync
@@ -348,10 +331,9 @@ match original `|sync` command.
348Example:
331Example:
349
332
350```
333```
351−|unsync %home-local ~dozbud %home
334+|unsync %foo ~dozbud %kids
352```
335```
353
336
354−
355### Manipulation
337### Manipulation
356
338
357#### `+cat`
339#### `+cat`
@@ -371,7 +353,7 @@ Similar to Unix `ls`. `+ls` takes a single `path`.
371Produces a list of names at the `path`.
353Produces a list of names at the `path`.
372
354
373```
355```
374−~sampel-palnet:dojo> +cat %/our/home/gen/curl/hoon
356+~sampel-palnet:dojo> +cat %/our/base/gen/curl/hoon
375```
357```
376
358
377#### `|rm`
359#### `|rm`
content/using/os/shell.md+20−90
@@ -77,7 +77,9 @@ Run system commands from `:hood`, like `reload`, using `|`:
77
77
78Generators are short Hoon scripts, saved as `.hoon` files in the `/gen`
78Generators are short Hoon scripts, saved as `.hoon` files in the `/gen`
79directory. Many Dojo commands exist in the form of generators. The syntax for
79directory. Many Dojo commands exist in the form of generators. The syntax for
80−running a generator is `+genname` for a generator saved as `genname.hoon`.
80+running a generator is `+genname` for a generator saved as `genname.hoon` in the
81+`%base` desk. For generators on other desks, you can use the syntax
82+`+desk!genname`.
81
83
82#### `+cat`
84#### `+cat`
83
85
@@ -96,60 +98,27 @@ arguments.
96~your-urbit:dojo> +code
98~your-urbit:dojo> +code
97```
99```
98
100
99−You can change your code to a new randomly generated one by entering `|code
101+You can change your code to a new randomly generated one by entering `|code %reset`. Please note that this will prevent [Bridge](/docs/glossary/bridge)
100−%reset`. Please note that this will prevent [Bridge](/docs/glossary/bridge)
101from being able to derive your code in the future.
102from being able to derive your code in the future.
102
103
103−#### `+curl`
104−
105−Retrieves data from a URL. Accepts a `tape`. Similar to Unix `curl`.
106−
107−```
108−~your-urbit:dojo> +curl "http://nyt.com"
109−```
110−
111−#### `+hello`
112−
113−Just prints the argument. Accepts a `@ta`.
114−
115−```
116−~your-urbit:dojo> +hello 'mars'
117−```
118−
119#### `+ls`
104#### `+ls`
120
105
121Similar to Unix `ls`. Accepts a path.
106Similar to Unix `ls`. Accepts a path.
122
107
123```
108```
124~your-urbit:dojo> +ls %/gen
109~your-urbit:dojo> +ls %/gen
125−~your-urbit:dojo> +ls /~talsur-todres/home/2/gen/program
110+~your-urbit:dojo> +ls /~talsur-todres/base/2/gen/program
126```
111```
127
112
128#### `+solid`
113#### `+solid`
129
114
130−Compile the current state of the kernel and output a
115+Compile the current state of the kernel and output a noun. Usually downloaded to
131−noun. Usually downloaded to a file in unix. No arguments.
116+a file in unix. This generator takes a series of desks to include as its
117+argument. The first desk must be the base desk that contains the Arvo kernel,
118+standard library and related files - typically `%base`.
132
119
133```
120```
134−~your-urbit:dojo> .urbit/pill +solid
121+~your-urbit:dojo> .urbit/pill +solid %base %garden %landscape %webterm %bitcoin
135−```
136−
137−#### `+test`
138−
139−Testrunner. Can test multiple generators at once, conventionally ones
140−in the `/test` folder. Takes a path.
141−
142−```
143−~your-urbit:dojo> +test /lib
144−```
145−
146−#### `+ticket`
147−
148−Generate a ticket for an urbit ship. Takes an urbit name (`@p`).
149−
150−
151−```
152−~your-urbit:dojo> +ticket ~talsur-todres-your-urbit
153```
122```
154
123
155#### `+tree`
124#### `+tree`
@@ -171,11 +140,13 @@ an urbit name (`@p`) and a string (`tape`, which is text wrapped with double-quo
171~your-urbit:dojo> |hi ~binzod "you there?"
140~your-urbit:dojo> |hi ~binzod "you there?"
172```
141```
173
142
174−`|link` / `|unlink` - Link / unlink a remote app. Accepts an
143+`|link` / `|unlink` - Link / unlink a CLI app - may or may not be remote.
175−Urbit name and an app name.
144+Accepts an optional ship name and a mandatory app name.
176
145
177```
146```
178~your-urbit:dojo> |link ~talsur-todres %octo
147~your-urbit:dojo> |link ~talsur-todres %octo
148+
149+~your-urbit:dojo> |link %chat-cli
179```
150```
180
151
181`|mass` - Prints the current memory usage of all the kernel modules.
152`|mass` - Prints the current memory usage of all the kernel modules.
@@ -185,23 +156,11 @@ No arguments.
185~your-urbit:dojo> |mass
156~your-urbit:dojo> |mass
186```
157```
187
158
188−`|reload` - Reloads a kernel module (vane) from source. Accepts any
159+`|breload` - Reloads a kernel module (vane) from source. Accepts any
189number of vane names.
160number of vane names.
190
161
191```
162```
192−~your-urbit:dojo> |reload %clay %eyre
163+~your-urbit:dojo> |breload %clay %eyre
193−```
194−
195−`|reset` - Reloads `hoon.hoon` and all modules. No arguments.
196−
197−```
198−~your-urbit:dojo> |reset
199−```
200−
201−`|start` - Starts an app. Accepts an app name.
202−
203−```
204−~your-urbit:dojo> |start %curl
205```
164```
206
165
207---
166---
@@ -324,6 +283,9 @@ the code needed to log into your ship remotely.
324fintyr-haldet-fassev-solhex
283fintyr-haldet-fassev-solhex
325```
284```
326
285
286+Generators on desks other than `%base` can be run with the syntax
287+`+desk!generator`.
288+
327### Variables
289### Variables
328
290
329You can use `=` to set an environment variable in Dojo, but there are
291You can use `=` to set an environment variable in Dojo, but there are
@@ -341,36 +303,6 @@ Current working `%clay` desk and revision. Read / write.
341404/hoon docs/ dojo/hoon lib/ listen/hoon md static/udon talk/ testing/udon tree/main/ unmark/ womb/
303404/hoon docs/ dojo/hoon lib/ listen/hoon md static/udon talk/ testing/udon tree/main/ unmark/ womb/
342```
304```
343
305
344−#### `lib`
345−
346−Current set of libraries (`/lib`) in your environment. Can be set
347−with `/+`. Read / write.
348−
349−**Examples:**
350−
351−```
352−~your-urbit:dojo> /+ number-to-words
353−```
354−Now we can use arms from lib/number-to-words.hoon
355−```
356−~your-urbit:dojo> (to-words:eng-us:number-to-words 123.456)
357−```
358−
359−#### `sur`
360−
361−Current set of structures (`/sur`) in your environment. Can be set
362−with `/-`. Read / write.
363−
364−**Examples:**
365−
366−```
367−~your-urbit:dojo> /- sole
368−```
369−Now we can use arms in sur/sole.hoon.
370−```
371−~your-urbit:dojo> `sole-effect:sole`[%bel ~]
372−```
373−
374#### `now`
306#### `now`
375
307
376The current (128-bit `@da`) time. Read-only.
308The current (128-bit `@da`) time. Read-only.
@@ -401,9 +333,7 @@ The current urbit ship. Read-only.
401
333
402```
334```
403~your-urbit:dojo> eny
335~your-urbit:dojo> eny
404−\/0vnt.d474o.gpahj.jcf3o.448fh.2lamb.82ljm.8ol8u.b02vi.mrvvp.b7et2.knb7m.l8he\/
336+0v27k.n4atp.fovm6.f7ggm.jdkn5.elct5.11tna.4qtid.g4so7.a1h6g.grp7u.qml4i.0ed1v.sl0r0.97d4b.6aepr.6v6qm.ls5ve.60kgb.j6521.2fqcb
405− 8.8qb9s.drm36.77n9b.a0qst.30g03.l5lb5.nvsbc.v39tn
406−\/
407```
337```
408
338
409### Troubleshooting
339### Troubleshooting