From 911451378a5354393560eae86f18464919da63bd Mon Sep 17 00:00:00 2001 From: mitchmindtree Date: Sat, 10 Aug 2024 02:26:25 +1000 Subject: [PATCH 1/5] refactor: Add overlay, do some cleanup --- flake.lock | 34 ------ flake.nix | 192 +++++------------------------- overlay.nix | 46 +++++++ patch/vim-tidal-ghci.patch | 13 -- quark/lib.nix => pkgs/mkQuark.nix | 7 +- pkgs/sclang-with-superdirt.nix | 17 +++ pkgs/superdirt-install.nix | 9 ++ pkgs/superdirt-start.nix | 31 +++++ pkgs/tidal.nix | 9 ++ pkgs/vim-tidal.nix | 47 ++++++++ shell.nix | 21 ++++ 11 files changed, 216 insertions(+), 210 deletions(-) create mode 100644 overlay.nix delete mode 100644 patch/vim-tidal-ghci.patch rename quark/lib.nix => pkgs/mkQuark.nix (98%) create mode 100644 pkgs/sclang-with-superdirt.nix create mode 100644 pkgs/superdirt-install.nix create mode 100644 pkgs/superdirt-start.nix create mode 100644 pkgs/tidal.nix create mode 100644 pkgs/vim-tidal.nix create mode 100644 shell.nix diff --git a/flake.lock b/flake.lock index 1735d42..b727b9a 100644 --- a/flake.lock +++ b/flake.lock @@ -39,7 +39,6 @@ "nixpkgs": "nixpkgs", "superdirt-src": "superdirt-src", "tidal-src": "tidal-src", - "utils": "utils", "vim-tidal-src": "vim-tidal-src", "vowel-src": "vowel-src" } @@ -61,21 +60,6 @@ "type": "github" } }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, "tidal-src": { "flake": false, "locked": { @@ -93,24 +77,6 @@ "type": "github" } }, - "utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1692799911, - "narHash": "sha256-3eihraek4qL744EvQXsK1Ha6C3CR7nnT8X2qWap4RNk=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "f9e7cf818399d17d347f847525c5a5a8032e4e44", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, "vim-tidal-src": { "flake": false, "locked": { diff --git a/flake.nix b/flake.nix index d861428..db6f8cc 100644 --- a/flake.nix +++ b/flake.nix @@ -4,16 +4,13 @@ ''; inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + + # Non-flake source. dirt-samples-src = { url = "github:tidalcycles/dirt-samples/master"; flake = false; }; - utils = { - url = "github:numtide/flake-utils"; - }; - nixpkgs = { - url = "github:NixOS/nixpkgs/nixos-unstable"; - }; superdirt-src = { url = "github:musikinformatik/superdirt/master"; # use `develop` branch as its default? flake = false; @@ -35,176 +32,53 @@ outputs = inputs: let # TODO: We should support darwin (macOS) here, supercollider package # currently lacks support. - utils.supportedSystems = [ + systems = [ "aarch64-linux" "i686-linux" "x86_64-linux" # "aarch64-darwin" # "x86_64-darwin" ]; - utils.eachSupportedSystem = - inputs.utils.lib.eachSystem utils.supportedSystems; - - mkPackages = pkgs: let - quarklib = pkgs.callPackage ./quark/lib.nix {}; - ghcWithTidal = pkgs.haskellPackages.ghcWithPackages (p: [p.tidal]); - in rec { - # SuperCollider quarks that are necessary for Tidal. - dirt-samples = quarklib.mkQuark { - name = "Dirt-Samples"; - src = inputs.dirt-samples-src; - }; - vowel = quarklib.mkQuark { - name = "Vowel"; - src = inputs.vowel-src; - }; - superdirt = quarklib.mkQuark { - name = "SuperDirt"; - src = inputs.superdirt-src; - dependencies = [dirt-samples vowel]; - }; - - # Supercollider with the SC3 plugins used by tidal. - supercollider = pkgs.supercollider-with-plugins.override { - plugins = [pkgs.supercolliderPlugins.sc3-plugins]; - }; - - # A sclang command with superdirt included via conf yaml. - sclang-with-superdirt = pkgs.writeShellApplication { - name = "sclang-with-superdirt"; - runtimeInputs = [supercollider]; - text = '' - ${supercollider}/bin/sclang -l "${superdirt}/sclang_conf.yaml" "$@" - ''; - }; - # A very simple default superdirt start file. - superdirt-start-sc = pkgs.writeText "superdirt-start.sc" "SuperDirt.start;"; + overlays = [ inputs.self.overlays.default ]; - # Run `SuperDirt.start` in supercollider, ready for tidal. - superdirt-start = pkgs.writeShellApplication { - name = "superdirt-start"; - runtimeInputs = [supercollider]; - text = '' - start_script="''${1:-${superdirt-start-sc}}" - - if [ "$start_script" == "-h" ] || [ "$start_script" == "--help" ]; then - echo "Usage: superdirt-start [script]" - echo - echo "Start superdirt, optionally running a custom start script." - echo - echo "Options:" - echo " -h --help Show this screen." - exit - fi - - if [ ! -e "$start_script" ]; then - echo "The script \"$start_script\" does not exist, aborting." - exit 1 - fi - - ${sclang-with-superdirt}/bin/sclang-with-superdirt "$start_script" - ''; - }; - - # Installs SuperDirt under your user's supercollider quarks. - superdirt-install = pkgs.writeShellScriptBin "superdirt-install" '' - ${supercollider}/bin/sclang ${superdirt}/install.scd - ''; - - # Run the tidal interpreter (ghci running BootTidal.hs). - tidal = pkgs.writeShellScriptBin "tidal" '' - ${ghcWithTidal}/bin/ghci -ghci-script ${inputs.tidal-src}/BootTidal.hs - ''; - - # Vim plugin for tidalcycles. - vim-tidal = pkgs.vimUtils.buildVimPluginFrom2Nix { - pname = "vim-tidal"; - version = "master"; - src = inputs.vim-tidal-src; - postInstall = let - # A vimscript file to set Nix defaults for ghci and `BootTidal.hs`. - defaults-file = pkgs.writeText "vim-tidal-defaults.vim" '' - " Prepend defaults provided by Nix packages. - if !exists("g:tidal_ghci") - let g:tidal_ghci = "${ghcWithTidal}/bin/ghci" - endif - if !exists("g:tidal_sclang") - let g:tidal_sclang = "${sclang-with-superdirt}/bin/sclang-with-superdirt" - endif - if !exists("g:tidal_boot_fallback") - let g:tidal_boot_fallback = "${inputs.tidal-src}/BootTidal.hs" - endif - if !exists("g:tidal_sc_boot_fallback") - let g:tidal_sc_boot_fallback = "${superdirt-start-sc}" - endif - ''; - in '' - # Prepend a line to `plugin/tidal.vim` to source the defaults. - mv $out/plugin/tidal.vim $out/plugin/tidal.vim.old - cat ${defaults-file} $out/plugin/tidal.vim.old > $out/plugin/tidal.vim - rm $out/plugin/tidal.vim.old - - # Remove unnecessary files. - rm -r $out/bin - rm $out/Makefile - rm $out/Tidal.ghci - ''; - meta = { - homepage = "https://github.com/tidalcycles/vim-tidal.vim"; - license = pkgs.lib.licenses.mit; - }; + perSystemPkgs = f: + inputs.nixpkgs.lib.genAttrs systems + (system: f (import inputs.nixpkgs { inherit overlays system; })); + in { + overlays = { + tidal = import ./overlay.nix { + inherit (inputs) dirt-samples-src superdirt-src tidal-src vim-tidal-src vowel-src; }; + default = inputs.self.overlays.tidal; }; - overlays = rec { - tidal = final: prev: let - tidalpkgs = mkPackages prev; - in { - inherit (tidalpkgs) superdirt-start superdirt-install tidal sclang-with-superdirt; - vimPlugins = prev.vimPlugins // {inherit (tidalpkgs) vim-tidal;}; - }; - default = tidal; - }; - - mkDevShells = pkgs: tidalpkgs: rec { - # A shell that provides a set of commonly useful packages for tidal. - tidal = pkgs.mkShell { - name = "tidal"; - buildInputs = [ - tidalpkgs.supercollider - tidalpkgs.superdirt-start - tidalpkgs.superdirt-install - tidalpkgs.tidal - tidalpkgs.sclang-with-superdirt - ]; - # Convenient access to a config providing all quarks required for Tidal. - SUPERDIRT_SCLANG_CONF = "${tidalpkgs.superdirt}/sclang_conf.yaml"; - }; - default = tidal; - }; - - templates = rec { + packages = perSystemPkgs(pkgs: { + ghcWithTidal = pkgs.ghcWithTidal; + supercollider = pkgs.supercollider-with-sc3-plugins; + sclang-with-superdirt = pkgs.sclang-with-superdirt; + superdirt-start-sc = pkgs.superdirt-start-sc; + superdirt-start = pkgs.superdirt-start; + superdirt-install = pkgs.superdirt-install; + tidal = pkgs.tidal; + vimPlugins.vim-tidal = pkgs.vimPlugins.vim-tidal; + }); + + devShells = perSystemPkgs(pkgs: { + tidal = pkgs.callPackage ./shell.nix { }; + default = inputs.self.devShells.${pkgs.system}.tidal; + }); + + templates = { tidal-project = { path = ./template; description = '' A standard nix flake template for a Tidal Cycles project. ''; }; - default = tidal-project; + default = inputs.self.templates.tidal-project; }; - mkOutput = system: let - pkgs = inputs.nixpkgs.legacyPackages.${system}; - in rec { - packages = mkPackages pkgs; - devShells = mkDevShells pkgs packages; - formatter = pkgs.alejandra; - }; - - # The output for each system. - systemOutputs = utils.eachSupportedSystem mkOutput; - in - # Merge the outputs and overlays. - systemOutputs // {inherit overlays templates utils;}; + formatter = perSystemPkgs(pkgs: pkgs.nixfmt-rfc-style); + }; } diff --git a/overlay.nix b/overlay.nix new file mode 100644 index 0000000..53ff032 --- /dev/null +++ b/overlay.nix @@ -0,0 +1,46 @@ +{ + dirt-samples-src, + superdirt-src, + tidal-src, + vim-tidal-src, + vowel-src, +}: +final: prev: { + # Short-hand for GHC with the tidal pkg. + ghcWithTidal = prev.haskellPackages.ghcWithPackages (p: [p.tidal]); + # A fn to create a supercollider quark derivation. + mkQuark = prev.callPackage ./pkgs/mkQuark.nix {}; + # The set of required supercollider quarks. + supercolliderQuarks = { + dirt-samples = final.mkQuark { + name = "Dirt-Samples"; + src = dirt-samples-src; + }; + vowel = final.mkQuark { + name = "Vowel"; + src = vowel-src; + }; + superdirt = final.mkQuark { + name = "SuperDirt"; + src = superdirt-src; + dependencies = with final.supercolliderQuarks; [ dirt-samples vowel ]; + }; + }; + # A sclang command with superdirt included via conf yaml. + sclang-with-superdirt = final.callPackage ./pkgs/sclang-with-superdirt.nix { }; + # A very simple default superdirt start file. + superdirt-start-sc = prev.writeText "superdirt-start.sc" "SuperDirt.start;"; + # Run `SuperDirt.start` in supercollider, ready for tidal. + superdirt-start = final.callPackage ./pkgs/superdirt-start.nix { }; + # Installs SuperDirt under your user's supercollider quarks. + superdirt-install = final.callPackage ./pkgs/superdirt-install.nix { }; + # Run the tidal interpreter (ghci running BootTidal.hs). + tidal = final.callPackage ./pkgs/tidal.nix { src = tidal-src; }; + # The vim tidal plugin tweaked for nix. + vimPlugins = prev.vimPlugins // { + vim-tidal = final.callPackage ./pkgs/vim-tidal.nix { + inherit tidal-src; + src = vim-tidal-src; + }; + }; +} diff --git a/patch/vim-tidal-ghci.patch b/patch/vim-tidal-ghci.patch deleted file mode 100644 index c31013b..0000000 --- a/patch/vim-tidal-ghci.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/plugin/tidal.vim b/plugin/tidal.vim -index 51c7e4e..d4b6461 100644 ---- a/plugin/tidal.vim -+++ b/plugin/tidal.vim -@@ -33,7 +33,7 @@ if !exists("g:tidal_flash_duration") - endif - - if !exists("g:tidal_ghci") -- let g:tidal_ghci = "ghci" -+ let g:tidal_ghci = "tidal" - endif - - if filereadable(s:parent_path . "/.dirt-samples") diff --git a/quark/lib.nix b/pkgs/mkQuark.nix similarity index 98% rename from quark/lib.nix rename to pkgs/mkQuark.nix index ba571be..06ce740 100644 --- a/quark/lib.nix +++ b/pkgs/mkQuark.nix @@ -2,7 +2,7 @@ { lib, stdenv, -}: { +}: # A function that, given a Quark source location and its name, creates a # derivation for the quark installed in an expected location. # @@ -17,7 +17,7 @@ # reality is that it might be a directed, acyclic graph. We should treat it # as such and work out if dependencies we require already exist in the link # tree. Use `lib.lists.listDfs` or `lib.lists.toposort`. - mkQuark = { + { src, name, dependencies ? [], @@ -55,5 +55,4 @@ echo "${install-scd}" >> $out/install.scd echo "${sclang-conf-yaml}" >> $out/sclang_conf.yaml ''; - }; -} + } diff --git a/pkgs/sclang-with-superdirt.nix b/pkgs/sclang-with-superdirt.nix new file mode 100644 index 0000000..dedb2bc --- /dev/null +++ b/pkgs/sclang-with-superdirt.nix @@ -0,0 +1,17 @@ +# A sclang command with superdirt included via conf yaml. +{ + supercollider-with-sc3-plugins, + supercolliderQuarks, + writeShellApplication, +}: +let + supercollider = supercollider-with-sc3-plugins; + superdirt = supercolliderQuarks.superdirt; +in +writeShellApplication { + name = "sclang-with-superdirt"; + runtimeInputs = [supercollider-with-sc3-plugins]; + text = '' + ${supercollider}/bin/sclang -l "${superdirt}/sclang_conf.yaml" "$@" + ''; +} diff --git a/pkgs/superdirt-install.nix b/pkgs/superdirt-install.nix new file mode 100644 index 0000000..56508fd --- /dev/null +++ b/pkgs/superdirt-install.nix @@ -0,0 +1,9 @@ +# Installs SuperDirt under your user's supercollider quarks. +{ + supercolliderQuarks, + supercollider-with-sc3-plugins, + writeShellScriptBin, +}: +writeShellScriptBin "superdirt-install" '' + ${supercollider-with-sc3-plugins}/bin/sclang ${supercolliderQuarks.superdirt}/install.scd +'' diff --git a/pkgs/superdirt-start.nix b/pkgs/superdirt-start.nix new file mode 100644 index 0000000..b00bf63 --- /dev/null +++ b/pkgs/superdirt-start.nix @@ -0,0 +1,31 @@ +# Run `SuperDirt.start` in supercollider, ready for tidal. +{ + sclang-with-superdirt, + supercollider-with-sc3-plugins, + superdirt-start-sc, + writeShellApplication, +}: +writeShellApplication { + name = "superdirt-start"; + runtimeInputs = [supercollider-with-sc3-plugins]; + text = '' + start_script="''${1:-${superdirt-start-sc}}" + + if [ "$start_script" == "-h" ] || [ "$start_script" == "--help" ]; then + echo "Usage: superdirt-start [script]" + echo + echo "Start superdirt, optionally running a custom start script." + echo + echo "Options:" + echo " -h --help Show this screen." + exit + fi + + if [ ! -e "$start_script" ]; then + echo "The script \"$start_script\" does not exist, aborting." + exit 1 + fi + + ${sclang-with-superdirt}/bin/sclang-with-superdirt "$start_script" + ''; +} diff --git a/pkgs/tidal.nix b/pkgs/tidal.nix new file mode 100644 index 0000000..7788e8e --- /dev/null +++ b/pkgs/tidal.nix @@ -0,0 +1,9 @@ +# Run the tidal interpreter (ghci running BootTidal.hs). +{ + ghcWithTidal, + src, + writeShellScriptBin, +}: +writeShellScriptBin "tidal" '' + ${ghcWithTidal}/bin/ghci -ghci-script ${src}/BootTidal.hs +'' diff --git a/pkgs/vim-tidal.nix b/pkgs/vim-tidal.nix new file mode 100644 index 0000000..17e903a --- /dev/null +++ b/pkgs/vim-tidal.nix @@ -0,0 +1,47 @@ +{ + ghcWithTidal, + lib, + sclang-with-superdirt, + src, + superdirt-start-sc, + tidal-src, + vimUtils, + writeText, +}: +vimUtils.buildVimPluginFrom2Nix { + inherit src; + pname = "vim-tidal"; + version = "master"; + postInstall = let + # A vimscript file to set Nix defaults for ghci and `BootTidal.hs`. + defaults-file = writeText "vim-tidal-defaults.vim" '' + " Prepend defaults provided by Nix packages. + if !exists("g:tidal_ghci") + let g:tidal_ghci = "${ghcWithTidal}/bin/ghci" + endif + if !exists("g:tidal_sclang") + let g:tidal_sclang = "${sclang-with-superdirt}/bin/sclang-with-superdirt" + endif + if !exists("g:tidal_boot_fallback") + let g:tidal_boot_fallback = "${tidal-src}/BootTidal.hs" + endif + if !exists("g:tidal_sc_boot_fallback") + let g:tidal_sc_boot_fallback = "${superdirt-start-sc}" + endif + ''; + in '' + # Prepend a line to `plugin/tidal.vim` to source the defaults. + mv $out/plugin/tidal.vim $out/plugin/tidal.vim.old + cat ${defaults-file} $out/plugin/tidal.vim.old > $out/plugin/tidal.vim + rm $out/plugin/tidal.vim.old + + # Remove unnecessary files. + rm -r $out/bin + rm $out/Makefile + rm $out/Tidal.ghci + ''; + meta = { + homepage = "https://github.com/tidalcycles/vim-tidal"; + license = lib.licenses.mit; + }; +} diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..c4166b2 --- /dev/null +++ b/shell.nix @@ -0,0 +1,21 @@ +{ + mkShell, + sclang-with-superdirt, + supercollider-with-sc3-plugins, + supercolliderQuarks, + superdirt-start, + superdirt-install, + tidal, +}: +mkShell { + name = "tidal"; + buildInputs = [ + sclang-with-superdirt + supercollider-with-sc3-plugins + superdirt-start + superdirt-install + tidal + ]; + # Convenient access to a config providing all quarks required for Tidal. + SUPERDIRT_SCLANG_CONF = "${supercolliderQuarks.superdirt}/sclang_conf.yaml"; +} From 900c1127714b6b2bb73a171be9112ce169f935bc Mon Sep 17 00:00:00 2001 From: mitchmindtree Date: Sat, 10 Aug 2024 02:31:45 +1000 Subject: [PATCH 2/5] Update nixpkgs flake input --- flake.lock | 6 +++--- flake.nix | 2 +- pkgs/vim-tidal.nix | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/flake.lock b/flake.lock index b727b9a..2b9e91e 100644 --- a/flake.lock +++ b/flake.lock @@ -19,11 +19,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1693844670, - "narHash": "sha256-t69F2nBB8DNQUWHD809oJZJVE+23XBrth4QZuVd6IE0=", + "lastModified": 1722813957, + "narHash": "sha256-IAoYyYnED7P8zrBFMnmp7ydaJfwTnwcnqxUElC1I26Y=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3c15feef7770eb5500a4b8792623e2d6f598c9c1", + "rev": "cb9a96f23c491c081b38eab96d22fa958043c9fa", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index db6f8cc..909f963 100644 --- a/flake.nix +++ b/flake.nix @@ -61,7 +61,7 @@ superdirt-start = pkgs.superdirt-start; superdirt-install = pkgs.superdirt-install; tidal = pkgs.tidal; - vimPlugins.vim-tidal = pkgs.vimPlugins.vim-tidal; + vim-tidal = pkgs.vimPlugins.vim-tidal; }); devShells = perSystemPkgs(pkgs: { diff --git a/pkgs/vim-tidal.nix b/pkgs/vim-tidal.nix index 17e903a..11bd582 100644 --- a/pkgs/vim-tidal.nix +++ b/pkgs/vim-tidal.nix @@ -8,7 +8,7 @@ vimUtils, writeText, }: -vimUtils.buildVimPluginFrom2Nix { +vimUtils.buildVimPlugin { inherit src; pname = "vim-tidal"; version = "master"; From 931b1fa3be7b909c1b8aebae45cfea03e9365bff Mon Sep 17 00:00:00 2001 From: mitchmindtree Date: Sat, 10 Aug 2024 02:36:26 +1000 Subject: [PATCH 3/5] Run nix fmt on repo with new nixfmt-rfc-style --- flake.nix | 99 +++++++++++++++++-------------- overlay.nix | 9 ++- pkgs/mkQuark.nix | 103 ++++++++++++++++----------------- pkgs/sclang-with-superdirt.nix | 2 +- pkgs/superdirt-start.nix | 2 +- pkgs/vim-tidal.nix | 56 +++++++++--------- template/flake.nix | 3 +- 7 files changed, 145 insertions(+), 129 deletions(-) diff --git a/flake.nix b/flake.nix index 909f963..1ed5f3a 100644 --- a/flake.nix +++ b/flake.nix @@ -29,56 +29,67 @@ }; }; - outputs = inputs: let - # TODO: We should support darwin (macOS) here, supercollider package - # currently lacks support. - systems = [ - "aarch64-linux" - "i686-linux" - "x86_64-linux" - # "aarch64-darwin" - # "x86_64-darwin" - ]; + outputs = + inputs: + let + # TODO: We should support darwin (macOS) here, supercollider package + # currently lacks support. + systems = [ + "aarch64-linux" + "i686-linux" + "x86_64-linux" + # "aarch64-darwin" + # "x86_64-darwin" + ]; - overlays = [ inputs.self.overlays.default ]; + overlays = [ inputs.self.overlays.default ]; - perSystemPkgs = f: - inputs.nixpkgs.lib.genAttrs systems - (system: f (import inputs.nixpkgs { inherit overlays system; })); - in { - overlays = { - tidal = import ./overlay.nix { - inherit (inputs) dirt-samples-src superdirt-src tidal-src vim-tidal-src vowel-src; + perSystemPkgs = + f: + inputs.nixpkgs.lib.genAttrs systems ( + system: f (import inputs.nixpkgs { inherit overlays system; }) + ); + in + { + overlays = { + tidal = import ./overlay.nix { + inherit (inputs) + dirt-samples-src + superdirt-src + tidal-src + vim-tidal-src + vowel-src + ; + }; + default = inputs.self.overlays.tidal; }; - default = inputs.self.overlays.tidal; - }; - packages = perSystemPkgs(pkgs: { - ghcWithTidal = pkgs.ghcWithTidal; - supercollider = pkgs.supercollider-with-sc3-plugins; - sclang-with-superdirt = pkgs.sclang-with-superdirt; - superdirt-start-sc = pkgs.superdirt-start-sc; - superdirt-start = pkgs.superdirt-start; - superdirt-install = pkgs.superdirt-install; - tidal = pkgs.tidal; - vim-tidal = pkgs.vimPlugins.vim-tidal; - }); + packages = perSystemPkgs (pkgs: { + ghcWithTidal = pkgs.ghcWithTidal; + supercollider = pkgs.supercollider-with-sc3-plugins; + sclang-with-superdirt = pkgs.sclang-with-superdirt; + superdirt-start-sc = pkgs.superdirt-start-sc; + superdirt-start = pkgs.superdirt-start; + superdirt-install = pkgs.superdirt-install; + tidal = pkgs.tidal; + vim-tidal = pkgs.vimPlugins.vim-tidal; + }); - devShells = perSystemPkgs(pkgs: { - tidal = pkgs.callPackage ./shell.nix { }; - default = inputs.self.devShells.${pkgs.system}.tidal; - }); + devShells = perSystemPkgs (pkgs: { + tidal = pkgs.callPackage ./shell.nix { }; + default = inputs.self.devShells.${pkgs.system}.tidal; + }); - templates = { - tidal-project = { - path = ./template; - description = '' - A standard nix flake template for a Tidal Cycles project. - ''; + templates = { + tidal-project = { + path = ./template; + description = '' + A standard nix flake template for a Tidal Cycles project. + ''; + }; + default = inputs.self.templates.tidal-project; }; - default = inputs.self.templates.tidal-project; - }; - formatter = perSystemPkgs(pkgs: pkgs.nixfmt-rfc-style); - }; + formatter = perSystemPkgs (pkgs: pkgs.nixfmt-rfc-style); + }; } diff --git a/overlay.nix b/overlay.nix index 53ff032..1390570 100644 --- a/overlay.nix +++ b/overlay.nix @@ -7,9 +7,9 @@ }: final: prev: { # Short-hand for GHC with the tidal pkg. - ghcWithTidal = prev.haskellPackages.ghcWithPackages (p: [p.tidal]); + ghcWithTidal = prev.haskellPackages.ghcWithPackages (p: [ p.tidal ]); # A fn to create a supercollider quark derivation. - mkQuark = prev.callPackage ./pkgs/mkQuark.nix {}; + mkQuark = prev.callPackage ./pkgs/mkQuark.nix { }; # The set of required supercollider quarks. supercolliderQuarks = { dirt-samples = final.mkQuark { @@ -23,7 +23,10 @@ final: prev: { superdirt = final.mkQuark { name = "SuperDirt"; src = superdirt-src; - dependencies = with final.supercolliderQuarks; [ dirt-samples vowel ]; + dependencies = with final.supercolliderQuarks; [ + dirt-samples + vowel + ]; }; }; # A sclang command with superdirt included via conf yaml. diff --git a/pkgs/mkQuark.nix b/pkgs/mkQuark.nix index 06ce740..7245c9b 100644 --- a/pkgs/mkQuark.nix +++ b/pkgs/mkQuark.nix @@ -1,58 +1,57 @@ # Collection of functions to assist with packaging of supercollider quarks. +{ lib, stdenv }: +# A function that, given a Quark source location and its name, creates a +# derivation for the quark installed in an expected location. +# +# The resulting quark contains: +# - `quark` subdirectory, containing the quark itself along with symbolic +# links to each of its dependencies. +# - a `install.scd` file that can be used to install the Quark imperatively. +# - a `sclang_conf.yaml` that can be used to provide the quark and its +# dependencies directly to an interpreter. +# +# TODO: Currently, we assume that the dependency graph is a "tree". The +# reality is that it might be a directed, acyclic graph. We should treat it +# as such and work out if dependencies we require already exist in the link +# tree. Use `lib.lists.listDfs` or `lib.lists.toposort`. { - lib, - stdenv, + src, + name, + dependencies ? [ ], }: - # A function that, given a Quark source location and its name, creates a - # derivation for the quark installed in an expected location. - # - # The resulting quark contains: - # - `quark` subdirectory, containing the quark itself along with symbolic - # links to each of its dependencies. - # - a `install.scd` file that can be used to install the Quark imperatively. - # - a `sclang_conf.yaml` that can be used to provide the quark and its - # dependencies directly to an interpreter. - # - # TODO: Currently, we assume that the dependency graph is a "tree". The - # reality is that it might be a directed, acyclic graph. We should treat it - # as such and work out if dependencies we require already exist in the link - # tree. Use `lib.lists.listDfs` or `lib.lists.toposort`. - { - src, - name, - dependencies ? [], - }: - stdenv.mkDerivation rec { - inherit name src; - installPhase = let - # A function for creating links to depenencies in $out/quark. - ln-dep = dep: '' - ln -s ${dep}/quark/* $out/quark/ - ''; - ln-deps = lib.concatStrings (map ln-dep dependencies); +stdenv.mkDerivation rec { + inherit name src; + installPhase = + let + # A function for creating links to depenencies in $out/quark. + ln-dep = dep: '' + ln -s ${dep}/quark/* $out/quark/ + ''; + ln-deps = lib.concatStrings (map ln-dep dependencies); - # Write a `sc` file that can be used to install the quark imperatively. - # TODO: Don't clear all quarks - only remove any with matching ${name}. - install-scd = '' - Quarks.clear; - Quarks.install(\"$out\"); - thisProcess.recompile(); - ''; + # Write a `sc` file that can be used to install the quark imperatively. + # TODO: Don't clear all quarks - only remove any with matching ${name}. + install-scd = '' + Quarks.clear; + Quarks.install(\"$out\"); + thisProcess.recompile(); + ''; - # Write a yaml config file with an entry for this quark. - sclang-conf-yaml = '' - includePaths: - - $out/quark - excludePaths: - [] - postInlineWarnings: false - excludeDefaultPaths: false\ - ''; - in '' - mkdir -p $out/quark/${name} - cp -r ./* $out/quark/${name} - ${ln-deps} - echo "${install-scd}" >> $out/install.scd - echo "${sclang-conf-yaml}" >> $out/sclang_conf.yaml + # Write a yaml config file with an entry for this quark. + sclang-conf-yaml = '' + includePaths: + - $out/quark + excludePaths: + [] + postInlineWarnings: false + excludeDefaultPaths: false\ ''; - } + in + '' + mkdir -p $out/quark/${name} + cp -r ./* $out/quark/${name} + ${ln-deps} + echo "${install-scd}" >> $out/install.scd + echo "${sclang-conf-yaml}" >> $out/sclang_conf.yaml + ''; +} diff --git a/pkgs/sclang-with-superdirt.nix b/pkgs/sclang-with-superdirt.nix index dedb2bc..55e87d9 100644 --- a/pkgs/sclang-with-superdirt.nix +++ b/pkgs/sclang-with-superdirt.nix @@ -10,7 +10,7 @@ let in writeShellApplication { name = "sclang-with-superdirt"; - runtimeInputs = [supercollider-with-sc3-plugins]; + runtimeInputs = [ supercollider-with-sc3-plugins ]; text = '' ${supercollider}/bin/sclang -l "${superdirt}/sclang_conf.yaml" "$@" ''; diff --git a/pkgs/superdirt-start.nix b/pkgs/superdirt-start.nix index b00bf63..fc20e0c 100644 --- a/pkgs/superdirt-start.nix +++ b/pkgs/superdirt-start.nix @@ -7,7 +7,7 @@ }: writeShellApplication { name = "superdirt-start"; - runtimeInputs = [supercollider-with-sc3-plugins]; + runtimeInputs = [ supercollider-with-sc3-plugins ]; text = '' start_script="''${1:-${superdirt-start-sc}}" diff --git a/pkgs/vim-tidal.nix b/pkgs/vim-tidal.nix index 11bd582..99c3153 100644 --- a/pkgs/vim-tidal.nix +++ b/pkgs/vim-tidal.nix @@ -12,34 +12,36 @@ vimUtils.buildVimPlugin { inherit src; pname = "vim-tidal"; version = "master"; - postInstall = let - # A vimscript file to set Nix defaults for ghci and `BootTidal.hs`. - defaults-file = writeText "vim-tidal-defaults.vim" '' - " Prepend defaults provided by Nix packages. - if !exists("g:tidal_ghci") - let g:tidal_ghci = "${ghcWithTidal}/bin/ghci" - endif - if !exists("g:tidal_sclang") - let g:tidal_sclang = "${sclang-with-superdirt}/bin/sclang-with-superdirt" - endif - if !exists("g:tidal_boot_fallback") - let g:tidal_boot_fallback = "${tidal-src}/BootTidal.hs" - endif - if !exists("g:tidal_sc_boot_fallback") - let g:tidal_sc_boot_fallback = "${superdirt-start-sc}" - endif - ''; - in '' - # Prepend a line to `plugin/tidal.vim` to source the defaults. - mv $out/plugin/tidal.vim $out/plugin/tidal.vim.old - cat ${defaults-file} $out/plugin/tidal.vim.old > $out/plugin/tidal.vim - rm $out/plugin/tidal.vim.old + postInstall = + let + # A vimscript file to set Nix defaults for ghci and `BootTidal.hs`. + defaults-file = writeText "vim-tidal-defaults.vim" '' + " Prepend defaults provided by Nix packages. + if !exists("g:tidal_ghci") + let g:tidal_ghci = "${ghcWithTidal}/bin/ghci" + endif + if !exists("g:tidal_sclang") + let g:tidal_sclang = "${sclang-with-superdirt}/bin/sclang-with-superdirt" + endif + if !exists("g:tidal_boot_fallback") + let g:tidal_boot_fallback = "${tidal-src}/BootTidal.hs" + endif + if !exists("g:tidal_sc_boot_fallback") + let g:tidal_sc_boot_fallback = "${superdirt-start-sc}" + endif + ''; + in + '' + # Prepend a line to `plugin/tidal.vim` to source the defaults. + mv $out/plugin/tidal.vim $out/plugin/tidal.vim.old + cat ${defaults-file} $out/plugin/tidal.vim.old > $out/plugin/tidal.vim + rm $out/plugin/tidal.vim.old - # Remove unnecessary files. - rm -r $out/bin - rm $out/Makefile - rm $out/Tidal.ghci - ''; + # Remove unnecessary files. + rm -r $out/bin + rm $out/Makefile + rm $out/Tidal.ghci + ''; meta = { homepage = "https://github.com/tidalcycles/vim-tidal"; license = lib.licenses.mit; diff --git a/template/flake.nix b/template/flake.nix index dd1c88c..3974d13 100644 --- a/template/flake.nix +++ b/template/flake.nix @@ -3,7 +3,8 @@ inputs.tidal.url = "github:mitchmindtree/tidalcycles.nix"; - outputs = inputs: + outputs = + inputs: inputs.tidal.utils.eachSupportedSystem (system: { devShells = inputs.tidal.devShells.${system}; formatter = inputs.tidal.formatter.${system}; From a61dc2b759548368d2fe3dfd2ee65a65b65ad215 Mon Sep 17 00:00:00 2001 From: mitchmindtree Date: Sat, 10 Aug 2024 02:42:41 +1000 Subject: [PATCH 4/5] Update all flake inputs --- flake.lock | 34 +++++++++++++++------------------- flake.nix | 13 +++++++------ 2 files changed, 22 insertions(+), 25 deletions(-) diff --git a/flake.lock b/flake.lock index 2b9e91e..28d0463 100644 --- a/flake.lock +++ b/flake.lock @@ -3,16 +3,15 @@ "dirt-samples-src": { "flake": false, "locked": { - "lastModified": 1667426233, - "narHash": "sha256-Zl2bi9QofcrhU63eMtg+R6lhV9ExQS/0XNTJ+oq65Uo=", + "lastModified": 1698439458, + "narHash": "sha256-Mp8qBpsOvW9Zguv95Kv7EU6S3ICaF2aO02Wz6xGURtE=", "owner": "tidalcycles", "repo": "dirt-samples", - "rev": "92f2145e661b397e62ca0ff3965819e7c7db0dad", + "rev": "9a6dff8f9ec3cd55b287290cf04e01afa6b8f532", "type": "github" }, "original": { "owner": "tidalcycles", - "ref": "master", "repo": "dirt-samples", "type": "github" } @@ -21,13 +20,13 @@ "locked": { "lastModified": 1722813957, "narHash": "sha256-IAoYyYnED7P8zrBFMnmp7ydaJfwTnwcnqxUElC1I26Y=", - "owner": "NixOS", + "owner": "nixos", "repo": "nixpkgs", "rev": "cb9a96f23c491c081b38eab96d22fa958043c9fa", "type": "github" }, "original": { - "owner": "NixOS", + "owner": "nixos", "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" @@ -46,16 +45,15 @@ "superdirt-src": { "flake": false, "locked": { - "lastModified": 1611740180, - "narHash": "sha256-GtnqZeMFqFkVhgx2Exu0wY687cHa7mNnVCgjQd6fiIA=", + "lastModified": 1697377840, + "narHash": "sha256-9qU9CHYAXbN1IE3xXDqGipuroifVaSVXj3c/cDfwM80=", "owner": "musikinformatik", "repo": "superdirt", - "rev": "7abb62e89649daa1232b9cbd6427241868abd30e", + "rev": "c7f32998572984705d340e7c1b9ed9ad998a39b6", "type": "github" }, "original": { "owner": "musikinformatik", - "ref": "master", "repo": "superdirt", "type": "github" } @@ -63,16 +61,16 @@ "tidal-src": { "flake": false, "locked": { - "lastModified": 1654350756, - "narHash": "sha256-tONM5SYYBca0orTLH1EUOilSC1FCluWrFt8AetUx+YQ=", + "lastModified": 1712519522, + "narHash": "sha256-LbvxQmVxHElidCgvt+w0g1k+QQbNLebK46vtRCgsLeQ=", "owner": "tidalcycles", "repo": "tidal", - "rev": "fda9c1ecb3722698935245e5409ef8ccdfca16c8", + "rev": "88f09edf6bef2228d5f530dea872b08a9d803066", "type": "github" }, "original": { "owner": "tidalcycles", - "ref": "main", + "ref": "v1.9.5", "repo": "tidal", "type": "github" } @@ -80,16 +78,15 @@ "vim-tidal-src": { "flake": false, "locked": { - "lastModified": 1664252474, - "narHash": "sha256-hleiK2Q7xYndpB+tIbyyXIM2sk4NunUh9DPgMqmf/Wc=", + "lastModified": 1685703852, + "narHash": "sha256-8gyk17YLeKpLpz3LRtxiwbpsIbZka9bb63nK5/9IUoA=", "owner": "tidalcycles", "repo": "vim-tidal", - "rev": "b07f5c12986fb837e055d7fcf0acf3b7e248148f", + "rev": "e440fe5bdfe07f805e21e6872099685d38e8b761", "type": "github" }, "original": { "owner": "tidalcycles", - "ref": "master", "repo": "vim-tidal", "type": "github" } @@ -106,7 +103,6 @@ }, "original": { "owner": "supercollider-quarks", - "ref": "master", "repo": "vowel", "type": "github" } diff --git a/flake.nix b/flake.nix index 1ed5f3a..8e1d39a 100644 --- a/flake.nix +++ b/flake.nix @@ -4,27 +4,27 @@ ''; inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; # Non-flake source. dirt-samples-src = { - url = "github:tidalcycles/dirt-samples/master"; + url = "github:tidalcycles/dirt-samples"; flake = false; }; superdirt-src = { - url = "github:musikinformatik/superdirt/master"; # use `develop` branch as its default? + url = "github:musikinformatik/superdirt"; flake = false; }; tidal-src = { - url = "github:tidalcycles/tidal/main"; + url = "github:tidalcycles/tidal/v1.9.5"; flake = false; }; vim-tidal-src = { - url = "github:tidalcycles/vim-tidal/master"; + url = "github:tidalcycles/vim-tidal"; flake = false; }; vowel-src = { - url = "github:supercollider-quarks/vowel/master"; + url = "github:supercollider-quarks/vowel"; flake = false; }; }; @@ -73,6 +73,7 @@ superdirt-install = pkgs.superdirt-install; tidal = pkgs.tidal; vim-tidal = pkgs.vimPlugins.vim-tidal; + default = inputs.self.packages.${pkgs.system}.tidal; }); devShells = perSystemPkgs (pkgs: { From 31fc74ca93bfcf0016712cb2f93aff4becfb685f Mon Sep 17 00:00:00 2001 From: mitchmindtree Date: Sat, 10 Aug 2024 02:48:18 +1000 Subject: [PATCH 5/5] check flake on all systems --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c585357..5b358e8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,7 +25,7 @@ jobs: - uses: cachix/install-nix-action@v16 with: nix_path: nixpkgs=channel:nixos-unstable - - run: nix flake check --no-update-lock-file + - run: nix flake check --no-update-lock-file --all-systems # Checks the nix formatting. template-fmt-check: