{ config, pkgs, ... }: { imports = [ ../shell/default.nix ../shell/git.nix ../gpg/default.nix ]; stylix.targets.emacs.enable = false; 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 enable = true; package = pkgs.emacs29-pgtk; extraConfig = let fixed-font-family = "${config.stylix.fonts.monospace.name}"; variable-font-family = "${config.stylix.fonts.sansSerif.name}"; font-height = builtins.toString ( builtins.floor (builtins.mul config.stylix.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; [ treesit-grammars.with-all-grammars mu4e emacsql-sqlite ]; }; home.packages = with pkgs; [ # Emacs requirements imagemagick languagetool wordnet # Plugin requirements gcc sqlite pandoc ghostscript poppler_utils graphviz mp3info # Customised LaTeX install (texlive.combine { inherit (texlive) scheme-medium dvisvgm dvipng wrapfig amsmath ulem hyperref capt-of listings bera ; latex-beamer-ukaea.pkgs = [ (callPackage ./texlive/latex-beamer-ukaea/default.nix { }) ]; }) # Development tools ## Code screenshots silicon ## Python Environments poetry ## Linters shellcheck yamllint ruff ## Formatters nixfmt-rfc-style shfmt stylua nodePackages.prettier nodePackages.prettier-plugin-toml ## Language servers nixd lua-language-server ## Interpreters (python3.withPackages ( ps: with ps; [ tkinter python-lsp-server pylsp-rope rope mypy numpy scipy xarray matplotlib ] )) (luajit.withPackages (ps: [ (ps.callPackage ./luarocks/scilua.nix { }) ])) ]; xdg.configFile = { "ruff/pyproject.toml".source = ./ruff.toml; "pypoetry/config.toml".source = ./pypoetry.toml; }; }