diff --git a/macos/Alfred.alfredpreferences/preferences/features/defaultresults/prefs.plist b/macos/Alfred.alfredpreferences/preferences/features/defaultresults/prefs.plist
index f36b6c32..406c3d13 100644
--- a/macos/Alfred.alfredpreferences/preferences/features/defaultresults/prefs.plist
+++ b/macos/Alfred.alfredpreferences/preferences/features/defaultresults/prefs.plist
@@ -7,6 +7,7 @@
<key>fallbacks</key>
<array>
<string>features.websearch.duckduckgo.fallback</string>
+ <string>features.websearch.custom.CB3335FB-D778-42B6-9AF8-97590E88638F.fallback</string>
</array>
</dict>
</plist>
diff --git a/macos/Alfred.alfredpreferences/preferences/features/websearch/prefs.plist b/macos/Alfred.alfredpreferences/preferences/features/websearch/prefs.plist
index 7c384e23..c5a3f41e 100644
--- a/macos/Alfred.alfredpreferences/preferences/features/websearch/prefs.plist
+++ b/macos/Alfred.alfredpreferences/preferences/features/websearch/prefs.plist
@@ -47,12 +47,25 @@
<key>utf8</key>
<true/>
</dict>
+ <key>6C215CFB-5A2B-40DC-8C30-15DDB423D6B7</key>
+ <dict>
+ <key>enabled</key>
+ <true/>
+ <key>keyword</key>
+ <string>sg</string>
+ <key>spaces</key>
+ <string>+</string>
+ <key>text</key>
+ <string>Search StoryGraph for '{query}'</string>
+ <key>url</key>
+ <string>https://app.thestorygraph.com/browse?search_term={query}</string>
+ </dict>
<key>A0D55B34-A5CE-44C9-8920-22144A82FE2B</key>
<dict>
<key>enabled</key>
<true/>
<key>keyword</key>
- <string>bookshop</string>
+ <string>bs</string>
<key>spaces</key>
<string>+</string>
<key>text</key>
@@ -73,6 +86,19 @@
<key>utf8</key>
<true/>
</dict>
+ <key>CB3335FB-D778-42B6-9AF8-97590E88638F</key>
+ <dict>
+ <key>enabled</key>
+ <true/>
+ <key>keyword</key>
+ <string>k</string>
+ <key>spaces</key>
+ <string>+</string>
+ <key>text</key>
+ <string>Search Kagi for '{query}'</string>
+ <key>url</key>
+ <string>https://kagi.com/search?q={query}</string>
+ </dict>
<key>D70178D9-628A-4910-9C32-9FDA059AA75F</key>
<dict>
<key>enabled</key>
diff --git a/macos/Alfred.alfredpreferences/preferences/local/261c0ca16767cb73346c23ef8a65ff0135d8ab37/features/webbookmarks/prefs.plist b/macos/Alfred.alfredpreferences/preferences/local/261c0ca16767cb73346c23ef8a65ff0135d8ab37/features/webbookmarks/prefs.plist
index 6d32a391..0c67376e 100644
--- a/macos/Alfred.alfredpreferences/preferences/local/261c0ca16767cb73346c23ef8a65ff0135d8ab37/features/webbookmarks/prefs.plist
+++ b/macos/Alfred.alfredpreferences/preferences/local/261c0ca16767cb73346c23ef8a65ff0135d8ab37/features/webbookmarks/prefs.plist
@@ -1,8 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
-<dict>
- <key>indexSafari</key>
- <true/>
-</dict>
+<dict/>
</plist>
diff --git a/macos/Alfred.alfredpreferences/resources/features.websearch.custom.6C215CFB-5A2B-40DC-8C30-15DDB423D6B7.png b/macos/Alfred.alfredpreferences/resources/features.websearch.custom.6C215CFB-5A2B-40DC-8C30-15DDB423D6B7.png
new file mode 100644
index 00000000..5f38fe12
Binary files /dev/null and b/macos/Alfred.alfredpreferences/resources/features.websearch.custom.6C215CFB-5A2B-40DC-8C30-15DDB423D6B7.png differ
diff --git a/macos/Alfred.alfredpreferences/resources/features.websearch.custom.CB3335FB-D778-42B6-9AF8-97590E88638F.png b/macos/Alfred.alfredpreferences/resources/features.websearch.custom.CB3335FB-D778-42B6-9AF8-97590E88638F.png
new file mode 100644
index 00000000..11379b18
Binary files /dev/null and b/macos/Alfred.alfredpreferences/resources/features.websearch.custom.CB3335FB-D778-42B6-9AF8-97590E88638F.png differ
diff --git a/macos/Alfred.alfredpreferences/workflows/user.workflow.35F259A3-BBD9-4A1B-B237-5E149EE1E723/dash_keyword_yaml.png b/macos/Alfred.alfredpreferences/workflows/user.workflow.35F259A3-BBD9-4A1B-B237-5E149EE1E723/dash_keyword_yaml.png
new file mode 100644
index 00000000..fc0ada1a
Binary files /dev/null and b/macos/Alfred.alfredpreferences/workflows/user.workflow.35F259A3-BBD9-4A1B-B237-5E149EE1E723/dash_keyword_yaml.png differ
diff --git a/macos/Alfred.alfredpreferences/workflows/user.workflow.35F259A3-BBD9-4A1B-B237-5E149EE1E723/info.plist b/macos/Alfred.alfredpreferences/workflows/user.workflow.35F259A3-BBD9-4A1B-B237-5E149EE1E723/info.plist
index 94b8941f..9c48d03a 100644
--- a/macos/Alfred.alfredpreferences/workflows/user.workflow.35F259A3-BBD9-4A1B-B237-5E149EE1E723/info.plist
+++ b/macos/Alfred.alfredpreferences/workflows/user.workflow.35F259A3-BBD9-4A1B-B237-5E149EE1E723/info.plist
@@ -82,6 +82,33 @@
<string></string>
</dict>
</array>
+ <key>dash_keyword_apple</key>
+ <array>
+ <dict>
+ <key>destinationuid</key>
+ <string>dash_action_normal</string>
+ <key>modifiers</key>
+ <integer>0</integer>
+ <key>modifiersubtext</key>
+ <string></string>
+ </dict>
+ <dict>
+ <key>destinationuid</key>
+ <string>dash_action_cmd</string>
+ <key>modifiers</key>
+ <integer>1048576</integer>
+ <key>modifiersubtext</key>
+ <string></string>
+ </dict>
+ <dict>
+ <key>destinationuid</key>
+ <string>dash_action_alt</string>
+ <key>modifiers</key>
+ <integer>524288</integer>
+ <key>modifiersubtext</key>
+ <string></string>
+ </dict>
+ </array>
<key>dash_keyword_css</key>
<array>
<dict>
@@ -1657,6 +1684,130 @@ That said, you can edit anything else within this workflow (including adding new
Do not try to change the keywords from within Alfred, as Dash will overwrite your changes. If you want to change a keyword, change it from within Dash (in Preferences > Docsets).
+That said, you can edit anything else within this workflow (including adding new triggers/actions/hotkeys).</string>
+ <key>subtext</key>
+ <string>Please read what's in the "Script:" section below</string>
+ <key>title</key>
+ <string>PLEASE README</string>
+ <key>type</key>
+ <integer>0</integer>
+ <key>withspace</key>
+ <true/>
+ </dict>
+ <key>type</key>
+ <string>alfred.workflow.input.scriptfilter</string>
+ <key>uid</key>
+ <string>dash_note_readme</string>
+ <key>version</key>
+ <integer>0</integer>
+ </dict>
+ <dict>
+ <key>config</key>
+ <dict>
+ <key>argumenttype</key>
+ <integer>0</integer>
+ <key>escaping</key>
+ <integer>0</integer>
+ <key>runningsubtext</key>
+ <string>Please read what's in the "Script:" section below</string>
+ <key>script</key>
+ <string>Dash dynamically updates this workflow with docset and search profile keywords.
+
+Do not try to change the keywords from within Alfred, as Dash will overwrite your changes. If you want to change a keyword, change it from within Dash (in Preferences > Docsets).
+
+That said, you can edit anything else within this workflow (including adding new triggers/actions/hotkeys).</string>
+ <key>subtext</key>
+ <string>Please read what's in the "Script:" section below</string>
+ <key>title</key>
+ <string>PLEASE README</string>
+ <key>type</key>
+ <integer>0</integer>
+ <key>withspace</key>
+ <true/>
+ </dict>
+ <key>type</key>
+ <string>alfred.workflow.input.scriptfilter</string>
+ <key>uid</key>
+ <string>dash_note_readme</string>
+ <key>version</key>
+ <integer>0</integer>
+ </dict>
+ <dict>
+ <key>config</key>
+ <dict>
+ <key>argumenttype</key>
+ <integer>0</integer>
+ <key>escaping</key>
+ <integer>0</integer>
+ <key>runningsubtext</key>
+ <string>Please read what's in the "Script:" section below</string>
+ <key>script</key>
+ <string>Dash dynamically updates this workflow with docset and search profile keywords.
+
+Do not try to change the keywords from within Alfred, as Dash will overwrite your changes. If you want to change a keyword, change it from within Dash (in Preferences > Docsets).
+
+That said, you can edit anything else within this workflow (including adding new triggers/actions/hotkeys).</string>
+ <key>subtext</key>
+ <string>Please read what's in the "Script:" section below</string>
+ <key>title</key>
+ <string>PLEASE README</string>
+ <key>type</key>
+ <integer>0</integer>
+ <key>withspace</key>
+ <true/>
+ </dict>
+ <key>type</key>
+ <string>alfred.workflow.input.scriptfilter</string>
+ <key>uid</key>
+ <string>dash_note_readme</string>
+ <key>version</key>
+ <integer>0</integer>
+ </dict>
+ <dict>
+ <key>config</key>
+ <dict>
+ <key>argumenttype</key>
+ <integer>0</integer>
+ <key>escaping</key>
+ <integer>0</integer>
+ <key>runningsubtext</key>
+ <string>Please read what's in the "Script:" section below</string>
+ <key>script</key>
+ <string>Dash dynamically updates this workflow with docset and search profile keywords.
+
+Do not try to change the keywords from within Alfred, as Dash will overwrite your changes. If you want to change a keyword, change it from within Dash (in Preferences > Docsets).
+
+That said, you can edit anything else within this workflow (including adding new triggers/actions/hotkeys).</string>
+ <key>subtext</key>
+ <string>Please read what's in the "Script:" section below</string>
+ <key>title</key>
+ <string>PLEASE README</string>
+ <key>type</key>
+ <integer>0</integer>
+ <key>withspace</key>
+ <true/>
+ </dict>
+ <key>type</key>
+ <string>alfred.workflow.input.scriptfilter</string>
+ <key>uid</key>
+ <string>dash_note_readme</string>
+ <key>version</key>
+ <integer>0</integer>
+ </dict>
+ <dict>
+ <key>config</key>
+ <dict>
+ <key>argumenttype</key>
+ <integer>0</integer>
+ <key>escaping</key>
+ <integer>0</integer>
+ <key>runningsubtext</key>
+ <string>Please read what's in the "Script:" section below</string>
+ <key>script</key>
+ <string>Dash dynamically updates this workflow with docset and search profile keywords.
+
+Do not try to change the keywords from within Alfred, as Dash will overwrite your changes. If you want to change a keyword, change it from within Dash (in Preferences > Docsets).
+
That said, you can edit anything else within this workflow (including adding new triggers/actions/hotkeys).</string>
<key>subtext</key>
<string>Please read what's in the "Script:" section below</string>
@@ -1703,6 +1854,35 @@ That said, you can edit anything else within this workflow (including adding new
<key>version</key>
<integer>0</integer>
</dict>
+ <dict>
+ <key>config</key>
+ <dict>
+ <key>argumenttype</key>
+ <integer>0</integer>
+ <key>escaping</key>
+ <integer>110</integer>
+ <key>keyword</key>
+ <string>apple</string>
+ <key>runningsubtext</key>
+ <string>Searching for "{query}"</string>
+ <key>script</key>
+ <string>./dashAlfredWorkflow "apple:{query}"</string>
+ <key>subtext</key>
+ <string>Search Apple API Reference for "{query}"</string>
+ <key>title</key>
+ <string>Search Apple API Reference</string>
+ <key>type</key>
+ <integer>0</integer>
+ <key>withspace</key>
+ <true/>
+ </dict>
+ <key>type</key>
+ <string>alfred.workflow.input.scriptfilter</string>
+ <key>uid</key>
+ <string>dash_keyword_apple</string>
+ <key>version</key>
+ <integer>0</integer>
+ </dict>
<dict>
<key>config</key>
<dict>
@@ -2211,86 +2391,91 @@ The keyword is either a docset keyword (defined in Preferences > Docsets) or
<key>ypos</key>
<integer>930</integer>
</dict>
- <key>dash_keyword_css</key>
+ <key>dash_keyword_apple</key>
<dict>
<key>ypos</key>
<integer>1050</integer>
</dict>
- <key>dash_keyword_django</key>
+ <key>dash_keyword_css</key>
<dict>
<key>ypos</key>
<integer>1170</integer>
</dict>
- <key>dash_keyword_gem</key>
+ <key>dash_keyword_django</key>
<dict>
<key>ypos</key>
<integer>1290</integer>
</dict>
- <key>dash_keyword_hs</key>
+ <key>dash_keyword_gem</key>
<dict>
<key>ypos</key>
<integer>1410</integer>
</dict>
- <key>dash_keyword_js</key>
+ <key>dash_keyword_hs</key>
<dict>
<key>ypos</key>
<integer>1530</integer>
</dict>
- <key>dash_keyword_lua</key>
+ <key>dash_keyword_js</key>
<dict>
<key>ypos</key>
<integer>1650</integer>
</dict>
- <key>dash_keyword_man</key>
+ <key>dash_keyword_lua</key>
<dict>
<key>ypos</key>
<integer>1770</integer>
</dict>
- <key>dash_keyword_md</key>
+ <key>dash_keyword_man</key>
<dict>
<key>ypos</key>
<integer>1890</integer>
</dict>
- <key>dash_keyword_neovim</key>
+ <key>dash_keyword_md</key>
<dict>
<key>ypos</key>
<integer>2010</integer>
</dict>
- <key>dash_keyword_node</key>
+ <key>dash_keyword_neovim</key>
<dict>
<key>ypos</key>
<integer>2130</integer>
</dict>
- <key>dash_keyword_py</key>
+ <key>dash_keyword_node</key>
<dict>
<key>ypos</key>
<integer>2250</integer>
</dict>
- <key>dash_keyword_rails</key>
+ <key>dash_keyword_py</key>
<dict>
<key>ypos</key>
<integer>2370</integer>
</dict>
- <key>dash_keyword_rb</key>
+ <key>dash_keyword_rails</key>
<dict>
<key>ypos</key>
<integer>2490</integer>
</dict>
- <key>dash_keyword_rust</key>
+ <key>dash_keyword_rb</key>
<dict>
<key>ypos</key>
<integer>2610</integer>
</dict>
- <key>dash_keyword_tf</key>
+ <key>dash_keyword_rust</key>
<dict>
<key>ypos</key>
<integer>2730</integer>
</dict>
- <key>dash_keyword_vue</key>
+ <key>dash_keyword_tf</key>
<dict>
<key>ypos</key>
<integer>2850</integer>
</dict>
+ <key>dash_keyword_vue</key>
+ <dict>
+ <key>ypos</key>
+ <integer>2970</integer>
+ </dict>
<key>dash_note_readme</key>
<dict>
<key>ypos</key>