diff options
author | Ludovic Courtès <ludo@gnu.org> | 2014-12-14 11:55:07 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2014-12-14 11:55:07 +0100 |
commit | c4a1b6c2ba479c6abcd22cab6a1fcd560469e986 (patch) | |
tree | 057fb773fcac4200ea66a0267a818be61cca3104 /emacs | |
parent | 2ed11b3a3e05549ed6ef8a604464f424c0eeae1c (diff) | |
parent | 45c5b47b96a238c764c2d32966267f7f897bcc3d (diff) | |
download | guix-c4a1b6c2ba479c6abcd22cab6a1fcd560469e986.tar guix-c4a1b6c2ba479c6abcd22cab6a1fcd560469e986.tar.gz |
Merge branch 'master' into 'core-updates'.
Diffstat (limited to 'emacs')
-rw-r--r-- | emacs/guix-backend.el | 4 | ||||
-rw-r--r-- | emacs/guix-base.el | 42 | ||||
-rw-r--r-- | emacs/guix-emacs.el | 79 | ||||
-rw-r--r-- | emacs/guix-helper.scm.in | 1 | ||||
-rw-r--r-- | emacs/guix-init.el.in | 19 | ||||
-rw-r--r-- | emacs/guix-main.scm | 2 | ||||
-rw-r--r-- | emacs/guix-profiles.el.in | 62 |
7 files changed, 161 insertions, 48 deletions
diff --git a/emacs/guix-backend.el b/emacs/guix-backend.el index a320eae35a..73a429b9ee 100644 --- a/emacs/guix-backend.el +++ b/emacs/guix-backend.el @@ -52,6 +52,7 @@ ;;; Code: (require 'geiser-mode) +(require 'guix-emacs) (defvar guix-load-path (file-name-directory (or load-file-name @@ -125,7 +126,8 @@ This REPL is used for receiving information only if "Hook run before executing an operation in Guix REPL.") (defvar guix-after-repl-operation-hook - '(guix-repl-operation-success-message) + '(guix-emacs-load-autoloads-maybe + guix-repl-operation-success-message) "Hook run after executing successful operation in Guix REPL.") (defvar guix-repl-operation-p nil diff --git a/emacs/guix-base.el b/emacs/guix-base.el index 23575ac2bf..5129c87a5d 100644 --- a/emacs/guix-base.el +++ b/emacs/guix-base.el @@ -28,53 +28,13 @@ ;;; Code: (require 'cl-lib) +(require 'guix-profiles) (require 'guix-backend) (require 'guix-utils) (require 'guix-history) (require 'guix-messages) -;;; Profiles - -(defvar guix-user-profile - (expand-file-name "~/.guix-profile") - "User profile.") - -(defvar guix-default-profile - (concat (or (getenv "NIX_STATE_DIR") "/var/guix") - "/profiles/per-user/" - (getenv "USER") - "/guix-profile") - "Default Guix profile.") - -(defvar guix-current-profile guix-default-profile - "Current profile.") - -(defun guix-profile-prompt (&optional default) - "Prompt for profile and return it. -Use DEFAULT as a start directory. If it is nil, use -`guix-current-profile'." - (let* ((path (read-file-name "Profile: " - (file-name-directory - (or default guix-current-profile)))) - (path (directory-file-name (expand-file-name path)))) - (if (string= path guix-user-profile) - guix-default-profile - path))) - -(defun guix-set-current-profile (path) - "Set `guix-current-profile' to PATH. -Interactively, prompt for PATH. With prefix, use -`guix-default-profile'." - (interactive - (list (if current-prefix-arg - guix-default-profile - (guix-profile-prompt)))) - (setq guix-current-profile path) - (message "Current profile has been set to '%s'." - guix-current-profile)) - - ;;; Parameters of the entries (defvar guix-param-titles diff --git a/emacs/guix-emacs.el b/emacs/guix-emacs.el new file mode 100644 index 0000000000..512a2e2b1a --- /dev/null +++ b/emacs/guix-emacs.el @@ -0,0 +1,79 @@ +;;; guix-emacs.el --- Emacs packages installed with Guix + +;; Copyright © 2014 Alex Kost <alezost@gmail.com> + +;; This file is part of GNU Guix. + +;; GNU Guix is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Guix is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <http://www.gnu.org/licenses/>. + +;;; Commentary: + +;; This file provides auxiliary code for working with Emacs packages +;; installed with Guix. + +;;; Code: + +(require 'guix-profiles) + +(defcustom guix-emacs-activate-after-operation t + "Activate Emacs packages after installing. +If nil, do not load autoloads of the Emacs packages after +they are successfully installed." + :type 'boolean + :group 'guix) + +(defvar guix-emacs-autoloads nil + "List of the last loaded Emacs autoloads.") + +(defun guix-emacs-directory (&optional profile) + "Return directory with Emacs packages installed in PROFILE. +If PROFILE is nil, use `guix-user-profile'." + (expand-file-name "share/emacs/site-lisp" + (or profile guix-user-profile))) + +(defun guix-emacs-find-autoloads (&optional profile) + "Return list of autoloads of Emacs packages installed in PROFILE. +If PROFILE is nil, use `guix-user-profile'. +Return nil if there are no emacs packages installed in PROFILE." + (let ((dir (guix-emacs-directory profile))) + (if (file-directory-p dir) + (directory-files dir 'full-name "-autoloads\\.el\\'") + (message "Directory '%s' does not exist." dir) + nil))) + +;;;###autoload +(defun guix-emacs-load-autoloads (&optional all) + "Load autoloads for Emacs packages installed in a user profile. +If ALL is nil, activate only those packages that were installed +after the last activation, otherwise activate all Emacs packages +installed in `guix-user-profile'." + (interactive "P") + (let* ((autoloads (guix-emacs-find-autoloads)) + (files (if all + autoloads + (cl-nset-difference autoloads guix-emacs-autoloads + :test #'string=)))) + (dolist (file files) + (load file 'noerror)) + (setq guix-emacs-autoloads autoloads))) + +(defun guix-emacs-load-autoloads-maybe () + "Load autoloads for Emacs packages if needed. +See `guix-emacs-activate-after-operation' for details." + (and guix-emacs-activate-after-operation + (guix-emacs-load-autoloads))) + +(provide 'guix-emacs) + +;;; guix-emacs.el ends here diff --git a/emacs/guix-helper.scm.in b/emacs/guix-helper.scm.in index 554d55119f..0bbd36be21 100644 --- a/emacs/guix-helper.scm.in +++ b/emacs/guix-helper.scm.in @@ -50,6 +50,7 @@ (and=> (getenv "HOME") (cut string-append <> "/.config"))) (cut string-append <> "/guix/latest")))) + (push! module-dir %load-path) (push! module-dir %load-compiled-path) (if (and updates-dir (file-exists? updates-dir)) (begin diff --git a/emacs/guix-init.el.in b/emacs/guix-init.el.in index 4e62728187..4e40d7171a 100644 --- a/emacs/guix-init.el.in +++ b/emacs/guix-init.el.in @@ -1,14 +1,21 @@ (require 'guix-autoloads) +(require 'guix-emacs) (defvar guix-load-path (replace-regexp-in-string "${prefix}" "@prefix@" "@emacsuidir@") "Directory with scheme files for \"guix.el\" package.") -(defvar guix-default-profile - (concat (or (getenv "NIX_STATE_DIR") "@guix_localstatedir@/guix") - "/profiles/per-user/" - (getenv "USER") - "/guix-profile") - "Default Guix profile.") +(defcustom guix-package-enable-at-startup t + "If non-nil, activate Emacs packages installed in a user profile. +Set this variable to nil before requiring `guix-init' file to +avoid loading autoloads of Emacs packages installed in +`guix-user-profile'." + :type 'boolean + :group 'guix) + +(add-to-list 'load-path (guix-emacs-directory)) + +(when guix-package-enable-at-startup + (guix-emacs-load-autoloads 'all)) (provide 'guix-init) diff --git a/emacs/guix-main.scm b/emacs/guix-main.scm index 8ad4dcbdd7..ae3a492249 100644 --- a/emacs/guix-main.scm +++ b/emacs/guix-main.scm @@ -857,6 +857,7 @@ OUTPUTS is a list of package outputs (may be an empty list)." (derivations (list derivation)) (new-profile (derivation->output-path derivation))) (set-build-options store + #:print-build-trace #f #:use-substitutes? use-substitutes?) (show-manifest-transaction store manifest transaction #:dry-run? dry-run?) @@ -908,6 +909,7 @@ GENERATIONS is a list of generation numbers." (let* ((derivation (package-source-derivation store source)) (derivations (list derivation))) (set-build-options store + #:print-build-trace #f #:use-substitutes? use-substitutes?) (show-what-to-build store derivations #:use-substitutes? use-substitutes? diff --git a/emacs/guix-profiles.el.in b/emacs/guix-profiles.el.in new file mode 100644 index 0000000000..1e43707b68 --- /dev/null +++ b/emacs/guix-profiles.el.in @@ -0,0 +1,62 @@ +;;; guix-profiles.el --- Guix profiles + +;; Copyright © 2014 Alex Kost <alezost@gmail.com> + +;; This file is part of GNU Guix. + +;; GNU Guix is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Guix is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <http://www.gnu.org/licenses/>. + +;;; Code: + +(defvar guix-user-profile + (expand-file-name "~/.guix-profile") + "User profile.") + +(defvar guix-default-profile + (concat (or (getenv "NIX_STATE_DIR") "@guix_localstatedir@/guix") + "/profiles/per-user/" + (getenv "USER") + "/guix-profile") + "Default Guix profile.") + +(defvar guix-current-profile guix-default-profile + "Current profile.") + +(defun guix-profile-prompt (&optional default) + "Prompt for profile and return it. +Use DEFAULT as a start directory. If it is nil, use +`guix-current-profile'." + (let* ((path (read-file-name "Profile: " + (file-name-directory + (or default guix-current-profile)))) + (path (directory-file-name (expand-file-name path)))) + (if (string= path guix-user-profile) + guix-default-profile + path))) + +(defun guix-set-current-profile (path) + "Set `guix-current-profile' to PATH. +Interactively, prompt for PATH. With prefix, use +`guix-default-profile'." + (interactive + (list (if current-prefix-arg + guix-default-profile + (guix-profile-prompt)))) + (setq guix-current-profile path) + (message "Current profile has been set to '%s'." + guix-current-profile)) + +(provide 'guix-profiles) + +;;; guix-profiles.el ends here |