-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathshell.nix
55 lines (55 loc) · 1.94 KB
/
shell.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
let
sources = import ./nix/sources.nix;
in
{ nixpkgs ? sources.nixpkgs
, darwin ? sources.darwin
, home-manager ? sources.home-manager
}:
let
pkgs = import nixpkgs { };
buildDots = "$(nix-build --no-out-link)";
files = "$(find . -path ./nix -prune -false -o -name '*.nix')";
#lint = pkgs.writeShellScriptBin "lint" ''
# ${pkgs.nix-linter}/bin/nix-linter ${files} "$@"
#'';
format = pkgs.writeShellScriptBin "format" ''
${pkgs.nixpkgs-fmt}/bin/nixpkgs-fmt ${files} "$@"
'';
switch = pkgs.writeShellScriptBin "switch" ''
WORKDIR="$HOME/.dots"
DOTFILES="$WORKDIR/dotfiles"
NIXPKGS="$WORKDIR/nixpkgs"
DARWIN="$WORKDIR/darwin"
HOME_MANAGER="$WORKDIR/home-manager"
DARWIN_CONFIG="$DOTFILES/config/darwin"
OVERLAYS="$DOTFILES/overlays"
mkdir -p "$WORKDIR"
ln -snfv ${buildDots} "$DOTFILES"
ln -snfv ${nixpkgs} "$NIXPKGS"
ln -snfv ${darwin} "$DARWIN"
ln -snfv ${home-manager} "$HOME_MANAGER"
echo >&2 "Formatting..."
format
echo >&2 "Linting..."
#lint
>&2 echo "Setting up nix-darwin..."
if (! command -v darwin-rebuild); then
echo >&2 "Installing nix-darwin..."
export NIX_PATH=darwin=$DARWIN:nixpkgs=$NIXPKGS:darwin-config=$DARWIN_CONFIG:nixpkgs-overlays=$OVERLAYS:home-manager=$HOME_MANAGER:$NIX_PATH
$(nix-build '<darwin>' -A system --no-out-link)/sw/bin/darwin-rebuild switch -j8 --keep-going \
-I "darwin=$DARWIN" \
-I "darwin-config=$DARWIN_CONFIG" \
-I "nixpkgs=$NIXPKGS" \
-I "nixpkgs-overlays=$OVERLAYS" \
-I "home-manager=$HOME_MANAGER"
fi
echo >&2 "Switching to new configuration..."
darwin-rebuild switch -j8 --keep-going --show-trace \
-I "darwin=$DARWIN" \
-I "darwin-config=$DARWIN_CONFIG" \
-I "nixpkgs=$NIXPKGS" \
-I "nixpkgs-overlays=$OVERLAYS" \
-I "home-manager=$HOME_MANAGER"
'';
in
pkgs.mkShell { buildInputs = [ switch format ]; }