]> git.wincent.com - wincent.git/commitdiff
style: format JS, JSON, Markdown with Prettier
authorGreg Hurrell <greg@hurrell.net>
Fri, 21 Feb 2020 09:35:43 +0000 (10:35 +0100)
committerGreg Hurrell <greg@hurrell.net>
Fri, 21 Feb 2020 09:36:11 +0000 (10:36 +0100)
Note that `portool` needs to be listed explicitly because it doesn't
have a ".js" file extension.

.prettierignore [new file with mode: 0644]
.prettierrc
CHANGELOG.md
README.md
package.json [new file with mode: 0644]
roles/dotfiles/files/.zsh/liferay/bin/portool
roles/dotfiles/support/karabiner-test.js
roles/dotfiles/support/karabiner.js

diff --git a/.prettierignore b/.prettierignore
new file mode 100644 (file)
index 0000000..9f6a513
--- /dev/null
@@ -0,0 +1,2 @@
+/roles/dotfiles/files/.vim
+/vendor
index 3e9d085ced2e01eccf79351e2ea3b9a75862c821..79e9cd27547e01f5757a10a5274873085c63a5b6 100644 (file)
@@ -1,2 +1,3 @@
+bracketSpacing: false
 singleQuote: true
 trailingComma: all
index 1ae1482da25073cfb94fa65a651f9269650a5bb6..67e99c315bcd41a2591eddb272314f4a5fc79a25 100644 (file)
 
 ## 2019-10-13
 
