{ config, pkgs, shell, ... }: { imports = [../git/default.nix ../prog/default.nix]; programs.git.extraConfig.core.editor = "${config.programs.emacs.finalPackage}/bin/emacsclient -c"; 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 '' (customize-set-variable 'shell-file-name "${pkgs.${shell}}/bin/${shell}") (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-collection flymake-shellcheck flymake-clippy flymake-ruff flymake-eslint 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; }; git-sync.repositories = with config.xdg.userDirs; { org = { path = "${documents}/Org"; uri = "git+https://git.xenia.me.uk/xenia/org.git"; }; references = { path = "${documents}/References"; uri = "git+https://git.xenia.me.uk/xenia/references.git"; }; }; }; 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 ; }) ]; }