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