mirror of
https://github.com/urbit/shrub.git
synced 2024-11-28 05:22:27 +03:00
372 lines
9.4 KiB
Plaintext
372 lines
9.4 KiB
Plaintext
:: |pill: helper functions for making pills
|
|
::
|
|
/- dice
|
|
^?
|
|
|%
|
|
::
|
|
+$ pill
|
|
$% [%ivory p=(list)]
|
|
$: %pill
|
|
nam=term
|
|
boot-ova=(list)
|
|
kernel-ova=(list unix-event)
|
|
userspace-ova=(list unix-event)
|
|
== ==
|
|
::
|
|
+$ unix-event
|
|
%+ pair wire
|
|
$% [%wack p=@]
|
|
[%what p=(list (pair path (cask)))]
|
|
[%whom p=ship]
|
|
[%boot ? $%($>(%fake task:jael) $>(%dawn task:jael))]
|
|
[%wyrd p=vere]
|
|
[%verb p=(unit ?)]
|
|
unix-task
|
|
==
|
|
:: +boot-ovum: boostrap kernel filesystem load
|
|
::
|
|
++ boot-ovum
|
|
|= [hoon=cord arvo=cord]
|
|
:~ //arvo
|
|
%what
|
|
[/sys/hoon hoon/hoon]
|
|
[/sys/arvo hoon/arvo]
|
|
==
|
|
:: +dirs: filter for userspace directories to include
|
|
::
|
|
++ dirs
|
|
|= [bas=path exc=(list spur)]
|
|
^- (list spur)
|
|
?~ exc ~(tap in dir:.^(arch %cy bas))
|
|
%+ skim
|
|
~(tap in dir:.^(arch %cy bas))
|
|
|=(=spur =(~ (find ~[spur] exc)))
|
|
:: +file-ovum: userspace filesystem load
|
|
::
|
|
:: bas: full path to / directory
|
|
::
|
|
++ file-ovum
|
|
|= [des=desk bas=path exc=(list spur)]
|
|
^- unix-event
|
|
%. (dirs bas exc)
|
|
|= :: sal: all spurs to load from
|
|
::
|
|
sal=(list spur)
|
|
^- unix-event
|
|
::
|
|
:: hav: all user files
|
|
::
|
|
=; hav ~& user-files+(lent hav)
|
|
=/ =yuki:clay
|
|
:- *(list tako:clay)
|
|
%- ~(gas by *(map path (each page lobe:clay)))
|
|
(turn hav |=([=path =page] [path &+page]))
|
|
[/c/sync [%park des &+yuki *rang:clay]]
|
|
(file-pages bas sal)
|
|
::
|
|
++ file-pages
|
|
|= [bas=path sal=(list spur)]
|
|
=| hav=(list [path page:clay])
|
|
|- ^+ hav
|
|
?~ sal ~
|
|
=. hav $(sal t.sal)
|
|
::
|
|
:: tyl: spur
|
|
::
|
|
=/ tyl i.sal
|
|
|- ^+ hav
|
|
::
|
|
:: pax: full path at `tyl`
|
|
:: lon: directory at `tyl`
|
|
::
|
|
=/ lyt (flop tyl)
|
|
=/ pax (weld bas lyt)
|
|
=/ lon .^(arch %cy pax)
|
|
=? hav ?=(^ fil.lon)
|
|
:_ hav
|
|
:- lyt
|
|
?. ?=([%azimuth-snapshot *] tyl)
|
|
[mark=;;(@tas (head tyl)) noun=.^(* %cx pax)]
|
|
=; convert
|
|
mime/(convert .^(snap-state:dice %cx pax))
|
|
.^($-(snap-state:dice mime) %cf (weld bas /azimuth-snapshot/mime))
|
|
=/ all ~(tap by dir.lon)
|
|
|- ^+ hav
|
|
?~ all hav
|
|
$(all t.all, hav ^$(tyl [p.i.all tyl]))
|
|
::
|
|
:: +file-ovum2: electric boogaloo
|
|
::
|
|
++ file-ovum2 |=(z=[path (list spur)] `unix-event`[//arvo what/(user-files z)])
|
|
::
|
|
++ prep-ovum
|
|
|= dez=(list path)
|
|
^- unix-event
|
|
=- ~& clay-blobs+~(wyt by -)
|
|
[/c/inflate [%prep -]]
|
|
%+ roll dez
|
|
|= [bas=path out=(map lobe:clay page:clay)]
|
|
%- ~(uni by out)
|
|
.^(_out %cs (snoc bas %bloc))
|
|
::
|
|
:: +user-files: all userspace hoon files
|
|
::
|
|
++ user-files
|
|
|= [bas=path exc=(list spur)]
|
|
%. (dirs bas exc)
|
|
|= sal=(list spur)
|
|
^- (list (pair path (cask)))
|
|
::
|
|
:: hav: all user files
|
|
::
|
|
=| hav=(list (pair path (cask)))
|
|
|- ^+ hav
|
|
?~ sal ~
|
|
=. hav $(sal t.sal)
|
|
::
|
|
:: tyl: spur
|
|
::
|
|
=/ tyl i.sal
|
|
|- ^+ hav
|
|
::
|
|
:: pax: full path at `tyl`
|
|
:: lon: directory at `tyl`
|
|
::
|
|
=/ pax (weld bas (flop tyl))
|
|
=/ lon .^(arch %cy pax)
|
|
=? hav ?=(^ fil.lon)
|
|
::
|
|
:: install only hoon files for now
|
|
::
|
|
?. ?=([%hoon *] tyl)
|
|
hav
|
|
:_ hav
|
|
[(flop `path`t.tyl) hoon/.^(@t %cx pax)]
|
|
::
|
|
=/ all ~(tap by dir.lon)
|
|
|- ^+ hav
|
|
?~ all hav
|
|
$(all t.all, hav ^$(tyl [p.i.all tyl]))
|
|
::
|
|
::TODO include %prep task in solid and brass?
|
|
++ solid
|
|
:: sys: root path to boot system, `/~me/[desk]/now/sys`
|
|
:: dez: secondary desks and their root paths
|
|
:: exc: list of desk folders to exclude
|
|
::
|
|
|= [sys=path dez=(list [desk path]) dub=? now=@da prime=? exc=(list spur)]
|
|
^- pill
|
|
=/ bas=path (scag 3 sys)
|
|
=/ compiler-path (weld sys /hoon)
|
|
=/ arvo-path (weld sys /arvo)
|
|
~& %solid-start
|
|
=/ compiler-src .^(@t %cx (weld compiler-path /hoon))
|
|
=/ arvo-src .^(@t %cx (weld arvo-path /hoon))
|
|
=/ arvo-formula
|
|
~& %solid-loaded
|
|
=/ compiler-hoon (rain compiler-path compiler-src)
|
|
?. dub
|
|
:: compile arvo against hoon, with our current compiler
|
|
::
|
|
=/ whole-hoon=hoon
|
|
[%tsgr compiler-hoon [%tsgr [%$ 7] (rain arvo-path arvo-src)]]
|
|
~& %solid-parsed
|
|
=/ whole-formula q:(~(mint ut %noun) %noun whole-hoon)
|
|
~& %solid-arvo
|
|
whole-formula
|
|
:: compile arvo against hoon, with a freshly compiled hoon (via +ride)
|
|
::
|
|
~& %solid-parsed
|
|
=/ compiler-formula q:(~(mint ut %noun) %noun compiler-hoon)
|
|
~& %solid-compiled
|
|
=/ whole-src
|
|
(rap 3 ['=> ' compiler-src '=> +7 ' arvo-src ~])
|
|
~& %solid-double-loaded
|
|
=/ whole-formula
|
|
=< +
|
|
.* [%noun whole-src]
|
|
[%8 compiler-formula [%9 2 %10 [6 %0 3] [%0 2]]]
|
|
~& %solid-double-compiled
|
|
whole-formula
|
|
::
|
|
~& [%solid-kernel `@ux`(mug arvo-formula)]
|
|
::
|
|
:: installed: Arvo gate (formal interface) with %zuse and vanes installed
|
|
::
|
|
=/ installed
|
|
=< q
|
|
%^ spin
|
|
^- (list ovum)
|
|
:- (boot-ovum:pill compiler-src arvo-src)
|
|
%+ turn
|
|
(snoc (turn dez tail) bas)
|
|
|= =path
|
|
(file-ovum2 [path exc])
|
|
.*(0 arvo-formula)
|
|
|= [ovo=ovum ken=*]
|
|
[~ (slum ken [now ovo])]
|
|
::
|
|
:: boot-two: startup formula
|
|
::
|
|
:: We evaluate :arvo-formula (for jet registration),
|
|
:: then ignore the result and produce .installed
|
|
::
|
|
=/ boot-two
|
|
=> *[arvo-formula=^ installed=^ tale=*]
|
|
!= =+(.*(0 arvo-formula) [installed tale])
|
|
::
|
|
:: boot-ova
|
|
::
|
|
=/ boot-ova=(list)
|
|
[aeon:eden:part boot-two arvo-formula installed ~]
|
|
::
|
|
:: a pill is a 3-tuple of event-lists: [boot kernel userspace]
|
|
::
|
|
:: Our kernel event-list is ~, as we've already installed them.
|
|
:: Our userspace event-list is a list containing a full %clay
|
|
:: filesystem sync event.
|
|
::
|
|
:+ %pill %solid
|
|
:+ boot-ova ~
|
|
=. dez (snoc dez [%base bas])
|
|
%+ weld
|
|
%+ turn dez
|
|
|= [dek=desk bas=path]
|
|
(file-ovum [dek bas exc])
|
|
?. prime ~
|
|
[(prep-ovum (turn dez tail))]~
|
|
::
|
|
++ brass
|
|
:: sys: root path to boot system, `/~me/[desk]/now/sys`
|
|
:: dez: secondary desks and their root paths
|
|
:: exc: list of desk folders to exclude
|
|
::
|
|
|= [sys=path dez=(list [desk path]) prime=? exc=(list spur)]
|
|
^- pill
|
|
=/ bas=path (scag 3 sys)
|
|
:: compiler-source: hoon source file producing compiler, `sys/hoon`
|
|
::
|
|
=+ compiler-source=.^(@t %cx (welp sys /hoon/hoon))
|
|
::
|
|
:: compiler-twig: compiler as hoon expression
|
|
::
|
|
~& %brass-parsing
|
|
=+ compiler-twig=(rain /sys/hoon/hoon compiler-source)
|
|
~& %brass-parsed
|
|
::
|
|
:: compiler-formula: compiler as nock formula
|
|
::
|
|
~& %brass-compiling
|
|
=+ compiler-formula=q:(~(mint ut %noun) %noun compiler-twig)
|
|
~& %brass-compiled
|
|
::
|
|
:: arvo-source: hoon source file producing arvo kernel, `sys/arvo`
|
|
::
|
|
=+ arvo-source=.^(@t %cx (welp sys /arvo/hoon))
|
|
::
|
|
:: boot-ova: startup events
|
|
::
|
|
=/ boot-ova=(list)
|
|
:~ aeon:eden:part
|
|
boot:eden:part
|
|
compiler-formula
|
|
compiler-source
|
|
arvo-source
|
|
==
|
|
:: a pill is a 3-tuple of event-lists: [boot kernel userspace]
|
|
::
|
|
:+ %pill %brass
|
|
:+ boot-ova
|
|
:~ (boot-ovum compiler-source arvo-source)
|
|
(file-ovum2 [bas exc])
|
|
==
|
|
=. dez (snoc dez [%base bas])
|
|
%+ weld
|
|
%+ turn dez
|
|
|= [dek=desk bas=path]
|
|
(file-ovum [dek bas exc])
|
|
?. prime ~
|
|
[(prep-ovum (turn dez tail))]~
|
|
::
|
|
++ ivory
|
|
|= sys=path
|
|
^- pill
|
|
=/ lib (snoc (scag 3 sys) %lib)
|
|
|^ =/ ver
|
|
=/ sub *(trap vase)
|
|
=. sub (build-sys sub %hoon)
|
|
=. sub (build-sys sub %arvo)
|
|
=. sub (build-sys sub %lull)
|
|
=. sub (build-sys sub %zuse)
|
|
=. sub (build-lib sub & %ethereum)
|
|
=. sub (build-lib sub & %azimuth)
|
|
(build-lib sub | %vere)
|
|
=/ nok !.
|
|
=> *[ver=(trap vase) ~]
|
|
!= q:$:ver
|
|
ivory/[nok ver ~]
|
|
::
|
|
++ build-sys
|
|
|= [sub=(trap vase) nam=term] ^- (trap vase)
|
|
~> %slog.[0 leaf+"ivory: building /sys/{(trip nam)}"]
|
|
(swat sub (rain /sys/[nam]/hoon .^(@t cx+(welp sys /[nam]/hoon))))
|
|
::
|
|
++ build-lib
|
|
|= [sub=(trap vase) imp=? nam=term] ^- (trap vase)
|
|
~> %slog.[0 leaf+"ivory: building /lib/{(trip nam)}"]
|
|
=/ hun=hoon
|
|
%+ mist /lib/[nam]/hoon
|
|
.^(@t cx+(welp lib /[nam]/hoon))
|
|
?. imp (swat sub hun)
|
|
(swel sub [%ktts nam hun])
|
|
:: +mist: +rain but skipping past ford runes
|
|
::
|
|
++ mist
|
|
|= [bon=path txt=@]
|
|
^- hoon
|
|
=+ vas=vast
|
|
~| bon
|
|
%+ scan (trip txt)
|
|
%- full
|
|
=; fud
|
|
(ifix [;~(plug gay fud) gay] tall:vas(wer bon))
|
|
%- star
|
|
;~ pose vul
|
|
%+ ifix [fas (just `@`10)]
|
|
(star ;~(less (just `@`10) next))
|
|
==
|
|
:: +swel: +swat but with +slop
|
|
::
|
|
++ swel
|
|
|= [tap=(trap vase) gen=hoon]
|
|
^- (trap vase)
|
|
=/ gun (~(mint ut p:$:tap) %noun gen)
|
|
=> [tap=tap gun=gun]
|
|
|. ~+
|
|
=/ pro q:$:tap
|
|
[[%cell p.gun p:$:tap] [.*(pro q.gun) pro]]
|
|
--
|
|
::
|
|
++ events
|
|
|%
|
|
+$ prop [%prop meta tier (list ovum)]
|
|
+$ meta term
|
|
+$ tier ?(%fore %hind) :: before or after userspace
|
|
::
|
|
++ install
|
|
|= [as=desk =beak pri=?]
|
|
^- prop
|
|
:^ %prop (rap 3 %install '-' as ~) %hind
|
|
::TODO will exclude non-:directories files, such as /changelog/txt
|
|
=- (murn - same)
|
|
^- (list (unit ovum))
|
|
:~ `(file-ovum as (en-beam beak /) ~)
|
|
::
|
|
?. pri ~
|
|
`(prep-ovum (en-beam beak /) ~)
|
|
::
|
|
`[/d/install/[as] [%seat as]]
|
|
==
|
|
--
|
|
--
|