Home Explore Blog Models CI



nixpkgs

2nd chunk of `doc/packages/eclipse.section.md`
faece4744126a594ff4424da7a920cc86aaaa3f9c8dc0cce0000000100000c63
If you prefer to install plugins in a more declarative manner, then Nixpkgs also offers several Eclipse plugins that can be installed in an _Eclipse environment_. This type of environment is created using the function `eclipseWithPlugins` found inside the `nixpkgs.eclipses` attribute set. This function takes as an argument `{ eclipse, plugins ? [], jvmArgs ? [] }` where `eclipse` is one of the Eclipse packages described above, `plugins` is a list of plugin derivations, and `jvmArgs` is a list of arguments given to the JVM running Eclipse. For example, say you wish to install the latest Eclipse Platform with the popular Eclipse Color Theme plugin and also allow Eclipse to use more RAM. You could then add:

```nix
{
  packageOverrides = pkgs: {
    myEclipse =
      with pkgs.eclipses;
      eclipseWithPlugins {
        eclipse = eclipse-platform;
        jvmArgs = [ "-Xmx2048m" ];
        plugins = [ plugins.color-theme ];
      };
  };
}
```

to your Nixpkgs configuration (`~/.config/nixpkgs/config.nix`) and install it by running `nix-env -f '<nixpkgs>' -iA myEclipse` and afterward running Eclipse as usual. It is possible to find out which plugins are available for installation using `eclipseWithPlugins` by running:

```ShellSession
$ nix-env -f '<nixpkgs>' -qaP -A eclipses.plugins --description
```

If there is a need to install plugins that are not available in Nixpkgs then it may be possible to define these plugins outside Nixpkgs using the `buildEclipseUpdateSite` and `buildEclipsePlugin` functions found in the `nixpkgs.eclipses.plugins` attribute set. Use the `buildEclipseUpdateSite` function to install a plugin distributed as an Eclipse update site. This function takes `{ name, src }` as argument, where `src` indicates the Eclipse update site archive. All Eclipse features and plugins within the downloaded update site will be installed. When an update site archive is not available, then the `buildEclipsePlugin` function can be used to install a plugin that consists of a pair of feature and plugin JARs. This function takes an argument `{ name, srcFeature, srcPlugin }` where `srcFeature` and `srcPlugin` are the feature and plugin JARs, respectively.

Expanding the previous example with two plugins using the above functions, we have:

```nix
{
  packageOverrides = pkgs: {
    myEclipse =
      with pkgs.eclipses;
      eclipseWithPlugins {
        eclipse = eclipse-platform;
        jvmArgs = [ "-Xmx2048m" ];
        plugins = [
          plugins.color-theme
          (plugins.buildEclipsePlugin {
            name = "myplugin1-1.0";
            srcFeature = fetchurl {
              url = "http://…/features/myplugin1.jar";
              hash = "sha256-123…";
            };
            srcPlugin = fetchurl {
              url = "http://…/plugins/myplugin1.jar";
              hash = "sha256-123…";
            };
          })
          (plugins.buildEclipseUpdateSite {
            name = "myplugin2-1.0";
            src = fetchurl {
              stripRoot = false;
              url = "http://…/myplugin2.zip";
              hash = "sha256-123…";
            };
          })
        ];
      };
  };
}
```

Title: Declarative Eclipse Plugin Management in Nixpkgs, Including Custom Plugins
Summary
This document explains how to declaratively install Eclipse plugins using Nixpkgs' `eclipseWithPlugins` function, which creates a custom Eclipse environment. This function accepts an Eclipse package, a list of plugin derivations, and JVM arguments (e.g., for memory allocation). An example demonstrates installing `eclipse-platform` with the `color-theme` plugin and increased RAM. Users can list available Nixpkgs plugins using `nix-env`. For plugins not available in Nixpkgs, `buildEclipseUpdateSite` can be used to incorporate an entire Eclipse update site archive, and `buildEclipsePlugin` can integrate individual feature and plugin JARs, allowing for comprehensive customization of Eclipse environments.