1
0
Fork 0
mirror of https://github.com/LnL7/nix-darwin.git synced 2024-12-14 11:57:34 +00:00
nix modules for darwin
Find a file
Andy Dirnberger 705ab0bcf2
Add support for smart period substitution
Signed-off-by: Andy Dirnberger <andy@dirnberger.me>
2017-06-25 17:03:28 -04:00
modules Add support for smart period substitution 2017-06-25 17:03:28 -04:00
pkgs/nix-tools darwin-rebuild: add support for --rollback and --switch-generation 2017-05-15 21:16:09 +02:00
tests fix accessibility test 2017-05-24 23:17:39 +02:00
.travis.yml add tests to travis 2017-03-12 16:33:12 +01:00
bootstrap.sh bootstrap: remove set -e 2017-06-04 13:06:37 +02:00
default.nix programs-info: add module and run install-info on system packages. 2017-05-21 10:51:01 +02:00
README.md readme: add updating 2017-06-03 12:00:13 +02:00
release.nix add test for security.accessibilityPrograms 2017-05-16 00:11:05 +02:00

logo

nix-darwin

Build Status

Nix modules for darwin, /etc/nixos/configuration.nix for macOS.

Install

bash <(curl https://raw.githubusercontent.com/LnL7/nix-darwin/master/bootstrap.sh)

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.

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' | tee -a ~/.bashrc

Updating

The bootstrap installer will configure a channel for this repository.

nix-channel --update darwin

Example configuration

Check out modules/examples for some example configurations.

{ 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

# 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

sudo ln -s private/var/run /run

git clone git@github.com:LnL7/nix-darwin.git ~/.nix-defexpr/darwin
cp ~/.nix-defexpr/darwin/modules/examples/simple.nix ~/.nixpkgs/darwin-configuration.nix

# bootstrap build using default nix.nixPath
export NIX_PATH=darwin=$HOME/.nix-defexpr/darwin:darwin-config=$HOME/.nixpkgs/darwin-configuration.nix:$NIX_PATH

# 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
$(nix-build '<darwin>' -A system --no-out-link)/sw/bin/darwin-rebuild switch

. /etc/static/bashrc

... or for 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.

Modules

system.defaults

A set of modules to manage macOS settings.

{
  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.

{
  environment.etc."foorc".text = ''
    export FOO=1

    if test -f /etc/foorc.local; then
      . /etc/foorc.local
    fi
  '';

  # Global user configuration, symlink these to the appropriate file:
  # $ ln -s /etc/static/per-user/lnl/gitconfig ~/.gitconfig
  environment.etc."per-user/lnl/gitconfig".text = ''
    [include]
      path = .gitconfig.local

    [color]
      ui = auto
  '';
}

launchd.daemons

Definition of launchd agents/daemons. The serviceConfig options are used to generate the launchd plist file.

{
  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.

{
  services.nix-daemon.enable = true;
  services.nix-daemon.tempDir = "/nix/tmp";
}

programs

A set of modules to manage configuration of certain programs.

{ pkgs, ... }:

{
  environment.shellAliases.ls = "${pkgs.coreutils}/bin/ls";

  programs.bash.enable = true;

  programs.vim.enable = true;
  programs.vim.enableSensible = true;
}

nixpkgs.config

This attribute set is used as nixpkgs configuration when using nix-darwin.

{
  environment.systemPackages =
    [ # Use vim_configurable from packageOverrides
      lnl.vim
    ];

  nixpkgs.config.allowUnfree = true;

  nixpkgs.config.packageOverrides = pkgs: {
    lnl.vim = pkgs.vim_configurable.customize {
      name = "vim";
      vimrcConfig.customRC = ''
        set nocompatible
        filetype plugin indent on
        syntax on
      '';
    };
  };
}