nixos/system/home/emacs/default.nix

147 lines
3.6 KiB
Nix
Raw Normal View History

{ config, pkgs, ... }:
{
imports = [
../shell/default.nix
../shell/git.nix
../gpg/default.nix
];
stylix.targets.emacs.enable = false;
services = {
git-sync.repositories = {
org = {
path = "${config.xdg.userDirs.documents}/org";
uri = "git+https://git.xenia.me.uk/pixelifytica/org.git";
};
library = {
2024-10-05 12:41:15 +01:00
path = "${config.xdg.userDirs.documents}/library";
uri = "git+https://git.xenia.me.uk/pixelifytica/library.git";
};
};
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
;
})
# Development tools
## Code screenshots
silicon
## Python Environments
poetry
## Linters
shellcheck
yamllint
ruff
## Formatters
nixfmt-rfc-style
shfmt
stylua
nodePackages.prettier
2024-09-23 10:17:24 +01:00
nodePackages.prettier-plugin-toml
## Language servers
nixd
2024-10-18 15:18:42 +01:00
pyright
lua-language-server
## Interpreters
(python3.withPackages (
ps: with ps; [
tkinter
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;
};
}