154 Commits
Author SHA1 Message Date
Fabian Ising f5389de7b8 Fix delzip 2026-08-24 09:34:52 +02:00
Fabian Ising 9e059859c6 [TOOLS] Move color test to tools repo 2026-08-12 17:49:16 +02:00
Fabian Ising 6f9e4910bb [ZSH] Add custom completions 2026-08-11 15:01:20 +02:00
Fabian Ising 104b8e2d8d [ZSH] Venv for agents 2026-08-03 11:02:40 +02:00
Fabian Ising 5cca1956fc [ALC] Fix ctrl-slash in alacritty 2026-08-03 11:02:26 +02:00
Fabian Ising 4c5f988d92 [ZSH] Fix path ordering 2026-08-03 11:02:02 +02:00
Fabian Ising 7afa58f3ec [ZSH] Remove claude venv 2026-07-30 14:43:26 +02:00
Fabian Ising 7d97559b20 [ZSH] Add env file 2026-07-30 14:41:28 +02:00
Fabian Ising 3e7a8d4f10 [ZSH] Macos completions 2026-07-28 10:23:36 +02:00
Fabian Ising cb5c767ca2 [ZSH] Note update has happened 2026-07-27 11:09:40 +02:00
Fabian Ising 81deaa75a4 [ZSH] Extract shared startup modules
Keep the server entrypoint focused on server policy while moving update checks, Antidote loading, interactive defaults, and prompt sourcing into reusable modules.
2026-07-27 10:57:11 +02:00
Fabian Ising 7ccb268cfb [ZSH] Path fixes 2026-07-27 10:39:34 +02:00
Fabian Ising 5b3b61e0e0 [ZSH] Hook improvements 2026-07-27 10:37:12 +02:00
Fabian Ising 1aae6b25ff [ZSH] Move tool update check to hook 2026-07-27 09:23:19 +02:00
Fabian Ising 13a0f0b2c7 Add cdiff and safe scp alias 2026-07-22 10:45:19 +02:00
Fabian Ising cc196aec46 [ALL] Point CLAUDE.md at AGENTS.md 2026-07-21 13:26:52 +02:00
Fabian Ising aacfba13b3 [ALL] Update codex 2026-07-21 13:17:15 +02:00
Fabian Ising a0ef696325 [TMUX/ZSH] Venv improvements 2026-07-16 14:25:28 +02:00
Fabian Ising 5251ee0f84 Fix comment handling in tex files 2026-07-15 09:31:59 +02:00
Fabian IsingandClaude Opus 4.8 7d5d4be328 [ZSH] Bound background git calls to prevent zombie leaks
The check_tools_repo (git ls-remote | awk) and update_dotfiles (git fetch)
background jobs could stall on a network call and, being disowned (&!),
orphan into days-long processes holding unreaped git/awk children.

Bound both network probes with `timeout` (guarded, absent on macOS) and
disable ssh multiplexing so no daemonized mux master inherits our fds.
Also dedup the double update_dotfiles startup call.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13 15:54:44 +02:00
Fabian Ising 57a0089b3a [ZSH] Defensive nvim aliasing 2026-07-10 14:56:07 +02:00
Fabian Ising 399b8e0c07 [ZSH] Report outdated tools repo 2026-07-10 13:30:11 +02:00
Fabian Ising ae9ae1ab9c [ZSH] Safe wrappers alias order fix 2026-07-10 11:53:07 +02:00
Fabian Ising 16b421a688 [ZSH] Safe wrappers alias 2026-07-10 11:37:46 +02:00
Fabian Ising 34a51c1e91 [ZSH] Add runai completion 2026-07-07 10:11:37 +02:00
Fabian Ising 2c0282778e [ZSH] Config update robusteness fix 2026-07-05 17:27:56 +02:00
Fabian Ising 1a264a66f8 [ALL] More global gitignores 2026-07-05 17:26:50 +02:00
Fabian Ising 38e8a9ed54 [ALL] Update claude code 2026-07-05 17:15:51 +02:00
Fabian Ising 75deb4987e [ZSH] Remove duplicate plugins 2026-07-05 17:15:37 +02:00
Fabian Ising 7b2c21ddc0 [TMUX] Visual bell fixes 2026-07-05 17:14:22 +02:00
Fabian IsingandClaude Opus 4.8 c0c05c951a Add CLAUDE.md
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 17:13:22 +02:00
Fabian IsingandClaude Opus 4.8 53d420f979 [SETUP] Remove defunct vim subtree and stale subtree metadata
The vim/ subtree had no tracked files or directory and its setup loops
were dead. The tmux/zsh subtrees have not been synced upstream since 2017; all
changes are now direct commits. Delete .gittrees and the vim example-linking
loops.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 17:13:22 +02:00
Fabian IsingandClaude Opus 4.8 d88d0565dc [GIT] Make core.excludesfile path relative for portability
Was hardcoded to /Users/ising/dotfiles; use ~/dotfiles so the base config
works on non-macOS hosts too.

