| @ -0,0 +1,12 @@ | |||
| # For more information visit http://editorconfig.org/ | |||
| root = true | |||
| [*] | |||
| end_of_line = lf | |||
| insert_final_newline = true | |||
| trim_trailing_whitespace = true | |||
| indent_style = space | |||
| indent_size = 2 | |||
| [*.go,.gitmodules,Makefile] | |||
| indent_style = tab | |||
| @ -0,0 +1,48 @@ | |||
| /zsh/antibody | |||
| local.sh | |||
| # Created by https://www.gitignore.io/api/emacs | |||
| ### Emacs ### | |||
| # -*- mode: gitignore; -*- | |||
| *~ | |||
| \#*\# | |||
| /.emacs.desktop | |||
| /.emacs.desktop.lock | |||
| *.elc | |||
| auto-save-list | |||
| tramp | |||
| .\#* | |||
| # Org-mode | |||
| .org-id-locations | |||
| *_archive | |||
| # flymake-mode | |||
| *_flymake.* | |||
| # eshell files | |||
| /eshell/history | |||
| /eshell/lastdir | |||
| # elpa packages | |||
| /elpa/ | |||
| # reftex files | |||
| *.rel | |||
| # AUCTeX auto folder | |||
| /auto/ | |||
| # cask packages | |||
| .cask/ | |||
| dist/ | |||
| # Flycheck | |||
| flycheck_*.el | |||
| # server auth directory | |||
| /server/ | |||
| # projectiles files | |||
| .projectile | |||
| @ -0,0 +1,15 @@ | |||
| [submodule "tmux/tpm/tmux-current-pane-hostname"] | |||
| path = tmux/tpm/tmux-current-pane-hostname | |||
| url = https://github.com/soyuka/tmux-current-pane-hostname | |||
| [submodule "tmux/tpm/tmux-prefix-highlight"] | |||
| path = tmux/tpm/tmux-prefix-highlight | |||
| url = https://github.com/tmux-plugins/tmux-prefix-highlight | |||
| [submodule "tmux/tpm/tmux-sensible"] | |||
| path = tmux/tpm/tmux-sensible | |||
| url = https://github.com/tmux-plugins/tmux-sensible | |||
| [submodule "tmux/tpm/tmux-yank"] | |||
| path = tmux/tpm/tmux-yank | |||
| url = https://github.com/tmux-plugins/tmux-yank | |||
| [submodule "tmux/tpm/tpm"] | |||
| path = tmux/tpm/tpm | |||
| url = https://github.com/tmux-plugins/tpm | |||
| @ -0,0 +1,13 @@ | |||
| .*\.sh | |||
| .*\.example | |||
| \.DS_Store | |||
| ^/README\..* | |||
| ^/install | |||
| ^/Alpine | |||
| ^/Brewfile | |||
| ^/Debian | |||
| ^/Ubuntu | |||
| ^/Void | |||
| ^/antibody | |||
| ^/bin | |||
| ^/tpm | |||
| @ -0,0 +1,90 @@ | |||
| MAKEFLAGS+=--no-builtin-rules | |||
| SHELL:=/usr/bin/env bash | |||
| # Default list of exclude modules | |||
| ifndef EXCLUDE | |||
| # EXCLUDE:=go,java | |||
| endif | |||
| # Functions | |||
| packages_from_file=\ | |||
| $(patsubst %/$1,%$(if $2,/$2,),\ | |||
| $(filter $(wildcard */$1),$(addsuffix /$1,$(packages)))) | |||
| # Search for packages, ensuring that OS packages are first with any filters | |||
| # http://blog.jgc.org/2007/06/escaping-comma-and-space-in-gnu-make.html | |||
| # [backup] http://archive.is/XYuEV | |||
| ,:=, | |||
| space:=$(null) $(null) | |||
| $(space):= | |||
| $(space)+= | |||
| os:=$(shell source helpers && echo $$OS) | |||
| gui:=$(shell source helpers && echo $$GUI) | |||
| os_packages:=macos manjaro ubuntu | |||
| packages:=\ | |||
| $(filter $(os_packages),$(os))\ | |||
| $(filter-out $(os_packages),$(subst /,,$(wildcard */))) | |||
| ifdef EXCLUDE | |||
| packages:=$(filter-out $(subst $(,),$( ),$(EXCLUDE)),$(packages)) | |||
| endif | |||
| ifdef INCLUDE | |||
| packages:=$(filter $(subst $(,),$( ),$(INCLUDE)),$(packages)) | |||
| endif | |||
| # Search for specific files based on package | |||
| installers:=$(call packages_from_file,install) | |||
| stows:=$(call packages_from_file,.stow-local-ignore) | |||
| envs:=\ | |||
| $(foreach p,$(packages),\ | |||
| $(sort\ | |||
| $(patsubst %/,%,$(dir\ | |||
| $(wildcard $p/*.sh))))) | |||
| # Establish rules | |||
| installer_rules:=$(addsuffix /install,$(installers)) | |||
| .PHONY: help clean auto install symlink update $(installer_rules) | |||
| .SUFFIXES: | |||
| # | |||
| # Tasks | |||
| # https://blog.sneawo.com/blog/2017/06/13/makefile-help-target/ | |||
| # [backup] http://archive.is/XFLAz | |||
| # | |||
| help: | |||
| @echo | |||
| @echo '=== OS' | |||
| @echo "$(os)" | |||
| @echo | |||
| @echo '=== Packages' | |||
| @echo "Install - $(sort $(installers))" | |||
| @echo "Symlink - $(sort $(stows))" | |||
| @echo "Shell - $(sort $(envs))" | |||
| @echo | |||
| @echo '=== Variables' | |||
| @echo 'INCLUDE - Packages to only include: $(INCLUDE)' | |||
| @echo 'EXCLUDE - Packages to exclude: $(EXCLUDE)' | |||
| @echo | |||
| @echo '=== Commands' | |||
| @egrep '^(.+)\:\ .*##\ (.+)' ${MAKEFILE_LIST} | sed 's/:.*## / - /' | |||
| @echo | |||
| clean: ## Clean up | |||
| @printf '==> ' | |||
| stow -D $(stows) | |||
| auto: update install symlink ## Run update, install, and symlink | |||
| install: $(installer_rules) ## Install required dependencies | |||
| symlink: ## Symlink configuration files | |||
| @printf '==> ' | |||
| stow --target="$$HOME" $(stows) | |||
| update: ## Update dotfiles | |||
| @printf '==> ' | |||
| git pull --rebase --autostash | |||
| @printf '==> ' | |||
| git submodule update --init --remote | |||
| # | |||
| # Internal tasks | |||
| # | |||
| $(installer_rules): %/install: | |||
| @printf '==> ' | |||
| $@ | |||
| @ -0,0 +1,31 @@ | |||
| colors: | |||
| primary: | |||
| background: '#282c34' | |||
| foreground: '#abb2bf' | |||
| cursor: | |||
| text: CellBackground | |||
| cursor: '#528bff' | |||
| selection: | |||
| text: CellForeground | |||
| background: '#3e4451' | |||
| normal: | |||
| black: '#5c6370' | |||
| red: '#e06c75' | |||
| green: '#98c379' | |||
| yellow: '#e5c07b' | |||
| blue: '#61afef' | |||
| magenta: '#c678dd' | |||
| cyan: '#56b6c2' | |||
| white: '#828997' | |||
| font: | |||
| normal: | |||
| family: VictorMono Nerd Font | |||
| size: 14.0 | |||
| window: | |||
| dynamic_padding: true | |||
| decorations: none | |||
| padding: | |||
| x: 6 | |||
| y: 6 | |||
| @ -0,0 +1 @@ | |||
| ../.editorconfig | |||
| @ -0,0 +1 @@ | |||
| ../.stow-local-ignore | |||
| @ -0,0 +1,20 @@ | |||
| #!/usr/bin/env false | |||
| # Add color highlighting | |||
| alias ls='ls --color=auto' | |||
| alias grep='grep --color=auto' | |||
| alias egrep='egrep --color=auto' | |||
| alias fgrep='fgrep --color=auto' | |||
| # Customized greps | |||
| alias hgrep='history 0 | grep' | |||
| alias psgrep='ps aux | grep -v grep | grep -i -e VSZ -e' | |||
| # Additional helpers | |||
| alias la='ls -lah' | |||
| alias mkdir='mkdir -pv' | |||
| alias path='echo -e ${PATH//:/\\n}' | |||
| function dotf { (cd $DOTFILES && "$@"); } | |||
| function touch { mkdir $(dirname "$1") && command touch "$1" } | |||
| @ -0,0 +1,6 @@ | |||
| #!/usr/bin/env bash | |||
| cd "$(dirname "$0")" | |||
| source ../helpers | |||
| mkdir -p "$HOME/.config" | |||
| @ -0,0 +1,19 @@ | |||
| [apply] | |||
| whitespace = fix | |||
| [core] | |||
| excludesfile = ~/.gitignore | |||
| editor = vim | |||
| [difftool] | |||
| prompt = false | |||
| [help] | |||
| autocorrect = 1 | |||
| [include] | |||
| path = ~/.gitconfig.local | |||
| [mergetool] | |||
| keepBackup = false | |||
| [push] | |||
| default = simple | |||
| [remote] | |||
| pushDefault = origin | |||
| [status] | |||
| submoduleSummary = true | |||
| @ -0,0 +1,195 @@ | |||
| _minted-* | |||
| # Created by https://www.toptal.com/developers/gitignore/api/vim,linux,emacs,macos,windows,sublimetext,visualstudiocode | |||
| # Edit at https://www.toptal.com/developers/gitignore?templates=vim,linux,emacs,macos,windows,sublimetext,visualstudiocode | |||
| ### Emacs ### | |||
| # -*- mode: gitignore; -*- | |||
| *~ | |||
| \#*\# | |||
| /.emacs.desktop | |||
| /.emacs.desktop.lock | |||
| *.elc | |||
| auto-save-list | |||
| tramp | |||
| .\#* | |||
| # Org-mode | |||
| .org-id-locations | |||
| *_archive | |||
| # flymake-mode | |||
| *_flymake.* | |||
| # eshell files | |||
| /eshell/history | |||
| /eshell/lastdir | |||
| # elpa packages | |||
| /elpa/ | |||
| # reftex files | |||
| *.rel | |||
| # AUCTeX auto folder | |||
| /auto/ | |||
| # cask packages | |||
| .cask/ | |||
| dist/ | |||
| # Flycheck | |||
| flycheck_*.el | |||
| # server auth directory | |||
| /server/ | |||
| # projectiles files | |||
| .projectile | |||
| # directory configuration | |||
| .dir-locals.el | |||
| # network security | |||
| /network-security.data | |||
| ### Linux ### | |||
| # temporary files which can be created if a process still has a handle open of a deleted file | |||
| .fuse_hidden* | |||
| # KDE directory preferences | |||
| .directory | |||
| # Linux trash folder which might appear on any partition or disk | |||
| .Trash-* | |||
| # .nfs files are created when an open file is removed but is still being accessed | |||
| .nfs* | |||
| ### macOS ### | |||
| # General | |||
| .DS_Store | |||
| .AppleDouble | |||
| .LSOverride | |||
| # Icon must end with two \r | |||
| Icon | |||
| # Thumbnails | |||
| ._* | |||
| # Files that might appear in the root of a volume | |||
| .DocumentRevisions-V100 | |||
| .fseventsd | |||
| .Spotlight-V100 | |||
| .TemporaryItems | |||
| .Trashes | |||
| .VolumeIcon.icns | |||
| .com.apple.timemachine.donotpresent | |||
| # Directories potentially created on remote AFP share | |||
| .AppleDB | |||
| .AppleDesktop | |||
| Network Trash Folder | |||
| Temporary Items | |||
| .apdisk | |||
| ### SublimeText ### | |||
| # Cache files for Sublime Text | |||
| *.tmlanguage.cache | |||
| *.tmPreferences.cache | |||
| *.stTheme.cache | |||
| # Workspace files are user-specific | |||
| *.sublime-workspace | |||
| # Project files should be checked into the repository, unless a significant | |||
| # proportion of contributors will probably not be using Sublime Text | |||
| # *.sublime-project | |||
| # SFTP configuration file | |||
| sftp-config.json | |||
| sftp-config-alt*.json | |||
| # Package control specific files | |||
| Package Control.last-run | |||
| Package Control.ca-list | |||
| Package Control.ca-bundle | |||
| Package Control.system-ca-bundle | |||
| Package Control.cache/ | |||
| Package Control.ca-certs/ | |||
| Package Control.merged-ca-bundle | |||
| Package Control.user-ca-bundle | |||
| oscrypto-ca-bundle.crt | |||
| bh_unicode_properties.cache | |||
| # Sublime-github package stores a github token in this file | |||
| # https://packagecontrol.io/packages/sublime-github | |||
| GitHub.sublime-settings | |||
| ### Vim ### | |||
| # Swap | |||
| [._]*.s[a-v][a-z] | |||
| !*.svg # comment out if you don't need vector files | |||
| [._]*.sw[a-p] | |||
| [._]s[a-rt-v][a-z] | |||
| [._]ss[a-gi-z] | |||
| [._]sw[a-p] | |||
| # Session | |||
| Session.vim | |||
| Sessionx.vim | |||
| # Temporary | |||
| .netrwhist | |||
| # Auto-generated tag files | |||
| tags | |||
| # Persistent undo | |||
| [._]*.un~ | |||
| ### VisualStudioCode ### | |||
| .vscode/* | |||
| !.vscode/settings.json | |||
| !.vscode/tasks.json | |||
| !.vscode/launch.json | |||
| !.vscode/extensions.json | |||
| *.code-workspace | |||
| # Local History for Visual Studio Code | |||
| .history/ | |||
| ### VisualStudioCode Patch ### | |||
| # Ignore all local history of files | |||
| .history | |||
| .ionide | |||
| ### Windows ### | |||
| # Windows thumbnail cache files | |||
| Thumbs.db | |||
| Thumbs.db:encryptable | |||
| ehthumbs.db | |||
| ehthumbs_vista.db | |||
| # Dump file | |||
| *.stackdump | |||
| # Folder config file | |||
| [Dd]esktop.ini | |||
| # Recycle Bin used on file shares | |||
| $RECYCLE.BIN/ | |||
| # Windows Installer files | |||
| *.cab | |||
| *.msi | |||
| *.msix | |||
| *.msm | |||
| *.msp | |||
| # Windows shortcuts | |||
| *.lnk | |||
| # End of https://www.toptal.com/developers/gitignore/api/vim,linux,emacs,macos,windows,sublimetext,visualstudiocode | |||
| @ -0,0 +1,11 @@ | |||
| # -*- mode: gitconfig -*- | |||
| [user] | |||
| name = USER_NAME | |||
| email = USER_EMAIL | |||
| [credential] | |||
| helper = CREDENTIAL_HELPER | |||
| [github] | |||
| user = USER_NAME | |||
| # [url "git@github.com:"] | |||
| # pushInsteadOf = https://github.com/ | |||
| @ -0,0 +1 @@ | |||
| ../.stow-local-ignore | |||
| @ -0,0 +1,23 @@ | |||
| #!/usr/bin/env bash | |||
| cd "$(dirname "$0")" | |||
| source ../helpers | |||
| if [[ -f $HOME/.gitconfig.local ]]; then exit; fi | |||
| echo '--- Gathering localized Git configuration data' | |||
| credential_helper=cache | |||
| if [[ "$OS" == macos ]]; then | |||
| credential_helper=osxkeychain | |||
| fi | |||
| printf '[git] user.name: ' | |||
| read -e user_name | |||
| printf '[git] user.email: ' | |||
| read -e user_email | |||
| echo '--- Building .gitconfig.local' | |||
| sed \ | |||
| -e "s/USER_NAME/$user_name/g" \ | |||
| -e "s/USER_EMAIL/$user_email/g" \ | |||
| -e "s/CREDENTIAL_HELPER/$credential_helper/g" \ | |||
| .gitconfig.local.example > $HOME/.gitconfig.local | |||
| @ -0,0 +1,80 @@ | |||
| #!/usr/bin/env bash | |||
| unset GUI | |||
| if [[ "$(uname -s 2>/dev/null)" == Darwin ]]; then | |||
| OS=macos | |||
| GUI=1 | |||
| elif [[ "$(lsb_release -i -s 2>/dev/null)" == Ubuntu ]]; then | |||
| OS=ubuntu | |||
| if dpkg -l ubuntu-desktop &>/dev/null; then GUI=1; fi | |||
| elif [[ "$(lsb_release -i -s 2>/dev/null)" == ManjaroLinux ]]; then | |||
| OS=manjaro | |||
| if dpkg -l ubuntu-desktop &>/dev/null; then GUI=1; fi | |||
| elif [[ "$(lsb_release -i -s 2>/dev/null)" == Debian ]]; then | |||
| OS=debian | |||
| # TODO detect GUI support in debian here | |||
| else | |||
| OS=unknown | |||
| fi | |||
| # Install dependencies based on file system | |||
| function install_deps { | |||
| # For macOS, just use Homebrew | |||
| if [[ "$OS" == macos ]]; then | |||
| if [[ -f Brewfile ]]; then | |||
| echo '--- Installing dependencies via Homebrew' | |||
| brew bundle | |||
| fi | |||
| return | |||
| fi | |||
| # Read dependencies | |||
| local deps | |||
| case "$OS" in | |||
| debian) | |||
| if [[ ! -f Debian ]]; then return; fi | |||
| mapfile -t deps < Debian | |||
| ;; | |||
| ubuntu) | |||
| if [[ ! -f Ubuntu ]]; then return; fi | |||
| mapfile -t deps < Ubuntu | |||
| ;; | |||
| *) | |||
| echo "!!! Unsupported OS to install dependencies: $OS" | |||
| return 1 | |||
| ;; | |||
| esac | |||
| # Filter dependencies based on criteria | |||
| local exclude | |||
| local cleanup | |||
| if [[ -n "$GUI" ]]; then | |||
| exclude=NOGUI | |||
| cleanup=GUI | |||
| else | |||
| exclude=GUI | |||
| cleanup=NOGUI | |||
| fi | |||
| deps=${deps[*]//*\($exclude\)/} | |||
| deps=${deps//\($cleanup\)/} | |||
| # Execute | |||
| case $OS in | |||
| debian | ubuntu) | |||
| if ! dpkg-query -s $deps &>/dev/null; then | |||
| echo '--- Installing dependencies via apt' | |||
| sudo apt -y install $deps | |||
| fi | |||
| ;; | |||
| esac | |||
| if [[ $? -ne 0 ]]; then | |||
| echo '!!! Failed to install dependencies' | |||
| exit 1 | |||
| fi | |||
| } | |||
| # Remove functions used only for installation | |||
| function cleanup_helpers { | |||
| unset -f cleanup_helpers | |||
| unset -f install_deps | |||
| } | |||
| @ -0,0 +1,877 @@ | |||
| { | |||
| "global": { | |||
| "check_for_updates_on_startup": true, | |||
| "show_in_menu_bar": true, | |||
| "show_profile_name_in_menu_bar": true | |||
| }, | |||
| "profiles": [ | |||
| { | |||
| "complex_modifications": { | |||
| "parameters": { | |||
| "basic.simultaneous_threshold_milliseconds": 50, | |||
| "basic.to_delayed_action_delay_milliseconds": 500, | |||
| "basic.to_if_alone_timeout_milliseconds": 1000, | |||
| "basic.to_if_held_down_threshold_milliseconds": 500, | |||
| "mouse_motion_to_scroll.speed": 100 | |||
| }, | |||
| "rules": [ | |||
| { | |||
| "description": "Change caps_lock to control if pressed with other keys, to escape if pressed alone.", | |||
| "manipulators": [ | |||
| { | |||
| "from": { | |||
| "key_code": "caps_lock", | |||
| "modifiers": { | |||
| "optional": [ | |||
| "any" | |||
| ] | |||
| } | |||
| }, | |||
| "to": [ | |||
| { | |||
| "key_code": "left_control" | |||
| } | |||
| ], | |||
| "to_if_alone": [ | |||
| { | |||
| "key_code": "escape" | |||
| } | |||
| ], | |||
| "type": "basic" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "description": "Change Control+Shift+h/j/k/l to Arrows", | |||
| "manipulators": [ | |||
| { | |||
| "from": { | |||
| "key_code": "h", | |||
| "modifiers": { | |||
| "mandatory": [ | |||
| "left_control", | |||
| "left_shift" | |||
| ] | |||
| } | |||
| }, | |||
| "to": [ | |||
| { | |||
| "key_code": "left_arrow" | |||
| } | |||
| ], | |||
| "type": "basic" | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "j", | |||
| "modifiers": { | |||
| "mandatory": [ | |||
| "left_control", | |||
| "left_shift" | |||
| ] | |||
| } | |||
| }, | |||
| "to": [ | |||
| { | |||
| "key_code": "down_arrow" | |||
| } | |||
| ], | |||
| "type": "basic" | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "k", | |||
| "modifiers": { | |||
| "mandatory": [ | |||
| "left_control", | |||
| "left_shift" | |||
| ] | |||
| } | |||
| }, | |||
| "to": [ | |||
| { | |||
| "key_code": "up_arrow" | |||
| } | |||
| ], | |||
| "type": "basic" | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "l", | |||
| "modifiers": { | |||
| "mandatory": [ | |||
| "left_control", | |||
| "left_shift" | |||
| ] | |||
| } | |||
| }, | |||
| "to": [ | |||
| { | |||
| "key_code": "right_arrow" | |||
| } | |||
| ], | |||
| "type": "basic" | |||
| } | |||
| ] | |||
| } | |||
| ] | |||
| }, | |||
| "devices": [], | |||
| "fn_function_keys": [ | |||
| { | |||
| "from": { | |||
| "key_code": "f1" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "display_brightness_decrement" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f2" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "display_brightness_increment" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f3" | |||
| }, | |||
| "to": { | |||
| "key_code": "mission_control" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f4" | |||
| }, | |||
| "to": { | |||
| "key_code": "launchpad" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f5" | |||
| }, | |||
| "to": { | |||
| "key_code": "illumination_decrement" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f6" | |||
| }, | |||
| "to": { | |||
| "key_code": "illumination_increment" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f7" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "rewind" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f8" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "play_or_pause" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f9" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "fastforward" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f10" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "mute" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f11" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "volume_decrement" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f12" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "volume_increment" | |||
| } | |||
| } | |||
| ], | |||
| "name": "Default", | |||
| "parameters": { | |||
| "delay_milliseconds_before_open_device": 1000 | |||
| }, | |||
| "selected": true, | |||
| "simple_modifications": [ | |||
| { | |||
| "from": { | |||
| "key_code": "backslash" | |||
| }, | |||
| "to": { | |||
| "key_code": "delete_or_backspace" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "delete_or_backspace" | |||
| }, | |||
| "to": { | |||
| "key_code": "backslash" | |||
| } | |||
| } | |||
| ], | |||
| "virtual_hid_keyboard": { | |||
| "caps_lock_delay_milliseconds": 0, | |||
| "country_code": 0, | |||
| "keyboard_type": "ansi", | |||
| "mouse_key_xy_scale": 100 | |||
| } | |||
| }, | |||
| { | |||
| "complex_modifications": { | |||
| "parameters": { | |||
| "basic.simultaneous_threshold_milliseconds": 50, | |||
| "basic.to_delayed_action_delay_milliseconds": 500, | |||
| "basic.to_if_alone_timeout_milliseconds": 1000, | |||
| "basic.to_if_held_down_threshold_milliseconds": 500, | |||
| "mouse_motion_to_scroll.speed": 100 | |||
| }, | |||
| "rules": [] | |||
| }, | |||
| "devices": [], | |||
| "fn_function_keys": [ | |||
| { | |||
| "from": { | |||
| "key_code": "f1" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "display_brightness_decrement" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f2" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "display_brightness_increment" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f3" | |||
| }, | |||
| "to": { | |||
| "key_code": "mission_control" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f4" | |||
| }, | |||
| "to": { | |||
| "key_code": "launchpad" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f5" | |||
| }, | |||
| "to": { | |||
| "key_code": "illumination_decrement" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f6" | |||
| }, | |||
| "to": { | |||
| "key_code": "illumination_increment" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f7" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "rewind" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f8" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "play_or_pause" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f9" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "fastforward" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f10" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "mute" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f11" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "volume_decrement" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f12" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "volume_increment" | |||
| } | |||
| } | |||
| ], | |||
| "name": "Ergodox", | |||
| "parameters": { | |||
| "delay_milliseconds_before_open_device": 1000 | |||
| }, | |||
| "selected": false, | |||
| "simple_modifications": [ | |||
| { | |||
| "from": { | |||
| "key_code": "f16" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "scan_previous_track" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f17" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "play_or_pause" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f18" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "scan_next_track" | |||
| } | |||
| } | |||
| ], | |||
| "virtual_hid_keyboard": { | |||
| "caps_lock_delay_milliseconds": 0, | |||
| "country_code": 0, | |||
| "keyboard_type": "ansi", | |||
| "mouse_key_xy_scale": 100 | |||
| } | |||
| }, | |||
| { | |||
| "complex_modifications": { | |||
| "parameters": { | |||
| "basic.simultaneous_threshold_milliseconds": 50, | |||
| "basic.to_delayed_action_delay_milliseconds": 500, | |||
| "basic.to_if_alone_timeout_milliseconds": 1000, | |||
| "basic.to_if_held_down_threshold_milliseconds": 500, | |||
| "mouse_motion_to_scroll.speed": 100 | |||
| }, | |||
| "rules": [ | |||
| { | |||
| "description": "Change control to escape if pressed alone.", | |||
| "manipulators": [ | |||
| { | |||
| "from": { | |||
| "key_code": "left_control", | |||
| "modifiers": { | |||
| "optional": [ | |||
| "any" | |||
| ] | |||
| } | |||
| }, | |||
| "to": [ | |||
| { | |||
| "key_code": "left_control" | |||
| } | |||
| ], | |||
| "to_if_alone": [ | |||
| { | |||
| "key_code": "escape" | |||
| } | |||
| ], | |||
| "type": "basic" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "description": "Change Control+Shift+h/j/k/l to Arrows", | |||
| "manipulators": [ | |||
| { | |||
| "from": { | |||
| "key_code": "h", | |||
| "modifiers": { | |||
| "mandatory": [ | |||
| "left_control", | |||
| "left_shift" | |||
| ] | |||
| } | |||
| }, | |||
| "to": [ | |||
| { | |||
| "key_code": "left_arrow" | |||
| } | |||
| ], | |||
| "type": "basic" | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "j", | |||
| "modifiers": { | |||
| "mandatory": [ | |||
| "left_control", | |||
| "left_shift" | |||
| ] | |||
| } | |||
| }, | |||
| "to": [ | |||
| { | |||
| "key_code": "down_arrow" | |||
| } | |||
| ], | |||
| "type": "basic" | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "k", | |||
| "modifiers": { | |||
| "mandatory": [ | |||
| "left_control", | |||
| "left_shift" | |||
| ] | |||
| } | |||
| }, | |||
| "to": [ | |||
| { | |||
| "key_code": "up_arrow" | |||
| } | |||
| ], | |||
| "type": "basic" | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "l", | |||
| "modifiers": { | |||
| "mandatory": [ | |||
| "left_control", | |||
| "left_shift" | |||
| ] | |||
| } | |||
| }, | |||
| "to": [ | |||
| { | |||
| "key_code": "right_arrow" | |||
| } | |||
| ], | |||
| "type": "basic" | |||
| } | |||
| ] | |||
| } | |||
| ] | |||
| }, | |||
| "devices": [], | |||
| "fn_function_keys": [ | |||
| { | |||
| "from": { | |||
| "key_code": "f1" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "display_brightness_decrement" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f2" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "display_brightness_increment" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f3" | |||
| }, | |||
| "to": { | |||
| "key_code": "mission_control" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f4" | |||
| }, | |||
| "to": { | |||
| "key_code": "launchpad" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f5" | |||
| }, | |||
| "to": { | |||
| "key_code": "illumination_decrement" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f6" | |||
| }, | |||
| "to": { | |||
| "key_code": "illumination_increment" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f7" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "rewind" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f8" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "play_or_pause" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f9" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "fastforward" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f10" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "mute" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f11" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "volume_decrement" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f12" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "volume_increment" | |||
| } | |||
| } | |||
| ], | |||
| "name": "HHKB", | |||
| "parameters": { | |||
| "delay_milliseconds_before_open_device": 1000 | |||
| }, | |||
| "selected": false, | |||
| "simple_modifications": [ | |||
| { | |||
| "from": { | |||
| "key_code": "escape" | |||
| }, | |||
| "to": { | |||
| "key_code": "grave_accent_and_tilde" | |||
| } | |||
| } | |||
| ], | |||
| "virtual_hid_keyboard": { | |||
| "caps_lock_delay_milliseconds": 0, | |||
| "country_code": 0, | |||
| "keyboard_type": "ansi", | |||
| "mouse_key_xy_scale": 100 | |||
| } | |||
| }, | |||
| { | |||
| "complex_modifications": { | |||
| "parameters": { | |||
| "basic.simultaneous_threshold_milliseconds": 50, | |||
| "basic.to_delayed_action_delay_milliseconds": 500, | |||
| "basic.to_if_alone_timeout_milliseconds": 1000, | |||
| "basic.to_if_held_down_threshold_milliseconds": 500, | |||
| "mouse_motion_to_scroll.speed": 100 | |||
| }, | |||
| "rules": [ | |||
| { | |||
| "description": "Change caps_lock to control if pressed with other keys, to escape if pressed alone.", | |||
| "manipulators": [ | |||
| { | |||
| "from": { | |||
| "key_code": "caps_lock", | |||
| "modifiers": { | |||
| "optional": [ | |||
| "any" | |||
| ] | |||
| } | |||
| }, | |||
| "to": [ | |||
| { | |||
| "key_code": "left_control" | |||
| } | |||
| ], | |||
| "to_if_alone": [ | |||
| { | |||
| "key_code": "escape" | |||
| } | |||
| ], | |||
| "type": "basic" | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| "description": "Change Control+Shift+h/j/k/l to Arrows", | |||
| "manipulators": [ | |||
| { | |||
| "from": { | |||
| "key_code": "h", | |||
| "modifiers": { | |||
| "mandatory": [ | |||
| "left_control", | |||
| "left_shift" | |||
| ] | |||
| } | |||
| }, | |||
| "to": [ | |||
| { | |||
| "key_code": "left_arrow" | |||
| } | |||
| ], | |||
| "type": "basic" | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "j", | |||
| "modifiers": { | |||
| "mandatory": [ | |||
| "left_control", | |||
| "left_shift" | |||
| ] | |||
| } | |||
| }, | |||
| "to": [ | |||
| { | |||
| "key_code": "down_arrow" | |||
| } | |||
| ], | |||
| "type": "basic" | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "k", | |||
| "modifiers": { | |||
| "mandatory": [ | |||
| "left_control", | |||
| "left_shift" | |||
| ] | |||
| } | |||
| }, | |||
| "to": [ | |||
| { | |||
| "key_code": "up_arrow" | |||
| } | |||
| ], | |||
| "type": "basic" | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "l", | |||
| "modifiers": { | |||
| "mandatory": [ | |||
| "left_control", | |||
| "left_shift" | |||
| ] | |||
| } | |||
| }, | |||
| "to": [ | |||
| { | |||
| "key_code": "right_arrow" | |||
| } | |||
| ], | |||
| "type": "basic" | |||
| } | |||
| ] | |||
| } | |||
| ] | |||
| }, | |||
| "devices": [], | |||
| "fn_function_keys": [ | |||
| { | |||
| "from": { | |||
| "key_code": "f1" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "display_brightness_decrement" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f2" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "display_brightness_increment" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f3" | |||
| }, | |||
| "to": { | |||
| "key_code": "mission_control" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f4" | |||
| }, | |||
| "to": { | |||
| "key_code": "launchpad" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f5" | |||
| }, | |||
| "to": { | |||
| "key_code": "illumination_decrement" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f6" | |||
| }, | |||
| "to": { | |||
| "key_code": "illumination_increment" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f7" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "rewind" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f8" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "play_or_pause" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f9" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "fastforward" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f10" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "mute" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f11" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "volume_decrement" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "f12" | |||
| }, | |||
| "to": { | |||
| "consumer_key_code": "volume_increment" | |||
| } | |||
| } | |||
| ], | |||
| "name": "Model M", | |||
| "parameters": { | |||
| "delay_milliseconds_before_open_device": 1000 | |||
| }, | |||
| "selected": false, | |||
| "simple_modifications": [ | |||
| { | |||
| "from": { | |||
| "key_code": "backslash" | |||
| }, | |||
| "to": { | |||
| "key_code": "delete_or_backspace" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "delete_or_backspace" | |||
| }, | |||
| "to": { | |||
| "key_code": "backslash" | |||
| } | |||
| }, | |||
| { | |||
| "from": { | |||
| "key_code": "left_option" | |||
| }, | |||
| "to": { | |||
| "key_code": "left_command" | |||
| } | |||
| } | |||
| ], | |||
| "virtual_hid_keyboard": { | |||
| "caps_lock_delay_milliseconds": 0, | |||
| "country_code": 0, | |||
| "keyboard_type": "ansi", | |||
| "mouse_key_xy_scale": 100 | |||
| } | |||
| } | |||
| ] | |||
| } | |||
| @ -0,0 +1,59 @@ | |||
| # -*- mode: conf -*- | |||
| # | |||
| # General | |||
| # | |||
| shift + cmd - r : skhd -r; launchctl kickstart -k "gui/${UID}/homebrew.mxcl.yabai" | |||
| # | |||
| # Applications | |||
| # | |||
| shift + cmd - space : alacritty | |||
| # | |||
| # Window management | |||
| # | |||
| # https://github.com/koekeishiya/yabai/issues/113#issuecomment-511055425 | |||
| cmd - space : yabai -m window --focus "$(yabai -m query --windows | jq -re "sort_by(.display, .space, .frame.x, .frame.y, .id) | map(select(.subrole != \"AXUnknown\")) | reverse | nth(index(map(select(.focused == 1))) - 1).id")" | |||
| ctrl + cmd - space : yabai -m window --focus "$(yabai -m query --windows | jq -re "sort_by(.display, .space, .frame.x, .frame.y, .id) | map(select(.subrole != \"AXUnknown\")) | nth(index(map(select(.focused == 1))) - 1).id")" | |||
| cmd - return : yabai -m window --toggle zoom-fullscreen | |||
| cmd - h : yabai -m window --focus west | |||
| cmd - j : yabai -m window --focus south | |||
| cmd - k : yabai -m window --focus north | |||
| cmd - l : yabai -m window --focus east | |||
| ctrl + cmd - h : yabai -m window --warp west | |||
| ctrl + cmd - j : yabai -m window --warp south | |||
| ctrl + cmd - k : yabai -m window --warp north | |||
| ctrl + cmd - l : yabai -m window --warp east | |||
| shift + cmd - h : yabai -m window --swap west | |||
| shift + cmd - j : yabai -m window --swap south | |||
| shift + cmd - k : yabai -m window --swap north | |||
| shift + cmd - l : yabai -m window --swap east | |||
| # | |||
| # Space management | |||
| # | |||
| cmd - 1 : yabai -m space --focus 1 | |||
| cmd - 2 : yabai -m space --focus 2 | |||
| cmd - 3 : yabai -m space --focus 3 | |||
| cmd - 4 : yabai -m space --focus 4 | |||
| cmd - 5 : yabai -m space --focus 5 | |||
| cmd - 6 : yabai -m space --focus 6 | |||
| cmd - 7 : yabai -m space --focus 7 | |||
| cmd - 8 : yabai -m space --focus 8 | |||
| cmd - 9 : yabai -m space --focus 9 | |||
| cmd - 0 : yabai -m space --focus recent | |||
| shift + cmd - 1 : yabai -m window --space 1; yabai -m space --focus 1 | |||
| shift + cmd - 2 : yabai -m window --space 2; yabai -m space --focus 2 | |||
| shift + cmd - 3 : yabai -m window --space 3; yabai -m space --focus 3 | |||
| shift + cmd - 4 : yabai -m window --space 4; yabai -m space --focus 4 | |||
| shift + cmd - 5 : yabai -m window --space 5; yabai -m space --focus 5 | |||
| shift + cmd - 6 : yabai -m window --space 6; yabai -m space --focus 6 | |||
| shift + cmd - 7 : yabai -m window --space 7; yabai -m space --focus 7 | |||
| shift + cmd - 8 : yabai -m window --space 8; yabai -m space --focus 8 | |||
| shift + cmd - 9 : yabai -m window --space 9; yabai -m space --focus 9 | |||
| @ -0,0 +1,38 @@ | |||
| #!/usr/bin/env sh | |||
| # scripting-addition | |||
| sudo yabai --load-sa | |||
| yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa" | |||
| # global settings | |||
| yabai -m config mouse_follows_focus off | |||
| yabai -m config focus_follows_mouse off | |||
| yabai -m config window_placement second_child | |||
| yabai -m config window_topmost off | |||
| yabai -m config window_shadow off | |||
| yabai -m config window_opacity on | |||
| yabai -m config window_opacity_duration 0.0 | |||
| yabai -m config active_window_opacity 1.0 | |||
| yabai -m config normal_window_opacity 0.75 | |||
| yabai -m config window_border on | |||
| yabai -m config window_border_width 6 | |||
| yabai -m config active_window_border_color 0xff828997 | |||
| yabai -m config normal_window_border_color 0xff282c34 | |||
| yabai -m config insert_feedback_color 0xffd75f5f | |||
| yabai -m config split_ratio 0.50 | |||
| yabai -m config auto_balance on | |||
| yabai -m config mouse_modifier cmd | |||
| yabai -m config mouse_action1 move | |||
| yabai -m config mouse_action2 resize | |||
| yabai -m config mouse_drop_action swap | |||
| # general space settings | |||
| yabai -m config layout bsp | |||
| yabai -m config top_padding 24 | |||
| yabai -m config bottom_padding 24 | |||
| yabai -m config left_padding 24 | |||
| yabai -m config right_padding 24 | |||
| yabai -m config window_gap 12 | |||
| # Floating applications | |||
| yabai -m rule --add app="System Preferences" manage=off | |||
| @ -0,0 +1 @@ | |||
| ../.stow-local-ignore | |||
| @ -0,0 +1,50 @@ | |||
| # -*- mode: ruby -*- | |||
| tap 'homebrew/command-not-found' | |||
| tap 'homebrew/cask-fonts' | |||
| tap 'koekeishiya/formulae' | |||
| brew 'git' | |||
| brew 'gnupg2' | |||
| brew 'jq' | |||
| brew 'mas' | |||
| brew 'skhd' | |||
| brew 'stow' | |||
| brew 'trash' | |||
| brew 'tree' | |||
| brew 'vim' | |||
| brew 'yabai' | |||
| brew 'font-pt-sans-narrow' | |||
| brew 'font-victor-mono-nerd-font' | |||
| # GNU tools | |||
| # https://gist.github.com/skyzyx/3438280b18e4f7c490db8a2a2ca0b9da | |||
| brew 'autoconf' | |||
| brew 'bash' | |||
| brew 'coreutils' | |||
| brew 'diffutils' | |||
| brew 'findutils' | |||
| brew 'flex' | |||
| brew 'gawk' | |||
| brew 'gnu-indent' | |||
| brew 'gnu-sed' | |||
| brew 'gnu-tar' | |||
| brew 'gnu-which' | |||
| brew 'gpatch' | |||
| brew 'grep' | |||
| brew 'gzip' | |||
| brew 'less' | |||
| brew 'm4' | |||
| brew 'make' | |||
| brew 'watch' | |||
| brew 'wdiff' | |||
| brew 'wget' | |||
| cask_args appdir: '~/Applications' | |||
| cask 'alacritty' | |||
| cask 'android-file-transfer' | |||
| cask 'cursorcerer' | |||
| cask 'iterm2' | |||
| cask 'karabiner-elements' | |||
| cask 'librewolf' | |||
| @ -0,0 +1,6 @@ | |||
| #!/usr/bin/env false | |||
| if [[ "$OS" == macos ]] && type /usr/local/bin/brew &>/dev/null; then | |||
| # Restore | |||
| unset -f /usr/libexec/path_helper | |||
| fi | |||
| @ -0,0 +1,15 @@ | |||
| #!/usr/bin/env false | |||
| if [[ "$OS" == macos ]] && type /usr/local/bin/brew &>/dev/null; then | |||
| eval `/usr/libexec/path_helper -s` | |||
| brew_prefix="$(/usr/local/bin/brew --prefix)" | |||
| for p in $brew_prefix/opt/*/libexec/gnubin; do | |||
| export PATH="$p:$PATH" | |||
| done | |||
| unset brew_prefix | |||
| export PATH="/usr/local/sbin:$PATH" | |||
| export HOMEBREW_CASK_OPTS="--appdir=~/Applications" | |||
| # MacOS calls this in zprofile, temporarily hijack it | |||
| function /usr/libexec/path_helper {} | |||
| fi | |||
| @ -0,0 +1,51 @@ | |||
| #!/usr/bin/env bash | |||
| cd "$(dirname "$0")" | |||
| source ../helpers | |||
| if [[ "$OS" != macos ]]; then | |||
| echo '!!! This script is only available for macOS' | |||
| exit 1 | |||
| fi | |||
| if ! type brew &>/dev/null; then | |||
| echo '--- Installing Homebrew' | |||
| /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" | |||
| if ! type brew &>/dev/null; then | |||
| echo '!!! Failed to install Homebrew' | |||
| exit 1 | |||
| fi | |||
| fi | |||
| brew analytics off | |||
| install_deps | |||
| # https://eclecticlight.co/2019/08/15/global-defaults-in-macos-mojave/ | |||
| echo '--- Setting OS X preferences' | |||
| chflags nohidden ~/Library | |||
| defaults write -g ApplePressAndHoldEnabled -bool false | |||
| defaults write -g KeyRepeat -int 0 | |||
| defaults write -g InitialKeyRepeat -int 0 | |||
| defaults write -g NSAutomaticCapitalizationEnabled -bool false | |||
| defaults write -g NSAutomaticDashSubstitutionEnabled -bool false | |||
| defaults write -g NSAutomaticPeriodSubstitutionEnabled -bool false | |||
| defaults write -g NSAutomaticQuoteSubstitutionEnabled -bool false | |||
| defaults write -g NSAutomaticSpellingCorrectionEnabled -bool false | |||
| defaults write -g NSAutomaticTextCompletionEnabled -bool false | |||
| defaults write -g NSDocumentSaveNewDocumentsToCloud -bool false | |||
| defaults write -g WebAutomaticSpellingCorrectionEnabled -bool false | |||
| defaults write -g WebKitDeveloperExtras -bool true | |||
| defaults write -g com.apple.sound.beep.flash -bool false | |||
| defaults write -g com.apple.swipescrolldirection -bool false | |||
| defaults write com.apple.Finder FXPreferredViewStyle Nlsv | |||
| defaults write com.apple.screencapture disable-shadow true | |||
| defaults write com.apple.Safari ShowFavoritesBar -bool false | |||
| defaults write com.apple.Safari IncludeInternalDebugMenu -bool true | |||
| defaults write com.apple.Safari IncludeDevelopMenu -bool true | |||
| defaults write com.apple.Safari WebKitDeveloperExtrasEnabledPreferenceKey -bool true | |||
| defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled -bool true | |||
| if [[ ! -e "$HOME/iCloud" ]]; then | |||
| echo '--- Adding symlink to iCloud' | |||
| ln -s "$HOME/Library/Mobile Documents/com~apple~CloudDocs" "$HOME/iCloud" | |||
| fi | |||
| @ -0,0 +1,6 @@ | |||
| Host * | |||
| ControlMaster auto | |||
| ControlPath ~/.ssh/socket/%r@%h:%p | |||
| ControlPersist 5s | |||
| Include ~/.ssh/config.local | |||
| @ -0,0 +1 @@ | |||
| ../.stow-local-ignore | |||
| @ -0,0 +1,3 @@ | |||
| # -*- mode: ruby -*- | |||
| brew 'keychain' | |||
| @ -0,0 +1,10 @@ | |||
| #!/usr/bin/env bash | |||
| cd "$(dirname "$0")" | |||
| source ../helpers | |||
| install_deps | |||
| # Set up .ssh and permissions | |||
| mkdir -p "$HOME/.ssh/socket" | |||
| chmod 700 "$HOME/.ssh" | |||
| @ -0,0 +1 @@ | |||
| ../.stow-local-ignore | |||
| @ -0,0 +1,122 @@ | |||
| # | |||
| # General | |||
| # | |||
| set -g mouse on | |||
| set -g base-index 1 | |||
| set -g pane-base-index 1 | |||
| set -g renumber-windows on | |||
| # | |||
| # Keybinds | |||
| # | |||
| set -sg escape-time 0 | |||
| set -g repeat-time 500 | |||
| bind r source-file ~/.tmux.conf | |||
| # Undo keybinds | |||
| unbind '$' | |||
| unbind '"' | |||
| unbind d | |||
| unbind ( | |||
| unbind ) | |||
| unbind & | |||
| unbind % | |||
| unbind o | |||
| unbind [ | |||
| unbind ] | |||
| unbind z | |||
| unbind C-b | |||
| # Change prefix key | |||
| set -g prefix C-f | |||
| bind C-f set status | |||
| # Pane/window manipulation | |||
| bind -r h select-pane -L | |||
| bind -r j select-pane -D | |||
| bind -r k select-pane -U | |||
| bind -r l select-pane -R | |||
| bind -r H resize-pane -L 2 | |||
| bind -r J resize-pane -D 2 | |||
| bind -r K resize-pane -U 2 | |||
| bind -r L resize-pane -R 2 | |||
| bind n new-window | |||
| bind N new-session | |||
| bind X kill-window | |||
| bind m resize-pane -Z | |||
| bind -r C-j next-window | |||
| bind -r C-k previous-window | |||
| bind s split-window -v -c '#{pane_current_path}' | |||
| bind S split-window -v -f -c '#{pane_current_path}' | |||
| bind v split-window -h -c '#{pane_current_path}' | |||
| bind V split-window -h -f -c '#{pane_current_path}' | |||
| # Vim settings | |||
| set -g mode-keys vi | |||
| bind c copy-mode | |||
| bind p paste-buffer | |||
| bind \; command-prompt | |||
| bind -T copy-mode-vi Escape send -X cancel | |||
| bind -T copy-mode-vi 'v' send -X begin-selection | |||
| bind -T copy-mode-vi 'y' send -X copy-selection-and-cancel | |||
| # | |||
| # Appearance | |||
| # | |||
| set -g allow-rename off | |||
| set -g status-position top | |||
| set -g status-left ' ' | |||
| set -g status-right '#{prefix_highlight} ' | |||
| set -g window-status-format ' #I ' | |||
| set -g window-status-current-format '[#I]' | |||
| set -g status-style bold | |||
| set -g status-fg default | |||
| set -g status-bg default | |||
| set -g message-style reverse | |||
| # | |||
| # Remote sessions support | |||
| # https://medium.freecodecamp.org/tmux-in-practice-local-and-nested-remote-tmux-sessions-4f7ba5db8795 | |||
| # | |||
| bind -T root F12 \ | |||
| set prefix None \;\ | |||
| set key-table off \;\ | |||
| set status-attr default \;\ | |||
| set status-fg colour242 \;\ | |||
| if -F '#{pane_in_mode}' 'send-keys -X cancel' \;\ | |||
| refresh-client -S | |||
| bind -T off F12 \ | |||
| set -u prefix \;\ | |||
| set -u key-table \;\ | |||
| set status-attr bold \;\ | |||
| set status-fg default \;\ | |||
| refresh-client -S | |||
| # | |||
| # TPM plugins | |||
| # | |||
| set -g @plugin 'tmux-plugins/tpm' | |||
| set -g @plugin 'tmux-plugins/tmux-sensible' | |||
| set -g @plugin 'tmux-plugins/tmux-prefix-highlight' | |||
| set -g @prefix_highlight_copy_prompt 'COPY' | |||
| set -g @prefix_highlight_prefix_prompt 'TMUX' | |||
| set -g @prefix_highlight_show_copy_mode 'on' | |||
| if-shell '[[ "$OS" != macos ]]' \ | |||
| 'set -g @plugin "tmux-plugins/tmux-yank"' | |||
| if-shell '[ -z "$SSH_CONNECTION" ] || [ -n "$SSH_ROOT" ]' \ | |||
| '\ | |||
| set -g status-position bottom ;\ | |||
| set -g status-right "#{prefix_highlight} #U@#H " ;\ | |||
| set -g @plugin "soyuka/tmux-current-pane-hostname" ;\ | |||
| ' | |||
| # | |||
| # Custom configuration | |||
| # | |||
| if-shell '[ -f ~/.tmux.conf.local ]' \ | |||
| 'source-file ~/.tmux.conf.local' | |||
| # | |||
| # TPM bootstrap | |||
| # | |||
| run '$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm' | |||
| @ -0,0 +1,4 @@ | |||
| # -*- mode: ruby -*- | |||
| brew 'reattach-to-user-namespace' | |||
| brew 'tmux' | |||
| @ -0,0 +1,9 @@ | |||
| #!/usr/bin/env false | |||
| if [[ -n "$TMUX" ]]; then | |||
| function tmuxn { tmux new-window "$*"; } | |||
| function tmuxs { tmux split-window -v -c '#{pane_current_path}' "$*"; } | |||
| function tmuxsf { tmux split-window -v -f -c '#{pane_current_path}' "$*"; } | |||
| function tmuxv { tmux split-window -h -c '#{pane_current_path}' "$*"; } | |||
| function tmuxvf { tmux split-window -h -f -c '#{pane_current_path}' "$*"; } | |||
| fi | |||
| @ -0,0 +1,3 @@ | |||
| #!/usr/bin/env false | |||
| export TMUX_PLUGIN_MANAGER_PATH="$DOTFILES/tmux/tpm" | |||
| @ -0,0 +1,6 @@ | |||
| #!/usr/bin/env bash | |||
| cd "$(dirname "$0")" | |||
| source ../helpers | |||
| install_deps | |||
| @ -0,0 +1 @@ | |||
| Subproject commit 6bb3c95250f8120d8b072f46a807d2678ecbc97c | |||
| @ -0,0 +1 @@ | |||
| Subproject commit 15acc6172300bc2eb13c81718dc53da6ae69de4f | |||
| @ -0,0 +1 @@ | |||
| Subproject commit 989d09249e9389604a68d281c999978f6231431b | |||
| @ -0,0 +1 @@ | |||
| ../.stow-local-ignore | |||
| @ -0,0 +1 @@ | |||
| clear | |||
| @ -0,0 +1,17 @@ | |||
| export DOTFILES=$(cd "$(dirname "$HOME/$(readlink $HOME/.zshenv)")" && cd .. && pwd) | |||
| source "$DOTFILES/helpers" | |||
| cleanup_helpers | |||
| # Load env files | |||
| typeset -U config_files | |||
| config_files=($DOTFILES/**/*.sh) | |||
| for file in ${(M)config_files:#*/env.sh}; do | |||
| source "$file" | |||
| done | |||
| unset config_files | |||
| # Load .local file at the end for post configurations | |||
| if [ -e "$HOME/.zshenv.local" ]; then | |||
| source "$HOME/.zshenv.local" | |||
| fi | |||
| @ -0,0 +1,67 @@ | |||
| # Start tmux if not running already, plus verify it works | |||
| if (( $+commands[tmux] )) && [[ -z "$TMUX" ]] && ! [[ -z "$RUN_TMUX" ]]; then | |||
| tmux -V >/dev/null | |||
| if [[ $? -eq 0 ]]; then | |||
| session=default | |||
| if [[ -n "$SSH_CONNECTION" ]]; then | |||
| session=ssh | |||
| elif [[ -n "$DISPLAY" ]]; then | |||
| session=gui | |||
| fi | |||
| exec tmux -2 new-session -A -s $session | |||
| exit | |||
| fi | |||
| fi | |||
| # Set up antibody | |||
| if (( $+commands[antibody] )); then | |||
| autoload -Uz compinit | |||
| compinit | |||
| export ANTIBODY_HOME="$DOTFILES/zsh/antibody" | |||
| antibody_script="$DOTFILES/zsh/local.sh" | |||
| antibody_plugins="$ANTIBODY_HOME/plugins" | |||
| antibody_local="$HOME/.antibody" | |||
| if ! [[ -f "$antibody_script" ]]; then | |||
| antibody_init=1 | |||
| elif [[ "$antibody_plugins" -nt "$antibody_script" ]]; then | |||
| antibody_init=1 | |||
| elif ! [[ -f "$antibody_local" ]]; then | |||
| unset antibody_init | |||
| elif [[ "$antibody_local" -nt "$antibody_script" ]]; then | |||
| antibody_init=1 | |||
| else | |||
| unset antibody_init | |||
| fi | |||
| if [[ -n "$antibody_init" ]]; then | |||
| antibody bundle < "$antibody_plugins" > "$antibody_script" | |||
| if [[ -f "$antibody_local" ]]; then | |||
| antibody bundle < "$antibody_local" >> "$antibody_script" | |||
| fi | |||
| fi | |||
| fi | |||
| # Load additional zsh files | |||
| typeset -U config_files | |||
| config_files=($DOTFILES/*/*.sh) | |||
| for file in ${config_files:#*/env.sh}; do | |||
| source "$file" | |||
| done | |||
| unset config_files | |||
| # Additional ZSH options | |||
| setopt histreduceblanks | |||
| setopt histignorealldups | |||
| setopt histignorespace | |||
| setopt interactivecomments | |||
| # Remap autosuggest-accept | |||
| bindkey '^ ' autosuggest-accept | |||
| bindkey '\C-j' down-line-or-search | |||
| bindkey '\C-k' up-line-or-search | |||
| bindkey '^[[A' up-line-or-search | |||
| bindkey '^[[B' down-line-or-search | |||
| # Load .local file at the end for post configurations | |||
| if [ -e "$HOME/.zshrc.local" ]; then | |||
| source "$HOME/.zshrc.local" | |||
| fi | |||
| @ -0,0 +1,4 @@ | |||
| # -*- mode: ruby -*- | |||
| brew 'antibody' | |||
| brew 'zsh' | |||
| @ -0,0 +1,18 @@ | |||
| # Base | |||
| yous/vanilli.sh | |||
| # Theme | |||
| agkozak/agkozak-zsh-prompt | |||
| # Vim | |||
| zsh-users/zsh-autosuggestions | |||
| zdharma/fast-syntax-highlighting | |||
| softmoth/zsh-vim-mode | |||
| # Extras | |||
| chrissicool/zsh-256color | |||
| hlissner/zsh-autopair | |||
| robbyrussell/oh-my-zsh path:plugins/colored-man-pages | |||
| robbyrussell/oh-my-zsh path:plugins/command-not-found | |||
| zakariaGatter/markgate | |||
| zsh-users/zsh-history-substring-search | |||
| @ -0,0 +1,3 @@ | |||
| #!/usr/bin/env false | |||
| export AGKOZAK_MULTILINE=0 | |||
| @ -0,0 +1,26 @@ | |||
| #!/usr/bin/env bash | |||
| cd "$(dirname "$0")" | |||
| source ../helpers | |||
| install_deps | |||
| if ! which zsh &>/dev/null; then | |||
| echo '!!! ZSH is not available' | |||
| exit | |||
| fi | |||
| if [[ "$OS" == macos ]] && ! (cat /etc/shells | grep "$(which zsh)" &>/dev/null); then | |||
| echo '--- Adding Homebrew zsh to /etc/shells' | |||
| echo "$(which zsh)" | sudo tee -a /etc/shells >/dev/null | |||
| fi | |||
| if ! echo $SHELL | grep zsh$ &>/dev/null; then | |||
| echo '--- Changing shell to zsh' | |||
| chsh -s "$(cat /etc/shells | grep zsh | tail -n 1)" >/dev/null | |||
| fi | |||
| if ! which antibody &>/dev/null; then | |||
| echo '--- Installing antibody' | |||
| curl -sL https://git.io/antibody | bash -s | |||
| fi | |||