2

I have a list of packages installed that I would want to install on another computer. How would I use the info in the packages buffer or some other list to generate a script that would be used to install them on another computer?

async              20170610.2241 installed
epl                20150517.433  installed
evil               20170712.2350 installed
goto-chg           20131228.659  installed
helm               20170706.648  installed
helm-ag            20170209.745  installed
helm-core          20170701.629  installed
helm-descbinds     20160916.713  installed
helm-projectile    20170613.14   installed
pkg-info           20150517.443  installed
popup              20160709.729  installed
projectile         20170416.148  installed
undo-tree          20170706.246  installed
Drew
  • 75,699
  • 9
  • 109
  • 225
vfclists
  • 1,347
  • 1
  • 11
  • 28

3 Answers3

5

Add the packages you want to package-selected-packages and run package-install-selected-packages.

In your case:

(setq package-selected-packages
      '(async
        epl
        evil
        goto-chg
        helm
        helm-ag
        helm-core
        helm-descbinds
        helm-projectile
        pkg-info
        popup
        projectile
        undo-tree))
(package-install-selected-packages)

C-h v package-selected-packages RET and C-h f package-install-selected-packages RET are your friends.

sds
  • 5,928
  • 20
  • 39
  • How would I extract the list of installed packages in code, i.e. to generate the script here automatically, so I could paste it into a file? – vfclists Jul 15 '17 at 07:22
  • I am not quite sure what you are asking in this comment. could you please ask a separate question? thanks! – sds Jul 16 '17 at 02:32
  • I asked the new question here -https://emacs.stackexchange.com/questions/34205/how-to-insert-value-of-a-variable-into-an-elisp-function – vfclists Jul 16 '17 at 08:24
  • When I enter `C-h f package-install-selected-packages` I get `No match`. Which emacs version is the function built in? Can `package-install` iterate over a list of packages? – vfclists Jul 16 '17 at 13:51
  • Emacs 26.0.50. What does the help for the variable say? – sds Jul 16 '17 at 14:22
  • emacs-version reports 24.5.1, but I managed to do it via looping over `package-selected-packages` and using `package-install` – vfclists Jul 16 '17 at 15:53
2

You can use use-package to combine making sure a package is installed with the configuration for the package. Set up use-package with this code in your init file:

(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))

(eval-when-compile (require 'use-package))

(use-package use-package
  :config
  (setq use-package-always-ensure t))

And then you can install packages this way, e.g., projectile:

(use-package projectile
  :config
  (projectile-global-mode))

Now, when you put that init file on a new system, and start up Emacs, use-package will make sure those packages are installed.

zck
  • 8,984
  • 2
  • 31
  • 65
1

Try to use this code. All packages`ll be installed at launch, just dont forget to include this script before other package

(require 'cl)
;; Guarantee all packages are installed on start
(defvar packages-list
  '(
    ;; Example package list
    use-package
    company   
    )
  "List of packages needs to be installed at launch")

(defun has-package-not-installed ()
  (loop for p in packages-list
        when (not (package-installed-p p)) do (return t)
        finally (return nil)))

(when (has-package-not-installed)
  ;; Check for new packages (package versions)
  (message "%s" "Get latest versions of all packages...")
  (package-refresh-contents)
  (message "%s" " done.")
  ;; Install the missing packages
  (dolist (p packages-list)
    (when (not (package-installed-p p))
      (package-install p))))

p.s i didnt write this code, ive just found it somewhere on stackoverflow

Or try to use Cask

Ivnsky
  • 11
  • 1
  • You can probably use `#'cl-some` (from `'cl-extra') instead of the loop statement in `#'has-package-not-installed`. Just fyi. – zck Jul 14 '17 at 18:31