From 1e98605bd37815e44f8cb67d9b2732a7f0c4a45b Mon Sep 17 00:00:00 2001 From: thomasjm Date: Wed, 25 Sep 2024 02:57:24 -0700 Subject: [PATCH] Remove non-default settings when hydrating --- .../base/nixos-options-to-settings-schema.nix | 2 +- nix/makeEnvironment.nix | 4 +++ nix/remove-non-default-settings.nix | 26 +++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 nix/remove-non-default-settings.nix diff --git a/modules/base/nixos-options-to-settings-schema.nix b/modules/base/nixos-options-to-settings-schema.nix index 3136b0c..fdbd3c3 100644 --- a/modules/base/nixos-options-to-settings-schema.nix +++ b/modules/base/nixos-options-to-settings-schema.nix @@ -28,7 +28,7 @@ let evalString = str: builtins.scopedImport {} (builtins.toFile "expr.nix" str); convertDefaultValue = value: - if value._type == "literalExpression" then builtins.toJSON (evalString value.text) + if value._type == "literalExpression" then evalString value.text else builtins.throw "Can't handle this default value: ${toString value}."; in diff --git a/nix/makeEnvironment.nix b/nix/makeEnvironment.nix index 2bf1f27..2b56fe2 100644 --- a/nix/makeEnvironment.nix +++ b/nix/makeEnvironment.nix @@ -19,14 +19,18 @@ with lib; let evaluated = (callPackage ./evaluate-config.nix { inherit pkgsStable pkgsMaster; }) config; + removeNonDefaultSettings = callPackage ./remove-non-default-settings.nix {}; builtExporters = evaluated.config.builtExporters; builtKernels = mapAttrs (_: kernel: kernel.overrideAttrs (old: { passthru = old.passthru // { name = "kernels." + kernel.name; + # channel = kernel.channel; channel = "codedown"; + + settings = removeNonDefaultSettings kernel.settingsSchema kernel.settings; }; })) evaluated.config.builtKernels; builtLanguageServers = evaluated.config.builtLanguageServers; diff --git a/nix/remove-non-default-settings.nix b/nix/remove-non-default-settings.nix new file mode 100644 index 0000000..d6474c7 --- /dev/null +++ b/nix/remove-non-default-settings.nix @@ -0,0 +1,26 @@ +{ lib }: + +settingsSchema: + +settings: + +with lib; + +let + evalString = str: builtins.scopedImport {} (builtins.toFile "expr.nix" str); + + getSettingsRow = schemaItem: value: + if value != schemaItem.defaultValue + then { name = concatStringsSep "." schemaItem.target; inherit value; } + else null + ; + + tryGetSettingsRow = schemaItem: + if hasAttrByPath schemaItem.target settings + then getSettingsRow schemaItem (getAttrFromPath schemaItem.target settings) + else null + ; + +in + +listToAttrs (filter (x: x != null) (map tryGetSettingsRow settingsSchema))