NixOS/modules/dev/emacs.nix

72 lines
1.9 KiB
Nix

{
config,
lib,
pkgs,
...
}:
{
options.my.emacs.enable = lib.mkEnableOption "enable";
config = lib.mkIf config.my.emacs.enable {
home-manager.users.jawz = {
services.lorri.enable = true;
programs.bash = {
initExtra = ''
emacs-sqlite-fix () {
nix-shell -p cmake sqlite --command "doom sync &&
sc restart emacs &&
emacsclient -e '(org-roam-db-sync)'" &&
doom sync
}
'';
shellAliases = {
edit = "emacsclient -t";
e = "edit";
};
};
};
users.users.jawz.packages =
let
packagesDoomEverywhere = builtins.attrValues {
inherit (pkgs.xorg) xwininfo;
inherit (pkgs)
xdotool
xclip
wl-clipboard-rs
;
};
packages = builtins.attrValues {
inherit (pkgs)
fd # modern find, faster searches
fzf # fuzzy finder! super cool and useful
ripgrep # modern grep
tree-sitter # code parsing based on symbols and shit, I do not get it
graphviz # graphs
tetex # export pdf
languagetool # proofreader for English
# lsps
yaml-language-server
markdownlint-cli
;
};
packagesNode = builtins.attrValues {
inherit (pkgs.nodePackages)
vscode-json-languageserver
prettier # multi-language linter
;
};
in
packages ++ packagesDoomEverywhere ++ packagesNode;
services.emacs = {
enable = true;
package =
let
emacsPackages = (pkgs.emacsPackagesFor pkgs.emacs-gtk).emacsWithPackages;
in
emacsPackages (epkgs: [ epkgs.vterm ]);
defaultEditor = true;
};
environment.variables.PATH = [ "\${XDG_CONFIG_HOME}/emacs/bin" ];
};
}