nix-files/hosts/common/programs/zeal.nix

60 lines
1.6 KiB
Nix

{ config, lib, pkgs, ... }:
let
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 = [ ];
};
};
};
in {
sane.programs.zeal = {
# packageUnwrapped = pkgs.zeal-qt6; #< TODO: upgrade system to qt6 versions of everything (i.e. jellyfin-media-player, nheko)
packageUnwrapped = pkgs.zeal-qt5;
slowToBuild = true;
persist.byStore.plaintext = [
".cache/Zeal"
".local/share/Zeal"
];
fs.".local/share/Zeal/Zeal/docsets/system".symlink.target = "/run/current-system/sw/share/docset";
suggestedPrograms = [ "docsets" ];
};
sane.programs.docsets = {
configOption = mkOption {
type = configOpts;
default = {};
};
packageUnwrapped = 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
'';
};
sandbox.enable = false; # meta-package; no binaries
};
environment.pathsToLink = mkIf config.sane.programs.zeal.enabled [
"/share/docset"
];
}