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