diff options
-rw-r--r-- | .tmux.conf | 3 | ||||
-rw-r--r-- | .zshrc | 34 | ||||
-rw-r--r-- | apps/Sublime Text 4/Packages/User/Default (OSX).sublime-keymap | 11 | ||||
-rw-r--r-- | apps/Sublime Text 4/Packages/User/HSMusic Editing.py | 62 | ||||
-rw-r--r-- | apps/Sublime Text 4/Packages/User/Markdown.sublime-settings | 7 | ||||
-rw-r--r-- | apps/Sublime Text 4/Packages/User/Preferences.sublime-settings | 20 | ||||
-rw-r--r-- | apps/krita/krita-shortcuts.shortcuts | 26 | ||||
-rwxr-xr-x | device/miniminimini_pre | 3 | ||||
-rw-r--r-- | userstuff/hsmusic/Switch HSMusic websites.user.js | 71 |
9 files changed, 223 insertions, 14 deletions
diff --git a/.tmux.conf b/.tmux.conf index 04760e3..89a5d4b 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -8,6 +8,9 @@ set -sg escape-time 0 set -g status-style bg=colour235,fg=colour249 set-window-option -g window-status-current-style fg=colour251,bright +set -g set-titles on +set -g set-titles-string "#S: #W" + bind '"' split-window -c "#{pane_current_path}" bind % split-window -h -c "#{pane_current_path}" bind c new-window -c "#{pane_current_path}" diff --git a/.zshrc b/.zshrc index 3c92d3b..bfb087f 100644 --- a/.zshrc +++ b/.zshrc @@ -115,8 +115,35 @@ export PATH # //// aliases & non-script functions //////////////////////// <alias-fns> // # +# -- cli shenanigans -- + +alias tm='tmux attach \; choose-tree -s && exit' +alias grc='git rebase --continue' + +# -- file management utilities -- + +relink() { + inode1=$(ls -i $1 | cut -d " " -f 1) && + inode2=$(ls -i $2 | cut -d " " -f 1) && + if [[ $inode1 == $inode2 ]]; then + echo files are already same inode >&2 + else + sha1=$(sha256sum $1 | cut -d " " -f 1) && + sha2=$(sha256sum $2 | cut -d " " -f 1) && + if [[ $sha1 != $sha2 ]]; then + echo files have different checksums >&2 + else + rm $2 && ln $1 $2 + fi + fi +} + # -- hooks into third-party stuff -- +if [[ -v DEVICE_HAS_SUBLIME_TEXT ]]; then + alias subl='open -a "$DEVICE_SUBLIME_TEXT_INSTALLATION"' +fi + if [[ -v DEVICE_HAS_VIM ]]; then vimhelp() { vim -c ":h $1 | only" @@ -128,3 +155,10 @@ fi device_postconfig + +# //// really actually end of file stuff ////////////////////// <eof-step> // # + +if [[ -v DEVICE_HAS_SDKMAN ]]; then + export SDKMAN_DIR="$DEVICE_SDKMAN_INSTALLATION" + source "$DEVICE_SDKMAN_INSTALLATION/bin/sdkman-init.sh" +fi diff --git a/apps/Sublime Text 4/Packages/User/Default (OSX).sublime-keymap b/apps/Sublime Text 4/Packages/User/Default (OSX).sublime-keymap index 7426757..3c842f5 100644 --- a/apps/Sublime Text 4/Packages/User/Default (OSX).sublime-keymap +++ b/apps/Sublime Text 4/Packages/User/Default (OSX).sublime-keymap @@ -11,6 +11,10 @@ ], }, + { "keys": ["ctrl+super+k"], "command": "next_bookmark" }, + { "keys": ["ctrl+shift+super+k"], "command": "prev_bookmark" }, + { "keys": ["super+k"], "command": "toggle_bookmark", "args": {"toggle_line": true } }, + // HSMusic wiki tag editing // (bind caps lock to f16 in Karabiner-Elements) @@ -18,6 +22,7 @@ "command": "enter_exit_wiki_tag", "context": [ { "key": "project_name", "operator": "regex_contains", "operand": "HSMusic" }, + { "key": "file_name", "operator": "regex_contains", "operand": "\\.yaml" }, ], }, @@ -25,6 +30,7 @@ "command": "enter_exit_wiki_tag", "context": [ { "key": "project_name", "operator": "regex_contains", "operand": "HSMusic" }, + { "key": "file_name", "operator": "regex_contains", "operand": "\\.yaml" }, ], }, @@ -32,6 +38,7 @@ "command": "space_in_wiki_tag", "context": [ { "key": "project_name", "operator": "regex_contains", "operand": "HSMusic" }, + { "key": "file_name", "operator": "regex_contains", "operand": "\\.yaml" }, ], }, @@ -39,6 +46,7 @@ "command": "space_in_wiki_tag", "context": [ { "key": "project_name", "operator": "regex_contains", "operand": "HSMusic" }, + { "key": "file_name", "operator": "regex_contains", "operand": "\\.yaml" }, ], }, @@ -46,6 +54,7 @@ "command": "exit_wiki_tag", "context": [ { "key": "project_name", "operator": "regex_contains", "operand": "HSMusic" }, + { "key": "file_name", "operator": "regex_contains", "operand": "\\.yaml" }, { "key": "panel_has_focus", "operator": "not_equal" }, { "key": "overlay_has_focus", "operator": "not_equal" }, ], @@ -55,6 +64,7 @@ "command": "bold_wiki_text", "context": [ { "key": "project_name", "operator": "regex_contains", "operand": "HSMusic" }, + { "key": "file_name", "operator": "regex_contains", "operand": "\\.yaml" }, { "key": "panel_has_focus", "operator": "not_equal" }, { "key": "overlay_has_focus", "operator": "not_equal" }, ], @@ -64,6 +74,7 @@ "command": "insert_line_break_in_wiki_text", "context": [ { "key": "project_name", "operator": "regex_contains", "operand": "HSMusic" }, + { "key": "file_name", "operator": "regex_contains", "operand": "\\.yaml" }, { "key": "panel_has_focus", "operator": "not_equal" }, { "key": "overlay_has_focus", "operator": "not_equal" }, ], diff --git a/apps/Sublime Text 4/Packages/User/HSMusic Editing.py b/apps/Sublime Text 4/Packages/User/HSMusic Editing.py index 41c6408..9b8c369 100644 --- a/apps/Sublime Text 4/Packages/User/HSMusic Editing.py +++ b/apps/Sublime Text 4/Packages/User/HSMusic Editing.py @@ -22,6 +22,25 @@ class ProjectSpecificKeyBinding(sublime_plugin.EventListener): elif operator == sublime.QueryOperator.NOT_REGEX_CONTAINS: return not re.search(operand, current_project_name) +class FileSpecificKeyBinding(sublime_plugin.EventListener): + def on_query_context(self, view, key, operator, operand, match_all): + current_file_name = view.file_name() + + if not current_file_name: + return None + + if key != "file_name" and os.path.isfile(current_file_name): + return None + + if operator == sublime.OP_EQUAL: + return current_file_name == operand + elif operator == sublime.OP_NOT_EQUAL: + return current_file_name != operand + elif operator == sublime.QueryOperator.REGEX_CONTAINS: + return re.search(operand, current_file_name) + elif operator == sublime.QueryOperator.NOT_REGEX_CONTAINS: + return not re.search(operand, current_file_name) + class _CursorAdaptiveCommand(sublime_plugin.TextCommand): handle_region_fallback = ('keep',) @@ -170,7 +189,7 @@ def _normalize_region(region): def _match_tag_in_progress(view, region): region = _normalize_region(region) to_start = sublime.Region(view.line(region).a, region.a) - match = re.search('(\[\[(?:(?!]]|\|).)*)$', view.substr(to_start)) + match = re.search(r'(\[\[(?:(?!]]|\|).)*)$', view.substr(to_start)) if match: return match.group(1) @@ -180,13 +199,13 @@ def _match_regex_ahead_same_line(view, region, regex): return re.search(regex, view.substr(to_end)) def _match_rest_of_tag_in_progress(view, region): - regex = '^((?:(?!\[\[).)*]])' + regex = r'^((?:(?!\[\[).)*]])' match = _match_regex_ahead_same_line(view, region, regex) if match: return match.group(1) def _match_through_closing_html_tag(view, region, tag): - regex = f'^(.*?</{tag}>)' + regex = rf'^(.*?</{tag}>)' match = _match_regex_ahead_same_line(view, region, regex) if match: return match.group(1) @@ -199,7 +218,7 @@ def _consider_reference_cycle(view, region, cycle): rest_of_tag = _match_rest_of_tag_in_progress(view, region) - rest_of_ref = re.search('^((?:(?!\|).)*:)', rest_of_tag) + rest_of_ref = re.search(r'^((?:(?!\|).)*:)', rest_of_tag) if rest_of_ref: return ('move', len(rest_of_ref.group(1))) @@ -225,6 +244,35 @@ def _consider_reference_cycle(view, region, cycle): else: return ('insert', 'right', next_ref + ':', 0) +def _consider_transform_url(view, region): + region = _normalize_region(region) + selected_text = view.substr(region) + + start_through_selection = sublime.Region(view.line(region).a, region.b) + match = re.search(r'https?://\S+$', view.substr(start_through_selection)) + + if not match: + return None + + # We don't have a convenient way to just replace a selection in one move, + # so just move to the end of the selection and try again next time... + if selected_text: + return ('collapse_move', len(selected_text)) + + url = match.group(0) + link = None + + hsm = r'(?:https://(?:preview\.|staging\.)?hsmusic\.wiki/|http://localhost:\d+/)' + + match = re.search(hsm + r'(album|track|artist|group|tag|flash)/(.+?)/', url) + if match: + link = f'[[{match.group(1)}:{match.group(2)}]]' + + if not link: + return None + + return ('replace_left', len(url), link, 0, 'right') + def _guess_directory(name): directory = name directory = "-".join(directory.split(" ")) @@ -257,11 +305,15 @@ class ExitWikiTagCommand(_CursorAdaptiveCommand): if rest_of_tag: return ('collapse_move', len(rest_of_tag)) + transform_url_action = _consider_transform_url(self.view, region) + if transform_url_action: + return transform_url_action + region = _normalize_region(region) to_start = sublime.Region(self.view.line(region).a, region.a) to_end = sublime.Region(region.a, self.view.line(region).b) if to_start.a != to_start.b and to_end.a != to_end.b: - match = re.search('.*?([).,:;!?][).,:;!?"\']*|\\s(?=[(\'"])|[\'"](?=\\s|$)|$)', self.view.substr(to_end)) + match = re.search(r'.*?([).,:;!?][).,:;!?"\']*|\\s(?=[(\'"])|[\'"](?=\\s|$)|$)', self.view.substr(to_end)) if match: return ('collapse_move', len(match.group(0))) diff --git a/apps/Sublime Text 4/Packages/User/Markdown.sublime-settings b/apps/Sublime Text 4/Packages/User/Markdown.sublime-settings index 282ef1a..50c3d10 100644 --- a/apps/Sublime Text 4/Packages/User/Markdown.sublime-settings +++ b/apps/Sublime Text 4/Packages/User/Markdown.sublime-settings @@ -1,5 +1,9 @@ // These settings override both User and Default settings for the Markdown syntax { + "rulers": [80], + "ruler_style": "stippled", + "wrap_width": 78, + "mini_diff": false, "match_brackets": false, "auto_match_enabled": false, @@ -14,6 +18,5 @@ "caret_extra_bottom": 2, "caret_extra_width": 0, - "light_color_scheme": "Bass D-O.sublime-color-scheme", - // "color_scheme": "MarkdownEditor.sublime-color-scheme", + "color_scheme": "Packages/Colorsublime - Themes/Humane.tmTheme", } diff --git a/apps/Sublime Text 4/Packages/User/Preferences.sublime-settings b/apps/Sublime Text 4/Packages/User/Preferences.sublime-settings index c520bcf..f943b86 100644 --- a/apps/Sublime Text 4/Packages/User/Preferences.sublime-settings +++ b/apps/Sublime Text 4/Packages/User/Preferences.sublime-settings @@ -9,6 +9,9 @@ "scroll_context_lines": 6, "indent_guide_options": ["draw_active"], + "folder_exclude_patterns": [".git", ".Trash", ".Trash-*", ".tap", "node_modules"], + "binary_file_patterns": ["*.jpg", "*.jpeg", "*.png", "*.gif", "*.ttf", "*.tga", "*.dds", "*.ico", "*.eot", "*.pdf", "*.swf", "*.jar", "*.zip", "*.avif"], + "trim_trailing_white_space_on_save": "not_on_caret", "ensure_newline_at_eof_on_save": true, @@ -16,6 +19,12 @@ "wrap_width_style": "min", "draw_white_space": ["selection", "trailing"], + "always_show_minimap_viewport": true, + "draw_minimap_border": true, + "minimap_horizontal_scrolling": false, + + "caret_style": "smooth", + "tab_completion": false, "mini_diff": "auto", "auto_complete": true, @@ -29,15 +38,12 @@ "ignored_packages": [ + "CursorRuler", "Vintage", ], "theme": "Adaptive.sublime-theme", - "color_scheme": "Packages/Colorsublime - Themes/Jellybeams.tmTheme", - "dark_color_scheme": "Packages/Theme - Afterglow/Afterglow-twilight.tmTheme", - "light_color_scheme": "Celeste.sublime-color-scheme", - - // MarkdownEditing preferences - "mde.auto_fold_link.enabled": false, - "mde.list_indent_bullets": [], + "color_scheme": "auto", + "dark_color_scheme": "Packages/Colorsublime - Themes/Jellybeams.tmTheme", + "light_color_scheme": "Packages/Github Color Theme/GitHub.tmTheme", } diff --git a/apps/krita/krita-shortcuts.shortcuts b/apps/krita/krita-shortcuts.shortcuts new file mode 100644 index 0000000..3ca342f --- /dev/null +++ b/apps/krita/krita-shortcuts.shortcuts @@ -0,0 +1,26 @@ +[Shortcuts] +KisToolSelectElliptical=none +KisToolSelectOutline=U +KisToolTransform=S +KritaFill/KisToolFill=F; B +KritaSelected/KisToolColorSampler=O +KritaShape/KisToolBrush=P +KritaShape/KisToolEllipse=none +KritaTransform/KisToolMove=M +RenameCurrentLayer=F2; R +convert-to-path=none +create_quick_group=Meta+G +decrease_brush_size=Shift+[ +edit_redo=Ctrl+Shift+Z; Shift+J +edit_undo=Ctrl+Z; J +eraser_preset_action=K +fullscreen=Meta+Ctrl+F +increase_brush_size=Shift+] +increase_opacity=none +make_brush_color_darker=none +pathpoint-join=none +rotate_canvas_left=[ +rotate_canvas_right=] +show_color_history=none +show_common_colors=none +toggle_layer_visibility=N diff --git a/device/miniminimini_pre b/device/miniminimini_pre index ad40591..63dcd93 100755 --- a/device/miniminimini_pre +++ b/device/miniminimini_pre @@ -21,6 +21,9 @@ export DEVICE_NVM_INSTALLATION="$HOME/.nvm" export DEVICE_HAS_PYENV export DEVICE_PYENV_CONFIGURATION="$HOME/.pyenv" +export DEVICE_HAS_SDKMAN +export DEVICE_SDKMAN_INSTALLATION="$HOME/.sdkman" + export DEVICE_HAS_SUBLIME_TEXT export DEVICE_SUBLIME_TEXT_INSTALLATION="$HOME/Applications/Development & Editors/Sublime Text.app" diff --git a/userstuff/hsmusic/Switch HSMusic websites.user.js b/userstuff/hsmusic/Switch HSMusic websites.user.js new file mode 100644 index 0000000..47c2d0b --- /dev/null +++ b/userstuff/hsmusic/Switch HSMusic websites.user.js @@ -0,0 +1,71 @@ +// ==UserScript== +// @name Switch HSMusic websites +// @description Then try to take over the world! +// @include http://localhost:8002/* +// @match https://hsmusic.wiki/* +// @match https://preview.hsmusic.wiki/* +// ==/UserScript== + +const header = document.getElementById('header'); +const page = header.parentElement; +const headerContainer = document.createElement('div'); +const customNav = document.createElement('div'); + +Object.assign(headerContainer.style, { + display: 'flex', + flexDirection: 'row', +}); +Object.assign(header.style, { + flexGrow: '1', +}); +Object.assign(customNav.style, { + minWidth: '140px', + textAlign: 'right', +}); + +page.replaceChild(headerContainer, header); +headerContainer.appendChild(header); +headerContainer.appendChild(customNav); + +const pathname = () => { + let p = location.pathname; + p = p.replace(/^\/preview-en/, ''); + return p; +}; + +const customNavLink = (text, basenameOrFn) => { + const href = typeof basenameOrFn === 'function' ? basenameOrFn() : basenameOrFn + pathname(); + const link = document.createElement('a'); + link.appendChild(document.createTextNode(text)); + link.setAttribute('href', href); + customNav.appendChild(link); + Object.assign(link.style, { + display: 'inline-block', + border: '1px dotted var(--primary-color)', + borderRadius: '2px', + padding: '2px 8px', + margin: '2px 2px', + background: '#000c', + }); + if (location.href === href) { + Object.assign(link.style, { + fontWeight: '800', + borderStyle: 'solid', + }); + } +}; + +customNavLink('L', 'http://localhost:8002'); +customNavLink('P', 'https://preview.hsmusic.wiki'); +customNavLink('R', 'https://hsmusic.wiki'); + +let match = location.href.match(/album\/([^/]*)/); +if (match) { + customNavLink('G', () => `https://github.com/hsmusic/hsmusic-data/tree/preview/album/${match[1]}.yaml`); +} + +match = location.href.match(/track\/([^/]*)/); +if (match) { + const directory = getComputedStyle(document.body).getPropertyValue('--album-directory'); + customNavLink('G', () => `https://github.com/hsmusic/hsmusic-data/tree/preview/album/${directory}.yaml`); +} |