diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml
new file mode 100644
index 000000000..54724cb87
--- /dev/null
+++ b/.github/workflows/documentation.yml
@@ -0,0 +1,35 @@
+name: Build and deploy material mkdocs to gh-pages
+on:
+ push:
+ branches:
+ - dev
+ workflow_dispatch:
+jobs:
+ check_gradle_files_change:
+ name: "Check docs files changed"
+ runs-on: ubuntu-latest
+ outputs:
+ DOCS_FILES_CHANGED: ${{ steps.docs_changed.outputs.any_changed }}
+ steps:
+ - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
+ with:
+ submodules: 'recursive'
+ - name: Check that docs changed
+ id: docs_changed
+ uses: tj-actions/changed-files@40853de9f8ce2d6cfdc73c1b96f14e22ba44aec4 # v45.0.0
+ with:
+ files: |
+ docs/**
+ mkdocs.yml
+ deploy:
+ needs: [ check_gradle_files_change ]
+ if: ${{ needs.check_gradle_files_change.DOCS_FILES_CHANGED }} == true
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-python@v2
+ with:
+ python-version: 3.x
+ - run: pip install mkdocs-material
+ - run: pip install mkdocs-minify-plugin
+ - run: mkdocs gh-deploy --force
\ No newline at end of file
diff --git a/README.md b/README.md
index bb9f1565b..65cc879dc 100644
--- a/README.md
+++ b/README.md
@@ -25,3 +25,13 @@ database
├── Toys
└── TVs
```
+
+## Run mkdocs locally
+
+Run docker compose
+
+```bash
+docker compose up
+```
+
+Open in browser `http://0.0.0.0:80000`
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 000000000..09546c033
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,7 @@
+services:
+ mkdocs:
+ image: squidfunk/mkdocs-material:latest
+ ports:
+ - 8000:8000
+ volumes:
+ - ./:/docs:ro
diff --git a/docs/adding_remote.md b/docs/adding_remote.md
new file mode 100644
index 000000000..771f34b8b
--- /dev/null
+++ b/docs/adding_remote.md
@@ -0,0 +1,126 @@
+### Requirements
+
+To add remote you will need two things:
+
+- Flipper Zero
+- Understanding of json format
+
+### Creating IR file
+
+Let's imagine, you want to add new file.
+
+Firstly, you'll need to create `Infrared Remote` with your `Flipper` tool.
+
+Next, you'll need to download this remote via link or export
+
+
+
+
+
+### Creating configurations
+
+Configuration are required to handle device key mapping.
+You can see this links to see more about [avaliaable buttons](./avaliable_buttons.md)
+or [button aliases](./button_names.md).
+
+Let's create our configuration by example.
+
+We have `Dell_p7524qt.ir` file, which contains some set of ir keys.
+
+```
+Filetype: IR signals file
+Version: 1
+#
+name: Power
+type: parsed
+protocol: NEC
+address: 42 00 00 00
+command: 01 00 00 00
+#
+name: Ok
+type: parsed
+protocol: NEC
+address: 42 00 00 00
+command: 0D 00 00 00
+#
+name: Menu
+type: parsed
+protocol: NEC
+address: 42 00 00 00
+command: 54 00 00 00
+#
+name: Back
+type: parsed
+protocol: NEC
+address: 42 00 00 00
+command: 6D 00 00 00
+```
+
+The names of keys seems like understandable, but we need to map it into
+our [avaliaable buttons](./avaliable_buttons.md).
+
+So let's create `config.json` by reference on [button aliases](./button_names.md).
+
+```json
+{
+ "key_map": {
+ "PWR": {
+ "type": "NAME",
+ "key_name": "Power"
+ },
+ "OK": {
+ "type": "NAME",
+ "key_name": "Ok"
+ },
+ "MENU": {
+ "type": "NAME",
+ "key_name": "Menu"
+ },
+ "EXIT": {
+ "type": "NAME",
+ "key_name": "Back"
+ }
+ }
+}
+```
+
+In this `config.json` we mapped our set of keys:
+
+- `PWR` -> "Power"
+- `OK` -> "Ok"
+- `MENU` -> "Menu"
+- `EXIT` -> "Back"
+
+And now we are ready to create **Pull Request**
+
+### Creating PullRequest
+
+Clone the repository using git clone command
+
+```bash
+git clone https://github.com/flipperdevices/IRDB.git
+```
+
+Open `/database/categories` and lookup for your device category - TV, DVD etc.
+
+In each category there's dozens of brands. Lookup for you brand provider - Samsung, Xiamoi etc.
+
+Current path should be, for example, `/database/categories/TVs/Samsung` if your device is `TV` and brand is `Samsung`.
+
+Next, you'll need to know the model of your device.
+Let's imagine it `Samsung UE48JU6670`.
+You see there's no yet the model like that. So you need to create a new folder *without
+spaces* `/database/categories/TVs/Samsung/Samsung_UE48JU6670`.
+
+If there's already device model like that - you can modify `.ir` file and `config.json`. Or create entire new folder(not
+recommended) with custom postfix `_2`.
+
+Now you need to move your downloaded `.ir` file and `config.json`:
+
+- `/database/categories/TVs/Samsung/Samsung_UE48JU6670/Samsung_UE48JU6670.ir`
+- `/database/categories/TVs/Samsung/Samsung_UE48JU6670/config.json`
+
+Next, create new branch, push your changes and [create Pull Request](https://github.com/flipperdevices/IRDB/compare)
+just [like here](https://github.com/flipperdevices/IRDB/pull/7)
+
+Finally, see the green CI and wait for us to reply and merge!
\ No newline at end of file
diff --git a/docs/avaliable_buttons.md b/docs/avaliable_buttons.md
new file mode 100644
index 000000000..139de70fe
--- /dev/null
+++ b/docs/avaliable_buttons.md
@@ -0,0 +1,70 @@
+Here you can see all buttons we currently have
+
+See also avaliable [button aliases](button_names.md)
+
+- `PWR` -> Power enable button
+- `SHUTTER` -> Take a photo with camera
+- `VOL_UP` -> Increase volume
+- `VOL_DOWN` -> Decrease volume
+- `CH_UP` -> Next channel
+- `CH_DOWN` -> Previous channel
+- `FOCUS_MORE` -> Add focus
+- `FOCUS_LESS` -> Decrease focus
+- `ZOOM_UP` -> Zoom up
+- `ZOOM_DOWN` -> Zoom down
+- `RESET` -> Reset
+- `DOWN` -> Navigation button(for TV menu, for example) - down
+- `UP` -> Navigation button(for TV menu, for example) - up
+- `RIGHT` -> Navigation button(for TV menu, for example) - right
+- `LEFT` -> Navigation button(for TV menu, for example) - left
+- `NEXT` -> Next button for TV box
+- `PREVIOUS` -> Previous button for TV box
+- `TV` -> TV button fot TVs
+- `AUX` -> Change AUX mode
+- `HOME` -> Home button
+- `BACK` -> Back button
+- `MENU` -> Show/Open menu
+- `PLAY` -> Play/Resume playback
+- `MUTE` -> Mute sound
+- `EJECT` -> Eject disk
+- `FAN_SPEED` -> Change fan speed recursively
+- `NEAR` -> Near camera clipping plane
+- `FAR` -> Far camera clipping plane
+- `PAUSE` -> Pause playback
+- `RECORD` -> Start recording
+- `WIND_SPEED` -> Change wind speed recursively
+- `MODE` -> Change mode (TV Box, DVD)
+- `LIGHT` -> Increase/Decrease light recursively
+- `FAN_MEDIUM` -> Set fan speed to medium
+- `FAN_HIGH` -> Set fan mode to high
+- `FAN_LOW` -> Change fan speed to low
+- `STOP` -> Stop button (mostly for TV Box)
+- `EXIT` -> Exit(from menu, etc)
+- `INFO` -> Show info
+- `TIMER` -> Start timer, show timer menu
+- `OSCILLATE` -> Start oscillating (mostly for fans)
+- `TIMER_ADD` -> Increase timer value
+- `TIMER_REDUCE` -> Decrease timer value
+- `FAN_SPEED_UP` -> Increase fan speed
+- `FAN_SPEED_DOWN` -> Decrease fan speed
+- `SLEEP` -> Start sleep mode
+- `SHAKE_WIND` -> Same as oscillate, start shaking
+- `SWING` -> Same as oscillate, start swing
+- `OFF` -> Turn off the device
+- `BRIGHTNESS_UP` -> Increase brightness
+- `BRIGHTNESS_DOWN` -> Decrease brightness
+- `COLD_WIND` -> Set wind cold
+- `COOL` -> Set/increase cool
+- `WIND_TYPE` -> Change wind type
+- `TEMPERATURE_UP` -> Increase temperature
+- `TEMPERATURE_DOWN` -> Decrease temperature
+- `HEAT_ADD` -> Add heat
+- `HEAT_REDUCE` -> Reduce heat
+- `ENERGY_SAVE` -> Enter energy save mode
+- `OK` -> Ok button(mostly where up/left/right/down buttons located
+- `REW` -> Rewind button(mostly for playback)
+- `SET` -> Set button(mostly for TV box)
+- `DELETE` -> Delete button(mostly for TV Box)
+- `VOD` -> Enable VODs
+- `LIVE_TV` -> Set TV mode
+- `FAVORITE` -> Add to favorite
\ No newline at end of file
diff --git a/docs/button_names.md b/docs/button_names.md
new file mode 100644
index 000000000..9048e98b0
--- /dev/null
+++ b/docs/button_names.md
@@ -0,0 +1,414 @@
+Here you can see list of button aliases
+
+### What is button alias?
+
+The database of infrared files has a ton of different buttons.
+Every author of infrared file has a different definition of naming.
+Thus, the names of buttons are different.
+
+This list of aliases defines the finite set of button names, which can be used with IRDB.
+
+Please, use only aliases from this list for every [avaliable button](./avaliable_buttons.md)
+
+If you don't see here button or alias you need, contact us
+via [new issue](https://github.com/flipperdevices/IRDB/issues/new).
+
+### The list of button aliases
+
+#### PWR
+
+- power
+- pwr
+- pwron
+- power
+- power_r
+- on
+- on_off
+- on/off
+- power_on
+- power on
+- powertoggle
+
+#### SHUTTER
+
+- shutter
+- trigger
+- photo
+- picture
+
+#### VOL_UP
+
+- vol+
+- vol+_r
+- volup
+- vol_up
+- volu
+- volume_up
+- volume up
+- amp vol-
+- cent_volume_up
+- ch_vol+
+- master volume+
+- mastervol-
+
+#### VOL_DOWN
+
+- vol-
+- vol-_r
+- voldown
+- voldwn
+- vol_dn
+- vold
+- volume_down
+- volume down
+- vol_donw
+- vol_dwn
+- amp vol-
+- cent_volume_down
+- ch_vol-
+- master volume-
+- mastervol-
+- vol_down
+
+#### CH_UP
+
+- ch+
+- ch+_r
+- ch_next
+- chn_up
+- chann_up
+- chan up
+- up/ch+
+- tv_ch+
+
+#### CH_DOWN
+
+- ch-
+- ch-_r
+- ch_prev
+- chn_down
+- chann_down
+- chan down
+- tv_ch-
+
+#### FOCUS_MORE
+
+- focus-
+- focus_dwn
+- focusing-
+
+#### FOCUS_LESS
+
+- focus+
+- focus_up
+- focusing+
+
+#### ZOOM_UP
+
+- zoom+
+- ezoom+
+- zoom_up
+- digital zoom+
+- zoom_in
+- ezoom_in
+- zoomin
+
+#### ZOOM_DOWN
+
+- zoom-
+- ezoom-
+- zoom_down
+- digital zoom-
+- zoom out
+- zoom_out
+- ezoom_out
+
+#### RESET
+
+- reset
+
+#### DOWN
+
+- down
+- down_r
+
+#### UP
+
+- up
+- up_r
+
+#### RIGHT
+
+- right
+- right_r
+
+#### LEFT
+
+- left
+- left_r
+
+#### NEXT
+
+- next
+- next_r
+
+#### PREVIOUS
+
+- previous
+- previous_r
+
+#### TV
+
+- tv
+- tv_av
+- tv_r
+- tvp3
+- livetv
+- hd tv
+
+#### AUX
+
+- aux
+- aux_r
+- input aux
+- input aux_r
+
+#### HOME
+
+- home
+- home_r
+
+#### BACK
+
+- back
+- back_r
+
+#### MENU
+
+- menu
+- menu_r
+- pop-up menu
+- shortcut menu
+
+#### PLAY
+
+- play
+- play_r
+
+#### MUTE
+
+- mute
+- mute_r
+
+#### EJECT
+
+- eject
+
+#### FAN_SPEED
+
+- fanspeed
+- fan_speed
+- speed
+
+#### NEAR
+
+- near
+- p_near
+
+#### FAR
+
+- far
+
+#### PAUSE
+
+- pause
+
+#### RECORD
+
+- record
+
+#### WIND_SPEED
+
+- wind_speed
+- strength
+
+#### MODE
+
+- mode
+- mode_r
+
+#### LIGHT
+
+- light
+
+#### FAN_MEDIUM
+
+- medium
+
+#### FAN_HIGH
+
+- high
+
+#### FAN_LOW
+
+- low
+
+#### STOP
+
+- stop
+- stop_r
+
+#### EXIT
+
+- exit
+
+#### INFO
+
+- info
+
+#### TIMER
+
+- timer
+
+#### OSCILLATE
+
+- oscillate
+- osc
+- oscillation
+- oscilate
+- oscil
+
+#### TIMER_ADD
+
+- timer+
+
+#### TIMER_REDUCE
+
+- timer-
+
+#### FAN_SPEED_UP
+
+- fanspeed+
+- fan+
+- fan +
+- fan_up
+- speed_up
+
+#### FAN_SPEED_DOWN
+
+- fanspeed-
+- fan-
+- fan -
+- fan_dn
+- speed_down
+
+#### SLEEP
+
+- sleep
+
+#### SHAKE_WIND
+
+- shake_wind
+
+#### SWING
+
+- swing
+
+#### OFF
+
+- off
+- power_off
+- power off
+- poweroff
+- pwroff
+
+#### BRIGHTNESS_UP
+
+- +brightness
+- bright_up
+- brightness up
+- brightness_up
+
+#### BRIGHTNESS_DOWN
+
+- -brightness
+- brightness_down
+- brightness_dn
+- bright_down
+
+#### COLD_WIND
+
+- cold wind
+
+#### COOL
+
+- cool
+
+#### WIND_TYPE
+
+- wind_type
+
+#### TEMPERATURE_UP
+
+- temperature_up
+- temp+
+
+#### TEMPERATURE_DOWN
+
+- temperature_down
+- temp-
+
+#### HEAT_ADD
+
+- heat+
+- heat_hi
+- heat_up
+
+#### HEAT_REDUCE
+
+- heat_down
+- heat-
+- heat_lo
+
+#### ENERGY_SAVE
+
+- energy save
+- energy save_r
+
+#### OK
+
+- ok
+- enter
+- center
+- apply
+- sure
+
+#### REW
+
+- rew
+
+#### SET
+
+- set
+
+#### DELETE
+
+- del
+- delete
+
+#### VOD
+
+- vod
+
+#### LIVE_TV
+
+- live tv
+- live tv_r
+- livetv
+- tv
+- letv
+
+#### FAVORITE
+
+- favorites
+- favorite
\ No newline at end of file
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 000000000..086bd4734
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,3 @@
+Welcome to Flipper IRDB wiki
+
+Please, navigate with categories to view information you need
\ No newline at end of file
diff --git a/docs/media/favicon.png b/docs/media/favicon.png
new file mode 100644
index 000000000..f21fa4560
Binary files /dev/null and b/docs/media/favicon.png differ
diff --git a/docs/media/share_remote.jpg b/docs/media/share_remote.jpg
new file mode 100644
index 000000000..1d119d7b7
Binary files /dev/null and b/docs/media/share_remote.jpg differ
diff --git a/mkdocs.yml b/mkdocs.yml
new file mode 100644
index 000000000..38a72100f
--- /dev/null
+++ b/mkdocs.yml
@@ -0,0 +1,148 @@
+site_name: IRDB docs
+site_url: https://flipperzero.one/
+site_author: flipperdevices
+site_description: >-
+ IRDB docs
+
+# Repository
+repo_name: flipperdevices/IRDB
+repo_url: https://github.com/flipperdevices/IRDB/
+
+# Copyright
+copyright: Copyright © 2024 - 2024 Flipper Devices
+
+
+# Configuration
+theme:
+ name: 'material'
+ # Don't include MkDocs' JavaScript
+ include_search_page: false
+ search_index_only: true
+
+ # Default values, taken from mkdocs_theme.yml
+ language: en
+ features:
+ - navigation.tabs
+ # - navigation.expand
+ - announce.dismiss
+ - content.action.edit
+ - content.action.view
+ - content.code.annotate
+ - content.code.copy
+ # - content.code.select
+ # - content.footnote.tooltips
+ # - content.tabs.link
+ - content.tooltips
+ # - header.autohide
+ # - navigation.expand
+ - navigation.footer
+ - navigation.indexes
+ # - navigation.instant
+ # - navigation.instant.prefetch
+ # - navigation.instant.progress
+ # - navigation.prune
+ - navigation.sections
+ - navigation.tabs
+ # - navigation.tabs.sticky
+ - navigation.top
+ - navigation.tracking
+ - search.highlight
+ - search.share
+ - search.suggest
+ - toc.follow
+ # - toc.integrate
+ palette:
+ - scheme: default
+ toggle:
+ icon: material/brightness-7
+ name: Switch to dark mode
+ primary: orange
+ accent: pink
+ - scheme: slate
+ toggle:
+ icon: material/brightness-4
+ name: Switch to light mode
+ primary: orange
+ accent: pink
+ font:
+ text: Roboto
+ code: Roboto Mono
+ favicon: /media/favicon.png
+ logo: /media/favicon.png
+ icon:
+ logo: logo
+
+# Plugins
+plugins:
+ - search:
+ separator: '[\s\u200b\-_,:!=\[\]()"`/]+|\.(?!\d)|&[lg]t;|(?!\b)(?=[A-Z][a-z])'
+ - minify:
+ minify_html: true
+
+# Customization
+extra:
+ social:
+ - icon: fontawesome/brands/github
+ link: https://github.com/flipperdevices
+ - icon: fontawesome/brands/telegram
+ link: https://t.me/flipperzero
+ - icon: fontawesome/brands/discord
+ link: https://discord.gg/flipper
+
+# Extensions
+markdown_extensions:
+ - abbr
+ - admonition
+ - attr_list
+ - def_list
+ - footnotes
+ - md_in_html
+ - toc:
+ permalink: true
+ - pymdownx.arithmatex:
+ generic: true
+ - pymdownx.betterem:
+ smart_enable: all
+ - pymdownx.caret
+ - pymdownx.details
+ - pymdownx.emoji:
+ emoji_generator: !!python/name:material.extensions.emoji.to_svg
+ emoji_index: !!python/name:material.extensions.emoji.twemoji
+ - pymdownx.highlight:
+ anchor_linenums: true
+ line_spans: __span
+ pygments_lang_class: true
+ - pymdownx.inlinehilite
+ - pymdownx.keys
+ - pymdownx.magiclink:
+ normalize_issue_symbols: true
+ repo_url_shorthand: true
+ user: squidfunk
+ repo: mkdocs-material
+ - pymdownx.mark
+ - pymdownx.smartsymbols
+ - pymdownx.snippets:
+ auto_append:
+ - includes/mkdocs.md
+ - pymdownx.superfences:
+ custom_fences:
+ - name: mermaid
+ class: mermaid
+ format: !!python/name:pymdownx.superfences.fence_code_format
+ - pymdownx.tabbed:
+ alternate_style: true
+ combine_header_slug: true
+ slugify: !!python/object/apply:pymdownx.slugs.slugify
+ kwds:
+ case: lower
+ - pymdownx.tasklist:
+ custom_checkbox: true
+ - pymdownx.tilde
+
+# Page tree
+nav:
+ - "IRDB Docs":
+ - "Home": 'index.md'
+ - "Avaliable Buttons": 'avaliable_buttons.md'
+ - "Button Aliases": 'button_names.md'
+ - "Add remote": 'adding_remote.md'
\ No newline at end of file