Compare commits
No commits in common. "main" and "feat/webworker" have entirely different histories.
main
...
feat/webwo
|
@ -1 +0,0 @@
|
||||||
*.swp
|
|
|
@ -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 \
|
||||||
|
|
16
README.md
16
README.md
|
@ -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`
|
|
||||||
|
|
9
build.sh
9
build.sh
|
@ -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
|
@ -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"
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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 \
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
sh
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/awk awk -f
|
#!/usr/bin/env -S awk -f
|
||||||
|
|
||||||
BEGIN {
|
BEGIN {
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,23 @@
|
||||||
Welcome to XRSH
|
|
||||||
|
|
||||||
For an optimal experience, connect a (bluetooth) keyboard.
|
[38;5;93m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
||||||
Use [38;5;129mCtrl+a+0/1/2/3/..[38;5;165m to switch terminals.
|
[38;5;57m . . ____ _____________ ________. ._. ._. . . . . . . . .
|
||||||
Use [38;5;129mCtrl+a+c[38;5;165m to create a new terminal.
|
[38;5;93m . . _\ \/ /\______ \/ _____// | \. . . . . . . .
|
||||||
Type [38;5;129m'save'[38;5;165m to save session (survives tab-close)
|
[38;5;93m . . _ \ / | _/\_____ \/ ~ \ . . . . . . .
|
||||||
Type [38;5;129m'help_tips'[38;5;165m for tips
|
[38;5;129m _ _ / \ | | \/ \ Y / _ _ _ _ _ _ _
|
||||||
Happy hacking! \o/
|
[38;5;165m . . /___/\ \ |____|_ /_______ /\___|_ /. . . . . . . .
|
||||||
|
[38;5;201m . . . . . .\_/. . . . \/ . . . .\/ . . _ \/ . . . . . . . .
|
||||||
|
[38;5;165m ▬▬▬▬ https://xrsh.isvery.ninja ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
|
||||||
|
|
||||||
|
[38;5;165mOpen, 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 [38;5;129mCtrl+a+0/1/2/3/..[38;5;165m to switch terminals.
|
||||||
|
Use [38;5;129mCtrl+a+c[38;5;165m to create a new terminal.
|
||||||
|
Use [38;5;129m'save'[38;5;165m to save session (survives tab-close)
|
||||||
|
Happy hacking! \o/
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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')
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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")[?] [38;5;165m$1 [y/n] $(printf "\033[0m")" y
|
read -p "$(printf "\033[0m")[?] [38;5;165m$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)"
|
||||||
;;
|
;;
|
||||||
|
|
|
@ -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 &
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
{
|
|
||||||
"speak_rate": 0.88,
|
|
||||||
"speak_pitch": 0.01,
|
|
||||||
"speak_volume": 1,
|
|
||||||
"speak_voice": -1,
|
|
||||||
"speak_voices": 0
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
echo "[$(pwd)] the project root-directory"
|
|
|
@ -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
|
|
|
@ -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
|
||||||
|
|
|
@ -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)"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
echo "[$(pwd)] projectspecific cli utilities"
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -1,3 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
# simple directory annotator [via autoenv]
|
|
||||||
echo "echo \"[$(pwd)] $*\"" >> .env
|
|
Binary file not shown.
|
@ -1 +0,0 @@
|
||||||
../opt/codemirror/codemirror
|
|
|
@ -1 +0,0 @@
|
||||||
../opt/codemirror/codemirror
|
|
|
@ -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
|
|
@ -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
|
|
@ -1,2 +0,0 @@
|
||||||
#!/bin/js
|
|
||||||
document.querySelector("a-scene").enterAR()
|
|
|
@ -1,2 +0,0 @@
|
||||||
#!/bin/js
|
|
||||||
document.querySelector("a-scene").enterVR()
|
|
|
@ -1,2 +0,0 @@
|
||||||
#!/bin/js
|
|
||||||
document.querySelector("a-scene").exitAR()
|
|
|
@ -1,2 +0,0 @@
|
||||||
#!/bin/js
|
|
||||||
document.querySelector("a-scene").exitVR()
|
|
|
@ -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'"
|
|
||||||
}
|
|
||||||
|
|
||||||
"$@"
|
|
Binary file not shown.
|
@ -1,2 +1,2 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
echo "$@"
|
echo hook.d/alert/yo: yo $*
|
||||||
|
|
|
@ -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]
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
|
||||||
|
|
|
@ -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)
|
|
||||||
|
|
|
@ -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)
|
|
||||||
|
|
|
@ -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"
|
|
|
@ -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"
|
||||||
|
|
|
@ -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 ""
|
|
|
@ -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
|
|
|
@ -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 $*
|
|
|
@ -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"
|
|
|
@ -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") }
|
|
||||||
|
|
||||||
'
|
|
|
@ -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
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
echo "[$(pwd)] 'fusescript' filesystems https://codeberg.org/coderofsalvation/fusescript"
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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));
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
|
@ -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
|
|
||||||
}
|
|
||||||
|
|
|
@ -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));
|
|
|
@ -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({...})
|
|
|
@ -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)
|
|
|
@ -1 +0,0 @@
|
||||||
/home/leon/.ctags.js
|
|
|
@ -1,2 +0,0 @@
|
||||||
echo "[$(pwd)] polyglot hooks https://xrsh.isvery.ninja/#Unixy%20event%20hooks"
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
../../bin/helloworld.awk
|
|
|
@ -1 +0,0 @@
|
||||||
../../bin/helloworld.js
|
|
|
@ -1 +0,0 @@
|
||||||
../../bin/helloworld.lua
|
|
|
@ -1 +0,0 @@
|
||||||
../../bin/helloworld.py
|
|
|
@ -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
|
|
|
@ -1 +0,0 @@
|
||||||
../../../bin/a-text
|
|
|
@ -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 "\")'" )
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
../../../../bin/ziprun
|
|
|
@ -1 +0,0 @@
|
||||||
../../filetype/mp3
|
|
|
@ -1 +0,0 @@
|
||||||
../../../../bin/a-gltf-model
|
|
|
@ -1,5 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
# usage: import-to-aframe <textfile>
|
|
||||||
|
|
||||||
# *FIXME* need consent
|
|
||||||
cat "$1" >> /root/index.html
|
|
|
@ -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
|
|
||||||
}
|
|
|
@ -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"
|
|
||||||
}
|
|
|
@ -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"
|
|
||||||
}
|
|
|
@ -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
|
|
||||||
}
|
|
|
@ -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
|
|
|
@ -1 +0,0 @@
|
||||||
plain/import-to-aframe
|
|
|
@ -1,5 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# warning: to activate below make this file executable at own risk
|
|
||||||
|
|
||||||
js "$(cat $1)"
|
|
|
@ -1 +0,0 @@
|
||||||
../../filetype/txt
|
|
|
@ -1 +0,0 @@
|
||||||
../../filetype/mp4
|
|
|
@ -1,8 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# intialize global funcs
|
|
||||||
/root/index.js &> /dev/null
|
|
||||||
|
|
||||||
# initialize scene
|
|
||||||
/root/index.html &> /dev/null
|
|
||||||
|
|
|
@ -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 -->
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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 -> create 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 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 -> create 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)
|
||||||
|
```
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
ln -fs $(pwd)/codemirror ~/bin/codemirror
|
|
||||||
ln -fs $(pwd)/codemirror ~/bin/cm
|
|
||||||
echo "enter 'codemirror <file>' to start codemirror"
|
|
|
@ -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"
|
|
||||||
|
|
|
@ -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)
|
|
Binary file not shown.
|
@ -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
|
|
@ -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
|
|
||||||
|
|
|
@ -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
|
|
|
@ -1,6 +0,0 @@
|
||||||
*.o
|
|
||||||
*_test
|
|
||||||
execfuse
|
|
||||||
m
|
|
||||||
umltest.inner.sh
|
|
||||||
umltest.status
|
|
|
@ -1,4 +0,0 @@
|
||||||
config BR2_PACKAGE_FUSESCRIPT
|
|
||||||
bool "fusescript"
|
|
||||||
help
|
|
||||||
fusescript allows scriptable fuse filesystems [via awk/shellscript/micropython/lua e.g].
|
|
|
@ -1 +0,0 @@
|
||||||
Something like MIT or 2-clause BSD...
|
|
|
@ -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
Loading…
Reference in New Issue