tvl-depot/configs/shared/emacs/.emacs.d/elpa/nix-mode-20180908.2240/nix.el
William Carroll 9da3ffee41 Update Emacs packages
This is a massive diff that I had to do in a hurry - when leaving
Urbint. I'm pretty sure that most of these are updating Emacs packages,
but I'm not positive.
2018-10-02 09:54:39 -04:00

289 lines
8.8 KiB
EmacsLisp
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;;; nix.el -- run nix commands in Emacs -*- lexical-binding: t -*-
;; Author: Matthew Bauer <mjbauer95@gmail.com>
;; Homepage: https://github.com/NixOS/nix-mode
;; Keywords: nix
;; This file is NOT part of GNU Emacs.
;;; Commentary:
;; To use this just run:
;; M-x RET nix-shell RET
;; This will give you some
;;; Code:
(require 'pcomplete)
(defgroup nix nil
"Nix-related customizations"
:group 'languages)
(defcustom nix-executable (executable-find "nix")
"Nix executable location."
:group 'nix
:type 'string)
(defcustom nix-build-executable (executable-find "nix-build")
"Nix-build executable location."
:group 'nix
:type 'string)
(defcustom nix-instantiate-executable (executable-find "nix-instantiate")
"Nix executable location."
:group 'nix
:type 'string)
(defcustom nix-store-executable (executable-find "nix-store")
"Nix executable location."
:group 'nix
:type 'string)
(defcustom nix-shell-executable (executable-find "nix-shell")
"Location of nix-shell executable."
:group 'nix
:type 'string)
(defcustom nix-store-dir "/nix/store"
"Nix store directory."
:group 'nix
:type 'string)
(defcustom nix-state-dir "/nix/var"
"Nix store directory."
:group 'nix
:type 'string)
(defun nix-system ()
"Get the current system tuple."
(let ((stdout (generate-new-buffer "nix eval"))
result)
(call-process nix-executable nil (list stdout nil) nil
"eval" "--raw" "(builtins.currentSystem)")
(with-current-buffer stdout (setq result (buffer-string)))
(kill-buffer stdout)
result))
(defvar nix-commands
'("add-to-store"
"build"
"cat-nar"
"cat-store"
"copy"
"copy-sigs"
"dump-path"
"edit"
"eval"
"hash-file"
"hash-path"
"log"
"ls-nar"
"ls-store"
"optimise-store"
"path-info"
"ping-store"
"repl"
"run"
"search"
"show-config"
"show-derivation"
"sign-paths"
"to-base16"
"to-base32"
"to-base64"
"upgrade-nix"
"verify"
"why-depends"))
(defvar nix-toplevel-options
'("-v"
"--verbose"
"-h"
"--help"
"--debug"
"--help-config"
"--option"
"--version"))
(defvar nix-config-options
'("allowed-uris"
"allow-import-from-derivation"
"allow-new-priveleges"
"allowed-users"
"auto-optimise-store"
"builders"
"builders-use-substitutes"
"build-users-group"
"compress-build-log"
"connect-timeout"
"cores"
"extra-sandbox-paths"
"extra-substituters"
"fallback"
"fsync-metadata"
"hashed-mirrors"
"http-connections"
"keep-build-log"
"keep-derivations"
"keep-env-derivations"
"keep-outputs"
"max-build-log-size"
"max-jobs"
"max-silent-time"
"netrc-file"
"plugin-files"
"pre-build-hook"
"repeat"
"require-sigs"
"restrict-eval"
"sandbox"
"sandbox-dev-shm-size"
"sandbox-paths"
"secret-key-files"
"show-trace"
"substitute"
"substituters"
"system"
"timeout"
"trusted-public-keys"
"trusted-subtituters"
"trusted-users"))
(defun nix--pcomplete-flags (options)
"Complete flags to the Nix command.
OPTIONS a list of options to accept."
(while (pcomplete-match "^-" 0)
(pcomplete-here options)
(let ((last-arg (nth (1- pcomplete-index) pcomplete-args)))
(cond
((string= "--option" last-arg)
(pcomplete-here nix-config-options)
(pcomplete-here))
((or (string= "-f" last-arg) (string= "--file" last-arg))
(pcomplete-here (pcomplete-entries nil 'file-exists-p)))
((or (string= "--arg" last-arg) (string= "--argstr" last-arg))
(pcomplete-here)
(pcomplete-here))
((or (string= "-I" last-arg) (string= "--include" last-arg))
(pcomplete-here (pcomplete-entries nil 'file-exists-p)))
((or (string= "-k" last-arg) (string= "--keep" last-arg))
(pcomplete-here))
((or (string= "-u" last-arg) (string= "--unset" last-arg))
(pcomplete-here))
((or (string= "-s" last-arg) (string= "--substituter" last-arg))
(pcomplete-here))))))
;;;###autoload
(defun pcomplete/nix ()
"Completion for the nix command."
(nix--pcomplete-flags nix-toplevel-options)
(pcomplete-here nix-commands)
(pcase (nth (1- pcomplete-index) pcomplete-args)
("run"
(nix--pcomplete-flags
(append nix-toplevel-options '("--arg" "--argstr" "-c" "--command"
"-f" "--file" "-i" "-I" "--include"
"-k" "--keep" "-u" "--unset"))))
("build"
(nix--pcomplete-flags
(append nix-toplevel-options '("--arg" "--argstr" "--dry-run"
"-f" "--file" "-I" "--include"
"--no-link" "-o" "--out-link"))))
("add-to-store"
(nix--pcomplete-flags
(append nix-toplevel-options '("--dry-run" "-n" "--name"))))
("copy"
(nix--pcomplete-flags
(append nix-toplevel-options '("--all" "--arg" "--argstr"
"-f" "--file" "--from"
"-I" "--include" "--no-check-sigs"
"--no-recursive" "-s" "--substitute"
"--to"))))
("copy-sigs"
(nix--pcomplete-flags
(append nix-toplevel-options '("--all" "--arg" "--argstr"
"-f" "--file" "-I" "--include"
"-r" "--recursive" "-s" "--substituter"))))
("dump-path"
(nix--pcomplete-flags
(append nix-toplevel-options '("--arg" "--argstr"
"-f" "--file" "-I" "--include"))))
("edit"
(nix--pcomplete-flags
(append nix-toplevel-options '("--arg" "--argstr"
"-f" "--file" "-I" "--include"))))
("eval"
(nix--pcomplete-flags
(append nix-toplevel-options '("--arg" "--argstr"
"-f" "--file" "-I" "--include"
"--json" "--raw"))))
("hash-file"
(nix--pcomplete-flags
(append nix-toplevel-options '("--base16" "--base32"
"--base64" "--type"))))
("hash-path"
(nix--pcomplete-flags
(append nix-toplevel-options '("--base16" "--base32"
"--base64" "--type"))))
("log"
(nix--pcomplete-flags
(append nix-toplevel-options '("--arg" "--argstr"
"-f" "--file" "-I" "--include"
"--json" "--raw"))))
("ls-nar"
(nix--pcomplete-flags
(append nix-toplevel-options '("-d" "--directory"
"--json" "-l" "--long"
"-R" "--recursive"))))
("ls-store"
(nix--pcomplete-flags
(append nix-toplevel-options '("-d" "--directory"
"--json" "-l" "--long"
"-R" "--recursive"))))
("repl"
(nix--pcomplete-flags
(append nix-toplevel-options '("--arg" "--argstr"
"-I" "--include"))))
("search"
(nix--pcomplete-flags
(append nix-toplevel-options '("--arg" "--argstr"
"-f" "--file"
"-I" "--include"
"--json" "--no-cache"
"-u" "--update-cache"))))
("show-config"
(nix--pcomplete-flags
(append nix-toplevel-options '("--json"))))
("show-derivation"
(nix--pcomplete-flags
(append nix-toplevel-options '("--arg" "--argstr"
"-f" "--file"
"-I" "--include"
"-r" "--recursive"))))
("sign-paths"
(nix--pcomplete-flags
(append nix-toplevel-options '("--all" "--arg" "--argstr"
"-f" "--file" "-I" "--include"
"-k" "--key-file" "-r" "--recursive"))))
("upgrade-nix"
(nix--pcomplete-flags
(append nix-toplevel-options '("-p" "--profile"))))
("verify"
(nix--pcomplete-flags
(append nix-toplevel-options '("--all" "--arg" "--argstr"
"-f" "--file" "-I" "--include"
"--no-contents" "--no-trust"
"-r" "--recursive" "-n" "--sigs-needed"
"-s" "--substuter"))))
("why-depends"
(nix--pcomplete-flags
(append nix-toplevel-options '("-a" "--all" "--arg" "--argstr"
"-f" "--file" "-I" "--include"))))
(_ (nix--pcomplete-flags nix-toplevel-options)))
(pcomplete-here (pcomplete-entries)))
(provide 'nix)
;;; nix.el ends here