1
0
Fork 0
mirror of https://github.com/LnL7/nix-darwin.git synced 2024-12-14 11:57:34 +00:00
nix-darwin/README.md

223 lines
6.1 KiB
Markdown
Raw Normal View History

2017-02-19 16:49:00 +00: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 16:37:50 +00:00
# nix-darwin
2016-11-01 20:25:22 +00:00
2017-02-19 16:49:00 +00:00
[![Build Status](https://travis-ci.org/LnL7/nix-darwin.svg?branch=master)](https://travis-ci.org/LnL7/nix-darwin)
2017-02-19 14:00:27 +00:00
2016-12-15 11:39:56 +00:00
Nix modules for darwin, `/etc/nixos/configuration.nix` for macOS.
2016-12-15 21:03:06 +00:00
## Install
2017-03-12 00:00:10 +00: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 14:52:10 +00:00
2017-03-12 00:00:10 +00:00
> NOTE: the system activation scripts don't overwrite existing etc files, so files like `/etc/bashrc` won't be used by default.
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`
- `echo 'if test -e /etc/static/bashrc; then . /etc/static/bashrc; fi' | sudo tee -a ~/.bashrc`
```bash
bash <(curl https://raw.githubusercontent.com/LnL7/nix-darwin/master/bootstrap.sh)
```
## 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 12:49:00 +00:00
```bash
2017-03-12 00:00:10 +00:00
# install nixpkgs version, which enables libsodium support (for signed binary caches)
# this is not required if you already upgraded nix at some point
nix-env -iA nixpkgs.nix
2016-12-18 16:58:09 +00:00
sudo ln -s private/var/run /run
2016-12-15 14:03:57 +00:00
git clone git@github.com:LnL7/nix-darwin.git ~/.nix-defexpr/darwin
2016-12-18 16:58:09 +00:00
cp ~/.nix-defexpr/darwin/modules/examples/simple.nix ~/.nixpkgs/darwin-configuration.nix
2016-12-11 14:17:04 +00:00
2016-12-15 14:03:57 +00:00
# bootstrap build using default nix.nixPath
export NIX_PATH=darwin=$HOME/.nix-defexpr/darwin:darwin-config=$HOME/.nixpkgs/darwin-configuration.nix:$NIX_PATH
2016-12-15 14:03:57 +00: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 11:39:56 +00:00
$(nix-build '<darwin>' -A system --no-out-link)/sw/bin/darwin-rebuild switch
. /etc/static/bashrc
2016-12-15 11:39:56 +00:00
```
2017-03-12 00:00:10 +00: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
```
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 17:50:03 +00: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
'';
2017-01-05 22:37:17 +00:00
# Global user configuration, symlink these to the appropriate file:
# $ ln -s /etc/static/per-user/lnl/gitconfig ~/.gitconfig
2017-01-07 13:45:17 +00:00
environment.etc."per-user/lnl/gitconfig".text = ''
2017-01-05 22:37:17 +00:00
[include]
path = .gitconfig.local
[color]
ui = auto
'';
2016-12-14 17:50:03 +00:00
}
```
### 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
2016-12-18 16:54:48 +00:00
{ pkgs, ... }:
2016-12-14 17:50:03 +00:00
{
2016-12-18 16:54:48 +00:00
environment.shellAliases.ls = "${pkgs.coreutils}/bin/ls";
2016-12-14 17:50:03 +00:00
programs.bash.enable = true;
2016-12-18 16:54:48 +00:00
programs.vim.enable = true;
programs.vim.enableSensible = true;
2016-12-14 17:50:03 +00:00
}
```
### 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 17:55:42 +00:00
nixpkgs.config.packageOverrides = pkgs: {
2016-12-14 17:50:03 +00:00
lnl.vim = pkgs.vim_configurable.customize {
name = "vim";
vimrcConfig.customRC = ''
set nocompatible
filetype plugin indent on
syntax on
'';
};
};
}
```