-* [Vim]: Switched from [tpope/vim-markdown](https://github.com/tpope/vim-markdown) to [plasticboy/vim-markdown](https://github.com/plasticboy/vim-markdown); note that because this is replacing one submodule with another of the same name you may need to remove the old submodule directory with `rm` as well as removing the corresponding config in your local `.git/config` in order for the next `git submodule update --init` to succeed.
+- [Vim]: Switched from [tpope/vim-markdown](https://github.com/tpope/vim-markdown) to [plasticboy/vim-markdown](https://github.com/plasticboy/vim-markdown); note that because this is replacing one submodule with another of the same name you may need to remove the old submodule directory with `rm` as well as removing the corresponding config in your local `.git/config` in order for the next `git submodule update --init` to succeed.
 
 ## 2019-10-02
 
-* [Vim]: Add `:OpenOnGitHub` command.
+- [Vim]: Add `:OpenOnGitHub` command.
 
 ## 2019-09-27
 
-* [Vim]: Add `:Typecheck` command.
+- [Vim]: Add `:Typecheck` command.
 
 ## 2019-09-24
 
-* [Vim]: Add `:Lint` command.
+- [Vim]: Add `:Lint` command.
 
 ## 2019-09-19
 
-* [Zsh]: Make tabs visible in `git-diff` output.
+- [Zsh]: Make tabs visible in `git-diff` output.
 
 ## 2019-09-14
 
-* [Vim]: Implement "smart tab" functionality (ie. in projects that use tabs, use tabs for indentation and spacing for alignment).
+- [Vim]: Implement "smart tab" functionality (ie. in projects that use tabs, use tabs for indentation and spacing for alignment).
 
 ## 2019-09-14
 
-* [Zsh]: Add `git cp` alias for `git cherry-pick`.
+- [Zsh]: Add `git cp` alias for `git cherry-pick`.
 
 ## 2019-08-23
 
-* [Zsh]: Add `git wd` alias for `git diff --dirstat` (mnemonic: "[w]hat(changed) [d]irectory").
+- [Zsh]: Add `git wd` alias for `git diff --dirstat` (mnemonic: "[w]hat(changed) [d]irectory").
 
 ## 2019-08-22
 
-* [Vim]: Use floating preview window for LSP "hover" functionality.
+- [Vim]: Use floating preview window for LSP "hover" functionality.
 
 ## 2019-07-21
 
-* [Vim]: Switch from javascript-typescript-langserver to typescript-language-server.
+- [Vim]: Switch from javascript-typescript-langserver to typescript-language-server.
 
 ## 2019-06-26
 
-* [Zsh]: Add `git get` alias equivalent to a `git fresh` (see below) followed by a `git merge`.
+- [Zsh]: Add `git get` alias equivalent to a `git fresh` (see below) followed by a `git merge`.
 
 ## 2019-06-17
 
-* [Zsh]: Add `subtree` function (eg. `subtree '*.js'`, or `subtree '*.js|*.ts' src`).
+- [Zsh]: Add `subtree` function (eg. `subtree '*.js'`, or `subtree '*.js|*.ts' src`).
 
 ## 2019-06-07
 
-* [Vim]: Add `table` snippet for use in Markdown files.
+- [Vim]: Add `table` snippet for use in Markdown files.
 
 ## 2019-05-23
 
-* [Vim]: Moved plug-in submodules into "[~/.vim/pack/bundle/opt](https://github.com/wincent/wincent/tree/master/roles/dotfiles/files/.vim/pack/bundle/opt)"
+- [Vim]: Moved plug-in submodules into "[~/.vim/pack/bundle/opt](https://github.com/wincent/wincent/tree/master/roles/dotfiles/files/.vim/pack/bundle/opt)"
 
 ## 2019-04-26
 
-* [Zsh]: Add `git fresh` alias for `git remote update --prune`.
+- [Zsh]: Add `git fresh` alias for `git remote update --prune`.
 
 ## 2019-03-29
 
-* [Zsh]: Make Shift-Tab go to previous completion.
-* [Vim]: Force use of NERDTree instead of netrw when opening Vim with a directory argument.
+- [Zsh]: Make Shift-Tab go to previous completion.
+- [Vim]: Force use of NERDTree instead of netrw when opening Vim with a directory argument.
 
 ## 2019-03-27
 
-* [Vim]: Improve set-up for doing merge conflict resolution.
+- [Vim]: Improve set-up for doing merge conflict resolution.
 
 ## 2019-03-08
 
-* [Zsh]: Add `git wc` alias for `git whatchanged`.
+- [Zsh]: Add `git wc` alias for `git whatchanged`.
 
 ## 2019-02-27
 
-* [Zsh]: Add `git message` (shortcut: `git msg`) alias.
+- [Zsh]: Add `git message` (shortcut: `git msg`) alias.
 
 ## 2019-02-15
 
-* [Vim]: Make deoplete rank file-path matches above others.
+- [Vim]: Make deoplete rank file-path matches above others.
 
 ## 2019-02-14
 
-* [Vim]: `<S-Up>`, `<S-Down>` etc can be used to navigate with location list results.
+- [Vim]: `<S-Up>`, `<S-Down>` etc can be used to navigate with location list results.
 
 ## 2019-02-07
 
-* [Vim]: Apply tweaks for working in repos that use tabs instead of spaces.
+- [Vim]: Apply tweaks for working in repos that use tabs instead of spaces.
 
 ## 2019-01-25
 
-* [Vim]: Make improvements for working with TypeScript.
+- [Vim]: Make improvements for working with TypeScript.
 
 ## 2019-01-23
 
-* [Zsh]: Add `git ff` alias for doing fast-forward merges.
+- [Zsh]: Add `git ff` alias for doing fast-forward merges.
 
 ## 2019-01-10
 
-* [Vim]: Bind `<C-minus>` to `:NERDTreeFind`, to complement the existing `-` binding that does in-place directory navigation (vim-vinegar style).
+- [Vim]: Bind `<C-minus>` to `:NERDTreeFind`, to complement the existing `-` binding that does in-place directory navigation (vim-vinegar style).
 
 ## 2019-01-03
 
-* [Vim]: `J` and `K` visual mode mappings now take a count.
+- [Vim]: `J` and `K` visual mode mappings now take a count.
 
 ## 2018-12-24
 
-* [Zsh]: Running `color` without arguments refreshes the color scheme in the current window.
+- [Zsh]: Running `color` without arguments refreshes the color scheme in the current window.
 
 ## 2018-12-18
 
-* [Vim,Zsh]: Switched default color scheme to "default-dark".
+- [Vim,Zsh]: Switched default color scheme to "default-dark".
 
 ## 2018-11-25
 
-* [Zsh]: Overhaul prompt.
+- [Zsh]: Overhaul prompt.
 
 ## 2018-10-20
 
-* [Vim]: Set up [Goyo](https://github.com/junegunn/goyo.vim).
+- [Vim]: Set up [Goyo](https://github.com/junegunn/goyo.vim).
 
 ## 2018-03-21
 
-* Set up "fn" and "power" key equivalents on external keyboard.
+- Set up "fn" and "power" key equivalents on external keyboard.
 
 ## 2018-03-08
 
-* [Zsh]: Add `tw` and `tick` shell utilities.
+- [Zsh]: Add `tw` and `tick` shell utilities.
 
 ## 2018-03-06
 
-* [Vim]: Prevent `'spelllang'` setting from getting blown away in Markdown files.
+- [Vim]: Prevent `'spelllang'` setting from getting blown away in Markdown files.
 
 ## 2017-12-28
 
-* Make Caps Lock and Return repeat when held down.
-* Add back SpaceFN layer.
-* [Vim]: Add `<LocalLeader>p` mapping to print the highlight groups that apply at the current cursor position.
+- Make Caps Lock and Return repeat when held down.
+- Add back SpaceFN layer.
+- [Vim]: Add `<LocalLeader>p` mapping to print the highlight groups that apply at the current cursor position.
 
 ## 2017-12-22
 
-* [Vim]: Add "J"/"K" bindings to move visual selection up and down.
-* [Vim]: Add convenience `wincent#debug#log()` function for debugging purposes.
+- [Vim]: Add "J"/"K" bindings to move visual selection up and down.
+- [Vim]: Add convenience `wincent#debug#log()` function for debugging purposes.
 
 ## 2017-12-15
 
-* [Mutt]: Add "O" macro to save original message (mnemonic: "[O]riginal").
-* [Mutt]: Add "S" macro to save all attachments (mnemonic: "[S]ave").
+- [Mutt]: Add "O" macro to save original message (mnemonic: "[O]riginal").
+- [Mutt]: Add "S" macro to save all attachments (mnemonic: "[S]ave").
 
 ## 2017-12-06
 
-* Use iTerm dynamic profiles to change the font size when an external monitor is present.
+- Use iTerm dynamic profiles to change the font size when an external monitor is present.
 
 ## 2017-11-08
 
-* [Vim]: Dump YouCompleteMe.
+- [Vim]: Dump YouCompleteMe.
 
 ## 2017-11-01
 
-* [Mutt]: Mutt now uses different configs for work and personal machines.
+- [Mutt]: Mutt now uses different configs for work and personal machines.
 
 ## 2017-10-20
 
-* [Zsh]: Add `fzf`-powered functions for finding directories and history entries.
+- [Zsh]: Add `fzf`-powered functions for finding directories and history entries.
 
 ## 2017-06-16
 
-* Switch to Karabiner-Elements.
+- Switch to Karabiner-Elements.
 
 ## 2017-06-14
 
-* [Zsh]: Start using zsh-autosuggestions plug-in.
+- [Zsh]: Start using zsh-autosuggestions plug-in.
 
 ## 2017-06-06
 
-* [Vim]: Neovim is now the default `$EDITOR`.
+- [Vim]: Neovim is now the default `$EDITOR`.
 
 ## 2017-05-03
 
-* [Zsh]: Prompt now shows `$SHLVL` by repeating the `$` or `#` symbol.
-* [Zsh]: Prompt now indicates the presence of background jobs with a `*`.
-* [Vim]: Now turns off syntax highlighting in inactive splits.
+- [Zsh]: Prompt now shows `$SHLVL` by repeating the `$` or `#` symbol.
+- [Zsh]: Prompt now indicates the presence of background jobs with a `*`.
+- [Vim]: Now turns off syntax highlighting in inactive splits.
 
 ## 2017-02-09
 
-* [Vim]: Use `par` to re-wrap text.
+- [Vim]: Use `par` to re-wrap text.
 
 ## 2017-01-19
 
-* Get emoji working in the pager.
+- Get emoji working in the pager.
 
 ## 2016-12-24
 
-* [Mutt]: Use Markdown to send HTML email.
+- [Mutt]: Use Markdown to send HTML email.
 
 ## 2016-12-16
 
-* [Mutt]: Add retry with exponential backoff to mail sync script.
+- [Mutt]: Add retry with exponential backoff to mail sync script.
 
 ## 2016-12-14
 
-* Colorize man pages.
+- Colorize man pages.
 
 ## 2016-12-13
 
-* [Mutt]: Switched from `offlineimap` to `mbsync` (in the `isync` package) for mail synchronization.
+- [Mutt]: Switched from `offlineimap` to `mbsync` (in the `isync` package) for mail synchronization.
 
 ## 2016-12-12
 
-* [Mutt]: Added address autocompletion (via custom YouCompleteMe completer) inside Vim buffers of with filetype "mail".
+- [Mutt]: Added address autocompletion (via custom YouCompleteMe completer) inside Vim buffers of with filetype "mail".
 
 ## 2016-12-11
 
-* [Mutt]: Switched from `contacts` to `lbdb` for searching contacts.
+- [Mutt]: Switched from `contacts` to `lbdb` for searching contacts.
 
 ## 2016-12-07
 
-* [Mutt]: Switched from `w3m` to `elinks` for viewing links within emails.
+- [Mutt]: Switched from `w3m` to `elinks` for viewing links within emails.
 
 ## 2016-12-02
 
-* [Mutt]: Added `mutt` config.
+- [Mutt]: Added `mutt` config.
 
 ## 2016-11-30
 
-* [Vim]: Fine-tuned startup performance from 500ms down to 150ms.
+- [Vim]: Fine-tuned startup performance from 500ms down to 150ms.
 
 ## 2016-11-29
 
-* [Vim,Zsh]: Updated base16 dependencies, which means that the existing `dark`/`light` scheme names no longer apply. Instead of `dark tomorrow` (`color dark tomorrow`) or `light tomorrow` (`color light tomorrow`), run `color tomorrow-night` and `color tomorrow`. Note that some schemes [no longer have light variants](https://github.com/chriskempson/base16/issues/42) at all. `color` continues to show currently configured scheme information and `color help` shows a list of all available colors.
+- [Vim,Zsh]: Updated base16 dependencies, which means that the existing `dark`/`light` scheme names no longer apply. Instead of `dark tomorrow` (`color dark tomorrow`) or `light tomorrow` (`color light tomorrow`), run `color tomorrow-night` and `color tomorrow`. Note that some schemes [no longer have light variants](https://github.com/chriskempson/base16/issues/42) at all. `color` continues to show currently configured scheme information and `color help` shows a list of all available colors.
 
 ## 2016-11-28
 
-* Removed BSD license and replaced with public domain dedication.
+- Removed BSD license and replaced with public domain dedication.
 
 ## 2016-11-22
 
-* Replaced Karabiner configuration with custom Hammerspoon configuration, because Karabiner does not work on macOS Sierra.
-  * Features that survived translation:
-    * `<Capslock>` and `<Return>` retain their dual-purpose functionalities.
-    * `<Tab>` and `<C-i>` can still be mapped independently in the terminal.
-  * Features that have not yet been ported:
-    * "SpaceFN" layer.
-  * Features unlikely to be ported due to technical constraints:
-    * `<Shift>` control over Caps Lock state.
-  * Features that will not be ported because they can be solved by other means:
-    * Remapping of YubiKey to work with Colemak.
+- Replaced Karabiner configuration with custom Hammerspoon configuration, because Karabiner does not work on macOS Sierra.
+  - Features that survived translation:
+    - `<Capslock>` and `<Return>` retain their dual-purpose functionalities.
+    - `<Tab>` and `<C-i>` can still be mapped independently in the terminal.
+  - Features that have not yet been ported:
+    - "SpaceFN" layer.
+  - Features unlikely to be ported due to technical constraints:
+    - `<Shift>` control over Caps Lock state.
+  - Features that will not be ported because they can be solved by other means:
+    - Remapping of YubiKey to work with Colemak.
 
 ## 2016-11-14
 
-* [Vim]: Add "breakpoints" to statusline that reduce the amount of information displayed as window width decreases.
-* [Vim]: Extracted macro replay functionality into a separate plug-in, [Replay](https://github.com/wincent/replay).
+- [Vim]: Add "breakpoints" to statusline that reduce the amount of information displayed as window width decreases.
+- [Vim]: Extracted macro replay functionality into a separate plug-in, [Replay](https://github.com/wincent/replay).
 
 ## 2016-11-10
 
-* [tmux]: Adding `<Prefix>-b` binding to jump back to previous shell prompt.
+- [tmux]: Adding `<Prefix>-b` binding to jump back to previous shell prompt.
 
 ## 2016-10-12
 
-* [tmux]: Change color of active/inactive panes to make currently active pane more obvious.
+- [tmux]: Change color of active/inactive panes to make currently active pane more obvious.
 
 ## 2016-10-11
 
-* Manage most of the macOS preferences via the Ansible `osx_defaults` module, instead of custom Ansible `command` tasks.
+- Manage most of the macOS preferences via the Ansible `osx_defaults` module, instead of custom Ansible `command` tasks.
 
 ## 2016-10-07
 
-* [Zsh]: Make `C-z` run `fg` at the shell prompt.
+- [Zsh]: Make `C-z` run `fg` at the shell prompt.
 
 ## 2016-07-05
 
-* [Zsh]: Bounce Dock icon when a shell command finishes running and the terminal is in the background.
+- [Zsh]: Bounce Dock icon when a shell command finishes running and the terminal is in the background.
 
 ## 2016-06-03
 
-* Set up [Clipper](https://github.com/wincent/clipper) to work via UNIX domain sockets rather than TCP ports for better security.
+- Set up [Clipper](https://github.com/wincent/clipper) to work via UNIX domain sockets rather than TCP ports for better security.
 
 ## 2016-05-11
 
-* [Vim,Zsh]: Switched default color scheme to "tomorrow-dark" (later renamed to "tomorrow-night").
+- [Vim,Zsh]: Switched default color scheme to "tomorrow-dark" (later renamed to "tomorrow-night").
 
 ## 2016-05-09
 
-* [Vim]: Use `<Tab>` to toggle folds.
+- [Vim]: Use `<Tab>` to toggle folds.
 
 ## 2016-05-02
 
-* Work around lengthy hangs running Ansible on macOS.
+- Work around lengthy hangs running Ansible on macOS.
 
 ## 2016-04-29
 
-* [Vim]: Extracted within-file find-and-replace enhancements into a separate plug-in, [Scalpel](https://github.com/wincent/scalpel).
+- [Vim]: Extracted within-file find-and-replace enhancements into a separate plug-in, [Scalpel](https://github.com/wincent/scalpel).
 
 ## 2016-04-10
 
-* [Vim]: Use "Powerline" glyphs to make statusline a little prettier.
-* Switch to Adobe Source Code Pro font.
+- [Vim]: Use "Powerline" glyphs to make statusline a little prettier.
+- Switch to Adobe Source Code Pro font.
index 67d7a84030fddbfd9b6d40882918acb04428118b..78570b1901651ede4bc6d143233f21fd6b13aa11 100644 (file)
--- a/README.md
+++ b/README.md
@@ -2,12 +2,12 @@
 
 ![](https://raw.githubusercontent.com/wincent/wincent/media/screenshot.png)
 
-* Target platforms: macOS and Red Hat-like Linuxes (eg. CentOS).
-* Set-up method: ~~Beautiful and intricate snowflake~~ incredibly over-engineered [Ansible](https://www.ansible.com/) orchestration.
-* Visible in the screenshot:
-  * [default-dark Base16](http://chriskempson.com/projects/base16/) color scheme.
-  * [Adobe Source Code Pro](https://github.com/adobe-fonts/source-code-pro) (Light) font.
-  * Vim, running inside tmux, inside iTerm2, on macOS "High Sierra".
+- Target platforms: macOS and Red Hat-like Linuxes (eg. CentOS).
+- Set-up method: ~~Beautiful and intricate snowflake~~ incredibly over-engineered [Ansible](https://www.ansible.com/) orchestration.
+- Visible in the screenshot:
+  - [default-dark Base16](http://chriskempson.com/projects/base16/) color scheme.
+  - [Adobe Source Code Pro](https://github.com/adobe-fonts/source-code-pro) (Light) font.
+  - Vim, running inside tmux, inside iTerm2, on macOS "High Sierra".
 
 ## Features
 
 
 [A set of dotfiles](https://github.com/wincent/wincent/tree/master/roles/dotfiles/files) that I've been tweaking and twiddling since the early 2000s ([under version control](https://github.com/wincent/wincent/commit/61a7e2a830edb7) since 2009). Characteristics include:
 
-* Sane Vim pasting via bracketed paste mode.
-* Write access to local clipboard from local and remote hosts, inside and outside of tmux (via [Clipper](https://github.com/wincent/clipper)).
-* Full mouse support (pane/split resizing, scrolling, text selection) in Vim and tmux.
-* Focus/lost events for Vim inside tmux.
-* Cursor shape toggles on entering Vim.
-* Italics in the terminal.
-* Bundles a (not-excessive) number of [useful Vim plug-ins](https://github.com/wincent/wincent/tree/master/roles/dotfiles/files/.vim/pack).
-* Conservative Vim configuration (very few overrides of core functionality; most changes are unobtrusive enhancements; some additional functionality exposed via `<Leader>` and `<LocalLeader>` mappings.
-* Relatively restrained Zsh config, Bash-like but with a few Zsh perks, such as right-side prompt, auto-cd hooks, command elapsed time printing and such.
-* Unified color-handling (across iTerm2 and Vim) via [Base16 Shell](https://github.com/chriskempson/base16-shell).
-* Encrypted versioning of files with sensitive content (via [git-cipher](https://github.com/wincent/git-cipher)).
-* Comprehensive [Hammerspoon](http://www.hammerspoon.org/) [config](https://github.com/wincent/wincent/tree/master/roles/dotfiles/files/.hammerspoon).
+- Sane Vim pasting via bracketed paste mode.
+- Write access to local clipboard from local and remote hosts, inside and outside of tmux (via [Clipper](https://github.com/wincent/clipper)).
+- Full mouse support (pane/split resizing, scrolling, text selection) in Vim and tmux.
+- Focus/lost events for Vim inside tmux.
+- Cursor shape toggles on entering Vim.
+- Italics in the terminal.
+- Bundles a (not-excessive) number of [useful Vim plug-ins](https://github.com/wincent/wincent/tree/master/roles/dotfiles/files/.vim/pack).
+- Conservative Vim configuration (very few overrides of core functionality; most changes are unobtrusive enhancements; some additional functionality exposed via `<Leader>` and `<LocalLeader>` mappings.
+- Relatively restrained Zsh config, Bash-like but with a few Zsh perks, such as right-side prompt, auto-cd hooks, command elapsed time printing and such.
+- Unified color-handling (across iTerm2 and Vim) via [Base16 Shell](https://github.com/chriskempson/base16-shell).
+- Encrypted versioning of files with sensitive content (via [git-cipher](https://github.com/wincent/git-cipher)).
+- Comprehensive [Hammerspoon](http://www.hammerspoon.org/) [config](https://github.com/wincent/wincent/tree/master/roles/dotfiles/files/.hammerspoon).
 
 ### Homebrew
 
@@ -36,15 +36,15 @@ On macOS, [the `homebrew` role](https://github.com/wincent/wincent/tree/master/r
 
 On macOS, [Karabiner-Elements](https://github.com/tekezo/Karabiner-Elements/) is used for the following:
 
-* Make Caps Lock serve as Backspace (when tapped) and Left Control (when chorded with another key). When held down alone, Caps Lock fires repeated Backspace events.
-* Make Return serve as Return (when tapped) and Right Control (when chorded with another key). When held down alone, Return fires repeated Return events.
-* Maps Control-I to F6 (only in MacVim and the terminal) so that it can be mapped independently from Tab in Vim.
-* Toggle Caps Lock on by tapping both Shift keys simultaneously.
-* Makes the function keys on my external Realforce keyboard behave like the "media" keys on Apple's keyboards.
-* Swap Option and Command keys on my external Realforce keyboard.
-* Make the "application" key (extra modifier key on right-hand side) behave as "fn" on Realforce keyboard.
-* Make "pause" (at far-right of function key row) behave as "power" (effectively, sleep) on Realforce keyboard.
-* Adds a "SpaceFN" layer that can be activated by holding down Space while hitting other keys; I use this to make the cursor keys available on or near the home row in any app.
+- Make Caps Lock serve as Backspace (when tapped) and Left Control (when chorded with another key). When held down alone, Caps Lock fires repeated Backspace events.
+- Make Return serve as Return (when tapped) and Right Control (when chorded with another key). When held down alone, Return fires repeated Return events.
+- Maps Control-I to F6 (only in MacVim and the terminal) so that it can be mapped independently from Tab in Vim.
+- Toggle Caps Lock on by tapping both Shift keys simultaneously.
+- Makes the function keys on my external Realforce keyboard behave like the "media" keys on Apple's keyboards.
+- Swap Option and Command keys on my external Realforce keyboard.
+- Make the "application" key (extra modifier key on right-hand side) behave as "fn" on Realforce keyboard.
+- Make "pause" (at far-right of function key row) behave as "power" (effectively, sleep) on Realforce keyboard.
+- Adds a "SpaceFN" layer that can be activated by holding down Space while hitting other keys; I use this to make the cursor keys available on or near the home row in any app.
 
 ### Zsh
 
@@ -116,124 +116,124 @@ If there are background processes, a yellow asterisk is shown:
 
 A number of tools are used to provide command-line access to Gmail and Office IMAP accounts.
 
-* [mutt](http://www.mutt.org/): For reading email.
-* [isync](http://isync.sourceforge.net/): For maintaining a local cache of messages for offline access.
-* [notmuch](https://notmuchmail.org/): For fast search.
-* [msmtp](http://msmtp.sourceforge.net/): For sending email.
-* [elinks](http://elinks.or.cz/): For viewing HTML emails.
-* [urlview](https://packages.debian.org/sid/misc/urlview): For opening URLs from inside mutt.
-* [terminal-notifier](https://github.com/julienXX/terminal-notifier): For notifications.
-* [lbdb](https://www.spinnaker.de/lbdb/): Contact autocompletion drawing from a number of sources, such as previous messages, aliases, and macOS Contacts (which can be configured to synchronize Google contacts as well).
-* [imapfilter](https://github.com/lefcha/imapfilter/): For filtering.
-* [passage](https://github.com/wincent/passage): For mediating interaction with the macOS keychain.
+- [mutt](http://www.mutt.org/): For reading email.
+- [isync](http://isync.sourceforge.net/): For maintaining a local cache of messages for offline access.
+- [notmuch](https://notmuchmail.org/): For fast search.
+- [msmtp](http://msmtp.sourceforge.net/): For sending email.
+- [elinks](http://elinks.or.cz/): For viewing HTML emails.
+- [urlview](https://packages.debian.org/sid/misc/urlview): For opening URLs from inside mutt.
+- [terminal-notifier](https://github.com/julienXX/terminal-notifier): For notifications.
+- [lbdb](https://www.spinnaker.de/lbdb/): Contact autocompletion drawing from a number of sources, such as previous messages, aliases, and macOS Contacts (which can be configured to synchronize Google contacts as well).
+- [imapfilter](https://github.com/lefcha/imapfilter/): For filtering.
+- [passage](https://github.com/wincent/passage): For mediating interaction with the macOS keychain.
 
 In order for all this to work, a few items have to be stored in the macOS keychain:
 
-* A "generic" (A.K.A. "application") keychain items (that is, without protocols, only hostnames):
-  * "Keychain Item Name": example.net (corresponds to the "host" field in `~/.msmtprc`, and "Host" field in `~/.mbsyncrc`).
-  * "Account Name": username+mutt@example.net (corresponds to the "user" field in `~/.msmtprc`, and "PassCmd" field in `~/.mbsynrc`).
+- A "generic" (A.K.A. "application") keychain items (that is, without protocols, only hostnames):
+  - "Keychain Item Name": example.net (corresponds to the "host" field in `~/.msmtprc`, and "Host" field in `~/.mbsyncrc`).
+  - "Account Name": username+mutt@example.net (corresponds to the "user" field in `~/.msmtprc`, and "PassCmd" field in `~/.mbsynrc`).
 
 The following Gmail-like/Vim-like bindings are configured:
 
-* `e`: Archive (but note: leaves copy of mail in mailbox until next sync; force an immediate sync with `$`).
-* `#`: Trash mail.
-* `!`: Mark as spam.
-* `gi`: Go to inbox.
-* `ga`: Go to archive.
-* `gt`: Go to sent mail.
-* `gd`: Go to drafts.
-* `gs`: Go to starred mail.
-* `gl`: Go to a label (folder).
-* `x`: Toggle selection on entry (see also `t`).
-* `c`: Compose new message.
-* `s`: Toggle star.
-* `*a`: Select all.
-* `*n`: Deselect all (mnemonic: "select none").
-* `*r`: Select read messages.
-* `*u`: Select unread messages.
-* `Shift-U`: Mark as unread.
-* `Shift-I`: Mark as read.
+- `e`: Archive (but note: leaves copy of mail in mailbox until next sync; force an immediate sync with `$`).
+- `#`: Trash mail.
+- `!`: Mark as spam.
+- `gi`: Go to inbox.
+- `ga`: Go to archive.
+- `gt`: Go to sent mail.
+- `gd`: Go to drafts.
+- `gs`: Go to starred mail.
+- `gl`: Go to a label (folder).
+- `x`: Toggle selection on entry (see also `t`).
+- `c`: Compose new message.
+- `s`: Toggle star.
+- `*a`: Select all.
+- `*n`: Deselect all (mnemonic: "select none").
+- `*r`: Select read messages.
+- `*u`: Select unread messages.
+- `Shift-U`: Mark as unread.
+- `Shift-I`: Mark as read.
 
 Standard `mutt` stuff:
 
-* `v`: View attachments (including alternate parts for a multipart message).
+- `v`: View attachments (including alternate parts for a multipart message).
 
 Non-Gmail extensions:
 
-* `t`: Toggle selection on entire thread (see also `x`).
-* `A`: Show alternate MIME-type in MIME-multipart messages.
-* `O`: Save original message.
-* `S`: Search all using [Xapian query syntax](https://xapian.org/docs/queryparser.html) ([notmuch-specific reference documentation](https://notmuchmail.org/manpages/notmuch-search-terms-7/)):
-  * `+foo`: Must include "foo".
-  * `-bar`: Must not include "bar".
-  * `AND`, `OR`, `NOT`, `XOR`: Self-evident.
-  * `foo NEAR bar`: "foo" within 10 words of "bar" (order-independent).
-  * `foo ADJ bar`: Like `NEAR`, but "foo" must appear earlier than "bar".
-  * `"foo bar"`: Match entire phrase.
-  * `foo*`: Match "foo", "food", "foobar" etc.
-  * `subject:this`, `subject:"one two"` (two consecutive words), `subject:(one two)` (either or both words anywhere in subject), `subject:one AND subject:two` (both words anywhere in subject).
-  * `subject:/regex.*/` (but note, quotes are needed for patterns containing spaces; eg. `subject:"/a b/"`).
-  * `from:john`, `from:me@example.com`
-  * `to:john`, `to:me@example.com`
-  * `date:today`
-  * `date:yesterday`
-  * `date:3d` (exactly 3 days ago)
-  * `date:14d..7d` (a week ago)
-  * `date:10d..` (since 10 days ago)
-  * `date:..3d` (until 3 days ago)
-  * `date:"last week"` (preceding Monday through Sunday)
-  * `date:"this week"` or `date:this_week` or `date:this-week` (Monday to present day)
-  * `date:"last year"` (also works with `years`, `months`, `hours`/`hrs`, `minutes`/`mins`, `seconds`/`secs` etc).
-  * `date:june`
-  * `date:2018-06-01`
-  * `is:{tag}`: eg. `is:unread`, `is:flagged` (ie. starred); to see all tags, run `notmuch search --output=tags '*'`:
-    * `attachment`
-    * `flagged`
-    * `inbox` (not very meaningful as *everything* gets this tag when indexed via `notmuch new`)
-    * `replied`
-    * `signed`
-    * `unread`
-  * `id:messageId@example.net` (search by Message-Id).
-* `l`: Limit listed messages:
-  * `~f bob` (from bob)
-  * `~s foo` (subject contains "foo"; "Foo" would search case-sensitively)
-  * `~s foo.+bar` (subject contains pattern)
-  * `!~s foo` (subject does not contain "foo")
-  * `~d >1m` (messages more than 1 month old)
-* `\u`: Open list of URLs in message (via `urlview`).
-* `b`: Toggle (mailboxes) sidebar.
-* `m`: Move message(s).
+- `t`: Toggle selection on entire thread (see also `x`).
+- `A`: Show alternate MIME-type in MIME-multipart messages.
+- `O`: Save original message.
+- `S`: Search all using [Xapian query syntax](https://xapian.org/docs/queryparser.html) ([notmuch-specific reference documentation](https://notmuchmail.org/manpages/notmuch-search-terms-7/)):
+  - `+foo`: Must include "foo".
+  - `-bar`: Must not include "bar".
+  - `AND`, `OR`, `NOT`, `XOR`: Self-evident.
+  - `foo NEAR bar`: "foo" within 10 words of "bar" (order-independent).
+  - `foo ADJ bar`: Like `NEAR`, but "foo" must appear earlier than "bar".
+  - `"foo bar"`: Match entire phrase.
+  - `foo*`: Match "foo", "food", "foobar" etc.
+  - `subject:this`, `subject:"one two"` (two consecutive words), `subject:(one two)` (either or both words anywhere in subject), `subject:one AND subject:two` (both words anywhere in subject).
+  - `subject:/regex.*/` (but note, quotes are needed for patterns containing spaces; eg. `subject:"/a b/"`).
+  - `from:john`, `from:me@example.com`
+  - `to:john`, `to:me@example.com`
+  - `date:today`
+  - `date:yesterday`
+  - `date:3d` (exactly 3 days ago)
+  - `date:14d..7d` (a week ago)
+  - `date:10d..` (since 10 days ago)
+  - `date:..3d` (until 3 days ago)
+  - `date:"last week"` (preceding Monday through Sunday)
+  - `date:"this week"` or `date:this_week` or `date:this-week` (Monday to present day)
+  - `date:"last year"` (also works with `years`, `months`, `hours`/`hrs`, `minutes`/`mins`, `seconds`/`secs` etc).
+  - `date:june`
+  - `date:2018-06-01`
+  - `is:{tag}`: eg. `is:unread`, `is:flagged` (ie. starred); to see all tags, run `notmuch search --output=tags '*'`:
+    - `attachment`
+    - `flagged`
+    - `inbox` (not very meaningful as _everything_ gets this tag when indexed via `notmuch new`)
+    - `replied`
+    - `signed`
+    - `unread`
+  - `id:messageId@example.net` (search by Message-Id).
+- `l`: Limit listed messages:
+  - `~f bob` (from bob)
+  - `~s foo` (subject contains "foo"; "Foo" would search case-sensitively)
+  - `~s foo.+bar` (subject contains pattern)
+  - `!~s foo` (subject does not contain "foo")
+  - `~d >1m` (messages more than 1 month old)
+- `\u`: Open list of URLs in message (via `urlview`).
+- `b`: Toggle (mailboxes) sidebar.
+- `m`: Move message(s).
 
 Other stuff:
 
-* `<Tab>` autocompletes addresses from the lbdb database.
-* `<C-t>` autocompletes aliases.
+- `<Tab>` autocompletes addresses from the lbdb database.
+- `<C-t>` autocompletes aliases.
 
 Attachment menu bindings:
 
-* `S`: Save all attachments.
+- `S`: Save all attachments.
 
 To have `mailto` links open up in `mutt` in iTerm:
 
-1. In *iTerm2* → *Preferences* → *Profiles* → *General*, select the "Mutt" profile.
-2. Under *URL Schemes* → *Schemes handled:*, select `mailto`.
+1. In _iTerm2_ → _Preferences_ → _Profiles_ → _General_, select the "Mutt" profile.
+2. Under _URL Schemes_ → _Schemes handled:_, select `mailto`.
 
 Notes:
 
-* `$$URL$$` is documented [here](https://groups.google.com/d/msg/iterm2-discuss/TFPl1D_miIU/uDVV2ZZpYWQJ).
-* The convoluted use of `env` and `zsh` is required to get terminal colors working correctly.
+- `$$URL$$` is documented [here](https://groups.google.com/d/msg/iterm2-discuss/TFPl1D_miIU/uDVV2ZZpYWQJ).
+- The convoluted use of `env` and `zsh` is required to get terminal colors working correctly.
 
 ## Dependencies
 
-* [tmux](http://tmux.sourceforge.net/) 2.3 or later.
-* [Neovim](https://neovim.io) or [Vim](http://www.vim.org/) 8.0 or later with Ruby and Python support (although there's a reasonable amount of feature detection in order to degrade gracefully).
-* Relatively recent [Zsh](http://www.zsh.org/).
-* Relatively recent [Git](http://git-scm.com/).
-* [Clipper](https://wincent.com/products/clipper) for transparent access to the local system clipboard.
-* On macOS, [iTerm2](http://www.iterm2.com/). Additionally, only the latest version of macOS (although at the time of writing, I'm still on High Sierra) gets actively tested.
-* [Python](https://www.python.org/) to perform setup via the included `install` command.
-* [Ruby](https://www.ruby-lang.org/).
-* [Adobe Source Code Pro](https://github.com/adobe-fonts/source-code-pro) or any other fixed-width font that includes the [Powerline glyphs](http://powerline.readthedocs.io/en/master/installation.html#fonts-installation).
+- [tmux](http://tmux.sourceforge.net/) 2.3 or later.
+- [Neovim](https://neovim.io) or [Vim](http://www.vim.org/) 8.0 or later with Ruby and Python support (although there's a reasonable amount of feature detection in order to degrade gracefully).
+- Relatively recent [Zsh](http://www.zsh.org/).
+- Relatively recent [Git](http://git-scm.com/).
+- [Clipper](https://wincent.com/products/clipper) for transparent access to the local system clipboard.
+- On macOS, [iTerm2](http://www.iterm2.com/). Additionally, only the latest version of macOS (although at the time of writing, I'm still on High Sierra) gets actively tested.
+- [Python](https://www.python.org/) to perform setup via the included `install` command.
+- [Ruby](https://www.ruby-lang.org/).
+- [Adobe Source Code Pro](https://github.com/adobe-fonts/source-code-pro) or any other fixed-width font that includes the [Powerline glyphs](http://powerline.readthedocs.io/en/master/installation.html#fonts-installation).
 
 ## Installation
 
diff --git a/package.json b/package.json
new file mode 100644 (file)
index 0000000..2c78055
--- /dev/null
@@ -0,0 +1,14 @@
+{
+  "name": "wincent",
+  "description": "\"dotfiles\" and system configuration",
+  "version": "0.0.1",
+  "main": "/dev/null",
+  "private": true,
+  "repository": "git@git.wincent.com:/pub/git/public/wincent.git",
+  "author": "Greg Hurrell <greg@hurrell.net>",
+  "license": "Public Domain",
+  "scripts": {
+    "format:check": "npx prettier --check \"**/*.js\" \"*.json\" \"*.md\" roles/dotfiles/files/.zsh/liferay/bin/portool",
+    "format": "npx prettier --write \"**/*.js\" \"*.json\" \"*.md\" roles/dotfiles/files/.zsh/liferay/bin/portool"
+  }
+}
index 2aef6ccccb8aee4338bc52536c51231cf0deee26..e53540b1a043ebd7efbd5a20fac6e61c9f774a44 100755 (executable)
@@ -23,18 +23,20 @@ function die(...messages) {
 async function confirm(prompt) {
   const readline = createInterface({
     input: process.stdin,
-    output: process.stdout
+    output: process.stdout,
   });
 
   return new Promise(resolve => {
     readline.question(`${prompt} [y/n] `, resolve);
 
     readline.write('y');
-  }).then(result => {
-    return /^\s*y(es?)?\s*$/i.test(result);
-  }).finally(() => {
-    readline.close();
-  });
+  })
+    .then(result => {
+      return /^\s*y(es?)?\s*$/i.test(result);
+    })
+    .finally(() => {
+      readline.close();
+    });
 }
 
 // The lowest signal number (via `man 3 signal`).
@@ -59,7 +61,7 @@ function run(command, ...args) {
       }
     });
 
-    child.on('exit', (code) => {
+    child.on('exit', code => {
       if (!resolved) {
         resolved = true;
         if (code) {
@@ -70,9 +72,7 @@ function run(command, ...args) {
               `${description} exited due to signal ${code - 128}`,
             );
           } else {
-            err = new Error(
-              `${description} exited with status ${code}`,
-            );
+            err = new Error(`${description} exited with status ${code}`);
           }
           reject(err);
         } else {
@@ -97,12 +97,12 @@ async function getHelper(command) {
     } catch (error) {
       if (error.code === 'ENOENT') {
         // Check for a possible match.
-        const candidates = fs.readdirSync(dir).filter(
-          entry => /^[a-z]/.test(entry)
-        );
+        const candidates = fs
+          .readdirSync(dir)
+          .filter(entry => /^[a-z]/.test(entry));
 
-        const prefixMatches = candidates.filter(
-          entry => entry.startsWith(command)
+        const prefixMatches = candidates.filter(entry =>
+          entry.startsWith(command),
         );
 
         if (prefixMatches.length === 1) {
@@ -111,15 +111,20 @@ async function getHelper(command) {
         } else if (prefixMatches.length > 1) {
           // Multiple possible prefix matches.
           log(
-            `Ambiguous command ${JSON.stringify(command)} - did you mean one of?\n` +
-            '\n' +
-            prefixMatches.map(prefix => `  ${prefix}`).join('\n') +
-            '\n'
+            `Ambiguous command ${JSON.stringify(
+              command,
+            )} - did you mean one of?\n` +
+              '\n' +
+              prefixMatches.map(prefix => `  ${prefix}`).join('\n') +
+              '\n',
           );
         } else {
           // Prompt for confirmation of best fuzzy match guess.
           const fuzzyMatches = candidates
-            .map(candidate => ({candidate, score: jaroWinkler(candidate, command)}))
+            .map(candidate => ({
+              candidate,
+              score: jaroWinkler(candidate, command),
+            }))
             .filter(({score}) => score)
             .sort((a, b) => {
               if (a.score < b.score) {
@@ -136,11 +141,15 @@ async function getHelper(command) {
 
           if (proposed) {
             log(
-              `Command ${JSON.stringify(command)} invoked, which does not exist.\n`
+              `Command ${JSON.stringify(
+                command,
+              )} invoked, which does not exist.\n`,
             );
 
             const proceed = await confirm(
-              `Do you want to run ${JSON.stringify(proposed.candidate)} instead?`
+              `Do you want to run ${JSON.stringify(
+                proposed.candidate,
+              )} instead?`,
             );
 
             if (proceed) {
@@ -200,13 +209,13 @@ function jaroWinkler(a, b) {
 
   let m = 0;
 
-  const range = (Math.floor(Math.max(s1.length, s2.length) / 2)) - 1;
+  const range = Math.floor(Math.max(s1.length, s2.length) / 2) - 1;
   const s1Matches = new Array(s1.length);
   const s2Matches = new Array(s2.length);
 
   for (let i = 0; i < s1.length; i++) {
-    const low  = (i >= range) ? i - range : 0;
-    const high = (i + range <= (s2.length - 1)) ? (i + range) : (s2.length - 1);
+    const low = i >= range ? i - range : 0;
+    const high = i + range <= s2.length - 1 ? i + range : s2.length - 1;
 
     for (let j = low; j <= high; j++) {
       if (s1Matches[i] !== true && s2Matches[j] !== true && s1[i] === s2[j]) {
@@ -246,7 +255,7 @@ function jaroWinkler(a, b) {
   }
 
   // "sim" is the Jaro similarity ("sim[j]").
-  let sim = (m / s1.length + m / s2.length + (m - (transpositions / 2)) / m) / 3;
+  let sim = (m / s1.length + m / s2.length + (m - transpositions / 2) / m) / 3;
 
   // Apply prefix scaling to obtain Jaro-Winkler similarity ("sim[w]").
 
@@ -282,10 +291,9 @@ async function main(_node, _script, command, ...args) {
   await run(helper, ...args);
 }
 
-main(...process.argv)
-  .catch(err => {
-    error(err);
-    process.exit(1);
-  });
+main(...process.argv).catch(err => {
+  error(err);
+  process.exit(1);
+});
 
 // vim: ft=javascript
index a5652487dd0634a5b452635561211454ada8f670..64ff529dec4addf81597c266e342bed47f4e8696 100755 (executable)
@@ -7,12 +7,8 @@
  * like my code to have Zarro Boogs.
  */
 
-/*
- * Format with: prettier --write karabiner.js
- */
-
 const assert = require('assert');
-const { bundleIdentifier, deepCopy, isObject, visit } = require('./karabiner');
+const {bundleIdentifier, deepCopy, isObject, visit} = require('./karabiner');
 
 (function test_bundleIdentifier() {
   (function $() {
@@ -109,11 +105,11 @@ const { bundleIdentifier, deepCopy, isObject, visit } = require('./karabiner');
     foo: 1,
     bar: [
       {
-        a: [{}, { deep: { prop: 3 } }],
+        a: [{}, {deep: {prop: 3}}],
       },
       {
         a: [],
-        b: [{ deep: { prop: 10 } }],
+        b: [{deep: {prop: 10}}],
       },
     ],
   });
index 8ed7b405695b46445a1e5f3d3745a6e7391af3e7..f0eb859755471b5da55ded4b93c4fd3c6f8b9aa8 100755 (executable)
@@ -1,9 +1,5 @@
 #!/usr/bin/env node
 
-/*
- * Format with: npx prettier --write karabiner.js
- */
-
 function fromTo(from, to) {
   return [
     {
@@ -216,7 +212,7 @@ function visit(item, path, updater) {
     /^(?<root>\$)|\.(?<child>\w+)|\[(?<slice>.+?)\]|(?<done>$)/,
   );
   const {
-    groups: { root, child, slice },
+    groups: {root, child, slice},
   } = match;
   const subpath = path.slice(match[0].length);
   if (root) {
@@ -231,7 +227,7 @@ function visit(item, path, updater) {
     }
   } else if (slice) {
     const {
-      groups: { start, end },
+      groups: {start, end},
     } = slice.match(/^(?<start>\d+):(?<end>\d+)?$/);
     let array;
     for (let i = start, max = end == null ? item.length : end; i < max; i++) {