diff options
author | adisbladis <adisbladis@gmail.com> | 2020-07-31 22:56:49 +0200 |
---|---|---|
committer | adisbladis <adisbladis@gmail.com> | 2020-07-31 22:59:00 +0200 |
commit | c9e1c8cb77bb9bde350be271616bbbbce8e14bd6 (patch) | |
tree | 3e2f355f2b3b0b1c05b6fa9284f4eb429b6c99c7 /elisp.nix | |
parent | 0f290c5509a6876104bec374246c88942358babf (diff) | |
download | nixlib-c9e1c8cb77bb9bde350be271616bbbbce8e14bd6.tar nixlib-c9e1c8cb77bb9bde350be271616bbbbce8e14bd6.tar.gz nixlib-c9e1c8cb77bb9bde350be271616bbbbce8e14bd6.tar.bz2 nixlib-c9e1c8cb77bb9bde350be271616bbbbce8e14bd6.tar.lz nixlib-c9e1c8cb77bb9bde350be271616bbbbce8e14bd6.tar.xz nixlib-c9e1c8cb77bb9bde350be271616bbbbce8e14bd6.tar.zst nixlib-c9e1c8cb77bb9bde350be271616bbbbce8e14bd6.zip |
parsePackagesFromUsePackage: Allow passing config as a path & auto-tangle org configs
Diffstat (limited to 'elisp.nix')
-rw-r--r-- | elisp.nix | 96 |
1 files changed, 62 insertions, 34 deletions
diff --git a/elisp.nix b/elisp.nix index 70a60b902239..70b1726b1f3e 100644 --- a/elisp.nix +++ b/elisp.nix @@ -4,41 +4,69 @@ use-package declarations. */ { pkgs }: - let - parse = pkgs.callPackage ./parse.nix {}; -in { - config, - alwaysEnsure ? false, # emulate `use-package-always-ensure` behavior - extraEmacsPackages ? epkgs: [], - package ? pkgs.emacs, - override ? (epkgs: epkgs) + parse = pkgs.callPackage ./parse.nix { }; + inherit (pkgs) lib; + + + +in +{ config +, alwaysEnsure ? false +, # emulate `use-package-always-ensure` behavior + extraEmacsPackages ? epkgs: [ ] +, package ? pkgs.emacs +, override ? (epkgs: epkgs) }: +let + ensureNotice = '' + Emacs-overlay API breakage notice: + + Previously emacsWithPackagesFromUsePackage always added every use-package definition to the closure. + Now we will only add packages with `:ensure t`. + + You can get back the old behaviour by passing `alwaysEnsure = true`. + For a more in-depth usage example see https://github.com/nix-community/emacs-overlay#extra-library-functionality + ''; + showNotice = value: if alwaysEnsure then value else builtins.trace ensureNotice value; + + # Note that using .org configurations will result in IFD + orgBabelTangeledConfig = pkgs.runCommand "emacs-config.el" + { } '' + cp ${config} emacs-config.org + ${package}/bin/emacs --batch ./emacs-config.org -f org-babel-tangle + mv emacs-config.el $out + ''; + + config' = + let + ext = lib.last (builtins.split "\\." (builtins.toString config)); + t = builtins.typeOf config; + in + ( + if t == "string" then config + else if t == "path" then ( + builtins.readFile ( + if ext == "org" then orgBabelTangeledConfig + else config + ) + ) + else throw "Unsupported type for config: \"${t}\"" + ); + + packages = showNotice (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 - ensureNotice = '' - Emacs-overlay API breakage notice: - - Previously emacsWithPackagesFromUsePackage always added every use-package definition to the closure. - Now we will only add packages with `:ensure t`. - - You can get back the old behaviour by passing `alwaysEnsure = true`. - For a more in-depth usage example see https://github.com/nix-community/emacs-overlay#extra-library-functionality - ''; - showNotice = value: if alwaysEnsure then value else builtins.trace ensureNotice value; - - packages = showNotice (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; + overridden = override epkgs; + usePkgs = map (name: overridden.${name} or (mkPackageError name)) packages; + extraPkgs = extraEmacsPackages overridden; in - emacsWithPackages (epkgs: - let - overridden = override epkgs; - usePkgs = map (name: overridden.${name} or (mkPackageError name)) packages; - extraPkgs = extraEmacsPackages overridden; - in - [ overridden.use-package ] ++ usePkgs ++ extraPkgs) + [ overridden.use-package ] ++ usePkgs ++ extraPkgs) |