# Contributing
## Setup
__Important:__ Make sure to install the provided git hooks by running `setup-dev-workspace.sh`!
### Install Rust
It is recommended to install rust through [rustup](https://rustup.rs). System package managers often have outdated versions of Rust or don't include rustfmt/clippy.
### Install rustfmt and clippy
```sh
rustup component add rustfmt
rustup component add clippy
```
### External Dependencies
The rodio backend requires alsa development libraries on linux. These should be available through your package manager. No extra dependencies should be needed on macOS/Windows.
Other backends will need additional dependencies. Some are documented in the (readme)[https://github.com/Spotifyd/spotifyd/blob/master/README.md] and the (librespot repo)[https://github.com/librespot-org/librespot/blob/dev/CONTRIBUTING.md].
## Building and Running the project
To run spotifyd with the rodio backend run
```sh
cargo run --features rodio_backend --no-default-features -- --backend rodio --no-daemon
```
See the readme for information on setting up a config file and what features are available.
## Contributing Code
Note that spotifyd uses `Cargo.lock` to track dependency versions. It shouldn't be changed unless you are intentionally bumping a dependency version.
Check your code with `rustfmt` and `clippy`.
```sh
cargo fmt -- --check
cargo clippy --no-default-features --features rodio_backend -- -D warnings
```
CI will run `clippy --all-targets --all-features -- -D warnings` but this requires having dependencies for all features installed.
Create a PR on github.