       (switch-to-buffer-other-frame server-buf))))
 (add-hook 'server-done-hook 'delete-frame)
 (add-hook 'server-done-hook (lambda nil (kill-buffer nil)))
+;; auto revert a file if modified outside emacs
+(global-auto-revert-mode t)
+;; make files that start with a shebang executable
+(add-hook 'after-save-hook
+  'executable-make-buffer-file-executable-if-script-p)
 
 ;;; improve some of the standard keybindings ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 

  :diminish global-whitespace-mode
  :config   (global-whitespace-mode)
  :custom   (whitespace-style '(face lines-tail))
  :hook     ((prog-mode .    (lambda () (setq show-trailing-whitespace 1)))
              (c-mode .      (lambda () (setq whitespace-line-column 80)))
              (c++-mode .    (lambda () (setq whitespace-line-column 80)))
              (elixir-mode . (lambda () (setq whitespace-line-column 80)))
              (java-mode .   (lambda () (setq whitespace-line-column 100)))
              (python-mode . (lambda () (setq whitespace-line-column 79)))
              (rust-mode .   (lambda () (setq whitespace-line-column 99)))))

(use-package windmove
  :config (windmove-default-keybindings)

;;; ui stuff ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; theme
(load-theme 'indoors t)
;; show column numbers, but no row numbers
(column-number-mode 1)
(line-number-mode 0)
;; make "yes/no" questions respond to "y/n"
(defalias 'yes-or-no-p 'y-or-n-p)
;; hide splash screen, menu bar, tool bar, scroll bar
(setq inhibit-splash-screen t)
(if (fboundp 'menu-bar-mode) (menu-bar-mode -1))
(if (fboundp 'tool-bar-mode) (tool-bar-mode -1))
(if (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
;; make scratch buffer start up empty
(setq initial-scratch-message "")
;; create a new frame for every emacsclient, and clean them up on disconnect
;; https://www.emacswiki.org/emacs/EmacsClient#toc14
(add-hook 'server-switch-hook
