# Customization: .mlrrc ## How to use .mlrrc Suppose you always use CSV files. Then instead of always having to type `--csv` as in GENMD-CARDIFY-HIGHLIGHT-ONE mlr --csv cut -x -f extra mydata.csv GENMD-EOF GENMD-CARDIFY-HIGHLIGHT-ONE mlr --csv sort -n id mydata.csv GENMD-EOF and so on, you can instead put the following into your `$HOME/.mlrrc`: GENMD-CARDIFY --csv GENMD-EOF Then you can just type things like GENMD-CARDIFY-HIGHLIGHT-ONE mlr cut -x -f extra mydata.csv GENMD-EOF GENMD-CARDIFY-HIGHLIGHT-ONE mlr sort -n id mydata.csv GENMD-EOF and the `--csv` part will automatically be understood. If you do want to process, say, a JSON file then `mlr --json ...` at the command line will still override the defaults you've placed in your `.mlrrc`. ## What you can put in your .mlrrc * You can include any command-line flags, except the "terminal" ones such as `--help`. * The `--prepipe`, `--load`, and `--mload` flags aren't allowed in `.mlrrc` as they control code execution, and could result in your scripts running things you don't expect if you receive data from someone with a `./.mlrrc` in it. You can use `--prepipe-bz2`, `--prepipe-gunzip`, and `--prepipe-zcat` in `.mlrrc`, though. * The formatting rule is you need to put one flag beginning with `--` per line: for example, `--csv` on one line and `--nr-progress-mod 1000` on a separate line. * Since every line starts with a `--` option, you can leave off the initial `--` if you want. For example, `ojson` is the same as `--ojson`, and `nr-progress-mod 1000` is the same as `--nr-progress-mod 1000`. * Comments are from a `#` to the end of the line. * Empty lines are ignored -- including lines which are empty after comments are removed. Here is an example `.mlrrc` file: GENMD-INCLUDE-ESCAPED(sample_mlrrc) ## Where to put your .mlrrc If the environment variable `MLRRC` is set: * If its value is `__none__` then no `.mlrrc` files are processed. (This is nice for things like regression testing.) * Otherwise, its value (as a filename) is loaded and processed. If there are syntax errors, they abort `mlr` with a usage message (as if you had mistyped something on the command line). If the file can't be loaded at all, though, it is silently skipped. * Any `.mlrrc` in your home directory or current directory is ignored whenever `MLRRC` is set in the environment. * Example line in your shell's rc file: `export MLRRC=/path/to/my/mlrrc` Otherwise: * If `$HOME/.mlrrc` exists, it's processed as above. * If `./.mlrrc` exists, it's then also processed as above. * The idea is you can have all your settings in your `$HOME/.mlrrc`, then maybe more project-specific settings for your current directory if you like.