nixos-configs/modules/editor/emacs/emacs.nix

121 lines
2.8 KiB
Nix
Raw Normal View History

2024-08-20 22:58:24 +02:00
{
inputs,
config,
lib,
pkgs,
...
}:
2023-03-21 14:42:39 +01:00
2024-08-20 22:58:24 +02:00
let
cfg = config.modules.editor.emacs;
in
{
options.modules.editor.emacs = {
enable = lib.my.mkBoolOpt false;
};
2023-03-21 14:42:39 +01:00
2024-08-20 22:58:24 +02:00
config = lib.mkIf cfg.enable {
2023-03-21 14:42:39 +01:00
home-manager.users.${config.user.name} = {
2023-05-17 23:23:34 +02:00
nixpkgs.overlays = [ inputs.emacs-overlay.overlay ];
2023-03-21 14:42:39 +01:00
2024-08-20 22:58:24 +02:00
home = {
packages = [
2024-10-13 22:52:21 +02:00
pkgs.binutils
pkgs.ripgrep
pkgs.fd
pkgs.findutils.locate
pkgs.python311
pkgs.libsecret
pkgs.gcc
pkgs.gnumake
pkgs.cmake
pkgs.nodejs
2023-03-21 14:42:39 +01:00
2024-10-13 22:52:21 +02:00
pkgs.opentofu
pkgs.pandoc
2023-05-17 23:23:34 +02:00
2024-08-20 22:58:24 +02:00
# Formatters and linters
2024-10-13 22:52:21 +02:00
pkgs.nixfmt-rfc-style # nix formatter
pkgs.nixpkgs-fmt
pkgs.shfmt # sh formatter
pkgs.shellcheck # sh linter
pkgs.html-tidy # HTML formatter
pkgs.nodePackages.stylelint # CSS linter
pkgs.nodePackages.js-beautify # JS/CSS/HTML formatter
2023-05-17 23:23:34 +02:00
2024-08-20 22:58:24 +02:00
# LSPs
2024-10-13 22:52:21 +02:00
pkgs.coursier
2024-08-20 22:58:24 +02:00
# metals # Scala
2024-07-04 03:01:49 +02:00
2024-08-20 22:58:24 +02:00
# Nix
2024-10-13 22:52:21 +02:00
pkgs.nil
2024-07-04 03:01:49 +02:00
2024-08-20 22:58:24 +02:00
pkgs.phpactor # PHP
#OCaml
2024-10-13 22:52:21 +02:00
pkgs.ocaml
pkgs.dune_3
pkgs.ocamlPackages.ocaml-lsp
pkgs.ocamlPackages.ocamlformat
pkgs.ocamlPackages.utop
pkgs.ocamlPackages.ocp-indent
pkgs.ocamlPackages.merlin
2023-04-21 06:23:57 +02:00
2024-08-20 22:58:24 +02:00
# Used by org-roam
2024-10-13 22:52:21 +02:00
pkgs.sqlite
pkgs.graphviz
2023-04-26 12:12:31 +02:00
2024-08-20 22:58:24 +02:00
# Used by elfeed-tube
2024-10-13 22:52:21 +02:00
pkgs.yt-dlp
pkgs.mpv
2023-05-17 23:23:34 +02:00
2024-08-20 22:58:24 +02:00
# Used by dirvish
2024-10-13 22:52:21 +02:00
pkgs.imagemagick
pkgs.ffmpegthumbnailer
pkgs.mediainfo
pkgs.poppler
pkgs.gnutar
pkgs.unzip
2024-08-20 22:58:24 +02:00
];
sessionPath = [ "${config.home-manager.users.${config.user.name}.xdg.configHome}/emacs/bin" ];
activation = {
installDoomEmacs = ''
if [ ! -d "${config.home-manager.users.${config.user.name}.xdg.configHome}/emacs" ]; then
git clone --depth=1 --single-branch https://github.com/doomemacs/doomemacs "${
config.home-manager.users.${config.user.name}.xdg.configHome
}/emacs"
fi
'';
};
};
2023-03-21 14:42:39 +01:00
services.emacs = {
enable = true;
client.enable = true;
};
2023-05-17 23:23:34 +02:00
programs.emacs = {
2023-03-21 14:42:39 +01:00
enable = true;
2024-10-13 22:52:21 +02:00
package = pkgs.emacs29.override {
2024-02-24 08:57:35 +01:00
withNativeCompilation = true;
2024-06-25 02:09:47 +02:00
withPgtk = true;
2024-02-24 08:57:35 +01:00
withSQLite3 = true;
withTreeSitter = true;
withWebP = true;
};
2024-08-20 22:58:24 +02:00
extraPackages =
epkgs: with epkgs; [
2024-02-24 08:57:35 +01:00
vterm
pdf-tools
treesit-grammars.with-all-grammars
];
2023-03-21 14:42:39 +01:00
};
2024-08-20 22:58:24 +02:00
xdg.configFile = {
"doom" = {
source = ./doom.d;
};
2023-05-17 23:23:34 +02:00
};
2023-03-21 14:42:39 +01:00
};
};
}