Skip to content
A simple formatter for Nix using tree-sitter-nix.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.

README.md

format-nix

Build Status

A simple formatter for Nix using tree-sitter-nix.

Submit bugs by adding PRs for files that fail and adding the input to tests.

Installation

Please read this post to understand how to consume Node projects: https://github.com/justinwoo/my-blog-posts/blob/master/posts/2019-05-14-consuming-node-projects-for-nix-users.md

Development setup

Get PureScript and Pulp.

# never use 'sudo' with npm.
> npm set prefix ~/.npm
> npm install

# install purescript and psc-package in some way
# e.g. github.com/justinwoo/easy-purescript-nix
# or if you're feeling lucky, npm i -g purescript psc-package
> psc-package install

# install pulp in some way
> npm i -g pulp

> npm run mkbin
> npm link

# update requires mkbin run again
> npm run mkbin

Usage

> format-nix  test/build.nix
formatted test/build.nix.

See the example output from the tests here: test/output.nix

Example use from Emacs

Try putting this in your init.el or wherever:

(defun run-format-nix ()
  "run format-nix"
  (interactive)
  (let* ((command (format "cd %s && format-nix %s" (projectile-project-root) buffer-file-name))
         (results "*FORMAT-NIX STDOUT*")
         (errors "*FORMAT-NIX ERRORS*"))
    (shell-command command results errors)
    (if (get-buffer errors)
        (progn
          (with-current-buffer errors
            (message (string-trim (buffer-string))))
          (kill-buffer errors))
      (progn
        (with-current-buffer results
          (message (string-trim (buffer-string))))
        (kill-buffer results)
        ;; note this just reverts the buffer so save your files first.
        (revert-buffer t t t)))))

;; if you use evil mode, otherwise add your own bindings
(general-define-key
 :keymaps 'normal
 "SPC m p n" 'run-format-nix)
You can’t perform that action at this time.