mirror of
https://github.com/LnL7/nix-darwin.git
synced 2024-12-14 11:57:34 +00:00
Merge pull request #687 from Enzime/flaky
Install nix-darwin on flake-based systems
This commit is contained in:
commit
eb22022ba8
33 changed files with 563 additions and 234 deletions
116
.github/workflows/test.yml
vendored
116
.github/workflows/test.yml
vendored
|
@ -16,8 +16,6 @@ jobs:
|
|||
uses: cachix/install-nix-action@v22
|
||||
with:
|
||||
install_url: https://github.com/nix-community/nix-unstable-installer/releases/download/nix-2.10.0pre20220822_7c3ab57/install
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
- run: nix-build ./release.nix -I nixpkgs=channel:${{ env.CURRENT_STABLE_CHANNEL }} -I darwin=. -A tests
|
||||
- run: nix-build ./release.nix -I nixpkgs=channel:${{ env.CURRENT_STABLE_CHANNEL }} -I darwin=. -A manpages
|
||||
- run: nix-build ./release.nix -I nixpkgs=channel:${{ env.CURRENT_STABLE_CHANNEL }} -I darwin=. -A examples.simple
|
||||
|
@ -29,10 +27,6 @@ jobs:
|
|||
- uses: actions/checkout@v3
|
||||
- name: Install nix from current unstable channel
|
||||
uses: cachix/install-nix-action@v22
|
||||
with:
|
||||
nix_path: nixpkgs=channel:${{ env.CURRENT_STABLE_CHANNEL }}
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
- run: nix-build ./release.nix -I nixpkgs=channel:nixpkgs-unstable -I darwin=. -A tests
|
||||
- run: nix-build ./release.nix -I nixpkgs=channel:nixpkgs-unstable -I darwin=. -A manpages
|
||||
- run: nix-build ./release.nix -I nixpkgs=channel:nixpkgs-unstable -I darwin=. -A examples.simple
|
||||
|
@ -47,8 +41,6 @@ jobs:
|
|||
with:
|
||||
install_url: https://github.com/nix-community/nix-unstable-installer/releases/download/nix-2.10.0pre20220822_7c3ab57/install
|
||||
nix_path: nixpkgs=channel:${{ env.CURRENT_STABLE_CHANNEL }}
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Install ${{ env.CURRENT_STABLE_CHANNEL }} channel
|
||||
run: |
|
||||
nix-channel --add https://nixos.org/channels/${{ env.CURRENT_STABLE_CHANNEL }} nixpkgs
|
||||
|
@ -56,6 +48,16 @@ jobs:
|
|||
- name: Install nix-darwin and test
|
||||
run: |
|
||||
export NIX_PATH=$HOME/.nix-defexpr/channels
|
||||
|
||||
# We run nix-darwin twice to test that it can create darwin-configuration correctly for us
|
||||
# but we expect it to fail setting up /etc/nix/nix.conf
|
||||
nix-shell -A installer || true
|
||||
|
||||
nixConfHash=$(shasum -a 256 /etc/nix/nix.conf | cut -d ' ' -f 1)
|
||||
/usr/bin/sed -i.bak \
|
||||
"s/# nix.package = pkgs.nix;/nix.settings.access-tokens = [ \"github.com=\${{ secrets.GITHUB_TOKEN }}\" ]; environment.etc.\"nix\/nix.conf\".knownSha256Hashes = [ \"$nixConfHash\" ];/" \
|
||||
~/.nixpkgs/darwin-configuration.nix
|
||||
|
||||
nix-shell -A installer
|
||||
nix-shell -A installer.check
|
||||
- name: Build and activate default derivation
|
||||
|
@ -83,8 +85,6 @@ jobs:
|
|||
uses: cachix/install-nix-action@v22
|
||||
with:
|
||||
nix_path: nixpkgs=channel:nixpkgs-unstable
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Install nixpkgs-unstable channel
|
||||
run: |
|
||||
nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixpkgs
|
||||
|
@ -92,6 +92,16 @@ jobs:
|
|||
- name: Install nix-darwin and test
|
||||
run: |
|
||||
export NIX_PATH=$HOME/.nix-defexpr/channels
|
||||
|
||||
# We run nix-darwin twice to test that it can create darwin-configuration correctly for us
|
||||
# but we expect it to fail setting up /etc/nix/nix.conf
|
||||
nix-shell -A installer || true
|
||||
|
||||
nixConfHash=$(shasum -a 256 /etc/nix/nix.conf | cut -d ' ' -f 1)
|
||||
/usr/bin/sed -i.bak \
|
||||
"s/# nix.package = pkgs.nix;/nix.settings.access-tokens = [ \"github.com=\${{ secrets.GITHUB_TOKEN }}\" ]; environment.etc.\"nix\/nix.conf\".knownSha256Hashes = [ \"$nixConfHash\" ];/" \
|
||||
~/.nixpkgs/darwin-configuration.nix
|
||||
|
||||
nix-shell -A installer
|
||||
nix-shell -A installer.check
|
||||
- name: Build and activate default derivation
|
||||
|
@ -119,28 +129,25 @@ jobs:
|
|||
uses: cachix/install-nix-action@v22
|
||||
with:
|
||||
install_url: https://github.com/nix-community/nix-unstable-installer/releases/download/nix-2.10.0pre20220822_7c3ab57/install
|
||||
nix_path: nixpkgs=channel:${{ env.CURRENT_STABLE_CHANNEL }}
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Install ${{ env.CURRENT_STABLE_CHANNEL }} channel
|
||||
- name: Install nix-darwin
|
||||
run: |
|
||||
nix-channel --add https://nixos.org/channels/${{ env.CURRENT_STABLE_CHANNEL }} nixpkgs
|
||||
nix-channel --update
|
||||
- name: Install nix-darwin and test result
|
||||
run: |
|
||||
export NIX_PATH=$HOME/.nix-defexpr/channels
|
||||
nix-shell -A installer
|
||||
nix-shell -A installer.check
|
||||
- name: Build simple flake configuration
|
||||
run: |
|
||||
nix build ./modules/examples/flake#darwinConfigurations.simple.system --override-input darwin .
|
||||
- name: Activate derivation of simple flake build
|
||||
run: |
|
||||
./result/sw/bin/darwin-rebuild switch --flake ./modules/examples/flake#simple --override-input darwin .
|
||||
- name: Rebuild and activate simple flake, but this time using nix-darwins flake interface
|
||||
mkdir -p ~/.config/nix-darwin
|
||||
darwin=$(pwd)
|
||||
pushd ~/.config/nix-darwin
|
||||
nix flake init -t $darwin
|
||||
nixConfHash=$(shasum -a 256 /etc/nix/nix.conf | cut -d ' ' -f 1)
|
||||
/usr/bin/sed -i.bak \
|
||||
"s/# nix.package = pkgs.nix;/nix.settings.access-tokens = [ \"github.com=\${{ secrets.GITHUB_TOKEN }}\" ]; environment.etc.\"nix\/nix.conf\".knownSha256Hashes = [ \"$nixConfHash\" ];/" \
|
||||
flake.nix
|
||||
popd
|
||||
nix run .#darwin-rebuild -- \
|
||||
switch --flake ~/.config/nix-darwin#simple \
|
||||
--override-input darwin . \
|
||||
--override-input nixpkgs nixpkgs/${{ env.CURRENT_STABLE_CHANNEL }}
|
||||
- name: Rebuild and activate simple flake, but this time using nix-darwin's flake interface
|
||||
run: |
|
||||
. /etc/static/bashrc
|
||||
darwin-rebuild build --flake ./modules/examples/flake#simple --override-input darwin .
|
||||
darwin-rebuild build --flake ./modules/examples/flake#simple --override-input darwin . --override-input nixpkgs nixpkgs/${{ env.CURRENT_STABLE_CHANNEL }}
|
||||
- name: Test git submodules
|
||||
run: |
|
||||
. /etc/static/bashrc
|
||||
|
@ -175,6 +182,7 @@ jobs:
|
|||
darwin-rebuild build \
|
||||
--flake /tmp/test-nix-darwin-submodules#simple \
|
||||
--override-input darwin . \
|
||||
--override-input nixpkgs nixpkgs/${{ env.CURRENT_STABLE_CHANNEL }} \
|
||||
&& {
|
||||
printf 'succeeded while expecting failure due to submodule\n' >/dev/stderr
|
||||
exit 1
|
||||
|
@ -183,6 +191,7 @@ jobs:
|
|||
darwin-rebuild build \
|
||||
--flake /tmp/test-nix-darwin-submodules?submodules=0#simple \
|
||||
--override-input darwin . \
|
||||
--override-input nixpkgs nixpkgs/${{ env.CURRENT_STABLE_CHANNEL }} \
|
||||
&& {
|
||||
printf 'succeeded while expecting failure due to submodule\n' >/dev/stderr
|
||||
exit 1
|
||||
|
@ -191,7 +200,8 @@ jobs:
|
|||
# Should succeed
|
||||
darwin-rebuild build \
|
||||
--flake /tmp/test-nix-darwin-submodules?submodules=1#simple \
|
||||
--override-input darwin .
|
||||
--override-input darwin . \
|
||||
--override-input nixpkgs nixpkgs/${{ env.CURRENT_STABLE_CHANNEL }} \
|
||||
|
||||
install-flake-against-unstable:
|
||||
runs-on: macos-12
|
||||
|
@ -200,29 +210,25 @@ jobs:
|
|||
- uses: actions/checkout@v3
|
||||
- name: Install nix from current unstable channel
|
||||
uses: cachix/install-nix-action@v22
|
||||
with:
|
||||
nix_path: nixpkgs=channel:nixpkgs-unstable
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Install nixpkgs-unstable channel
|
||||
- name: Install nix-darwin
|
||||
run: |
|
||||
nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixpkgs
|
||||
nix-channel --update
|
||||
- name: Install nix-darwin and test result
|
||||
run: |
|
||||
export NIX_PATH=$HOME/.nix-defexpr/channels
|
||||
nix-shell -A installer
|
||||
nix-shell -A installer.check
|
||||
- name: Build simple flake configuration
|
||||
run: |
|
||||
nix build ./modules/examples/flake#darwinConfigurations.simple.system --override-input darwin .
|
||||
- name: Activate derivation of simple flake build
|
||||
run: |
|
||||
./result/sw/bin/darwin-rebuild switch --flake ./modules/examples/flake#simple --override-input darwin .
|
||||
- name: Rebuild and activate simple flake, but this time using nix-darwins flake interface
|
||||
mkdir -p ~/.config/nix-darwin
|
||||
darwin=$(pwd)
|
||||
pushd ~/.config/nix-darwin
|
||||
nix flake init -t $darwin
|
||||
nixConfHash=$(shasum -a 256 /etc/nix/nix.conf | cut -d ' ' -f 1)
|
||||
/usr/bin/sed -i.bak \
|
||||
"s/# nix.package = pkgs.nix;/nix.settings.access-tokens = [ \"github.com=\${{ secrets.GITHUB_TOKEN }}\" ]; environment.etc.\"nix\/nix.conf\".knownSha256Hashes = [ \"$nixConfHash\" ];/" \
|
||||
flake.nix
|
||||
popd
|
||||
nix run .#darwin-rebuild -- \
|
||||
switch --flake ~/.config/nix-darwin#simple \
|
||||
--override-input darwin . \
|
||||
--override-input nixpkgs nixpkgs/nixpkgs-unstable
|
||||
- name: Rebuild and activate simple flake, but this time using nix-darwin's flake interface
|
||||
run: |
|
||||
. /etc/static/bashrc
|
||||
darwin-rebuild build --flake ./modules/examples/flake#simple --override-input darwin .
|
||||
darwin-rebuild build --flake ./modules/examples/flake#simple --override-input darwin . --override-input nixpkgs nixpkgs/nixpkgs-unstable
|
||||
- name: Test git submodules
|
||||
run: |
|
||||
. /etc/static/bashrc
|
||||
|
@ -257,14 +263,17 @@ jobs:
|
|||
darwin-rebuild build \
|
||||
--flake /tmp/test-nix-darwin-submodules#simple \
|
||||
--override-input darwin . \
|
||||
--override-input nixpkgs nixpkgs/nixpkgs-unstable \
|
||||
&& {
|
||||
printf 'succeeded while expecting failure due to submodule\n' >/dev/stderr
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Should also fail
|
||||
darwin-rebuild build \
|
||||
--flake /tmp/test-nix-darwin-submodules?submodules=0#simple \
|
||||
--override-input darwin . \
|
||||
--override-input nixpkgs nixpkgs/nixpkgs-unstable \
|
||||
&& {
|
||||
printf 'succeeded while expecting failure due to submodule\n' >/dev/stderr
|
||||
exit 1
|
||||
|
@ -273,8 +282,11 @@ jobs:
|
|||
# Should succeed
|
||||
darwin-rebuild build \
|
||||
--flake /tmp/test-nix-darwin-submodules?submodules=1#simple \
|
||||
--override-input darwin .
|
||||
--override-input darwin . \
|
||||
--override-input nixpkgs nixpkgs/nixpkgs-unstable
|
||||
|
||||
# Should also succeed
|
||||
darwin-rebuild build \
|
||||
--flake git+file:///tmp/test-nix-darwin-submodules?submodules=1#simple \
|
||||
--override-input darwin .
|
||||
--override-input darwin . \
|
||||
--override-input nixpkgs nixpkgs/nixpkgs-unstable
|
||||
|
|
3
.github/workflows/update-manual.yml
vendored
3
.github/workflows/update-manual.yml
vendored
|
@ -18,9 +18,6 @@ jobs:
|
|||
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@v22
|
||||
with:
|
||||
extra_nix_config: |
|
||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Build manual
|
||||
run: |
|
||||
|
|
90
README.md
90
README.md
|
@ -7,12 +7,14 @@
|
|||
Nix modules for darwin, `/etc/nixos/configuration.nix` for macOS.
|
||||
|
||||
This project aims to bring the convenience of a declarative system approach to macOS.
|
||||
Nix-darwin is built up around [Nixpkgs](https://github.com/NixOS/nixpkgs), quite similar to [NixOS](https://nixos.org/).
|
||||
nix-darwin is built up around [Nixpkgs](https://github.com/NixOS/nixpkgs), quite similar to [NixOS](https://nixos.org/).
|
||||
|
||||
## Install
|
||||
## Installing
|
||||
|
||||
To install nix-darwin, a working installation of [Nix](https://github.com/NixOS/nix#installation) is required.
|
||||
|
||||
> NOTE: Using `darwin-installer` is no longer necessary on flake based systems.
|
||||
|
||||
```bash
|
||||
nix-build https://github.com/LnL7/nix-darwin/archive/master.tar.gz -A installer
|
||||
./result/bin/darwin-installer
|
||||
|
@ -22,9 +24,8 @@ nix-build https://github.com/LnL7/nix-darwin/archive/master.tar.gz -A installer
|
|||
> updated by default. If you didn't use the installer or skipped some of the options you'll have to take care of this yourself.
|
||||
> Either modify the existing file to source/import the one from `/etc/static` or remove it. Some examples:
|
||||
|
||||
- `mv /etc/bashrc /etc/bashrc.orig`
|
||||
- `mv /etc/bashrc /etc/bashrc.before-nix-darwin`
|
||||
- `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
|
||||
|
||||
|
@ -73,15 +74,39 @@ Configuration lives in `~/.nixpkgs/darwin-configuration.nix`. Check out
|
|||
There is also preliminary support for building your configuration using a [flake](https://nixos.wiki/wiki/Flakes). This
|
||||
is mostly based on the flake support that was added to NixOS.
|
||||
|
||||
A minimal example of using an existing configuration.nix:
|
||||
### Step 1. Creating `flake.nix`
|
||||
|
||||
<details>
|
||||
<summary>Getting started from scratch</summary>
|
||||
<p></p>
|
||||
|
||||
If you don't have an existing `configuration.nix`, you can run the following commands to generate a basic `flake.nix` inside `~/.config/nix-darwin`:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.config/nix-darwin
|
||||
cd ~/.config/nix-darwin
|
||||
nix flake init -t nix-darwin
|
||||
```
|
||||
|
||||
Make sure to replace all occurrences of `simple` with your short hostname which you can find by running `hostname -s`.
|
||||
|
||||
> NOTE: Make sure to change `nixpkgs.hostPlatform` to `aarch64-darwin` if you are using Apple Silicon.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Migrating from an existing configuration.nix</summary>
|
||||
<p></p>
|
||||
|
||||
Add the following to `flake.nix` in the same folder as `configuration.nix`:
|
||||
|
||||
```nix
|
||||
{
|
||||
description = "John's darwin system";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-23.05-darwin";
|
||||
darwin.url = "github:lnl7/nix-darwin/master";
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-23.05-darwin";
|
||||
darwin.url = "github:LnL7/nix-darwin/master";
|
||||
darwin.inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
|
@ -93,6 +118,30 @@ A minimal example of using an existing configuration.nix:
|
|||
}
|
||||
```
|
||||
|
||||
Make sure to replace `Johns-MacBook` with your short hostname which you can find by running `hostname -s`.
|
||||
|
||||
> NOTE: Make sure to set `nixpkgs.hostPlatform` in your `configuration.nix` to either `x86_64-darwin` (Intel) or `aarch64-darwin` (Apple Silicon).
|
||||
|
||||
</details>
|
||||
|
||||
### Step 2. Installing `nix-darwin`
|
||||
|
||||
Instead of using `darwin-installer`, you can just run `darwin-rebuild switch` to install nix-darwin. As `darwin-rebuild` won't be installed in your `PATH` yet, you can use the following command:
|
||||
|
||||
```bash
|
||||
nix run nix-darwin -- switch --flake ~/.config/nix-darwin
|
||||
```
|
||||
|
||||
### Step 3. Using `nix-darwin`
|
||||
|
||||
After installing, you can run `darwin-rebuild` to apply changes to your system:
|
||||
|
||||
```bash
|
||||
darwin-rebuild switch --flake ~/.config/nix-darwin
|
||||
```
|
||||
|
||||
#### Using flake inputs
|
||||
|
||||
Inputs from the flake can also be passed into `darwinSystem`. These inputs are then
|
||||
accessible as an argument `inputs`, similar to `pkgs` and `lib`, inside the configuration.
|
||||
|
||||
|
@ -110,26 +159,9 @@ darwin.lib.darwinSystem {
|
|||
# inputs.self, inputs.darwin, and inputs.nixpkgs can be accessed here
|
||||
```
|
||||
|
||||
Since the installer doesn't work with flakes out of the box yet, nix-darwin will need to
|
||||
be bootstrapped using the installer or manually. Afterwards the flake based
|
||||
configuration can be built. The `hostname(1)` of your system will be used to decide
|
||||
which darwin configuration is applied if it's not specified explicitly in the flake ref.
|
||||
|
||||
```sh
|
||||
nix build ~/.config/darwin\#darwinConfigurations.Johns-MacBook.system
|
||||
./result/sw/bin/darwin-rebuild switch --flake ~/.config/darwin
|
||||
```
|
||||
|
||||
## Manual Install
|
||||
|
||||
```bash
|
||||
# Before 10.15 Catalina
|
||||
sudo ln -s private/var/run /run
|
||||
# After 10.15 Catalina
|
||||
echo -e "run\tprivate/var/run" | sudo tee -a /etc/synthetic.conf
|
||||
/System/Library/Filesystems/apfs.fs/Contents/Resources/apfs.util -B
|
||||
/System/Library/Filesystems/apfs.fs/Contents/Resources/apfs.util -t
|
||||
|
||||
# Configure the channel
|
||||
nix-channel --add https://github.com/LnL7/nix-darwin/archive/master.tar.gz darwin
|
||||
nix-channel --update
|
||||
|
@ -156,9 +188,10 @@ $(nix-build '<darwin>' -A system --no-out-link)/sw/bin/darwin-rebuild switch
|
|||
(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.
|
||||
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`.
|
||||
|
||||
By default, nix-darwin will look in your `NIX_PATH` for this repository at `~/.nix-defexpr/darwin` and your configuration at `~/.nixpkgs/darwin-configuration.nix`.
|
||||
If you want to change these you can set your own with `nix.nixPath = [ ];`.
|
||||
|
||||
```
|
||||
|
@ -219,7 +252,8 @@ nix-build release.nix -A tests.environment-path
|
|||
|
||||
## Contributing
|
||||
|
||||
Let's make nix on darwin awesome!
|
||||
Let's make Nix on macOS awesome!
|
||||
|
||||
Don't hesitate to contribute modules or open an issue.
|
||||
|
||||
To build your configuration with local changes you can run this. This
|
||||
|
@ -245,4 +279,4 @@ goes out of sync.
|
|||
|
||||
Also feel free to contact me if you have questions,
|
||||
- Matrix - @daiderd:matrix.org, you can find me in [#macos:nixos.org](https://matrix.to/#/#macos:nixos.org)
|
||||
- @lnl7 on twitter
|
||||
- @LnL7 on twitter
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
# System-wide profile for interactive zsh(1) login shells.
|
||||
|
||||
# Setup user specific overrides for this in ~/.zprofile. See zshbuiltins(1)
|
||||
# and zshoptions(1) for more details.
|
||||
|
||||
if [ -x /usr/libexec/path_helper ]; then
|
||||
eval `/usr/libexec/path_helper -s`
|
||||
fi
|
|
@ -0,0 +1,18 @@
|
|||
|
||||
# Nix
|
||||
if [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then
|
||||
. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'
|
||||
fi
|
||||
# End Nix
|
||||
|
||||
|
||||
# System-wide .bashrc file for interactive bash(1) shells.
|
||||
if [ -z "$PS1" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
PS1='\h:\W \u\$ '
|
||||
# Make bash check its window size after a process completes
|
||||
shopt -s checkwinsize
|
||||
|
||||
[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"
|
|
@ -0,0 +1,81 @@
|
|||
|
||||
# Nix
|
||||
if [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then
|
||||
. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'
|
||||
fi
|
||||
# End Nix
|
||||
|
||||
|
||||
# System-wide profile for interactive zsh(1) shells.
|
||||
|
||||
# Setup user specific overrides for this in ~/.zshrc. See zshbuiltins(1)
|
||||
# and zshoptions(1) for more details.
|
||||
|
||||
# Correctly display UTF-8 with combining characters.
|
||||
if [[ "$(locale LC_CTYPE)" == "UTF-8" ]]; then
|
||||
setopt COMBINING_CHARS
|
||||
fi
|
||||
|
||||
# Disable the log builtin, so we don't conflict with /usr/bin/log
|
||||
disable log
|
||||
|
||||
# Save command history
|
||||
HISTFILE=${ZDOTDIR:-$HOME}/.zsh_history
|
||||
HISTSIZE=2000
|
||||
SAVEHIST=1000
|
||||
|
||||
# Beep on error
|
||||
setopt BEEP
|
||||
|
||||
# Use keycodes (generated via zkbd) if present, otherwise fallback on
|
||||
# values from terminfo
|
||||
if [[ -r ${ZDOTDIR:-$HOME}/.zkbd/${TERM}-${VENDOR} ]] ; then
|
||||
source ${ZDOTDIR:-$HOME}/.zkbd/${TERM}-${VENDOR}
|
||||
else
|
||||
typeset -g -A key
|
||||
|
||||
[[ -n "$terminfo[kf1]" ]] && key[F1]=$terminfo[kf1]
|
||||
[[ -n "$terminfo[kf2]" ]] && key[F2]=$terminfo[kf2]
|
||||
[[ -n "$terminfo[kf3]" ]] && key[F3]=$terminfo[kf3]
|
||||
[[ -n "$terminfo[kf4]" ]] && key[F4]=$terminfo[kf4]
|
||||
[[ -n "$terminfo[kf5]" ]] && key[F5]=$terminfo[kf5]
|
||||
[[ -n "$terminfo[kf6]" ]] && key[F6]=$terminfo[kf6]
|
||||
[[ -n "$terminfo[kf7]" ]] && key[F7]=$terminfo[kf7]
|
||||
[[ -n "$terminfo[kf8]" ]] && key[F8]=$terminfo[kf8]
|
||||
[[ -n "$terminfo[kf9]" ]] && key[F9]=$terminfo[kf9]
|
||||
[[ -n "$terminfo[kf10]" ]] && key[F10]=$terminfo[kf10]
|
||||
[[ -n "$terminfo[kf11]" ]] && key[F11]=$terminfo[kf11]
|
||||
[[ -n "$terminfo[kf12]" ]] && key[F12]=$terminfo[kf12]
|
||||
[[ -n "$terminfo[kf13]" ]] && key[F13]=$terminfo[kf13]
|
||||
[[ -n "$terminfo[kf14]" ]] && key[F14]=$terminfo[kf14]
|
||||
[[ -n "$terminfo[kf15]" ]] && key[F15]=$terminfo[kf15]
|
||||
[[ -n "$terminfo[kf16]" ]] && key[F16]=$terminfo[kf16]
|
||||
[[ -n "$terminfo[kf17]" ]] && key[F17]=$terminfo[kf17]
|
||||
[[ -n "$terminfo[kf18]" ]] && key[F18]=$terminfo[kf18]
|
||||
[[ -n "$terminfo[kf19]" ]] && key[F19]=$terminfo[kf19]
|
||||
[[ -n "$terminfo[kf20]" ]] && key[F20]=$terminfo[kf20]
|
||||
[[ -n "$terminfo[kbs]" ]] && key[Backspace]=$terminfo[kbs]
|
||||
[[ -n "$terminfo[kich1]" ]] && key[Insert]=$terminfo[kich1]
|
||||
[[ -n "$terminfo[kdch1]" ]] && key[Delete]=$terminfo[kdch1]
|
||||
[[ -n "$terminfo[khome]" ]] && key[Home]=$terminfo[khome]
|
||||
[[ -n "$terminfo[kend]" ]] && key[End]=$terminfo[kend]
|
||||
[[ -n "$terminfo[kpp]" ]] && key[PageUp]=$terminfo[kpp]
|
||||
[[ -n "$terminfo[knp]" ]] && key[PageDown]=$terminfo[knp]
|
||||
[[ -n "$terminfo[kcuu1]" ]] && key[Up]=$terminfo[kcuu1]
|
||||
[[ -n "$terminfo[kcub1]" ]] && key[Left]=$terminfo[kcub1]
|
||||
[[ -n "$terminfo[kcud1]" ]] && key[Down]=$terminfo[kcud1]
|
||||
[[ -n "$terminfo[kcuf1]" ]] && key[Right]=$terminfo[kcuf1]
|
||||
fi
|
||||
|
||||
# Default key bindings
|
||||
[[ -n ${key[Delete]} ]] && bindkey "${key[Delete]}" delete-char
|
||||
[[ -n ${key[Home]} ]] && bindkey "${key[Home]}" beginning-of-line
|
||||
[[ -n ${key[End]} ]] && bindkey "${key[End]}" end-of-line
|
||||
[[ -n ${key[Up]} ]] && bindkey "${key[Up]}" up-line-or-search
|
||||
[[ -n ${key[Down]} ]] && bindkey "${key[Down]}" down-line-or-search
|
||||
|
||||
# Default prompt
|
||||
PS1="%n@%m %1~ %# "
|
||||
|
||||
# Useful support for interacting with Terminal.app or other terminal programs
|
||||
[ -r "/etc/zshrc_$TERM_PROGRAM" ] && . "/etc/zshrc_$TERM_PROGRAM"
|
|
@ -0,0 +1,80 @@
|
|||
# System-wide profile for interactive zsh(1) shells.
|
||||
|
||||
# Setup user specific overrides for this in ~/.zshrc. See zshbuiltins(1)
|
||||
# and zshoptions(1) for more details.
|
||||
|
||||
# Correctly display UTF-8 with combining characters.
|
||||
if [[ "$(locale LC_CTYPE)" == "UTF-8" ]]; then
|
||||
setopt COMBINING_CHARS
|
||||
fi
|
||||
|
||||
# Disable the log builtin, so we don't conflict with /usr/bin/log
|
||||
disable log
|
||||
|
||||
# Save command history
|
||||
HISTFILE=${ZDOTDIR:-$HOME}/.zsh_history
|
||||
HISTSIZE=2000
|
||||
SAVEHIST=1000
|
||||
|
||||
# Beep on error
|
||||
setopt BEEP
|
||||
|
||||
# Use keycodes (generated via zkbd) if present, otherwise fallback on
|
||||
# values from terminfo
|
||||
if [[ -r ${ZDOTDIR:-$HOME}/.zkbd/${TERM}-${VENDOR} ]] ; then
|
||||
source ${ZDOTDIR:-$HOME}/.zkbd/${TERM}-${VENDOR}
|
||||
else
|
||||
typeset -g -A key
|
||||
|
||||
[[ -n "$terminfo[kf1]" ]] && key[F1]=$terminfo[kf1]
|
||||
[[ -n "$terminfo[kf2]" ]] && key[F2]=$terminfo[kf2]
|
||||
[[ -n "$terminfo[kf3]" ]] && key[F3]=$terminfo[kf3]
|
||||
[[ -n "$terminfo[kf4]" ]] && key[F4]=$terminfo[kf4]
|
||||
[[ -n "$terminfo[kf5]" ]] && key[F5]=$terminfo[kf5]
|
||||
[[ -n "$terminfo[kf6]" ]] && key[F6]=$terminfo[kf6]
|
||||
[[ -n "$terminfo[kf7]" ]] && key[F7]=$terminfo[kf7]
|
||||
[[ -n "$terminfo[kf8]" ]] && key[F8]=$terminfo[kf8]
|
||||
[[ -n "$terminfo[kf9]" ]] && key[F9]=$terminfo[kf9]
|
||||
[[ -n "$terminfo[kf10]" ]] && key[F10]=$terminfo[kf10]
|
||||
[[ -n "$terminfo[kf11]" ]] && key[F11]=$terminfo[kf11]
|
||||
[[ -n "$terminfo[kf12]" ]] && key[F12]=$terminfo[kf12]
|
||||
[[ -n "$terminfo[kf13]" ]] && key[F13]=$terminfo[kf13]
|
||||
[[ -n "$terminfo[kf14]" ]] && key[F14]=$terminfo[kf14]
|
||||
[[ -n "$terminfo[kf15]" ]] && key[F15]=$terminfo[kf15]
|
||||
[[ -n "$terminfo[kf16]" ]] && key[F16]=$terminfo[kf16]
|
||||
[[ -n "$terminfo[kf17]" ]] && key[F17]=$terminfo[kf17]
|
||||
[[ -n "$terminfo[kf18]" ]] && key[F18]=$terminfo[kf18]
|
||||
[[ -n "$terminfo[kf19]" ]] && key[F19]=$terminfo[kf19]
|
||||
[[ -n "$terminfo[kf20]" ]] && key[F20]=$terminfo[kf20]
|
||||
[[ -n "$terminfo[kbs]" ]] && key[Backspace]=$terminfo[kbs]
|
||||
[[ -n "$terminfo[kich1]" ]] && key[Insert]=$terminfo[kich1]
|
||||
[[ -n "$terminfo[kdch1]" ]] && key[Delete]=$terminfo[kdch1]
|
||||
[[ -n "$terminfo[khome]" ]] && key[Home]=$terminfo[khome]
|
||||
[[ -n "$terminfo[kend]" ]] && key[End]=$terminfo[kend]
|
||||
[[ -n "$terminfo[kpp]" ]] && key[PageUp]=$terminfo[kpp]
|
||||
[[ -n "$terminfo[knp]" ]] && key[PageDown]=$terminfo[knp]
|
||||
[[ -n "$terminfo[kcuu1]" ]] && key[Up]=$terminfo[kcuu1]
|
||||
[[ -n "$terminfo[kcub1]" ]] && key[Left]=$terminfo[kcub1]
|
||||
[[ -n "$terminfo[kcud1]" ]] && key[Down]=$terminfo[kcud1]
|
||||
[[ -n "$terminfo[kcuf1]" ]] && key[Right]=$terminfo[kcuf1]
|
||||
fi
|
||||
|
||||
# Default key bindings
|
||||
[[ -n ${key[Delete]} ]] && bindkey "${key[Delete]}" delete-char
|
||||
[[ -n ${key[Home]} ]] && bindkey "${key[Home]}" beginning-of-line
|
||||
[[ -n ${key[End]} ]] && bindkey "${key[End]}" end-of-line
|
||||
[[ -n ${key[Up]} ]] && bindkey "${key[Up]}" up-line-or-search
|
||||
[[ -n ${key[Down]} ]] && bindkey "${key[Down]}" down-line-or-search
|
||||
|
||||
# Default prompt
|
||||
PS1="%n@%m %1~ %# "
|
||||
|
||||
# Useful support for interacting with Terminal.app or other terminal programs
|
||||
[ -r "/etc/zshrc_$TERM_PROGRAM" ] && . "/etc/zshrc_$TERM_PROGRAM"
|
||||
|
||||
# Nix
|
||||
if [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then
|
||||
. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'
|
||||
fi
|
||||
# End Nix
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
# System-wide .bashrc file for interactive bash(1) shells.
|
||||
if [ -z "$PS1" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
PS1='\h:\W \u\$ '
|
||||
# Make bash check its window size after a process completes
|
||||
shopt -s checkwinsize
|
||||
|
||||
[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"
|
|
@ -0,0 +1,17 @@
|
|||
# System-wide .bashrc file for interactive bash(1) shells.
|
||||
if [ -z "$PS1" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
PS1='\h:\W \u\$ '
|
||||
# Make bash check its window size after a process completes
|
||||
shopt -s checkwinsize
|
||||
|
||||
[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"
|
||||
|
||||
# Nix
|
||||
if [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then
|
||||
. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'
|
||||
fi
|
||||
# End Nix
|
||||
|
|
@ -0,0 +1 @@
|
|||
build-users-group = nixbld
|
|
@ -0,0 +1,5 @@
|
|||
build-users-group = nixbld
|
||||
|
||||
max-jobs = 32
|
||||
cores = 1
|
||||
sandbox = false
|
|
@ -0,0 +1,6 @@
|
|||
# Generated by https://github.com/DeterminateSystems/nix-installer, version 0.10.0.
|
||||
experimental-features = nix-command flakes auto-allocate-uids
|
||||
build-users-group = nixbld
|
||||
auto-optimise-store = true
|
||||
extra-nix-path = nixpkgs=flake:nixpkgs
|
||||
bash-prompt-prefix = (nix:$name)\040
|
|
@ -0,0 +1,73 @@
|
|||
# System-wide profile for interactive zsh(1) shells.
|
||||
|
||||
# Setup user specific overrides for this in ~/.zshrc. See zshbuiltins(1)
|
||||
# and zshoptions(1) for more details.
|
||||
|
||||
# Correctly display UTF-8 with combining characters.
|
||||
if [[ "$(locale LC_CTYPE)" == "UTF-8" ]]; then
|
||||
setopt COMBINING_CHARS
|
||||
fi
|
||||
|
||||
# Disable the log builtin, so we don't conflict with /usr/bin/log
|
||||
disable log
|
||||
|
||||
# Save command history
|
||||
HISTFILE=${ZDOTDIR:-$HOME}/.zsh_history
|
||||
HISTSIZE=2000
|
||||
SAVEHIST=1000
|
||||
|
||||
# Beep on error
|
||||
setopt BEEP
|
||||
|
||||
# Use keycodes (generated via zkbd) if present, otherwise fallback on
|
||||
# values from terminfo
|
||||
if [[ -r ${ZDOTDIR:-$HOME}/.zkbd/${TERM}-${VENDOR} ]] ; then
|
||||
source ${ZDOTDIR:-$HOME}/.zkbd/${TERM}-${VENDOR}
|
||||
else
|
||||
typeset -g -A key
|
||||
|
||||
[[ -n "$terminfo[kf1]" ]] && key[F1]=$terminfo[kf1]
|
||||
[[ -n "$terminfo[kf2]" ]] && key[F2]=$terminfo[kf2]
|
||||
[[ -n "$terminfo[kf3]" ]] && key[F3]=$terminfo[kf3]
|
||||
[[ -n "$terminfo[kf4]" ]] && key[F4]=$terminfo[kf4]
|
||||
[[ -n "$terminfo[kf5]" ]] && key[F5]=$terminfo[kf5]
|
||||
[[ -n "$terminfo[kf6]" ]] && key[F6]=$terminfo[kf6]
|
||||
[[ -n "$terminfo[kf7]" ]] && key[F7]=$terminfo[kf7]
|
||||
[[ -n "$terminfo[kf8]" ]] && key[F8]=$terminfo[kf8]
|
||||
[[ -n "$terminfo[kf9]" ]] && key[F9]=$terminfo[kf9]
|
||||
[[ -n "$terminfo[kf10]" ]] && key[F10]=$terminfo[kf10]
|
||||
[[ -n "$terminfo[kf11]" ]] && key[F11]=$terminfo[kf11]
|
||||
[[ -n "$terminfo[kf12]" ]] && key[F12]=$terminfo[kf12]
|
||||
[[ -n "$terminfo[kf13]" ]] && key[F13]=$terminfo[kf13]
|
||||
[[ -n "$terminfo[kf14]" ]] && key[F14]=$terminfo[kf14]
|
||||
[[ -n "$terminfo[kf15]" ]] && key[F15]=$terminfo[kf15]
|
||||
[[ -n "$terminfo[kf16]" ]] && key[F16]=$terminfo[kf16]
|
||||
[[ -n "$terminfo[kf17]" ]] && key[F17]=$terminfo[kf17]
|
||||
[[ -n "$terminfo[kf18]" ]] && key[F18]=$terminfo[kf18]
|
||||
[[ -n "$terminfo[kf19]" ]] && key[F19]=$terminfo[kf19]
|
||||
[[ -n "$terminfo[kf20]" ]] && key[F20]=$terminfo[kf20]
|
||||
[[ -n "$terminfo[kbs]" ]] && key[Backspace]=$terminfo[kbs]
|
||||
[[ -n "$terminfo[kich1]" ]] && key[Insert]=$terminfo[kich1]
|
||||
[[ -n "$terminfo[kdch1]" ]] && key[Delete]=$terminfo[kdch1]
|
||||
[[ -n "$terminfo[khome]" ]] && key[Home]=$terminfo[khome]
|
||||
[[ -n "$terminfo[kend]" ]] && key[End]=$terminfo[kend]
|
||||
[[ -n "$terminfo[kpp]" ]] && key[PageUp]=$terminfo[kpp]
|
||||
[[ -n "$terminfo[knp]" ]] && key[PageDown]=$terminfo[knp]
|
||||
[[ -n "$terminfo[kcuu1]" ]] && key[Up]=$terminfo[kcuu1]
|
||||
[[ -n "$terminfo[kcub1]" ]] && key[Left]=$terminfo[kcub1]
|
||||
[[ -n "$terminfo[kcud1]" ]] && key[Down]=$terminfo[kcud1]
|
||||
[[ -n "$terminfo[kcuf1]" ]] && key[Right]=$terminfo[kcuf1]
|
||||
fi
|
||||
|
||||
# Default key bindings
|
||||
[[ -n ${key[Delete]} ]] && bindkey "${key[Delete]}" delete-char
|
||||
[[ -n ${key[Home]} ]] && bindkey "${key[Home]}" beginning-of-line
|
||||
[[ -n ${key[End]} ]] && bindkey "${key[End]}" end-of-line
|
||||
[[ -n ${key[Up]} ]] && bindkey "${key[Up]}" up-line-or-search
|
||||
[[ -n ${key[Down]} ]] && bindkey "${key[Down]}" down-line-or-search
|
||||
|
||||
# Default prompt
|
||||
PS1="%n@%m %1~ %# "
|
||||
|
||||
# Useful support for interacting with Terminal.app or other terminal programs
|
||||
[ -r "/etc/zshrc_$TERM_PROGRAM" ] && . "/etc/zshrc_$TERM_PROGRAM"
|
|
@ -0,0 +1,2 @@
|
|||
|
||||
build-users-group = nixbld
|
23
flake.nix
23
flake.nix
|
@ -2,7 +2,9 @@
|
|||
# WARNING this is very much still experimental.
|
||||
description = "A collection of darwin modules";
|
||||
|
||||
outputs = { self, nixpkgs }: {
|
||||
outputs = { self, nixpkgs }: let
|
||||
forAllSystems = nixpkgs.lib.genAttrs [ "aarch64-darwin" "x86_64-darwin" ];
|
||||
in {
|
||||
lib = {
|
||||
evalConfig = import ./eval-config.nix;
|
||||
|
||||
|
@ -34,6 +36,12 @@
|
|||
});
|
||||
};
|
||||
|
||||
overlays.default = final: prev: {
|
||||
inherit (prev.callPackage ./pkgs/nix-tools { }) darwin-rebuild darwin-option;
|
||||
|
||||
darwin-uninstaller = prev.callPackage ./pkgs/darwin-uninstaller { nix-darwin = self; };
|
||||
};
|
||||
|
||||
darwinModules.hydra = ./modules/examples/hydra.nix;
|
||||
darwinModules.lnl = ./modules/examples/lnl.nix;
|
||||
darwinModules.ofborg = ./modules/examples/ofborg.nix;
|
||||
|
@ -44,7 +52,7 @@
|
|||
description = "nix flake init -t nix-darwin";
|
||||
};
|
||||
|
||||
checks = nixpkgs.lib.genAttrs ["aarch64-darwin" "x86_64-darwin"] (system: let
|
||||
checks = forAllSystems (system: let
|
||||
simple = self.lib.darwinSystem {
|
||||
modules = [
|
||||
self.darwinModules.simple
|
||||
|
@ -59,5 +67,16 @@
|
|||
manualHTML
|
||||
manpages;
|
||||
});
|
||||
|
||||
packages = forAllSystems (system: let
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
overlays = [ self.overlays.default ];
|
||||
};
|
||||
in {
|
||||
default = self.packages.${system}.darwin-rebuild;
|
||||
|
||||
inherit (pkgs) darwin-option darwin-rebuild darwin-uninstaller;
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
darwin.inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
outputs = { self, darwin, nixpkgs }:
|
||||
outputs = inputs@{ self, darwin, nixpkgs }:
|
||||
let
|
||||
configuration = { pkgs, ... }: {
|
||||
# List packages installed in system profile. To search by name, run:
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
./security/pki
|
||||
./security/sandbox
|
||||
./system
|
||||
./system/base.nix
|
||||
./system/checks.nix
|
||||
./system/activation-scripts.nix
|
||||
./system/applications.nix
|
||||
|
|
|
@ -664,9 +664,13 @@ in
|
|||
|
||||
# Not in NixOS module
|
||||
environment.etc."nix/nix.conf".knownSha256Hashes = [
|
||||
"7c2d80499b39256b03ee9abd3d6258343718306aca8d472c26ac32c9b0949093" # nix installer
|
||||
"7c2d80499b39256b03ee9abd3d6258343718306aca8d472c26ac32c9b0949093" # official Nix installer
|
||||
"19299897fa312d9d32b3c968c2872dd143085aa727140cec51f57c59083e93b9"
|
||||
"c4ecc3d541c163c8fcc954ccae6b8cab28c973dc283fea5995c69aaabcdf785f"
|
||||
"ef78f401a9b5a42fd15e967c50da384f99ec62f9dbc66ea38f1390b46b63e1ff" # official Nix installer 2.0
|
||||
"c06b0c6080dd1d62e61a30cfad100c0cfed2d3bcd378e296632dc3b28b31dc69" # official Nix installer as of 2.0.1
|
||||
"ff08c12813680da98c4240328f828647b67a65ba7aa89c022bd8072cba862cf1" # official Nix installer as of 2.4
|
||||
"f3e03d851c240c1aa7daccd144ee929f0f5971982424c868c434eb6030e961d4" # DeterminateSystems Nix installer 0.10.0
|
||||
];
|
||||
|
||||
environment.etc."nix/registry.json".text = builtins.toJSON {
|
||||
|
|
|
@ -1,33 +1,13 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
|
||||
with lib;
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
let
|
||||
inherit (pkgs) stdenv;
|
||||
nix-tools = pkgs.callPackage ../../pkgs/nix-tools {
|
||||
inherit (config.system) profile;
|
||||
inherit (config.environment) systemPath;
|
||||
nixPackage = config.nix.package;
|
||||
};
|
||||
|
||||
extraPath = lib.makeBinPath [ config.nix.package pkgs.coreutils pkgs.jq pkgs.git ];
|
||||
|
||||
writeProgram = name: env: src:
|
||||
pkgs.substituteAll ({
|
||||
inherit name src;
|
||||
dir = "bin";
|
||||
isExecutable = true;
|
||||
} // env);
|
||||
|
||||
darwin-option = writeProgram "darwin-option"
|
||||
{
|
||||
inherit (stdenv) shell;
|
||||
path = "${extraPath}:${config.environment.systemPath}";
|
||||
}
|
||||
../../pkgs/nix-tools/darwin-option.sh;
|
||||
|
||||
darwin-rebuild = writeProgram "darwin-rebuild"
|
||||
{
|
||||
inherit (config.system) profile;
|
||||
inherit (stdenv) shell;
|
||||
path = "${extraPath}:${config.environment.systemPath}";
|
||||
}
|
||||
../../pkgs/nix-tools/darwin-rebuild.sh;
|
||||
inherit (nix-tools) darwin-option darwin-rebuild;
|
||||
in
|
||||
|
||||
{
|
||||
|
@ -39,5 +19,9 @@ in
|
|||
darwin-rebuild
|
||||
];
|
||||
|
||||
system.build = {
|
||||
inherit darwin-option darwin-rebuild;
|
||||
};
|
||||
|
||||
};
|
||||
}
|
||||
|
|
|
@ -96,9 +96,10 @@ in
|
|||
'';
|
||||
|
||||
environment.etc."bashrc".knownSha256Hashes = [
|
||||
"444c716ac2ccd9e1e3347858cb08a00d2ea38e8c12fdc5798380dc261e32e9ef"
|
||||
"617b39e36fa69270ddbee19ddc072497dbe7ead840cbd442d9f7c22924f116f4" # nix installer
|
||||
"6be16cf7c24a3c6f7ae535c913347a3be39508b3426f5ecd413e636e21031e66" # nix installer
|
||||
"444c716ac2ccd9e1e3347858cb08a00d2ea38e8c12fdc5798380dc261e32e9ef" # macOS
|
||||
"617b39e36fa69270ddbee19ddc072497dbe7ead840cbd442d9f7c22924f116f4" # official Nix installer
|
||||
"6be16cf7c24a3c6f7ae535c913347a3be39508b3426f5ecd413e636e21031e66" # official Nix installer
|
||||
"08ffbf991a9e25839d38b80a0d3bce3b5a6c84b9be53a4b68949df4e7e487bb7" # DeterminateSystems installer
|
||||
];
|
||||
|
||||
};
|
||||
|
|
|
@ -164,9 +164,9 @@ in
|
|||
};
|
||||
};
|
||||
|
||||
# Clean up .orig file left over from using knownSha256Hashes
|
||||
# Clean up .before-nix-darwin file left over from using knownSha256Hashes
|
||||
system.activationScripts.etc.text = ''
|
||||
auth_keys_orig=/etc/ssh/sshd_config.d/101-authorized-keys.conf.orig
|
||||
auth_keys_orig=/etc/ssh/sshd_config.d/101-authorized-keys.conf.before-nix-darwin
|
||||
|
||||
if [ -e "$auth_keys_orig" ] && [ "$(shasum -a 256 $auth_keys_orig | cut -d ' ' -f 1)" = "${oldAuthorizedKeysHash}" ]; then
|
||||
rm "$auth_keys_orig"
|
||||
|
|
|
@ -194,14 +194,15 @@ in
|
|||
|
||||
environment.etc."zprofile".knownSha256Hashes = [
|
||||
"db8422f92d8cff684e418f2dcffbb98c10fe544b5e8cd588b2009c7fa89559c5"
|
||||
"0235d3c1b6cf21e7043fbc98e239ee4bc648048aafaf6be1a94a576300584ef2"
|
||||
"0235d3c1b6cf21e7043fbc98e239ee4bc648048aafaf6be1a94a576300584ef2" # macOS
|
||||
];
|
||||
|
||||
environment.etc."zshrc".knownSha256Hashes = [
|
||||
"19a2d673ffd47b8bed71c5218ff6617dfc5e8533b240b9ba79142a45f8823c23"
|
||||
"fb5827cb4712b7e7932d438067ec4852c8955a9ff0f55e282473684623ebdfa1"
|
||||
"c5a00c072c920f46216454978c44df044b2ec6d03409dc492c7bdcd92c94a110" # nix install
|
||||
"40b0d8751adae5b0100a4f863be5b75613a49f62706427e92604f7e04d2e2261" # nix install
|
||||
"fb5827cb4712b7e7932d438067ec4852c8955a9ff0f55e282473684623ebdfa1" # macOS
|
||||
"c5a00c072c920f46216454978c44df044b2ec6d03409dc492c7bdcd92c94a110" # official Nix installer
|
||||
"40b0d8751adae5b0100a4f863be5b75613a49f62706427e92604f7e04d2e2261" # official Nix installer
|
||||
"2af1b563e389d11b76a651b446e858116d7a20370d9120a7e9f78991f3e5f336" # DeterminateSystems installer
|
||||
];
|
||||
|
||||
};
|
||||
|
|
|
@ -74,10 +74,10 @@ in
|
|||
"2c28f4fe3b4a958cd86b120e7eb799eee6976daa35b228c885f0630c55ef626c"
|
||||
];
|
||||
|
||||
# Cleaning up the .orig file is necessary as any files in /etc/resolver will be used.
|
||||
# Cleaning up the .before-nix-darwin file is necessary as any files in /etc/resolver will be used.
|
||||
system.activationScripts.etc.text = mkAfter ''
|
||||
if [ -e /etc/resolver/ts.net.orig ]; then
|
||||
rm /etc/resolver/ts.net.orig
|
||||
if [ -e /etc/resolver/ts.net.before-nix-darwin ]; then
|
||||
rm /etc/resolver/ts.net.before-nix-darwin
|
||||
fi
|
||||
'';
|
||||
};
|
||||
|
|
|
@ -69,11 +69,6 @@ in
|
|||
|
||||
${cfg.activationScripts.postActivation.text}
|
||||
|
||||
# Ensure /run exists.
|
||||
if [ ! -e /run ]; then
|
||||
ln -sfn private/var/run /run
|
||||
fi
|
||||
|
||||
# Make this configuration the current configuration.
|
||||
# The readlink is there to ensure that when $systemConfig = /system
|
||||
# (which is a symlink to the store), /run/current-system is still
|
||||
|
@ -102,6 +97,7 @@ in
|
|||
|
||||
${cfg.activationScripts.preUserActivation.text}
|
||||
|
||||
${cfg.activationScripts.createRun.text}
|
||||
${cfg.activationScripts.checks.text}
|
||||
${cfg.activationScripts.extraUserActivation.text}
|
||||
${cfg.activationScripts.userDefaults.text}
|
||||
|
|
24
modules/system/base.nix
Normal file
24
modules/system/base.nix
Normal file
|
@ -0,0 +1,24 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
system.activationScripts.createRun.text = ''
|
||||
if ! test -L /run; then
|
||||
if ! grep -q '^run\b' /etc/synthetic.conf 2>/dev/null; then
|
||||
echo "setting up /run via /etc/synthetic.conf..."
|
||||
echo -e "run\tprivate/var/run" | sudo tee -a /etc/synthetic.conf >/dev/null
|
||||
sudo /System/Library/Filesystems/apfs.fs/Contents/Resources/apfs.util -B &>/dev/null || true
|
||||
sudo /System/Library/Filesystems/apfs.fs/Contents/Resources/apfs.util -t &>/dev/null || true
|
||||
if ! test -L /run; then
|
||||
echo "warning: apfs.util failed to symlink /run"
|
||||
fi
|
||||
fi
|
||||
if ! test -L /run; then
|
||||
echo "setting up /run..."
|
||||
sudo ln -sfn private/var/run /run
|
||||
fi
|
||||
if ! test -L /run; then
|
||||
echo "warning: failed to symlink /run"
|
||||
fi
|
||||
fi
|
||||
'';
|
||||
}
|
|
@ -28,8 +28,8 @@ let
|
|||
if test -e /etc/synthetic.conf; then
|
||||
echo >&2
|
||||
echo "$ printf 'run\tprivate/var/run\n' | sudo tee -a /etc/synthetic.conf" >&2
|
||||
echo "$ /System/Library/Filesystems/apfs.fs/Contents/Resources/apfs.util -B # For Catalina" >&2
|
||||
echo "$ /System/Library/Filesystems/apfs.fs/Contents/Resources/apfs.util -t # For Big Sur and later" >&2
|
||||
echo "$ sudo /System/Library/Filesystems/apfs.fs/Contents/Resources/apfs.util -B # For Catalina" >&2
|
||||
echo "$ sudo /System/Library/Filesystems/apfs.fs/Contents/Resources/apfs.util -t # For Big Sur and later" >&2
|
||||
echo >&2
|
||||
echo "The current contents of /etc/synthetic.conf is:" >&2
|
||||
echo >&2
|
||||
|
@ -48,11 +48,7 @@ let
|
|||
if dscl . -list /Users | grep -q '^nixbld'; then
|
||||
echo "[1;31mwarning: Detected old style nixbld users[0m" >&2
|
||||
echo "These can cause migration problems when upgrading to certain macOS versions" >&2
|
||||
echo "Running the installer again will remove and recreate the users in a way that avoids these problems" >&2
|
||||
echo >&2
|
||||
echo "$ darwin-install" >&2
|
||||
echo >&2
|
||||
echo "or enable to automatically manage the users" >&2
|
||||
echo "You can enable the following option to migrate to new style nixbld users" >&2
|
||||
echo >&2
|
||||
echo " nix.configureBuildUsers = true;" >&2
|
||||
echo >&2
|
||||
|
|
|
@ -51,6 +51,7 @@ in
|
|||
|
||||
ln -sfn "$(readlink -f $systemConfig/etc)" /etc/static
|
||||
|
||||
errorOccurred=false
|
||||
for f in $(find /etc/static/* -type l); do
|
||||
l=/etc/''${f#/etc/static/}
|
||||
d=''${l%/*}
|
||||
|
@ -68,7 +69,7 @@ in
|
|||
o=''${o%% *}
|
||||
for h in ''${etcSha256Hashes["$l"]}; do
|
||||
if [ "$o" = "$h" ]; then
|
||||
mv "$l" "$l.orig"
|
||||
mv "$l" "$l.before-nix-darwin"
|
||||
ln -s "$f" "$l"
|
||||
break
|
||||
else
|
||||
|
@ -79,6 +80,7 @@ in
|
|||
if [ -z "$h" ]; then
|
||||
echo "[1;31merror: not linking environment.etc.\"''${l#/etc/}\" because $l already exists, skipping...[0m" >&2
|
||||
echo "[1;31mexisting file has unknown content $o, move and activate again to apply[0m" >&2
|
||||
errorOccurred=true
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
@ -87,6 +89,10 @@ in
|
|||
fi
|
||||
done
|
||||
|
||||
if [ "$errorOccurred" != "false" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for l in $(find /etc/* -type l 2> /dev/null); do
|
||||
f="$(echo $l | sed 's,/etc/,/etc/static/,')"
|
||||
f=/etc/static/''${l#/etc/}
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
{
|
||||
imports = [ <user-darwin-config> ./installer.nix ];
|
||||
|
||||
nix.configureBuildUsers = true;
|
||||
users.knownGroups = [ "nixbld" ];
|
||||
}
|
|
@ -1,14 +1,7 @@
|
|||
{ stdenv, writeScript, nix, pkgs, nix-darwin }:
|
||||
{ stdenv, nix, pkgs, nix-darwin }:
|
||||
|
||||
let
|
||||
configuration = builtins.path {
|
||||
name = "nix-darwin-installer-configuration";
|
||||
path = ./.;
|
||||
filter = name: _type: name != toString ./default.nix;
|
||||
};
|
||||
|
||||
nixPath = pkgs.lib.concatStringsSep ":" [
|
||||
"darwin-config=${configuration}/configuration.nix"
|
||||
"darwin=${nix-darwin}"
|
||||
"nixpkgs=${pkgs.path}"
|
||||
"$HOME/.nix-defexpr/channels"
|
||||
|
@ -54,7 +47,7 @@ stdenv.mkDerivation {
|
|||
echo >&2 "Installing nix-darwin..."
|
||||
echo >&2
|
||||
|
||||
config=$(nix-instantiate --eval -E '<darwin-config>' 2> /dev/null || echo "$HOME/.nixpkgs/darwin-configuration.nix")
|
||||
config="$HOME/.nixpkgs/darwin-configuration.nix"
|
||||
if ! test -f "$config"; then
|
||||
echo "copying example configuration.nix" >&2
|
||||
mkdir -p "$HOME/.nixpkgs"
|
||||
|
@ -93,10 +86,10 @@ stdenv.mkDerivation {
|
|||
fi
|
||||
|
||||
export NIX_PATH=${nixPath}
|
||||
system=$(nix-build '<darwin>' -I "user-darwin-config=$config" -A system --no-out-link --show-trace)
|
||||
system=$(nix-build '<darwin>' -I "darwin-config=$config" -A system --no-out-link --show-trace)
|
||||
|
||||
export PATH=$system/sw/bin:$PATH
|
||||
darwin-rebuild "$action" -I "user-darwin-config=$config"
|
||||
darwin-rebuild "$action" -I "darwin-config=$config"
|
||||
|
||||
echo >&2
|
||||
echo >&2 " Open '$config' to get started."
|
||||
|
@ -123,12 +116,6 @@ stdenv.mkDerivation {
|
|||
echo >&2 "checking /etc"
|
||||
readlink /etc/static
|
||||
test -e /etc/static
|
||||
echo >&2 "checking /etc/static in bashrc"
|
||||
cat /etc/bashrc
|
||||
grep /etc/static/bashrc /etc/bashrc
|
||||
echo >&2 "checking /etc/static in zshrc"
|
||||
cat /etc/zshrc
|
||||
grep /etc/static/zshrc /etc/zshrc
|
||||
echo >&2 "checking profile"
|
||||
cat /etc/profile
|
||||
grep -v nix-daemon.sh /etc/profile
|
||||
|
|
|
@ -1,60 +0,0 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
{
|
||||
system.activationScripts.preUserActivation.text = mkBefore ''
|
||||
PATH=/nix/var/nix/profiles/default/bin:$PATH
|
||||
|
||||
i=y
|
||||
if ! test -L /etc/bashrc && ! tail -n1 /etc/bashrc | grep -q /etc/static/bashrc; then
|
||||
if test -t 1; then
|
||||
read -p "Would you like to load darwin configuration in /etc/bashrc? [y/n] " i
|
||||
fi
|
||||
case "$i" in
|
||||
y|Y)
|
||||
sudo ${pkgs.gnused}/bin/sed -i '\,/etc/static/bashrc,d' /etc/bashrc
|
||||
echo 'if test -e /etc/static/bashrc; then . /etc/static/bashrc; fi' | sudo tee -a /etc/bashrc
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
if ! test -L /etc/zshrc && ! tail -n1 /etc/zshrc | grep -q /etc/static/zshrc; then
|
||||
if test -t 1; then
|
||||
read -p "Would you like to load darwin configuration in /etc/zshrc? [y/n] " i
|
||||
fi
|
||||
case "$i" in
|
||||
y|Y)
|
||||
sudo ${pkgs.gnused}/bin/sed -i '\,/etc/static/zshrc,d' /etc/zshrc
|
||||
echo 'if test -e /etc/static/zshrc; then . /etc/static/zshrc; fi' | sudo tee -a /etc/zshrc
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
if ! test -L /run; then
|
||||
if test -t 1; then
|
||||
read -p "Would you like to create /run? [y/n] " i
|
||||
fi
|
||||
case "$i" in
|
||||
y|Y)
|
||||
if ! grep -q '^run\b' /etc/synthetic.conf 2>/dev/null; then
|
||||
echo "setting up /run via /etc/synthetic.conf..."
|
||||
echo -e "run\tprivate/var/run" | sudo tee -a /etc/synthetic.conf >/dev/null
|
||||
sudo /System/Library/Filesystems/apfs.fs/Contents/Resources/apfs.util -B &>/dev/null || true
|
||||
sudo /System/Library/Filesystems/apfs.fs/Contents/Resources/apfs.util -t &>/dev/null || true
|
||||
if ! test -L /run; then
|
||||
echo "warning: apfs.util failed to symlink /run"
|
||||
fi
|
||||
fi
|
||||
if ! test -L /run; then
|
||||
echo "setting up /run..."
|
||||
sudo ln -sfn private/var/run /run
|
||||
fi
|
||||
if ! test -L /run; then
|
||||
echo "warning: failed to symlink /run"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
'';
|
||||
}
|
|
@ -14,10 +14,8 @@ with lib;
|
|||
launchd.user.agents = mkForce {};
|
||||
|
||||
system.activationScripts.postUserActivation.text = mkAfter ''
|
||||
if test -L ~/Applications; then
|
||||
rm ~/Applications
|
||||
elif test -L ~/Applications/Nix\ Apps; then
|
||||
rm ~/Applications/Nix\ Apps
|
||||
if test -L /Applications/Nix\ Apps; then
|
||||
rm /Applications/Nix\ Apps
|
||||
fi
|
||||
|
||||
if test -L ~/.nix-defexpr/channels/darwin; then
|
||||
|
|
|
@ -45,10 +45,10 @@ stdenv.mkDerivation {
|
|||
echo >&2
|
||||
echo >&2 "Uninstalling nix-darwin, this will:"
|
||||
echo >&2
|
||||
echo >&2 " - remove ~/Applications link."
|
||||
echo >&2 " - cleanup static /etc files."
|
||||
echo >&2 " - disable and remove all launchd services managed by nix-darwin."
|
||||
echo >&2 " - restore daemon service from nix installer (only when this is a multi-user install)."
|
||||
echo >&2 " - remove /Applications/Nix Apps symlink"
|
||||
echo >&2 " - cleanup static /etc files"
|
||||
echo >&2 " - disable and remove all launchd services managed by nix-darwin"
|
||||
echo >&2 " - restore daemon service from nix installer (only when this is a multi-user install)"
|
||||
echo >&2
|
||||
|
||||
if test -t 0; then
|
||||
|
|
38
pkgs/nix-tools/default.nix
Normal file
38
pkgs/nix-tools/default.nix
Normal file
|
@ -0,0 +1,38 @@
|
|||
{ lib
|
||||
, coreutils
|
||||
, jq
|
||||
, git
|
||||
, substituteAll
|
||||
, stdenv
|
||||
, profile ? "/nix/var/nix/profiles/system"
|
||||
, nixPackage ? "/nix/var/nix/profiles/default"
|
||||
, systemPath ? "$HOME/.nix-profile/bin:/etc/profiles/per-user/$USER/bin:/run/current-system/sw/bin:/nix/var/nix/profiles/default/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
|
||||
}:
|
||||
|
||||
let
|
||||
extraPath = lib.makeBinPath [ nixPackage coreutils jq git ];
|
||||
|
||||
writeProgram = name: env: src:
|
||||
substituteAll ({
|
||||
inherit name src;
|
||||
dir = "bin";
|
||||
isExecutable = true;
|
||||
} // env);
|
||||
|
||||
path = "${extraPath}:${systemPath}";
|
||||
in
|
||||
{
|
||||
darwin-option = writeProgram "darwin-option"
|
||||
{
|
||||
inherit path;
|
||||
inherit (stdenv) shell;
|
||||
}
|
||||
./darwin-option.sh;
|
||||
|
||||
darwin-rebuild = writeProgram "darwin-rebuild"
|
||||
{
|
||||
inherit path profile;
|
||||
inherit (stdenv) shell;
|
||||
}
|
||||
./darwin-rebuild.sh;
|
||||
}
|
Loading…
Reference in a new issue