{ 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 # ]; }