diff options
Diffstat (limited to 'tools/emacs/init/nixos.el')
-rw-r--r-- | tools/emacs/init/nixos.el | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/tools/emacs/init/nixos.el b/tools/emacs/init/nixos.el new file mode 100644 index 000000000000..e384e9b77db8 --- /dev/null +++ b/tools/emacs/init/nixos.el @@ -0,0 +1,103 @@ +;; Configure additional settings if this is one of my NixOS machines +;; (i.e. if ExWM is required) +;; -*- lexical-binding: t; -*- + +(require 's) +(require 'f) +(require 'dash) + +(defun pulseaudio-ctl (cmd) + (shell-command (concat "pulseaudio-ctl " cmd)) + (message "Volume command: %s" cmd)) + +(defun volume-mute () (interactive) (pulseaudio-ctl "mute")) +(defun volume-up () (interactive) (pulseaudio-ctl "up")) +(defun volume-down () (interactive) (pulseaudio-ctl "down")) + +(defun brightness-up () + (interactive) + (shell-command "exec light -A 10") + (message "Brightness increased")) + +(defun brightness-down () + (interactive) + (shell-command "exec light -U 10") + (message "Brightness decreased")) + +(defun lock-screen () + (interactive) + (shell-command "screen-lock")) + +(defun generate-randr-config () + (-flatten `(,(-map (lambda (n) (list n "DP2")) (number-sequence 1 7)) + (0 "eDP1") + ,(-map (lambda (n) (list n "eDP1")) (number-sequence 8 9))))) + +(use-package exwm + :hook ((exwm-update-class . (lambda () + ;; Make class name the buffer name + (exwm-workspace-rename-buffer exwm-class-name)))) + :init + (progn + (require 'exwm-config) + + (fringe-mode 3) + + (setq exwm-workspace-number 10) + + ;; '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-d") #'ivy-run-external-command) + (exwm-input-set-key (kbd "s-p") #'ivy-password-store) + (exwm-input-set-key (kbd "C-s-p") '(lambda () + (interactive) + (ivy-password-store "~/.aprila-secrets"))) + + ;; Add Alacritty selector to a key + (exwm-input-set-key (kbd "C-x t") #'counsel-switch-to-alacritty) + + ;; Toggle between line-mode / char-mode + (exwm-input-set-key (kbd "C-c C-t C-t") #'exwm-input-toggle-keyboard) + + ;; Volume keys + (exwm-input-set-key (kbd "<XF86AudioMute>") #'volume-mute) + (exwm-input-set-key (kbd "<XF86AudioRaiseVolume>") #'volume-up) + (exwm-input-set-key (kbd "<XF86AudioLowerVolume>") #'volume-down) + + ;; Brightness keys + (exwm-input-set-key (kbd "<XF86MonBrightnessDown>") #'brightness-down) + (exwm-input-set-key (kbd "<XF86MonBrightnessUp>") #'brightness-up) + (exwm-input-set-key (kbd "<XF86Display>") #'lock-screen) + + ;; Line-editing shortcuts + (exwm-input-set-simulation-keys + '(([?\C-d] . delete) + ([?\C-w] . ?\C-c))) + + ;; Enable EXWM + (exwm-enable) + + ;; Show time in the mode line + (display-time-mode) + + ;; Configure xrandr when running on laptop + (when (equal (shell-command-to-string "hostname") "adho\n") + (require 'exwm-randr) + (setq exwm-randr-workspace-output-plist (generate-randr-config)) + (exwm-randr-enable)) + + ;; Let buffers move seamlessly between workspaces + (setq exwm-workspace-show-all-buffers t) + (setq exwm-layout-show-all-buffers t))) + +(provide 'nixos) |