Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 19 additions & 8 deletions lib/modules.nix
Original file line number Diff line number Diff line change
Expand Up @@ -310,30 +310,36 @@ rec {

in opt //
{ value = addErrorContext "while evaluating the option `${showOption loc}':" value;
inherit (res.defsFinal') highestPrio;
definitions = map (def: def.value) res.defsFinal;
files = map (def: def.file) res.defsFinal;
inherit (res) isDefined;
};

# Merge definitions of a value of a given type.
mergeDefinitions = loc: type: defs: rec {
defsFinal =
defsFinal' =
let
# Process mkMerge and mkIf properties.
defs' = concatMap (m:
map (value: { inherit (m) file; inherit value; }) (dischargeProperties m.value)
) defs;

# Process mkOverride properties.
defs'' = filterOverrides defs';
defs'' = filterOverrides' defs';

# Sort mkOrder properties.
defs''' =
# Avoid sorting if we don't have to.
if any (def: def.value._type or "" == "order") defs''
then sortProperties defs''
else defs'';
in defs''';
if any (def: def.value._type or "" == "order") defs''.values
then sortProperties defs''.values
else defs''.values;
in {
values = defs''';
inherit (defs'') highestPrio;
};

defsFinal = defsFinal'.values;

# Type-check the remaining definitions, and merge them.
mergedValue = foldl' (res: def:
Expand Down Expand Up @@ -416,13 +422,18 @@ rec {

Note that "z" has the default priority 100.
*/
filterOverrides = defs:
filterOverrides = defs: (filterOverrides' defs).values;

filterOverrides' = defs:
let
defaultPrio = 100;
getPrio = def: if def.value._type or "" == "override" then def.value.priority else defaultPrio;
highestPrio = foldl' (prio: def: min (getPrio def) prio) 9999 defs;
strip = def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def;
in concatMap (def: if getPrio def == highestPrio then [(strip def)] else []) defs;
in {
values = concatMap (def: if getPrio def == highestPrio then [(strip def)] else []) defs;
inherit highestPrio;
};

/* Sort a list of properties. The sort priority of a property is
1000 by default, but can be overridden by wrapping the property
Expand Down
17 changes: 14 additions & 3 deletions nixos/modules/services/audio/alsa.nix
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# ALSA sound support.
{ config, lib, pkgs, ... }:
{ config, options, lib, pkgs, ... }:

with lib;

Expand Down Expand Up @@ -78,7 +78,18 @@ in

###### implementation

config = mkIf config.sound.enable {
config = mkMerge [{

warnings = optional (options.sound.enable.highestPrio > 1000) ''
You don't have `sound.enable` explicitly enabled of disabled. It was
enabled by default before a43e33d0e48b2284ac3a2222d7f1965cef66f5e2 and
became disabled by default after e349ccc77febd45abbd14be14f7de123ec4a4da2.

Which means that if you output sound via ALSA it will still works, but
your system will no longer save and restore ALSA state between reboots.
'';

} (mkIf config.sound.enable {

environment.systemPackages = [ alsaUtils ];

Expand Down Expand Up @@ -124,6 +135,6 @@ in
];
};

};
})];

}