#
# Personal Emacs config. Can be set up with vanilla nixos or with home-manager (see comments at bottom)
#
# flake.nix
# ├─ ./hosts
# │ └─ configuration.nix
# └─ ./modules
# └─ ./editors
# └─ ./emacs
# └─ default.nix *
#
{ config, lib, inputs, pkgs, ... }:
let
vterm = pkgs.emacsPackages.vterm;
emacsVtermPath = "${vterm}/share/emacs/site-lisp/elpa/${vterm.pname}-${vterm.version}";
in {
config = lib.mkIf config.profiles.development.enable {
services.emacs = {
enable = true;
client = {
enable = true;
};
startWithUserSession = "graphical";
};
programs.emacs = {
enable = true;
package = pkgs.emacs29-pgtk;
extraPackages = epkgs: [
epkgs.vterm
epkgs.sqlite
(epkgs.treesit-grammars.with-grammars (p: [
inputs.self.packages.${pkgs.system}.tree-sitter-vhdl
] ++ (builtins.attrValues p)))
epkgs.pdf-tools
];
};
programs.zsh.initExtra = ''
# Emacs
if [[ "$INSIDE_EMACS" = 'vterm' ]] \
&& [[ -n ${emacsVtermPath} ]] \
&& [[ -f ${emacsVtermPath}/etc/emacs-vterm-zsh.sh ]]; then
source ${emacsVtermPath}/etc/emacs-vterm-zsh.sh
find_file() {
vterm_cmd find-file "$(realpath "''${@:-.}")"
}
say() {
vterm_cmd message "%s" "$*"
}
open_file_below() {
vterm_cmd find-file-below "$(realpath "''${@:-.}")"
}
vterm_set_directory() {
vterm_cmd update-pwd "$PWD/"
}
autoload -U add-zsh-hook
add-zsh-hook -Uz chpwd (){ vterm_set_directory }
fi
'';
home.packages = with pkgs; [
emacs-all-the-icons-fonts
#binutils # for native comp
## My emacs dependencies
gnutls
fd
ripgrep
ripgrep-all
delta
## Optional dependencies
fd
imagemagick
#zstd
];
};
}