tvl-depot/configs/shared/emacs/.emacs.d/elpa/nix-mode-20180822.214/nix.el
William Carroll 17ee0e400b Support Vim, Tmux, Emacs with Stow
After moving off of Meta, Dotfiles has a greater responsibility to
manage configs. Vim, Tmux, and Emacs are now within Stow's purview.
2018-09-10 14:53:23 -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