diff --git a/modules/misc/news.nix b/modules/misc/news.nix index 7001dd418..69299ba83 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -1065,6 +1065,17 @@ in A new module is available: 'programs.alacritty'. ''; } + + { + time = "2019-04-26T22:53:48+00:00"; + condition = config.programs.vscode.enable; + message = '' + A new module is available: 'programs.vscode.haskell'. + + Enable to add Haskell IDE Engine and syntax highlighting + support to your VSCode. + ''; + } ]; }; } diff --git a/modules/modules.nix b/modules/modules.nix index 034439125..5674588b6 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -85,6 +85,7 @@ let (loadModule ./programs/urxvt.nix { }) (loadModule ./programs/vim.nix { }) (loadModule ./programs/vscode.nix { }) + (loadModule ./programs/vscode/haskell.nix { }) (loadModule ./programs/zathura.nix { }) (loadModule ./programs/zsh.nix { }) (loadModule ./services/blueman-applet.nix { }) diff --git a/modules/programs/vscode/haskell.nix b/modules/programs/vscode/haskell.nix new file mode 100644 index 000000000..c8ea10d47 --- /dev/null +++ b/modules/programs/vscode/haskell.nix @@ -0,0 +1,66 @@ +{ pkgs, config, lib, ... }: + +with lib; + +let + + cfg = config.programs.vscode.haskell; + + defaultHieNixExe = hie-nix.hies + "/bin/hie-wrapper"; + defaultHieNixExeText = literalExample + "\"\${pkgs.hie-nix.hies}/bin/hie-wrapper\""; + + hie-nix = pkgs.hie-nix or (abort '' + vscode.haskell: pkgs.hie-nix missing. Please add an overlay such as: + ${exampleOverlay} + ''); + + exampleOverlay = '' + nixpkgs.overlays = [ + (self: super: { hie-nix = import ~/src/hie-nix {}; }) + ] + ''; + +in + +{ + options.programs.vscode.haskell = { + enable = mkEnableOption "Haskell integration for Visual Studio Code"; + + hie.enable = mkOption { + type = types.bool; + default = true; + description = "Whether to enable Haskell IDE engine integration."; + }; + + hie.executablePath = mkOption { + type = types.path; + default = defaultHieNixExe; + defaultText = defaultHieNixExeText; + description = '' + The path to the Haskell IDE Engine executable. + + Because hie-nix is not packaged in Nixpkgs, you need to add it as an + overlay or set this option. Example overlay configuration: + ${exampleOverlay} + ''; + example = literalExample '' + (import ~/src/haskell-ide-engine {}).hies + "/bin/hie-wrapper"; + ''; + }; + }; + + config = mkIf cfg.enable { + programs.vscode.userSettings = mkIf cfg.hie.enable { + "languageServerHaskell.enableHIE" = true; + "languageServerHaskell.hieExecutablePath" = cfg.hie.executablePath; + }; + + programs.vscode.extensions = + [ + pkgs.vscode-extensions.justusadam.language-haskell + ] + ++ lib.optional cfg.hie.enable + pkgs.vscode-extensions.alanz.vscode-hie-server; + }; +}