about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/editors/spacevim
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/applications/editors/spacevim')
-rw-r--r--nixpkgs/pkgs/applications/editors/spacevim/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/editors/spacevim/helptags.patch18
-rw-r--r--nixpkgs/pkgs/applications/editors/spacevim/init.nix46
3 files changed, 142 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/editors/spacevim/default.nix b/nixpkgs/pkgs/applications/editors/spacevim/default.nix
new file mode 100644
index 000000000000..3db7c73fd422
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/spacevim/default.nix
@@ -0,0 +1,78 @@
+{ ripgrep
+, git
+, fzf
+, makeWrapper
+, vim-full
+, vimPlugins
+, fetchFromGitHub
+, lib
+, stdenv
+, formats
+, runCommand
+, spacevim_config ? import ./init.nix
+}:
+
+let
+  format = formats.toml { };
+  vim-customized = vim-full.customize {
+    name = "vim";
+    # Not clear at the moment how to import plugins such that
+    # SpaceVim finds them and does not auto download them to
+    # ~/.cache/vimfiles/repos
+    vimrcConfig.packages.myVimPackage = with vimPlugins; { start = [ ]; };
+  };
+  spacevimdir = runCommand "SpaceVim.d" { } ''
+    mkdir -p $out
+    cp ${format.generate "init.toml" spacevim_config} $out/init.toml
+  '';
+in
+stdenv.mkDerivation rec {
+  pname = "spacevim";
+  version = "1.8.0";
+  src = fetchFromGitHub {
+    owner = "SpaceVim";
+    repo = "SpaceVim";
+    rev = "v${version}";
+    sha256 = "sha256:11snnh5q47nqhzjb9qya6hpnmlzc060958whqvqrh4hc7gnlnqp8";
+  };
+
+  nativeBuildInputs = [ makeWrapper vim-customized ];
+  buildInputs = [ vim-customized ];
+
+  buildPhase = ''
+    runHook preBuild
+    # generate the helptags
+    vim -u NONE -c "helptags $(pwd)/doc" -c q
+    runHook postBuild
+  '';
+
+  patches = [
+    # Don't generate helptags at runtime into read-only $SPACEVIMDIR
+    ./helptags.patch
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+
+    cp -r $(pwd) $out/SpaceVim
+
+    # trailing slash very important for SPACEVIMDIR
+    makeWrapper "${vim-customized}/bin/vim" "$out/bin/spacevim" \
+        --add-flags "-u $out/SpaceVim/vimrc" --set SPACEVIMDIR "${spacevimdir}/" \
+        --prefix PATH : ${lib.makeBinPath [ fzf git ripgrep]}
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Modern Vim distribution";
+    longDescription = ''
+      SpaceVim is a distribution of the Vim editor that’s inspired by spacemacs.
+    '';
+    homepage = "https://spacevim.org/";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.fzakaria ];
+    platforms = platforms.all;
+    mainProgram = "spacevim";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/editors/spacevim/helptags.patch b/nixpkgs/pkgs/applications/editors/spacevim/helptags.patch
new file mode 100644
index 000000000000..bc0f9140c7be
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/spacevim/helptags.patch
@@ -0,0 +1,18 @@
+diff --git a/autoload/SpaceVim.vim b/autoload/SpaceVim.vim
+index 16688680..fcafd6f7 100644
+--- a/autoload/SpaceVim.vim
++++ b/autoload/SpaceVim.vim
+@@ -1355,13 +1355,6 @@ function! SpaceVim#end() abort
+     let &helplang = 'jp'
+   endif
+   ""
+-  " generate tags for SpaceVim
+-  let help = fnamemodify(g:_spacevim_root_dir, ':p:h') . '/doc'
+-  try
+-    exe 'helptags ' . help
+-  catch
+-    call SpaceVim#logger#warn('Failed to generate helptags for SpaceVim')
+-  endtry
+ 
+   ""
+   " set language
diff --git a/nixpkgs/pkgs/applications/editors/spacevim/init.nix b/nixpkgs/pkgs/applications/editors/spacevim/init.nix
new file mode 100644
index 000000000000..7174e45c0b77
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/spacevim/init.nix
@@ -0,0 +1,46 @@
+# The Nix expression is a 1:1 mapping of the spacevim toml config which you can find on their website: spacevim.org/quick-start-guide/#configuration
+
+{
+  custom_plugins = [{
+    merged = false;
+    name = "lilydjwg/colorizer";
+  }];
+  layers = [
+    { name = "default"; }
+    {
+      enable = true;
+      name = "colorscheme";
+    }
+    { name = "fzf"; }
+    {
+      default_height = 30;
+      default_position = "top";
+      name = "shell";
+    }
+    { name = "edit"; }
+    { name = "VersionControl"; }
+    { name = "git"; }
+    {
+      auto-completion-return-key-behavior = "complete";
+      auto-completion-tab-key-behavior = "cycle";
+      autocomplete_method = "coc";
+      name = "autocomplete";
+    }
+    { name = "lang#ruby"; }
+    { name = "lang#nix"; }
+    { name = "lang#java"; }
+    { name = "lang#kotlin"; }
+    { name = "lang#sh"; }
+    { name = "lang#html"; }
+  ];
+  options = {
+    buffer_index_type = 4;
+    colorscheme = "gruvbox";
+    colorscheme_bg = "dark";
+    enable_guicolors = true;
+    enable_statusline_mode = true;
+    enable_tabline_filetype_icon = true;
+    statusline_separator = "fire";
+    timeoutlen = 500;
+  };
+}