README.md

# Nerves Pack

This library is a compilation of dependecies and default configuration for
getting a Nerves project up and running with minimal work. Essentially
`nerves_init_gadget` 2.0 to work with new networking libraries and practices.

When added to your project, the following services are enabled by default:

* **Networking** - Utilizes `VintageNet`. Ethernet, WiFi (without networks), and
  USB Gadget are started by default if a supporting interface is discovered on
  the device
* **mDNS** - via `MdnsLite`. Supports `nerves.local` and the default hostname (i.e.
  `nerves-1234.local`) This is also configurable to other hostnames as well.
* **WiFi Setup Wizard** - Utilizes `VintageNetWizard` to set device to AP host
  mode which provides a website for configuring WiFi networks from a broswer. This
  is enabled by default if `wlan` interface is available but not configured
  previously or by `config.exs`. See [`vintage_net_wizard`
  library](https://github.com/nerves-networking/vintage_net_wizard) for more
  info.
* **SSH** - Includes SSH access, firmware updates over SSH, and SFTP
* **Circuits GPIO** - Interfacing with GPIO via
  [`circuits_gpio`](https://github.com/elixir-circuits/circuits_gpio)

## Installation

```elixir
def deps do
  [
    {:nerves_pack, "~> 0.1.0"}
  ]
end
```

This will start `NervesPack` and all its services with your application.
However, since it controls the networking and SSH interface, it is recommended
to use it with [`shoehorn`](https://github.com/nerves-project/shoehorn) to start
it up separately so you still have access to your device in the event that the
main application fails. This can be done by adding to your `config.exs`

```elixir
config :shoehorn,
  init: [:nerves_runtime, :nerves_pack],
  app: Mix.Project.config()[:app]
```