If you want to contribute to MatterLinux, please first read the 
[code of conduct](/wiki/conduct). 

## Registering to Gitea
All of the development is done using the [git version control system](https://git-scm.com/).
And all the git repos are managed using [Gitea](https://about.gitea.com/), so if you want to 
contribute, you should register an account first. To prevent mass account creation, registration
page of Gitea is disabled. So in order to register an account, send a email to the 
[maintainer](mailto:ngn@ngn.tf) with the subject `Gitea Account`. Specify **at least** two usernames
for your account (second one will be used for registration if the first one is unavailable). Then 
wait for a reply containing further instructions. You can also contact the maintainer over on [XMPP](/wiki/chat).

> **Important** 
>
> Do not use the Gitea instance for hosting your own projects/repositories, personal 
> repositories (A.K.A. repositories not forked for PRs) will be deleted. If you insist on creating 
> personal repositories your account will be deleted.

## Issues
To report a bug, to ask questions or to request a feature, first find the related repository. 
Then head over to the issue tab. Label your issue and explain it with a simple title. Write a 
detailed description for the issue. Finally create the issue and patiently wait for a response. 

To get more information about reporting bugs, check out [this wiki page](/wiki/bugs). 

## Pull Requests
If you want to make changes and merge them to the project, first fork the related repository.
Then clone the forked repository and make the changes you want.

> **Important**
>
> Do not make multiple changes in one commit, for example adding a feature and fixing a bug 
> in the same commit is a bad idea. Separate different changes to different commits 

**Make sure to use correct indenting!**. MatterLinux projects uses **2 spaces** for indenting. 
Configure your editor so it uses the same indenting. Here is an example configuration for the 
`vim` editor:
```
set tabstop=2
set softtabstop=0
set expandtab
set shiftwidth=2
set smarttab
```

And here is a more extended configuration for general usage:
```
set tabstop=2
set softtabstop=0
set expandtab
set shiftwidth=2
set smarttab

set fileencoding="utf-8"
set hlsearch
set ignorecase
set mouse=a
set smartcase
set smartindent
set noswapfile
set pumheight=10
set undofile
set scrolloff=8
set sidescrolloff=8
set number
set relativenumber
set backspace=indent,eol,start

if !isdirectory("/tmp/undos")
    call mkdir("/tmp/undos", "", 0700)
endif
set undodir=/tmp/undos
set undofile

syntax on
```

After making the changes, commit them using the following format:
```
<fix/feature/new/remove/update>: <description>
```
Do not use long commit messages, instead add a description to your commit if needed. **Make sure the email you are 
using for signing the commit matches with your Gitea account email.**

After pushing your changes create a pull request (PR) to the original project. Write a 
detailed description for the PR, explain the changes you have made, explain why you made 
these changes and link any related issues.

## Discussion 
Join the [chat rooms](/wiki/chat) to discuss with the other developers, especially for larger 
changes and PRs.
