Compare commits

..

No commits in common. "main" and "feat/webworker" have entirely different histories.

115 changed files with 1719 additions and 2007 deletions

1
.gitignore vendored
View File

@ -1 +0,0 @@
*.swp

View File

@ -1,9 +1,7 @@
#FROM rastasheep/ubuntu-sshd:18.04 FROM rastasheep/ubuntu-sshd:18.04
FROM ubuntu:22.04
# Buildroot version to use # Buildroot version to use
#ARG BUILD_ROOT_RELEASE=2021.02-rc2 ARG BUILD_ROOT_RELEASE=2021.02-rc2
ARG BUILD_ROOT_RELEASE=2024.02.8
# Root password for SSH # Root password for SSH
ARG ROOT_PASSWORD=browser-vm ARG ROOT_PASSWORD=browser-vm
@ -25,7 +23,6 @@ RUN echo 'root:${ROOT_PASSWORD}' | chpasswd; \
WORKDIR /root WORKDIR /root
RUN DEBIAN_FRONTEND=noninteractive apt-get -q -y install \ RUN DEBIAN_FRONTEND=noninteractive apt-get -q -y install \
bc \ bc \
file \
build-essential \ build-essential \
bzr \ bzr \
cpio \ cpio \

View File

@ -1,4 +1,4 @@
# XRSH ISO # Browser VM
A custom [Buildroot](https://buildroot.org/) config for a Linux x86 VM, meant to A custom [Buildroot](https://buildroot.org/) config for a Linux x86 VM, meant to
be run in the browser as part of [XRSH](https://xrsh.isvery.ninja) be run in the browser as part of [XRSH](https://xrsh.isvery.ninja)
@ -15,14 +15,6 @@ filesystem overlay, and scripts necessary to build our distribution.
## Running ISO via qemu ## Running ISO via qemu
first enable the vga console:
```bash
echo "console::respawn:-/bin/sh # vga console" >> rootfs/etc/inittab
```
then run qemu:
``` ```
qemu-system-i386 -cdrom dist/v86-linux.iso qemu-system-i386 -cdrom dist/v86-linux.iso
``` ```
@ -102,10 +94,6 @@ If you need or want to update these config files, do the following:
$ ./build.sh --edit $ ./build.sh --edit
``` ```
this triggers the `make menuconfig` applications for linux/kernel/busybox
> NOTE: to save your changes to the repo: run `make savedefconfig` afterwards and commit `buildroot/configs`
## method 2 (manually) ## method 2 (manually)
```bash ```bash
@ -232,5 +220,3 @@ CONFIG_VIRTIO_PCI=y
Now run `make` Now run `make`
When it finishes, the built image is in `./output/images`. When it finishes, the built image is in `./output/images`.
> to debug (gdb access) uncomment the debug-section in `buildroot_v86/configs/v86_defconfig`, run `make` and then `./run.sh`

View File

@ -1,5 +1,4 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -x
test "$1" = "--edit" && { test "$1" = "--edit" && {
EDIT="-ti -v $PWD/edit.sh:/root/edit.sh --entrypoint bash" EDIT="-ti -v $PWD/edit.sh:/root/edit.sh --entrypoint bash"
@ -11,12 +10,10 @@ test -d dist || mkdir dist
test -d cache || mkdir cache test -d cache || mkdir cache
rm -rf cache/* rm -rf cache/*
OCI=$(which podman || which docker) docker images | grep buildroot || docker build -t buildroot .
$OCI images | grep buildroot || $OCI build -t buildroot . docker run \
--rm \
#$OCI --conmon /usr/bin/false run \
$OCI run \
--name build-v86 \ --name build-v86 \
-v $PWD/dist:/build \ -v $PWD/dist:/build \
-v $PWD/buildroot-v86/:/buildroot-v86 ${EDIT} \ -v $PWD/buildroot-v86/:/buildroot-v86 ${EDIT} \

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +1 @@
source "$BR2_EXTERNAL_v86_PATH/package/nled/Config.in" source "$BR2_EXTERNAL_v86_PATH/package/nled/Config.in"
source "$BR2_EXTERNAL_v86_PATH/package/fusescript/Config.in"

View File

@ -1,46 +1,147 @@
# CONFIG_LOCALVERSION_AUTO is not set # CONFIG_LOCALVERSION_AUTO is not set
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y CONFIG_POSIX_MQUEUE=y
CONFIG_AUDIT=y
CONFIG_NO_HZ=y CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y CONFIG_HIGH_RES_TIMERS=y
CONFIG_PREEMPT_VOLUNTARY=y CONFIG_BSD_PROCESS_ACCT=y
CONFIG_TASKSTATS=y
CONFIG_TASK_DELAY_ACCT=y
CONFIG_TASK_XACCT=y
CONFIG_TASK_IO_ACCOUNTING=y
CONFIG_LOG_BUF_SHIFT=18 CONFIG_LOG_BUF_SHIFT=18
CONFIG_CGROUPS=y CONFIG_CGROUPS=y
CONFIG_CGROUP_SCHED=y CONFIG_CGROUP_SCHED=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_CPUACCT=y CONFIG_CGROUP_CPUACCT=y
CONFIG_NAMESPACES=y CONFIG_NAMESPACES=y
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="${BR_BINARIES_DIR}/rootfs.cpio" CONFIG_INITRAMFS_SOURCE="${BR_BINARIES_DIR}/rootfs.cpio"
CONFIG_CC_OPTIMIZE_FOR_SIZE=y CONFIG_CC_OPTIMIZE_FOR_SIZE=y
# CONFIG_PCSPKR_PLATFORM is not set
CONFIG_EMBEDDED=y CONFIG_EMBEDDED=y
CONFIG_X86_GENERIC=y # CONFIG_COMPAT_BRK is not set
CONFIG_HPET_TIMER=y CONFIG_PROFILING=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y CONFIG_KPROBES=y
CONFIG_X86_REBOOTFIXUPS=y CONFIG_JUMP_LABEL=y
CONFIG_MICROCODE_AMD=NTEL_PSTATE=y
CONFIG_X86_ACPI_CPUFREQ=y
CONFIG_MODULES=y CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_PARTITION_ADVANCED=y
CONFIG_OSF_PARTITION=y
CONFIG_AMIGA_PARTITION=y
CONFIG_MAC_PARTITION=y
CONFIG_BSD_DISKLABEL=y
CONFIG_MINIX_SUBPARTITION=y
CONFIG_SOLARIS_X86_PARTITION=y
CONFIG_UNIXWARE_DISKLABEL=y
CONFIG_SGI_PARTITION=y
CONFIG_SUN_PARTITION=y
CONFIG_KARMA_PARTITION=y
# CONFIG_X86_EXTENDED_PLATFORM is not set
CONFIG_M686=y
CONFIG_X86_GENERIC=y
CONFIG_HPET_TIMER=y
CONFIG_PREEMPT_VOLUNTARY=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_REBOOTFIXUPS=y
CONFIG_MICROCODE_AMD=y
CONFIG_X86_MSR=y
CONFIG_X86_CPUID=y
CONFIG_HIGHPTE=y
CONFIG_X86_CHECK_BIOS_CORRUPTION=y
# CONFIG_MTRR_SANITIZER is not set
CONFIG_EFI=y
CONFIG_HZ_100=y
CONFIG_KEXEC=y
CONFIG_CRASH_DUMP=y
CONFIG_HIBERNATION=y
CONFIG_PM_DEBUG=y
CONFIG_PM_TRACE_RTC=y
CONFIG_ACPI_DOCK=y
CONFIG_ACPI_CONTAINER=y
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
CONFIG_X86_INTEL_PSTATE=y
CONFIG_X86_ACPI_CPUFREQ=y
CONFIG_PCIEPORTBUS=y
CONFIG_PCI_MSI=y
CONFIG_PCI_DEBUG=y
CONFIG_HOTPLUG_PCI=y
CONFIG_PCCARD=y
CONFIG_YENTA=y
CONFIG_BINFMT_MISC=y CONFIG_BINFMT_MISC=y
CONFIG_NET=y CONFIG_NET=y
CONFIG_PACKET=y CONFIG_PACKET=y
CONFIG_UNIX=y CONFIG_UNIX=y
CONFIG_XFRM_USER=y CONFIG_XFRM_USER=y
CONFIG_INET=y CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_IP_ROUTE_VERBOSE=y
CONFIG_IP_PNP=y CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
CONFIG_IP_MROUTE=y
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
CONFIG_SYN_COOKIES=y CONFIG_SYN_COOKIES=y
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
# CONFIG_INET_XFRM_MODE_BEET is not set
# CONFIG_INET_DIAG is not set
CONFIG_TCP_CONG_ADVANCED=y
# CONFIG_TCP_CONG_BIC is not set
# CONFIG_TCP_CONG_WESTWOOD is not set
# CONFIG_TCP_CONG_HTCP is not set
CONFIG_TCP_MD5SIG=y CONFIG_TCP_MD5SIG=y
# CONFIG_IPV6 is not set
CONFIG_NETWORK_SECMARK=y CONFIG_NETWORK_SECMARK=y
CONFIG_NET_SCHED=y
CONFIG_NET_EMATCH=y
CONFIG_NET_CLS_ACT=y
CONFIG_DNS_RESOLVER=y
# CONFIG_WIRELESS is not set
CONFIG_NET_9P=y CONFIG_NET_9P=y
CONFIG_NET_9P_VIRTIO=y CONFIG_NET_9P_VIRTIO=y
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEBUG_DEVRES=y
CONFIG_CONNECTOR=y
# CONFIG_PNP_DEBUG_MESSAGES is not set
CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_LOOP=y
# CONFIG_SCSI_PROC_FS is not set
CONFIG_SCSI_SPI_ATTRS=y
# CONFIG_SCSI_LOWLEVEL is not set
CONFIG_ATA=y
# CONFIG_ATA_VERBOSE_ERROR is not set
CONFIG_SATA_AHCI=y
CONFIG_ATA_PIIX=y
CONFIG_PATA_AMD=y
CONFIG_PATA_OLDPIIX=y
CONFIG_PATA_SCH=y
CONFIG_PATA_MPIIX=y
CONFIG_ATA_GENERIC=y
CONFIG_NETDEVICES=y CONFIG_NETDEVICES=y
CONFIG_NETCONSOLE=y CONFIG_NETCONSOLE=y
CONFIG_VIRTIO_NET=y CONFIG_VIRTIO_NET=y
# CONFIG_ETHERNET is not set # CONFIG_ETHERNET is not set
CONFIG_PHYLIB=y
# CONFIG_WLAN is not set
CONFIG_INPUT_POLLDEV=y
CONFIG_INPUT_SPARSEKMAP=y
CONFIG_INPUT_EVDEV=y
CONFIG_INPUT_JOYSTICK=y
CONFIG_INPUT_TABLET=y
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_INPUT_MISC=y
# CONFIG_LEGACY_PTYS is not set
CONFIG_SERIAL_NONSTANDARD=y CONFIG_SERIAL_NONSTANDARD=y
CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_CONSOLE=y
@ -51,11 +152,52 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y
CONFIG_SERIAL_8250_DETECT_IRQ=y CONFIG_SERIAL_8250_DETECT_IRQ=y
CONFIG_SERIAL_8250_RSA=y CONFIG_SERIAL_8250_RSA=y
CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM=y
CONFIG_NVRAM=y
CONFIG_HPET=y
# CONFIG_HPET_MMAP is not set
CONFIG_I2C_I801=y CONFIG_I2C_I801=y
CONFIG_PTP_1588_CLOCK=y
CONFIG_WATCHDOG=y
CONFIG_AGP=y
CONFIG_AGP_AMD64=y
CONFIG_AGP_INTEL=y
CONFIG_DRM=y
CONFIG_DRM_I915=y
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_TILEBLITTING=y
CONFIG_FB_EFI=y
# CONFIG_LCD_CLASS_DEVICE is not set # CONFIG_LCD_CLASS_DEVICE is not set
CONFIG_VGACON_SOFT_SCROLLBACK=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_LOGO=y CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not set # CONFIG_LOGO_LINUX_MONO is not set
# CONFIG_LOGO_LINUX_VGA16 is not set # CONFIG_LOGO_LINUX_VGA16 is not set
CONFIG_HIDRAW=y
CONFIG_HID_A4TECH=y
CONFIG_HID_APPLE=y
CONFIG_HID_BELKIN=y
CONFIG_HID_CHERRY=y
CONFIG_HID_CHICONY=y
CONFIG_HID_CYPRESS=y
CONFIG_HID_EZKEY=y
CONFIG_HID_GYRATION=y
CONFIG_HID_ITE=y
CONFIG_HID_KENSINGTON=y
CONFIG_HID_LOGITECH=y
CONFIG_LOGITECH_FF=y
CONFIG_HID_MICROSOFT=y
CONFIG_HID_MONTEREY=y
CONFIG_HID_PANTHERLORD=y
CONFIG_PANTHERLORD_FF=y
CONFIG_HID_PETALYNX=y
CONFIG_HID_SAMSUNG=y
CONFIG_HID_SUNPLUS=y
CONFIG_HID_TOPSEED=y
# CONFIG_USB_SUPPORT is not set
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
CONFIG_LEDS_TRIGGERS=y
CONFIG_EDAC=y
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
# CONFIG_RTC_HCTOSYS is not set # CONFIG_RTC_HCTOSYS is not set
CONFIG_DMADEVICES=y CONFIG_DMADEVICES=y
@ -63,7 +205,9 @@ CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_MMIO=y CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
# CONFIG_X86_PLATFORM_DEVICES is not set # CONFIG_X86_PLATFORM_DEVICES is not set
CONFIG_FUSE_FS=m CONFIG_DAX=y
CONFIG_EFI_VARS=y
CONFIG_AUTOFS4_FS=y
CONFIG_FSCACHE=y CONFIG_FSCACHE=y
CONFIG_CACHEFILES=y CONFIG_CACHEFILES=y
CONFIG_ISO9660_FS=y CONFIG_ISO9660_FS=y
@ -76,9 +220,24 @@ CONFIG_9P_FS=y
CONFIG_9P_FSCACHE=y CONFIG_9P_FSCACHE=y
CONFIG_9P_FS_POSIX_ACL=y CONFIG_9P_FS_POSIX_ACL=y
CONFIG_NLS_DEFAULT="utf8" CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ASCII=y CONFIG_NLS_ASCII=y
CONFIG_NLS_ISO8859_1=y CONFIG_NLS_ISO8859_1=y
CONFIG_NLS_UTF8=y CONFIG_NLS_UTF8=y
CONFIG_PRINTK_TIME=y
# CONFIG_ENABLE_WARN_DEPRECATED is not set
# CONFIG_UNUSED_SYMBOLS is not set
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_STACK_USAGE=y
CONFIG_DEBUG_STACKOVERFLOW=y
# CONFIG_SCHED_DEBUG is not set
CONFIG_SCHEDSTATS=y
CONFIG_RCU_TRACE=y
CONFIG_BLK_DEV_IO_TRACE=y
CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
CONFIG_EARLY_PRINTK_DBGP=y
CONFIG_DEBUG_BOOT_PARAMS=y
CONFIG_OPTIMIZE_INLINING=y
CONFIG_KEYS=y CONFIG_KEYS=y
CONFIG_SECURITY=y CONFIG_SECURITY=y
CONFIG_SECURITY_NETWORK=y CONFIG_SECURITY_NETWORK=y
@ -86,15 +245,19 @@ CONFIG_CRYPTO_RSA=y
CONFIG_CRYPTO_AUTHENC=y CONFIG_CRYPTO_AUTHENC=y
CONFIG_CRYPTO_CCM=y CONFIG_CRYPTO_CCM=y
CONFIG_CRYPTO_GCM=y CONFIG_CRYPTO_GCM=y
CONFIG_CRYPTO_ECHAINIV=y
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CMAC=y
CONFIG_CRYPTO_CRC32C=y CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_SHA1=y CONFIG_CRYPTO_SHA1=y
CONFIG_CRYPTO_AES_586=y CONFIG_CRYPTO_AES_586=y
CONFIG_CRYPTO_ARC4=y
CONFIG_CRYPTO_DES=y CONFIG_CRYPTO_DES=y
CONFIG_ASYMMETRIC_KEY_TYPE=y CONFIG_ASYMMETRIC_KEY_TYPE=y
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
CONFIG_X509_CERTIFICATE_PARSER=y CONFIG_X509_CERTIFICATE_PARSER=y
CONFIG_PKCS7_MESSAGE_PARSER=y CONFIG_PKCS7_MESSAGE_PARSER=y
CONFIG_SYSTEM_TRUSTED_KEYRING=y CONFIG_SYSTEM_TRUSTED_KEYRING=y
# CONFIG_VIRTUALIZATION is not set
CONFIG_CRC_CCITT=y CONFIG_CRC_CCITT=y
CONFIG_CRC16=y CONFIG_CRC16=y
CONFIG_OPTIMIZE_INLINING=y

View File

@ -9,8 +9,6 @@ echo "Created v86-linux.iso."
# Prepare license info. Start with Seabios, then buildroot's # Prepare license info. Start with Seabios, then buildroot's
wget https://raw.githubusercontent.com/coreboot/seabios/master/COPYING.LESSER \ wget https://raw.githubusercontent.com/coreboot/seabios/master/COPYING.LESSER \
-O ${BASE_DIR}/SeaBIOS_COPYING.LESSER -O ${BASE_DIR}/SeaBIOS_COPYING.LESSER
mkdir ${BASE_DIR}/legal-info || true
tar czvf /build/licenses.tar.gz \ tar czvf /build/licenses.tar.gz \
${BASE_DIR}/SeaBIOS_COPYING.LESSER \ ${BASE_DIR}/SeaBIOS_COPYING.LESSER \
${BASE_DIR}/legal-info/buildroot.config \ ${BASE_DIR}/legal-info/buildroot.config \

View File

@ -1,4 +1,4 @@
#!/usr/bin/awk awk -f #!/usr/bin/env -S awk -f
BEGIN { BEGIN {

View File

@ -22,7 +22,6 @@ OUTPUT=/mnt/run/$PID # com/isoterminal/feat/javascript.js writes output here
touch $OUTPUT touch $OUTPUT
echo -n "PID=$PID; $javascript" > /dev/browser/js echo -n "PID=$PID; $javascript" > /dev/browser/js
# todo watch file # todo watch file
sleep 0.1
cat $OUTPUT cat $OUTPUT
rm $OUTPUT rm $OUTPUT

View File

@ -1,9 +1,23 @@
Welcome to XRSH
For an optimal experience, connect a (bluetooth) keyboard.  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Use Ctrl+a+0/1/2/3/.. to switch terminals.  . . ____ _____________ ________. ._. ._. . . . . . . . .
Use Ctrl+a+c to create a new terminal.  . . _\ \/ /\______ \/ _____// | \. . . . . . . .
Type 'save' to save session (survives tab-close)  . . _ \ / | _/\_____ \/ ~ \ . . . . . . .
Type 'help_tips' for tips  _ _ / \ | | \/ \ Y / _ _ _ _ _ _ _
Happy hacking! \o/  . . /___/\ \ |____|_ /_______ /\___|_ /. . . . . . . .
 . . . . . .\_/. . . . \/ . . . .\/ . . _ \/ . . . . . . . .
 ▬▬▬▬ https://xrsh.isvery.ninja ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Open, local-first, polyglot, unix hackable & selfcontained XR apps.
credits: NLnet | @nlnet@nlnet.nl https://nlnet.nl/project
all FOSS devs | copy.sh (v86) aframe.io (AFRAME)
Leon van Kammen | @lvk@mastodon.online
Fabien Benetou | @utopiah@mastodon.pirateparty.be
Please hook up your (bluetooth) keyboard to use xrsh.
Use Ctrl+a+0/1/2/3/.. to switch terminals.
Use Ctrl+a+c to create a new terminal.
Use 'save' to save session (survives tab-close)
Happy hacking! \o/

View File

@ -1,7 +1,5 @@
export HOME=/root export HOME=/root
export PATH=~/bin:$PATH:/etc export PATH=$PATH:/etc:~/bin
set +m # mute job control notifications
# source URL data from v86 (file created by v86 during boot) # source URL data from v86 (file created by v86 during boot)
test -f /mnt/profile.browser && source /mnt/profile.browser test -f /mnt/profile.browser && source /mnt/profile.browser
@ -23,7 +21,6 @@ test -f ~/.profile.js && chmod +x ~/.profile.js && ~/.profile.js | grep -v undef
## forward not-found commands to javascript (via jsh) ## forward not-found commands to javascript (via jsh)
command_not_found_handle(){ command_not_found_handle(){
set +e
echo "[!] '$1' not found, did you mean $1(...) (javascript?)" echo "[!] '$1' not found, did you mean $1(...) (javascript?)"
test -n "$ONBOARDING" && echo "[i] type 'help' for handy commands" test -n "$ONBOARDING" && echo "[i] type 'help' for handy commands"
test -n "$ONBOARDING" || help_tips test -n "$ONBOARDING" || help_tips
@ -33,49 +30,41 @@ help_tips(){
echo "" echo ""
echo 'TIPS' echo 'TIPS'
echo '----' echo '----'
echo 'text editors ' "type '<cm|vi|mg|nano> <textfile>'" echo 'text editors ' "type '<vi|mg|nano> <textfile>'"
echo 'programming languages ' "type 'ls ~/bin/helloworld*'" echo 'programming languages ' "type 'ls ~/bin/helloworld*'"
echo 'run 64bit linux app ' "type 'blink <x86_64 binary>'" echo 'run 64bit linux app ' "type 'blink <x86_64 binary>'"
echo 'paste text ' "ctrl/cmd+shift+v'"
echo 'paste text to file ' "ctrl/cmd+v'"
echo 'import file to scene ' "drag-drop file or ctrl/cmd+v or type 'upload'"
echo 'import remote URL ' "type 'require <https://xrfragment.org/index.glb>'"
echo 'reset scene & shell ' "type 'reset'"
echo 'js run ' "type 'js 'alert(\"hello\")'" echo 'js run ' "type 'js 'alert(\"hello\")'"
echo 'js console.log: ' "type 'console document.baseURI" echo 'js console.log: ' "type 'console document.baseURI"
echo 'js function as cmd: ' "type 'alias $1=\"jsh $1\"' to run '$1 yo' as $1('yo')" echo 'js function as cmd: ' "type 'alias $1=\"jsh $1\"' to run '$1 yo' as $1('yo')"
echo 'js inspect: ' "type 'js \"return document.baseURI\"'" echo 'js inspect: ' "type 'js \"return document.baseURI\"'"
echo 'js console mute: ' "type 'echo 0 > /dev/browser/tty' to disable"
echo 'js capture console: ' "type 'tail -f /dev/browser/console'" echo 'js capture console: ' "type 'tail -f /dev/browser/console'"
echo 'js<->filesystem hooks:' "type 'see [executable] files in ~/hook.d'" echo 'jsh<->sh hooks: ' "type 'chmod +x ~/hook.d/*/* && alert helloworld'"
echo 'include file into page' "type 'require <url.js|css>'" echo 'include file into page' "type 'require <url.js|css>'"
echo 'say something ' "type 'say hello'"
echo '' echo ''
echo 'type "help" or "man xrsh" to read the full manual' echo 'type "help" or "man xrsh" to read the full manual'
ONBOARDING=1 ONBOARDING=1
} }
export TERM=xterm-256color export TERM=xterm-256color
export PS1="\[\e[36m\]> \[\e\[0m\]" export PS1="\[\033[38;5;165m\]> \[\033[0m\]"
# aliases # aliases
alias ls='ls -ha -w100' alias ls='ls -ha -w100'
# interactive login # interactive login
which screen &> /dev/null && { [[ -t 0 ]] && {
[[ -t 0 ]] && {
eval $(resize) # important
printf "\r" # weird but needed
test -n "$STY" || { test -n "$STY" || {
# execute URL hash or GNU screen resize # call twice
test -n "$HASH" && hook URI/fragment "${HASH:1}" resize # otherwise COLUMNS/ROWS is 0
test -z "$HASH" && screen -Aa -R -T screen-256color -c /root/.screenrc # add URL-hash as extra screen session
} test -z "$HASH" || {
test -n "$STY" && { grep 'screen -t #' /root/.screenrc || {
test -f /root/motd && cat /root/motd || cat /etc/motd; echo "screen -t xrsh+URL 3 /bin/sh -c '${HASH}; sh'" | sed "s/'#/'/g" >> /root/.screenrc
say "welcome to eex r, shell. For an optimal user experience, connect a Bluetooth keyboard." &
} }
} }
screen -Aa -R -T screen-256color -c /root/.screenrc
}
test -n "$STY" && cat /etc/motd
} }
cd $HOME

View File

@ -3,7 +3,7 @@
// do once (remember /etc/profile gets sources multiple times!) // do once (remember /etc/profile gets sources multiple times!)
if( !window['/etc/profile.js'] ){ if( !window['/etc/profile.js'] ){
const isoterminal = document.querySelector('[isoterminal]').components.isoterminal.term const isoterminal = document.querySelector('[isoterminal]').components.isoterminal.isoterminal
const scene = document.querySelector('a-scene') const scene = document.querySelector('a-scene')

View File

@ -1,14 +1,12 @@
hook(){ hook(){
test -z "$1" && { echo "usage: hook <cmd_or_jsfunction> [args]"; return 0; } test -z "$1" && { echo "usage: hook <cmd_or_jsfunction> [args]"; return 0; }
logger "$ hook $*"
cmd=$1 cmd=$1
shift shift
test -d ~/hook.d/$cmd && { test -d ~/hook.d/$cmd && {
find -L ~/hook.d/$cmd/ -type f -executable -maxdepth 1 | while read hook; do find ~/hook.d/$cmd/ -type f -executable | while read hook; do
logger " |+ hook $hook $*"
{ $hook "$@" || true; } | awk '{ gsub(/\/root\/\//,"",$1); $1 = sprintf("%-40s", $1)} 1' { $hook "$@" || true; } | awk '{ gsub(/\/root\/\//,"",$1); $1 = sprintf("%-40s", $1)} 1'
done done
} | tee -a ~/hook.d/log.txt }
} }
alert(){ alert(){
@ -23,8 +21,8 @@ alert(){
confirm(){ confirm(){
test -z "$1" && { echo "usage: confirm <question>"; return 0; } test -z "$1" && { echo "usage: confirm <question>"; return 0; }
read -p "$(printf "\033[0m")[?] $1 [y/n] $(printf "\033[0m")" y read -p "$(printf "\033[0m")[?] $1 [y/n] $(printf "\033[0m")" y
test $y = "y" && echo true && return 0 test $y = y && echo true && return 0
test $y = "y" || echo false test $y = y || echo false
hook confirm $1 $y hook confirm $1 $y
} }
@ -46,7 +44,6 @@ console(){
# #
# info: adds javascript/css url/script to DOM # info: adds javascript/css url/script to DOM
require(){ require(){
test -n "$1" || { echo "usage: require <url>"; exit 0; }
file=$(basename "$1") file=$(basename "$1")
ext="${file/*\./}" ext="${file/*\./}"
@ -64,14 +61,6 @@ require(){
echo "<a-entity xrf='$1'></a-entity>" >> /root/index.html echo "<a-entity xrf='$1'></a-entity>" >> /root/index.html
;; ;;
sh)
js '
fetch('$1')
.then( (res) => res.text() )
.then( (text) => console.log(text) )
'
;;
*) *)
alert $ext "extension is not supported (yet)" alert $ext "extension is not supported (yet)"
;; ;;

View File

@ -3,19 +3,12 @@
test -d /dev/browser || { test -d /dev/browser || {
move_root_to_9pfs(){ move_root_to_9pfs(){
test -d /mnt/run || mkdir /mnt/run # for javascript<->unix pids mkdir /mnt/run # for javascript<->unix pids
test -d /mnt/root && return 0 test -d /mnt/root && return 0
mv /root /mnt/. mv /root /mnt/.
ln -fs /mnt/root /root ln -fs /mnt/root /root
} }
setup_clipboard(){
test -d /mnt/clipboard || {
mkdir /mnt/clipboard
echo "files appear here when dragdropping- or copy/pasting a file into the 3D scene (minimize in non-immersive mode)" > /mnt/clipboard/README.md
}
}
setup_links(){ setup_links(){
ln -fs /etc/motd ~/.motd ln -fs /etc/motd ~/.motd
ln -fs /mnt/profile.browser ~/.profile.browser ln -fs /mnt/profile.browser ~/.profile.browser
@ -38,37 +31,36 @@ test -d /dev/browser || {
} }
setup_overlayfs(){ setup_overlayfs(){
test -f /mnt/overlayfs.zip && ziprun /mnt/overlayfs.zip test -f /mnt/overlayfs.zip && unzip /mnt/overlayfs.zip -d /
} }
setup_incoming_cmds(){ setup_incoming_cmds(){
# listen for shell cmds passed to v86 from browser # listen for shell cmds passed to v86 from browser
# (via isoterminal.exec(...)) # (via isoterminal.exec(...))
stty raw < /dev/ttyS1 stty raw < /dev/ttyS1
#cat /dev/ttyS1 | xargs -I{} /bin/sh -c 'logger "isoterminal.exec({})"; {}'
mkfifo /var/run/ttyS1 mkfifo /var/run/ttyS1
echo "source /etc/profile" >> /var/run/ttyS1
cat /dev/ttyS1 > /var/run/ttyS1 & cat /dev/ttyS1 > /var/run/ttyS1 &
/bin/sh < /var/run/ttyS1 > /var/run/ttyS1 /bin/sh < /var/run/ttyS1
} }
setup_listen_homedir(){ setup_listen_homedir(){
sleep 4 sleep 4 # wait for inode of /mnt/root to become live (due to move_root_to_9pfs)
/root/bin/watchfs & infinite inotifyd echo /mnt/root | awk '
# listen for writes to rootdir and send them to DOM
/^[we] \/mnt\/root index\.html/ { system("cat "$2"/"$3" | grep -vE \"^#!\" > /dev/browser/html") }
/^[we] \/mnt\/root index\.js/ { system("cat "$2"/"$3" | grep -vE \"^#!\" > /dev/browser/js") }
'
} }
setup_mounts(){
mkdir /mnt/helloworld /mnt/THREE
fusescript /root/fs/helloworld /mnt/helloworld
fusescript /root/fs/THREE /mnt/THREE
}
modprobe fuse # load fuse
move_root_to_9pfs move_root_to_9pfs
setup_browser_dev setup_browser_dev
setup_clipboard
setup_links setup_links
setup_network setup_network
setup_overlayfs setup_overlayfs
setup_listen_homedir &
setup_incoming_cmds & setup_incoming_cmds &
setup_mounts setup_listen_homedir &
} }

View File

@ -8,6 +8,4 @@ enterAR
exitVR exitVR
exitAR exitAR
tail -n1 -f /dev/browser/console /var/log/messages tail -n1 -f /dev/browser/console /var/log/messages
require https://snips.sh/f/VBz-iWm8so?r=1 require https://coderofsalvation.github.io/xrsh-media/assets/background.glb
a-gltf-model https://xrfragment.org/example/assets/index.glb
a-gltf-model https://coderofsalvation.github.io/xrsh-media/assets/background.glb

View File

@ -1,7 +0,0 @@
{
"speak_rate": 0.88,
"speak_pitch": 0.01,
"speak_volume": 1,
"speak_voice": -1,
"speak_voices": 0
}

View File

@ -1 +0,0 @@
echo "[$(pwd)] the project root-directory"

View File

@ -1,23 +0,0 @@
# ctrl-arrows jump between words / begin/end line
"\e[1;5D": shell-backward-word # seperate by spaces instead of: backward-word, forward-word
"\e[1;5C": shell-forward-word #
# start bash recursive search from cursor using up/down keys
# prevents pressing up-key zillion times in bash/mysql/etc
"\e[A": history-search-backward
"\e[B": history-search-forward
"\C-R": history-search-forward
# always show completion
#set completion-query-items 1000
TAB:menu-complete
"\C-d":kill-word
# completion improv
# for readability: put / after directory names and * after programs:
set visible-stats on
"\e[1;5B": beginning-of-line
"\e[1;5A": end-of-line

View File

@ -1,44 +1,18 @@
alias enterVR='js "document.querySelector(\"a-scene\").enterVR()"'
alias enterAR='js "document.querySelector(\"a-scene\").enterAR()"'
alias exitVR='js "document.querySelector(\"a-scene\").enterVR()"'
alias exitAR='js "document.querySelector(\"a-scene\").enterAR()"'
# (new)user friendlyness # (new)user friendlyness
alias vi='echo -e "HINT: type :q (and press enter) to quit\n[press a key]";read;vi'; alias vi='echo "HINT: type :q (and press enter) to quit\n[press a key]";read;vi';
alias mg='echo -e "HINT: type Ctrl+c Ctrl-x to quit\n[press a key]";read;mg'; alias mg='echo "HINT: type Ctrl+c Ctrl-x to quit\n[press a key]";read;me';
alias nano='echo -e "HINT: type Ctrl+x to quit\n[press a key]" ;read;nano'; alias nano='echo "HINT: type Ctrl+x to quit\n[press a key]" ;read;nano';
# save space in the iso image # start index.js
alias curl="wget -q -O - " test -f index.js && chmod +x index.js && ./index.js | grep -v undefined
alias make="mim"
# minimalist autoenv version [https://github.com/hyperupcall/autoenv] # start index.html
cd(){ test -f index.html && chmod +x index.html && ./index.html
dir_cur=$(pwd)
ignore=0
test "${dir_cur:0:4}" = /mnt && ignore=1
test "${1:0:4}" = /mnt && ignore=1
test "$ignore" = 1 && { command cd ${1:+"$@"}; return 1; }
test -f $(pwd)/.env.leave && source $(pwd)/.env.leave # cleanup environment
command cd ${1:+"$@"} && {
hook cd "$@"
test -f $(pwd)/.env && { # setup environment / run scripts e.g.
test "$(cat ~/.config/autoenv/prompt_cd)" = 1 && {
if "$(confirm ".env detected, execute?")" = false; then return 0; fi
}
source $(pwd)/.env
}
ls # list directories
}
}
# get latest xrfragments to support interactive models
require https://xrfragment.org/dist/xrfragment.aframe.js
# start index.js if /dev/browser/js filesize is not great than 0
if [ ! -s /dev/browser/js ]; then
chmod +x /mnt/root/index.js && /mnt/root/index.js | grep -v undefined
fi
# start index.html if /dev/browser/html filesize is not great than 0
if [ ! -s /dev/browser/html ]; then
chmod +x /mnt/root/index.html && /mnt/root/index.html
fi
# uncomment to set location (3D scene file [with XR Fragments] ) # uncomment to set location (3D scene file [with XR Fragments] )
#require https://xrfragment.org/index.glb #require https://xrfragment.org/index.glb

View File

@ -3,7 +3,6 @@ caption always "%{= kw}%-w%{= BW} %t %{-}%+w %-= $HOSTNAME"
# skip the startup message # skip the startup message
startup_message off startup_message off
msgwait 0
# go to home dir # go to home dir
chdir /root chdir /root
@ -15,7 +14,7 @@ autodetach on
defscrollback 10000 defscrollback 10000
# start with visual bell as default # start with visual bell as default
vbell off vbell on
vbell_msg "bell on %t (%n)" vbell_msg "bell on %t (%n)"

View File

@ -1 +0,0 @@
echo "[$(pwd)] projectspecific cli utilities"

View File

@ -1,11 +0,0 @@
#!/bin/sh
test -n "$1" || { echo "usage: a-gltf-model <gltf-file>"; exit; }
file="$1"
echo "$file" | grep -q http || {
file="$(readlink -f "$1")"
file="${file#/}" # strip leading slash if present
file="file://xrsh/$file"
}
echo "<a-gltf-model src='$file'></a-gltf-model>" >> /root/index.html

View File

@ -1,7 +0,0 @@
#!/bin/sh
test -n "$1" || { echo "usage: a-text <textfile_or_string>"; exit; }
str="$1"
test -f "$str" && str="$(cat "$1" | sed ':a;N;$!ba;s/\n/\\n/g' )" # escape linebreaks
echo "<a-text value='${str}' position='-0.4 1.8 -3' grabbable></a-text>" >> /root/index.html

View File

@ -1,3 +0,0 @@
#!/bin/sh
# simple directory annotator [via autoenv]
echo "echo \"[$(pwd)] $*\"" >> .env

Binary file not shown.

View File

@ -1 +0,0 @@
../opt/codemirror/codemirror

View File

@ -1 +0,0 @@
../opt/codemirror/codemirror

View File

@ -0,0 +1,25 @@
#!/bin/js
(async function(){
await AFRAME.utils.require({
codemirrorjs: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.58.1/codemirror.js",
codemirrorcss: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/codemirror.css",
cmtheme: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/theme/shadowfox.css"
})
await AFRAME.utils.require({
cmxml: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/mode/xml/xml.js",
cmjavascript: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/mode/javascript/javascript.js",
cmcss: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/mode/css/css.js",
highlight: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/mode/htmlmixed/htmlmixed.js",
codemirrorAF: "com/codemirror.js"
})
document.querySelector("a-entity#root").innerHTML += `<a-entity codemirror='file: ${args[1]}'></a-entity>`
})()
return "" // empty stdout(put)
// for shellscript-equivalent see bin/codemirror

View File

@ -0,0 +1,11 @@
#!/bin/sh
source /etc/profile.sh
require 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.58.1/codemirror.js'
require 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/codemirror.css'
require 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/theme/shadowfox.css'
require 'com/codemirror.js'
echo "<a-entity codemirror='file: $1'></a-entity>" >> /dev/browser/html
# for js-equivalent see bin/codemirror

View File

@ -1,2 +0,0 @@
#!/bin/js
document.querySelector("a-scene").enterAR()

View File

@ -1,2 +0,0 @@
#!/bin/js
document.querySelector("a-scene").enterVR()

View File

@ -1,2 +0,0 @@
#!/bin/js
document.querySelector("a-scene").exitAR()

View File

@ -1,2 +0,0 @@
#!/bin/js
document.querySelector("a-scene").exitVR()

View File

@ -1,27 +0,0 @@
#!/bin/sh
set -e
echo '[i] this is a git-stub'
usage(){
echo 'usage: git clone <codeberg.org/xrsh/xrsh> <branchname_or_commithash>';
exit 0;
}
test -n "$1" || usage
clone(){
test -n "$2" || usage
name=$(basename $1)
branch=$2
dir="$name/$branch"
test -n "$DEBUG" && set -x
wget $1/archive/$branch.zip -O "${name}.zip"
unzip ${name}.zip
rm ${name}.zip
set +x
echo ""
echo "[i] unzipped repository to directory '$name'"
}
"$@"

View File

@ -1,2 +1,2 @@
#!/bin/sh #!/bin/sh
echo "$@" echo hook.d/alert/yo: yo $*

View File

@ -1,4 +1,4 @@
#!/usr/bin/awk -f #!/usr/bin/awk -f
BEGIN{ BEGIN{
print( ARGV[0] " " ARGV[1] " " ARGV[2] ) print "hook.d/alert/yo.awk: yo " ARGV[1]
} }

View File

@ -1,7 +1,3 @@
#!/bin/js #!/bin/js
msg = args.join(' ') str = "hook.d/alert/yo.js yo"+args.slice(1).join(' ')
console.log(msg) alert(str)
//alert(msg)
const term = document.querySelector('[isoterminal]').components.isoterminal.term
term.exec("logger bin/helloworld.js "+msg)

View File

@ -1,4 +1,2 @@
#!/usr/bin/env lua #!/usr/bin/env lua
local msg = table.concat( arg, " ") print("hook.d/alert/yo.lua: yo " .. args[1])
print( msg ) -- to stdout
--os.execute( "logger '" .. msg .. "'") -- to logs (/var/logs/messages)

View File

@ -1,7 +1,3 @@
#!/usr/bin/env micropython #!/usr/bin/env micropython
import sys import sys
import os print("hook.d/alert/yo.py: "+sys.argv[1])
msg = sys.argv[0] + ": " + " ".join(sys.argv)
print(msg) # to stdout
#os.system("logger '"+ msg +"'") # to logs (/var/log/messages)

View File

@ -1,6 +0,0 @@
#!/bin/sh
/usr/bin/reset
set -x
echo '' > ~/index.html # empty scene
set +x
echo "[i] terminal and 3D scene are re-initialized"

View File

@ -2,13 +2,12 @@
source /etc/profile.sh source /etc/profile.sh
javascript=' javascript='
const isoterminal = document.querySelector("[isoterminal]").components.isoterminal.term const isoterminal = document.querySelector("[isoterminal]").components.isoterminal.isoterminal
isoterminal.save() isoterminal.save()
return "[OK] xrsh state saved\n" return "[OK] xrsh state saved\n"
' '
echo "[i] triggering ~/hook.d/save/* scripts" echo "[OK] triggering ~/hook.d/save/* scripts"
hook save hook save
echo "[i] warning: do not resize the browserwindow" echo "[..] please wait.."
echo "[i] please wait.."
js "$javascript" js "$javascript"

View File

@ -1,57 +0,0 @@
#!/bin/js
window.speak = async function(str, opts){
if( !str) return
let defaultOpts
let term = document.querySelector("[isoterminal]").components.isoterminal.term
try{
let buf = await term.worker.read_file("root/.config/webspeech/settings.json")
let jsonstr = new TextDecoder().decode(buf);
defaultOpts = JSON.parse(jsonstr)
}catch(e){
defaultOpts = {
speaksigns:true,
override:true,
speak_rate: 1,
speak_pitch: 0.01,
speak_volume: 1,
speak_voice: -1,
speak_voices: 0
}
}
opts = { ...defaultOpts, ...opts, speak: {} }
if( opts.speaksigns ){
str = str.replace(/\/\//,' ')
.replace(/:/,'')
.replace(/\//,' slash ')
.replace(/\./,' dot ')
.replace(/#/,' hash ')
.replace(/&/,' and ')
.replace(/=/,' is ')
}
if( str == opts.speak.lastStr ) return // no duplicates
opts.speak.lastStr = str
let speech = window.speechSynthesis
let utterance = new SpeechSynthesisUtterance( str )
opts.speak_voices = speech.getVoices().length
if( opts.speak_voice != -1 && opts.speak_voice < opts.speak_voices ){
utterance.voice = speech.getVoices()[ opts.speak_voice ];
}else{
let voices = speech.getVoices()
for(let i = 0; i < voices.length; i++ ){
if( voices[i].lang == navigator.lang ) opts.speak_voice = i;
}
}
utterance.rate = opts.speak_rate
utterance.pitch = opts.speak_pitch
utterance.volume = opts.speak_volume
if( opts.override ) speech.cancel()
speech.speak(utterance)
}
window.speak( args.slice(1).join(' ') )
return ""

View File

@ -1,10 +0,0 @@
#!/bin/sh
test -n "$1" || {
echo "usage: tab <ID>"
echo -e "\ntabs: "
find /tmp/*.dtach | xargs -n1 basename | sed 's/\.dtach//g'
exit 0;
}
# attach to a sessions [or create if it does not exist]
dtach -r ctrl_l -A /tmp/$1.dtach

View File

@ -1,4 +0,0 @@
#!/bin/sh
test -n "$1" || { echo "usage: teleport <http://...foo.glb>"; exit 0; }
echo "" > ~/index.html # empty scene
a-gltf-model $*

View File

@ -1,13 +0,0 @@
#!/bin/js
// this allows opening a file upload popup, to upload to the clipboard.
// because not all input devices (handcontrols) present copy/paste contextmenus
// or file drag/drop functionality
//
const isoterminal = document.querySelector('[isoterminal]')
const upload = isoterminal.dom.querySelector("#pastedrop")
const scene = document.querySelector('a-scene')
// trigger file input
scene.exitVR()
upload.click()
return "[i] files are uploaded in /mnt/clipboard\n"

View File

@ -1,9 +0,0 @@
#!/bin/sh
infinite inotifyd echo /root | awk '
# listen for writes to rootdir and send them to DOM
/^[wne] \/root index\.html/ { system("cat "$2"/"$3" | grep -vE \"^#!\" > /dev/browser/html") }
/^[wne] \/root index\.js/ { system("cat "$2"/"$3" | grep -vE \"^#!\" > /dev/browser/js") }
'

View File

@ -1,17 +0,0 @@
#!/bin/sh
set -e # halt on error
file="$1"
dir="$(basename "$file")"
logger "$0: extracting $file"
mkdir -p "/root/$dir"
cd "/root/$dir"
unzip "$file"
cd "/root/$dir" # trigger auto-env (.env file)
test -f .env && test "$(cat ~/.config/autoenv/package)" = 1 && {
logger "$0: detected $(pwd)/.env [autoenv]"
logger "$0: running $(pwd)/.env"
sh .env
}

View File

@ -1 +0,0 @@
echo "[$(pwd)] 'fusescript' filesystems https://codeberg.org/coderofsalvation/fusescript"

View File

@ -1,71 +0,0 @@
#!/bin/sh
# virtual file interface for THREE
STATE=/run/THREE
LOG=~/.fuse.log
update(){
js '
let fuse_dir = () => '16877 2 0 0 4096 8'
let fuse_file = (size) => `33188 1 0 0 ${size||1} 1`
function traverseScene(object, path = '/', result = '') {
const objectName = object.name? object.name : object.id;
result += `${path}${objectName} ${fuse_dir()}\n`;
result += `${path}${objectName}/position ${fuse_dir()}\n`;
result += `${path}${objectName}/position/x ${fuse_file()}\n`;
result += `${path}${objectName}/position/y ${fuse_file()}\n`;
result += `${path}${objectName}/position/z ${fuse_file()}\n`;
result += `${path}${objectName}/rotation ${fuse_dir()}\n`;
result += `${path}${objectName}/rotation/x ${fuse_file()}\n`;
result += `${path}${objectName}/rotation/y ${fuse_file()}\n`;
result += `${path}${objectName}/rotation/z ${fuse_file()}\n`;
if( object.userData ){
result += `${path}${objectName}/userData 1 1 1 1\n`;
for( let k in object.userData )
result += `${path}${objectName}/userData/${k} 1 1 1 1\n`;
}
object.children.forEach(child => {
result = traverseScene(child, `${path}${objectName}/`, result);
});
return result;
}
return traverseScene( document.querySelector('a-scene').object3D );
' > $STATE
}
readdir(){ # print first column [filename] from header
test -f $STATE || update
awk '/^#\'$1'/ {
gsub("^#'$1'[/]?","",$1); # strip dirname
gsub("\\/.*","",$1); # strip subdirs/files
if( $1 ) print $1
}' $STATE | uniq
}
getattr(){ # print column 2 till 7 from header
awk '$1 == "#'$1'" { print $2" "$3" "$4" "$5" "$6" "$7 }' $STATE
grep -qE '#$1' $0 || return 2 # FUSE expects -NOENT if file does not exist
}
read(){ # print everything (data) after 7th column
awk '$1 == "#'$1'" { $1=$2=$3=$4=$5=$6=$7=""; sub(/^ +/, ""); print $0 }' $0
}
getxattr(){ # print xattr value from commentheader
awk '$1 == "#xattr:'$1'" && $2 == "'$2'" { print $3 }' $STATE
}
setxattr(){ # save xattr value from commentheader
file=$1 ; key=$2 ; shift; shift
sed -i "s/^#xattr:\\$key .*/#xattr:\\$key $*" $STATE || echo "#xattr:$file $key $*" >> $0
}
listxattr(){ # list xattr keys
awk '$1 == "#xattr:'$1'" { printf("%s\0",$2) }' $STATE
}
echo "> $0 $*" >> $LOG
"$@" | tee -a $LOG

View File

@ -1,65 +0,0 @@
#!/bin/js
// Function to handle getattr command
function getattr(path,opts){
let size = 1
if (path === '/' || opts.obj ){
return "16877 2 0 0 4096 8\n"
} else {
return `33188 1 0 0 ${size} 1\n`
}
}
function getPath(str){
const scene = document.querySelector('a-scene').object3D
const path = str.split("/")
const name = path.pop()
const parent = path.pop()
let obj = name == ""
? scene
: scene.getObjectByName( name ) ||
scene.getObjectById( parseInt(name.substr(1)) )
console.dir({parent,name,obj})
return {obj,propname:name}
}
// Main function to handle commands
function main(args) {
console.log( 'fs/THREE '+args.join(' ') )
let children = ''
let props = ['uuid','position','rotation']
switch (args[0]) {
case 'readdir':{
const {obj} = getPath( args[1] )
if( obj && obj.children ){
children = obj.children.map( (n) => n.name || n.id )
.join("\n")
}
return `${children}\n${props.join('\n')}\n`
break;
}
case 'getattr':{
const opts = getPath( args[1] )
return getattr(args[1],{...opts, args});
break;
}
case 'read':{
const {obj,propname} = getPath( args[1] )
return obj[propname];
break;
}
default:
return ''
}
}
// Run the main function
return main(args.slice(1));

View File

@ -1,36 +0,0 @@
#!/bin/sh
LOG=~/.fuse.log
file1="hello world"
echo "$0 $*" >> $LOG
{
case "$1" in
readdir)
echo "file1"
;;
getattr)
# format: mode nlink uid gid size block
case "$2" in
/)
echo "16877 2 0 0 4096 8" && exit 0 # dir (mode 0755)
;;
/file1)
echo "33188 1 0 0 ${#file1} 1" && exit 0 # file (mode 0644, size 6)
;;
esac
exit 1
;;
read)
case "$2" in
/file1)
echo "$file1"
;;
esac
;;
*)
exit 1
;;
esac
} | tee -a $LOG

View File

@ -1,27 +0,0 @@
#!/usr/bin/awk -f
BEGIN {
LOG = ENVIRON["HOME"] "/.fuse.log"
file1 = "hello world"
log_command()
if (ARGC < 2) exit 1
cmd = ARGV[1]; path = (ARGC > 2 ? ARGV[2] : "")
if (cmd == "readdir") print "file1"
else if (cmd == "getattr") print_getattr(path)
else if (cmd == "read" && path == "/file1") print file1
else exit 1
}
function log_command() {
for (i = 0; i < ARGC; i++) printf "%s ", ARGV[i] >> LOG
print "" >> LOG; close(LOG)
}
function print_getattr(p) {
if (p == "/") print "16877 2 0 0 4096 8"
else if (p == "/file1") print "33188 1 0 0 " length(file1) " 1"
else exit 1
}

View File

@ -1,39 +0,0 @@
#!/bin/js
// Set log file to the home directory
const file1 = "hello world";
// Function to handle getattr command
function getattr(path) {
if (path === '/') {
return "16877 2 0 0 4096 8"
} else if (path === '/file1') {
return `33188 1 0 0 ${file1.length} 1`
} else {
return ''
}
}
// Main function to handle commands
function main(args) {
console.log(args.join(' '));
switch (args[0]) {
case 'readdir':
return 'file1'
break;
case 'getattr':
return getattr(args[1]);
break;
case 'read':
if (args[1] === '/file1') {
return file1;
}
break;
default:
return ''
}
}
// Run the main function
return main(args.slice(1));

View File

@ -1,23 +0,0 @@
#!/usr/bin/env lua
LOG_PATH, file1 = os.getenv("HOME") .. "/.fuse.log", "hello world"
local function log_command(args)
io.open(LOG_PATH, "a"):write(table.concat(args, " ") .. "\n"):close()
end
local function getattr(path)
if path == "/" then print("16877 2 0 0 4096 8")
elseif path == "/file1" then print(string.format("33188 1 0 0 %d 1", #file1))
else os.exit(1) end
end
local function main(args)
log_command(args)
if args[1] == "readdir" then print("file1")
elseif args[1] == "getattr" then getattr(args[2])
elseif args[1] == "read" and args[2] == "/file1" then print(file1)
else os.exit(1) end
end
main({...})

View File

@ -1,17 +0,0 @@
#!/usr/bin/env micropython
LOG_PATH = os.path.join(os.getenv("HOME", "/tmp"), ".fuse.log")
file1 = "hello world"
def log(msg): open(LOG_PATH, "a").write(msg + "\n")
def getattr(path): return {"16877 2 0 0 4096 8" if path == "/" else f"33188 1 0 0 {len(file1)} 1"} if path in ["/", "/file1"] else None
def readdir(): print("file1")
def read(path): print(file1) if path == "/file1" else sys.exit(1)
log(" ".join(sys.argv))
if len(sys.argv) < 2: sys.exit(1)
cmd, path = sys.argv[1], sys.argv[2] if len(sys.argv) > 2 else None
if cmd == "readdir": readdir()
elif cmd == "getattr": print(getattr(path)) if getattr(path) else sys.exit(1)
elif cmd == "read": read(path)
else: sys.exit(1)

View File

@ -1 +0,0 @@
/home/leon/.ctags.js

View File

@ -1,2 +0,0 @@
echo "[$(pwd)] polyglot hooks https://xrsh.isvery.ninja/#Unixy%20event%20hooks"

View File

@ -1,13 +0,0 @@
#!/bin/sh
source /etc/profile.sh # expose xrsh cmds like require etc
if [[ "$1" =~ "pos=|t=" ]]; then
# we are dealing with XR or Media Fragments (ignore for now)
echo "[x] detected Media/XR Fragment in URI: $1"
fi
# otherwise execute
echo "" # clear line
$* # simply execute
echo "$*" >> /tmp/frag.log

View File

@ -1 +0,0 @@
../../bin/helloworld.awk

View File

@ -1 +0,0 @@
../../bin/helloworld.js

View File

@ -1 +0,0 @@
../../bin/helloworld.lua

View File

@ -1 +0,0 @@
../../bin/helloworld.py

View File

@ -1,14 +0,0 @@
#!/bin/sh
# usage: hook clipboard foo.mp3 [audio/mpeg]
# this forwards the hook to mimetype or filetype
source /etc/profile.sh
file="$1"
ext="${file##*.}"
mimetype="$2"
if test -n "$mimetype"; then
hook mimetype/"$mimetype" "$file"
else
hook filetype $ext "$file"
fi

View File

@ -1 +0,0 @@
../../../bin/a-text

View File

@ -1,13 +0,0 @@
#!/usr/bin/awk -f
BEGIN{
href=ARGV[1]
if( match(href,/\.glb[#?]?/) ){
print( "<a-entity xrf='" href "'></a-entity>" ) > "/root/index.html"
}else{
system("js 'window.open(\"" href "\")'" )
}
}

View File

@ -1 +0,0 @@
../../filetype/mp3

View File

@ -1,5 +0,0 @@
#!/bin/sh
# usage: import-to-aframe <textfile>
# *FIXME* need consent
cat "$1" >> /root/index.html

View File

@ -1,9 +0,0 @@
#!/bin/sh
source /etc/profile.sh
file="$1"
# naive javascript detector
grep '<a-' "$file" &> /dev/null && {
cat "$file" | grep -vE '(<script|iframe)' &> "$file".aframe
hook mimetype/text/aframe "$file".aframe
}

View File

@ -1,8 +0,0 @@
#!/bin/sh
source /etc/profile.sh
file="$1"
# naive html detector
grep -E '(<\/a>|<\/div>)' "$file" &> /dev/null && {
hook mimetype/text/html "$file"
}

View File

@ -1,8 +0,0 @@
#!/bin/sh
source /etc/profile.sh
file="$1"
# naive javascript detector
grep -E '[a-zA-Z]\(' "$file" &> /dev/null && {
hook mimetype/text/javascript "$file"
}

View File

@ -1,11 +0,0 @@
#!/bin/sh
# this detects when a zip-url is copy/pasted to the clipboard
# and forwards it the zip mimetype hook
test -f /etc/profile.sh && source /etc/profile.sh
file="$1"
grep -E '^http.*\.zip$' "$file" &>/dev/null && {
file="$(cat $file)"
zip="${file/.*\/\//}"
wget "$zip" && hook clipboard $(pwd)/$(basename "$zip") application/zip
}

View File

@ -1,5 +0,0 @@
#!/bin/sh
# warning: to activate below make this file executable at own risk
cat $1 | grep -vE "(<script|<iframe)" >> /root/index.html

View File

@ -1,5 +0,0 @@
#!/bin/sh
# warning: to activate below make this file executable at own risk
js "$(cat $1)"

View File

@ -1 +0,0 @@
../../filetype/txt

View File

@ -1 +0,0 @@
../../filetype/mp4

View File

@ -1,8 +0,0 @@
#!/bin/sh
# intialize global funcs
/root/index.js &> /dev/null
# initialize scene
/root/index.html &> /dev/null

View File

@ -2,12 +2,4 @@
<a-box position="-1 0.5 -3" rotation="0 45 0" color="#4CC3D9"></a-box> <a-box position="-1 0.5 -3" rotation="0 45 0" color="#4CC3D9"></a-box>
<a-sphere position="0 1.25 -5" radius="1.25" color="#EF2D5E"></a-sphere> <a-sphere position="0 1.25 -5" radius="1.25" color="#EF2D5E"></a-sphere>
<a-cylinder position="1 0.75 -3" radius="0.5" height="1.5" color="#FFC65D"></a-cylinder> <a-cylinder position="1 0.75 -3" radius="0.5" height="1.5" color="#FFC65D"></a-cylinder>
<a-plane position="0 0.05 -4" rotation="-90 0 0" width="4" height="4" color="#7BC8A4"></a-plane> <a-plane position="0 0 -4" rotation="-90 0 0" width="4" height="4" color="#7BC8A4"></a-plane>
<!--
<a-box position="0 1.4 -0.5" scale="0.2 0.2 0.2" color="#FF00AA" grabbable></a-box>
-->
<!-- for [lowerlevel] THREE.js code see ~/index.js -->

View File

@ -1,17 +1,2 @@
#!/bin/js #!/bin/js
console.log("/root/index.js: hello world") console.log("/root/index.js: hello world")
function doTHREE(){
const scene = AFRAME.scenes[0].object3D
const object = new THREE.Mesh(
new THREE.BoxGeometry(1, 1, 1),
new THREE.MeshBasicMaterial({ color: 0xff0000 })
);
object.position.set(0.3, 1.4, -0.4)
object.scale.set(0.2,0.2,0.2)
scene.add(object);
}
//doTHREE() // uncomment this to test
// for [higherlevel] AFRAME markup see ~/index.html

View File

@ -1,7 +1,6 @@
XRSH Manual XRSH Manual
=========== ===========
```
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . ____ _____________ ________. ._. ._. . . . . . . . . . . ____ _____________ ________. ._. ._. . . . . . . . .
. . _\ \/ /\______ \/ _____// | \. . . . . . . . . . _\ \/ /\______ \/ _____// | \. . . . . . . .
@ -9,7 +8,7 @@ XRSH Manual
_ _ / \ | | \/ \ Y / _ _ _ _ _ _ _ _ _ / \ | | \/ \ Y / _ _ _ _ _ _ _
. . /___/\ \ |____|_ /_______ /\___|_ /. . . . . . . . . . /___/\ \ |____|_ /_______ /\___|_ /. . . . . . . .
. . . . . .\_/. . . . \/ . . . .\/ . . _ \/ . . . . . . . . . . . . . .\_/. . . . \/ . . . .\/ . . _ \/ . . . . . . . .
================ https://xrsh.isvery.ninja ================ ▬▬▬▬ https://xrsh.isvery.ninja ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Open, local-first, polyglot, unix hackable & selfcontained XR apps. Open, local-first, polyglot, unix hackable & selfcontained XR apps.
Using worlds first WebXR linux distro. Using worlds first WebXR linux distro.
@ -18,7 +17,6 @@ XRSH Manual
all FOSS devs | copy.sh (v86) aframe.io (AFRAME) all FOSS devs | copy.sh (v86) aframe.io (AFRAME)
Leon van Kammen | @lvk@mastodon.online Leon van Kammen | @lvk@mastodon.online
Fabien Benetou | @utopiah@mastodon.pirateparty.be Fabien Benetou | @utopiah@mastodon.pirateparty.be
```
# Getting started # Getting started
@ -51,149 +49,6 @@ Currently the following languages are supported:
* nano (busybox nano) * nano (busybox nano)
* mg (microemacs) * mg (microemacs)
# Multiple terminals [GNU screen]
## From the cmdline
```
xrsh # screen DR # list of detached screen
xrsh # screen r PID # attach detached screen session
xrsh # screen dmS Myses # start a detached screen session
xrsh # screen r MySes #attach screen session with name MySession
```
## Basics
```
ctrl a c -> create new window
ctrl a A -> set window name
ctrl a w -> show all window
ctrl a 1|2|3|… -> switch to window n
ctrl a " -> choose window
ctrl a ctrl a -> switch between window
ctrl a d -> detach window
ctrl a ? -> help
ctrl a [ -> start copy, move cursor to the copy location, press ENTER, select the chars, press ENTER to copy the selected characters to the buffer
ctrl a ] -> paste from buffer
```
## Advanced
```
ctrl a S -> cre­ate split screen
ctrl a TAB -> switch between split screens
ctrl a Q -> Kill all regions but the current one.
ctrl a X -> remove active window from split screen
ctrl a O -> logout active window (disable output)
ctrl a I -> login active window (enable output)
```
# Importing files
Files can be imported (always to /mnt/clipboard) in various ways:
* copy-pasted text (from clipboard via ctrl/cmd+v )
* drag-dropped file ends up in /mnt/clipboard [based on ~/hook.d/mimetype/* things happen or not]
* type 'upload' to trigger a file-upload dialog [ends up in /mnt/clip
XRSH ships with hooks for importing .glb 3D files, text-files & zip-packages, all described below.
# XRSH Packages
A XRSH package is just a zip with an entrypoint, which gets extracted to /root/{zipname} that's it!
It can be loaded in various ways into [your own instance of] https://xrsh.isvery.ninja:
* copy the zip in a filemanager to your clipboard, and paste it into your XRSH-tab
* drag-drop the zip from a filemanager to your XRSH-tab
* download the zip, and type 'upload' in XRSH to import it
The package follows the popular `autoenv`-paradigm (a file called `.env` is automatically executed).
Currently, '.env' links to 'bin/app.sh', but there are also other scriptinglanguages it could link to as well (see bin-folder).
> see example package at https://xrsh.isvery.ninja/package.zip, and an filesystem overlay-zip
> at https://xrsh.isvery.ninja/package.overlayfs.zip
# Autoenv (.env)
When a directory contains an .env-file, it is automatically sourced.
* run echo 0 > ~/.config/autoenv/package to disable auto-execution of zip-packages
* run echo 1 > ~/.config/autoenv/prompt_cd to trigger a confirmation when cd-ing into a directory.
> TIP: check out `~/bin/annotate` to annotate directories using the power of autoenv
# Hooks
Hooks are filebased events.
Why filebased? Well first, because unixy is sexy.
Second: it allows reacting to events in a hackable way via polyglot scripts.
> TLDR: events are automatically triggering scripts found in `/root/hook.d/{eventname}/*`
**OS related hooks**
| hook location | when is this hook called? |
|-------------------------|-------------------------------------------------------|
| hook.d/wakeup/* | restoring xrsh session from cache |
| hook.d/save/* | saving xrsh session to cache |
| hook.d/alert/* | when 'alert'-function is used in shell |
| hook.d/prompt/* | when 'prompt'-function is used in shell |
| hook.d/confirm/* | when 'confirm'-function is used in shell |
**Clipboard related hooks**
| hook.d/clipboard/* | user copy-pastes clipboard or (drops) file into scene |
| hook.d/mimetype/* | clipboard activity (hook.d/clipboard/forwarder) |
| hook.d/filetype/* | clipboard activity (hook.d/clipboard/forwarder) |
**XR related hooks**
| hook location | when is this hook called? |
|-------------------------|-------------------------------------------------------|
| hook.d/exit-vr/* | user exits immersive WebXR [VR] mode |
| hook.d/enter-vr/* | user enters immersive WebXR [VR] mode |
| hook.d/exit-ar/* | user exits immersive WebXR [AR] mode |
| hook.d/enter-ar/* | user enters immersive WebXR [AR] mode |
> How to trigger them?
Well the isoterminal-AFRAME component triggers them automatically for you.
But you can do it manually too:
1. from shellscript: `hook myevent` (will trigger **executable** files in /root/hook.d/myevent)
2. from javascript: `isoterminal.exec("hook myevent")` (idem)
3. via jsh: `jsh alert hello` (will trigger **executable** files in /root/hook.d/alert)
These are various ways to enable hybrid eventing between browser and terminal (languages).
## Wget: downloading remote files
Internetrequests are limited to port 80 and 443 (as they are routed via javascript's fetch()):
```
$ wget xrsh.isvery.ninja # fetches https://xrsh.isvery.ninja (*)
$ wget http://xrsh.isvery.ninja # fetches http://xrsh.isvery.ninja
$ wget https://xrsh.isvery.ninja # does not work (*)
```
> \* = important for selfhosters: the browser cannot switch ports, therefore hostnames are considered HTTPS when the XRSH webapp is
hosted via **valid** HTTPS certificates. Serving the XRSH webapp via http will render https impossible. XRSH.com (the standalone binary) also launches
https://127.0.0.1 (instead of https://localhost) because the latter cripples the network-features.
## webrequests to the filesystem
Javascript webrequests can read from the filesystem:
```
fetch("/mnt/profile.browser")
```
current [security] limitations:
* only /mnt directory is exposed
* file needs to be world-readable (`chmod +r /mnt/<file>`)
# Boot sequence # Boot sequence
The following files are loaded during boot (via `/etc/profile`) The following files are loaded during boot (via `/etc/profile`)
@ -214,15 +69,8 @@ The following files are loaded during boot (via `/etc/profile`)
# Calling terminal from javascript # Calling terminal from javascript
```javascript ```javascript
const term = document.querySelector('[isoterminal]').components.isoterminal.term const term = document.querySelector('[isoterminal]').components.isoterminal.isoterminal
term.exec("ls -la") term.exec("ls -la")
// interact directly with files
await term.worker.create_file("hello.txt", term.convert.toUint8Array("hello") )
await term.worker.update_file("hello.txt", term.convert.toUint8Array("hi") )
await term.worker.append_file("hello.txt", term.convert.toUint8Array("world") )
const buf = await term.worker.read_file("hello.txt")
const str = new TextDecoder().decode(buf);
``` ```
# Calling javascript from terminal # Calling javascript from terminal
@ -234,3 +82,51 @@ Various options:
3. Run `jsh alert hello` in the shell 3. Run `jsh alert hello` in the shell
4. Run `jsh` to start an interactive shell 4. Run `jsh` to start an interactive shell
# Hybrid Terminal/Browser Events
Events are automatically triggering scripts in `/root/hook.d/{eventname}/*`
> They can be triggered by the following ways
1. from shellscript: `hook myevent` (will trigger **executable** files in /root/hook.d/myevent)
2. from javascript: `isoterminal.exec("hook myevent")` (idem)
3. via jsh: `jsh alert hello` (will trigger **executable** files in /root/hook.d/alert)
These are various ways to enable hybrid eventing between browser and terminal (languages).
# Multiple terminals [GNU screen]
## From the cmdline
```
xrsh # screen DR # list of detached screen
xrsh # screen r PID # attach detached screen ses­sion
xrsh # screen dmS Myses # start a detached screen ses­sion
xrsh # screen r MySes #attach screen ses­sion with name MySession
```
## Basics
```
ctrl a c -> create new window
ctrl a A -> set win­dow name
ctrl a w -> show all win­dow
ctrl a 1|2|3|… -> switch to win­dow n
ctrl a " -> choose win­dow
ctrl a ctrl a -> switch between win­dow
ctrl a d -> detach win­dow
ctrl a ? -> help
ctrl a [ -> start copy, move cur­sor to the copy loca­tion, press ENTER, select the chars, press ENTER to copy the selected char­ac­ters to the buffer
ctrl a ] -> paste from buffer
```
## Advanced
```
ctrl a S -> cre­ate split screen
ctrl a TAB -> switch between split screens
ctrl a Q -> Kill all regions but the cur­rent one.
ctrl a X -> remove active win­dow from split screen
ctrl a O -> logout active win­dow (dis­able out­put)
ctrl a I -> login active win­dow (enable output)
```

View File

@ -1,3 +0,0 @@
ln -fs $(pwd)/codemirror ~/bin/codemirror
ln -fs $(pwd)/codemirror ~/bin/cm
echo "enter 'codemirror <file>' to start codemirror"

View File

@ -1,17 +0,0 @@
#!/bin/sh
test -n "$1" || { echo "usage: codemirror <file> <x> <y> <z>"; exit 0; }
me="$(dirname $(readlink -f $0))"
set -e
if [[ "$1" =~ ^http ]]; then
file="$(basename "$1")"
test -f $file && rm $file # *TODO* ask permission
wget "${1/*:\/\/}"
else
file="$(readlink -f "$1")"
fi
$me/codemirror.js "$file" $2 $3 $4
echo "press ctrl-Q to exit editor"

View File

@ -1,240 +0,0 @@
#!/bin/js
if( args[1] == undefined ) return "usage: codemirror <file>"
let keymap = "default" // "vim"
if( AFRAME.components.codemirror ) delete AFRAME.components.codemirror
AFRAME.registerComponent('codemirror', {
schema: {
file: { type:"string"},
term: { type:"selector", default: "[isoterminal]" },
width: { type:"number", default:700},
height: { type:"number", default:500},
keymap: { type:"string", default:"default"}
},
init: function () {
this.el.object3D.visible = false
if( !this.data.term || !this.data.term.components ) throw 'codemirror cannot get isoterminal'
if( this.data.file && this.data.file[0] != '/'){
this.data.file = "root/"+this.data.file
}
this.isoterminal = this.data.term.components.isoterminal.term
//this.el.innerHTML = ` `
this.requireAll()
},
requireAll: async function(){
let s = await AFRAME.utils.require(this.requires)
setTimeout( () => this.el.setAttribute("dom",""), 300 )
},
requires:{
window: "com/window.js"
},
dom: {
scale: 0.5,
events: ['click','keydown'],
html: (me) => `<div class="codemirror">
</div>`,
css: (me) => `.CodeMirror{
width: ${me.com.data.width}px !important;
height: ${me.com.data.height-30}px !important;
}
.cm-s-shadowfox .CodeMirror-cursor {
border-left: 10px solid #a5f !important;
visibility: visible !important;
}
.codemirror *{
font-size: 14px;
font-family: "Cousine",Liberation Mono,DejaVu Sans Mono,Courier New,monospace;
font-weight:500 !important;
letter-spacing: 0 !important;
text-shadow: 0px 0px 10px #F075;
}
.wb-body:has(> .codemirror){
overflow:hidden;
}
.CodeMirror {
margin-top:18px;
}
.cm-s-shadowfox.CodeMirror {
background:transparent !important;
}
`
},
createEditor: function(value){
this.el.setAttribute("window", `title: codemirror; uid: ${this.el.dom.id}; attach: #overlay; dom: #${this.el.dom.id}; width: ${this.data.width}px; height: ${this.data.height}px; class: no-full, no-max, no-resize`)
this.editor = CodeMirror( this.el.dom, {
value,
mode: this.data.file.match(/\.js$/) ? "text/javascript" :
this.data.file.match(/\.css$/) ? "text/css" :
this.data.file.match(/\.html$/) ? "htmlmixed" :
this.data.file.match(/\.md$/) ? "markdown" :
this.data.file.match(/\.py$/) ? "python" :
this.data.file.match(/\.lua$/) ? "lua" :
"text/javascript",
lineNumbers: true,
styleActiveLine: true,
matchBrackets: true,
keyMap: this.data.keymap,
Tab: "indentMore",
defaultTab: function(cm) {
if (cm.somethingSelected()) cm.indentSelection("add");
else cm.replaceSelection(" ", "end");
}
})
this.editor.setOption("theme", "shadowfox")
this.editor.setOption("extraKeys", {
"Ctrl-Q": (cm) => {
this.el.emit('close',true) // window.js will react accordingly
}
})
this.editor.updateFile = (file,str) => {
clearTimeout( this.editor.updateFile.tid)
setTimeout( (file,str) => {
this.updateFile(file,str)
},500, file,str)
}
this.editor.on('change', (instance,changeObj) => {
this.editor.updateFile( this.data.file, instance.getValue() )
})
this.handleFocus()
setTimeout( () => {
this.el.setAttribute("html-as-texture-in-xr", `domid: #${this.el.dom.id}`) // only show aframe-html in xr
},1500)
},
handleFocus: function(){
const focus = (showdom) => (e) => {
if( this.editor ){
this.editor.focus()
}
if( this.el.components.window && this.data.renderer == 'canvas'){
this.el.components.window.show( showdom )
}
}
this.el.addEventListener('obbcollisionstarted', focus(false) )
this.el.sceneEl.addEventListener('enter-vr', focus(false) )
this.el.sceneEl.addEventListener('enter-ar', focus(false) )
this.el.sceneEl.addEventListener('exit-vr', focus(true) )
this.el.sceneEl.addEventListener('exit-ar', focus(true) )
},
updateFile: async function(file,str){
// we don't do via shellcmd: isoterminal.exec(`echo '${str}' > ${file}`,1)
// as it would require all kindof ugly stringescaping
console.log("updating "+file)
await this.isoterminal.worker.update_file(file, this.isoterminal.convert.toUint8Array(str) )
this.isoterminal.exec("touch "+file) // *FIXME* notify filesystem (why does inotifyd need this? v86's 9pfees is cached?)
},
events:{
// component events
DOMready: function(e){
this.isoterminal.worker.read_file(this.data.file)
.then( this.isoterminal.convert.Uint8ArrayToString )
.then( (str) => {
console.log("creating editor: "+this.data.file)
this.createEditor( str )
})
.catch( (e) => {
console.log("error opening "+this.data.file+", creating new one")
this.createEditor("")
})
},
},
manifest: { // HTML5 manifest to identify app to xrsh
"short_name": "Paste",
"name": "Paste",
"icons": [
{
"src": "https://css.gg/clipboard.svg",
"type": "image/svg+xml",
"sizes": "512x512"
}
],
"id": "/?source=pwa",
"start_url": "/?source=pwa",
"background_color": "#3367D6",
"display": "standalone",
"scope": "/",
"theme_color": "#3367D6",
"shortcuts": [
{
"name": "What is the latest news?",
"cli":{
"usage": "helloworld <type> [options]",
"example": "helloworld news",
"args":{
"--latest": {type:"string"}
}
},
"short_name": "Today",
"description": "View weather information for today",
"url": "/today?source=pwa",
"icons": [{ "src": "/images/today.png", "sizes": "192x192" }]
}
],
"description": "Paste the clipboard",
"screenshots": [
{
"src": "/images/screenshot1.png",
"type": "image/png",
"sizes": "540x720",
"form_factor": "narrow"
}
],
"help":`
Helloworld application
This is a help file which describes the application.
It will be rendered thru troika text, and will contain
headers based on non-punctualized lines separated by linebreaks,
in above's case "\nHelloworld application\n" will qualify as header.
`
}
});
AFRAME.utils.require({
codemirrorjs: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.58.1/codemirror.js",
codemirrorcss: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/codemirror.css",
cmtheme: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/theme/shadowfox.css"
})
.then( () => {
let extras = {
cmxml: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/mode/xml/xml.js",
cmjavascript: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/mode/javascript/javascript.js",
cmcss: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/mode/css/css.js",
cmlua: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/mode/lua/lua.js",
cmpython: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/mode/python/python.js",
cmmarkdown: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/mode/markdown/markdown.js",
highlight: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/mode/htmlmixed/htmlmixed.js"
}
if( keymap == "vim" ) extras.cmvim = "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/keymap/vim.js";
return AFRAME.utils.require(extras)
})
.then( () => {
let el = document.createElement("a-entity")
el.setAttribute("codemirror", `file: ${args[1]}`)
if( args.length == 5 ){
el.setAttribute("position",`${args[2]} ${args[3]} ${args[4]}`)
}
document.querySelector("a-scene").appendChild(el)
})
return "" // empty stdout(put)

View File

@ -1,14 +1,14 @@
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Busybox version: 1.36.1 # Busybox version: 1.33.0
# Fri Jan 17 10:52:41 2025 # Tue Sep 17 07:45:01 2024
# #
CONFIG_HAVE_DOT_CONFIG=y CONFIG_HAVE_DOT_CONFIG=y
# #
# Settings # Settings
# #
CONFIG_DESKTOP=y CONFIG_DESKTOP=n
# CONFIG_EXTRA_COMPAT is not set # CONFIG_EXTRA_COMPAT is not set
# CONFIG_FEDORA_COMPAT is not set # CONFIG_FEDORA_COMPAT is not set
CONFIG_INCLUDE_SUSv2=y CONFIG_INCLUDE_SUSv2=y
@ -19,9 +19,9 @@ CONFIG_FEATURE_VERBOSE_USAGE=y
CONFIG_LFS=y CONFIG_LFS=y
# CONFIG_PAM is not set # CONFIG_PAM is not set
CONFIG_FEATURE_DEVPTS=y CONFIG_FEATURE_DEVPTS=y
CONFIG_FEATURE_UTMP=y # CONFIG_FEATURE_UTMP is not set
CONFIG_FEATURE_WTMP=y # CONFIG_FEATURE_WTMP is not set
# CONFIG_FEATURE_PIDFILE is not set CONFIG_FEATURE_PIDFILE=y
CONFIG_PID_FILE_PATH="" CONFIG_PID_FILE_PATH=""
CONFIG_BUSYBOX=y CONFIG_BUSYBOX=y
CONFIG_FEATURE_SHOW_SCRIPT=y CONFIG_FEATURE_SHOW_SCRIPT=y
@ -93,16 +93,10 @@ CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set # CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
CONFIG_PASSWORD_MINLEN=6 CONFIG_PASSWORD_MINLEN=6
CONFIG_MD5_SMALL=1 CONFIG_MD5_SMALL=1
CONFIG_SHA1_SMALL=3
# CONFIG_SHA1_HWACCEL is not set
# CONFIG_SHA256_HWACCEL is not set
CONFIG_SHA3_SMALL=1 CONFIG_SHA3_SMALL=1
CONFIG_FEATURE_NON_POSIX_CP=y # CONFIG_FEATURE_FAST_TOP is not set
# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set # CONFIG_FEATURE_ETC_NETWORKS is not set
CONFIG_FEATURE_USE_SENDFILE=y # CONFIG_FEATURE_ETC_SERVICES is not set
CONFIG_FEATURE_COPYBUF_KB=4
CONFIG_MONOTONIC_SYSCALL=y
CONFIG_IOCTL_HEX2STR_ERROR=y
CONFIG_FEATURE_EDITING=y CONFIG_FEATURE_EDITING=y
CONFIG_FEATURE_EDITING_MAX_LEN=1024 CONFIG_FEATURE_EDITING_MAX_LEN=1024
CONFIG_FEATURE_EDITING_VI=y CONFIG_FEATURE_EDITING_VI=y
@ -126,9 +120,14 @@ CONFIG_LAST_SUPPORTED_WCHAR=0
# CONFIG_UNICODE_BIDI_SUPPORT is not set # CONFIG_UNICODE_BIDI_SUPPORT is not set
# CONFIG_UNICODE_NEUTRAL_TABLE is not set # CONFIG_UNICODE_NEUTRAL_TABLE is not set
# CONFIG_UNICODE_PRESERVE_BROKEN is not set # CONFIG_UNICODE_PRESERVE_BROKEN is not set
# CONFIG_LOOP_CONFIGURE is not set CONFIG_FEATURE_NON_POSIX_CP=y
# CONFIG_NO_LOOP_CONFIGURE is not set # CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set
CONFIG_TRY_LOOP_CONFIGURE=y CONFIG_FEATURE_USE_SENDFILE=y
CONFIG_FEATURE_COPYBUF_KB=4
CONFIG_FEATURE_SKIP_ROOTFS=y
CONFIG_MONOTONIC_SYSCALL=y
CONFIG_IOCTL_HEX2STR_ERROR=y
CONFIG_FEATURE_HWIB=y
# #
# Applets # Applets
@ -147,24 +146,22 @@ CONFIG_AR=y
CONFIG_FEATURE_AR_CREATE=y CONFIG_FEATURE_AR_CREATE=y
# CONFIG_UNCOMPRESS is not set # CONFIG_UNCOMPRESS is not set
CONFIG_GUNZIP=y CONFIG_GUNZIP=y
CONFIG_ZCAT=y CONFIG_ZCAT=n
CONFIG_FEATURE_GUNZIP_LONG_OPTIONS=y CONFIG_FEATURE_GUNZIP_LONG_OPTIONS=y
CONFIG_BUNZIP2=y CONFIG_BUNZIP2=y
CONFIG_BZCAT=y CONFIG_BZCAT=n
CONFIG_UNLZMA=y CONFIG_UNLZMA=n
CONFIG_LZCAT=y CONFIG_LZCAT=n
CONFIG_LZMA=y CONFIG_LZMA=n
CONFIG_UNXZ=y CONFIG_UNXZ=n
CONFIG_XZCAT=y CONFIG_XZCAT=n
CONFIG_XZ=y CONFIG_XZ=n
# CONFIG_BZIP2 is not set # CONFIG_BZIP2 is not set
CONFIG_BZIP2_SMALL=0 CONFIG_BZIP2_SMALL=n
CONFIG_FEATURE_BZIP2_DECOMPRESS=y CONFIG_FEATURE_BZIP2_DECOMPRESS=n
CONFIG_CPIO=y CONFIG_CPIO=y
# CONFIG_FEATURE_CPIO_O is not set # CONFIG_FEATURE_CPIO_O is not set
# CONFIG_FEATURE_CPIO_P is not set # CONFIG_FEATURE_CPIO_P is not set
# CONFIG_FEATURE_CPIO_IGNORE_DEVNO is not set
# CONFIG_FEATURE_CPIO_RENUMBER_INODES is not set
# CONFIG_DPKG is not set # CONFIG_DPKG is not set
# CONFIG_DPKG_DEB is not set # CONFIG_DPKG_DEB is not set
CONFIG_GZIP=y CONFIG_GZIP=y
@ -200,22 +197,6 @@ CONFIG_FEATURE_UNZIP_XZ=y
# #
# Coreutils # Coreutils
# #
CONFIG_FEATURE_VERBOSE=y
#
# Common options for date and touch
#
CONFIG_FEATURE_TIMEZONE=y
#
# Common options for cp and mv
#
CONFIG_FEATURE_PRESERVE_HARDLINKS=y
#
# Common options for df, du, ls
#
CONFIG_FEATURE_HUMAN_READABLE=y
CONFIG_BASENAME=y CONFIG_BASENAME=y
CONFIG_CAT=y CONFIG_CAT=y
CONFIG_FEATURE_CATN=y CONFIG_FEATURE_CATN=y
@ -226,13 +207,11 @@ CONFIG_CHOWN=y
# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set # CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set
CONFIG_CHROOT=y CONFIG_CHROOT=y
CONFIG_CKSUM=y CONFIG_CKSUM=y
CONFIG_CRC32=y
# CONFIG_COMM is not set # CONFIG_COMM is not set
CONFIG_CP=y CONFIG_CP=y
# CONFIG_FEATURE_CP_LONG_OPTIONS is not set # CONFIG_FEATURE_CP_LONG_OPTIONS is not set
# CONFIG_FEATURE_CP_REFLINK is not set # CONFIG_FEATURE_CP_REFLINK is not set
CONFIG_CUT=y CONFIG_CUT=y
CONFIG_FEATURE_CUT_REGEX=y
CONFIG_DATE=y CONFIG_DATE=y
CONFIG_FEATURE_DATE_ISOFMT=y CONFIG_FEATURE_DATE_ISOFMT=y
# CONFIG_FEATURE_DATE_NANO is not set # CONFIG_FEATURE_DATE_NANO is not set
@ -244,7 +223,6 @@ CONFIG_FEATURE_DD_IBS_OBS=y
CONFIG_FEATURE_DD_STATUS=y CONFIG_FEATURE_DD_STATUS=y
CONFIG_DF=y CONFIG_DF=y
# CONFIG_FEATURE_DF_FANCY is not set # CONFIG_FEATURE_DF_FANCY is not set
CONFIG_FEATURE_SKIP_ROOTFS=y
CONFIG_DIRNAME=y CONFIG_DIRNAME=y
CONFIG_DOS2UNIX=y CONFIG_DOS2UNIX=y
CONFIG_UNIX2DOS=y CONFIG_UNIX2DOS=y
@ -338,13 +316,13 @@ CONFIG_TEST2=y
CONFIG_FEATURE_TEST_64=y CONFIG_FEATURE_TEST_64=y
# CONFIG_TIMEOUT is not set # CONFIG_TIMEOUT is not set
CONFIG_TOUCH=y CONFIG_TOUCH=y
# CONFIG_FEATURE_TOUCH_NODEREF is not set
CONFIG_FEATURE_TOUCH_SUSV3=y CONFIG_FEATURE_TOUCH_SUSV3=y
CONFIG_TR=y CONFIG_TR=y
CONFIG_FEATURE_TR_CLASSES=y CONFIG_FEATURE_TR_CLASSES=y
CONFIG_FEATURE_TR_EQUIV=y CONFIG_FEATURE_TR_EQUIV=y
CONFIG_TRUE=y CONFIG_TRUE=y
CONFIG_TRUNCATE=y CONFIG_TRUNCATE=y
CONFIG_TSORT=y
CONFIG_TTY=y CONFIG_TTY=y
CONFIG_UNAME=y CONFIG_UNAME=y
CONFIG_UNAME_OSNAME="GNU/Linux" CONFIG_UNAME_OSNAME="GNU/Linux"
@ -358,12 +336,27 @@ CONFIG_BASE64=y
CONFIG_UUENCODE=y CONFIG_UUENCODE=y
CONFIG_WC=y CONFIG_WC=y
# CONFIG_FEATURE_WC_LARGE is not set # CONFIG_FEATURE_WC_LARGE is not set
CONFIG_WHO=y # CONFIG_WHO is not set
CONFIG_W=y # CONFIG_W is not set
# CONFIG_USERS is not set # CONFIG_USERS is not set
CONFIG_WHOAMI=y CONFIG_WHOAMI=y
CONFIG_YES=y CONFIG_YES=y
#
# Common options
#
CONFIG_FEATURE_VERBOSE=y
#
# Common options for cp and mv
#
CONFIG_FEATURE_PRESERVE_HARDLINKS=y
#
# Common options for df, du, ls
#
CONFIG_FEATURE_HUMAN_READABLE=y
# #
# Console Utilities # Console Utilities
# #
@ -431,7 +424,6 @@ CONFIG_VI=y
CONFIG_FEATURE_VI_MAX_LEN=4096 CONFIG_FEATURE_VI_MAX_LEN=4096
CONFIG_FEATURE_VI_8BIT=y CONFIG_FEATURE_VI_8BIT=y
CONFIG_FEATURE_VI_COLON=y CONFIG_FEATURE_VI_COLON=y
CONFIG_FEATURE_VI_COLON_EXPAND=y
CONFIG_FEATURE_VI_YANKMARK=y CONFIG_FEATURE_VI_YANKMARK=y
CONFIG_FEATURE_VI_SEARCH=y CONFIG_FEATURE_VI_SEARCH=y
# CONFIG_FEATURE_VI_REGEX_SEARCH is not set # CONFIG_FEATURE_VI_REGEX_SEARCH is not set
@ -445,7 +437,6 @@ CONFIG_FEATURE_VI_ASK_TERMINAL=y
CONFIG_FEATURE_VI_UNDO=y CONFIG_FEATURE_VI_UNDO=y
CONFIG_FEATURE_VI_UNDO_QUEUE=y CONFIG_FEATURE_VI_UNDO_QUEUE=y
CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=256 CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=256
CONFIG_FEATURE_VI_VERBOSE_STATUS=y
CONFIG_FEATURE_ALLOW_EXEC=y CONFIG_FEATURE_ALLOW_EXEC=y
# #
@ -454,11 +445,7 @@ CONFIG_FEATURE_ALLOW_EXEC=y
CONFIG_FIND=y CONFIG_FIND=y
CONFIG_FEATURE_FIND_PRINT0=y CONFIG_FEATURE_FIND_PRINT0=y
CONFIG_FEATURE_FIND_MTIME=y CONFIG_FEATURE_FIND_MTIME=y
CONFIG_FEATURE_FIND_ATIME=y
CONFIG_FEATURE_FIND_CTIME=y
CONFIG_FEATURE_FIND_MMIN=y CONFIG_FEATURE_FIND_MMIN=y
CONFIG_FEATURE_FIND_AMIN=y
CONFIG_FEATURE_FIND_CMIN=y
CONFIG_FEATURE_FIND_PERM=y CONFIG_FEATURE_FIND_PERM=y
CONFIG_FEATURE_FIND_TYPE=y CONFIG_FEATURE_FIND_TYPE=y
CONFIG_FEATURE_FIND_EXECUTABLE=y CONFIG_FEATURE_FIND_EXECUTABLE=y
@ -466,7 +453,6 @@ CONFIG_FEATURE_FIND_XDEV=y
CONFIG_FEATURE_FIND_MAXDEPTH=y CONFIG_FEATURE_FIND_MAXDEPTH=y
CONFIG_FEATURE_FIND_NEWER=y CONFIG_FEATURE_FIND_NEWER=y
# CONFIG_FEATURE_FIND_INUM is not set # CONFIG_FEATURE_FIND_INUM is not set
CONFIG_FEATURE_FIND_SAMEFILE=y
CONFIG_FEATURE_FIND_EXEC=y CONFIG_FEATURE_FIND_EXEC=y
CONFIG_FEATURE_FIND_EXEC_PLUS=y CONFIG_FEATURE_FIND_EXEC_PLUS=y
CONFIG_FEATURE_FIND_USER=y CONFIG_FEATURE_FIND_USER=y
@ -619,7 +605,7 @@ CONFIG_FBSET=y
CONFIG_FEATURE_FBSET_FANCY=y CONFIG_FEATURE_FBSET_FANCY=y
CONFIG_FEATURE_FBSET_READMODE=y CONFIG_FEATURE_FBSET_READMODE=y
CONFIG_FDFORMAT=y CONFIG_FDFORMAT=y
CONFIG_FDISK=y CONFIG_FDISK=n
# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set # CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set
CONFIG_FEATURE_FDISK_WRITABLE=y CONFIG_FEATURE_FDISK_WRITABLE=y
# CONFIG_FEATURE_AIX_LABEL is not set # CONFIG_FEATURE_AIX_LABEL is not set
@ -645,7 +631,7 @@ CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y
# CONFIG_IONICE is not set # CONFIG_IONICE is not set
CONFIG_IPCRM=y CONFIG_IPCRM=y
CONFIG_IPCS=y CONFIG_IPCS=y
CONFIG_LAST=y # CONFIG_LAST is not set
# CONFIG_FEATURE_LAST_FANCY is not set # CONFIG_FEATURE_LAST_FANCY is not set
CONFIG_LOSETUP=y CONFIG_LOSETUP=y
CONFIG_LSPCI=y CONFIG_LSPCI=y
@ -659,7 +645,7 @@ CONFIG_FEATURE_MDEV_EXEC=y
CONFIG_FEATURE_MDEV_DAEMON=y CONFIG_FEATURE_MDEV_DAEMON=y
CONFIG_MESG=y CONFIG_MESG=y
CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y
CONFIG_MKE2FS=y CONFIG_MKE2FS=n
# CONFIG_MKFS_EXT2 is not set # CONFIG_MKFS_EXT2 is not set
# CONFIG_MKFS_MINIX is not set # CONFIG_MKFS_MINIX is not set
# CONFIG_FEATURE_MINIX2 is not set # CONFIG_FEATURE_MINIX2 is not set
@ -757,15 +743,14 @@ CONFIG_FEATURE_VOLUMEID_UBIFS=y
# Miscellaneous Utilities # Miscellaneous Utilities
# #
# CONFIG_ADJTIMEX is not set # CONFIG_ADJTIMEX is not set
CONFIG_ASCII=y
# CONFIG_BBCONFIG is not set # CONFIG_BBCONFIG is not set
# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set # CONFIG_FEATURE_COMPRESS_BBCONFIG is not set
CONFIG_BC=y CONFIG_BC=y
# CONFIG_DC is not set CONFIG_DC=y
CONFIG_FEATURE_DC_BIG=y CONFIG_FEATURE_DC_BIG=y
# CONFIG_FEATURE_DC_LIBM is not set # CONFIG_FEATURE_DC_LIBM is not set
# CONFIG_FEATURE_BC_INTERACTIVE is not set CONFIG_FEATURE_BC_INTERACTIVE=y
# CONFIG_FEATURE_BC_LONG_OPTIONS is not set CONFIG_FEATURE_BC_LONG_OPTIONS=y
# CONFIG_BEEP is not set # CONFIG_BEEP is not set
CONFIG_FEATURE_BEEP_FREQ=0 CONFIG_FEATURE_BEEP_FREQ=0
CONFIG_FEATURE_BEEP_LENGTH_MS=0 CONFIG_FEATURE_BEEP_LENGTH_MS=0
@ -778,72 +763,70 @@ CONFIG_FEATURE_BEEP_LENGTH_MS=0
# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set # CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set
# CONFIG_FEATURE_CHAT_CLR_ABORT is not set # CONFIG_FEATURE_CHAT_CLR_ABORT is not set
# CONFIG_CONSPY is not set # CONFIG_CONSPY is not set
# CONFIG_CROND is not set CONFIG_CROND=y
# CONFIG_FEATURE_CROND_D is not set # CONFIG_FEATURE_CROND_D is not set
# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set # CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
# CONFIG_FEATURE_CROND_SPECIAL_TIMES is not set CONFIG_FEATURE_CROND_SPECIAL_TIMES=y
CONFIG_FEATURE_CROND_DIR="" CONFIG_FEATURE_CROND_DIR="/var/spool/cron"
# CONFIG_CRONTAB is not set CONFIG_CRONTAB=y
# CONFIG_DEVFSD is not set # CONFIG_DEVFSD is not set
# CONFIG_DEVFSD_MODLOAD is not set # CONFIG_DEVFSD_MODLOAD is not set
# CONFIG_DEVFSD_FG_NP is not set # CONFIG_DEVFSD_FG_NP is not set
# CONFIG_DEVFSD_VERBOSE is not set # CONFIG_DEVFSD_VERBOSE is not set
# CONFIG_FEATURE_DEVFS is not set # CONFIG_FEATURE_DEVFS is not set
# CONFIG_DEVMEM is not set CONFIG_DEVMEM=y
# CONFIG_FBSPLASH is not set # CONFIG_FBSPLASH is not set
# CONFIG_FLASH_ERASEALL is not set # CONFIG_FLASH_ERASEALL is not set
# CONFIG_FLASH_LOCK is not set # CONFIG_FLASH_LOCK is not set
# CONFIG_FLASH_UNLOCK is not set # CONFIG_FLASH_UNLOCK is not set
# CONFIG_FLASHCP is not set # CONFIG_FLASHCP is not set
# CONFIG_HDPARM is not set CONFIG_HDPARM=y
# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set CONFIG_FEATURE_HDPARM_GET_IDENTITY=y
# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set # CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set # CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set # CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set # CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set # CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
# CONFIG_HEXEDIT is not set CONFIG_HEXEDIT=y
# CONFIG_I2CGET is not set CONFIG_I2CGET=y
# CONFIG_I2CSET is not set CONFIG_I2CSET=y
# CONFIG_I2CDUMP is not set CONFIG_I2CDUMP=y
# CONFIG_I2CDETECT is not set CONFIG_I2CDETECT=y
# CONFIG_I2CTRANSFER is not set CONFIG_I2CTRANSFER=y
CONFIG_INOTIFYD=y CONFIG_INOTIFYD=y
CONFIG_LESS=y CONFIG_LESS=y
CONFIG_FEATURE_LESS_MAXLINES=9999999 CONFIG_FEATURE_LESS_MAXLINES=9999999
CONFIG_FEATURE_LESS_BRACKETS=y CONFIG_FEATURE_LESS_BRACKETS=y
CONFIG_FEATURE_LESS_FLAGS=y CONFIG_FEATURE_LESS_FLAGS=y
CONFIG_FEATURE_LESS_TRUNCATE=y CONFIG_FEATURE_LESS_TRUNCATE=y
CONFIG_FEATURE_LESS_MARKS=y # CONFIG_FEATURE_LESS_MARKS is not set
CONFIG_FEATURE_LESS_REGEXP=y CONFIG_FEATURE_LESS_REGEXP=y
CONFIG_FEATURE_LESS_WINCH=y # CONFIG_FEATURE_LESS_WINCH is not set
CONFIG_FEATURE_LESS_ASK_TERMINAL=y # CONFIG_FEATURE_LESS_ASK_TERMINAL is not set
CONFIG_FEATURE_LESS_DASHCMD=y # CONFIG_FEATURE_LESS_DASHCMD is not set
CONFIG_FEATURE_LESS_LINENUMS=y # CONFIG_FEATURE_LESS_LINENUMS is not set
CONFIG_FEATURE_LESS_RAW=y # CONFIG_FEATURE_LESS_RAW is not set
CONFIG_FEATURE_LESS_ENV=y # CONFIG_FEATURE_LESS_ENV is not set
# CONFIG_LSSCSI is not set CONFIG_LSSCSI=y
CONFIG_MAKEDEVS=y CONFIG_MAKEDEVS=y
# CONFIG_FEATURE_MAKEDEVS_LEAF is not set # CONFIG_FEATURE_MAKEDEVS_LEAF is not set
CONFIG_FEATURE_MAKEDEVS_TABLE=y CONFIG_FEATURE_MAKEDEVS_TABLE=y
# CONFIG_MAN is not set # CONFIG_MAN is not set
# CONFIG_MICROCOM is not set CONFIG_MICROCOM=y
CONFIG_MIM=y CONFIG_MIM=y
CONFIG_MT=y CONFIG_MT=y
# CONFIG_NANDWRITE is not set # CONFIG_NANDWRITE is not set
# CONFIG_NANDDUMP is not set # CONFIG_NANDDUMP is not set
# CONFIG_PARTPROBE is not set CONFIG_PARTPROBE=y
# CONFIG_RAIDAUTORUN is not set # CONFIG_RAIDAUTORUN is not set
# CONFIG_READAHEAD is not set # CONFIG_READAHEAD is not set
# CONFIG_RFKILL is not set # CONFIG_RFKILL is not set
CONFIG_RUNLEVEL=y # CONFIG_RUNLEVEL is not set
# CONFIG_RX is not set # CONFIG_RX is not set
CONFIG_SEEDRNG=y
CONFIG_SETFATTR=y CONFIG_SETFATTR=y
CONFIG_SETSERIAL=y CONFIG_SETSERIAL=y
CONFIG_STRINGS=y CONFIG_STRINGS=y
CONFIG_TIME=y CONFIG_TIME=y
CONFIG_TREE=y
CONFIG_TS=y CONFIG_TS=y
# CONFIG_TTYSIZE is not set # CONFIG_TTYSIZE is not set
# CONFIG_UBIATTACH is not set # CONFIG_UBIATTACH is not set
@ -852,10 +835,9 @@ CONFIG_TS=y
# CONFIG_UBIRMVOL is not set # CONFIG_UBIRMVOL is not set
# CONFIG_UBIRSVOL is not set # CONFIG_UBIRSVOL is not set
# CONFIG_UBIUPDATEVOL is not set # CONFIG_UBIUPDATEVOL is not set
# CONFIG_UBIRENAME is not set CONFIG_UBIRENAME=y
# CONFIG_VOLNAME is not set # CONFIG_VOLNAME is not set
CONFIG_WATCHDOG=y CONFIG_WATCHDOG=y
# CONFIG_FEATURE_WATCHDOG_OPEN_TWICE is not set
# #
# Networking Utilities # Networking Utilities
@ -864,9 +846,6 @@ CONFIG_FEATURE_IPV6=y
# CONFIG_FEATURE_UNIX_LOCAL is not set # CONFIG_FEATURE_UNIX_LOCAL is not set
CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set # CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
# CONFIG_FEATURE_ETC_NETWORKS is not set
# CONFIG_FEATURE_ETC_SERVICES is not set
CONFIG_FEATURE_HWIB=y
# CONFIG_FEATURE_TLS_SHA1 is not set # CONFIG_FEATURE_TLS_SHA1 is not set
CONFIG_ARP=y CONFIG_ARP=y
CONFIG_ARPING=y CONFIG_ARPING=y
@ -885,7 +864,6 @@ CONFIG_ETHER_WAKE=y
CONFIG_HOSTNAME=y CONFIG_HOSTNAME=y
CONFIG_DNSDOMAINNAME=y CONFIG_DNSDOMAINNAME=y
# CONFIG_HTTPD is not set # CONFIG_HTTPD is not set
CONFIG_FEATURE_HTTPD_PORT_DEFAULT=0
# CONFIG_FEATURE_HTTPD_RANGES is not set # CONFIG_FEATURE_HTTPD_RANGES is not set
# CONFIG_FEATURE_HTTPD_SETUID is not set # CONFIG_FEATURE_HTTPD_SETUID is not set
# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set # CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
@ -978,7 +956,6 @@ CONFIG_FEATURE_TELNET_AUTOLOGIN=y
CONFIG_FEATURE_TELNET_WIDTH=y CONFIG_FEATURE_TELNET_WIDTH=y
# CONFIG_TELNETD is not set # CONFIG_TELNETD is not set
# CONFIG_FEATURE_TELNETD_STANDALONE is not set # CONFIG_FEATURE_TELNETD_STANDALONE is not set
CONFIG_FEATURE_TELNETD_PORT_DEFAULT=0
# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set # CONFIG_FEATURE_TELNETD_INETD_WAIT is not set
CONFIG_TFTP=y CONFIG_TFTP=y
# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set # CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set
@ -988,7 +965,7 @@ CONFIG_FEATURE_TFTP_GET=y
CONFIG_FEATURE_TFTP_PUT=y CONFIG_FEATURE_TFTP_PUT=y
CONFIG_FEATURE_TFTP_BLOCKSIZE=y CONFIG_FEATURE_TFTP_BLOCKSIZE=y
# CONFIG_TFTP_DEBUG is not set # CONFIG_TFTP_DEBUG is not set
CONFIG_TLS=y # CONFIG_TLS is not set
CONFIG_TRACEROUTE=y CONFIG_TRACEROUTE=y
# CONFIG_TRACEROUTE6 is not set # CONFIG_TRACEROUTE6 is not set
# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set # CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
@ -999,10 +976,9 @@ CONFIG_VCONFIG=y
CONFIG_WGET=y CONFIG_WGET=y
CONFIG_FEATURE_WGET_LONG_OPTIONS=y CONFIG_FEATURE_WGET_LONG_OPTIONS=y
CONFIG_FEATURE_WGET_STATUSBAR=y CONFIG_FEATURE_WGET_STATUSBAR=y
CONFIG_FEATURE_WGET_FTP=y
CONFIG_FEATURE_WGET_AUTHENTICATION=y CONFIG_FEATURE_WGET_AUTHENTICATION=y
CONFIG_FEATURE_WGET_TIMEOUT=y CONFIG_FEATURE_WGET_TIMEOUT=y
CONFIG_FEATURE_WGET_HTTPS=y # CONFIG_FEATURE_WGET_HTTPS is not set
# CONFIG_FEATURE_WGET_OPENSSL is not set # CONFIG_FEATURE_WGET_OPENSSL is not set
# CONFIG_WHOIS is not set # CONFIG_WHOIS is not set
# CONFIG_ZCIP is not set # CONFIG_ZCIP is not set
@ -1016,7 +992,6 @@ CONFIG_UDHCPC=y
CONFIG_FEATURE_UDHCPC_ARPING=y CONFIG_FEATURE_UDHCPC_ARPING=y
CONFIG_FEATURE_UDHCPC_SANITIZEOPT=y CONFIG_FEATURE_UDHCPC_SANITIZEOPT=y
CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script" CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
CONFIG_UDHCPC6_DEFAULT_SCRIPT=""
# CONFIG_UDHCPC6 is not set # CONFIG_UDHCPC6 is not set
# CONFIG_FEATURE_UDHCPC6_RFC3646 is not set # CONFIG_FEATURE_UDHCPC6_RFC3646 is not set
# CONFIG_FEATURE_UDHCPC6_RFC4704 is not set # CONFIG_FEATURE_UDHCPC6_RFC4704 is not set
@ -1026,7 +1001,6 @@ CONFIG_UDHCPC6_DEFAULT_SCRIPT=""
# #
# Common options for DHCP applets # Common options for DHCP applets
# #
CONFIG_UDHCPC_DEFAULT_INTERFACE="eth0"
# CONFIG_FEATURE_UDHCP_PORT is not set # CONFIG_FEATURE_UDHCP_PORT is not set
CONFIG_UDHCP_DEBUG=0 CONFIG_UDHCP_DEBUG=0
CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80 CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
@ -1044,19 +1018,17 @@ CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -n -O search"
# #
# Mail Utilities # Mail Utilities
# #
CONFIG_FEATURE_MIME_CHARSET=""
# CONFIG_MAKEMIME is not set # CONFIG_MAKEMIME is not set
# CONFIG_POPMAILDIR is not set # CONFIG_POPMAILDIR is not set
# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set # CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set
# CONFIG_REFORMIME is not set # CONFIG_REFORMIME is not set
# CONFIG_FEATURE_REFORMIME_COMPAT is not set # CONFIG_FEATURE_REFORMIME_COMPAT is not set
# CONFIG_SENDMAIL is not set # CONFIG_SENDMAIL is not set
CONFIG_FEATURE_MIME_CHARSET=""
# #
# Process Utilities # Process Utilities
# #
# CONFIG_FEATURE_FAST_TOP is not set
# CONFIG_FEATURE_SHOW_THREADS is not set
CONFIG_FREE=y CONFIG_FREE=y
CONFIG_FUSER=y CONFIG_FUSER=y
# CONFIG_IOSTAT is not set # CONFIG_IOSTAT is not set
@ -1095,6 +1067,7 @@ CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
CONFIG_UPTIME=y CONFIG_UPTIME=y
# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set # CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set
CONFIG_WATCH=y CONFIG_WATCH=y
# CONFIG_FEATURE_SHOW_THREADS is not set
# #
# Runit Utilities # Runit Utilities
@ -1151,7 +1124,6 @@ CONFIG_ASH_IDLE_TIMEOUT=y
CONFIG_ASH_ECHO=y CONFIG_ASH_ECHO=y
CONFIG_ASH_PRINTF=y CONFIG_ASH_PRINTF=y
CONFIG_ASH_TEST=y CONFIG_ASH_TEST=y
CONFIG_ASH_SLEEP=y
CONFIG_ASH_HELP=y CONFIG_ASH_HELP=y
CONFIG_ASH_GETOPTS=y CONFIG_ASH_GETOPTS=y
CONFIG_ASH_CMDCMD=y CONFIG_ASH_CMDCMD=y
@ -1160,8 +1132,8 @@ CONFIG_ASH_CMDCMD=y
# CONFIG_SHELL_HUSH is not set # CONFIG_SHELL_HUSH is not set
# CONFIG_HUSH_BASH_COMPAT is not set # CONFIG_HUSH_BASH_COMPAT is not set
# CONFIG_HUSH_BRACE_EXPANSION is not set # CONFIG_HUSH_BRACE_EXPANSION is not set
# CONFIG_HUSH_BASH_SOURCE_CURDIR is not set
# CONFIG_HUSH_LINENO_VAR is not set # CONFIG_HUSH_LINENO_VAR is not set
# CONFIG_HUSH_BASH_SOURCE_CURDIR is not set
# CONFIG_HUSH_INTERACTIVE is not set # CONFIG_HUSH_INTERACTIVE is not set
# CONFIG_HUSH_SAVEHISTORY is not set # CONFIG_HUSH_SAVEHISTORY is not set
# CONFIG_HUSH_JOB is not set # CONFIG_HUSH_JOB is not set
@ -1210,14 +1182,14 @@ CONFIG_FEATURE_SH_EMBEDDED_SCRIPTS=y
# #
# System Logging Utilities # System Logging Utilities
# #
# CONFIG_KLOGD is not set CONFIG_KLOGD=y
# CONFIG_FEATURE_KLOGD_KLOGCTL is not set CONFIG_FEATURE_KLOGD_KLOGCTL=y
CONFIG_LOGGER=y CONFIG_LOGGER=y
# CONFIG_LOGREAD is not set # CONFIG_LOGREAD is not set
# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set # CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set
CONFIG_SYSLOGD=y CONFIG_SYSLOGD=y
CONFIG_FEATURE_ROTATE_LOGFILE=y CONFIG_FEATURE_ROTATE_LOGFILE=y
# CONFIG_FEATURE_REMOTE_LOG is not set CONFIG_FEATURE_REMOTE_LOG=y
# CONFIG_FEATURE_SYSLOGD_DUP is not set # CONFIG_FEATURE_SYSLOGD_DUP is not set
# CONFIG_FEATURE_SYSLOGD_CFG is not set # CONFIG_FEATURE_SYSLOGD_CFG is not set
# CONFIG_FEATURE_SYSLOGD_PRECISE_TIMESTAMPS is not set # CONFIG_FEATURE_SYSLOGD_PRECISE_TIMESTAMPS is not set

View File

@ -1,10 +1,7 @@
BR2_x86_pentiumpro=y BR2_x86_pentiumpro=y
BR2_TOOLCHAIN_BUILDROOT_MUSL=y
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y
BR2_CCACHE=y BR2_CCACHE=y
BR2_ENABLE_DEBUG=y BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y
BR2_ENABLE_RUNTIME_DEBUG=y BR2_TOOLCHAIN_BUILDROOT_WCHAR=y
BR2_OPTIMIZE_S=y
# BR2_TARGET_GENERIC_GETTY is not set # BR2_TARGET_GENERIC_GETTY is not set
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_v86_PATH)/board/v86/rootfs_overlay/" BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_v86_PATH)/board/v86/rootfs_overlay/"
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_v86_PATH)/board/v86/post-image.sh" BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_v86_PATH)/board/v86/post-image.sh"
@ -13,20 +10,12 @@ BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.172" BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.172"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_v86_PATH)/board/v86/linux.config" BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_v86_PATH)/board/v86/linux.config"
BR2_PACKAGE_BUSYBOX_CONFIG="${BR2_EXTERNAL}/configs/busybox.config"
BR2_PACKAGE_ZIP=y BR2_PACKAGE_ZIP=y
BR2_PACKAGE_LUA=y BR2_PACKAGE_LUA=y
BR2_PACKAGE_MICROPYTHON=y BR2_PACKAGE_MICROPYTHON=y
BR2_PACKAGE_ZLIB=y
BR2_PACKAGE_LIBFUSE3=y
BR2_PACKAGE_GMP=y
BR2_PACKAGE_SCREEN=y BR2_PACKAGE_SCREEN=y
BR2_PACKAGE_ATTR=y
BR2_PACKAGE_MG=y BR2_PACKAGE_MG=y
BR2_TARGET_ROOTFS_EXT2=y BR2_PACKAGE_NANO=y
BR2_TARGET_ROOTFS_EXT2_4=y
BR2_TARGET_ROOTFS_EXT2_SIZE="9M"
BR2_TARGET_ROOTFS_INITRAMFS=y BR2_TARGET_ROOTFS_INITRAMFS=y
BR2_TARGET_ROOTFS_ISO9660=y BR2_TARGET_ROOTFS_ISO9660=y
BR2_TARGET_SYSLINUX=y BR2_TARGET_SYSLINUX=y
BR2_PACKAGE_FUSESCRIPT=y

View File

@ -1,27 +0,0 @@
BR2_x86_pentiumpro=y
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y
BR2_CCACHE=y
# BR2_TARGET_GENERIC_GETTY is not set
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_v86_PATH)/board/v86/rootfs_overlay/"
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_v86_PATH)/board/v86/post-image.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.172"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_v86_PATH)/board/v86/linux.config"
BR2_PACKAGE_ZIP=y
BR2_PACKAGE_LUA=y
BR2_PACKAGE_MICROPYTHON=y
BR2_PACKAGE_SCREEN=y
BR2_PACKAGE_MG=y
BR2_PACKAGE_NANO=y
BR2_TARGET_ROOTFS_INITRAMFS=y
BR2_TARGET_ROOTFS_ISO9660=y
BR2_TARGET_SYSLINUX=y
# enable debugger by uncommenting the packages below
BR2_PACKAGE_HOST_GDB=y
BR2_PACKAGE_GDB=y
BR2_PACKAGE_GDB_SERVER=y
BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY=y

View File

@ -1,6 +0,0 @@
*.o
*_test
execfuse
m
umltest.inner.sh
umltest.status

View File

@ -1,4 +0,0 @@
config BR2_PACKAGE_FUSESCRIPT
bool "fusescript"
help
fusescript allows scriptable fuse filesystems [via awk/shellscript/micropython/lua e.g].

View File

@ -1 +0,0 @@
Something like MIT or 2-clause BSD...

View File

@ -1,10 +0,0 @@
all: fusescript
CFLAGS=-O2
#CFLAGS=-g3 -O0 -Wall
FILES=fusescript.c
fusescript: ${FILES}
${CC} ${LDFLAGS} ${CFLAGS} ${FILES} $(shell pkg-config fuse3 --cflags --libs) -o fusescript

Some files were not shown because too many files have changed in this diff Show More