rofi: support top-level clauses in rasi (#1788)
See https://github.com/nix-community/home-manager/pull/1748#issuecomment-774995577
for details.
Related documentation:
920de75c4b (splitting-configuration-over-multiple-files)
This commit is contained in:
parent
e6f2687a83
commit
87e2ec341b
|
@ -117,23 +117,27 @@ let
|
||||||
else
|
else
|
||||||
abort "Unhandled value type ${builtins.typeOf value}";
|
abort "Unhandled value type ${builtins.typeOf value}";
|
||||||
|
|
||||||
mkKeyValue = name: value: "${name}: ${mkValueString value};";
|
mkKeyValue = { sep ? ": ", end ? ";" }:
|
||||||
|
name: value:
|
||||||
|
"${name}${sep}${mkValueString value}${end}";
|
||||||
|
|
||||||
mkRasiSection = section: config:
|
mkRasiSection = name: value:
|
||||||
|
if isAttrs value then
|
||||||
let
|
let
|
||||||
toRasiKeyValue = generators.toKeyValue { inherit mkKeyValue; };
|
toRasiKeyValue = generators.toKeyValue { mkKeyValue = mkKeyValue { }; };
|
||||||
# Remove null values so the resulting config does not have empty lines
|
# Remove null values so the resulting config does not have empty lines
|
||||||
configStr = toRasiKeyValue (filterAttrs (_: v: v != null) config);
|
configStr = toRasiKeyValue (filterAttrs (_: v: v != null) value);
|
||||||
in ''
|
in ''
|
||||||
${section} {
|
${name} {
|
||||||
${configStr}}
|
${configStr}}
|
||||||
'';
|
''
|
||||||
|
else
|
||||||
|
mkKeyValue {
|
||||||
|
sep = " ";
|
||||||
|
end = "";
|
||||||
|
} name value;
|
||||||
|
|
||||||
toRasi = attrsOfAttrs:
|
toRasi = attrs: concatStringsSep "\n" (mapAttrsToList mkRasiSection attrs);
|
||||||
let
|
|
||||||
mkSection = mkRasiSection;
|
|
||||||
sections = mapAttrsToList mkSection attrsOfAttrs;
|
|
||||||
in concatStringsSep "\n" sections;
|
|
||||||
|
|
||||||
locationsMap = {
|
locationsMap = {
|
||||||
center = 0;
|
center = 0;
|
||||||
|
@ -149,7 +153,9 @@ let
|
||||||
|
|
||||||
primitive = with types; (oneOf [ str int bool rasiLiteral ]);
|
primitive = with types; (oneOf [ str int bool rasiLiteral ]);
|
||||||
|
|
||||||
configType = with types; attrsOf (either primitive (listOf primitive));
|
# Either a `section { foo: "bar"; }` or a `@import/@theme "some-text"`
|
||||||
|
configType = with types;
|
||||||
|
(either (attrsOf (either primitive (listOf primitive))) str);
|
||||||
|
|
||||||
rasiLiteral = types.submodule {
|
rasiLiteral = types.submodule {
|
||||||
options = {
|
options = {
|
||||||
|
|
|
@ -9,6 +9,8 @@ with lib;
|
||||||
|
|
||||||
theme = let inherit (config.lib.formats.rasi) mkLiteral;
|
theme = let inherit (config.lib.formats.rasi) mkLiteral;
|
||||||
in {
|
in {
|
||||||
|
"@import" = "~/.cache/wal/colors-rofi-dark";
|
||||||
|
|
||||||
"*" = {
|
"*" = {
|
||||||
background-color = mkLiteral "#000000";
|
background-color = mkLiteral "#000000";
|
||||||
foreground-color = mkLiteral "rgba ( 250, 251, 252, 100 % )";
|
foreground-color = mkLiteral "rgba ( 250, 251, 252, 100 % )";
|
||||||
|
|
|
@ -15,3 +15,5 @@ border-color: #FFFFFF;
|
||||||
foreground-color: rgba ( 250, 251, 252, 100 % );
|
foreground-color: rgba ( 250, 251, 252, 100 % );
|
||||||
width: 512;
|
width: 512;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@import "~/.cache/wal/colors-rofi-dark"
|
Loading…
Reference in a new issue