+When you'd like to perform custom logic when pressing a one shot key, there are several callbacks you can choose to implement. You could indicate changes in one shot keys by flashing an LED or making a sound, for example.
+
+There is a callback for `OSM(mod)`. It is called whenever the state of any one shot modifier key is changed: when it toggles on, but also when it is toggled off. You can use it like this:
+
+```c
+void oneshot_mods_changed_user(uint8_t mods) {
+ if (mods & MOD_MASK_SHIFT) {
+ println("Oneshot mods SHIFT");
+ }
+ if (mods & MOD_MASK_CTRL) {
+ println("Oneshot mods CTRL");
+ }
+ if (mods & MOD_MASK_ALT) {
+ println("Oneshot mods ALT");
+ }
+ if (mods & MOD_MASK_GUI) {
+ println("Oneshot mods GUI");
+ }
+ if (!mods) {
+ println("Oneshot mods off");
+ }
+}
+```
+
+The `mods` argument contains the active mods after the change, so it reflects the current state.
+
+When you use One Shot Tap Toggle (by adding `#define ONESHOT_TAP_TOGGLE 2` in your `config.h` file), you may lock a modifier key by pressing it the specified amount of times. There's a callback for that, too:
+
+```c
+void oneshot_locked_mods_changed_user(uint8_t mods) {
+ if (mods & MOD_MASK_SHIFT) {
+ println("Oneshot locked mods SHIFT");
+ }
+ if (mods & MOD_MASK_CTRL) {
+ println("Oneshot locked mods CTRL");
+ }
+ if (mods & MOD_MASK_ALT) {
+ println("Oneshot locked mods ALT");
+ }
+ if (mods & MOD_MASK_GUI) {
+ println("Oneshot locked mods GUI");
+ }
+ if (!mods) {
+ println("Oneshot locked mods off");
+ }
+}
+```
+
+Last, there is also a callback for the `OSL(layer)` one shot key:
+
+```c
+void oneshot_layer_changed_user(uint8_t layer) {
+ if (layer == 1) {
+ println("Oneshot layer 1 on");
+ }
+ if (!layer) {
+ println("Oneshot layer off");
+ }
+}
+```
+
+If any one shot layer is switched off, `layer` will be zero. When you're looking to do something on any layer change instead of one shot layer changes, `layer_state_set_user` is a better callback to use.
+
+If you are making your own keyboard, there are also `_kb` equivalent functions:
+
+```c
+void oneshot_locked_mods_changed_kb(uint8_t mods);
+void oneshot_mods_changed_kb(uint8_t mods);
+void oneshot_layer_changed_kb(uint8_t layer);
+```
+
+As with any callback, be sure to call the `_user` variant to allow for further customizability.
+
+# Tap-Hold Configuration Options
+
+While Tap-Hold options are fantastic, they are not without their issues. We have tried to configure them with reasonal defaults, but that may still cause issues for some people.
+
+These options let you modify the behavior of the Tap-Hold keys.
+
+## Permissive Hold