Dotenv files for Haskell
In most applications, configuration should be separated from code. While it usually works well to keep configuration in the environment, there are cases where you may want to store configuration in a file outside of version control.
In most cases you will just add
dotenv to your cabal file. You can
also install the library and executable by invoking
stack install dotenv.
Set configuration variables in a file following the format below:
Dotenv.load from your Haskell program reads the above
settings into the environment:
import qualified Configuration.Dotenv as Dotenv Dotenv.loadFile False "/path/to/your/file"
Dotenv.load, you are able to read the values set in your
environment using standard functions from
System.Environment such as
The first argument to
loadFile specifies whether you want to
override system settings.
False means Dotenv will respect
already-defined variables, and
True means Dotenv will overwrite
Advanced Dotenv File Syntax
You can add comments to your Dotenv file, on separate lines or after values. Values can be wrapped in single or double quotes. Multi-line values can be specified by wrapping the value in double-quotes, and using the "\n" character to represent newlines.
The spec file is the best place to understand the nuances of Dotenv file parsing.
You can call dotenv from the command line in order to load settings from one or more dotenv file before invoking an executable:
dotenv -f mydotenvfile myprogram
Aditionally you can pass arguments and flags to the program passed to Dotenv:
dotenv -f mydotenvfile myprogram -- --myflag myargument
env program in most Unix-like environments prints out the
current environment settings. By invoking the program
env in place
myprogram above you can see what the environment will look like
after evaluating multiple Dotenv files.
(C) 2015-2017 Stack Builders Inc.
Add support for variable expansion. Thanks to حبيب الامين (GitHub: habibalamin) for making this contribution.
Add the option to pass arguments to the program passed to Dotenv. Thanks to Oleg Grenrus (GitHub: phadej) for making this contribution.
Made interface more polymorphic so the functions works in any instance of
MonadIO, not only
IO. This should reduce amount of lifting in some cases.
onMissingFilehelper to deal with possibly missing files.
Parser was rewritten to take full advantage of Megaparsec.
hspec-megaparsecis now used for testing of the parser.
Dropped support for GHC 7.4.
Allow optparse-applicative 0.13
Remove unnecessary package dependencies.
- Reverted change to Data.Text in favor of String, for maintaining compatibility with common Haskell system libraries. Added separate interface for parsing a file into tuples containing Data.Text values. Thanks to Daisuke Fujimura (GitHub: fujimura).
- Fixed parsing of CRLF characters for Windows users.
Dotenv 0.2.0.0 (deprecated)
- Changed public interfaces to use Data.Text.
- Added function
parseFileto read dotenv file without modifying the environment. Thanks to Daisuke Fujimura (GitHub: fujimura) for making this contribution.
- First public release.