mirror of
https://github.com/nix-community/emacs-overlay.git
synced 2025-12-15 15:21:01 -08:00
Add option use-package-always-ensure behavior
When `use-package-always-ensure` is set to `t`, `:ensure` defaults to `t`. This adds the `alwaysEnsure` argument to `emacsWithPackagesFromUsePackage` which, if set to true, emulates this behavior.
This commit is contained in:
parent
a0260daa88
commit
e43d9dbe42
2 changed files with 19 additions and 12 deletions
10
elisp.nix
10
elisp.nix
|
|
@ -9,19 +9,25 @@ let
|
|||
parse = pkgs.callPackage ./parse.nix {};
|
||||
in {
|
||||
config,
|
||||
alwaysEnsure ? false, # emulate `use-package-always-ensure` behavior
|
||||
extraEmacsPackages ? epkgs: [],
|
||||
package ? pkgs.emacs,
|
||||
override ? (epkgs: epkgs)
|
||||
}:
|
||||
let
|
||||
packages = parse.parsePackagesFromUsePackage config;
|
||||
packages = parse.parsePackagesFromUsePackage config alwaysEnsure;
|
||||
emacsPackages = pkgs.emacsPackagesGen package;
|
||||
emacsWithPackages = emacsPackages.emacsWithPackages;
|
||||
mkPackageError = name:
|
||||
let
|
||||
errorFun = if alwaysEnsure then builtins.trace else throw;
|
||||
in
|
||||
errorFun "Emacs package ${name}, declared wanted with use-package, not found." null;
|
||||
in
|
||||
emacsWithPackages (epkgs:
|
||||
let
|
||||
overridden = override epkgs;
|
||||
usePkgs = builtins.map (name: overridden.${name}) packages;
|
||||
usePkgs = map (name: overridden.${name} or (mkPackageError name)) packages;
|
||||
extraPkgs = extraEmacsPackages overridden;
|
||||
in
|
||||
[ overridden.use-package ] ++ usePkgs ++ extraPkgs)
|
||||
|
|
|
|||
21
parse.nix
21
parse.nix
|
|
@ -70,7 +70,7 @@ let
|
|||
# :hook (emacs-lisp-mode lisp-mode lisp-interaction-mode))
|
||||
# ''
|
||||
# => [ "direnv" "paredit" ]
|
||||
parsePackagesFromUsePackage = config:
|
||||
parsePackagesFromUsePackage = config: alwaysEnsure:
|
||||
let
|
||||
find = item: list:
|
||||
if list == [] then [] else
|
||||
|
|
@ -110,22 +110,23 @@ let
|
|||
getName = item:
|
||||
let
|
||||
ensureValue = getKeywordValue ":ensure" item;
|
||||
usePackageName = builtins.head (builtins.tail item);
|
||||
in
|
||||
if ensureValue == [] then
|
||||
[]
|
||||
else if builtins.isString ensureValue && !(lib.hasPrefix ":" ensureValue) then
|
||||
ensureValue
|
||||
if builtins.isString ensureValue then
|
||||
if lib.hasPrefix ":" ensureValue then
|
||||
usePackageName
|
||||
else
|
||||
ensureValue
|
||||
else if ensureValue == true || (ensureValue == null && alwaysEnsure) then
|
||||
usePackageName
|
||||
else
|
||||
builtins.head (builtins.tail item);
|
||||
[];
|
||||
|
||||
recurse = item:
|
||||
if builtins.isList item && item != [] then
|
||||
if (builtins.head item) == "use-package" then
|
||||
if !(isDisabled item) then
|
||||
if builtins.elem ":ensure" item then
|
||||
[ (getName item) ] ++ map recurse item
|
||||
else
|
||||
map recurse item
|
||||
[ (getName item) ] ++ map recurse item
|
||||
else
|
||||
[]
|
||||
else
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue