about summary refs log tree commit diff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/emacs/default.nix138
1 files changed, 138 insertions, 0 deletions
diff --git a/tools/emacs/default.nix b/tools/emacs/default.nix
new file mode 100644
index 000000000000..24426bc4381c
--- /dev/null
+++ b/tools/emacs/default.nix
@@ -0,0 +1,138 @@
+# Derivation for Emacs pre-configured with packages that I need.
+#
+# TODO: Fix sly (again)
+
+{ pkgs }:
+
+with pkgs; with emacsPackagesNg;
+let emacsWithPackages = (emacsPackagesNgGen emacs).emacsWithPackages;
+
+# As the EXWM-README points out, XELB should be built from source if
+# EXWM is.
+xelb = melpaBuild {
+  pname   = "xelb";
+  ename   = "xelb";
+  version = "0.15";
+  recipe  = builtins.toFile "recipe" ''
+    (xelb :fetcher github
+          :repo "ch11ng/xelb")
+  '';
+
+  packageRequires = [ cl-generic emacs ];
+
+  src = fetchFromGitHub {
+    owner  = "ch11ng";
+    repo   = "xelb";
+    rev    = "b8f168b401977098fe2b30f4ca32629c0ab6eb83";
+    sha256 = "1ack1h68x8ia0ji6wbhmayrakq35p5sgrrl6qvha3ns3pswc0pl9";
+ };
+};
+
+# EXWM pinned to a newer version than what is released due to a
+# potential fix for ch11ng/exwm#425.
+exwm = melpaBuild {
+  pname   = "exwm";
+  ename   = "exwm";
+  version = "0.19";
+  recipe  = builtins.toFile "recipe" ''
+    (exwm :fetcher github
+          :repo "ch11ng/exwm")
+  '';
+
+  packageRequires = [ xelb ];
+
+  src = fetchFromGitHub {
+    owner  = "ch11ng";
+    repo   = "exwm";
+    rev    = "472f7cb82b67b98843f10c12e6bda9b8ae7262bc";
+    sha256 = "19gflsrb19aijf2xcw7j2m658qad21nbwziw38s1h2jw66vhk8dj";
+ };
+};
+
+slyFixed = sly.overrideAttrs(_: {
+  recipe = builtins.toFile "recipe" ''
+(sly :repo "joaotavora/sly"
+     :fetcher github
+     :files ("*.el"
+             ("lib" "lib/*")
+             ("contrib" "contrib/*")
+             "doc/*.texi"
+             "doc/*.info"
+             "doc/dir"))
+'';
+});
+
+in emacsWithPackages(epkgs:
+  # Actual ELPA packages (the enlightened!)
+  (with epkgs.elpaPackages; [
+    ace-window
+    avy
+    company
+    pinentry
+    rainbow-mode
+    undo-tree
+    which-key
+  ]) ++
+
+  # MELPA packages:
+  (with epkgs.melpaPackages; [
+    browse-kill-ring
+    cargo
+    counsel
+    counsel-notmuch
+    dash
+    dash-functional
+    dockerfile-mode
+    edit-server
+    eglot
+    elixir-mode
+    erlang
+    elm-mode
+    exwm
+    go-mode
+    gruber-darker-theme
+    haskell-mode
+    ht
+    hydra
+    idle-highlight-mode
+    intero
+    ivy
+    ivy-pass
+    ivy-prescient
+    jq-mode
+    kotlin-mode
+    magit
+    markdown-mode
+    markdown-toc
+    meghanada
+    multi-term
+    multiple-cursors
+    nginx-mode
+    nix-mode
+    omnisharp
+    paredit
+    password-store
+    pg
+    pkgs.notmuch
+    prescient
+    rainbow-delimiters
+    restclient
+    rust-mode
+    s
+    slyFixed
+    smartparens
+    string-edit
+    swiper
+    telephone-line
+    terraform-mode
+    toml-mode
+    use-package
+    uuidgen
+    web-mode
+    websocket
+    yaml-mode
+  ]) ++
+
+  # Custom packaged Emacs packages:
+  [ xelb exwm ]
+)