on master help sign in
Merge branch 'master' of github.com:urbit/docs
commit0407872c77f668da6479ddefdd6839869acdb3dd authorTobias Merkle <tgamerkle@gmail.com> dateTue 14 Jun 2016, 13:58 (10 years ago) parentc655a0f598a706
19 files changed+438−30
docs.md+38−12 docs/arvo.md+6−2 docs/arvo/basic.md+2−2 docs/arvo/generators.md+1−1 docs/arvo/subject.md+1−1 docs/hoon.md+6−2 docs/hoon/advanced.md+1−1 docs/hoon/exercises/data-structures.md+1−1 docs/hoon/library/2b.md+1−1 docs/hoon/library/2q.md+2−2 docs/hoon/reference.md+4 docs/hoon/twig/wut-test/gar-sure.md+1−1 docs/hoon/twig/zap-wild/gar-wrap.md+1−1 docs/nock.md+4 docs/using.md+4 docs/using/layout.md+1−1 docs/using/messaging.md+4 docs/using/urb.md+356 docs/using/web.md+4−2
docs.md+38−12
@@ -1,7 +1,7 @@
11---
22anchor: none
33footer: true
4−title: Develop
4+title: Documentation
55sort: 4
66---
77
@@ -10,21 +10,47 @@ sort: 4
1010 <h1 class="blue i-b">Urbit docs</h1>
1111</div>
1212
13−Go to the [technical overview](about/overview) for a high-level
14−architecture description. To install and run Urbit, read forward from the
15−[installation guide](using/install).
13+<div class="col-md-12 head">
1614
17−To begin developing for Urbit, start by learning Hoon [syntax](hoon/syntax),
18−then walk through the [Arvo tutorials](arvo). The examples and exercises
19−in Arvo will teach you to build high-level programs and interact with the network.
15+<div class="col-md-8">
16+
17+Check out the [technical overview](about/overview) for a high-level
18+architecture description. To install and run Urbit, head to the Using section, starting with the [installation guide](using/install) and continuing forward.
19+
20+To begin developing for Urbit, start by learning Hoon [syntax](hoon/syntax),
21+then walk through the [Arvo tutorials](arvo). The examples and exercises
22+in Arvo will teach you to build high-level programs and interact with the network.
2023
2124Dig into the mechanics of Urbit with [Core Hoon](hoon). Refer back
22−there for pure-code exercises and functions in the [standard library](hoon/library).
25+there for pure-code exercises and functions in the [standard library](hoon/library).
26+
27+Registered academics are required to start with the [Nock definition](nock/definition) and work upward from there.
28+
29+</div>
30+
31+<div class="col-md-4">
2332
24−Registered academics are required to start with the [Nock definition](nock/definition)
25−and work upward from there.
26−<br/>
27−<br/>
33+<b>Source on GitHub</b>
34+<ul>
35+<li><a href="https://github.com/urbit/urbit">Main repo</a></li>
36+<li><a href="https://github.com/urbit/examples">Examples</a></li>
37+<li><a href="https://github.com/urbit/docs">Documentation</a></li>
38+</ul>
39+
40+<br />
41+
42+<b>Community / contact</b>
43+<ul>
44+<li>We use <code>:talk</code> on Urbit to chat.</li>
45+<li><a href="https://reddit.com/r/urbit">/r/urbit on Reddit</a></li>
46+<li><a href="https://twitter.com/urbit_">@urbit_ on Twitter</a></li>
47+<li><a href="https://groups.google.com/forum/#!forum/urbit-dev">urbit-dev mailing list</a></li>
48+<li><a href="mailto:urbit@urbit.org">urbit@urbit.org</a></li>
49+</ul>
50+
51+</div>
52+
53+</div>
2854
2955<div class="sections">
3056 <kids grid="true"></kids>
docs/arvo.md+6−2
@@ -1,8 +1,12 @@
11---
22navhome: /docs
3−sort: 4
3+sort: 3
44---
55
6−# Arvo
6+# Arvo programming
7+
8+This example-based sequence of tutorials shows you how to build simple programs in hoon and use the basic features of Arvo.
9+
10+If you like to learn by example, start here.
711
812<list/>
docs/arvo/basic.md+2−2
@@ -23,8 +23,8 @@ To run this code, you'll need an urbit, and will have to copy the
2323[examples repo](https://github.com/urbit/examples) into it.
2424
2525If you haven't installed urbit yet, check out the [installation
26−instructions](/docs/user/install). Once urbit is installed, take a look
27−at the [basic operation](/docs/user/basic) of your urbit.
26+instructions](/docs/using/install). Once urbit is installed, take a look
27+at the [basic operation](/docs/using/admin) of your urbit.
2828
2929If you haven't copied in the examples repo, running the following
3030commands from your urbit directory should do the trick:
docs/arvo/generators.md+1−1
@@ -15,7 +15,7 @@ the "plumbing" way to interact with apps. Generators are the
1515`|merge`, there are no marks in sight.
1616
1717We've used generators before, back in [Basic
18−Operation](/docs/user/basic). At that point, we just used the generators
18+Operation](/docs/using/admin). At that point, we just used the generators
1919to produce values -- we didn't pipe their results into apps. In
2020the dojo cast, the role of a generator is to take a list of
2121arguments and produce a value, which is often, though not always,
docs/arvo/subject.md+1−1
@@ -93,7 +93,7 @@ Cheatsheet:
9393
9494- To pass arguments from the command line to a program, you replace
9595 the `*` in the first line of the boiler plate to
96− `{^ {{arg/TYPE ~} ~}}` where `TYPE` is replaced with the type of
96+ `{^ {{arg/TYPE $~} $~}}` where `TYPE` is replaced with the type of
9797 argument you're expecting. Then `+euler1 a` from the dojo sets `arg`
9898 to `a`.
9999- The empty list is `~`
docs/hoon.md+6−2
@@ -1,8 +1,12 @@
11---
22navhome: /docs
3−sort: 3
3+sort: 4
44---
55
6−# Hoon
6+# Hoon reference
7+
8+This in-depth reference covers all the features of Hoon.
9+
10+If you prefer to learn from the bottom up, feel free to start here.
711
812<list/>
docs/hoon/advanced.md+1−1
@@ -186,7 +186,7 @@ limb, we just search the span depth-first.
186186If a name is in the `p.p` map, it's an alias. The map contains a
187187`(unit twig)`; if the unit is full, the name resolves to that
188188twig (compiled against the `q` span). If the unit is empty,
189−the name is blocked / skipped (see [limb](twig/limb) for what
189+the name is blocked / skipped (see [limb](../twig/limb) for what
190190this means).
191191
192192If a name is in the `q.p` map, it's a bridge. When we search for
docs/hoon/exercises/data-structures.md+1−1
@@ -26,7 +26,7 @@ exercises, you'll need to refer to the [library reference for
2626 `'javacript'`, `'python'`.
2727
28281. At the dojo, take the union of `s` and `l`. Delete
29− `'javascript'` from the result, and add `'coffescript'`.
29+ `'javascript'` from the result, and add `'coffeescript'`.
3030
31311. Create an alphabetized list of the members of the set created
3232 in the previous exercise.
docs/hoon/library/2b.md+1−1
@@ -667,7 +667,7 @@ sorted according to `b`.
667667Accepts
668668-------
669669
670−`b` is a gate that ccepts two nouns and produces a boolean.
670+`b` is a gate that accepts two nouns and produces a boolean.
671671
672672Produces
673673--------
docs/hoon/library/2q.md+2−2
@@ -147,9 +147,9 @@ Source
147147Examples
148148--------
149149
150− > `(list ,char)`"foobar"
150+ > `(list char)`"foobar"
151151 "foobar"
152− > `(list ,@)`"foobar"
152+ > `(list @)`"foobar"
153153 ~[102 111 111 98 97 114]
154154
155155
docs/hoon/reference.md+4
@@ -10,6 +10,10 @@ title: Twig reference
1010
1111<div class="book">
1212
13+### [Atoms and strings](../twig/atom)
14+
15+### [Limbs and wings](../twig/limb)
16+
1317## `$ buc` (mold)
1418
1519<list src="../twig/buc-mold" dataPreview="true" className="runes" childIsFragment="true"></list>
docs/hoon/twig/wut-test/gar-sure.md+1−1
@@ -3,7 +3,7 @@ navhome: /docs
33sort: 11
44---
55
6−# `:sure ?< "wutgar"`
6+# `:sure ?> "wutgar"`
77
88`{$sure p/seed q/seed}`: positive assertion.
99
docs/hoon/twig/zap-wild/gar-wrap.md+1−1
@@ -24,5 +24,5 @@ span-noun cell is generally called a `vase`.
2424
2525```
2626~zod:dojo> !>(1)
27−[#t/@ud q=1]
27+[p=#t/@ud q=1]
2828```
docs/nock.md+4
@@ -6,4 +6,8 @@ title: Nock
66
77# Nock
88
9+Nock is our nano-VM. If you're into combinators or want to understand the foundation of Urbit, dive in.
10+
11+Building a Nock interpreter is a fun exercise, as you can see in the [implementations](nock/implementations)
12+
913<list/>
docs/using.md+4
@@ -5,4 +5,8 @@ sort: 2
55
66# Using
77
8+These short guides will get you installed, setup, and walk you through the basic features of Urbit. Each section has a quickstart at the top that covers the basics.
9+
10+The sections do build on eachother, so it's a good idea to at least skim them in order.
11+
812<list/>
docs/using/layout.md+1−1
@@ -1,6 +1,6 @@
11---
22navhome: /docs
3−sort: 8
3+sort: 9
44title: Source layout
55---
66
docs/using/messaging.md+4
@@ -60,6 +60,10 @@ To set your audience back to `/urbit-meta`:
6060
6161 ~your-urbit:talk> ;~doznec/urbit-meta
6262
63+Use `;leave` to unsubscribe from a channel:
64+
65+ ~your-urbit:talk> ;leave ~doznec/urbit-meta
66+
6367There are two ways of using `:talk`: from the CLI or through a web ui available at `http://your-urbit.urbit.org/talk` (or `http://localhost:8080/talk`).
6468
6569The web ui ships as compiled JavaScript on your Urbit, but has its own source repo [here](https://github.com/urbit/talk).
docs/using/urb.mdnew file+356
@@ -0,0 +1,356 @@
1+---
2+navhome: /docs
3+sort: 8
4+title: From Unix
5+---
6+
7+<div class="row">
8+<div class="col-md-8">
9+
10+# Using Urbit from Unix
11+
12+With `urb` at your Unix command line, you can execute hoon, run
13+dojo commands, and more. Additionally, with `fuse`, you can
14+inspect the urbit namespace.
15+
16+</div>
17+</div>
18+
19+## Installation
20+
21+These commands are in the a [separate
22+repo](https://github.com/urbit/urb). Clone this repo to get the
23+commands.
24+
25+You'll also need the `requests` and `fuse` libraries for python.
26+If you have `pip`, you can just run:
27+
28+```
29+pip install requests fuse-python
30+```
31+
32+Otherwise, on Ubuntu, run:
33+
34+```
35+apt-get install python-requests python-fuse
36+```
37+
38+Then you can either run the python commands from the git repo, or
39+put them somewhere in your path.
40+
41+## `urb`
42+
43+`urb` transfers data from a source to a sink. Examples of data
44+sources include literal data, a file, a URL, or some
45+tranformation of another source. Examples of data sinks are
46+stdout, output file, POST request, or dojo command.
47+
48+Here are some examples. This takes the literal data "hello
49+world" and sends it to stdout (the default sink).
50+
51+ urb --data 'hello world'
52+
53+Let's run some hoon code at the dojo.
54+
55+ urb --dojo '(add 2 2)'
56+
57+Let's convert a markdown file to html.
58+
59+ urb --data @@file.md -m md -m html
60+
61+Mount the `%home` desk. This syncs the `home` desk into the pier
62+directory.
63+
64+ urb --dojo '+hood/mount /=home=' --app hood
65+
66+### Sources
67+
68+Sources can be any of the following:
69+
70+- `-d, --dojo command` runs a dojo command. This is commonly
71+ naked hoon code, but it can also be a generator, or any of the
72+ other ways the dojo gets data.
73+
74+- `-D, --data text` is literal text data, as a cord.
75+
76+- `-c, --clay path` pulls data from Urbit's filesystem.
77+
78+- `-u, --url url` pulls data from a URL.
79+
80+- `-m, --mark mark source` converts the output from another source to
81+ a new 'mark' (datatype).
82+
83+- `-H, --hoon code source` transforms the output of another
84+ source by running it through some hoon code.
85+
86+- `[source-0 source-1 ...]`. Sources can be combined into tuples
87+ of different sources.
88+
89+Any of the arguments to a source (except in the "compound
90+sources" `--mark` and `--hoon`) can be replaced by `-` to
91+represent stdin or `@@filename` to pull data in from a Unix file.
92+Thus, `urb [-D @@file1 -D - -D @@file2]` is equivalent to Unix's
93+`cat file1 - file2`.
94+
95+Additionally, if no source is specified, `--data -` (stdin as
96+literal text data) is assumed.
97+
98+### Sinks
99+
100+- `-s, --stdout` outputs to stdout. This is the default.
101+
102+- `-f, --output-file path` writes to a unix file.
103+
104+- `-C, --output-clay path` writes to Urbit's filesystem.
105+
106+- `-U, --output-url url` sends a POST request with the data to
107+ the URL.
108+
109+- `-p, --app app` sends the data to an urbit app.
110+
111+- `-x, --command` outputs to a literal dojo command.
112+
113+## `fuse`
114+
115+Urbit's namespace is accessible through the `fuse` command.
116+`fuse` takes all the normal FUSE arguments, which you can see
117+with `fuse -h`. Generally, you just run `fuse MOUNT-POINT`.
118+
119+When accessing the namespace through `fuse`, everything is
120+read-only. If you want to write to Clay, mount a desk, as
121+described above.
122+
123+Let's look first in the Clay portion of the Urbit namespace.
124+Assume we've mounted to `./pt`.
125+
126+ $ ls ./pt/c/=/=/=
127+ app arvo gen lib mar ren sec sur web
128+ $ ls ./pt/c/=/=/=/arvo
129+ ames behn clay dill eyre ford gall hoon zuse
130+
131+Those `=`s aren't decorative. The first `=` means "current
132+ship", the second "current desk", and the third "current
133+revision". Let's try something a little more exciting.
134+
135+This runs the Unix `diff` command on the first and current
136+versions of the `app/gh/hoon` file, showing all the changes we've
137+made to the file.
138+
139+```
140+$ diff pt/c/=/=/{1,=}/app/gh/hoon
141+73c73,75
142+< (malt (turn issues |=(issue:gh [(rsh 3 2 (scot %ui number)) ~])))
143+---
144+> %- malt ^- (list {@ta $~})
145+> :- [%gh-list-issues ~]
146+> (turn issues |=(issue:gh [(rsh 3 2 (scot %ui number)) ~]))
147+92c94,101
148+< read-y=(read-get /issues)
149+---
150+> read-y=(read-static %gh-list-issues ~)
151+> sigh-x=sigh-list-issues-x
152+> sigh-y=sigh-list-issues-y
153+> ==
154+> ^- place :: /issues/mine/<mark>
155+> :* guard={$issues $mine @t $~}
156+> read-x=read-null
157+> read-y=|=(pax/path [ost %diff %arch `0vsen.tinel ~])
158+126c135
159+< ^- place :: /issues/by-repo/<user>/<repo>
160+---
161+> ^- place :: /issues/by-repo/<user>/<repo>/<number>
162+131c140,146
163+< read-y=(read-static ~)
164+---
165+> ^= read-y
166+> |= pax/path
167+> %. pax
168+> ?: ((sane %tas) -.+>+>.pax)
169+> (read-static ~)
170+> (read-static %gh-issue ~)
171+> ::
172+137a153,159
173+> sigh-y=sigh-strange
174+> ==
175+> ^- place :: /issues/by-repo/<u>/<r>/<n>/<mark>
176+> :* guard={$issues $by-repo @t @t @t @t $~}
177+> read-x=read-null
178+> read-y=|=(pax/path [ost %diff %arch `0vsen.tinel ~])
179+> sigh-x=sigh-strange
180+```
181+
182+Urbit's namespace is not just revisioned, but global. Here's a
183+diff of our version of `arvo/gall/hoon` compared to the one on
184+the `~bud` urbit.
185+
186+```
187+$ diff pt/c/{~bud,=}/=/=/arvo/gall/hoon
188+2d1
189+<
190+640a640,644
191+> =+ ?. ?=($x ren)
192+> [mar=%$ tyl=tyl]
193+> =+ `path`(flop tyl)
194+> ?> ?=(^ -)
195+> [mar=i tyl=(flop t)]
196+643c647
197+< ((slog leaf+"peek find fail" >tyl< ~) [~ ~])
198+---
199+> ((slog leaf+"peek find fail" >tyl< >mar< ~) [~ ~])
200+654a659,660
201+> ?. =(mar p.q.caz)
202+> [~ ~]
203+1308a1315,1316
204+> ?. ?=(^ tyl)
205+> ~
206+```
207+
208+Besides Clay, the namespace contains Gall apps. One common usage
209+of the app namespace is to expose APIs. For example, if you
210+start the `%gh` app (`|start %gh`), you can do things like `cat`
211+an issue from a repository.
212+
213+```
214+$ cat pt/g/=/gh/=/issues/by-repo/philipcmonktest/testing/7/txt
215+title: big news! (#7)
216+state: open
217+creator: philipcmonktest
218+created-at: 2016-03-24T22:27:33Z
219+assignee: philipcmonktest
220+labels: invalid, wontfix, help wanted
221+comments: 0
222+url: https://api.github.com/repos/philipcmonktest/testing/issues/7
223+
224+Yup, that's it. i mean, maybe it's a bit longer than that.
225+
226+But you get the point, right?
227+
228+Code `is` cool!
229+```
230+
231+Or all open issues for a repository.
232+
233+```
234+$ cat pt/g/=/gh/=/issues/by-repo/philipcmonktest/testing/txt
235+title: i found a bug! (#11)
236+state: open
237+creator: philipcmonktest
238+created-at: 2016-04-14T23:14:49Z
239+assignee: none
240+labels:
241+comments: 1
242+url: https://api.github.com/repos/philipcmonktest/testing/issues/11
243+
244+
245+----------------------------------------
246+title: more newz (#8)
247+state: open
248+creator: philipcmonktest
249+created-at: 2016-03-24T22:29:16Z
250+assignee: none
251+labels:
252+comments: 4
253+url: https://api.github.com/repos/philipcmonktest/testing/issues/8
254+
255+Yup, that's it. i mean, maybe it's a bit longer than that.
256+
257+But you get the point, right?
258+
259+Code `is` cool!
260+----------------------------------------
261+title: big news! (#7)
262+state: open
263+creator: philipcmonktest
264+created-at: 2016-03-24T22:27:33Z
265+assignee: philipcmonktest
266+labels: invalid, wontfix, help wanted
267+comments: 0
268+url: https://api.github.com/repos/philipcmonktest/testing/issues/7
269+
270+Yup, that's it. i mean, maybe it's a bit longer than that.
271+
272+But you get the point, right?
273+
274+Code `is` cool!
275+----------------------------------------
276+title: something different (#4)
277+state: open
278+creator: philipcmonktest
279+created-at: 2016-01-26T21:45:08Z
280+assignee: philipcmonktest
281+labels: duplicate, help wanted, question, bug
282+comments: 1
283+url: https://api.github.com/repos/philipcmonktest/testing/issues/4
284+```
285+
286+Don't like the textual format? How about we get the raw JSON
287+(and prettyprint it).
288+
289+```
290+$ cat pt/g/=/gh/=/issues/by-repo/philipcmonktest/testing/7/json | python -m json.tool
291+{
292+ "assignee": {
293+ "avatar_url": "https://avatars.githubusercontent.com/u/16787461?v=3",
294+ "events_url": "https://api.github.com/users/philipcmonktest/events{/privacy}",
295+ "followers_url": "https://api.github.com/users/philipcmonktest/followers",
296+ "following_url": "https://api.github.com/users/philipcmonktest/following{/other_user}",
297+ "gists_url": "https://api.github.com/users/philipcmonktest/gists{/gist_id}",
298+ "gravatar_id": "",
299+ "html_url": "https://github.com/philipcmonktest",
300+ "id": 16787461,
301+ "login": "philipcmonktest",
302+ "organizations_url": "https://api.github.com/users/philipcmonktest/orgs",
303+ "received_events_url": "https://api.github.com/users/philipcmonktest/received_events",
304+ "repos_url": "https://api.github.com/users/philipcmonktest/repos",
305+ "site_admin": false,
306+ "starred_url": "https://api.github.com/users/philipcmonktest/starred{/owner}{/repo}",
307+ "subscriptions_url": "https://api.github.com/users/philipcmonktest/subscriptions",
308+ "type": "User",
309+ "url": "https://api.github.com/users/philipcmonktest"
310+ },
311+ "body": "Yup, that's it. i mean, maybe it's a bit longer than that.\r\n\r\nBut you get the point, right?\r\n\r\nCode `is` cool!",
312+ "closed_at": null,
313+ "closed_by": null,
314+ "comments": 0,
315+ "comments_url": "https://api.github.com/repos/philipcmonktest/testing/issues/7/comments",
316+ "created_at": "2016-03-24T22:27:33Z",
317+ "events_url": "https://api.github.com/repos/philipcmonktest/testing/issues/7/events",
318+ "html_url": "https://github.com/philipcmonktest/testing/issues/7",
319+ "id": 143377108,
320+ "labels": [
321+ {
322+ "color": "ffffff",
323+ "name": "wontfix",
324+ "url": "https://api.github.com/repos/philipcmonktest/testing/labels/wontfix"
325+ }
326+ ],
327+ "labels_url": "https://api.github.com/repos/philipcmonktest/testing/issues/7/labels{/name}",
328+ "locked": false,
329+ "milestone": null,
330+ "number": 7,
331+ "repository_url": "https://api.github.com/repos/philipcmonktest/testing",
332+ "state": "open",
333+ "title": "big news!",
334+ "updated_at": "2016-03-24T22:27:33Z",
335+ "url": "https://api.github.com/repos/philipcmonktest/testing/issues/7",
336+ "user": {
337+ "avatar_url": "https://avatars.githubusercontent.com/u/16787461?v=3",
338+ "events_url": "https://api.github.com/users/philipcmonktest/events{/privacy}",
339+ "followers_url": "https://api.github.com/users/philipcmonktest/followers",
340+ "following_url": "https://api.github.com/users/philipcmonktest/following{/other_user}",
341+ "gists_url": "https://api.github.com/users/philipcmonktest/gists{/gist_id}",
342+ "gravatar_id": "",
343+ "html_url": "https://github.com/philipcmonktest",
344+ "id": 16787461,
345+ "login": "philipcmonktest",
346+ "organizations_url": "https://api.github.com/users/philipcmonktest/orgs",
347+ "received_events_url": "https://api.github.com/users/philipcmonktest/received_events",
348+ "repos_url": "https://api.github.com/users/philipcmonktest/repos",
349+ "site_admin": false,
350+ "starred_url": "https://api.github.com/users/philipcmonktest/starred{/owner}{/repo}",
351+ "subscriptions_url": "https://api.github.com/users/philipcmonktest/subscriptions",
352+ "type": "User",
353+ "url": "https://api.github.com/users/philipcmonktest"
354+ }
355+}
356+```
docs/using/web.md+4−2
@@ -25,8 +25,10 @@ We ship `tree` as compiled JavaScript on your Urbit, but the source lives in its
2525
2626Your Urbit runs a web server and can be found at either `http://localhost:8080/` (or `8081` if you're running other processes that might be occupying `8080`, you can determine which port your urbit is on by looking at your boot sequence — it's specified there), or `http://your-urbit.urbit.org/`.
2727
28+<span class="red">
2829(Make sure you have a desk mounted to unix, as covered in the
2930[filesystem walkthrough](/docs/using/filesystem)).
31+</span>
3032
3133To switch the desk you're serving from:
3234
@@ -38,7 +40,7 @@ To host a file on the web try putting the following in `/home/web/test.md` (from
3840
3941 This is a simple markdown file.
4042
41−Create the directory `/home/web/test/` and add two more markdown files in it.
43+Create the directory `/home/web/test/` and add two more markdown files in it.
4244
4345Now modify `/home/web/test.md` to list the children using the `<list/>` JSX:
4446
@@ -56,7 +58,7 @@ To view your file as raw `html`:
5658
5759 http://localhost:8080/test.html
5860
59−You may have noticed that we just created both `test.md` and `test/`. In Urbit, there is no distinction between a directory and a file. So, if you're adding files directly from unix, simply `mkdir test` and Urbit will treat the file and directory as the same entity.
61+You may have noticed that we just created both `test.md` and `test/`. In Urbit, there is no distinction between a directory and a file. So, if you're adding files directly from unix, simply `mkdir test` and Urbit will treat the file and directory as the same entity.
6062
6163You can use this feature to change your homepage at `your-urbit.urbit.org` with the page `/home/web.md`, where `home` is the current mounted desk. By default, `web.md` will display some info about your urbit, but you can customize it to your heart's content.
6264