at 15.09-beta 2.1 kB view raw
1{ pkgs, lib, config, ... }: 2 3with lib; 4 5let 6 7 cfg = config.services.ihaskell; 8 ihaskell = pkgs.ihaskell.override { 9 inherit (cfg.haskellPackages) ihaskell ghcWithPackages; 10 packages = self: cfg.extraPackages self; 11 }; 12 13in 14 15{ 16 options = { 17 services.ihaskell = { 18 enable = mkOption { 19 default = false; 20 example = true; 21 description = "Autostart an IHaskell notebook service."; 22 }; 23 24 haskellPackages = mkOption { 25 default = pkgs.haskellngPackages; 26 defaultText = "pkgs.haskellngPackages"; 27 example = literalExample "pkgs.haskell-ng.packages.ghc784"; 28 description = '' 29 haskellPackages used to build IHaskell and other packages. 30 This can be used to change the GHC version used to build 31 IHaskell and the packages listed in 32 <varname>extraPackages</varname>. 33 ''; 34 }; 35 36 extraPackages = mkOption { 37 default = self: []; 38 example = literalExample '' 39 haskellPackages: [ 40 haskellPackages.wreq 41 haskellPackages.lens 42 ] 43 ''; 44 description = '' 45 Extra packages available to ghc when running ihaskell. The 46 value must be a function which receives the attrset defined 47 in <varname>haskellPackages</varname> as the sole argument. 48 ''; 49 }; 50 }; 51 }; 52 53 config = mkIf cfg.enable { 54 55 users.extraUsers.ihaskell = { 56 group = config.users.extraGroups.ihaskell.name; 57 description = "IHaskell user"; 58 home = "/var/lib/ihaskell"; 59 createHome = true; 60 uid = config.ids.uids.ihaskell; 61 }; 62 63 users.extraGroups.ihaskell.gid = config.ids.gids.ihaskell; 64 65 systemd.services.ihaskell = { 66 description = "IHaskell notebook instance"; 67 wantedBy = [ "multi-user.target" ]; 68 after = [ "network.target" ]; 69 serviceConfig = { 70 User = config.users.extraUsers.ihaskell.name; 71 Group = config.users.extraGroups.ihaskell.name; 72 ExecStart = "${pkgs.stdenv.shell} -c \"cd $HOME;${ihaskell}/bin/ihaskell-notebook\""; 73 }; 74 }; 75 }; 76}