diff options
-rw-r--r-- | README.md | 13 | ||||
-rw-r--r-- | default.nix | 12 | ||||
-rw-r--r-- | pkgs.nix | 6 | ||||
-rw-r--r-- | web/GNUmakefile | 4 | ||||
-rw-r--r-- | web/default.nix | 50 | ||||
-rw-r--r-- | web/package-lock.json | 198 | ||||
-rw-r--r-- | web/yarn.lock | 18 |
7 files changed, 235 insertions, 66 deletions
diff --git a/README.md b/README.md index bdf8b20..64d32a0 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,8 @@ Then you should be able to run `likely-music` from the command line (in the latt First make sure you have the following prerequisites installed: * Functional Haskell environment, i. e. `ghc` and `cabal-install` -* `yarn` +* `npm` +* `esbuild` * A MIDI to WAV synthesizer * One possibility is fluidsynth: * `fluidsynth` @@ -71,15 +72,13 @@ Then run the following commands: ```bash cd /path/to/likely-music -cd web -yarn install --pure-lockfile -yarn run build:assets -yarn run build:prod +pushd web +make # optionally if you want to avoid relative path problems -export LIKELY_MUSIC_FRONTEND=/path/to/web/dist +export LIKELY_MUSIC_FRONTEND=$(realpath dist) -cd .. +popd cabal v2-build cabal v2-run likely-music-backend ``` diff --git a/default.nix b/default.nix index acf0984..dbbd8ad 100644 --- a/default.nix +++ b/default.nix @@ -1,3 +1,11 @@ -{ pkgs ? import <nixpkgs> {} }: +let + napalmSrc = builtins.fetchTarball { + url = "https://github.com/nix-community/napalm/archive/master.tar.gz"; + }; +in -import ./pkgs.nix { inherit pkgs; } +{ pkgs ? import <nixpkgs> {} +, napalm ? pkgs.callPackage napalmSrc {} +}: + +import ./pkgs.nix { inherit pkgs napalm; } diff --git a/pkgs.nix b/pkgs.nix index c1f6f06..9bbd31f 100644 --- a/pkgs.nix +++ b/pkgs.nix @@ -1,11 +1,13 @@ -{ pkgs }: +{ pkgs, napalm }: rec { # likely-music haskellPackage likely-music-lib = likely-music-backend; likely-music-backend = pkgs.haskellPackages.callPackage ./likely-music-backend.nix { }; - likely-music-frontend = pkgs.callPackage ./web { }; + likely-music-frontend = pkgs.callPackage ./web { + inherit napalm; + }; # executable wrapper around everything with correct paths likely-music = pkgs.runCommand "likely-music" { } '' diff --git a/web/GNUmakefile b/web/GNUmakefile index a1738fa..4b56313 100644 --- a/web/GNUmakefile +++ b/web/GNUmakefile @@ -2,7 +2,7 @@ DIST ?= dist # Change this to "development" for source maps and non-minifyed code NODE_ENV ?= production -# If true, we don't attempt to fetch dependencies via yarn +# If true, we don't attempt to fetch dependencies via npm OFFLINE ?= false ifeq ($(NODE_ENV),production) @@ -26,7 +26,7 @@ $(DIST): mkdir -p $@ node_modules: - $(OFFLINE) || yarn install --frozen-lockfile --prod + $(OFFLINE) || npm install --production --omit=peer --omit=dev $(DIST)/vis-network.min.css: node_modules $(DIST) $(ESBUILD) node_modules/vis-network/dist/dist/vis-network.min.css --outfile=$@ diff --git a/web/default.nix b/web/default.nix index ea3733b..32aa17a 100644 --- a/web/default.nix +++ b/web/default.nix @@ -1,50 +1,30 @@ -{ stdenv, lib, fetchFromGitHub, callPackage, esbuild }: +{ stdenv, lib, esbuild, napalm, nix-gitignore }: let - pkgInfo = lib.importJSON ./package.json; - src = yarn2nix-lib.removePrefixes [ "node_modules" "dist" ] ./.; -# yarn2nixSrc = /home/lukas/src/nix/yarn2nix; - yarn2nixSrc = fetchFromGitHub { - owner = "sternenseemann"; - repo = "yarn2nix"; - rev = "b0825bbe4b40f39763d53ba0044431a44b5f25cf"; - sha256 = "1q8wc5rnb00xwzcqsgb6wfkmymipf2bv1g2i33l5wyadp0hd18cp"; + src = builtins.path { + name = "likely-music-frontend-source"; + path = ./.; + filter = nix-gitignore.gitignoreFilter (builtins.readFile ../.gitignore) ./..; }; - yarn2nix = import yarn2nixSrc { }; - yarn2nix-lib = yarn2nix.nixLib; - deps = yarn2nix-lib.callYarnLock ./yarn.lock { }; - template = yarn2nix-lib.callPackageJson ./package.json { }; - calledTemplate = template (yarn2nix-lib.buildNodeDeps deps); - node_modules = yarn2nix-lib.linkNodeDeps { - inherit (pkgInfo) name; - dependencies = calledTemplate.nodeBuildInputs; - }; - in -stdenv.mkDerivation rec { - pname = pkgInfo.name; - inherit (pkgInfo) version; - inherit src; - - nativeBuildInputs = [ esbuild ]; - - makeFlags = [ - "OFFLINE=true" +napalm.buildPackage src { + nativeBuildInputs = [ + esbuild ]; - NODE_PATH = node_modules; - preBuild = '' - ln -s ${node_modules} node_modules - ''; + npmCommands = "make"; installPhase = '' - mkdir -p $out/share/ - mv dist $out/share/${pname} + runHook preInstall + mkdir -p $out/share + mv dist $out/share/likely-music-frontend + runHook postInstall ''; - meta = calledTemplate.meta // { + meta = { description = "Frontend of likely music, a probabilistic music notation software"; homepage = "https://github.com/sternenseemann/likely-music"; + license = lib.licenses.agpl3Only; }; } diff --git a/web/package-lock.json b/web/package-lock.json new file mode 100644 index 0000000..f11cffc --- /dev/null +++ b/web/package-lock.json @@ -0,0 +1,198 @@ +{ + "name": "likely-music-frontend", + "version": "0.1.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "likely-music-frontend", + "version": "0.1.1", + "license": "AGPL-3.0-only", + "dependencies": { + "immutable": "^3.8.1", + "vis-data": "^6.6.1", + "vis-network": "^7.10.0" + } + }, + "node_modules/@egjs/hammerjs": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz", + "integrity": "sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==", + "peer": true, + "dependencies": { + "@types/hammerjs": "^2.0.36" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@types/hammerjs": { + "version": "2.0.41", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.41.tgz", + "integrity": "sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==", + "peer": true + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "peer": true + }, + "node_modules/immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/keycharm": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/keycharm/-/keycharm-0.3.1.tgz", + "integrity": "sha512-zn47Ti4FJT9zdF+YBBLWJsfKF/fYQHkrYlBeB5Ez5e2PjW7SoIxr43yehAne2HruulIoid4NKZZxO0dHBygCtQ==", + "peer": true + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "peer": true + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vis-data": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/vis-data/-/vis-data-6.6.1.tgz", + "integrity": "sha512-xmujDB2Dzf8T04rGFJ9OP4OA6zRVrz8R9hb0CVKryBrZRCljCga9JjSfgctA8S7wdZu7otDtUIwX4ZOgfV/57w==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/visjs" + }, + "peerDependencies": { + "moment": "^2.24.0", + "uuid": "^7.0.0 || ^8.0.0", + "vis-util": "^4.0.0" + } + }, + "node_modules/vis-network": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/vis-network/-/vis-network-7.10.2.tgz", + "integrity": "sha512-KDx2agbDnaiE0Bye4AcCRqTn5mxzDKhdUNpKkzSn0AOLBmdhNtPGjxAFluAmvFVyiSK5R6Q5KIWdLjeIMu/PAQ==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/visjs" + }, + "peerDependencies": { + "@egjs/hammerjs": "^2.0.0", + "component-emitter": "^1.3.0", + "keycharm": "^0.2.0 || ^0.3.0", + "moment": "^2.24.0", + "timsort": "^0.3.0", + "uuid": "^3.4.0 || ^7.0.0 || ^8.0.0", + "vis-data": "^6.2.1", + "vis-util": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/vis-util": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/vis-util/-/vis-util-4.3.4.tgz", + "integrity": "sha512-hJIZNrwf4ML7FYjs+m+zjJfaNvhjk3/1hbMdQZVnwwpOFJS/8dMG8rdbOHXcKoIEM6U5VOh3HNpaDXxGkOZGpw==", + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/visjs" + } + } + }, + "dependencies": { + "@egjs/hammerjs": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz", + "integrity": "sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==", + "peer": true, + "requires": { + "@types/hammerjs": "^2.0.36" + } + }, + "@types/hammerjs": { + "version": "2.0.41", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.41.tgz", + "integrity": "sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==", + "peer": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "peer": true + }, + "immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=" + }, + "keycharm": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/keycharm/-/keycharm-0.3.1.tgz", + "integrity": "sha512-zn47Ti4FJT9zdF+YBBLWJsfKF/fYQHkrYlBeB5Ez5e2PjW7SoIxr43yehAne2HruulIoid4NKZZxO0dHBygCtQ==", + "peer": true + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "peer": true + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "peer": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "peer": true + }, + "vis-data": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/vis-data/-/vis-data-6.6.1.tgz", + "integrity": "sha512-xmujDB2Dzf8T04rGFJ9OP4OA6zRVrz8R9hb0CVKryBrZRCljCga9JjSfgctA8S7wdZu7otDtUIwX4ZOgfV/57w==", + "requires": {} + }, + "vis-network": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/vis-network/-/vis-network-7.10.2.tgz", + "integrity": "sha512-KDx2agbDnaiE0Bye4AcCRqTn5mxzDKhdUNpKkzSn0AOLBmdhNtPGjxAFluAmvFVyiSK5R6Q5KIWdLjeIMu/PAQ==", + "requires": {} + }, + "vis-util": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/vis-util/-/vis-util-4.3.4.tgz", + "integrity": "sha512-hJIZNrwf4ML7FYjs+m+zjJfaNvhjk3/1hbMdQZVnwwpOFJS/8dMG8rdbOHXcKoIEM6U5VOh3HNpaDXxGkOZGpw==", + "peer": true + } + } +} diff --git a/web/yarn.lock b/web/yarn.lock deleted file mode 100644 index 093f548..0000000 --- a/web/yarn.lock +++ /dev/null @@ -1,18 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -immutable@^3.8.1: - version "3.8.2" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" - integrity sha1-wkOZUUVbs5kT2vKBN28VMOEErfM= - -vis-data@^6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/vis-data/-/vis-data-6.6.1.tgz#2aa52e46c305ad46bb7abe6e7634e2eecd743b15" - integrity sha512-xmujDB2Dzf8T04rGFJ9OP4OA6zRVrz8R9hb0CVKryBrZRCljCga9JjSfgctA8S7wdZu7otDtUIwX4ZOgfV/57w== - -vis-network@^7.10.0: - version "7.10.2" - resolved "https://registry.yarnpkg.com/vis-network/-/vis-network-7.10.2.tgz#b318f1907cf006d9640c4c31a262e0782405a3cf" - integrity sha512-KDx2agbDnaiE0Bye4AcCRqTn5mxzDKhdUNpKkzSn0AOLBmdhNtPGjxAFluAmvFVyiSK5R6Q5KIWdLjeIMu/PAQ== |