2017-02-19 19:49:00 +03:00
[<img src="https://lnl7.github.io/nix-darwin/images/nix-darwin.png" width="200px" alt="logo" /> ](https://github.com/LnL7/nix-darwin )
2016-12-12 19:37:50 +03:00
# nix-darwin
2016-11-01 23:25:22 +03:00
2017-02-19 19:49:00 +03:00
[![Build Status ](https://travis-ci.org/LnL7/nix-darwin.svg?branch=master )](https://travis-ci.org/LnL7/nix-darwin)
2017-02-19 17:00:27 +03:00
2016-12-15 14:39:56 +03:00
Nix modules for darwin, `/etc/nixos/configuration.nix` for macOS.
2016-12-16 00:03:06 +03:00
2016-12-11 15:33:01 +03:00
## Install
2017-06-03 12:27:22 +03:00
```bash
bash < (curl https://raw.githubusercontent.com/LnL7/nix-darwin/master/bootstrap.sh)
```
2017-03-12 03:00:10 +03:00
This will link the system profile to `/run/current-system` . You have to create `/run` or symlink it to `private/var/run` .
If you use a symlink, you'll probably also want to add `services.activate-system.enable = true;` to your configuration.
2016-12-11 17:52:10 +03:00
2017-03-12 03:00:10 +03:00
> NOTE: the system activation scripts don't overwrite existing etc files, so files like `/etc/bashrc` won't be used by default.
2017-06-03 12:24:48 +03:00
Either modify the existing file to source/import the one from `/etc/static` or remove it. Some examples:
- `mv /etc/bashrc /etc/bashrc.orig`
- `echo 'if test -e /etc/static/bashrc; then . /etc/static/bashrc; fi' | sudo tee -a /etc/bashrc`
2017-06-03 12:27:22 +03:00
- `echo 'if test -e /etc/static/bashrc; then . /etc/static/bashrc; fi' | tee -a ~/.bashrc`
2017-06-03 12:24:48 +03:00
2017-06-03 13:00:13 +03:00
## Updating
The bootstrap installer will configure a channel for this repository.
```bash
2017-09-07 00:37:34 +03:00
nix-channel --update darwin
2017-07-25 00:27:41 +03:00
darwin-rebuild changelog
2017-06-03 13:00:13 +03:00
```
2017-06-03 12:24:48 +03:00
## Example configuration
Check out [modules/examples ](https://github.com/LnL7/nix-darwin/tree/master/modules/examples ) for some example configurations.
```nix
{ pkgs, ... }:
{
# List packages installed in system profile. To search by name, run:
# $ nix-env -qaP | grep wget
environment.systemPackages =
[ pkgs.nix-repl
];
# Create /etc/bashrc that loads the nix-darwin environment.
programs.bash.enable = true;
# Recreate /run/current-system symlink after boot.
services.activate-system.enable = true;
}
```
## Manual Install
2016-12-11 15:49:00 +03:00
2016-12-11 15:33:01 +03:00
```bash
2016-12-18 19:58:09 +03:00
sudo ln -s private/var/run /run
2017-10-10 23:21:30 +03:00
# Configure the channel
nix-channel --add https://github.com/LnL7/nix-darwin/archive/master.tar.gz darwin
nix-channel --update
export NIX_PATH=darwin=darwin-config=$HOME/.nixpkgs/darwin-configuration.nix:$HOME/.nix-defexpr/channels:$NIX_PATH
2016-12-11 17:17:04 +03:00
2017-10-10 23:21:30 +03:00
# Or use a local git repository
git clone git@github.com:LnL7/nix-darwin.git ~/.nix-defexpr/darwin
2016-12-15 17:03:57 +03:00
export NIX_PATH=darwin=$HOME/.nix-defexpr/darwin:darwin-config=$HOME/.nixpkgs/darwin-configuration.nix:$NIX_PATH
2016-12-11 15:33:01 +03:00
2017-10-10 23:21:30 +03:00
cp ~/.nix-defexpr/darwin/modules/examples/simple.nix ~/.nixpkgs/darwin-configuration.nix
2016-12-15 17:03:57 +03:00
# you can also use this to rebootstrap nix-darwin in case
# darwin-rebuild is to old to activate the system.
$(nix-build '< darwin > ' -A system --no-out-link)/sw/bin/darwin-rebuild build
2016-12-15 14:39:56 +03:00
$(nix-build '< darwin > ' -A system --no-out-link)/sw/bin/darwin-rebuild switch
2017-01-06 01:57:09 +03:00
. /etc/static/bashrc
2016-12-15 14:39:56 +03:00
```
2017-03-12 03:00:10 +03:00
... or for `fish` :
```fish
(nix-build '< darwin > ' -A system --no-out-link)/sw/bin/darwin-rebuild build
(nix-build '< darwin > ' -A system --no-out-link)/sw/bin/darwin-rebuild switch
```
2017-03-12 18:35:56 +03:00
This will create and manage a system profile in `/run/current-system` , just like nixos.
The default `NIX_PATH` in nix-darwin will look for this repository in `~/.nix-defexpr/darwin` and for your configuration in `~/.nixpkgs/darwin-configuration.nix` .
If you want to change these you can set your own with `nix.nixPath = [ ];` .
```
$ darwin-rebuild switch
building the system configuration...
these derivations will be built:
/nix/store/vfad6xgjzr56jcs051cg6vzch4dby92y-etc-zprofile.drv
/nix/store/cbmkscxsz0k02ynaph5xaxm1aql0p3vq-etc.drv
/nix/store/r5fpn177jhc16f8iyzk12gcw4pivzpbw-nixdarwin-system-16.09.drv
building path(s) ‘ /nix/store/wlq89shja597ip7mrmjv7yzk2lwyh8n0-etc-zprofile’
building path(s) ‘ /nix/store/m8kcm1pa5j570h3indp71a439wsh9lzq-etc’
building path(s) ‘ /nix/store/l735ffcdvcvy60i8pqf6v00vx7lnm6mz-nixdarwin-system-16.09’
setting up /etc...
setting up launchd services...
writing defaults...
$
```
```
$ darwin-option services.activate-system.enable ~/src/nix-darwin
Value:
true
Default:
false
Example:
no example
Description:
Whether to activate system at boot time.
```
2016-12-14 20:50:03 +03:00
## Modules
2017-07-19 22:12:49 +03:00
- [`environment` ](https://github.com/LnL7/nix-darwin/blob/master/modules/environment )
- [`launchd.daemons` ](https://github.com/LnL7/nix-darwin/blob/master/modules/launchd/launchd.nix )
- [`launchd.envVariables` ](https://github.com/LnL7/nix-darwin/blob/master/modules/launchd )
- [`launchd.user.agents` ](https://github.com/LnL7/nix-darwin/blob/master/modules/launchd/launchd.nix )
- [`networking` ](https://github.com/LnL7/nix-darwin/blob/master/modules/networking )
- [`nix` ](https://github.com/LnL7/nix-darwin/tree/master/modules/nix )
- [`programs` ](https://github.com/LnL7/nix-darwin/tree/master/modules/programs )
- [`security` ](https://github.com/LnL7/nix-darwin/tree/master/modules/security )
- [`services` ](https://github.com/LnL7/nix-darwin/tree/master/modules/services )
- [`system.defaults` ](https://github.com/LnL7/nix-darwin/tree/master/modules/system/defaults )
2018-01-11 23:44:28 +03:00
- [`system.keyboard` ](https://github.com/LnL7/nix-darwin/tree/master/modules/system/keyboard.nix )
2017-07-19 22:12:49 +03:00
- [`system` ](https://github.com/LnL7/nix-darwin/tree/master/modules/system )
- [`time` ](https://github.com/LnL7/nix-darwin/tree/master/modules/time )
2018-01-14 01:28:11 +03:00
- [`users` ](https://github.com/LnL7/nix-darwin/tree/master/modules/users )
2017-07-19 22:30:28 +03:00
2017-11-06 00:16:51 +03:00
## Tests
There are basic tests that run sanity checks for some of the modules,
you can run them like this:
```bash
nix-build release.nix -A tests.environment-path
```
2017-07-19 22:30:28 +03:00
## Contributing
Let's make nix on darwin awesome!
Don't hesitate to contribute modules or open an issue.
2017-10-06 20:42:43 +03:00
To build your configuration with local changes you can run this. This
flag can also be used to override darwin-config or nixpkgs, for more
information on the `-I` flag look at the nix-build manpage.
2017-11-06 00:16:51 +03:00
```bash
2017-10-06 20:42:43 +03:00
darwin-rebuild switch -I darwin=.
```
2017-07-19 22:30:28 +03:00
Also feel free to contact me if you have questions,
2018-01-04 01:07:32 +03:00
- IRC - LnL, you can find me in #nixos or #nix -darwin on freenode.net
2017-07-19 22:30:28 +03:00
- @lnl7 on twitter