nixos/home/emacs/default.nix

188 lines
3.6 KiB
Nix

{
config,
pkgs,
...
}: {
programs.emacs = {
# Clone emacs config from https://git.xenia.me.uk/xenia/emacs.git
enable = true;
package = pkgs.emacs29-pgtk;
extraConfig = with builtins;
with config; let
font = "${stylix.fonts.monospace.name}-${toString stylix.fonts.sizes.applications}";
alpha = "${toString (floor (mul stylix.opacity.applications 100))}";
in ''
(org-babel-load-file "~/.emacs/README.org")
(add-to-list 'initial-frame-alist '(font . "${font}"))
(add-to-list 'default-frame-alist '(font . "${font}"))
(add-to-list 'initial-frame-alist '(alpha-background . ${alpha}))
(add-to-list 'default-frame-alist '(alpha-background . ${alpha}))
(scroll-bar-mode -1)
(tab-bar-mode -1)
'';
extraPackages = epkgs:
with epkgs; [
# theme
modus-themes
# spell-checking
flyspell-correct
consult-flyspell
# password-store
password-store
password-store-otp
pass # password-store major mode
# completion-packages
cape
consult
consult-eglot
consult-yasnippet
corfu
corfu-terminal
embark
embark-consult
marginalia
orderless
vertico
# snippets-packages
yasnippet
yasnippet-snippets
yasnippet-capf
# ide-packages
treesit-grammars.with-all-grammars
treesit-auto
flymake-popon
flymake-shellcheck
apheleia
direnv
rainbow-delimiters
aggressive-indent
nix-mode
lua-mode
cargo
# media-packages
emms
# org-packages
org-roam
org-alert
org-noter
org-journal
citar
citar-embark
gnuplot
# project-packages
ibuffer-project
magit
forge
# ui-packages
all-the-icons
nerd-icons
nerd-icons-completion
nerd-icons-corfu
nerd-icons-dired
nerd-icons-ibuffer
diminish
ligature
page-break-lines
helpful
which-key
link-hint
diff-hl
# Tree-Sitter packages
nushell-ts-mode
# writing-packages
markdown-mode
pandoc-mode
auctex
auctex-latexmk
latex-preview-pane
# email-packages
mu4e
# feed-packages
elfeed
elfeed-org
elfeed-tube
elfeed-tube-mpv
];
};
services.emacs = {
enable = true;
package = config.programs.emacs.finalPackage;
startWithUserSession = false;
defaultEditor = true;
client.enable = true;
socketActivation.enable = true;
};
home.packages = with pkgs; [
# Emacs requirements
fd
ripgrep
imagemagick
languagetool
wordnet
(aspellWithDicts (ds: with ds; [en en-computers en-science]))
# For org-plot
gnuplot
# For EMMS
mp3info
# Language-specific requirements
sqlite
pandoc
ghostscript
mupdf
poppler_utils
# Customised LaTeX install
# texlive.combined.scheme-full
(texlive.combine {
inherit
(pkgs.texlive)
scheme-basic
dvisvgm
dvipng
wrapfig
amsmath
ulem
hyperref
capt-of
beamer
;
})
# Linters
shellcheck
# Formatters
nodePackages.prettier
alejandra
ruff
isort
fprettify
rustfmt
stylua
shfmt
# LSP Servers
nil
fortls
rust-analyzer
luajitPackages.lua-lsp
python3Packages.jedi-language-server
];
}