Switch to buildEnv instead of symlinkJoin for better control over the joining process.

This commit is contained in:
Tom Alexander 2025-01-22 21:26:14 -05:00
parent d3ea8b3667
commit 054e056d00
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE

View File

@ -6,7 +6,9 @@
}:
let
plainmacs = pkgs.writeShellScriptBin "plainmacs" ''
plainmacs =
emacs_package:
pkgs.writeShellScriptBin "plainmacs" ''
INIT_SCRIPT=$(cat <<EOF
(progn
(setq make-backup-files nil auto-save-default nil create-lockfiles nil)
@ -34,13 +36,12 @@ let
EOF
)
exec ${pkgs.emacs29-pgtk}/bin/emacs -q --eval "$INIT_SCRIPT" "''${@}"
exec ${emacs_package}/bin/emacs -q --eval "$INIT_SCRIPT" "''${@}"
'';
e_shorthand = pkgs.writeShellScriptBin "e" ''
exec ${pkgs.emacs_full}/bin/emacs "''${@}"
'';
plain_e_shorthand = pkgs.writeShellScriptBin "e" ''
exec ${pkgs.emacs29-pgtk}/bin/emacs "''${@}"
e_shorthand =
emacs_package:
pkgs.writeShellScriptBin "e" ''
exec ${emacs_package}/bin/emacs "''${@}"
'';
in
{
@ -58,21 +59,46 @@ in
description = "What flavor of emacs to set up.";
};
config =
lib.mkIf config.me.emacs_flavor != null (
config = lib.mkIf (config.me.emacs_flavor != null) (
lib.mkMerge [
(lib.mkIf (config.me.emacs_flavor == "full") {
{
environment.systemPackages = with pkgs; [
plainmacs
e_shorthand
emacs_full
emacs29-pgtk
(plainmacs emacs29-pgtk)
(e_shorthand emacs29-pgtk)
];
environment.persistence."/state" = lib.mkIf (!config.me.buildingIso) {
hideMounts = true;
users.talexander = {
directories = [
".config/emacs/eln-cache" # Installed packages
".config/emacs/elpa" # Installed packages
".config/emacs/private" # For recentf
".config/emacs/tree-sitter" # Compiled tree-sitter grammars
];
files = [
".config/emacs/history" # For savehist
".config/emacs/.last-package-update-day" # For use-package
];
};
};
environment.variables.EDITOR = "${pkgs.emacs29-pgtk}/bin/plainmacs";
}
(lib.mkIf (config.me.emacs_flavor == "full") {
nixpkgs.overlays = [
(final: prev: {
emacs_full = pkgs.symlinkJoin {
name = "emacs_full";
paths = [ pkgs.emacs29-pgtk ];
emacs29-pgtk = pkgs.buildEnv {
name = prev.emacs29-pgtk.name;
paths = with prev; [
emacs29-pgtk
];
extraOutputsToInstall = [
"man"
"doc"
"info"
];
buildInputs = [ pkgs.makeWrapper ];
postBuild = ''
wrapProgram $out/bin/emacs --prefix PATH : ${
@ -102,49 +128,23 @@ in
recursive = true;
};
};
environment.persistence."/state" = lib.mkIf (!config.me.buildingIso) {
hideMounts = true;
users.talexander = {
directories = [
".config/emacs/eln-cache" # Installed packages
".config/emacs/elpa" # Installed packages
".config/emacs/private" # For recentf
".config/emacs/tree-sitter" # Compiled tree-sitter grammars
];
files = [
".config/emacs/history" # For savehist
".config/emacs/.last-package-update-day" # For use-package
];
};
};
environment.variables.EDITOR = "${plainmacs}/bin/plainmacs";
})
(lib.mkIf (config.me.emacs_flavor == "plainmacs") {
environment.systemPackages = with pkgs; [
nixpkgs.overlays = [
(final: prev: {
emacs29-pgtk = pkgs.buildEnv {
name = prev.emacs29-pgtk.name;
paths = with prev; [
emacs29-pgtk
plainmacs
plain_e_shorthand
];
environment.persistence."/state" = lib.mkIf (!config.me.buildingIso) {
hideMounts = true;
users.talexander = {
directories = [
".config/emacs/eln-cache" # Installed packages
".config/emacs/elpa" # Installed packages
".config/emacs/private" # For recentf
".config/emacs/tree-sitter" # Compiled tree-sitter grammars
];
files = [
".config/emacs/history" # For savehist
".config/emacs/.last-package-update-day" # For use-package
extraOutputsToInstall = [
"man"
"doc"
"info"
];
};
};
environment.variables.EDITOR = "${plainmacs}/bin/plainmacs";
})
];
})
]
);