diff --git a/pkgs/neovim-wrapped/default.nix b/pkgs/neovim-wrapped/default.nix index a15c2e2e..e9e0a468 100644 --- a/pkgs/neovim-wrapped/default.nix +++ b/pkgs/neovim-wrapped/default.nix @@ -19,6 +19,7 @@ let ./plugins/catppuccin ./plugins/treesj ./plugins/vim-tmux-navigator + ./plugins/tidal ./plugins/which-key ./plugins/conform ./plugins/nvim-lint diff --git a/pkgs/neovim-wrapped/plugins/cmp/default.nix b/pkgs/neovim-wrapped/plugins/cmp/default.nix index faf335f7..767da3c0 100644 --- a/pkgs/neovim-wrapped/plugins/cmp/default.nix +++ b/pkgs/neovim-wrapped/plugins/cmp/default.nix @@ -8,7 +8,7 @@ let tailwindcss-colorizer-cmp-nvim = pkgs.vimUtils.buildVimPlugin { pname = "tailwindcss-colorizer-cmp-nvim"; - version = "2024-01-01"; + version = "0-unstable-2024-03-23"; src = pkgs.fetchFromGitHub { owner = "roobert"; repo = "tailwindcss-colorizer-cmp.nvim"; diff --git a/pkgs/neovim-wrapped/plugins/conform/config.lua b/pkgs/neovim-wrapped/plugins/conform/config.lua index 28b47c2a..a5f584db 100644 --- a/pkgs/neovim-wrapped/plugins/conform/config.lua +++ b/pkgs/neovim-wrapped/plugins/conform/config.lua @@ -18,6 +18,7 @@ require("conform").setup({ rust = { "rustfmt" }, python = { "isort", "black" }, nix = { "nixfmt" }, + tidal = { "ormolu" }, -- Tidal patterns are Haskell }, format_on_save = { timeout_ms = 1000, diff --git a/pkgs/neovim-wrapped/plugins/conform/default.nix b/pkgs/neovim-wrapped/plugins/conform/default.nix index 34c23e35..a93e08a5 100644 --- a/pkgs/neovim-wrapped/plugins/conform/default.nix +++ b/pkgs/neovim-wrapped/plugins/conform/default.nix @@ -12,6 +12,7 @@ shfmt rustfmt nixfmt + ormolu # haskell formatter, used for .tidal files ]; } ]; diff --git a/pkgs/neovim-wrapped/plugins/tidal/default.nix b/pkgs/neovim-wrapped/plugins/tidal/default.nix new file mode 100644 index 00000000..d69f415e --- /dev/null +++ b/pkgs/neovim-wrapped/plugins/tidal/default.nix @@ -0,0 +1,35 @@ +{ pkgs, ... }: +let + # vim-tidal is not in nixpkgs, so package it directly. Pinned to the latest + # commit (the v1.x tags are old); it's a stable vimscript plugin. + vim-tidal = pkgs.vimUtils.buildVimPlugin { + pname = "vim-tidal"; + version = "1.4.8-unstable-2023-06-02"; + + src = pkgs.fetchFromGitHub { + owner = "tidalcycles"; + repo = "vim-tidal"; + rev = "e440fe5bdfe07f805e21e6872099685d38e8b761"; + hash = "sha256-8gyk17YLeKpLpz3LRtxiwbpsIbZka9bb63nK5/9IUoA="; + }; + }; +in +{ + plugins = [ + { + plugin = vim-tidal; + config = /* lua */ '' + -- Ship .tidal lines to a tmux pane running `tidal` (GHCi+Tidal); it + -- does not boot GHCi, so start `tidal` in its own pane first. The + -- pattern language and SuperDirt engine come from the electronic-music + -- flake's devShell, not from here. + vim.g.tidal_target = "tmux" + + -- Tidal patterns are Haskell; drive treesitter highlighting (and + -- ormolu formatting via conform) off the haskell grammar. + vim.treesitter.language.register("haskell", "tidal") + ''; + extraPackages = with pkgs; [ tmux ]; + } + ]; +} diff --git a/pkgs/neovim-wrapped/plugins/treesitter/default.nix b/pkgs/neovim-wrapped/plugins/treesitter/default.nix index 315ac5eb..81095fb1 100644 --- a/pkgs/neovim-wrapped/plugins/treesitter/default.nix +++ b/pkgs/neovim-wrapped/plugins/treesitter/default.nix @@ -29,6 +29,7 @@ typescript json go + haskell # .tidal files (Tidal patterns are Haskell) scheme rust zsh