From a218f5623c430b69ce6a60c522b76c2a7f07937c Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Tue, 29 Jul 2025 11:27:46 +0100 Subject: [PATCH] nixvim: re-add edit_alternate.vim --- flake.lock | 53 +++++++++++++++++- flake.nix | 9 +++ modules2/nixvim/edit-alternate/config.nix | 56 +++++++++++++++++++ .../nixvim/edit-alternate/extra-plugins.nix | 31 ++++++++++ modules2/nixvim/edit-alternate/keymaps.nix | 9 +++ 5 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 modules2/nixvim/edit-alternate/config.nix create mode 100644 modules2/nixvim/edit-alternate/extra-plugins.nix create mode 100644 modules2/nixvim/edit-alternate/keymaps.nix diff --git a/flake.lock b/flake.lock index 0254786b..2f746156 100644 --- a/flake.lock +++ b/flake.lock @@ -23,6 +23,22 @@ "type": "github" } }, + "conf-vim": { + "flake": false, + "locked": { + "lastModified": 1507549264, + "narHash": "sha256-AjiTJsoim0BAnyfqk1IQzNsa6jhFM2+A66E7q9sJqz0=", + "owner": "tjdevries", + "repo": "conf.vim", + "rev": "a716df0fd5d7ba558c07dac2e07f05d5eba11afb", + "type": "github" + }, + "original": { + "owner": "tjdevries", + "repo": "conf.vim", + "type": "github" + } + }, "darwin": { "inputs": { "nixpkgs": [ @@ -65,6 +81,22 @@ "type": "github" } }, + "edit-alternate-vim": { + "flake": false, + "locked": { + "lastModified": 1635180789, + "narHash": "sha256-mEKnqYAhgrdxPRoKf4S4yYecdFIHGg8bDxpqPuC1+S4=", + "owner": "tjdevries", + "repo": "edit_alternate.vim", + "rev": "ef3019115d9bb7ffd691d2859eda213dd99e0b0a", + "type": "github" + }, + "original": { + "owner": "tjdevries", + "repo": "edit_alternate.vim", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -414,7 +446,9 @@ "root": { "inputs": { "agenix": "agenix", + "conf-vim": "conf-vim", "disko": "disko", + "edit-alternate-vim": "edit-alternate-vim", "flake-parts": "flake-parts", "home-manager": "home-manager_2", "import-tree": "import-tree", @@ -424,7 +458,24 @@ "nixpkgs": "nixpkgs_2", "nixpkgs-stable": "nixpkgs-stable", "nixvim": "nixvim", - "nur": "nur" + "nur": "nur", + "standard-vim": "standard-vim" + } + }, + "standard-vim": { + "flake": false, + "locked": { + "lastModified": 1539613748, + "narHash": "sha256-9VwkvV1Dv6cE4uDkPp36DozjWJOclDR883yDMYw000E=", + "owner": "tjdevries", + "repo": "standard.vim", + "rev": "b333ef9a9cf6cf66536deda017a542843613fa75", + "type": "github" + }, + "original": { + "owner": "tjdevries", + "repo": "standard.vim", + "type": "github" } }, "systems": { diff --git a/flake.nix b/flake.nix index 16e43387..9c154fea 100644 --- a/flake.nix +++ b/flake.nix @@ -3,9 +3,15 @@ agenix.inputs.nixpkgs.follows = "nixpkgs"; agenix.url = "github:ryantm/agenix"; + conf-vim.flake = false; + conf-vim.url = "github:tjdevries/conf.vim"; + disko.inputs.nixpkgs.follows = "nixpkgs"; disko.url = "github:nix-community/disko"; + edit-alternate-vim.flake = false; + edit-alternate-vim.url = "github:tjdevries/edit_alternate.vim"; + flake-parts.url = "github:hercules-ci/flake-parts"; home-manager.inputs.nixpkgs.follows = "nixpkgs"; @@ -30,6 +36,9 @@ nur.inputs.nixpkgs.follows = "nixpkgs"; nur.url = "github:nix-community/NUR"; + + standard-vim.flake = false; + standard-vim.url = "github:tjdevries/standard.vim"; }; outputs = diff --git a/modules2/nixvim/edit-alternate/config.nix b/modules2/nixvim/edit-alternate/config.nix new file mode 100644 index 00000000..a086c694 --- /dev/null +++ b/modules2/nixvim/edit-alternate/config.nix @@ -0,0 +1,56 @@ +{ + flake.modules.nixvim.custom.extraConfigLua = '' + vim.fn["edit_alternate#rule#add"]("php", function(filename) + if filename:find "Test.php$" then + filename = filename:gsub("Test.php$", ".php") + + if filename:find "tests/src/" then + -- Drupal tests. Remove the `src/{type}` from the path. + return filename:gsub("tests/src/(.-)/", "src/") + else + return filename:gsub("tests/", "src/") + end + else + filename = filename:gsub(".php$", "Test.php") + + if filename:find "modules/custom" then + -- Drupal test types. + local test_types = { "Functional", "FunctionalJavaScript", "Kernel", "Unit" } + + for _, test_type in ipairs(test_types) do + local filename_with_test_type = filename:gsub("src/", string.format("tests/src/%s/", test_type)) + + -- Return the first matching test file that exists. + if vim.fn.filereadable(filename_with_test_type) == 1 then + return filename_with_test_type + end + end + end + end + end) + + if vim.fn.filereadable "composer.json" == 1 then + vim.fn["edit_alternate#rule#add"]("json", function(filename) + if filename:find "composer.json" then + return (filename:gsub("%.json$", ".lock")) + end + end) + + vim.fn["edit_alternate#rule#add"]("lock", function(filename) + if filename:find "composer.lock" then + return (filename:gsub("%.lock$", ".json")) + end + end) + end + + if vim.fn.filereadable "fractal.config.js" == 1 then + vim.fn["edit_alternate#rule#add"]("twig", function(filename) + return (filename:gsub("%.twig$", ".config.yml")) + end) + + vim.fn["edit_alternate#rule#add"]("yml", function(filename) + return (filename:gsub("%.config.yml$", ".twig")) + end) + end + ''; +} diff --git a/modules2/nixvim/edit-alternate/extra-plugins.nix b/modules2/nixvim/edit-alternate/extra-plugins.nix new file mode 100644 index 00000000..ca795f18 --- /dev/null +++ b/modules2/nixvim/edit-alternate/extra-plugins.nix @@ -0,0 +1,31 @@ +{ inputs, ... }: + +{ + flake.modules.nixvim.custom = + { pkgs, ... }: + { + extraPlugins = + let + inherit (pkgs.vimUtils) buildVimPlugin; + in + [ + (buildVimPlugin { + pname = "conf-vim"; + src = inputs.conf-vim; + version = "unstable"; + }) + + (buildVimPlugin { + pname = "edit-alternate-vim"; + src = inputs.edit-alternate-vim; + version = "unstable"; + }) + + (buildVimPlugin { + pname = "standard-vim"; + src = inputs.standard-vim; + version = "unstable"; + }) + ]; + }; +} diff --git a/modules2/nixvim/edit-alternate/keymaps.nix b/modules2/nixvim/edit-alternate/keymaps.nix new file mode 100644 index 00000000..fa375bab --- /dev/null +++ b/modules2/nixvim/edit-alternate/keymaps.nix @@ -0,0 +1,9 @@ +{ + flake.modules.nixvim.custom.keymaps = [ + { + action = "EditAlternate"; + key = "ea"; + mode = "n"; + } + ]; +}