.hive/home/jonas/doom.nix

83 lines
2.2 KiB
Nix

{
config,
pkgs,
lib,
...
}: let
doom-path-pkgs = with pkgs; [
(ripgrep.override {withPCRE2 = true;})
binutils
cmake
editorconfig-core-c
emacs-all-the-icons-fonts
fd
fira-code-nerdfont
git
gnumake
gnutls
imagemagick
mlocate
zstd
];
wrapped-emacs = pkgs.symlinkJoin {
name = "wrapped-emacs";
paths = [pkgs.emacs29];
nativeBuildInputs = [pkgs.makeBinaryWrapper];
postBuild = ''
wrapProgram $out/bin/emacs \
--prefix PATH : ${lib.makeBinPath doom-path-pkgs} \
--add-flags "--init-directory=${config.xdg.configHome}/doom-emacs"
wrapProgram $out/bin/emacsclient \
--prefix PATH : ${lib.makeBinPath doom-path-pkgs}
'';
};
doom-setup = pkgs.writeShellScript "doom-setup" ''
export PATH="$PATH:${lib.makeBinPath doom-path-pkgs}"
export EMACS="${wrapped-emacs}/bin/emacs"
export DOOMDIR="${config.home.sessionVariables.DOOMDIR}"
export DOOMLOCALDIR="${config.home.sessionVariables.DOOMLOCALDIR}"
if [ ! -d "$DOOMLOCALDIR" ]; then
${config.xdg.configHome}/doom-emacs/bin/doom install --force
else
${config.xdg.configHome}/doom-emacs/bin/doom "$@"
fi
'';
in {
programs.emacs = {
enable = true;
package = wrapped-emacs;
};
home = {
sessionPath = ["${config.xdg.configHome}/doom-emacs/bin"];
sessionVariables = {
DOOMDIR = "${config.xdg.configHome}/doom-config";
DOOMLOCALDIR = "${config.xdg.configHome}/doom-local";
};
};
xdg = {
enable = true;
configFile = {
"doom-config/config.el" = {
source = ./static/doom-config/config.el;
};
"doom-config/init.el" = {
source = ./static/doom-config/init.el;
onChange = "${doom-setup} sync --force";
};
"doom-config/packages.el" = {
source = ./static/doom-config/packages.el;
onChange = "${doom-setup} sync --force -u";
};
"doom-emacs" = {
source = builtins.fetchGit {
url = "https://github.com/doomemacs/doomemacs";
rev = "9620bb45ac4cd7b0274c497b2d9d93c4ad9364ee";
};
onChange = "${doom-setup} --force sync -u";
};
};
};
}