2016-12-12 17:37:50 +01:00
# nix-darwin
2016-11-01 21:25:22 +01:00
Nix modules for darwin.
```
2016-12-11 13:06:47 +01:00
$ darwin-rebuild switch
building the system configuration...
2016-11-01 21:25:22 +01:00
these derivations will be built:
2016-12-11 13:06:47 +01:00
/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’
writing defaults...
setting up /etc...
warning: /etc/zprofile is a file, skipping...
warning: /etc/zshrc is a file, skipping...
setting up launchd services...
$
2016-11-01 21:25:22 +01:00
```
2016-12-11 13:33:01 +01:00
## Install
2016-12-11 15:52:10 +01: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 13:51:41 +01:00
> NOTE: the system activation scripts don't overrwrite existing etc files, etc files like `/etc/bashrc` won't be used by default.
2016-12-14 18:50:03 +01:00
Either modify the existing file to source/import the one from `/etc/static` or remove it.
2016-12-11 13:49:00 +01:00
2016-12-11 13:33:01 +01:00
```bash
git clone git@github .com:LnL7/nix-darwin.git
2016-12-11 15:17:04 +01:00
nix-build -I darwin=$PWD/nix-darwin -I darwin-config=$PWD/config.nix '< darwin > ' -A system
source result/etc/bashrc
result/sw/bin/darwin-rebuild build
result/sw/bin/darwin-rebuild switch
2016-12-11 13:33:01 +01:00
```
## Example configuration
2016-12-11 13:58:57 +01:00
Checkout [modules/examples ](https://github.com/LnL7/nix-darwin/tree/master/modules/examples ) for some example configurations.
2016-12-13 10:00:35 +01:00
2016-12-14 18:50:03 +01:00
```nix
2016-12-11 13:33:01 +01:00
{ config, lib, pkgs, ... }:
{
# List packages installed in system profile. To search by name, run:
# $ nix-env -qaP | grep wget
environment.systemPackages =
2016-12-11 16:33:42 +01:00
[ pkgs.nix-repl
2016-12-11 13:33:01 +01:00
];
2016-12-13 10:00:35 +01:00
programs.bash.enable = true;
programs.bash.interactiveShellInit = ''
# Edit the NIX_PATH entries below or put the nix-darwin repository in
# ~/.nix-defexpr/darwin and your configuration in ~/.nixpkgs/darwin-config.nix
2016-12-11 13:33:01 +01:00
2016-12-13 10:00:35 +01:00
export NIX_PATH=darwin=$HOME/.nix-defexpr/darwin:darwin-config=$HOME/.nixpkgs/darwin-config.nix:$NIX_PATH
2016-12-11 13:33:01 +01:00
'';
2016-12-11 16:33:42 +01:00
services.activate-system.enable = true;
2016-12-11 13:33:01 +01:00
}
```
2016-12-14 18:50:03 +01:00
## Modules
### system.defaults
A set of [modules ](https://github.com/LnL7/nix-darwin/tree/master/modules/system/defaults ) to manage macOS settings.
```nix
{
system.defaults.dock.autohide = true;
system.defaults.dock.orientation = "left";
system.defaults.dock.showhidden = true;
}
```
> NOTE: you have to restart the dock in order for these changes to apply. `killall Dock`
### environment.etc
Set of files to be linked in `/etc` , this won't overwrite any existing files.
Either modify the existing file to source/import the one from `/etc/static` or remove it.
```nix
{
environment.etc."foorc".text = ''
export FOO=1
if test -f /etc/foorc.local; then
. /etc/foorc.local
fi
'';
}
```
### launchd.daemons
Definition of launchd agents/daemons. The [serviceConfig ](https://github.com/LnL7/nix-darwin/blob/master/modules/launchd/launchd.nix ) options are used to generate the launchd plist file.
```nix
{
launchd.daemons.foo = {
serviceConfig.ProgramArguments = [ "/usr/bin/touch" "/tmp/foo.lock" ];
serviceConfig.RunAtLoad = true;
};
}
```
### services
A set of modules for predefined services, these generate the appropriate launchd daemons for you.
```nix
{
services.nix-daemon.enable = true;
services.nix-daemon.tempDir = "/nix/tmp";
}
```
### programs
A set of modules to manage configuration of certain programs.
```nix
{
environment.shellAliases.tm = "${pkgs}/bin/tmux";
programs.bash.enable = true;
programs.tmux.enable = true;
programs.tmux.enableSensible = true;
programs.tmux.loginShell = "${config.programs.bash.shell} -l";
}
```
### nixpkgs.config
This attribute set is used as nixpkgs configuration when using nix-darwin.
```nix
{
environment.systemPackages =
[ # Use vim_configurable from packageOverrides
lnl.vim
];
nixpkgs.config.allowUnfree = true;
2016-12-14 18:55:42 +01:00
nixpkgs.config.packageOverrides = pkgs: {
2016-12-14 18:50:03 +01:00
lnl.vim = pkgs.vim_configurable.customize {
name = "vim";
vimrcConfig.customRC = ''
set nocompatible
filetype plugin indent on
syntax on
'';
};
};
}
```