{ config, pkgs, lib, ... }: with lib; let cfg = config.system.copySysConf; cfgPath = ../.; copySysConf = if !(isStorePath cfgPath) then pkgs.stdenv.mkDerivation rec { name = "NixOS_Configuration-${version}"; version = commitIdFromGitRepo (cfgPath + "/.git"); src = cleanSource cfgPath; installPhase = '' cp -R ./. $out ''; } else (builtins.toPath ../.); in { options.system.copySysConf = { enable = mkOption { type = types.bool; description = '' Wether to copy the systems configuration. ''; }; addToNixPath = mkOption { type = types.bool; description = '' Use backup for nixos-rebuild. ''; }; }; config = mkIf cfg.enable { environment.variables = { NIXOS_CONFIG_PATH = "${copySysConf}"; }; nix = mkIf cfg.addToNixPath { # Do not use lib.optionals as it would override the default nixPath nixPath = [ "nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos" "nixos-config=${copySysConf}/configuration.nix" "/nix/var/nix/profiles/per-user/root/channels" ]; }; }; }