202 lines
4.4 KiB
Nix
202 lines
4.4 KiB
Nix
|
{
|
||
|
config,
|
||
|
pkgs,
|
||
|
fonts,
|
||
|
...
|
||
|
}: {
|
||
|
imports = [
|
||
|
../shell/default.nix
|
||
|
./python/default.nix
|
||
|
./lua/default.nix
|
||
|
./javascript/default.nix
|
||
|
];
|
||
|
services.emacs = {
|
||
|
enable = true;
|
||
|
package = config.programs.emacs.finalPackage;
|
||
|
defaultEditor = true;
|
||
|
client.enable = true;
|
||
|
socketActivation.enable = true;
|
||
|
startWithUserSession = false;
|
||
|
};
|
||
|
programs.emacs = {
|
||
|
# Clone emacs config from https://git.xenia.me.uk/pixelifytica/emacs.git
|
||
|
# git clone https://git.xenia.me.uk/pixelifytica/emacs.git ~/.emacs.d
|
||
|
enable = true;
|
||
|
package = pkgs.emacs29-pgtk;
|
||
|
extraConfig = let
|
||
|
fixed-font-family = "${fonts.monospace.name}";
|
||
|
variable-font-family = "${fonts.sansSerif.name}";
|
||
|
font-height = builtins.toString (builtins.floor (builtins.mul fonts.sizes.applications 10));
|
||
|
custom-theme-name = "nix";
|
||
|
custom-theme = pkgs.writeTextFile {
|
||
|
name = "custom-emacs-theme";
|
||
|
destination = "/${custom-theme-name}-theme.el";
|
||
|
text = ''
|
||
|
(deftheme ${custom-theme-name}
|
||
|
"Use Nix customised fonts for main faces")
|
||
|
|
||
|
(custom-theme-set-variables
|
||
|
'${custom-theme-name}
|
||
|
'(menu-bar-mode nil))
|
||
|
|
||
|
(custom-theme-set-faces
|
||
|
'${custom-theme-name}
|
||
|
'(default ((t (:family "${fixed-font-family}" :height ${font-height}))))
|
||
|
'(fixed-pitch ((t (:family "${fixed-font-family}"))))
|
||
|
'(fixed-pitch-serif ((t (:family "${fixed-font-family}"))))
|
||
|
'(variable-pitch ((t (:family "${variable-font-family}")))))
|
||
|
|
||
|
(provide-theme '${custom-theme-name})
|
||
|
'';
|
||
|
};
|
||
|
custom-theme-hash = builtins.hashFile "sha256" "${custom-theme}/${custom-theme-name}-theme.el";
|
||
|
in ''
|
||
|
(add-to-list 'custom-theme-load-path "${custom-theme}")
|
||
|
(add-to-list 'custom-safe-themes "${custom-theme-hash}")
|
||
|
(load-theme '${custom-theme-name})
|
||
|
'';
|
||
|
extraPackages = epkgs:
|
||
|
with epkgs; [
|
||
|
# Theme
|
||
|
base16-theme
|
||
|
|
||
|
# UI
|
||
|
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
|
||
|
ace-window
|
||
|
link-hint
|
||
|
diff-hl
|
||
|
|
||
|
# Completion
|
||
|
cape
|
||
|
consult
|
||
|
consult-eglot
|
||
|
consult-flyspell
|
||
|
corfu
|
||
|
corfu-terminal
|
||
|
embark
|
||
|
embark-consult
|
||
|
marginalia
|
||
|
orderless
|
||
|
vertico
|
||
|
|
||
|
# Templates
|
||
|
tempel
|
||
|
license-templates
|
||
|
gitignore-templates
|
||
|
|
||
|
# spell-checking
|
||
|
flyspell-correct
|
||
|
|
||
|
# password-store
|
||
|
pass
|
||
|
password-store
|
||
|
|
||
|
# IDE
|
||
|
treesit-grammars.with-all-grammars
|
||
|
treesit-auto
|
||
|
flymake-popon
|
||
|
flymake-shellcheck
|
||
|
flymake-yamllint
|
||
|
flymake-eslint
|
||
|
apheleia
|
||
|
envrc
|
||
|
rainbow-delimiters
|
||
|
aggressive-indent
|
||
|
python-docstring
|
||
|
nix-mode
|
||
|
lua-mode
|
||
|
|
||
|
# Media
|
||
|
emms
|
||
|
|
||
|
# org-mode
|
||
|
org-roam
|
||
|
org-noter
|
||
|
|
||
|
# org-cite
|
||
|
citar
|
||
|
citar-embark
|
||
|
|
||
|
# org-mode HTML export
|
||
|
htmlize
|
||
|
|
||
|
# Projects
|
||
|
ibuffer-project
|
||
|
magit
|
||
|
forge
|
||
|
treemacs
|
||
|
treemacs-nerd-icons
|
||
|
|
||
|
# Writing
|
||
|
markdown-mode
|
||
|
pandoc-mode
|
||
|
auctex
|
||
|
auctex-latexmk
|
||
|
latex-preview-pane
|
||
|
|
||
|
# Contacts
|
||
|
bbdb
|
||
|
mu4e
|
||
|
ement
|
||
|
|
||
|
# RSS feeds
|
||
|
elfeed
|
||
|
elfeed-org
|
||
|
elfeed-tube
|
||
|
];
|
||
|
};
|
||
|
home.packages = with pkgs; [
|
||
|
# Emacs requirements
|
||
|
imagemagick
|
||
|
languagetool
|
||
|
wordnet
|
||
|
graphviz # For org-roam graph
|
||
|
mp3info # For EMMS
|
||
|
|
||
|
# Language-specific requirements
|
||
|
sqlite
|
||
|
pandoc
|
||
|
ghostscript
|
||
|
poppler_utils
|
||
|
|
||
|
# Customised LaTeX install
|
||
|
(texlive.combine
|
||
|
{inherit (pkgs.texlive) scheme-medium dvisvgm dvipng wrapfig amsmath ulem hyperref capt-of;})
|
||
|
python3Packages.pygments
|
||
|
|
||
|
# Development tools
|
||
|
## Code screenshots
|
||
|
silicon
|
||
|
|
||
|
## Linters
|
||
|
shellcheck
|
||
|
yamllint
|
||
|
nodePackages.eslint
|
||
|
|
||
|
## Formatters
|
||
|
alejandra
|
||
|
shfmt
|
||
|
ruff
|
||
|
black
|
||
|
isort
|
||
|
stylua
|
||
|
nodePackages.prettier
|
||
|
|
||
|
## Language servers
|
||
|
nil # Nix lsp
|
||
|
lua-language-server
|
||
|
nodePackages.pyright
|
||
|
nodePackages.typescript-language-server
|
||
|
];
|
||
|
}
|