(Separately, a local uncommitted 'credential.helper = store' was removed from
the live config so git uses the macOS keychain instead of writing
~/.git-credentials in plaintext. That line was never committed, so there is no
diff for it here.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 17:13:22 +02:00
Fabian IsingandClaude Opus 4.8 083ff173c7 [ALACRITTY] Auto-copy selection to clipboard
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 17:01:24 +02:00
Fabian Ising 85ec4e4a7b Add 24-bit-color tool 2026-01-23 10:49:42 +01:00
Fabian Ising aa4250e839 [ZSH] MacOS virt-manager fix 2026-01-23 10:47:28 +01:00
Fabian dca783e4ae [NVIM] Add WSL clipboard 2026-01-18 15:25:26 +01:00
Fabian Ising 51249a271d [GIT] Auto rebase/stash 2025-10-27 09:55:52 +01:00
Fabian Ising 9c1360d9d5 [NVIM] Rework folding 2025-10-27 09:55:31 +01:00
Fabian Ising c90a8a783a Fix update script 2025-10-27 09:55:02 +01:00
Fabian Ising ff125f4c7a [ZSH] Fix virt-manager 2025-10-27 09:53:45 +01:00
Fabian Ising cda37c3415 [tmux] Fix clipboard 2025-08-26 11:16:44 +02:00
Fabian Ising 6fd62c340d [NVIM] Run YCM install script on update 2025-08-06 11:04:27 +02:00
Fabian Ising 4718c8cccc [ZSH] Add OSC52 var 2025-08-06 10:51:09 +02:00
Fabian Ising 022895d1b2 [TERM] Add xshift for curved monitor visibility 2025-08-05 14:53:27 +02:00
murgi fb8dc68cfd [ZSH] Fix autopull 2025-08-05 14:36:11 +02:00
Fabian Ising a13204c4b5 [ZSH] Add autopull for repo 2025-08-05 12:33:05 +02:00
Fabian Ising e4400b13a8 [ZSH] Add completion rehash 2025-08-04 11:47:52 +02:00
Fabian Ising b26a9904a5 [ZSH] Optimize History handling 2025-07-31 15:24:28 +02:00
Fabian Ising ec6b42cb65 [VIM] Disable OCS52 for vscode 2025-07-31 15:24:07 +02:00
Fabian Ising f76728180a [VIM] Change to osc52 2025-05-08 08:58:53 +02:00
Fabian Ising 950d1d371d [VIM] Fix ctags 2025-04-17 08:56:46 +02:00
Fabian Ising ea019a8e23 [All] Add virtualenv hooks 2025-04-17 08:56:15 +02:00
Fabian Ising d599275642 Better copy and mouse handling 2025-04-17 08:55:14 +02:00
Fabian Ising 2da801cc05 [nvim] Disable macdown 2025-01-10 10:02:06 +01:00
Fabian Ising 3e43a85d37 [nvim] Delete without copy 2025-01-10 10:01:49 +01:00
Fabian Ising 26a04410cd [ALC] Change font size 2025-01-10 09:40:03 +01:00
Fabian Ising 15fbcb9787 [ZSH] Fix mac p10k config 2025-01-06 08:02:22 +01:00
Fabian Ising 17235038a3 [zsh] Ignore .p10k.zsh 2024-12-23 15:56:48 +01:00
Fabian Ising 4357ddfab9 [All] Fix link bug 2024-12-22 12:29:28 +01:00
Fabian Ising 2ec6bd1753 [ALC] Update config to new scheme 2024-10-23 08:45:35 +02:00
Fabian Ising 8407f9178f [ZSH] Fix paste autosuggest 2024-10-14 15:54:28 +02:00
Fabian Ising 01219976e2 [ZSH] Fix slow paste 2024-10-14 15:44:52 +02:00
Fabian Ising ec600ea478 [ZSH] Move language settings 2024-10-07 14:31:23 +02:00
Fabian Ising 154a77b825 [ZSH] Workaround for powerlevel10k issue #1554 2024-10-07 14:29:55 +02:00
Fabian Ising 1a34f11484 [NVIM] VSCode config 2024-10-05 10:56:06 +02:00
Fabian Ising cb58e2601b [ZSH] Set mac locale 2024-08-16 09:54:36 +02:00
Fabian Ising 83ca8d206e [nvim] Fix YCM python path 2024-08-16 09:53:52 +02:00
Fabian Ising d1594924ac [git] Auto recurse submodules 2024-08-07 12:43:11 +02:00
Fabian Ising 58f9f1832f [ZSH] Autoupdate antidote, scp hoss completion 2024-08-07 12:42:04 +02:00
Fabian Ising 4cbb1f271b [NVIM] YCM autoinstall, fix python path 2024-07-19 14:37:43 +02:00
Fabian Ising 47badc0949 [NVIM] Disable automatic macdown 2024-07-19 14:08:45 +02:00
Fabian Ising 65cc09edea [NVIM] Fix vim-plug install 2024-07-19 14:08:16 +02:00
Fabian Ising e2e61cd55c [ZSH] Switch back docker completion 2024-07-19 13:25:17 +02:00
Fabian Ising 696a8e7250 [ZSH] Mac tailscale alias 2024-06-13 08:52:03 +02:00
Fabian Ising 700a61ab36 [GIT] Improve gitconfig 2024-06-13 08:49:59 +02:00
Fabian Ising 12e36af05d [GIT] Improve gitconfig 2024-04-05 13:17:33 +02:00
Fabian Ising 717a2c29b7 [NVIM] Add macdown 2024-04-05 12:59:08 +02:00
Fabian Ising d9b50de699 [GIT] Add gitconfig 2024-04-05 12:58:41 +02:00
Fabian Ising 175e11ab4a [zsh] Change time style to long iso 2024-03-19 15:13:38 +01:00
Fabian Ising 5eaab4e1f9 [mac] Add brew autoupdate script 2024-03-19 15:12:09 +01:00
Fabian Ising 777a1eeacb [zsh] Disable SSH complete from hosts file 2024-02-28 11:52:27 +01:00
Fabian Ising 619c86e1c8 [all] Fix colors 2024-02-28 11:51:55 +01:00
Fabian Ising c421b2be7f [nvim] Add neovim virtualenv 2024-02-28 11:51:10 +01:00
Fabian Ising 3673889d55 [nvim] Add ycm compile script 2024-01-09 17:28:27 +01:00
Fabian Ising 35e6c623dd [Alacritty] Fix theme path 2024-01-09 17:27:52 +01:00
Fabian Ising ea17ee824b [zsh] Remove unnecessary defers 2024-01-03 14:19:08 +01:00
Fabian Ising fbac99c3c5 [alacritty] Update config to toml 2024-01-03 14:18:39 +01:00
Fabian Ising d27b3c1101 [zsh] Fix docker completion 2023-12-18 14:38:32 +01:00
Fabian Ising e1b640fac5 Change alacritty font 2023-11-15 13:41:10 +01:00
Fabian Ising 7a0f8b2645 [zsh] Add sudo key handling 2023-10-31 11:54:49 +01:00
Murgi b08cff74e3 [alacritty] Fix some color stuff 2023-09-18 12:26:23 +02:00
Fabian Ising 2303f6f7f3 [alacritty] Fix some color stuff 2023-09-18 10:26:30 +02:00
Fabian Ising bb76a182df [zsh] Screenshot mode 2023-09-03 12:55:52 +02:00
Fabian Ising 58c80b2b1d [alacritty] Screenshot mode 2023-09-03 12:55:32 +02:00
Fabian Ising ad66c9387f [nvim] Make sudo save easier 2023-07-25 13:59:37 +02:00
Fabian Ising eb9b2a0792 [zsh] Switch docker completion 2023-07-21 09:25:03 +02:00
Fabian Ising 5ec861b4ef [zsh] vi mode, cleanup 2023-07-21 09:14:10 +02:00
Fabian Ising 1c4d4f26fa [zsh] Add brew and cnf plugins 2023-07-21 09:13:25 +02:00
Fabian Ising dc6da63645 [zsh] More m1 improvements 2023-07-17 11:13:07 +02:00
Fabian Ising 4e6224981e [tmux] Improve copy mode, add F12 key toggle 2023-07-17 11:12:48 +02:00
Fabian Ising 4b9610dfb9 [ZSH] More ARM fixes 2023-06-02 15:51:31 +02:00
Fabian Ising 796510f1da [TMUX] Make tmux attach script use zsh 2023-06-02 14:29:36 +02:00
Fabian Ising 7a58e5f86a Fix permission fixer 2023-06-02 14:28:50 +02:00
Fabian Ising 6ac05e9c1c Add mac update script 2023-06-01 15:19:45 +02:00
Fabian Ising f18711f073 Fix macos setup script for M1 2023-06-01 14:32:58 +02:00
murgi 29cb35f4f3 [vim] Add outdated plugin notification 2023-04-14 09:29:18 +02:00
Fabian Ising 3af2ef2226 Fix alacritty colors 2023-04-06 12:27:01 +02:00
Fabian Ising 7039ee7377 Move to new alacritty option for macOS 2023-03-27 16:57:16 +02:00
Fabian Ising 586492d910 [ZSH] Add cgrep alias 2023-02-21 11:16:26 +01:00
Fabian Ising 7ccb7c4c22 [ZSH] Add shift select 2023-02-21 11:15:19 +01:00
Fabian Ising 4aa982ced8 Add gopath if go is installed 2023-02-09 16:29:49 +01:00
Fabian Ising ceb1fb4474 Update zsh mac config and link it automatically 2022-11-23 09:31:53 +01:00
Fabian Ising bf0d1ea78e Fixate locale settings 2022-11-15 13:55:38 +01:00
Fabian Ising 13b015c693 Remove tmux wrapper 2022-11-14 13:37:56 +01:00
Fabian Ising 852f6a527e Remove push.sh 2022-11-14 13:37:12 +01:00
Fabian Ising b78a34f74a Remove powerline dependency 2022-10-26 15:23:36 +02:00
Fabian Ising 2e783e24b6 Remove unnecessary PATH manipulation 2022-10-24 12:55:10 +02:00
Fabian Ising ebd8e331d6 Reattach tmux sessions on alacritty start 2022-10-24 12:53:54 +02:00
Fabian Ising b4d81ec06a Make colorscheme configuration templates 2022-10-24 11:59:58 +02:00
Fabian Ising 982dd1d1bf Add color switching 2022-10-24 11:38:50 +02:00
Fabian Ising 0b2f96683c Improve setup scripts, reset tmux path 2022-10-07 09:01:35 +02:00
Fabian Ising de0e1a53e7 Cleanup 2022-10-07 08:40:03 +02:00
Fabian Ising 90f96f875f Add note on nvim plugin dir 2022-10-06 17:02:37 +02:00
Fabian Ising 6b6bbf6fcc Remove pathogen 2022-10-06 16:39:49 +02:00
Fabian Ising 532d539ddc OS agnostic tmux path for alacritty 2022-10-06 16:38:03 +02:00
Fabian Ising 0e60423de9 Auto install new nvim plugins 2022-10-06 16:37:30 +02:00
Fabian Ising 629c3b6985 Fix missing zsh cache dir 2022-10-06 16:36:52 +02:00
Fabian Ising 19d2d39e15 Remove submodules, tpm auto install 2022-10-06 16:36:16 +02:00
Fabian Ising 0b3db63868 Cleanup zshrc 2022-09-27 13:18:21 +02:00
Fabian Ising 71b9db4cae Add virtual env config on MacOS 2022-09-27 12:31:54 +02:00
Fabian Ising 11a589d138 Fix neovim in virtualenvs 2022-09-27 12:31:18 +02:00
Fabian Ising b2b8d42d70 Fix antidote config 2022-09-06 13:25:54 +02:00
Fabian Ising 9352ac948e Switch to antidote plugin manager 2022-09-06 10:50:17 +02:00
Fabian Ising 9cd5f4323f Fix some mac setup stuff 2022-09-05 14:41:15 +02:00
Fabian Ising c80b8a7c71 Switch from Vundle to vim-plug 2022-09-05 14:40:20 +02:00
Fabian Ising 6e1373a67d Update 2022-09-05 10:52:43 +02:00
Fabian Ising 3ccf1b4023 Disable mouse yanking 2022-07-06 12:06:58 +02:00
Fabian Ising 916095cebd Add alacritty config for macos 2022-07-06 11:41:32 +02:00
Fabian Ising cd1f0ada29 Fix tmux copying, remove old plugins, cleanup 2022-07-06 11:41:04 +02:00
Fabian Ising ce7869b2f0 Add mac setup script 2022-07-06 11:39:50 +02:00
Fabian Ising 3bac32cbec Update config for python3.10 2022-07-05 13:22:11 +02:00
Fabian Ising eaddae6937 Update fonts 2022-07-05 13:01:06 +02:00
Fabian Ising 303b3f4055 Remove nerdcommenter leader-hotkey in insert mode 2022-03-08 11:35:20 +01:00
Fabian 3c91b8eed4 Ignore insecure directories for antigen compinit 2022-02-17 10:56:22 +01:00
Fabian 76af77e37f Update link scripts 2022-02-17 10:52:12 +01:00
Fabian db0af81c9f Update antigen 2022-02-17 10:44:24 +01:00
Fabian Ising 83b60feaf7 Update linking on mac 2022-02-17 10:14:55 +01:00
Fabian Ising 3f271925e8 Fix p10k config loading 2022-02-17 10:06:56 +01:00
Fabian Ising 3a457db8e4 Gitignore mac p10k zsh config 2022-02-17 10:04:10 +01:00
Fabian Ising 5f7464780f Merge branch 'master' 2022-02-17 10:00:24 +01:00
Fabian Ising 40efd721fd Add mac specific p10k config 2022-02-17 09:59:48 +01:00
Fabian Ising d0ae4ef7f8 Move zsh p10k context to the left 2022-02-17 09:54:33 +01:00
Fabian Ising f511ee7e4c Cleanup init.vim, configure folding 2022-02-17 09:11:22 +01:00
79 changed files with 1615 additions and 863 deletions
+1
View File
@@ -0,0 +1 @@
schemes.yml
+68
View File
@@ -0,0 +1,68 @@
[general]
import = ["~/.config/alacritty/solarized_light.toml"]
live_config_reload = true
[env]
TERM = "xterm-256color"
[font]
size = 14
[font.bold]
family = "Fira Mono for Powerline"
style = "Bold"
[font.italic]
family = "Fira Mono for Powerline"
style = "Regular"
[font.normal]
family = "Fira Mono for Powerline"
style = "Medium"
[[keyboard.bindings]]
key = "F"
mods = "Control"
[keyboard.bindings.command]
args = ["-c", "python3 ~/.config/alacritty/color_switcher.py"]
program = "zsh"
[[keyboard.bindings]]
key = "T"
mods = "Command"
[keyboard.bindings.command]
args = ["-e", "zsh"]
program = "alacritty"
[scrolling]
history = 0
[selection]
save_to_clipboard = true
[terminal]
osc52 = "OnlyCopy"
[terminal.shell]
args = ["-c", "$HOME/.tmux/tmux_attach.sh"]
program = "/bin/zsh"
[window]
dynamic_title = true
option_as_alt = "None"
[window.padding]
x = 2
y = 0
[[keyboard.bindings]]
key = "Return"
mods = "Shift"
chars = "\u001B\r"
[[keyboard.bindings]]
key = "Slash"
mods = "Control"
chars = "\u001F"
-48
View File
@@ -1,48 +0,0 @@
font:
# The size to use.
size: 12
# The normal (roman) font face to use.
normal:
family: DejaVu Sans Mono For Powerline
# Style can be specified to pick a specific face.
style: Regular
# The bold font face
bold:
family: DejaVu Sans Mono For Powerline
# Style can be specified to pick a specific face.
# style: Bold
# The italic font face
italic:
family: DejaVu Sans Mono For Powerline
# Style can be specified to pick a specific face.
# style: Italic
colors:
# Default colors
primary:
background: '0x323232'
foreground: '0xeeeeec'
# Normal colors
normal:
black: '0x2e3436'
red: '0xcc0000'
green: '0x4e9a06'
yellow: '0xc4a000'
blue: '0x3465a4'
magenta: '0x75507b'
cyan: '0x06989a'
white: '0xd3d7cf'
# Bright colors
bright:
black: '0x555753'
red: '0xef2929'
green: '0x8ae234'
yellow: '0xfce94f'
blue: '0x729fcf'
magenta: '0xad7fa8'
cyan: '0x34e2e2'
white: '0xeeeeec'
+77
View File
@@ -0,0 +1,77 @@
#!/usr/bin/env python3
import os
import re
import sys
ALACRITTY_CONFIG_FILE_NAME = "alacritty.toml"
CONFIG_FILE_DIR = os.path.expanduser("~/.config/alacritty/")
ALACRITTY_CONFIG_FILE_PATH = os.path.join(CONFIG_FILE_DIR, ALACRITTY_CONFIG_FILE_NAME)
COLOR_SCHEME_LINE_SEARCH = r'import = \[.*\]'
ALACRITTY_LIGHT_THEME="solarized_light.toml"
ALACRITTY_DARK_THEME="dark_mode.toml"
NVIM_CONFIG_FILE_DIR = os.path.expanduser("~/.config/nvim/")
NVIM_CONFIG_FILE_NAME = "scheme.vim"
NVIM_CONFIG_FILE_PATH = os.path.join(NVIM_CONFIG_FILE_DIR, NVIM_CONFIG_FILE_NAME)
NVIM_COLOR_SCHEME_LINE_SEARCH = "set background=(\S+)\ncolorscheme (\S+)"
NVIM_COLOR_SCHEME_LINE_TEMPLATE = "set background={}\ncolorscheme {}"
def change_alacritty_theme(light_mode=None):
with open(ALACRITTY_CONFIG_FILE_PATH, "r") as scheme_file:
scheme_file.seek(0)
lines = scheme_file.readlines()
colors_line_index = -1
for i, line in enumerate(lines):
match = re.search(COLOR_SCHEME_LINE_SEARCH, line)
if match is not None:
colors_line_index = i
color_line = lines[i]
break
if light_mode is None:
if ALACRITTY_DARK_THEME in color_line:
color_line = color_line.replace(ALACRITTY_DARK_THEME, ALACRITTY_LIGHT_THEME)
new_scheme = "light"
else:
color_line = color_line.replace(ALACRITTY_LIGHT_THEME, ALACRITTY_DARK_THEME)
new_scheme = "dark"
elif light_mode == True:
new_scheme = "light"
color_line = color_line.replace(ALACRITTY_DARK_THEME, ALACRITTY_LIGHT_THEME)
else:
color_line = color_line.replace(ALACRITTY_LIGHT_THEME, ALACRITTY_DARK_THEME)
new_scheme = "dark"
lines[colors_line_index] = color_line
with open(ALACRITTY_CONFIG_FILE_PATH, "w") as scheme_file:
for line in lines:
scheme_file.write(line)
return new_scheme
def change_vim_theme(light_mode=False):
with open(NVIM_CONFIG_FILE_PATH, "r") as config_file:
config_file.seek(0)
config = config_file.read()
if light_mode:
color_line = NVIM_COLOR_SCHEME_LINE_TEMPLATE.format("light", "solarized")
else:
color_line = NVIM_COLOR_SCHEME_LINE_TEMPLATE.format("dark", "badwolf")
res = re.sub(NVIM_COLOR_SCHEME_LINE_SEARCH, color_line, config)
with open(NVIM_CONFIG_FILE_PATH, "w") as config_file:
config = config_file.write(res)
def main(light_mode=None):
new_theme = change_alacritty_theme(light_mode)
change_vim_theme(new_theme == "light")
if __name__=="__main__":
if len(sys.argv) == 2:
main(sys.argv == "light")
else:
main()
+23
View File
@@ -0,0 +1,23 @@
[colors.bright]
black = "0x555753"
blue = "0x729fcf"
cyan = "0x34e2e2"
green = "0x8ae234"
magenta = "0xad7fa8"
red = "0xef2929"
white = "0xeeeeec"
yellow = "0xfce94f"
[colors.normal]
black = "0x2e3436"
blue = "0x3465a4"
cyan = "0x06989a"
green = "0x4e9a06"
magenta = "0x75507b"
red = "0xcc0000"
white = "0xd3d7cf"
yellow = "0xc4a000"
[colors.primary]
background = "0x323232"
foreground = "0xeeeeec"
+41
View File
@@ -0,0 +1,41 @@
#! /usr/bin/env python3
# vim:fenc=utf-8
#
# Copyright © 2023 ising <ising@mac-nurmi>
#
# Distributed under terms of the MIT license.
"""
"""
import os
import sys
import color_switcher
CONFIG_FILE_NAME = "alacritty.toml"
CONFIG_FILE_DIR = os.path.expanduser("~/.config/alacritty/")
CONFIG_FILE_PATH = os.path.join(CONFIG_FILE_DIR, CONFIG_FILE_NAME)
def main(turn_on=False):
padding_line = None
with open(CONFIG_FILE_PATH, "r") as config_file:
config_file.seek(0)
config_lines = config_file.readlines()
for i, line in enumerate(config_lines):
if "[window.padding]" in line and "x =" in config_lines[i+1]:
padding_line = i
if padding_line is None:
return
if turn_on:
config_lines[padding_line+1] = "x = 10\n"
config_lines[padding_line+2] = "y = 10\n"
else:
config_lines[padding_line+1] = "x = 0\n"
config_lines[padding_line+2] = "y = 0\n"
with open(CONFIG_FILE_PATH, "w") as config_file:
for line in config_lines:
config_file.write(line)
if __name__=="__main__":
main(len(sys.argv) == 2 and sys.argv[1] == "on")
#color_switcher.main(len(sys.argv) == 2 and sys.argv[1] == "on")
+23
View File
@@ -0,0 +1,23 @@
[colors.bright]
black = "0x002b36"
blue = "0x839496"
cyan = "0x93a1a1"
green = "0x586e75"
magenta = "0x6c71c4"
red = "0xcb4b16"
white = "0xfdf6e3"
yellow = "0x657b83"
[colors.normal]
black = "0x073642"
blue = "0x268bd2"
cyan = "0x2aa198"
green = "0x859900"
magenta = "0xd33682"
red = "0xdc322f"
white = "0xeee8d5"
yellow = "0xb58900"
[colors.primary]
background = "0xfdf6e3"
foreground = "0x586e75"
+1
View File
@@ -1,3 +1,4 @@
*.swp *.swp
tags tags
.DS_STORE .DS_STORE
__pycache__
+28
View File
@@ -0,0 +1,28 @@
.DS_Store
.localized
__MACOSX/
.AppleDouble
.LSOverride
# Resource forks
._*
# Files and directories that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
.com.apple.timemachine.supported
.PKInstallSandboxManager
.PKInstallSandboxManager-SystemSoftware
.hotfiles.btree
.vol
.file
.disk_label*
lost+found
.nobackup
**/.claude/settings.local.json
-15
View File
@@ -1,15 +0,0 @@
[submodule "plugins/tpm"]
path = tmux/plugins/tpm
url = https://github.com/tmux-plugins/tpm.git
[submodule "antigen"]
path = zsh/antigen
url = https://github.com/zsh-users/antigen.git
[submodule "bundle/Vundle.vim"]
path = vim/bundle/Vundle.vim
url = https://github.com/VundleVim/Vundle.vim.git
[submodule "nvim/bundle/Vundle.vim"]
path = nvim/bundle/Vundle.vim
url = https://github.com/VundleVim/Vundle.vim.git
-14
View File
@@ -1,14 +0,0 @@
[subtree "tmux"]
url = git@vcs.murgi.de:dotfiles_fabian/tmux.git
path = tmux
branch = master
[subtree "zsh"]
url = git@vcs.murgi.de:dotfiles_fabian/zsh.git
path = zsh
branch = master
[subtree "vim"]
url = git@vcs.murgi.de:dotfiles_fabian/vim.git
path = vim
branch = master
+37
View File
@@ -0,0 +1,37 @@
# AGENTS.md
This file provides guidance to AI Agents when working with code in this repository.
This is a personal dotfiles repository targeting macOS (Apple Silicon + Intel) and Arch Linux. It is installed by symlinking config directories/files from the repo into `$HOME`, so files here are live configs — editing them changes the running system.
## Installation & setup
Setup is platform-specific and runs from the repo root:
- **macOS:** `./setup_mac.sh` — brews dependencies, creates a `neovim` virtualenv, then calls `./clone_and_link_mac.sh`. Uses GNU coreutils' `gln` (not `ln`), so coreutils must be installed first.
- **Arch:** `./setup_arch.sh` — pacman deps, then `./clone_and_link.sh` + `./copy_fonts_arch.sh`.
- `clone_and_link*.sh` create the symlinks (`~/.zsh`, `~/.zshrc`, `~/.tmux`, `~/.tmux.conf`, `~/.config/nvim`, `~/.config/alacritty`, virtualenvwrapper hooks). `link_config.sh` is a simpler standalone variant.
- `general_setup.sh` switches the login shell to zsh and triggers plugin installs.
## Platform-specific config via `.example` templates
The most important repo-wide convention: platform variants live as `.example` files and the active file is a symlink/copy produced at setup time. The setup scripts loop over files matching `zsh/.*_mac.example`, `tmux/.*_arch.example`, etc., and link/copy each to the name with the `_<platform>.example` suffix stripped.
Practical rule: **edit the `.example` source, not the generated symlink target.** The unsuffixed active files are git-ignored (see each subdir's `.gitignore`). Templates that are copied (not symlinked) at setup — `nvim/scheme.vim.template``scheme.vim`, `.config/alacritty/schemes.yml.template``schemes.yml` — are also git-ignored once activated.
## Component architecture
- **zsh** (`zsh/.zshrc`): Powerlevel10k instant prompt + [antidote](https://github.com/mattmc3/antidote) plugin manager (plugin list in `zsh/.zsh_plugins.txt`). `.zshrc` sources optional layered configs if present: `.powerline_config`, `.user_config`, `.virtual_env_config.zsh`, `.mac_config.zsh`, `.local_config`. `update_dotfiles()` auto-`git pull`s this repo in the background on every shell start. Machine-local overrides belong in `.local_config` (not committed).
- **nvim** (`nvim/init.vim`): [vim-plug](https://github.com/junegunn/vim-plug), auto-bootstrapped on first launch (`:PlugInstall`). Python provider points at the `~/python-envs/neovim` virtualenv on Apple Silicon. `colors/` holds a large bundled colorscheme collection.
- **tmux** (`tmux/.tmux.conf`): TPM-style `plugins/`. `tmux/tmux_attach.sh` is an attach helper.
- **alacritty** (`.config/alacritty/`): active theme selected via the `import = [...]` line in `alacritty.toml`.
- **gitconfig** (`gitconfig/gitconfig`): identity/behavior split by remote host using `includeIf "hasconfig:remote.*.url:..."``github`, `fhms` (fh-muenster), `murgi`, and `sit` (Fraunhofer) each load their own `*.gitconfig`. Change per-context email/signing in the matching include file, not the base config.
## Light/dark theme switching
`.config/alacritty/color_switcher.py` toggles light/dark across the terminal **and** nvim in one shot: it rewrites the `import` line in `alacritty.toml` (`solarized_light.toml``dark_mode.toml`) and the `background`/`colorscheme` lines in `~/.config/nvim/scheme.vim`. Keep the regex-matched line formats in those files intact when editing them by hand. `screenshot_mode.py` is a related toggle.
## Maintenance
- `./update_mac.sh` — macOS update runner. Default (no args) runs `--brew-update --cleanup --diagnostics --update-others`; other flags: `--system-update`, `--permission-fix` (strips Caskroom/App quarantine xattrs). Run `./update_mac.sh --help` for the list. `--update-others` also runs `claude --update` and `Codex --update`.
- `brew_autoupdate` — sets up scheduled brew auto-updates.
Symlink
+1
View File
@@ -0,0 +1 @@
AGENTS.md
+10
View File
@@ -0,0 +1,10 @@
#!/bin/sh
export HOMEBREW_NO_BOTTLE_SOURCE_FALLBACK=1
export PATH='/opt/homebrew/Library/Homebrew/shims/shared:/opt/homebrew/opt/coreutils/libexec/gnubin:/Users/ising/.local/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/TeX/texbin:/Applications/VMware Fusion.app/Contents/Public:/Users/ising/.cargo/bin:/opt/homebrew/sbin:/Users/ising/go/bin:/opt/homebrew/Library/Taps/homebrew/homebrew-autoupdate/cmd:/opt/homebrew/Library/Taps/homebrew/homebrew-command-not-found/cmd:/opt/homebrew/Library/Taps/homebrew/homebrew-services/cmd'
export HOMEBREW_CACHE='/Users/ising/Library/Caches/Homebrew'
export HOMEBREW_LOGS='/Users/ising/Library/Logs/Homebrew'
export SUDO_ASKPASS='/Users/ising/Library/Application Support/com.github.domt4.homebrew-autoupdate/brew_autoupdate_sudo_gui'
defaults export com.apple.dock "/tmp/dock-layout.plist"
/bin/date && /opt/homebrew/bin/brew update && /opt/homebrew/bin/brew upgrade --formula -v && /opt/homebrew/bin/brew upgrade --cask -v && /opt/homebrew/bin/brew cleanup && /usr/bin/open -g /opt/homebrew/Library/Taps/homebrew/homebrew-autoupdate/notifier/brew-autoupdate.app
defaults import com.apple.dock "/tmp/dock-layout.plist"
killall dock
+2 -4
View File
@@ -7,12 +7,10 @@
# #
git submodule update --init --recursive
echo "ln -s $PWD/vim $HOME/.vim"
ln -Tsv $PWD/vim $HOME/.vim
ln -Tsv ~/.vim/.vimrc $HOME/.vimrc
ln -Tsv $PWD/zsh $HOME/.zsh ln -Tsv $PWD/zsh $HOME/.zsh
ln -Tsv ~/.zsh/.zshrc $HOME/.zshrc ln -Tsv ~/.zsh/.zshrc $HOME/.zshrc
ln -Tsv $PWD/tmux $HOME/.tmux ln -Tsv $PWD/tmux $HOME/.tmux
ln -Tsv ~/.tmux/.tmux.conf $HOME/.tmux.conf ln -Tsv ~/.tmux/.tmux.conf $HOME/.tmux.conf
ln -Tsv $PWD/nvim $HOME/.config/nvim ln -Tsv $PWD/nvim $HOME/.config/nvim
ln -Tsv $PWD/.config/alacritty $HOME/.config/alacritty
ln -fsv $PWD/virtualenvwrapper/* $VIRTUALENVWRAPPER_HOOK_DIR
+11 -9
View File
@@ -7,12 +7,14 @@
# #
git submodule update --init --recursive gln -Tsv $PWD/zsh $HOME/.zsh
echo "ln -s $PWD/vim $HOME/.vim" gln -Tsv ~/.zsh/.zshrc $HOME/.zshrc
ln -sv $PWD/vim $HOME/.vim gln -Tsv $PWD/tmux $HOME/.tmux
ln -sv ~/.vim/.vimrc $HOME/.vimrc gln -Tsv ~/.tmux/.tmux.conf $HOME/.tmux.conf
ln -sv $PWD/zsh $HOME/.zsh gln -Tsv $PWD/nvim $HOME/.config/nvim
ln -sv ~/.zsh/.zshrc $HOME/.zshrc gln -Tsv $PWD/.config/alacritty $HOME/.config/alacritty
ln -sv $PWD/tmux $HOME/.tmux gln -Tsv $PWD/zsh/.p10k.zsh_mac.example $PWD/zsh/.p10k.mac.zsh
ln -sv ~/.tmux/.tmux.conf $HOME/.tmux.conf gln -Tsv $PWD/zsh/.mac_config.example $PWD/zsh/.mac_config
gln -Tsv $PWD/zsh/.virtual_env_config.zsh_mac.example $PWD/zsh/.virtual_env_config.zsh
gln -fsv $PWD/virtualenvwrapper/* $VIRTUALENVWRAPPER_HOOK_DIR
gln -Tsv $PWD/update_mac.sh $HOME/update_mac.sh
Executable
+9
View File
@@ -0,0 +1,9 @@
#! /bin/sh
#
# compile_ycm.sh
# Copyright (C) 2024 ising <ising@mac-nurmi>
#
# Distributed under terms of the MIT license.
#
python3 ~/.local/share/nvim/plugged/install.py --all
+12
View File
@@ -0,0 +1,12 @@
#! /bin/sh
#
# copy_fonts_arch.sh
# Copyright (C) 2022 fabian <fabian@krikkit>
#
# Distributed under terms of the MIT license.
#
mkdir -p $HOME/.local/share/fonts
for filename in fonts/*; do
cp "$filename" "$HOME/.local/share/$filename"
done
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+3
View File
@@ -0,0 +1,3 @@
[user]
name = Fabian Ising
email = f.ising@fh-muenster.de
+39
View File
@@ -0,0 +1,39 @@
# This is Git's per-user configuration file.
[user]
# Please adapt and uncomment the following lines:
name = Fabian Ising
email = github@murgi.de
[includeIf "hasconfig:remote.*.url:https://github.com/**"]
path = ~/dotfiles/gitconfig/github.gitconfig
[includeIf "hasconfig:remote.*.url:git@github.com/**"]
path = ~/dotfiles/gitconfig/github.gitconfig
[includeIf "hasconfig:remote.*.url:https://git.fh-muenster.de/**"]
path = ~/dotfiles/gitconfig/fhms.gitconfig
[includeIf "hasconfig:remote.*.url:git@git.fh-muenster.de:*/**"]
path = ~/dotfiles/gitconfig/fhms.gitconfig
[includeIf "hasconfig:remote.*.url:ssh://git@git.fh-muenster.de:*/**"]
path = ~/dotfiles/gitconfig/fhms.gitconfig
[includeIf "hasconfig:remote.*.url:https://vcs.murgi.de/**"]
path = ~/dotfiles/gitconfig/murgi.gitconfig
[includeIf "hasconfig:remote.*.url:ssh://git@vcs.murgi.de:*/**"]
path = ~/dotfiles/gitconfig/murgi.gitconfig
[includeIf "hasconfig:remote.*.url:git@vcs.murgi.de:*/**"]
path = ~/dotfiles/gitconfig/murgi.gitconfig
[includeIf "hasconfig:remote.*.url:git@git-int.sit.fraunhofer.de:*/**"]
path = ~/dotfiles/gitconfig/sit.gitconfig
[includeIf "hasconfig:remote.*.url:https://git-int.sit.fraunhofer.de/**"]
path = ~/dotfiles/gitconfig/sit.gitconfig
[core]
excludesfile = ~/dotfiles/.gitignore_global
[submodule]
recurse = true
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[rebase]
autoStash = true
[pull]
rebase = true
+3
View File
@@ -0,0 +1,3 @@
[user]
name = Fabian Ising
email = github@murgi.de
+3
View File
@@ -0,0 +1,3 @@
[user]
name = Fabian Ising
email = fabian@murgi.de
+3
View File
@@ -0,0 +1,3 @@
[user]
name = Fabian Ising
email = fabian.ising@sit.fraunhofer.de
+1
View File
@@ -11,3 +11,4 @@ for filename in .config/*; do
done done
ln -Ts $PWD/nvim $HOME/.config/nvim ln -Ts $PWD/nvim $HOME/.config/nvim
ln -Ts $PWD/gitconfig/gitconfig $HOME/.gitconfig
+3
View File
@@ -6,3 +6,6 @@ __pycache__/
bundle/* bundle/*
!bundle/Vundle.vim !bundle/Vundle.vim
*.swp *.swp
# Prevent changes to propagate to all systems
scheme.vim
@@ -1 +0,0 @@
set rtp+=/usr/lib/python3.6/site-packages/powerline/bindings/vim
@@ -1 +0,0 @@
set rtp+=/usr/local/lib/python2.7/dist-packages/powerline/bindings/vim
@@ -1 +0,0 @@
set rtp+=$HOME/.local/lib/python3.9/site-packages/powerline/bindings/vim
-347
View File
@@ -1,347 +0,0 @@
" pathogen.vim - path option manipulation
" Maintainer: Tim Pope <http://tpo.pe/>
" Version: 2.3
" Install in ~/.vim/autoload (or ~\vimfiles\autoload).
"
" For management of individually installed plugins in ~/.vim/bundle (or
" ~\vimfiles\bundle), adding `execute pathogen#infect()` to the top of your
" .vimrc is the only other setup necessary.
"
" The API is documented inline below.
if exists("g:loaded_pathogen") || &cp
finish
endif
let g:loaded_pathogen = 1
" Point of entry for basic default usage. Give a relative path to invoke
" pathogen#interpose() (defaults to "bundle/{}"), or an absolute path to invoke
" pathogen#surround(). Curly braces are expanded with pathogen#expand():
" "bundle/{}" finds all subdirectories inside "bundle" inside all directories
" in the runtime path.
function! pathogen#infect(...) abort
for path in a:0 ? filter(reverse(copy(a:000)), 'type(v:val) == type("")') : ['bundle/{}']
if path =~# '^\%({\=[$~\\/]\|{\=\w:[\\/]\).*[{}*]'
call pathogen#surround(path)
elseif path =~# '^\%([$~\\/]\|\w:[\\/]\)'
call s:warn('Change pathogen#infect('.string(path).') to pathogen#infect('.string(path.'/{}').')')
call pathogen#surround(path . '/{}')
elseif path =~# '[{}*]'
call pathogen#interpose(path)
else
call s:warn('Change pathogen#infect('.string(path).') to pathogen#infect('.string(path.'/{}').')')
call pathogen#interpose(path . '/{}')
endif
endfor
call pathogen#cycle_filetype()
if pathogen#is_disabled($MYVIMRC)
return 'finish'
endif
return ''
endfunction
" Split a path into a list.
function! pathogen#split(path) abort
if type(a:path) == type([]) | return a:path | endif
if empty(a:path) | return [] | endif
let split = split(a:path,'\\\@<!\%(\\\\\)*\zs,')
return map(split,'substitute(v:val,''\\\([\\,]\)'',''\1'',"g")')
endfunction
" Convert a list to a path.
function! pathogen#join(...) abort
if type(a:1) == type(1) && a:1
let i = 1
let space = ' '
else
let i = 0
let space = ''
endif
let path = ""
while i < a:0
if type(a:000[i]) == type([])
let list = a:000[i]
let j = 0
while j < len(list)
let escaped = substitute(list[j],'[,'.space.']\|\\[\,'.space.']\@=','\\&','g')
let path .= ',' . escaped
let j += 1
endwhile
else
let path .= "," . a:000[i]
endif
let i += 1
endwhile
return substitute(path,'^,','','')
endfunction
" Convert a list to a path with escaped spaces for 'path', 'tag', etc.
function! pathogen#legacyjoin(...) abort
return call('pathogen#join',[1] + a:000)
endfunction
" Turn filetype detection off and back on again if it was already enabled.
function! pathogen#cycle_filetype() abort
if exists('g:did_load_filetypes')
filetype off
filetype on
endif
endfunction
" Check if a bundle is disabled. A bundle is considered disabled if its
" basename or full name is included in the list g:pathogen_disabled.
function! pathogen#is_disabled(path) abort
if a:path =~# '\~$'
return 1
endif
let sep = pathogen#slash()
let blacklist = map(
\ get(g:, 'pathogen_blacklist', get(g:, 'pathogen_disabled', [])) +
\ pathogen#split($VIMBLACKLIST),
\ 'substitute(v:val, "[\\/]$", "", "")')
return index(blacklist, fnamemodify(a:path, ':t')) != -1 || index(blacklist, a:path) != -1
endfunction "}}}1
" Prepend the given directory to the runtime path and append its corresponding
" after directory. Curly braces are expanded with pathogen#expand().
function! pathogen#surround(path) abort
let sep = pathogen#slash()
let rtp = pathogen#split(&rtp)
let path = fnamemodify(a:path, ':p:s?[\\/]\=$??')
let before = filter(pathogen#expand(path), '!pathogen#is_disabled(v:val)')
let after = filter(reverse(pathogen#expand(path.sep.'after')), '!pathogen#is_disabled(v:val[0:-7])')
call filter(rtp, 'index(before + after, v:val) == -1')
let &rtp = pathogen#join(before, rtp, after)
return &rtp
endfunction
" For each directory in the runtime path, add a second entry with the given
" argument appended. Curly braces are expanded with pathogen#expand().
function! pathogen#interpose(name) abort
let sep = pathogen#slash()
let name = a:name
if has_key(s:done_bundles, name)
return ""
endif
let s:done_bundles[name] = 1
let list = []
for dir in pathogen#split(&rtp)
if dir =~# '\<after$'
let list += reverse(filter(pathogen#expand(dir[0:-6].name.sep.'after'), '!pathogen#is_disabled(v:val[0:-7])')) + [dir]
else
let list += [dir] + filter(pathogen#expand(dir.sep.name), '!pathogen#is_disabled(v:val)')
endif
endfor
let &rtp = pathogen#join(pathogen#uniq(list))
return 1
endfunction
let s:done_bundles = {}
" Invoke :helptags on all non-$VIM doc directories in runtimepath.
function! pathogen#helptags() abort
let sep = pathogen#slash()
for glob in pathogen#split(&rtp)
for dir in map(split(glob(glob), "\n"), 'v:val.sep."/doc/".sep')
if (dir)[0 : strlen($VIMRUNTIME)] !=# $VIMRUNTIME.sep && filewritable(dir) == 2 && !empty(split(glob(dir.'*.txt'))) && (!filereadable(dir.'tags') || filewritable(dir.'tags'))
silent! execute 'helptags' pathogen#fnameescape(dir)
endif
endfor
endfor
endfunction
command! -bar Helptags :call pathogen#helptags()
" Execute the given command. This is basically a backdoor for --remote-expr.
function! pathogen#execute(...) abort
for command in a:000
execute command
endfor
return ''
endfunction
" Section: Unofficial
function! pathogen#is_absolute(path) abort
return a:path =~# (has('win32') ? '^\%([\\/]\|\w:\)[\\/]\|^[~$]' : '^[/~$]')
endfunction
" Given a string, returns all possible permutations of comma delimited braced
" alternatives of that string. pathogen#expand('/{a,b}/{c,d}') yields
" ['/a/c', '/a/d', '/b/c', '/b/d']. Empty braces are treated as a wildcard
" and globbed. Actual globs are preserved.
function! pathogen#expand(pattern) abort
if a:pattern =~# '{[^{}]\+}'
let [pre, pat, post] = split(substitute(a:pattern, '\(.\{-\}\){\([^{}]\+\)}\(.*\)', "\\1\001\\2\001\\3", ''), "\001", 1)
let found = map(split(pat, ',', 1), 'pre.v:val.post')
let results = []
for pattern in found
call extend(results, pathogen#expand(pattern))
endfor
return results
elseif a:pattern =~# '{}'
let pat = matchstr(a:pattern, '^.*{}[^*]*\%($\|[\\/]\)')
let post = a:pattern[strlen(pat) : -1]
return map(split(glob(substitute(pat, '{}', '*', 'g')), "\n"), 'v:val.post')
else
return [a:pattern]
endif
endfunction
" \ on Windows unless shellslash is set, / everywhere else.
function! pathogen#slash() abort
return !exists("+shellslash") || &shellslash ? '/' : '\'
endfunction
function! pathogen#separator() abort
return pathogen#slash()
endfunction
" Convenience wrapper around glob() which returns a list.
function! pathogen#glob(pattern) abort
let files = split(glob(a:pattern),"\n")
return map(files,'substitute(v:val,"[".pathogen#slash()."/]$","","")')
endfunction "}}}1
" Like pathogen#glob(), only limit the results to directories.
function! pathogen#glob_directories(pattern) abort
return filter(pathogen#glob(a:pattern),'isdirectory(v:val)')
endfunction "}}}1
" Remove duplicates from a list.
function! pathogen#uniq(list) abort
let i = 0
let seen = {}
while i < len(a:list)
if (a:list[i] ==# '' && exists('empty')) || has_key(seen,a:list[i])
call remove(a:list,i)
elseif a:list[i] ==# ''
let i += 1
let empty = 1
else
let seen[a:list[i]] = 1
let i += 1
endif
endwhile
return a:list
endfunction
" Backport of fnameescape().
function! pathogen#fnameescape(string) abort
if exists('*fnameescape')
return fnameescape(a:string)
elseif a:string ==# '-'
return '\-'
else
return substitute(escape(a:string," \t\n*?[{`$\\%#'\"|!<"),'^[+>]','\\&','')
endif
endfunction
" Like findfile(), but hardcoded to use the runtimepath.
function! pathogen#runtime_findfile(file,count) abort "{{{1
let rtp = pathogen#join(1,pathogen#split(&rtp))
let file = findfile(a:file,rtp,a:count)
if file ==# ''
return ''
else
return fnamemodify(file,':p')
endif
endfunction
" Section: Deprecated
function! s:warn(msg) abort
echohl WarningMsg
echomsg a:msg
echohl NONE
endfunction
" Prepend all subdirectories of path to the rtp, and append all 'after'
" directories in those subdirectories. Deprecated.
function! pathogen#runtime_prepend_subdirectories(path) abort
call s:warn('Change pathogen#runtime_prepend_subdirectories('.string(a:path).') to pathogen#infect('.string(a:path.'/{}').')')
return pathogen#surround(a:path . pathogen#slash() . '{}')
endfunction
function! pathogen#incubate(...) abort
let name = a:0 ? a:1 : 'bundle/{}'
call s:warn('Change pathogen#incubate('.(a:0 ? string(a:1) : '').') to pathogen#infect('.string(name).')')
return pathogen#interpose(name)
endfunction
" Deprecated alias for pathogen#interpose().
function! pathogen#runtime_append_all_bundles(...) abort
if a:0
call s:warn('Change pathogen#runtime_append_all_bundles('.string(a:1).') to pathogen#infect('.string(a:1.'/{}').')')
else
call s:warn('Change pathogen#runtime_append_all_bundles() to pathogen#infect()')
endif
return pathogen#interpose(a:0 ? a:1 . '/{}' : 'bundle/{}')
endfunction
if exists(':Vedit')
finish
endif
let s:vopen_warning = 0
function! s:find(count,cmd,file,lcd)
let rtp = pathogen#join(1,pathogen#split(&runtimepath))
let file = pathogen#runtime_findfile(a:file,a:count)
if file ==# ''
return "echoerr 'E345: Can''t find file \"".a:file."\" in runtimepath'"
endif
if !s:vopen_warning
let s:vopen_warning = 1
let warning = '|echohl WarningMsg|echo "Install scriptease.vim to continue using :V'.a:cmd.'"|echohl NONE'
else
let warning = ''
endif
if a:lcd
let path = file[0:-strlen(a:file)-2]
execute 'lcd `=path`'
return a:cmd.' '.pathogen#fnameescape(a:file) . warning
else
return a:cmd.' '.pathogen#fnameescape(file) . warning
endif
endfunction
function! s:Findcomplete(A,L,P)
let sep = pathogen#slash()
let cheats = {
\'a': 'autoload',
\'d': 'doc',
\'f': 'ftplugin',
\'i': 'indent',
\'p': 'plugin',
\'s': 'syntax'}
if a:A =~# '^\w[\\/]' && has_key(cheats,a:A[0])
let request = cheats[a:A[0]].a:A[1:-1]
else
let request = a:A
endif
let pattern = substitute(request,'/\|\'.sep,'*'.sep,'g').'*'
let found = {}
for path in pathogen#split(&runtimepath)
let path = expand(path, ':p')
let matches = split(glob(path.sep.pattern),"\n")
call map(matches,'isdirectory(v:val) ? v:val.sep : v:val')
call map(matches,'expand(v:val, ":p")[strlen(path)+1:-1]')
for match in matches
let found[match] = 1
endfor
endfor
return sort(keys(found))
endfunction
command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Ve :execute s:find(<count>,'edit<bang>',<q-args>,0)
command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vedit :execute s:find(<count>,'edit<bang>',<q-args>,0)
command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vopen :execute s:find(<count>,'edit<bang>',<q-args>,1)
command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vsplit :execute s:find(<count>,'split',<q-args>,<bang>1)
command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vvsplit :execute s:find(<count>,'vsplit',<q-args>,<bang>1)
command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vtabedit :execute s:find(<count>,'tabedit',<q-args>,<bang>1)
command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vpedit :execute s:find(<count>,'pedit',<q-args>,<bang>1)
command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vread :execute s:find(<count>,'read',<q-args>,<bang>1)
" vim:set et sw=2 foldmethod=expr foldexpr=getline(v\:lnum)=~'^\"\ Section\:'?'>1'\:getline(v\:lnum)=~#'^fu'?'a1'\:getline(v\:lnum)=~#'^endf'?'s1'\:'=':
+1
View File
@@ -0,0 +1 @@
set foldmethod=indent
+1 -1
View File
@@ -1,4 +1,4 @@
set formatoptions+=1rnmBa setlocal formatoptions+=1rnmBj
" Reformat lines (getting the spacing correct) {{{ " Reformat lines (getting the spacing correct) {{{
fun! TeX_fmt() fun! TeX_fmt()
+175 -45
View File
@@ -1,81 +1,136 @@
set nocompatible set nocompatible
filetype off filetype off
" Plugins " Find python
set rtp+=~/.config/nvim/bundle/Vundle.vim if has("macunix")
call vundle#begin("~/.config/nvim/bundle") " Required for virtualenvs
let arch=substitute(system('uname -m'), '\n', '', '')
if arch == 'arm64'
let g:python_interpreter=expand("~/python-envs/neovim/bin/python3")
else
let g:python_interpreter="/usr/local/bin/python3"
endif
let g:tagbar_ctags="/opt/homebrew/bin/ctags"
else
let g:python_interpreter = 'python3'
endif
let g:python3_host_prog=g:python_interpreter
Plugin 'VundleVim/Vundle.vim' " Plugins
" Note: on most systems, this will make the plugins reside in \
" ~/.local/share/nvim/plugged/
let data_dir = has('nvim') ? stdpath('data') . '/site' : expand('~/.vim')
if empty(glob(data_dir . '/autoload/plug.vim'))
silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
let &runtimepath = &runtimepath
autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif
" Disable Perl
let g:loaded_perl_provider = 0
call plug#begin()
if !exists('g:vscode')
" Warn about plugin updates
Plug 'semanser/vim-outdated-plugins'
" Powerline replacement " Powerline replacement
Plugin 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes' Plug 'vim-airline/vim-airline-themes'
" Tags " Tags
Plugin 'xolox/vim-misc' Plug 'xolox/vim-misc'
"Plugin 'ludovicchabant/vim-gutentags' "Plugin 'ludovicchabant/vim-gutentags'
Plugin 'majutsushi/tagbar' Plug 'majutsushi/tagbar'
" Templates " Templates
Plugin 'aperezdc/vim-template' Plug 'aperezdc/vim-template'
" Selection expand " Selection expand
Plugin 'terryma/vim-expand-region' Plug 'terryma/vim-expand-region'
Plugin 'kana/vim-textobj-user' Plug 'kana/vim-textobj-user'
Plugin 'kana/vim-textobj-line' Plug 'kana/vim-textobj-line'
Plugin 'kana/vim-submode' Plug 'kana/vim-submode'
" Better Pasting " Better Pasting
Plugin 'ConradIrwin/vim-bracketed-paste' Plug 'ConradIrwin/vim-bracketed-paste'
" Tmux navigation " Tmux navigation
Plugin 'christoomey/vim-tmux-navigator' Plug 'christoomey/vim-tmux-navigator'
" YouCompleteMe " YouCompleteMe
Plugin 'Valloric/YouCompleteMe' function! BuildYCM(info)
Plugin 'rdnetto/YCM-Generator' " info is a dictionary with 3 fields
" - name: name of the plugin
" - status: 'installed', 'updated', or 'unchanged'
" - force: set on PlugInstall! or PlugUpdate!
if a:info.status == 'installed' || a:info.status == 'updated' || a:info.force
execute '!' . g:python_interpreter . ' ./install.py --all'
endif
endfunction
Plug 'ycm-core/YouCompleteMe', { 'do': function('BuildYCM') }
Plug 'rdnetto/YCM-Generator'
" Git " Git
Plugin 'tpope/vim-fugitive' Plug 'tpope/vim-fugitive'
" Comments
Plugin 'scrooloose/nerdcommenter'
" Surround
Plugin 'tpope/vim-surround'
" Snippets " Snippets
" Track the engine. " Track the engine.
Plugin 'SirVer/ultisnips' Plug 'SirVer/ultisnips'
" Snippets are separated from the engine. Add this if you want them: " Snippets are separated from the engine. Add this if you want them:
Plugin 'honza/vim-snippets' Plug 'honza/vim-snippets'
Plugin 'ervandew/supertab' Plug 'ervandew/supertab'
"Buftabeline "Buftabeline
"Plugin 'ap/vim-buftabline' "Plug 'ap/vim-buftabline'
" Highlight matching xml tags " Highlight matching xml tags
Plugin 'Valloric/MatchTagAlways' Plug 'Valloric/MatchTagAlways'
"Javascript "Javascript
Plugin 'pangloss/vim-javascript' Plug 'pangloss/vim-javascript'
" Tex " Tex
Plugin 'lervag/vimtex' Plug 'lervag/vimtex'
"Go "Go
Plugin 'fatih/vim-go' Plug 'fatih/vim-go'
"Macdown (only on macOS)
"if has("macunix")
"Plug 'hashrocket/vim-macdown'
"endif
" Comments
Plug 'scrooloose/nerdcommenter'
" Surround
Plug 'tpope/vim-surround'
endif
call plug#end()
" Run PlugInstall if there are missing plugins
autocmd VimEnter * if len(filter(values(g:plugs), '!isdirectory(v:val.dir)'))
\| PlugInstall --sync | source $MYVIMRC
\| endif
call vundle#end()
filetype plugin indent on filetype plugin indent on
set cinkeys-=0# set cinkeys-=0#
" Terminal emulator settings " Terminal emulator settings
set t_Co=256 set termguicolors
"set term=screen-256color
" Color configuration " Color configuration
colorscheme badwolf " some color .. try
source ~/.config/nvim/scheme.vim
catch
" Ignore non existing file
endtry
highlight Comment cterm=italic gui=italic
syntax enable " enable syntax processing syntax enable " enable syntax processing
" Disable annoying bell " Disable annoying bell
@@ -88,7 +143,8 @@ set modeline
let mapleader = "\<Space>" " Make space the leader key let mapleader = "\<Space>" " Make space the leader key
nnoremap <Leader>w :w<CR>| " Write file nnoremap <Leader>w :w<CR>| " Write file
nnoremap <Leader>q :q<CR>| " Close file nnoremap <Leader>q :q<CR>| " Close file
nnoremap <Leader>s :w !sudo tee %<CR>L<CR> nnoremap <Leader>s :w !sudo -A tee %<CR>L<CR>
cmap w!! w !sudo -A tee > /dev/null %
nmap <Leader><Leader> V| " Change to visual line mode nmap <Leader><Leader> V| " Change to visual line mode
map q: :q| " No command history map q: :q| " No command history
@@ -100,14 +156,23 @@ nmap <Leader>mt :tab sp<CR> | " maximize window to new tab
nmap <Leader>. <C-w>= | " Split windows equally nmap <Leader>. <C-w>= | " Split windows equally
map gb :bnext<CR> map gb :bnext<CR>
map gB :bNext<CR> map gB :bNext<CR>
if !exists('g:vscode')
call submode#enter_with('grow/shrink', 'n', '', '<Leader>r', '<Nop>') call submode#enter_with('grow/shrink', 'n', '', '<Leader>r', '<Nop>')
call submode#map('grow/shrink', 'n', '', '+', '<C-w>+') call submode#map('grow/shrink', 'n', '', '+', '<C-w>+')
call submode#map('grow/shrink', 'n', '', '-', '<C-w>-') call submode#map('grow/shrink', 'n', '', '-', '<C-w>-')
call submode#map('grow/shrink', 'n', '', '<', '<C-w><') call submode#map('grow/shrink', 'n', '', '<', '<C-w><')
call submode#map('grow/shrink', 'n', '', '>', '<C-w>>') call submode#map('grow/shrink', 'n', '', '>', '<C-w>>')
endif
set splitbelow set splitbelow
set splitright set splitright
" Delete without copying
nnoremap <leader>d "_d
xnoremap <leader>d "_d
nnoremap <leader>x "_x
xnoremap <leader>x "_x
xnoremap <leader>p "_dP
"disable submode timeouts: "disable submode timeouts:
let g:submode_timeout = 0 let g:submode_timeout = 0
" don't consume submode-leaving key " don't consume submode-leaving key
@@ -177,6 +242,56 @@ nmap <Leader>t :call TextWrapToggle()<CR>
"augroup END "augroup END
"Copying "Copying
if !exists('g:vscode')
lua << EOF
local uname = vim.loop.os_uname()
_G.OS = uname.sysname
local IS_LINUX = _G.OS == 'Linux'
_G.IS_WSL = IS_LINUX and uname.release:lower():find 'microsoft' and true or false
if _G.IS_WSL then
vim.g.clipboard = {
name = 'WslClipboard',
copy = {
['+'] = 'clip.exe',
['*'] = 'clip.exe',
},
paste = {
['+'] = 'powershell.exe -NoLogo -NoProfile -c [Console]::Out.Write($(Get-Clipboard -Raw).tostring().replace("`r", ""))',
['*'] = 'powershell.exe -NoLogo -NoProfile -c [Console]::Out.Write($(Get-Clipboard -Raw).tostring().replace("`r", ""))',
},
cache_enabled = 0,
}
else
vim.g.clipboard = {
name = 'OSC 52',
copy = {
['+'] = require('vim.ui.clipboard.osc52').copy('+'),
['*'] = require('vim.ui.clipboard.osc52').copy('*'),
},
paste = {
['+'] = require('vim.ui.clipboard.osc52').paste('+'),
['*'] = require('vim.ui.clipboard.osc52').paste('*'),
},
}
end
if vim.env.TMUX ~= nil then
local copy = {'tmux', 'load-buffer', '-w', '-'}
local paste = {'bash', '-c', 'tmux refresh-client -l && sleep 0.05 && tmux save-buffer -'}
vim.g.clipboard = {
name = 'tmux',
copy = {
['+'] = copy,
['*'] = copy,
},
paste = {
['+'] = paste,
['*'] = paste,
},
cache_enabled = 0,
}
end
EOF
endif
set clipboard=unnamedplus,unnamed " Copy/Paste set clipboard=unnamedplus,unnamed " Copy/Paste
" Airline " Airline
@@ -189,9 +304,12 @@ nmap <C-]> <C-w><C-]><C-w>T
" YouCompleteMe " YouCompleteMe
let g:ycm_collect_identifiers_from_tags_files = 1 " Read from tag files let g:ycm_collect_identifiers_from_tags_files = 1 " Read from tag files
let g:ycm_global_ycm_extra_conf = '~/.config/nvim/.ycm_extra_conf.py' " Standard conf let g:ycm_global_ycm_extra_conf = expand('~/.config/nvim/.ycm_extra_conf.py') " Standard conf
let g:ycm_enable_diagnostic_signs = 0 " Do not show semantic error bar let g:ycm_enable_diagnostic_signs = 0 " Do not show semantic error bar
let g:ycm_server_python_interpreter = 'python' let g:ycm_server_python_interpreter=g:python_interpreter
let g:ycm_python_interpreter_path=g:python_interpreter
" Enable virtualenv autocompletion
let g:ycm_python_binary_path = 'python3'
let g:ycm_key_list_select_completion = ['<C-j>', '<C-n>', '<Down>'] let g:ycm_key_list_select_completion = ['<C-j>', '<C-n>', '<Down>']
let g:ycm_key_list_previous_completion = ['<C-k>', '<C-p>', '<Up>'] let g:ycm_key_list_previous_completion = ['<C-k>', '<C-p>', '<Up>']
@@ -199,14 +317,14 @@ let g:ycm_key_list_previous_completion = ['<C-k>', '<C-p>', '<Up>']
let g:easytags_async = 1 let g:easytags_async = 1
" make " make
autocmd QuickFixCmdPre make set cmdheight=2 set switchbuf=split
"autocmd QuickFixCmdPre make set cmdheight=2
"autocmd QuickFixCmdPost make nested cwindow "Open the quickfix window "autocmd QuickFixCmdPost make nested cwindow "Open the quickfix window
"autocmd QuickFixCmdPost make nested lwindow "Change to the quickfix window "autocmd QuickFixCmdPost make nested lwindow "Change to the quickfix window
set switchbuf=split "nmap <F9> :silent! make<CR>:redraw!<CR>
nmap <F9> :silent! make<CR>:redraw!<CR> "nmap <Leader>m :silent! make<CR>:redraw!<CR>
nmap <Leader>m :silent! make<CR>:redraw!<CR> "nmap <Leader>x :silent! make ex<CR>:redraw!<CR>
nmap <Leader>x :silent! make ex<CR>:redraw!<CR> "imap <F9> <ESC>:make<CR>:redraw!<CR>i
imap <F9> <ESC>:make<CR>:redraw!<CR>i
" vim-templates config-file " vim-templates config-file
try try
@@ -229,6 +347,18 @@ let g:UltiSnipsJumpBackwardTrigger="<s-tab>"
let g:UltiSnipsEditSplit="vertical" let g:UltiSnipsEditSplit="vertical"
set rtp+=~/.config/nvim/my-snippets set rtp+=~/.config/nvim/my-snippets
" Folding
set foldmethod=indent
set foldlevel=100
" Use F9 or <Leader>z to toggle folding
inoremap <F9> <C-O>za
nnoremap <F9> za
onoremap <F9> <C-C>za
vnoremap <F9> zf
nnoremap <Leader>z za
onoremap <Leader>z <C-C>za
vnoremap <Leader>z zf
try try
source ~/.config/nvim/.vimrc_config_expand_region source ~/.config/nvim/.vimrc_config_expand_region
catch catch
+2
View File
@@ -0,0 +1,2 @@
set background=dark
colorscheme badwolf
-14
View File
@@ -1,14 +0,0 @@
#! /bin/sh
#
# update.sh
# Copyright (C) 2017 Fabian Ising <fabian@murgi.de>
#
# Distributed under terms of the Apache v2.0 license.
#
git pull
git subtree push --prefix=i3 i3 master
git subtree push --prefix=tmux tmux master
git subtree push --prefix=zsh zsh master
git subtree push --prefix=vim vim master
+8 -7
View File
@@ -5,14 +5,17 @@
# #
# Distributed under terms of the MIT license. # Distributed under terms of the MIT license.
# #
set -e
sudo pacman --needed -Sy archlinux-keyring --noconfirm sudo pacman --needed -Sy archlinux-keyring --noconfirm
sudo pacman --needed -Syu --noconfirm sudo pacman --needed -Syu --noconfirm
yes | sudo pacman --needed -Sy vte3-ng sudo pacman --needed -Sy base-devel gnome neovim zsh tmux openssh alacritty powerline-fonts python-pip python-pynvim --noconfirm
sudo pacman --needed -Sy base-devel xorg xorg-xinit gnome gnome-extra neovim zsh tmux openssh termite powerline powerline-fonts i3 rofi nitrogen python-pip --noconfirm
./clone_and_link.sh ./clone_and_link.sh
cp zsh/.powerline_config_arch.example zsh/.powerline_config ./copy_fonts_arch.sh
cp vim/.vimrc_config_powerline_arch.example vim/.vimrc_config_powerline
cp $PWD/nvim/scheme.vim.template $PWD/nvim/scheme.vim
cp $PWD/.config/alacritty/schemes.yml.template $PWD/.config/alacritty/schemes.yml
if [ $SHELL != "/bin/zsh" ]; then if [ $SHELL != "/bin/zsh" ]; then
chsh -s /usr/bin/zsh; chsh -s /usr/bin/zsh;
fi fi
@@ -25,6 +28,4 @@ for filename in tmux/.*_arch.example; do
cp $filename ${filename:0:-13} cp $filename ${filename:0:-13}
done done
for filename in vim/.*_arch.example; do echo "You should now start tmux (and zsh) and nvim for automatic plugin installation."
cp $filename ${filename:0:-13}
done
Executable
+31
View File
@@ -0,0 +1,31 @@
#! /bin/zsh
#
# setup_mac.sh
# Copyright (C) 2022 fabian <fabian@FordPrefect.home>
#
# Distributed under terms of the MIT license.
#
brew install neovim tmux alacritty coreutils cmake golang npm virtualenvwrapper
source /opt/homebrew/bin/virtualenvwrapper.sh
mkvirtualenv neovim
pip3 install pynvim
npm install -g neovim
echo For alacritty to work seemlessly with tmux, we will have to add '/usr/local/bin'\
to the path. This will require your root password.
sudo launchctl config user path /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
cp $PWD/nvim/scheme.vim.template $PWD/nvim/scheme.vim
cp $PWD/.config/alacritty/schemes.yml.template $PWD/.config/alacritty/schemes.yml
./clone_and_link_mac.sh
for filename in zsh/.*_mac.example(N); do
gln -Tsvf $PWD/$filename $PWD/${filename:0:-12}
done
for filename in tmux/.*_mac.example(N); do
gln -Tsvf $PWD/$filename $PWD/${filename:0:-12}
done
open fonts/*.ttf
echo "You should now start tmux (and zsh) and nvim for automatic plugin installation."
-13
View File
@@ -1,13 +0,0 @@
#! /bin/sh
#
# setup_remotes.sh
# Copyright (C) 2017 Fabian Ising <fabian@murgi.de>
#
# Distributed under terms of the Apache v2.0 license.
#
git remote add i3 git@vcs.murgi.de:dotfiles_fabian/i3config.git
git remote add tmux git@vcs.murgi.de:dotfiles_fabian/tmux.git
git remote add tmux git@vcs.murgi.de:dotfiles_fabian/tmux.git
git remote add vim git@vcs.murgi.de:dotfiles_fabian/vim.git
git remote add zsh git@vcs.murgi.de:dotfiles_fabian/zsh.git
-1
View File
@@ -1,5 +1,4 @@
.tmux_config_* .tmux_config_*
!.tmux_config_*.example !.tmux_config_*.example
plugins/ plugins/
!plugins/tpm
*.log *.log
-3
View File
@@ -1,3 +0,0 @@
[submodule "plugins/tpm"]
path = plugins/tpm
url = https://github.com/tmux-plugins/tpm.git
+3 -3
View File
@@ -1,4 +1,4 @@
set-option -g default-shell /bin/zsh set-option -g default-shell /bin/zsh
bind -Tcopy-mode-vi y send -X copy-pipe "pbcopy" \; display-message "copied to system clipboard" #bind -Tcopy-mode-vi y send -X copy-pipe "pbcopy" \; display-message "copied to system clipboard"
bind C-p run "tmux set-buffer \"$pbpaste\"; tmux paste-buffer" #bind C-p run "tmux set-buffer \"$pbpaste\"; tmux paste-buffer"
bind C-y run "tmux save-buffer - | pbcopy" #bind C-y run "tmux save-buffer - | pbcopy"
+64 -23
View File
@@ -1,7 +1,8 @@
set-environment -g PATH "/usr/local/bin:/bin:/usr/bin" set-environment -g PATH "/usr/local/bin:/bin:/usr/bin:/opt/homebrew/bin"
set -g default-terminal "xterm-256color" set -g default-terminal "tmux-256color"
set -sa terminal-features ",xterm-256color:RGB"
set -g history-limit 100000 set -g history-limit 20000
# Remap prefix # Remap prefix
unbind C-b unbind C-b
@@ -10,11 +11,35 @@ bind-key C-a send-prefix
bind-key -n C-b send-keys C-b bind-key -n C-b send-keys C-b
#bind-key -n C-b send-prefix #bind-key -n C-b send-prefix
# Use F12 to toggle hotekys on/off for nested remote tmux sessions
bind -T root F12 \
set prefix None \;\
set key-table off \;\
set status-style "fg=colour245,bg=colour238"\;\
refresh-client -S
bind -T off F12 \
set -u prefix \;\
set -u key-table \;\
set -u status-style \;\
refresh-client -S
setw -g mode-keys vi setw -g mode-keys vi
set-option -g status-keys vi set-option -g status-keys vi
bind | split-window -h -c '#{pane_current_path}' # Splits keep the source pane's cwd AND its active Python venv. #{@venv} is set
bind - split-window -v -c '#{pane_current_path}' # per-pane by the shell (see .virtual_env_config.zsh); we go through run-shell
# because tmux expands FORMATS in a run-shell command but NOT in split-window's
# own -e value. The new pane inherits VIRTUAL_ENV and .zshrc re-activates it;
# when the source pane has no venv we omit -e so no empty var leaks in. New
# *windows* deliberately don't inherit it.
bind | run-shell 'v="#{@venv}"; d="#{pane_current_path}"; if [ -n "$v" ]; then tmux split-window -h -c "$d" -e VIRTUAL_ENV="$v"; else tmux split-window -h -c "$d"; fi'
bind - run-shell 'v="#{@venv}"; d="#{pane_current_path}"; if [ -n "$v" ]; then tmux split-window -v -c "$d" -e VIRTUAL_ENV="$v"; else tmux split-window -v -c "$d"; fi'
# New windows always start in the base environment: -e clears any inherited
# VIRTUAL_ENV (e.g. if the tmux server was first started from inside a venv, so
# its global env carries one), regardless of what the source pane had.
bind c new-window -e VIRTUAL_ENV=
# Switch windows # Switch windows
bind-key -n M-Left select-window -t -1 bind-key -n M-Left select-window -t -1
@@ -33,15 +58,14 @@ bind k clear-history\; display "History cleared"
bind-key a set-window-option synchronize-panes bind-key a set-window-option synchronize-panes
bind r source-file ~/.tmux.conf\; display "Conf reloaded!" bind r source-file ~/.tmux.conf\; display "Tmux conf reloaded!"
set -g mouse on set -g mouse on
set-option -g focus-events on
# Vi copypaste mode #bind-key -Tcopy-mode-vi 'v' send -X begin-selection
set-window-option -g mode-keys vi #bind-key -Tcopy-mode-vi 'y' send -X copy-selection
bind-key -Tcopy-mode-vi 'v' send -X begin-selection #bind -Tcopy-mode-vi y send -X copy-pipe "xclip -i -sel p -f | xclip -i -sel c" \; display-message "copied to system clipboard"
bind-key -Tcopy-mode-vi 'y' send -X copy-selection
bind -Tcopy-mode-vi y send -X copy-pipe "xclip -i -sel p -f | xclip -i -sel c" \; display-message "copied to system clipboard"
# Smart pane switching with awareness of vim splits # Smart pane switching with awareness of vim splits
# See: https://github.com/christoomey/vim-tmux-navigator # See: https://github.com/christoomey/vim-tmux-navigator
@@ -55,16 +79,31 @@ bind -n C-l if-shell "$is_vim" "send-keys C-l" "select-pane -R"
bind-key C-x send-keys C-x bind-key C-x send-keys C-x
bind-key C-o send-keys C-o bind-key C-o send-keys C-o
# Copying # Copying - Most of this is done in tmux-yank!
# move x clipboard into tmux paste buffer # move x clipboard into tmux paste buffer
bind C-p run "tmux set-buffer \"$(xclip -o)\"; tmux paste-buffer" #bind C-p run "tmux set-buffer \"$(xclip -o)\"; tmux paste-buffer"
# move tmux copy buffer into x clipboard # move tmux copy buffer into x clipboard
set-option -s set-clipboard on # Vi copypaste mode
set-window-option -g mode-keys vi
set -g allow-passthrough on
set-option -g set-clipboard on
set -g @yank_with_mouse off
set -g @yank_action 'copy-pipe'
bind-key -Tcopy-mode-vi 'C-right' send -X next-word
bind-key -Tcopy-mode-vi 'C-left' send -X previous-word
unbind-key -T copy-mode-vi MouseDragEnd1Pane
if '[ `uname` == Darwin ]' \ if '[ `uname` == Darwin ]' \
'source-file ~/.tmux/.mac_config' 'source-file ~/.tmux/.mac_config'
source-file ~/.tmux/.tmux_config_powerline
set-option -g set-titles on
set -g visual-bell on
# Forward bells from ALL panes to terminal (not just active one)
set -g bell-action any
# Enable bell monitoring
set -g monitor-bell on
# Escape timeout for nvim # Escape timeout for nvim
set -sg escape-time 10 set -sg escape-time 10
@@ -72,17 +111,19 @@ set -sg escape-time 10
# List of plugins # List of plugins
set -g @plugin 'tmux-plugins/tpm' set -g @plugin 'tmux-plugins/tpm'
#set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-sidebar'
set -g @plugin 'tmux-plugins/tmux-open' set -g @plugin 'tmux-plugins/tmux-open'
set -g @plugin 'tmux-plugins/tmux-yank' set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'jimeh/tmux-themepack' set -g @plugin 'jimeh/tmux-themepack'
set -g @themepack 'powerline/double/blue' set -g @plugin 'nhdaly/tmux-better-mouse-mode'
set -g @themepack 'powerline/double/green'
# Other examples: set -g @tpm-clean 'u'
# set -g @plugin 'github_username/plugin_name'
# set -g @plugin 'git@github.com/user/plugin' setenv -g TMUX_PLUGIN_MANAGER_PATH "$HOME/.tmux/plugins/"
# set -g @plugin 'git@bitbucket.com/user/plugin'
if "test ! -d ~/.tmux/plugins/tpm" \
"run 'git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm && \
~/.tmux/plugins/tpm/bin/install_plugins'"
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf) # Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm' # >> /tmp/tpm_out 2>&1 >> /tmp/tpm_out' run -b '~/.tmux/plugins/tpm/tpm || true'
-1
View File
@@ -1 +0,0 @@
source /usr/lib/python3.7/site-packages/powerline/bindings/tmux/powerline.conf
@@ -1 +0,0 @@
source /usr/local/lib/python2.7/dist-packages/powerline/bindings/tmux/powerline.conf
@@ -1,2 +0,0 @@
source $HOME/.local/lib/python3.9/site-packages/powerline/bindings/tmux/powerline.conf
-1
View File
@@ -1 +0,0 @@
source '/usr/local/lib/python3.6/site-packages/powerline/bindings/tmux/powerline.conf'
-11
View File
@@ -1,11 +0,0 @@
#! /bin/sh
#
# test.sh
# Copyright (C) 2018 fabian <fabian@FordPrefect.local>
#
# Distributed under terms of the MIT license.
#
export PATH=$PATH:/usr/local/bin
tmux
-1
View File
@@ -1 +0,0 @@
/Users/fabian/Masterarbeit/thesis 40
+13
View File
@@ -0,0 +1,13 @@
#!/bin/sh
#
# tmux-attach - attach to first unattached session or
# create new session if none are found
#
N=$(tmux ls | grep -v attached | head -1 | cut -d: -f1)
if [[ ! -z $N ]]
then
ATTACH_OPTS="attach -t $N"
fi
exec tmux $ATTACH_OPTS
-14
View File
@@ -1,14 +0,0 @@
#! /bin/sh
#
# update.sh
# Copyright (C) 2017 Fabian Ising <fabian@murgi.de>
#
# Distributed under terms of the Apache v2.0 license.
#
git pull
git subtree pull --prefix=i3 i3 master --squash
git subtree pull --prefix=tmux tmux master --squash
git subtree pull --prefix=zsh zsh master --squash
git subtree pull --prefix=vim vim master --squash
Executable
+96
View File
@@ -0,0 +1,96 @@
#!/bin/bash
ARCH=`uname -m`
if [[ $ARCH == "arm64" ]]; then
PREFIX="/opt/homebrew/"
else
PREFIX="/usr/local/"
fi
function set_permissions {
echo "----------"
echo "Disabling Quarantine for Casks ..."
echo "----------"
sudo find $PREFIX/Caskroom -name *.app -exec bash -c "xattr -d com.apple.quarantine {} 2> /dev/null" \;
sudo find $PREFIX/Caskroom -type f -perm +111 -exec bash -c "xattr -d com.apple.quarantine {} 2> /dev/null" \;
sudo find /Applications/ -name *.app -exec bash -c 'xattr -d com.apple.quarantine "{}" 2> /dev/null' \;
sudo find /Applications/ -type f -perm +111 -exec bash -c 'xattr -d com.apple.quarantine "{}" 2> /dev/null' \;
}
function software_update {
echo "----------"
echo "Running software update"
echo "----------"
softwareupdate --all --install --force
}
function update_brew {
echo "----------"
echo "Updating brew software"
echo "----------"
brew update
sudo -u $USER brew upgrade
echo "----------"
echo "Updating casks"
echo "----------"
sudo -u $USER brew upgrade --cask --greedy --verbose
}
function cleanup {
echo "----------"
echo "Running cleanup"
echo "----------"
sudo -u $USER brew cleanup -s
}
function diagnostics {
echo "----------"
echo "Running diagnostics"
echo "----------"
brew doctor
brew missing
}
function update_others {
echo "----------"
echo "Update other stuff"
echo "----------"
if [ -x "$(command -v claude)" ]; then
echo "-- CLAUDE"
claude --update
fi
if [ -x "$(command -v codex)" ]; then
echo "-- CODEX"
codex update
fi
}
if [[ $* == *--help* ]]; then
echo "Usage: $0 [option]"
echo "Default options: --brew-update --update-others --cleanup --diagnostics"
echo -e "Options:\n\t--brew-update\n\t--update-others\n\t--cleanup\n\t--diagnostics\n\t--permission-fix\n\t--system-update"
fi
if [[ -z $* ]]; then
set -- "$*" "--brew-update --cleanup --diagnostics --update-others"
fi
if [[ $* == *--system-update* ]]; then
software_update
fi
if [[ $* == *--brew-update* ]]; then
update_brew
fi
if [[ $* == *--update-others* ]]; then
update_others
fi
if [[ $* == *--cleanup* ]]; then
cleanup
fi
if [[ $* == *--diagnostics* ]]; then
diagnostics
fi
if [[ $* == *--permission-fix* ]]; then
set_permissions
fi
+6
View File
@@ -0,0 +1,6 @@
#!/bin/zsh
# This hook is sourced after every virtualenv is activated.
if [[ -n "$TMUX" ]]; then
tmux set-environment VIRTUAL_ENV $VIRTUAL_ENV
fi
+6
View File
@@ -0,0 +1,6 @@
#!/bin/zsh
# This hook is sourced after every virtualenv is deactivated.
if [[ -n "$TMUX" ]]; then
tmux set-environment -r VIRTUAL_ENV
fi
+4
View File
@@ -0,0 +1,4 @@
#!/bin/zsh
# This hook is sourced after a new virtualenv is activated.
pip3 install neovim
+4
View File
@@ -1,2 +1,6 @@
.*_config* .*_config*
!.*_config*.example !.*_config*.example
.p10k.zsh
.p10k.mac.zsh
antigen/
.env.local
-3
View File
@@ -1,3 +0,0 @@
[submodule "antigen"]
path = antigen
url = https://github.com/zsh-users/antigen.git
-13
View File
@@ -1,13 +0,0 @@
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export POWERLINE_CONFIG_COMMAND=/usr/local/bin/powerline-config
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
# Set path to work with pycharm ...
[[ "$PATH" =~ /usr/local/bin ]] || export PATH=$PATH:/usr/local/bin
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
test -e "${HOME}/.iterm2_shell_integration.zsh" && source "${HOME}/.iterm2_shell_integration.zsh"
# Research
export PATH="/Users/fabian/Labor/Research/code_signing/02-tools:$PATH"
+42
View File
@@ -0,0 +1,42 @@
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export JAVA_HOME=`/usr/libexec/java_home`
defaults write .GlobalPreferences AppleLocale en_DE
# Set path to work with pycharm ...
# [[ "$PATH" =~ /usr/local/bin ]] || export PATH=$PATH:/usr/local/bin
ARCH=`uname -m`
if [[ $ARCH == "arm64" ]]; then
export HOMEBREW_PREFIX="/opt/homebrew"
else
export HOMEBREW_PREFIX="/usr/local"
fi
export PATH="$HOMEBREW_PREFIX/opt/coreutils/libexec/gnubin:$HOME/.local/bin:$HOMEBREW_PREFIX/bin:$PATH:$HOMEBREW_PREFIX/sbin"
# macOS-specific completion functions.
fpath=("${ZDOTDIR:-$HOME}/.zsh/completions_mac" $fpath)
autoload -Uz _launchctl
compdef _launchctl launchctl
# test -e "${HOME}/.iterm2_shell_integration.zsh" && source "${HOME}/.iterm2_shell_integration.zsh"
# Research
# export PATH="/Users/fabian/Labor/Research/code_signing/02-tools:$PATH"
alias tailscale=/Applications/Tailscale.app/Contents/MacOS/Tailscale
#alias virt-manager="LD_PRELOAD=/opt/homebrew/Cellar/glib/2.86.0/lib virt-manager"
#alias virt-manager="LD_PRELOAD=/opt/homebrew/Cellar/glib/2.86.0/lib $HOME/python-envs/virt-manager/bin/python3 $HOME/stuff/virt-manager/virt-manager"
HOMEBREW_COMMAND_NOT_FOUND_HANDLER="$(brew --repository)/Library/Homebrew/command-not-found/handler.sh"
if [ -f "$HOMEBREW_COMMAND_NOT_FOUND_HANDLER" ]; then
source "$HOMEBREW_COMMAND_NOT_FOUND_HANDLER";
fi
export DYLD_FALLBACK_LIBRARY_PATH="$HOMEBREW_PREFIX/lib${DYLD_FALLBACK_LIBRARY_PATH:+:$DYLD_FALLBACK_LIBRARY_PATH}"
export GI_TYPELIB_PATH="$HOMEBREW_PREFIX/lib/girepository-1.0${GI_TYPELIB_PATH:+:$GI_TYPELIB_PATH}"
export PKG_CONFIG_PATH="$HOMEBREW_PREFIX/lib/pkgconfig:$HOMEBREW_PREFIX/share/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
alias python="python3"
# Tahoe 26 WindowServer bug: windows stay interactive but can't be moved by
# mouse or API until the window-management daemon is restarted (no logout).
alias unstick-windows="killall WindowManager"
File diff suppressed because it is too large Load Diff
-1
View File
@@ -1 +0,0 @@
source /usr/lib/python3.8/site-packages/powerline/bindings/zsh/powerline.zsh
-1
View File
@@ -1 +0,0 @@
source /usr/local/lib/python2.7/dist-packages/powerline/bindings/zsh/powerline.zsh
-1
View File
@@ -1 +0,0 @@
source $HOME/.local/lib/python3.9/site-packages/powerline/bindings/zsh/powerline.zsh
+75
View File
@@ -0,0 +1,75 @@
ARCH=`uname -m`
if [[ $ARCH == "arm64" ]]; then
PREFIX="/opt/homebrew"
else
PREFIX="/usr/local"
fi
export WORKON_HOME=~/python-envs
export VIRTUALENVWRAPPER_VIRTUALENV=$PREFIX/bin/virtualenv
mkdir -p $WORKON_HOME
source $PREFIX/bin/virtualenvwrapper.sh
# NOTE: an inherited VIRTUAL_ENV is *not* re-activated here — that happens at the
# very end of .zshrc so activate captures the fully-built PATH (see the comment
# there). Sourcing virtualenvwrapper.sh above only defines workon/deactivate/etc.
# Mirror the current venv into a per-pane tmux option so that splitting a pane
# can carry it into the new pane (.tmux.conf reads #{@venv} with `-e`). Per-pane
# (not session) state is what lets two panes hold different venvs and lets new
# *windows* start clean. Only fork tmux when the value actually changes.
_venv_track_precmd() {
[[ -n $TMUX ]] || return
if [[ "${VIRTUAL_ENV:-}" != "${_LAST_TRACKED_VENV-unset}" ]]; then
tmux set -p @venv "${VIRTUAL_ENV:-}" 2>/dev/null
_LAST_TRACKED_VENV="${VIRTUAL_ENV:-}"
fi
}
autoload -Uz add-zsh-hook
add-zsh-hook precmd _venv_track_precmd
# Which venv an agent shell should use: nearest .venv/venv walking up from $1
# (default $PWD, stopping above $HOME), else the shared fallback env.
_agent_venv_path() {
local d=${1:-$PWD} c
while [[ $d == */* && $d != $HOME ]]; do
for c in "$d/.venv" "$d/venv"; do
[[ -f $c/bin/activate ]] && { print -r -- "$c"; return 0 }
done
d=${d%/*}
done
[[ -f $HOME/python-envs/claude/bin/activate ]] && print -r -- "$HOME/python-envs/claude"
}
# Agent shells source this file once per session, rooted at the project dir, and
# snapshot the result: CLAUDECODE marks Claude Code, CODEX_SHELL the ChatGPT/Codex
# desktop app. Only VIRTUAL_ENV is set here; the block at the end of .zshrc turns it
# into an activation once PATH is fully built. Terminal launches use the wrappers below.
if [[ -n ${CLAUDECODE:-} || -n ${CODEX_SHELL:-} ]] && [[ -z ${VIRTUAL_ENV:-} ]]; then
_venv=$(_agent_venv_path)
[[ -n $_venv ]] && export VIRTUAL_ENV=$_venv
unset _venv
fi
# Claude Code takes PATH from its own process env: its shell snapshot writes
# `export PATH=` last, discarding whatever .zshrc built. So the venv has to be
# active *before* launch. The subshell keeps this shell's PATH untouched.
claude() {
if [[ -n ${VIRTUAL_ENV:-} ]]; then
command claude "$@"
return
fi
local v=$(_agent_venv_path)
( [[ -n $v ]] && source "$v/bin/activate"; exec command claude "$@" )
}
# Codex captures the profile's own PATH, so hand it VIRTUAL_ENV only and let the
# activation block at the end of .zshrc order PATH correctly. Pre-activating here
# would leave venv/bin behind gnubin and homebrew, same as tmux-inherited venvs.
codex() {
if [[ -n ${VIRTUAL_ENV:-} ]]; then
command codex "$@"
else
VIRTUAL_ENV=$(_agent_venv_path) command codex "$@"
fi
}
+27
View File
@@ -0,0 +1,27 @@
# Load OMZ plugins
ohmyzsh/ohmyzsh
ohmyzsh/ohmyzsh path:lib
ohmyzsh/ohmyzsh path:plugins/git
ohmyzsh/ohmyzsh path:plugins/golang
ohmyzsh/ohmyzsh path:plugins/ssh-agent
ohmyzsh/ohmyzsh path:plugins/pip
ohmyzsh/ohmyzsh path:plugins/python
ohmyzsh/ohmyzsh path:plugins/brew
ohmyzsh/ohmyzsh path:plugins/virtualenv
ohmyzsh/ohmyzsh path:plugins/command-not-found
ohmyzsh/ohmyzsh path:plugins/docker-compose
ohmyzsh/ohmyzsh path:plugins/docker
ohmyzsh/ohmyzsh path:plugins/vi-mode
romkatv/powerlevel10k
zsh-users/zsh-autosuggestions
zsh-users/zsh-completions
zsh-users/zsh-history-substring-search
urbainvaes/fzf-marks
zdharma-continuum/fast-syntax-highlighting
# Select with shift
jirutka/zsh-shift-select
# Initialize completions
belak/zsh-utils path:completion
+62 -71
View File
@@ -1,86 +1,77 @@
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. # Powerlevel10k instant prompt and machine-local layers must remain first.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
#if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
#source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
#fi
export PATH="$HOME/.local/bin:$PATH"
[[ -f ~/.zsh/.powerline_config ]] && source ~/.zsh/.powerline_config [[ -f ~/.zsh/.powerline_config ]] && source ~/.zsh/.powerline_config
[[ -f ~/.zsh/.user_config ]] && source ~/.zsh/.user_config [[ -f ~/.zsh/.user_config ]] && source ~/.zsh/.user_config
[[ -f ~/.zsh/.virtual_env_config.zsh ]] && source ~/.zsh/.virtual_env_config.zsh [[ -f ~/.zsh/.virtual_env_config.zsh ]] && source ~/.zsh/.virtual_env_config.zsh
[[ -f /usr/share/doc/find-the-command/ftc.zsh ]] && source /usr/share/doc/find-the-command/ftc.zsh
[[ -f ~/.zsh/.local_config ]] && source ~/.zsh/.local_config [[ -f ~/.zsh/.local_config ]] && source ~/.zsh/.local_config
[[ -f ~/.zsh/.env.local ]] && source ~/.zsh/.env.local
# Load Antigen source "${ZDOTDIR:-$HOME}/.zsh/lib/updates.zsh"
setopt interactivecomments export LC_OSC52=1
setopt HIST_IGNORE_SPACE
source ~/.zsh/antigen/antigen.zsh
# Clear screen by ctrl+q # Completions for tools installed under ~/.local (e.g. tools-repo's safe*
bindkey '^q' clear-screen # wrappers). Must precede antidote, whose completion plugin runs compinit.
fpath=("$HOME/.local/share/zsh/site-functions" $fpath)
# Load various lib files plugins_txt=${ZDOTDIR:-$HOME}/.zsh/.zsh_plugins.txt
antigen use oh-my-zsh static_file=${ZDOTDIR:-$HOME}/.cache/zsh/.zsh_plugins.zsh
source "${ZDOTDIR:-$HOME}/.zsh/lib/antidote.zsh"
source "${ZDOTDIR:-$HOME}/.zsh/lib/interactive.zsh"
# Antigen Theme bindkey '^w' kill-region
antigen theme romkatv/powerlevel10k powerlevel10k bindkey -v
VI_MODE_SET_CURSOR=true
# Antigen Bundles [[ -f ~/.zsh/.mac_config.zsh ]] && source ~/.zsh/.mac_config.zsh
if (( $+commands[go] )); then
export GOPATH="$(go env GOPATH 2>/dev/null)"
[[ -n "$GOPATH" ]] && path+=("$GOPATH/bin")
fi
antigen bundle git # Use safe wrappers after ~/.local/bin has been added to PATH.
antigen bundle heroku (( $+commands[safecp] )) && alias cp=safecp
#antigen bundle command-not-found (( $+commands[safemv] )) && alias mv=safemv
antigen bundle go (( $+commands[safescp] )) && alias scp=safescp
# antigen bundle tmuxinator if [[ -f ~/.ssh/sudo_key ]]; then
antigen bundle zsh-users/zsh-syntax-highlighting [[ -e /tmp/sudo-agent.sock ]] || ssh-agent -a /tmp/sudo-agent.sock &>/dev/null
antigen bundle zsh-users/zsh-autosuggestions SSH_AUTH_SOCK=/tmp/sudo-agent.sock ssh-add -l |
antigen bundle zsh-users/zsh-completions grep -q "$(ssh-keygen -lf ~/.ssh/sudo_key | awk '{print $2}')" ||
antigen bundle urbainvaes/fzf-marks SSH_AUTH_SOCK=/tmp/sudo-agent.sock ssh-add ~/.ssh/sudo_key
fi
export SUDO_ASKPASS=$(command -v ssh-askpass)
# For SSH, starting ssh-agent is annoying if [[ -f ~/dotfiles/zsh/.p10k.mac.zsh ]]; then
antigen bundle ssh-agent p10k_config=~/dotfiles/zsh/.p10k.mac.zsh
else
p10k_config=~/dotfiles/zsh/.p10k.zsh
fi
source "${ZDOTDIR:-$HOME}/.zsh/lib/prompt.zsh"
# Python Plugins alias screenshot_mode='powerlevel10k_plugin_unload; export PS1="$ "; python3 ~/.config/alacritty/screenshot_mode.py on'
antigen bundle pip alias screenshot_mode_off='prompt_powerlevel9k_setup; python3 ~/.config/alacritty/screenshot_mode.py off'
antigen bundle python antidote update &>/dev/null &|
antigen bundle virtualenv
antigen bundle virtualenv [[ -d "$HOME/.lmstudio/bin" ]] && path+=("$HOME/.lmstudio/bin")
[[ -d "$HOME/.runai/bin" ]] && path+=("$HOME/.runai/bin")
runai_bin="$HOME/.runai/bin/runai"
runai_completion=${ZDOTDIR:-$HOME}/.cache/zsh/runai-completion.zsh
if [[ -x "$runai_bin" ]]; then
if [[ ! -s "$runai_completion" || "$runai_bin" -nt "$runai_completion" ]]; then
runai_completion_tmp="$runai_completion.$$.tmp"
if "$runai_bin" --quiet completion zsh >| "$runai_completion_tmp"; then
command mv -f "$runai_completion_tmp" "$runai_completion"
else
command rm -f "$runai_completion_tmp"
fi
fi
[[ -s "$runai_completion" ]] && source "$runai_completion"
fi
antigen bundle "greymd/docker-zsh-completion" # Keep this last: activate must snapshot the fully built PATH for deactivate.
typeset -U path PATH
antigen apply [[ -z "${VIRTUAL_ENV:-}" ]] && unset VIRTUAL_ENV
alias vim=nvim if [[ -n "$VIRTUAL_ENV" && -f "$VIRTUAL_ENV/bin/activate" ]]; then
alias sudo='sudo ' if [[ ${PATH%%:*} != "$VIRTUAL_ENV/bin" ]]; then
export EDITOR='nvim' source "$VIRTUAL_ENV/bin/activate"
export PATH="/usr/local/opt/gnu-getopt/bin:$PATH" fi
fi
test -e "${HOME}/.iterm2_shell_integration.zsh" && source "${HOME}/.iterm2_shell_integration.zsh"
PATH="/home/fabian/perl5/bin${PATH:+:${PATH}}"; export PATH;
PERL5LIB="/home/fabian/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="/home/fabian/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"/home/fabian/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/home/fabian/perl5"; export PERL_MM_OPT;
alias ls="ls --color=always"
export PATH="$PATH:${HOME}/Labor/tls-in-muas/starttls-research/99-Tools:/home/fabian/go/bin"
# For ccache
export CCACHE_CPP2=YES
delzip() {
unzip -Z -1 "$@" | xargs -I{} rm -rf {}
}
# mitmproxy
export MITMPROXY_SSLKEYLOGFILE="~/.mitmproxy/sslkeylogfile.txt"
[[ -f ~/.zsh/.mac_config ]] && source ~/.zsh/.mac_config
# Powerlevel 10k
# Remove padding on right side
ZLE_RPROMPT_INDENT=0
# To customize prompt, run `p10k configure` or edit ~/dotfiles/zsh/.p10k.zsh.
[[ ! -f ~/dotfiles/zsh/.p10k.zsh ]] || source ~/dotfiles/zsh/.p10k.zsh
Submodule zsh/antigen deleted from 74aa897570
+127
View File
@@ -0,0 +1,127 @@
#compdef launchctl
# macOS launchd completion.
_launchctl_domains() {
local uid=$EUID
local -a domains=(
'system:system services'
"user/${uid}:services for the current user"
"gui/${uid}:services in the current graphical session"
)
_describe -t domains 'launchd domain' domains
}
_launchctl_service_targets() {
local uid=$EUID label
local -a targets=()
while IFS=$'\t' read -r _ _ label; do
[[ -n $label ]] && targets+=("gui/${uid}/${label}")
done < <(launchctl list 2>/dev/null | tail -n +2)
if (( ${#targets} )); then
_describe -t services 'launchd service target' targets
else
_message 'launchd service target'
fi
}
_launchctl() {
local context state state_descr line
typeset -A opt_args
local -a commands=(
'bootstrap:register services or directories in a domain'
'bootout:unregister services or directories from a domain'
'enable:enable a service'
'disable:disable a service'
'kickstart:run or restart a service'
'kill:send a signal to a service'
'print:show a domain or service'
'print-disabled:show persistent enable and disable overrides'
'list:list loaded services'
'start:start a legacy service by label'
'stop:stop a legacy service by label'
'remove:remove a legacy service by label'
'load:load legacy plist files'
'unload:unload legacy plist files'
'setenv:set an environment variable'
'unsetenv:unset an environment variable'
'getenv:get an environment variable'
'limit:view or change resource limits'
'config:set persistent launchd configuration'
'dumpstate:dump launchd state'
'reboot:reboot a launchd domain or the system'
'version:show launchd version'
'help:show launchctl help'
)
_arguments -C \
'1:command:->command' \
'*::argument:->args'
case $state in
command)
_describe -t commands 'launchctl command' commands
;;
args)
case $words[2] in
bootstrap)
if (( CURRENT == 3 )); then
_launchctl_domains
else
_files -g '*.plist(-.)'
fi
;;
bootout)
if (( CURRENT == 3 )); then
_launchctl_domains
_launchctl_service_targets
else
_files -g '*.plist(-.)'
fi
;;
enable|disable|kickstart)
_launchctl_service_targets
;;
print)
_launchctl_domains
_launchctl_service_targets
;;
print-disabled)
_launchctl_domains
;;
load|unload)
_files -g '*.plist(-.)'
;;
start|stop|remove)
local -a labels
labels=(${${(f)"$(launchctl list 2>/dev/null)"}[2,-1]##*$'\t'})
_describe -t services 'service label' labels
;;
kill)
if (( CURRENT == 3 )); then
_signals
else
_launchctl_service_targets
fi
;;
setenv)
if (( CURRENT == 3 )); then
_parameters
else
_message 'value'
fi
;;
getenv|unsetenv)
_parameters
;;
*)
_message 'argument'
;;
esac
;;
esac
}
_launchctl "$@"
+12
View File
@@ -0,0 +1,12 @@
# Callers set plugins_txt and static_file before sourcing this module.
mkdir -p "${static_file:h}"
if [[ ! -e ${ZDOTDIR:-$HOME}/.antidote ]]; then
git clone https://github.com/mattmc3/antidote.git "${ZDOTDIR:-$HOME}/.antidote"
fi
zstyle ':completion:*:ssh:*' hosts off
zstyle ':completion:*:scp:*' hosts off
zstyle ':completion:*:commands' rehash 1
source "${ZDOTDIR:-$HOME}/.antidote/antidote.zsh"
antidote load "$plugins_txt" "$static_file"
+110
View File
@@ -0,0 +1,110 @@
setopt interactivecomments
HISTSIZE=100000
SAVEHIST=100000
setopt EXTENDED_HISTORY
setopt INC_APPEND_HISTORY
setopt SHARE_HISTORY
setopt HIST_EXPIRE_DUPS_FIRST
setopt HIST_IGNORE_DUPS
setopt HIST_IGNORE_ALL_DUPS
setopt HIST_FIND_NO_DUPS
setopt HIST_IGNORE_SPACE
setopt HIST_SAVE_NO_DUPS
setopt HIST_REDUCE_BLANKS
bindkey '^q' clear-screen
(( $+commands[nvim] )) && alias vim=nvim
(( $+commands[nvim] )) && export EDITOR=nvim VISUAL=nvim
alias sudo='sudo '
alias ls='ls --color=always'
alias cgrep='grep --color=always'
alias cdiff='git diff --color-words --no-index'
# Remove the files an archive extracted into the current directory.
# Lists what it will delete and asks first; -f skips the prompt, -n dry-runs.
# Directories are only removed if they end up empty.
delzip() {
emulate -L zsh
setopt local_options
local dry=0 force=0
while [[ $1 == -[nf] ]]; do
[[ $1 == -n ]] && dry=1 || force=1
shift
done
(( $# )) || { print -ru2 "usage: delzip [-n|-f] <archive.zip>..."; return 2 }
local zip entry parent
local -a entries files dirs
for zip in "$@"; do
[[ -f $zip ]] || { print -ru2 "delzip: no such file: $zip"; return 1 }
entries=("${(f)$(unzip -Z -1 -- $zip)}") || return 1
for entry in $entries; do
[[ -n $entry ]] || continue
# zip-slip guard: never touch anything outside the cwd
if [[ $entry == (/|~)* || $entry == (|*/)..(|/*) ]]; then
print -ru2 "delzip: refusing unsafe path: $entry"
return 1
fi
[[ $entry == */ ]] && dirs+=(${entry%/}) || files+=($entry)
# many archives omit directory entries, so infer them from the
# paths as well; unzip creates those dirs regardless
parent=${entry%/}
while [[ $parent == */* ]]; do
parent=${parent%/*}
dirs+=($parent)
done
done
done
dirs=(${(u)dirs})
# only keep what is actually on disk, so the list reflects reality;
# -L catches broken symlinks, which -e alone misses
local -a present
present=(); for entry in $files; do [[ -e $entry || -L $entry ]] && present+=($entry); done
files=($present)
present=(); for entry in $dirs; do [[ -d $entry ]] && present+=($entry); done
dirs=($present)
(( $#files + $#dirs )) || { print -ru2 "delzip: nothing to remove here (already gone?)"; return 1 }
if (( dry )); then
print -rl -- ${files} ${(O)dirs}
return 0
fi
if (( ! force )); then
[[ -t 0 ]] || { print -ru2 "delzip: not a terminal, use -f to skip the prompt"; return 1 }
print -r -- "delzip: remove ${#files} file(s) under ${PWD}:"
print -rl -- " "${^files[1,20]}
(( $#files > 20 )) && print -r -- " ... and $(( $#files - 20 )) more"
(( $#dirs )) && print -r -- "plus ${#dirs} directory/ies, if they end up empty."
read -q "?Proceed? [y/N] " || { print -r -- $'\naborted'; return 1 }
print
fi
(( $#files )) && rm -f -- $files
# deepest first, so parents can empty out; rmdir refuses non-empty dirs
for entry in ${(O)dirs}; do
[[ -d $entry ]] && rmdir -- $entry 2>/dev/null
done
return 0
}
export MITMPROXY_SSLKEYLOGFILE="$HOME/.mitmproxy/sslkeylogfile.txt"
unset ZSH_AUTOSUGGEST_USE_ASYNC
export LANG='en_US.UTF-8'
export LC_CTYPE='en_US.UTF-8'
export TIME_STYLE='long-iso'
pasteinit() {
OLD_SELF_INSERT=${${(s.:.)widgets[self-insert]}[2,3]}
zle -N self-insert url-quote-magic
}
pastefinish() {
zle -N self-insert "$OLD_SELF_INSERT"
}
zstyle :bracketed-paste-magic paste-init pasteinit
zstyle :bracketed-paste-magic paste-finish pastefinish
ZSH_AUTOSUGGEST_CLEAR_WIDGETS+=(bracketed-paste)
+3
View File
@@ -0,0 +1,3 @@
# Callers select p10k_config before sourcing this module.
ZLE_RPROMPT_INDENT=0
[[ -z "$p10k_config" || ! -f "$p10k_config" ]] || source "$p10k_config"
+67
View File
@@ -0,0 +1,67 @@
# Background repository maintenance shared by desktop and server shells.
update_dotfiles() {
local repo="$HOME/dotfiles"
local cache_dir="${ZDOTDIR:-$HOME}/.cache/zsh"
local notice_file="$cache_dir/dotfiles-update-notice"
local notice_tmp="$notice_file.$$.tmp"
local -a TO; (( $+commands[timeout] )) && TO=(timeout -k 5 15)
GIT_SSH_COMMAND='ssh -o BatchMode=yes -o ConnectTimeout=5 -o ControlMaster=no -o ControlPath=none' \
$TO git -C "$repo" fetch --quiet </dev/null 2>/dev/null || return
git -C "$repo" rev-parse --abbrev-ref '@{u}' >/dev/null 2>&1 || return
git -C "$repo" merge-base --is-ancestor '@{u}' HEAD 2>/dev/null && return
if git -C "$repo" merge --ff-only --quiet '@{u}' 2>/dev/null; then
local notice="⬆ dotfiles updated — run: exec zsh"
mkdir -p "$cache_dir" || return
print -r -- "$notice" >| "$notice_tmp" || return
mv -f "$notice_tmp" "$notice_file"
return
fi
local notice="⚠ dotfiles: $(git -C "$repo" symbolic-ref --short HEAD) can't fast-forward to @{u} — run: git -C ~/dotfiles pull"
mkdir -p "$cache_dir" || return
print -r -- "$notice" >| "$notice_tmp" || return
mv -f "$notice_tmp" "$notice_file"
}
update_dotfiles &!
check_tools_repo() {
local repo branch remote mergeref remote_sha local_sha cmd notice
local cache_dir="${ZDOTDIR:-$HOME}/.cache/zsh"
local notice_file="$cache_dir/tools-update-notice"
local notice_tmp="$notice_file.$$.tmp"
local -a TO; (( $+commands[timeout] )) && TO=(timeout -k 5 10)
for repo in /opt/tools "$HOME/tools" "$HOME/tools/tools-repo"; do
local -a g=(git -c 'safe.directory=*' -C "$repo")
$g rev-parse --is-inside-work-tree >/dev/null 2>&1 || continue
branch=$($g symbolic-ref --short HEAD 2>/dev/null) || return
remote=$($g config "branch.$branch.remote" 2>/dev/null) || return
mergeref=$($g config "branch.$branch.merge" 2>/dev/null) || return
remote_sha=$(GIT_SSH_COMMAND='ssh -o BatchMode=yes -o ConnectTimeout=5 -o ControlMaster=no -o ControlPath=none' \
$TO $g ls-remote "$remote" "$mergeref" </dev/null 2>/dev/null | awk '{print $1}')
local_sha=$($g rev-parse HEAD 2>/dev/null)
[[ -n "$remote_sha" && -n "$local_sha" ]] || return
[[ "$remote_sha" == "$local_sha" ]] && return
$g merge-base --is-ancestor "$remote_sha" HEAD 2>/dev/null && return
[[ -w "$repo/.git" ]] && cmd="git -C $repo pull" || cmd="sudo git -C $repo pull"
notice="⬆ tools: updates available in $repo — run: $cmd"
mkdir -p "$cache_dir" || return
print -r -- "$notice" >| "$notice_tmp" || return
mv -f "$notice_tmp" "$notice_file"
return
done
}
check_tools_repo &!
show_update_notices() {
local cache_dir="${ZDOTDIR:-$HOME}/.cache/zsh"
local notice_file claimed_notice
for notice_file in "$cache_dir"/{dotfiles,tools}-update-notice; do
[[ -s "$notice_file" ]] || continue
claimed_notice="$notice_file.$$.show"
mv "$notice_file" "$claimed_notice" 2>/dev/null || continue
command cat "$claimed_notice"
command rm -f "$claimed_notice"
done
}
autoload -Uz add-zsh-hook
add-zsh-hook precmd show_update_notices