Compare commits

..

4 Commits

Author SHA1 Message Date
9c4a68e3aa
jetbrains: add plugins to passthrough 2020-10-18 18:15:35 +11:00
7959b877d9
jetbrains: rework following the Emacs builder
This commit moves a lot of the heavy lifting out of callPackage and back
into regular import, following conventions from upstream Nixpkgs. It
allows for a clearer and less magic definition of new packages,
particularly by downstream, as well, by exposing the *Build package
callers in the attribute set.
2020-10-18 17:47:48 +11:00
1a129ac179
modules/radeon-profile-daemon: fix package import path 2020-10-18 14:41:42 +11:00
32e8d6c12d
modules/amdgpu-fan: fix package import path 2020-10-18 14:39:36 +11:00
10 changed files with 173 additions and 84 deletions

View File

@ -63,38 +63,25 @@ rec {
}; };
# A functional Jetbrains IDE-with-plugins package set. # A functional Jetbrains IDE-with-plugins package set.
jetbrains = jetbrains = pkgs.dontRecurseIntoAttrs rec {
let jetbrainsPluginsFor = variant: import ./pkgs/top-level/jetbrains-plugins.nix {
mkJetbrainsPlugins = import ./pkgs/applications/editors/jetbrains/common-plugins.nix { inherit (pkgs) lib newScope stdenv fetchzip;
inherit (pkgs) callPackage; inherit variant;
};
mkIdeaPlugins = import ./pkgs/applications/editors/jetbrains/idea-plugins.nix {
inherit (pkgs) callPackage;
};
builder = import ./pkgs/applications/editors/jetbrains/builder.nix {
inherit (pkgs) lib;
};
jbScope = pkgs.lib.makeScope pkgs.newScope (self: pkgs.lib.makeOverridable
({ jetbrainsPlugins ? mkJetbrainsPlugins
, ideaPlugins ? mkIdeaPlugins
}: ({ }
// jetbrainsPlugins // { inherit jetbrainsPlugins; }
// ideaPlugins // { inherit ideaPlugins; }
// {
jetbrainsWithPlugins = builder self;
}))
{ });
in
rec {
inherit (jbScope) jetbrainsWithPlugins;
clionWithPlugins = jetbrainsWithPlugins pkgs.jetbrains.clion;
ideaCommunityWithPlugins = jetbrainsWithPlugins pkgs.jetbrains.idea-community;
ideaUltimateWithPlugins = jetbrainsWithPlugins pkgs.jetbrains.idea-ultimate;
plugins = jbScope;
}; };
pluginBuild = jetbrainsPlatforms: pkgs.callPackage ./pkgs/build-support/jetbrains/plugin.nix {
inherit jetbrains jetbrainsPlatforms;
};
clionPlugins = pkgs.dontRecurseIntoAttrs (jetbrainsPluginsFor pkgs.jetbrains.clion);
ideaCommunityPlugins = pkgs.dontRecurseIntoAttrs (jetbrainsPluginsFor pkgs.jetbrains.idea-community);
ideaUltimatePlugins = pkgs.dontRecurseIntoAttrs (jetbrainsPluginsFor pkgs.jetbrains.idea-ultimate);
clionWithPlugins = clionPlugins.jetbrainsWithPlugins;
ideaCommunityWithPlugins = ideaCommunityPlugins.jetbrainsWithPlugins;
ideaUltimateWithPlugins = ideaUltimatePlugins.jetbrainsWithPlugins;
};
libhl = pkgs.callPackage ./pkgs/development/libraries/libhl { }; libhl = pkgs.callPackage ./pkgs/development/libraries/libhl { };
mopidy-subidy = pkgs.callPackage ./pkgs/applications/audio/mopidy/subidy.nix { mopidy-subidy = pkgs.callPackage ./pkgs/applications/audio/mopidy/subidy.nix {

View File

@ -13,6 +13,12 @@ in
options.services.amdgpu.fan = { options.services.amdgpu.fan = {
enable = mkEnableOption "amdgpu-fan"; enable = mkEnableOption "amdgpu-fan";
package = mkOption {
type = types.package;
default = pkgs.amdgpu-fan or (import ../../.. { inherit pkgs; }).amdgpu-fan;
defaultText = "pkgs.amdgpu-fan";
};
speedMatrix = mkOption { speedMatrix = mkOption {
type = with types; listOf (listOf int); type = with types; listOf (listOf int);
# Translated from upstream default config. Since it tries to write the # Translated from upstream default config. Since it tries to write the
@ -45,7 +51,7 @@ in
config = mkIf cfg.enable { config = mkIf cfg.enable {
assertions = singleton { assertions = singleton {
assertion = all (speeds: length speeds == 2) cfg.speedMatrix; assertion = all (speeds: length speeds == 2) cfg.speedMatrix;
message = "services.amdgpu-fan.speedMatrix must be a list of paired lists"; message = "services.amdgpu.fan.speedMatrix must be a list of paired lists";
}; };
environment.etc."amdgpu-fan.yml".text = builtins.toJSON { environment.etc."amdgpu-fan.yml".text = builtins.toJSON {
@ -60,9 +66,9 @@ in
amdgpu-fan = { amdgpu-fan = {
description = "amdgpu fan controller"; description = "amdgpu fan controller";
wantedBy = [ "default.target" ]; wantedBy = [ "default.target" ];
after = [ "enable-manual-amdgpu-fan.service" ]; after = [ "amdgpu-pwm.service" ];
serviceConfig = { serviceConfig = {
ExecStart = "${pkgs.amdgpu-fan}/bin/amdgpu-fan"; ExecStart = "${cfg.package}/bin/amdgpu-fan";
Restart = "always"; Restart = "always";
}; };
}; };

View File

@ -11,6 +11,12 @@ in
{ {
options.services.radeon-profile-daemon = { options.services.radeon-profile-daemon = {
enable = mkEnableOption "radeon-profile-daemon"; enable = mkEnableOption "radeon-profile-daemon";
package = mkOption {
type = types.package;
default = pkgs.radeon-profile-daemon or (import ../../.. { inherit pkgs; }).radeon-profile-daemon;
defaultText = "pkgs.radeon-profile-daemon";
};
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -18,10 +24,10 @@ in
radeon-profile-daemon = { radeon-profile-daemon = {
description = "radeon-profile daemon"; description = "radeon-profile daemon";
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
after = [ "enable-manual-amdgpu-fan.service" ]; after = [ "amdgpu-pwm.service" ];
serviceConfig = { serviceConfig = {
Type = "simple"; Type = "simple";
ExecStart = "${pkgs.radeon-profile-daemon}/bin/radeon-profile-daemon"; ExecStart = "${package}/bin/radeon-profile-daemon";
}; };
}; };
}; };

View File

@ -1,6 +1,11 @@
{ callPackage }: { lib, stdenv, fetchzip }:
self:
let let
mkPlugin = callPackage ./build-plugin.nix {
commonBuild = import ../../../build-support/jetbrains/plugin.nix {
inherit lib stdenv fetchzip;
jetbrainsPlatforms = [ jetbrainsPlatforms = [
"clion" "clion"
"datagrip" "datagrip"
@ -15,30 +20,22 @@ let
"webstorm" "webstorm"
]; ];
}; };
in
{
ideavim = mkPlugin {
pname = "IdeaVim";
version = "0.57";
pluginId = 164;
versionId = 85009;
sha256 = "1rwfwj0b0nwi7jxhzxk1r0xc190nf4i3b59i0zknpmgb4yc5clzw";
};
checkstyle-idea = mkPlugin { generateCommon = lib.makeOverridable ({
pname = "CheckStyle-IDEA"; common ? ./manual-common-packages.nix
version = "5.42.0"; }: let
pluginId = 1065;
versionId = 95757; imported = import common {
sha256 = "0sji3649n5zz84dlidqaklipq6vaiafxsvg0gzy3j59mvkz6dk14"; inherit (self) callPackage;
}; };
super = imported;
overrides = { };
jetbrainsPlugins = super // overrides;
in jetbrainsPlugins // { inherit commonBuild; });
in generateCommon { }
google-java-format = mkPlugin rec {
pname = "google-java-format";
version = "1.7.0.4";
pluginId = 8527;
versionId = 83164;
sha256 = "1pmnn1ksiv44kdga53gi3psrm2sva4bqrxizagbr0if2n0rrvgii";
filename = "${pname}.zip";
};
}

View File

@ -1,15 +1,29 @@
{ callPackage }: { lib, stdenv, fetchzip }:
self:
let let
mkPlugin = callPackage ./build-plugin.nix {
ideaBuild = import ../../../build-support/jetbrains/plugin.nix {
inherit lib stdenv fetchzip;
jetbrainsPlatforms = [ "idea-community" "idea-ultimate" ]; jetbrainsPlatforms = [ "idea-community" "idea-ultimate" ];
}; };
in
{ generateIdea = lib.makeOverridable ({
spring-assistant = mkPlugin { idea ? ./manual-idea-packages.nix
pname = "intellij-spring-assistant"; }: let
version = "0.12.0";
pluginId = 10229; imported = import idea {
versionId = 44968; inherit (self) callPackage;
sha256 = "13cglywzhb4j0qj0bs2jwaz2k8pxrxalv35wgkmgkxr635bxmwsj"; };
};
} super = imported;
overrides = { };
ideaPlugins = super // overrides;
in ideaPlugins // { inherit ideaBuild; });
in generateIdea { }

View File

@ -0,0 +1,33 @@
{ callPackage }:
{
ideavim = callPackage
({ commonBuild }: commonBuild {
pname = "IdeaVim";
version = "0.57";
pluginId = 164;
versionId = 85009;
sha256 = "1rwfwj0b0nwi7jxhzxk1r0xc190nf4i3b59i0zknpmgb4yc5clzw";
})
{ };
checkstyle-idea = callPackage
({ commonBuild }: commonBuild {
pname = "CheckStyle-IDEA";
version = "5.42.0";
pluginId = 1065;
versionId = 95757;
sha256 = "0sji3649n5zz84dlidqaklipq6vaiafxsvg0gzy3j59mvkz6dk14";
})
{ };
google-java-format = callPackage
({ commonBuild }: commonBuild rec {
pname = "google-java-format";
version = "1.7.0.4";
pluginId = 8527;
versionId = 83164;
sha256 = "1pmnn1ksiv44kdga53gi3psrm2sva4bqrxizagbr0if2n0rrvgii";
filename = "${pname}.zip";
})
{ };
}

View File

@ -0,0 +1,12 @@
{ callPackage }:
{
spring-assistant = callPackage
({ ideaBuild }: ideaBuild {
pname = "intellij-spring-assistant";
version = "0.12.0";
pluginId = 10229;
versionId = 44968;
sha256 = "13cglywzhb4j0qj0bs2jwaz2k8pxrxalv35wgkmgkxr635bxmwsj";
})
{ };
}

View File

@ -12,22 +12,20 @@ let
then pluginsFun self then pluginsFun self
else pluginsFun; else pluginsFun;
# FIXME: Is this still needed?
info = builtins.parseDrvName package.name; info = builtins.parseDrvName package.name;
badPlugins = filter (p: ! elem info.name p.jetbrainsPlatforms) plugins; badPlugins = filter (p: ! elem info.name p.jetbrainsPlatforms) plugins;
errorMsg = "plugins [ ${toString (map (p: p.name) badPlugins)} ] are not available for platform ${info.name}"; errorMsg = "plugins [ ${toString (map (p: p.name) badPlugins)} ] are not available for platform ${info.name}";
in in
assert assertMsg (length badPlugins == 0) errorMsg; assert assertMsg (length badPlugins == 0) errorMsg;
package.overrideAttrs (oldAttrs: { appendToName "with-plugins" (package.overrideAttrs (oldAttrs: {
# FIXME: versioning: could just expose upstream passthru = { inherit plugins; };
name = "${info.name}-with-plugins-${info.version}"; # TODO: Purely aesthetics, but link the plugin to its name instead of hash-name-version
inherit plugins;
installPhase = oldAttrs.installPhase + '' installPhase = oldAttrs.installPhase + ''
for plugin in $plugins; do for plugin in $plugins; do
ln -s "$plugin" "$out/$name/plugins/$(basename $plugin)" ln -s "$plugin" "$out/$name/plugins/$(basename $plugin)"
done done
''; '';
}) }))

View File

@ -1,4 +1,5 @@
{ stdenv { lib
, stdenv
, fetchzip , fetchzip
, jetbrainsPlatforms , jetbrainsPlatforms
}: }:
@ -12,19 +13,21 @@
}: }:
stdenv.mkDerivation { stdenv.mkDerivation {
inherit pname version jetbrainsPlatforms; inherit pname version;
src = fetchzip { src = fetchzip {
inherit sha256; inherit sha256;
url = "https://plugins.jetbrains.com/files/${toString pluginId}/${toString versionId}/${filename}"; url = "https://plugins.jetbrains.com/files/${toString pluginId}/${toString versionId}/${filename}";
}; };
passthru = { inherit jetbrainsPlatforms; };
installPhase = '' installPhase = ''
mkdir $out mkdir $out
cp -r * $out/ cp -r * $out/
''; '';
meta = { meta = {
homepage = "https://plugins.jetbrains.com/plugin/${pluginId}-${stdenv.lib.toLower pname}"; homepage = "https://plugins.jetbrains.com/plugin/${pluginId}-${lib.toLower pname}";
}; };
} }

View File

@ -0,0 +1,33 @@
{ lib
, newScope
, stdenv
, fetchzip
, variant
}:
let
mkJetbrainsPlugins = import ../applications/editors/jetbrains/common-plugins.nix {
inherit lib stdenv fetchzip;
};
mkIdeaPlugins = import ../applications/editors/jetbrains/idea-plugins.nix {
inherit lib stdenv fetchzip;
};
jetbrainsWithPlugins = import ../applications/editors/jetbrains/wrapper.nix {
inherit lib;
};
in lib.makeScope newScope (self: lib.makeOverridable ({
jetbrainsPlugins ? mkJetbrainsPlugins self
, ideaPlugins ? mkIdeaPlugins self
}: ({ }
// jetbrainsPlugins // { inherit jetbrainsPlugins; }
// ideaPlugins // { inherit ideaPlugins; }
// {
inherit variant;
jetbrainsWithPlugins = jetbrainsWithPlugins self variant;
})
) { })