about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--init.el5
-rw-r--r--init/custom.el2
-rw-r--r--init/nixos.el57
3 files changed, 61 insertions, 3 deletions
diff --git a/init.el b/init.el
index 986444ce3471..2ddebe4758b8 100644
--- a/init.el
+++ b/init.el
@@ -30,6 +30,7 @@
     dash
     dockerfile-mode
     erlang
+    exwm
     flycheck
     go-mode
     gruber-darker-theme
@@ -90,11 +91,11 @@
 
 ;; Load configuration that makes use of installed packages:
 
-
 ;; Emacs will automatically initialise all installed packages.
 ;; After initialisation, proceed to load configuration that requires packages:
 (defun load-other-settings ()
-  (mapc 'require '(look-and-feel
+  (mapc 'require '(nixos
+                   look-and-feel
                    functions
                    settings
                    modes
diff --git a/init/custom.el b/init/custom.el
index ef901fd94dc6..0613cd781b46 100644
--- a/init/custom.el
+++ b/init/custom.el
@@ -18,7 +18,7 @@
  '(ns-right-command-modifier (quote meta))
  '(package-selected-packages
    (quote
-    (fish-mode nix-mode yaml-mode undo-tree terraform-mode switch-window smart-mode-line rust-mode rainbow-mode rainbow-delimiters puppet-mode pkgbuild-mode password-store paredit multi-term multiple-cursors markdown-mode+ magit iy-go-to-char idle-highlight-mode hi2 helm haskell-mode gruber-darker-theme go-mode flycheck erlang dockerfile-mode confluence browse-kill-ring ag ace-jump-mode)))
+    (exwm which-key pandoc elnode fish-mode nix-mode yaml-mode undo-tree terraform-mode switch-window smart-mode-line rust-mode rainbow-mode rainbow-delimiters puppet-mode pkgbuild-mode password-store paredit multi-term multiple-cursors markdown-mode+ magit iy-go-to-char idle-highlight-mode hi2 helm haskell-mode gruber-darker-theme go-mode flycheck erlang dockerfile-mode confluence browse-kill-ring ag ace-jump-mode)))
  '(require-final-newline (quote visit-save)))
 (custom-set-faces
  ;; custom-set-faces was added by Custom.
diff --git a/init/nixos.el b/init/nixos.el
new file mode 100644
index 000000000000..ab62f81909df
--- /dev/null
+++ b/init/nixos.el
@@ -0,0 +1,57 @@
+;; Configure additional settings if this is one of my NixOS machines
+;; (i.e. if ExWM is required)
+;; -*- lexical-binding: t; -*-
+
+(require 's)
+(require 'f)
+
+(defvar is-nixos
+  (let ((os-f "/etc/os-release"))
+    (s-contains?
+     "NixOS" (if (f-file? os-f) (f-read os-f)))))
+
+(if is-nixos
+    (progn
+      (message "Running on NixOS, configuring ExWM.")
+      (require 'exwm)
+      (require 'exwm-config)
+
+      ;; Start with one workspace (make more as needed)
+      (setq exwm-workspace-number 1)
+      ;; Make class name the buffer name
+      (add-hook 'exwm-update-class-hook
+                (lambda ()
+                  (exwm-workspace-rename-buffer exwm-class-name)))
+
+      ;; 's-r': Reset
+      (exwm-input-set-key (kbd "s-r") #'exwm-reset)
+      ;; 's-w': Switch workspace
+      (exwm-input-set-key (kbd "s-w") #'exwm-workspace-switch)
+      ;; 's-N': Switch to certain workspace
+      (dotimes (i 10)
+        (exwm-input-set-key (kbd (format "s-%d" i))
+                            `(lambda ()
+                               (interactive)
+                               (exwm-workspace-switch-create ,i))))
+
+      ;; Launch applications with completion (dmenu style!)
+      (exwm-input-set-key (kbd "s-p") #'helm-run-external-command)
+
+      ;; Line-editing shortcuts
+      (exwm-input-set-simulation-keys
+       '(([?\C-b] . left)
+         ([?\C-f] . right)
+         ([?\C-p] . up)
+         ([?\C-n] . down)
+         ([?\C-a] . home)
+         ([?\C-e] . end)
+         ([?\M-v] . prior)
+         ([?\C-v] . next)
+         ([?\C-d] . delete)
+         ([?\C-k] . (S-end delete))))
+
+      ;; Enable EXWM
+      (exwm-enable)
+      (fringe-mode 1)))
+
+(provide 'nixos)