4498e538ea
Note: not the actual initial commit. I swear I will stop repeatedly force pushing to this single commit eventually ok.
222 lines
5.9 KiB
Nix
222 lines
5.9 KiB
Nix
{ pkgs, lib, config, inputs, ... }:
|
|
|
|
let
|
|
cfg = config.my.graphical.emacs;
|
|
in {
|
|
options.my.graphical.emacs = {
|
|
enable = lib.mkEnableOption null;
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable (let
|
|
inherit (inputs.emacs-overlay.overlays.package null pkgs) emacsPackagesFor;
|
|
extraEpkgsMap = epkgs: extraEpkgList: map (extraEpkg: extraEpkg epkgs) extraEpkgList;
|
|
org-modern-indent = epkgs: epkgs.trivialBuild rec {
|
|
pname = "org-modern-indent";
|
|
version = "f2b859bc53107b2a1027b76dbf4aaebf14c03433";
|
|
src = pkgs.fetchFromGitHub {
|
|
owner = "jdtsmith";
|
|
repo = pname;
|
|
rev = version;
|
|
hash = "sha256-vtbaa3MURnAI1ypLueuSfgAno0l51y3Owb7g+jkK6JU=";
|
|
};
|
|
propagatedUserEnvPkgs = with epkgs; [ compat ];
|
|
buildInputs = propagatedUserEnvPkgs;
|
|
};
|
|
eglot-booster = epkgs: epkgs.trivialBuild rec {
|
|
pname = "eglot-booster";
|
|
version = "e19dd7ea81bada84c66e8bdd121408d9c0761fe6";
|
|
src = pkgs.fetchFromGitHub {
|
|
owner = "jdtsmith";
|
|
repo = pname;
|
|
rev = version;
|
|
hash = "sha256-vF34ZoUUj8RENyH9OeKGSPk34G6KXZhEZozQKEcRNhs=";
|
|
};
|
|
propagatedUserEnvPkgs = [];
|
|
};
|
|
extraPackages = epkgs: with epkgs; [
|
|
f
|
|
dash
|
|
dashboard
|
|
undo-fu
|
|
god-mode
|
|
multiple-cursors
|
|
expand-region
|
|
avy
|
|
lispy
|
|
ace-window
|
|
goggles
|
|
dtrt-indent
|
|
aggressive-indent
|
|
rainbow-delimiters
|
|
highlight-indent-guides
|
|
which-key
|
|
eglot-java
|
|
yasnippet
|
|
yasnippet-snippets
|
|
consult
|
|
consult-yasnippet
|
|
embark
|
|
embark-consult
|
|
orderless
|
|
marginalia
|
|
vertico
|
|
corfu
|
|
cape
|
|
all-the-icons
|
|
all-the-icons-completion
|
|
treemacs
|
|
treemacs-all-the-icons
|
|
doom-modeline
|
|
minions
|
|
dirvish
|
|
pdf-tools
|
|
engrave-faces
|
|
org-modern
|
|
djvu
|
|
nov
|
|
pkgs.asymptote
|
|
ob-asymptote
|
|
org-pdftools
|
|
org-alert
|
|
editorconfig
|
|
envrc
|
|
sly
|
|
sly-asdf
|
|
sly-named-readtables
|
|
racket-mode
|
|
haskell-mode
|
|
lua-mode
|
|
nix-mode
|
|
gdscript-mode
|
|
markdown-mode
|
|
csv-mode
|
|
meson-mode
|
|
jinx
|
|
minimap
|
|
magit
|
|
forge
|
|
eat
|
|
mpv
|
|
lingva
|
|
mastodon
|
|
circe
|
|
circe-notifications
|
|
elfeed
|
|
xkcd
|
|
page-break-lines
|
|
hl-todo
|
|
ligature
|
|
gruvbox-theme
|
|
catppuccin-theme
|
|
solaire-mode
|
|
with-editor
|
|
nyan-mode
|
|
mu4e
|
|
org-msg
|
|
emacs-everywhere
|
|
treesit-grammars.with-all-grammars
|
|
] ++ extraEpkgsMap epkgs [
|
|
eglot-booster
|
|
org-modern-indent
|
|
];
|
|
alternateEmacsclient = pkgs.writeShellScript "alternate-emacsclient" ''
|
|
${pkgs.systemd}/bin/systemctl --user start emacs.service && \
|
|
exec ${config.programs.emacs.finalPackage}/bin/emacsclient -c -a "" "$@"
|
|
'';
|
|
in {
|
|
programs.emacs = {
|
|
enable = true;
|
|
package = (emacsPackagesFor pkgs.emacs29-pgtk).emacsWithPackages extraPackages;
|
|
};
|
|
services.emacs = {
|
|
enable = true;
|
|
startWithUserSession = "graphical";
|
|
};
|
|
home = {
|
|
sessionVariables.ALTERNATE_EDITOR = alternateEmacsclient;
|
|
packages = with pkgs; [
|
|
emacs-lsp-booster
|
|
emacs-all-the-icons-fonts
|
|
gdb
|
|
clang-tools
|
|
nil
|
|
nodePackages.typescript-language-server
|
|
ghc
|
|
stylish-haskell
|
|
haskell-language-server
|
|
hunspellDicts.en-us
|
|
imagemagick
|
|
ghostscript
|
|
(texlive.combine {
|
|
inherit (texlive) scheme-basic
|
|
dvisvgm dvipng # Preview and export as html
|
|
wrapfig amsmath ulem hyperref capt-of fontspec
|
|
# Export code with engraved backend
|
|
fvextra etoolbox fancyvrb upquote lineno
|
|
tcolorbox pgf environ pdfcol
|
|
xcolor float
|
|
nopageno
|
|
# Misc. extra stuff
|
|
apa6 breakcites apacite natbib paralist
|
|
booktabs caption threeparttable fancyhdr
|
|
geometry gettitlestring times zapfchan
|
|
asymptote
|
|
;
|
|
})
|
|
pandoc
|
|
];
|
|
file.".clang-format".text = ''
|
|
---
|
|
BasedOnStyle: LLVM
|
|
IndentWidth: 4
|
|
TabWidth: 4
|
|
UseTab: Always
|
|
...
|
|
'';
|
|
};
|
|
xdg.desktopEntries = let
|
|
extendDefault = lib.recursiveUpdate {
|
|
icon = "emacs";
|
|
terminal = false;
|
|
type = "Application";
|
|
settings.Keywords = "emacsclient;";
|
|
actions = {
|
|
new-window.name = "New Window";
|
|
new-instance.name = "New Instance";
|
|
};
|
|
};
|
|
in {
|
|
emacsclient = extendDefault rec {
|
|
name = "Emacs (Client)";
|
|
exec = "${config.programs.emacs.finalPackage}/bin/emacsclient -a ${alternateEmacsclient} -c %F";
|
|
genericName = "Text Editor";
|
|
comment = "Edit text";
|
|
mimeType = ["text/english" "text/plain" ];
|
|
categories = [ "Development" "TextEditor" ];
|
|
startupNotify = true;
|
|
settings.StartupWMClass = "Emacs";
|
|
actions = {
|
|
new-window = {inherit exec;};
|
|
new-instance.exec = "${config.programs.emacs.finalPackage}/bin/emacs %F";
|
|
};
|
|
};
|
|
emacsclient-mail = extendDefault rec {
|
|
name = "Emacs (Mail, Client)";
|
|
exec = (pkgs.writeShellScript "emacsclient-mail" ''
|
|
u=''${1//\\/\\\\}
|
|
u=''${u//\"/\\\"}
|
|
exec ${config.programs.emacs.finalPackage}/bin/emacsclient -a ${alternateEmacsclient} -c \
|
|
--eval "(message-mailto \"$u\")"
|
|
'') + " %u";
|
|
comment = "GNU Emacs is an extensible, customizable text editor - and more";
|
|
mimeType = [ "x-scheme-handler/mailto" ];
|
|
noDisplay = true;
|
|
actions = {
|
|
new-window = {inherit exec;};
|
|
new-instance.exec = "${config.programs.emacs.finalPackage}/bin/emacs -f message-mailto %u";
|
|
};
|
|
};
|
|
};
|
|
});
|
|
}
|