]> git.ekhem.eu.org Git - guix.git/commitdiff
[emacs] Customize dired.
authorJakub Czajka <jakub@ekhem.eu.org>
Fri, 23 Dec 2022 17:03:58 +0000 (18:03 +0100)
committerJakub Czajka <jczajka@google.com>
Sun, 24 Dec 2023 18:53:07 +0000 (19:53 +0100)
Dired is the built-in file manager for emacs. For example, it can open
files with `xdg-open`.

conf/home/emacs.scm
emacs/.config/emacs/conf/conf-dired.el [new file with mode: 0644]
mime/.config/mimeapps.list [new file with mode: 0644]

index 1eb1bec18a2bb712186112b13d6f086e08e995f5..6a7cc2bfcda669d0864238c04d7c7c58814904a7 100644 (file)
@@ -9,6 +9,7 @@
   #:use-module (gnu home services shepherd)
   #:use-module (gnu packages emacs)
   #:use-module (gnu packages emacs-xyz)
+  #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages password-utils)
   #:use-module (gnu packages rust-apps)
                  home-shepherd-service-type
                  (list emacs-daemon-shepherd-service)))
 
+(define emacs-dired-service
+  (service home-program-service-type
+          (home-program-configuration
+           ;; file
+           (packages
+            (list emacs-dired-hacks
+                  xdg-utils))
+           (dotfiles
+            (list "mime/.config/mimeapps.list"
+                  "emacs/.config/emacs/conf/conf-dired.el")))))
+
 (define emacs-package-service
   (service home-program-service-type
           (home-program-configuration
         emacs-calfw-service
         emacs-consult-service
        emacs-daemon-service
+        emacs-dired-service
         emacs-package-service
         emacs-pass-service
         emacs-service))
diff --git a/emacs/.config/emacs/conf/conf-dired.el b/emacs/.config/emacs/conf/conf-dired.el
new file mode 100644 (file)
index 0000000..c470a67
--- /dev/null
@@ -0,0 +1,53 @@
+;; Copyright (c) 2022 Jakub Czajka <jakub@ekhem.eu.org>
+;; License: GPL-3.0 or later.
+;;
+;; conf-dired.el - configuration for the dired file manager.
+
+(require 'conf-package)
+
+(use-package dired
+  :bind
+  ;; Open `dired' in a directory of the current file.
+  ("C-x C-j" . dired-jump)
+  ;; Like `dired-jump', but open `dired' but in split screen.
+  ("C-S-x C-j" . dired-jump-other-window)
+  :hook
+  ;; Show only names from `ls' by default. Can be toggled with C-(.
+  (dired-mode . dired-hide-details-mode)
+  :custom
+  ;; Copy directories recursively without asking for confirmation.
+  (dired-recursive-copies 'always)
+  ;; Delete directories recursively without asking for confirmation.
+  (dired-recursive-deletes 'always)
+  ;; If another `dired' buffer is opened, use it as the default destination
+  ;; argument for actions.
+  (dired-dwim-target t)
+  ;; Arguments passed to `ls'. See `man ls' for documentation.
+  (dired-listing-switches "-lv --almost-all --no-group --human-readable
+         --group-directories-first --time-style=long-iso")
+  :custom-face
+  ;; Face for directory item.
+  (dired-directory ((t :inherit link :underline nil)))
+  ;; Face for directory heading.
+  (dired-header ((t :inherit minibuffer-prompt))))
+
+(use-package dired-subtree
+  :ensure t
+  :bind
+  (:map dired-mode-map
+       ("<tab>"   . dired-subtree-toggle)
+       ("C-<tab>" . dired-subtree-remove)))
+
+(use-package dired-launch
+  :when
+  (conf:executables-p (list "xdg-open"))
+  :ensure t
+  :bind
+  (:map dired-launch-mode-map
+       ("l" . 'dired-launch-command))
+  :hook
+  (dired-mode . dired-launch-mode)
+  :custom
+  (dired-launch-default-launcher '("xdg-open")))
+
+(provide 'conf-dired)
diff --git a/mime/.config/mimeapps.list b/mime/.config/mimeapps.list
new file mode 100644 (file)
index 0000000..36a57a7
--- /dev/null
@@ -0,0 +1,3 @@
+[Default Applications]
+video/mp4=mpv.desktop
+image/gif=mpv.desktop