2023-05-08 21:41:02 +00:00
|
|
|
{ config, lib, pkgs, ... }:
|
2023-04-27 10:07:16 +00:00
|
|
|
let
|
2023-05-08 19:18:02 +00:00
|
|
|
inherit (builtins) map;
|
|
|
|
inherit (lib) mkIf mkOption optionalString types;
|
|
|
|
cfg = config.sane.programs.docsets.config;
|
|
|
|
configOpts = types.submodule {
|
|
|
|
options = {
|
|
|
|
rustPkgs = mkOption {
|
|
|
|
type = types.listOf types.str;
|
|
|
|
default = [ ];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
2023-04-27 10:07:16 +00:00
|
|
|
in {
|
2023-05-10 21:24:55 +00:00
|
|
|
sane.programs.zeal = {
|
|
|
|
package = pkgs.zeal-qt5;
|
2023-04-27 10:07:16 +00:00
|
|
|
persist.plaintext = [
|
|
|
|
".cache/Zeal"
|
|
|
|
".local/share/Zeal"
|
|
|
|
];
|
2023-05-08 21:41:02 +00:00
|
|
|
fs.".local/share/Zeal/Zeal/docsets/system".symlink.target = "/run/current-system/sw/share/docset";
|
2023-05-08 19:18:02 +00:00
|
|
|
suggestedPrograms = [ "docsets" ];
|
|
|
|
};
|
|
|
|
|
|
|
|
sane.programs.docsets = {
|
|
|
|
configOption = mkOption {
|
|
|
|
type = configOpts;
|
|
|
|
default = {};
|
|
|
|
};
|
|
|
|
package = pkgs.symlinkJoin {
|
|
|
|
name = "docsets";
|
|
|
|
# build each package with rust docs
|
|
|
|
paths = map (name:
|
|
|
|
let
|
|
|
|
orig = pkgs."${name}";
|
|
|
|
withDocs = orig.overrideAttrs (upstream: {
|
|
|
|
nativeBuildInputs = upstream.nativeBuildInputs or [] ++ [
|
|
|
|
pkgs.cargoDocsetHook
|
|
|
|
];
|
|
|
|
});
|
|
|
|
in
|
|
|
|
"${toString withDocs}/share/docset"
|
|
|
|
) cfg.rustPkgs;
|
|
|
|
# link only the docs (not any binaries)
|
|
|
|
postBuild = optionalString (cfg.rustPkgs != []) ''
|
|
|
|
mkdir -p $out/share/docset
|
|
|
|
mv $out/*.docset $out/share/docset
|
|
|
|
'';
|
|
|
|
};
|
2023-04-27 10:07:16 +00:00
|
|
|
};
|
|
|
|
|
2023-05-10 21:24:55 +00:00
|
|
|
environment.pathsToLink = mkIf config.sane.programs.zeal.enabled [
|
2023-04-27 10:07:16 +00:00
|
|
|
"/share/docset"
|
|
|
|
];
|
|
|
|
}
|