A ready-to-use Nix shell environment tailored for Haskell, having Haskell Streamly and its ecosystem packages installed out of the box. Easily customizable to include any package from Hackage. Includes:
nvim: Stylish Vim IDE with pluginscodium: Visual Studio Code with extensionsghc: the Haskell compilercabal: the Haskell project build tool- HLS: the Haskell language server
- Hoogle server for searchable documentation
- Essential Haskell development tools
- Streamly ecosystem libraries
The version of nixpkgs can be changed in the default.nix or
flake.nix files whichever you use.
Please refer to this page for Haskell language server features.
There are two ways to start the nix shell.
To get a shell with the development environment installed in it, use the following command:
nix-shell https://github.com/composewell/streamly-packages/archive/master.tar.gz
If it takes too long to build the hoogle file you can disable hoogle:
nix-shell --arg hoogle false ...
Use the cloning method if you would like to customize the environment before using. For example, if it is using too much space installing packages that you do not need.
You can clone the streamly-packages repo and run nix-shell
command from the repo root directory.
git clone https://github.com/composewell/streamly-packages
cd streamly-packages
nix-shell
You can comment out any packages you do not need in packages.nix.
Once you are in the shell, you can use ghc, cabal, nvim, codium,
hoogle, and other CLI tools from the PATH. Essential streamly packages
are pre-installed in the ghc package database, ready to use.
To start with, you can try building and running the examples from the streamly-examples package.
Alternatively, you can start the interactive repl ghci and play with Haskell
code interactively.
To show the Haskell packages that are already installed in the shell, run the following command in the nix shell:
ghc-pkg list
We do not depend on cabal to download and build the dependencies. Instead add your project dependencies in the library section of packages.nix, any package specified here and all its dependencies are pre-installed in the shell from nixpkgs.
For example to build the streamly-examples package:
git clone https://github.com/composewell/streamly-examples
cd streamly-examples
cabal build
To override or update the versions of Haskell packages used, edit the sources.nix file to specify particular git commit ids or package versions from hackage to be used.
If you need any additional packages in this environment just add them to the list of packages in packages.nix.
Inside the nix shell, run the following command:
hoogle server --local -p 8080
Open the URL http://127.0.0.1:8080 in your browser.
Inside the nix shell, run the following command:
nvim
Use ESC :q to quit.
Use ,h for help.
Use :colorscheme morning if you want a light theme.
Add the following to your $HOME/.config/nvim/coc-settings.json to use the
haskell language server with nvim:
{
"languageserver": {
"haskell": {
"command": "haskell-language-server-wrapper",
"args": ["--lsp"],
"rootPatterns": ["*.cabal", "stack.yaml", "cabal.project", "package.yaml", "hie.yaml"],
"filetypes": ["haskell", "lhaskell"],
"settings": {
"haskell": {
"checkParents": "CheckOnSave",
"checkProject": true,
"formattingProvider": "fourmolu"
}
}
}
}
}
To customize vim plugins see nixpack-editors, fork and edit that repo and change its git URL in packages.nix.
To run VSCodium, the open source version of Microsoft VSCode, run the following command in the nix-shell:
codium
If you have started the nix-shell with haskell-tools included, you
will have the Haskell Language Server installed in the shell. If you
get a pop up saying: "How do you want the extension to manage/discover
HLS and the relevant toolchain?" just choose, "Manually via PATH".
You can also set it later in the following section in settings:
- Extensions
- Haskell
- Manage HLS
- PATH
- Manage HLS
- Haskell
If you wish to use your existing installation of VSCode instead of
codium from the nix-shell, you can do that too, just make sure to run
it from within the nix-shell so that it is able to use the installed
Haskell tools and libraries. For example, on MacOS, if you have your
vscode app in Downloads folder:
open ~/Downloads/Visual\ Studio\ Code.app
To customize vscode extensions see nixpack-editors, fork and edit that repo and change its git URL in packages.nix.