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 let
plainmacs = pkgs.writeShellScriptBin "plainmacs" '' plainmacs =
emacs_package:
pkgs.writeShellScriptBin "plainmacs" ''
INIT_SCRIPT=$(cat <<EOF INIT_SCRIPT=$(cat <<EOF
(progn (progn
(setq make-backup-files nil auto-save-default nil create-lockfiles nil) (setq make-backup-files nil auto-save-default nil create-lockfiles nil)
@ -34,13 +36,12 @@ let
EOF 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" '' e_shorthand =
exec ${pkgs.emacs_full}/bin/emacs "''${@}" emacs_package:
''; pkgs.writeShellScriptBin "e" ''
plain_e_shorthand = pkgs.writeShellScriptBin "e" '' exec ${emacs_package}/bin/emacs "''${@}"
exec ${pkgs.emacs29-pgtk}/bin/emacs "''${@}"
''; '';
in in
{ {
@ -58,21 +59,46 @@ in
description = "What flavor of emacs to set up."; description = "What flavor of emacs to set up.";
}; };
config = config = lib.mkIf (config.me.emacs_flavor != null) (
lib.mkIf config.me.emacs_flavor != null (
lib.mkMerge [ lib.mkMerge [
(lib.mkIf (config.me.emacs_flavor == "full") { {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
plainmacs emacs29-pgtk
e_shorthand (plainmacs emacs29-pgtk)
emacs_full (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 = [ nixpkgs.overlays = [
(final: prev: { (final: prev: {
emacs_full = pkgs.symlinkJoin { emacs29-pgtk = pkgs.buildEnv {
name = "emacs_full"; name = prev.emacs29-pgtk.name;
paths = [ pkgs.emacs29-pgtk ]; paths = with prev; [
emacs29-pgtk
];
extraOutputsToInstall = [
"man"
"doc"
"info"
];
buildInputs = [ pkgs.makeWrapper ]; buildInputs = [ pkgs.makeWrapper ];
postBuild = '' postBuild = ''
wrapProgram $out/bin/emacs --prefix PATH : ${ wrapProgram $out/bin/emacs --prefix PATH : ${
@ -102,49 +128,23 @@ in
recursive = true; 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") { (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 emacs29-pgtk
plainmacs
plain_e_shorthand
]; ];
extraOutputsToInstall = [
environment.persistence."/state" = lib.mkIf (!config.me.buildingIso) { "man"
hideMounts = true; "doc"
users.talexander = { "info"
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";
}) })
] ]
); );