├── .common.env ├── .github └── workflows │ ├── build.yml │ └── irc.yml ├── .gitignore ├── .gitmodules ├── LICENSE ├── Makefile ├── README.md ├── Screenshot.png ├── archiso ├── .dockerignore ├── .gitignore ├── Dockerfile ├── archiso-base-mode.patch ├── build.sh ├── liveusb │ ├── airootfs │ │ ├── etc │ │ │ ├── coredump.conf.d │ │ │ │ └── custom.conf │ │ │ ├── default │ │ │ │ └── cpupower │ │ │ ├── fstab │ │ │ ├── hostname │ │ │ ├── hosts │ │ │ ├── locale.conf │ │ │ ├── localtime │ │ │ ├── mkinitcpio.conf │ │ │ ├── mkinitcpio.d │ │ │ │ └── linux.preset │ │ │ ├── modprobe.d │ │ │ │ ├── blacklist_pcspkr.conf │ │ │ │ └── broadcom-wl.conf │ │ │ ├── motd │ │ │ ├── network │ │ │ │ └── interfaces │ │ │ ├── passwd │ │ │ ├── resolv.conf │ │ │ ├── shadow │ │ │ ├── ssh │ │ │ │ └── sshd_config │ │ │ └── systemd │ │ │ │ ├── journald.conf.d │ │ │ │ └── volatile-storage.conf │ │ │ │ ├── logind.conf.d │ │ │ │ ├── do-not-suspend.conf │ │ │ │ └── no-vts.conf │ │ │ │ ├── system-generators │ │ │ │ └── systemd-gpt-auto-generator │ │ │ │ └── system │ │ │ │ ├── dbus-org.freedesktop.thermald.service │ │ │ │ ├── display-manager.service │ │ │ │ ├── livecd-alsa-unmuter.service │ │ │ │ ├── mod-live-audio.service │ │ │ │ ├── mod-live-rwdata.service │ │ │ │ ├── mod-live-welcome.service │ │ │ │ ├── multi-user.target.wants │ │ │ │ ├── cpupower.service │ │ │ │ ├── mod-live-rwdata.service │ │ │ │ ├── mod-live-welcome.service │ │ │ │ ├── qemu-guest-agent.service │ │ │ │ ├── sshd.service │ │ │ │ ├── thermald.service │ │ │ │ └── vboxservice.service │ │ │ │ └── sound.target.wants │ │ │ │ └── livecd-alsa-unmuter.service │ │ ├── root │ │ │ ├── .common.env │ │ │ ├── .config │ │ │ │ ├── katerc │ │ │ │ ├── kdeglobals │ │ │ │ ├── konsolerc │ │ │ │ ├── kwinrc │ │ │ │ └── qt5ct │ │ │ │ │ └── qt5ct.conf │ │ │ └── .local │ │ │ │ └── share │ │ │ │ └── konsole │ │ │ │ └── bash.profile │ │ └── usr │ │ │ ├── lib │ │ │ └── libjack.so.0.1.0 │ │ │ ├── local │ │ │ ├── bin │ │ │ │ ├── livecd-sound │ │ │ │ └── mod-live-rwdata │ │ │ └── share │ │ │ │ └── livecd-sound │ │ │ │ └── asound.conf.in │ │ │ └── share │ │ │ ├── color-schemes │ │ │ └── ZionReversedFixed.colors │ │ │ └── icons │ │ │ └── default │ │ │ └── index.theme │ ├── efiboot │ │ └── loader │ │ │ ├── entries │ │ │ └── archiso-x86_64-linux.conf │ │ │ └── loader.conf │ ├── packages.x86_64 │ ├── pacman.conf │ ├── profiledef.sh │ └── syslinux │ │ ├── splash.png │ │ ├── syslinux-linux.cfg │ │ └── syslinux.cfg ├── output │ ├── .gitignore │ └── .gitkeep └── run_archiso.sh ├── bootstrap ├── .dockerignore ├── .gitignore └── build.sh ├── documentation ├── index.html ├── index_files │ ├── 1000px-AssigmentToMIDIController.png │ ├── 1000px-AssignmentsWindow.png │ ├── 1000px-CVPlugins.png │ ├── 1000px-DUOX_AssignToCV.png │ ├── 1000px-InternalCV.png │ ├── 1000px-NoCV.png │ ├── 1000px-RemovingAssignment.png │ ├── 1200px-SnapshotsMenu.png │ ├── 150px-ManageCVPortsButton.png │ ├── 150px-SnapshotsButton.png │ ├── 1560px-AddingAndConnectingPlugIns.png │ ├── 1600px-AggregatedMIDIPorts.png │ ├── 1600px-DUOX_PedalboardView.png │ ├── 1600px-DUO_PedalboardView.png │ ├── 1600px-SeparatedMIDIPorts.png │ ├── 200px-AdvancedAssignSettings.png │ ├── 225px-ManageCVPortsButton.png │ ├── 225px-SnapshotsButton.png │ ├── 300px-AdvancedAssignSettings.png │ ├── 300px-LabelCV.png │ ├── 300px-ManageCVPortsButton.png │ ├── 450px-LabelCV.png │ ├── 500px-AssigmentToMIDIController.png │ ├── 500px-AssignmentsWindow.png │ ├── 500px-CVPlugins.png │ ├── 500px-DUOX_AssignToCV.png │ ├── 500px-InternalCV.png │ ├── 500px-LoadManageSnapshots.png │ ├── 500px-MIDIPorts.png │ ├── 500px-NoCV.png │ ├── 500px-RemovingAssignment.png │ ├── 50px-PedalboardLibraryIcon.png │ ├── 750px-AssigmentToMIDIController.png │ ├── 750px-AssignmentsWindow.png │ ├── 750px-CVPlugins.png │ ├── 750px-DUOX_AssignToCV.png │ ├── 750px-InternalCV.png │ ├── 750px-LoadManageSnapshots.png │ ├── 750px-MIDIPorts.png │ ├── 750px-NoCV.png │ ├── 750px-RemovingAssignment.png │ ├── 75px-PedalboardLibraryIcon.png │ ├── 780px-AddingAndConnectingPlugIns.png │ ├── 800px-AggregatedMIDIPorts.png │ ├── 800px-DUOX_PedalboardView.png │ ├── 800px-DUO_PedalboardView.png │ ├── 800px-SeparatedMIDIPorts.png │ ├── 800px-SnapshotsMenu.png │ ├── AdvancedAssignSettings.png │ ├── Duo-bypass-plugin.png │ ├── Gui-11.png │ ├── Gui-14.png │ ├── Gui-17.png │ ├── Gui-23.png │ ├── Gui-4.png │ ├── Gui-5.png │ ├── Gui-add-bank.png │ ├── Gui-assign.png │ ├── Gui-banks.png │ ├── Gui-delete.png │ ├── Gui-info-2.png │ ├── Gui-info.png │ ├── Gui-midi-ports.png │ ├── Gui-new-pedalboard.png │ ├── Gui-pedalboards.png │ ├── Gui-settgins.png │ ├── Gui-trash.png │ ├── LabelCV.png │ ├── LoadManageSnapshots.png │ ├── MIDIPorts.png │ ├── PedalboardLibraryIcon.png │ ├── SnapshotsButton.png │ ├── SnapshotsMenu.png │ ├── global-new.css │ ├── gnu-fdl.html │ ├── load.css │ ├── load_002.css │ └── universal.css └── notes.txt ├── live-welcome ├── .kdev_include_paths ├── Makefile ├── mod-live-usb-welcome.local ├── mod-live-usb-welcome.run ├── resources │ └── watermark.png ├── src │ ├── AudioContainerComm.cpp │ ├── AudioContainerComm.hpp │ ├── AudioDiscovery.cpp │ ├── AudioDiscovery.hpp │ ├── KioskAbout.hpp │ ├── KioskForeignWidget.cpp │ ├── KioskForeignWidget.hpp │ ├── KioskSettingsPopup.hpp │ ├── KioskTabs.cpp │ ├── KioskTabs.hpp │ ├── KioskWindow.cpp │ ├── KioskWindow.hpp │ ├── PeakMeterThread.cpp │ ├── PeakMeterThread.hpp │ ├── Utils.cpp │ └── Utils.hpp ├── sys_host │ ├── mod-semaphore.h │ └── sys_host.h ├── welcome.cpp ├── welcome.kdev4 └── widgets │ ├── collapsiblebox.hpp │ └── digitalpeakmeter.hpp ├── mod-os ├── .dockerignore ├── .gitignore ├── Dockerfile ├── build.sh ├── buildroot │ ├── activate-packages.sh │ ├── busybox.config │ ├── jack2-live-usb │ │ └── jack2-live-usb-shm.patch │ ├── mod-os-config.patch │ └── packages │ │ ├── browsepy │ │ ├── 01_skip-unicategories-req.patch │ │ ├── Config.in │ │ └── browsepy.mk │ │ ├── jack-capture │ │ ├── 01_fix-cross-compile.patch │ │ ├── 02_configure-sndfile.patch │ │ ├── Config.in │ │ └── jack-capture.mk │ │ ├── mod-host │ │ ├── 01_fix-libjack-dir.patch │ │ ├── 02_connect-all-networks.patch │ │ ├── Config.in │ │ └── mod-host.mk │ │ ├── mod-midi-merger │ │ ├── Config.in │ │ └── mod-midi-merger.mk │ │ ├── mod-peakmeter │ │ ├── Config.in │ │ └── mod-peakmeter.mk │ │ ├── mod-ui │ │ ├── 02_external-css-and-js.patch │ │ ├── Config.in │ │ └── mod-ui.mk │ │ ├── python-aggdraw │ │ ├── Config.in │ │ └── python-aggdraw.mk │ │ ├── python-scandir │ │ ├── Config.in │ │ ├── python-scandir.hash │ │ └── python-scandir.mk │ │ └── sndfile-tools │ │ ├── 01_jackplay-internal-client.patch │ │ ├── Config.in │ │ └── sndfile-tools.mk ├── config │ ├── environment.sh │ └── jack-internal-session.conf ├── overlay-files │ ├── etc │ │ ├── group │ │ ├── hostname │ │ ├── hosts │ │ ├── mod-hardware-descriptor.json │ │ ├── passwd │ │ └── shadow │ ├── mod-ui.css │ ├── mod-ui.js │ ├── system │ │ ├── browsepy.service │ │ ├── default.target │ │ ├── jack2.service │ │ ├── mod-ui.service │ │ └── multi-user.target.wants │ │ │ ├── browsepy.service │ │ │ ├── jack2.service │ │ │ └── mod-ui.service │ └── tmpfiles.d │ │ ├── legacy.conf │ │ ├── systemd.conf │ │ ├── tmp.conf │ │ └── x11.conf ├── start-dummy.sh └── start.sh ├── offline-render ├── .dockerignore ├── .gitignore ├── Dockerfile ├── README.md ├── build.sh ├── files │ ├── jack-internal-session.conf │ └── run.sh ├── notes.txt └── run.sh ├── pedalboards ├── CV_GEN_Drummachi.pedalboard │ ├── CV_GEN_Drummachi.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── CV_INST_Classic_.pedalboard │ ├── CV_INST_Classic_.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── DRM_Filt_Glitch_.pedalboard │ ├── DRM_Filt_Glitch_.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── DRM_Filter_Delay.pedalboard │ ├── DRM_Filter_Delay.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── FX_MDA_Vocoder.pedalboard │ ├── FX_MDA_Vocoder.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── FX_Muff_Screamer.pedalboard │ ├── FX_Muff_Screamer.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── FX_Paranoia_and_.pedalboard │ ├── FX_Paranoia_and_.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── FX_TubeDriver_an.pedalboard │ ├── FX_TubeDriver_an.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── GTR_Huge_Playabl.pedalboard │ ├── GTR_Huge_Playabl.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── INST_Acid_Synth-26913.pedalboard │ ├── INST_Acid_Synth.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── INST_FM_Synth.pedalboard │ ├── INST_FM_Synth.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── INST_Kalimba_Chr.pedalboard │ ├── INST_Kalimba_Chr.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── INST_Panned_Karp-37095.pedalboard │ ├── INST_Panned_Karp.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── INST_Piano_EPian.pedalboard │ ├── INST_Piano_EPian.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── INST_Voices.pedalboard │ ├── INST_Voices.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── SYN_Bollie_Mverb.pedalboard │ ├── SYN_Bollie_Mverb.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── SYN_Chor_Plate_F.pedalboard │ ├── SYN_Chor_Plate_F.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── SYN_Drone_Your_L.pedalboard │ ├── SYN_Drone_Your_L.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── SYN_Shiro_Delay_-70083.pedalboard │ ├── SYN_Shiro_Delay_.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── VOC_Ethereal_Har.pedalboard │ ├── VOC_Ethereal_Har.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── VOC_Lo_Fi_Shifte.pedalboard │ ├── VOC_Lo_Fi_Shifte.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png ├── VOC_Pristine_Har.pedalboard │ ├── VOC_Pristine_Har.ttl │ ├── addressings.json │ ├── manifest.ttl │ └── thumbnail.png └── default.pedalboard │ ├── manifest.ttl │ ├── screenshot.png │ └── thumbnail.png ├── plugins ├── .dockerignore ├── .gitignore ├── Dockerfile ├── Makefile ├── build.sh ├── docker-run.sh └── scripts │ └── build-and-copy-bundles.sh ├── rwdata ├── root │ ├── .gitignore │ └── .gitkeep └── user-files │ ├── .gitignore │ └── .gitkeep └── toolchain ├── .dockerignore ├── .gitignore ├── Dockerfile └── build.sh /.common.env: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ####################################################################################################################### 4 | # environment variables 5 | 6 | PLAT=${PLAT:=$(uname -m)} 7 | WORKDIR=${WORKDIR:=$(realpath $(pwd)/../toolchain/mod-workdir)} 8 | 9 | # use a similar matching MOD platform 10 | case "${PLAT}" in 11 | aarch64|arm64) PLAT="generic-aarch64";; 12 | x86_64) PLAT="generic-x86_64";; 13 | esac 14 | 15 | ####################################################################################################################### 16 | -------------------------------------------------------------------------------- /.github/workflows/irc.yml: -------------------------------------------------------------------------------- 1 | name: irc 2 | 3 | on: [push] 4 | 5 | jobs: 6 | notification: 7 | runs-on: ubuntu-latest 8 | name: IRC notification 9 | steps: 10 | - name: Format message 11 | id: message 12 | run: | 13 | echo "message=${{ github.actor }} pushed $(echo '${{ github.event.commits[0].message }}' | head -n 1) ${{ github.event.commits[0].url }}" >> $GITHUB_OUTPUT 14 | - name: IRC notification 15 | uses: Gottox/irc-message-action@v2 16 | with: 17 | channel: '#modaudio' 18 | nickname: modaudio-bot 19 | message: ${{ steps.message.outputs.message }} 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /live-welcome/mod-live-usb-welcome 2 | /live-welcome/resources/watermark.txt 3 | 4 | *.kdev4 5 | *.d 6 | !*.d/ 7 | *.o 8 | moc_*.cpp 9 | .stamp_built 10 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "plugins/mod-plugin-builder"] 2 | path = plugins/mod-plugin-builder 3 | url = https://github.com/moddevices/mod-plugin-builder.git 4 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | 2 | # also change in archiso/liveusb/profiledef.sh 3 | VERSION = 9 4 | 5 | all: iso 6 | 7 | # step 1: build toolchain 8 | 9 | toolchain: toolchain/.stamp_built 10 | 11 | toolchain/.stamp_built: toolchain/build.sh toolchain/Dockerfile 12 | ./$< 13 | 14 | # step 2a: build common bootstrap packages 15 | 16 | bootstrap: bootstrap/.stamp_built 17 | 18 | bootstrap/.stamp_built: bootstrap/build.sh toolchain 19 | ./$< 20 | 21 | # step 2b: build plugins bootstrap 22 | 23 | plugins-bootstrap: plugins/.stamp_built 24 | 25 | plugins/.stamp_built: plugins/build.sh plugins/Dockerfile toolchain 26 | ./$< 27 | 28 | # step 3a: build mod-os image 29 | 30 | mod-os: mod-os/.stamp_built 31 | 32 | mod-os/.stamp_built: mod-os/build.sh mod-os/Dockerfile bootstrap 33 | ./$< 34 | 35 | # step 3b: build plugins 36 | 37 | plugins: plugins-bootstrap 38 | $(MAKE) -C plugins 39 | 40 | # .PHONY: plugins 41 | 42 | # step 4: build ISO 43 | 44 | iso: archiso/output/mod-live-usb-v$(VERSION)-x86_64.iso 45 | 46 | archiso/output/%.iso: archiso/build.sh archiso/Dockerfile archiso/liveusb/packages.x86_64 mod-os 47 | ./$< 48 | 49 | run: 50 | ./archiso/run_archiso.sh -i ./archiso/output/mod-live-usb-v$(VERSION)-x86_64.iso 51 | 52 | clean: 53 | make clean -C live-welcome 54 | rm -f toolchain/.stamp_built bootstrap/.stamp_built plugins/.stamp_built mod-os/.stamp_built 55 | rm -rf plugins/.stamps 56 | rm -rf plugins/bundles 57 | rm -rf toolchain/mod-workdir/*/build/*/.stamp_installed 58 | rm -rf toolchain/mod-workdir/*/build/*/.stamp_host_installed 59 | rm -rf toolchain/mod-workdir/*/build/*/.stamp_staging_installed 60 | rm -rf toolchain/mod-workdir/*/build/*/.stamp_target_installed 61 | rm -rf toolchain/mod-workdir/*/build/toolchain-external-undefined 62 | rm -rf toolchain/mod-workdir/*/build/toolchain-virtual 63 | rm -rf toolchain/mod-workdir/*/host 64 | rm -rf toolchain/mod-workdir/*/images 65 | rm -rf toolchain/mod-workdir/*/plugins 66 | rm -rf toolchain/mod-workdir/*/target 67 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # mod-live-usb 2 | 3 | This is a project to create a live-usb ISO for MOD. 4 | It bundles all the MOD stuff in a special container, so their contents match what the regular MOD units have. 5 | [ArchLinux](https://archlinux.org/) with a realtime kernel is used as the base system, 6 | with a custom welcome screen running straight after boot. 7 | 8 | When booted up you will be presented with a list of audio interfaces/devices, just pick one and enjoy! 9 | It will pretty much work like a MOD device, with its plugins and pedalboards, except using your own PC. :) 10 | 11 | ![screenshot](Screenshot.png "Screenshot") 12 | 13 | ## Downloads 14 | 15 | Check the Releases section for downloads, or use the Actions for "nightly" builds. 16 | You can flash the ISO file in the usual way via [Etcher](https://www.balena.io/etcher/) or directly with `dd`. Both methods will work. 17 | 18 | ## Building 19 | 20 | There is a Makefile on the root folder which goes step by step for building mod-os, plugins, the welcome tool and finally the ISO. 21 | You will need docker installed in order to build your own ISO. 22 | 23 | There is no support for custom builds, you are on your own if you want to build it yourself. 24 | Feel free to have a look at the GitHub CI stuff for how the automated build is setup, 25 | though it is mostly just using the Makefile and caching between steps. 26 | 27 | For local development and testing, you can build individual targets, pretty easy with make: 28 | 29 | ```sh 30 | # build mod-os image (through docker and mod-plugin-builder) 31 | # NOTE: takes a very long time! 32 | make mod-os 33 | 34 | # build plugins 35 | # NOTE: takes a very long time! 36 | make plugins 37 | ``` 38 | 39 | ## Local usage 40 | 41 | After `mod-os` and `plugins` targets are built we can start the special container in a similar fashion to the live-usb system. (requires root) 42 | For example starting with USB card: 43 | 44 | ```sh 45 | # start with default args 46 | ./mod-os/start.sh Rubix22 47 | 48 | # can also use extra args for samplerate and buffersize, in that order 49 | ./mod-os/start.sh Rubix22 48000 128 50 | ``` 51 | 52 | Alternatively, use can use the ALSA dummy card. (requires root) 53 | 54 | ```sh 55 | # activate snd-dummy if not done yet 56 | modprobe snd-dummy hrtimer=1 pcm_devs=1 pcm_substreams=1 57 | 58 | # start in dummy mode 59 | ./mod-os/start-dummy.sh 60 | ``` 61 | 62 | Or if you prefer you can use JACK net stuff, connecting with 29000 UDP port 63 | 64 | ```sh 65 | # start jack server using `jackd -d net -p 29000 ...` 66 | ./mod-os/start.sh net 67 | ``` 68 | 69 | ### Stoppping 70 | 71 | These containers are run through `systemd-nspawn`. 72 | You can terminate them by typing `^]` 3 times. 73 | 74 | ### live-welcome 75 | 76 | The next step for local usage is to start the welcome GUI tool. 77 | 78 | If you have not build it yet, do that first: 79 | 80 | ```sh 81 | make -C live-welcome 82 | ``` 83 | 84 | Once built, just start it using the local usage script. 85 | This will connect to the container started on the previous step. 86 | 87 | ```sh 88 | ./live-welcome/mod-live-usb-welcome.local 89 | ``` 90 | -------------------------------------------------------------------------------- /Screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/Screenshot.png -------------------------------------------------------------------------------- /archiso/.dockerignore: -------------------------------------------------------------------------------- 1 | .gitignore 2 | .stamp_built 3 | build.sh 4 | cache 5 | liveusb 6 | output 7 | tmp 8 | workdir 9 | -------------------------------------------------------------------------------- /archiso/.gitignore: -------------------------------------------------------------------------------- 1 | /cache/ 2 | /liveusb/airootfs/mnt/ 3 | /liveusb/airootfs/root/.mod-live 4 | /workdir/ 5 | -------------------------------------------------------------------------------- /archiso/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM archlinux:base 2 | LABEL maintainer="Filipe Coelho " 3 | 4 | # force new keyring, required for installing anything 5 | RUN pacman -Sy --noconfirm archlinux-keyring && \ 6 | pacman -Scc && \ 7 | rm -rf /etc/pacman.d/gnupg && \ 8 | pacman-key --init && \ 9 | pacman-key --populate archlinux 10 | 11 | # update packages 12 | RUN pacman pacman -Syuu --noconfirm && pacman -Scc 13 | 14 | # install packages for archiso and live-welcome 15 | RUN pacman -Syu --noconfirm arch-install-scripts dosfstools e2fsprogs libisoburn mtools squashfs-tools && \ 16 | pacman -Syu --noconfirm gcc git jack2 kparts5 make patch pkg-config qt5-webengine qt5-x11extras && \ 17 | pacman -Scc 18 | 19 | # misc setup 20 | RUN locale-gen en_US.UTF-8 21 | 22 | # archiso settings 23 | ENV ARCHISO_GIT_URL https://gitlab.archlinux.org/archlinux/archiso.git 24 | 25 | # checkout archiso 26 | RUN git clone $ARCHISO_GIT_URL 27 | WORKDIR archiso 28 | RUN git pull && git checkout 0b64536292a5947374fbd2b73b5240082f12d26c 29 | COPY archiso-base-mode.patch . 30 | RUN patch -p1 -i archiso-base-mode.patch 31 | RUN make install PREFIX=/usr 32 | 33 | # CMD 34 | CMD ["bash"] 35 | -------------------------------------------------------------------------------- /archiso/archiso-base-mode.patch: -------------------------------------------------------------------------------- 1 | diff --git a/archiso/mkarchiso b/archiso/mkarchiso 2 | index f6b3395..99fe90e 100644 3 | --- a/archiso/mkarchiso 4 | +++ b/archiso/mkarchiso 5 | @@ -1247,6 +1247,27 @@ _build_iso_base() { 6 | _run_once _prepare_airootfs_image 7 | } 8 | 9 | +# Build the base buildmode 10 | +_build_buildmode_base() { 11 | + _validate_requirements_buildmode_iso 12 | + 13 | + local run_once_mode="${buildmode}" 14 | + local buildmode_packages="${packages}" 15 | + # Set the package list to use 16 | + local buildmode_pkg_list=("${pkg_list[@]}") 17 | + # Set up essential directory paths 18 | + pacstrap_dir="${work_dir}/${arch}/airootfs" 19 | + 20 | + # Create working directory 21 | + [[ -d "${pacstrap_dir}" ]] || install -d -- "${pacstrap_dir}" 22 | + 23 | + [[ "${quiet}" == "y" ]] || _show_config 24 | + _run_once _make_pacman_conf 25 | + _run_once _make_packages 26 | + _run_once _make_pkglist 27 | + _run_once _cleanup_pacstrap_dir 28 | +} 29 | + 30 | # Build the bootstrap buildmode 31 | _build_buildmode_bootstrap() { 32 | local image_name="${iso_name}-bootstrap-${iso_version}-${arch}.tar.gz" 33 | -------------------------------------------------------------------------------- /archiso/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ####################################################################################################################### 4 | # exit if any command fails 5 | 6 | set -e 7 | 8 | cd $(dirname ${0}) 9 | 10 | ####################################################################################################################### 11 | # create docker image 12 | 13 | if [ ! -e workdir/.stamp_built ]; then 14 | sudo rm -rf workdir 15 | mkdir workdir 16 | docker build -t mod-live-usb_iso . 17 | touch workdir/.stamp_built 18 | fi 19 | 20 | ####################################################################################################################### 21 | # setup directories 22 | 23 | CHROOT_DIR=${PWD}/liveusb/airootfs 24 | MOD_LIVE_DIR=${CHROOT_DIR}/root/.mod-live 25 | 26 | mkdir -p cache workdir 27 | mkdir -p ${CHROOT_DIR}/mnt/mod-os 28 | mkdir -p ${CHROOT_DIR}/mnt/pedalboards 29 | mkdir -p ${CHROOT_DIR}/mnt/plugins 30 | mkdir -p ${CHROOT_DIR}/root/rwdata/root 31 | mkdir -p ${CHROOT_DIR}/root/rwdata/user-files 32 | mkdir -p ${MOD_LIVE_DIR} 33 | 34 | ####################################################################################################################### 35 | # mount pedalboards and plugins dir (so we dont have to copy the whole thing) 36 | 37 | if [ ! -e ${CHROOT_DIR}/mnt/pedalboards/INST_FM_Synth.pedalboard ]; then 38 | sudo mount --bind ../pedalboards ${CHROOT_DIR}/mnt/pedalboards 39 | fi 40 | 41 | if [ ! -e ${CHROOT_DIR}/mnt/plugins/abGate.lv2 ]; then 42 | sudo mount --bind ../plugins/bundles ${CHROOT_DIR}/mnt/plugins 43 | fi 44 | 45 | ####################################################################################################################### 46 | # copy files needed for container 47 | 48 | cp -r ../documentation ../mod-os/config ../mod-os/overlay-files ${MOD_LIVE_DIR}/ 49 | cp ../mod-os/start.sh ${MOD_LIVE_DIR}/start.sh 50 | cp ../mod-os/rootfs.ext2 ${MOD_LIVE_DIR}/rootfs.ext2 51 | 52 | ####################################################################################################################### 53 | # delete pre-generated script 54 | 55 | rm -f ${MOD_LIVE_DIR}/config/soundcard.sh 56 | 57 | ####################################################################################################################### 58 | # generate live-welcome binary 59 | 60 | make clean -C ${PWD}/../live-welcome 61 | docker run \ 62 | -v ${PWD}/../live-welcome:/opt/mount/live-welcome \ 63 | --rm mod-live-usb_iso:latest \ 64 | /usr/bin/make -C /opt/mount/live-welcome 65 | cp ${PWD}/../live-welcome/mod-live-usb-welcome ${MOD_LIVE_DIR}/mod-live-usb-welcome 66 | cp ${PWD}/../live-welcome/mod-live-usb-welcome.run ${MOD_LIVE_DIR}/mod-live-usb-welcome.run 67 | 68 | # make sure to regen things 69 | rm -f output/*.iso 70 | # sudo rm -rf workdir 71 | 72 | # bootstrap 73 | rm -f workdir/base._* 74 | docker run --privileged \ 75 | -v ${PWD}/cache:/var/cache/pacman/pkg \ 76 | -v ${PWD}/liveusb:/opt/mount/liveusb \ 77 | -v ${PWD}/output:/opt/mount/output \ 78 | -v ${PWD}/workdir:/opt/mount/workdir \ 79 | --rm mod-live-usb_iso:latest \ 80 | /usr/bin/mkarchiso -v -m base -o /opt/mount/output -w /opt/mount/workdir /opt/mount/liveusb 81 | 82 | # clean unwanted files 83 | sudo rm -f ${PWD}/workdir/x86_64/airootfs/usr/bin/jackd 84 | sudo rm -f ${PWD}/workdir/x86_64/airootfs/usr/bin/qmake 85 | sudo rm -f ${PWD}/workdir/x86_64/airootfs/usr/bin/moc 86 | sudo rm -f ${PWD}/workdir/x86_64/airootfs/usr/bin/rsvg-convert 87 | sudo rm -f ${PWD}/workdir/x86_64/airootfs/usr/bin/*wayland* 88 | sudo rm -f ${PWD}/workdir/x86_64/airootfs/usr/lib/*.a 89 | sudo rm -f ${PWD}/workdir/x86_64/airootfs/usr/lib/libjacknet* 90 | sudo rm -f ${PWD}/workdir/x86_64/airootfs/usr/lib/libjackserver* 91 | sudo rm -rf ${PWD}/workdir/x86_64/airootfs/usr/lib/cmake 92 | sudo rm -rf ${PWD}/workdir/x86_64/airootfs/usr/lib/jack 93 | sudo rm -rf ${PWD}/workdir/x86_64/airootfs/usr/include 94 | sudo rm -rf ${PWD}/workdir/x86_64/airootfs/usr/share/doc 95 | sudo rm -rf ${PWD}/workdir/x86_64/airootfs/usr/share/gtk-doc 96 | sudo rm -rf ${PWD}/workdir/x86_64/airootfs/usr/share/info 97 | sudo rm -rf ${PWD}/workdir/x86_64/airootfs/usr/share/man 98 | sudo rm -rf ${PWD}/workdir/x86_64/airootfs/usr/share/sounds 99 | sudo rm -rf ${PWD}/workdir/x86_64/airootfs/usr/share/wallpapers 100 | 101 | mkdir -p tmp 102 | sudo mv ${PWD}/workdir/x86_64/airootfs/usr/share/locale/en* tmp/ 103 | sudo rm -rf ${PWD}/workdir/x86_64/airootfs/usr/share/locale/* 104 | sudo mv tmp/* ${PWD}/workdir/x86_64/airootfs/usr/share/locale/ 105 | 106 | # generate iso 107 | rm -f workdir/base._* 108 | rm -f workdir/build._* 109 | rm -f workdir/iso._* 110 | docker run --privileged \ 111 | -v ${PWD}/cache:/var/cache/pacman/pkg \ 112 | -v ${PWD}/liveusb:/opt/mount/liveusb \ 113 | -v ${PWD}/output:/opt/mount/output \ 114 | -v ${PWD}/workdir:/opt/mount/workdir \ 115 | --rm mod-live-usb_iso:latest \ 116 | /usr/bin/mkarchiso -v -m iso -o /opt/mount/output -w /opt/mount/workdir /opt/mount/liveusb 117 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/coredump.conf.d/custom.conf: -------------------------------------------------------------------------------- 1 | [Coredump] 2 | Storage=none 3 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/default/cpupower: -------------------------------------------------------------------------------- 1 | governor='performance' 2 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/fstab: -------------------------------------------------------------------------------- 1 | # 2 | /root/.mod-live/rootfs.ext2 /mnt/mod-os ext2 loop,ro 0 0 3 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/hostname: -------------------------------------------------------------------------------- 1 | mod-live-usb 2 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/hosts: -------------------------------------------------------------------------------- 1 | 127.0.0.1 localhost 2 | 127.0.1.1 mod-live-usb 3 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/locale.conf: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | 4 | LANG=en_US.UTF-8 5 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/localtime: -------------------------------------------------------------------------------- 1 | /usr/share/zoneinfo/UTC -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/mkinitcpio.conf: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | 4 | # vim:set ft=sh 5 | # MODULES 6 | # The following modules are loaded before any boot hooks are 7 | # run. Advanced users may wish to specify all system modules 8 | # in this array. For instance: 9 | # MODULES=(piix ide_disk reiserfs) 10 | MODULES=() 11 | 12 | # BINARIES 13 | # This setting includes any additional binaries a given user may 14 | # wish into the CPIO image. This is run last, so it may be used to 15 | # override the actual binaries included by a given hook 16 | # BINARIES are dependency parsed, so you may safely ignore libraries 17 | BINARIES=() 18 | 19 | # FILES 20 | # This setting is similar to BINARIES above, however, files are added 21 | # as-is and are not parsed in any way. This is useful for config files. 22 | FILES=() 23 | 24 | # HOOKS 25 | # This is the most important setting in this file. The HOOKS control the 26 | # modules and scripts added to the image, and what happens at boot time. 27 | # Order is important, and it is recommended that you do not change the 28 | # order in which HOOKS are added. Run 'mkinitcpio -H ' for 29 | # help on a given hook. 30 | # 'base' is _required_ unless you know precisely what you are doing. 31 | # 'udev' is _required_ in order to automatically load modules 32 | # 'filesystems' is _required_ unless you specify your fs modules in MODULES 33 | # Examples: 34 | ## This setup specifies all modules in the MODULES setting above. 35 | ## No raid, lvm2, or encrypted root is needed. 36 | # HOOKS=(base) 37 | # 38 | ## This setup will autodetect all modules for your system and should 39 | ## work as a sane default 40 | # HOOKS=(base udev autodetect block filesystems) 41 | # 42 | ## This setup will generate a 'full' image which supports most systems. 43 | ## No autodetection is done. 44 | # HOOKS=(base udev block filesystems) 45 | # 46 | ## This setup assembles a pata mdadm array with an encrypted root FS. 47 | ## Note: See 'mkinitcpio -H mdadm' for more information on raid devices. 48 | # HOOKS=(base udev block mdadm encrypt filesystems) 49 | # 50 | ## This setup loads an lvm2 volume group on a usb device. 51 | # HOOKS=(base udev block lvm2 filesystems) 52 | # 53 | ## NOTE: If you have /usr on a separate partition, you MUST include the 54 | # usr, fsck and shutdown hooks. 55 | HOOKS=(base udev modconf archiso block filesystems keyboard) 56 | 57 | # COMPRESSION 58 | # Use this to compress the initramfs image. By default, gzip compression 59 | # is used. Use 'cat' to create an uncompressed image. 60 | #COMPRESSION="gzip" 61 | #COMPRESSION="bzip2" 62 | #COMPRESSION="lzma" 63 | #COMPRESSION="xz" 64 | #COMPRESSION="lzop" 65 | #COMPRESSION="lz4" 66 | #COMPRESSION="zstd" 67 | 68 | # COMPRESSION_OPTIONS 69 | # Additional options for the compressor 70 | #COMPRESSION_OPTIONS=() 71 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/mkinitcpio.d/linux.preset: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | 4 | # mkinitcpio preset file for the 'linux' package on archiso 5 | 6 | PRESETS=('archiso') 7 | 8 | ALL_kver='/boot/vmlinuz-linux-rt' 9 | ALL_config='/etc/mkinitcpio.conf' 10 | 11 | archiso_image="/boot/initramfs-linux-rt.img" 12 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/modprobe.d/blacklist_pcspkr.conf: -------------------------------------------------------------------------------- 1 | blacklist pcspkr 2 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/modprobe.d/broadcom-wl.conf: -------------------------------------------------------------------------------- 1 | # The broadcom-wl package requires some modules to be disabled in order to use 2 | # wl. Since the ISO image needs to cover many hardware cases, this file 3 | # overrides the default blacklist in /usr/lib/modprobe.d/ 4 | # 5 | # If you need to use wl, you may need to delete this file, then `rmmod` any 6 | # already-loaded modules that are now blacklisted before proceeding to modprobe 7 | # wl itself. 8 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/motd: -------------------------------------------------------------------------------- 1 | 2 | .o0NWW: cWWWWWWWWN0o. 3 | kMMMMMMc lMMMMMMMMMMMMk Welcome to the MOD Live-USB. 4 | cMMMMMMMc lMMMMMMMMMMMMMc 5 | lMMMMM0;. .;0MMMMMMMMMMMo Brought to you by: 6 | lMMMMM. .MMMMMMMWWMMo __ __ ___ ____ ____ _ 7 | lMMMMM. .MMMMMMX .WMo | \/ |/ _ \| _ \ | _ \ _____ _(_) ___ ___ ___ 8 | lMMMMM. .MMMMMMMMMMMo | |\/| | | | | | | | | | | |/ _ \ \ / / |/ __/ _ \/ __| 9 | cMMMMMK:,,,,:KMMMMMMMMMMMl | | | | |_| | |_| | | |_| | __/\ V /| | (_| __/\__ \ 10 | .XMMMMMMMMMMMMMMMMMMMMMMX. |_| |_|\___/|____/ |____/ \___| \_/ |_|\___\___||___/ 11 | ,lxkOOOOOOOOOOOOOOkxl, 12 | ..,,,,,,,,,,,,,,,,,,,,'. 13 | :OWMMMMMMMMMMMMMMMMMMMMMMMMW0: STEP ONTO THE FUTURE! 14 | dMMMMOl''''''''''''''''''lkMMMMx 15 | WMMM0 .x00x. OMMMW 16 | WMMMO dMMMMd kMMMM 17 | WMMMO dMMMMd kMMMM 18 | WMMMO dMMMMd kMMMM For further information check out: 19 | WMMMO dMMMMd kMMMM - http://moddevices.com/ 20 | WMMMO dMMMMd kMMMM 21 | WMMMO '0KK0' kMMMM 22 | kMMMWo,..................,oWMMMO 23 | oNMMMMMMMMMMMMMMMMMMMMMMMMMMNo 24 | .dKNWWWWWWWWWWWWWWWWWWNKx. 25 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/network/interfaces: -------------------------------------------------------------------------------- 1 | auto lo 2 | iface lo inet loopback 3 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/passwd: -------------------------------------------------------------------------------- 1 | root:x:0:0:root:/root:/usr/bin/bash 2 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/resolv.conf: -------------------------------------------------------------------------------- 1 | /run/systemd/resolve/stub-resolv.conf -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/shadow: -------------------------------------------------------------------------------- 1 | root:$1$cG/p/NG.$rxWJf9Ysi9YnUeElrzgbL.:14871:::::: 2 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/ssh/sshd_config: -------------------------------------------------------------------------------- 1 | # $OpenBSD: sshd_config,v 1.104 2021/07/02 05:11:21 dtucker Exp $ 2 | 3 | # This is the sshd server system-wide configuration file. See 4 | # sshd_config(5) for more information. 5 | 6 | # This sshd was compiled with PATH=/usr/local/sbin:/usr/local/bin:/usr/bin 7 | 8 | # The strategy used for options in the default sshd_config shipped with 9 | # OpenSSH is to specify options with their default value where 10 | # possible, but leave them commented. Uncommented options override the 11 | # default value. 12 | 13 | #Port 22 14 | #AddressFamily any 15 | #ListenAddress 0.0.0.0 16 | #ListenAddress :: 17 | 18 | #HostKey /etc/ssh/ssh_host_rsa_key 19 | #HostKey /etc/ssh/ssh_host_ecdsa_key 20 | #HostKey /etc/ssh/ssh_host_ed25519_key 21 | 22 | # Ciphers and keying 23 | #RekeyLimit default none 24 | 25 | # Logging 26 | #SyslogFacility AUTH 27 | #LogLevel INFO 28 | 29 | # Authentication: 30 | 31 | #LoginGraceTime 2m 32 | PermitRootLogin yes 33 | #StrictModes yes 34 | #MaxAuthTries 6 35 | #MaxSessions 10 36 | 37 | #PubkeyAuthentication yes 38 | 39 | # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 40 | # but this is overridden so installations will only check .ssh/authorized_keys 41 | AuthorizedKeysFile .ssh/authorized_keys 42 | 43 | #AuthorizedPrincipalsFile none 44 | 45 | #AuthorizedKeysCommand none 46 | #AuthorizedKeysCommandUser nobody 47 | 48 | # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts 49 | #HostbasedAuthentication no 50 | # Change to yes if you don't trust ~/.ssh/known_hosts for 51 | # HostbasedAuthentication 52 | #IgnoreUserKnownHosts no 53 | # Don't read the user's ~/.rhosts and ~/.shosts files 54 | #IgnoreRhosts yes 55 | 56 | # To disable tunneled clear text passwords, change to no here! 57 | #PasswordAuthentication yes 58 | #PermitEmptyPasswords no 59 | 60 | # Change to no to disable s/key passwords 61 | #KbdInteractiveAuthentication yes 62 | 63 | # Kerberos options 64 | #KerberosAuthentication no 65 | #KerberosOrLocalPasswd yes 66 | #KerberosTicketCleanup yes 67 | #KerberosGetAFSToken no 68 | 69 | # GSSAPI options 70 | #GSSAPIAuthentication no 71 | #GSSAPICleanupCredentials yes 72 | 73 | # Set this to 'yes' to enable PAM authentication, account processing, 74 | # and session processing. If this is enabled, PAM authentication will 75 | # be allowed through the KbdInteractiveAuthentication and 76 | # PasswordAuthentication. Depending on your PAM configuration, 77 | # PAM authentication via KbdInteractiveAuthentication may bypass 78 | # the setting of "PermitRootLogin without-password". 79 | # If you just want the PAM account and session checks to run without 80 | # PAM authentication, then enable this but set PasswordAuthentication 81 | # and KbdInteractiveAuthentication to 'no'. 82 | UsePAM yes 83 | 84 | #AllowAgentForwarding yes 85 | #AllowTcpForwarding yes 86 | #GatewayPorts no 87 | #X11Forwarding no 88 | #X11DisplayOffset 10 89 | #X11UseLocalhost yes 90 | #PermitTTY yes 91 | PrintMotd no # pam does that 92 | #PrintLastLog yes 93 | #TCPKeepAlive yes 94 | #PermitUserEnvironment no 95 | #Compression delayed 96 | #ClientAliveInterval 0 97 | #ClientAliveCountMax 3 98 | #UseDNS no 99 | #PidFile /run/sshd.pid 100 | #MaxStartups 10:30:100 101 | #PermitTunnel no 102 | #ChrootDirectory none 103 | #VersionAddendum none 104 | 105 | # no default banner path 106 | #Banner none 107 | 108 | # override default of no subsystems 109 | Subsystem sftp /usr/lib/ssh/sftp-server 110 | 111 | # Example of overriding settings on a per-user basis 112 | #Match User anoncvs 113 | # X11Forwarding no 114 | # AllowTcpForwarding no 115 | # PermitTTY no 116 | # ForceCommand cvs server 117 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/systemd/journald.conf.d/volatile-storage.conf: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | 4 | [Journal] 5 | Storage=volatile 6 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/systemd/logind.conf.d/do-not-suspend.conf: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | 4 | [Login] 5 | HandleSuspendKey=ignore 6 | HandleHibernateKey=ignore 7 | HandleLidSwitch=ignore 8 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/systemd/logind.conf.d/no-vts.conf: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | 4 | [Login] 5 | NAutoVTs=0 6 | ReserveVT=0 7 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/systemd/system-generators/systemd-gpt-auto-generator: -------------------------------------------------------------------------------- 1 | /dev/null -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/systemd/system/dbus-org.freedesktop.thermald.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/thermald.service -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/systemd/system/display-manager.service: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | 4 | [Unit] 5 | Description=kwin_x11 6 | After=systemd-user-sessions.service systemd-logind.service 7 | Conflicts=getty@tty2.service 8 | 9 | [Service] 10 | Type=simple 11 | Environment=HOME=/root 12 | Environment=USER=root 13 | Environment=QT_QPA_PLATFORMTHEME=qt5ct 14 | ExecStart=/usr/bin/xinit /usr/bin/kwin_x11 --replace --no-kactivities 15 | Restart=always 16 | RestartSec=1 17 | User=root 18 | Group=root 19 | WorkingDirectory=/root 20 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/systemd/system/livecd-alsa-unmuter.service: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | 4 | [Unit] 5 | Description=Unmute All Sound Card Controls For Use With The Live Arch Environment 6 | # This needs to run after the audio device becomes available. 7 | Wants=systemd-udev-settle.service 8 | After=systemd-udev-settle.service sound.target 9 | 10 | [Service] 11 | Type=oneshot 12 | ExecStart=/usr/local/bin/livecd-sound -u 13 | 14 | [Install] 15 | WantedBy=sound.target 16 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/systemd/system/mod-live-audio.service: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | 4 | [Unit] 5 | Description=MOD Live-USB Audio 6 | 7 | [Service] 8 | Type=notify 9 | Environment=SYSTEMD_SECCOMP=0 10 | Environment=AUDIO_USING_SYSTEMD=1 11 | EnvironmentFile=/root/.mod-live/config/environment.sh 12 | EnvironmentFile=/root/.mod-live/config/soundcard.sh 13 | ExecStart=/root/.mod-live/start.sh 14 | Restart=always 15 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/systemd/system/mod-live-rwdata.service: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | 4 | [Unit] 5 | Description=Enable RW user data 6 | After=local-fs.target 7 | 8 | [Service] 9 | Type=oneshot 10 | ExecStart=/usr/local/bin/mod-live-rwdata 11 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/systemd/system/mod-live-welcome.service: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | 4 | [Unit] 5 | Description=MOD Live-USB Welcome 6 | Requires=display-manager.service mod-live-rwdata.service 7 | After=sound.target display-manager.service mod-live-rwdata.service 8 | 9 | [Service] 10 | Type=simple 11 | Environment=DISPLAY=:0 12 | Environment=HOME=/root 13 | Environment=USER=root 14 | Environment=KMIX_PULSEAUDIO_DISABLE=1 15 | Environment=QT_QPA_PLATFORMTHEME=qt5ct 16 | Environment=USING_SYSTEMD=1 17 | Environment=XDG_RUNTIME_DIR=/run/user/0 18 | ExecStart=/root/.mod-live/mod-live-usb-welcome.run 19 | Restart=always 20 | User=root 21 | Group=root 22 | WorkingDirectory=/root 23 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/systemd/system/multi-user.target.wants/cpupower.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/cpupower.service -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/systemd/system/multi-user.target.wants/mod-live-rwdata.service: -------------------------------------------------------------------------------- 1 | ../mod-live-rwdata.service -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/systemd/system/multi-user.target.wants/mod-live-welcome.service: -------------------------------------------------------------------------------- 1 | ../mod-live-welcome.service -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/systemd/system/multi-user.target.wants/qemu-guest-agent.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/qemu-guest-agent.service -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/systemd/system/multi-user.target.wants/sshd.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/sshd.service -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/systemd/system/multi-user.target.wants/thermald.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/thermald.service -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/systemd/system/multi-user.target.wants/vboxservice.service: -------------------------------------------------------------------------------- 1 | /usr/lib/systemd/system/vboxservice.service -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/etc/systemd/system/sound.target.wants/livecd-alsa-unmuter.service: -------------------------------------------------------------------------------- 1 | ../livecd-alsa-unmuter.service -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/root/.common.env: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ####################################################################################################################### 4 | # environment variables 5 | 6 | PLAT=${PLAT:=$(uname -m)} 7 | 8 | # use a similar matching MOD platform 9 | case "${PLAT}" in 10 | arm) PLAT="modduo-new";; 11 | aarch64|arm64) PLAT="modduox-new";; 12 | esac 13 | 14 | ####################################################################################################################### 15 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/root/.config/katerc: -------------------------------------------------------------------------------- 1 | [UiSettings] 2 | ColorScheme=Zion (Reversed) Fixed 3 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/root/.config/kdeglobals: -------------------------------------------------------------------------------- 1 | [General] 2 | ColorScheme=ZionReversedFixed 3 | Name=Breeze Dark 4 | widgetStyle=Breeze 5 | 6 | [KDE] 7 | ColorScheme=Zion (Reversed) Fixed 8 | LookAndFeelPackage=org.kde.breezedark.desktop 9 | 10 | [WM] 11 | activeBackground=16,16,16 12 | activeBlend=16,16,16 13 | activeForeground=255,255,255 14 | inactiveBackground=16,16,16 15 | inactiveBlend=16,16,16 16 | inactiveForeground=128,128,128 17 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/root/.config/konsolerc: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | DefaultProfile=bash.profile 3 | 4 | [UiSettings] 5 | ColorScheme=Zion (Reversed) Fixed 6 | WindowColorScheme=Zion (Reversed) Fixed 7 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/root/.config/kwinrc: -------------------------------------------------------------------------------- 1 | [Desktops] 2 | Id_1=ca78aa2f-085b-457b-8f66-941a1e8bd006 3 | Number=1 4 | Rows=1 5 | 6 | [TabBox] 7 | DesktopLayout=org.kde.breeze.desktop 8 | DesktopListLayout=org.kde.breeze.desktop 9 | LayoutName=org.kde.breeze.desktop 10 | 11 | [Windows] 12 | Placement=Centered 13 | 14 | [org.kde.kdecoration2] 15 | ButtonsOnLeft=M 16 | ButtonsOnRight=X 17 | library=org.kde.breeze 18 | theme=Breeze 19 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/root/.config/qt5ct/qt5ct.conf: -------------------------------------------------------------------------------- 1 | [Appearance] 2 | color_scheme_path=/usr/share/qt5ct/colors/darker.conf 3 | custom_palette=true 4 | icon_theme=breeze-dark 5 | standard_dialogs=kde 6 | style=Breeze 7 | 8 | [Interface] 9 | activate_item_on_single_click=1 10 | buttonbox_layout=2 11 | cursor_flash_time=1200 12 | dialog_buttons_have_icons=1 13 | double_click_interval=400 14 | gui_effects=@Invalid() 15 | keyboard_scheme=2 16 | menus_have_icons=true 17 | show_shortcuts_in_context_menus=true 18 | stylesheets=@Invalid() 19 | toolbutton_style=2 20 | underline_shortcut=1 21 | wheel_scroll_lines=3 22 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/root/.local/share/konsole/bash.profile: -------------------------------------------------------------------------------- 1 | [General] 2 | Command=/bin/bash 3 | Name=bash 4 | Parent=FALLBACK/ 5 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/usr/lib/libjack.so.0.1.0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/archiso/liveusb/airootfs/usr/lib/libjack.so.0.1.0 -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/usr/local/bin/mod-live-rwdata: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # SPDX-License-Identifier: GPL-3.0-or-later 4 | 5 | RWDATA_DEV=$(mount | grep iso9660 | cut -d ' ' -f 1 | cut -c 1-8) 6 | RWDATA_MNT=/root/rwdata 7 | LOOP_DEV=/dev/loop3 8 | 9 | if [[ "${RWDATA_DEV}" == "/dev/sd"* ]]; then 10 | if [ ! -e ${LOOP_DEV} ]; then 11 | losetup -o 2G ${LOOP_DEV} ${RWDATA_DEV} 12 | fi 13 | if [ ! -e ${RWDATA_MNT}/lost+found ]; then 14 | # try to mount rwdata 15 | if ! mount ${LOOP_DEV} ${RWDATA_MNT}; then 16 | # if mounting fails, do a system check in case of minor corruption 17 | fsck.ext4 -y ${LOOP_DEV} 18 | # then try to mount again 19 | if ! mount ${LOOP_DEV} ${RWDATA_MNT}; then 20 | # if all fails, assume brand new rwdata, create it now 21 | mkfs.ext4 ${LOOP_DEV} 22 | # and mount it, of course 23 | mount ${LOOP_DEV} ${RWDATA_MNT} 24 | fi 25 | fi 26 | chmod 777 ${RWDATA_MNT} 27 | mkdir -p ${RWDATA_MNT}/lost+found 28 | fi 29 | fi 30 | 31 | exit 0 32 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/usr/local/share/livecd-sound/asound.conf.in: -------------------------------------------------------------------------------- 1 | Defaults node 2 | defaults.ctl.card %card%; 3 | defaults.pcm.card %card%; 4 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/usr/share/color-schemes/ZionReversedFixed.colors: -------------------------------------------------------------------------------- 1 | [ColorEffects:Disabled] 2 | Color=56,56,56 3 | ColorAmount=0.5 4 | ColorEffect=2 5 | ContrastAmount=0.5 6 | ContrastEffect=1 7 | IntensityAmount=0.05 8 | IntensityEffect=0 9 | 10 | [ColorEffects:Inactive] 11 | ChangeSelectionColor=true 12 | Color=0,0,0 13 | ColorAmount=0.5 14 | ColorEffect=1 15 | ContrastAmount=0.25 16 | ContrastEffect=2 17 | Enable=true 18 | IntensityAmount=0 19 | IntensityEffect=0 20 | 21 | [Colors:Button] 22 | BackgroundAlternate=12,12,12 23 | BackgroundNormal=0,0,0 24 | DecorationFocus=192,192,192 25 | DecorationHover=255,255,255 26 | ForegroundActive=192,255,255 27 | ForegroundInactive=160,160,160 28 | ForegroundLink=128,181,255 29 | ForegroundNegative=255,128,172 30 | ForegroundNeutral=255,212,128 31 | ForegroundNormal=255,255,255 32 | ForegroundPositive=128,255,128 33 | ForegroundVisited=192,128,255 34 | 35 | [Colors:Selection] 36 | BackgroundAlternate=0,52,116 37 | BackgroundNormal=0,49,110 38 | DecorationFocus=192,192,192 39 | DecorationHover=255,255,255 40 | ForegroundActive=192,255,255 41 | ForegroundInactive=96,148,207 42 | ForegroundLink=128,181,255 43 | ForegroundNegative=255,128,172 44 | ForegroundNeutral=255,212,128 45 | ForegroundNormal=255,255,255 46 | ForegroundPositive=128,255,128 47 | ForegroundVisited=192,128,255 48 | 49 | [Colors:Tooltip] 50 | BackgroundAlternate=12,12,12 51 | BackgroundNormal=0,0,0 52 | DecorationFocus=192,192,192 53 | DecorationHover=255,255,255 54 | ForegroundActive=192,255,255 55 | ForegroundInactive=160,160,160 56 | ForegroundLink=128,181,255 57 | ForegroundNegative=255,128,172 58 | ForegroundNeutral=255,212,128 59 | ForegroundNormal=255,255,255 60 | ForegroundPositive=128,255,128 61 | ForegroundVisited=192,128,255 62 | 63 | [Colors:View] 64 | BackgroundAlternate=12,12,12 65 | BackgroundNormal=0,0,0 66 | DecorationFocus=192,192,192 67 | DecorationHover=255,255,255 68 | ForegroundActive=192,255,255 69 | ForegroundInactive=160,160,160 70 | ForegroundLink=128,181,255 71 | ForegroundNegative=255,128,172 72 | ForegroundNeutral=255,212,128 73 | ForegroundNormal=255,255,255 74 | ForegroundPositive=128,255,128 75 | ForegroundVisited=192,128,255 76 | 77 | [Colors:Window] 78 | BackgroundAlternate=20,20,20 79 | BackgroundNormal=16,16,16 80 | DecorationFocus=192,192,192 81 | DecorationHover=255,255,255 82 | ForegroundActive=192,255,255 83 | ForegroundInactive=160,160,160 84 | ForegroundLink=128,181,255 85 | ForegroundNegative=255,128,172 86 | ForegroundNeutral=255,212,128 87 | ForegroundNormal=255,255,255 88 | ForegroundPositive=128,255,128 89 | ForegroundVisited=192,128,255 90 | 91 | [General] 92 | Name=Zion (Reversed) Fixed 93 | shadeSortColumn=true 94 | 95 | [KDE] 96 | contrast=4 97 | 98 | [WM] 99 | activeBackground=16,16,16 100 | activeForeground=255,255,255 101 | inactiveBackground=16,16,16 102 | inactiveForeground=128,128,128 103 | -------------------------------------------------------------------------------- /archiso/liveusb/airootfs/usr/share/icons/default/index.theme: -------------------------------------------------------------------------------- 1 | [Icon Theme] 2 | Inherits=breeze_cursors 3 | -------------------------------------------------------------------------------- /archiso/liveusb/efiboot/loader/entries/archiso-x86_64-linux.conf: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | 4 | title MOD Live-USB (x86_64, UEFI) 5 | linux /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux-rt 6 | initrd /%INSTALL_DIR%/boot/intel-ucode.img 7 | initrd /%INSTALL_DIR%/boot/amd-ucode.img 8 | initrd /%INSTALL_DIR%/boot/x86_64/initramfs-linux-rt.img 9 | options archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% consoleblank=0 loglevel=0 mitigations=off quiet nohibernate 10 | -------------------------------------------------------------------------------- /archiso/liveusb/efiboot/loader/loader.conf: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | 4 | timeout 3 5 | default archiso-x86_64-linux.conf 6 | -------------------------------------------------------------------------------- /archiso/liveusb/packages.x86_64: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | alsa-utils 4 | amd-ucode 5 | base 6 | bash 7 | breeze 8 | cardinal-standalone 9 | cloud-init 10 | cpupower 11 | edk2-shell 12 | efibootmgr 13 | intel-ucode 14 | jack-example-tools 15 | jack_capture 16 | kate 17 | kmix 18 | konsole 19 | kwin 20 | linux-firmware 21 | linux-rt 22 | memtest86+ 23 | mkinitcpio 24 | mkinitcpio-archiso 25 | nano 26 | openssh 27 | qt5ct 28 | qt5-webengine 29 | qemu-guest-agent 30 | rtirq 31 | syslinux 32 | thermald 33 | virtualbox-guest-utils-nox 34 | xdg-desktop-portal 35 | xdg-desktop-portal-kde 36 | xorg-drivers 37 | xorg-server 38 | xorg-xinit 39 | -------------------------------------------------------------------------------- /archiso/liveusb/pacman.conf: -------------------------------------------------------------------------------- 1 | # 2 | # /etc/pacman.conf 3 | # 4 | # See the pacman.conf(5) manpage for option and repository directives 5 | # 6 | # SPDX-License-Identifier: GPL-3.0-or-later 7 | 8 | # 9 | # GENERAL OPTIONS 10 | # 11 | [options] 12 | # The following paths are commented out with their default values listed. 13 | # If you wish to use different paths, uncomment and update the paths. 14 | #RootDir = / 15 | #DBPath = /var/lib/pacman/ 16 | #CacheDir = /var/cache/pacman/pkg/ 17 | #LogFile = /var/log/pacman.log 18 | #GPGDir = /etc/pacman.d/gnupg/ 19 | #HookDir = /etc/pacman.d/hooks/ 20 | HoldPkg = pacman glibc 21 | #XferCommand = /usr/bin/curl -L -C - -f -o %o %u 22 | #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u 23 | #CleanMethod = KeepInstalled 24 | Architecture = auto 25 | 26 | # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup 27 | #IgnorePkg = 28 | #IgnoreGroup = 29 | 30 | #NoUpgrade = 31 | #NoExtract = 32 | 33 | # Misc options 34 | #UseSyslog 35 | #Color 36 | #TotalDownload 37 | # We cannot check disk space from within a chroot environment 38 | #CheckSpace 39 | #VerbosePkgLists 40 | 41 | # By default, pacman accepts packages signed by keys that its local keyring 42 | # trusts (see pacman-key and its man page), as well as unsigned packages. 43 | SigLevel = Required DatabaseOptional 44 | LocalFileSigLevel = Optional 45 | #RemoteFileSigLevel = Required 46 | 47 | # NOTE: You must run `pacman-key --init` before first using pacman; the local 48 | # keyring can then be populated with the keys of all official Arch Linux 49 | # packagers with `pacman-key --populate archlinux`. 50 | 51 | # 52 | # REPOSITORIES 53 | # - can be defined here or included from another file 54 | # - pacman will search repositories in the order defined here 55 | # - local/custom mirrors can be added here or in separate files 56 | # - repositories listed first will take precedence when packages 57 | # have identical names, regardless of version number 58 | # - URLs will have $repo replaced by the name of the current repo 59 | # - URLs will have $arch replaced by the name of the architecture 60 | # 61 | # Repository entries are of the format: 62 | # [repo-name] 63 | # Server = ServerName 64 | # Include = IncludePath 65 | # 66 | # The header [repo-name] is crucial - it must be present and 67 | # uncommented to enable the repo. 68 | # 69 | 70 | # The testing repositories are disabled by default. To enable, uncomment the 71 | # repo name header and Include lines. You can add preferred servers immediately 72 | # after the header, and they will be used before the default mirrors. 73 | 74 | #[testing] 75 | #Include = /etc/pacman.d/mirrorlist 76 | 77 | [core] 78 | Include = /etc/pacman.d/mirrorlist 79 | 80 | [extra] 81 | Include = /etc/pacman.d/mirrorlist 82 | 83 | #[community-testing] 84 | #Include = /etc/pacman.d/mirrorlist 85 | 86 | [community] 87 | Include = /etc/pacman.d/mirrorlist 88 | 89 | [realtime] 90 | Server = https://pkgbuild.com/~dvzrv/repos/realtime/$arch 91 | 92 | # If you want to run 32 bit applications on your x86_64 system, 93 | # enable the multilib repositories as required here. 94 | 95 | #[multilib-testing] 96 | #Include = /etc/pacman.d/mirrorlist 97 | 98 | #[multilib] 99 | #Include = /etc/pacman.d/mirrorlist 100 | 101 | # An example of a custom package repository. See the pacman manpage for 102 | # tips on creating your own repositories. 103 | #[custom] 104 | #SigLevel = Optional TrustAll 105 | #Server = file:///home/custompkgs 106 | -------------------------------------------------------------------------------- /archiso/liveusb/profiledef.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # shellcheck disable=SC2034 3 | 4 | iso_name="mod-live-usb" 5 | iso_label="Live-USB" 6 | iso_publisher="MOD Devices " 7 | iso_application="MOD Live USB" 8 | iso_version="v9" 9 | install_dir="arch" 10 | bootmodes=('bios.syslinux.mbr' 'bios.syslinux.eltorito' 'uefi-x64.systemd-boot.esp' 'uefi-x64.systemd-boot.eltorito') 11 | arch="x86_64" 12 | pacman_conf="pacman.conf" 13 | airootfs_image_type="squashfs" 14 | airootfs_image_tool_options=('-comp' 'xz' '-Xbcj' 'x86' '-b' '1M' '-Xdict-size' '1M') 15 | file_permissions=( 16 | ["/etc/shadow"]="0:0:400" 17 | ["/root"]="0:0:750" 18 | ["/root/.mod-live/mod-live-usb-welcome"]="0:0:755" 19 | ["/root/.mod-live/mod-live-usb-welcome.run"]="0:0:755" 20 | ["/root/.mod-live/start.sh"]="0:0:755" 21 | ["/usr/local/bin/livecd-sound"]="0:0:755" 22 | ["/usr/local/bin/mod-live-rwdata"]="0:0:755" 23 | ) 24 | -------------------------------------------------------------------------------- /archiso/liveusb/syslinux/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/archiso/liveusb/syslinux/splash.png -------------------------------------------------------------------------------- /archiso/liveusb/syslinux/syslinux-linux.cfg: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | 4 | LABEL arch 5 | MENU LABEL MOD Live-USB (x86_64, BIOS) 6 | LINUX /%INSTALL_DIR%/boot/%ARCH%/vmlinuz-linux-rt 7 | INITRD /%INSTALL_DIR%/boot/%ARCH%/initramfs-linux-rt.img 8 | APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% consoleblank=0 loglevel=0 mitigations=off quiet nohibernate 9 | 10 | LABEL skip 11 | MENU LABEL Boot from first disk 12 | COM32 chain.c32 13 | APPEND hd0 0 14 | 15 | LABEL reboot 16 | MENU LABEL Reboot 17 | COM32 reboot.c32 18 | 19 | LABEL poweroff 20 | MENU LABEL Power Off 21 | COM32 poweroff.c32 22 | -------------------------------------------------------------------------------- /archiso/liveusb/syslinux/syslinux.cfg: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-License-Identifier: GPL-3.0-or-later 3 | 4 | UI vesamenu.c32 5 | MENU TITLE MOD Live-USB 6 | MENU BACKGROUND splash.png 7 | # MENU CLEAR 8 | 9 | DEFAULT arch 10 | TIMEOUT 30 11 | 12 | # taken from https://wiki.archlinux.org/title/Syslinux#Graphical_boot_menu 13 | MENU WIDTH 78 14 | MENU MARGIN 4 15 | MENU ROWS 5 16 | MENU VSHIFT 10 17 | MENU TIMEOUTROW 13 18 | MENU TABMSGROW 11 19 | MENU CMDLINEROW 11 20 | MENU HELPMSGROW 16 21 | MENU HELPMSGENDROW 29 22 | 23 | MENU COLOR border 30;44 #40ffffff #a0000000 std 24 | MENU COLOR title 1;36;44 #9033ccff #a0000000 std 25 | MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all 26 | MENU COLOR unsel 37;44 #50ffffff #a0000000 std 27 | MENU COLOR help 37;40 #c0ffffff #a0000000 std 28 | MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std 29 | MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std 30 | MENU COLOR msg07 37;40 #90ffffff #a0000000 std 31 | MENU COLOR tabmsg 31;40 #30ffffff #00000000 std 32 | 33 | INCLUDE syslinux-linux.cfg 34 | -------------------------------------------------------------------------------- /archiso/output/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | -------------------------------------------------------------------------------- /archiso/output/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/archiso/output/.gitkeep -------------------------------------------------------------------------------- /archiso/run_archiso.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Copyright (C) 2020 David Runge 4 | # 5 | # SPDX-License-Identifier: GPL-3.0-or-later 6 | # 7 | # A simple script to run an archiso image using qemu. The image can be booted 8 | # using BIOS or UEFI. 9 | # 10 | # Requirements: 11 | # - qemu 12 | # - edk2-ovmf (when UEFI booting) 13 | 14 | 15 | set -eu 16 | 17 | print_help() { 18 | local usagetext 19 | IFS='' read -r -d '' usagetext < 0 )); then 130 | while getopts 'abc:dhi:suv' flag; do 131 | case "$flag" in 132 | a) 133 | accessibility='on' 134 | ;; 135 | b) 136 | boot_type='bios' 137 | ;; 138 | c) 139 | oddimage="$OPTARG" 140 | ;; 141 | d) 142 | mediatype='hd' 143 | ;; 144 | h) 145 | print_help 146 | exit 0 147 | ;; 148 | i) 149 | image="$OPTARG" 150 | ;; 151 | u) 152 | boot_type='uefi' 153 | ;; 154 | s) 155 | secure_boot='on' 156 | ;; 157 | v) 158 | display='none' 159 | qemu_options+=(-vnc 'vnc=0.0.0.0:0,vnc=[::]:0') 160 | ;; 161 | *) 162 | printf '%s\n' "Error: Wrong option. Try 'run_archiso -h'." 163 | exit 1 164 | ;; 165 | esac 166 | done 167 | else 168 | print_help 169 | exit 1 170 | fi 171 | 172 | check_image 173 | run_image 174 | -------------------------------------------------------------------------------- /bootstrap/.dockerignore: -------------------------------------------------------------------------------- 1 | .gitignore 2 | .stamp_built 3 | build.sh 4 | -------------------------------------------------------------------------------- /bootstrap/.gitignore: -------------------------------------------------------------------------------- 1 | .stamp_built 2 | -------------------------------------------------------------------------------- /bootstrap/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ####################################################################################################################### 4 | # exit if any command fails 5 | 6 | set -e 7 | 8 | ####################################################################################################################### 9 | # common setup 10 | 11 | cd $(dirname ${0}) 12 | source ../.common.env 13 | 14 | ####################################################################################################################### 15 | # merged usr mode 16 | 17 | mkdir -p ${WORKDIR}/${PLAT}/target/usr/bin 18 | mkdir -p ${WORKDIR}/${PLAT}/target/usr/lib 19 | mkdir -p ${WORKDIR}/${PLAT}/target/usr/sbin 20 | 21 | if [ ! -e ${WORKDIR}/${PLAT}/target/bin ]; then 22 | ln -s usr/bin ${WORKDIR}/${PLAT}/target/bin 23 | fi 24 | if [ ! -e ${WORKDIR}/${PLAT}/target/lib ]; then 25 | ln -s usr/lib ${WORKDIR}/${PLAT}/target/lib 26 | fi 27 | if [ ! -e ${WORKDIR}/${PLAT}/target/sbin ]; then 28 | ln -s usr/sbin ${WORKDIR}/${PLAT}/target/sbin 29 | fi 30 | 31 | ####################################################################################################################### 32 | # build full boostrap 33 | 34 | docker run -v ${WORKDIR}:/home/builder/mod-workdir --rm mpb-toolchain:latest ./bootstrap.sh ${PLAT} 35 | 36 | ####################################################################################################################### 37 | # mark as done 38 | 39 | touch .stamp_built 40 | 41 | ####################################################################################################################### 42 | -------------------------------------------------------------------------------- /documentation/index_files/1000px-AssigmentToMIDIController.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/1000px-AssigmentToMIDIController.png -------------------------------------------------------------------------------- /documentation/index_files/1000px-AssignmentsWindow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/1000px-AssignmentsWindow.png -------------------------------------------------------------------------------- /documentation/index_files/1000px-CVPlugins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/1000px-CVPlugins.png -------------------------------------------------------------------------------- /documentation/index_files/1000px-DUOX_AssignToCV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/1000px-DUOX_AssignToCV.png -------------------------------------------------------------------------------- /documentation/index_files/1000px-InternalCV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/1000px-InternalCV.png -------------------------------------------------------------------------------- /documentation/index_files/1000px-NoCV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/1000px-NoCV.png -------------------------------------------------------------------------------- /documentation/index_files/1000px-RemovingAssignment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/1000px-RemovingAssignment.png -------------------------------------------------------------------------------- /documentation/index_files/1200px-SnapshotsMenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/1200px-SnapshotsMenu.png -------------------------------------------------------------------------------- /documentation/index_files/150px-ManageCVPortsButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/150px-ManageCVPortsButton.png -------------------------------------------------------------------------------- /documentation/index_files/150px-SnapshotsButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/150px-SnapshotsButton.png -------------------------------------------------------------------------------- /documentation/index_files/1560px-AddingAndConnectingPlugIns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/1560px-AddingAndConnectingPlugIns.png -------------------------------------------------------------------------------- /documentation/index_files/1600px-AggregatedMIDIPorts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/1600px-AggregatedMIDIPorts.png -------------------------------------------------------------------------------- /documentation/index_files/1600px-DUOX_PedalboardView.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/1600px-DUOX_PedalboardView.png -------------------------------------------------------------------------------- /documentation/index_files/1600px-DUO_PedalboardView.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/1600px-DUO_PedalboardView.png -------------------------------------------------------------------------------- /documentation/index_files/1600px-SeparatedMIDIPorts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/1600px-SeparatedMIDIPorts.png -------------------------------------------------------------------------------- /documentation/index_files/200px-AdvancedAssignSettings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/200px-AdvancedAssignSettings.png -------------------------------------------------------------------------------- /documentation/index_files/225px-ManageCVPortsButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/225px-ManageCVPortsButton.png -------------------------------------------------------------------------------- /documentation/index_files/225px-SnapshotsButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/225px-SnapshotsButton.png -------------------------------------------------------------------------------- /documentation/index_files/300px-AdvancedAssignSettings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/300px-AdvancedAssignSettings.png -------------------------------------------------------------------------------- /documentation/index_files/300px-LabelCV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/300px-LabelCV.png -------------------------------------------------------------------------------- /documentation/index_files/300px-ManageCVPortsButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/300px-ManageCVPortsButton.png -------------------------------------------------------------------------------- /documentation/index_files/450px-LabelCV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/450px-LabelCV.png -------------------------------------------------------------------------------- /documentation/index_files/500px-AssigmentToMIDIController.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/500px-AssigmentToMIDIController.png -------------------------------------------------------------------------------- /documentation/index_files/500px-AssignmentsWindow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/500px-AssignmentsWindow.png -------------------------------------------------------------------------------- /documentation/index_files/500px-CVPlugins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/500px-CVPlugins.png -------------------------------------------------------------------------------- /documentation/index_files/500px-DUOX_AssignToCV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/500px-DUOX_AssignToCV.png -------------------------------------------------------------------------------- /documentation/index_files/500px-InternalCV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/500px-InternalCV.png -------------------------------------------------------------------------------- /documentation/index_files/500px-LoadManageSnapshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/500px-LoadManageSnapshots.png -------------------------------------------------------------------------------- /documentation/index_files/500px-MIDIPorts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/500px-MIDIPorts.png -------------------------------------------------------------------------------- /documentation/index_files/500px-NoCV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/500px-NoCV.png -------------------------------------------------------------------------------- /documentation/index_files/500px-RemovingAssignment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/500px-RemovingAssignment.png -------------------------------------------------------------------------------- /documentation/index_files/50px-PedalboardLibraryIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/50px-PedalboardLibraryIcon.png -------------------------------------------------------------------------------- /documentation/index_files/750px-AssigmentToMIDIController.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/750px-AssigmentToMIDIController.png -------------------------------------------------------------------------------- /documentation/index_files/750px-AssignmentsWindow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/750px-AssignmentsWindow.png -------------------------------------------------------------------------------- /documentation/index_files/750px-CVPlugins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/750px-CVPlugins.png -------------------------------------------------------------------------------- /documentation/index_files/750px-DUOX_AssignToCV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/750px-DUOX_AssignToCV.png -------------------------------------------------------------------------------- /documentation/index_files/750px-InternalCV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/750px-InternalCV.png -------------------------------------------------------------------------------- /documentation/index_files/750px-LoadManageSnapshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/750px-LoadManageSnapshots.png -------------------------------------------------------------------------------- /documentation/index_files/750px-MIDIPorts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/750px-MIDIPorts.png -------------------------------------------------------------------------------- /documentation/index_files/750px-NoCV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/750px-NoCV.png -------------------------------------------------------------------------------- /documentation/index_files/750px-RemovingAssignment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/750px-RemovingAssignment.png -------------------------------------------------------------------------------- /documentation/index_files/75px-PedalboardLibraryIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/75px-PedalboardLibraryIcon.png -------------------------------------------------------------------------------- /documentation/index_files/780px-AddingAndConnectingPlugIns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/780px-AddingAndConnectingPlugIns.png -------------------------------------------------------------------------------- /documentation/index_files/800px-AggregatedMIDIPorts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/800px-AggregatedMIDIPorts.png -------------------------------------------------------------------------------- /documentation/index_files/800px-DUOX_PedalboardView.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/800px-DUOX_PedalboardView.png -------------------------------------------------------------------------------- /documentation/index_files/800px-DUO_PedalboardView.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/800px-DUO_PedalboardView.png -------------------------------------------------------------------------------- /documentation/index_files/800px-SeparatedMIDIPorts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/800px-SeparatedMIDIPorts.png -------------------------------------------------------------------------------- /documentation/index_files/800px-SnapshotsMenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/800px-SnapshotsMenu.png -------------------------------------------------------------------------------- /documentation/index_files/AdvancedAssignSettings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/AdvancedAssignSettings.png -------------------------------------------------------------------------------- /documentation/index_files/Duo-bypass-plugin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/Duo-bypass-plugin.png -------------------------------------------------------------------------------- /documentation/index_files/Gui-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/Gui-11.png -------------------------------------------------------------------------------- /documentation/index_files/Gui-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/Gui-14.png -------------------------------------------------------------------------------- /documentation/index_files/Gui-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/Gui-17.png -------------------------------------------------------------------------------- /documentation/index_files/Gui-23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/Gui-23.png -------------------------------------------------------------------------------- /documentation/index_files/Gui-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/Gui-4.png -------------------------------------------------------------------------------- /documentation/index_files/Gui-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/Gui-5.png -------------------------------------------------------------------------------- /documentation/index_files/Gui-add-bank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/Gui-add-bank.png -------------------------------------------------------------------------------- /documentation/index_files/Gui-assign.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/Gui-assign.png -------------------------------------------------------------------------------- /documentation/index_files/Gui-banks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/Gui-banks.png -------------------------------------------------------------------------------- /documentation/index_files/Gui-delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/Gui-delete.png -------------------------------------------------------------------------------- /documentation/index_files/Gui-info-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/Gui-info-2.png -------------------------------------------------------------------------------- /documentation/index_files/Gui-info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/Gui-info.png -------------------------------------------------------------------------------- /documentation/index_files/Gui-midi-ports.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/Gui-midi-ports.png -------------------------------------------------------------------------------- /documentation/index_files/Gui-new-pedalboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/Gui-new-pedalboard.png -------------------------------------------------------------------------------- /documentation/index_files/Gui-pedalboards.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/Gui-pedalboards.png -------------------------------------------------------------------------------- /documentation/index_files/Gui-settgins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/Gui-settgins.png -------------------------------------------------------------------------------- /documentation/index_files/Gui-trash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/Gui-trash.png -------------------------------------------------------------------------------- /documentation/index_files/LabelCV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/LabelCV.png -------------------------------------------------------------------------------- /documentation/index_files/LoadManageSnapshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/LoadManageSnapshots.png -------------------------------------------------------------------------------- /documentation/index_files/MIDIPorts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/MIDIPorts.png -------------------------------------------------------------------------------- /documentation/index_files/PedalboardLibraryIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/PedalboardLibraryIcon.png -------------------------------------------------------------------------------- /documentation/index_files/SnapshotsButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/SnapshotsButton.png -------------------------------------------------------------------------------- /documentation/index_files/SnapshotsMenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/documentation/index_files/SnapshotsMenu.png -------------------------------------------------------------------------------- /documentation/index_files/global-new.css: -------------------------------------------------------------------------------- 1 | html, html * { 2 | color: rgb(183, 183, 183) !important;} 3 | *{border-color:#a4afaf !important;} 4 | 5 | input[type="button"]:hover, input[type="submit"]:not(.color):hover, 6 | input[type="reset"]:hover, button:hover, select:hover { 7 | color: #e9e9e9 !important; 8 | background-color: #303030 !important; 9 | } 10 | 11 | html > body[class] a,html > body[class] a[class] { 12 | color: #6091c1 !important; 13 | } 14 | a, a[class] { 15 | color: #6091c1 !important; 16 | } 17 | html > body svg[class] { 18 | fill: rgb(183, 183, 183); 19 | } 20 | html > body svg { 21 | fill: rgb(183, 183, 183); 22 | } 23 | li { 24 | color: #004db3 !important; 25 | } 26 | 27 | tr { 28 | color: #653d3d !important; 29 | } 30 | 31 | cite { 32 | color: #268 !important; 33 | } 34 | 35 | input { 36 | color: #257 !important; 37 | } 38 | 39 | em { 40 | color: #DEF !important; 41 | } 42 | 43 | ul { 44 | color: #650000 !important; 45 | } 46 | 47 | nobr { 48 | color: #4a0505 !important; 49 | } 50 | 51 | 52 | strong { 53 | color: #9CC !important; 54 | } 55 | 56 | 57 | b { 58 | color: #7AF !important; 59 | } 60 | 61 | a:hover, a:hover *, a:visited:hover, a:visited:hover *, span[onclick]:hover, div[onclick]:hover, 62 | [role="link"]:hover, [role="link"]:hover *, [role="button"]:hover *, [role="menuitem"]:hover, [role="menuitem"]:hover *, .link:hover, .link:hover * { 63 | color: #2a3bb1 !important; 64 | background-color: #0000009c !important; 65 | } 66 | 67 | a:visited, a:visited * { 68 | color: #607069 !important 69 | } 70 | 71 | a.highlight, a.highlight *, a.active, a.active *, .selected, .selected *, [href="#"] { 72 | color: #DDD !important; 73 | font-weight: bold !important 74 | } 75 | 76 | textarea, i, td { 77 | color: #ACE !important; 78 | /* text-shadow: -1px -1px #000, 1px -1px #000, -1px 1px #000, 1px 1px #000 !important; */ 79 | } 80 | /* Removed selection color 81 | ::-moz-selection { 82 | color: #0FF !important; 83 | background-color: #333 !important; 84 | } 85 | 86 | ::selection { 87 | color: #0FF !important; 88 | background-color: #333 !important; 89 | } 90 | 91 | ::-webkit-selection { 92 | color: #0FF !important; 93 | background-color: #333 !important; 94 | } 95 | */ 96 | 97 | abbr, progress, time, label, .date { 98 | color: #CDEFC2 !important; 99 | } 100 | 101 | mark, code, pre, blockquote, [class*="quote"], td[style*="inset"][class="alt2"] { 102 | background-color: #00090F !important; 103 | } 104 | 105 | /* Removed because dropdown icons were having black background unnecessarily. 106 | nav, menu, html body [class*="open"], html body [id*="Dropdown"], html body [id*="dropdown"], html body [class*="Dropdown"], 107 | html body [class*="dropdown"], html body [id*="menu"]:not(SELECT), html body [class*="menu"]:NOT(SELECT), html body [class*="tooltip"], 108 | html body [class*="popup"], html body [id*="popup"], html body [class*="note"], html body [class*="detail"], html body [class*="description"] { 109 | background-color: #232323 !important; 110 | } 111 | */ 112 | 113 | 114 | [onclick]:hover, [ondblclick]:hover, [onmousedown]:hover { 115 | color: #FEFF97 !important 116 | } 117 | -------------------------------------------------------------------------------- /documentation/index_files/gnu-fdl.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 404 Not Found 4 | 5 |

