diff options
author | William Carroll <wpcarro@gmail.com> | 2019-10-09T11·13+0100 |
---|---|---|
committer | William Carroll <wpcarro@gmail.com> | 2019-12-24T15·21+0000 |
commit | 6b456c1b7a4f6899f063a6e65355af51901d9c7a (patch) | |
tree | cfc70d74818ae9fabdbbfb0cf16cce092e4c1a09 /configs/shared/emacs | |
parent | a7c72adb2ebec1e497fc040eaf3551d564d61a5b (diff) |
Massive configuration overhaul
Currently paying the price of months of non-diligent git usage. Here's what has changed. - Theming support in Gvcci and wpgtk - Dropping support for i3 - Supporting EXWM - Many Elisp modules - Collapsed redundant directories in ./configs
Diffstat (limited to 'configs/shared/emacs')
67 files changed, 0 insertions, 3264 deletions
diff --git a/configs/shared/emacs/.emacs.d/init.el b/configs/shared/emacs/.emacs.d/init.el deleted file mode 100644 index a674ddc19a07..000000000000 --- a/configs/shared/emacs/.emacs.d/init.el +++ /dev/null @@ -1,26 +0,0 @@ -(require 'wpc-package "~/.emacs.d/wpc/packages/wpc-package.el") - -;; load order is intentional -(require 'variables) -(require 'wpc-misc) - -;; my libraries -(require 'functions) -(require 'string-functions) -(require 'macros) -(require 'casing) - -(require 'wpc-ui) -(require 'wpc-keybindings) -(require 'wpc-dired) -(require 'wpc-terminal) -(require 'wpc-org) -(require 'wpc-company) -(require 'wpc-flycheck) -(require 'wpc-docker) -(require 'wpc-lisp) -(require 'wpc-haskell) -(require 'wpc-elixir) -(require 'wpc-nix) -(require 'wpc-clojure) -(require 'wpc-javascript) diff --git a/configs/shared/emacs/.emacs.d/snippets/c-mode/stdio b/configs/shared/emacs/.emacs.d/snippets/c-mode/stdio deleted file mode 100644 index 52bc717e470e..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/c-mode/stdio +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: <stdio.h> -# key: sio -# -- -#include <stdio.h> \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/c-mode/stdlib b/configs/shared/emacs/.emacs.d/snippets/c-mode/stdlib deleted file mode 100644 index 5d44e8ed7989..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/c-mode/stdlib +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: <stdlib.h> -# key: slb -# -- -#include <stdlib.h> \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/c-mode/struct b/configs/shared/emacs/.emacs.d/snippets/c-mode/struct deleted file mode 100644 index 6e9282f83c79..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/c-mode/struct +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: struct -# key: struct -# -- -typedef struct $1 { - $2 -} $1_t; \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/emacs-lisp-mode/elisp-module-docs b/configs/shared/emacs/.emacs.d/snippets/emacs-lisp-mode/elisp-module-docs deleted file mode 100644 index 8ea7b8f07724..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/emacs-lisp-mode/elisp-module-docs +++ /dev/null @@ -1,11 +0,0 @@ -# -*- mode: snippet -*- -# name: Elisp module docs -# key: emd -# -- -;;; `(-> (buffer-file-name) f-filename)` --- $2 -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; $3 - -;;; Code: \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/emacs-lisp-mode/provide-footer b/configs/shared/emacs/.emacs.d/snippets/emacs-lisp-mode/provide-footer deleted file mode 100644 index 2a0bcc33f7bb..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/emacs-lisp-mode/provide-footer +++ /dev/null @@ -1,6 +0,0 @@ -# -*- mode: snippet -*- -# name: Provide footer -# key: elf -# -- -(provide '`(-> (buffer-file-name) f-filename f-no-ext)`) -;;; `(-> (buffer-file-name) f-filename)` ends here \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/haskell-mode/derive-safe-copy b/configs/shared/emacs/.emacs.d/snippets/haskell-mode/derive-safe-copy deleted file mode 100644 index 95f7d9deecd0..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/haskell-mode/derive-safe-copy +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: Derive Safe Copy -# key: dsc -# -- -deriveSafeCopy 0 'base ''$1 \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/haskell-mode/import-qualified b/configs/shared/emacs/.emacs.d/snippets/haskell-mode/import-qualified deleted file mode 100644 index 4c4db62a8a47..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/haskell-mode/import-qualified +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: Import qualified -# key: iq -# -- -import qualified $1 as $2 \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/haskell-mode/instance-defn b/configs/shared/emacs/.emacs.d/snippets/haskell-mode/instance-defn deleted file mode 100644 index 10d194ce41f0..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/haskell-mode/instance-defn +++ /dev/null @@ -1,6 +0,0 @@ -# -*- mode: snippet -*- -# name: Instance -# key: inst -# -- -instance $1 where - $2 = $3 \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/haskell-mode/language-extension b/configs/shared/emacs/.emacs.d/snippets/haskell-mode/language-extension deleted file mode 100644 index 9d6084acb40d..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/haskell-mode/language-extension +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: language extension -# key: lang -# -- -{-# LANGUAGE $1 #-} \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/haskell-mode/separator b/configs/shared/emacs/.emacs.d/snippets/haskell-mode/separator deleted file mode 100644 index 1ab0d762b611..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/haskell-mode/separator +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: Separator -# key: - -# -- --------------------------------------------------------------------------------- \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/haskell-mode/undefined b/configs/shared/emacs/.emacs.d/snippets/haskell-mode/undefined deleted file mode 100644 index 7609f801f278..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/haskell-mode/undefined +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: Undefiend -# key: nd -# -- -undefined \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/html-mode/index-boilerplate b/configs/shared/emacs/.emacs.d/snippets/html-mode/index-boilerplate deleted file mode 100644 index 3cea6ce003ba..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/html-mode/index-boilerplate +++ /dev/null @@ -1,18 +0,0 @@ -# -*- mode: snippet -*- -# name: HTML index.html starter -# key: html -# -- -<!doctype html> - -<html lang="en"> -<head> - <meta charset="utf-8"> - <title>$1</title> - <meta name="description" content="$2"> - <meta name="author" content="William Carroll"> - <link rel="stylesheet" href="index.css"> -</head> -<body> - <script src="index.js"></script> -</body> -</html> \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/java-mode/public-static-void-main b/configs/shared/emacs/.emacs.d/snippets/java-mode/public-static-void-main deleted file mode 100644 index 1839a27eb5c0..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/java-mode/public-static-void-main +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: public static void main -# key: psvm -# -- -public static void main(String[] args) { - $1 -} \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/nix-mode/shell-nix b/configs/shared/emacs/.emacs.d/snippets/nix-mode/shell-nix deleted file mode 100644 index 4c308bb51b3a..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/nix-mode/shell-nix +++ /dev/null @@ -1,12 +0,0 @@ -# -*- mode: snippet -*- -# name: shell.nix boilerplate -# key: import -# -- -with import <nixpkgs> {}; - -stdenv.mkDerivation { - name = "$1"; - buildInputs = [ - $2 - ]; -} \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/org-mode/code-snippet b/configs/shared/emacs/.emacs.d/snippets/org-mode/code-snippet deleted file mode 100644 index 4215b15992b6..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/org-mode/code-snippet +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: Code Snippet -# key: src -# -- -#+BEGIN_SRC $1 -$2 -#+END_SRC \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/org-mode/href b/configs/shared/emacs/.emacs.d/snippets/org-mode/href deleted file mode 100644 index ac65ea2e49be..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/org-mode/href +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: Org mode URL -# key: href -# -- -[[$1][$2]] \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/python-mode/dunder-main b/configs/shared/emacs/.emacs.d/snippets/python-mode/dunder-main deleted file mode 100644 index 4dd22dc0b2da..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/python-mode/dunder-main +++ /dev/null @@ -1,6 +0,0 @@ -# -*- mode: snippet -*- -# name: Dunder main (__main__) -# key: mn -# -- -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/python-mode/shebang b/configs/shared/emacs/.emacs.d/snippets/python-mode/shebang deleted file mode 100644 index 0f45ae782d32..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/python-mode/shebang +++ /dev/null @@ -1,6 +0,0 @@ -# -*- mode: snippet -*- -# name: shebang -# key: shb -# -- -#!/usr/bin/env python -# -*- coding: utf-8 -*- diff --git a/configs/shared/emacs/.emacs.d/snippets/python-mode/utf-8 b/configs/shared/emacs/.emacs.d/snippets/python-mode/utf-8 deleted file mode 100644 index 3babc730305a..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/python-mode/utf-8 +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: utf-8 -# key: utf -# -- -# -*- coding: utf-8 -*- \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/action-extractor b/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/action-extractor deleted file mode 100644 index 62834a29ab04..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/action-extractor +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: exactness -# key: $x -# -- -$Exact<$Call<typeof $1>> \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/console-log b/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/console-log deleted file mode 100644 index 82ec3fd8e379..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/console-log +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: Console.log helper -# key: clg -# -- -console.log($1) \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/const-defn b/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/const-defn deleted file mode 100644 index 8e35e61fc2c4..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/const-defn +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: const definition -# key: cn -# -- -const $1 = '$2' \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/const-function b/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/const-function deleted file mode 100644 index 13f2018f2269..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/const-function +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: const function -# key: cfn -# -- -const $1 = ($2) => { - $3 -} \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/destructure-const b/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/destructure-const deleted file mode 100644 index 2a52c57c75cd..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/destructure-const +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: Destructuring a const -# key: cds -# -- -const { $1 } = $2 \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/fat-arrow b/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/fat-arrow deleted file mode 100644 index 187a2efc5a7c..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/fat-arrow +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: Fat arrow function -# key: fa -# -- -=> \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/fat-arrow-function b/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/fat-arrow-function deleted file mode 100644 index 694914a83c95..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/fat-arrow-function +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: Fat arrow function -# key: faf -# -- -() => { - $1 -} \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/import-destructured b/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/import-destructured deleted file mode 100644 index ded3ce163a93..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/import-destructured +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: Import destructured -# key: ids -# -- -import { $1 } from '$2' \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/import-react b/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/import-react deleted file mode 100644 index 0463f5cd5593..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/import-react +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: Import React dependency (ES6) -# key: ir -# -- -import React from 'react' diff --git a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/import-type b/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/import-type deleted file mode 100644 index fcd51f687b61..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/import-type +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: import type -# key: ixt -# -- -import type { $1 } from '$2' \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/import-x-from-y b/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/import-x-from-y deleted file mode 100644 index 09fa6df50506..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/import-x-from-y +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: import x from y -# key: ix -# -- -import $1 from '$2' \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/import-y b/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/import-y deleted file mode 100644 index 9f550e300d12..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/import-y +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: import y -# key: iy -# -- -import '$1' \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/jest-describe-test b/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/jest-describe-test deleted file mode 100644 index ed382d4f74c4..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/jest-describe-test +++ /dev/null @@ -1,10 +0,0 @@ -# -*- mode: snippet -*- -# name: Jest describe/test block -# key: dsc -# -- -describe('$1', () => { - test('$2', () => { - - expect($3).toEqual($4) - }) -}) \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/jest-test b/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/jest-test deleted file mode 100644 index 12ca2e786ded..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/jest-test +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: Jest / Jasmine test -# key: tst -# -- -test('$1', () => { - expect($2).toBe($3) -}) \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/react-class-component b/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/react-class-component deleted file mode 100644 index f2a93a31d96d..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/react-class-component +++ /dev/null @@ -1,11 +0,0 @@ -# -*- mode: snippet -*- -# name: React class extends -# key: clz -# -- -class $1 extends React.Component { - render() { - $2 - } -} - -export default $1 \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/redux-action b/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/redux-action deleted file mode 100644 index d196f8ee809f..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/redux-action +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: redux-action -# key: rax -# -- -export const ${1:$$(lower->caps yas-text)} = '`(downcase (buffer-dirname))`/${1:$(caps->kebab yas-text)}' \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/typed-redux-action b/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/typed-redux-action deleted file mode 100644 index a4ef0181cd4e..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/rjsx-mode/typed-redux-action +++ /dev/null @@ -1,5 +0,0 @@ -# -*- mode: snippet -*- -# name: typed-redux-action -# key: trax -# -- -export const ${1:$$(lower->caps yas-text)}: '`(downcase (buffer-dirname))`/${1:$(caps->kebab yas-text)}' = '`(downcase (buffer-dirname))`/${1:$(caps->kebab yas-text)}' \ No newline at end of file diff --git a/configs/shared/emacs/.emacs.d/snippets/web-mode/index-boilerplate b/configs/shared/emacs/.emacs.d/snippets/web-mode/index-boilerplate deleted file mode 100644 index b791cdf86fe5..000000000000 --- a/configs/shared/emacs/.emacs.d/snippets/web-mode/index-boilerplate +++ /dev/null @@ -1,18 +0,0 @@ -# -*- mode: snippet -*- -# name: HTML index.html starter -# key: html -# -- -<!doctype html> - -<html lang="en"> -<head> - <meta charset="utf-8"> - <title>$1</title> - <meta name="description" content="$2"> - <meta name="author" content="William Carroll"> - <link rel="stylesheet" href="index.css"> -</head> -<body> - <script src="index.js"></script> -</body> -</html> diff --git a/configs/shared/emacs/.emacs.d/tramp b/configs/shared/emacs/.emacs.d/tramp deleted file mode 100644 index dcbfb28ed02f..000000000000 --- a/configs/shared/emacs/.emacs.d/tramp +++ /dev/null @@ -1,42 +0,0 @@ -;; -*- emacs-lisp -*- <18/11/04 17:19:20 /home/wpcarro/.emacs.d/tramp> -;; Tramp connection history. Don't change this file. -;; You can delete it, forcing Tramp to reapply the checks. - -((["sudo" "root" "nixos" nil nil] - ("uname" "Linux 4.14.71") - ("locale" "LC_ALL=en_US.utf8") - ("test" "test") - ("remote-path" - ("/run/current-system/sw/bin" "/bin" "/usr/bin")) - ("remote-shell" "/bin/sh") - ("readlink" "\\readlink") - ("stat" nil) - ("perl-file-spec" t) - ("perl-cwd-realpath" t) - ("perl" "\\perl") - ("id" "/run/current-system/sw/bin/id") - ("gid-integer" 0) - ("file-exists" "test -e") - ("gid-string" "root") - ("uid-integer" 0) - ("git" "\\git") - ("~root" "/root") - ("env-u-option" t)) - (["ssh" nil "chords" nil nil] - ("uname" "Linux 4.4.0-138-generic") - ("locale" "LC_ALL=en_US.utf8") - ("test" "test") - ("remote-path" - ("/bin" "/usr/bin" "/sbin" "/usr/sbin" "/usr/local/bin" "/usr/local/sbin")) - ("remote-shell" "/bin/sh") - ("readlink" "\\readlink") - ("stat" nil) - ("perl-file-spec" t) - ("perl-cwd-realpath" t) - ("perl" "\\perl") - ("id" "/usr/bin/id") - ("gid-integer" 0) - ("gid-string" "root") - ("file-exists" "test -e") - ("ls" "/bin/ls --color=never") - ("ls-dired" t))) diff --git a/configs/shared/emacs/.emacs.d/vendor/org-clubhouse.el b/configs/shared/emacs/.emacs.d/vendor/org-clubhouse.el deleted file mode 100644 index ba1f004a2410..000000000000 --- a/configs/shared/emacs/.emacs.d/vendor/org-clubhouse.el +++ /dev/null @@ -1,365 +0,0 @@ -;;; private/grfn/org-clubhouse.el - -(require 'dash) -(require 'dash-functional) -(require 's) -(require 'org) -(require 'org-element) -(require 'cl) - -;;; -;;; Configuration -;;; - -(defvar org-clubhouse-auth-token nil - "Authorization token for the Clubhouse API") - -(defvar org-clubhouse-team-name nil - "Team name to use in links to Clubhouse -ie https://app.clubhouse.io/<TEAM_NAME>/stories") - -(defvar org-clubhouse-project-ids nil - "Specific list of project IDs to synchronize with clubhouse. -If unset all projects will be synchronized") - -(defvar org-clubhouse-workflow-name "Default") - -(defvar org-clubhouse-state-alist - '(("LATER" . "Unscheduled") - ("[ ]" . "Ready for Development") - ("TODO" . "Ready for Development") - ("OPEN" . "Ready for Development") - ("ACTIVE" . "In Development") - ("PR" . "Review") - ("DONE" . "Merged") - ("[X]" . "Merged") - ("CLOSED" . "Merged"))) - -;;; -;;; Utilities -;;; - -(defun ->list (vec) (append vec nil)) - -(defun reject-archived (item-list) - (-filter (lambda (item) (equal :json-false (alist-get 'archived item))) item-list)) - -(defun alist->plist (key-map alist) - (->> key-map - (-map (lambda (key-pair) - (let ((alist-key (car key-pair)) - (plist-key (cdr key-pair))) - (list plist-key (alist-get alist-key alist))))) - (-flatten-n 1))) - -(defun alist-get-equal (key alist) - "Like `alist-get', but uses `equal' instead of `eq' for comparing keys" - (->> alist - (-find (lambda (pair) (equal key (car pair)))) - (cdr))) - -;;; -;;; Org-element interaction -;;; - -;; (defun org-element-find-headline () -;; (let ((current-elt (org-element-at-point))) -;; (if (equal 'headline (car current-elt)) -;; current-elt -;; (let* ((elt-attrs (cadr current-elt)) -;; (parent (plist-get elt-attrs :post-affiliated))) -;; (goto-char parent) -;; (org-element-find-headline))))) - -(defun org-element-find-headline () - (let ((current-elt (org-element-at-point))) - (when (equal 'headline (car current-elt)) - (cadr current-elt)))) - -(defun org-element-extract-clubhouse-id (elt) - (when-let ((clubhouse-id-link (plist-get elt :CLUBHOUSE-ID))) - (string-match - (rx "[[" (one-or-more anything) "]" - "[" (group (one-or-more digit)) "]]") - clubhouse-id-link) - (string-to-int (match-string 1 clubhouse-id-link)))) - - - -(defun org-element-clubhouse-id () - (org-element-extract-clubhouse-id - (org-element-find-headline))) - -;;; -;;; API integration -;;; - -(defvar org-clubhouse-base-url* "https://api.clubhouse.io/api/v2") - -(defun org-clubhouse-auth-url (url) - (concat url - "?" - (url-build-query-string - `(("token" ,org-clubhouse-auth-token))))) - -(defun org-clubhouse-baseify-url (url) - (if (s-starts-with? org-clubhouse-base-url* url) url - (concat org-clubhouse-base-url* - (if (s-starts-with? "/" url) url - (concat "/" url))))) - -(defun org-clubhouse-request (method url &optional data) - (message "%s %s %s" method url (prin1-to-string data)) - (let* ((url-request-method method) - (url-request-extra-headers - '(("Content-Type" . "application/json"))) - (url-request-data data) - (buf)) - - (setq url (-> url - org-clubhouse-baseify-url - org-clubhouse-auth-url)) - - (setq buf (url-retrieve-synchronously url)) - - (with-current-buffer buf - (goto-char url-http-end-of-headers) - (prog1 (json-read) (kill-buffer))))) - -(cl-defun to-id-name-pairs - (seq &optional (id-attr 'id) (name-attr 'name)) - (->> seq - ->list - (-map (lambda (resource) - (cons (alist-get id-attr resource) - (alist-get name-attr resource)))))) - -(cl-defun org-clubhouse-fetch-as-id-name-pairs - (resource &optional - (id-attr 'id) - (name-attr 'name)) - "Returns the given resource from clubhouse as (id . name) pairs" - (let ((resp-json (org-clubhouse-request "GET" resource))) - (-> resp-json - ->list - reject-archived - (to-id-name-pairs id-attr name-attr)))) - -(defun org-clubhouse-link-to-story (story-id) - (format "https://app.clubhouse.io/%s/story/%d" - org-clubhouse-team-name - story-id)) - -(defun org-clubhouse-link-to-epic (epic-id) - (format "https://app.clubhouse.io/%s/epic/%d" - org-clubhouse-team-name - epic-id)) - -(defun org-clubhouse-link-to-project (project-id) - (format "https://app.clubhouse.io/%s/project/%d" - org-clubhouse-team-name - project-id)) - -;;; -;;; Caching -;;; - - - -(defvar org-clubhouse-cache-clear-functions ()) - -(defmacro defcache (name &optional docstring &rest body) - (let* ((doc (when docstring (list docstring))) - (cache-var-name (intern (concat (symbol-name name) - "-cache"))) - (clear-cache-function-name - (intern (concat "clear-" (symbol-name cache-var-name))))) - `(progn - (defvar ,cache-var-name :no-cache) - (defun ,name () - ,@doc - (when (equal :no-cache ,cache-var-name) - (setq ,cache-var-name (progn ,@body))) - ,cache-var-name) - (defun ,clear-cache-function-name () - (interactive) - (setq ,cache-var-name :no-cache)) - - (push (quote ,clear-cache-function-name) - org-clubhouse-cache-clear-functions)))) - -(defun org-clubhouse-clear-cache () - (interactive) - (-map #'funcall org-clubhouse-cache-clear-functions)) - -;;; -;;; API resource functions -;;; - -(defcache org-clubhouse-projects - "Returns projects as (project-id . name)" - (org-clubhouse-fetch-as-id-name-pairs "projects")) - -(defcache org-clubhouse-epics - "Returns projects as (project-id . name)" - (org-clubhouse-fetch-as-id-name-pairs "epics")) - -(defcache org-clubhouse-workflow-states - "Returns worflow states as (name . id) pairs" - (let* ((resp-json (org-clubhouse-request "GET" "workflows")) - (workflows (->list resp-json)) - ;; just assume it exists, for now - (workflow (-find (lambda (workflow) - (equal org-clubhouse-workflow-name - (alist-get 'name workflow))) - workflows)) - (states (->list (alist-get 'states workflow)))) - (to-id-name-pairs states - 'name - 'id))) - -(defun org-clubhouse-stories-in-project (project-id) - "Returns the stories in the given project as org bugs" - (let ((resp-json (org-clubhouse-request "GET" (format "/projects/%d/stories" project-id)))) - (->> resp-json ->list reject-archived - (-reject (lambda (story) (equal :json-true (alist-get 'completed story)))) - (-map (lambda (story) - (cons - (cons 'status - (cond - ((equal :json-true (alist-get 'started story)) - 'started) - ((equal :json-true (alist-get 'completed story)) - 'completed) - ('t - 'open))) - story))) - (-map (-partial #'alist->plist - '((name . :title) - (id . :id) - (status . :status))))))) - -;;; -;;; Story creation -;;; - -(cl-defun org-clubhouse-create-story-internal - (title &key project-id epic-id) - (assert (and (stringp title) - (integerp project-id) - (or (null epic-id) (integerp epic-id)))) - (org-clubhouse-request - "POST" - "stories" - (json-encode - `((name . ,title) - (project_id . ,project-id) - (epic_id . ,epic-id))))) - -(defun org-clubhouse-prompt-for-project (cb) - (ivy-read - "Select a project: " - (-map #'cdr (org-clubhouse-projects)) - :require-match t - :history 'org-clubhouse-project-history - :action (lambda (selected) - (let ((project-id - (->> (org-clubhouse-projects) - (-find (lambda (proj) - (string-equal (cdr proj) selected))) - car))) - (message "%d" project-id) - (funcall cb project-id))))) - -(defun org-clubhouse-prompt-for-epic (cb) - (ivy-read - "Select an epic: " - (-map #'cdr (org-clubhouse-epics)) - :history 'org-clubhouse-epic-history - :action (lambda (selected) - (let ((epic-id - (->> (org-clubhouse-epics) - (-find (lambda (proj) - (string-equal (cdr proj) selected))) - car))) - (message "%d" epic-id) - (funcall cb epic-id))))) - -(defun org-clubhouse-populate-created-story (story) - (let ((elt (org-element-find-headline)) - (story-id (alist-get 'id story)) - (epic-id (alist-get 'epic_id story)) - (project-id (alist-get 'project_id story))) - - (org-set-property "clubhouse-id" - (org-make-link-string - (org-clubhouse-link-to-story story-id) - (number-to-string story-id))) - - (org-set-property "clubhouse-epic" - (org-make-link-string - (org-clubhouse-link-to-epic epic-id) - (alist-get epic-id (org-clubhouse-epics)))) - - (org-set-property "clubhouse-project" - (org-make-link-string - (org-clubhouse-link-to-project project-id) - (alist-get project-id (org-clubhouse-projects)))) - - (org-todo "TODO"))) - -(defun org-clubhouse-create-story () - (interactive) - ;; (message (org-element-find-headline)) - (when-let ((elt (org-element-find-headline)) - (title (plist-get elt :title))) - (if (plist-get elt :CLUBHOUSE-ID) - (message "This headline is already a clubhouse story!") - (org-clubhouse-prompt-for-project - (lambda (project-id) - (when project-id - (org-clubhouse-prompt-for-epic - (lambda (epic-id) - (let* ((story (org-clubhouse-create-story-internal - title - :project-id project-id - :epic-id epic-id))) - (org-clubhouse-populate-created-story story)))))))))) - -;;; -;;; Story updates -;;; - -(cl-defun org-clubhouse-update-story-internal - (story-id &rest attrs) - (assert (and (integerp story-id) - (listp attrs))) - (org-clubhouse-request - "PUT" - (format "stories/%d" story-id) - (json-encode attrs))) - -(defun org-clubhouse-update-status () - (when-let (clubhouse-id (org-element-clubhouse-id)) - (let* ((elt (org-element-find-headline)) - (todo-keyword (-> elt (plist-get :todo-keyword) (substring-no-properties)))) - (message todo-keyword) - (when-let ((clubhouse-workflow-state - (alist-get-equal todo-keyword org-clubhouse-state-alist)) - (workflow-state-id - (alist-get-equal clubhouse-workflow-state (org-clubhouse-workflow-states)))) - (org-clubhouse-update-story-internal - clubhouse-id - :workflow_state_id workflow-state-id) - (message "Successfully updated clubhouse status to \"%s\"" - clubhouse-workflow-state))))) - -(define-minor-mode org-clubhouse-mode - :init-value nil - :group 'org - :lighter "Org-Clubhouse" - :keymap '() - (add-hook 'org-after-todo-state-change-hook - 'org-clubhouse-update-status - nil - t)) diff --git a/configs/shared/emacs/.emacs.d/vendor/reason-indent.el b/configs/shared/emacs/.emacs.d/vendor/reason-indent.el deleted file mode 100644 index 8fd3c9425866..000000000000 --- a/configs/shared/emacs/.emacs.d/vendor/reason-indent.el +++ /dev/null @@ -1,304 +0,0 @@ -;;; reason-indent.el --- Indentation functions for ReasonML -*-lexical-binding: t-*- - -;; Portions Copyright (c) 2015-present, Facebook, Inc. All rights reserved. - -;;; Commentary: - -;; Indentation functions for Reason. - -;;; Code: - -(defconst reason-re-ident "[[:word:][:multibyte:]_][[:word:][:multibyte:]_[:digit:]]*") - -(defcustom reason-indent-offset 2 - "Indent Reason code by this number of spaces." - :type 'integer - :group 'reason-mode - :safe #'integerp) - -(defun reason-looking-back-str (str) - "Like `looking-back' but for fixed strings rather than regexps. -Works around some regexp slowness. -Argument STR string to search for." - (let ((len (length str))) - (and (> (point) len) - (equal str (buffer-substring-no-properties (- (point) len) (point)))))) - -(defun reason-paren-level () - "Get the level of nesting inside parentheses." - (nth 0 (syntax-ppss))) - -(defun reason-in-str-or-cmnt () - "Return whether point is currently inside a string or a comment." - (nth 8 (syntax-ppss))) - -(defun reason-rewind-past-str-cmnt () - "Rewind past string or comment." - (goto-char (nth 8 (syntax-ppss)))) - -(defun reason-rewind-irrelevant () - "Rewind past irrelevant characters (whitespace of inside comments)." - (interactive) - (let ((starting (point))) - (skip-chars-backward "[:space:]\n") - (if (reason-looking-back-str "*/") (backward-char)) - (if (reason-in-str-or-cmnt) - (reason-rewind-past-str-cmnt)) - (if (/= starting (point)) - (reason-rewind-irrelevant)))) - -(defun reason-align-to-expr-after-brace () - "Align the expression at point to the expression after the previous brace." - (save-excursion - (forward-char) - ;; We don't want to indent out to the open bracket if the - ;; open bracket ends the line - (when (not (looking-at "[[:blank:]]*\\(?://.*\\)?$")) - (when (looking-at "[[:space:]]") - (forward-word 1) - (backward-word 1)) - (current-column)))) - -(defun reason-align-to-prev-expr () - "Align the expression at point to the previous expression." - (let ((alignment (save-excursion - (forward-char) - ;; We don't want to indent out to the open bracket if the - ;; open bracket ends the line - (when (not (looking-at "[[:blank:]]*\\(?://.*\\)?$")) - (if (looking-at "[[:space:]]") - (progn - (forward-word 1) - (backward-word 1)) - (backward-char)) - (current-column))))) - (if (not alignment) - (save-excursion - (forward-char) - (forward-line) - (back-to-indentation) - (current-column)) - alignment))) - -;;; Start of a reason binding -(defvar reason-binding - (regexp-opt '("let" "type" "module" "fun"))) - -(defun reason-beginning-of-defun (&optional arg) - "Move backward to the beginning of the current defun. - -With ARG, move backward multiple defuns. Negative ARG means -move forward. - -This is written mainly to be used as `beginning-of-defun-function'. -Don't move to the beginning of the line. `beginning-of-defun', -which calls this, does that afterwards." - (interactive "p") - (re-search-backward (concat "^\\(" reason-binding "\\)\\_>") - nil 'move (or arg 1))) - -(defun reason-end-of-defun () - "Move forward to the next end of defun. - -With argument, do it that many times. -Negative argument -N means move back to Nth preceding end of defun. - -Assume that this is called after ‘beginning-of-defun’. So point is -at the beginning of the defun body. - -This is written mainly to be used as `end-of-defun-function' for Reason." - (interactive) - ;; Find the opening brace - (if (re-search-forward "[{]" nil t) - (progn - (goto-char (match-beginning 0)) - ;; Go to the closing brace - (condition-case nil - (forward-sexp) - (scan-error - ;; The parentheses are unbalanced; instead of being unable to fontify, just jump to the end of the buffer - (goto-char (point-max))))) - ;; There is no opening brace, so consider the whole buffer to be one "defun" - (goto-char (point-max)))) - -(defun reason-rewind-to-beginning-of-current-level-expr () - "Rewind to the beginning of the expression on the current level of nesting." - (interactive) - (let ((current-level (reason-paren-level))) - (back-to-indentation) - (when (looking-at "=>") - (reason-rewind-irrelevant) - (back-to-indentation)) - (while (> (reason-paren-level) current-level) - (backward-up-list) - (back-to-indentation)))) - -(defun reason-mode-indent-line () - "Indent current line." - (interactive) - (let ((indent - (save-excursion - (back-to-indentation) - ;; Point is now at beginning of current line - (let* ((level (reason-paren-level)) - (baseline - ;; Our "baseline" is one level out from the indentation of the expression - ;; containing the innermost enclosing opening bracket. That - ;; way if we are within a block that has a different - ;; indentation than this mode would give it, we still indent - ;; the inside of it correctly relative to the outside. - (if (= 0 level) - 0 - (save-excursion - (reason-rewind-irrelevant) - (if (save-excursion - (reason-rewind-to-beginning-of-current-level-expr) - (looking-at "<")) - (progn - (reason-rewind-to-beginning-of-current-level-expr) - (current-column)) - (progn - (backward-up-list) - (reason-rewind-to-beginning-of-current-level-expr) - - (cond - ((looking-at "switch") - (current-column)) - - ((looking-at "|") - (+ (current-column) (* reason-indent-offset 2))) - - (t - (let ((current-level (reason-paren-level))) - (save-excursion - (while (and (= current-level (reason-paren-level)) - (not (looking-at reason-binding))) - (reason-rewind-irrelevant) - (reason-rewind-to-beginning-of-current-level-expr)) - (+ (current-column) reason-indent-offset))))))))))) - (cond - ;; A function return type is indented to the corresponding function arguments - ((looking-at "=>") - (+ baseline reason-indent-offset)) - - ((reason-in-str-or-cmnt) - (cond - ;; In the end of the block -- align with star - ((looking-at "*/") (+ baseline 1)) - ;; Indent to the following shape: - ;; /* abcd - ;; * asdf - ;; */ - ;; - ((looking-at "*") (+ baseline 1)) - ;; Indent to the following shape: - ;; /* abcd - ;; asdf - ;; */ - ;; - (t (+ baseline (+ reason-indent-offset 1))))) - - ((looking-at "</") (- baseline reason-indent-offset)) - - ;; A closing brace is 1 level unindented - ((looking-at "}\\|)\\|\\]") - (save-excursion - (reason-rewind-irrelevant) - (let ((jsx? (reason-looking-back-str ">"))) - (backward-up-list) - (reason-rewind-to-beginning-of-current-level-expr) - (cond - ((looking-at "switch") baseline) - - (jsx? (current-column)) - - (t (- baseline reason-indent-offset)))))) - - ;; Doc comments in /** style with leading * indent to line up the *s - ((and (nth 4 (syntax-ppss)) (looking-at "*")) - (+ 1 baseline)) - - ;; If we're in any other token-tree / sexp, then: - (t - (or - ;; If we are inside a pair of braces, with something after the - ;; open brace on the same line and ending with a comma, treat - ;; it as fields and align them. - (when (> level 0) - (save-excursion - (reason-rewind-irrelevant) - (backward-up-list) - ;; Point is now at the beginning of the containing set of braces - (reason-align-to-expr-after-brace))) - - (progn - (back-to-indentation) - (cond ((looking-at (regexp-opt '("and" "type"))) - baseline) - ((save-excursion - (reason-rewind-irrelevant) - (= (point) 1)) - baseline) - ((save-excursion - (while (looking-at "|") - (reason-rewind-irrelevant) - (back-to-indentation)) - (looking-at (regexp-opt '("type")))) - (+ baseline reason-indent-offset)) - ((looking-at "|\\|/[/*]") - baseline) - ((and (> level 0) - (save-excursion - (reason-rewind-irrelevant) - (backward-up-list) - (reason-rewind-to-beginning-of-current-level-expr) - (looking-at "switch"))) - (+ baseline reason-indent-offset)) - ((save-excursion - (reason-rewind-irrelevant) - (looking-back "[{;,\\[(]" (- (point) 2))) - baseline) - ((and - (save-excursion - (reason-rewind-irrelevant) - (reason-rewind-to-beginning-of-current-level-expr) - (and (looking-at reason-binding) - (not (progn - (forward-sexp) - (forward-sexp) - (skip-chars-forward "[:space:]\n") - (looking-at "="))))) - (not (save-excursion - (skip-chars-backward "[:space:]\n") - (reason-looking-back-str "=>")))) - (save-excursion - (reason-rewind-irrelevant) - (backward-sexp) - (reason-align-to-prev-expr))) - ((save-excursion - (reason-rewind-irrelevant) - (looking-back "<\/.*?>" (- (point) 30))) - baseline) - (t - (save-excursion - (reason-rewind-irrelevant) - (reason-rewind-to-beginning-of-current-level-expr) - - (if (looking-at "|") - baseline - (+ baseline reason-indent-offset))))) - ;; Point is now at the beginning of the current line - )))))))) - - (when indent - ;; If we're at the beginning of the line (before or at the current - ;; indentation), jump with the indentation change. Otherwise, save the - ;; excursion so that adding the indentations will leave us at the - ;; equivalent position within the line to where we were before. - (if (<= (current-column) (current-indentation)) - (indent-line-to indent) - (save-excursion (indent-line-to indent)))))) - -(provide 'reason-indent) - -;;; reason-indent.el ends here diff --git a/configs/shared/emacs/.emacs.d/vendor/reason-interaction.el b/configs/shared/emacs/.emacs.d/vendor/reason-interaction.el deleted file mode 100644 index 6ceaed1e9340..000000000000 --- a/configs/shared/emacs/.emacs.d/vendor/reason-interaction.el +++ /dev/null @@ -1,216 +0,0 @@ -;;; reason-interaction.el --- Phrase navitagion for rtop -*-lexical-binding: t-*- - -;; Portions Copyright (c) 2015-present, Facebook, Inc. All rights reserved. - -;;; Commentary: - -;; Phrase navigation for utop and maybe other REPLs. - -;; The utop compatibility layer for Reason was mainly taken from: -;; https://github.com/ocaml/tuareg/blob/master/tuareg-light.el (big thanks!) - -;;; Code: - -(defun reason-backward-char (&optional step) - "Go back one char. -Similar to `backward-char` but it does not signal errors -`beginning-of-buffer` and `end-of-buffer`. It optionally takes a -STEP parameter for jumping back more than one character." - (when step (goto-char (- (point) step)) - (goto-char (1- (point))))) - -(defun reason-forward-char (&optional step) - "Go forward one char. -Similar to `forward-char` but it does not signal errors -`beginning-of-buffer` and `end-of-buffer`. It optionally takes a -STEP parameter for jumping back more than one character." - (when step (goto-char (+ (point) step)) - (goto-char (1+ (point))))) - -(defun reason-in-literal-p () - "Return non-nil if point is inside an Reason literal." - (nth 3 (syntax-ppss))) - -(defconst reason-comment-delimiter-regexp "\\*/\\|/\\*" - "Regex for identify either open or close comment delimiters.") - -(defun reason-in-between-comment-chars-p () - "Return non-nil iff point is in between the comment delimiter chars. -It returns non-nil if point is between the chars only (*|/ or /|* -where | is point)." - (and (not (bobp)) (not (eobp)) - (or (and (char-equal ?/ (char-before)) (char-equal ?* (char-after))) - (and (char-equal ?* (char-before)) (char-equal ?/ (char-after)))))) - -(defun reason-looking-at-comment-delimiters-p () - "Return non-nil iff point in between comment delimiters." - (looking-at-p reason-comment-delimiter-regexp)) - -(defun reason-in-between-comment-delimiters-p () - "Return non-nil if inside /* and */." - (nth 4 (syntax-ppss))) - -(defun reason-in-comment-p () - "Return non-nil iff point is inside or right before a comment." - (or (reason-in-between-comment-delimiters-p) - (reason-in-between-comment-chars-p) - (reason-looking-at-comment-delimiters-p))) - -(defun reason-beginning-of-literal-or-comment () - "Skip to the beginning of the current literal or comment (or buffer)." - (interactive) - (goto-char (or (nth 8 (syntax-ppss)) (point)))) - -(defun reason-inside-block-scope-p () - "Skip to the beginning of the current literal or comment (or buffer)." - (and (> (nth 0 (syntax-ppss)) 0) - (let ((delim-start (nth 1 (syntax-ppss)))) - (save-excursion - (goto-char delim-start) - (char-equal ?{ (following-char)))))) - -(defun reason-at-phrase-break-p () - "Is the underlying `;' a phrase break?" - ;; Difference from OCaml, the phrase separator is a single semi-colon - (and (not (eobp)) - (char-equal ?\; (following-char)))) - -(defun reason-skip-to-close-delimiter (&optional limit) - "Skip to the end of a Reason block. -It basically calls `re-search-forward` in order to go to any -closing delimiter, not concerning itself with balancing of any -sort. Client code needs to check that. -LIMIT is passed to `re-search-forward` directly." - (re-search-forward "\\s)" limit 'move)) - -(defun reason-skip-back-to-open-delimiter (&optional limit) - "Skip to the beginning of a Reason block backwards. -It basically calls `re-search-backward` in order to go to any -opening delimiter, not concerning itself with balancing of any -sort. Client code needs to check that. -LIMIT is passed to `re-search-backward` directly." - (re-search-backward "\\s(" limit 'move)) - -(defun reason-find-phrase-end () - "Skip to the end of a phrase." - (while (and (not (eobp)) - (not (reason-at-phrase-break-p))) - (if (re-search-forward ";" nil 'move) - (progn (when (reason-inside-block-scope-p) - (reason-skip-to-close-delimiter)) - (goto-char (1- (point)))) - ;; avoid infinite loop at the end of the buffer - (re-search-forward "[[:space:]\\|\n]+" nil 'move))) - (min (goto-char (1+ (point))) (point-max))) - -(defun reason-skip-blank-and-comments () - "Skip blank spaces and comments." - (cond - ((eobp) (point)) - ((or (reason-in-between-comment-chars-p) - (reason-looking-at-comment-delimiters-p)) (progn - (reason-forward-char 1) - (reason-skip-blank-and-comments))) - ((reason-in-between-comment-delimiters-p) (progn - (search-forward "*/" nil t) - (reason-skip-blank-and-comments))) - ((eolp) (progn - (reason-forward-char 1) - (reason-skip-blank-and-comments))) - (t (progn (skip-syntax-forward " ") - (point))))) - -(defun reason-skip-back-blank-and-comments () - "Skip blank spaces and comments backwards." - (cond - ((bobp) (point)) - ((looking-back reason-comment-delimiter-regexp) (progn - (reason-backward-char 1) - (reason-skip-back-blank-and-comments))) - ((reason-in-between-comment-delimiters-p) (progn - (search-backward "/*" nil t) - (reason-backward-char 1) - (reason-skip-back-blank-and-comments))) - ((or (reason-in-between-comment-chars-p) - (reason-looking-at-comment-delimiters-p)) (progn - (reason-backward-char 1) - (reason-skip-back-blank-and-comments))) - ((bolp) (progn - (reason-backward-char 1) - (reason-skip-back-blank-and-comments))) - (t (progn (skip-syntax-backward " ") - (point))))) - -(defun reason-ro (&rest words) - "Build a regex matching iff at least a word in WORDS is present." - (concat "\\<" (regexp-opt words t) "\\>")) - -(defconst reason-find-phrase-beginning-regexp - (concat (reason-ro "end" "type" "module" "sig" "struct" "class" - "exception" "open" "let") - "\\|^#[ \t]*[a-z][_a-z]*\\>\\|;")) - -(defun reason-at-phrase-start-p () - "Return t if is looking at the beginning of a phrase. -A phrase starts when a toplevel keyword is at the beginning of a line." - (or (looking-at "#") - (looking-at reason-find-phrase-beginning-regexp))) - -(defun reason-find-phrase-beginning-backward () - "Find the beginning of a phrase and return point. -It scans code backwards, therefore the caller can assume that the -beginning of the phrase (if found) is always before the starting -point. No error is signalled and (point-min) is returned when a -phrease cannot be found." - (beginning-of-line) - (while (and (not (bobp)) (not (reason-at-phrase-start-p))) - (if (reason-inside-block-scope-p) - (reason-skip-back-to-open-delimiter) - (re-search-backward reason-find-phrase-beginning-regexp nil 'move))) - (point)) - -(defun reason-discover-phrase () - "Discover a Reason phrase in the buffer." - ;; TODO reason-with-internal-syntax ;; tuareg2 modifies the syntax table (removed for now) - ;; TODO stop-at-and feature for phrase detection (do we need it?) - ;; TODO tuareg2 has some custom logic for module and class (do we need it?) - (save-excursion - (let ((case-fold-search nil)) - (reason-skip-blank-and-comments) - (list (reason-find-phrase-beginning-backward) ;; beginning - (reason-find-phrase-end) ;; end - (save-excursion ;; end-with-comment - (reason-skip-blank-and-comments) - (point)))))) - -(defun reason-discover-phrase-debug () - "Discover a Reason phrase in the buffer (debug mode)." - (let ((triple (reason-discover-phrase))) - (message (concat "Evaluating: \"" (reason-fetch-phrase triple) "\"")) - triple)) - -(defun reason-fetch-phrase (triple) - "Fetch the phrase text given a TRIPLE." - (let* ((start (nth 0 triple)) - (end (nth 1 triple))) ;; we don't need end-with-comment - (buffer-substring-no-properties start end))) - -(defun reason-next-phrase () - "Skip to the beginning of the next phrase." - (cond - ((reason-at-phrase-start-p) (point)) - ((eolp) (progn - (forward-char 1) - (reason-skip-blank-and-comments) - (reason-next-phrase))) - ((reason-inside-block-scope-p) (progn (reason-skip-to-close-delimiter) - (reason-next-phrase))) - ((looking-at ";") (progn - (forward-char 1) - (reason-next-phrase))) - (t (progn (end-of-line) - (reason-next-phrase))))) - -(provide 'reason-interaction) - -;;; reason-interaction.el ends here diff --git a/configs/shared/emacs/.emacs.d/vendor/reason-mode.el b/configs/shared/emacs/.emacs.d/vendor/reason-mode.el deleted file mode 100644 index 789735955db2..000000000000 --- a/configs/shared/emacs/.emacs.d/vendor/reason-mode.el +++ /dev/null @@ -1,242 +0,0 @@ -;;; reason-mode.el --- A major mode for editing ReasonML -*-lexical-binding: t-*- -;; Portions Copyright (c) 2015-present, Facebook, Inc. All rights reserved. - -;; Version: 0.4.0 -;; Author: Mozilla -;; Url: https://github.com/reasonml-editor/reason-mode -;; Keywords: languages, ocaml -;; Package-Requires: ((emacs "24.3")) - -;; This file is NOT part of GNU Emacs. - -;; This file is distributed under the terms of both the MIT license and the -;; Apache License (version 2.0). - -;;; Commentary: -;; This project provides useful functions and helpers for developing code -;; using the Reason programming language (https://facebook.github.io/reason). -;; -;; Reason is an umbrella project that provides a curated layer for OCaml. -;; -;; It offers: -;; - A new, familiar syntax for the battle-tested language that is OCaml. -;; - A workflow for compiling to JavaScript and native code. -;; - A set of friendly documentations, libraries and utilities. -;; -;; See the README.md for more details. - -;;; Code: - -(require 'reason-indent) -(require 'refmt) -(require 'reason-interaction) - -(eval-when-compile (require 'rx) - (require 'compile) - (require 'url-vars)) - -;; Syntax definitions and helpers -(defvar reason-mode-syntax-table - (let ((table (make-syntax-table))) - - ;; Operators - (dolist (i '(?+ ?- ?* ?/ ?& ?| ?^ ?! ?< ?> ?~ ?@)) - (modify-syntax-entry i "." table)) - - ;; Strings - (modify-syntax-entry ?\" "\"" table) - (modify-syntax-entry ?\\ "\\" table) - (modify-syntax-entry ?\' "_" table) - - ;; Comments - (modify-syntax-entry ?/ ". 124b" table) - (modify-syntax-entry ?* ". 23n" table) - (modify-syntax-entry ?\n "> b" table) - (modify-syntax-entry ?\^m "> b" table) - - table)) - -(defgroup reason nil - "Support for Reason code." - :link '(url-link "http://facebook.github.io/reason/") - :group 'languages) - -(defcustom reason-mode-hook nil - "Hook called by `reason-mode'." - :type 'hook - :group 'reason) - -;; Font-locking definitions and helpers -(defconst reason-mode-keywords - '("and" "as" - "else" "external" - "fun" "for" - "if" "impl" "in" "include" - "let" - "module" "match" "mod" "move" "mutable" - "open" - "priv" "pub" - "rec" "ref" "return" - "self" "static" "switch" "struct" "super" - "trait" "type" - "use" - "virtual" - "where" "when" "while")) - -(defconst reason-mode-consts - '("true" "false")) - -(defconst reason-special-types - '("int" "float" "string" "char" - "bool" "unit" "list" "array" "exn" - "option" "ref")) - -(defconst reason-camel-case - (rx symbol-start - (group upper (0+ (any word nonascii digit "_"))) - symbol-end)) - -(eval-and-compile - (defconst reason--char-literal-rx - (rx (seq (group "'") - (or (seq "\\" anything) - (not (any "'\\"))) - (group "'"))))) - -(defun reason-re-word (inner) - "Build a word regexp given INNER." - (concat "\\<" inner "\\>")) - -(defun reason-re-grab (inner) - "Build a grab regexp given INNER." - (concat "\\(" inner "\\)")) - -(defun reason-regexp-opt-symbols (words) - "Like `(regexp-opt words 'symbols)`, but will work on Emacs 23. -See rust-mode PR #42. -Argument WORDS argument to pass to `regexp-opt`." - (concat "\\_<" (regexp-opt words t) "\\_>")) - -;;; Syntax highlighting for Reason -(defvar reason-font-lock-keywords - `((,(reason-regexp-opt-symbols reason-mode-keywords) . font-lock-keyword-face) - (,(reason-regexp-opt-symbols reason-special-types) . font-lock-builtin-face) - (,(reason-regexp-opt-symbols reason-mode-consts) . font-lock-constant-face) - - (,reason-camel-case 1 font-lock-type-face) - - ;; Field names like `foo:`, highlight excluding the : - (,(concat (reason-re-grab reason-re-ident) ":[^:]") 1 font-lock-variable-name-face) - ;; Module names like `foo::`, highlight including the :: - (,(reason-re-grab (concat reason-re-ident "::")) 1 font-lock-type-face) - ;; Name punned labeled args like ::foo - (,(concat "[[:space:]]+" (reason-re-grab (concat "::" reason-re-ident))) 1 font-lock-type-face) - - ;; TODO jsx attribs? - (, - (concat "<[/]?" (reason-re-grab reason-re-ident) "[^>]*" ">") - 1 font-lock-type-face))) - -(defun reason-mode-try-find-alternate-file (mod-name extension) - "Switch to the file given by MOD-NAME and EXTENSION." - (let* ((filename (concat mod-name extension)) - (buffer (get-file-buffer filename))) - (if buffer (switch-to-buffer buffer) - (find-file filename)))) - -(defun reason-mode-find-alternate-file () - "Switch to implementation/interface file." - (interactive) - (let ((name buffer-file-name)) - (when (string-match "\\`\\(.*\\)\\.re\\([il]\\)?\\'" name) - (let ((mod-name (match-string 1 name)) - (e (match-string 2 name))) - (cond - ((string= e "i") - (reason-mode-try-find-alternate-file mod-name ".re")) - (t - (reason-mode-try-find-alternate-file mod-name ".rei"))))))) - -(defun reason--syntax-propertize-multiline-string (end) - "Propertize Reason multiline string. -Argument END marks the end of the string." - (let ((ppss (syntax-ppss))) - (when (eq t (nth 3 ppss)) - (let ((key (save-excursion - (goto-char (nth 8 ppss)) - (and (looking-at "{\\([a-z]*\\)|") - (match-string 1))))) - (when (search-forward (format "|%s}" key) end 'move) - (put-text-property (1- (match-end 0)) (match-end 0) - 'syntax-table (string-to-syntax "|"))))))) - -(defun reason-syntax-propertize-function (start end) - "Propertize Reason function. -Argument START marks the beginning of the function. -Argument END marks the end of the function." - (goto-char start) - (reason--syntax-propertize-multiline-string end) - (funcall - (syntax-propertize-rules - (reason--char-literal-rx (1 "\"") (2 "\"")) - ;; multi line strings - ("\\({\\)[a-z]*|" - (1 (prog1 "|" - (goto-char (match-end 0)) - (reason--syntax-propertize-multiline-string end))))) - (point) end)) - -(defvar reason-mode-map - (let ((map (make-sparse-keymap))) - (define-key map "\C-c\C-a" #'reason-mode-find-alternate-file) - (define-key map "\C-c\C-r" #'refmt-region-ocaml-to-reason) - (define-key map "\C-c\C-o" #'refmt-region-reason-to-ocaml) - map)) - -;;;###autoload -(define-derived-mode reason-mode prog-mode "Reason" - "Major mode for Reason code. - -\\{reason-mode-map}" - :group 'reason - :syntax-table reason-mode-syntax-table - :keymap reason-mode-map - - ;; Syntax - (setq-local syntax-propertize-function #'reason-syntax-propertize-function) - ;; Indentation - (setq-local indent-line-function 'reason-mode-indent-line) - ;; Fonts - (setq-local font-lock-defaults '(reason-font-lock-keywords)) - ;; Misc - (setq-local comment-start "/*") - (setq-local comment-end "*/") - (setq-local indent-tabs-mode nil) - ;; Allow paragraph fills for comments - (setq-local comment-start-skip "/\\*+[ \t]*") - (setq-local paragraph-start - (concat "^[ \t]*$\\|\\*)$\\|" page-delimiter)) - (setq-local paragraph-separate paragraph-start) - (setq-local require-final-newline t) - (setq-local normal-auto-fill-function nil) - (setq-local comment-multi-line t) - - (setq-local beginning-of-defun-function 'reason-beginning-of-defun) - (setq-local end-of-defun-function 'reason-end-of-defun) - (setq-local parse-sexp-lookup-properties t)) - -;;;###autoload -(add-to-list 'auto-mode-alist '("\\.rei?\\'" . reason-mode)) - -(defun reason-mode-reload () - "Reload Reason mode." - (interactive) - (unload-feature 'reason-mode) - (unload-feature 'reason-indent) - (unload-feature 'reason-interaction) - (require 'reason-mode) - (reason-mode)) - -(provide 'reason-mode) - -;;; reason-mode.el ends here diff --git a/configs/shared/emacs/.emacs.d/vendor/refmt.el b/configs/shared/emacs/.emacs.d/vendor/refmt.el deleted file mode 100644 index b9ea2b43f0ce..000000000000 --- a/configs/shared/emacs/.emacs.d/vendor/refmt.el +++ /dev/null @@ -1,231 +0,0 @@ -;;; refmt.el --- utility functions to format reason code - -;; Copyright (c) 2014 The go-mode Authors. All rights reserved. -;; Portions Copyright (c) 2015-present, Facebook, Inc. All rights reserved. - -;; Redistribution and use in source and binary forms, with or without -;; modification, are permitted provided that the following conditions are -;; met: - -;; * Redistributions of source code must retain the above copyright -;; notice, this list of conditions and the following disclaimer. -;; * Redistributions in binary form must reproduce the above -;; copyright notice, this list of conditions and the following disclaimer -;; in the documentation and/or other materials provided with the -;; distribution. -;; * Neither the name of the copyright holder nor the names of its -;; contributors may be used to endorse or promote products derived from -;; this software without specific prior written permission. - -;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -;; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -;; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -;; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -;; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -;; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.) - -;;; Commentary: -;; - -;;; Code: - -(require 'cl-lib) - -(defcustom refmt-command "refmt" - "The 'refmt' command." - :type 'string - :group 're-fmt) - -(defcustom refmt-show-errors 'buffer - "Where to display refmt error output. -It can either be displayed in its own buffer, in the echo area, or not at all. -Please note that Emacs outputs to the echo area when writing -files and will overwrite refmt's echo output if used from inside -a `before-save-hook'." - :type '(choice - (const :tag "Own buffer" buffer) - (const :tag "Echo area" echo) - (const :tag "None" nil)) - :group 're-fmt) - -(defcustom refmt-width-mode nil - "Specify width when formatting buffer contents." - :type '(choice - (const :tag "Window width" window) - (const :tag "Fill column" fill) - (const :tag "None" nil)) - :group 're-fmt) - -;;;###autoload -(defun refmt-before-save () - "Add this to .emacs to run refmt on the current buffer when saving: - (add-hook 'before-save-hook 'refmt-before-save)." - (interactive) - (when (eq major-mode 'reason-mode) (refmt))) - -(defun reason--goto-line (line) - (goto-char (point-min)) - (forward-line (1- line))) - -(defun reason--delete-whole-line (&optional arg) - "Delete the current line without putting it in the `kill-ring'. -Derived from function `kill-whole-line'. ARG is defined as for that -function." - (setq arg (or arg 1)) - (if (and (> arg 0) - (eobp) - (save-excursion (forward-visible-line 0) (eobp))) - (signal 'end-of-buffer nil)) - (if (and (< arg 0) - (bobp) - (save-excursion (end-of-visible-line) (bobp))) - (signal 'beginning-of-buffer nil)) - (cond ((zerop arg) - (delete-region (progn (forward-visible-line 0) (point)) - (progn (end-of-visible-line) (point)))) - ((< arg 0) - (delete-region (progn (end-of-visible-line) (point)) - (progn (forward-visible-line (1+ arg)) - (unless (bobp) - (backward-char)) - (point)))) - (t - (delete-region (progn (forward-visible-line 0) (point)) - (progn (forward-visible-line arg) (point)))))) - -(defun reason--apply-rcs-patch (patch-buffer &optional start-pos) - "Apply an RCS-formatted diff from PATCH-BUFFER to the current buffer." - (setq start-pos (or start-pos (point-min))) - (let ((first-line (line-number-at-pos start-pos)) - (target-buffer (current-buffer)) - ;; Relative offset between buffer line numbers and line numbers - ;; in patch. - ;; - ;; Line numbers in the patch are based on the source file, so - ;; we have to keep an offset when making changes to the - ;; buffer. - ;; - ;; Appending lines decrements the offset (possibly making it - ;; negative), deleting lines increments it. This order - ;; simplifies the forward-line invocations. - (line-offset 0)) - (save-excursion - (with-current-buffer patch-buffer - (goto-char (point-min)) - (while (not (eobp)) - (unless (looking-at "^\\([ad]\\)\\([0-9]+\\) \\([0-9]+\\)") - (error "invalid rcs patch or internal error in reason--apply-rcs-patch")) - (forward-line) - (let ((action (match-string 1)) - (from (string-to-number (match-string 2))) - (len (string-to-number (match-string 3)))) - (cond - ((equal action "a") - (let ((start (point))) - (forward-line len) - (let ((text (buffer-substring start (point)))) - (with-current-buffer target-buffer - (cl-decf line-offset len) - (goto-char start-pos) - (forward-line (- from len line-offset)) - (insert text))))) - ((equal action "d") - (with-current-buffer target-buffer - (reason--goto-line (- (1- (+ first-line from)) line-offset)) - (cl-incf line-offset len) - (reason--delete-whole-line len))) - (t - (error "invalid rcs patch or internal error in reason--apply-rcs-patch"))))))))) - -(defun refmt--process-errors (filename tmpfile errorfile errbuf) - (with-current-buffer errbuf - (if (eq refmt-show-errors 'echo) - (progn - (message "%s" (buffer-string)) - (refmt--kill-error-buffer errbuf)) - (insert-file-contents errorfile nil nil nil) - ;; Convert the refmt stderr to something understood by the compilation mode. - (goto-char (point-min)) - (insert "refmt errors:\n") - (while (search-forward-regexp (regexp-quote tmpfile) nil t) - (replace-match (file-name-nondirectory filename))) - (compilation-mode) - (display-buffer errbuf)))) - -(defun refmt--kill-error-buffer (errbuf) - (let ((win (get-buffer-window errbuf))) - (if win - (quit-window t win) - (with-current-buffer errbuf - (erase-buffer)) - (kill-buffer errbuf)))) - -(defun apply-refmt (&optional start end from to) - (setq start (or start (point-min)) - end (or end (point-max)) - from (or from "re") - to (or to "re")) - (let* ((ext (file-name-extension buffer-file-name t)) - (bufferfile (make-temp-file "refmt" nil ext)) - (outputfile (make-temp-file "refmt" nil ext)) - (errorfile (make-temp-file "refmt" nil ext)) - (errbuf (if refmt-show-errors (get-buffer-create "*Refmt Errors*"))) - (patchbuf (get-buffer-create "*Refmt patch*")) - (coding-system-for-read 'utf-8) - (coding-system-for-write 'utf-8) - (width-args - (cond - ((equal refmt-width-mode 'window) - (list "--print-width" (number-to-string (window-body-width)))) - ((equal refmt-width-mode 'fill) - (list "--print-width" (number-to-string fill-column))) - (t - '())))) - (unwind-protect - (save-restriction - (widen) - (write-region start end bufferfile) - (if errbuf - (with-current-buffer errbuf - (setq buffer-read-only nil) - (erase-buffer))) - (with-current-buffer patchbuf - (erase-buffer)) - (if (zerop (apply 'call-process - refmt-command nil (list (list :file outputfile) errorfile) - nil (append width-args (list "--parse" from "--print" to bufferfile)))) - (progn - (call-process-region start end "diff" nil patchbuf nil "-n" "-" - outputfile) - (reason--apply-rcs-patch patchbuf start) - (message "Applied refmt") - (if errbuf (refmt--kill-error-buffer errbuf))) - (message "Could not apply refmt") - (if errbuf - (refmt--process-errors (buffer-file-name) bufferfile errorfile errbuf))))) - (kill-buffer patchbuf) - (delete-file errorfile) - (delete-file bufferfile) - (delete-file outputfile))) - -(defun refmt () - "Format the current buffer according to the refmt tool." - (interactive) - (apply-refmt)) - -(defun refmt-region-ocaml-to-reason (start end) - (interactive "r") - (apply-refmt start end "ml")) - -(defun refmt-region-reason-to-ocaml (start end) - (interactive "r") - (apply-refmt start end "re" "ml")) - -(provide 'refmt) - -;;; refmt.el ends here diff --git a/configs/shared/emacs/.emacs.d/vendor/slack-snippets.el b/configs/shared/emacs/.emacs.d/vendor/slack-snippets.el deleted file mode 100644 index 6bf933cfb86d..000000000000 --- a/configs/shared/emacs/.emacs.d/vendor/slack-snippets.el +++ /dev/null @@ -1,228 +0,0 @@ -;;; private/grfn/slack-snippets.el -*- lexical-binding: t; -*- - -(require 's) -(require 'json) -(require 'dash) -(require 'dash-functional) -(require 'request) -(require 'subr-x) - -;;; -;;; Configuration -;;; - -(defvar slack/token nil - "Legacy (https://api.slack.com/custom-integrations/legacy-tokens) access token") - -(defvar slack/include-public-channels 't - "Whether or not to inclue public channels in the list of conversations") - -(defvar slack/include-private-channels 't - "Whether or not to inclue public channels in the list of conversations") - -(defvar slack/include-im 't - "Whether or not to inclue IMs (private messages) in the list of conversations") - -(defvar slack/include-mpim nil - "Whether or not to inclue multi-person IMs (multi-person private messages) in - the list of conversations") - -;;; -;;; Utilities -;;; - -(defmacro comment (&rest _body) - "Comment out one or more s-expressions" - nil) - -(defun ->list (vec) (append vec nil)) - -(defun json-truthy? (x) (and x (not (equal :json-false x)))) - -;;; -;;; Generic API integration -;;; - -(defvar slack/base-url "https://slack.com/api") - -(defun slack/get (path params &optional callback) - "params is an alist of query parameters" - (let* ((params-callback (if (functionp params) `(() . ,params) (cons params callback))) - (params (car params-callback)) (callback (cdr params-callback)) - (params (append `(("token" . ,slack/token)) params)) - (url (concat (file-name-as-directory slack/base-url) path))) - (request url - :type "GET" - :params params - :parser 'json-read - :success (cl-function - (lambda (&key data &allow-other-keys) - (funcall callback data)))))) - -(defun slack/post (path params &optional callback) - (let* ((params-callback (if (functionp params) `(() . ,params) (cons params callback))) - (params (car params-callback)) (callback (cdr params-callback)) - (url (concat (file-name-as-directory slack/base-url) path))) - (request url - :type "POST" - :data (json-encode params) - :headers `(("Content-Type" . "application/json") - ("Authorization" . ,(format "Bearer %s" slack/token))) - :success (cl-function - (lambda (&key data &allow-other-keys) - (funcall callback data)))))) - - -;;; -;;; Specific API endpoints -;;; - -;; Users - -(defun slack/users (cb) - "Returns users as (id . name) pairs" - (slack/get - "users.list" - (lambda (data) - (->> data - (assoc-default 'members) - ->list - (-map (lambda (user) - (cons (assoc-default 'id user) - (assoc-default 'real_name user)))) - (-filter #'cdr) - (funcall cb))))) - -(comment - (slack/get - "users.list" - (lambda (data) (setq response-data data))) - - (slack/users (lambda (data) (setq --users data))) - - ) - -;; Conversations - -(defun slack/conversation-types () - (->> - (list (when slack/include-public-channels "public_channel") - (when slack/include-private-channels "private_channel") - (when slack/include-im "im") - (when slack/include-mpim "mpim")) - (-filter #'identity) - (s-join ","))) - -(defun channel-label (chan users-alist) - (cond - ((json-truthy? (assoc-default 'is_channel chan)) - (format "#%s" (assoc-default 'name chan))) - ((json-truthy? (assoc-default 'is_im chan)) - (let ((user-id (assoc-default 'user chan))) - (format "Private message with %s" (assoc-default user-id users-alist)))) - ((json-truthy? (assoc-default 'is_mpim chan)) - (->> chan - (assoc-default 'purpose) - (assoc-default 'value))))) - -(defun slack/conversations (cb) - "Calls `cb' with (id . '((label . \"label\") '(topic . \"topic\") '(purpose . \"purpose\"))) pairs" - (slack/get - "conversations.list" - `(("types" . ,(slack/conversation-types)) - ("exclude-archived" . "true")) - (lambda (data) - (setq --data data) - (slack/users - (lambda (users) - (->> data - (assoc-default 'channels) - ->list - (-filter - (lambda (chan) (channel-label chan users))) - (-map - (lambda (chan) - (cons (assoc-default 'id chan) - `((label . ,(channel-label chan users)) - (topic . ,(->> chan - (assoc-default 'topic) - (assoc-default 'value))) - (purpose . ,(->> chan - (assoc-default 'purpose) - (assoc-default 'value))))))) - (funcall cb))))))) - -(comment - (slack/get - "conversations.list" - '(("types" . "public_channel,private_channel,im,mpim")) - (lambda (data) (setq response-data data))) - - (slack/get - "conversations.list" - '(("types" . "im")) - (lambda (data) (setq response-data data))) - - (slack/conversations - (lambda (convos) (setq --conversations convos))) - - ) - -;; Messages - -(cl-defun slack/post-message - (&key text channel-id (on-success #'identity)) - (slack/post "chat.postMessage" - `((text . ,text) - (channel . ,channel-id) - (as_user . t)) - on-success)) - -(comment - - (slack/post-message - :text "hi slackbot" - :channel-id slackbot-channel-id - :on-success (lambda (data) (setq resp data))) - - (-map (lambda (chan) (let ((label (assoc-default 'label (cdr chan))) - (id (car chan))) - (propertize label 'channel-id id))) - --conversations) - - ) - -;;; -;;; Posting code snippets to slack -;;; - -(defun prompt-for-channel (cb) - (slack/conversations - (lambda (conversations) - (setq testing (-map (lambda (chan) (let ((label (assoc-default 'label (cdr chan))) - (id (car chan))) - (propertize label 'channel-id id))) - conversations)) - (ivy-read - "Select channel: " - ;; TODO want to potentially use purpose / topic stuff here - (-map (lambda (chan) (let ((label (assoc-default 'label (cdr chan))) - (id (car chan))) - (propertize label 'channel-id id))) - conversations) - :history 'slack/channel-history - :action (lambda (selected) - (let ((channel-id (get-text-property 0 'channel-id selected))) - (funcall cb channel-id) - (message "Sent message to %s" selected)))))) - nil) - -(defun slack-send-code-snippet (&optional snippet-text) - (interactive) - (when-let ((snippet-text (or snippet-text - (buffer-substring-no-properties (mark) (point))))) - (prompt-for-channel - (lambda (channel-id) - (slack/post-message - :text (format "```\n%s```" snippet-text) - :channel-id channel-id))))) diff --git a/configs/shared/emacs/.emacs.d/wpc/casing.el b/configs/shared/emacs/.emacs.d/wpc/casing.el deleted file mode 100644 index 9f8e8a231851..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/casing.el +++ /dev/null @@ -1,46 +0,0 @@ -;; casing.el --- Helper functions for formatting text -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; These functions are intended to be bound to KBDs for daily use and -;; refactoring. - -;;; Code: - -;; todo - grab the string at point and replace it with the output of -;; each fn - -(defun caps->kebab (x) - "Change the casing of X from CAP_CASE to kebab-case." - (->> x - s-downcase - (s-replace "_" "-"))) - -(defun kebab->caps (x) - "Change the casing of X from CAP_CASE to kebab-case." - (->> x - s-upcase - (s-replace "-" "_"))) - -(defun lower->caps (x) - "Change the casing of X from lowercase to CAPS_CASE." - (->> x - s-upcase - (s-replace " " "_"))) - -(defun lower->kebab (x) - "Change the casing of X from lowercase to kebab-case" - (s-replace " " "-" x)) - -;;; Tests: - -(ert-deftest caps->kebab-test () - (should (string= (caps->kebab "CAPS_CASE_STRING") - "caps-case-string"))) - -(ert-deftest kebab->caps-test () - (should (string= (kebab->caps "kebab-case-string") - "KEBAB_CASE_STRING"))) - -(provide 'casing) -;;; casing.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/fs-functions.el b/configs/shared/emacs/.emacs.d/wpc/fs-functions.el deleted file mode 100644 index 9ca970c242c3..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/fs-functions.el +++ /dev/null @@ -1,24 +0,0 @@ -;;; fs-functions.el --- Functions to make working with the filesystem easier. -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; Hosts ergonomic functions for working with a filesystem. - -;;; Code: -(defun ensure-file-path (path) - "Ensure that a file and its directories in PATH exist. -Will error for inputs with a trailing slash." - (when (s-ends-with? "/" path) - (error (format "Input path has trailing slash: %s" path))) - (let ((dirs (->> path f-dirname f-split))) - (apply #'f-mkdir dirs) - (f-touch path))) - -(defun ensure-dir-path (path) - "Ensures that a directory and its ancestor directories in PATH exist." - (->> path - f-split - (apply #'f-mkdir))) - -(provide 'fs-functions) -;;; fs-functions.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/functions.el b/configs/shared/emacs/.emacs.d/wpc/functions.el deleted file mode 100644 index f734c13d9a4b..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/functions.el +++ /dev/null @@ -1,210 +0,0 @@ -;; functions.el --- Helper functions for my Emacs development -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; This file hopefully contains friendly APIs that making ELisp development more enjoyable. - -;;; Code: -(defun wpc/evil-window-vsplit-right () - (interactive) - (evil-window-vsplit) - (windmove-right)) - -(defun wpc/evil-window-split-down () - (interactive) - (evil-window-split) - (windmove-down)) - -(defun wpc/reindent-defun-and-align-clojure-map () - (interactive) - (call-interactively #'paredit-reindent-defun) - (call-interactively #'clojure-align)) - -(defun wpc/find-file () - "Prefer project-based file-finding if inside of project; otherwise gracefully fallback." - (interactive) - (with-current-buffer (current-buffer) - (if (projectile-project-p) - (call-interactively #'projectile-find-file) - (call-interactively #'find-file)))) - -(defun wpc/find-or-create-js-test () - (->> buffer-file-name - (s-chop-suffix ".js") - (s-append ".test.js") - (find-file))) - -(defun wpc/find-or-create-js-module () - (->> buffer-file-name - (s-chop-suffix ".test.js") - (s-append ".js") - (find-file))) - -(defun wpc/find-or-create-js-store () - (->> buffer-file-name - (s-replace "index.js" "store.js") - (find-file))) - -(defun wpc/find-or-create-js-component () - (->> buffer-file-name - (s-replace "store.js" "index.js") - (find-file))) - -(defun wpc/bind-ido-keys () - "Adds custom KBDs for ido. This function is recommended in the ido source code." - (define-key ido-completion-map (kbd "<tab>") #'ido-next-match) - (define-key ido-completion-map (kbd "<backtab>") #'ido-prev-match)) - -(defun wpc/toggle-between-js-test-and-module () - "Toggle between a Javascript test or module." - (interactive) - (if (s-ends-with? ".test.js" buffer-file-name) - (wpc/find-or-create-js-module) - (if (s-ends-with? ".js" buffer-file-name) - (wpc/find-or-create-js-test) - (message "Not in a Javascript file. Exiting...")))) - -(defun wpc/toggle-between-js-component-and-store () - "Toggle between a React component and its Redux store." - (interactive) - (if (s-ends-with? "index.js" buffer-file-name) - (wpc/find-or-create-js-store) - (if (or (s-ends-with? "store.js" buffer-file-name) - (s-ends-with? "store.test.js" buffer-file-name)) - (wpc/find-or-create-js-component) - (message "Not in a React/Redux file. Exiting...")))) - -(defun wpc/read-file-as-string (filename) - (with-temp-buffer - (insert-file-contents filename) - (s-trim (buffer-string)))) - -(defun wpc/create-snippet () - "Creates a window split and then opens the Yasnippet editor." - (interactive) - (evil-window-vsplit) - (call-interactively #'yas-new-snippet)) - -(defun wpc/find-file-split (filename) - "Creates a window split and then edits `filename'." - (interactive) - (evil-window-vsplit) - (find-file filename)) - -(defun wpc/jump-to-parent-file () - "Jumps to a React store or component's parent file. Useful for store or index file." - (interactive) - (-> buffer-file-name - f-dirname - (f-join "..") - (f-join (f-filename buffer-file-name)) - find-file)) - -(defun wpc/tmux-emacs-windmove (dir) - "Move windows in a Tmux-friendly way." - (let* ((dir->opts '((left . ("-L" . windmove-left)) - (right . ("-R" . windmove-right)) - (above . ("-U" . windmove-up)) - (below . ("-D" . windmove-down)))) - (opts (alist-get dir dir->opts)) - (tmux-opt (car opts)) - (emacs-fn (cdr opts))) - (if (window-in-direction dir) - (funcall emacs-fn) - (shell-command (format "tmux select-pane %s" tmux-opt))))) - -(defun wpc/tmux-emacs-windmove-left () - (interactive) - (wpc/tmux-emacs-windmove 'left)) - -(defun wpc/tmux-emacs-windmove-right () - (interactive) - (wpc/tmux-emacs-windmove 'right)) - -(defun wpc/tmux-emacs-windmove-up () - (interactive) - (wpc/tmux-emacs-windmove 'above)) - -(defun wpc/tmux-emacs-windmove-down () - (interactive) - (wpc/tmux-emacs-windmove 'below)) - -(defun wpc/get-window-by-buffername (buffername) - "Finds a window by the name of the buffer it's hosting." - (let ((buffer (get-buffer buffername))) - (when buffer - (get-buffer-window buffer)))) - -(defun wpc/add-earmuffs (x) - "Returns X surrounded by asterisks." - (format "*%s*" x)) - -(defun wpc/get-default-shell () - (or explicit-shell-file-name - (getenv "SHELL") - (getenv "ESHELL"))) - -(defun wpc/find-terminal-buffer () - (get-buffer (wpc/add-earmuffs wpc/terminal-name))) - -(defun wpc/find-terminal-window () - (wpc/get-window-by-buffername (wpc/add-earmuffs wpc/terminal-name))) - -(defun wpc/create-terminal-session () - (wpc/evil-window-vsplit-right) - (ansi-term (wpc/get-default-shell) wpc/terminal-name)) - -(defun wpc/toggle-terminal () - "Toggles a custom terminal session in Emacs." - (interactive) - (let ((window (wpc/find-terminal-window))) - (if window - (delete-window window) - (wpc/find-or-create-terminal)))) - -(defun wpc/find-or-create-terminal () - (let ((buffer (wpc/find-terminal-buffer))) - (if buffer - (display-buffer buffer) - (wpc/create-terminal-session)))) - -(defun wpc/put-file-name-on-clipboard () - "Put the current file name on the clipboard" - (interactive) - (let ((filename (if (equal major-mode 'dired-mode) - default-directory - (buffer-file-name)))) - (when filename - (with-temp-buffer - (insert filename) - (clipboard-kill-region (point-min) (point-max))) - (message filename)))) - -(defun wpc/evil-replace-under-point () - "Faster than typing %s//thing/g" - (interactive) - (save-excursion - (evil-ex (concat "%s/\\b" (symbol-name (symbol-at-point)) "\\b/")))) - -(defun wpc/disable-linum-mode () - "Convenience function defined to make adding hooks easier without a lambda." - (linum-mode -1)) - -(defun wpc/disable-company-mode () - "Convenience function defined to make adding hooks easier without a lambda." - (company-mode -1)) - -(defun wpc/toggle-term-mode () - "Toggle between term-line-mode and temr-char-mode." - (if (term-in-line-mode) - (term-char-mode) - (term-line-mode))) - -(defun buffer-dirname () - "Return the directory name of the current buffer as a string." - (->> buffer-file-name - f-dirname - f-filename)) - -(provide 'functions) -;;; functions.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/macros.el b/configs/shared/emacs/.emacs.d/wpc/macros.el deleted file mode 100644 index 02d7501b224d..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/macros.el +++ /dev/null @@ -1,28 +0,0 @@ -;;; macros.el --- Helpful variables for making my ELisp life more enjoyable -*- lexical-binding: t -*- -;; Authpr: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; This file contains helpful variables that I use in my ELisp development. - -;;; Code: -(defmacro xi (&rest FORMS) - `(lambda ,(--filter (s-contains? (symbol-name it) - (prin1-to-string FORMS)) - '(x1 x2 x3 x4 x5)) - ,FORMS)) - -(defmacro enable (mode) - "Helper for enabling MODE. Useful in `add-hook' calls." - `#'(lambda nil (,mode 1))) - -(defmacro disable (mode) - "Helper for disabling MODE. Useful in `add-hook' calls." - `#'(lambda nil (,mode -1))) - -(defmacro add-hooks (modes) - "Add multiple MODES for the CALLBACK." - `(dolist (mode ,modes) - (add-hook (symbol/ensure-hookified mode) ,callback))) - -(provide 'macros) -;;; macros.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-clojure.el b/configs/shared/emacs/.emacs.d/wpc/packages/wpc-clojure.el deleted file mode 100644 index 1939d3ecedb1..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-clojure.el +++ /dev/null @@ -1,51 +0,0 @@ -;;; clojure.el --- My Clojure preferences -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; Hosting my Clojure tooling preferences - -;;; Code: - -;; Helper functions -(defun wpc/buffer-name-for-clojure-mode (mode) - (let* ((project-name (projectile-project-name)) - (cljs-name (concat "*cider-repl CLJS " project-name "*")) - (clj-name (concat "*cider-repl " project-name "*"))) - (cond ((eq mode 'clojurescript-mode) cljs-name) - ((eq mode 'clojure-mode) clj-name) - ((eq mode 'clojurec-mode) cljs-name)))) - -(defun wpc/repl-function-for-clojure-mode (mode) - (let ((project-name (projectile-project-name)) - (cljs-fn #'cider-jack-in-clojurescript) - (clj-fn #'cider-jack-in)) - (cond ((eq mode 'clojurescript-mode) cljs-fn) - ((eq mode 'clojure-mode) clj-fn) - ((eq mode 'clojurec-mode) cljs-fn)))) - -(defun wpc/find-or-create-clojure-or-clojurescript-repl () - (interactive) - (with-current-buffer (current-buffer) - (let ((buffer-name (wpc/buffer-name-for-clojure-mode major-mode)) - (repl-function (wpc/repl-function-for-clojure-mode major-mode))) - (if (get-buffer buffer-name) - (switch-to-buffer buffer-name) - (funcall repl-function))))) - -(use-package cider - :config - (general-define-key - :keymaps 'cider-repl-mode-map - "C-l" #'cider-repl-clear-buffer - "C-u" #'kill-whole-line - "<up>" #'cider-repl-previous-input - "<down>" #'cider-repl-next-input - "C-c 'j" #'wpc/find-or-create-clojure-or-clojurescript-repl) - (setq cider-cljs-lein-repl - "(do (require 'figwheel-sidecar.repl-api) - (figwheel-sidecar.repl-api/start-figwheel!) - (figwheel-sidecar.repl-api/cljs-repl))" - cider-prompt-for-symbol nil)) - -(provide 'wpc-clojure) -;;; wpc-clojure.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-company.el b/configs/shared/emacs/.emacs.d/wpc/packages/wpc-company.el deleted file mode 100644 index e4507031a1e0..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-company.el +++ /dev/null @@ -1,24 +0,0 @@ -;;; company.el --- Autocompletion package, company, preferences -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; Hosts my company mode preferences - -;;; Code: - -;; autocompletion client -(use-package company - :config - (general-define-key - :keymaps 'company-active-map - "C-j" #'company-select-next - "C-n" #'company-select-next - "C-k" #'company-select-previous - "C-p" #'company-select-previous - "C-d" #'company-show-doc-buffer) - (setq company-idle-delay 0) - (setq company-minimum-prefix-length 2) - (global-company-mode)) - -(provide 'wpc-company) -;;; wpc-company.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-dired.el b/configs/shared/emacs/.emacs.d/wpc/packages/wpc-dired.el deleted file mode 100644 index 6639ea530604..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-dired.el +++ /dev/null @@ -1,22 +0,0 @@ -;;; dired.el --- My dired preferences -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; Hosts my attempts at configuring dired - -;;; Code: - -(require 'dired) -(general-nmap - :keymaps 'dired-mode-map - "c" #'find-file - "f" #'wpc/find-file - "-" #'dired-up-directory) -(general-unbind - :keymaps 'dired-mode-map - "s") -(general-add-hook 'dired-mode-hook (list (enable dired-hide-details-mode) - #'auto-revert-mode)) - -(provide 'wpc-dired) -;;; wpc-dired.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-docker.el b/configs/shared/emacs/.emacs.d/wpc/packages/wpc-docker.el deleted file mode 100644 index 270eaec6fe4c..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-docker.el +++ /dev/null @@ -1,16 +0,0 @@ -;;; docker.el --- Docker preferences -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; My Docker preferences and configuration - -;;; Code: - -(use-package docker - :config - (setenv "DOCKER_TLS_VERIFY" "1") - (setenv "DOCKER_HOST" "tcp://10.11.12.13:2376") - (setenv "DOCKER_MACHINE_NAME" "name")) - -(provide 'wpc-docker) -;;; wpc-docker.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-elixir.el b/configs/shared/emacs/.emacs.d/wpc/packages/wpc-elixir.el deleted file mode 100644 index fd3c178ebae8..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-elixir.el +++ /dev/null @@ -1,15 +0,0 @@ -;;; wpc-elixir.el --- Elixir / Erland configuration -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; My preferences for working with Elixir / Erlang projects - -;;; Code: -(use-package elixir-mode - :config - (general-add-hook 'elixir-mode-hook - (lambda () - (add-hook 'before-save-hook #'elixir-format nil t)))) - -(provide 'wpc-elixir) -;;; wpc-elixir.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-flycheck.el b/configs/shared/emacs/.emacs.d/wpc/packages/wpc-flycheck.el deleted file mode 100644 index d7bb834a6257..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-flycheck.el +++ /dev/null @@ -1,14 +0,0 @@ -;;; flycheck.el --- My flycheck configuration -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; Hosts my Flycheck preferences - -;;; Code: - -(use-package flycheck - :config - (global-flycheck-mode)) - -(provide 'wpc-flycheck) -;;; wpc-flycheck.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-haskell.el b/configs/shared/emacs/.emacs.d/wpc/packages/wpc-haskell.el deleted file mode 100644 index 6fc98b31e77f..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-haskell.el +++ /dev/null @@ -1,56 +0,0 @@ -;;; haskell.el --- My Haskell preferences -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; Hosts my Haskell development preferences - -;;; Code: - -;; Haskell support - -;; font-locking, glyph support, etc -(use-package haskell-mode - :config - (let ((m-symbols - '(("`mappend`" . "⊕") - ("<>" . "⊕")))) - (dolist (item m-symbols) (add-to-list 'haskell-font-lock-symbols-alist item))) - (setq haskell-font-lock-symbols t) - (add-hook 'before-save-hook #'haskell-align-imports)) - -;; LSP support -(use-package lsp-haskell - :after (haskell-mode) - :config - (setq lsp-haskell-process-path-hie "hie-wrapper") - (add-hook 'haskell-mode-hook #'lsp-haskell-enable) - (add-hook 'haskell-mode-hook #'flycheck-mode)) - -;; Test toggling -(defun haskell/module->test () - "Jump from a module to a test." - (let ((filename (->> buffer-file-name - (s-replace "/src/" "/test/") - (s-replace ".hs" "Test.hs") - find-file))) - (make-directory (f-dirname filename) t) - (find-file filename))) - -(defun haskell/test->module () - "Jump from a test to a module." - (let ((filename (->> buffer-file-name - (s-replace "/test/" "/src/") - (s-replace "Test.hs" ".hs") - ))) - (make-directory (f-dirname filename) t) - (find-file filename))) - -(defun haskell/test<->module () - "Toggle between test and module in Haskell." - (interactive) - (if (s-contains? "/src/" buffer-file-name) - (haskell/module->test) - (haskell/test->module))) - -(provide 'wpc-haskell) -;;; wpc-haskell.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-javascript.el b/configs/shared/emacs/.emacs.d/wpc/packages/wpc-javascript.el deleted file mode 100644 index d341c2b580db..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-javascript.el +++ /dev/null @@ -1,88 +0,0 @@ -;; wpc-javascript.el --- My Javascript preferences -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; This module hosts my Javascript tooling preferences - -;;; Code: - -;; Constants -(defconst wpc/js-hooks - '(js-mode-hook js2-mode-hook rjsx-mode-hook) - "All of the commonly used hooks for Javascript buffers.") - -(defconst wpc/frontend-hooks - (-insert-at 0 'css-mode-hook wpc/js-hooks) - "All of the commonly user hooks for frontend development.") - - -;; Helper functions -(defun wpc/insert-flow-annotation () - "Insert a flow type annotation to the beginning of a buffer." - (interactive) - (save-excursion - (goto-char (point-min)) - (insert "// @flow\n"))) - -;; frontend indentation settings -(setq js-indent-level 2 - css-indent-offset 2) - -;; ;; javascript -;; (evil-leader/set-key-for-mode 'rjsx-mode "t" #'wpc/toggle-between-js-test-and-module) -;; (evil-leader/set-key-for-mode 'rjsx-mode "x" #'wpc/toggle-between-js-component-and-store) -;; (evil-leader/set-key-for-mode 'rjsx-mode "u" #'wpc/jump-to-parent-file) - -;; Flow for Javascript -(use-package add-node-modules-path - :config - (general-add-hook wpc/js-hooks #'add-node-modules-path)) - -(use-package flow-minor-mode - :requires evil-leader - :config - (general-add-hook wpc/js-hooks #'flow-minor-mode) - (evil-leader/set-key-for-mode 'rjsx-mode "F" #'wpc/insert-flow-annotation)) - -(use-package web-mode - :mode "\\.html\\'" - :config - (setq web-mode-css-indent-offset 2) - (setq web-mode-code-indent-offset 2) - (setq web-mode-markup-indent-offset 2)) - -;; Shouldn't need this once LSP is setup properly -;; (use-package company-flow -;; :after (company) -;; :config -;; (add-to-list 'company-flow-modes 'rjsx-mode) -;; (add-to-list 'company-backends 'company-flow)) - -;; Shouldn't need this once LSP is setup properly -;; (use-package flycheck-flow -;; :after (flycheck) -;; :config -;; (flycheck-add-mode 'javascript-flow 'rjsx-mode) -;; (flycheck-add-mode 'javascript-flow 'flow-minor-mode) -;; (flycheck-add-mode 'javascript-eslint 'flow-minor-mode) -;; (flycheck-add-next-checker 'javascript-flow 'javascript-eslint)) - -;; JSX highlighting -(use-package rjsx-mode - :mode "\\.js\\'" - :config - (general-unbind rjsx-mode-map "<" ">" "C-d") - (general-nmap - :keymaps 'rjsx-mode-map - "K" #'flow-minor-type-at-pos) - (setq js2-mode-show-parse-errors nil - js2-mode-show-strict-warnings nil)) - -;; JS autoformatting -(use-package prettier-js - :after (rjsx-mode) - :config - (general-add-hook wpc/frontend-hooks #'prettier-js-mode)) - -(provide 'wpc-javascript) -;;; wpc-javascript.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-keybindings.el b/configs/shared/emacs/.emacs.d/wpc/packages/wpc-keybindings.el deleted file mode 100644 index a01505a041ef..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-keybindings.el +++ /dev/null @@ -1,139 +0,0 @@ -;;; keybindings.el --- My Evil preferences -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; This module hosts my Evil preferences -;; -;; Wish List: -;; - drop support for `evil-leader' library in favor of `general.el' -;; - restore support for concise (n <kbd> <function>) instead of `general-mmap' -;; - restore support for `general-unbind' - -;;; Code: - -(use-package evil - :init - (setq evil-want-integration nil) - (general-evil-setup) - :config - (general-mmap - :keymaps 'override - "RET" #'evil-goto-line - "H" #'evil-first-non-blank - "L" #'evil-end-of-line - "-" #'dired-jump - "sl" #'wpc/evil-window-vsplit-right - "sh" #'evil-window-vsplit - "sk" #'evil-window-split - "sj" #'wpc/evil-window-split-down) - (general-nmap - :keymaps 'override - "gd" #'xref-find-definitions) - (general-unbind 'motion "M-." "C-p") - (general-unbind 'normal "s" "M-.") - (general-unbind 'insert "C-d" "C-a" "C-e" "C-n" "C-p" "C-k") - (setq evil-symbol-word-search t) - (evil-mode 1)) - -;; evil keybindings -(use-package evil-collection - :after (evil) - :config - (evil-collection-init)) - -;; expose a leader key -(use-package evil-leader - :after (evil counsel) - :config - (global-evil-leader-mode) - (evil-leader/set-leader "<SPC>") - ;; global - (evil-leader/set-key - "i" #'counsel-semantic-or-imenu - "j" #'jump-to-register - "h" #'help - "a" #'wpc/toggle-terminal - "=" #'align - "p" #'flycheck-previous-error - "P" #'counsel-git-grep - "f" #'wpc/find-file - "n" #'flycheck-next-error - "N" #'smerge-next - "P" #'smerge-prev - "b" #'ivy-switch-buffer - "gs" #'magit-status - - "es" #'wpc/create-snippet - "ev" (lambda () (interactive) (wpc/find-file-split "~/.config/nvim/init.vim")) - "ee" (lambda () (interactive) (wpc/find-file-split "~/.emacs.d/init.el")) - "ez" (lambda () (interactive) (wpc/find-file-split "~/.zshrc")) - "ea" (lambda () (interactive) (wpc/find-file-split "~/aliases.zsh")) - "ef" (lambda () (interactive) (wpc/find-file-split "~/functions.zsh")) - "el" (lambda () (interactive) (wpc/find-file-split "~/variables.zsh")) - "ex" (lambda () (interactive) (wpc/find-file-split "~/.Xresources")) - "ei" (lambda () (interactive) (wpc/find-file-split "~/.config/i3/config.shared")) - "em" (lambda () (interactive) (wpc/find-file-split "~/.tmux.conf")) - - "B" #'magit-blame - "w" #'save-buffer - "x" #'evil-save-and-close - "W" #'save-all-buffers - "r" #'wpc/evil-replace-under-point - )) - -;; create comments easily -(use-package evil-commentary - :after (evil) - :config - (evil-commentary-mode)) - -;; evil surround -(use-package evil-surround - :after (evil) - :config - (global-evil-surround-mode 1)) - -(defun wpc/ensure-kbds (_ignore) - "Try to ensure that my keybindings retain priority over other minor modes." - (unless (eq (caar minor-mode-map-alist) 'wpc/kbds-minor-mode) - (let ((mykbds (assq 'wpc/kbds-minor-mode minor-mode-map-alist))) - (assq-delete-all 'wpc/kbds-minor-mode minor-mode-map-alist) - (add-to-list 'minor-mode-map-alist mykbds)))) - -;; Custom minor mode that ensures that my kbds are available no matter which -;; major or minor modes are active. -(add-hook 'after-load-functions #'wpc/ensure-kbds) - -(defvar wpc/kbds - (let ((map (make-sparse-keymap))) - (bind-keys :map map - ("M-q" . delete-window) - ("C-x C-;" . comment-or-uncomment-region) - ("C-x h" . help) - ("<s-return>" . toggle-frame-fullscreen) - ("<down-mouse-1>" . ffap-other-window) - ("M-h" . wpc/tmux-emacs-windmove-left) - ("M-l" . wpc/tmux-emacs-windmove-right) - ("M-k" . wpc/tmux-emacs-windmove-up) - ("M-j" . wpc/tmux-emacs-windmove-down) - ("M--" . wpc/evil-window-split-down) - ("M-\\" . wpc/evil-window-vsplit-right) - ("M-q" . delete-window)) - map) - "William Carroll's keybindings that should have the highest precedence.") - -(define-minor-mode wpc/kbds-minor-mode - "A minor mode so that my key settings override annoying major modes." - :init-value t - :lighter " wpc/kbds" - :keymap wpc/kbds) - -;; allow jk to escape -(use-package key-chord - :after (evil) - :config - (key-chord-mode 1) - (key-chord-define evil-insert-state-map "jk" 'evil-normal-state)) - -(provide 'wpc-keybindings) -;;; wpc-keybindings.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-lisp.el b/configs/shared/emacs/.emacs.d/wpc/packages/wpc-lisp.el deleted file mode 100644 index cebe7b265761..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-lisp.el +++ /dev/null @@ -1,48 +0,0 @@ -;;; lisp.el --- Generic LISP preferences -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; This hosts things like Paredit settings -;; -;; Here is some of the thinking behind some of the keybindings: -;; -;; slurp s -;; barf S -;; forward ) -;; backward ( -;; -;; Known concession: s and S eclipse Vim bindings. There is a precedent already -;; for eclipsing the s binding for window splitting. Shift-s feel appropriate -;; for barfing, since eclisping the b KBD feels less acceptable than eclisping -;; the s KBD. - -;;; Code: - -(defconst wpc/lisp-mode-hooks - '(emacs-lisp-mode-hook - clojure-mode-hook - clojurescript-mode-hook)) - -;; Elisp -(use-package elisp-slime-nav - :config - (general-add-hook 'emacs-lisp-mode #'ielm-mode)) - -;; paredit LISP editing -(use-package paredit - :config - (general-unbind - :keymaps 'paredit-mode-map - "C-j" - "M-q") - (general-nmap - :keymaps 'paredit-mode-map - "s)" #'paredit-forward-slurp-sexp - "s(" #'paredit-backward-slurp-sexp - "S)" #'paredit-forward-barf-sexp - "S(" #'paredit-backward-barf-sexp - "gr" #'paredit-raise-sexp) - (general-add-hook wpc/lisp-mode-hooks #'enable-paredit-mode)) - -(provide 'wpc-lisp) -;;; wpc-lisp.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-misc.el b/configs/shared/emacs/.emacs.d/wpc/packages/wpc-misc.el deleted file mode 100644 index e60b97323307..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-misc.el +++ /dev/null @@ -1,205 +0,0 @@ -;;; misc.el --- Hosting miscellaneous configuration -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; This is the home of any configuration that couldn't find a better home. - -;;; Code: - -;; disable custom variable entries from being written to ~/.emacs.d/init.el -(setq custom-file "~/.emacs.d/custom.el") -(load custom-file 'noerror) - -;; integrate Emacs with X11 clipboard -(setq x-select-enable-primary t) -(setq x-select-enable-clipboard t) -(general-def 'insert - "s-v" #'x-clipboard-yank - "C-S-v" #'x-clipboard-yank) - -;; transparently edit compressed files -(auto-compression-mode t) - -;; autowrap when over the fill-column -(add-hook 'fundamental-mode-hook 'turn-on-auto-fill) - -;; link to Emacs source code -(setq find-function-C-source-directory "~/programming/emacs/src") - -;; change emacs prompts from "yes or no" -> "y or n" -(fset 'yes-or-no-p 'y-or-n-p) - -;; open photos in Emacs -(auto-image-file-mode 1) - -;; disable line-wrapping -(setq-default truncate-lines 1) - -;; shell file indentation -(setq sh-basic-offset 2) -(setq sh-indentation 2) - -;; disable company mode when editing markdown -;; TODO: move this out of wpc-misc.el and into a later file to call -;; `(disable company-mode)' -(add-hook 'markdown-mode-hook (company-mode -1)) - -;; create file bookmarks -(set-register ?e '(file . "~/.emacs.d/wpc/packages")) -(set-register ?n '(file . "~/programming/nixify/configuration.nix")) -(set-register ?d '(file . "~/Dropbox/dotfiles")) -(set-register ?s '(file . "~/.slate.js")) -(set-register ?D '(file . "~/Dropbox")) -(set-register ?o '(file . "~/Dropbox/org/")) ;; TODO: change this to `(getenv "ORG_DIRECTORY")' - -(set-register ?v '(file . "~/.config/nvim/init.vim")) -(set-register ?e '(file . "~/.emacs.d/init.el")) -(set-register ?z '(file . "~/.zshrc")) -(set-register ?a '(file . "~/aliases.zsh")) -(set-register ?f '(file . "~/functions.zsh")) -(set-register ?l '(file . "~/variables.zsh")) -(set-register ?x '(file . "~/.Xresources")) -(set-register ?i '(file . "~/.config/i3/config.shared")) -(set-register ?m '(file . "~/.tmux.conf")) - -(set-register ?p `(file . ,wpc/current-project)) - -;; persist history etc b/w Emacs sessions -(setq desktop-save 'if-exists) -(desktop-save-mode 1) -(setq desktop-globals-to-save - (append '((extended-command-history . 30) - (file-name-history . 100) - (grep-history . 30) - (compile-history . 30) - (minibuffer-history . 50) - (query-replace-history . 60) - (read-expression-history . 60) - (regexp-history . 60) - (regexp-search-ring . 20) - (search-ring . 20) - (shell-command-history . 50) - tags-file-name - register-alist))) - -;; config Emacs to use $PATH values -(use-package exec-path-from-shell - :if (memq window-system '(mac ns)) - :config - (exec-path-from-shell-initialize)) - -;; Emacs autosave, backup, interlocking files -(setq auto-save-default nil - make-backup-files nil - create-lockfiles nil) - -;; ensure code wraps at 80 characters by default -(setq-default fill-column wpc/fill-column) - -(put 'narrow-to-region 'disabled nil) - -;; trim whitespace on save -(add-hook 'before-save-hook #'delete-trailing-whitespace) - -;; use tabs instead of spaces -(setq-default indent-tabs-mode nil) - -;; automatically follow symlinks -(setq vc-follow-symlinks t) - -;; fullscreen settings -(setq ns-use-native-fullscreen nil) - -;; auto-close parens, brackets, quotes -(electric-pair-mode 1) - -(use-package oauth2 - :init - ;; necessary to remove warnings: https://emacs.stackexchange.com/questions/37036/where-are-these-variables-defined-bytecomp-warnings - (defvar url-http-extra-headers ()) - (defvar oauth--token-data ()) - (defvar url-callback-function ()) - (defvar url-callback-arguments ())) - -; (use-package smex -; :config -; (general-define-key "M-x" #'smex) -; (general-add-hook 'ido-setup-hook #'wpc/bind-ido-keys) -; (smex-initialize)) - -(use-package flx-ido - :after (smex) - :config - (flx-ido-mode 1) - (setq ido-enable-flex-matching t - ido-use-faces nil)) - -(use-package swiper - :config - (general-define-key - "C-s" #'swiper - "C-r" #'swiper)) - -(use-package yasnippet - :config - (yas-global-mode 1)) - -(use-package ace-window - :config - (general-define-key "C-x o" #'ace-window) - (setq aw-keys '(?a ?s ?d ?f ?j ?k ?k ?\;))) - -(use-package projectile - :config - (projectile-mode t)) - -(use-package counsel - :config - (defun wpc/counsel-git-grep () - (interactive) - (let ((maybe-symbol (wpc/string-symbol-at-point))) - (if (string= maybe-symbol "nil") - (counsel-git-grep) - (counsel-git-grep nil maybe-symbol))))) - -;; search Google, Stackoverflow from within Emacs -(use-package engine-mode - :config - (defengine google - "http://www.google.com/search?ie=utf-8&oe=utf-8&q=%s" - :keybinding "g") - (defengine stack-overflow - "https://stackoverflow.com/search?q=%s" - :keybinding "s")) - -;; Microsoft's Language Server Protocol (LSP) -(use-package lsp-ui - :config - (add-hook 'lsp-mode-hook #'lsp-ui-mode)) -(use-package company-lsp - :config - (push 'company-lsp company-backends)) - -(defun wpc/frame-name () - "Return the name of the current frame." - (frame-parameter nil 'name)) - -;; Having difficulty starting the server using systemd or calling -;; `emacs --daemon' in ~/.profile, ~/.xsessionrc, and similar files. - -;; systemd has issues syncing the socket-name, so it becomes messy. I also -;; experienced strange initialization where things like wpc-org and other -;; modules wouldn't get loaded. -;; -;; Even if I resolved the socket-name resolution issue, I couldn't find an -;; elegant way to reuse GUI frames. GUIs for me have the advantage of supporting -;; True Color, support additional keys for KBDs (i.e. super), and aren't limited -;; by the terminal for rendering certain things. -;; -;; For these reasons, it seems preferable to start the server from here. I'm -;; considering starting emacs in my ~/.xsessionrc so that the server will be -;; running after X initializes. -(server-start) - -(provide 'wpc-misc) -;;; wpc-misc.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-nix.el b/configs/shared/emacs/.emacs.d/wpc/packages/wpc-nix.el deleted file mode 100644 index af439c442d63..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-nix.el +++ /dev/null @@ -1,12 +0,0 @@ -;;; wpc-nix.el --- Nix support -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; Configuration to support working with Nix. - -;;; Code: -(use-package nix-mode - :mode "\\.nix\\'") - -(provide 'wpc-nix) -;;; wpc-nix.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-org.el b/configs/shared/emacs/.emacs.d/wpc/packages/wpc-org.el deleted file mode 100644 index 03b52ba27247..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-org.el +++ /dev/null @@ -1,76 +0,0 @@ -;;; org.el --- My org preferences -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; Hosts my org mode preferences - -;;; Code: - -;; TODO: figure out how to nest this in (use-package org ...) -(setq org-capture-templates - `( - - ("w" "work" entry (file+headline - ,(f-join (getenv "ORG_DIRECTORY") "work.org") - "Tasks") - "* TODO %?") - - ("p" "personal" entry (file+headline - ,(f-join (getenv "ORG_DIRECTORY") "personal.org") - "Tasks") - "* TODO %? ") - - ("i" "ideas" entry (file+headline - ,(f-join (getenv "ORG_DIRECTORY") "ideas.org") - "Tasks") - "* %? ") - - ("s" "shopping list" entry (file+headline - ,(f-join (getenv "ORG_DIRECTORY") "shopping.org") - "Items") - "* TODO %? ") - - )) -(evil-set-initial-state 'org-mode 'insert) - -(use-package org - :config - (general-add-hook 'org-mode-hook - ;; TODO: consider supporting `(disable (list linum-mode company-mode))' - (list (disable linum-mode) - (disable company-mode))) - (general-define-key :prefix "C-c" - "l" #'org-store-link - "a" #'org-agenda - "c" #'org-capture) - (setq org-todo-keywords - '((sequence "TODO" "BLOCKED" "DONE"))) - (setq org-default-notes-file (f-join (getenv "ORG_DIRECTORY") "notes.org")) - (setq org-agenda-files (list (f-join (getenv "ORG_DIRECTORY") "work.org") - (f-join (getenv "ORG_DIRECTORY") "personal.org"))) - ;; TODO: troubleshoot why `wpc/kbds-minor-mode', `wpc/ensure-kbds' aren't - ;; enough to override the following KBDs. See this discussion for more context - ;; on where the idea came from: - ;; https://stackoverflow.com/questions/683425/globally-override-key-binding-in-emacs - (general-unbind 'normal org-mode-map "M-h" "M-j" "M-k" "M-l")) - -(use-package org-bullets - :after (org) - :config - (general-add-hook 'org-mode-hook (enable org-bullets-mode))) - -;; i3, `org-mode' integration -;; Heavily influenced by: https://somethingsomething.us/post/i3_and_orgmode/ -(defadvice org-switch-to-buffer-other-window - (after supress-window-splitting activate) - "Delete the extra window if we're in a capture frame." - (if (equal "org-protocol-capture" (wpc/frame-name)) - (delete-other-windows))) - -(add-hook 'org-capture-after-finalize-hook - (lambda () - (when (equal "org-protocol-capture" (wpc/frame-name)) - (delete-frame)))) - -(provide 'wpc-org) -;;; wpc-org.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-package.el b/configs/shared/emacs/.emacs.d/wpc/packages/wpc-package.el deleted file mode 100644 index 6f43330ecb1a..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-package.el +++ /dev/null @@ -1,27 +0,0 @@ -;;; package.el --- My package configuration -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; This module hosts all of the settings required to work with ELPA, -;; MELPA, QUELPA, and co. - -;;; Code: - -(require 'package) -(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/")) -(package-initialize) - -(unless (package-installed-p 'use-package) - (package-refresh-contents) - (package-install 'use-package)) -(eval-when-compile - (require 'use-package)) -(setq use-package-always-ensure t) -(use-package general) - -(add-to-list 'load-path "~/.emacs.d/vendor/") -(add-to-list 'load-path "~/.emacs.d/wpc/") -(add-to-list 'load-path "~/.emacs.d/wpc/packages") - -(provide 'wpc-package) -;;; wpc-package.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-terminal.el b/configs/shared/emacs/.emacs.d/wpc/packages/wpc-terminal.el deleted file mode 100644 index aa76fde6a16b..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-terminal.el +++ /dev/null @@ -1,22 +0,0 @@ -;;; terminal.el --- My cobbled together terminal -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; My attempts at creating a sane Emacs terminal -;; -;; This module previously contained more logic, which has since been stripped. -;; -;; If the variable `explicit-shell-file-name' is `nil', Emacs will use the value -;; for the $SHELL environment variable. When running on NixOS, since binaries -;; like `zsh' won't be available at `/bin/zsh' or other common places, we need -;; to ensure that `explicit-shell-file-name' remain `nil'. -;; -;; Wish List: -;; - prevent Emacs from asking: "Run program: /run/current-system/sw/bin/zsh" - -;;; Code: - -(setq wpc/terminal-name "wpc/terminal") - -(provide 'wpc-terminal) -;;; wpc-terminal.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-ui.el b/configs/shared/emacs/.emacs.d/wpc/packages/wpc-ui.el deleted file mode 100644 index 8cbcf3248f71..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-ui.el +++ /dev/null @@ -1,162 +0,0 @@ -;;; wpc-ui.el --- Any related to the UI/UX goes here -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; Hosts font settings, scrolling, color schemes. - -;;; Code: - -;; increase line height -(setq-default line-spacing 4) - -;; change font -(add-to-list 'default-frame-alist '(font . "Operator Mono Book-9")) - -(defconst wpc/font-size-step 10 - "The amount (%) by which to increase or decrease a font.") - -(defun wpc/increase-font () - "Increase font size." - (interactive) - (->> (face-attribute 'default :height) - (+ wpc/font-size-step) - (set-face-attribute 'default (selected-frame) :height))) - -(defun wpc/decrease-font () - "Decrease font size." - (interactive) - (->> (face-attribute 'default :height) - (+ (- wpc/font-size-step)) - (set-face-attribute 'default (selected-frame) :height))) - -(general-define-key "s-j" #'wpc/decrease-font) -(general-define-key "s-k" #'wpc/increase-font) - -;; smooth scrolling settings -(setq scroll-step 1 - scroll-conservatively 10000) - -;; theme mgt -(use-package cycle-themes - :after (doom-themes) - :config - ;; NOTE: may want to use `defconst' here - (setq wpc/doom-themes - (->> (custom-available-themes) - (-map #'symbol-name) - (-filter (-partial #'s-starts-with? "doom-")) - (-map #'intern))) - (setq cycle-themes-theme-list wpc/doom-themes)) - -;; clean up modeline -(use-package diminish - :after (yasnippet ivy which-key) - :config - (diminish 'evil-commentary-mode) - (diminish 'flycheck-mode "Flycheck") - (diminish 'company-mode "Company") - (diminish 'auto-revert-mode) - (diminish 'which-key-mode) - (diminish 'yas-minor-mode) - (diminish 'ivy-mode)) - -;; disable startup screen -(setq inhibit-startup-screen t) - -;; disable toolbar -(tool-bar-mode -1) - -;; enable line numbers -(general-add-hook '(prog-mode-hook - text-mode-hook - conf-mode-hook) - (enable linum-mode)) -;;(add-hook 'after-init-hook (lambda () (set-face-foreground 'linum "#da5468"))) - -;; set default buffer for Emacs -(setq initial-buffer-choice wpc/current-project) - -;; transparent Emacs -(set-frame-parameter (selected-frame) 'alpha '(90 . 90)) -(setq frame-transparent? t) - -(defun wpc/toggle-transparency () - "Toggle the frame transparency." - (interactive) - (set-frame-parameter (selected-frame) 'alpha '(90 . 90)) - (let ((alpha (if frame-transparent? 100 90))) - (set-frame-parameter (selected-frame) 'alpha `(,alpha . ,alpha))) - (setq frame-transparent? (not frame-transparent?))) - -(general-define-key "s-u" #'wpc/toggle-transparency) - -;; premium Emacs themes -(use-package doom-themes - :config - (setq doom-themes-enable-bold t - doom-themes-enable-italic t) - (load-theme 'doom-one t) - (doom-themes-visual-bell-config) - (doom-themes-org-config)) - -;; kbd discovery -(use-package which-key - :config - (setq which-key-idle-delay 0.25) - (which-key-mode)) - -;; completion framework -(use-package ivy - :config - (ivy-mode t)) - -;; icons for Ivy -(use-package all-the-icons-ivy - :after (ivy) - :config - (all-the-icons-ivy-setup)) - -;; disable menubar -(menu-bar-mode -1) -(when (string-equal system-type "darwin") - (setq ns-auto-hide-menu-bar t)) - -;; reduce noisiness of auto-revert-mode -(setq auto-revert-verbose nil) - -;; highlight lines that are over 100 characters long -(use-package whitespace - :config - (setq whitespace-line-column wpc/fill-column) - (setq whitespace-style '(face lines-tail)) - (add-hook 'prog-mode-hook #'whitespace-mode)) - - - -;; rebalance emacs windows after splits are created -(defadvice split-window-below (after rebalance-windows activate) - (balance-windows)) - -(defadvice split-window-right (after rebalance-windows activate) - (balance-windows)) - -(defadvice delete-window (after rebalance-window activate) - (balance-windows)) - -;; dirname/filename instead of filename<dirname> -(setq uniquify-buffer-name-style 'forward) - -;; highlight matching parens, brackets, etc -(show-paren-mode 1) - -;; hide the scroll-bars in the GUI -(scroll-bar-mode -1) - -;; GUI alerts in emacs -(use-package alert - :commands (alert) - :config - (setq alert-default-style 'notifier)) - -(provide 'wpc-ui) -;;; wpc-ui.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/string-functions.el b/configs/shared/emacs/.emacs.d/wpc/string-functions.el deleted file mode 100644 index 2ddd22b223c4..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/string-functions.el +++ /dev/null @@ -1,48 +0,0 @@ -;; functions.el --- String helper functions for my Emacs development -*- lexical-binding: t -*- -;; Author: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; String & Symbol helpers! - -;;; Code: - -;; Strings -(defun string/hookify (x) - "Append \"-hook\" to X." - (s-append "-hook" x)) - -(defun symbol->string (symbol) - "Alias for `symbol-name' with SYMBOL, since I can never remember that -function's name." - (symbol-name symbol)) - -(defun string->symbol (string) - "Alias for `intern' for STRING since I can never remember that function's - name." - (intern string)) - -(defun string/ensure-hookified (x) - "Ensure that X has \"-hook\" appended to it." - (if (s-ends-with? "-hook" x) - x - (string/hookify x))) - -;; Symbols -(defun symbol/as-string (callback x) - "Treat the symbol, X, as a string while applying CALLBACK to it. -Coerce back to a symbol on the way out." - (->> x - symbol-name - callback - intern)) - -(defun symbol/hookify (x) - "Append \"-hook\" to X when X is a symbol." - (symbol/as-string #'string/hookify x)) - -(defun symbol/ensure-hookified (x) - "Ensure that X has \"-hook\" appended to it when X is a symbol." - (symbol/as-string #'string/ensure-hookified x)) - -(provide 'string-functions) -;;; string-functions.el ends here diff --git a/configs/shared/emacs/.emacs.d/wpc/variables.el b/configs/shared/emacs/.emacs.d/wpc/variables.el deleted file mode 100644 index 39007a6493fb..000000000000 --- a/configs/shared/emacs/.emacs.d/wpc/variables.el +++ /dev/null @@ -1,26 +0,0 @@ -;;; variables.el --- Helpful variables for making my ELisp life more enjoyable -*- lexical-binding: t -*- -;; Authpr: William Carroll <wpcarro@gmail.com> - -;;; Commentary: -;; This file contains helpful variables that I use in my ELisp development. - -;;; Code: - -(defconst wpc/current-project - "~/programming" - "Variable holding the directory for my currently active project.") - -(defvar wpc/mouse-kbds - '([mouse-1] [down-mouse-1] [drag-mouse-1] [double-mouse-1] [triple-mouse-1] - [mouse-2] [down-mouse-2] [drag-mouse-2] [double-mouse-2] [triple-mouse-2] - [mouse-3] [down-mouse-3] [drag-mouse-3] [double-mouse-3] [triple-mouse-3] - [mouse-4] [down-mouse-4] [drag-mouse-4] [double-mouse-4] [triple-mouse-4] - [mouse-5] [down-mouse-5] [drag-mouse-5] [double-mouse-5] [triple-mouse-5]) - "This variable stores all of the mouse-related keybindings that Emacs recognizes.") - -(defconst wpc/fill-column - 80 - "Variable used to set the defaults for wrapping, highlighting, etc.") - -(provide 'variables) -;;; variables.el ends here |