Install/manage upgrades to tidal environment with a single command on Ubuntu/debian/Linux Mint ('ansible' method)

Hey I'd forgotten about that discussion!

I'm not sure what I've got actually solves that issue though (yet) - I've only made it useful for a very limited distro set (*buntu 20.04 only)

I've been doing a little unrelated investigations into vagrant at work, and I think I can at least begin transitioning my ansible-tidalcycles testing to a headless, partially automated testing process using the vagrant tool (with the plan to eventually have it fully automated using a CI tool in github).

If I can confirm that works, then I can begin building per-distro and per-version considerations into the ansible roles (I'll probably need some extra interested collaborators on that though)
Once we have that infrastructure created and in the wild for a bit, then I'd feel better about closing that ticket.

@yaxu What are your thoughts?

PS just re-running my ansible roles against my current installs to upgrade to 1.4.9, 1.5.1, 1.5.2 has gone absolutely swimmingly

1 Like

Hi @cleary, thanks for your effort!
I have been trying to install Tidal on WSL using the ansible method but when running sudo ansible-playbook --connection=local -i localhost, it keeps complaining that [localhost]: UNREACHABLE!
Do you have any idea about why?

I haven't tried WSL so thankyou for testing! That is a more generic networking issue beyond my control by the looks -
[edit] (The previously linked issue was related to forwarding between the WSL environment and windows - )

As a very quick and easy diagnostic - what does this command return when you run it in your ubuntu terminal:

ping localhost

Hi @cleary and thank you for the 'ansible' option. After some very frustrating attempts I tried this way on a freshly installed Ubuntu Studio 20.04. It worked fine but stopped after installing SC 3.10.0 without the plugins. I had to install Atom manually.

ghci works in the terminal but does not import Sound.Tidal.Context

nuelmyr@nuelmyr-tidalcaycles:~$ ghci GHCi, version 8.6.5: :? for help Prelude> import Sound.Tidal.Context

<no location info>: error: Could not find module β€˜Sound.Tidal.Context’ It is not a module in the current program, or in any known package. Prelude>

And in Atom I get the same response like in my other attempts
No configured ghc path
Ghci command: ghci
Ghc-pkg command: ghc-pkg
Load BootTidal.hs from /home/nuelmyr/.atom/packages/tidalcycles/lib/BootTidal.hs
t>: error:
Could not find module β€˜Sound.Tidal.Context’
It is not a module in the current program, or in any known package.

Variable not in scope: d1 :: t1 -> t0

β€’ Variable not in scope: sound :: [Char] -> t1
β€’ Perhaps you meant β€˜round’ (imported from Prelude)

Variable not in scope: (#) :: t0 -> t2 -> t

Variable not in scope: gain :: Integer -> t2

And the end I don't know what to do, I need Tidal for Streaming in a new machine. Maybe it's me who's doing something wrong while installing? Bad tidal-kharma :wink:

Maybe there is more than one ghci installed? Try whereis ghci to see

Hi @nuelmyr
[edit] it was a clean install - sorry I misread

My recommendation, nuke some of the install directories in your $HOME - eg:

mv .cabal .config/SuperCollider .local/share/SuperCollider .ghc /tmp/

and try again

Thanks @cleary and @yaxu for your support. In the end after tweaking and trying to reinstall and update ghci I finally succeeded. Don't ask me how please! This moment when there is no more error message in the system and the sound comes out of the speakers ... Wow!!! Everything is so amazing then and the whole frustrating process before is forgotten.
But to be honest: a lot a people who are interested in making music and sounds will not have the frustration tolerance to keep on twiddling until it works. Choco and ansible are the right ways to make this installation process smoother and easier for us who are NOT software engineers and developers. I appreciate your work!! Thanks again for supporting.

1 Like

Thanks so much for this! I resurrected my old 2010 Macbook pro and chucked Ubuntu Studio on it, and this method worked a damn treat, though with SC3.10. I gotta update that at some stage, but eh.

1 Like

you're welcome! thanks for the feedback - I've been studiously procrastinating about my todo list for that repo... will spend some time on it next week though, promise :slight_smile:

Side note, did you make use of the custom sample definitions option in vars/all.yml file?
Another feature I'm thinking about looking at is adding custom synth defs for sc in there too, so curious to know if even the basic functionality is being used at all

update for today:
SuperCollider will now handle being installed in a headless environment -

The default sc in the ubuntu repos has been compiled with QT support, and that includes an execution dependency, even when running sclang from the commandline.
There are builds that do not include the QT dependency, but I'm working off the standard ubuntu repos, so I've worked around it by running an xvfb (virtual framebuffer) on DISPLAY=:99 which will allow sclang to execute.

For my personal requirements, I'm gradually working towards including the ability to execute ansible unit testing via molecule in a headless CI environment - however, if you are on a low resource usage device, you could now feasibly run tidal without your X server using vim + headless supercollider.

I'm currently turning xvfb off after my testing, but let me know if there's interest and I'll consider leaving it in -

Commit here:

1 Like

updates from this morning:
Now that I can do (somewhat automated) testing in vagrant, I did!
I tested the tidal/supercollider (no editor) role on:

  • debian/buster box :+1:
  • mint 19.3 :-1:

@yaxu, my next plan is to make use of the github continuous integration testing features, which will be able to give me/us feedback on which distros work, and which don't - in a quick and easy way, which could then translate to a simple recommended distro list on your install page:

[edit] resolution to the below issue in this thread

For starters, mint 19.3 fails to install tidal with the following hosc compile error:

  Building hosc-0.18...
Preprocessing library hosc-0.18...
[ 1 of 18] Compiling Sound.OSC.Wait   ( Sound/OSC/Wait.hs, dist/build/Sound/OSC/Wait.o )
[ 2 of 18] Compiling Sound.OSC.Coding.Convert ( Sound/OSC/Coding/Convert.hs, dist/build/Sound/OSC/Coding/Convert.o )
[ 3 of 18] Compiling Sound.OSC.Time   ( Sound/OSC/Time.hs, dist/build/Sound/OSC/Time.o )
[ 4 of 18] Compiling Sound.OSC.Datum  ( Sound/OSC/Datum.hs, dist/build/Sound/OSC/Datum.o )
[ 5 of 18] Compiling Sound.OSC.Packet ( Sound/OSC/Packet.hs, dist/build/Sound/OSC/Packet.o )
[ 6 of 18] Compiling Sound.OSC.Transport.FD ( Sound/OSC/Transport/FD.hs, dist/build/Sound/OSC/Transport/FD.o )
[ 7 of 18] Compiling Sound.OSC.Transport.Monad ( Sound/OSC/Transport/Monad.hs, dist/build/Sound/OSC/Transport/Monad.o )
[ 8 of 18] Compiling Sound.OSC.Coding.Cast ( Sound/OSC/Coding/Cast.hs, dist/build/Sound/OSC/Coding/Cast.o )
[ 9 of 18] Compiling Sound.OSC.Coding.Byte ( Sound/OSC/Coding/Byte.hs, dist/build/Sound/OSC/Coding/Byte.o )
[10 of 18] Compiling Sound.OSC.Coding.Decode.Base ( Sound/OSC/Coding/Decode/Base.hs, dist/build/Sound/OSC/Coding/Decode/Base.o )
[11 of 18] Compiling Sound.OSC.Coding.Decode.Binary ( Sound/OSC/Coding/Decode/Binary.hs, dist/build/Sound/OSC/Coding/Decode/Binary.o )
[12 of 18] Compiling Sound.OSC.Coding.Encode.Base ( Sound/OSC/Coding/Encode/Base.hs, dist/build/Sound/OSC/Coding/Encode/Base.o )
[13 of 18] Compiling Sound.OSC.Coding.Encode.Builder ( Sound/OSC/Coding/Encode/Builder.hs, dist/build/Sound/OSC/Coding/Encode/Builder.o )

Sound/OSC/Coding/Encode/Builder.hs:33:36: error:
    β€’ Variable not in scope:
        (<>) :: B.Builder -> B.Builder -> B.Builder
    β€’ Perhaps you meant one of these:
        β€˜<$>’ (imported from Prelude), β€˜*>’ (imported from Prelude),
        β€˜<$’ (imported from Prelude)

Sound/OSC/Coding/Encode/Builder.hs:37:33: error:
    β€’ Variable not in scope:
        (<>) :: B.Builder -> B.Builder -> B.Builder
    β€’ Perhaps you meant one of these:
        β€˜<$>’ (imported from Prelude), β€˜*>’ (imported from Prelude),
        β€˜<$’ (imported from Prelude)

Sound/OSC/Coding/Encode/Builder.hs:42:55: error:
    β€’ Variable not in scope: (<>) :: B.Builder -> B.Builder -> t0
    β€’ Perhaps you meant one of these:
        β€˜<$>’ (imported from Prelude), β€˜*>’ (imported from Prelude),
        β€˜<$’ (imported from Prelude)

Sound/OSC/Coding/Encode/Builder.hs:43:26: error:
    β€’ Variable not in scope: (<>) :: t0 -> B.Builder -> B.Builder
    β€’ Perhaps you meant one of these:
        β€˜<$>’ (imported from Prelude), β€˜*>’ (imported from Prelude),
        β€˜<$’ (imported from Prelude)
cabal: Leaving directory '/tmp/cabal-tmp-14650/hosc-0.18'
Building vector-
Installed distributive-0.6.2
Downloading comonad-5.0.6...
Configuring comonad-5.0.6...
Building comonad-5.0.6...
Installed comonad-5.0.6
Downloading bifunctors-5.5.7...
Configuring bifunctors-5.5.7...
Building bifunctors-5.5.7...
Installed bifunctors-5.5.7
Installed vector-
cabal: Error: some packages failed to install:
hosc-0.18 failed during the building phase. The exception was:
ExitFailure 1
tidal-1.6.0 depends on hosc-0.18 which failed to install.

more updates - I've been thinking about how to quickly patch/workaround issues like hosc error above - I think injecting a specific .yml where it needed to go is a clean way to insert (and remove when required) way around it:

Having this patched meant I could test/verify some more distros - confirmed working on the tidal/supercollider role (editors still todo):

  • ubuntu 18.04/bionic
  • debian 9 stretch
  • Linux Mint 19.3 Tricia


  • ubuntu 16.04 xenial (sc 3.6 is too old for superdirt)


  • work out Mint version numbering
  • test editor roles
1 Like

Update for today:

  • added support for the experimental feedforward editor... experimental! being the keyword here
  • the ff VU meter support is also added to your startup.scd (globally at this stage)
  • I've also validated all my playbooks in an ubuntu 20.04 vagrant instance (relief they all passed!) so I'll be digging into full molecule (ansible) testing next I think, before I head to travisCI


  • implement molecule ansible testing
  • work out Mint version numbering
1 Like

updates for the last couple of days:

  • I've made the superdirt install/check code WAY more robust
  • I've worked out that my vagrant testing was not actually testing what a user is likely to see, since the ansible version executed in my testing was from my 20.04 host, not in the guest - turns out the older distros are definitely NOT working unless you've installed a non-repo version of ansible >= 2.8 - I will work on that over the next few days

I spent quite a lot of time on it this week, and in the end it doesn't look like a lot got done, but :wink:

  • updated my vagrant testing to be more accurate to a user experience/execution environment (using a shell provisioner to install and call ansible instead of the ansible provisioner directly from the vagrant host)
  • reverted all my include_task: module calls to the legacy include: to support the older distros (after going on a wild goose chase with python and virtualenv/ansible via pip)

I'm comfortable with the way the testing is done now, I'm confident of the outcome on the supported distros, so I can get down to adding features again I think (or making music, which I have not been doing this last week!)

1 Like

just tried here on kubuntu 20.04
(minimal install + ubuntu studio installer for lowlatency kernel)

sudo ansible-playbook --connection=local -i localhost,

worked ok, can use feedfoward (need to learn it yet!) :smiley:
but supercollider installed is version 3.10.0 --
how can i upgrade it to 3.11.0?


Hey thanks for the feedback - this method only uses the supercollider version available in the standard ubuntu repositories - at this stage I'm not planning to support non-repo versions (it's already relatively tricky to do a repeatable/supportable/error managed superdirt install without adding variations to the supercollider stack as well) -

There was a supercollider ppa for ubuntu ( which has since gotten stale, but if you were to contact the team/express interest/raise a bug requesting an update they may be open to resuscitating the repo?

Failing that, I guess it'll probably be a build from source (I can't help you there I'm afraid).

1 Like

thx cleary

i manage to install on another laptop with similar config here with sc 3.11.0
(kubuntu 20.04 minimal install + ubuntu studio installer for lowlatency kernel)

i made a startup.scd backup before and it keep my 3.11 install
-- i am a regular sc user and prefer to build myself :slight_smile:

now i am planning to use vim for tidal and supercollider
(because there is more info/support about them + snippets + headless possibilities + not so sluggish as atom!)
and was thinking about using ansible-vim:
your install uses vim-nox, and people from sc uses more neovim as

with snippets and docs support

so my question is if is to much trouble to use neovim editor on ansible-vim?
to have more people and support on sc side? :slight_smile:

thx in advance!!!

1 Like

Hi @igormpc,
I'm not familiar with the differences between neovim and vim (nox being a slight variant) -
short answer is, I'll look into it - anything you can give me as to shortcut my learning will be helpful though, ie the setup steps you use to get neovim communicating with tidal

[edit] ok, I had to rebuild my workstation at work so I took the opportunity to have a look at using neovim instead, it looks like it'll be a trivial changeover (uses standard .vimrc syntax, although in a diff location, uses VimPlug etc).
I will do some changes/building/testing in ansible in the next few days

1 Like

ok I spent a little time on this tonight, just trying to get a running configuration.
Since neovim does not require tmux, I'd like to take that dependency out - however, the example tidalvim startup script only caters for tmux usage, and I'm at a bit of a loss as to how to make it start tidal shell + editor window inside neovim (with bindings that send appropriately etc).

Do you have an example of how you do it?

Side note, I noticed @munshkr is the author of vim-tidal - are you able to point me in the right direction too (and ps I really enjoyed your new moon set!)?


1 Like