summaryrefslogtreecommitdiff
path: root/mac
diff options
context:
space:
mode:
authorTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2025-01-24 20:35:27 +0900
committerTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2025-01-24 20:35:27 +0900
commitc80a54e42b52ce297f0f2f71af23c562832025c7 (patch)
treedcce8bb977a770f473325d48f6f70b21d9818a40 /mac
init
Diffstat (limited to 'mac')
-rw-r--r--mac/.config/borders/bordersrc12
-rw-r--r--mac/.config/karabiner/assets/complex_modifications/1700711318.json95
-rw-r--r--mac/.config/karabiner/assets/complex_modifications/1700983079.json62
-rw-r--r--mac/.config/karabiner/assets/complex_modifications/1704627767.json20
-rw-r--r--mac/.config/karabiner/assets/complex_modifications/1704850809.json25
-rw-r--r--mac/.config/karabiner/automatic_backups/karabiner_20231122.json200
-rw-r--r--mac/.config/karabiner/automatic_backups/karabiner_20231126.json393
-rw-r--r--mac/.config/karabiner/automatic_backups/karabiner_20231128.json464
-rw-r--r--mac/.config/karabiner/automatic_backups/karabiner_20240107.json393
-rw-r--r--mac/.config/karabiner/automatic_backups/karabiner_20240108.json417
-rw-r--r--mac/.config/karabiner/automatic_backups/karabiner_20240109.json417
-rw-r--r--mac/.config/karabiner/automatic_backups/karabiner_20240112.json461
-rw-r--r--mac/.config/karabiner/automatic_backups/karabiner_20240113.json472
-rw-r--r--mac/.config/karabiner/automatic_backups/karabiner_20240114.json391
-rw-r--r--mac/.config/karabiner/automatic_backups/karabiner_20240115.json391
-rw-r--r--mac/.config/karabiner/karabiner.json290
-rw-r--r--mac/.config/kitty/icons/kitty-dark.icnsbin0 -> 704703 bytes
-rw-r--r--mac/.config/kitty/icons/kitty-light.icnsbin0 -> 544612 bytes
-rw-r--r--mac/.config/kitty/icons/neue_azure.icnsbin0 -> 1339049 bytes
-rw-r--r--mac/.config/kitty/icons/neue_ember.icnsbin0 -> 1309706 bytes
-rw-r--r--mac/.config/kitty/icons/neue_outrun.icnsbin0 -> 1341772 bytes
-rw-r--r--mac/.config/kitty/icons/neue_toxic.icnsbin0 -> 1336970 bytes
-rw-r--r--mac/.config/kitty/icons/outrun.icnsbin0 -> 1132143 bytes
-rw-r--r--mac/.config/kitty/kitty.conf145
-rw-r--r--mac/.config/neofetch/config.conf863
-rw-r--r--mac/.config/pam-gnupg2
-rw-r--r--mac/.config/sketchybar/colors.sh104
-rw-r--r--mac/.config/sketchybar/globalstyles.sh132
-rw-r--r--mac/.config/sketchybar/helper/cpu.h122
-rw-r--r--mac/.config/sketchybar/helper/helperbin0 -> 34872 bytes
-rw-r--r--mac/.config/sketchybar/helper/helper.c31
-rw-r--r--mac/.config/sketchybar/helper/makefile3
-rw-r--r--mac/.config/sketchybar/helper/sketchybar.h209
-rw-r--r--mac/.config/sketchybar/icons.sh70
-rw-r--r--mac/.config/sketchybar/items/apple.sh44
-rw-r--r--mac/.config/sketchybar/items/battery.sh23
-rw-r--r--mac/.config/sketchybar/items/brew.sh39
-rw-r--r--mac/.config/sketchybar/items/cpu.sh74
-rw-r--r--mac/.config/sketchybar/items/datetime.sh37
-rw-r--r--mac/.config/sketchybar/items/disk.sh18
-rw-r--r--mac/.config/sketchybar/items/dnd.sh9
-rw-r--r--mac/.config/sketchybar/items/front_app.sh13
-rw-r--r--mac/.config/sketchybar/items/github.sh37
-rw-r--r--mac/.config/sketchybar/items/kakaotalk.sh18
-rw-r--r--mac/.config/sketchybar/items/keyboard.sh14
-rw-r--r--mac/.config/sketchybar/items/mail.sh19
-rw-r--r--mac/.config/sketchybar/items/memory.sh20
-rw-r--r--mac/.config/sketchybar/items/messages.sh13
-rw-r--r--mac/.config/sketchybar/items/mic.sh5
-rw-r--r--mac/.config/sketchybar/items/music.sh36
-rw-r--r--mac/.config/sketchybar/items/network.sh40
-rw-r--r--mac/.config/sketchybar/items/package_monitor.sh19
-rw-r--r--mac/.config/sketchybar/items/separator_right.sh13
-rw-r--r--mac/.config/sketchybar/items/spaces.sh56
-rw-r--r--mac/.config/sketchybar/items/spotify.sh201
-rw-r--r--mac/.config/sketchybar/items/svim.sh14
-rw-r--r--mac/.config/sketchybar/items/system.sh53
-rw-r--r--mac/.config/sketchybar/items/thunderbird.sh20
-rw-r--r--mac/.config/sketchybar/items/toggle_stats.sh11
-rw-r--r--mac/.config/sketchybar/items/volume.sh35
-rw-r--r--mac/.config/sketchybar/items/weather.sh23
-rw-r--r--mac/.config/sketchybar/items/wifi.sh39
-rw-r--r--mac/.config/sketchybar/items/yabai.sh21
-rw-r--r--mac/.config/sketchybar/plugins/battery.sh85
-rw-r--r--mac/.config/sketchybar/plugins/brew.sh104
-rw-r--r--mac/.config/sketchybar/plugins/disk.sh29
-rw-r--r--mac/.config/sketchybar/plugins/dnd.sh33
-rw-r--r--mac/.config/sketchybar/plugins/dndindicator.sh24
-rw-r--r--mac/.config/sketchybar/plugins/front_app.sh8
-rw-r--r--mac/.config/sketchybar/plugins/github.sh108
-rw-r--r--mac/.config/sketchybar/plugins/icon_map.sh486
-rw-r--r--mac/.config/sketchybar/plugins/kakaotalk.sh9
-rw-r--r--mac/.config/sketchybar/plugins/keyboard.sh13
-rw-r--r--mac/.config/sketchybar/plugins/mail.sh9
-rw-r--r--mac/.config/sketchybar/plugins/memory.sh49
-rw-r--r--mac/.config/sketchybar/plugins/messages.sh7
-rw-r--r--mac/.config/sketchybar/plugins/mic.sh9
-rw-r--r--mac/.config/sketchybar/plugins/mic_click.sh11
-rw-r--r--mac/.config/sketchybar/plugins/music.sh92
-rw-r--r--mac/.config/sketchybar/plugins/music/Cover-Default.pngbin0 -> 79352 bytes
-rw-r--r--mac/.config/sketchybar/plugins/music/Get-Artwork.applescript65
-rw-r--r--mac/.config/sketchybar/plugins/network.sh25
-rw-r--r--mac/.config/sketchybar/plugins/nextevent.applescript19
-rw-r--r--mac/.config/sketchybar/plugins/nextevent.sh55
-rw-r--r--mac/.config/sketchybar/plugins/space.py199
-rw-r--r--mac/.config/sketchybar/plugins/space.sh62
-rw-r--r--mac/.config/sketchybar/plugins/space_windows.sh20
-rw-r--r--mac/.config/sketchybar/plugins/spotify.sh147
-rw-r--r--mac/.config/sketchybar/plugins/svim.sh30
-rw-r--r--mac/.config/sketchybar/plugins/thunderbird.sh9
-rw-r--r--mac/.config/sketchybar/plugins/toggle_stats.sh63
-rw-r--r--mac/.config/sketchybar/plugins/volume.sh43
-rw-r--r--mac/.config/sketchybar/plugins/volume_click.sh57
-rw-r--r--mac/.config/sketchybar/plugins/weather.sh191
-rw-r--r--mac/.config/sketchybar/plugins/wifi.sh104
-rw-r--r--mac/.config/sketchybar/plugins/yabai.sh141
-rw-r--r--mac/.config/sketchybar/plugins/zen.sh43
-rw-r--r--mac/.config/sketchybar/sketchybarrc56
-rw-r--r--mac/.config/skhd/skhdrc215
-rw-r--r--mac/.config/vscode/argv.json20
-rw-r--r--mac/.config/yabai/yabairc102
-rwxr-xr-xmac/.local/bin/menu15
102 files changed, 9905 insertions, 0 deletions
diff --git a/mac/.config/borders/bordersrc b/mac/.config/borders/bordersrc
new file mode 100644
index 0000000..d043d83
--- /dev/null
+++ b/mac/.config/borders/bordersrc
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+options=(
+ style=square
+ width=6.0
+ hidpi=on
+ active_color=0xff269043
+ # active_color="gradient(top_left=0xffebeb99,bottom_right=0xfff57f17)"
+ inactive_color=0xff4b5356
+)
+
+borders "${options[@]}"
diff --git a/mac/.config/karabiner/assets/complex_modifications/1700711318.json b/mac/.config/karabiner/assets/complex_modifications/1700711318.json
new file mode 100644
index 0000000..970adb0
--- /dev/null
+++ b/mac/.config/karabiner/assets/complex_modifications/1700711318.json
@@ -0,0 +1,95 @@
+{
+ "title": "fn twice -> change input source / fn hold -> iterm",
+ "author": "Ramiro Garcia (https://github.com/ranemirusG)",
+ "rules": [
+ {
+ "description": "fn + ` -> iTerm",
+ "manipulators": [
+ {
+ "type": "basic",
+ "from": {
+ "key_code": 53,
+ "modifiers": { "mandatory": ["fn"] }
+ },
+ "to": [{ "shell_command": "open '/Applications/iTerm.app'" }]
+ }
+ ]
+ },
+ {
+ "description": "Press twice fn to change input source & otherwise held_down and open iterm",
+ "manipulators": [
+ {
+ "conditions": [
+ {
+ "type": "variable_if",
+ "name": "fn pressed",
+ "value": 1
+ }
+ ],
+ "type": "basic",
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "repeat": false,
+ "key_code": "spacebar",
+ "modifiers": ["left_control", "left_alt"],
+ "lazy": true
+ }
+ ]
+ },
+ {
+ "type": "basic",
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 1
+ }
+ }
+ ],
+ "to_if_held_down": [
+ {
+ "key_code": "fn"
+ }
+ ],
+ "parameters": {
+ "basic.to_if_held_down_threshold_milliseconds": 0
+ },
+ "to_delayed_action": {
+ "to_if_invoked": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ],
+ "to_if_canceled": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/mac/.config/karabiner/assets/complex_modifications/1700983079.json b/mac/.config/karabiner/assets/complex_modifications/1700983079.json
new file mode 100644
index 0000000..3bdfd01
--- /dev/null
+++ b/mac/.config/karabiner/assets/complex_modifications/1700983079.json
@@ -0,0 +1,62 @@
+{
+ "title": "Use ctrl + hl to Switch Tabs in Chrome, Brave & Firefox",
+ "rules": [
+ {
+ "description": "Use ctrl + hl to Switch Tabs in Chrome, Brave & Firefox",
+ "manipulators": [
+ {
+ "type": "basic",
+ "from": {
+ "key_code": "h",
+ "modifiers": {
+ "mandatory": ["control"],
+ "optional": ["any"]
+ }
+ },
+ "to": [
+ {
+ "key_code": "left_arrow",
+ "modifiers": ["command", "option"]
+ }
+ ],
+ "conditions": [
+ {
+ "type": "frontmost_application_if",
+ "bundle_identifiers": [
+ "^com.google.Chrome",
+ "^com.brave.Browser",
+ "^org.mozilla.firefox"
+ ]
+ }
+ ]
+ },
+ {
+ "type": "basic",
+ "from": {
+ "key_code": "l",
+ "modifiers": {
+ "mandatory": ["control"],
+ "optional": ["any"]
+ }
+ },
+ "to": [
+ {
+ "key_code": "right_arrow",
+ "modifiers": ["command", "option"]
+ }
+ ],
+ "conditions": [
+ {
+ "type": "frontmost_application_if",
+ "bundle_identifiers": [
+ "^com.google.Chrome",
+ "^com.brave.Browser",
+ "^org.mozilla.firefox"
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/mac/.config/karabiner/assets/complex_modifications/1704627767.json b/mac/.config/karabiner/assets/complex_modifications/1704627767.json
new file mode 100644
index 0000000..71909d1
--- /dev/null
+++ b/mac/.config/karabiner/assets/complex_modifications/1704627767.json
@@ -0,0 +1,20 @@
+{
+ "title": "Prevent unintended command-h hide window (rev 2)",
+ "rules": [
+ {
+ "description": "Disable Cmd+H Hide (rev 2)",
+ "manipulators": [
+ {
+ "type": "basic",
+ "description": "",
+ "from": {
+ "key_code": "h",
+ "modifiers": {
+ "mandatory": ["command"]
+ }
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/mac/.config/karabiner/assets/complex_modifications/1704850809.json b/mac/.config/karabiner/assets/complex_modifications/1704850809.json
new file mode 100644
index 0000000..2f3271f
--- /dev/null
+++ b/mac/.config/karabiner/assets/complex_modifications/1704850809.json
@@ -0,0 +1,25 @@
+{
+ "title": "esc = ctrl + c",
+ "rules": [
+ {
+ "description": "Control + c => Escape",
+ "manipulators": [
+ {
+ "from": {
+ "key_code": "c",
+ "modifiers": {
+ "mandatory": ["control"],
+ "optional": ["caps_lock", "option"]
+ }
+ },
+ "to": [
+ {
+ "key_code": "escape"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ }
+ ]
+}
diff --git a/mac/.config/karabiner/automatic_backups/karabiner_20231122.json b/mac/.config/karabiner/automatic_backups/karabiner_20231122.json
new file mode 100644
index 0000000..ea801fd
--- /dev/null
+++ b/mac/.config/karabiner/automatic_backups/karabiner_20231122.json
@@ -0,0 +1,200 @@
+{
+ "global": {
+ "ask_for_confirmation_before_quitting": true,
+ "check_for_updates_on_startup": true,
+ "show_in_menu_bar": true,
+ "show_profile_name_in_menu_bar": false,
+ "unsafe_ui": false
+ },
+ "profiles": [
+ {
+ "complex_modifications": {
+ "parameters": {
+ "basic.simultaneous_threshold_milliseconds": 50,
+ "basic.to_delayed_action_delay_milliseconds": 500,
+ "basic.to_if_alone_timeout_milliseconds": 1000,
+ "basic.to_if_held_down_threshold_milliseconds": 500,
+ "mouse_motion_to_scroll.speed": 100
+ },
+ "rules": []
+ },
+ "devices": [
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "identifiers": {
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "identifiers": {
+ "is_keyboard": false,
+ "is_pointing_device": true,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "identifiers": {
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 34304,
+ "vendor_id": 1452
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ }
+ ],
+ "fn_function_keys": [
+ {
+ "from": {
+ "key_code": "f1"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f2"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_increment"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f3"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "mission_control"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f4"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "spotlight"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f5"
+ },
+ "to": [
+ {
+ "consumer_key_code": "dictation"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f6"
+ },
+ "to": [
+ {
+ "key_code": "f6"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f7"
+ },
+ "to": [
+ {
+ "consumer_key_code": "rewind"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f8"
+ },
+ "to": [
+ {
+ "consumer_key_code": "play_or_pause"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f9"
+ },
+ "to": [
+ {
+ "consumer_key_code": "fast_forward"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f10"
+ },
+ "to": [
+ {
+ "consumer_key_code": "mute"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f11"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f12"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_increment"
+ }
+ ]
+ }
+ ],
+ "name": "Default profile",
+ "parameters": {
+ "delay_milliseconds_before_open_device": 1000
+ },
+ "selected": true,
+ "simple_modifications": [],
+ "virtual_hid_keyboard": {
+ "country_code": 0,
+ "indicate_sticky_modifier_keys_state": true,
+ "mouse_key_xy_scale": 100
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/mac/.config/karabiner/automatic_backups/karabiner_20231126.json b/mac/.config/karabiner/automatic_backups/karabiner_20231126.json
new file mode 100644
index 0000000..62cc54f
--- /dev/null
+++ b/mac/.config/karabiner/automatic_backups/karabiner_20231126.json
@@ -0,0 +1,393 @@
+{
+ "global": {
+ "ask_for_confirmation_before_quitting": true,
+ "check_for_updates_on_startup": true,
+ "show_in_menu_bar": true,
+ "show_profile_name_in_menu_bar": false,
+ "unsafe_ui": false
+ },
+ "profiles": [
+ {
+ "complex_modifications": {
+ "parameters": {
+ "basic.simultaneous_threshold_milliseconds": 50,
+ "basic.to_delayed_action_delay_milliseconds": 500,
+ "basic.to_if_alone_timeout_milliseconds": 1000,
+ "basic.to_if_held_down_threshold_milliseconds": 500,
+ "mouse_motion_to_scroll.speed": 100
+ },
+ "rules": [
+ {
+ "description": "Change right_command+hjkl to arrow keys",
+ "manipulators": [
+ {
+ "from": {
+ "key_code": "h",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "left_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "j",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "down_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "k",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "up_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "l",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "right_arrow"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ },
+ {
+ "description": "fn + ` -> iTerm",
+ "manipulators": [
+ {
+ "from": {
+ "key_code": 53,
+ "modifiers": {
+ "mandatory": [
+ "fn"
+ ]
+ }
+ },
+ "to": [
+ {
+ "shell_command": "open '/Applications/iTerm.app'"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ },
+ {
+ "description": "Press twice fn to change input source & otherwise held_down and open iterm",
+ "manipulators": [
+ {
+ "conditions": [
+ {
+ "name": "fn pressed",
+ "type": "variable_if",
+ "value": 1
+ }
+ ],
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "spacebar",
+ "lazy": true,
+ "modifiers": [
+ "left_control",
+ "left_alt"
+ ],
+ "repeat": false
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "parameters": {
+ "basic.to_if_held_down_threshold_milliseconds": 0
+ },
+ "to": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 1
+ }
+ }
+ ],
+ "to_delayed_action": {
+ "to_if_canceled": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ],
+ "to_if_invoked": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ]
+ },
+ "to_if_held_down": [
+ {
+ "key_code": "fn"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ }
+ ]
+ },
+ "devices": [
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "identifiers": {
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "identifiers": {
+ "is_keyboard": false,
+ "is_pointing_device": true,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "identifiers": {
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 34304,
+ "vendor_id": 1452
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ }
+ ],
+ "fn_function_keys": [
+ {
+ "from": {
+ "key_code": "f1"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f2"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_increment"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f3"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "mission_control"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f4"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "spotlight"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f5"
+ },
+ "to": [
+ {
+ "consumer_key_code": "dictation"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f6"
+ },
+ "to": [
+ {
+ "key_code": "f6"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f7"
+ },
+ "to": [
+ {
+ "consumer_key_code": "rewind"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f8"
+ },
+ "to": [
+ {
+ "consumer_key_code": "play_or_pause"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f9"
+ },
+ "to": [
+ {
+ "consumer_key_code": "fast_forward"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f10"
+ },
+ "to": [
+ {
+ "consumer_key_code": "mute"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f11"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f12"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_increment"
+ }
+ ]
+ }
+ ],
+ "name": "Default profile",
+ "parameters": {
+ "delay_milliseconds_before_open_device": 1000
+ },
+ "selected": true,
+ "simple_modifications": [
+ {
+ "from": {
+ "key_code": "caps_lock"
+ },
+ "to": [
+ {
+ "key_code": "left_control"
+ }
+ ]
+ }
+ ],
+ "virtual_hid_keyboard": {
+ "country_code": 0,
+ "indicate_sticky_modifier_keys_state": true,
+ "mouse_key_xy_scale": 100
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/mac/.config/karabiner/automatic_backups/karabiner_20231128.json b/mac/.config/karabiner/automatic_backups/karabiner_20231128.json
new file mode 100644
index 0000000..7161b59
--- /dev/null
+++ b/mac/.config/karabiner/automatic_backups/karabiner_20231128.json
@@ -0,0 +1,464 @@
+{
+ "global": {
+ "ask_for_confirmation_before_quitting": true,
+ "check_for_updates_on_startup": true,
+ "show_in_menu_bar": true,
+ "show_profile_name_in_menu_bar": false,
+ "unsafe_ui": false
+ },
+ "profiles": [
+ {
+ "complex_modifications": {
+ "parameters": {
+ "basic.simultaneous_threshold_milliseconds": 50,
+ "basic.to_delayed_action_delay_milliseconds": 500,
+ "basic.to_if_alone_timeout_milliseconds": 1000,
+ "basic.to_if_held_down_threshold_milliseconds": 500,
+ "mouse_motion_to_scroll.speed": 100
+ },
+ "rules": [
+ {
+ "description": "Change right_command+hjkl to arrow keys",
+ "manipulators": [
+ {
+ "from": {
+ "key_code": "h",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "left_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "j",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "down_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "k",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "up_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "l",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "right_arrow"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ },
+ {
+ "description": "fn + ` -> iTerm",
+ "manipulators": [
+ {
+ "from": {
+ "key_code": 53,
+ "modifiers": {
+ "mandatory": [
+ "fn"
+ ]
+ }
+ },
+ "to": [
+ {
+ "shell_command": "open '/Applications/iTerm.app'"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ },
+ {
+ "description": "Press twice fn to change input source & otherwise held_down and open iterm",
+ "manipulators": [
+ {
+ "conditions": [
+ {
+ "name": "fn pressed",
+ "type": "variable_if",
+ "value": 1
+ }
+ ],
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "spacebar",
+ "lazy": true,
+ "modifiers": [
+ "left_control",
+ "left_alt"
+ ],
+ "repeat": false
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "parameters": {
+ "basic.to_if_held_down_threshold_milliseconds": 0
+ },
+ "to": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 1
+ }
+ }
+ ],
+ "to_delayed_action": {
+ "to_if_canceled": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ],
+ "to_if_invoked": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ]
+ },
+ "to_if_held_down": [
+ {
+ "key_code": "fn"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ },
+ {
+ "description": "Use ctrl + hl to Switch Tabs in Chrome, Brave & Firefox",
+ "manipulators": [
+ {
+ "conditions": [
+ {
+ "bundle_identifiers": [
+ "^com.google.Chrome",
+ "^com.brave.Browser",
+ "^org.mozilla.firefox"
+ ],
+ "type": "frontmost_application_if"
+ }
+ ],
+ "from": {
+ "key_code": "h",
+ "modifiers": {
+ "mandatory": [
+ "control"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "left_arrow",
+ "modifiers": [
+ "command",
+ "option"
+ ]
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "conditions": [
+ {
+ "bundle_identifiers": [
+ "^com.google.Chrome",
+ "^com.brave.Browser",
+ "^org.mozilla.firefox"
+ ],
+ "type": "frontmost_application_if"
+ }
+ ],
+ "from": {
+ "key_code": "l",
+ "modifiers": {
+ "mandatory": [
+ "control"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "right_arrow",
+ "modifiers": [
+ "command",
+ "option"
+ ]
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ }
+ ]
+ },
+ "devices": [
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "identifiers": {
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "identifiers": {
+ "is_keyboard": false,
+ "is_pointing_device": true,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "identifiers": {
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 34304,
+ "vendor_id": 1452
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ }
+ ],
+ "fn_function_keys": [
+ {
+ "from": {
+ "key_code": "f1"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f2"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_increment"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f3"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "mission_control"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f4"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "spotlight"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f5"
+ },
+ "to": [
+ {
+ "consumer_key_code": "dictation"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f6"
+ },
+ "to": [
+ {
+ "key_code": "f6"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f7"
+ },
+ "to": [
+ {
+ "consumer_key_code": "rewind"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f8"
+ },
+ "to": [
+ {
+ "consumer_key_code": "play_or_pause"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f9"
+ },
+ "to": [
+ {
+ "consumer_key_code": "fast_forward"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f10"
+ },
+ "to": [
+ {
+ "consumer_key_code": "mute"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f11"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f12"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_increment"
+ }
+ ]
+ }
+ ],
+ "name": "Default profile",
+ "parameters": {
+ "delay_milliseconds_before_open_device": 1000
+ },
+ "selected": true,
+ "simple_modifications": [
+ {
+ "from": {
+ "key_code": "caps_lock"
+ },
+ "to": [
+ {
+ "key_code": "left_control"
+ }
+ ]
+ }
+ ],
+ "virtual_hid_keyboard": {
+ "country_code": 0,
+ "indicate_sticky_modifier_keys_state": true,
+ "mouse_key_xy_scale": 100
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/mac/.config/karabiner/automatic_backups/karabiner_20240107.json b/mac/.config/karabiner/automatic_backups/karabiner_20240107.json
new file mode 100644
index 0000000..62cc54f
--- /dev/null
+++ b/mac/.config/karabiner/automatic_backups/karabiner_20240107.json
@@ -0,0 +1,393 @@
+{
+ "global": {
+ "ask_for_confirmation_before_quitting": true,
+ "check_for_updates_on_startup": true,
+ "show_in_menu_bar": true,
+ "show_profile_name_in_menu_bar": false,
+ "unsafe_ui": false
+ },
+ "profiles": [
+ {
+ "complex_modifications": {
+ "parameters": {
+ "basic.simultaneous_threshold_milliseconds": 50,
+ "basic.to_delayed_action_delay_milliseconds": 500,
+ "basic.to_if_alone_timeout_milliseconds": 1000,
+ "basic.to_if_held_down_threshold_milliseconds": 500,
+ "mouse_motion_to_scroll.speed": 100
+ },
+ "rules": [
+ {
+ "description": "Change right_command+hjkl to arrow keys",
+ "manipulators": [
+ {
+ "from": {
+ "key_code": "h",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "left_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "j",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "down_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "k",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "up_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "l",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "right_arrow"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ },
+ {
+ "description": "fn + ` -> iTerm",
+ "manipulators": [
+ {
+ "from": {
+ "key_code": 53,
+ "modifiers": {
+ "mandatory": [
+ "fn"
+ ]
+ }
+ },
+ "to": [
+ {
+ "shell_command": "open '/Applications/iTerm.app'"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ },
+ {
+ "description": "Press twice fn to change input source & otherwise held_down and open iterm",
+ "manipulators": [
+ {
+ "conditions": [
+ {
+ "name": "fn pressed",
+ "type": "variable_if",
+ "value": 1
+ }
+ ],
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "spacebar",
+ "lazy": true,
+ "modifiers": [
+ "left_control",
+ "left_alt"
+ ],
+ "repeat": false
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "parameters": {
+ "basic.to_if_held_down_threshold_milliseconds": 0
+ },
+ "to": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 1
+ }
+ }
+ ],
+ "to_delayed_action": {
+ "to_if_canceled": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ],
+ "to_if_invoked": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ]
+ },
+ "to_if_held_down": [
+ {
+ "key_code": "fn"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ }
+ ]
+ },
+ "devices": [
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "identifiers": {
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "identifiers": {
+ "is_keyboard": false,
+ "is_pointing_device": true,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "identifiers": {
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 34304,
+ "vendor_id": 1452
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ }
+ ],
+ "fn_function_keys": [
+ {
+ "from": {
+ "key_code": "f1"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f2"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_increment"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f3"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "mission_control"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f4"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "spotlight"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f5"
+ },
+ "to": [
+ {
+ "consumer_key_code": "dictation"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f6"
+ },
+ "to": [
+ {
+ "key_code": "f6"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f7"
+ },
+ "to": [
+ {
+ "consumer_key_code": "rewind"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f8"
+ },
+ "to": [
+ {
+ "consumer_key_code": "play_or_pause"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f9"
+ },
+ "to": [
+ {
+ "consumer_key_code": "fast_forward"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f10"
+ },
+ "to": [
+ {
+ "consumer_key_code": "mute"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f11"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f12"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_increment"
+ }
+ ]
+ }
+ ],
+ "name": "Default profile",
+ "parameters": {
+ "delay_milliseconds_before_open_device": 1000
+ },
+ "selected": true,
+ "simple_modifications": [
+ {
+ "from": {
+ "key_code": "caps_lock"
+ },
+ "to": [
+ {
+ "key_code": "left_control"
+ }
+ ]
+ }
+ ],
+ "virtual_hid_keyboard": {
+ "country_code": 0,
+ "indicate_sticky_modifier_keys_state": true,
+ "mouse_key_xy_scale": 100
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/mac/.config/karabiner/automatic_backups/karabiner_20240108.json b/mac/.config/karabiner/automatic_backups/karabiner_20240108.json
new file mode 100644
index 0000000..0088e24
--- /dev/null
+++ b/mac/.config/karabiner/automatic_backups/karabiner_20240108.json
@@ -0,0 +1,417 @@
+{
+ "global": {
+ "ask_for_confirmation_before_quitting": true,
+ "check_for_updates_on_startup": true,
+ "show_in_menu_bar": true,
+ "show_profile_name_in_menu_bar": false,
+ "unsafe_ui": false
+ },
+ "profiles": [
+ {
+ "complex_modifications": {
+ "parameters": {
+ "basic.simultaneous_threshold_milliseconds": 50,
+ "basic.to_delayed_action_delay_milliseconds": 500,
+ "basic.to_if_alone_timeout_milliseconds": 1000,
+ "basic.to_if_held_down_threshold_milliseconds": 500,
+ "mouse_motion_to_scroll.speed": 100
+ },
+ "rules": [
+ {
+ "description": "Change right_command+hjkl to arrow keys",
+ "manipulators": [
+ {
+ "from": {
+ "key_code": "h",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "left_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "j",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "down_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "k",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "up_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "l",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "right_arrow"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ },
+ {
+ "description": "fn + ` -> iTerm",
+ "manipulators": [
+ {
+ "from": {
+ "key_code": 53,
+ "modifiers": {
+ "mandatory": [
+ "fn"
+ ]
+ }
+ },
+ "to": [
+ {
+ "shell_command": "open '/Applications/iTerm.app'"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ },
+ {
+ "description": "Press twice fn to change input source & otherwise held_down and open iterm",
+ "manipulators": [
+ {
+ "conditions": [
+ {
+ "name": "fn pressed",
+ "type": "variable_if",
+ "value": 1
+ }
+ ],
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "spacebar",
+ "lazy": true,
+ "modifiers": [
+ "left_control",
+ "left_alt"
+ ],
+ "repeat": false
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "parameters": {
+ "basic.to_if_held_down_threshold_milliseconds": 0
+ },
+ "to": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 1
+ }
+ }
+ ],
+ "to_delayed_action": {
+ "to_if_canceled": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ],
+ "to_if_invoked": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ]
+ },
+ "to_if_held_down": [
+ {
+ "key_code": "fn"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ }
+ ]
+ },
+ "devices": [
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": false,
+ "is_pointing_device": true,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": false,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 34304,
+ "vendor_id": 1452
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ }
+ ],
+ "fn_function_keys": [
+ {
+ "from": {
+ "key_code": "f1"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f2"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_increment"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f3"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "mission_control"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f4"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "spotlight"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f5"
+ },
+ "to": [
+ {
+ "consumer_key_code": "dictation"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f6"
+ },
+ "to": [
+ {
+ "key_code": "f6"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f7"
+ },
+ "to": [
+ {
+ "consumer_key_code": "rewind"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f8"
+ },
+ "to": [
+ {
+ "consumer_key_code": "play_or_pause"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f9"
+ },
+ "to": [
+ {
+ "consumer_key_code": "fast_forward"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f10"
+ },
+ "to": [
+ {
+ "consumer_key_code": "mute"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f11"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f12"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_increment"
+ }
+ ]
+ }
+ ],
+ "name": "Default profile",
+ "parameters": {
+ "delay_milliseconds_before_open_device": 1000
+ },
+ "selected": true,
+ "simple_modifications": [
+ {
+ "from": {
+ "key_code": "caps_lock"
+ },
+ "to": [
+ {
+ "key_code": "left_control"
+ }
+ ]
+ }
+ ],
+ "virtual_hid_keyboard": {
+ "country_code": 0,
+ "indicate_sticky_modifier_keys_state": true,
+ "mouse_key_xy_scale": 100
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/mac/.config/karabiner/automatic_backups/karabiner_20240109.json b/mac/.config/karabiner/automatic_backups/karabiner_20240109.json
new file mode 100644
index 0000000..0088e24
--- /dev/null
+++ b/mac/.config/karabiner/automatic_backups/karabiner_20240109.json
@@ -0,0 +1,417 @@
+{
+ "global": {
+ "ask_for_confirmation_before_quitting": true,
+ "check_for_updates_on_startup": true,
+ "show_in_menu_bar": true,
+ "show_profile_name_in_menu_bar": false,
+ "unsafe_ui": false
+ },
+ "profiles": [
+ {
+ "complex_modifications": {
+ "parameters": {
+ "basic.simultaneous_threshold_milliseconds": 50,
+ "basic.to_delayed_action_delay_milliseconds": 500,
+ "basic.to_if_alone_timeout_milliseconds": 1000,
+ "basic.to_if_held_down_threshold_milliseconds": 500,
+ "mouse_motion_to_scroll.speed": 100
+ },
+ "rules": [
+ {
+ "description": "Change right_command+hjkl to arrow keys",
+ "manipulators": [
+ {
+ "from": {
+ "key_code": "h",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "left_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "j",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "down_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "k",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "up_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "l",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "right_arrow"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ },
+ {
+ "description": "fn + ` -> iTerm",
+ "manipulators": [
+ {
+ "from": {
+ "key_code": 53,
+ "modifiers": {
+ "mandatory": [
+ "fn"
+ ]
+ }
+ },
+ "to": [
+ {
+ "shell_command": "open '/Applications/iTerm.app'"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ },
+ {
+ "description": "Press twice fn to change input source & otherwise held_down and open iterm",
+ "manipulators": [
+ {
+ "conditions": [
+ {
+ "name": "fn pressed",
+ "type": "variable_if",
+ "value": 1
+ }
+ ],
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "spacebar",
+ "lazy": true,
+ "modifiers": [
+ "left_control",
+ "left_alt"
+ ],
+ "repeat": false
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "parameters": {
+ "basic.to_if_held_down_threshold_milliseconds": 0
+ },
+ "to": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 1
+ }
+ }
+ ],
+ "to_delayed_action": {
+ "to_if_canceled": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ],
+ "to_if_invoked": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ]
+ },
+ "to_if_held_down": [
+ {
+ "key_code": "fn"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ }
+ ]
+ },
+ "devices": [
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": false,
+ "is_pointing_device": true,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": false,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 34304,
+ "vendor_id": 1452
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ }
+ ],
+ "fn_function_keys": [
+ {
+ "from": {
+ "key_code": "f1"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f2"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_increment"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f3"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "mission_control"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f4"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "spotlight"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f5"
+ },
+ "to": [
+ {
+ "consumer_key_code": "dictation"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f6"
+ },
+ "to": [
+ {
+ "key_code": "f6"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f7"
+ },
+ "to": [
+ {
+ "consumer_key_code": "rewind"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f8"
+ },
+ "to": [
+ {
+ "consumer_key_code": "play_or_pause"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f9"
+ },
+ "to": [
+ {
+ "consumer_key_code": "fast_forward"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f10"
+ },
+ "to": [
+ {
+ "consumer_key_code": "mute"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f11"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f12"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_increment"
+ }
+ ]
+ }
+ ],
+ "name": "Default profile",
+ "parameters": {
+ "delay_milliseconds_before_open_device": 1000
+ },
+ "selected": true,
+ "simple_modifications": [
+ {
+ "from": {
+ "key_code": "caps_lock"
+ },
+ "to": [
+ {
+ "key_code": "left_control"
+ }
+ ]
+ }
+ ],
+ "virtual_hid_keyboard": {
+ "country_code": 0,
+ "indicate_sticky_modifier_keys_state": true,
+ "mouse_key_xy_scale": 100
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/mac/.config/karabiner/automatic_backups/karabiner_20240112.json b/mac/.config/karabiner/automatic_backups/karabiner_20240112.json
new file mode 100644
index 0000000..2b1171d
--- /dev/null
+++ b/mac/.config/karabiner/automatic_backups/karabiner_20240112.json
@@ -0,0 +1,461 @@
+{
+ "global": {
+ "ask_for_confirmation_before_quitting": true,
+ "check_for_updates_on_startup": true,
+ "show_in_menu_bar": true,
+ "show_profile_name_in_menu_bar": false,
+ "unsafe_ui": false
+ },
+ "profiles": [
+ {
+ "complex_modifications": {
+ "parameters": {
+ "basic.simultaneous_threshold_milliseconds": 50,
+ "basic.to_delayed_action_delay_milliseconds": 500,
+ "basic.to_if_alone_timeout_milliseconds": 1000,
+ "basic.to_if_held_down_threshold_milliseconds": 500,
+ "mouse_motion_to_scroll.speed": 100
+ },
+ "rules": [
+ {
+ "description": "Change right_command+hjkl to arrow keys",
+ "manipulators": [
+ {
+ "from": {
+ "key_code": "h",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "left_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "j",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "down_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "k",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "up_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "l",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "right_arrow"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ },
+ {
+ "description": "fn + ` -> iTerm",
+ "manipulators": [
+ {
+ "from": {
+ "key_code": 53,
+ "modifiers": {
+ "mandatory": [
+ "fn"
+ ]
+ }
+ },
+ "to": [
+ {
+ "shell_command": "open '/Applications/iTerm.app'"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ },
+ {
+ "description": "Press twice fn to change input source & otherwise held_down and open iterm",
+ "manipulators": [
+ {
+ "conditions": [
+ {
+ "name": "fn pressed",
+ "type": "variable_if",
+ "value": 1
+ }
+ ],
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "spacebar",
+ "lazy": true,
+ "modifiers": [
+ "left_control",
+ "left_alt"
+ ],
+ "repeat": false
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "parameters": {
+ "basic.to_if_held_down_threshold_milliseconds": 0
+ },
+ "to": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 1
+ }
+ }
+ ],
+ "to_delayed_action": {
+ "to_if_canceled": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ],
+ "to_if_invoked": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ]
+ },
+ "to_if_held_down": [
+ {
+ "key_code": "fn"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ }
+ ]
+ },
+ "devices": [
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": false,
+ "is_pointing_device": true,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": false,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 34304,
+ "vendor_id": 1452
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": true,
+ "product_id": 45924,
+ "vendor_id": 1133
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": false,
+ "is_pointing_device": true,
+ "product_id": 45085,
+ "vendor_id": 1133
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": false,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ }
+ ],
+ "fn_function_keys": [
+ {
+ "from": {
+ "key_code": "f1"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f2"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_increment"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f3"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "mission_control"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f4"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "spotlight"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f5"
+ },
+ "to": [
+ {
+ "consumer_key_code": "dictation"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f6"
+ },
+ "to": [
+ {
+ "key_code": "f6"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f7"
+ },
+ "to": [
+ {
+ "consumer_key_code": "rewind"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f8"
+ },
+ "to": [
+ {
+ "consumer_key_code": "play_or_pause"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f9"
+ },
+ "to": [
+ {
+ "consumer_key_code": "fast_forward"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f10"
+ },
+ "to": [
+ {
+ "consumer_key_code": "mute"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f11"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f12"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_increment"
+ }
+ ]
+ }
+ ],
+ "name": "Default profile",
+ "parameters": {
+ "delay_milliseconds_before_open_device": 1000
+ },
+ "selected": true,
+ "simple_modifications": [
+ {
+ "from": {
+ "key_code": "caps_lock"
+ },
+ "to": [
+ {
+ "key_code": "left_control"
+ }
+ ]
+ }
+ ],
+ "virtual_hid_keyboard": {
+ "country_code": 0,
+ "indicate_sticky_modifier_keys_state": true,
+ "mouse_key_xy_scale": 100
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/mac/.config/karabiner/automatic_backups/karabiner_20240113.json b/mac/.config/karabiner/automatic_backups/karabiner_20240113.json
new file mode 100644
index 0000000..13346ea
--- /dev/null
+++ b/mac/.config/karabiner/automatic_backups/karabiner_20240113.json
@@ -0,0 +1,472 @@
+{
+ "global": {
+ "ask_for_confirmation_before_quitting": true,
+ "check_for_updates_on_startup": true,
+ "show_in_menu_bar": true,
+ "show_profile_name_in_menu_bar": false,
+ "unsafe_ui": false
+ },
+ "profiles": [
+ {
+ "complex_modifications": {
+ "parameters": {
+ "basic.simultaneous_threshold_milliseconds": 50,
+ "basic.to_delayed_action_delay_milliseconds": 500,
+ "basic.to_if_alone_timeout_milliseconds": 1000,
+ "basic.to_if_held_down_threshold_milliseconds": 500,
+ "mouse_motion_to_scroll.speed": 100
+ },
+ "rules": [
+ {
+ "description": "Change right_command+hjkl to arrow keys",
+ "manipulators": [
+ {
+ "from": {
+ "key_code": "h",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "left_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "j",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "down_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "k",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "up_arrow"
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "l",
+ "modifiers": {
+ "mandatory": [
+ "right_command"
+ ],
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "right_arrow"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ },
+ {
+ "description": "fn + ` -> iTerm",
+ "manipulators": [
+ {
+ "from": {
+ "key_code": 53,
+ "modifiers": {
+ "mandatory": [
+ "fn"
+ ]
+ }
+ },
+ "to": [
+ {
+ "shell_command": "open '/Applications/iTerm.app'"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ },
+ {
+ "description": "Press twice fn to change input source & otherwise held_down and open iterm",
+ "manipulators": [
+ {
+ "conditions": [
+ {
+ "name": "fn pressed",
+ "type": "variable_if",
+ "value": 1
+ }
+ ],
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "spacebar",
+ "lazy": true,
+ "modifiers": [
+ "left_control",
+ "left_alt"
+ ],
+ "repeat": false
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "parameters": {
+ "basic.to_if_held_down_threshold_milliseconds": 0
+ },
+ "to": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 1
+ }
+ }
+ ],
+ "to_delayed_action": {
+ "to_if_canceled": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ],
+ "to_if_invoked": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ]
+ },
+ "to_if_held_down": [
+ {
+ "key_code": "fn"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ }
+ ]
+ },
+ "devices": [
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": false,
+ "is_pointing_device": true,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": false,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 34304,
+ "vendor_id": 1452
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": true,
+ "product_id": 45924,
+ "vendor_id": 1133
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": false,
+ "is_pointing_device": true,
+ "product_id": 45085,
+ "vendor_id": 1133
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": false,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 256,
+ "vendor_id": 2131
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ }
+ ],
+ "fn_function_keys": [
+ {
+ "from": {
+ "key_code": "f1"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f2"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_increment"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f3"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "mission_control"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f4"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "spotlight"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f5"
+ },
+ "to": [
+ {
+ "consumer_key_code": "dictation"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f6"
+ },
+ "to": [
+ {
+ "key_code": "f6"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f7"
+ },
+ "to": [
+ {
+ "consumer_key_code": "rewind"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f8"
+ },
+ "to": [
+ {
+ "consumer_key_code": "play_or_pause"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f9"
+ },
+ "to": [
+ {
+ "consumer_key_code": "fast_forward"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f10"
+ },
+ "to": [
+ {
+ "consumer_key_code": "mute"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f11"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f12"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_increment"
+ }
+ ]
+ }
+ ],
+ "name": "Default profile",
+ "parameters": {
+ "delay_milliseconds_before_open_device": 1000
+ },
+ "selected": true,
+ "simple_modifications": [],
+ "virtual_hid_keyboard": {
+ "country_code": 0,
+ "indicate_sticky_modifier_keys_state": true,
+ "mouse_key_xy_scale": 100
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/mac/.config/karabiner/automatic_backups/karabiner_20240114.json b/mac/.config/karabiner/automatic_backups/karabiner_20240114.json
new file mode 100644
index 0000000..9193d0d
--- /dev/null
+++ b/mac/.config/karabiner/automatic_backups/karabiner_20240114.json
@@ -0,0 +1,391 @@
+{
+ "global": {
+ "ask_for_confirmation_before_quitting": true,
+ "check_for_updates_on_startup": true,
+ "show_in_menu_bar": true,
+ "show_profile_name_in_menu_bar": false,
+ "unsafe_ui": false
+ },
+ "profiles": [
+ {
+ "complex_modifications": {
+ "parameters": {
+ "basic.simultaneous_threshold_milliseconds": 50,
+ "basic.to_delayed_action_delay_milliseconds": 500,
+ "basic.to_if_alone_timeout_milliseconds": 1000,
+ "basic.to_if_held_down_threshold_milliseconds": 500,
+ "mouse_motion_to_scroll.speed": 100
+ },
+ "rules": [
+ {
+ "description": "fn + ` -> iTerm",
+ "manipulators": [
+ {
+ "from": {
+ "key_code": 53,
+ "modifiers": {
+ "mandatory": [
+ "fn"
+ ]
+ }
+ },
+ "to": [
+ {
+ "shell_command": "open '/Applications/iTerm.app'"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ },
+ {
+ "description": "Press twice fn to change input source & otherwise held_down and open iterm",
+ "manipulators": [
+ {
+ "conditions": [
+ {
+ "name": "fn pressed",
+ "type": "variable_if",
+ "value": 1
+ }
+ ],
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "spacebar",
+ "lazy": true,
+ "modifiers": [
+ "left_control",
+ "left_alt"
+ ],
+ "repeat": false
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "parameters": {
+ "basic.to_if_held_down_threshold_milliseconds": 0
+ },
+ "to": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 1
+ }
+ }
+ ],
+ "to_delayed_action": {
+ "to_if_canceled": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ],
+ "to_if_invoked": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ]
+ },
+ "to_if_held_down": [
+ {
+ "key_code": "fn"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ }
+ ]
+ },
+ "devices": [
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": false,
+ "is_pointing_device": true,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": false,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 34304,
+ "vendor_id": 1452
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": true,
+ "product_id": 45924,
+ "vendor_id": 1133
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": false,
+ "is_pointing_device": true,
+ "product_id": 45085,
+ "vendor_id": 1133
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": false,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 256,
+ "vendor_id": 2131
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ }
+ ],
+ "fn_function_keys": [
+ {
+ "from": {
+ "key_code": "f1"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f2"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_increment"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f3"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "mission_control"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f4"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "spotlight"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f5"
+ },
+ "to": [
+ {
+ "consumer_key_code": "dictation"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f6"
+ },
+ "to": [
+ {
+ "key_code": "f6"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f7"
+ },
+ "to": [
+ {
+ "consumer_key_code": "rewind"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f8"
+ },
+ "to": [
+ {
+ "consumer_key_code": "play_or_pause"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f9"
+ },
+ "to": [
+ {
+ "consumer_key_code": "fast_forward"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f10"
+ },
+ "to": [
+ {
+ "consumer_key_code": "mute"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f11"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f12"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_increment"
+ }
+ ]
+ }
+ ],
+ "name": "Default profile",
+ "parameters": {
+ "delay_milliseconds_before_open_device": 1000
+ },
+ "selected": true,
+ "simple_modifications": [],
+ "virtual_hid_keyboard": {
+ "country_code": 0,
+ "indicate_sticky_modifier_keys_state": true,
+ "mouse_key_xy_scale": 100
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/mac/.config/karabiner/automatic_backups/karabiner_20240115.json b/mac/.config/karabiner/automatic_backups/karabiner_20240115.json
new file mode 100644
index 0000000..9193d0d
--- /dev/null
+++ b/mac/.config/karabiner/automatic_backups/karabiner_20240115.json
@@ -0,0 +1,391 @@
+{
+ "global": {
+ "ask_for_confirmation_before_quitting": true,
+ "check_for_updates_on_startup": true,
+ "show_in_menu_bar": true,
+ "show_profile_name_in_menu_bar": false,
+ "unsafe_ui": false
+ },
+ "profiles": [
+ {
+ "complex_modifications": {
+ "parameters": {
+ "basic.simultaneous_threshold_milliseconds": 50,
+ "basic.to_delayed_action_delay_milliseconds": 500,
+ "basic.to_if_alone_timeout_milliseconds": 1000,
+ "basic.to_if_held_down_threshold_milliseconds": 500,
+ "mouse_motion_to_scroll.speed": 100
+ },
+ "rules": [
+ {
+ "description": "fn + ` -> iTerm",
+ "manipulators": [
+ {
+ "from": {
+ "key_code": 53,
+ "modifiers": {
+ "mandatory": [
+ "fn"
+ ]
+ }
+ },
+ "to": [
+ {
+ "shell_command": "open '/Applications/iTerm.app'"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ },
+ {
+ "description": "Press twice fn to change input source & otherwise held_down and open iterm",
+ "manipulators": [
+ {
+ "conditions": [
+ {
+ "name": "fn pressed",
+ "type": "variable_if",
+ "value": 1
+ }
+ ],
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "to": [
+ {
+ "key_code": "spacebar",
+ "lazy": true,
+ "modifiers": [
+ "left_control",
+ "left_alt"
+ ],
+ "repeat": false
+ }
+ ],
+ "type": "basic"
+ },
+ {
+ "from": {
+ "key_code": "fn",
+ "modifiers": {
+ "optional": [
+ "any"
+ ]
+ }
+ },
+ "parameters": {
+ "basic.to_if_held_down_threshold_milliseconds": 0
+ },
+ "to": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 1
+ }
+ }
+ ],
+ "to_delayed_action": {
+ "to_if_canceled": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ],
+ "to_if_invoked": [
+ {
+ "set_variable": {
+ "name": "fn pressed",
+ "value": 0
+ }
+ }
+ ]
+ },
+ "to_if_held_down": [
+ {
+ "key_code": "fn"
+ }
+ ],
+ "type": "basic"
+ }
+ ]
+ }
+ ]
+ },
+ "devices": [
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": false,
+ "is_pointing_device": true,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": false,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 34304,
+ "vendor_id": 1452
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": true,
+ "product_id": 45924,
+ "vendor_id": 1133
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": false,
+ "is_pointing_device": true,
+ "product_id": 45085,
+ "vendor_id": 1133
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": false,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 256,
+ "vendor_id": 2131
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ }
+ ],
+ "fn_function_keys": [
+ {
+ "from": {
+ "key_code": "f1"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f2"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_increment"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f3"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "mission_control"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f4"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "spotlight"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f5"
+ },
+ "to": [
+ {
+ "consumer_key_code": "dictation"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f6"
+ },
+ "to": [
+ {
+ "key_code": "f6"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f7"
+ },
+ "to": [
+ {
+ "consumer_key_code": "rewind"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f8"
+ },
+ "to": [
+ {
+ "consumer_key_code": "play_or_pause"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f9"
+ },
+ "to": [
+ {
+ "consumer_key_code": "fast_forward"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f10"
+ },
+ "to": [
+ {
+ "consumer_key_code": "mute"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f11"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f12"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_increment"
+ }
+ ]
+ }
+ ],
+ "name": "Default profile",
+ "parameters": {
+ "delay_milliseconds_before_open_device": 1000
+ },
+ "selected": true,
+ "simple_modifications": [],
+ "virtual_hid_keyboard": {
+ "country_code": 0,
+ "indicate_sticky_modifier_keys_state": true,
+ "mouse_key_xy_scale": 100
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/mac/.config/karabiner/karabiner.json b/mac/.config/karabiner/karabiner.json
new file mode 100644
index 0000000..db9c040
--- /dev/null
+++ b/mac/.config/karabiner/karabiner.json
@@ -0,0 +1,290 @@
+{
+ "global": {
+ "ask_for_confirmation_before_quitting": true,
+ "check_for_updates_on_startup": true,
+ "show_in_menu_bar": true,
+ "show_profile_name_in_menu_bar": false,
+ "unsafe_ui": false
+ },
+ "profiles": [
+ {
+ "complex_modifications": {
+ "parameters": {
+ "basic.simultaneous_threshold_milliseconds": 50,
+ "basic.to_delayed_action_delay_milliseconds": 500,
+ "basic.to_if_alone_timeout_milliseconds": 1000,
+ "basic.to_if_held_down_threshold_milliseconds": 500,
+ "mouse_motion_to_scroll.speed": 100
+ },
+ "rules": []
+ },
+ "devices": [
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": false,
+ "is_pointing_device": true,
+ "product_id": 0,
+ "vendor_id": 0
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": false,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 34304,
+ "vendor_id": 1452
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": true,
+ "product_id": 45924,
+ "vendor_id": 1133
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": false,
+ "is_pointing_device": true,
+ "product_id": 45085,
+ "vendor_id": 1133
+ },
+ "ignore": true,
+ "manipulate_caps_lock_led": false,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ },
+ {
+ "disable_built_in_keyboard_if_exists": false,
+ "fn_function_keys": [],
+ "game_pad_swap_sticks": false,
+ "identifiers": {
+ "is_game_pad": false,
+ "is_keyboard": true,
+ "is_pointing_device": false,
+ "product_id": 256,
+ "vendor_id": 2131
+ },
+ "ignore": false,
+ "manipulate_caps_lock_led": true,
+ "mouse_flip_horizontal_wheel": false,
+ "mouse_flip_vertical_wheel": false,
+ "mouse_flip_x": false,
+ "mouse_flip_y": false,
+ "mouse_swap_wheels": false,
+ "mouse_swap_xy": false,
+ "simple_modifications": [],
+ "treat_as_built_in_keyboard": false
+ }
+ ],
+ "fn_function_keys": [
+ {
+ "from": {
+ "key_code": "f1"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f2"
+ },
+ "to": [
+ {
+ "consumer_key_code": "display_brightness_increment"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f3"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "mission_control"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f4"
+ },
+ "to": [
+ {
+ "apple_vendor_keyboard_key_code": "spotlight"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f5"
+ },
+ "to": [
+ {
+ "consumer_key_code": "dictation"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f6"
+ },
+ "to": [
+ {
+ "key_code": "f6"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f7"
+ },
+ "to": [
+ {
+ "consumer_key_code": "rewind"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f8"
+ },
+ "to": [
+ {
+ "consumer_key_code": "play_or_pause"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f9"
+ },
+ "to": [
+ {
+ "consumer_key_code": "fast_forward"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f10"
+ },
+ "to": [
+ {
+ "consumer_key_code": "mute"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f11"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_decrement"
+ }
+ ]
+ },
+ {
+ "from": {
+ "key_code": "f12"
+ },
+ "to": [
+ {
+ "consumer_key_code": "volume_increment"
+ }
+ ]
+ }
+ ],
+ "name": "Default profile",
+ "parameters": {
+ "delay_milliseconds_before_open_device": 1000
+ },
+ "selected": true,
+ "simple_modifications": [],
+ "virtual_hid_keyboard": {
+ "country_code": 0,
+ "indicate_sticky_modifier_keys_state": true,
+ "mouse_key_xy_scale": 100
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/mac/.config/kitty/icons/kitty-dark.icns b/mac/.config/kitty/icons/kitty-dark.icns
new file mode 100644
index 0000000..57e2982
--- /dev/null
+++ b/mac/.config/kitty/icons/kitty-dark.icns
Binary files differ
diff --git a/mac/.config/kitty/icons/kitty-light.icns b/mac/.config/kitty/icons/kitty-light.icns
new file mode 100644
index 0000000..0ac7304
--- /dev/null
+++ b/mac/.config/kitty/icons/kitty-light.icns
Binary files differ
diff --git a/mac/.config/kitty/icons/neue_azure.icns b/mac/.config/kitty/icons/neue_azure.icns
new file mode 100644
index 0000000..6573b4c
--- /dev/null
+++ b/mac/.config/kitty/icons/neue_azure.icns
Binary files differ
diff --git a/mac/.config/kitty/icons/neue_ember.icns b/mac/.config/kitty/icons/neue_ember.icns
new file mode 100644
index 0000000..e8adb6d
--- /dev/null
+++ b/mac/.config/kitty/icons/neue_ember.icns
Binary files differ
diff --git a/mac/.config/kitty/icons/neue_outrun.icns b/mac/.config/kitty/icons/neue_outrun.icns
new file mode 100644
index 0000000..65f1ce6
--- /dev/null
+++ b/mac/.config/kitty/icons/neue_outrun.icns
Binary files differ
diff --git a/mac/.config/kitty/icons/neue_toxic.icns b/mac/.config/kitty/icons/neue_toxic.icns
new file mode 100644
index 0000000..67ff000
--- /dev/null
+++ b/mac/.config/kitty/icons/neue_toxic.icns
Binary files differ
diff --git a/mac/.config/kitty/icons/outrun.icns b/mac/.config/kitty/icons/outrun.icns
new file mode 100644
index 0000000..3ab11a4
--- /dev/null
+++ b/mac/.config/kitty/icons/outrun.icns
Binary files differ
diff --git a/mac/.config/kitty/kitty.conf b/mac/.config/kitty/kitty.conf
new file mode 100644
index 0000000..5662155
--- /dev/null
+++ b/mac/.config/kitty/kitty.conf
@@ -0,0 +1,145 @@
+# Font
+font_family FiraCode Nerd Font
+italic_font auto
+bold_italic_font auto
+font_size 16.0
+
+underline_position -2
+modify_font underline_thickness 150%
+modify_font strikethrough_position 2px
+text_composition_strategy platform
+
+# Sound
+enable_audio_bell no
+
+# Cursor
+cursor_text_color background
+cursor_shape block
+cursor_blink_interval 0
+scrollback_lines 10000
+copy_on_select clipboard
+strip_trailing_spaces always
+select_by_word_characters @-./_~?&=%+#
+
+# Window
+confirm_os_window_close 0
+# remember_window_size yes
+# initial_window_width 640
+# initial_window_height 400
+# enabled_layouts *
+# draw_minimal_borders yes
+resize_in_steps no
+# window_resize_step_cells 0
+# window_resize_step_lines 0
+placement_strategy center
+# window_border_width 100px
+window_margin_width 5
+# single_window_margin_width -1
+hide_window_decorations yes
+# hide_window_decorations titlebar-only
+
+# Tab bar
+tab_bar_edge top
+active_tab_foreground #000
+active_tab_background #eee
+active_tab_font_style bold-italic
+inactive_tab_foreground #444
+inactive_tab_background #999
+inactive_tab_font_style normal
+# Background
+background_opacity 0.9
+# background_image /Users/si/.config/background/bg_girl.png
+# background_image /Users/si/.config/background/yejin.png
+background_image_layout cscaled
+background_image_linear no
+dynamic_background_opacity yes
+# background_tint 0.95
+# background_tint_gaps 1.0
+# dim_opacity 0.1
+
+# Remote
+allow_remote_control yes
+
+# Macos
+macos_titlebar_color system
+macos_option_as_alt left
+macos_window_resizable yes
+
+# Keybinding
+# kitty_mod ctrl+shift
+map cmd+n no_op
+map cmd+enter no_op
+map cmd+t no_op
+map cmd+w no_op
+map cmd+r no_op
+map cmd+shift+i no_op
+map cmd+shift+o no_op
+map cmd+shift+p no_op
+map cmd+c copy_to_clipboard
+map cmd+v paste_from_clipboard
+map kitty_mod+w close_window
+# map cmd+] next_window
+# map cmd+[ previous_window
+# map cmd+1 first_window
+# map cmd+2 second_window
+# map cmd+3 third_window
+# map cmd+4 fourth_window
+# map cmd+5 fifth_window
+
+# Theme
+# include ./theme.conf
+term xterm-256color
+# selection_foreground #000000
+# selection_background #fffacd
+# foreground #f8f8f2
+# foreground #e0d0b0
+# background #000000
+# background #151515
+# selection_foreground #151515
+# selection_background #ffa9c9
+# cursor #ffa9c9
+# cursor #f8f8f2
+# cursor_text_color #151515
+# url_color #95b9d0
+url_color #d65c9d
+active_border_color #ffa9c9
+# active_border_color #00ff00
+# inactive_border_color #928374
+inactive_border_color #cccccc
+bell_border_color #f98080
+# wayland_titlebar_color #080808
+# macos_titlebar_color #080808
+active_tab_foreground #080808
+active_tab_background #a990c9
+inactive_tab_foreground #bdae93
+inactive_tab_background #252525
+tab_bar_background #080808
+# mark1_foreground #080808
+# mark1_background #89a0e0
+# mark2_foreground #080808
+# mark2_background #95b9d0
+# mark3_foreground #080808
+# mark3_background #a0d0c0
+# color0 #000000
+# color0 #3a3634
+# color8 #504844
+# color8 #44475a
+# color1 #ff6960
+# color9 #f98080
+# color1 #ff5555
+# color9 #ff5555
+# color2 #b0d080
+# color10 #c0e990
+# color3 #f9bd69
+# color11 #ffd079
+# color4 #89a0e0
+# color12 #95b9d0
+# color5 #df95cf
+# color13 #ffa9c9
+# color6 #a0d0c0
+# color14 #a0dfa9
+# color7 #d5c4a1
+# color15 #bdae93
+# color7 #bbbbbb
+# color15 #ffffff
+
diff --git a/mac/.config/neofetch/config.conf b/mac/.config/neofetch/config.conf
new file mode 100644
index 0000000..69a95cc
--- /dev/null
+++ b/mac/.config/neofetch/config.conf
@@ -0,0 +1,863 @@
+# See this wiki page for more info:
+# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info
+print_info() {
+ # info cols
+ prin " ┌─────────\n Hardware Information \n─────────┐"
+ info " ​ ​  " distro
+ info " ​ ​ 󰻠 " cpu
+ info " ​ ​  " gpu
+ info " ​ ​  " disk
+ info " ​ ​ 󰍛 " memory
+ info " ​ ​ 󰍹 " resolution
+ info " ​ ​ 󰂀 " battery
+ prin " ├─────────\n Software Information \n─────────┤"
+ info " ​ ​  " users
+ info " ​ ​  " distro
+ info " ​ ​  " kernel
+ info " ​ ​  " de
+ info " ​ ​  " wm
+ info " ​ ​  " shell
+ info " ​ ​ 󰂮 " term
+ info " ​ ​  " term_font
+ info " ​ ​ │  " font
+ # info " ​ ​  " theme
+ # info " ​ ​  " icons
+ info " ​ ​  " packages
+ info " ​ ​  " uptime
+ info " ​ ​  " gpu_driver # Linux/macOS only
+ info " ​ ​  " cpu_usage
+ # info " ​ ​ ﱘ " song
+ # [[ "$player" ]] && prin "Music Player" "$player"
+ info " ​ ​  " local_ip
+ info " ​ ​  " public_ip
+ info " ​ ​  " locale # This only works on glibc systems.
+ prin " └────────────────────────────────────────┘"
+ info colsZ
+}
+
+# Title
+
+
+# Hide/Show Fully qualified domain name.
+#
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --title_fqdn
+title_fqdn="off"
+
+
+# Kernel
+
+
+# Shorten the output of the kernel function.
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --kernel_shorthand
+# Supports: Everything except *BSDs (except PacBSD and PC-BSD)
+#
+# Example:
+# on: '4.8.9-1-ARCH'
+# off: 'Linux 4.8.9-1-ARCH'
+kernel_shorthand="off"
+
+
+# Distro
+
+
+# Shorten the output of the distro function
+#
+# Default: 'off'
+# Values: 'on', 'tiny', 'off'
+# Flag: --distro_shorthand
+# Supports: Everything except Windows and Haiku
+distro_shorthand="off"
+
+# Show/Hide OS Architecture.
+# Show 'x86_64', 'x86' and etc in 'Distro:' output.
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --os_arch
+#
+# Example:
+# on: 'Arch Linux x86_64'
+# off: 'Arch Linux'
+os_arch="on"
+
+
+# Uptime
+
+
+# Shorten the output of the uptime function
+#
+# Default: 'on'
+# Values: 'on', 'tiny', 'off'
+# Flag: --uptime_shorthand
+#
+# Example:
+# on: '2 days, 10 hours, 3 mins'
+# tiny: '2d 10h 3m'
+# off: '2 days, 10 hours, 3 minutes'
+uptime_shorthand="on"
+
+
+# Memory
+
+
+# Show memory pecentage in output.
+#
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --memory_percent
+#
+# Example:
+# on: '1801MiB / 7881MiB (22%)'
+# off: '1801MiB / 7881MiB'
+memory_percent="on"
+
+# Change memory output unit.
+#
+# Default: 'mib'
+# Values: 'kib', 'mib', 'gib'
+# Flag: --memory_unit
+#
+# Example:
+# kib '1020928KiB / 7117824KiB'
+# mib '1042MiB / 6951MiB'
+# gib: ' 0.98GiB / 6.79GiB'
+memory_unit="gib"
+
+
+# Packages
+
+
+# Show/Hide Package Manager names.
+#
+# Default: 'tiny'
+# Values: 'on', 'tiny' 'off'
+# Flag: --package_managers
+#
+# Example:
+# on: '998 (pacman), 8 (flatpak), 4 (snap)'
+# tiny: '908 (pacman, flatpak, snap)'
+# off: '908'
+package_managers="on"
+
+
+# Shell
+
+
+# Show the path to $SHELL
+#
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --shell_path
+#
+# Example:
+# on: '/bin/bash'
+# off: 'bash'
+shell_path="off"
+
+# Show $SHELL version
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --shell_version
+#
+# Example:
+# on: 'bash 4.4.5'
+# off: 'bash'
+shell_version="on"
+
+
+# CPU
+
+
+# CPU speed type
+#
+# Default: 'bios_limit'
+# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'.
+# Flag: --speed_type
+# Supports: Linux with 'cpufreq'
+# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value.
+speed_type="bios_limit"
+
+# CPU speed shorthand
+#
+# Default: 'off'
+# Values: 'on', 'off'.
+# Flag: --speed_shorthand
+# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz
+#
+# Example:
+# on: 'i7-6500U (4) @ 3.1GHz'
+# off: 'i7-6500U (4) @ 3.100GHz'
+speed_shorthand="off"
+
+# Enable/Disable CPU brand in output.
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --cpu_brand
+#
+# Example:
+# on: 'Intel i7-6500U'
+# off: 'i7-6500U (4)'
+cpu_brand="on"
+
+# CPU Speed
+# Hide/Show CPU speed.
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --cpu_speed
+#
+# Example:
+# on: 'Intel i7-6500U (4) @ 3.1GHz'
+# off: 'Intel i7-6500U (4)'
+cpu_speed="on"
+
+# CPU Cores
+# Display CPU cores in output
+#
+# Default: 'logical'
+# Values: 'logical', 'physical', 'off'
+# Flag: --cpu_cores
+# Support: 'physical' doesn't work on BSD.
+#
+# Example:
+# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores)
+# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores)
+# off: 'Intel i7-6500U @ 3.1GHz'
+cpu_cores="logical"
+
+# CPU Temperature
+# Hide/Show CPU temperature.
+# Note the temperature is added to the regular CPU function.
+#
+# Default: 'off'
+# Values: 'C', 'F', 'off'
+# Flag: --cpu_temp
+# Supports: Linux, BSD
+# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable
+# coretemp kernel module. This only supports newer Intel processors.
+#
+# Example:
+# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]'
+# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]'
+# off: 'Intel i7-6500U (4) @ 3.1GHz'
+cpu_temp="off"
+
+
+# GPU
+
+
+# Enable/Disable GPU Brand
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --gpu_brand
+#
+# Example:
+# on: 'AMD HD 7950'
+# off: 'HD 7950'
+gpu_brand="on"
+
+# Which GPU to display
+#
+# Default: 'all'
+# Values: 'all', 'dedicated', 'integrated'
+# Flag: --gpu_type
+# Supports: Linux
+#
+# Example:
+# all:
+# GPU1: AMD HD 7950
+# GPU2: Intel Integrated Graphics
+#
+# dedicated:
+# GPU1: AMD HD 7950
+#
+# integrated:
+# GPU1: Intel Integrated Graphics
+gpu_type="all"
+
+
+# Resolution
+
+
+# Display refresh rate next to each monitor
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --refresh_rate
+# Supports: Doesn't work on Windows.
+#
+# Example:
+# on: '1920x1080 @ 60Hz'
+# off: '1920x1080'
+refresh_rate="off"
+
+
+# Gtk Theme / Icons / Font
+
+
+# Shorten output of GTK Theme / Icons / Font
+#
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --gtk_shorthand
+#
+# Example:
+# on: 'Numix, Adwaita'
+# off: 'Numix [GTK2], Adwaita [GTK3]'
+gtk_shorthand="off"
+
+
+# Enable/Disable gtk2 Theme / Icons / Font
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --gtk2
+#
+# Example:
+# on: 'Numix [GTK2], Adwaita [GTK3]'
+# off: 'Adwaita [GTK3]'
+gtk2="on"
+
+# Enable/Disable gtk3 Theme / Icons / Font
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --gtk3
+#
+# Example:
+# on: 'Numix [GTK2], Adwaita [GTK3]'
+# off: 'Numix [GTK2]'
+gtk3="on"
+
+
+# IP Address
+
+
+# Website to ping for the public IP
+#
+# Default: 'http://ident.me'
+# Values: 'url'
+# Flag: --ip_host
+public_ip_host="http://ident.me"
+
+# Public IP timeout.
+#
+# Default: '2'
+# Values: 'int'
+# Flag: --ip_timeout
+public_ip_timeout=2
+
+
+# Desktop Environment
+
+
+# Show Desktop Environment version
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --de_version
+de_version="on"
+
+
+# Disk
+
+
+# Which disks to display.
+# The values can be any /dev/sdXX, mount point or directory.
+# NOTE: By default we only show the disk info for '/'.
+#
+# Default: '/'
+# Values: '/', '/dev/sdXX', '/path/to/drive'.
+# Flag: --disk_show
+#
+# Example:
+# disk_show=('/' '/dev/sdb1'):
+# 'Disk (/): 74G / 118G (66%)'
+# 'Disk (/mnt/Videos): 823G / 893G (93%)'
+#
+# disk_show=('/'):
+# 'Disk (/): 74G / 118G (66%)'
+#
+disk_show=('/')
+
+# Disk subtitle.
+# What to append to the Disk subtitle.
+#
+# Default: 'mount'
+# Values: 'mount', 'name', 'dir', 'none'
+# Flag: --disk_subtitle
+#
+# Example:
+# name: 'Disk (/dev/sda1): 74G / 118G (66%)'
+# 'Disk (/dev/sdb2): 74G / 118G (66%)'
+#
+# mount: 'Disk (/): 74G / 118G (66%)'
+# 'Disk (/mnt/Local Disk): 74G / 118G (66%)'
+# 'Disk (/mnt/Videos): 74G / 118G (66%)'
+#
+# dir: 'Disk (/): 74G / 118G (66%)'
+# 'Disk (Local Disk): 74G / 118G (66%)'
+# 'Disk (Videos): 74G / 118G (66%)'
+#
+# none: 'Disk: 74G / 118G (66%)'
+# 'Disk: 74G / 118G (66%)'
+# 'Disk: 74G / 118G (66%)'
+disk_subtitle="mount"
+
+# Disk percent.
+# Show/Hide disk percent.
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --disk_percent
+#
+# Example:
+# on: 'Disk (/): 74G / 118G (66%)'
+# off: 'Disk (/): 74G / 118G'
+disk_percent="on"
+
+
+# Song
+
+
+# Manually specify a music player.
+#
+# Default: 'auto'
+# Values: 'auto', 'player-name'
+# Flag: --music_player
+#
+# Available values for 'player-name':
+#
+# amarok
+# audacious
+# banshee
+# bluemindo
+# clementine
+# cmus
+# deadbeef
+# deepin-music
+# dragon
+# elisa
+# exaile
+# gnome-music
+# gmusicbrowser
+# gogglesmm
+# guayadeque
+# io.elementary.music
+# iTunes
+# juk
+# lollypop
+# mocp
+# mopidy
+# mpd
+# muine
+# netease-cloud-music
+# olivia
+# playerctl
+# pogo
+# pragha
+# qmmp
+# quodlibet
+# rhythmbox
+# sayonara
+# smplayer
+# spotify
+# strawberry
+# tauonmb
+# tomahawk
+# vlc
+# xmms2d
+# xnoise
+# yarock
+music_player="auto"
+
+# Format to display song information.
+#
+# Default: '%artist% - %album% - %title%'
+# Values: '%artist%', '%album%', '%title%'
+# Flag: --song_format
+#
+# Example:
+# default: 'Song: Jet - Get Born - Sgt Major'
+song_format="%artist% - %album% - %title%"
+
+# Print the Artist, Album and Title on separate lines
+#
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --song_shorthand
+#
+# Example:
+# on: 'Artist: The Fratellis'
+# 'Album: Costello Music'
+# 'Song: Chelsea Dagger'
+#
+# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger'
+song_shorthand="off"
+
+# 'mpc' arguments (specify a host, password etc).
+#
+# Default: ''
+# Example: mpc_args=(-h HOST -P PASSWORD)
+mpc_args=()
+
+
+# Text Colors
+
+
+# Text Colors
+#
+# Default: 'distro'
+# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
+# Flag: --colors
+#
+# Each number represents a different part of the text in
+# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info'
+#
+# Example:
+# colors=(distro) - Text is colored based on Distro colors.
+# colors=(4 6 1 8 8 6) - Text is colored in the order above.
+colors=(distro)
+
+
+# Text Options
+
+
+# Toggle bold text
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --bold
+bold="on"
+
+# Enable/Disable Underline
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --underline
+underline_enabled="on"
+
+# Underline character
+#
+# Default: '-'
+# Values: 'string'
+# Flag: --underline_char
+underline_char="-"
+
+
+# Info Separator
+# Replace the default separator with the specified string.
+#
+# Default: ':'
+# Flag: --separator
+#
+# Example:
+# separator="->": 'Shell-> bash'
+# separator=" =": 'WM = dwm'
+separator=":"
+
+
+# Color Blocks
+
+
+# Color block range
+# The range of colors to print.
+#
+# Default: '0', '15'
+# Values: 'num'
+# Flag: --block_range
+#
+# Example:
+#
+# Display colors 0-7 in the blocks. (8 colors)
+# neofetch --block_range 0 7
+#
+# Display colors 0-15 in the blocks. (16 colors)
+# neofetch --block_range 0 15
+block_range=(0 15)
+
+# Toggle color blocks
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --color_blocks
+color_blocks="on"
+
+# Color block width in spaces
+#
+# Default: '3'
+# Values: 'num'
+# Flag: --block_width
+block_width=3
+
+# Color block height in lines
+#
+# Default: '1'
+# Values: 'num'
+# Flag: --block_height
+block_height=1
+
+# Color Alignment
+#
+# Default: 'auto'
+# Values: 'auto', 'num'
+# Flag: --col_offset
+#
+# Number specifies how far from the left side of the terminal (in spaces) to
+# begin printing the columns, in case you want to e.g. center them under your
+# text.
+# Example:
+# col_offset="auto" - Default behavior of neofetch
+# col_offset=7 - Leave 7 spaces then print the colors
+col_offset="auto"
+
+# Progress Bars
+
+
+# Bar characters
+#
+# Default: '-', '='
+# Values: 'string', 'string'
+# Flag: --bar_char
+#
+# Example:
+# neofetch --bar_char 'elapsed' 'total'
+# neofetch --bar_char '-' '='
+bar_char_elapsed="-"
+bar_char_total="="
+
+# Toggle Bar border
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --bar_border
+bar_border="on"
+
+# Progress bar length in spaces
+# Number of chars long to make the progress bars.
+#
+# Default: '15'
+# Values: 'num'
+# Flag: --bar_length
+bar_length=15
+
+# Progress bar colors
+# When set to distro, uses your distro's logo colors.
+#
+# Default: 'distro', 'distro'
+# Values: 'distro', 'num'
+# Flag: --bar_colors
+#
+# Example:
+# neofetch --bar_colors 3 4
+# neofetch --bar_colors distro 5
+bar_color_elapsed="distro"
+bar_color_total="distro"
+
+
+# Info display
+# Display a bar with the info.
+#
+# Default: 'off'
+# Values: 'bar', 'infobar', 'barinfo', 'off'
+# Flags: --cpu_display
+# --memory_display
+# --battery_display
+# --disk_display
+#
+# Example:
+# bar: '[---=======]'
+# infobar: 'info [---=======]'
+# barinfo: '[---=======] info'
+# off: 'info'
+cpu_display="off"
+memory_display="off"
+battery_display="off"
+disk_display="off"
+
+
+# Backend Settings
+
+
+# Image backend.
+#
+# Default: 'ascii'
+# Values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'off',
+# 'pot', 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty'
+# Flag: --backend
+image_backend="ascii"
+
+# Image Source
+#
+# Which image or ascii file to display.
+#
+# Default: 'auto'
+# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/'
+# 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")'
+# Flag: --source
+#
+# NOTE: 'auto' will pick the best image source for whatever image backend is used.
+# In ascii mode, distro ascii art will be used and in an image mode, your
+# wallpaper will be used.
+image_source="auto"
+
+
+# Ascii Options
+
+
+# Ascii distro
+# Which distro's ascii art to display.
+#
+# Default: 'auto'
+# Values: 'auto', 'distro_name'
+# Flag: --ascii_distro
+# NOTE: AIX, Alpine, Anarchy, Android, Antergos, antiX, "AOSC OS",
+# "AOSC OS/Retro", Apricity, ArcoLinux, ArchBox, ARCHlabs,
+# ArchStrike, XFerience, ArchMerge, Arch, Artix, Arya, Bedrock,
+# Bitrig, BlackArch, BLAG, BlankOn, BlueLight, bonsai, BSD,
+# BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS,
+# Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover,
+# Condres, Container_Linux, CRUX, Cucumber, Debian, Deepin,
+# DesaOS, Devuan, DracOS, DarkOs, DragonFly, Drauger, Elementary,
+# EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD,
+# FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, Pentoo,
+# gNewSense, GNOME, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra,
+# Hyperbola, janus, Kali, KaOS, KDE_neon, Kibojoe, Kogaion,
+# Korora, KSLinux, Kubuntu, LEDE, LFS, Linux_Lite,
+# LMDE, Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva,
+# Manjaro, Maui, Mer, Minix, LinuxMint, MX_Linux, Namib,
+# Neptune, NetBSD, Netrunner, Nitrux, NixOS, Nurunner,
+# NuTyX, OBRevenge, OpenBSD, openEuler, OpenIndiana, openmamba,
+# OpenMandriva, OpenStage, OpenWrt, osmc, Oracle, OS Elbrus, PacBSD,
+# Parabola, Pardus, Parrot, Parsix, TrueOS, PCLinuxOS, Peppermint,
+# popos, Porteus, PostMarketOS, Proxmox, Puppy, PureOS, Qubes, Radix,
+# Raspbian, Reborn_OS, Redstar, Redcore, Redhat, Refracted_Devuan,
+# Regata, Rosa, sabotage, Sabayon, Sailfish, SalentOS, Scientific,
+# Septor, SereneLinux, SharkLinux, Siduction, Slackware, SliTaz,
+# SmartOS, Solus, Source_Mage, Sparky, Star, SteamOS, SunOS,
+# openSUSE_Leap, openSUSE_Tumbleweed, openSUSE, SwagArch, Tails,
+# Trisquel, Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, Ubuntu-Studio,
+# Ubuntu, Venom, Void, Obarun, windows10, Windows7, Xubuntu, Zorin,
+# and IRIX have ascii logos
+# NOTE: Arch, Ubuntu, Redhat, and Dragonfly have 'old' logo variants.
+# Use '{distro name}_old' to use the old logos.
+# NOTE: Ubuntu has flavor variants.
+# Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME,
+# Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors.
+# NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu,
+# CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android,
+# Antrix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola,
+# Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS,
+# Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian,
+# postmarketOS, and Void have a smaller logo variant.
+# Use '{distro name}_small' to use the small variants.
+ascii_distro="auto"
+
+# Ascii Colors
+#
+# Default: 'distro'
+# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
+# Flag: --ascii_colors
+#
+# Example:
+# ascii_colors=(distro) - Ascii is colored based on Distro colors.
+# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors.
+ascii_colors=(120 228 210 210 175 140)
+
+
+# Bold ascii logo
+# Whether or not to bold the ascii logo.
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --ascii_bold
+ascii_bold="on"
+
+
+# Image Options
+
+
+# Image loop
+# Setting this to on will make neofetch redraw the image constantly until
+# Ctrl+C is pressed. This fixes display issues in some terminal emulators.
+#
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --loop
+image_loop="off"
+
+# Thumbnail directory
+#
+# Default: '~/.cache/thumbnails/neofetch'
+# Values: 'dir'
+thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch"
+
+# Crop mode
+#
+# Default: 'normal'
+# Values: 'normal', 'fit', 'fill'
+# Flag: --crop_mode
+#
+# See this wiki page to learn about the fit and fill options.
+# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F
+crop_mode="normal"
+
+# Crop offset
+# Note: Only affects 'normal' crop mode.
+#
+# Default: 'center'
+# Values: 'northwest', 'north', 'northeast', 'west', 'center'
+# 'east', 'southwest', 'south', 'southeast'
+# Flag: --crop_offset
+crop_offset="center"
+
+# Image size
+# The image is half the terminal width by default.
+#
+# Default: 'auto'
+# Values: 'auto', '00px', '00%', 'none'
+# Flags: --image_size
+# --size
+image_size="auto"
+
+# Gap between image and text
+#
+# Default: '3'
+# Values: 'num', '-num'
+# Flag: --gap
+gap=3
+
+# Image offsets
+# Only works with the w3m backend.
+#
+# Default: '0'
+# Values: 'px'
+# Flags: --xoffset
+# --yoffset
+yoffset=0
+xoffset=0
+
+# Image background color
+# Only works with the w3m backend.
+#
+# Default: ''
+# Values: 'color', 'blue'
+# Flag: --bg_color
+background_color=
+
+
+# Misc Options
+
+# Stdout mode
+# Turn off all colors and disables image backend (ASCII/Image).
+# Useful for piping into another command.
+# Default: 'off'
+# Values: 'on', 'off'
+stdout="off"
diff --git a/mac/.config/pam-gnupg b/mac/.config/pam-gnupg
new file mode 100644
index 0000000..a3150cf
--- /dev/null
+++ b/mac/.config/pam-gnupg
@@ -0,0 +1,2 @@
+FBAE9F51CA060B2A5E377DD75CD76D3C44BE0FD9
+CEA80B05ABA46C5DE584655EFD7D26E81A2DFF65
diff --git a/mac/.config/sketchybar/colors.sh b/mac/.config/sketchybar/colors.sh
new file mode 100644
index 0000000..cdbd908
--- /dev/null
+++ b/mac/.config/sketchybar/colors.sh
@@ -0,0 +1,104 @@
+#!/bin/bash
+
+### Sonokai
+# export BLACK=0xff181819 #181819
+# export WHITE=0xffe2e2e3 #e2e2e3
+# export RED=0xfffc5d7c #fc5d7c
+# export GREEN=0xff9ed072 #9ed072
+# export BLUE=0xff76cce0 #76cce0
+# export YELLOW=0xffe7c664 #e7c664
+# export ORANGE=0xfff39660 #f39660
+# export MAGENTA=0xffb39df3 #b39df3
+# export GREY=0xff7f8490 #7f8490
+# export BG0=0xff2c2e34 #2c2e34
+# export BG1=0xff363944 #363944
+# export BG2=0xff414550 #414550
+# export TRANSPARENT=0x00000000 #000000
+
+### Catppuccin
+export ROSEWATER=0xfff4dbd6 #f4dbd6
+export FLAMINGO=0xfff0c6c6 #f0c6c6
+export PINK=0XFff5bde6 #f5bde6
+export MAUVE=0Xffc6a0f6 #c6a0f6
+export RED=0XFFed8796 #ed8796
+export MAROON=0xffee99a0 #ee99a0
+export PEACH=0Xfff5a97f #f5a97f
+export YELLOW=0xffeed49f #eed49f
+export GREEN=0Xffa6da95 #a6da95
+export TEAL=0XFf8bd5ca #8bd5ca
+export SKY=0XFF91d7e3 #91d7e3
+export SAPPHIRE=0xff7dc4e4 #7dc4e4
+export BLUE=0XFf8aadf4 #8aadf4
+export LAVENDER=0xffb7bdf8 #b7bdf8
+export TEXT=0xffcad3f5 #cad3f5
+export SUBTEXT1=0xffb8c0e0 #b8c0e0
+export SUBTEXT0=0xffa5adcb #a5adcb
+export OVERLAY2=0xff939ab7 #939ab7
+export OVERLAY1=0xff8087a2 #8087a2
+export OVERLAY0=0xff6e738d #6e738d
+export SURFACE2=0xff5b6078 #5b6078
+export SURFACE1=0xff494d64 #494d64
+export SURFACE0=0xff363a4f #363a4f
+export BASE=0XFf24273a #24273a
+export MANTLE=0xff1e2030 #1e2030
+export CRUST=0Xff181926 #181926
+
+# Others
+export MAGENTA=0xffc6a0f6 #c6a0f6
+export ORANGE=0xfff5a97f #f5a97f
+export CYAN=0xff89DDFF #89DDFF
+export OSBLUE=0xff0259D1 #0259D1
+
+# Base Colors
+export BASE=0xff24273a #24273a
+export BASE_BLACK="181926" #181926
+export BASE_WHITE="eeeeee" #eeeeee
+export WHITE=0xffcad3f5 #cad3f5
+export LIGHT_GREY=0xffa6accd #a6accd
+export GREY=0xff939ab7 #939ab7
+export GREY_50=0x80676e95 #676e95
+export DARK_GREY=0xff292d3e #292d3e
+export BLACK=0xff181926 #181926
+export BG0=0xff1e1e2e #1e1e2e
+export BG1=0x603c3e4f #3c3e4f
+export BG2=0x60494d64 #494d64
+export TRANSPARENT=0x00000000 #000000
+
+O100=0xff # 100%
+O75=0xbf # 75%
+O50=0x80 # 50%
+O25=0x40 # 25%
+O10=0x1a # 10%
+
+export BLACK_75="$O75""$BASE_BLACK"
+export BLACK_50="$O50""$BASE_BLACK"
+export BLACK_25="$O25""$BASE_BLACK"
+export WHITE_75="$O75""$BASE_WHITE"
+export WHITE_50="$O50""$BASE_WHITE"
+export WHITE_25="$O25""$BASE_WHITE"
+export WHITE_10="$O10""$BASE_WHITE"
+
+# Text Colors
+export TEXT=0xffcad3f5 #cad3f5
+export SUBTEXT0=0xffb8c0e0 #b8c0e0
+export SUBTEXT1=0xffa5adcb #a5adcb
+export SURFACE0=0xff363a4f #363a4f
+export SURFACE1=0xff494d64 #494d64
+export SURFACE2=0xff5b6078 #5b6078
+export OVERLAY0=0xff6e738d #6e738d
+export OVERLAY1=0xff8087a2 #8087a2
+export OVERLAY2=0xff939ab7 #939ab7
+
+# General Bar Colors
+export BAR_COLOR=$BG0
+export BAR_BORDER_COLOR=$BG2
+export BACKGROUND_1=$BG1
+export BACKGROUND_2=$BG2
+export CONTRAST=0xff34324a #34324a
+export HIGHLIGHT=$TEAL
+export ICON_COLOR=$WHITE # Color of all icons
+export ICON_COLOR_INACTIVE=$GREY
+export LABEL_COLOR=$WHITE # Color of all labels
+export POPUP_BACKGROUND_COLOR=$BAR_COLOR
+export POPUP_BORDER_COLOR=$WHITE
+export SHADOW_COLOR=$BLACK
diff --git a/mac/.config/sketchybar/globalstyles.sh b/mac/.config/sketchybar/globalstyles.sh
new file mode 100644
index 0000000..71b94ac
--- /dev/null
+++ b/mac/.config/sketchybar/globalstyles.sh
@@ -0,0 +1,132 @@
+#!/bin/bash
+
+# Load defined icons
+source "$CONFIG_DIR/icons.sh"
+
+# Load defined colors
+source "$CONFIG_DIR/colors.sh"
+
+PADDINGS=8
+FONT="Hack Nerd Font"
+
+# Bar Appearance
+bar=(
+ color=$BAR_COLOR
+ sticky=on
+ height=28
+ padding_left=$PADDINGS
+ padding_right=$PADDINGS
+ corner_radius=0
+ blur_radius=0
+ border_width=2
+ border_color=$TRANSPARENT
+ background_color=$BAR_COLOR
+ shadow=off
+ position=bottom
+ padding_right=10
+ padding_left=10
+ # y_offset=-2
+ margin=-5
+ sticky=on
+ topmost=off # on/off/window
+)
+
+# Setting up default values
+defaults=(
+ updates=when_shown
+ icon.font="$FONT:Bold:10.0"
+ icon.color=$ICON_COLOR
+ icon.padding_left=$PADDINGS
+ icon.padding_right=$PADDINGS
+ label.font="$FONT:Semibold:13"
+ label.color=$LABEL_COLOR
+ label.padding_left=$PADDINGS
+ label.padding_right=$PADDINGS
+ padding_right=$PADDINGS
+ padding_left=$PADDINGS
+ background.color=$BAR_COLOR
+ background.height=24
+ background.corner_radius=3
+ background.border_width=1
+ popup.background.border_width=2
+ popup.background.corner_radius=9
+ popup.background.border_color=$POPUP_BORDER_COLOR
+ popup.background.color=$POPUP_BACKGROUND_COLOR
+ popup.blur_radius=20
+ popup.background.shadow.drawing=on
+ scroll_texts=on
+)
+
+bracket_defaults=(
+ background.height=24
+ background.color=$BAR_COLOR
+ blur_radius=32
+ background.corner_radius=$PADDINGS
+)
+
+icon_defaults=(
+ label.drawing=off
+)
+
+# Item Defaults
+item_defaults=(
+ background.color=$TRANSPARENT
+ background.padding_left=$(($PADDINGS / 2))
+ background.padding_right=$(($PADDINGS / 2))
+ icon.padding_left=2
+ icon.padding_right=$(($PADDINGS / 2))
+ icon.background.corner_radius=4
+ icon.background.height=24
+ icon.font="$FONT:Regular:12"
+ icon.color=$ICON_COLOR
+ icon.highlight_color=$HIGHLIGHT
+ label.font="$FONT:Regular:12"
+ label.color=$LABEL_COLOR
+ label.highlight_color=$HIGHLIGHT
+ label.padding_left=$(($PADDINGS / 2))
+ updates=when_shown
+ scroll_texts=on
+)
+
+menu_defaults=(
+ popup.background.border_color=$POPUP_BORDER_COLOR
+ popup.background.color=$POPUP_BACKGROUND_COLOR
+ popup.background.shadow.drawing=on
+ popup.blur_radius=32
+ popup.background.corner_radius=$PADDINGS
+ popup.background.shadow.drawing=on
+ popup.background.border_width=1
+)
+
+menu_item_defaults=(
+ label.font="$FONT:Regular:13"
+ padding_left=$PADDINGS
+ padding_right=$PADDINGS
+ icon.padding_left=0
+ icon.color=$HIGHLIGHT
+ background.color=$TRANSPARENT
+)
+
+notification_defaults=(
+ drawing=off
+ update_freq=120
+ updates=on
+ background.color=$WHITE_25
+ background.height=24
+ background.corner_radius=16
+ icon.font.size=10
+ icon.padding_left=$PADDINGS
+ icon.padding_right=0
+ icon.color=$BLACK_75
+ label.color=$BLACK_75
+ label.padding_right=$PADDINGS
+ label.font.size=11
+ label.font.style=Bold
+)
+
+separator=(
+ background.height=1
+ width=200
+ background.color=$WHITE_25
+ background.y_offset=-16
+)
diff --git a/mac/.config/sketchybar/helper/cpu.h b/mac/.config/sketchybar/helper/cpu.h
new file mode 100644
index 0000000..c350ae3
--- /dev/null
+++ b/mac/.config/sketchybar/helper/cpu.h
@@ -0,0 +1,122 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <mach/mach.h>
+#include <stdbool.h>
+#include <time.h>
+
+#define MAX_TOPPROC_LEN 28
+
+static const char TOPPROC[] = { "/bin/ps -Aceo pid,pcpu,comm -r" };
+static const char FILTER_PATTERN[] = { "com.apple." };
+
+struct cpu {
+ host_t host;
+ mach_msg_type_number_t count;
+ host_cpu_load_info_data_t load;
+ host_cpu_load_info_data_t prev_load;
+ bool has_prev_load;
+
+ char command[256];
+};
+
+static inline void cpu_init(struct cpu* cpu) {
+ cpu->host = mach_host_self();
+ cpu->count = HOST_CPU_LOAD_INFO_COUNT;
+ cpu->has_prev_load = false;
+ snprintf(cpu->command, 100, "");
+}
+
+static inline void cpu_update(struct cpu* cpu) {
+ kern_return_t error = host_statistics(cpu->host,
+ HOST_CPU_LOAD_INFO,
+ (host_info_t)&cpu->load,
+ &cpu->count );
+
+ if (error != KERN_SUCCESS) {
+ printf("Error: Could not read cpu host statistics.\n");
+ return;
+ }
+
+ if (cpu->has_prev_load) {
+ uint32_t delta_user = cpu->load.cpu_ticks[CPU_STATE_USER]
+ - cpu->prev_load.cpu_ticks[CPU_STATE_USER];
+
+ uint32_t delta_system = cpu->load.cpu_ticks[CPU_STATE_SYSTEM]
+ - cpu->prev_load.cpu_ticks[CPU_STATE_SYSTEM];
+
+ uint32_t delta_idle = cpu->load.cpu_ticks[CPU_STATE_IDLE]
+ - cpu->prev_load.cpu_ticks[CPU_STATE_IDLE];
+
+ double user_perc = (double)delta_user / (double)(delta_system
+ + delta_user
+ + delta_idle);
+
+ double sys_perc = (double)delta_system / (double)(delta_system
+ + delta_user
+ + delta_idle);
+
+ double total_perc = user_perc + sys_perc;
+
+ FILE* file;
+ char line[1024];
+
+ file = popen(TOPPROC, "r");
+ if (!file) {
+ printf("Error: TOPPROC command errored out...\n" );
+ return;
+ }
+
+ fgets(line, sizeof(line), file);
+ fgets(line, sizeof(line), file);
+
+ char* start = strstr(line, FILTER_PATTERN);
+ char topproc[MAX_TOPPROC_LEN + 4];
+ uint32_t caret = 0;
+ for (int i = 0; i < sizeof(line); i++) {
+ if (start && i == start - line) {
+ i+=9;
+ continue;
+ }
+
+ if (caret >= MAX_TOPPROC_LEN && caret <= MAX_TOPPROC_LEN + 2) {
+ topproc[caret++] = '.';
+ continue;
+ }
+ if (caret > MAX_TOPPROC_LEN + 2) break;
+ topproc[caret++] = line[i];
+ if (line[i] == '\0') break;
+ }
+
+ topproc[MAX_TOPPROC_LEN + 3] = '\0';
+
+ pclose(file);
+
+ char color[16];
+ if (total_perc >= .7) {
+ snprintf(color, 16, "%s", getenv("RED"));
+ } else if (total_perc >= .3) {
+ snprintf(color, 16, "%s", getenv("ORANGE"));
+ } else if (total_perc >= .1) {
+ snprintf(color, 16, "%s", getenv("YELLOW"));
+ } else {
+ snprintf(color, 16, "%s", getenv("LABEL_COLOR"));
+ }
+
+ snprintf(cpu->command, 256, "--push cpu.sys %.2f "
+ "--push cpu.user %.2f "
+ "--set cpu.top label='%s' "
+ "--set cpu.percent label=%.0f%% label.color=%s ",
+ sys_perc,
+ user_perc,
+ topproc,
+ total_perc*100.,
+ color );
+ }
+ else {
+ snprintf(cpu->command, 256, "");
+ }
+
+ cpu->prev_load = cpu->load;
+ cpu->has_prev_load = true;
+}
diff --git a/mac/.config/sketchybar/helper/helper b/mac/.config/sketchybar/helper/helper
new file mode 100644
index 0000000..050cca7
--- /dev/null
+++ b/mac/.config/sketchybar/helper/helper
Binary files differ
diff --git a/mac/.config/sketchybar/helper/helper.c b/mac/.config/sketchybar/helper/helper.c
new file mode 100644
index 0000000..71c3038
--- /dev/null
+++ b/mac/.config/sketchybar/helper/helper.c
@@ -0,0 +1,31 @@
+#include "cpu.h"
+#include "sketchybar.h"
+
+struct cpu g_cpu;
+
+void handler(env env) {
+ // Environment variables passed from sketchybar can be accessed as seen below
+ char* name = env_get_value_for_key(env, "NAME");
+ char* sender = env_get_value_for_key(env, "SENDER");
+ char* info = env_get_value_for_key(env, "INFO");
+ char* selected = env_get_value_for_key(env, "SELECTED");
+
+ if ((strcmp(name, "cpu.percent") == 0)) {
+ // CPU graph updates
+ cpu_update(&g_cpu);
+
+ if (strlen(g_cpu.command) > 0) sketchybar(g_cpu.command);
+ }
+}
+
+int main (int argc, char** argv) {
+ cpu_init(&g_cpu);
+
+ if (argc < 2) {
+ printf("Usage: helper \"<bootstrap name>\"\n");
+ exit(1);
+ }
+
+ event_server_begin(handler, argv[1]);
+ return 0;
+}
diff --git a/mac/.config/sketchybar/helper/makefile b/mac/.config/sketchybar/helper/makefile
new file mode 100644
index 0000000..ac8721a
--- /dev/null
+++ b/mac/.config/sketchybar/helper/makefile
@@ -0,0 +1,3 @@
+
+helper: helper.c cpu.h sketchybar.h
+ clang -std=c99 -O3 helper.c -o helper
diff --git a/mac/.config/sketchybar/helper/sketchybar.h b/mac/.config/sketchybar/helper/sketchybar.h
new file mode 100644
index 0000000..2ab4c39
--- /dev/null
+++ b/mac/.config/sketchybar/helper/sketchybar.h
@@ -0,0 +1,209 @@
+#pragma once
+
+#include <mach/mach.h>
+#include <mach/mach_port.h>
+#include <mach/message.h>
+#include <bootstrap.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <stdio.h>
+
+typedef char* env;
+
+#define MACH_HANDLER(name) void name(env env)
+typedef MACH_HANDLER(mach_handler);
+
+struct mach_message {
+ mach_msg_header_t header;
+ mach_msg_size_t msgh_descriptor_count;
+ mach_msg_ool_descriptor_t descriptor;
+};
+
+struct mach_buffer {
+ struct mach_message message;
+ mach_msg_trailer_t trailer;
+};
+
+struct mach_server {
+ bool is_running;
+ mach_port_name_t task;
+ mach_port_t port;
+ mach_port_t bs_port;
+
+ pthread_t thread;
+ mach_handler* handler;
+};
+
+static struct mach_server g_mach_server;
+static mach_port_t g_mach_port = 0;
+
+static inline char* env_get_value_for_key(env env, char* key) {
+ uint32_t caret = 0;
+ for(;;) {
+ if (!env[caret]) break;
+ if (strcmp(&env[caret], key) == 0)
+ return &env[caret + strlen(&env[caret]) + 1];
+
+ caret += strlen(&env[caret])
+ + strlen(&env[caret + strlen(&env[caret]) + 1])
+ + 2;
+ }
+ return (char*)"";
+}
+
+static inline mach_port_t mach_get_bs_port() {
+ mach_port_name_t task = mach_task_self();
+
+ mach_port_t bs_port;
+ if (task_get_special_port(task,
+ TASK_BOOTSTRAP_PORT,
+ &bs_port ) != KERN_SUCCESS) {
+ return 0;
+ }
+
+ mach_port_t port;
+ if (bootstrap_look_up(bs_port,
+ "git.felix.sketchybar",
+ &port ) != KERN_SUCCESS) {
+ return 0;
+ }
+
+ return port;
+}
+
+static inline void mach_receive_message(mach_port_t port, struct mach_buffer* buffer, bool timeout) {
+ *buffer = (struct mach_buffer) { 0 };
+ mach_msg_return_t msg_return;
+ if (timeout)
+ msg_return = mach_msg(&buffer->message.header,
+ MACH_RCV_MSG | MACH_RCV_TIMEOUT,
+ 0,
+ sizeof(struct mach_buffer),
+ port,
+ 100,
+ MACH_PORT_NULL );
+ else
+ msg_return = mach_msg(&buffer->message.header,
+ MACH_RCV_MSG,
+ 0,
+ sizeof(struct mach_buffer),
+ port,
+ MACH_MSG_TIMEOUT_NONE,
+ MACH_PORT_NULL );
+
+ if (msg_return != MACH_MSG_SUCCESS) {
+ buffer->message.descriptor.address = NULL;
+ }
+}
+
+static inline char* mach_send_message(mach_port_t port, char* message, uint32_t len) {
+ if (!message || !port) {
+ return NULL;
+ }
+
+ struct mach_message msg = { 0 };
+ msg.header.msgh_remote_port = port;
+ msg.header.msgh_local_port = 0;
+ msg.header.msgh_id = 0;
+ msg.header.msgh_bits = MACH_MSGH_BITS_SET(MACH_MSG_TYPE_COPY_SEND,
+ MACH_MSG_TYPE_MAKE_SEND,
+ 0,
+ MACH_MSGH_BITS_COMPLEX );
+
+ msg.header.msgh_size = sizeof(struct mach_message);
+ msg.msgh_descriptor_count = 1;
+ msg.descriptor.address = message;
+ msg.descriptor.size = len * sizeof(char);
+ msg.descriptor.copy = MACH_MSG_VIRTUAL_COPY;
+ msg.descriptor.deallocate = false;
+ msg.descriptor.type = MACH_MSG_OOL_DESCRIPTOR;
+
+ mach_msg(&msg.header,
+ MACH_SEND_MSG,
+ sizeof(struct mach_message),
+ 0,
+ MACH_PORT_NULL,
+ MACH_MSG_TIMEOUT_NONE,
+ MACH_PORT_NULL );
+
+ return NULL;
+}
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+static inline bool mach_server_begin(struct mach_server* mach_server, mach_handler handler, char* bootstrap_name) {
+ mach_server->task = mach_task_self();
+
+ if (mach_port_allocate(mach_server->task,
+ MACH_PORT_RIGHT_RECEIVE,
+ &mach_server->port ) != KERN_SUCCESS) {
+ return false;
+ }
+
+ if (mach_port_insert_right(mach_server->task,
+ mach_server->port,
+ mach_server->port,
+ MACH_MSG_TYPE_MAKE_SEND) != KERN_SUCCESS) {
+ return false;
+ }
+
+ if (task_get_special_port(mach_server->task,
+ TASK_BOOTSTRAP_PORT,
+ &mach_server->bs_port) != KERN_SUCCESS) {
+ return false;
+ }
+
+ if (bootstrap_register(mach_server->bs_port,
+ bootstrap_name,
+ mach_server->port ) != KERN_SUCCESS) {
+ return false;
+ }
+
+ mach_server->handler = handler;
+ mach_server->is_running = true;
+ struct mach_buffer buffer;
+ while (mach_server->is_running) {
+ mach_receive_message(mach_server->port, &buffer, false);
+ mach_server->handler((env)buffer.message.descriptor.address);
+ mach_msg_destroy(&buffer.message.header);
+ }
+
+ return true;
+}
+#pragma clang diagnostic pop
+
+static inline char* sketchybar(char* message) {
+ uint32_t message_length = strlen(message) + 1;
+ char formatted_message[message_length + 1];
+
+ char quote = '\0';
+ uint32_t caret = 0;
+ for (int i = 0; i < message_length; ++i) {
+ if (message[i] == '"' || message[i] == '\'') {
+ if (quote == message[i]) quote = '\0';
+ else quote = message[i];
+ continue;
+ }
+ formatted_message[caret] = message[i];
+ if (message[i] == ' ' && !quote) formatted_message[caret] = '\0';
+ caret++;
+ }
+
+ if (caret > 0 && formatted_message[caret] == '\0'
+ && formatted_message[caret - 1] == '\0') {
+ caret--;
+ }
+
+ formatted_message[caret] = '\0';
+ if (!g_mach_port) g_mach_port = mach_get_bs_port();
+ char* response = mach_send_message(g_mach_port,
+ formatted_message,
+ caret + 1 );
+
+ if (response) return response;
+ else return (char*)"";
+}
+
+static inline void event_server_begin(mach_handler event_handler, char* bootstrap_name) {
+ mach_server_begin(&g_mach_server, event_handler, bootstrap_name);
+}
diff --git a/mac/.config/sketchybar/icons.sh b/mac/.config/sketchybar/icons.sh
new file mode 100644
index 0000000..2321507
--- /dev/null
+++ b/mac/.config/sketchybar/icons.sh
@@ -0,0 +1,70 @@
+#!/bin/bash
+
+# General Icons
+LOADING=􀖇
+APPLE=􀣺
+PREFERENCES=􀺽
+ACTIVITY=􀒓
+LOCK=􀒳
+BELL=􀋚
+BELL_DOT=􀝗
+
+# Git Icons
+GIT_ISSUE=􀍷
+GIT_DISCUSSION=􀒤
+GIT_PULL_REQUEST=􀙡
+GIT_COMMIT=􀡚
+GIT_INDICATOR=􀂓
+
+# Music
+MUSIC=􀑪
+
+# Spotify Icons
+SPOTIFY_BACK=􀊎
+SPOTIFY_PLAY_PAUSE=􀊈
+SPOTIFY_NEXT=􀊐
+SPOTIFY_SHUFFLE=􀊝
+SPOTIFY_REPEAT=􀊞
+
+# Yabai Icons
+YABAI_STACK=􀏭
+YABAI_FULLSCREEN_ZOOM=􀂓
+YABAI_PARENT_ZOOM=􀥃
+YABAI_FLOAT=􀢌
+YABAI_GRID=􀧍
+YABAI_SPLIT_VERTICAL=􀘜
+YABAI_SPLIT_HORIZONTAL=􀧋
+
+# Battery Icons
+BATTERY=
+BATTERY_100=􀛨
+BATTERY_75=􀺸
+BATTERY_50=􀺶
+BATTERY_25=􀛩
+BATTERY_0=􀛪
+BATTERY_CHARGING=􀢋
+
+CPU=
+DISK=󱛟
+MEMORY=﬙
+NETWORK=󰩠
+NETWORK_UP=󰍠
+NETWORK_DOWN=󰍝
+
+# Volume Icons
+VOLUME_100=􀊩
+VOLUME_66=􀊧
+VOLUME_33=􀊥
+VOLUME_10=􀊡
+VOLUME_0=􀊣
+
+# WiFi
+WIFI_CONNECTED=􀙇
+WIFI_DISCONNECTED=􀙈
+
+# svim
+MODE_NORMAL=􀂯
+MODE_INSERT=􀂥
+MODE_VISUAL=􀂿
+MODE_CMD=􀂙
+MODE_PENDING=􀈏
diff --git a/mac/.config/sketchybar/items/apple.sh b/mac/.config/sketchybar/items/apple.sh
new file mode 100644
index 0000000..5f4e9dc
--- /dev/null
+++ b/mac/.config/sketchybar/items/apple.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+
+POPUP_OFF='sketchybar --set apple.logo popup.drawing=off'
+POPUP_CLICK_SCRIPT='sketchybar --set $NAME popup.drawing=toggle'
+
+apple_logo=(
+ icon=$APPLE
+ icon.font="$FONT:Black:16.0"
+ icon.color=$BLUE
+ padding_right=-2
+ label.drawing=off
+ click_script="$POPUP_CLICK_SCRIPT"
+ popup.height=35
+)
+
+apple_prefs=(
+ icon=$PREFERENCES
+ label="Preferences"
+ click_script="open -a 'System Preferences'; $POPUP_OFF"
+)
+
+apple_activity=(
+ icon=$ACTIVITY
+ label="Activity"
+ click_script="open -a 'Activity Monitor'; $POPUP_OFF"
+)
+
+apple_lock=(
+ icon=$LOCK
+ label="Lock Screen"
+ click_script="pmset displaysleepnow; $POPUP_OFF"
+)
+
+sketchybar --add item apple.logo left \
+ --set apple.logo "${apple_logo[@]}" \
+ \
+ --add item apple.prefs popup.apple.logo \
+ --set apple.prefs "${apple_prefs[@]}" \
+ \
+ --add item apple.activity popup.apple.logo \
+ --set apple.activity "${apple_activity[@]}" \
+ \
+ --add item apple.lock popup.apple.logo \
+ --set apple.lock "${apple_lock[@]}"
diff --git a/mac/.config/sketchybar/items/battery.sh b/mac/.config/sketchybar/items/battery.sh
new file mode 100644
index 0000000..758547b
--- /dev/null
+++ b/mac/.config/sketchybar/items/battery.sh
@@ -0,0 +1,23 @@
+#!/bin/env/bash
+
+battery=(
+ "${menu_defaults[@]}"
+ icon.font.size=16
+ icon.font.style="Light"
+ label.drawing=off
+ update_freq=60
+ popup.align=right
+ click_script="sketchybar --set battery popup.drawing=toggle"
+ script="$PLUGIN_DIR/battery.sh"
+ updates=when_shown
+)
+
+sketchybar \
+ --add item battery right \
+ --set battery "${battery[@]}" \
+ --subscribe battery power_source_change \
+ mouse.entered \
+ mouse.exited \
+ mouse.exited.global \
+ --add item battery.details popup.battery \
+ --set battery.details "${menu_item_defaults[@]}" icon.drawing=off label.padding_left=0
diff --git a/mac/.config/sketchybar/items/brew.sh b/mac/.config/sketchybar/items/brew.sh
new file mode 100644
index 0000000..4e58efd
--- /dev/null
+++ b/mac/.config/sketchybar/items/brew.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+# Trigger the brew_udpate event when brew update or upgrade is run from cmdline
+# e.g. via function in .zshrc or fish function
+
+POPUP_CLICK_SCRIPT="sketchybar --set $NAME popup.drawing=toggle"
+
+brew=(
+ script="$PLUGIN_DIR/brew.sh"
+ click_script="$POPUP_CLICK_SCRIPT"
+ icon=􀐛
+ label=?
+ update_freq=30
+ popup.align=right
+ popup.height=20
+ icon.padding_right=-1
+ padding_left=0
+ padding_right=-1
+ y_offset=1
+)
+
+brew_details=(
+ background.corner_radius=12
+ background.padding_left=5
+ background.padding_right=10
+ click_script="sketchybar --set brew popup.drawing=off"
+)
+
+sketchybar --add event brew_update \
+ --add item brew right \
+ --set brew "${brew[@]}" \
+ \
+ --subscribe brew brew_update \
+ mouse.entered \
+ mouse.exited \
+ mouse.exited.global \
+ \
+ --add item brew.details popup.brew \
+ --set brew.details "${brew_details[@]}"
diff --git a/mac/.config/sketchybar/items/cpu.sh b/mac/.config/sketchybar/items/cpu.sh
new file mode 100644
index 0000000..2a61f2f
--- /dev/null
+++ b/mac/.config/sketchybar/items/cpu.sh
@@ -0,0 +1,74 @@
+#!/bin/bash
+
+# cpu_top=(
+# label.font="$FONT:Semibold:7"
+# label=CPU
+# icon.drawing=off
+# width=0
+# padding_right=10
+# y_offset=6
+# )
+#
+# cpu_percent=(
+# label.font="$FONT:Heavy:12"
+# label=CPU
+# y_offset=-4
+# padding_right=10
+# width=55
+# icon.drawing=off
+# update_freq=4
+# mach_helper="$HELPER"
+# )
+#
+# cpu_sys=(
+# width=0
+# graph.color=$RED
+# graph.fill_color=$RED
+# label.drawing=off
+# icon.drawing=off
+# background.height=30
+# background.drawing=on
+# background.color=$TRANSPARENT
+# y_offset=3
+# )
+#
+# cpu_user=(
+# graph.color=$BLUE
+# label.drawing=off
+# icon.drawing=off
+# background.height=30
+# background.drawing=on
+# background.color=$TRANSPARENT
+# background.padding_left=10
+# y_offset=3
+# )
+#
+# sketchybar --add item cpu.top right \
+# --set cpu.top "${cpu_top[@]}" \
+# \
+# --add item cpu.percent right \
+# --set cpu.percent "${cpu_percent[@]}" \
+# \
+# --add graph cpu.sys right 75 \
+# --set cpu.sys "${cpu_sys[@]}" \
+# \
+# --add graph cpu.user right 75 \
+# --set cpu.user "${cpu_user[@]}"
+
+source "$HOME/.config/sketchybar/colors.sh"
+
+cpu_percent=(
+ label.font="$FONT:Heavy:12"
+ label=CPU%
+ label.color="$TEXT"
+ icon="$CPU"
+ icon.font.size=16
+ icon.color="$BLUE"
+ icon.padding_right=-2
+ padding_right=-2
+ update_freq=2
+ mach_helper="$HELPER"
+)
+
+sketchybar --add item cpu.percent right \
+ --set cpu.percent "${cpu_percent[@]}"
diff --git a/mac/.config/sketchybar/items/datetime.sh b/mac/.config/sketchybar/items/datetime.sh
new file mode 100644
index 0000000..4160a37
--- /dev/null
+++ b/mac/.config/sketchybar/items/datetime.sh
@@ -0,0 +1,37 @@
+#!/bin/env/bash
+
+sketchybar \
+ --add item date right \
+ --set date update_freq=60 \
+ label.font="$FONT:Semibold:10" \
+ align=right \
+ icon.drawing=off \
+ label.padding_right=4 \
+ \
+ width=0 \
+ script='sketchybar --set $NAME label="$(date "+%a, %b %d")"' \
+ click_script="open -a Calendar.app" \
+ --subscribe date system_woke \
+ mouse.entered \
+ mouse.exited \
+ mouse.exited.global \
+ --add item date.details popup.date \
+ --set date.details "${menu_item_defaults[@]}" \
+ --add item clock right \
+ --set clock update_freq=10 \
+ \
+ icon.drawing=off \
+ label.font="$FONT:Bold:11" \
+ align=right \
+ label.padding_right=4 \
+ popup.align=right \
+ "${menu_defaults[@]}" \
+ script="$PLUGIN_DIR/nextevent.sh" \
+ click_script="sketchybar --set clock popup.drawing=toggle; open -a Calendar.app" \
+ --subscribe clock system_woke \
+ mouse.entered \
+ mouse.exited \
+ mouse.exited.global \
+ --add item clock.details popup.clock \
+ --set clock.details "${menu_item_defaults[@]}" icon.drawing=off label.padding_left=0 # y_offset=3 \
+# y_offset=-6 \
diff --git a/mac/.config/sketchybar/items/disk.sh b/mac/.config/sketchybar/items/disk.sh
new file mode 100644
index 0000000..399427f
--- /dev/null
+++ b/mac/.config/sketchybar/items/disk.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+source "$CONFIG_DIR/colors.sh" # Loads all defined colors
+source "$CONFIG_DIR/icons.sh" # Loads all defined icons
+
+disk=(
+ label.font="$FONT:Heavy:12"
+ label.color="$TEXT"
+ icon="$DISK"
+ icon.font="$FONT:Bold:18.0"
+ icon.padding_right=-2
+ icon.color="$MAROON"
+ update_freq=60
+ script="$PLUGIN_DIR/disk.sh"
+)
+
+sketchybar --add item disk right \
+ --set disk "${disk[@]}"
diff --git a/mac/.config/sketchybar/items/dnd.sh b/mac/.config/sketchybar/items/dnd.sh
new file mode 100644
index 0000000..84eaf8c
--- /dev/null
+++ b/mac/.config/sketchybar/items/dnd.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+sketchybar \
+ --add item dnd right \
+ --set dnd script="$PLUGIN_DIR/dnd.sh" \
+ label.drawing=off \
+ --add event focus_on "_NSDoNotDisturbEnabledNotification" \
+ --add event focus_off "_NSDoNotDisturbDisabledNotification" \
+ --subscribe dnd focus_on focus_off mouse.clicked
diff --git a/mac/.config/sketchybar/items/front_app.sh b/mac/.config/sketchybar/items/front_app.sh
new file mode 100644
index 0000000..5839243
--- /dev/null
+++ b/mac/.config/sketchybar/items/front_app.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+front_app=(
+ label.font="$FONT:Black:12.0"
+ icon.background.drawing=on
+ display=active
+ script="$PLUGIN_DIR/front_app.sh"
+ click_script="open -a 'Mission Control'"
+)
+
+sketchybar --add item front_app left \
+ --set front_app "${front_app[@]}" \
+ --subscribe front_app front_app_switched
diff --git a/mac/.config/sketchybar/items/github.sh b/mac/.config/sketchybar/items/github.sh
new file mode 100644
index 0000000..1a27fd5
--- /dev/null
+++ b/mac/.config/sketchybar/items/github.sh
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+POPUP_CLICK_SCRIPT="sketchybar --set \$NAME popup.drawing=toggle"
+
+github_bell=(
+ padding_right=-5
+ update_freq=180
+ icon=$BELL
+ icon.font="$FONT:Bold:15.0"
+ icon.color=$BLUE
+ label=$LOADING
+ label.highlight_color=$BLUE
+ popup.align=right
+ script="$PLUGIN_DIR/github.sh"
+ click_script="$POPUP_CLICK_SCRIPT"
+)
+
+github_template=(
+ drawing=off
+ background.corner_radius=12
+ padding_left=7
+ padding_right=7
+ icon.background.height=2
+ icon.background.y_offset=-12
+)
+
+sketchybar --add event github.update \
+ --add item github.bell right \
+ --set github.bell "${github_bell[@]}" \
+ --subscribe github.bell mouse.entered \
+ mouse.exited \
+ mouse.exited.global \
+ system_woke \
+ github.update \
+ \
+ --add item github.template popup.github.bell \
+ --set github.template "${github_template[@]}"
diff --git a/mac/.config/sketchybar/items/kakaotalk.sh b/mac/.config/sketchybar/items/kakaotalk.sh
new file mode 100644
index 0000000..e5c5cf5
--- /dev/null
+++ b/mac/.config/sketchybar/items/kakaotalk.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+kakaotalk=(
+ "${notification_defaults[@]}"
+ icon=󰅺
+ icon.font.size=13
+ background.color=$YELLOW
+ script="$PLUGIN_DIR/kakaotalk.sh"
+ click_script="open -a /System/Applications/KakaoTalk.app"
+ icon.padding_left=7
+ icon.padding_right=2
+ label.padding_right=7
+ background.padding_right=5
+ background.height=20
+)
+
+sketchybar --add item kakaotalk right \
+ --set kakaotalk "${kakaotalk[@]}"
diff --git a/mac/.config/sketchybar/items/keyboard.sh b/mac/.config/sketchybar/items/keyboard.sh
new file mode 100644
index 0000000..bffaf52
--- /dev/null
+++ b/mac/.config/sketchybar/items/keyboard.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+keyboard=(
+ padding_right=4
+ icon.drawing=off
+ script="$PLUGIN_DIR/keyboard.sh"
+ icon.color=$GREY
+ icon.font="$FONT:Regular:14.0"
+)
+
+sketchybar --add item keyboard right \
+ --set keyboard "${keyboard[@]}" \
+ --add event keyboard_change "AppleSelectedInputSourcesChangedNotification" \
+ --subscribe keyboard keyboard_change
diff --git a/mac/.config/sketchybar/items/mail.sh b/mac/.config/sketchybar/items/mail.sh
new file mode 100644
index 0000000..590d52b
--- /dev/null
+++ b/mac/.config/sketchybar/items/mail.sh
@@ -0,0 +1,19 @@
+#!/bin/env/bash
+
+# Load global styles, colors and icons
+source "$CONFIG_DIR/globalstyles.sh"
+
+mail=(
+ "${notification_defaults[@]}"
+ icon=􀍕
+ icon.y_offset=1
+ background.color=$YELLOW
+ background.height=18
+ icon.padding_left=6
+ label.padding_right=6
+ script="$PLUGIN_DIR/mail.sh"
+ click_script="open -a /System/Applications/Mail.app"
+)
+
+sketchybar --add item mail right \
+ --set mail "${mail[@]}"
diff --git a/mac/.config/sketchybar/items/memory.sh b/mac/.config/sketchybar/items/memory.sh
new file mode 100644
index 0000000..5ff38ca
--- /dev/null
+++ b/mac/.config/sketchybar/items/memory.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+source "$CONFIG_DIR/colors.sh" # Loads all defined colors
+source "$CONFIG_DIR/icons.sh" # Loads all defined icons
+
+memory=(
+ label.font="$FONT:Heavy:12"
+ label.color="$TEXT"
+ icon="$MEMORY"
+ icon.font="$FONT:Bold:16.0"
+ icon.font.size=20
+ icon.color="$GREEN"
+ update_freq=15
+ script="$PLUGIN_DIR/memory.sh"
+ icon.padding_right=-2
+ padding_right=-2
+)
+
+sketchybar --add item memory right \
+ --set memory "${memory[@]}"
diff --git a/mac/.config/sketchybar/items/messages.sh b/mac/.config/sketchybar/items/messages.sh
new file mode 100644
index 0000000..9ad9513
--- /dev/null
+++ b/mac/.config/sketchybar/items/messages.sh
@@ -0,0 +1,13 @@
+# Load global styles, colors and icons
+source "$CONFIG_DIR/globalstyles.sh"
+
+messages=(
+ "${notification_defaults[@]}"
+ icon=􀌤
+ background.color=$GREEN
+ script="$PLUGIN_DIR/messages.sh"
+ click_script="open -a /System/Applications/Messages.app"
+)
+
+sketchybar --add item messages right \
+ --set messages "${messages[@]}" \ No newline at end of file
diff --git a/mac/.config/sketchybar/items/mic.sh b/mac/.config/sketchybar/items/mic.sh
new file mode 100644
index 0000000..666af0e
--- /dev/null
+++ b/mac/.config/sketchybar/items/mic.sh
@@ -0,0 +1,5 @@
+sketchybar -m --add item mic right \
+ --set mic update_freq=3 \
+ --set mic script="$PLUGIN_DIR/mic.sh" \
+ --set mic click_script="$PLUGIN_DIR/mic_click.sh" \
+ padding_right=-8
diff --git a/mac/.config/sketchybar/items/music.sh b/mac/.config/sketchybar/items/music.sh
new file mode 100644
index 0000000..3730d88
--- /dev/null
+++ b/mac/.config/sketchybar/items/music.sh
@@ -0,0 +1,36 @@
+#!/bin/env/bash
+
+# Load global styles, colors and icons
+source "$CONFIG_DIR/globalstyles.sh"
+
+music=(
+ "${bracket_defaults[@]}"
+ script="$PLUGIN_DIR/music.sh"
+ popup.align=center
+ padding_left=0
+ label.padding_right=$PADDINGS
+ padding_right=$(($PADDINGS * 2))
+ icon=􀊆
+ drawing=off
+ label="Loading…"
+ background.image=media.artwork
+ background.image.scale=0.75
+ background.image.corner_radius=$PADDINGS
+ icon.padding_left=48
+ label.max_chars=33
+ updates=on
+ --subscribe music media_change
+ --subscribe music mouse.entered
+ mouse.clicked
+ mouse.exited
+ mouse.exited.global
+)
+
+sketchybar \
+ --add item music center \
+ --set music "${music[@]}" \
+ --set music "${menu_defaults[@]}" \
+ --add item music.cover popup.music \
+ --add item music.artist popup.music \
+ --add item music.title popup.music \
+ --add item music.album popup.music
diff --git a/mac/.config/sketchybar/items/network.sh b/mac/.config/sketchybar/items/network.sh
new file mode 100644
index 0000000..93bf083
--- /dev/null
+++ b/mac/.config/sketchybar/items/network.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+source "$CONFIG_DIR/globalstyles.sh"
+
+network_down=(
+ y_offset=-9
+ label.font="$FONT:Heavy:10"
+ label.color="$TEXT"
+ icon="$NETWORK_DOWN"
+ icon.font="$NERD_FONT:Bold:16.0"
+ icon.font.size=15
+ icon.color="$GREEN"
+ icon.highlight_color="$BLUE"
+ icon.padding_right=2
+ padding_right=-2
+ update_freq=1
+ icon.y_offset=1
+)
+
+network_up=(
+ background.padding_right=-65
+ y_offset=5
+ label.font="$FONT:Heavy:10"
+ label.color="$TEXT"
+ label.padding_right=5
+ icon="$NETWORK_UP"
+ icon.font="$NERD_FONT:Bold:16.0"
+ icon.font.size=15
+ icon.color="$GREEN"
+ icon.highlight_color="$BLUE"
+ icon.padding_right=2
+ icon.y_offset=1
+ update_freq=1
+ script="$PLUGIN_DIR/network.sh"
+)
+
+sketchybar --add item network.down right \
+ --set network.down "${network_down[@]}" \
+ --add item network.up right \
+ --set network.up "${network_up[@]}"
diff --git a/mac/.config/sketchybar/items/package_monitor.sh b/mac/.config/sketchybar/items/package_monitor.sh
new file mode 100644
index 0000000..89be3a2
--- /dev/null
+++ b/mac/.config/sketchybar/items/package_monitor.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+# Trigger the package_monitor_udpate event when package_monitor update or upgrade is run from cmdline
+# e.g. via function in .zshrc
+
+package_monitor=(
+ icon=􀐛
+ icon.font.size=12
+ icon.padding_right=-1
+ label=?
+ script="$PLUGIN_DIR/package_monitor.sh"
+ padding_left=-2
+)
+
+sketchybar --add event package_monitor_update \
+ --add item package_monitor right \
+ --set package_monitor "${package_monitor[@]}" \
+ --subscribe package_monitor package_monitor_update \
+ mouse.clicked
diff --git a/mac/.config/sketchybar/items/separator_right.sh b/mac/.config/sketchybar/items/separator_right.sh
new file mode 100644
index 0000000..13a6b7f
--- /dev/null
+++ b/mac/.config/sketchybar/items/separator_right.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+
+separator_right=(
+ icon=󰅁
+ icon.font="$FONT:Regular:25.0"
+ label.drawing=off
+ click_script='sketchybar --trigger toggle_stats'
+ icon.color="$TEXT"
+ padding_right=10
+)
+
+sketchybar --add item separator_right right \
+ --set separator_right "${separator_right[@]}"
diff --git a/mac/.config/sketchybar/items/spaces.sh b/mac/.config/sketchybar/items/spaces.sh
new file mode 100644
index 0000000..5dc28d0
--- /dev/null
+++ b/mac/.config/sketchybar/items/spaces.sh
@@ -0,0 +1,56 @@
+#!/bin/bash
+
+source "$CONFIG_DIR/globalstyles.sh"
+
+SPACE_ICONS=("1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12")
+
+# Destroy space on right click, focus space on left click.
+# New space by left clicking separator (>)
+
+sid=0
+spaces=()
+for i in "${!SPACE_ICONS[@]}"; do
+ sid=$(($i + 1))
+
+ space=(
+ space=$sid
+ icon="${SPACE_ICONS[i]}"
+ icon.padding_left=2
+ icon.padding_right=-5
+ label.padding_right=10
+ label.font="sketchybar-app-font:Regular:16.0"
+ label.y_offset=-1
+ background.height=2
+ script="$PLUGIN_DIR/space.sh"
+ )
+
+ sketchybar --add space space.$sid left \
+ --set space.$sid "${space[@]}" \
+ --subscribe space.$sid mouse.clicked
+done
+
+spaces=(
+ background.color=$BACKGROUND_1
+ background.border_color=$BACKGROUND_2
+ background.border_width=2
+ background.drawing=on
+)
+
+space_creator=(
+ icon=󰅂
+ icon.font="$FONT:Heavy:25.0"
+ padding_left=2
+ padding_right=5
+ label.drawing=off
+ display=active
+ script="$PLUGIN_DIR/space_windows.sh"
+ associated_display=active
+ click_script='yabai -m space --create && sketchybar --trigger space_change'
+ icon.color=$WHITE
+)
+
+sketchybar --add bracket spaces '/space\..*/' \
+ --set spaces "${spaces[@]}" \
+ --add item space_creator left \
+ --set space_creator "${space_creator[@]}" \
+ --subscribe space_creator space_windows_change
diff --git a/mac/.config/sketchybar/items/spotify.sh b/mac/.config/sketchybar/items/spotify.sh
new file mode 100644
index 0000000..421e299
--- /dev/null
+++ b/mac/.config/sketchybar/items/spotify.sh
@@ -0,0 +1,201 @@
+#!/bin/bash
+
+SPOTIFY_EVENT="com.spotify.client.PlaybackStateChanged"
+POPUP_SCRIPT="sketchybar -m --set spotify.anchor popup.drawing=toggle"
+
+spotify_anchor=(
+ script="$PLUGIN_DIR/spotify.sh"
+ click_script="$POPUP_SCRIPT"
+ popup.horizontal=on
+ popup.align=center
+ popup.height=150
+ icon=􁁒
+ icon.font="$FONT:Regular:25.0"
+ label.drawing=off
+ drawing=off
+)
+
+spotify_cover=(
+ script="$PLUGIN_DIR/spotify.sh"
+ click_script="open -a 'Spotify'; $POPUP_SCRIPT"
+ label.drawing=off
+ icon.drawing=off
+ padding_left=12
+ padding_right=10
+ background.image.scale=0.2
+ background.image.drawing=on
+ background.drawing=on
+ background.image.corner_radius=9
+ shadow=on
+)
+
+spotify_title=(
+ icon.drawing=off
+ padding_left=0
+ padding_right=0
+ width=0
+ label.font="$FONT:Heavy:15.0"
+ label.max_chars=20
+ y_offset=55
+)
+
+spotify_artist=(
+ icon.drawing=off
+ y_offset=30
+ padding_left=0
+ padding_right=0
+ width=0
+ label.max_chars=20
+)
+
+spotify_album=(
+ icon.drawing=off
+ padding_left=0
+ padding_right=0
+ y_offset=15
+ width=0
+ label.max_chars=25
+)
+
+spotify_state=(
+ icon.drawing=on
+ icon.font="$FONT:Light Italic:10.0"
+ icon.width=35
+ icon="00:00"
+ label.drawing=on
+ label.font="$FONT:Light Italic:10.0"
+ label.width=35
+ label="00:00"
+ padding_left=0
+ padding_right=0
+ y_offset=-15
+ width=0
+ slider.background.height=6
+ slider.background.corner_radius=1
+ slider.background.color=$GREY
+ slider.highlight_color=$GREEN
+ slider.percentage=40
+ slider.width=115
+ script="$PLUGIN_DIR/spotify.sh"
+ update_freq=1
+ updates=when_shown
+)
+
+spotify_shuffle=(
+ icon=􀊝
+ icon.padding_left=5
+ icon.padding_right=5
+ icon.color=$BLACK
+ icon.highlight_color=$GREY
+ label.drawing=off
+ script="$PLUGIN_DIR/spotify.sh"
+ y_offset=-45
+)
+
+spotify_back=(
+ icon=􀊎
+ icon.padding_left=5
+ icon.padding_right=5
+ icon.color=$BLACK
+ script="$PLUGIN_DIR/spotify.sh"
+ label.drawing=off
+ y_offset=-45
+)
+
+spotify_play=(
+ icon=􀊔
+ background.height=40
+ background.corner_radius=20
+ width=40
+ align=center
+ background.color=$POPUP_BACKGROUND_COLOR
+ background.border_color=$WHITE
+ background.border_width=0
+ background.drawing=on
+ icon.padding_left=4
+ icon.padding_right=5
+ updates=on
+ label.drawing=off
+ script="$PLUGIN_DIR/spotify.sh"
+ y_offset=-45
+)
+
+spotify_next=(
+ icon=􀊐
+ icon.padding_left=5
+ icon.padding_right=5
+ icon.color=$BLACK
+ label.drawing=off
+ script="$PLUGIN_DIR/spotify.sh"
+ y_offset=-45
+)
+
+spotify_repeat=(
+ icon=􀊞
+ icon.highlight_color=$GREY
+ icon.padding_left=5
+ icon.padding_right=10
+ icon.color=$BLACK
+ label.drawing=off
+ script="$PLUGIN_DIR/spotify.sh"
+ y_offset=-45
+)
+
+spotify_controls=(
+ background.color=$GREEN
+ background.corner_radius=11
+ background.drawing=on
+ y_offset=-45
+)
+
+sketchybar --add event spotify_change $SPOTIFY_EVENT \
+ --add item spotify.anchor center \
+ --set spotify.anchor "${spotify_anchor[@]}" \
+ --subscribe spotify.anchor mouse.entered mouse.exited \
+ mouse.exited.global \
+ \
+ --add item spotify.cover popup.spotify.anchor \
+ --set spotify.cover "${spotify_cover[@]}" \
+ \
+ --add item spotify.title popup.spotify.anchor \
+ --set spotify.title "${spotify_title[@]}" \
+ \
+ --add item spotify.artist popup.spotify.anchor \
+ --set spotify.artist "${spotify_artist[@]}" \
+ \
+ --add item spotify.album popup.spotify.anchor \
+ --set spotify.album "${spotify_album[@]}" \
+ \
+ --add slider spotify.state popup.spotify.anchor \
+ --set spotify.state "${spotify_state[@]}" \
+ --subscribe spotify.state mouse.clicked \
+ \
+ --add item spotify.shuffle popup.spotify.anchor \
+ --set spotify.shuffle "${spotify_shuffle[@]}" \
+ --subscribe spotify.shuffle mouse.clicked \
+ \
+ --add item spotify.back popup.spotify.anchor \
+ --set spotify.back "${spotify_back[@]}" \
+ --subscribe spotify.back mouse.clicked \
+ \
+ --add item spotify.play popup.spotify.anchor \
+ --set spotify.play "${spotify_play[@]}" \
+ --subscribe spotify.play mouse.clicked spotify_change \
+ \
+ --add item spotify.next popup.spotify.anchor \
+ --set spotify.next "${spotify_next[@]}" \
+ --subscribe spotify.next mouse.clicked \
+ \
+ --add item spotify.repeat popup.spotify.anchor \
+ --set spotify.repeat "${spotify_repeat[@]}" \
+ --subscribe spotify.repeat mouse.clicked \
+ \
+ --add item spotify.spacer popup.spotify.anchor \
+ --set spotify.spacer width=5 \
+ \
+ --add bracket spotify.controls spotify.shuffle \
+ spotify.back \
+ spotify.play \
+ spotify.next \
+ spotify.repeat \
+ --set spotify.controls "${spotify_controls[@]}"
diff --git a/mac/.config/sketchybar/items/svim.sh b/mac/.config/sketchybar/items/svim.sh
new file mode 100644
index 0000000..502343d
--- /dev/null
+++ b/mac/.config/sketchybar/items/svim.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+svim=(
+ script="$PLUGIN_DIR/svim.sh"
+ icon=$INSERT_MODE
+ icon.font.size=20
+ updates=on
+ drawing=off
+)
+
+sketchybar --add event svim_update \
+ --add item svim right \
+ --set svim "${svim[@]}" \
+ --subscribe svim svim_update
diff --git a/mac/.config/sketchybar/items/system.sh b/mac/.config/sketchybar/items/system.sh
new file mode 100644
index 0000000..dc74f73
--- /dev/null
+++ b/mac/.config/sketchybar/items/system.sh
@@ -0,0 +1,53 @@
+### mem Widget ###
+sketchybar --add item mem right \
+ --set mem update_freq=10 \
+ icon="asdf" \
+ icon.font="Font Awesome 6 Free:Solid:15.4" \
+ icon.padding_right=4 \
+ icon.color=0xfff5c1e6 \
+ icon.y_offset=-3 \
+ label.y_offset=-3 \
+ label.font="$FONT:Medium:19.0" \
+ label.color=0xff47455c \
+ label.padding_right=8 \
+ background.drawing=on \
+ background.color=0xfff4f5f8 \
+ script="$PLUGIN_DIR/mem.sh"
+
+# ### cpu Widget ###
+# sketchybar --add item cpu right \
+# --set cpu update_freq=10 \
+# icon.font="Font Awesome 6 Free:Solid:15.4" \
+# icon.padding_right=4 \
+# icon.color=0xffedd6a4 \
+# icon.y_offset=-3 \
+# label.y_offset=-3 \
+# label.font="$FONT:Medium:19.0" \
+# label.color=0xff47455c \
+# label.padding_right=8 \
+# background.drawing=on \
+# background.color=0xfff4f5f8 \
+# script="$PLUGIN_DIR/cpu.sh" \
+
+### ssd Widget ###
+sketchybar --add item disk right \
+ --set disk update_freq=10 \
+ icon="asdf" \
+ icon.font="Font Awesome 6 Free:Solid:15.4" \
+ icon.padding_right=4 \
+ icon.color=0xfff37ea0 \
+ icon.y_offset=-3 \
+ label.y_offset=-3 \
+ label.font="$FONT:Medium:19.0" \
+ label.color=0xff47455c \
+ label.padding_right=8 \
+ background.drawing=on \
+ background.color=0xfff4f5f8 \
+ script="$PLUGIN_DIR/disk.sh"
+
+# sketchybar --add item collapse right \
+# --set collapse icon="" \
+# icon.font="Font Awesome 6 Free:Solid:20.0" \
+# icon.color=0xff47455c \
+# icon.y_offset=-3 \
+# click_script="$PLUGIN_DIR/collapse.sh"
diff --git a/mac/.config/sketchybar/items/thunderbird.sh b/mac/.config/sketchybar/items/thunderbird.sh
new file mode 100644
index 0000000..234b038
--- /dev/null
+++ b/mac/.config/sketchybar/items/thunderbird.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+thunderbird=(
+ "${notification_defaults[@]}"
+ icon=
+ icon.font.size=17
+ icon.color=$OSBLUE
+ icon.y_offset=0
+ background.color=$WHITE
+ script="$PLUGIN_DIR/thunderbird.sh"
+ click_script="open -a /System/Applications/Thunderbird.app"
+ icon.padding_left=7
+ icon.padding_right=-1
+ label.padding_right=7
+ background.padding_right=5
+ background.height=20
+)
+
+sketchybar --add item thunderbird right \
+ --set thunderbird "${thunderbird[@]}"
diff --git a/mac/.config/sketchybar/items/toggle_stats.sh b/mac/.config/sketchybar/items/toggle_stats.sh
new file mode 100644
index 0000000..301e0e4
--- /dev/null
+++ b/mac/.config/sketchybar/items/toggle_stats.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+sketchybar --add event hide_stats \
+ --add event show_stats \
+ --add event toggle_stats \
+ \
+ --add item animator right \
+ --set animator drawing=off \
+ updates=on \
+ script="$PLUGIN_DIR/toggle_stats.sh" \
+ --subscribe animator hide_stats show_stats toggle_stats
diff --git a/mac/.config/sketchybar/items/volume.sh b/mac/.config/sketchybar/items/volume.sh
new file mode 100644
index 0000000..a8efdd5
--- /dev/null
+++ b/mac/.config/sketchybar/items/volume.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+volume_slider=(
+ script="$PLUGIN_DIR/volume.sh"
+ updates=on
+ label.drawing=off
+ icon.drawing=off
+ slider.highlight_color=$BLUE
+ slider.background.height=5
+ slider.background.corner_radius=3
+ slider.background.color=$BACKGROUND_2
+ slider.knob=􀀁
+ slider.knob.drawing=on
+ padding_left=-5
+ padding_right=-1
+)
+
+volume_icon=(
+ click_script="$PLUGIN_DIR/volume_click.sh"
+ icon=$VOLUME_100
+ icon.width=0
+ icon.align=left
+ icon.font="$FONT:Regular:14.0"
+ label.width=25
+ label.align=left
+ label.font="$FONT:Regular:14.0"
+)
+
+sketchybar --add slider volume right \
+ --set volume "${volume_slider[@]}" \
+ --subscribe volume volume_change \
+ mouse.clicked \
+ \
+ --add item volume_icon right \
+ --set volume_icon "${volume_icon[@]}"
diff --git a/mac/.config/sketchybar/items/weather.sh b/mac/.config/sketchybar/items/weather.sh
new file mode 100644
index 0000000..287354d
--- /dev/null
+++ b/mac/.config/sketchybar/items/weather.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+# Load global styles, colors and icons
+source "$CONFIG_DIR/globalstyles.sh"
+
+weather=(
+ script="$PLUGIN_DIR/weather.sh"
+ "${menu_defaults[@]}"
+ popup.align=right
+ update_freq=300
+ updates=on
+ click_script="sketchybar --set $NAME popup.drawing=toggle; open -a /System/Applications/Weather.app"
+ --subscribe weather wifi_change
+ mouse.entered
+ mouse.exited
+ mouse.exited.global
+)
+
+sketchybar \
+ --add item weather right \
+ --set weather "${weather[@]}" \
+ --add item weather.details popup.weather \
+ --set weather.details "${menu_item_defaults[@]}" icon.drawing=off
diff --git a/mac/.config/sketchybar/items/wifi.sh b/mac/.config/sketchybar/items/wifi.sh
new file mode 100644
index 0000000..a903c23
--- /dev/null
+++ b/mac/.config/sketchybar/items/wifi.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+POPUP_OFF="sketchybar --set wifi popup.drawing=off"
+
+wifi=(
+ "${menu_defaults[@]}"
+ icon="$WIFI_DISCONNECTED"
+ script="$PLUGIN_DIR/wifi.sh"
+ label.drawing=off
+ click_script="$POPUP_CLICK_SCRIPT"
+ popup.align=right
+ updates=when_shown
+ update_freq=5
+ --subscribe wifi wifi_change
+ mouse.entered
+ mouse.exited
+ mouse.exited.global
+ icon.padding_left=-3
+)
+
+sketchybar \
+ --add item wifi right \
+ --set wifi "${wifi[@]}" \
+ --add item wifi.ssid popup.wifi \
+ --set wifi.ssid icon=􀅴 \
+ label="SSID" \
+ "${menu_item_defaults[@]}" \
+ click_script="open 'x-apple.systempreferences:com.apple.preference.network?Wi-Fi';$POPUP_OFF" \
+ --add item wifi.strength popup.wifi \
+ --set wifi.strength icon=􀋨 \
+ label="Speed" \
+ "${menu_item_defaults[@]}" \
+ click_script="open 'x-apple.systempreferences:com.apple.preference.network?Wi-Fi';$POPUP_OFF" \
+ --add item wifi.ipaddress popup.wifi \
+ --set wifi.ipaddress icon=􀆪 \
+ label="IP Address" \
+ "${menu_item_defaults[@]}" \
+ click_script="echo \"$IP_ADDRESS\"|pbcopy;$POPUP_OFF" \
+ --subscribe wifi wifi_change mouse.clicked
diff --git a/mac/.config/sketchybar/items/yabai.sh b/mac/.config/sketchybar/items/yabai.sh
new file mode 100644
index 0000000..c123a8b
--- /dev/null
+++ b/mac/.config/sketchybar/items/yabai.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+yabai=(
+ icon=$YABAI_GRID
+ label.drawing=off
+ script="$PLUGIN_DIR/yabai.sh"
+ icon.font="$FONT:Bold:14.0"
+ icon.color="$FLAMINGO"
+ padding_left=-2
+ padding_right=0
+)
+
+sketchybar --add event window_focus \
+ --add event windows_on_spaces \
+ --add item yabai left \
+ --set yabai "${yabai[@]}" \
+ --subscribe yabai window_focus \
+ space_change \
+ windows_on_spaces \
+ mouse.scrolled.global \
+ mouse.clicked
diff --git a/mac/.config/sketchybar/plugins/battery.sh b/mac/.config/sketchybar/plugins/battery.sh
new file mode 100644
index 0000000..60a8dc4
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/battery.sh
@@ -0,0 +1,85 @@
+#!/bin/bash
+
+source "$CONFIG_DIR/colors.sh"
+
+render_item() {
+
+ PERCENTAGE=$(pmset -g batt | grep -Eo "\d+%" | cut -d% -f1)
+ CHARGING=$(pmset -g batt | grep 'AC Power')
+ CHARGING_STATUS="Not charging"
+
+ if [ $PERCENTAGE = "" ]; then
+ exit 0
+ fi
+
+ COLOR=$LABEL_COLOR
+ ICON="󰁹"
+
+ case ${PERCENTAGE} in
+ 9[0-9])
+ ICON="󰂂"
+ ;;
+ 8[0-9])
+ ICON="󰂁"
+ ;;
+ 7[0-9])
+ ICON="󰂀"
+ ;;
+ 6[0-9])
+ ICON="󰁿"
+ ;;
+ 5[0-9])
+ ICON="󰁾"
+ ;;
+ 4[0-9])
+ ICON="󰁽"
+ ;;
+ 3[0-9])
+ ICON="󰁼"
+ ;;
+ 2[0-9])
+ ICON="󰁻"
+ ;;
+ 1[0-9])
+ ICON="󰁺"
+ ;;
+ *)
+ ICON="󰂎"
+ COLOR=$RED
+ ;;
+ esac
+
+ if [[ $CHARGING != "" ]]; then
+ ICON="󰂄"
+ CHARGING_STATUS="Charging"
+ COLOR=$LABEL_COLOR
+ fi
+
+ sketchybar --set battery icon=$ICON
+
+}
+
+render_popup() {
+ sketchybar --set battery.details label="$PERCENTAGE% (${CHARGING_STATUS})"
+}
+
+update() {
+ render_item
+ render_popup
+}
+
+popup() {
+ sketchybar --set "$NAME" popup.drawing="$1"
+}
+
+case "$SENDER" in
+"routine" | "forced" | "power_source_change")
+ update
+ ;;
+"mouse.entered")
+ popup on
+ ;;
+"mouse.exited" | "mouse.exited.global")
+ popup off
+ ;;
+esac
diff --git a/mac/.config/sketchybar/plugins/brew.sh b/mac/.config/sketchybar/plugins/brew.sh
new file mode 100644
index 0000000..308fd78
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/brew.sh
@@ -0,0 +1,104 @@
+#!/bin/bash
+
+source "$CONFIG_DIR/globalstyles.sh"
+
+PREV_COUNT=$(sketchybar --query brew | jq -r .popup.items | grep ".package*" -c)
+
+render_bar_item() {
+ case "$COUNT" in
+ [3-5][0-9])
+ COLOR=$MAROON
+ ;;
+ [1-2][0-9])
+ COLOR=$PEACH
+ ;;
+ [1-9])
+ COLOR=$YELLOW
+ ;;
+ 0)
+ COLOR=$GREEN
+ COUNT=􀆅
+ ;;
+ esac
+
+ sketchybar --set "$NAME" label="$COUNT" label.color="$COLOR" icon.color="$COLOR"
+}
+
+add_outdated_header() {
+ brew_header=(
+ label="$(echo -e 'Outdated Brews')"
+ label.font="$FONT:Bold:14.0"
+ label.align=left
+ icon.drawing=off
+ click_script="sketchybar --set $NAME popup.drawing=off"
+ )
+
+ sketchybar --set brew.details "${brew_header[@]}"
+
+}
+
+render_popup() {
+ add_outdated_header
+
+ COUNTER=0
+ sketchybar --remove '/brew.package\.*/'
+
+ if [[ -n "$OUTDATED" ]]; then
+ while IFS= read -r package; do
+
+ brew_package=(
+ label="$package"
+ label.align=right
+ label.padding_left=20
+ icon.drawing=off
+ click_script="sketchybar --set $NAME popup.drawing=off"
+
+ )
+ item=brew.package."$COUNTER"
+
+ sketchybar --add item "$item" popup."$NAME" \
+ --set "$item" "${brew_package[@]}"
+
+ COUNTER=$((COUNTER + 1))
+
+ done <<<"$(echo -n "$OUTDATED" | grep '^')"
+ fi
+}
+
+update() {
+ brew update
+ COLOR=$RED
+ OUTDATED=$(brew outdated)
+ COUNT=$(echo -n "$OUTDATED" | grep -c '^')
+
+ render_bar_item
+ render_popup
+
+ if [ "$COUNT" -ne "$PREV_COUNT" ] 2>/dev/null || [ "$SENDER" = "forced" ]; then
+ sketchybar --animate tanh 15 --set "$NAME"
+ fi
+}
+
+popup() {
+ if [[ "$PREV_COUNT" -gt 0 ]]; then
+ sketchybar --set "$NAME" popup.drawing="$1"
+ else
+ sketchybar --set "$NAME" popup.drawing=off
+ fi
+
+}
+
+case "$SENDER" in
+"routine" | "forced")
+ update
+ ;;
+"mouse.entered")
+ popup on
+ ;;
+"mouse.exited" | "mouse.exited.global")
+ popup off
+ ;;
+"mouse.clicked")
+ popup toggle
+ ;;
+esac
diff --git a/mac/.config/sketchybar/plugins/disk.sh b/mac/.config/sketchybar/plugins/disk.sh
new file mode 100644
index 0000000..f2adc30
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/disk.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+source "$CONFIG_DIR/globalstyles.sh"
+
+COUNT="$(df -H | grep -E '^(/dev/disk3s5)' | awk '{ printf ("%s\n", $5) }' | sed 's/%//')"
+
+COLOR=$RED
+
+case "$COUNT" in
+[7-8][0-9]) # 70-89%
+ COLOR=$PEACH
+ ;;
+[5-6][0-9]) # 50-69%
+ COLOR=$YELLOW
+ ;;
+[3-4][0-9]) # 20-49%
+ COLOR=$GREEN
+ ;;
+[1-2][0-9]) # 10-19%
+ COLOR=$LAVENDER
+ ;;
+[0-9]) # 0-9%
+ COLOR=$WHITE
+ ;;
+esac
+
+sketchybar -m --set "$NAME" \
+ label="$COUNT%" \
+ icon.color=$COLOR
diff --git a/mac/.config/sketchybar/plugins/dnd.sh b/mac/.config/sketchybar/plugins/dnd.sh
new file mode 100644
index 0000000..42c7ba6
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/dnd.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+# Load global styles, colors and icons
+source "$CONFIG_DIR/globalstyles.sh"
+
+update() {
+ dnd_enabled=$(cat ~/Library/DoNotDisturb/DB/Assertions.json | jq .data[0].storeAssertionRecords)
+ # alternate method: defaults read com.apple.controlcenter "NSStatusItem Visible FocusModes"
+ ICON=􀆺
+
+ if [ "$dnd_enabled" = "null" ]; then
+ COLOR=$WHITE_25
+ # echo $NAME: "Disabled"
+ else
+ COLOR=$WHITE
+ # echo $NAME: "Enabled"
+ fi
+
+ sketchybar --set $NAME icon=$ICON icon.color=$COLOR
+}
+
+toggle() {
+ osascript -e 'tell application "System Events" to keystroke "\\" using {control down, shift down, command down, option down}'
+}
+
+case "$SENDER" in
+"routine" | "forced" | "focus_on" | "focus_off")
+ update
+ ;;
+"mouse.clicked")
+ toggle
+ ;;
+esac
diff --git a/mac/.config/sketchybar/plugins/dndindicator.sh b/mac/.config/sketchybar/plugins/dndindicator.sh
new file mode 100644
index 0000000..0dd05e8
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/dndindicator.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+
+# Thanks to reddit:rudypaul
+# BIN_DIR="/usr/bin"
+
+# PLUTIL="${BIN_DIR}/plutil"
+# XPATH="${BIN_DIR}/xpath"
+# BASE64="${BIN_DIR}/base64"
+
+dnd_enabled=$(
+defaults read com.apple.controlcenter "NSStatusItem Visible FocusModes"
+# dnd_enabled=$(
+# "${PLUTIL}" -extract dnd_prefs xml1 -o - ~/Library/Preferences/com.apple.ncprefs.plist |
+# "${XPATH}" -q -e 'string(//data)' |
+# "${BASE64}" -D |
+# "${PLUTIL}" -convert xml1 - -o - |
+# "${XPATH}" -q -e 'boolean(//key[text()="userPref"]/following-sibling::dict/key[text()="enabled"])'
+)
+
+if [ $dnd_enabled -eq 1 ]; then
+ sketchybar --set $NAME drawing=on icon=􀆺
+else
+ sketchybar --set $NAME drawing=off icon=
+fi \ No newline at end of file
diff --git a/mac/.config/sketchybar/plugins/front_app.sh b/mac/.config/sketchybar/plugins/front_app.sh
new file mode 100644
index 0000000..066efb0
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/front_app.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+if [ "$SENDER" = "front_app_switched" ]; then
+ # Set the app name and app icon and then animate a bounce for the icon size
+ sketchybar --set $NAME label="$INFO" icon.background.image="app.$INFO" \
+ --animate tanh 10 --set $NAME icon.background.image.scale=0.8 \
+ icon.background.image.scale=0.55
+fi
diff --git a/mac/.config/sketchybar/plugins/github.sh b/mac/.config/sketchybar/plugins/github.sh
new file mode 100644
index 0000000..bf09991
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/github.sh
@@ -0,0 +1,108 @@
+#!/bin/bash
+
+update() {
+ source "$CONFIG_DIR/colors.sh"
+ source "$CONFIG_DIR/icons.sh"
+
+ NOTIFICATIONS="$(gh api notifications)"
+ COUNT="$(echo "$NOTIFICATIONS" | jq 'length')"
+ args=()
+ if [ "$NOTIFICATIONS" = "[]" ]; then
+ args+=(--set $NAME icon=$BELL label="0")
+ else
+ args+=(--set $NAME icon=$BELL_DOT label="$COUNT")
+ fi
+
+ PREV_COUNT=$(sketchybar --query github.bell | jq -r .label.value)
+ # For sound to play around with:
+ # afplay /System/Library/Sounds/Morse.aiff
+
+ args+=(--remove '/github.notification\.*/')
+
+ COUNTER=0
+ COLOR=$BLUE
+ args+=(--set github.bell icon.color=$COLOR)
+
+ while read -r repo url type title; do
+ COUNTER=$((COUNTER + 1))
+ IMPORTANT="$(echo "$title" | egrep -i "(deprecat|break|broke)")"
+ COLOR=$BLUE
+ PADDING=0
+
+ if [ "${repo}" = "" ] && [ "${title}" = "" ]; then
+ repo="Note"
+ title="No new notifications"
+ fi
+ case "${type}" in
+ "'Issue'")
+ COLOR=$GREEN
+ ICON=$GIT_ISSUE
+ URL="$(gh api "$(echo "${url}" | sed -e "s/^'//" -e "s/'$//")" | jq .html_url)"
+ ;;
+ "'Discussion'")
+ COLOR=$WHITE
+ ICON=$GIT_DISCUSSION
+ URL="https://www.github.com/notifications"
+ ;;
+ "'PullRequest'")
+ COLOR=$MAGENTA
+ ICON=$GIT_PULL_REQUEST
+ URL="$(gh api "$(echo "${url}" | sed -e "s/^'//" -e "s/'$//")" | jq .html_url)"
+ ;;
+ "'Commit'")
+ COLOR=$WHITE
+ ICON=$GIT_COMMIT
+ URL="$(gh api "$(echo "${url}" | sed -e "s/^'//" -e "s/'$//")" | jq .html_url)"
+ ;;
+ esac
+
+ if [ "$IMPORTANT" != "" ]; then
+ COLOR=$RED
+ ICON=􀁞
+ args+=(--set github.bell icon.color=$COLOR)
+ fi
+
+ notification=(
+ label="$(echo "$title" | sed -e "s/^'//" -e "s/'$//")"
+ icon="$ICON $(echo "$repo" | sed -e "s/^'//" -e "s/'$//"):"
+ icon.padding_left="$PADDING"
+ label.padding_right="$PADDING"
+ icon.color=$COLOR
+ position=popup.github.bell
+ icon.background.color=$COLOR
+ drawing=on
+ click_script="open \"$URL\"; sketchybar --set github.bell popup.drawing=off; sleep 5; sketchybar --trigger github.update"
+ )
+
+ args+=(--clone github.notification.$COUNTER github.template
+ --set github.notification.$COUNTER "${notification[@]}")
+ done <<<"$(echo "$NOTIFICATIONS" | jq -r '.[] | [.repository.name, .subject.latest_comment_url, .subject.type, .subject.title] | @sh')"
+
+ sketchybar -m "${args[@]}" >/dev/null
+
+ if [ $COUNT -gt $PREV_COUNT ] 2>/dev/null || [ "$SENDER" = "forced" ]; then
+ sketchybar --animate tanh 15 --set github.bell label.y_offset=5 label.y_offset=0
+ fi
+}
+
+popup() {
+ sketchybar --set $NAME popup.drawing=$1
+}
+
+case "$SENDER" in
+"routine" | "forced" | "github.update")
+ update
+ ;;
+"system_woke")
+ sleep 10 && update # Wait for network to connect
+ ;;
+"mouse.entered")
+ popup on
+ ;;
+"mouse.exited" | "mouse.exited.global")
+ popup off
+ ;;
+"mouse.clicked")
+ popup toggle
+ ;;
+esac
diff --git a/mac/.config/sketchybar/plugins/icon_map.sh b/mac/.config/sketchybar/plugins/icon_map.sh
new file mode 100644
index 0000000..1b2f82a
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/icon_map.sh
@@ -0,0 +1,486 @@
+#!/bin/bash
+
+function icon_map() {
+ case "$1" in
+ "Typora")
+ icon_result=":text:"
+ ;;
+ "Orion" | "Orion RC")
+ icon_result=":orion:"
+ ;;
+ "Grammarly Editor")
+ icon_result=":grammarly:"
+ ;;
+ "kitty")
+ icon_result=":kitty:"
+ ;;
+ "ClickUp")
+ icon_result=":click_up:"
+ ;;
+ "Iris")
+ icon_result=":iris:"
+ ;;
+ "PomoDone App")
+ icon_result=":pomodone:"
+ ;;
+ "qutebrowser")
+ icon_result=":qute_browser:"
+ ;;
+ "Raindrop.io")
+ icon_result=":raindrop_io:"
+ ;;
+ "Airmail")
+ icon_result=":airmail:"
+ ;;
+ "Affinity Publisher 2")
+ icon_result=":affinity_publisher_2:"
+ ;;
+ "Calendar" | "日历" | "Fantastical" | "Cron" | "Amie")
+ icon_result=":calendar:"
+ ;;
+ "Figma")
+ icon_result=":figma:"
+ ;;
+ "Element")
+ icon_result=":element:"
+ ;;
+ "Signal")
+ icon_result=":signal:"
+ ;;
+ "Mattermost")
+ icon_result=":mattermost:"
+ ;;
+ "Caprine")
+ icon_result=":caprine:"
+ ;;
+ "Microsoft To Do" | "Things")
+ icon_result=":things:"
+ ;;
+ "Godot")
+ icon_result=":godot:"
+ ;;
+ "Android Messages")
+ icon_result=":android_messages:"
+ ;;
+ "Zed")
+ icon_result=":zed:"
+ ;;
+ "Anytype")
+ icon_result=":anytype:"
+ ;;
+ "TeamSpeak 3")
+ icon_result=":team_speak:"
+ ;;
+ "LibreWolf")
+ icon_result=":libre_wolf:"
+ ;;
+ "Neovide" | "neovide")
+ icon_result=":neovide:"
+ ;;
+ "Spotlight")
+ icon_result=":spotlight:"
+ ;;
+ "微信")
+ icon_result=":wechat:"
+ ;;
+ "Dropbox")
+ icon_result=":dropbox:"
+ ;;
+ "Transmit")
+ icon_result=":transmit:"
+ ;;
+ "TickTick")
+ icon_result=":tick_tick:"
+ ;;
+ "Parallels Desktop")
+ icon_result=":parallels:"
+ ;;
+ "Audacity")
+ icon_result=":audacity:"
+ ;;
+ "Rider" | "JetBrains Rider")
+ icon_result=":rider:"
+ ;;
+ "DEVONthink 3")
+ icon_result=":devonthink3:"
+ ;;
+ "Docker" | "Docker Desktop")
+ icon_result=":docker:"
+ ;;
+ "Matlab")
+ icon_result=":matlab:"
+ ;;
+ "VLC")
+ icon_result=":vlc:"
+ ;;
+ "Alacritty")
+ icon_result=":alacritty:"
+ ;;
+ "Pages" | "Pages 文稿")
+ icon_result=":pages:"
+ ;;
+ "Bear")
+ icon_result=":bear:"
+ ;;
+ "Pine")
+ icon_result=":pine:"
+ ;;
+ "Affinity Designer 2")
+ icon_result=":affinity_designer_2:"
+ ;;
+ "Keyboard Maestro")
+ icon_result=":keyboard_maestro:"
+ ;;
+ "Joplin")
+ icon_result=":joplin:"
+ ;;
+ "mpv")
+ icon_result=":mpv:"
+ ;;
+ "zoom.us")
+ icon_result=":zoom:"
+ ;;
+ "Affinity Photo 2")
+ icon_result=":affinity_photo_2:"
+ ;;
+ "Music" | "音乐")
+ icon_result=":music:"
+ ;;
+ "League of Legends")
+ icon_result=":league_of_legends:"
+ ;;
+ "Tor Browser")
+ icon_result=":tor_browser:"
+ ;;
+ "Hyper")
+ icon_result=":hyper:"
+ ;;
+ "‎WhatsApp")
+ icon_result=":whats_app:"
+ ;;
+ "카카오톡")
+ icon_result=":kakaotalk:"
+ ;;
+ "Discord" | "Discord Canary" | "Discord PTB")
+ icon_result=":discord:"
+ ;;
+ "Neovide" | "MacVim" | "Vim" | "VimR")
+ icon_result=":vim:"
+ ;;
+ "Keynote" | "Keynote 讲演")
+ icon_result=":keynote:"
+ ;;
+ "iTerm")
+ icon_result=":iterm:"
+ ;;
+ "IntelliJ IDEA")
+ icon_result=":idea:"
+ ;;
+ "Finder" | "访达")
+ icon_result=":finder:"
+ ;;
+ "Xcode")
+ icon_result=":xcode:"
+ ;;
+ "GoLand")
+ icon_result=":goland:"
+ ;;
+ "Android Studio")
+ icon_result=":android_studio:"
+ ;;
+ "MoneyMoney")
+ icon_result=":bank:"
+ ;;
+ "Spotify")
+ icon_result=":spotify:"
+ ;;
+ "KeePassXC")
+ icon_result=":kee_pass_x_c:"
+ ;;
+ "Alfred")
+ icon_result=":alfred:"
+ ;;
+ "Color Picker" | "数码测色计")
+ icon_result=":color_picker:"
+ ;;
+ "Microsoft Word")
+ icon_result=":microsoft_word:"
+ ;;
+ "Microsoft PowerPoint")
+ icon_result=":microsoft_power_point:"
+ ;;
+ "Notes" | "备忘录")
+ icon_result=":notes:"
+ ;;
+ "Microsoft Edge")
+ icon_result=":microsoft_edge:"
+ ;;
+ "Sublime Text")
+ icon_result=":sublime_text:"
+ ;;
+ "Sequel Ace")
+ icon_result=":sequel_ace:"
+ ;;
+ "Folx")
+ icon_result=":folx:"
+ ;;
+ "DingTalk" | "钉钉" | "阿里钉")
+ icon_result=":dingtalk:"
+ ;;
+ "WebStorm")
+ icon_result=":web_storm:"
+ ;;
+ "Sequel Pro")
+ icon_result=":sequel_pro:"
+ ;;
+ "Skype")
+ icon_result=":skype:"
+ ;;
+ "网易云音乐")
+ icon_result=":netease_music:"
+ ;;
+ "PyCharm")
+ icon_result=":pycharm:"
+ ;;
+ "Canary Mail" | "HEY" | "Mail" | "Mailspring" | "MailMate" | "邮件")
+ icon_result=":mail:"
+ ;;
+ "Default")
+ icon_result=":default:"
+ ;;
+ "App Store")
+ icon_result=":app_store:"
+ ;;
+ "Calibre")
+ icon_result=":book:"
+ ;;
+ "Todoist")
+ icon_result=":todoist:"
+ ;;
+ "Emacs")
+ icon_result=":emacs:"
+ ;;
+ "Messenger")
+ icon_result=":messenger:"
+ ;;
+ "Tower")
+ icon_result=":tower:"
+ ;;
+ "VSCodium")
+ icon_result=":vscodium:"
+ ;;
+ "Drafts")
+ icon_result=":drafts:"
+ ;;
+ "Cypress")
+ icon_result=":cypress:"
+ ;;
+ "GitHub Desktop")
+ icon_result=":git_hub:"
+ ;;
+ "Telegram")
+ icon_result=":telegram:"
+ ;;
+ "Firefox Developer Edition" | "Firefox Nightly")
+ icon_result=":firefox_developer_edition:"
+ ;;
+ "Min")
+ icon_result=":min_browser:"
+ ;;
+ "Sketch")
+ icon_result=":sketch:"
+ ;;
+ "Affinity Photo")
+ icon_result=":affinity_photo:"
+ ;;
+ "MAMP" | "MAMP PRO")
+ icon_result=":mamp:"
+ ;;
+ "Insomnia")
+ icon_result=":insomnia:"
+ ;;
+ "Bitwarden")
+ icon_result=":bit_warden:"
+ ;;
+ "Warp")
+ icon_result=":warp:"
+ ;;
+ "System Preferences" | "System Settings" | "系统设置")
+ icon_result=":gear:"
+ ;;
+ "Affinity Designer")
+ icon_result=":affinity_designer:"
+ ;;
+ "Live")
+ icon_result=":ableton:"
+ ;;
+ "Arc")
+ icon_result=":arc:"
+ ;;
+ "Chromium" | "Google Chrome" | "Google Chrome Canary")
+ icon_result=":google_chrome:"
+ ;;
+ "Jellyfin Media Player")
+ icon_result=":jellyfin:"
+ ;;
+ "Zulip")
+ icon_result=":zulip:"
+ ;;
+ "1Password")
+ icon_result=":one_password:"
+ ;;
+ "FaceTime" | "FaceTime 通话")
+ icon_result=":face_time:"
+ ;;
+ "Citrix Workspace" | "Citrix Viewer")
+ icon_result=":citrix:"
+ ;;
+ "Logseq")
+ icon_result=":logseq:"
+ ;;
+ "Reeder")
+ icon_result=":reeder5:"
+ ;;
+ "Code" | "Code - Insiders")
+ icon_result=":code:"
+ ;;
+ "Notion")
+ icon_result=":notion:"
+ ;;
+ "Final Cut Pro")
+ icon_result=":final_cut_pro:"
+ ;;
+ "Zotero")
+ icon_result=":zotero:"
+ ;;
+ "Safari" | "Safari浏览器" | "Safari Technology Preview")
+ icon_result=":safari:"
+ ;;
+ "Blender")
+ icon_result=":blender:"
+ ;;
+ "Affinity Publisher")
+ icon_result=":affinity_publisher:"
+ ;;
+ "Spark Desktop")
+ icon_result=":spark:"
+ ;;
+ "Zeplin")
+ icon_result=":zeplin:"
+ ;;
+ "Replit")
+ icon_result=":replit:"
+ ;;
+ "Podcasts" | "播客")
+ icon_result=":podcasts:"
+ ;;
+ "NordVPN")
+ icon_result=":nord_vpn:"
+ ;;
+ "Notability")
+ icon_result=":notability:"
+ ;;
+ "Numbers" | "Numbers 表格")
+ icon_result=":numbers:"
+ ;;
+ "Nova")
+ icon_result=":nova:"
+ ;;
+ "Microsoft Excel")
+ icon_result=":microsoft_excel:"
+ ;;
+ "Trello")
+ icon_result=":trello:"
+ ;;
+ "Pi-hole Remote")
+ icon_result=":pihole:"
+ ;;
+ "Linear")
+ icon_result=":linear:"
+ ;;
+ "CleanMyMac X")
+ icon_result=":desktop:"
+ ;;
+ "GrandTotal" | "Receipts")
+ icon_result=":dollar:"
+ ;;
+ "Evernote Legacy")
+ icon_result=":evernote_legacy:"
+ ;;
+ "OmniFocus")
+ icon_result=":omni_focus:"
+ ;;
+ "Terminal" | "终端")
+ icon_result=":terminal:"
+ ;;
+ "Atom")
+ icon_result=":atom:"
+ ;;
+ "Kakoune")
+ icon_result=":kakoune:"
+ ;;
+ "Reminders" | "提醒事项")
+ icon_result=":reminders:"
+ ;;
+ "Tana")
+ icon_result=":tana:"
+ ;;
+ "OBS")
+ icon_result=":obsstudio:"
+ ;;
+ "VMware Fusion")
+ icon_result=":vmware_fusion:"
+ ;;
+ "Tweetbot" | "Twitter")
+ icon_result=":twitter:"
+ ;;
+ "Microsoft Teams")
+ icon_result=":microsoft_teams:"
+ ;;
+ "Yuque" | "语雀")
+ icon_result=":yuque:"
+ ;;
+ "Slack")
+ icon_result=":slack:"
+ ;;
+ "Vivaldi")
+ icon_result=":vivaldi:"
+ ;;
+ "Setapp")
+ icon_result=":setapp:"
+ ;;
+ "TIDAL")
+ icon_result=":tidal:"
+ ;;
+ "Miro")
+ icon_result=":miro:"
+ ;;
+ "Messages" | "信息" | "Nachrichten")
+ icon_result=":messages:"
+ ;;
+ "Brave Browser")
+ icon_result=":brave_browser:"
+ ;;
+ "Preview" | "预览" | "Skim" | "zathura")
+ icon_result=":pdf:"
+ ;;
+ "Obsidian")
+ icon_result=":obsidian:"
+ ;;
+ "Thunderbird")
+ icon_result=":thunderbird:"
+ ;;
+ "Firefox")
+ icon_result=":firefox:"
+ ;;
+ "WezTerm")
+ icon_result=":wezterm:"
+ ;;
+ *)
+ icon_result=":default:"
+ ;;
+ esac
+}
+
+icon_map "$1"
+echo "$icon_result"
diff --git a/mac/.config/sketchybar/plugins/kakaotalk.sh b/mac/.config/sketchybar/plugins/kakaotalk.sh
new file mode 100644
index 0000000..e959621
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/kakaotalk.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+TEXT=$(lsappinfo info -only StatusLabel "KakaoTalk" | grep -o '"label"="[0-9]*"' | awk -F'"' '{print $4}')
+
+if [[ $TEXT -gt 0 ]]; then
+ sketchybar -m --set $NAME drawing=on label="$TEXT"
+else
+ sketchybar -m --set $NAME drawing=off
+fi
diff --git a/mac/.config/sketchybar/plugins/keyboard.sh b/mac/.config/sketchybar/plugins/keyboard.sh
new file mode 100644
index 0000000..c6b5681
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/keyboard.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+# this is jank and ugly, I know
+LAYOUT="$(defaults read ~/Library/Preferences/com.apple.HIToolbox.plist AppleSelectedInputSources | grep "KeyboardLayout Name" | cut -c 33- | rev | cut -c 2- | rev)"
+
+# specify short layouts individually.
+case "$LAYOUT" in
+"\"Dvorak\"") SHORT_LAYOUT="DV" ;;
+"\"U.S.\"") SHORT_LAYOUT="US" ;;
+*) SHORT_LAYOUT="한" ;;
+esac
+
+sketchybar --set keyboard label="$SHORT_LAYOUT"
diff --git a/mac/.config/sketchybar/plugins/mail.sh b/mac/.config/sketchybar/plugins/mail.sh
new file mode 100644
index 0000000..6a74b07
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/mail.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+
+TEXT=$(lsappinfo info -only StatusLabel "Mail" | grep -o '"label"="[0-9]*"' | awk -F'"' '{print $4}')
+
+if [[ $TEXT -gt 0 ]]; then
+ sketchybar -m --set $NAME drawing=on label="$TEXT"
+else
+ sketchybar -m --set $NAME drawing=off
+fi \ No newline at end of file
diff --git a/mac/.config/sketchybar/plugins/memory.sh b/mac/.config/sketchybar/plugins/memory.sh
new file mode 100644
index 0000000..6917458
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/memory.sh
@@ -0,0 +1,49 @@
+#!/bin/bash
+
+source "$CONFIG_DIR/globalstyles.sh"
+
+# Get total physical memory in bytes
+total_memory=$(sysctl -n hw.memsize)
+
+# Get memory page size in bytes
+page_size=$(vm_stat | grep "page size of" | awk '{print $8}' | sed 's/\.$//') # Correctly strip the period at the end
+
+# Get various memory statistics from vm_stat
+vm_stat=$(vm_stat)
+pages_free=$(echo "$vm_stat" | grep "Pages free:" | awk '{print $3}' | sed 's/\.$//') # Remove dot at the end
+pages_active=$(echo "$vm_stat" | grep "Pages active:" | awk '{print $3}' | sed 's/\.$//')
+pages_inactive=$(echo "$vm_stat" | grep "Pages inactive:" | awk '{print $3}' | sed 's/\.$//')
+pages_speculative=$(echo "$vm_stat" | grep "Pages speculative:" | awk '{print $3}' | sed 's/\.$//')
+pages_wired_down=$(echo "$vm_stat" | grep "Pages wired down:" | awk '{print $4}' | sed 's/\.$//')
+compressed_pages=$(echo "$vm_stat" | grep "Pages occupied by compressor:" | awk '{print $5}' | sed 's/\.$//')
+
+# Calculate total used memory pages
+total_used_pages=$((pages_active + pages_wired_down + compressed_pages))
+
+# Convert pages to bytes
+total_used_memory_bytes=$((total_used_pages * page_size))
+
+# Calculate memory used percentage as an integer
+USAGE=$((total_used_memory_bytes * 100 / total_memory))
+COUNT="$(memory_pressure | grep "System-wide memory free percentage:" | awk '{ val = 100 - $5; if (val < 10) printf("%1.0f\n", val); else printf("%02.0f\n", val) }')"
+
+COLOR=$RED
+
+case "$COUNT" in
+[5-6][0-9]) # 50-69%
+ COLOR=$YELLOW
+ ;;
+[3-4][0-9]) # 20-49%
+ COLOR=$GREEN
+ ;;
+[1-2][0-9]) # 10-19%
+ COLOR=$LAVENDER
+ ;;
+[0-9]) # 0-9%
+ COLOR=$WHITE
+ ;;
+esac
+
+sketchybar -m --set "$NAME" \
+ label="$COUNT / $USAGE%" \
+ icon.color=$COLOR
diff --git a/mac/.config/sketchybar/plugins/messages.sh b/mac/.config/sketchybar/plugins/messages.sh
new file mode 100644
index 0000000..1ca1ec1
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/messages.sh
@@ -0,0 +1,7 @@
+TEXT=$(sqlite3 ~/Library/Messages/chat.db "SELECT text FROM message WHERE is_read=0 AND is_from_me=0 AND text!='' AND date_read=0" | wc -l | awk '{$1=$1};1')
+
+if [ $TEXT = 0 ]; then
+ sketchybar -m --set $NAME drawing=off
+else
+ sketchybar -m --set $NAME drawing=on label="$TEXT"
+fi \ No newline at end of file
diff --git a/mac/.config/sketchybar/plugins/mic.sh b/mac/.config/sketchybar/plugins/mic.sh
new file mode 100644
index 0000000..35cde89
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/mic.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+MIC_VOLUME=$(osascript -e 'input volume of (get volume settings)')
+
+if [[ $MIC_VOLUME -eq 0 ]]; then
+ sketchybar -m --set mic icon=
+elif [[ $MIC_VOLUME -gt 0 ]]; then
+ sketchybar -m --set mic icon=
+fi
diff --git a/mac/.config/sketchybar/plugins/mic_click.sh b/mac/.config/sketchybar/plugins/mic_click.sh
new file mode 100644
index 0000000..90a6ac6
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/mic_click.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+MIC_VOLUME=$(osascript -e 'input volume of (get volume settings)')
+
+if [[ $MIC_VOLUME -eq 0 ]]; then
+ osascript -e 'set volume input volume 25'
+ sketchybar -m --set mic icon=
+elif [[ $MIC_VOLUME -gt 0 ]]; then
+ osascript -e 'set volume input volume 0'
+ sketchybar -m --set mic icon=
+fi
diff --git a/mac/.config/sketchybar/plugins/music.sh b/mac/.config/sketchybar/plugins/music.sh
new file mode 100644
index 0000000..ce23701
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/music.sh
@@ -0,0 +1,92 @@
+#!/bin/sh
+
+# Load global styles, colors and icons
+source "$CONFIG_DIR/globalstyles.sh"
+
+music_item_defaults=(
+ align=center
+ width=240
+ label.max_chars=33
+)
+
+music_cover=(
+ background.image=media.artwork
+ background.image.scale=5
+ background.image.corner_radius=4
+ background.image.padding_left=$PADDINGS
+ background.image.padding_right=$PADDINGS
+ background.label.align=center
+ y_offset=-$PADDINGS
+ align=center
+)
+
+music_artist=(
+ "${music_item_defaults[@]}"
+)
+
+music_title=(
+ "${music_item_defaults[@]}"
+ label.font.style="Bold"
+)
+
+music_album=(
+ "${music_item_defaults[@]}"
+)
+
+render_bar_item() {
+ sketchybar --set $NAME label="$CURRENT_ARTIST: $CURRENT_SONG"
+}
+
+render_popup() {
+ sketchybar --set $NAME.cover "${music_cover[@]}" \
+ --set $NAME.artist "${music_artist[@]}" \
+ --set $NAME.title "${music_title[@]}" \
+ --set $NAME.album "${music_album[@]}"
+}
+
+update() {
+ CURRENT_ARTIST="$(echo "$INFO" | jq -r '.artist')"
+ CURRENT_SONG="$(echo "$INFO" | jq -r '.title')"
+ CURRENT_ALBUM="$(echo "$INFO" | jq -r '.album')"
+ PLAYER_STATE="$(echo "$INFO" | jq -r '.state')"
+
+ if [ "$PLAYER_STATE" = "playing" ]; then
+ sketchybar --set $NAME drawing=on \
+ icon=􀊆 \
+ --set $NAME.artist label="$CURRENT_ARTIST" \
+ --set $NAME.title label="$CURRENT_SONG" \
+ --set $NAME.album label="$CURRENT_ALBUM"
+ render_bar_item
+ render_popup
+
+ else
+ sketchybar --set $NAME icon=􀊄
+ popup off
+ sketchybar --set $NAME drawing=off
+ fi
+
+}
+
+popup() {
+ sketchybar --set "$NAME" popup.drawing="$1"
+}
+
+playpause() {
+ osascript -e 'tell application "Music" to playpause'
+}
+
+
+case "$SENDER" in
+"routine" | "forced" | "media_change")
+ update
+ ;;
+"mouse.entered")
+ popup on
+ ;;
+"mouse.exited" | "mouse.exited.global")
+ popup off
+ ;;
+"mouse.clicked")
+ playpause
+ ;;
+esac
diff --git a/mac/.config/sketchybar/plugins/music/Cover-Default.png b/mac/.config/sketchybar/plugins/music/Cover-Default.png
new file mode 100644
index 0000000..a65c63f
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/music/Cover-Default.png
Binary files differ
diff --git a/mac/.config/sketchybar/plugins/music/Get-Artwork.applescript b/mac/.config/sketchybar/plugins/music/Get-Artwork.applescript
new file mode 100644
index 0000000..ca3ee31
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/music/Get-Artwork.applescript
@@ -0,0 +1,65 @@
+--get current path
+tell application "Finder" to set current_path to container of (path to me) as alias
+
+--get artwork
+tell application "Music"
+ try
+ if player state is not stopped then
+ set alb to (get album of current track)
+ tell artwork 1 of current track
+ if format is JPEG picture then
+ set imgFormat to ".jpg"
+ else
+ set imgFormat to ".png"
+ end if
+ end tell
+ set rawData to (get raw data of artwork 1 of current track)
+ else
+ return
+ end if
+ on error
+ return POSIX path of ((current_path as text) & "Cover-Default.png")
+ return
+ end try
+end tell
+
+--create path to save image as jpg or png
+set newPath to ((current_path as text) & "tmp" & imgFormat) as text
+
+try
+ --create file
+ tell me to set fileRef to (open for access newPath with write permission)
+ --overwrite existing file
+ write rawData to fileRef starting at 0
+ tell me to close access fileRef
+
+ delay 1
+
+ --resize image
+ set the target_length to 500
+ try
+ tell application "Image Events"
+ -- start the Image Events application
+ launch
+ -- open the image file
+ set this_image to open newPath
+ -- perform action
+ scale this_image to size target_length
+ -- save the changes
+ save this_image with icon
+ -- purge the open image data
+ close this_image
+ end tell
+ on error
+ return POSIX path of ((current_path as text) & "Cover-Default.png")
+ end try
+
+ return POSIX path of newPath
+on error m number n
+ log n
+ log m
+ try
+ tell me to close access fileRef
+ end try
+ return ((current_path as text) & "Cover-Default.png") as text
+end try \ No newline at end of file
diff --git a/mac/.config/sketchybar/plugins/network.sh b/mac/.config/sketchybar/plugins/network.sh
new file mode 100644
index 0000000..99fda23
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/network.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+source "$CONFIG_DIR/colors.sh" # Loads all defined colors
+source "$CONFIG_DIR/icons.sh" # Loads all defined icons
+
+UPDOWN=$(ifstat -i "en0" -b 0.1 1 | tail -n1)
+DOWN=$(echo "$UPDOWN" | awk "{ print \$1 }" | cut -f1 -d ".")
+UP=$(echo "$UPDOWN" | awk "{ print \$2 }" | cut -f1 -d ".")
+
+DOWN_FORMAT=""
+if [ "$DOWN" -gt "999" ]; then
+ DOWN_FORMAT=$(echo "$DOWN" | awk '{ printf "%03.0f Mbps", $1 / 1000}')
+else
+ DOWN_FORMAT=$(echo "$DOWN" | awk '{ printf "%03.0f kbps", $1}')
+fi
+
+UP_FORMAT=""
+if [ "$UP" -gt "999" ]; then
+ UP_FORMAT=$(echo "$UP" | awk '{ printf "%03.0f Mbps", $1 / 1000}')
+else
+ UP_FORMAT=$(echo "$UP" | awk '{ printf "%03.0f kbps", $1}')
+fi
+
+sketchybar -m --set network.down label="$DOWN_FORMAT" icon.highlight=$(if [ "$DOWN" -gt "0" ]; then echo "on"; else echo "off"; fi) \
+ --set network.up label="$UP_FORMAT" icon.highlight=$(if [ "$UP" -gt "0" ]; then echo "on"; else echo "off"; fi)
diff --git a/mac/.config/sketchybar/plugins/nextevent.applescript b/mac/.config/sketchybar/plugins/nextevent.applescript
new file mode 100644
index 0000000..6ffc56a
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/nextevent.applescript
@@ -0,0 +1,19 @@
+set input to paragraphs of (do shell script "/opt/homebrew/bin/icalBuddy -ec 'Found in Natural Language,CCSF' -npn -nc -iep 'datetime,title' -po 'datetime,title' -eed -ea -n -li 4 -ps '|: |' -b '' eventsToday")
+
+set currentTime to date (do shell script "date '+%I:%M %p'")
+
+set theEvent to ""
+
+if input is not "" then
+ repeat with anEvent in input
+ set text item delimiters to "^"
+ set eventTime to date (text item 1 of anEvent)
+ set text item delimiters to ""
+ if eventTime > currentTime then
+ set theEvent to anEvent as string
+ exit repeat
+ end if
+ end repeat
+end if
+
+return theEvent \ No newline at end of file
diff --git a/mac/.config/sketchybar/plugins/nextevent.sh b/mac/.config/sketchybar/plugins/nextevent.sh
new file mode 100644
index 0000000..732629a
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/nextevent.sh
@@ -0,0 +1,55 @@
+#!/usr/bin/env bash
+
+render_item() {
+ sketchybar --set $NAME label="$(date "+%I:%M %p")"
+}
+
+render_popup() {
+
+ if which "icalBuddy" &>/dev/null; then
+ input=$(/opt/homebrew/bin/icalBuddy -ec 'Found in Natural Language,CCSF' -npn -nc -iep 'datetime,title' -po 'datetime,title' -eed -ea -n -li 4 -ps '|: |' -b '' eventsToday)
+ currentTime=$(date '+%I:%M %p')
+
+ # echo "Debug: $NAME #11 $input"
+
+ if [ -n "$input" ]; then
+ IFS='^' read -ra events <<< "$input"
+ for anEvent in "${events[@]}"; do
+ IFS='^' read -ra eventItems <<< "$anEvent"
+ eventTime=${eventItems[0]}
+ if [ "$eventTime" '>' "$currentTime" ]; then
+ theEvent="$anEvent"
+ break
+ fi
+ done
+ else
+ theEvent="No events today"
+ fi
+ else
+ theEvent="Please install icalBuddy → brew install ical-buddy."
+ fi
+
+
+ sketchybar --set clock.details label="$theEvent" click_script="sketchybar --set $NAME popup.drawing=off" >/dev/null
+}
+
+update() {
+ render_item
+}
+
+popup() {
+ render_popup
+ sketchybar --set "$NAME" popup.drawing="$1"
+}
+
+case "$SENDER" in
+"routine" | "forced")
+ update
+ ;;
+"mouse.entered")
+ popup on
+ ;;
+"mouse.exited" | "mouse.exited.global")
+ popup off
+ ;;
+esac \ No newline at end of file
diff --git a/mac/.config/sketchybar/plugins/space.py b/mac/.config/sketchybar/plugins/space.py
new file mode 100644
index 0000000..7ed3e55
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/space.py
@@ -0,0 +1,199 @@
+#!/usr/bin/python3
+
+import os, json, re
+
+ICON_MAP = [
+ {"regex": r"1Password", "icon": ":one_password:"},
+ {"regex": r"Affinity Designer", "icon": ":affinity_designer:"},
+ {"regex": r"Affinity Photo", "icon": ":affinity_photo:"},
+ {"regex": r"Affinity Publisher", "icon": ":affinity_publisher:"},
+ {"regex": r"Airmail", "icon": ":airmail:"},
+ {"regex": r"Alacritty|Hyper|iTerm2|kitty|Terminal|WezTerm", "icon": ":terminal:"},
+ {"regex": r"Alfred", "icon": ":alfred:"},
+ {"regex": r"Android Messages", "icon": ":android_messages:"},
+ {"regex": r"Android Studio", "icon": ":android_studio:"},
+ {"regex": r"App Store", "icon": ":app_store:"},
+ {"regex": r"Atom", "icon": ":atom:"},
+ {"regex": r"Audacity", "icon": ":audacity:"},
+ {"regex": r"Bear", "icon": ":bear:"},
+ {"regex": r"Bitwarden", "icon": ":bit_warden:"},
+ {"regex": r"Blender", "icon": ":blender:"},
+ {"regex": r"Brave Browser", "icon": ":brave_browser:"},
+ {"regex": r"Calendar|Fantastical|Cron|Morgen", "icon": ":calendar:"},
+ {"regex": r"Calibre", "icon": ":book:"},
+ {
+ "regex": r"Canary Mail|HEY|Mail|Mailspring|MailMate|邮件|Outlook|Gmail|Mimestream",
+ "icon": ":mail:",
+ },
+ {"regex": r"Caprine", "icon": ":caprine:"},
+ {
+ "regex": r"Chromium|Google Chrome|Google Chrome Canary",
+ "icon": ":google_chrome:",
+ },
+ {"regex": r"CleanMyMac X", "icon": ":desktop:"},
+ {"regex": r"ClickUp", "icon": ":click_up:"},
+ {"regex": r"Code|Code - Insiders", "icon": ":code:"},
+ {"regex": r"Color Picker", "icon": ":color_picker:"},
+ {"regex": r"DataGrip", "icon": ":datagrip:"},
+ {"regex": r"Default", "icon": ":default:"},
+ {"regex": r"DEVONthink 3", "icon": ":devonthink3:"},
+ {"regex": r"Discord|Discord Canary|Discord PTB", "icon": ":discord:"},
+ {"regex": r"Drafts", "icon": ":drafts:"},
+ {"regex": r"Dropbox", "icon": ":dropbox:"},
+ {"regex": r"Element", "icon": ":element:"},
+ {"regex": r"Emacs", "icon": ":emacs:"},
+ {"regex": r"Evernote Legacy", "icon": ":evernote_legacy:"},
+ {"regex": r"FaceTime", "icon": ":face_time:"},
+ {"regex": r"Figma", "icon": ":figma:"},
+ {"regex": r"Final Cut Pro", "icon": ":final_cut_pro:"},
+ {"regex": r"Finder|访达", "icon": ":finder:"},
+ {
+ "regex": r"Firefox Developer Edition|Firefox Nightly",
+ "icon": ":firefox_developer_edition:",
+ },
+ {"regex": r"Firefox", "icon": ":firefox:"},
+ {"regex": r"Folx", "icon": ":folx:"},
+ {"regex": r"GitHub Desktop", "icon": ":git_hub:"},
+ {"regex": r"Grammarly Editor", "icon": ":grammarly:"},
+ {"regex": r"GrandTotal|Receipts", "icon": ":dollar:"},
+ {"regex": r"IINA", "icon": ":playing:"},
+ {"regex": r"Insomnia", "icon": ":insomnia:"},
+ {"regex": r"IntelliJ IDEA", "icon": ":idea:"},
+ {"regex": r"Iris", "icon": ":iris:"},
+ {"regex": r"Joplin", "icon": ":joplin:"},
+ {"regex": r"Kakoune", "icon": ":kakoune:"},
+ {"regex": r"KeePassXC", "icon": ":kee_pass_x_c:"},
+ {"regex": r"Keyboard Maestro", "icon": ":keyboard_maestro:"},
+ {"regex": r"Keynote", "icon": ":keynote:"},
+ {"regex": r"League of Legends", "icon": ":league_of_legends:"},
+ {"regex": r"LibreWolf", "icon": ":libre_wolf:"},
+ {"regex": r"Linear", "icon": ":linear:"},
+ {"regex": r"Live", "icon": ":ableton:"},
+ {"regex": r"MAMP|MAMP PRO", "icon": ":mamp:"},
+ {"regex": r"Matlab", "icon": ":matlab:"},
+ {"regex": r"Mattermost", "icon": ":mattermost:"},
+ {"regex": r"Messages|Nachrichten", "icon": ":messages:"},
+ {"regex": r"Microsoft Edge", "icon": ":microsoft_edge:"},
+ {"regex": r"Microsoft Excel", "icon": ":microsoft_excel:"},
+ {"regex": r"Microsoft PowerPoint", "icon": ":microsoft_power_point:"},
+ {"regex": r"Microsoft Teams", "icon": ":microsoft_teams:"},
+ {"regex": r"Microsoft To Do|Things", "icon": ":things:"},
+ {"regex": r"Microsoft Word", "icon": ":microsoft_word:"},
+ {"regex": r"Min", "icon": ":min_browser:"},
+ {"regex": r"MoneyMoney", "icon": ":bank:"},
+ {"regex": r"mpv", "icon": ":mpv:"},
+ {"regex": r"Music", "icon": ":music:"},
+ {"regex": r"Neovide|MacVim|Vim|VimR", "icon": ":vim:"},
+ {"regex": r"Notability", "icon": ":notability:"},
+ {"regex": r"Notes", "icon": ":notes:"},
+ {"regex": r"Notion", "icon": ":notion:"},
+ {"regex": r"Nova", "icon": ":nova:"},
+ {"regex": r"Numbers", "icon": ":numbers:"},
+ {"regex": r"OBS", "icon": ":obsstudio:"},
+ {"regex": r"Obsidian", "icon": ":obsidian:"},
+ {"regex": r"OmniFocus", "icon": ":omni_focus:"},
+ {"regex": r"Pages", "icon": ":pages:"},
+ {"regex": r"Parallels Desktop", "icon": ":parallels:"},
+ {"regex": r"Pi-hole Remote", "icon": ":pihole:"},
+ {"regex": r"Pine", "icon": ":pine:"},
+ {"regex": r"Podcasts", "icon": ":podcasts:"},
+ {"regex": r"PomoDone App", "icon": ":pomodone:"},
+ {"regex": r"Preview|Skim|zathura|PDFgear", "icon": ":pdf:"},
+ {"regex": r"qutebrowser", "icon": ":qute_browser:"},
+ {"regex": r"Reeder", "icon": ":reeder5:"},
+ {"regex": r"Reminders", "icon": ":reminders:"},
+ {"regex": r"Safari|Safari Technology Preview|Orion", "icon": ":safari:"},
+ {"regex": r"Sequel Ace", "icon": ":sequel_ace:"},
+ {"regex": r"Sequel Pro", "icon": ":sequel_pro:"},
+ {"regex": r"Setapp", "icon": ":setapp:"},
+ {"regex": r"Signal", "icon": ":signal:"},
+ {"regex": r"Sketch", "icon": ":sketch:"},
+ {"regex": r"Skype", "icon": ":skype:"},
+ {"regex": r"Slack", "icon": ":slack:"},
+ {"regex": r"Spark", "icon": ":spark:"},
+ {"regex": r"Spotify", "icon": ":spotify:"},
+ {"regex": r"Spotlight", "icon": ":spotlight:"},
+ {"regex": r"Sublime Text", "icon": ":sublime_text:"},
+ {"regex": r"System Preferences|System Settings", "icon": ":gear:"},
+ {"regex": r"TeamSpeak 3", "icon": ":team_speak:"},
+ {"regex": r"Telegram", "icon": ":telegram:"},
+ {"regex": r"Thunderbird", "icon": ":thunderbird:"},
+ {"regex": r"TickTick", "icon": ":tick_tick:"},
+ {"regex": r"TIDAL", "icon": ":tidal:"},
+ {"regex": r"Todoist", "icon": ":todoist:"},
+ {"regex": r"Tor Browser", "icon": ":tor_browser:"},
+ {"regex": r"Tower", "icon": ":tower:"},
+ {"regex": r"Transmit", "icon": ":transmit:"},
+ {"regex": r"Trello", "icon": ":trello:"},
+ {"regex": r"Tweetbot|Twitter", "icon": ":twitter:"},
+ {"regex": r"Typora", "icon": ":text:"},
+ {"regex": r"Vivaldi", "icon": ":vivaldi:"},
+ {"regex": r"VLC", "icon": ":vlc:"},
+ {"regex": r"VMware Fusion", "icon": ":vmware_fusion:"},
+ {"regex": r"VSCodium", "icon": ":vscodium:"},
+ {"regex": r"WebStorm", "icon": ":web_storm:"},
+ {"regex": r"WhatsApp", "icon": ":whats_app:"},
+ {"regex": r"Xcode", "icon": ":xcode:"},
+ {"regex": r"Zeplin", "icon": ":zeplin:"},
+ {"regex": r"zoom.us", "icon": ":zoom:"},
+ {"regex": r"Zotero", "icon": ":zotero:"},
+ {"regex": r"Zulip", "icon": ":zulip:"},
+ {"regex": r"微信", "icon": ":wechat:"},
+ {"regex": r"网易云音乐", "icon": ":netease_music:"},
+]
+
+
+def to_sup(s):
+ sups = {
+ "0": "\u2070",
+ "1": "\xb9",
+ "2": "\xb2",
+ "3": "\xb3",
+ "4": "\u2074",
+ "5": "\u2075",
+ "6": "\u2076",
+ "7": "\u2077",
+ "8": "\u2078",
+ "9": "\u2079",
+ }
+
+ return "".join(sups.get(char, char) for char in str(s))
+
+
+def to_icon(app):
+ for x in ICON_MAP:
+ if re.search(x["regex"], app):
+ return x["icon"]
+ return ":default:"
+
+
+def to_formatted_icon(app, c):
+ cnt = f" {to_sup(c)}" if c > 1 else ""
+ return f"{to_icon(app)}{cnt}"
+
+
+def to_formatted_icons(apps):
+ return " ".join([to_formatted_icon(app, cnt) for app, cnt in apps.items()])
+
+
+spaces = {}
+apps = json.loads(os.popen("yabai -m query --windows").read())
+for app in apps:
+ spaces[app["space"]] = spaces.get(app["space"], {})
+ spaces[app["space"]][app["app"]] = spaces[app["space"]].get(app["app"], 0) + 1
+
+args = " ".join(
+ [
+ f'--set space.{space} label="{to_formatted_icons(apps)}" label.drawing=on'
+ for space, apps in spaces.items()
+ ]
+)
+default_args = "--set spaces_bracket drawing=off --set '/space\..*/' background.drawing=on --animate sin 10"
+
+args2 = ""
+spaces = json.loads(os.popen("yabai -m query --spaces").read())
+for space in spaces:
+ if not space["windows"]:
+ args2 = f'{args2} --set space.{space["index"]} label="" label.drawing=off'
+
+os.system(f"sketchybar -m {default_args} {args} {args2}")
diff --git a/mac/.config/sketchybar/plugins/space.sh b/mac/.config/sketchybar/plugins/space.sh
new file mode 100644
index 0000000..70f3ac4
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/space.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+
+source "$CONFIG_DIR/globalstyles.sh"
+
+if [ "$SELECTED" = "true" ]; then
+ COLOR=$HIGHLIGHT
+ OFFSET=-12 # under line
+ WIDTH="dynamic"
+else
+ COLOR=$TRANSPARENT
+fi
+
+sketchybar --animate tanh 10 \
+ --set $NAME icon.highlight=$SELECTED \
+ label.highlight=$SELECTED \
+ background.color=$COLOR \
+ background.y_offset=$OFFSET
+
+update() {
+ source "$CONFIG_DIR/colors.sh"
+ COLOR=$BACKGROUND_2
+ WIDTH="dynamic"
+
+ sketchybar --set $NAME icon.highlight=$SELECTED \
+ label.highlight=$SELECTED \
+ background.border_color=$COLOR \
+ sketchybar --animate tanh 8 \
+ label.width=$WIDTH \
+}
+
+set_space_label() {
+ sketchybar --set $NAME icon="$@"
+}
+
+mouse_clicked() {
+ if [ "$BUTTON" = "right" ]; then
+ yabai -m space --destroy $SID
+ sketchybar --trigger space_change --trigger windows_on_spaces
+ else
+ if [ "$MODIFIER" = "shift" ]; then
+ SPACE_LABEL="$(osascript -e "return (text returned of (display dialog \"Give a name to space $NAME:\" default answer \"\" with icon note buttons {\"Cancel\", \"Continue\"} default button \"Continue\"))")"
+ if [ $? -eq 0 ]; then
+ if [ "$SPACE_LABEL" = "" ]; then
+ set_space_label "${NAME:6}"
+ else
+ set_space_label "${NAME:6} ($SPACE_LABEL)"
+ fi
+ fi
+ else
+ yabai -m space --focus $SID 2>/dev/null
+ fi
+ fi
+}
+
+case "$SENDER" in
+"mouse.clicked")
+ mouse_clicked
+ ;;
+*)
+ update
+ ;;
+esac
diff --git a/mac/.config/sketchybar/plugins/space_windows.sh b/mac/.config/sketchybar/plugins/space_windows.sh
new file mode 100644
index 0000000..f175891
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/space_windows.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+if [ "$SENDER" = "space_windows_change" ]; then
+ args=(--animate sin 10)
+
+ space="$(echo "$INFO" | jq -r '.space')"
+ apps="$(echo "$INFO" | jq -r '.apps | keys[]')"
+
+ icon_strip=" "
+ if [ "${apps}" != "" ]; then
+ while read -r app; do
+ icon_strip+=" $($CONFIG_DIR/plugins/icon_map.sh "$app")"
+ done <<<"${apps}"
+ else
+ icon_strip=""
+ fi
+ args+=(--set space.$space label="$icon_strip")
+
+ sketchybar -m "${args[@]}"
+fi
diff --git a/mac/.config/sketchybar/plugins/spotify.sh b/mac/.config/sketchybar/plugins/spotify.sh
new file mode 100644
index 0000000..521ac60
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/spotify.sh
@@ -0,0 +1,147 @@
+#!/bin/bash
+
+next ()
+{
+ osascript -e 'tell application "Spotify" to play next track'
+}
+
+back ()
+{
+ osascript -e 'tell application "Spotify" to play previous track'
+}
+
+play ()
+{
+ osascript -e 'tell application "Spotify" to playpause'
+}
+
+repeat ()
+{
+ REPEAT=$(osascript -e 'tell application "Spotify" to get repeating')
+ if [ "$REPEAT" = "false" ]; then
+ sketchybar -m --set spotify.repeat icon.highlight=on
+ osascript -e 'tell application "Spotify" to set repeating to true'
+ else
+ sketchybar -m --set spotify.repeat icon.highlight=off
+ osascript -e 'tell application "Spotify" to set repeating to false'
+ fi
+}
+
+shuffle ()
+{
+ SHUFFLE=$(osascript -e 'tell application "Spotify" to get shuffling')
+ if [ "$SHUFFLE" = "false" ]; then
+ sketchybar -m --set spotify.shuffle icon.highlight=on
+ osascript -e 'tell application "Spotify" to set shuffling to true'
+ else
+ sketchybar -m --set spotify.shuffle icon.highlight=off
+ osascript -e 'tell application "Spotify" to set shuffling to false'
+ fi
+}
+
+update ()
+{
+ PLAYING=1
+ if [ "$(echo "$INFO" | jq -r '.["Player State"]')" = "Playing" ]; then
+ PLAYING=0
+ TRACK="$(echo "$INFO" | jq -r .Name)"
+ ARTIST="$(echo "$INFO" | jq -r .Artist)"
+ ALBUM="$(echo "$INFO" | jq -r .Album)"
+ SHUFFLE=$(osascript -e 'tell application "Spotify" to get shuffling')
+ REPEAT=$(osascript -e 'tell application "Spotify" to get repeating')
+ COVER=$(osascript -e 'tell application "Spotify" to get artwork url of current track')
+ fi
+
+ args=()
+ if [ $PLAYING -eq 0 ]; then
+ curl -s --max-time 20 "$COVER" -o /tmp/cover.jpg
+ if [ "$ARTIST" == "" ]; then
+ args+=(--set spotify.title label="$TRACK"
+ --set spotify.album label="Podcast"
+ --set spotify.artist label="$ALBUM" )
+ else
+ args+=(--set spotify.title label="$TRACK"
+ --set spotify.album label="$ALBUM"
+ --set spotify.artist label="$ARTIST")
+ fi
+ args+=(--set spotify.play icon=􀊆
+ --set spotify.shuffle icon.highlight=$SHUFFLE
+ --set spotify.repeat icon.highlight=$REPEAT
+ --set spotify.cover background.image="/tmp/cover.jpg"
+ background.color=0x00000000
+ --set spotify.anchor drawing=on )
+ else
+ args+=(--set spotify.anchor drawing=off popup.drawing=off
+ --set spotify.play icon=􀊄 )
+ fi
+ sketchybar -m "${args[@]}"
+}
+
+scrubbing() {
+ DURATION_MS=$(osascript -e 'tell application "Spotify" to get duration of current track')
+ DURATION=$((DURATION_MS/1000))
+
+ TARGET=$((DURATION*PERCENTAGE/100))
+ osascript -e "tell application \"Spotify\" to set player position to $TARGET"
+ sketchybar --set spotify.state slider.percentage=$PERCENTAGE
+}
+
+scroll() {
+ DURATION_MS=$(osascript -e 'tell application "Spotify" to get duration of current track')
+ DURATION=$((DURATION_MS/1000))
+
+ FLOAT="$(osascript -e 'tell application "Spotify" to get player position')"
+ TIME=${FLOAT%.*}
+
+ sketchybar --animate linear 10 \
+ --set spotify.state slider.percentage="$((TIME*100/DURATION))" \
+ icon="$(date -r $TIME +'%M:%S')" \
+ label="$(date -r $DURATION +'%M:%S')"
+}
+
+mouse_clicked () {
+ case "$NAME" in
+ "spotify.next") next
+ ;;
+ "spotify.back") back
+ ;;
+ "spotify.play") play
+ ;;
+ "spotify.shuffle") shuffle
+ ;;
+ "spotify.repeat") repeat
+ ;;
+ "spotify.state") scrubbing
+ ;;
+ *) exit
+ ;;
+ esac
+}
+
+popup () {
+ sketchybar --set spotify.anchor popup.drawing=$1
+}
+
+routine() {
+ case "$NAME" in
+ "spotify.state") scroll
+ ;;
+ *) update
+ ;;
+ esac
+}
+
+case "$SENDER" in
+ "mouse.clicked") mouse_clicked
+ ;;
+ "mouse.entered") popup on
+ ;;
+ "mouse.exited"|"mouse.exited.global") popup off
+ ;;
+ "routine") routine
+ ;;
+ "forced") exit 0
+ ;;
+ *) update
+ ;;
+esac
diff --git a/mac/.config/sketchybar/plugins/svim.sh b/mac/.config/sketchybar/plugins/svim.sh
new file mode 100644
index 0000000..cb792b8
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/svim.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+source "$CONFIG_DIR/icons.sh"
+source "$CONFIG_DIR/colors.sh"
+
+if [ "$SENDER" = "svim_update" ]; then
+ DRAWING=on
+ DRAW_CMD=off
+ COLOR=$WHITE
+ case "$MODE" in
+ "I") ICON="$MODE_INSERT" DRAWING=off
+ ;;
+ "N") ICON="$MODE_NORMAL"
+ ;;
+ "V") ICON="$MODE_VISUAL" COLOR=$YELLOW
+ ;;
+ "C") ICON="$MODE_CMD" DRAW_CMD=on COLOR=$RED
+ ;;
+ "_") ICON="$MODE_PENDING"
+ ;;
+ *) DRAWING=off
+ ;;
+ esac
+
+ sketchybar --set $NAME drawing="$DRAWING" \
+ label.drawing="$DRAW_CMD" \
+ icon="$ICON" \
+ icon.color="$COLOR" \
+ label="$CMDLINE"
+fi
diff --git a/mac/.config/sketchybar/plugins/thunderbird.sh b/mac/.config/sketchybar/plugins/thunderbird.sh
new file mode 100644
index 0000000..53f8e31
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/thunderbird.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+TEXT=$(lsappinfo info -only StatusLabel "Thunderbird" | grep -o '"label"="[0-9]*"' | awk -F'"' '{print $4}')
+
+if [[ $TEXT -gt 0 ]]; then
+ sketchybar -m --set $NAME drawing=on label="$TEXT"
+else
+ sketchybar -m --set $NAME drawing=off
+fi
diff --git a/mac/.config/sketchybar/plugins/toggle_stats.sh b/mac/.config/sketchybar/plugins/toggle_stats.sh
new file mode 100644
index 0000000..b364c18
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/toggle_stats.sh
@@ -0,0 +1,63 @@
+#!/bin/bash
+
+stats=(
+ cpu.top
+ cpu.percent
+ cpu.sys
+ cpu.user
+ memory
+ disk
+ network.up
+ network.down
+)
+
+hide_stats() {
+ args=()
+ for item in "${stats[@]}"; do
+ args+=(--set "$item" drawing=off)
+ done
+
+ sketchybar "${args[@]}" \
+ --set separator_right \
+ icon=󰅂 \
+ icon.font.size=25 \
+ padding_right=10
+}
+
+show_stats() {
+ args=()
+ for item in "${stats[@]}"; do
+ args+=(--set "$item" drawing=on)
+ done
+
+ sketchybar "${args[@]}" \
+ --set separator_right \
+ icon=󰅁 \
+ icon.font.size=25 \
+ padding_right=10
+}
+
+toggle_stats() {
+ state=$(sketchybar --query separator_right | jq -r .icon.value)
+
+ case $state in
+ "󰅂")
+ show_stats
+ ;;
+ "󰅁")
+ hide_stats
+ ;;
+ esac
+}
+
+case "$SENDER" in
+"hide_stats")
+ hide_stats
+ ;;
+"show_stats")
+ show_stats
+ ;;
+"toggle_stats")
+ toggle_stats
+ ;;
+esac
diff --git a/mac/.config/sketchybar/plugins/volume.sh b/mac/.config/sketchybar/plugins/volume.sh
new file mode 100644
index 0000000..a03a790
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/volume.sh
@@ -0,0 +1,43 @@
+#!/bin/bash
+
+WIDTH=100
+
+volume_change() {
+ source "$CONFIG_DIR/icons.sh"
+ source "$CONFIG_DIR/colors.sh"
+
+ case $INFO in
+ [6-9][0-9]|100) ICON=$VOLUME_100
+ ;;
+ [3-5][0-9]) ICON=$VOLUME_66
+ ;;
+ [1-2][0-9]) ICON=$VOLUME_33
+ ;;
+ [1-9]) ICON=$VOLUME_10
+ ;;
+ 0) ICON=$VOLUME_0
+ ;;
+ *) ICON=$VOLUME_100
+ esac
+
+ sketchybar --set volume_icon icon=$ICON
+ sketchybar --set $NAME slider.percentage=$INFO --animate tanh 30 --set $NAME slider.width=$WIDTH
+ sleep 2
+
+ # Check wether the volume was changed another time while sleeping
+ FINAL_PERCENTAGE=$(sketchybar --query $NAME | jq -r ".slider.percentage")
+ if [ "$FINAL_PERCENTAGE" -eq "$INFO" ]; then
+ sketchybar --animate tanh 30 --set $NAME slider.width=0
+ fi
+}
+
+mouse_clicked() {
+ osascript -e "set volume output volume $PERCENTAGE"
+}
+
+case "$SENDER" in
+ "volume_change") volume_change
+ ;;
+ "mouse.clicked") mouse_clicked
+ ;;
+esac \ No newline at end of file
diff --git a/mac/.config/sketchybar/plugins/volume_click.sh b/mac/.config/sketchybar/plugins/volume_click.sh
new file mode 100644
index 0000000..e05c0d8
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/volume_click.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+
+WIDTH=100
+
+detail_on() {
+ sketchybar --animate tanh 30 --set volume slider.width=$WIDTH
+}
+
+detail_off() {
+ sketchybar --animate tanh 30 --set volume slider.width=0
+}
+
+toggle_detail() {
+ INITIAL_WIDTH=$(sketchybar --query volume | jq -r ".slider.width")
+ if [ "$INITIAL_WIDTH" -eq "0" ]; then
+ detail_on
+ else
+ detail_off
+ fi
+}
+
+toggle_devices() {
+ which SwitchAudioSource >/dev/null || exit 0
+ source "$CONFIG_DIR/colors.sh"
+ source "$CONFIG_DIR/globalstyles.sh"
+
+ args=(--remove '/volume.device\.*/' --set "$NAME" popup.drawing=toggle "${menu_defaults[@]}")
+ COUNTER=0
+ CURRENT="$(SwitchAudioSource -t output -c)"
+ while IFS= read -r device; do
+ COLOR=$WHITE
+ ICON=􀆅
+ ICON_COLOR=$TRANSPARENT
+ if [ "${device}" = "$CURRENT" ]; then
+ COLOR=$HIGHLIGHT
+ ICON=􀆅
+ ICON_COLOR=$COLOR
+ fi
+
+ args+=(--add item volume.device.$COUNTER popup."$NAME" \
+ --set volume.device.$COUNTER label="${device}" \
+ label.color="$COLOR" \
+ icon=$ICON \
+ icon.color=$ICON_COLOR \
+ "${menu_item_defaults[@]}" \
+ click_script="SwitchAudioSource -s \"${device}\" && sketchybar --set /volume.device\.*/ label.color=$GREY --set \$NAME label.color=$WHITE --set $NAME popup.drawing=off")
+ COUNTER=$((COUNTER+1))
+ done <<< "$(SwitchAudioSource -a -t output)"
+
+ sketchybar -m "${args[@]}" > /dev/null
+}
+
+if [ "$BUTTON" = "left" ] || [ "$MODIFIER" = "shift" ]; then
+ toggle_devices
+else
+ toggle_detail
+fi \ No newline at end of file
diff --git a/mac/.config/sketchybar/plugins/weather.sh b/mac/.config/sketchybar/plugins/weather.sh
new file mode 100644
index 0000000..61644de
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/weather.sh
@@ -0,0 +1,191 @@
+#!/usr/bin/env bash
+
+# Load global styles, colors and icons
+source "$CONFIG_DIR/globalstyles.sh"
+
+# API_KEY="462eeb49a1b844f191f175554222607" # insert api key here
+API_KEY="2aa1a4f60e2542efae051005240402" # insert api key here
+
+# first comment is description, second is icon number
+WEATHER_ICONS_DAY=(
+ [1000]= # Sunny/113
+ [1003]= # Partly cloudy/116
+ [1006]= # Cloudy/119
+ [1009]= # Overcast/122
+ [1030]= # Mist/143
+ [1063]= # Patchy rain possible/176
+ [1066]= # Patchy snow possible/179
+ [1069]= # Patchy sleet possible/182
+ [1072]= # Patchy freezing drizzle possible/185
+ [1087]= # Thundery outbreaks possible/200
+ [1114]= # Blowing snow/227
+ [1117]= # Blizzard/230
+ [1135]= # Fog/248
+ [1147]= # Freezing fog/260
+ [1150]= # Patchy light drizzle/263
+ [1153]= # Light drizzle/266
+ [1168]= # Freezing drizzle/281
+ [1171]= # Heavy freezing drizzle/284
+ [1180]= # Patchy light rain/293
+ [1183]= # Light rain/296
+ [1186]= # Moderate rain at times/299
+ [1189]= # Moderate rain/302
+ [1192]= # Heavy rain at times/305
+ [1195]= # Heavy rain/308
+ [1198]= # Light freezing rain/311
+ [1201]= # Moderate or heavy freezing rain/314
+ [1204]= # Light sleet/317
+ [1207]= # Moderate or heavy sleet/320
+ [1210]= # Patchy light snow/323
+ [1213]= # Light snow/326
+ [1216]= # Patchy moderate snow/329
+ [1219]= # Moderate snow/332
+ [1222]= # Patchy heavy snow/335
+ [1225]= # Heavy snow/338
+ [1237]= # Ice pellets/350
+ [1240]= # Light rain shower/353
+ [1243]= # Moderate or heavy rain shower/356
+ [1246]= # Torrential rain shower/359
+ [1249]= # Light sleet showers/362
+ [1252]= # Moderate or heavy sleet showers/365
+ [1255]= # Light snow showers/368
+ [1258]= # Moderate or heavy snow showers/371
+ [1261]= # Light showers of ice pellets/374
+ [1264]= # Moderate or heavy showers of ice pellets/377
+ [1273]= # Patchy light rain with thunder/386
+ [1276]= # Moderate or heavy rain with thunder/389
+ [1279]= # Patchy light snow with thunder/392
+ [1282]= # Moderate or heavy snow with thunder/395
+)
+
+WEATHER_ICONS_NIGHT=(
+ [1000]= # Clear/113
+ [1003]= # Partly cloudy/116
+ [1006]= # Cloudy/119
+ [1009]= # Overcast/122
+ [1030]= # Mist/143
+ [1063]= # Patchy rain possible/176
+ [1066]= # Patchy snow possible/179
+ [1069]= # Patchy sleet possible/182
+ [1072]= # Patchy freezing drizzle possible/185
+ [1087]= # Thundery outbreaks possible/200
+ [1114]= # Blowing snow/227
+ [1117]= # Blizzard/230
+ [1135]= # Fog/248
+ [1147]= # Freezing fog/260
+ [1150]= # Patchy light drizzle/263
+ [1153]= # Light drizzle/266
+ [1168]= # Freezing drizzle/281
+ [1171]= # Heavy freezing drizzle/284
+ [1180]= # Patchy light rain/293
+ [1183]= # Light rain/296
+ [1186]= # Moderate rain at times/299
+ [1189]= # Moderate rain/302
+ [1192]= # Heavy rain at times/305
+ [1195]= # Heavy rain/308
+ [1198]= # Light freezing rain/311
+ [1201]= # Moderate or heavy freezing rain/314
+ [1204]= # Light sleet/317
+ [1207]= # Moderate or heavy sleet/320
+ [1210]= # Patchy light snow/323
+ [1213]= # Light snow/326
+ [1216]= # Patchy moderate snow/329
+ [1219]= # Moderate snow/332
+ [1222]= # Patchy heavy snow/335
+ [1225]= # Heavy snow/338
+ [1237]= # Ice pellets/350
+ [1240]= # Light rain shower/353
+ [1243]= # Moderate or heavy rain shower/356
+ [1246]= # Torrential rain shower/359
+ [1249]= # Light sleet showers/362
+ [1252]= # Moderate or heavy sleet showers/365
+ [1255]= # Light snow showers/368
+ [1258]= # Moderate or heavy snow showers/371
+ [1261]= # Light showers of ice pellets/374
+ [1264]= # Moderate or heavy showers of ice pellets/377
+ [1273]= # Patchy light rain with thunder/386
+ [1276]= # Moderate or heavy rain with thunder/389
+ [1279]= # Patchy light snow with thunder/392
+ [1282]= # Moderate or heavy snow with thunder/395
+)
+
+render_item() {
+ if [ "$CITY" = "" ]; then
+ args+=(--set $NAME icon="􀌏" label.drawing=off icon.padding_right=-3)
+ else
+ args+=(--set $NAME icon="$ICON" icon.font="Hack Nerd Font:Bold:14.0" label="${TEMP}°C" label.drawing=on icon.padding_right=-3)
+ fi
+
+ sketchybar "${args[@]}" >/dev/null
+
+}
+
+render_popup() {
+ if [ "$CITY" = "" ]; then
+ args+=(--set weather.details label="N/A"
+ click_script="sketchybar --set $NAME popup.drawing=off")
+ else
+ args+=(--set weather.details label="$CONDITION_TEXT, Humidity: $HUMIDITY% ($LOCATION)"
+ click_script="sketchybar --set $NAME popup.drawing=off")
+ fi
+
+ sketchybar "${args[@]}" >/dev/null
+
+}
+
+update() {
+ CURRENT_WIFI="$(/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I)"
+ SSID="$(echo "$CURRENT_WIFI" | grep -o "SSID: .*" | sed 's/^SSID: //')"
+
+ # Attempt to get the city name using the IP info service
+ CITY="$(curl -s -m 5 ipinfo.io/loc)"
+
+ # Check if the CITY variable is empty or contains an error message
+ if [ -z "$CITY" ] || echo "$CITY" | grep -q "error"; then
+ # Default to Birmingham,AL if the curl command failed or returned an error
+ CITY="Birmingham,AL"
+ fi
+
+ # Replace spaces with '%20' for URL encoding
+ CITY=$(echo "$CITY" | sed 's/ /%20/g')
+
+ if [ "$CITY" != "" ]; then
+ DATA=$(curl -s -m 5 "http://api.weatherapi.com/v1/current.json?key=$API_KEY&q=$CITY")
+ CONDITION=$(echo $DATA | jq -r '.current.condition.code')
+ CONDITION_TEXT=$(echo $DATA | jq -r '.current.condition.text')
+ TEMP=$(echo $DATA | jq -r '.current.temp_c | floor')
+ FEELSLIKE=$(echo $DATA | jq -r '.current.feelslike_f')
+ HUMIDITY=$(echo $DATA | jq -r '.current.humidity')
+ IS_DAY=$(echo $DATA | jq -r '.current.is_day')
+ LOCATION=$(echo $DATA | jq -r '.location.name' && echo ', ' && echo $DATA | jq -r '.location.country')
+
+ [ "$IS_DAY" = "1" ] && ICON=${WEATHER_ICONS_DAY[$CONDITION]} || ICON=${WEATHER_ICONS_NIGHT[$CONDITION]}
+ args=()
+ fi
+
+ render_item
+ render_popup
+
+ if [ "$SENDER" = "forced" ]; then
+ sketchybar --set "$NAME"
+ fi
+}
+
+popup() {
+ sketchybar --set "$NAME" popup.drawing="$1"
+}
+
+case "$SENDER" in
+"routine" | "forced" | "wifi_change")
+ update
+ ;;
+"mouse.entered")
+ popup on
+ ;;
+"mouse.exited" | "mouse.exited.global")
+ popup off
+ ;;
+"mouse.clicked")
+ popup toggle
+ ;;
+esac
diff --git a/mac/.config/sketchybar/plugins/wifi.sh b/mac/.config/sketchybar/plugins/wifi.sh
new file mode 100644
index 0000000..3f78223
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/wifi.sh
@@ -0,0 +1,104 @@
+#!/bin/bash
+
+POPUP_OFF="sketchybar --set wifi popup.drawing=off"
+POPUP_CLICK_SCRIPT="sketchybar --set wifi popup.drawing=toggle"
+
+source "$CONFIG_DIR/globalstyles.sh" # Loads defined colors
+
+INFO="$(/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -I | awk -F ' SSID: ' '/ SSID: / {print $2}')"
+IS_VPN=$(/usr/local/bin/piactl get connectionstate)
+CURRENT_WIFI="$(/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I)"
+IP_ADDRESS="$(ipconfig getifaddr en0)"
+SSID="$(echo "$CURRENT_WIFI" | grep -o "SSID: .*" | sed 's/^SSID: //')"
+CURR_TX="$(echo "$CURRENT_WIFI" | grep -o "lastTxRate: .*" | sed 's/^lastTxRate: //')"
+
+# ICON="$([ -n "$INFO" ] && echo "$WIFI_CONNECTED" || echo "$WIFI_DISCONNECTED")"
+
+if [ -n "$INFO" ]; then
+ ICON_COLOR=$GREEN
+ ICON="$WIFI_CONNECTED"
+elif [ -z "$INFO" ]; then
+ ICON="$WIFI_DISCONNECTED"
+elif [[ $IS_VPN != "Disconnected" ]]; then
+ ICON_COLOR=$HIGHLIGHT
+ ICON=􀎡
+elif [[ $SSID = "Ebrietas" ]]; then
+ ICON_COLOR=$WHITE
+ ICON=􀉤
+elif [[ $SSID != "" ]]; then
+ ICON_COLOR=$WHITE
+ ICON=􀐿
+elif [[ $CURRENT_WIFI = "AirPort: Off" ]]; then
+ ICON_COLOR=$RED
+ ICON=􀐾
+else
+ ICON_COLOR=$WHITE_25
+ ICON=􀐾
+fi
+
+render_bar_item() {
+ sketchybar --set $NAME \
+ icon.color=$ICON_COLOR \
+ icon=$ICON \
+ click_script="$POPUP_CLICK_SCRIPT"
+}
+
+render_popup() {
+ if [ "$SSID" != "" ]; then
+ args=(
+ --set wifi click_script="$POPUP_CLICK_SCRIPT"
+ --set wifi.ssid label="$SSID"
+ --set wifi.strength label="$CURR_TX Mbps"
+ --set wifi.ipaddress label="$IP_ADDRESS"
+ click_script="printf $IP_ADDRESS | pbcopy;$POPUP_OFF"
+ )
+ else
+ args=(
+ --set wifi click_script="")
+ fi
+
+ sketchybar "${args[@]}" >/dev/null
+}
+
+update() {
+ render_bar_item
+ render_popup
+ source "$CONFIG_DIR/icons.sh"
+ INFO="$(/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -I | awk -F ' SSID: ' '/ SSID: / {print $2}')"
+ LABEL="$INFO ($(ipconfig getifaddr en0))"
+ ICON="$([ -n "$INFO" ] && echo "$WIFI_CONNECTED" || echo "$WIFI_DISCONNECTED")"
+ sketchybar --set $NAME icon="$ICON" label="$LABEL"
+}
+
+click() {
+ CURRENT_WIDTH="$(sketchybar --query $NAME | jq -r .label.width)"
+
+ WIDTH=0
+ if [ "$CURRENT_WIDTH" -eq "0" ]; then
+ WIDTH=dynamic
+ fi
+
+ sketchybar --animate sin 20 --set $NAME label.width="$WIDTH"
+}
+
+popup() {
+ sketchybar --set "$NAME" popup.drawing="$1"
+}
+
+case "$SENDER" in
+"routine" | "forced")
+ update
+ ;;
+"mouse.entered")
+ popup on
+ ;;
+"mouse.exited" | "mouse.exited.global")
+ popup off
+ ;;
+"wifi_change")
+ update
+ ;;
+"mouse.clicked")
+ click
+ ;;
+esac
diff --git a/mac/.config/sketchybar/plugins/yabai.sh b/mac/.config/sketchybar/plugins/yabai.sh
new file mode 100644
index 0000000..6027de1
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/yabai.sh
@@ -0,0 +1,141 @@
+#!/bin/bash
+
+# window_state() {
+# source "$CONFIG_DIR/globalstyles.sh"
+#
+# COLOR=$LABEL_COLOR
+#
+# WINDOW=$(yabai -m query --windows --window)
+# read -r FLOATING SPLIT PARENT FULLSCREEN STICKY STACK_INDEX <<<$(echo "$WINDOW" | jq -rc '.["is-floating", "split-type", "has-parent-zoom", "has-fullscreen-zoom", "is-sticky", "stack-index"]')
+#
+# if [[ $STACK_INDEX -gt 0 ]]; then
+# LAST_STACK_INDEX=$(yabai -m query --windows --window stack.last | jq '.["stack-index"]')
+# ICON=$YABAI_STACK
+# LABEL="$(printf "%s/%s " "$STACK_INDEX" "$LAST_STACK_INDEX")"
+# COLOR=$YELLOW
+# elif [[ $FLOATING == "true" ]]; then
+# ICON=$YABAI_FLOAT
+# elif [[ $PARENT == "true" ]]; then
+# ICON="􁈔"
+# elif [[ $FULLSCREEN == "true" ]]; then
+# ICON=$YABAI_FULLSCREEN_ZOOM
+# elif [[ $SPLIT == "vertical" ]]; then
+# ICON=$YABAI_SPLIT_VERTICAL
+# elif [[ $SPLIT == "horizontal" ]]; then
+# ICON=$YABAI_SPLIT_HORIZONTAL
+# else
+# ICON=$YABAI_GRID
+# fi
+#
+# args=(--bar border_color=$COLOR --animate sin 10 --set $NAME icon=$ICON icon.color=$COLOR)
+#
+# [ -z "$LABEL" ] && args+=(label.drawing=off) ||
+# args+=(label.drawing=on label="$LABEL" label.color=$COLOR)
+#
+# [ -z "$ICON" ] && args+=(icon.width=0) ||
+# args+=(icon="$ICON")
+#
+# sketchybar -m "${args[@]}"
+# }
+#
+# windows_on_spaces() {
+# /usr/bin/python3 $CONFIG_DIR/plugins/space.py # New spaces python script to consolidate spaces
+# }
+#
+# mouse_clicked() {
+#
+# yabai_mode=$(yabai -m query --spaces --space | jq -r .type)
+#
+# case "$yabai_mode" in
+# bsp)
+# yabai -m config layout stack
+# ;;
+# stack)
+# yabai -m config layout float
+# ;;
+# float)
+# yabai -m config layout bsp
+# ;;
+# esac
+#
+# window_state
+# }
+#
+# case "$SENDER" in
+# "mouse.clicked")
+# mouse_clicked
+# ;;
+# "forced")
+# exit 0
+# ;;
+# "window_focus")
+# window_state
+# ;;
+# "windows_on_spaces" | "space_change")
+# windows_on_spaces
+# ;;
+# esac
+
+window_state() {
+ source "$CONFIG_DIR/colors.sh"
+ source "$CONFIG_DIR/icons.sh"
+
+ COLOR=$ROSEWATER
+
+ WINDOW=$(yabai -m query --windows --window)
+ read -r FLOATING SPLIT PARENT FULLSCREEN STICKY STACK_INDEX <<<$(echo "$WINDOW" | jq -rc '.["is-floating", "split-type", "has-parent-zoom", "has-fullscreen-zoom", "is-sticky", "stack-index"]')
+
+ if [[ $STACK_INDEX -gt 0 ]]; then
+ LAST_STACK_INDEX=$(yabai -m query --windows --window stack.last | jq '.["stack-index"]')
+ ICON=$YABAI_STACK
+ LABEL="$(printf "%s/%s " "$STACK_INDEX" "$LAST_STACK_INDEX")"
+ COLOR=$YELLOW
+ elif [[ $FLOATING == "true" ]]; then
+ ICON=$YABAI_FLOAT
+ elif [[ $PARENT == "true" ]]; then
+ ICON="􁈔"
+ elif [[ $FULLSCREEN == "true" ]]; then
+ ICON=$YABAI_FULLSCREEN_ZOOM
+ elif [[ $SPLIT == "vertical" ]]; then
+ ICON=$YABAI_SPLIT_VERTICAL
+ elif [[ $SPLIT == "horizontal" ]]; then
+ ICON=$YABAI_SPLIT_HORIZONTAL
+ else
+ ICON=$YABAI_GRID
+ fi
+
+ args=(--bar --animate sin 10 --set $NAME icon=$ICON icon.color=$COLOR)
+ # args=(--bar border_color=$COLOR --animate sin 10 --set $NAME icon=$ICON icon.color=$COLOR)
+
+ [ -z "$LABEL" ] && args+=(label.drawing=off) ||
+ args+=(label.drawing=on label="$LABEL" label.color=$COLOR)
+
+ [ -z "$ICON" ] && args+=(icon.width=0) ||
+ args+=(icon="$ICON")
+
+ sketchybar -m "${args[@]}"
+}
+
+windows_on_spaces() {
+ /usr/bin/python3 $CONFIG_DIR/plugins/space.py # New spaces python script to consolidate spaces
+}
+
+mouse_clicked() {
+ yabai -m window --toggle float
+ window_state
+}
+
+case "$SENDER" in
+"mouse.clicked")
+ mouse_clicked
+ ;;
+"forced")
+ exit 0
+ ;;
+"window_focus")
+ window_state
+ ;;
+# "windows_on_spaces" | "space_change")
+# windows_on_spaces
+# ;;
+esac
diff --git a/mac/.config/sketchybar/plugins/zen.sh b/mac/.config/sketchybar/plugins/zen.sh
new file mode 100644
index 0000000..38f2291
--- /dev/null
+++ b/mac/.config/sketchybar/plugins/zen.sh
@@ -0,0 +1,43 @@
+#!/bin/bash
+
+zen_on() {
+ sketchybar --set wifi drawing=off \
+ --set apple.logo drawing=off \
+ --set '/cpu.*/' drawing=off \
+ --set calendar icon.drawing=off \
+ --set separator drawing=off \
+ --set front_app drawing=off \
+ --set volume_icon drawing=off \
+ --set spotify.anchor drawing=off \
+ --set spotify.play updates=off \
+ --set brew drawing=off \
+ --set volume drawing=off \
+ --set github.bell drawing=off
+}
+
+zen_off() {
+ sketchybar --set wifi drawing=on \
+ --set apple.logo drawing=on \
+ --set '/cpu.*/' drawing=on \
+ --set calendar icon.drawing=on \
+ --set separator drawing=on \
+ --set front_app drawing=on \
+ --set volume_icon drawing=on \
+ --set spotify.play updates=on \
+ --set brew drawing=on \
+ --set volume drawing=on \
+ --set github.bell drawing=on
+}
+
+if [ "$1" = "on" ]; then
+ zen_on
+elif [ "$1" = "off" ]; then
+ zen_off
+else
+ if [ "$(sketchybar --query apple.logo | jq -r ".geometry.drawing")" = "on" ]; then
+ zen_on
+ else
+ zen_off
+ fi
+fi
+
diff --git a/mac/.config/sketchybar/sketchybarrc b/mac/.config/sketchybar/sketchybarrc
new file mode 100644
index 0000000..f97aa3a
--- /dev/null
+++ b/mac/.config/sketchybar/sketchybarrc
@@ -0,0 +1,56 @@
+PLUGIN_DIR="$CONFIG_DIR/plugins"
+ITEM_DIR="$CONFIG_DIR/items"
+
+# Load global styles, colors and icons
+source "$CONFIG_DIR/globalstyles.sh"
+
+POPUP_CLICK_SCRIPT="sketchybar --set \$NAME popup.drawing=toggle"
+POPUP_OFF="sketchybar --set \$NAME popup.drawing=off"
+
+# Setting up and starting the helper process
+HELPER=git.felix.helper
+killall helper
+(cd $CONFIG_DIR/helper && make)
+$CONFIG_DIR/helper/helper $HELPER >/dev/null 2>&1 &
+
+# Unload the macOS on screen indicator overlay for volume change
+launchctl unload -F /System/Library/LaunchAgents/com.apple.OSDUIHelper.plist >/dev/null 2>&1 &
+
+sketchybar --bar "${bar[@]}" --default "${item_defaults[@]}"
+
+# Left
+# source "$ITEM_DIR/apple.sh"
+source "$ITEM_DIR/yabai.sh"
+source "$ITEM_DIR/spaces.sh"
+source "$ITEM_DIR/front_app.sh"
+
+# Center
+# source "$ITEM_DIR/spotify.sh"
+# source "$ITEM_DIR/media.sh"
+source "$ITEM_DIR/music.sh"
+
+# Right
+# source "$ITEM_DIR/datetime.sh"
+# source "$ITEM_DIR/weather.sh"
+source "$ITEM_DIR/github.sh"
+source "$ITEM_DIR/brew.sh"
+# source "$ITEM_DIR/package_monitor.sh"
+# source "$ITEM_DIR/wifi.sh"
+# source "$ITEM_DIR/battery.sh"
+# source "$ITEM_DIR/keyboard.sh"
+# source "$ITEM_DIR/mic.sh"
+# source "$ITEM_DIR/volume.sh"
+source "$ITEM_DIR/kakaotalk.sh"
+source "$ITEM_DIR/mail.sh"
+# source "$ITEM_DIR/thunderbird.sh"
+source "$ITEM_DIR/svim.sh"
+source "$ITEM_DIR/messages.sh"
+source "$ITEM_DIR/toggle_stats.sh"
+source "$ITEM_DIR/separator_right.sh"
+source "$ITEM_DIR/disk.sh"
+source "$ITEM_DIR/memory.sh"
+source "$ITEM_DIR/cpu.sh"
+# source "$ITEM_DIR/network.sh"
+
+sketchybar --hotload on
+sketchybar --update
diff --git a/mac/.config/skhd/skhdrc b/mac/.config/skhd/skhdrc
new file mode 100644
index 0000000..b4a3d81
--- /dev/null
+++ b/mac/.config/skhd/skhdrc
@@ -0,0 +1,215 @@
+# open terminal
+alt - return : /Applications/Kitty.app/Contents/MacOS/kitty --single-instance -d ~ &> /dev/null
+
+# # open mpv with url from clipboard
+# shift + cmd - m : mpv $(pbpaste)
+
+# focus window
+alt - z : yabai -m window --focus recent
+alt - h : yabai -m window --focus west
+alt - j : yabai -m window --focus south
+alt - k : yabai -m window --focus north
+alt - l : yabai -m window --focus east
+alt - 0x2B : yabai -m window --focus stack.prev # alt + ,
+alt - 0x2F : yabai -m window --focus stack.next # alt + .
+
+# swap window
+alt + ctrl - z : yabai -m window --swap recent
+alt + ctrl - h : yabai -m window --swap west
+alt + ctrl - j : yabai -m window --swap south
+alt + ctrl - k : yabai -m window --swap north
+alt + ctrl - l : yabai -m window --swap east
+
+# move window
+cmd + ctrl - h : yabai -m window --warp west
+cmd + ctrl - j : yabai -m window --warp south
+cmd + ctrl - k : yabai -m window --warp north
+cmd + ctrl - l : yabai -m window --warp east
+
+# balance size of windows
+alt - 0x18 : yabai -m space --balance
+
+# toggle window float
+cmd + shift - return : yabai -m window --toggle float --grid 4:4:1:1:2:2
+# make floating window fill screen
+cmd + shift - f : yabai -m window --grid 1:1:0:0:1:4
+# make floating window fill top-left of screen
+cmd + shift - u : yabai -m window --grid 2:2:0:0:0:0
+# make floating window fill top-right of screen
+cmd + shift - i : yabai -m window --grid 2:2:1:0:0:0
+# make floating window fill bottom-left of screen
+cmd + shift - m : yabai -m window --grid 2:2:0:1:0:0
+# make floating window fill bottom-right of screen
+cmd + shift - 0x2B : yabai -m window --grid 2:2:1:1:4:4
+# make floating window fill top-half of screen
+cmd + shift - k : yabai -m window --grid 4:4:0:0:4:2
+# make floating window fill bottom-half of screen
+cmd + shift - j : yabai -m window --grid 2:2:0:1:4:4
+# make floating window fill left-half of screen
+cmd + shift - h : yabai -m window --grid 1:2:0:0:1:1
+# make floating window fill right-half of screen
+cmd + shift - l : yabai -m window --grid 1:2:1:0:1:1
+
+
+# # create desktop, move window and follow focus - uses jq for parsing json (brew install jq)
+alt + shift - w : yabai -m space --create && \
+ index="$(yabai -m query --spaces --display | jq 'map(select(."native-fullscreen" == 0))[-1].index')" && \
+ yabai -m window --space "${index}" && \
+ yabai -m space --focus "${index}"
+
+# # create desktop and follow focus - uses jq for parsing json (brew install jq)
+alt + ctrl - w : yabai -m space --create && \
+ index="$(yabai -m query --spaces --display | jq 'map(select(."native-fullscreen" == 0))[-1].index')" && \
+ yabai -m space --focus "${index}"
+
+# destroy desktop
+# cmd + alt - w : yabai -m space --destroy
+alt + ctrl - x : yabai -m space --focus prev && yabai -m space recent --destroy
+
+
+# fast focus desktop
+alt - 0x32 : yabai -m space --focus recent
+alt - 0x21 : yabai -m space --focus prev || skhd -k "ctrl + alt + cmd - p"
+alt - 0x1E : yabai -m space --focus next || skhd -k "ctrl + alt + cmd - n"
+alt - 1 : yabai -m space --focus 1 || skhd -k "ctrl + alt + cmd - 1"
+alt - 2 : yabai -m space --focus 2 || skhd -k "ctrl + alt + cmd - 2"
+alt - 3 : yabai -m space --focus 3 || skhd -k "ctrl + alt + cmd - 3"
+alt - 4 : yabai -m space --focus 4 || skhd -k "ctrl + alt + cmd - 4"
+alt - 5 : yabai -m space --focus 5 || skhd -k "ctrl + alt + cmd - 5"
+alt - 6 : yabai -m space --focus 6 || skhd -k "ctrl + alt + cmd - 6"
+alt - 7 : yabai -m space --focus 7 || skhd -k "ctrl + alt + cmd - 7"
+alt - 8 : yabai -m space --focus 8 || skhd -k "ctrl + alt + cmd - 8"
+alt - 9 : yabai -m space --focus 9 || skhd -k "ctrl + alt + cmd - 9"
+alt - 0 : yabai -m space --focus 10 || skhd -k "ctrl + alt + cmd - 0"
+alt + cmd - 1 : yabai -m space --focus 11 || skhd -k "ctrl + alt + cmd - 11"
+alt + cmd - 2 : yabai -m space --focus 12 || skhd -k "ctrl + alt + cmd - 12"
+alt + cmd - 3 : yabai -m space --focus 13 || skhd -k "ctrl + alt + cmd - 13"
+alt + cmd - 4 : yabai -m space --focus 14 || skhd -k "ctrl + alt + cmd - 14"
+alt + cmd - 5 : yabai -m space --focus 15 || skhd -k "ctrl + alt + cmd - 15"
+alt + cmd - 6 : yabai -m space --focus 16 || skhd -k "ctrl + alt + cmd - 16"
+alt + cmd - 7 : yabai -m space --focus 17 || skhd -k "ctrl + alt + cmd - 17"
+alt + cmd - 8 : yabai -m space --focus 18 || skhd -k "ctrl + alt + cmd - 18"
+alt + cmd - 9 : yabai -m space --focus 19 || skhd -k "ctrl + alt + cmd - 19"
+alt + cmd - 0 : yabai -m space --focus 20 || skhd -k "ctrl + alt + cmd - 20"
+
+# send window to desktop
+alt + ctrl - 0x21 : yabai -m window --space prev
+alt + ctrl - 0x1E : yabai -m window --space next
+alt + ctrl - 1 : yabai -m window --space 1
+alt + ctrl - 2 : yabai -m window --space 2
+alt + ctrl - 3 : yabai -m window --space 3
+alt + ctrl - 4 : yabai -m window --space 4
+alt + ctrl - 5 : yabai -m window --space 5
+alt + ctrl - 6 : yabai -m window --space 6
+alt + ctrl - 7 : yabai -m window --space 7
+alt + ctrl - 8 : yabai -m window --space 8
+alt + ctrl - 9 : yabai -m window --space 9
+alt + ctrl - 0 : yabai -m window --space 10
+
+# send window to desktop and follow focus
+alt + shift - 0x32 : yabai -m window --space recent && yabai -m space --focus recent
+alt + shift - 0x21 : yabai -m window --space prev && skhd -k "ctrl + alt + cmd - p" || yabai -m space --focus prev
+alt + shift - 0x1E : yabai -m window --space next && skhd -k "ctrl + alt + cmd - n" || yabai -m space --focus next
+alt + shift - 1 : yabai -m window --space 1 && skhd -k "ctrl + alt + cmd - 1" || yabai -m space --focus 1
+alt + shift - 2 : yabai -m window --space 2 && skhd -k "ctrl + alt + cmd - 2" || yabai -m space --focus 2
+alt + shift - 3 : yabai -m window --space 3 && skhd -k "ctrl + alt + cmd - 3" || yabai -m space --focus 3
+alt + shift - 4 : yabai -m window --space 4 && skhd -k "ctrl + alt + cmd - 4" || yabai -m space --focus 4
+alt + shift - 5 : yabai -m window --space 5 && skhd -k "ctrl + alt + cmd - 5" || yabai -m space --focus 5
+alt + shift - 6 : yabai -m window --space 6 && skhd -k "ctrl + alt + cmd - 6" || yabai -m space --focus 6
+alt + shift - 7 : yabai -m window --space 7 && skhd -k "ctrl + alt + cmd - 7" || yabai -m space --focus 7
+alt + shift - 8 : yabai -m window --space 8 && skhd -k "ctrl + alt + cmd - 8" || yabai -m space --focus 8
+alt + shift - 9 : yabai -m window --space 9 && skhd -k "ctrl + alt + cmd - 9" || yabai -m space --focus 9
+alt + shift - 0 : yabai -m window --space 10 && skhd -k "ctrl + alt + cmd - 0" || yabai -m space --focus 0
+
+# focus monitor
+cmd + ctrl - z : yabai -m display --focus recent
+cmd + ctrl - 0x21 : yabai -m display --focus prev
+cmd + ctrl - 0x1E : yabai -m display --focus next
+cmd + ctrl - 1 : yabai -m display --focus 1
+cmd + ctrl - 2 : yabai -m display --focus 2
+cmd + ctrl - 3 : yabai -m display --focus 3
+
+# send window to monitor and follow focus
+cmd + shift - r : yabai -m window --display recent && yabai -m display --focus recent
+cmd + shift - 0x21 : yabai -m window --display prev && yabai -m display --focus prev
+cmd + shift - 0x1E : yabai -m window --display next && yabai -m display --focus next
+cmd + shift - 1 : yabai -m window --display 1 && yabai -m display --focus 1
+cmd + shift - 2 : yabai -m window --display 2 && yabai -m display --focus 2
+cmd + shift - 3 : yabai -m window --display 3 && yabai -m display --focus 3
+
+# move window
+ctrl + shift - h : yabai -m window --move rel:-20:0
+ctrl + shift - j : yabai -m window --move rel:0:20
+ctrl + shift - k : yabai -m window --move rel:0:-20
+ctrl + shift - l : yabai -m window --move rel:20:0
+
+# increase window size
+alt + ctrl - a : yabai -m window --resize left:-20:0
+alt + ctrl - s : yabai -m window --resize bottom:0:20
+alt + ctrl - w : yabai -m window --resize top:0:-20
+alt + ctrl - d : yabai -m window --resize right:20:0
+
+# decrease window size
+cmd + ctrl - a : yabai -m window --resize left:20:0
+cmd + ctrl - s : yabai -m window --resize bottom:0:-20
+cmd + ctrl - w : yabai -m window --resize top:0:20
+cmd + ctrl - d : yabai -m window --resize right:-20:0
+
+# set insertion point in focused container
+cmd + ctrl - 0x7B : yabai -m window --insert west
+cmd + ctrl - 0x7D : yabai -m window --insert south
+cmd + ctrl - 0x7E : yabai -m window --insert north
+cmd + ctrl - 0x7C : yabai -m window --insert east
+cmd + ctrl - i : yabai -m window --insert stack
+
+# rotate tree
+alt - r : yabai -m space --rotate 90
+
+# mirror tree y-axis
+alt - y : yabai -m space --mirror y-axis
+
+# mirror tree x-axis
+alt - x : yabai -m space --mirror x-axis
+
+# toggle desktop offset
+alt - d : yabai -m space --toggle padding --toggle gap
+
+# toggle window parent zoom
+alt + ctrl - f : yabai -m window --toggle zoom-parent
+
+# toggle window fullscreen zoom
+alt - f : yabai -m window --toggle zoom-fullscreen
+
+# toggle window native fullscreen
+alt + shift - f : yabai -m window --toggle native-fullscreen
+
+# toggle window split type
+alt - s : yabai -m window --toggle split
+
+# float / unfloat window and restore position
+alt - t : yabai -m window --toggle float && /tmp/yabai-restore/$(yabai -m query --windows --window | jq -re '.id').restore 2>/dev/null || true
+
+# toggle sticky (show on all spaces)
+alt - 0x27 : yabai -m window --toggle sticky
+
+# toggle topmost (keep above other windows)
+alt - o : yabai -m window --toggle topmost
+
+# toggle picture-in-picture
+alt - i : yabai -m window --toggle border --toggle pip
+
+# change layout of desktop
+# alt + ctrl - 1 : yabai -m space --layout bsp
+# alt + ctrl - 2 : yabai -m space --layout float
+alt + ctrl - t : yabai -m space --layout $(yabai -m query --spaces --space | jq -r 'if .type == "bsp" then "float" else "bsp" end')
+
+###########################################################
+### --- Starting/Stopping/Restarting Yabai
+###########################################################
+# stop/start/restart yabai
+alt + cmd + ctrl - q : yabai --stop-service
+alt + cmd + ctrl - s : yabai --start-service
+alt + cmd + ctrl - r : yabai --restart-service
+alt + cmd + shift - q : skhd --stop-service
+alt + cmd + shift - s : skhd --start-service
+alt + cmd + shift - r : skhd --restart-service
diff --git a/mac/.config/vscode/argv.json b/mac/.config/vscode/argv.json
new file mode 100644
index 0000000..764fb7a
--- /dev/null
+++ b/mac/.config/vscode/argv.json
@@ -0,0 +1,20 @@
+// This configuration file allows you to pass permanent command line arguments to VS Code.
+// Only a subset of arguments is currently supported to reduce the likelihood of breaking
+// the installation.
+//
+// PLEASE DO NOT CHANGE WITHOUT UNDERSTANDING THE IMPACT
+//
+// NOTE: Changing this file requires a restart of VS Code.
+{
+ // Use software rendering instead of hardware accelerated rendering.
+ // This can help in cases where you see rendering issues in VS Code.
+ // "disable-hardware-acceleration": true,
+
+ // Allows to disable crash reporting.
+ // Should restart the app if the value is changed.
+ "enable-crash-reporter": true,
+
+ // Unique id used for correlating crash reports sent from this instance.
+ // Do not edit this value.
+ "crash-reporter-id": "ab80ece9-6a06-484b-bd05-3861238d6615"
+} \ No newline at end of file
diff --git a/mac/.config/yabai/yabairc b/mac/.config/yabai/yabairc
new file mode 100644
index 0000000..a717336
--- /dev/null
+++ b/mac/.config/yabai/yabairc
@@ -0,0 +1,102 @@
+#!/usr/bin/env sh
+
+# necessary to load scripting-addition during startup on macOS Big Sur
+# *yabai --load-sa* is configured to run through sudo without a password
+sudo yabai --load-sa
+yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"
+
+# mission-control desktop labels
+yabai -m space 1 --label Terminal
+yabai -m space 2 --label Code
+yabai -m space 3 --label Browser
+yabai -m space 4 --label Notes
+yabai -m space 5 --label Temp
+yabai -m space 6 --label Finder
+yabai -m space 7 --label Settings
+yabai -m space 8 --label Media
+yabai -m space 9 --label Messenger
+yabai -m space 10 --label Mail
+
+# window rules
+yabai -m rule --add app="^kitty$" space=1
+yabai -m rule --add app="^Code$" space=2
+yabai -m rule --add app="^Safari$" space=3
+yabai -m rule --add app="^Google Chrome$" space=3
+yabai -m rule --add app="^Firefox$" space=3
+yabai -m rule --add app="^(Microsoft Word|Preview|Notes|Obsidian|Anki)$" space=4
+yabai -m rule --add app="^Excel$" space=4 manage=off
+yabai -m rule --add app="^(MySQLWorkbench|DBeaver)$" space=5
+yabai -m rule --add app="^Finder$" space=6
+yabai -m rule --add app="^(universalAccessAuthWarn|Activity Monitor|Archive Utility|Alfred Preferences|Bartender 5|BetterTouchTool|Karabiner-Elements|System Settings)$" space=7
+yabai -m rule --add app="^IINA$" space=8
+yabai -m rule --add app="^Music$" space=8
+yabai -m rule --add app="^Spotify$" space=8
+yabai -m rule --add app="^Discord$" space=9 grid=1:1:0:0:1:1
+yabai -m rule --add app="^Messages$" space=9 grid=1:1:0:0:1:1
+yabai -m rule --add app="^KakaoTalk$" space=9 grid=1:1:0:0:1:1
+yabai -m rule --add app="^WeChat$" space=9 grid=1:1:0:0:1:1
+yabai -m rule --add app="^WhatsApp$" space=9 grid=1:1:0:0:1:1
+yabai -m rule --add app="^Log in$" space=9 grid=1:1:0:0:1:1 manage=off
+yabai -m rule --add app="^Mail$" space=10 grid=1:1:0:0:1:1
+yabai -m rule --add app="^Thunderbird$" space=10 grid=1:1:0:0:1:1
+yabai -m rule --add app="^FaceTime$" manage=off
+yabai -m rule --add app="^CleanShot X$" manage=off
+# yabai -m rule --add app="^mpv$" manage=off border=off sticky=on layer=above opacity=1.0 grid=8:8:6:0:2:2
+
+# signals
+yabai -m signal --add event=window_destroyed active=yes action="yabai -m query --windows --window &> /dev/null || yabai -m window --focus mouse &> /dev/null || yabai -m window --focus \$(yabai -m query --windows --space | jq .[0].id) &> /dev/null"
+yabai -m signal --add event=window_minimized active=yes action="if \$(yabai -m query --windows --window \$YABAI_WINDOW_ID | jq -r '.\"is-floating\"'); then yabai -m query --windows --window &> /dev/null || yabai -m window --focus mouse &> /dev/null || yabai -m window --focus \$(yabai -m query --windows --space | jq .[0].id) &> /dev/null; fi"
+
+# specific space settings bsp/float/stack
+yabai -m config --space 1 layout bsp
+yabai -m config --space 2 layout bsp
+yabai -m config --space 3 layout bsp
+yabai -m config --space 4 layout bsp
+yabai -m config --space 5 layout bsp
+yabai -m config --space 6 layout bsp
+yabai -m config --space 7 layout float
+yabai -m config --space 8 layout bsp
+yabai -m config --space 9 layout bsp
+yabai -m config --space 0 layout float
+
+# global settings
+yabai -m config \
+ \
+ mouse_follows_focus on \
+ focus_follows_mouse autoraise \
+ window_placement first_child \
+ window_topmost off \
+ window_shadow off \
+ window_opacity on \
+ window_opacity_duration 0.25 \
+ active_window_opacity 0.90 \
+ normal_window_opacity 0.50 \
+ window_animation_duration 0.25 \
+ insert_feedback_color 0xaad75f5f \
+ split_ratio 0.50 \
+ split_type auto \
+ auto_balance off \
+ mouse_modifier ctrl \
+ mouse_action1 move \
+ mouse_action2 resize \
+ mouse_drop_action swap \
+ layout bsp \
+ top_padding 10 \
+ left_padding 10 \
+ right_padding 10 \
+ bottom_padding 35 \
+ window_gap 10 # external_bar all:32:0 \
+
+# sketchybar
+yabai -m signal --add event=window_focused action="sketchybar --trigger window_focus"
+yabai -m signal --add event=display_added action="sleep 3 && $HOME/.config/yabai/create_spaces.sh"
+yabai -m signal --add event=display_removed action="sleep 3 && $HOME/.config/yabai/create_spaces.sh"
+yabai -m signal --add event=window_created action="sketchybar -m --trigger window_change &> /dev/null"
+yabai -m signal --add event=window_destroyed action="sketchybar -m --trigger window_change &> /dev/null"
+
+# borders
+borders \
+ style=squre \
+ active_color=0xff00ff00 \
+ width=6 \
+ hidpi=on &
diff --git a/mac/.local/bin/menu b/mac/.local/bin/menu
new file mode 100755
index 0000000..32fcfff
--- /dev/null
+++ b/mac/.local/bin/menu
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+query="switch"
+
+if [ "$query" == "switch" ]; then
+ osascript <<EOF
+tell application "System Events"
+ tell dock preferences
+ set autohide menu bar to not autohide menu bar
+ end tell
+end tell
+
+display notification "Menu bar autohide feature is toggled" with title "Menu Bar Autohide"
+EOF
+fi