# Configuration Extension As for all **`nmk`** projects config items, [**`nmk-base`** ones](config.md) are all overridable by other plug-ins and project files. But the ones described on this page are specifically designed to be extended. ## Dependencies handling The **`nmk-base`** plugin allows to declare and install different kind of dependencies in an **`nmk`** project. ### Python modules dependencies The **`nmk-base`** plugin handles a Python virtual environment ("**venv**") for **`nmk`** projects. It generates a requirements file (typically a **requirements.txt** file in the project root folder), and handles the **venv** lifecycle: * The **`buildenv`** tool creates the **venv** if it doesn't exist yet * The **{ref}`py.venv`** task maintains it up to date by adding new requirements when project files are updated. **`nmk`** projects or plugins can extend the following config items to declare Python modules dependencies to be installed in the **venv**: * **{ref}`venvPkgDeps`**: list of Python modules names to be installed. Example: ```yaml venvPkgDeps: - numpy ``` * **{ref}`venvArchiveDeps`**: list of local Python module archives installed. Example: ```yaml venvArchiveDeps: - /some/local/path/to/my-module.wheel - /some/other/module.tar.gz ``` * **{ref}`venvFileDeps`**: list of requirements files to be merged in the generated requirements file. Example: ```yaml venvFileDeps: - ${PROJECTDIR}/test-requirements.txt ``` ### System dependencies The **`nmk-base`** plugin provides the **{ref}`sys.deps`** task, which verifies system dependencies before running the full **`nmk`** build. These dependencies are declared through the **{ref}`systemDeps`** configuration item. Example: ```yaml systemDeps: git: apt: ["git"] url: https://git-scm.com/downloads ``` ## Project information **`nmk`** plugins or project can override to the following items to give information about the project: * **{ref}`projectName`**: string giving the name of the project Example: ```yaml projectName: MyAwesomeProject ``` * **{ref}`projectAuthor`**: string giving the author of the project Example: ```yaml projectAuthor: The project team name ``` ## Plugin information **`nmk`** plugins can contribute to the following items to give version/doc information: * **{ref}`nmkPluginsVersions`**: object giving the plugin version. Example: ```yaml nmkPluginsVersions: my-plugin-name: 1.0.0 ``` * **{ref}`nmkPluginsDocs`**: object giving the URL to the plugin documentation. Example: ```yaml nmkPluginsDocs: my-plugin-name: https://someurl/to/my/doc ``` ## Git ignored files **`nmk`** projects or plugins that want to ignore some specific files/folders can contribute to the following items: * **{ref}`gitIgnoredFiles`**: list of files to be ignored by git. Example: ```yaml gitIgnoredFiles: - some-generated-folder/ - some-generated-files.* ``` ## Line endings handling **`nmk`** projects or plugins that want to identify some file types for which the line endings must be kept can contribute to the following items: * **{ref}`linuxLineEndings`**: list of file extensions which must be kept with Linux line endings. Example: ```yaml linuxLineEndings: - .csh ``` * **{ref}`windowsLineEndings`**: list of file extensions which must be kept with Windows line endings. Example: ```yaml windowsLineEndings: - .ps ``` ## Dirty check enablement By default, the **{ref}`git.dirty`** task is enabled only in CI. **`nmk`** projects or plugins may override the **{ref}`gitEnableDirtyCheck`** item to implement a logic able to toggle this check in other conditions. Example: ```yaml gitEnableDirtyCheck: __resolver__: path.to.my.resolver ```