# NOSE:pluto

## Installation

1. Make a fresh RPi image with a "nose" user.

2. Clone this repo

3. From the root of this repo, run:

    bun remote:install

4. When it's done (it'll reboot) visit:

    http://nose-pluto.local

And to make sure DNS is working:

    http://ping.nose-pluto.local/

5. Have fun!

## Local Dev

Running the server will create `~/nose` for you to play with.

    # setup git w/ two `origin` remotes + pre-commit hook
    git config --unset-all remote.origin.pushurl
    git remote set-url --push origin https://github.com/defunkt/nose-pluto
    git remote set-url --add  --push origin https://git.nose.space/defunkt/nose-pluto
    git config core.hooksPath .githooks

    # go about your business
    bun install
    bun dev
    open localhost:3000

## Production Dev

Make sure you bundle the JS:

    bun run bundle

If you want to test (or run) production with DNS features, use `NO_DNS`:

    env NO_DNS=1 NODE_ENV=production bun start

You can also use the package commands:

    # run without DNS
    bun prod-nodns
    # run normally
    bun prod

## Commands

Commands can return one of these types:

- `string`
- `{ error: string }`
- `{ html: string }`
- `{ text: string }`

They can also `throw` to display an error.

Additionally, you can return JS that gets immediately run in the browser using `script:`:

- `{ html: string, script: string }`
- `{ text: string, script: string }`
- `{ script: string }`

## Fonts

Use this to examine what's inside the C64 .woff2 font file in public/vendor:

https://wakamaifondue.com/

## Pluto Goals: Phase 1

- [x] Hosts valtown-style Bun apps (for your home network)
- [x] Provides a NOSE terminal/shell GUI
- [x] Runs one-shot TypeScript commands (via NOSE terminal)
- [x] Has a 960x540 (16:9) virtual screen size that scales to the actual size of the display
- [x] Runs on a Raspberry Pi 5

## Pluto Goals: Phase 2

- [ ] `nose` CLI
- [ ] game/bin/www cartridges
- [x] public tunnel for your NOSE webapps
    - [x] public tunnel lives through reboots
    - [o] tunnel to the terminal -- Not doing this for now!
- [x] web browser
- [x] browser commands
- [x] remember your "mode"
- [x] status bar on terminal UX
    - [x] quickly open the current webapp
- [x] "project"-based rehaul
- [x] self updating NOSE server
- [x] `pub/` static hosting in webapps
- [x] upload files to projects
- [-] pico8-style games
    - [x] init/update/draw
    - [x] simple drawing api
    - [x] gamepad support
    - [ ] sounds
    - [ ] maps
    - [ ] etc...?

## Future Goals (need to be split into Phases)

- [ ] `nose` can find your NOSEputer via mDNS/Bonjour
- [ ] Shrimp!
- [ ] CodeMirror Editor
- [ ] cron tasks
- [ ] prompt()
- [ ] confirm()
- [ ] faster boot (turn off stuff like CUPS)
- [ ] SSD
- [ ] NOSE App Store -- "There's an app for that" (browse + install carts)
- [ ] System dashboard (CPU, memory)
- [ ] Write Your Own Daemons (MUD? FTPd?)
    - [ ] Daemon Dashboard
- [ ] cloud backup for projects
- [ ] "sleep" / "wake" (disable monitor)
- [ ] themes
- [ ] pixel art boot animation