Create Decker Project Structure authored by Armin Bernstetter's avatar Armin Bernstetter
# Decker Project Structure
This page gives a quick overview over the structure of the Decker repository.
Standard files such as `makefile` or `Dockerfile` are not expanded upon here.
## Haskell Setup Files
Decker is a project using the [Haskell Tool Stack](https://docs.haskellstack.org/en/stable/README/) as build tool.
For more detailed information regarding the files listed below please check Stack's documentation.
Files that are needed by stack:
- `Setup.hs`: This file is mainly used to zip and append the `resource` directory to the executable during `Stack` runtime i.e. when Decker is being compiled.
- `package.yaml`: The file describing the project to `Stack`. Lists the project structure and the needed dependencies
-``stack.yaml`: Telling `Stack` which compiler flags to use and which version of the stack "resolver"
## Files that are used by editor extensions but otherwise irrelevant
- hie.yaml
- brittany.yaml
- floskell.yaml
## app
Contains only the file `Decker.hs` which is the `main` Haskell file describing the behavior of the application `Decker`.
## attic
Outdated/obsolete files that might become relevant again at some point in time.
## bin
- `build.ps1`: The main build file for the Windows executable. (see also `makefile`)
- `check-formatting.sh`: An outdated file checking the formatting of the Haskell code
## doc
Internal discussions and documentation of development plans/goals
## resource
The resources needed by decker at runtime. This directory gets zipped and appended to the `Decker` executable.
- `example`: A decker example project
- `support`: Files needed by Decker at presentation time. Includes `CSS` and `JavaScript` files as well as fonts.
- `template`: Template files needed by Decker at runtime e.g. when building the HTML files from Markdown
## src
The main Haskell source code directory.
TODO: Detailed breakdown of the source code?
## `src-unix` and `src-win`
Haskell code specific to the respective operating system.
## test
Includes Haskell test code as well as several slide decks showcasing Decker features.
Decker uses the [`Hspec` testing framework for Haskell](https://hspec.github.io/). `Spec.hs` is the main source file.
## third-party
Third-party submodules used by decker.
- `symlinks.mk`: Prepares/builds and copies third-party software to `resource/support/vendor`. Is called by `makefile``
- `vendor.ps1`: A PowerShell script analogous to `symlinks.mk`. Called by `bin/build.ps1`
## users-guide
A WIP guide for Decker that can be built as `pdf` and/or `html` file using the `makefile` which calls `pandoc`.
```
.
├── app
│ └── Decker.hs
├── attic
│ ├── Cache.hs
│ ├── Dachdecker.hs
│ └── help-page.md
├── bin
│ ├── build.ps1
│ └── check-formatting.sh
├── doc
│ ├── electron-decker-ui.png
│ ├── future-world.md
│ ├── gui-architecture-page.md
│ ├── haskell-resources-page.md
│ ├── media-filter-report-page.md
│ ├── media-filtering-workshop-2020-02.md
│ ├── packaging-page.md
│ ├── quiz-page.md
│ ├── readme.md
│ ├── release-policy-page.md
│ ├── resource-handling-page.md
│ └── smart-image-urls-page.md
├── resource
│ ├── example
│ ├── support
│ ├── template
│ └── tutorial
├── src
│ └── Text
├── src-unix
│ └── System
├── src-win
│ └── System
├── test
│ ├── decks
│ ├── minimal
│ ├── static
│ ├── IncludeTests.hs
│ ├── MediaTests.hs
│ ├── MetaTests.hs
│ ├── ShortLinkTests.hs
│ ├── Spec.hs
│ ├── WatchTests.hs
│ ├── minimal.zip
│ └── reload.html
├── third-party
│ ├── Font-Awesome
│ ├── MathJax
│ ├── jquery
│ ├── reveal.js
│ ├── thebelab
│ ├── vanilla-lazyload
│ ├── water.css
│ ├── symlinks.mk
│ └── vendor.ps1
├── users-guide
│ ├── decker-d-gray.svg
│ ├── decker-users-guide.css
│ ├── decker-users-guide.html
│ ├── decker-users-guide.md
│ ├── decker-users-guide.pdf
│ └── makefile
├── Dockerfile
├── Dockerfile-prebuilt
├── LICENSE
├── Setup.hs
├── brittany.yaml
├── decker.yaml
├── floskell.json
├── hie.yaml
├── makefile
├── package.yaml
├── readme.md
├── stack.yaml
```
\ No newline at end of file