nix: get rid of with lib; and inherit explicitly
				
					
				
			This commit is contained in:
		@@ -8,19 +8,28 @@ self: {
 | 
			
		||||
  cfg = config.programs.anyrun;
 | 
			
		||||
 | 
			
		||||
  defaultPackage = self.packages.${pkgs.stdenv.hostPlatform.system}.default;
 | 
			
		||||
 | 
			
		||||
  inherit (builtins) map toJSON toString substring stringLength;
 | 
			
		||||
  inherit (lib.modules) mkIf mkMerge;
 | 
			
		||||
  inherit (lib.options) mkOption mkEnableOption literalExpression;
 | 
			
		||||
  inherit (lib.lists) optional;
 | 
			
		||||
  inherit (lib.attrsets) mapAttrs' nameValuePair;
 | 
			
		||||
  inherit (lib.strings) toLower toUpper replaceStrings;
 | 
			
		||||
  inherit (lib.trivial) boolToString;
 | 
			
		||||
  inherit (lib.types) nullOr package submodule int float listOf either str enum lines bool attrs;
 | 
			
		||||
in {
 | 
			
		||||
  meta.maintainers = with lib.maintainers; [n3oney NotAShelf];
 | 
			
		||||
 | 
			
		||||
  options.programs.anyrun = with lib; {
 | 
			
		||||
  options.programs.anyrun = {
 | 
			
		||||
    enable = mkEnableOption "anyrun";
 | 
			
		||||
 | 
			
		||||
    package = mkOption {
 | 
			
		||||
      type = with types; nullOr package;
 | 
			
		||||
      type = nullOr package;
 | 
			
		||||
      default = defaultPackage;
 | 
			
		||||
      defaultText = lib.literalExpression ''
 | 
			
		||||
      defaultText = literalExpression ''
 | 
			
		||||
        anyrun.packages.''${pkgs.stdenv.hostPlatform.system}.default
 | 
			
		||||
      '';
 | 
			
		||||
      description = mdDoc ''
 | 
			
		||||
      description = ''
 | 
			
		||||
        Anyrun package to use. Defaults to the one provided by the flake.
 | 
			
		||||
      '';
 | 
			
		||||
    };
 | 
			
		||||
@@ -30,27 +39,26 @@ in {
 | 
			
		||||
        description,
 | 
			
		||||
        ...
 | 
			
		||||
      }:
 | 
			
		||||
        with types;
 | 
			
		||||
          mkOption {
 | 
			
		||||
            inherit default description;
 | 
			
		||||
            example = ''
 | 
			
		||||
              { absolute = 200; };
 | 
			
		||||
              or
 | 
			
		||||
              { fraction = 0.4; };
 | 
			
		||||
            '';
 | 
			
		||||
            type = submodule {
 | 
			
		||||
              options = {
 | 
			
		||||
                absolute = mkOption {
 | 
			
		||||
                  type = nullOr int;
 | 
			
		||||
                  default = null;
 | 
			
		||||
                };
 | 
			
		||||
                fraction = mkOption {
 | 
			
		||||
                  type = nullOr float;
 | 
			
		||||
                  default = null;
 | 
			
		||||
                };
 | 
			
		||||
        mkOption {
 | 
			
		||||
          inherit default description;
 | 
			
		||||
          example = ''
 | 
			
		||||
            { absolute = 200; };
 | 
			
		||||
            or
 | 
			
		||||
            { fraction = 0.4; };
 | 
			
		||||
          '';
 | 
			
		||||
          type = submodule {
 | 
			
		||||
            options = {
 | 
			
		||||
              absolute = mkOption {
 | 
			
		||||
                type = nullOr int;
 | 
			
		||||
                default = null;
 | 
			
		||||
              };
 | 
			
		||||
              fraction = mkOption {
 | 
			
		||||
                type = nullOr float;
 | 
			
		||||
                default = null;
 | 
			
		||||
              };
 | 
			
		||||
            };
 | 
			
		||||
          };
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
      numericInfo = ''
 | 
			
		||||
        This is a numeric option - pass either `{ absolute = int; };` or `{ fraction = float; };`.
 | 
			
		||||
@@ -59,16 +67,16 @@ in {
 | 
			
		||||
      '';
 | 
			
		||||
    in {
 | 
			
		||||
      plugins = mkOption {
 | 
			
		||||
        type = with types; nullOr (listOf (either package str));
 | 
			
		||||
        type = nullOr (listOf (either package str));
 | 
			
		||||
        default = null;
 | 
			
		||||
        description = mdDoc ''
 | 
			
		||||
        description = ''
 | 
			
		||||
          List of anyrun plugins to use. Can either be packages, absolute plugin paths, or strings.
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      x = mkNumericOption {
 | 
			
		||||
        default.fraction = 0.5;
 | 
			
		||||
        description = mdDoc ''
 | 
			
		||||
        description = ''
 | 
			
		||||
          The horizontal position, adjusted so that { relative = 0.5; } always centers the runner.
 | 
			
		||||
 | 
			
		||||
          ${numericInfo}
 | 
			
		||||
@@ -77,7 +85,7 @@ in {
 | 
			
		||||
 | 
			
		||||
      y = mkNumericOption {
 | 
			
		||||
        default.fraction = 0.0;
 | 
			
		||||
        description = mdDoc ''
 | 
			
		||||
        description = ''
 | 
			
		||||
          The vertical position, works the same as x.
 | 
			
		||||
 | 
			
		||||
          ${numericInfo}
 | 
			
		||||
@@ -86,7 +94,7 @@ in {
 | 
			
		||||
 | 
			
		||||
      width = mkNumericOption {
 | 
			
		||||
        default.absolute = 800;
 | 
			
		||||
        description = mdDoc ''
 | 
			
		||||
        description = ''
 | 
			
		||||
          The width of the runner.
 | 
			
		||||
 | 
			
		||||
          ${numericInfo}
 | 
			
		||||
@@ -95,7 +103,7 @@ in {
 | 
			
		||||
 | 
			
		||||
      height = mkNumericOption {
 | 
			
		||||
        default.absolute = 0;
 | 
			
		||||
        description = mdDoc ''
 | 
			
		||||
        description = ''
 | 
			
		||||
          The minimum height of the runner, the runner will expand to fit all the entries.
 | 
			
		||||
 | 
			
		||||
          ${numericInfo}
 | 
			
		||||
@@ -103,63 +111,63 @@ in {
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      hideIcons = mkOption {
 | 
			
		||||
        type = types.bool;
 | 
			
		||||
        type = bool;
 | 
			
		||||
        default = false;
 | 
			
		||||
        description = "Hide match and plugin info icons";
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      ignoreExclusiveZones = mkOption {
 | 
			
		||||
        type = types.bool;
 | 
			
		||||
        type = bool;
 | 
			
		||||
        default = false;
 | 
			
		||||
        description = "ignore exclusive zones, eg. Waybar";
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      layer = mkOption {
 | 
			
		||||
        type = with types; enum ["background" "bottom" "top" "overlay"];
 | 
			
		||||
        type = enum ["background" "bottom" "top" "overlay"];
 | 
			
		||||
        default = "overlay";
 | 
			
		||||
        description = "Layer shell layer (background, bottom, top or overlay)";
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      hidePluginInfo = mkOption {
 | 
			
		||||
        type = types.bool;
 | 
			
		||||
        type = bool;
 | 
			
		||||
        default = false;
 | 
			
		||||
        description = "Hide the plugin info panel";
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      closeOnClick = mkOption {
 | 
			
		||||
        type = types.bool;
 | 
			
		||||
        type = bool;
 | 
			
		||||
        default = false;
 | 
			
		||||
        description = "Close window when a click outside the main box is received";
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      showResultsImmediately = mkOption {
 | 
			
		||||
        type = types.bool;
 | 
			
		||||
        type = bool;
 | 
			
		||||
        default = false;
 | 
			
		||||
        description = "Show search results immediately when Anyrun starts";
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      maxEntries = mkOption {
 | 
			
		||||
        type = with types; nullOr int;
 | 
			
		||||
        type = nullOr int;
 | 
			
		||||
        default = null;
 | 
			
		||||
        description = "Limit amount of entries shown in total";
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    extraCss = lib.mkOption {
 | 
			
		||||
      type = lib.types.nullOr lib.types.lines;
 | 
			
		||||
    extraCss = mkOption {
 | 
			
		||||
      type = nullOr lines;
 | 
			
		||||
      default = "";
 | 
			
		||||
      description = mdDoc ''
 | 
			
		||||
      description = ''
 | 
			
		||||
        Extra CSS lines to add to {file}`~/.config/anyrun/style.css`.
 | 
			
		||||
      '';
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    extraConfigFiles = lib.mkOption {
 | 
			
		||||
    extraConfigFiles = mkOption {
 | 
			
		||||
      # unfortunately HM doesn't really export the type for files, but hopefully
 | 
			
		||||
      # hm will throw errors if the options are wrong here, so I'm being *very* loose
 | 
			
		||||
      type = lib.types.attrs;
 | 
			
		||||
      type = attrs;
 | 
			
		||||
      default = {};
 | 
			
		||||
      description = mdDoc ''
 | 
			
		||||
        Extra files to put in `~/.config/anyrun`, a wrapper over `xdg.configFile`.
 | 
			
		||||
      description = ''
 | 
			
		||||
        Extra files to put in {file}`~/.config/anyrun`, a wrapper over {option}`xdg.configFile`.
 | 
			
		||||
      '';
 | 
			
		||||
      example = ''
 | 
			
		||||
        programs.anyrun.extraConfigFiles."plugin-name.ron".text = '''
 | 
			
		||||
@@ -171,7 +179,7 @@ in {
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  config = lib.mkIf cfg.enable (let
 | 
			
		||||
  config = mkIf cfg.enable (let
 | 
			
		||||
    assertNumeric = numeric: {
 | 
			
		||||
      assertion = !((numeric ? absolute && numeric.absolute != null) && (numeric ? fraction && numeric.fraction != null));
 | 
			
		||||
      message = "Invalid numeric definition, you can only specify one of absolute or fraction.";
 | 
			
		||||
@@ -179,19 +187,19 @@ in {
 | 
			
		||||
 | 
			
		||||
    stringifyNumeric = numeric:
 | 
			
		||||
      if (numeric ? absolute && numeric.absolute != null)
 | 
			
		||||
      then "Absolute(${builtins.toString numeric.absolute})"
 | 
			
		||||
      else "Fraction(${builtins.toString numeric.fraction})";
 | 
			
		||||
      then "Absolute(${toString numeric.absolute})"
 | 
			
		||||
      else "Fraction(${toString numeric.fraction})";
 | 
			
		||||
 | 
			
		||||
    capitalize = string:
 | 
			
		||||
      lib.toUpper (builtins.substring 0 1 string) + lib.toLower (builtins.substring 1 ((builtins.stringLength string) - 1) string);
 | 
			
		||||
      toUpper (substring 0 1 string) + toLower (substring 1 ((stringLength string) - 1) string);
 | 
			
		||||
 | 
			
		||||
    parsedPlugins =
 | 
			
		||||
      if cfg.config.plugins == null
 | 
			
		||||
      then []
 | 
			
		||||
      else
 | 
			
		||||
        builtins.map (entry:
 | 
			
		||||
        map (entry:
 | 
			
		||||
          if lib.types.package.check entry
 | 
			
		||||
          then "${entry}/lib/lib${lib.replaceStrings ["-"] ["_"] entry.pname}.so"
 | 
			
		||||
          then "${entry}/lib/lib${replaceStrings ["-"] ["_"] entry.pname}.so"
 | 
			
		||||
          else entry)
 | 
			
		||||
        cfg.config.plugins;
 | 
			
		||||
  in {
 | 
			
		||||
@@ -207,11 +215,11 @@ in {
 | 
			
		||||
      ]
 | 
			
		||||
      else [];
 | 
			
		||||
 | 
			
		||||
    home.packages = lib.optional (cfg.package != null) cfg.package;
 | 
			
		||||
    home.packages = optional (cfg.package != null) cfg.package;
 | 
			
		||||
 | 
			
		||||
    xdg.configFile = lib.mkMerge [
 | 
			
		||||
      (lib.mapAttrs'
 | 
			
		||||
        (name: value: lib.nameValuePair ("anyrun/" + name) value)
 | 
			
		||||
    xdg.configFile = mkMerge [
 | 
			
		||||
      (mapAttrs'
 | 
			
		||||
        (name: value: nameValuePair ("anyrun/" + name) value)
 | 
			
		||||
        cfg.extraConfigFiles)
 | 
			
		||||
 | 
			
		||||
      {
 | 
			
		||||
@@ -221,24 +229,24 @@ in {
 | 
			
		||||
            y: ${stringifyNumeric cfg.config.y},
 | 
			
		||||
            width: ${stringifyNumeric cfg.config.width},
 | 
			
		||||
            height: ${stringifyNumeric cfg.config.height},
 | 
			
		||||
            hide_icons: ${lib.boolToString cfg.config.hideIcons},
 | 
			
		||||
            ignore_exclusive_zones: ${lib.boolToString cfg.config.ignoreExclusiveZones},
 | 
			
		||||
            hide_icons: ${boolToString cfg.config.hideIcons},
 | 
			
		||||
            ignore_exclusive_zones: ${boolToString cfg.config.ignoreExclusiveZones},
 | 
			
		||||
            layer: ${capitalize cfg.config.layer},
 | 
			
		||||
            hide_plugin_info: ${lib.boolToString cfg.config.hidePluginInfo},
 | 
			
		||||
            close_on_click: ${lib.boolToString cfg.config.closeOnClick},
 | 
			
		||||
            show_results_immediately: ${lib.boolToString cfg.config.showResultsImmediately},
 | 
			
		||||
            hide_plugin_info: ${boolToString cfg.config.hidePluginInfo},
 | 
			
		||||
            close_on_click: ${boolToString cfg.config.closeOnClick},
 | 
			
		||||
            show_results_immediately: ${boolToString cfg.config.showResultsImmediately},
 | 
			
		||||
            max_entries: ${
 | 
			
		||||
            if cfg.config.maxEntries == null
 | 
			
		||||
            then "None"
 | 
			
		||||
            else "Some(${builtins.toString cfg.config.maxEntries})"
 | 
			
		||||
            else "Some(${toString cfg.config.maxEntries})"
 | 
			
		||||
          },
 | 
			
		||||
            plugins: ${builtins.toJSON parsedPlugins},
 | 
			
		||||
            plugins: ${toJSON parsedPlugins},
 | 
			
		||||
          )
 | 
			
		||||
        '';
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      {
 | 
			
		||||
        "anyrun/style.css" = lib.mkIf (cfg.extraCss != null) {
 | 
			
		||||
        "anyrun/style.css" = mkIf (cfg.extraCss != null) {
 | 
			
		||||
          text = cfg.extraCss;
 | 
			
		||||
        };
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user