Not Found

6 |

The requested URL was not found on this server.

7 | 8 | -------------------------------------------------------------------------------- /documentation/index_files/universal.css: -------------------------------------------------------------------------------- 1 | /*html { 2 | background-color: #252525 !important; 3 | background-image: none !important; 4 | }*/ 5 | ::-webkit-scrollbar { 6 | width: 7px; 7 | height: 7px; 8 | } 9 | ::-webkit-scrollbar-button { 10 | width: 0px; 11 | height: 0px; 12 | } 13 | ::-webkit-scrollbar-thumb { 14 | background: #525252; 15 | border: 0px none #ffffff; 16 | border-radius: 50px; 17 | } 18 | ::-webkit-scrollbar-thumb:hover { 19 | background: #4c4c4c; 20 | } 21 | ::-webkit-scrollbar-thumb:active { 22 | background: #404040; 23 | } 24 | ::-webkit-scrollbar-track { 25 | background: #272727; 26 | border: 0px dashed #ffffff; 27 | border-radius: 22px; 28 | } 29 | ::-webkit-scrollbar-corner { 30 | background: transparent; 31 | } 32 | -------------------------------------------------------------------------------- /documentation/notes.txt: -------------------------------------------------------------------------------- 1 | This is a space dedicated to writing text, feel free to reuse as copy & paste area. 2 | 3 | PS: You can use Ctrl+Alt+T keyboard combination to open a terminal in a new tab. 4 | -------------------------------------------------------------------------------- /live-welcome/.kdev_include_paths: -------------------------------------------------------------------------------- 1 | /usr/include/KF5 2 | /usr/include/KF5/KCoreAddons 3 | /usr/include/KF5/KParts 4 | /usr/include/KF5/KService 5 | /usr/include/KF5/KXmlGui 6 | /usr/include/x86_64-linux-gnu/qt5 7 | /usr/include/x86_64-linux-gnu/qt5/QtCore 8 | /usr/include/x86_64-linux-gnu/qt5/QtGui 9 | /usr/include/x86_64-linux-gnu/qt5/QtWidgets 10 | /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/ 11 | -------------------------------------------------------------------------------- /live-welcome/Makefile: -------------------------------------------------------------------------------- 1 | 2 | # --------------------------------------------------------------------------------------------------------------------- 3 | # build tools 4 | 5 | CC ?= gcc 6 | CXX ?= g++ 7 | 8 | ifneq ($(wildcard /usr/lib/qt5/bin/moc),) 9 | MOC ?= /usr/lib/qt5/bin/moc 10 | else 11 | MOC ?= moc 12 | endif 13 | 14 | # --------------------------------------------------------------------------------------------------------------------- 15 | # build flags 16 | 17 | # CXXFLAGS = -fvisibility=hidden 18 | CXXFLAGS += -O2 19 | CXXFLAGS += -g 20 | CXXFLAGS += -I. 21 | CXXFLAGS += -pipe -MD -MP 22 | CXXFLAGS += -fPIC 23 | 24 | # apt-get install pkg-config libasound2-dev libjack-jackd2-dev 25 | # apt-get install libqt5x11extras5-dev libqt5websockets5-dev qtwebengine5-dev 26 | # apt-get install breeze libkf5parts-dev kate konsole-kpart 27 | 28 | KF5_CFLAGS += -I/usr/include/KF5 29 | KF5_CFLAGS += -I/usr/include/KF5/KCoreAddons 30 | KF5_CFLAGS += -I/usr/include/KF5/KParts 31 | KF5_CFLAGS += -I/usr/include/KF5/KService 32 | KF5_CFLAGS += -I/usr/include/KF5/KXmlGui 33 | KF5_CFLAGS += -I/usr/lib/qt/mkspecs/linux-g++ 34 | KF5_CFLAGS += -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ 35 | KF5_LIBS += -lKF5Parts -lKF5Service -lKF5CoreAddons 36 | 37 | ALSA_CFLAGS = $(shell pkg-config --cflags alsa) 38 | ALSA_LIBS = $(shell pkg-config --libs alsa) 39 | 40 | JACK_CFLAGS = $(shell pkg-config --cflags jack) 41 | JACK_LIBS = $(shell pkg-config --libs jack) 42 | 43 | QT5_CFLAGS = $(shell pkg-config --cflags Qt5Network Qt5Widgets Qt5WebEngineWidgets Qt5X11Extras) 44 | QT5_LIBS = $(shell pkg-config --libs Qt5Network Qt5Widgets Qt5WebEngineWidgets Qt5X11Extras) 45 | 46 | X11_CFLAGS = $(shell pkg-config --cflags x11) 47 | X11_LIBS = $(shell pkg-config --libs x11) 48 | 49 | # --------------------------------------------------------------------------------------------------------------------- 50 | # objects to build 51 | 52 | FILES = welcome.cpp 53 | FILES += src/AudioContainerComm.cpp 54 | FILES += src/AudioDiscovery.cpp 55 | FILES += src/KioskForeignWidget.cpp 56 | FILES += src/KioskTabs.cpp 57 | FILES += src/KioskWindow.cpp 58 | FILES += src/PeakMeterThread.cpp 59 | FILES += src/Utils.cpp 60 | FILES += src/moc_KioskSettingsPopup.cpp 61 | FILES += src/moc_KioskTabs.cpp 62 | FILES += src/moc_KioskWindow.cpp 63 | FILES += widgets/moc_collapsiblebox.cpp 64 | 65 | OBJECTS = $(FILES:%=%.o) 66 | 67 | # --------------------------------------------------------------------------------------------------------------------- 68 | # targets 69 | 70 | TARGETS = mod-live-usb-welcome 71 | 72 | all: $(TARGETS) 73 | 74 | mod-live-usb-welcome: $(OBJECTS) 75 | $(CXX) $^ $(X11_LIBS) $(KF5_LIBS) $(QT5_LIBS) $(JACK_LIBS) $(ALSA_LIBS) -ldl -lrt $(LDFLAGS) -o $@ 76 | 77 | src/KioskTabs.cpp.o: resources/watermark.txt 78 | 79 | %.cpp.o: %.cpp 80 | $(CXX) $< -c $(X11_CFLAGS) $(KF5_CFLAGS) $(QT5_CFLAGS) $(JACK_CFLAGS) $(ALSA_CFLAGS) $(CXXFLAGS) -o $@ 81 | 82 | src/moc_%.cpp: src/%.hpp 83 | $(MOC) $< > $@ 84 | 85 | widgets/moc_%.cpp: widgets/%.hpp 86 | $(MOC) $< > $@ 87 | 88 | resources/watermark.txt: resources/watermark.png 89 | $(shell cat $< | base64 | tr -d '\n' | sed 's/\(.*\)/"\1"/' > $@) 90 | 91 | # --------------------------------------------------------------------------------------------------------------------- 92 | # cleanup 93 | 94 | clean: 95 | rm -f $(TARGETS) $(OBJECTS) $(OBJECTS:%.o=%.d) resources/*.txt 96 | 97 | # --------------------------------------------------------------------------------------------------------------------- 98 | # helpers 99 | 100 | -include $(OBJECTS:%.o=%.d) 101 | 102 | # --------------------------------------------------------------------------------------------------------------------- 103 | -------------------------------------------------------------------------------- /live-welcome/mod-live-usb-welcome.local: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | export TESTING=1 4 | 5 | SELF=$(echo ${0} | sed "s/.local//") 6 | ${SELF} -style Breeze --local 7 | -------------------------------------------------------------------------------- /live-welcome/mod-live-usb-welcome.run: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ -z "${USING_SYSTEMD}" ]; then 4 | exit 0 5 | fi 6 | 7 | # chvt 7 8 | # setterm -cursor off > /dev/tty7 9 | 10 | killall xdg-desktop-portal 11 | systemctl stop mod-live-audio 12 | 13 | eval $(dbus-launch --sh-syntax) 14 | /usr/lib/xdg-desktop-portal & 15 | 16 | SELF=$(echo ${0} | sed "s/.run//") 17 | exec ${SELF} -platform xcb -style Breeze --no-sandbox 18 | -------------------------------------------------------------------------------- /live-welcome/resources/watermark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/live-welcome/resources/watermark.png -------------------------------------------------------------------------------- /live-welcome/src/AudioContainerComm.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-FileCopyrightText: 2021-2022 Filipe Coelho 2 | // SPDX-License-Identifier: AGPL-3.0-or-later 3 | 4 | #include "AudioContainerComm.hpp" 5 | 6 | #include 7 | #include 8 | #include 9 | 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | #if !defined(SYS_futex) && defined(SYS_futex_time64) 17 | #define SYS_futex SYS_futex_time64 18 | #endif 19 | 20 | AudioContainerComm* initAudioContainerComm() 21 | { 22 | int fd; 23 | void* ptr; 24 | AudioContainerComm* comm; 25 | 26 | shm_unlink("/ac"); 27 | 28 | if ((fd = shm_open("/ac", O_CREAT|O_EXCL|O_RDWR, 0600)) < 0) 29 | { 30 | fprintf(stderr, "initAudioContainerComm: shm_open failed\n"); 31 | return nullptr; 32 | } 33 | 34 | if (ftruncate(fd, sizeof(AudioContainerComm)) != 0) 35 | { 36 | fprintf(stderr, "initAudioContainerComm: ftruncate failed\n"); 37 | close(fd); 38 | return nullptr; 39 | } 40 | 41 | if ((ptr = mmap(nullptr, 42 | sizeof(AudioContainerComm), 43 | PROT_READ|PROT_WRITE, 44 | MAP_SHARED|MAP_LOCKED, fd, 0)) == MAP_FAILED) 45 | { 46 | fprintf(stderr, "initAudioContainerComm: mmap failed\n"); 47 | close(fd); 48 | return nullptr; 49 | } 50 | 51 | comm = (AudioContainerComm*)ptr; 52 | memset(comm, 0, sizeof(AudioContainerComm)); 53 | 54 | comm->shm1 = fd; 55 | return comm; 56 | } 57 | 58 | bool waitForAudioContainerComm(AudioContainerComm* const comm) 59 | { 60 | if (comm == nullptr) 61 | return false; 62 | 63 | // 1 second 64 | const timespec timeout = { 1, 0 }; 65 | 66 | for (;;) 67 | { 68 | if (__sync_bool_compare_and_swap(&comm->sem, 1, 0)) 69 | return true; 70 | 71 | if (::syscall(SYS_futex, &comm->sem, FUTEX_WAIT, 0, &timeout, nullptr, 0) != 0) 72 | if (errno != EAGAIN && errno != EINTR) 73 | return false; 74 | } 75 | } 76 | 77 | void cleanupAudioContainerComm(AudioContainerComm* const comm) 78 | { 79 | if (comm == nullptr) 80 | return; 81 | 82 | const int fd = comm->shm1; 83 | comm->shm1 = -1; 84 | 85 | munmap(comm, sizeof(AudioContainerComm)); 86 | close(fd); 87 | shm_unlink("/ac"); 88 | } 89 | -------------------------------------------------------------------------------- /live-welcome/src/AudioContainerComm.hpp: -------------------------------------------------------------------------------- 1 | // SPDX-FileCopyrightText: 2021-2022 Filipe Coelho 2 | // SPDX-License-Identifier: AGPL-3.0-or-later 3 | 4 | #pragma once 5 | 6 | typedef struct _AudioContainerComm { 7 | int sem; 8 | int shm1, shm2; 9 | int padding; 10 | float peaks[4]; 11 | } AudioContainerComm; 12 | 13 | AudioContainerComm* initAudioContainerComm(); 14 | bool waitForAudioContainerComm(AudioContainerComm*); 15 | void cleanupAudioContainerComm(AudioContainerComm*); 16 | -------------------------------------------------------------------------------- /live-welcome/src/AudioDiscovery.hpp: -------------------------------------------------------------------------------- 1 | // SPDX-FileCopyrightText: 2021-2022 Filipe Coelho 2 | // SPDX-License-Identifier: AGPL-3.0-or-later 3 | 4 | #pragma once 5 | 6 | #include 7 | #include 8 | 9 | namespace std { 10 | typedef vector stringlist; 11 | } 12 | 13 | typedef struct { 14 | unsigned minChansOut = 0; 15 | unsigned maxChansOut = 0; 16 | unsigned minChansIn = 0; 17 | unsigned maxChansIn = 0; 18 | std::vector bufsizes; 19 | std::vector rates; 20 | } DeviceProperties; 21 | 22 | void enumerateSoundcards(std::stringlist& inputNames, 23 | std::stringlist& outputNames, 24 | std::stringlist& inputIds, 25 | std::stringlist& outputIds); 26 | 27 | void getDeviceProperties(const char* const deviceID, 28 | bool testOutput, 29 | bool testInput, 30 | DeviceProperties& props); 31 | -------------------------------------------------------------------------------- /live-welcome/src/KioskAbout.hpp: -------------------------------------------------------------------------------- 1 | // SPDX-FileCopyrightText: 2021-2022 Filipe Coelho 2 | // SPDX-License-Identifier: AGPL-3.0-or-later 3 | 4 | #pragma once 5 | 6 | #include 7 | #include 8 | 9 | class KioskAbout : public QWidget 10 | { 11 | public: 12 | explicit KioskAbout(QWidget* const parent) 13 | : QWidget(parent) {} 14 | 15 | protected: 16 | void paintEvent(QPaintEvent* const event) 17 | { 18 | QWidget::paintEvent(event); 19 | 20 | QPainter painter(this); 21 | painter.drawText(0, 0, 400, 500, 0x0, "Hello There"); 22 | } 23 | }; 24 | -------------------------------------------------------------------------------- /live-welcome/src/KioskForeignWidget.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-FileCopyrightText: 2021-2022 Filipe Coelho 2 | // SPDX-License-Identifier: AGPL-3.0-or-later 3 | 4 | #include "KioskForeignWidget.hpp" 5 | 6 | #include 7 | #include 8 | 9 | #include 10 | #include 11 | 12 | KioskForeignWidget::KioskForeignWidget(QWidget* const parent) 13 | : QWidget(parent, Qt::Window), 14 | process(), 15 | timerId(0), 16 | x11Size(), 17 | x11Display(QX11Info::display()), 18 | x11Window(0) 19 | { 20 | process.setProcessChannelMode(QProcess::ForwardedChannels); 21 | } 22 | 23 | KioskForeignWidget::~KioskForeignWidget() 24 | { 25 | if (timerId != 0) 26 | killTimer(timerId); 27 | 28 | if (process.state() != QProcess::NotRunning) 29 | { 30 | process.terminate(); 31 | process.waitForFinished(); 32 | } 33 | } 34 | 35 | bool KioskForeignWidget::startForeignTool(const QString& tool) 36 | { 37 | if (x11Display == nullptr) 38 | return false; 39 | if (tool.isEmpty()) 40 | return false; 41 | 42 | if (tool == "Cardinal") 43 | { 44 | const QStringList arguments = { "embed", QString::number(winId()) }; 45 | 46 | process.start("Cardinal", arguments, QIODevice::ReadWrite | QIODevice::Unbuffered); 47 | } 48 | 49 | if (process.state() != QProcess::NotRunning) 50 | { 51 | process.waitForStarted(); 52 | timerId = startTimer(1000, Qt::CoarseTimer); 53 | return true; 54 | } 55 | 56 | return false; 57 | } 58 | 59 | QSize KioskForeignWidget::sizeHint() const 60 | { 61 | return x11Size; 62 | } 63 | 64 | QSize KioskForeignWidget::minimumSizeHint() const 65 | { 66 | if (x11Window != 0) 67 | { 68 | XSizeHints hints = {}; 69 | long ignore = 0; 70 | XGetWMNormalHints(x11Display, x11Window, &hints, &ignore); 71 | 72 | if (hints.flags & PMinSize) 73 | return QSize(hints.min_width, hints.min_height); 74 | } 75 | 76 | return QSize(); 77 | } 78 | 79 | void KioskForeignWidget::resizeEvent(QResizeEvent* const event) 80 | { 81 | QWidget::resizeEvent(event); 82 | 83 | if (x11Window != 0) 84 | doResize(event->size()); 85 | } 86 | 87 | void KioskForeignWidget::timerEvent(QTimerEvent* event) 88 | { 89 | QWidget::timerEvent(event); 90 | 91 | if (event->timerId() != timerId || x11Window != 0) 92 | return; 93 | 94 | ::Window rootWindow, parentWindow; 95 | ::Window* childWindows = nullptr; 96 | uint numChildren = 0; 97 | 98 | XQueryTree(x11Display, (ulong)winId(), &rootWindow, &parentWindow, &childWindows, &numChildren); 99 | 100 | if (numChildren > 0 && childWindows != nullptr) 101 | { 102 | x11Window = childWindows[0]; 103 | XFree(childWindows); 104 | 105 | killTimer(timerId); 106 | timerId = 0; 107 | 108 | doResize(size()); 109 | } 110 | } 111 | 112 | void KioskForeignWidget::doResize(const QSize& size) 113 | { 114 | printf("resized %i %i\n", size.width(), size.height()); 115 | x11Size = size; 116 | XResizeWindow(x11Display, x11Window, 117 | static_cast(size.width()), 118 | static_cast(size.height())); 119 | } 120 | -------------------------------------------------------------------------------- /live-welcome/src/KioskForeignWidget.hpp: -------------------------------------------------------------------------------- 1 | // SPDX-FileCopyrightText: 2021-2022 Filipe Coelho 2 | // SPDX-License-Identifier: AGPL-3.0-or-later 3 | 4 | #pragma once 5 | 6 | #include 7 | #include 8 | 9 | typedef struct _XDisplay Display; 10 | 11 | class KioskForeignWidget : public QWidget 12 | { 13 | QProcess process; 14 | int timerId; 15 | QSize x11Size; 16 | Display* x11Display; 17 | uintptr_t x11Window; 18 | 19 | public: 20 | explicit KioskForeignWidget(QWidget* parent); 21 | ~KioskForeignWidget() override; 22 | 23 | bool startForeignTool(const QString& tool); 24 | 25 | QSize sizeHint() const override; 26 | QSize minimumSizeHint() const override; 27 | 28 | protected: 29 | void resizeEvent(QResizeEvent* event) override; 30 | void timerEvent(QTimerEvent* event) override; 31 | 32 | private: 33 | void doResize(const QSize& size); 34 | }; 35 | -------------------------------------------------------------------------------- /live-welcome/src/KioskTabs.hpp: -------------------------------------------------------------------------------- 1 | // SPDX-FileCopyrightText: 2021-2022 Filipe Coelho 2 | // SPDX-License-Identifier: AGPL-3.0-or-later 3 | 4 | #pragma once 5 | 6 | #include 7 | 8 | class QPushButton; 9 | class QWebEngineView; 10 | 11 | class KioskTabs : public QTabWidget 12 | { 13 | Q_OBJECT 14 | 15 | QPushButton* const plusButton; 16 | QWebEngineView* const webBrowser; 17 | int oldIndex; 18 | 19 | public: 20 | explicit KioskTabs(QWidget* const parent); 21 | 22 | void closeForeignWidgets(); 23 | void openTerminal(); 24 | void reloadPage(); 25 | 26 | private: 27 | void updatePlusButtonPosition(); 28 | 29 | private Q_SLOTS: 30 | void addNewClicked(); 31 | void tabClicked(int index); 32 | void tabClosed(int index); 33 | void tabCancel(); 34 | }; 35 | -------------------------------------------------------------------------------- /live-welcome/src/KioskWindow.hpp: -------------------------------------------------------------------------------- 1 | // SPDX-FileCopyrightText: 2021-2022 Filipe Coelho 2 | // SPDX-License-Identifier: AGPL-3.0-or-later 3 | 4 | #pragma once 5 | 6 | #include 7 | #include 8 | 9 | class DigitalPeakMeter; 10 | class PeakMeterThread; 11 | class QPushButton; 12 | class QSlider; 13 | class KioskSettingsPopup; 14 | class KioskTabs; 15 | 16 | #include "Utils.hpp" 17 | 18 | class KioskWindow : public QMainWindow 19 | { 20 | Q_OBJECT 21 | 22 | KioskSettingsPopup* const settingsPopup; 23 | KioskTabs* const tabWidget; 24 | 25 | QFont clockFont; 26 | QRect clockRect; 27 | int clockTimer; 28 | 29 | QSlider* const gainSlider; 30 | DigitalPeakMeter* const peakMeterIn; 31 | DigitalPeakMeter* const peakMeterOut; 32 | QPushButton* const settingsButton; 33 | QPushButton* const powerButton; 34 | 35 | const QString program; 36 | QProcess audioContainerProcess; 37 | 38 | PeakMeterThread* const peakMeterThread; 39 | 40 | public: 41 | KioskWindow(bool desktop); 42 | ~KioskWindow() override; 43 | 44 | void stopAudioContainer(); 45 | 46 | public Q_SLOTS: 47 | void openPower(); 48 | void openSettings(bool cancellable = true); 49 | void tryConnectingToWebServer(); 50 | void setGain(int gain); 51 | 52 | protected: 53 | void keyPressEvent(QKeyEvent* const event) override; 54 | void paintEvent(QPaintEvent* const event) override; 55 | void closeEvent(QCloseEvent* const event) override; 56 | void resizeEvent(QResizeEvent* const event) override; 57 | void timerEvent(QTimerEvent* const event) override; 58 | 59 | private: 60 | void repositionTabBarWidgets(); 61 | }; 62 | -------------------------------------------------------------------------------- /live-welcome/src/PeakMeterThread.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-FileCopyrightText: 2021-2022 Filipe Coelho 2 | // SPDX-License-Identifier: AGPL-3.0-or-later 3 | 4 | #include "PeakMeterThread.hpp" 5 | 6 | #include "AudioContainerComm.hpp" 7 | #include "../widgets/digitalpeakmeter.hpp" 8 | 9 | PeakMeterThread::PeakMeterThread(QObject* const parent, DigitalPeakMeter* const in, DigitalPeakMeter* const out) 10 | : QThread(parent), 11 | containerComm(nullptr), 12 | peakMeterIn(in), 13 | peakMeterOut(out), 14 | sys_host_shmfd(-1), 15 | sys_host_data(nullptr) {} 16 | 17 | void PeakMeterThread::init() 18 | { 19 | if ((containerComm = initAudioContainerComm()) != nullptr) 20 | { 21 | if (sys_serial_open(&sys_host_shmfd, &sys_host_data)) 22 | fprintf(stdout, "sys_host shared memory ok!\n"); 23 | else 24 | fprintf(stderr, "sys_host shared memory failed\n"); 25 | 26 | start(HighPriority); 27 | } 28 | } 29 | 30 | void PeakMeterThread::stop() 31 | { 32 | cleanupAudioContainerComm(containerComm); 33 | sys_serial_close(sys_host_shmfd, sys_host_data); 34 | sys_host_shmfd = -1; 35 | sys_host_data = nullptr; 36 | wait(2000); 37 | } 38 | 39 | void PeakMeterThread::send(const sys_serial_event_type etype, const int value) 40 | { 41 | if (sys_host_data == nullptr) 42 | return; 43 | 44 | char str[24]; 45 | snprintf(str, sizeof(str), "%i", value); 46 | str[sizeof(str)-1] = '\0'; 47 | 48 | if (! sys_serial_write(&sys_host_data->client, etype, str)) 49 | return; 50 | 51 | sem_post(&sys_host_data->client.sem); 52 | } 53 | 54 | void PeakMeterThread::run() 55 | { 56 | float peaks[4]; 57 | char msg[SYS_SERIAL_SHM_DATA_SIZE]; 58 | sys_serial_event_type etype; 59 | uint8_t page, subpage; 60 | 61 | sys_serial_shm_data_channel* const sysdata = sys_host_data != nullptr ? &sys_host_data->server : nullptr; 62 | 63 | while (containerComm != nullptr && ! isInterruptionRequested()) 64 | { 65 | // flush all incoming host events 66 | if (sys_host_data != nullptr && sem_trywait(&sysdata->sem) == 0) 67 | { 68 | while (sysdata->head != sysdata->tail) 69 | sys_serial_read(sysdata, &etype, &page, &subpage, msg); 70 | } 71 | 72 | if (! waitForAudioContainerComm(containerComm)) 73 | continue; 74 | 75 | memcpy(peaks, containerComm->peaks, sizeof(peaks)); 76 | peakMeterIn->displayMeter(1, peaks[0]); 77 | peakMeterIn->displayMeter(2, peaks[1]); 78 | peakMeterOut->displayMeter(1, peaks[2]); 79 | peakMeterOut->displayMeter(2, peaks[3]); 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /live-welcome/src/PeakMeterThread.hpp: -------------------------------------------------------------------------------- 1 | // SPDX-FileCopyrightText: 2021-2022 Filipe Coelho 2 | // SPDX-License-Identifier: AGPL-3.0-or-later 3 | 4 | #pragma once 5 | 6 | #include 7 | 8 | #define SERVER_MODE 9 | #include "../sys_host/sys_host.h" 10 | 11 | class DigitalPeakMeter; 12 | typedef struct _AudioContainerComm AudioContainerComm; 13 | 14 | class PeakMeterThread : public QThread 15 | { 16 | AudioContainerComm* containerComm; 17 | DigitalPeakMeter* const peakMeterIn; 18 | DigitalPeakMeter* const peakMeterOut; 19 | 20 | int sys_host_shmfd; 21 | sys_serial_shm_data* sys_host_data; 22 | 23 | public: 24 | explicit PeakMeterThread(QObject* parent, DigitalPeakMeter* in, DigitalPeakMeter* out); 25 | 26 | // start communication with audio container, and start thread if that succeeds 27 | void init(); 28 | 29 | // stop communication with audio container, waits maximum 2s for thread to stop 30 | void stop(); 31 | 32 | // send a value to audio container side 33 | void send(sys_serial_event_type etype, int value); 34 | 35 | private: 36 | // listening thread 37 | void run() override; 38 | }; 39 | -------------------------------------------------------------------------------- /live-welcome/src/Utils.cpp: -------------------------------------------------------------------------------- 1 | // SPDX-FileCopyrightText: 2021-2022 Filipe Coelho 2 | // SPDX-License-Identifier: AGPL-3.0-or-later 3 | 4 | #include "Utils.hpp" 5 | 6 | #include 7 | #include 8 | 9 | #include 10 | 11 | static QString getExecutableFile(); 12 | static QString getExecutableFile() 13 | { 14 | struct DLAddrReader 15 | { 16 | static QString getFilename() 17 | { 18 | Dl_info exeInfo; 19 | void* localSymbol = (void*)getExecutableFile; 20 | dladdr(localSymbol, &exeInfo); 21 | return QString(exeInfo.dli_fname); 22 | } 23 | }; 24 | 25 | static QString filename(DLAddrReader::getFilename()); 26 | return filename; 27 | } 28 | 29 | QString findDocumentation() 30 | { 31 | QFileInfo exe(getExecutableFile()); 32 | QDir dir(exe.dir()); 33 | 34 | printf("dir is %s\n", dir.absolutePath().toUtf8().constData()); 35 | 36 | if (dir.exists("documentation")) 37 | return dir.absoluteFilePath("documentation/index.html"); 38 | 39 | dir.cdUp(); 40 | 41 | if (dir.exists("documentation")) 42 | return dir.absoluteFilePath("documentation/index.html"); 43 | 44 | return QString(); 45 | } 46 | 47 | QString findStartScript() 48 | { 49 | QFileInfo exe(getExecutableFile()); 50 | QDir dir(exe.dir()); 51 | 52 | printf("dir is %s\n", dir.absolutePath().toUtf8().constData()); 53 | 54 | if (dir.exists("start.sh")) 55 | return dir.filePath("start.sh"); 56 | 57 | dir.cdUp(); 58 | dir.cd("mod-os"); 59 | 60 | if (dir.exists("start.sh")) 61 | return dir.filePath("start.sh"); 62 | 63 | return QString(); 64 | } 65 | -------------------------------------------------------------------------------- /live-welcome/src/Utils.hpp: -------------------------------------------------------------------------------- 1 | // SPDX-FileCopyrightText: 2021-2022 Filipe Coelho 2 | // SPDX-License-Identifier: AGPL-3.0-or-later 3 | 4 | #pragma once 5 | 6 | #include 7 | 8 | QString findDocumentation(); 9 | QString findStartScript(); 10 | -------------------------------------------------------------------------------- /live-welcome/sys_host/mod-semaphore.h: -------------------------------------------------------------------------------- 1 | 2 | #pragma once 3 | 4 | #define MOD_SEMAPHORE_USE_FUTEX 5 | 6 | #ifdef __APPLE__ 7 | #include 8 | #include 9 | #elif defined(MOD_SEMAPHORE_USE_FUTEX) 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #else 16 | #include 17 | #endif 18 | 19 | #ifdef __APPLE__ 20 | /* --------------------------------------------------------------------- */ 21 | // macOS semaphore 22 | 23 | typedef struct _sem_t { 24 | semaphore_t s; 25 | } sem_t; 26 | 27 | static inline 28 | int sem_init(sem_t* sem, int pshared, int value) 29 | { 30 | // unsupported 31 | if (pshared) 32 | return 1; 33 | 34 | return semaphore_create(mach_task_self(), &sem->s, SYNC_POLICY_FIFO, value) != KERN_SUCCESS; 35 | } 36 | 37 | static inline 38 | void sem_destroy(sem_t* sem) 39 | { 40 | semaphore_destroy(mach_task_self(), sem->s); 41 | } 42 | 43 | static inline 44 | void sem_post(sem_t* sem) 45 | { 46 | semaphore_signal(sem->s); 47 | } 48 | 49 | static inline 50 | int sem_wait(sem_t* sem) 51 | { 52 | return semaphore_wait(sem->s) != KERN_SUCCESS; 53 | } 54 | 55 | // 0 = ok 56 | static inline 57 | int sem_timedwait_secs(sem_t* sem, int secs) 58 | { 59 | struct mach_timespec time; 60 | time.tv_sec = secs; 61 | time.tv_nsec = 0; 62 | 63 | return semaphore_timedwait(sem->s, time) != KERN_SUCCESS; 64 | } 65 | #elif defined(MOD_SEMAPHORE_USE_FUTEX) 66 | /* --------------------------------------------------------------------- */ 67 | // Linux futex 68 | 69 | typedef struct _sem_t { 70 | int value, pshared; 71 | } sem_t; 72 | 73 | static inline 74 | int sem_init(sem_t* sem, int pshared, int value) 75 | { 76 | sem->value = value; 77 | sem->pshared = pshared; 78 | return 0; 79 | } 80 | 81 | static inline 82 | void sem_destroy(sem_t* sem) 83 | { 84 | // unused 85 | return; (void)sem; 86 | } 87 | 88 | static inline 89 | void sem_post(sem_t* sem) 90 | { 91 | if (! __sync_bool_compare_and_swap(&sem->value, 0, 1)) { 92 | // already unlocked, do not wake futex 93 | return; 94 | } 95 | 96 | syscall(__NR_futex, &sem->value, sem->pshared ? FUTEX_WAKE : FUTEX_WAKE_PRIVATE, 1, NULL, NULL, 0); 97 | return; 98 | } 99 | 100 | static inline 101 | int sem_wait(sem_t* sem) 102 | { 103 | for (;;) 104 | { 105 | if (__sync_bool_compare_and_swap(&sem->value, 1, 0)) 106 | return 0; 107 | 108 | if (syscall(__NR_futex, &sem->value, sem->pshared ? FUTEX_WAIT : FUTEX_WAIT_PRIVATE, 0, NULL, NULL, 0) != 0) 109 | { 110 | if (errno != EAGAIN && errno != EINTR) 111 | return 1; 112 | } 113 | } 114 | } 115 | 116 | static inline 117 | int sem_trywait(sem_t* sem) 118 | { 119 | if (__sync_bool_compare_and_swap(&sem->value, 1, 0)) 120 | return 0; 121 | return 1; 122 | } 123 | 124 | // 0 = ok 125 | static inline 126 | int sem_timedwait_secs(sem_t* sem, int secs) 127 | { 128 | const struct timespec timeout = { secs, 0 }; 129 | 130 | for (;;) 131 | { 132 | if (__sync_bool_compare_and_swap(&sem->value, 1, 0)) 133 | return 0; 134 | 135 | if (syscall(__NR_futex, &sem->value, sem->pshared ? FUTEX_WAIT : FUTEX_WAIT_PRIVATE, 0, &timeout, NULL, 0) != 0) 136 | { 137 | if (errno != EAGAIN && errno != EINTR) 138 | return 1; 139 | } 140 | } 141 | } 142 | #else 143 | /* --------------------------------------------------------------------- */ 144 | // POSIX Semaphore 145 | 146 | static inline 147 | int sem_timedwait_secs(sem_t* sem, int secs) 148 | { 149 | struct timespec timeout; 150 | clock_gettime(CLOCK_REALTIME, &timeout); 151 | timeout.tv_sec += secs; 152 | return sem_timedwait(sem, &timeout); 153 | } 154 | #endif 155 | -------------------------------------------------------------------------------- /live-welcome/welcome.kdev4: -------------------------------------------------------------------------------- 1 | [Project] 2 | Manager=KDevGenericManager 3 | Name=mod-live-usb-welcome 4 | 5 | [Filters] 6 | Excludes=*/.*,*/*~ 7 | 8 | [Project] 9 | VersionControlSupport=kdevgit 10 | -------------------------------------------------------------------------------- /live-welcome/widgets/collapsiblebox.hpp: -------------------------------------------------------------------------------- 1 | // SPDX-FileCopyrightText: 2021-2022 Filipe Coelho 2 | // SPDX-License-Identifier: AGPL-3.0-or-later 3 | 4 | #pragma once 5 | 6 | #include 7 | #include 8 | #include 9 | 10 | class QToolButtonWithMouseTracking : public QToolButton 11 | { 12 | public: 13 | explicit QToolButtonWithMouseTracking(QWidget* const parent) 14 | : QToolButton(parent) {} 15 | 16 | protected: 17 | void enterEvent(QEvent* const event) override 18 | { 19 | QFont nextfont(font()); 20 | nextfont.setBold(true); 21 | setFont(nextfont); 22 | QToolButton::enterEvent(event); 23 | } 24 | 25 | void leaveEvent(QEvent* const event) override 26 | { 27 | QFont nextfont(font()); 28 | nextfont.setBold(false); 29 | setFont(nextfont); 30 | QToolButton::leaveEvent(event); 31 | } 32 | }; 33 | 34 | class CollapsibleBox : public QFrame 35 | { 36 | Q_OBJECT 37 | 38 | QToolButtonWithMouseTracking toggleButton; 39 | QWidget contentArea; 40 | QVBoxLayout contentLayout; 41 | QVBoxLayout mainLayout; 42 | 43 | public: 44 | explicit CollapsibleBox(const QString& title, QWidget* const parent) 45 | : QFrame(parent), 46 | toggleButton(this), 47 | contentArea(this), 48 | contentLayout(&contentArea), 49 | mainLayout(this) 50 | { 51 | setFrameShape(QFrame::StyledPanel); 52 | setFrameShadow(QFrame::Raised); 53 | 54 | toggleButton.setText(title); 55 | toggleButton.setCheckable(true); 56 | toggleButton.setFocusPolicy(Qt::FocusPolicy::NoFocus); 57 | toggleButton.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); 58 | toggleButton.setToolButtonStyle(Qt::ToolButtonTextBesideIcon); 59 | connect(&toggleButton, SIGNAL(toggled(bool)), this, SLOT(toolButtonPressed(bool))); 60 | 61 | contentLayout.setContentsMargins(6, 2, 6, 0); 62 | contentLayout.setSpacing(3); 63 | 64 | mainLayout.setContentsMargins(0, 0, 0, 4); 65 | mainLayout.setSpacing(1); 66 | mainLayout.addWidget(&toggleButton); 67 | mainLayout.addWidget(&contentArea); 68 | 69 | // initial state is hidden 70 | toggleButton.setChecked(false); 71 | toggleButton.setArrowType(Qt::RightArrow); 72 | contentArea.hide(); 73 | } 74 | 75 | QVBoxLayout& getContentLayout() noexcept 76 | { 77 | return contentLayout; 78 | } 79 | 80 | private Q_SLOTS: 81 | void toolButtonPressed(const bool toggled) 82 | { 83 | contentArea.setVisible(toggled); 84 | toggleButton.setArrowType(toggled ? Qt::DownArrow : Qt::RightArrow); 85 | } 86 | }; 87 | -------------------------------------------------------------------------------- /mod-os/.dockerignore: -------------------------------------------------------------------------------- 1 | .gitignore 2 | .stamp_built 3 | build.sh 4 | config 5 | overlay-files 6 | rootfs.ext2 7 | start.sh 8 | start-dummy.sh 9 | -------------------------------------------------------------------------------- /mod-os/.gitignore: -------------------------------------------------------------------------------- 1 | .stamp_built 2 | config/soundcard.sh 3 | rootfs.ext2 4 | -------------------------------------------------------------------------------- /mod-os/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mpb-toolchain 2 | LABEL maintainer="Filipe Coelho " 3 | ENV DEBIAN_FRONTEND noninteractive 4 | ENV USER builder 5 | ENV HOME /home/$USER 6 | 7 | # NOTE you can edit this as needed 8 | ENV MPB_COMMIT_HASH_FOR_MOD_OS 0a26f578d7de19646f21a3e27eda5cf562f2fa83 9 | 10 | # update to requested commit 11 | RUN git checkout . && git checkout master && git pull && git checkout $MPB_COMMIT_HASH_FOR_MOD_OS && git submodule update 12 | 13 | # patch source for build 14 | COPY buildroot/busybox.config $HOME/busybox.config 15 | COPY buildroot/mod-os-config.patch $HOME/mod-os-config.patch 16 | RUN patch -p1 -i $HOME/mod-os-config.patch 17 | 18 | # copy and activate packages 19 | COPY buildroot/packages $HOME/packages 20 | COPY buildroot/activate-packages.sh $HOME/activate-packages.sh 21 | RUN $HOME/activate-packages.sh 22 | 23 | # CMD 24 | CMD ["bash"] 25 | -------------------------------------------------------------------------------- /mod-os/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ####################################################################################################################### 4 | # exit if any command fails 5 | 6 | set -e 7 | 8 | ####################################################################################################################### 9 | # common setup 10 | 11 | cd $(dirname ${0}) 12 | source ../.common.env 13 | 14 | ####################################################################################################################### 15 | # cleanup 16 | 17 | rm -f rootfs.ext2 ${WORKDIR}/${PLAT}/images/rootfs.ext2 18 | 19 | if [ -z "${NOCLEAN}" ]; then 20 | rm -f ${WORKDIR}/${PLAT}/build/*/.stamp_target_installed 21 | rm -rf ${WORKDIR}/${PLAT}/target/ 22 | 23 | # FIXME this seems needed, not sure why yet 24 | rm -rf ${WORKDIR}/${PLAT}/build/lv2-* 25 | rm -rf ${WORKDIR}/${PLAT}/build/serd-* 26 | rm -rf ${WORKDIR}/${PLAT}/build/sord-* 27 | rm -rf ${WORKDIR}/${PLAT}/build/sratom-* 28 | rm -rf ${WORKDIR}/${PLAT}/build/lilv-* 29 | fi 30 | 31 | ####################################################################################################################### 32 | # create dummy files and dirs for rootfs 33 | 34 | mkdir -p ${WORKDIR}/${PLAT}/target/etc 35 | mkdir -p ${WORKDIR}/${PLAT}/target/dev 36 | mkdir -p ${WORKDIR}/${PLAT}/target/home 37 | mkdir -p ${WORKDIR}/${PLAT}/target/mnt 38 | mkdir -p ${WORKDIR}/${PLAT}/target/proc 39 | mkdir -p ${WORKDIR}/${PLAT}/target/root 40 | mkdir -p ${WORKDIR}/${PLAT}/target/run 41 | mkdir -p ${WORKDIR}/${PLAT}/target/srv 42 | mkdir -p ${WORKDIR}/${PLAT}/target/sys 43 | mkdir -p ${WORKDIR}/${PLAT}/target/tmp 44 | touch ${WORKDIR}/${PLAT}/target/etc/group 45 | touch ${WORKDIR}/${PLAT}/target/etc/hostname 46 | touch ${WORKDIR}/${PLAT}/target/etc/hosts 47 | touch ${WORKDIR}/${PLAT}/target/etc/localtime 48 | touch ${WORKDIR}/${PLAT}/target/etc/mod-hardware-descriptor.json 49 | touch ${WORKDIR}/${PLAT}/target/etc/passwd 50 | touch ${WORKDIR}/${PLAT}/target/etc/shadow 51 | 52 | ####################################################################################################################### 53 | # merged usr mode 54 | 55 | mkdir -p ${WORKDIR}/${PLAT}/target/usr/bin 56 | mkdir -p ${WORKDIR}/${PLAT}/target/usr/lib 57 | mkdir -p ${WORKDIR}/${PLAT}/target/usr/sbin 58 | 59 | if [ ! -e ${WORKDIR}/${PLAT}/target/bin ]; then 60 | ln -s usr/bin ${WORKDIR}/${PLAT}/target/bin 61 | fi 62 | if [ ! -e ${WORKDIR}/${PLAT}/target/lib ]; then 63 | ln -s usr/lib ${WORKDIR}/${PLAT}/target/lib 64 | fi 65 | if [ ! -e ${WORKDIR}/${PLAT}/target/sbin ]; then 66 | ln -s usr/sbin ${WORKDIR}/${PLAT}/target/sbin 67 | fi 68 | 69 | ####################################################################################################################### 70 | # create extra dirs for custom mounting points 71 | 72 | mkdir -p ${WORKDIR}/${PLAT}/target/data/user-files 73 | mkdir -p ${WORKDIR}/${PLAT}/target/mnt/config 74 | mkdir -p ${WORKDIR}/${PLAT}/target/mnt/lv2 75 | mkdir -p ${WORKDIR}/${PLAT}/target/mnt/pedalboards 76 | mkdir -p ${WORKDIR}/${PLAT}/target/mnt/plugins 77 | mkdir -p ${WORKDIR}/${PLAT}/target/root/data 78 | mkdir -p ${WORKDIR}/${PLAT}/target/usr/share/mod/html 79 | touch ${WORKDIR}/${PLAT}/target/usr/share/mod/html/mod-ui.css 80 | touch ${WORKDIR}/${PLAT}/target/usr/share/mod/html/mod-ui.js 81 | 82 | # this is needed somehow 83 | if [ "${PLAT}" = "generic-x86_64" ] && [ ! -e ${WORKDIR}/generic-x86_64/target/usr/lib/libmvec.so.1 ]; then 84 | cp ${WORKDIR}/generic-x86_64/toolchain/x86_64-modaudio.generic-linux-gnu/sysroot/lib/libmvec.so.1 \ 85 | ${WORKDIR}/generic-x86_64/target/usr/lib/libmvec.so.1 86 | fi 87 | 88 | ####################################################################################################################### 89 | # create docker image 90 | 91 | docker build -t mpb-mod-os . 92 | 93 | ####################################################################################################################### 94 | # build mod-os 95 | 96 | docker run -v ${WORKDIR}:/home/builder/mod-workdir --rm mpb-mod-os:latest ./bootstrap.sh ${PLAT} 97 | 98 | ####################################################################################################################### 99 | # fetch rootfs.ext2 from image 100 | 101 | ln -sf ${WORKDIR}/${PLAT}/images/rootfs.ext2 rootfs.ext2 102 | 103 | ####################################################################################################################### 104 | # mark as done 105 | 106 | touch .stamp_built 107 | 108 | ####################################################################################################################### 109 | -------------------------------------------------------------------------------- /mod-os/buildroot/activate-packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | set -u 5 | 6 | # NOTE this is only used for safely importing common env file, no build is done here 7 | PLATFORM="x86_64" 8 | 9 | source .common 10 | export DOWNLOAD_PATH=${DOWNLOAD_DIR} 11 | export TOOLCHAIN_PATH=${TOOLCHAIN_DIR} 12 | 13 | for p in $(ls "${HOME}/packages" | sort); do 14 | if [ -e "global-packages/{p}" ]; then 15 | echo "ERROR: package ${p} already exists as MPB global-package" 16 | exit 1 17 | fi 18 | rm -rf "${BUILD_DIR}/${BUILDROOT_VERSION}/package/${p}" 19 | rm -rf "${SOURCE_DIR}/plugins-dep/package/${p}" 20 | cp -r "${HOME}/packages/${p}" "${SOURCE_DIR}/plugins-dep/package/" 21 | echo "source \"\$BR2_EXTERNAL/package/${p}/Config.in\"" >> "${SOURCE_DIR}/plugins-dep/Config.in" 22 | done 23 | -------------------------------------------------------------------------------- /mod-os/buildroot/jack2-live-usb/jack2-live-usb-shm.patch: -------------------------------------------------------------------------------- 1 | diff --git a/common/shm.c b/common/shm.c 2 | index b1e7fc71..9b5d1dc1 100644 3 | --- a/common/shm.c 4 | +++ b/common/shm.c 5 | @@ -59,6 +59,12 @@ 6 | #include "shm.h" 7 | #include "JackError.h" 8 | 9 | +int shm_open2(const char* a, int b, int c) 10 | +{ char tmp[512]; sprintf(tmp, "/dev/shm/live-usb/%s", a); return open(tmp,b,c); } 11 | + 12 | +#define shm_open shm_open2 13 | +#define shm_unlink unlink 14 | + 15 | static int GetUID() 16 | { 17 | #ifdef WIN32 18 | diff --git a/linux/JackLinuxFutex.cpp b/linux/JackLinuxFutex.cpp 19 | index 29b13901..505a3ad1 100644 20 | --- a/linux/JackLinuxFutex.cpp 21 | +++ b/linux/JackLinuxFutex.cpp 22 | @@ -34,6 +34,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 23 | #define SYS_futex SYS_futex_time64 24 | #endif 25 | 26 | +int shm_open2(const char* a, int b, int c) 27 | +{ char tmp[512]; sprintf(tmp, "/dev/shm/live-usb/%s", a); return open(tmp,b,c); } 28 | + 29 | +#define shm_open shm_open2 30 | +#define shm_unlink unlink 31 | + 32 | namespace Jack 33 | { 34 | 35 | diff --git a/linux/JackPlatformPlug_os.h b/linux/JackPlatformPlug_os.h 36 | index 60c9a585..42c2aaf4 100644 37 | --- a/linux/JackPlatformPlug_os.h 38 | +++ b/linux/JackPlatformPlug_os.h 39 | @@ -20,8 +20,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 40 | #ifndef __JackPlatformPlug_linux__ 41 | #define __JackPlatformPlug_linux__ 42 | 43 | -#define jack_server_dir "/dev/shm" 44 | -#define jack_client_dir "/dev/shm" 45 | +#define jack_server_dir "/dev/shm/live-usb" 46 | +#define jack_client_dir "/dev/shm/live-usb" 47 | #define JACK_DEFAULT_DRIVER "alsa" 48 | 49 | namespace Jack 50 | -------------------------------------------------------------------------------- /mod-os/buildroot/mod-os-config.patch: -------------------------------------------------------------------------------- 1 | diff --git a/.common b/.common 2 | index 2a74752..a161e66 100644 3 | --- a/.common 4 | +++ b/.common 5 | @@ -103,7 +103,7 @@ BUILDROOT_LINK=http://buildroot.uclibc.org/downloads/ 6 | BUILDROOT_LINK=http://buildroot.uclibc.org/downloads/ 7 | BUILDROOT_FILE=${BUILDROOT_VERSION}.tar.${BUILDROOT_TAR_EXT} 8 | 9 | -SOURCE_DIR=$("${readlink}" -f $(dirname ${0})) 10 | +SOURCE_DIR=${HOME}/mod-plugin-builder 11 | BR2_EXTERNAL=${SOURCE_DIR}/${BR2_BUILD_CONFIG} 12 | BR2_MAKE="make O=${WORKDIR}/${PLATFORM} BR2_EXTERNAL=${BR2_EXTERNAL} BR2_EXTERNAL_PLUGINS_DEP=${BR2_EXTERNAL} BR2_PLATFORM=${BR2_PLATFORM}" 13 | BR2_TARGET=${WORKDIR}/${PLATFORM}/target 14 | diff --git a/plugins-dep/configs/x86_64_defconfig b/plugins-dep/configs/x86_64_defconfig 15 | index 7a40fe1..d40ba26 100644 16 | --- a/plugins-dep/configs/generic-x86_64_defconfig 17 | +++ b/plugins-dep/configs/generic-x86_64_defconfig 18 | @@ -15,22 +15,20 @@ BR2_TARGET_OPTIMIZATION="-mtune=generic -msse -msse2 -mfpmath=sse -ffast-math -f 19 | BR2_TARGET_LDFLAGS="-Wl,-O1,--as-needed,--strip-all" 20 | BR2_TARGET_GENERIC_HOSTNAME="" 21 | BR2_TARGET_GENERIC_ISSUE="" 22 | -BR2_INIT_NONE=y 23 | -BR2_ROOTFS_DEVICE_CREATION_STATIC=y 24 | +BR2_INIT_SYSTEMD=y 25 | BR2_ROOTFS_DEVICE_TABLE="" 26 | -BR2_ROOTFS_STATIC_DEVICE_TABLE="" 27 | -BR2_ROOTFS_SKELETON_CUSTOM=y 28 | -BR2_ROOTFS_SKELETON_CUSTOM_PATH="/tmp/skeleton" 29 | -# BR2_PACKAGE_BUSYBOX is not set 30 | +BR2_TARGET_GENERIC_ROOT_PASSWD="mod" 31 | +# BR2_TARGET_GENERIC_GETTY is not set 32 | +# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set 33 | +BR2_PACKAGE_BUSYBOX_CONFIG="${HOME}/busybox.config" 34 | +BR2_PACKAGE_ALSA_UTILS=y 35 | +BR2_PACKAGE_ALSA_UTILS_AMIXER=y 36 | +BR2_PACKAGE_ALSA_UTILS_APLAY=y 37 | BR2_PACKAGE_VALGRIND=y 38 | BR2_PACKAGE_QT5=y 39 | BR2_PACKAGE_QT5BASE_LICENSE_APPROVED=y 40 | BR2_PACKAGE_QT5BASE_ICU=y 41 | -BR2_PACKAGE_ALSA_LIB=y 42 | BR2_PACKAGE_LIBLO=y 43 | -BR2_PACKAGE_LIBSAMPLERATE=y 44 | -BR2_PACKAGE_CAIRO=y 45 | -BR2_PACKAGE_CAIRO_PNG=y 46 | BR2_PACKAGE_LIBXML2=y 47 | BR2_PACKAGE_MXML=y 48 | BR2_PACKAGE_ARMADILLO=y 49 | @@ -58,12 +56,12 @@ BR2_PACKAGE_BOOST_TIMER=y 50 | BR2_PACKAGE_BOOST_WAVE=y 51 | BR2_PACKAGE_EIGEN=y 52 | BR2_PACKAGE_FFTW=y 53 | -BR2_PACKAGE_FFTW_DOUBLE=y 54 | BR2_PACKAGE_FFTW_FAST=y 55 | BR2_PACKAGE_GLIBMM=y 56 | +BR2_PACKAGE_BASH=y 57 | BR2_PACKAGE_ACL=y 58 | -BR2_PACKAGE_UTIL_LINUX=y 59 | -BR2_PACKAGE_UTIL_LINUX_LIBMOUNT=y 60 | +BR2_PACKAGE_UTIL_LINUX_KILL=y 61 | +BR2_TARGET_ROOTFS_EXT2=y 62 | # BR2_TARGET_ROOTFS_TAR is not set 63 | BR2_PACKAGE_CARLA_BACKEND=y 64 | BR2_PACKAGE_FLUIDSYNTH=y 65 | @@ -71,10 +69,14 @@ BR2_PACKAGE_FLUIDSYNTH=y 66 | BR2_PACKAGE_FLUIDSYNTH=y 67 | BR2_PACKAGE_KXSTUDIO_LV2_EXTENSIONS=y 68 | BR2_PACKAGE_LIBGIG=y 69 | -BR2_PACKAGE_LILV=y 70 | BR2_PACKAGE_LVTK=y 71 | BR2_PACKAGE_LVTK_1=y 72 | BR2_PACKAGE_MOD_LV2_EXTENSIONS=y 73 | BR2_PACKAGE_MOD_PLUGIN_BUILDER=y 74 | BR2_PACKAGE_ZITA_CONVOLVER=y 75 | BR2_PACKAGE_ZITA_RESAMPLER=y 76 | +BR2_PACKAGE_BROWSEPY=y 77 | +BR2_PACKAGE_MOD_MIDI_MERGER=y 78 | +BR2_PACKAGE_MOD_PEAKMETER=y 79 | +BR2_PACKAGE_MOD_UI=y 80 | +BR2_PACKAGE_MOD_XRUN=y 81 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/browsepy/01_skip-unicategories-req.patch: -------------------------------------------------------------------------------- 1 | diff --git a/browsepy/transform/glob.py b/browsepy/transform/glob.py 2 | index 64783af..b034368 100644 3 | --- a/browsepy/transform/glob.py 4 | +++ b/browsepy/transform/glob.py 5 | @@ -2,8 +2,6 @@ 6 | import os 7 | import warnings 8 | 9 | -from unicategories import categories as unicat, RangeGroup as ranges 10 | - 11 | from ..compat import re_escape, chr 12 | from . import StateMachine 13 | 14 | @@ -65,64 +63,6 @@ class GlobTransform(StateMachine): 15 | '': 'text', 16 | }, 17 | } 18 | - character_classes = { 19 | - 'alnum': ( 20 | - # [\p{L}\p{Nl}\p{Nd}] 21 | - unicat['L'] + unicat['Nl'] + unicat['Nd'] 22 | - ), 23 | - 'alpha': ( 24 | - # \p{L}\p{Nl} 25 | - unicat['L'] + unicat['Nl'] 26 | - ), 27 | - 'ascii': ( 28 | - # [\x00-\x7F] 29 | - ranges(((0, 0x80),)) 30 | - ), 31 | - 'blank': ( 32 | - # [\p{Zs}\t] 33 | - unicat['Zs'] + ranges(((9, 10),)) 34 | - ), 35 | - 'cntrl': ( 36 | - # \p{Cc} 37 | - unicat['Cc'] 38 | - ), 39 | - 'digit': ( 40 | - # \p{Nd} 41 | - unicat['Nd'] 42 | - ), 43 | - 'graph': ( 44 | - # [^\p{Z}\p{C}] 45 | - unicat['M'] + unicat['L'] + unicat['N'] + unicat['P'] + unicat['S'] 46 | - ), 47 | - 'lower': ( 48 | - # \p{Ll} 49 | - unicat['Ll'] 50 | - ), 51 | - 'print': ( 52 | - # \P{C} 53 | - unicat['C'] 54 | - ), 55 | - 'punct': ( 56 | - # \p{P} 57 | - unicat['P'] 58 | - ), 59 | - 'space': ( 60 | - # [\p{Z}\t\n\v\f\r] 61 | - unicat['Z'] + ranges(((9, 14),)) 62 | - ), 63 | - 'upper': ( 64 | - # \p{Lu} 65 | - unicat['Lu'] 66 | - ), 67 | - 'word': ( 68 | - # [\p{L}\p{Nl}\p{Nd}\p{Pc}] 69 | - unicat['L'] + unicat['Nl'] + unicat['Nd'] + unicat['Pc'] 70 | - ), 71 | - 'xdigit': ( 72 | - # [0-9A-Fa-f] 73 | - ranges(((48, 58), (65, 71), (97, 103))) 74 | - ), 75 | - } 76 | current = 'start' 77 | deferred = False 78 | 79 | @@ -150,18 +90,10 @@ class GlobTransform(StateMachine): 80 | return None 81 | 82 | def transform_posix_character_class(self, data, mark, next): 83 | - name = data[len(self.start):] 84 | - if name not in self.character_classes: 85 | - warnings.warn( 86 | - 'Posix character class %s is not supported.' 87 | - % name) 88 | - return None 89 | - return ''.join( 90 | - chr(start) 91 | - if 1 == end - start else 92 | - '%s-%s' % (chr(start), chr(end - 1)) 93 | - for start, end in self.character_classes[name] 94 | - ) 95 | + warnings.warn( 96 | + 'Posix character class %s is not supported.' 97 | + % name) 98 | + return None 99 | 100 | def transform_posix_equivalence_class(self, data, mark, next): 101 | warnings.warn( 102 | diff --git a/requirements.txt b/requirements.txt 103 | index bbb34a0..62170b9 100644 104 | --- a/requirements.txt 105 | +++ b/requirements.txt 106 | @@ -1,5 +1,4 @@ 107 | flask 108 | -unicategories 109 | 110 | # for python < 3.6 111 | scandir 112 | diff --git a/setup.py b/setup.py 113 | index 868e28c..3799237 100644 114 | --- a/setup.py 115 | +++ b/setup.py 116 | @@ -100,7 +100,7 @@ setup( 117 | 'templates/*', 118 | 'static/*/*', 119 | ]}, 120 | - install_requires=['flask', 'unicategories'] + extra_requires, 121 | + install_requires=['flask'] + extra_requires, 122 | test_suite='browsepy.tests', 123 | test_runner='browsepy.tests.runner:DebuggerTextTestRunner', 124 | zip_safe=False, 125 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/browsepy/Config.in: -------------------------------------------------------------------------------- 1 | config BR2_PACKAGE_BROWSEPY 2 | bool "browsepy" 3 | select BR2_PACKAGE_PYTHON_FLASK 4 | select BR2_PACKAGE_PYTHON_SCANDIR 5 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/browsepy/browsepy.mk: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # browsepy 4 | # 5 | ################################################################################ 6 | 7 | BROWSEPY_VERSION = c2245873f9432b2839f09be7eeb2992fd3bbc5ff 8 | BROWSEPY_SITE = $(call github,moddevices,browsepy,$(BROWSEPY_VERSION)) 9 | BROWSEPY_DEPENDENCIES = python3 python-flask python-scandir host-python-setuptools 10 | BROWSEPY_SETUP_TYPE = setuptools 11 | 12 | $(eval $(python-package)) 13 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/jack-capture/01_fix-cross-compile.patch: -------------------------------------------------------------------------------- 1 | diff --git a/Makefile b/Makefile 2 | index 6e1fef9..345dc6b 100644 3 | --- a/Makefile 4 | +++ b/Makefile 5 | @@ -3,8 +3,8 @@ bindir = $(PREFIX)/bin 6 | 7 | VERSION=0.9.73 8 | 9 | -CC=gcc 10 | -CPP=g++ 11 | +CC?=gcc 12 | +CXX?=g++ 13 | 14 | # Needed on OSX 15 | CFLAGS += -I/opt/local/include 16 | @@ -12,7 +12,7 @@ CFLAGS += -I/opt/local/include 17 | OPTIMIZE=-O3 18 | #OPTIMIZE=-O0 -g 19 | 20 | -COMPILEFLAGS=$(CFLAGS) $(OPTIMIZE) -DVERSION=\"$(VERSION)\" -Wall -Wextra -Wno-unused 21 | +COMPILEFLAGS=$(CFLAGS) $(OPTIMIZE) -DVERSION=\"$(VERSION)\" -Wall -Wextra -Wno-unused -Wno-unused-parameter 22 | LINKFLAGS=$(LDFLAGS) -ljack -lsndfile -lm -lpthread -latomic 23 | 24 | OS := $(shell uname) 25 | @@ -41,7 +41,7 @@ check_dependencies: 26 | which install 27 | which pkg-config 28 | which $(CC) 29 | - which $(CPP) 30 | + which $(CXX) 31 | $(CC) $(CFLAGS) -E testsndfile.c >/dev/null 32 | @echo "All seems good " 33 | @echo 34 | @@ -64,7 +64,7 @@ jack_capture: setformat.c jack_capture.c vringbuffer.c upwaker.c osc.c Makefile 35 | 36 | 37 | jack_capture_gui2: jack_capture_gui2.cpp 38 | - $(CPP) $(CPPFLAGS) $(OPTIMIZE) jack_capture_gui2.cpp $(LDFLAGS) `pkg-config --libs --cflags gtk+-2.0` -o jack_capture_gui2 39 | + $(CXX) $(CPPFLAGS) $(OPTIMIZE) jack_capture_gui2.cpp $(LDFLAGS) `pkg-config --libs --cflags gtk+-2.0` -o jack_capture_gui2 40 | 41 | config_flags: Makefile das_config.h 42 | cat das_config.h |grep COMPILEFLAGS|sed s/\\/\\/COMPILEFLAGS//|tr '\n' ' ' >config_flags 43 | diff --git a/gen_das_config_h.sh b/gen_das_config_h.sh 44 | index a8c3c33..b85a3c8 100644 45 | --- a/gen_das_config_h.sh 46 | +++ b/gen_das_config_h.sh 47 | @@ -16,7 +16,7 @@ 48 | echo "#include " >temp$$.c 49 | echo "main(){return SF_FORMAT_OGG;}" >>temp$$.c 50 | echo >>temp$$.c 51 | -if gcc temp$$.c 2>/dev/null; then 52 | +if $CC temp$$.c 2>/dev/null; then 53 | echo "#define HAVE_OGG 1" 54 | else 55 | echo "#define HAVE_OGG 0" 56 | @@ -26,7 +26,7 @@ fi 57 | echo "#include " >temp$$.c 58 | echo "main(){return 0;}" >>temp$$.c 59 | echo >>temp$$.c 60 | -if gcc temp$$.c -lmp3lame 2>/dev/null; then 61 | +if $CC temp$$.c -lmp3lame 2>/dev/null; then 62 | echo "#define HAVE_LAME 1" 63 | echo "//COMPILEFLAGS -lmp3lame" 64 | else 65 | @@ -37,7 +37,7 @@ fi 66 | echo "#include " >temp$$.c 67 | echo "main(){return 0;}" >>temp$$.c 68 | echo >>temp$$.c 69 | -if pkg-config --cflags --libs liblo >/dev/null 2>/dev/null && gcc temp$$.c `pkg-config --cflags --libs liblo` 2>/dev/null ; then 70 | +if pkg-config --cflags --libs liblo >/dev/null 2>/dev/null && $CC temp$$.c `pkg-config --cflags --libs liblo` 2>/dev/null ; then 71 | echo "#define HAVE_LIBLO 1" 72 | echo "//COMPILEFLAGS " `pkg-config --cflags --libs liblo` 73 | else 74 | @@ -48,7 +48,7 @@ fi 75 | echo "#include " >temp$$.c 76 | echo "main(){return (int)jack_port_get_latency_range;}" >>temp$$.c 77 | echo >>temp$$.c 78 | -if gcc temp$$.c -ljack 2>/dev/null ; then 79 | +if $CC temp$$.c -ljack 2>/dev/null ; then 80 | echo "#define NEW_JACK_LATENCY_API 1" 81 | else 82 | echo "#define NEW_JACK_LATENCY_API 0" 83 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/jack-capture/02_configure-sndfile.patch: -------------------------------------------------------------------------------- 1 | diff --git a/jack_capture.c b/jack_capture.c 2 | index 0109622..bc78f9e 100644 3 | --- a/jack_capture.c 4 | +++ b/jack_capture.c 5 | @@ -1214,6 +1214,14 @@ static int open_soundfile(void){ 6 | return 0; 7 | } 8 | 9 | + // Turn on clipping and normalization of floats (-1.0 - 1.0) 10 | + sf_command (soundfile, SFC_SET_CLIPPING, NULL, SF_TRUE); 11 | + sf_command (soundfile, SFC_SET_NORM_FLOAT, NULL, SF_TRUE); 12 | + 13 | + // Specify vbr quality (default is 0.4) 14 | + double q = 0.5; 15 | + sf_command (soundfile, SFC_SET_VBR_ENCODING_QUALITY, &q, sizeof (double)); 16 | + 17 | hook_file_opened(filename); 18 | 19 | return 1; 20 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/jack-capture/Config.in: -------------------------------------------------------------------------------- 1 | config BR2_PACKAGE_JACK_CAPTURE 2 | bool "jack-capture" 3 | select BR2_PACKAGE_LIBSNDFILE 4 | select BR2_PACKAGE_JACK2MOD 5 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/jack-capture/jack-capture.mk: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # jack-capture 4 | # 5 | ################################################################################ 6 | 7 | # JACK_CAPTURE_VERSION = 0.9.71 8 | # JACK_CAPTURE_SITE = http://archive.notam02.no/arkiv/src 9 | # JACK_CAPTURE_SOURCE = jack_capture-$(JACK_CAPTURE_VERSION).tar.gz 10 | JACK_CAPTURE_VERSION = e2c0c3d25fce0a13f3f18c622079cd29178af7f8 11 | JACK_CAPTURE_SITE = $(call github,kmatheussen,jack_capture,$(JACK_CAPTURE_VERSION)) 12 | 13 | JACK_CAPTURE_DEPENDENCIES = jack2mod libsndfile 14 | 15 | JACK_CAPTURE_TARGET_MAKE = \ 16 | $(TARGET_MAKE_ENV) \ 17 | $(TARGET_CONFIGURE_OPTS) \ 18 | CFLAGS="$(TARGET_CFLAGS) -ffast-math $(JACK_CAPTURE_EXTRA_FLAGS)" \ 19 | CXXFLAGS="$(TARGET_CXXFLAGS) -ffast-math $(JACK_CAPTURE_EXTRA_FLAGS)" \ 20 | $(MAKE) -C $(@D) 21 | 22 | define JACK_CAPTURE_CONFIGURE_CMDS 23 | $(JACK_CAPTURE_TARGET_MAKE) jack_capture 24 | endef 25 | 26 | define JACK_CAPTURE_INSTALL_TARGET_CMDS 27 | $(JACK_CAPTURE_TARGET_MAKE) install DESTDIR=$(TARGET_DIR) PREFIX=/usr 28 | endef 29 | 30 | $(eval $(generic-package)) 31 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/mod-host/01_fix-libjack-dir.patch: -------------------------------------------------------------------------------- 1 | diff --git a/Makefile b/Makefile 2 | index 85dfea7..74806e7 100644 3 | --- a/Makefile 4 | +++ b/Makefile 5 | @@ -130,10 +130,10 @@ src/mod-monitor.o: src/monitor/monitor-client.c 6 | install: install_man 7 | install -d $(DESTDIR)$(BINDIR) 8 | install -m 755 $(PROG) $(DESTDIR)$(BINDIR) 9 | - install -d $(DESTDIR)$(shell pkg-config --variable=libdir jack)/jack/ 10 | - install -m 755 $(PROG).so $(DESTDIR)$(shell pkg-config --variable=libdir jack)/jack/ 11 | - install -m 755 fake-input.so $(DESTDIR)$(shell pkg-config --variable=libdir jack)/jack/ 12 | - install -m 755 mod-monitor.so $(DESTDIR)$(shell pkg-config --variable=libdir jack)/jack/ 13 | + install -d $(DESTDIR)/usr/lib/jack/ 14 | + install -m 755 $(PROG).so $(DESTDIR)/usr/lib/jack/ 15 | + install -m 755 fake-input.so $(DESTDIR)/usr/lib/jack/ 16 | + install -m 755 mod-monitor.so $(DESTDIR)/usr/lib/jack/ 17 | 18 | # clean rule 19 | clean: 20 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/mod-host/02_connect-all-networks.patch: -------------------------------------------------------------------------------- 1 | diff --git a/src/socket.c b/src/socket.c 2 | index f6b27cc..af16cd3 100644 3 | --- a/src/socket.c 4 | +++ b/src/socket.c 5 | @@ -144,11 +144,7 @@ int socket_start(int socket_port, int feedback_port, int buffer_size) 6 | struct sockaddr_in serv_addr; 7 | memset((char *) &serv_addr, 0, sizeof(serv_addr)); 8 | serv_addr.sin_family = AF_INET; 9 | -#if defined(__MOD_DEVICES__) || defined(_WIN32) 10 | - serv_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); 11 | -#else 12 | serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); 13 | -#endif 14 | 15 | /* Try assign the server address */ 16 | serv_addr.sin_port = htons(socket_port); 17 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/mod-host/Config.in: -------------------------------------------------------------------------------- 1 | config BR2_PACKAGE_MOD_HOST 2 | bool "mod-host" 3 | select BR2_PACKAGE_FFTW_DOUBLE 4 | select BR2_PACKAGE_FFTW_SINGLE 5 | select BR2_PACKAGE_JACK2MOD 6 | select BR2_PACKAGE_READLINE 7 | select BR2_PACKAGE_LILV 8 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/mod-host/mod-host.mk: -------------------------------------------------------------------------------- 1 | ###################################### 2 | # 3 | # mod-host 4 | # 5 | ###################################### 6 | 7 | MOD_HOST_VERSION = 2b7fee0772dfcf11ff129f00bd9ab1de2a7f4af9 8 | MOD_HOST_SITE = $(call github,moddevices,mod-host,$(MOD_HOST_VERSION)) 9 | MOD_HOST_DEPENDENCIES = jack2mod lilv readline fftw-single fftw-double 10 | 11 | MOD_HOST_TARGET_CFLAGS = $(TARGET_CFLAGS) -ffast-math 12 | MOD_HOST_TARGET_MAKE = $(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) CFLAGS="$(MOD_HOST_TARGET_CFLAGS)" $(MAKE) -C $(@D) 13 | 14 | define MOD_HOST_BUILD_CMDS 15 | $(MOD_HOST_TARGET_MAKE) 16 | endef 17 | 18 | define MOD_HOST_INSTALL_TARGET_CMDS 19 | $(MOD_HOST_TARGET_MAKE) install DESTDIR=$(TARGET_DIR) PREFIX=/usr 20 | endef 21 | 22 | $(eval $(generic-package)) 23 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/mod-midi-merger/Config.in: -------------------------------------------------------------------------------- 1 | config BR2_PACKAGE_MOD_MIDI_MERGER 2 | bool "mod-midi-merger" 3 | select BR2_PACKAGE_JACK2MOD 4 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/mod-midi-merger/mod-midi-merger.mk: -------------------------------------------------------------------------------- 1 | ###################################### 2 | # 3 | # mod-midi-merger 4 | # 5 | ###################################### 6 | 7 | MOD_MIDI_MERGER_VERSION = c10f5bb9151c654afdfdec6fd395539bb03eabe1 8 | MOD_MIDI_MERGER_SITE = $(call github,moddevices,mod-midi-merger,$(MOD_MIDI_MERGER_VERSION)) 9 | MOD_MIDI_MERGER_DEPENDENCIES = jack2mod 10 | 11 | $(eval $(cmake-package)) 12 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/mod-peakmeter/Config.in: -------------------------------------------------------------------------------- 1 | config BR2_PACKAGE_MOD_PEAKMETER 2 | bool "mod-peakmeter" 3 | select BR2_PACKAGE_JACK2MOD 4 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/mod-peakmeter/mod-peakmeter.mk: -------------------------------------------------------------------------------- 1 | ###################################### 2 | # 3 | # mod-peakmeter 4 | # 5 | ###################################### 6 | 7 | MOD_PEAKMETER_VERSION = 0694c717e9c25c7b14d81e34046ddfc271f26799 8 | MOD_PEAKMETER_SITE = $(call github,moddevices,mod-peakmeter,$(MOD_PEAKMETER_VERSION)) 9 | MOD_PEAKMETER_DEPENDENCIES = jack2mod 10 | 11 | MOD_PEAKMETER_TARGET_MAKE = \ 12 | $(TARGET_MAKE_ENV) \ 13 | $(TARGET_CONFIGURE_OPTS) \ 14 | CFLAGS="$(TARGET_CFLAGS) -ffast-math $(MOD_PEAKMETER_EXTRA_FLAGS)" \ 15 | CXXFLAGS="$(TARGET_CXXFLAGS) -ffast-math $(MOD_PEAKMETER_EXTRA_FLAGS)" \ 16 | $(MAKE) -C $(@D) 17 | 18 | define MOD_PEAKMETER_BUILD_CMDS 19 | $(MOD_PEAKMETER_TARGET_MAKE) 20 | endef 21 | 22 | define MOD_PEAKMETER_INSTALL_TARGET_CMDS 23 | install -d $(TARGET_DIR)/usr/lib/jack/ 24 | install -m 644 $(@D)/mod-peakmeter.so $(TARGET_DIR)/usr/lib/jack/ 25 | endef 26 | 27 | $(eval $(generic-package)) 28 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/mod-ui/02_external-css-and-js.patch: -------------------------------------------------------------------------------- 1 | diff --git a/html/index.html b/html/index.html 2 | index 72ccaa78..f2b6241c 100644 3 | --- a/html/index.html 4 | +++ b/html/index.html 5 | @@ -283,6 +283,10 @@ $('document').ready(function() { 6 | 7 | 8 | 9 | + 10 | + 11 | + 12 | + 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/mod-ui/Config.in: -------------------------------------------------------------------------------- 1 | config BR2_PACKAGE_MOD_UI 2 | bool "mod-ui" 3 | select BR2_PACKAGE_PYTHON3 4 | select BR2_PACKAGE_JACK_CAPTURE 5 | select BR2_PACKAGE_MOD_HOST 6 | select BR2_PACKAGE_SNDFILE_TOOLS 7 | select BR2_PACKAGE_PYTHON_AGGDRAW 8 | select BR2_PACKAGE_PYTHON_PILLOW 9 | select BR2_PACKAGE_PYTHON_PYCRYPTO 10 | select BR2_PACKAGE_PYTHON_PYSTACHE 11 | select BR2_PACKAGE_PYTHON_SERIAL 12 | select BR2_PACKAGE_PYTHON_TORNADO 13 | select BR2_PACKAGE_PYTHON_SETUPTOOLS 14 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/mod-ui/mod-ui.mk: -------------------------------------------------------------------------------- 1 | ###################################### 2 | # 3 | # mod-ui 4 | # 5 | ###################################### 6 | 7 | MOD_UI_VERSION = c5e4f5d10cfd5d696b99ee338598948527f7f11b 8 | MOD_UI_SITE = $(call github,moddevices,mod-ui,$(MOD_UI_VERSION)) 9 | MOD_UI_DEPENDENCIES = python3 python-aggdraw python-pillow python-pycrypto python-pystache python-setuptools python-serial python-tornado host-python3 jack-capture jack2mod lilv mod-host 10 | MOD_UI_SETUP_TYPE = distutils 11 | MOD_UI_ENV = CXX=$(TARGET_CXX) 12 | 13 | $(eval $(python-package)) 14 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/python-aggdraw/Config.in: -------------------------------------------------------------------------------- 1 | config BR2_PACKAGE_PYTHON_AGGDRAW 2 | bool "python-aggdraw" 3 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/python-aggdraw/python-aggdraw.mk: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # python-aggdraw 4 | # 5 | ################################################################################ 6 | 7 | PYTHON_AGGDRAW_VERSION = 183299329e8bbfcc5bbc280da492cc0a2c242f55 8 | PYTHON_AGGDRAW_SITE = $(call github,pytroll,aggdraw,$(PYTHON_AGGDRAW_VERSION)) 9 | PYTHON_AGGDRAW_DEPENDENCIES = python3 host-python-setuptools 10 | PYTHON_AGGDRAW_SETUP_TYPE = setuptools 11 | PYTHON_AGGDRAW_ENV = CC=$(TARGET_CC) 12 | 13 | $(eval $(python-package)) 14 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/python-scandir/Config.in: -------------------------------------------------------------------------------- 1 | config BR2_PACKAGE_PYTHON_SCANDIR 2 | bool "python-scandir" 3 | help 4 | scandir, a better directory iterator and faster os.walk() 5 | 6 | https://pypi.python.org/pypi/scandir 7 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/python-scandir/python-scandir.hash: -------------------------------------------------------------------------------- 1 | # md5, sha256 from https://pypi.org/pypi/scandir/json 2 | md5 f8378f4d9f95a6a78e97ab01aa900c1d scandir-1.10.0.tar.gz 3 | sha256 4d4631f6062e658e9007ab3149a9b914f3548cb38bfb021c64f39a025ce578ae scandir-1.10.0.tar.gz 4 | # Locally computed sha256 checksums 5 | sha256 a5e2fbdc239744419d29407cdbc92793c4d9c1d956c174f7cb7f96fa6d058c86 LICENSE.txt 6 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/python-scandir/python-scandir.mk: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # python-scandir 4 | # 5 | ################################################################################ 6 | 7 | PYTHON_SCANDIR_VERSION = 1.10.0 8 | PYTHON_SCANDIR_SOURCE = scandir-$(PYTHON_SCANDIR_VERSION).tar.gz 9 | PYTHON_SCANDIR_SITE = https://files.pythonhosted.org/packages/df/f5/9c052db7bd54d0cbf1bc0bb6554362bba1012d03e5888950a4f5c5dadc4e 10 | PYTHON_SCANDIR_LICENSE = BSD-3-Clause 11 | PYTHON_SCANDIR_LICENSE_FILES = LICENSE.txt 12 | PYTHON_SCANDIR_SETUP_TYPE = setuptools 13 | 14 | $(eval $(python-package)) 15 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/sndfile-tools/Config.in: -------------------------------------------------------------------------------- 1 | config BR2_PACKAGE_SNDFILE_TOOLS 2 | bool "sndfile-tools" 3 | select BR2_PACKAGE_CAIRO 4 | select BR2_PACKAGE_CAIRO_PNG 5 | select BR2_PACKAGE_FFTW_DOUBLE 6 | select BR2_PACKAGE_JACK2MOD 7 | select BR2_PACKAGE_LIBGLIB2 8 | select BR2_PACKAGE_LIBSAMPLERATE 9 | select BR2_PACKAGE_LIBSNDFILE 10 | -------------------------------------------------------------------------------- /mod-os/buildroot/packages/sndfile-tools/sndfile-tools.mk: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # sndfile-tools 4 | # 5 | ################################################################################ 6 | 7 | SNDFILE_TOOLS_VERSION = 5545b7c381016ca881bfc100656edfa31d90337c 8 | SNDFILE_TOOLS_SITE = $(call github,erikd,sndfile-tools,$(SNDFILE_TOOLS_VERSION)) 9 | SNDFILE_TOOLS_DEPENDENCIES = cairo fftw-double jack2mod libglib2 libsamplerate libsndfile 10 | SNDFILE_TOOLS_AUTORECONF = YES 11 | 12 | ifeq ($(BR2_cortex_a7),y) 13 | SNDFILE_TOOLS_EXTRA_FLAGS = -fprefetch-loop-arrays -funroll-loops -funsafe-loop-optimizations 14 | endif 15 | 16 | SNDFILE_TOOLS_CONF_OPTS = CFLAGS="$(TARGET_CFLAGS) -ffast-math $(SNDFILE_TOOLS_EXTRA_FLAGS)" 17 | SNDFILE_TOOLS_CONF_OPTS += CXXFLAGS="$(TARGET_CXXFLAGS) -ffast-math $(SNDFILE_TOOLS_EXTRA_FLAGS)" 18 | 19 | define SNDFILE_TOOLS_POST_INSTALL_TARGET_INTCLIENT 20 | mkdir -p $(TARGET_DIR)/usr/lib/jack 21 | mv $(TARGET_DIR)/usr/lib/sndfile-jackplay.so $(TARGET_DIR)/usr/lib/jack/ 22 | endef 23 | 24 | SNDFILE_TOOLS_POST_INSTALL_TARGET_HOOKS += SNDFILE_TOOLS_POST_INSTALL_TARGET_INTCLIENT 25 | 26 | $(eval $(autotools-package)) 27 | -------------------------------------------------------------------------------- /mod-os/config/environment.sh: -------------------------------------------------------------------------------- 1 | LD_BIND_NOW=1 2 | LV2_PATH=/root/.lv2:/usr/lib/lv2:/mnt/plugins 3 | MOD_DEFAULT_PEDALBOARD=/mnt/pedalboards/default.pedalboard 4 | MOD_DEV_HMI=1 5 | MOD_FACTORY_PEDALBOARDS_DIR=/mnt/pedalboards 6 | MOD_KEYS_PATH=/root/keys/ 7 | MOD_MODEL_CPU=x86_64 8 | MOD_MODEL_TYPE=live-usb:x86_64 9 | SNDFILE_JACKPLAY_AUTOCONNECT=mod-host:monitor-in_%d 10 | 11 | MOD_DEVICE_WEBSERVER_PORT=8888 12 | MOD_FILE_MANAGER_PORT=8081 13 | MOD_HOST_SOCKET_PORT=5555 14 | -------------------------------------------------------------------------------- /mod-os/config/jack-internal-session.conf: -------------------------------------------------------------------------------- 1 | # config for mod-live-usb 2 | l mod-host mod-host 5555 3 | l mod-peakmeter mod-peakmeter container 4 | -------------------------------------------------------------------------------- /mod-os/overlay-files/etc/group: -------------------------------------------------------------------------------- 1 | root:x:0: 2 | systemd-bus-proxy:x:1001: 3 | input:x:1002: 4 | dbus:x:1000:dbus 5 | -------------------------------------------------------------------------------- /mod-os/overlay-files/etc/hostname: -------------------------------------------------------------------------------- 1 | mod-live-audio 2 | -------------------------------------------------------------------------------- /mod-os/overlay-files/etc/hosts: -------------------------------------------------------------------------------- 1 | 127.0.0.1 localhost 2 | 127.0.1.1 mod-live-audio 3 | -------------------------------------------------------------------------------- /mod-os/overlay-files/etc/mod-hardware-descriptor.json: -------------------------------------------------------------------------------- 1 | { 2 | "actuators": [], 3 | "addressing_pages": 0, 4 | "architecture": "x86_64", 5 | "bin-compat": "x86_64", 6 | "codec_truebypass": false, 7 | "factory_pedalboards": true, 8 | "has_noisegate": false, 9 | "hmi_actuator_group_prefix": false, 10 | "hmi_bank_navigation": false, 11 | "hmi_eeprom": false, 12 | "hmi_set_master_vol": false, 13 | "hmi_set_pb_name": false, 14 | "hmi_set_ss_name": false, 15 | "hmi_show_empty_pages": false, 16 | "hmi_subpages": false, 17 | "name": "Live-USB", 18 | "platform": "live-usb", 19 | "swapped_audio_channels": false 20 | } 21 | -------------------------------------------------------------------------------- /mod-os/overlay-files/etc/passwd: -------------------------------------------------------------------------------- 1 | root:x:0:0:root:/root:/bin/bash 2 | dbus:x:1000:1000:DBus messagebus user:/var/run/dbus:/bin/false 3 | systemd-bus-proxy:x:1001:1001:Proxy D-Bus messages to/from a bus:/:/bin/false 4 | -------------------------------------------------------------------------------- /mod-os/overlay-files/etc/shadow: -------------------------------------------------------------------------------- 1 | root:$1$K7o4AAj0$d1PtC.ZL0/3ZbNjqTdPSa1:10933:0:99999:7::: 2 | dbus:*::::::: 3 | systemd-bus-proxy:*::::::: 4 | -------------------------------------------------------------------------------- /mod-os/overlay-files/mod-ui.css: -------------------------------------------------------------------------------- 1 | /* custom css for live-mod */ 2 | 3 | /* global */ 4 | #mod-bank, 5 | #mod-buffersize, 6 | #mod-devices, 7 | #mod-settings { 8 | display: none !important; 9 | } 10 | 11 | /* plugin info */ 12 | .screenshot .beta, 13 | .online-button-href { 14 | display: none !important; 15 | } 16 | 17 | /* addressing dialog */ 18 | .mod-pedal-settings-address .main-form-container .js-type[data-value="/hmi"], 19 | .mod-pedal-settings-address .main-form-container .js-type[data-value="/cc"] { 20 | display: none !important; 21 | } 22 | .mod-pedal-settings-address .main-form-container { 23 | padding-bottom: 10px; 24 | } 25 | .mod-pedal-settings-address .main-form-container .js-type { 26 | min-width: 80px; 27 | } 28 | 29 | /* pedalboards */ 30 | #pedalboards-library a { 31 | display: none !important; 32 | } 33 | #pedalboards-library header .form-group .form-control { 34 | width: 400px !important; 35 | } 36 | 37 | #mod-transport-window { 38 | right: '325px' !important; 39 | } 40 | -------------------------------------------------------------------------------- /mod-os/overlay-files/mod-ui.js: -------------------------------------------------------------------------------- 1 | /* custom js for live-mod */ 2 | 3 | $('document').ready(function() { 4 | // network and controller ping times 5 | $('#mod-status').show().statusTooltip('updatePosition') 6 | 7 | // xrun counter 8 | $('#mod-xruns').show() 9 | 10 | // CPU speed and temperature 11 | $('#mod-cpu-stats').show() 12 | 13 | // transport parameters 14 | $('#mod-transport-window').css({ 15 | right: '325px' 16 | }) 17 | }); 18 | -------------------------------------------------------------------------------- /mod-os/overlay-files/system/browsepy.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=browsepy 3 | After=jack2.service 4 | 5 | [Service] 6 | Type=simple 7 | EnvironmentFile=/mnt/config/environment.sh 8 | ExecStartPre=/usr/bin/mkdir -p "/data/user-files/Audio Loops" 9 | ExecStartPre=/usr/bin/mkdir -p "/data/user-files/Audio Recordings" 10 | ExecStartPre=/usr/bin/mkdir -p "/data/user-files/Audio Samples" 11 | ExecStartPre=/usr/bin/mkdir -p "/data/user-files/Audio Tracks" 12 | ExecStartPre=/usr/bin/mkdir -p "/data/user-files/MIDI Clips" 13 | ExecStartPre=/usr/bin/mkdir -p "/data/user-files/MIDI Songs" 14 | ExecStartPre=/usr/bin/mkdir -p "/data/user-files/Reverb IRs" 15 | ExecStartPre=/usr/bin/mkdir -p "/data/user-files/Speaker Cabinets IRs" 16 | ExecStartPre=/usr/bin/mkdir -p "/data/user-files/Hydrogen Drumkits" 17 | ExecStartPre=/usr/bin/mkdir -p "/data/user-files/SF2 Instruments" 18 | ExecStartPre=/usr/bin/mkdir -p "/data/user-files/SFZ Instruments" 19 | ExecStartPre=/usr/bin/mkdir -p "/data/user-files/Aida DSP Models" 20 | ExecStartPre=/usr/bin/mkdir -p "/data/user-files/NAM Models" 21 | ExecStart=/usr/bin/browsepy --directory /data/user-files --upload /data/user-files --removable /data/user-files 0.0.0.0 ${MOD_FILE_MANAGER_PORT} 22 | Restart=always 23 | User=root 24 | Group=root 25 | StandardOutput=journal+console 26 | StandardError=journal+console 27 | SyslogIdentifier=browsepy 28 | 29 | [Install] 30 | WantedBy=multi-user.target 31 | -------------------------------------------------------------------------------- /mod-os/overlay-files/system/default.target: -------------------------------------------------------------------------------- 1 | /lib/systemd/system/multi-user.target -------------------------------------------------------------------------------- /mod-os/overlay-files/system/jack2.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=JACK Audio Connection Kit Daemon 3 | After=sound.target 4 | 5 | [Service] 6 | Type=notify 7 | EnvironmentFile=/mnt/config/environment.sh 8 | EnvironmentFile=/mnt/config/soundcard.sh 9 | LimitRTPRIO=95 10 | LimitRTTIME=infinity 11 | LimitMEMLOCK=infinity 12 | CPUSchedulingPolicy=fifo 13 | CPUSchedulingPriority=70 14 | # ExecStartPre=/usr/bin/ls /dev/snd 15 | # ExecStartPre=/usr/bin/cat /proc/asound/cards 16 | # ExecStartPre=/usr/bin/aplay -l 17 | # ExecStartPre=/usr/bin/echo ${DRIVER} ${DRIVERARGS} 18 | ExecStart=/usr/bin/jackd -R -P 80 -S -t 200 -C /mnt/config/jack-internal-session.conf -d ${DRIVER} ${DRIVERARGS1} ${DRIVERARGS2} ${DRIVERARGS3} ${DRIVERARGS4} ${DRIVERARGS5} ${DRIVERARGS6} 19 | Restart=always 20 | User=root 21 | Group=root 22 | KillSignal=SIGKILL 23 | Nice=-19 24 | OOMScoreAdjust=-1000 25 | IOSchedulingClass=realtime 26 | IOSchedulingPriority=0 27 | # Environment=MOD_LOG=1 28 | StandardOutput=journal+console 29 | StandardError=journal+console 30 | SyslogIdentifier=jack2 31 | 32 | [Install] 33 | WantedBy=multi-user.target 34 | -------------------------------------------------------------------------------- /mod-os/overlay-files/system/mod-ui.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=MOD Web Server 3 | After=jack2.service 4 | 5 | [Service] 6 | Type=simple 7 | EnvironmentFile=/mnt/config/environment.sh 8 | ExecStart=/usr/bin/python3 /usr/bin/mod-ui 9 | Restart=always 10 | User=root 11 | Group=root 12 | Nice=-17 13 | # Environment=MOD_LOG=1 14 | StandardOutput=journal+console 15 | StandardError=journal+console 16 | SyslogIdentifier=mod-ui 17 | 18 | [Install] 19 | WantedBy=multi-user.target 20 | -------------------------------------------------------------------------------- /mod-os/overlay-files/system/multi-user.target.wants/browsepy.service: -------------------------------------------------------------------------------- 1 | ../browsepy.service -------------------------------------------------------------------------------- /mod-os/overlay-files/system/multi-user.target.wants/jack2.service: -------------------------------------------------------------------------------- 1 | ../jack2.service -------------------------------------------------------------------------------- /mod-os/overlay-files/system/multi-user.target.wants/mod-ui.service: -------------------------------------------------------------------------------- 1 | ../mod-ui.service -------------------------------------------------------------------------------- /mod-os/overlay-files/tmpfiles.d/legacy.conf: -------------------------------------------------------------------------------- 1 | # This file is part of systemd. 2 | # 3 | # systemd is free software; you can redistribute it and/or modify it 4 | # under the terms of the GNU Lesser General Public License as published by 5 | # the Free Software Foundation; either version 2.1 of the License, or 6 | # (at your option) any later version. 7 | 8 | # See tmpfiles.d(5) for details 9 | 10 | # needed for network.service 11 | d /run/network 0755 root root - 12 | -------------------------------------------------------------------------------- /mod-os/overlay-files/tmpfiles.d/systemd.conf: -------------------------------------------------------------------------------- 1 | # This file is part of systemd. 2 | # 3 | # systemd is free software; you can redistribute it and/or modify it 4 | # under the terms of the GNU Lesser General Public License as published by 5 | # the Free Software Foundation; either version 2.1 of the License, or 6 | # (at your option) any later version. 7 | 8 | # See tmpfiles.d(5) for details 9 | 10 | d /run/user 0755 root root - 11 | 12 | d /run/systemd/ask-password 0755 root root - 13 | d /run/systemd/seats 0755 root root - 14 | d /run/systemd/sessions 0755 root root - 15 | d /run/systemd/users 0755 root root - 16 | d /run/systemd/machines 0755 root root - 17 | d /run/systemd/shutdown 0755 root root - 18 | 19 | d /run/log 0755 root root - 20 | 21 | d /var/lib/systemd 0755 root root - 22 | 23 | d /var/empty 0755 root root - 24 | d /var/lib/misc 0755 root root - 25 | -------------------------------------------------------------------------------- /mod-os/overlay-files/tmpfiles.d/tmp.conf: -------------------------------------------------------------------------------- 1 | # This file is part of systemd. 2 | # 3 | # systemd is free software; you can redistribute it and/or modify it 4 | # under the terms of the GNU Lesser General Public License as published by 5 | # the Free Software Foundation; either version 2.1 of the License, or 6 | # (at your option) any later version. 7 | 8 | # See tmpfiles.d(5) for details 9 | 10 | # Clear tmp directories separately, to make them easier to override 11 | v /tmp 1777 root root - 12 | v /var/tmp 1777 root root - 13 | 14 | # Exclude namespace mountpoints created with PrivateTmp=yes 15 | x /tmp/systemd-private-%b-* 16 | X /tmp/systemd-private-%b-*/tmp 17 | x /var/tmp/systemd-private-%b-* 18 | X /var/tmp/systemd-private-%b-*/tmp 19 | -------------------------------------------------------------------------------- /mod-os/overlay-files/tmpfiles.d/x11.conf: -------------------------------------------------------------------------------- 1 | # This file is part of systemd. 2 | # 3 | # systemd is free software; you can redistribute it and/or modify it 4 | # under the terms of the GNU Lesser General Public License as published by 5 | # the Free Software Foundation; either version 2.1 of the License, or 6 | # (at your option) any later version. 7 | 8 | # This file is purposefully empty - MOD does not use X11! 9 | -------------------------------------------------------------------------------- /mod-os/start-dummy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | cd $(dirname ${0}) 6 | 7 | # verify soundcard is valid 8 | if [ ! -e /proc/asound/Dummy ]; then 9 | echo "error: can't find Dummy soundcard" 10 | exit 1 11 | fi 12 | # sudo modprobe snd-dummy hrtimer=1 pcm_devs=1 pcm_substreams=1 13 | 14 | exec bash ./start.sh Dummy 15 | -------------------------------------------------------------------------------- /offline-render/.dockerignore: -------------------------------------------------------------------------------- 1 | .gitignore 2 | build.sh 3 | output 4 | rootfs.ext2 5 | -------------------------------------------------------------------------------- /offline-render/.gitignore: -------------------------------------------------------------------------------- 1 | /output/ 2 | /plugins/ 3 | /rootfs/ 4 | /rootfs.ext2 5 | -------------------------------------------------------------------------------- /offline-render/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | LABEL maintainer="Filipe Coelho " 3 | 4 | # environment setup 5 | ENV LANG en_US.UTF-8 6 | ENV LD_BIND_NOW 1 7 | ENV LV2_PATH /root/.lv2:/usr/lib/lv2 8 | ENV MOD_DATA_DIR=/root/data 9 | ENV MOD_LOG 1 10 | ENV MOD_MODEL_CPU x86_64 11 | ENV MOD_MODEL_TYPE offline-render:x86_64 12 | 13 | # base rootfs 14 | ADD rootfs/ / 15 | 16 | # plugins 17 | RUN mkdir /root/.lv2 18 | ADD plugins/ /root/.lv2/ 19 | 20 | # extra files 21 | ADD files/jack-internal-session.conf /etc/ 22 | ADD files/run.sh /root/ 23 | RUN mkdir /root/output 24 | RUN touch /data/using-256-frames 25 | 26 | # setup user 27 | USER root 28 | WORKDIR /root 29 | 30 | # CMD 31 | CMD ["/root/run.sh"] 32 | # CMD ["bash"] 33 | -------------------------------------------------------------------------------- /offline-render/README.md: -------------------------------------------------------------------------------- 1 | This folder contains a setup for a docker container running the MOD OS. 2 | It converts the rootfs generated by buildroot and integrates the plugins built using mod-plugin-builder. 3 | The result is a container with the OS/system identical to a MOD unit, including jackd, mod-host and mod-ui. 4 | 5 | ## Instructions 6 | 7 | 1. Build `mod-os` and `plugins` from mod-live-usb, or alternatively grab [GitHub action builds](https://github.com/moddevices/mod-live-usb/actions/workflows/build.yml) (plugin-bundles and workdir-mod-os) 8 | 2. The file `rootfs.ext2` should be placed on this folder (where this readme lives), this is automatically done if building `mod-os` locally 9 | 3. Build `plugins` locally or place the `plugin-bundles` actions downloaded content in ../plugins/bundles relative to this readme 10 | 4. With the needed files in place, run `./build.sh` to generate the docker image used for offline rendering 11 | 5. Run `./run.sh` to start a volatile image instance, which will auto-delete itself after use 12 | 6. Place any needed files in the `./output` folder, relative to this readme. This will be accessible inside the docker instance as `/root/output` 13 | 7. Send mod-host commands to port 5555 (unix socket), ending with "freewheeling" (see [notes.txt](notes.txt) for a few examples) 14 | 8. Once the recording is finished, the docker image instance stops automatically. Find any generated files inside the same `./output` folder 15 | -------------------------------------------------------------------------------- /offline-render/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ####################################################################################################################### 4 | # exit if any command fails 5 | 6 | set -e 7 | 8 | cd $(dirname ${0}) 9 | 10 | ####################################################################################################################### 11 | # environment variables 12 | 13 | WORKDIR=${WORKDIR:=$(realpath $(pwd)/../toolchain/mod-workdir)} 14 | 15 | ####################################################################################################################### 16 | # fetch rootfs.ext2 image 17 | 18 | if [ ! -e rootfs.ext2 ]; then 19 | ln -s ${WORKDIR}/x86_64/images/rootfs.ext2 rootfs.ext2 20 | fi 21 | 22 | ####################################################################################################################### 23 | # fetch plugins 24 | 25 | mkdir -p plugins 26 | rsync --delete --links --recursive --update ../plugins/bundles/ plugins/ 27 | 28 | ####################################################################################################################### 29 | # mount rootfs 30 | 31 | mkdir -p rootfs 32 | 33 | if [ ! -e rootfs/linuxrc ]; then 34 | sudo mount rootfs.ext2 rootfs 35 | sudo chmod 755 rootfs/lost+found 36 | sudo chmod 644 rootfs/usr/lib/core 37 | fi 38 | 39 | ####################################################################################################################### 40 | # create docker image 41 | 42 | docker build -t mpb-offline-render . 43 | 44 | ####################################################################################################################### 45 | -------------------------------------------------------------------------------- /offline-render/files/jack-internal-session.conf: -------------------------------------------------------------------------------- 1 | # config for mod-offline-render 2 | l mod-host mod-host 5555 3 | -------------------------------------------------------------------------------- /offline-render/files/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ####################################################################################################################### 4 | # exit if any command fails 5 | 6 | set -e 7 | 8 | ####################################################################################################################### 9 | # startup jackd 10 | 11 | jackd -r -C /etc/jack-internal-session.conf -d dummy -r 48000 -p 256 & 12 | jackd_pid=$! 13 | 14 | ####################################################################################################################### 15 | # wait for jack to start 16 | 17 | jack_wait -w -t 5 18 | 19 | ####################################################################################################################### 20 | # TESTING PURPOSES ONLY, DO NOT ENABLE IN PRODUCTION 21 | 22 | # python3 /usr/bin/mod-ui & 23 | # mod_ui_pid=$? 24 | 25 | ####################################################################################################################### 26 | # startup jack_capture, will wait for freewheel mode to start recording 27 | 28 | jack_capture --disable-meter --hide-buffer-usage -jf --recording-time 60 /root/output/output.wav 29 | 30 | ####################################################################################################################### 31 | # stop jackd 32 | 33 | # kill -9 ${mod_ui_pid} 34 | kill -9 ${jackd_pid} 35 | 36 | ####################################################################################################################### 37 | -------------------------------------------------------------------------------- /offline-render/notes.txt: -------------------------------------------------------------------------------- 1 | # See https://github.com/moddevices/mod-host#commands-or-protocol for list of commands 2 | # see also `lv2ls` and `lv2info` CLI tools 3 | 4 | # check if things are working 5 | echo "cpu_load" | nc localhost 5555 -W 1 && echo 6 | 7 | # add audiofile plugin 8 | echo "add http://kxstudio.sf.net/carla/plugins/audiofile 0" | nc localhost 5555 -W 1 && echo 9 | 10 | # load audio file (NOTE: adjust filename as needed) 11 | echo "patch_set 0 http://kxstudio.sf.net/carla/file/audio /root/output/nyan.wav" | nc localhost 5555 -W 1 && echo 12 | 13 | # set audio file to not loop and sync with host time 14 | echo "param_set 0 loop_mode 0" | nc localhost 5555 -W 1 && echo 15 | echo "param_set 0 host_sync 1" | nc localhost 5555 -W 1 && echo 16 | 17 | # add fx plugin (NOTE: this is a mono plugin, added twice for stereo FX) 18 | echo "add http://moddevices.com/plugins/caps/AmpVTS 1" | nc localhost 5555 -W 1 && echo 19 | echo "add http://moddevices.com/plugins/caps/AmpVTS 2" | nc localhost 5555 -W 1 && echo 20 | 21 | # adjust plugin parameters 22 | echo "param_set 1 over 2" | nc localhost 5555 -W 1 && echo 23 | echo "param_set 2 over 2" | nc localhost 5555 -W 1 && echo 24 | 25 | echo "param_set 1 tonestack 8" | nc localhost 5555 -W 1 && echo 26 | echo "param_set 2 tonestack 8" | nc localhost 5555 -W 1 && echo 27 | 28 | # add zeroconvolv plugin 29 | echo "add http://gareus.org/oss/lv2/zeroconvolv#CfgStereo 3" | nc localhost 5555 -W 1 && echo 30 | 31 | # load IR file in zeroconvolv 32 | echo "patch_set 3 http://gareus.org/oss/lv2/zeroconvolv#ir /root/output/ir.wav" | nc localhost 5555 -W 1 && echo 33 | 34 | # connect audio file ports to fx ports 35 | echo "connect effect_0:lv2_audio_out_1 effect_1:in" | nc localhost 5555 -W 1 && echo 36 | echo "connect effect_0:lv2_audio_out_2 effect_2:in" | nc localhost 5555 -W 1 && echo 37 | 38 | # connect fx ports to output ports 39 | echo "connect effect_1:out mod-monitor:in_1" | nc localhost 5555 -W 1 && echo 40 | echo "connect effect_2:out mod-monitor:in_2" | nc localhost 5555 -W 1 && echo 41 | 42 | # start recording 43 | echo "feature_enable freewheeling 2" | nc localhost 5555 -W 1 && echo 44 | -------------------------------------------------------------------------------- /offline-render/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ####################################################################################################################### 4 | # exit if any command fails 5 | 6 | set -e 7 | 8 | cd $(dirname ${0}) 9 | 10 | ####################################################################################################################### 11 | # create output directory 12 | 13 | mkdir -p output 14 | 15 | ####################################################################################################################### 16 | # run container 17 | 18 | docker run -ti --rm -v $(pwd)/output:/root/output -p 5555:5555 -p 5556:5556 -p 8080:80 mpb-offline-render:latest 19 | 20 | ####################################################################################################################### 21 | -------------------------------------------------------------------------------- /pedalboards/CV_GEN_Drummachi.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/CV_GEN_Drummachi.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/CV_GEN_Drummachi.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/CV_INST_Classic_.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/CV_INST_Classic_.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/CV_INST_Classic_.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/DRM_Filt_Glitch_.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/DRM_Filt_Glitch_.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/DRM_Filt_Glitch_.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/DRM_Filter_Delay.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/DRM_Filter_Delay.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/DRM_Filter_Delay.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/FX_MDA_Vocoder.pedalboard/addressings.json: -------------------------------------------------------------------------------- 1 | { 2 | "/hmi/knob1": [ 3 | { 4 | "instance": "/graph/Vocoder", 5 | "tempo": false, 6 | "maximum": 6, 7 | "label": "Preset", 8 | "steps": 33, 9 | "page": 0, 10 | "port": ":presets", 11 | "dividers": null, 12 | "group": null, 13 | "minimum": -1.0 14 | } 15 | ], 16 | "/hmi/knob2": [], 17 | "/cv/graph/cv_capture_2": [], 18 | "/cv/graph/cv_capture_1": [], 19 | "/bpm": [], 20 | "/cv/graph/cv_exp_pedal": [], 21 | "/hmi/potentiometer6": [ 22 | { 23 | "instance": "/graph/Vocoder", 24 | "tempo": false, 25 | "maximum": 100.0, 26 | "label": "Hi Thru", 27 | "steps": 33, 28 | "page": 0, 29 | "port": "hi_thru", 30 | "dividers": null, 31 | "group": null, 32 | "minimum": 0.0 33 | } 34 | ], 35 | "/hmi/potentiometer7": [], 36 | "/hmi/potentiometer4": [ 37 | { 38 | "instance": "/graph/Vocoder", 39 | "tempo": false, 40 | "maximum": 100.0, 41 | "label": "Hi Band", 42 | "steps": 33, 43 | "page": 0, 44 | "port": "hi_band", 45 | "dividers": null, 46 | "group": null, 47 | "minimum": 0.0 48 | } 49 | ], 50 | "/hmi/potentiometer5": [ 51 | { 52 | "instance": "/graph/Vocoder", 53 | "tempo": false, 54 | "maximum": 20.0, 55 | "label": "Output", 56 | "steps": 33, 57 | "page": 0, 58 | "port": "output", 59 | "dividers": null, 60 | "group": null, 61 | "minimum": -20.0 62 | } 63 | ], 64 | "/hmi/potentiometer2": [ 65 | { 66 | "instance": "/graph/Vocoder", 67 | "tempo": false, 68 | "maximum": 100.0, 69 | "label": "Fltr Q", 70 | "steps": 33, 71 | "page": 0, 72 | "port": "filter_q", 73 | "dividers": null, 74 | "group": null, 75 | "minimum": 0.0 76 | } 77 | ], 78 | "/hmi/potentiometer3": [ 79 | { 80 | "instance": "/graph/Vocoder", 81 | "tempo": false, 82 | "maximum": 1600.0, 83 | "label": "Mid Frq", 84 | "steps": 33, 85 | "page": 0, 86 | "port": "mid_freq", 87 | "dividers": null, 88 | "group": null, 89 | "minimum": 200.0 90 | } 91 | ], 92 | "/hmi/group1": [], 93 | "/hmi/potentiometer1": [ 94 | { 95 | "instance": "/graph/Vocoder", 96 | "tempo": false, 97 | "maximum": 10000.0, 98 | "label": "Envelope", 99 | "steps": 33, 100 | "page": 0, 101 | "port": "envelope", 102 | "dividers": null, 103 | "group": null, 104 | "minimum": 14.0 105 | } 106 | ], 107 | "/hmi/footswitch1": [ 108 | { 109 | "instance": "/graph/Vocoder", 110 | "tempo": false, 111 | "maximum": 1.0, 112 | "label": "Qlty", 113 | "steps": 33, 114 | "page": 0, 115 | "port": "quality", 116 | "dividers": null, 117 | "group": null, 118 | "minimum": 0.0 119 | } 120 | ], 121 | "/hmi/group3": [], 122 | "/hmi/footswitch3": [ 123 | { 124 | "instance": "/graph/xfade", 125 | "tempo": false, 126 | "maximum": 1.0, 127 | "label": "Internal Synth", 128 | "steps": 33, 129 | "page": 0, 130 | "port": ":bypass", 131 | "dividers": null, 132 | "group": null, 133 | "minimum": 0.0 134 | } 135 | ], 136 | "/hmi/footswitch2": [ 137 | { 138 | "instance": "/graph/Vocoder", 139 | "tempo": false, 140 | "maximum": 1.0, 141 | "label": "Carrier In", 142 | "steps": 33, 143 | "page": 0, 144 | "port": "mod_in", 145 | "dividers": null, 146 | "group": null, 147 | "minimum": 0.0 148 | } 149 | ], 150 | "/hmi/footswitch4": [ 151 | { 152 | "instance": "/graph/xfade_1", 153 | "tempo": false, 154 | "maximum": 1.0, 155 | "label": "Stereo Input", 156 | "steps": 33, 157 | "page": 0, 158 | "port": ":bypass", 159 | "dividers": null, 160 | "group": null, 161 | "minimum": 0.0 162 | } 163 | ], 164 | "/hmi/potentiometer8": [], 165 | "/hmi/group2": [] 166 | } -------------------------------------------------------------------------------- /pedalboards/FX_MDA_Vocoder.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/FX_MDA_Vocoder.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/FX_MDA_Vocoder.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/FX_Muff_Screamer.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/FX_Muff_Screamer.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/FX_Muff_Screamer.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/FX_Paranoia_and_.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/FX_Paranoia_and_.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/FX_Paranoia_and_.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/FX_TubeDriver_an.pedalboard/addressings.json: -------------------------------------------------------------------------------- 1 | { 2 | "/hmi/knob1": [], 3 | "/hmi/knob2": [ 4 | { 5 | "instance": "/graph/_timray_", 6 | "tempo": false, 7 | "maximum": 1.0, 8 | "label": "TRIM", 9 | "steps": 65, 10 | "page": 0, 11 | "port": "TRIM", 12 | "dividers": null, 13 | "group": null, 14 | "minimum": 0.0 15 | } 16 | ], 17 | "/cv/graph/cv_capture_2": [], 18 | "/cv/graph/cv_capture_1": [], 19 | "/bpm": [], 20 | "/cv/graph/cv_exp_pedal": [], 21 | "/hmi/potentiometer6": [ 22 | { 23 | "instance": "/graph/_timray_", 24 | "tempo": false, 25 | "maximum": 1.0, 26 | "label": "VOLUME", 27 | "steps": 33, 28 | "page": 0, 29 | "port": "VOLUME", 30 | "dividers": null, 31 | "group": null, 32 | "minimum": 0.0 33 | } 34 | ], 35 | "/hmi/potentiometer7": [ 36 | { 37 | "instance": "/graph/_timray_", 38 | "tempo": false, 39 | "maximum": 1.0, 40 | "label": "TREBLE", 41 | "steps": 33, 42 | "page": 0, 43 | "port": "TREBLE", 44 | "dividers": null, 45 | "group": null, 46 | "minimum": 0.0 47 | } 48 | ], 49 | "/hmi/potentiometer4": [ 50 | { 51 | "instance": "/graph/_bajatubedriver_", 52 | "tempo": false, 53 | "maximum": 1.0, 54 | "label": "VOLUME", 55 | "steps": 33, 56 | "page": 0, 57 | "port": "VOLUME", 58 | "dividers": null, 59 | "group": null, 60 | "minimum": 0.0 61 | } 62 | ], 63 | "/hmi/potentiometer5": [ 64 | { 65 | "instance": "/graph/_timray_", 66 | "tempo": false, 67 | "maximum": 1.0, 68 | "label": "GAIN", 69 | "steps": 33, 70 | "page": 0, 71 | "port": "GAIN", 72 | "dividers": null, 73 | "group": null, 74 | "minimum": 0.0 75 | } 76 | ], 77 | "/hmi/potentiometer2": [ 78 | { 79 | "instance": "/graph/xfade", 80 | "tempo": false, 81 | "maximum": 1.0, 82 | "label": "Mix", 83 | "steps": 33, 84 | "page": 0, 85 | "port": "xfade", 86 | "dividers": null, 87 | "group": null, 88 | "minimum": -1.0 89 | } 90 | ], 91 | "/hmi/potentiometer3": [ 92 | { 93 | "instance": "/graph/_bajatubedriver_", 94 | "tempo": false, 95 | "maximum": 1.0, 96 | "label": "DRIVE", 97 | "steps": 33, 98 | "page": 0, 99 | "port": "DRIVE", 100 | "dividers": null, 101 | "group": null, 102 | "minimum": 0.0 103 | } 104 | ], 105 | "/hmi/group1": [], 106 | "/hmi/potentiometer1": [ 107 | { 108 | "instance": "/graph/_bajatubedriver_", 109 | "tempo": false, 110 | "maximum": 1.0, 111 | "label": "TONE", 112 | "steps": 33, 113 | "page": 0, 114 | "port": "TONE", 115 | "dividers": null, 116 | "group": null, 117 | "minimum": 0.0 118 | } 119 | ], 120 | "/hmi/footswitch1": [ 121 | { 122 | "instance": "/graph/xfade", 123 | "tempo": false, 124 | "maximum": 1.0, 125 | "label": "FX Chain", 126 | "steps": 33, 127 | "page": 0, 128 | "port": ":bypass", 129 | "dividers": null, 130 | "group": null, 131 | "minimum": 0.0 132 | } 133 | ], 134 | "/hmi/group3": [], 135 | "/hmi/footswitch3": [ 136 | { 137 | "instance": "/graph/_timray_", 138 | "tempo": false, 139 | "maximum": 1.0, 140 | "label": "Timray", 141 | "steps": 33, 142 | "page": 0, 143 | "port": ":bypass", 144 | "dividers": null, 145 | "group": null, 146 | "minimum": 0.0 147 | } 148 | ], 149 | "/hmi/footswitch2": [ 150 | { 151 | "instance": "/graph/_bajatubedriver_", 152 | "tempo": false, 153 | "maximum": 1.0, 154 | "label": "Baja TD", 155 | "steps": 33, 156 | "page": 0, 157 | "port": ":bypass", 158 | "dividers": null, 159 | "group": null, 160 | "minimum": 0.0 161 | } 162 | ], 163 | "/hmi/footswitch4": [ 164 | { 165 | "instance": "/graph/xfade_1", 166 | "tempo": false, 167 | "maximum": 1.0, 168 | "label": "Stereo Input", 169 | "steps": 33, 170 | "page": 0, 171 | "port": ":bypass", 172 | "dividers": null, 173 | "group": null, 174 | "minimum": 0.0 175 | } 176 | ], 177 | "/hmi/potentiometer8": [ 178 | { 179 | "instance": "/graph/_timray_", 180 | "tempo": false, 181 | "maximum": 1.0, 182 | "label": "BASS", 183 | "steps": 33, 184 | "page": 0, 185 | "port": "BASS", 186 | "dividers": null, 187 | "group": null, 188 | "minimum": 0.0 189 | } 190 | ], 191 | "/hmi/group2": [] 192 | } -------------------------------------------------------------------------------- /pedalboards/FX_TubeDriver_an.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/FX_TubeDriver_an.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/FX_TubeDriver_an.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/GTR_Huge_Playabl.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/GTR_Huge_Playabl.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/GTR_Huge_Playabl.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/INST_Acid_Synth-26913.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/INST_Acid_Synth-26913.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/INST_Acid_Synth-26913.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/INST_FM_Synth.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/INST_FM_Synth.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/INST_FM_Synth.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/INST_Kalimba_Chr.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/INST_Kalimba_Chr.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/INST_Kalimba_Chr.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/INST_Panned_Karp-37095.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/INST_Panned_Karp-37095.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/INST_Panned_Karp-37095.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/INST_Piano_EPian.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/INST_Piano_EPian.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/INST_Piano_EPian.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/INST_Voices.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/INST_Voices.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/INST_Voices.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/SYN_Bollie_Mverb.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/SYN_Bollie_Mverb.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/SYN_Bollie_Mverb.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/SYN_Chor_Plate_F.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/SYN_Chor_Plate_F.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/SYN_Chor_Plate_F.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/SYN_Drone_Your_L.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/SYN_Drone_Your_L.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/SYN_Drone_Your_L.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/SYN_Shiro_Delay_-70083.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/SYN_Shiro_Delay_-70083.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/SYN_Shiro_Delay_-70083.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/VOC_Ethereal_Har.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/VOC_Ethereal_Har.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/VOC_Ethereal_Har.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/VOC_Lo_Fi_Shifte.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/VOC_Lo_Fi_Shifte.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/VOC_Lo_Fi_Shifte.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/VOC_Pristine_Har.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix ingen: . 2 | @prefix lv2: . 3 | @prefix pedal: . 4 | @prefix rdfs: . 5 | 6 | 7 | lv2:prototype ingen:GraphPrototype ; 8 | a lv2:Plugin , 9 | ingen:Graph , 10 | pedal:Pedalboard ; 11 | rdfs:seeAlso . 12 | -------------------------------------------------------------------------------- /pedalboards/VOC_Pristine_Har.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/VOC_Pristine_Har.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /pedalboards/default.pedalboard/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix atom: . 2 | @prefix doap: . 3 | @prefix ingen: . 4 | @prefix lv2: . 5 | @prefix pedal: . 6 | 7 | _:b1 8 | ingen:tail ; 9 | ingen:head . 10 | 11 | _:b2 12 | ingen:tail ; 13 | ingen:head . 14 | 15 | 16 | lv2:index 0 ; 17 | lv2:name "Capture 1" ; 18 | lv2:portProperty lv2:connectionOptional ; 19 | lv2:symbol "capture_1" ; 20 | a lv2:AudioPort , 21 | lv2:InputPort . 22 | 23 | 24 | lv2:index 1 ; 25 | lv2:name "Capture 2" ; 26 | lv2:portProperty lv2:connectionOptional ; 27 | lv2:symbol "capture_2" ; 28 | a lv2:AudioPort , 29 | lv2:InputPort . 30 | 31 | 32 | lv2:index 2 ; 33 | lv2:name "Playback 1" ; 34 | lv2:portProperty lv2:connectionOptional ; 35 | lv2:symbol "playback_1" ; 36 | a lv2:AudioPort , 37 | lv2:OutputPort . 38 | 39 | 40 | lv2:index 3 ; 41 | lv2:name "Playback 2" ; 42 | lv2:portProperty lv2:connectionOptional ; 43 | lv2:symbol "playback_2" ; 44 | a lv2:AudioPort , 45 | lv2:OutputPort . 46 | 47 | 48 | ingen:value 0 ; 49 | lv2:index 4 ; 50 | a atom:AtomPort , 51 | lv2:InputPort . 52 | 53 | 54 | lv2:prototype ingen:GraphPrototype ; 55 | doap:name "Default" ; 56 | pedal:screenshot ; 57 | pedal:thumbnail ; 58 | ingen:polyphony 1 ; 59 | lv2:port , 60 | , 61 | , 62 | , 63 | ; 64 | a lv2:Plugin , 65 | ingen:Graph , 66 | pedal:Pedalboard . 67 | -------------------------------------------------------------------------------- /pedalboards/default.pedalboard/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/default.pedalboard/screenshot.png -------------------------------------------------------------------------------- /pedalboards/default.pedalboard/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/pedalboards/default.pedalboard/thumbnail.png -------------------------------------------------------------------------------- /plugins/.dockerignore: -------------------------------------------------------------------------------- 1 | .gitignore 2 | .stamp_built 3 | .stamps 4 | Makefile 5 | build.sh 6 | bundles 7 | docker-run.sh 8 | mod-plugin-builder 9 | -------------------------------------------------------------------------------- /plugins/.gitignore: -------------------------------------------------------------------------------- 1 | .stamp_built 2 | .stamps 3 | bundles 4 | -------------------------------------------------------------------------------- /plugins/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mpb-toolchain 2 | LABEL maintainer="Filipe Coelho " 3 | ENV DEBIAN_FRONTEND noninteractive 4 | ENV USER builder 5 | ENV HOME /home/$USER 6 | 7 | ARG PLAT=generic-x86_64 8 | 9 | # run bootstrap (contained within docker) 10 | RUN ./bootstrap.sh $PLAT && ./.clean-install.sh $PLAT 11 | 12 | # fetch submodules, needed for building plugins 13 | RUN git submodule init && git submodule update 14 | 15 | # extra required packages 16 | RUN sudo apt-get install -qqy libfftw3-single3 libmxml1 liblo7 && \ 17 | sudo apt-get clean 18 | 19 | # rust support 20 | RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | bash -s -- -y --no-modify-path --profile minimal 21 | RUN if test "$PLAT" = "modduo-new"; then \ 22 | ~/.cargo/bin/rustup target add armv7-unknown-linux-gnueabihf; \ 23 | elif test "$PLAT" = "modduox-new"; then \ 24 | ~/.cargo/bin/rustup target add aarch64-unknown-linux-gnu; \ 25 | else \ 26 | ~/.cargo/bin/rustup target add x86_64-unknown-linux-gnu; \ 27 | fi 28 | 29 | # NOTE commit hash value comes from git submodule 30 | ARG MPB_COMMIT_HASH_FOR_PLUGINS=unset 31 | 32 | # update to requested commit 33 | RUN git checkout . && git checkout master && git pull && git checkout $MPB_COMMIT_HASH_FOR_PLUGINS && git submodule update 34 | 35 | # re-run bootstrap in case dependencies need update 36 | RUN ./bootstrap.sh $PLAT && ./.clean-install.sh $PLAT 37 | 38 | # our simple script to build and copy resulting bundles 39 | COPY scripts/build-and-copy-bundles.sh $HOME/build-and-copy-bundles.sh 40 | 41 | CMD ["bash"] 42 | -------------------------------------------------------------------------------- /plugins/Makefile: -------------------------------------------------------------------------------- 1 | 2 | PLAT = $(shell bash -c "source ../.common.env && echo \$$PLAT") 3 | 4 | # list of known good projects 5 | PROJECTS += abgate 6 | PROJECTS += aidadsp-lv2 7 | PROJECTS += amsynth 8 | PROJECTS += artyfx 9 | PROJECTS += bolliedelay 10 | PROJECTS += caps-lv2 11 | PROJECTS += carla-plugins 12 | PROJECTS += chow-centaur 13 | PROJECTS += collisiondrive 14 | PROJECTS += die-plugins 15 | # PROJECTS += distrho-ports 16 | PROJECTS += dpf-plugins 17 | PROJECTS += dragonfly-reverb 18 | PROJECTS += fluidplug 19 | PROJECTS += fomp 20 | PROJECTS += freaked 21 | PROJECTS += guitarix 22 | PROJECTS += guitarix-studiopre 23 | PROJECTS += gxbajatubedriver 24 | PROJECTS += gxbottlerocket 25 | PROJECTS += gxguvnor 26 | PROJECTS += gxhotbox 27 | PROJECTS += gxhyperion 28 | PROJECTS += gxknightfuzz 29 | PROJECTS += gxquack 30 | PROJECTS += gxsaturate 31 | PROJECTS += gxsd1 32 | PROJECTS += gxsd2lead 33 | PROJECTS += gxsfp 34 | PROJECTS += gxslowgear 35 | PROJECTS += gxsupersonic 36 | PROJECTS += gxsvt 37 | PROJECTS += gxswitchlesswah 38 | PROJECTS += gxtimray 39 | PROJECTS += gxtonemachine 40 | PROJECTS += gxuvox 41 | PROJECTS += gxvbass 42 | PROJECTS += gxvintagefuzzmaster 43 | PROJECTS += gxvmk2d 44 | PROJECTS += gxvoodoo 45 | PROJECTS += gxvoxtb 46 | PROJECTS += gxvstb 47 | PROJECTS += infamous-plugins 48 | PROJECTS += invada-lv2 49 | PROJECTS += mod-cv-plugins 50 | # PROJECTS += lsp-plugins-impulsantworten 51 | PROJECTS += lv2-examples 52 | PROJECTS += mod-ams-lv2 53 | PROJECTS += mod-arpeggiator 54 | PROJECTS += mod-audio-mixers 55 | PROJECTS += mod-cabsim-ir-loader 56 | PROJECTS += mod-convolution-loader 57 | PROJECTS += mod-cv-plugins 58 | PROJECTS += mod-distortion 59 | PROJECTS += mod-mda-lv2 60 | PROJECTS += mod-midi-utilities 61 | PROJECTS += mod-pitchshifter 62 | PROJECTS += mod-tal-noisemaker 63 | PROJECTS += mod-utilities 64 | PROJECTS += mod-volume 65 | PROJECTS += modmeter 66 | PROJECTS += modspectre 67 | PROJECTS += notes-lv2 68 | PROJECTS += neural-amp-modeler-lv2 69 | PROJECTS += remaincalm-plugins 70 | PROJECTS += rkrlv2 71 | # PROJECTS += samplv1 72 | PROJECTS += schrammel-ojd 73 | PROJECTS += screcord 74 | PROJECTS += setbfree-mod 75 | PROJECTS += setbfree 76 | PROJECTS += shiro-plugins 77 | PROJECTS += sooperlooper-lv2 78 | PROJECTS += tal-reverb 79 | PROJECTS += tap-lv2 80 | PROJECTS += x42-fat1 81 | PROJECTS += x42-fil4 82 | PROJECTS += x42-mclk 83 | PROJECTS += x42-midifilter 84 | PROJECTS += x42-midigen 85 | PROJECTS += x42-mtc 86 | PROJECTS += x42-stepseq 87 | PROJECTS += x42-tinygain 88 | PROJECTS += x42-xfade 89 | PROJECTS += x42-zconvo 90 | # not in stable/prod, but still useful for many reasons 91 | PROJECTS += crypt 92 | PROJECTS += bolliedelayxt 93 | PROJECTS += dexed-labs 94 | PROJECTS += dm-graindelay 95 | PROJECTS += portal-lv2 96 | PROJECTS += x42-tuna-lv2-labs 97 | # not in stable/prod, not ready no modgui, but I still want it 98 | # PROJECTS += chow-kick 99 | # PROJECTS += distrho-ports-v6 100 | 101 | # FIXME use qemu tricks 102 | ifeq ($(PLAT),modduo-new) 103 | XPLA_COMPAT = true 104 | else ifeq ($(PLAT),modduox-new) 105 | XPLA_COMPAT = true 106 | endif 107 | 108 | ifeq ($(XPLA_COMPAT),true) 109 | PROJECTS += calf 110 | PROJECTS += pitchtracking-series 111 | PROJECTS += zam-plugins 112 | PROJECTS += zynaddsubfx-labs 113 | endif 114 | 115 | # function to convert project name into buildroot var name 116 | BUILDROOT_VAR = $(shell echo $(1) | tr a-z A-Z | tr - _) 117 | 118 | # function to convert project name into stamp filename 119 | PROJECT_STAMP = .stamps/$(PLAT)/$(1)/$($(call BUILDROOT_VAR,$(1))_VERSION) 120 | 121 | # utilities 122 | BLANK = 123 | COMMA = , 124 | SPACE = $(BLANK) $(BLANK) 125 | 126 | # include plugin projects for version and bundle list 127 | include $(foreach PROJECT,$(PROJECTS),mod-plugin-builder/plugins/package/$(PROJECT)/$(PROJECT).mk) 128 | 129 | # list of known good bundles 130 | BUNDLES = $(foreach PROJECT,$(PROJECTS),$($(call BUILDROOT_VAR,$(PROJECT))_BUNDLES)) 131 | 132 | all: $(foreach PROJECT,$(PROJECTS),$(call PROJECT_STAMP,$(PROJECT))) 133 | 134 | define BUILD_PLUGIN 135 | ./docker-run.sh -v $(CURDIR)/bundles/$(PLAT):/opt/mount --rm mpb-plugins-$(PLAT):latest \ 136 | /home/builder/build-and-copy-bundles.sh $(PLAT) $(1) \ 137 | $(subst $(SPACE),$(COMMA),$(filter $(BUNDLES),$($(call BUILDROOT_VAR,$(1))_BUNDLES))) 138 | endef 139 | 140 | .stamps/$(PLAT)/%: # .stamp_built 141 | $(shell mkdir -p $(shell dirname $@) $(CURDIR)/bundles/$(PLAT)) 142 | $(call BUILD_PLUGIN,$(firstword $(subst /, ,$*))) 143 | touch $@ 144 | -------------------------------------------------------------------------------- /plugins/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ####################################################################################################################### 4 | # exit if any command fails 5 | 6 | set -e 7 | 8 | ####################################################################################################################### 9 | # common setup 10 | 11 | cd $(dirname ${0}) 12 | source ../.common.env 13 | 14 | ####################################################################################################################### 15 | # create docker image 16 | 17 | docker build --build-arg=MPB_COMMIT_HASH_FOR_PLUGINS=$(git -C mod-plugin-builder rev-parse HEAD) --build-arg=PLAT=${PLAT} -t mpb-plugins-${PLAT} . 18 | 19 | ####################################################################################################################### 20 | # mark as done 21 | 22 | touch .stamp_built 23 | 24 | ####################################################################################################################### 25 | -------------------------------------------------------------------------------- /plugins/docker-run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # workaround for `docker` not being callable directly from a makefile in some systems 3 | exec docker run $@ 4 | -------------------------------------------------------------------------------- /plugins/scripts/build-and-copy-bundles.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | plat=${1} 6 | buildroot_pkg=${2} 7 | lv2_bundles=${3} 8 | 9 | ./build ${plat} ${buildroot_pkg} 10 | for b in $(echo ${lv2_bundles} | sed 's/,/ /g'); do 11 | cp -rv /home/builder/mod-workdir/${plat}/plugins/${b} /opt/mount/ 12 | done 13 | -------------------------------------------------------------------------------- /rwdata/root/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | -------------------------------------------------------------------------------- /rwdata/root/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/rwdata/root/.gitkeep -------------------------------------------------------------------------------- /rwdata/user-files/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | -------------------------------------------------------------------------------- /rwdata/user-files/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mod-audio/mod-live-usb/a53f2d79c2ae4602012a42e1364063efb4b81f64/rwdata/user-files/.gitkeep -------------------------------------------------------------------------------- /toolchain/.dockerignore: -------------------------------------------------------------------------------- 1 | .gitignore 2 | .stamp_built 3 | build.sh 4 | mod-workdir 5 | -------------------------------------------------------------------------------- /toolchain/.gitignore: -------------------------------------------------------------------------------- 1 | .stamp_built 2 | mod-workdir 3 | -------------------------------------------------------------------------------- /toolchain/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:bookworm 2 | LABEL maintainer="Filipe Coelho " 3 | ENV DEBIAN_FRONTEND noninteractive 4 | 5 | # update and upgrade system 6 | RUN apt-get update && apt-get upgrade -qy && apt-get clean 7 | 8 | # install packages for buildroot 9 | RUN apt-get install -qy locales acl bash bash-completion bc curl cvs git mercurial rsync subversion sudo wget dosfstools && \ 10 | apt-get install -qy bison bundler bzip2 cpio flex gawk gperf gzip help2man nano perl patch python-is-python3 tar texinfo unzip python3-dev python3-setuptools && \ 11 | apt-get install -qy automake binutils build-essential device-tree-compiler premake4 sunxi-tools libtool-bin ncurses-dev jq && \ 12 | apt-get clean 13 | 14 | # install old premake 15 | RUN if test "$(dpkg-architecture -qDEB_TARGET_ARCH)" = "arm64"; then \ 16 | wget http://ports.ubuntu.com/ubuntu-ports/pool/universe/p/premake/premake_3.7-1_arm64.deb && \ 17 | dpkg -i premake_3.7-1_arm64.deb && \ 18 | rm premake_3.7-1_arm64.deb; \ 19 | else \ 20 | wget http://archive.ubuntu.com/ubuntu/pool/universe/p/premake/premake_3.7-1_amd64.deb && \ 21 | dpkg -i premake_3.7-1_amd64.deb && \ 22 | rm premake_3.7-1_amd64.deb; \ 23 | fi 24 | 25 | RUN locale-gen en_US.UTF-8 26 | RUN echo "source /etc/bash_completion" >> $HOME/.bashrc 27 | 28 | # user configurations 29 | ENV USER builder 30 | ENV HOME /home/$USER 31 | 32 | # create user 33 | ARG GROUP_ID=1001 34 | ARG USER_ID=1001 35 | RUN groupadd -g $GROUP_ID -o $USER 36 | RUN useradd -d $HOME -m -G sudo -u $USER_ID -g $GROUP_ID -o $USER 37 | # set user to sudoers (no password required) 38 | RUN echo "$USER ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/99-$USER && chmod 0440 /etc/sudoers.d/99-$USER 39 | 40 | # switch user 41 | USER $USER 42 | WORKDIR $HOME 43 | 44 | # create directory for build 45 | RUN mkdir $HOME/mod-workdir 46 | 47 | # mod-plugin-builder settings 48 | ENV MPB_GIT_URL https://github.com/moddevices/mod-plugin-builder 49 | ENV MPB_GIT_HASH 0a26f578d7de19646f21a3e27eda5cf562f2fa83 50 | 51 | # checkout mod-plugin-builder 52 | RUN git clone $MPB_GIT_URL 53 | WORKDIR mod-plugin-builder 54 | RUN git checkout $MPB_GIT_HASH 55 | 56 | # turn off progress bar 57 | RUN sed -i 's/CT_LOG_PROGRESS_BAR=y/CT_LOG_PROGRESS_BAR=n/' toolchain/*.config 58 | 59 | # CMD 60 | CMD ["bash"] 61 | -------------------------------------------------------------------------------- /toolchain/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ####################################################################################################################### 4 | # exit if any command fails 5 | 6 | set -e 7 | 8 | ####################################################################################################################### 9 | # common setup 10 | 11 | cd $(dirname ${0}) 12 | source ../.common.env 13 | 14 | ####################################################################################################################### 15 | # create docker image for toolchain files 16 | 17 | docker build --build-arg=GROUP_ID=$(id -g) --build-arg=USER_ID=$(id -u) -t mpb-toolchain . 18 | 19 | ####################################################################################################################### 20 | # make sure workdir exists before we try to map it 21 | 22 | mkdir -p ${WORKDIR} 23 | 24 | ####################################################################################################################### 25 | # build the toolchain 26 | 27 | docker run -v ${WORKDIR}:/home/builder/mod-workdir --rm mpb-toolchain:latest ./bootstrap.sh ${PLAT} toolchain 28 | 29 | ####################################################################################################################### 30 | # cleanup crosstool-ng files, which can get quite big 31 | 32 | rm -f ${WORKDIR}/download/crosstool-ng-1.25.0.tar.bz2 33 | 34 | rm -rf ${WORKDIR}/${PLAT}/build/crosstool-ng-1.25.0 35 | mkdir ${WORKDIR}/${PLAT}/build/crosstool-ng-1.25.0 36 | touch ${WORKDIR}/${PLAT}/build/crosstool-ng-1.25.0/.stamp_configured 37 | touch ${WORKDIR}/${PLAT}/build/crosstool-ng-1.25.0/.stamp_built1 38 | touch ${WORKDIR}/${PLAT}/build/crosstool-ng-1.25.0/.stamp_built2 39 | touch ${WORKDIR}/${PLAT}/build/crosstool-ng-1.25.0/.stamp_patched 40 | touch ${WORKDIR}/${PLAT}/build/crosstool-ng-1.25.0/configure 41 | 42 | ####################################################################################################################### 43 | # mark as done 44 | 45 | touch .stamp_built 46 | 47 | ####################################################################################################################### 48 | --------------------------------------------------------------------------------