nixpkgs/nixos/modules/services/development/hoogle.nix
2016-04-22 03:58:07 +02:00

69 lines
1.6 KiB
Nix

{ config, lib, pkgs, ... }:
# services.hoogle = {
# enable = true;
# packages = hp: with hp; [ text lens ];
# haskellPackages = pkgs.haskellPackages;
# };
with lib;
let
cfg = config.services.hoogle;
ghcWithHoogle = pkgs.haskellPackages.ghcWithHoogle;
in {
options.services.hoogle = {
enable = mkEnableOption "Hoogle Documentation service";
port = mkOption {
type = types.int;
default = 8080;
description = ''
Port number Hoogle will be listening to.
'';
};
packages = mkOption {
default = hp: [];
example = "hp: with hp; [ text lens ]";
description = ''
A function that returns a list of Haskell packages to generate
documentation for.
The argument will be a Haskell package set provided by the
haskellPackages config option.
'';
};
haskellPackages = mkOption {
description = "Which haskell package set to use.";
example = "pkgs.haskellPackages";
type = types.attrs;
};
};
config = mkIf cfg.enable {
systemd.services.hoogle = {
description = "Hoogle Haskell documentation search";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Restart = "always";
ExecStart =
let env = cfg.haskellPackages.ghcWithHoogle cfg.packages;
hoogleEnv = pkgs.buildEnv {
name = "hoogleServiceEnv";
paths = [env];
};
in ''
${hoogleEnv}/bin/hoogle server --local -p ${toString cfg.port}
'';
};
};
};
}