Tangling was a mistake

Unless I want to redo everything, and always tangle files (tempting).
This commit is contained in:
Howard Abrams 2023-07-05 13:20:55 -07:00
parent 5c887b7bd6
commit b8f8f2421f
27 changed files with 56 additions and 30 deletions

View file

@ -248,6 +248,23 @@ With this function, we can test/debug/reload any individual file, via:
(org-babel-load-file full-file))))) (org-babel-load-file full-file)))))
#+end_src #+end_src
And this similar function, will /tangle/ one of my files. Notice that in order to increase the speed of the tangling process (and not wanting to pollute a project perspective), I use a /temporary buffer/ instead of =find-file=.
#+begin_src emacs-lisp
(defun ha-hamacs-tangle (file)
"Tangle an org-mode FILE containing literate Emacs configuration code."
(interactive (list (completing-read "Org file: " (ha-hamacs-files :all))))
(let ((full-file (f-join hamacs-source-dir file))
(target (file-name-concat "~/emacs.d/elisp"
(concat (file-name-sans-extension file) ".el"))))
(when (f-exists? full-file)
(ignore-errors
(with-temp-buffer
(insert-file-contents full-file)
(with-current-buffer (concat temporary-file-directory file)
(org-babel-tangle nil target (rx "emacs-lisp"))))))))
#+end_src
And we can now reload /all/ startup files: And we can now reload /all/ startup files:
#+begin_src emacs-lisp #+begin_src emacs-lisp
(defun ha-hamacs-reload-all () (defun ha-hamacs-reload-all ()
@ -258,6 +275,16 @@ And we can now reload /all/ startup files:
(ha-hamacs-load file)))) (ha-hamacs-load file))))
#+end_src #+end_src
And we can tangle /all/ the files:
#+begin_src emacs-lisp
(defun ha-hamacs-tangle-all ()
"Tangle all my Org initialization/configuration files."
(interactive)
(dolist (file (ha-hamacs-files))
(unless (equal file "bootstrap.org")
(ha-hamacs-tangle file))))
#+end_src
And do it: And do it:
#+begin_src emacs-lisp #+begin_src emacs-lisp
(ha-hamacs-reload-all) (ha-hamacs-reload-all)
@ -275,7 +302,7 @@ Before you can build this on a new system, make sure that you put the cursor ove
#+DESCRIPTION: A literate programming file for bootstrapping my environment. #+DESCRIPTION: A literate programming file for bootstrapping my environment.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/bootstrap.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -163,7 +163,7 @@ Before you can build this on a new system, make sure that you put the cursor ove
#+DESCRIPTION: A literate programming configuration for fancy agenda and todo lists. #+DESCRIPTION: A literate programming configuration for fancy agenda and todo lists.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-agendas.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -175,7 +175,7 @@ Let's =provide= a name so we can =require= this file:
#+DESCRIPTION: A literate programming file for helper apps in Emacs. #+DESCRIPTION: A literate programming file for helper apps in Emacs.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-aux-apps.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -698,7 +698,7 @@ Before you can build this on a new system, make sure that you put the cursor ove
#+DESCRIPTION: A literate programming file for configuring org for capturing notes. #+DESCRIPTION: A literate programming file for configuring org for capturing notes.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-capturing-notes.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -533,10 +533,9 @@ I'm not trying an experiment where specially-placed function keys on my fancy er
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package general (use-package general
:custom
(general-use-package-emit-autoloads t)
:config :config
(setq general-use-package-emit-autoloads t)
(general-evil-setup t) (general-evil-setup t)
(general-create-definer ha-leader (general-create-definer ha-leader
@ -2539,7 +2538,7 @@ Before you can build this on a new system, make sure that you put the cursor ove
#+DESCRIPTION: A literate programming file for configuring Emacs. #+DESCRIPTION: A literate programming file for configuring Emacs.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-config.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no #+PROPERTY: header-args :results none :eval no-export :comments no
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -227,7 +227,7 @@ Let's =provide= a name so we can =require= this file:
#+DESCRIPTION: configuring Emacs to show a startup screen. #+DESCRIPTION: configuring Emacs to show a startup screen.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-dashboard.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -242,7 +242,7 @@ Let's =provide= a name so we can =require= this file:
#+DESCRIPTION: configuring Emacs to edit files of data. #+DESCRIPTION: configuring Emacs to edit files of data.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-data.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -406,7 +406,7 @@ Before you can build this on a new system, make sure that you put the cursor ove
#+DESCRIPTION: A literate programming file to configure the Emacs UI. #+DESCRIPTION: A literate programming file to configure the Emacs UI.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-display.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no :mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no :mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -739,7 +739,7 @@ Let's =provide= a name so we can =require= this file:
#+DESCRIPTION: A literate configuration file for email using Notmuch. #+DESCRIPTION: A literate configuration file for email using Notmuch.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-email.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -1564,7 +1564,7 @@ Let's =provide= a name so we can =require= this file:
#+DESCRIPTION: Emacs configuration for the Emacs Shell. #+DESCRIPTION: Emacs configuration for the Emacs Shell.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-eshell.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -253,7 +253,7 @@ Let's /provide/ a name so we can =require= the file:
#+DESCRIPTION: A literate programming file for configuring elfeed. #+DESCRIPTION: A literate programming file for configuring elfeed.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-feed-reader.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no #+PROPERTY: header-args :results none :eval no-export :comments no
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -143,7 +143,7 @@ This will =provide= a code name, so that we can =require= this.
#+DESCRIPTION: A literate programming configuration file for IRC. #+DESCRIPTION: A literate programming configuration file for IRC.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-irc.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -258,7 +258,7 @@ Let's provide a name so we can =require= this file:
#+DESCRIPTION: A literate programming version of functions for formatting the clipboard. #+DESCRIPTION: A literate programming version of functions for formatting the clipboard.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-org-clipboard.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -195,7 +195,7 @@ Before you can build this on a new system, make sure that you put the cursor ove
#+DESCRIPTION: A literate programming configuration file for extending the Journaling capabilities. #+DESCRIPTION: A literate programming configuration file for extending the Journaling capabilities.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-org-journaling.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -193,7 +193,7 @@ Before you can build this on a new system, make sure that you put the cursor ove
#+DESCRIPTION: A literate programming version for publishing my website using org. #+DESCRIPTION: A literate programming version for publishing my website using org.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-org-publishing.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -438,7 +438,7 @@ Before you can build this on a new system, make sure that you put the cursor ove
#+DESCRIPTION: A literate programming file for making Org file more readable. #+DESCRIPTION: A literate programming file for making Org file more readable.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-org-word-processor.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no #+PROPERTY: header-args :results none :eval no-export :comments no
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -1100,7 +1100,7 @@ Before you can build this on a new system, make sure that you put the cursor ove
#+DESCRIPTION: A literate programming file for configuring org-mode and those files. #+DESCRIPTION: A literate programming file for configuring org-mode and those files.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-org.el :noweb yes #+PROPERTY: header-args:emacs-lisp :tangle yes :noweb yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -97,7 +97,7 @@ This will =provide= a code name, so that we can =require= this.
#+DESCRIPTION: A literate programming version for Emacs code to generate and store passwords. #+DESCRIPTION: A literate programming version for Emacs code to generate and store passwords.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-passwords.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -279,7 +279,7 @@ Let's =provide= a name so we can =require= this file:
#+DESCRIPTION: programming in Clojure. #+DESCRIPTION: programming in Clojure.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-programming-clojure.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -292,7 +292,7 @@ Let's =provide= a name so we can =require= this file:
#+DESCRIPTION: configuring Emacs for Lisp programming. #+DESCRIPTION: configuring Emacs for Lisp programming.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-programming-elisp.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -86,7 +86,7 @@ Let's =provide= a name so we can =require= this file:
#+DESCRIPTION: configuring Emacs. #+DESCRIPTION: configuring Emacs.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-programming-haskell.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -99,7 +99,7 @@ Let's =provide= a name so we can =require= this file:
#+DESCRIPTION: integrating OCaml #+DESCRIPTION: integrating OCaml
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-programming-ocaml.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -313,7 +313,7 @@ Let's =provide= a name so we can =require= this file:
#+DESCRIPTION: A literate programming file for configuring Python. #+DESCRIPTION: A literate programming file for configuring Python.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-programming-python.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -316,7 +316,7 @@ Let's =provide= a name so we can =require= this file:
#+DESCRIPTION: configuring Emacs to support the Ruby programming language. #+DESCRIPTION: configuring Emacs to support the Ruby programming language.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-programming-ruby.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -114,7 +114,7 @@ Let's =provide= a name so we can =require= this file:
#+DESCRIPTION: Emacs configuration for the Rust programming language. #+DESCRIPTION: Emacs configuration for the Rust programming language.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-programming-rust.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -181,7 +181,7 @@ Let's =provide= a name so we can =require= this file:
#+DESCRIPTION: A literate programming file configuring Emacs. #+DESCRIPTION: A literate programming file configuring Emacs.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-programming-scheme.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil

View file

@ -535,7 +535,7 @@ Before you can build this on a new system, make sure that you put the cursor ove
#+DESCRIPTION: A literate configuration for accessing remote systems. #+DESCRIPTION: A literate configuration for accessing remote systems.
#+PROPERTY: header-args:sh :tangle no #+PROPERTY: header-args:sh :tangle no
#+PROPERTY: header-args:emacs-lisp :tangle ~/.emacs.d/elisp/ha-remoting.el #+PROPERTY: header-args:emacs-lisp :tangle yes
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes #+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil