summaryrefslogtreecommitdiff
path: root/shared/nixos/common-nix-settings/default.nix
blob: b5c0a02018117e52af5c705779d9416714c1bd06 (plain)
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
56
57
58
59
60
# This module sets common settings related to Nix such as enabling flakes and
# using overlays everywhere..
#
# NOTE: Even though this lives under `shared/nixos` the configuration in here
# should also be compatible with nix-darwin!!
{
  pkgs,
  lib,
  config,
  flakeInputs,
  flakeOutputs,
  ...
}:
lib.mkMerge [
  {
    # Enable de facto stable features.
    nix.settings.experimental-features = ["nix-command" "flakes"];

    nixpkgs.overlays = [
      # Use local overlays.
      flakeOutputs.overlays.additions
      flakeOutputs.overlays.modifications

      # Add unstable nixpkgs.
      (final: prev: {unstable = flakeInputs.nixpkgs-unstable.legacyPackages.${pkgs.system};})
    ];

    # I'm not *that* vegan.
    nixpkgs.config.allowUnfree = true;

    # This will add each flake input as a registry
    # To make nix3 commands consistent with your flake
    nix.registry = lib.mapAttrs (_: value: {flake = value;}) flakeInputs;

    nix.nixPath =
      [
        # Use overlays from this repo for building system configuration as well as system-wide.
        # See: https://nixos.wiki/wiki/Overlays#Using_nixpkgs.overlays_from_configuration.nix_as_.3Cnixpkgs-overlays.3E_in_your_NIX_PATH
        "nixpkgs-overlays=${flakeInputs.self}/overlays/compat.nix"

        # This will additionally add out inputs to the system's legacy channels
        # Making legacy nix commands consistent as well, awesome!
      ]
      ++ lib.mapAttrsToList (key: value: "${key}=${value.to.path}") config.nix.registry;

    # Add shell-utilities which are only relevant if Nix is enabled.
    environment.systemPackages = with pkgs; [
      # For running programs easily.
      nix-index # Also includes nix-locate
      flakeInputs.comma.packages.${system}.default

      # For editing secrets.
      flakeInputs.agenix.packages.${system}.default
    ];
  }
  (lib.mkIf pkgs.stdenv.isLinux {
    # There is not nix-darwin equivalent to this NixOS option.
    nix.enable = true;
  })
]