diff --git a/keyboards/handwired/ferris/ferris.c b/keyboards/ferris/0_1/0_1.c
similarity index 97%
rename from keyboards/handwired/ferris/ferris.c
rename to keyboards/ferris/0_1/0_1.c
index 0e132fa984..dbdb0b4bdc 100644
--- a/keyboards/handwired/ferris/ferris.c
+++ b/keyboards/ferris/0_1/0_1.c
@@ -14,4 +14,4 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
-#include "ferris.h"
+#include "0_1.h"
diff --git a/keyboards/handwired/ferris/ferris.h b/keyboards/ferris/0_1/0_1.h
similarity index 100%
rename from keyboards/handwired/ferris/ferris.h
rename to keyboards/ferris/0_1/0_1.h
diff --git a/keyboards/handwired/ferris/config.h b/keyboards/ferris/0_1/config.h
similarity index 100%
rename from keyboards/handwired/ferris/config.h
rename to keyboards/ferris/0_1/config.h
diff --git a/keyboards/handwired/ferris/matrix.c b/keyboards/ferris/0_1/matrix.c
similarity index 100%
rename from keyboards/handwired/ferris/matrix.c
rename to keyboards/ferris/0_1/matrix.c
diff --git a/keyboards/handwired/ferris/rules.mk b/keyboards/ferris/0_1/rules.mk
similarity index 100%
rename from keyboards/handwired/ferris/rules.mk
rename to keyboards/ferris/0_1/rules.mk
diff --git a/keyboards/handwired/ferris/info.json b/keyboards/ferris/info.json
similarity index 100%
rename from keyboards/handwired/ferris/info.json
rename to keyboards/ferris/info.json
diff --git a/keyboards/handwired/ferris/keymaps/default/config.h b/keyboards/ferris/keymaps/default/config.h
similarity index 100%
rename from keyboards/handwired/ferris/keymaps/default/config.h
rename to keyboards/ferris/keymaps/default/config.h
diff --git a/keyboards/handwired/ferris/keymaps/default/keymap.json b/keyboards/ferris/keymaps/default/keymap.json
similarity index 100%
rename from keyboards/handwired/ferris/keymaps/default/keymap.json
rename to keyboards/ferris/keymaps/default/keymap.json
diff --git a/keyboards/handwired/ferris/keymaps/default/readme.md b/keyboards/ferris/keymaps/default/readme.md
similarity index 100%
rename from keyboards/handwired/ferris/keymaps/default/readme.md
rename to keyboards/ferris/keymaps/default/readme.md
diff --git a/keyboards/handwired/ferris/keymaps/json2crab.py b/keyboards/ferris/keymaps/json2crab.py
similarity index 100%
rename from keyboards/handwired/ferris/keymaps/json2crab.py
rename to keyboards/ferris/keymaps/json2crab.py
diff --git a/keyboards/ferris/keymaps/pierrec83/config.h b/keyboards/ferris/keymaps/pierrec83/config.h
new file mode 100644
index 0000000000..cf0fb7478e
--- /dev/null
+++ b/keyboards/ferris/keymaps/pierrec83/config.h
@@ -0,0 +1,39 @@
+/*
+Copyright 2020 Pierre Chevalier
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+// Set the mouse settings to a comfortable speed/accuracy trade-off,
+// assuming a screen refresh rate of 60 Htz or higher
+// The default is 50. This makes the mouse ~3 times faster and more accurate
+#define MOUSEKEY_INTERVAL 16
+// The default is 20. Since we made the mouse about 3 times faster with the previous setting,
+// give it more time to accelerate to max speed to retain precise control over short distances.
+#define MOUSEKEY_TIME_TO_MAX 40
+// The default is 300. Let's try and make this as low as possible while keeping the cursor responsive
+#define MOUSEKEY_DELAY 100
+// It makes sense to use the same delay for the mouseweel
+#define MOUSEKEY_WHEEL_DELAY 100
+// The default is 100
+#define MOUSEKEY_WHEEL_INTERVAL 50
+// The default is 40
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 100
+
+// Pick good defaults for enabling homerow modifiers
+#define TAPPING_TERM 200
+#define PERMISSIVE_HOLD
+#define IGNORE_MOD_TAP_INTERRUPT
+#define TAPPING_FORCE_HOLD
diff --git a/keyboards/ferris/keymaps/pierrec83/keymap.json b/keyboards/ferris/keymaps/pierrec83/keymap.json
new file mode 100644
index 0000000000..2372e7e372
--- /dev/null
+++ b/keyboards/ferris/keymaps/pierrec83/keymap.json
@@ -0,0 +1,118 @@
+{ "version": 1,
+ "notes": "My awesome keymap",
+ "documentation": "\"This file is a QMK Configurator export. You can import this at . It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: \n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n",
+ "keyboard": "handwired/ferris",
+ "keymap": "pierrec83",
+ "layout": "LAYOUT",
+ "layers": [
+ ["KC_Q" , "KC_D" , "KC_R" , "KC_W" , "KC_B",
+ "KC_J" , "KC_F" , "KC_U" , "KC_P" , "KC_SCLN",
+
+ "LSFT_T(KC_A)" , "LT(6,KC_S)" , "LT(2,KC_H)" , "LT(4,KC_T)" , "KC_G",
+ "KC_Y" , "LT(5,KC_N)" , "LT(3,KC_E)" , "LT(7,KC_O)" , "LSFT_T(KC_I)",
+
+ "KC_Z" , "LCTL_T(KC_X)" , "LALT_T(KC_M)" , "KC_C" , "KC_V",
+ "KC_K" , "KC_L" , "LALT_T(KC_COMM)", "LCTL_T(KC_DOT)" , "KC_SLSH",
+
+ "LCA(KC_UP)" , "KC_BSPC",
+ "LT(8,KC_SPC)" , "LCA(KC_DOWN)"
+ ],
+ ["KC_Q" , "KC_C" , "KC_M" , "KC_Y" , "KC_COLN",
+ "KC_Z" , "KC_W" , "KC_COMM" , "KC_U" , "KC_J",
+
+ "LSFT_T(KC_R)" , "LT(6,KC_S)" , "LT(2,KC_T)" , "LT(4,KC_H)" , "KC_X",
+ "KC_TRNS" , "LT(5,KC_N)" , "LT(3,KC_A)" , "LT(7,KC_I)" , "LSFT_T(KC_O)",
+
+ "KC_B" , "LCTL_T(KC_F)" , "LALT_T(KC_G)" , "KC_D" , "KC_V",
+ "KC_ESC" , "KC_L" , "LALT_T(KC_DOT)" , "LCTL_T(KC_BSPC)" , "KC_K",
+
+ "LCA(KC_UP)" , "KC_E",
+ "LT(8,KC_SPC)" , "LCA(KC_DOWN)"
+ ],
+ ["KC_TRNS" , "ANY(LCTL(LSFT(KC_C)))", "KC_TRNS" , "ANY(LCTL(LSFT(KC_V)))", "KC_TRNS",
+ "KC_TRNS" , "KC_BTN1" , "KC_WH_U" , "KC_BTN2" , "KC_TRNS",
+
+ "KC_TRNS" , "KC_BTN2" , "KC_NO" , "KC_BTN1" , "KC_TRNS",
+ "KC_TRNS" , "KC_MS_L" , "KC_MS_D" , "KC_MS_U" , "KC_MS_R",
+
+ "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
+ "KC_TRNS" , "KC_WH_L" , "KC_WH_D" , "KC_WH_R" , "KC_TRNS",
+
+ "ANY(LCTL(LSFT(KC_TAB)))", "KC_TRNS",
+ "KC_TRNS" , "LCTL(KC_TAB)"
+ ],
+ ["KC_TRNS" , "KC_TRNS" , "KC_PGUP" , "KC_TRNS" , "KC_TRNS",
+ "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
+
+ "KC_LEFT" , "KC_UP" , "KC_DOWN" , "KC_RGHT" , "KC_TRNS",
+ "KC_TRNS" , "KC_LGUI" , "KC_NO" , "LCTL(KC_LALT)" , "LCA(KC_LSFT)",
+
+ "KC_TRNS" , "KC_HOME" , "KC_PGDN" , "KC_END" , "KC_TRNS",
+ "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
+
+ "LGUI(KC_LEFT)" , "KC_TRNS",
+ "KC_TRNS" , "LGUI(KC_RGHT)"
+ ],
+ ["KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
+ "KC_TRNS" , "KC_UNDS" , "KC_PIPE" , "KC_QUOT" , "KC_TRNS",
+
+ "KC_CIRC" , "KC_ASTR" , "KC_AMPR" , "KC_NO" , "KC_TRNS",
+ "KC_HASH" , "KC_TILD" , "KC_SLSH" , "KC_DQUO" , "KC_DLR",
+
+ "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
+ "KC_TRNS" , "KC_MINS" , "KC_BSLS" , "KC_GRV" , "KC_TRNS",
+
+ "KC_BRID" , "KC_TRNS",
+ "KC_TRNS" , "KC_BRIU"
+ ],
+ ["KC_TRNS" , "KC_COLN" , "KC_LT" , "KC_GT" , "KC_SCLN",
+ "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
+
+ "KC_LCBR" , "KC_RCBR" , "KC_LPRN" , "KC_RPRN" , "KC_AT",
+ "KC_TRNS" , "KC_NO" , "KC_EQL" , "KC_PLUS" , "KC_PERC",
+
+ "KC_TRNS" , "KC_EXLM" , "KC_LBRC" , "KC_RBRC" , "KC_TRNS",
+ "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
+
+ "KC_VOLD" , "KC_TRNS",
+ "KC_TRNS" , "KC_VOLU"
+ ],
+ ["KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
+ "KC_TRNS" , "KC_F7" , "KC_F8" , "KC_F9" , "KC_F10",
+
+ "KC_TRNS" , "KC_TRNS" , "LCTL(KC_LALT)" , "KC_TRNS" , "KC_TRNS",
+ "KC_TRNS" , "KC_F4" , "KC_F5" , "KC_F6" , "KC_F11",
+
+ "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
+ "KC_TRNS" , "KC_F1" , "KC_F2" , "KC_F3" , "KC_F12",
+
+ "KC_TRNS" , "KC_TRNS",
+ "KC_TRNS" , "KC_TRNS"
+ ],
+ ["KC_PSLS" , "KC_7" , "KC_8" , "KC_9" , "KC_PPLS",
+ "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
+
+ "KC_0" , "KC_1" , "KC_2" , "KC_3" , "KC_PMNS",
+ "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_NO" , "KC_TRNS",
+
+ "KC_PAST" , "KC_4" , "KC_5" , "KC_6" , "KC_PEQL",
+ "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
+
+ "KC_TRNS" , "KC_TRNS",
+ "KC_TRNS" , "KC_TRNS"
+ ],
+ ["KC_TRNS" , "KC_ESC" , "KC_COLN" , "KC_TRNS" , "KC_TRNS",
+ "DF(2)" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_DEL",
+
+ "KC_TRNS" , "KC_PERC" , "KC_SLSH" , "KC_ENT" , "KC_EXLM",
+ "DF(1)" , "KC_LGUI" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
+
+ "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS",
+ "DF(0)" , "KC_TRNS" , "RALT_T(KC_COMM)", "RCTL_T(KC_DOT)" , "RESET",
+
+ "KC_TRNS" , "KC_TAB",
+ "KC_NO" , "KC_TRNS"
+ ]
+ ],
+ "author": "@pierrec83"
+}
diff --git a/keyboards/ferris/keymaps/pierrec83/readme.md b/keyboards/ferris/keymaps/pierrec83/readme.md
new file mode 100644
index 0000000000..d96a3bb811
--- /dev/null
+++ b/keyboards/ferris/keymaps/pierrec83/readme.md
@@ -0,0 +1,43 @@
+@pierrec83's personal keymap for the Ferris keyboard
+====================================================
+
+This keymap shares many commonalities with the default keymap.
+See its readme for a write-up on many of the decisions, including
+how to generate the formatted json file with json2crab.py and the
+general philosophy for each layer.
+
+Because this is my own keymap, I didn't refrain from using shortcuts
+that make sense for me and may not make sense for most.
+
+Key differences from the default keymap include:
+
+Alpha layers:
+-------------
+
+Because I only learned to touch type when I switched from qwerty to workman,
+my base layer is workman and my layout doesn't contain a qwerty layer.
+
+My layer 1 hosts a variant of RSTHD that I am developing, inspired from workman's
+focus on reducing side-index-motion. It should become my end game keymap eventually,
+but I still haven't found the time to learn it to a working proficiency.
+
+Secondary thumbs:
+-----------------
+
+Instead of a placeholder 0 and 1, the secondary thumbs on my keymap
+perform the following actions:
+* Navigate to previous and next workspace the base layer
+* Navigate to previous and next tab on the mouse layer
+* Volume control on layer
+* Brightness control on layer
+
+Mouse layer:
+------------
+
+* Copy/Paste shortcuts on the left hand, on the upper row.
+
+Always available layer:
+-----------------------
+
+* Esc and column are placed differently to allow easy vim navigation with the positions of w and q in the workman base layer
+* Enable permanent switch to the RSTHD layer in addition to the mouse layer
diff --git a/keyboards/handwired/ferris/readme.md b/keyboards/ferris/readme.md
similarity index 57%
rename from keyboards/handwired/ferris/readme.md
rename to keyboards/ferris/readme.md
index 23aeca874c..74a08a38fe 100644
--- a/keyboards/handwired/ferris/readme.md
+++ b/keyboards/ferris/readme.md
@@ -6,11 +6,14 @@
A split 34 keys column staggered keyboard named and decorated after the rustlang mascott. All PCB files and some thoughts on the design are available on the [project's github page](https://github.com/pierrechevalier83/ferris)
* Keyboard Maintainer: [Pierre Chevalier](https://github.com/pierrechevalier83)
-* Hardware Supported: Ferris PCB
-* Hardware Availability: Still in prototype stage
+* Hardware Supported:
+ * Ferris 0.1 (With atmega32u4 chip. Comes in 4 variants: base, low, high and compact)
+ * Ferris sweep (With pro-micro. Comes in a couple of PCB edge cuts shapes, but with identical pinout)
+* Hardware Availability: Pierre Chevalier has been selling keyboard kits (see the #ferris channel in the 40% discord chat). Wider availability is on the horizon.
-Make example for this keyboard (after setting up your build environment):
+Make examples for this keyboard (after setting up your build environment):
- make handwired/ferris:default
+ make ferris/0_1:default
+ make ferris/sweep:default:avrdude-split-right
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ferris/sweep/config.h b/keyboards/ferris/sweep/config.h
new file mode 100644
index 0000000000..ad960610d1
--- /dev/null
+++ b/keyboards/ferris/sweep/config.h
@@ -0,0 +1,74 @@
+/* Copyright 2018-2020 ENDO Katsuhiro David Philip Barr <@davidphilipbarr> Pierre Chevalier
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xC2AB
+#define PRODUCT_ID 0x3939
+#define DEVICE_VER 0x0001
+#define MANUFACTURER DPB
+#define PRODUCT Ferris sweep
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 5
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ * NO_DIODE = switches are directly connected to AVR pins
+ *
+*/
+#define DIRECT_PINS { \
+ { E6, F7, F6, F5, F4 }, \
+ { B1, B3, B2, B6, D3 }, \
+ { D1, D0, D4, C6, D7 }, \
+ { B4, B5, NO_PIN, NO_PIN, NO_PIN } \
+}
+
+#define DIRECT_PINS_RIGHT { \
+ { F4, F5, F6, F7, E6 }, \
+ { D3,B6,B2,B3,B1 }, \
+ { D7,C6,D4,D0,D1}, \
+ { B5, B4, NO_PIN, NO_PIN, NO_PIN } \
+}
+
+
+
+#define UNUSED_PINS
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* Serial settings */
+#define USE_SERIAL
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D2
+
+#define EE_HANDS
diff --git a/keyboards/ferris/sweep/rules.mk b/keyboards/ferris/sweep/rules.mk
new file mode 100644
index 0000000000..ce4d52156d
--- /dev/null
+++ b/keyboards/ferris/sweep/rules.mk
@@ -0,0 +1,24 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+UNICODE_ENABLE = yes # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+SPLIT_KEYBOARD = yes # Use shared split_common code
diff --git a/keyboards/ferris/sweep/sweep.c b/keyboards/ferris/sweep/sweep.c
new file mode 100644
index 0000000000..5b41bad848
--- /dev/null
+++ b/keyboards/ferris/sweep/sweep.c
@@ -0,0 +1,16 @@
+/* Copyright 2018-2020 ENDO Katsuhiro David Philip Barr <@davidphilipbarr> Pierre Chevalier
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include "sweep.h"
diff --git a/keyboards/ferris/sweep/sweep.h b/keyboards/ferris/sweep/sweep.h
new file mode 100644
index 0000000000..e8d66ebc67
--- /dev/null
+++ b/keyboards/ferris/sweep/sweep.h
@@ -0,0 +1,47 @@
+/* Copyright 2018-2020 ENDO Katsuhiro David Philip Barr <@davidphilipbarr> Pierre Chevalier
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+
+// readability
+#define ___ KC_NO
+
+#define LAYOUT( \
+ L01, L02, L03, L04, L05, R01, R02, R03, R04, R05, \
+ L06, L07, L08, L09, L10, R06, R07, R08, R09, R10, \
+ L11, L12, L13, L14, L15, R11, R12, R13, R14, R15, \
+ L16, L17, R16, R17 \
+ ) \
+ { \
+ { L01, L02, L03, L04, L05 }, \
+ { L06, L07, L08, L09, L10 }, \
+ { L11, L12, L13, L14, L15 }, \
+ { L16, L17, ___, ___ , ___}, \
+ { R01, R02, R03, R04, R05 }, \
+ { R06, R07, R08, R09, R10 }, \
+ { R11, R12, R13, R14, R15 }, \
+ { R16, R17, ___, ___, ___ } \
+ }
+