summary refs log tree commit diff stats
path: root/user/settings/emacs.nix
diff options
context:
space:
mode:
authorAlan Pearce2019-10-08 21:44:57 +0200
committerAlan Pearce2019-10-08 21:44:57 +0200
commit0a50d682ec85bf023bebd68a3ca388001f0c0677 (patch)
tree3f725c5a36633ec5b59df37f156a03ee2a971656 /user/settings/emacs.nix
parent40fd4964068d0b7628b6f699dab4aec200eadb0a (diff)
downloadnixfiles-0a50d682ec85bf023bebd68a3ca388001f0c0677.tar.lz
nixfiles-0a50d682ec85bf023bebd68a3ca388001f0c0677.tar.zst
nixfiles-0a50d682ec85bf023bebd68a3ca388001f0c0677.zip
mv modules settings
Diffstat (limited to 'user/settings/emacs.nix')
-rw-r--r--user/settings/emacs.nix169
1 files changed, 169 insertions, 0 deletions
diff --git a/user/settings/emacs.nix b/user/settings/emacs.nix
new file mode 100644
index 00000000..9f542391
--- /dev/null
+++ b/user/settings/emacs.nix
@@ -0,0 +1,169 @@
+{ config, pkgs, lib, ... }:
+
+let
+  inherit (pkgs) stdenv;
+
+  pkgsUnstable = if stdenv.isDarwin then import <nixpkgs> {} else import <nixos-unstable> {};
+
+  editorScript = pkgs.writeScriptBin "edit" ''
+    #!${pkgs.runtimeShell}
+    if [ -z "$1" ]; then
+      exec ${config.programs.emacs.finalPackage}/bin/emacsclient --create-frame --alternate-editor ${config.programs.emacs.finalPackage}/bin/emacs
+    else
+      exec ${config.programs.emacs.finalPackage}/bin/emacsclient --alternate-editor ${config.programs.emacs.finalPackage}/bin/emacs "$@"
+    fi
+  '';
+  desktopApplicationFile = pkgs.writeTextFile {
+    name = "emacsclient.desktop";
+    destination = "/share/applications/emacsclient.desktop";
+    text = ''
+      [Desktop Entry]
+      Name=Emacsclient
+      GenericName=Text Editor
+      Comment=Edit text
+      MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
+      Exec=${editorScript}/bin/edit %F
+      Icon=emacs
+      Type=Application
+      Terminal=false
+      Categories=Development;TextEditor;
+      StartupWMClass=Emacs
+      Keywords=Text;Editor;
+    '';
+  };
+in
+{
+  programs.emacs = {
+    enable = true;
+    extraPackages = epkgs: (with epkgs; [
+      ace-link
+      all-the-icons
+      almost-mono-themes
+      add-node-modules-path
+      ag
+      all-the-icons
+      amx
+      auto-async-byte-compile
+      avy
+      basic-theme
+      bash-completion
+      caddyfile-mode
+      company
+      company-web
+      company-tabnine
+      counsel
+      counsel-projectile
+      crux
+      docker-compose-mode
+      dockerfile-mode
+      dired-git-info
+      editorconfig
+      eink-theme
+      eldoc-box
+      emmet-mode
+      esh-autosuggest
+      esh-buf-stack
+      esh-help
+      eshell-fringe-status
+      eshell-toggle
+      eshell-up
+      evil
+      evil-collection
+      evil-commentary
+      evil-magit
+      evil-mu4e
+      evil-org
+      evil-quickscope
+      evil-space
+      evil-surround
+      eyebrowse
+      feature-mode
+      fish-completion
+      flycheck
+      flymake-diagnostic-at-point
+      general
+      git-gutter-fringe
+      git-messenger
+      git-timemachine
+      gitattributes-mode
+      gitconfig-mode
+      gitignore-mode
+      gitlab-ci-mode
+      gitlab-ci-mode-flycheck
+      goto-chg
+      haskell-mode
+      helpful
+      ivy-hydra
+      jinja2-mode
+      js2-mode
+      json-mode
+      k8s-mode
+      # kubernetes
+      # kubernetes-evil
+      ledger-mode
+      lsp-mode
+      lsp-ui
+      lsp-haskell
+      lsp-treemacs
+      magit
+      markdown-mode
+      minions
+      monotropic-theme
+      moody
+      nginx-mode
+      nix-mode
+      nix-update
+      org-journal
+      paredit
+      php-mode
+      posframe
+      prettier-js
+      projectile
+      projectile-ripgrep
+      quickrun
+      rainbow-mode
+      relative-buffers
+      restclient
+      ripgrep
+      rjsx-mode
+      scss-mode
+      spacemacs-theme
+      swiper
+      toml-mode
+      typescript-mode
+      undo-tree
+      use-package
+      web-mode
+      wgrep-ag
+      ws-butler
+      which-key
+      yaml-mode
+    ] ++ lib.optionals (!stdenv.isDarwin) [
+      pkgs.mu
+    ]);
+  };
+  home.packages = [
+    editorScript
+  ];
+  nixpkgs.overlays = [
+    (self: super: {
+      emacsPackagesNgGen = pkgsUnstable.emacsPackagesNgGen;
+      emacs = pkgsUnstable.emacs;
+    })
+  ];
+  home.sessionVariables = {
+    EDITOR = "${editorScript}/bin/edit";
+  };
+  home.file.".emacs.d/init.el" = {
+    source = ../emacs/.emacs.d/init.el;
+    onChange = ''
+      ${config.programs.emacs.finalPackage}/bin/emacs -batch -f batch-byte-compile .emacs.d/init.el
+    '';
+  };
+  home.file.".emacs.d/eshell/" = {
+    recursive = true;
+    source = ../emacs/.emacs.d/eshell;
+  };
+
+  home.file.".local/share/applications/emacsclient.desktop".source = desktopApplicationFile;
+}