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
Chris Hodapp c8a04807eb Don't put profiles in reverse-order in PATH
Your user-specific profile should take precedence
over the system one. If I've gone out of my way
to install something into my personal profile, my
version should be used instead of the system's.
2017-05-12 00:47:47 -07:00
modules Don't put profiles in reverse-order in PATH 2017-05-12 00:47:47 -07:00
pkgs/nix-tools darwin-rebuild: run user activation first 2017-05-11 21:36:57 +02:00
tests system-path: add basic shell tests 2017-03-11 22:28:51 +01:00
.travis.yml add tests to travis 2017-03-12 16:33:12 +01:00
default.nix Adds mopidy service with media keys support 2017-03-19 23:33:26 +01:00
README.md move install section to the top of the readme 2017-03-12 16:35:56 +01:00
release.nix system-path: add basic shell tests 2017-03-11 22:28:51 +01:00

logo

nix-darwin

Build Status

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

Install

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.

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

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;

}

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
      '';
    };
  };
}