1
0
Fork 0
nixos/pkgsets/emacs.nix

187 lines
5.4 KiB
Nix

{ config, lib, pkgs, ... }:
with lib;
let
gitpkgs = import /nixpkgs {};
fn = import (toString ../fn.nix) { inherit lib; };
modefiles = fn.lst { p = (toString ./emacs); b = true; };
in rec {
# nixpkgs.overlays = [
# (import (builtins.fetchTarball {
# url = https://github.com/nix-community/emacs-overlay/archive/master.tar.gz;
# }))
# ];
imports = [
../options/emacs-init.nix
] ++ modefiles;
programs.emacs.init = {
enable = (elem "emacs" config.machine.pkgs);
recommendedGcSettings = true;
prelude = ''
;; Disable UI Clutter
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
(tooltip-mode -1)
(blink-cursor-mode -1)
(setq ring-bell-function 'ignore)
(setq inhibit-startup-buffer-menu t)
(setq use-dialog-box nil)
(setq inhibit-startup-message t)
(setq inhibit-splash-screen t)
(setq initial-scratch-message nil)
(fset 'yes-or-no-p 'y-or-n-p)
(setq-default show-trailing-whitespace t)
;; Save and Backup behaviour
(add-hook 'before-save-hook 'delete-trailing-whitespace)
(setq create-lockfiles nil)
(setq backup-directory-alist `(("." . "~/.emacs_saves")))
(setq backup-by-copying t)
(setq delete-old-versions t
kept-new-versions 6
kept-old-versions 2
version-control t)
;; Tabs vs Spaces... I like Spaces
(setq-default indent-tabs-mode nil
tab-width 4
c-basic-offset 4)
;; General Functions I want
(put 'narrow-to-region 'disabled nil)
(put 'upcase-region 'disabled nil)
(put 'downcase-region 'disabled nil)
;; Global UI related Modes
(global-display-line-numbers-mode)
(setq display-line-numbers-width-start t)
(setq display-line-numbers-grow-only t)
(column-number-mode t)
(global-hl-line-mode t)
(size-indication-mode t)
(show-paren-mode t)
(setq split-height-threshold 200)
(setq split-width-threshold nil)
;; Text Scaling
(global-set-key (kbd "C-+") 'text-scale-increase)
(global-set-key (kbd "C--") 'text-scale-decrease)
;; Font Config
(defun set-fonts (frame)
(interactive)
"Adjust the font settings of FRAME so Emacs can display emoji and chinese properly."
(set-fontset-font t 'ascii (font-spec :family "DejaVu Sans Mono") frame 'preprend)
(set-fontset-font t 'big5 (font-spec :family "AR PL UMing TW") frame)
(set-fontset-font t 'chinese-gbk (font-spec :family "AR PL UMing CN") frame)
(set-fontset-font t 'symbol (font-spec :family "Symbola") frame 'prepend))
;; For when Emacs is started in GUI mode:
(set-fonts nil)
;; Hook for when a frame is created with emacsclient
;; see https://www.gnu.org/software/emacs/manual/html_node/elisp/Creating-Frames.html
(add-hook 'after-make-frame-functions 'set-fonts)
;; Fix keyboard input of 'dead-keys'
(require 'iso-transl)
'';
};
### OLD STUFF
# machine.pkgsets.emacs.pkgwrap = [(gitpkgs.pkgs.emacsWithPackages (ps: with ps; config.machine.pkgsets.emacs.pkgs))];
#[
# (pkgs.emacsWithPackagesFromUsePackage {
# # config = (concatStringsSep "\n" machine.pkgsets.emacs.config);
# config = ''
# # (package-initialize)
# # (org-babel-load-file "~/.emacs.d/configuration.org")
# '';
# package = pkgs.emacsGit;
# extraEmacsPackages = (ep: with ep; config.machine.pkgsets.emacs.pkgs);
# })
# ];
# machine.pkgsets.emacs.pkgs = with pkgs; with pkgs.emacsPackages; [
# /* Theming */
# solarized-theme color-theme-sanityinc-tomorrow moe-theme powerline moody minions
# /*General Stuff */
# rainbow-delimiters # color parenthesis by indentation
# color-identifiers-mode
# /* Python */
# company-jedi pylint elpy flycheck-mypy
# /* Git support */
# magit
# emms # multimedia support
# wsd-mode
# plantuml-mode
# /* Other Stuff, not yet sorted */
# mu4e-alert
# google-translate
# tramp
# transmission
# org-plus-contrib orgit ox-gfm ox-rst
# easy-jekyll markdown-mode impatient-mode simple-httpd htmlize
# eclim
# auto-complete
# pkgs.aspell pkgs.aspellDicts.en pkgs.aspellDicts.de
# use-package diminish bind-key
# smartparens
# evil-surround evil-indent-textobject evil-cleverparens avy undo-tree
# cdlatex # for math expressions
# helm
# /* LaTeX */ auctex helm-bibtex cdlatex
# markdown-mode
# flycheck
# pkgs.ledger
# yaml-mode
# company
# # Irony is currently broken.
# /* C/C++ */ irony company-irony company-irony-c-headers flycheck-irony clang-format pkgs.clang-tools
# /* Haskell */ haskell-mode flycheck-haskell
# /* Org */ org org-ref pdf-tools org-bullets org-caldav
# /* Rust */ rust-mode flycheck-rust racer
# /* mail */ messages-are-flowing
# /* Nix */ nix-buffer nix-mode nixos-options company-nixos-options nix-sandbox
# paganini-theme
# json-navigator
# spaceline # modeline beautification
# winum eyebrowse # window management
# auto-compile
# /* Maxima */ pkgs.maxima
# visual-fill-column
# web-mode
# melpaStablePackages.idris-mode helm-idris
# /* Java */
# # projectile yasnippet lsp-mode hydra company-lsp lsp-ui lsp-java dap-mode
# cl-lib meghanada autodisass-java-bytecode google-c-style realgud
# weechat
# ];
}