diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..0aee181 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,23 @@ +name: Builds +run-name: ${{ github.actor }} runs Gitea Actions +on: [push] + +jobs: + ExectOS WebSite: + runs-on: oscw + container: + image: codingworkshop/oscw-runner:latest + steps: + - name: Clone repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Build WebSite + run: hugo + - name: Publish WebSite + if: ${{ github.ref == 'refs/heads/master' }} + env: + OSCW_ARTIFACTS_HOSTNAME: ${{ secrets.OSCW_ARTIFACTS_HOSTNAME }} + OSCW_ARTIFACTS_USERNAME: ${{ secrets.OSCW_ARTIFACTS_USERNAME }} + OSCW_ARTIFACTS_USERKEY: ${{ secrets.OSCW_ARTIFACTS_USERKEY }} + run: webpage_publish public/ 1e8c78e4764c760b3d20991c8b769cf5 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8dd6d56 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +public/ +.hugo_build.lock diff --git a/README.md b/README.md index 1cd8978..92e2f09 100644 --- a/README.md +++ b/README.md @@ -1 +1,2 @@ ## ExectOS Web Site +This repository contains the entire content of the ExectOS Website, powered by the Hugo Static Site Generator. diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..39049b3 --- /dev/null +++ b/config.toml @@ -0,0 +1,43 @@ +baseURL = "https://exectos.eu.org/" +disableKinds = ["taxonomy"] +title = "ExectOS Operating System" +theme = "exectos" +languageCode = "en-us" +defaultContentLanguage = "en" +paginate = 10 + +[menu] + +[[menu.main]] + name = "Documentation" + pre = "
" + url = "/documentation" + weight = 1 + +[[menu.main]] + name = "Contributing" + pre = "
" + url = "/contributing" + weight = 2 + +[[menu.main]] + name = "Download" + pre = "
" + url = "/download" + weight = 3 + +[[menu.main]] + name = "Source Code" + pre = "
" + url = "/source-code" + weight = 4 + +[[menu.main]] + name = "Discord" + pre = "
" + url = "https://discord.com/invite/zBzJ5qMGX7" + weight = 5 + +[params] + defaultKeywords = ["ExectOS", "XT", "XTOS", "efi", "gpl3", "kernel", "nt", "open source", "os", "osdev", "uefi boot", "win32"] + defaultDescription = "ExectOS Operating System" diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..2159e69 --- /dev/null +++ b/content/_index.md @@ -0,0 +1,48 @@ ++++ +title = 'About Exectos' +date = 2024-06-16T12:12:40+02:00 ++++ +## About +ExectOS aims to be a stable and flexible, general purpose operating system written from scratch. It is designed to be +modular, maintainable and compatible with existing software. It implements a brand new XT architecture and features own +native application interface. On the backend, it contains a powerful driver model between device drivers and the kernel, +that enables kernel level components to be upgraded without a need to recompile all drivers. + +## XT Architecture +ExectOS is a preemptive, reentrant multitasking operating system that implements the XT architecture which derives from +NT™ architecture. It is modular, and consists of two main layers: microkernel and user modes. Its' kernel mode has +full access to the hardware and system resources and runs code in a protected memory area. It consists of executive +services, which is itself made up on many modules that do specific tasks, a kernel and drivers. Unlike the NT™, system +does not feature a separate Hardware Abstraction Layer (HAL) between the physical hardware and the rest of the OS. Instead, +XT architecture integrates a hardware specific code with the kernel. The user mode is made up of subsystems and it has been +designed to run applications written for many different types of operating systems. This allows us to implement any +environment subsystem to support applications that are strictly written to the corresponding standard (eg. DOS, or POSIX). +Thanks to that ExectOS will allow to run existing software, including Win32 applications. + +## Features + * Completely free, Open Source and community-driven modern Operating System. + * Native multiple architecture support. It runs on x86 and x86_64 and is portable to other architectures. + * Hardware layer API allows for a single unified kernel. There is no need to maintain a separate kernel forks. + * Uses a couple of ideas from other open source projects, but it’s our own ideas that really sets us apart and defines + ExectOS. The majority of code is original, not forked. + * Modular design for better compatibility with existing software and drivers, enabling binaries to remain compatible even + when the core system is updated. + * Own, XT drivers for commonly used devices as well as NT™ drivers compatibility layer for better hardware support. + * Technical support directly from the architects and developers of the system. + +## Why + * We believe, there is no ideal Operating System on the market. During ExectOS development, we try to bring most useful + features known from existing solutions, while keeping compatibility with NT™ architecture at desired level. + * Some of our ideas differ greatly from other projects and it is much easier if we do not have to fight legacy code and + ideas. + * We need the freedom to break things when necessary. + +## Goals + * Keep the greatest advantages of the NT™ architecture, while implementing new features and technologies known from + other Operating Systems. + * Flexibility where it makes sense to provide flexibility. + * Be able to deliver features that other non-commercial Operating Systems consider too ambitious. + +## Requirements +ExectOS is in very early development stage, thus its requirements have been not specified yet. However according to its +design, it requires a modern EFI enabled hardware. It is not possible currently to boot ExectOS on a legacy BIOS. diff --git a/content/contact-us.md b/content/contact-us.md new file mode 100644 index 0000000..d858288 --- /dev/null +++ b/content/contact-us.md @@ -0,0 +1,45 @@ ++++ +title = 'Contact Us' +date = 2024-06-17T18:11:52+02:00 ++++ +### Discord +ExectOS has a Discord Server to socialize, get support, support others, learn, contribute, collaborate, and stay up to +date on all things related to XTOS and Open Source. This is also a place where you can meet ExectOS Developers. Everyone +is welcome to [Join our Discord Server](https://discord.com/invite/zBzJ5qMGX7). + +### Why Discord? +Discord is a VoIP instant messaging and digital distribution platform. It + * is broadly accessible, + * is popular with non-technical people, + * broadens the appeal of XTOS beyond traditional spaces and audiences, + * allows for communication over voice, video, and text. + +### Guidelines & Rules + 1. Treat everyone with respect. Absolutely no harassment, witch hunting, sexism, racism, or hate speech will be tolerated. + 2. No age-restricted or obscene content. This includes text, images, or links featuring nudity, sex, hard violence, or + other graphically disturbing content. + 3. No spam or self-promotion (server invites, advertisements, etc) without permission from a staff member. This includes + DMing fellow members. + 4. Do not share real media depicting gore, excessive violence, or animal harm, especially with the intention to harass + or shock others. + 5. Do not share content that violates anyone's intellectual property or other rights. + 6. Do not distribute or provide access to content involving the hacking, cracking, or distribution of stolen goods, + pirated content, or accounts. + 7. If you see something against the rules or something that makes you feel unsafe, let staff know. We want this server + to be a welcoming space! + +### How to use Discord? + * [Official Discord client for any device](https://discord.com/download) + * [Discord Client via the Web Browser](https://discord.gg/) + * Any third-party client + +### Channel Overview + * **Activity**: Staying up-to-date with GIT and development activity. + * **Announcements**: Staying informed and up-to-date with important activities. + * **General**: Getting help, helping and supporting others, leveling up knowledge, participating and contributing. + * **Offtopic**: Connecting and enjoying time with other people in the community. + +## ExectOS Channels +Discover more about ExectOS and dive into a world of insightful content by visiting our official +[YouTube](https://www.youtube.com/@XT-Sys-dg3yf) channel. Join our growing community of followers and stay up-to-date +with ExectOS by subscribing and turning on notifications. Visit us now and start watching! diff --git a/content/contributing.md b/content/contributing.md new file mode 100644 index 0000000..5db5eb8 --- /dev/null +++ b/content/contributing.md @@ -0,0 +1,17 @@ ++++ +title = 'Contributing' +date = 2024-06-16T22:31:24+02:00 ++++ +### Contributing to Community + * [Contributing to ExectOS](/contributing/contributing-to-exectos) + +### Contributing Documentation + * [Updating and Writing Documentation](/contributing/writing-documentation) + +### Contributing Code + * [Building ExectOS](/contributing/building-exectos) + * [Clean Room Guidelines](/contributing/clean-room-guidelines) + * [Developing ExectOS](/contributing/developing-exectos) + * [ExectOS Coding Style](/contributing/coding-style) + * [First steps with GIT](/contributing/working-with-git) + * [Submitting Patches](/contributing/submitting-patches) diff --git a/content/contributing/building-exectos.md b/content/contributing/building-exectos.md new file mode 100644 index 0000000..ce1baa3 --- /dev/null +++ b/content/contributing/building-exectos.md @@ -0,0 +1,58 @@ ++++ +title = 'Building ExectOS' +date = 2024-06-18T16:37:24+02:00 ++++ +ExectOS must be compiled with the XTChain toolchain. Make sure you have already [downloaded](/download) and installed it. +Once this is done and the source code is ready, open a terminal and launch the XTChain Build Environment. +``` +xtchain +``` +Then, set your target build architecture and the build type and configure the project. Choose `i686` or `amd64` depending +on the architecture you wish to target. The build type can be either `DEBUG` for debugging purposes or `RELEASE` for +a production build. +``` +charch [i686|amd64] +chbuild [DEBUG|RELEASE] +./configure.sh +``` +After the sources are configured, navigate to the build directory and compile the source code. +``` +cd build +xbuild +``` +Afterwards, you will find the binaries in `build/output/binaries` directory. Apart from that, depending on build type, you +can also find a debug symbols in PDB format in `build/output/symbols` folder and precompiled libraries that can be used to +link other software using XTDK in `build/output/library` + +## Creating Qemu Disk Image +If you want to build a disk image that is ready to use with Qemu, you can use the following command: +``` +xbuild diskimg +``` +This will create a disk image that you can boot within a Qemu Virtual Machine, or convert to other format for use within +other hypervisor, like VirtualBox. + +## Testing with Qemu +After successfully compiling ExectOS, you can test it using Qemu with either hardware virtualization (KVM) or software +emulation (TCG). To start Qemu with KVM, use the `testkvm` target, and for TCG emulation, use the `testtcg` target. These +targets are provided for convenience and you can run these commands from your build directory. +``` +xbuild testkvm # For KVM hardware virtualization +``` +or +``` +xbuild testtcg # For TCG software emulation +``` +These commands will automatically configure Qemu with the appropriate settings for ExectOS and start the virtual machine. +In addition to Qemu, you can also use Bochs for emulation. Bochs is an IA-32 (x86) PC emulator that provides a different +emulation environment. To launch Bochs with the ExectOS image, run the following command: +``` +xbuild bochsvm +``` +This will start the Bochs emulator with ExectOS loaded, allowing you to test the system in an environment that may offer +different debugging capabilities compared to Qemu. + +Remember that the performance and debugging features will vary depending on whether you use KVM, TCG, or Bochs. KVM +requires that your host machine supports hardware virtualization, while TCG is a pure software emulator which works on +systems without hardware virtualization. Bochs provides a rich set of debugging features, which can be useful when +troubleshooting complex issues. diff --git a/content/contributing/clean-room-guidelines.md b/content/contributing/clean-room-guidelines.md new file mode 100644 index 0000000..880acae --- /dev/null +++ b/content/contributing/clean-room-guidelines.md @@ -0,0 +1,36 @@ ++++ +title = 'Clean Room Guidelines' +date = 2024-06-17T23:11:23+02:00 ++++ +You sometimes run into a need to use the [clean-room design](http://en.wikipedia.org/wiki/Clean_room_design) techniques +to work around the problem without infringing on any copyrights. While you attempt at reverse engineering, all +corresponding contributions should follow +[Council Directive 91/250/EEC](https://eur-lex.europa.eu/legal-content/EN/ALL/?uri=celex%3A31991L0250), and +[Directive (EU) 2016/943](https://eur-lex.europa.eu/eli/dir/2016/943/oj) of the European Parliament and any newer +directives related to reverse engineering. As per +[Article 6 Decompilation 1. (a)](https://eur-lex.europa.eu/legal-content/EN/ALL/?uri=celex%3A31991L0250) you must own +a legal copy/license of the software before doing any attempts at reverse engineering. The software must be officially +deprecated and/or obsolete. If you live outside of the European Union, you should follow similar rules described in legal +acts issued by the local authorities if they conform to the EU law. This especially means, that + +#### You are allowed to: + * **Decompile for Interoperability**: According to the directives, decompilation is permissible when it's necessary to + achieve interoperability with other software. This means you can reverse engineer parts of the software to understand + the underlying interfaces. + * **Own a Legal Copy**: You must own a legal copy or license of the software you wish to reverse engineer. This ensures + that your starting point is within legal bounds. + * **Work with Obsolete Software**: The software you reverse engineer should be obsolete or no longer maintained by the + manufacturer. This typically applies to software that is no longer receiving updates or support. + +#### You are NOT allowed to: + * **Infringe Copyrights**: You must not reproduce code or utilize proprietary algorithms from the software without + permission, as this would infringe on the copyright. + * **Break Protection Measures**: You are not permitted to crack or bypass any form of copy protection or digital rights + management that the software employs. + * **Commercially Exploit the Work**: You should not use the knowledge gained from reverse engineering for commercial + exploitation or to create direct competitors, unless you have specific agreements that allow for such activities. + * **Reveal Trade Secrets**: It is generally illegal to uncover and reveal trade secrets through the process of reverse + engineering. + +Remember, laws and regulations vary by jurisdiction and change over time, so it's crucial to stay updated on the current +laws. \ No newline at end of file diff --git a/content/contributing/coding-style.md b/content/contributing/coding-style.md new file mode 100644 index 0000000..c32674e --- /dev/null +++ b/content/contributing/coding-style.md @@ -0,0 +1,6 @@ ++++ +title = 'ExectOS Coding Style' +date = 2024-06-18T00:20:07+02:00 ++++ +At the moment of writing this article, no coding style was established. You should check how existing code looks like and +follow its current formatting. diff --git a/content/contributing/contributing-to-exectos.md b/content/contributing/contributing-to-exectos.md new file mode 100644 index 0000000..d050eef --- /dev/null +++ b/content/contributing/contributing-to-exectos.md @@ -0,0 +1,30 @@ ++++ +title = 'Contributing to ExectOS' +date = 2024-06-17T22:35:51+02:00 ++++ +The ExectOS project and CodingWorkshop Team always seek new contributors from all skill levels. No matter if you are +a developer, tester, designer, or techwriter, your contributions are always appreciated. + +### Software Developers +We are always looking for people proficient in C and/or Assembly, especially familiar with tools such as Bochs, Qemu, +or VirtualBox. Writing an Operating System is not a beginner's task. In fact, writing an Operating System is usually +considered the most difficult programming task. Join the exclusive ranks of people knowing OSDev concepts, and yet +smaller ranks of people knowing the secrets of NT™ architecture. + +### Testers +No software is usable if it is found to be unstable. Writing an Operating System, is yet more complex task. Tester role +is responsible for assisting the development process by running [builds](/download) and providing a feedback. All and any +information about issues you encountered during this process can be +[reported](https://git.codingworkshop.eu.org/xt-sys/exectos/issues). The more detailed report is, the easier it will be +to fix it. At least basic knowledge in collecting information from a crash, like backtraces and knowledge of using +debugger will help you. When submitting issues, take care that the bug report is not a duplicate of an already existing, +open issue. You should always follow the template specified for issues in our Gitea. + +### Technical Writers +As a team, we focus mostly on OS development. We are looking for some creative people to update and write documentation, +post content to this website as well as social media accounts to promote ExectOS. New web site design ideas and bug fixes +are as well welcome. + +### Community Managers +The ExectOS community keeps in touch via [Discord](/contact-us). Community Manager role is responsible to keep people +involved, keep discussions going and moderate. diff --git a/content/contributing/developing-exectos.md b/content/contributing/developing-exectos.md new file mode 100644 index 0000000..9cb1618 --- /dev/null +++ b/content/contributing/developing-exectos.md @@ -0,0 +1,38 @@ ++++ +title = 'Developing ExectOS' +date = 2024-06-18T16:36:47+02:00 ++++ +We leave you free to choose your working environment, but we also recommend working with VS Code, or VS Codium. Both are +free to use, open-source IDEs, compatible with Windows, Linux, and macOS operating systems. They falls under the same +category as Atom, Sublime, and Text Wrangler, but they also has more advanced features. While the first one is am original +code editor from the Microsoft©, VS Codium is essentially a telemetry-free, open-source version of VS Code. + +### Recommended Extensions + * **[Clangd](https://open-vsx.org/extension/llvm-vs-code-extensions/vscode-clangd)**: helps developers write, + understand and improve C/C++ code by providing code completion, compile errors and warnings, hover information and + inlay hints, include management, code formatting and more. + * **[CMake](https://open-vsx.org/extension/twxs/cmake)**: extension provides support for CMake in Visual Studio Code. + * **[Codeium](https://open-vsx.org/extension/Codeium/codeium)**: modern coding superpower, a free code acceleration + toolkit built on cutting edge AI technology. Currently, Codeium provides autocomplete, chat, and search capabilities + in 70+ languages, with lightning fast speeds and state-of-the-art suggestion quality. + * **[GNU Assembler Language Support](https://open-vsx.org/extension/basdp/language-gas-x86)**: extension provides + language support for x86 and x86_64 assembly language in AT&T dialect. + * **[Markdown Preview Enhanced](https://open-vsx.org/extension/shd101wyy/markdown-preview-enhanced)**: extension that + provides many useful functionalities such as automatic scroll sync, math typesetting, mermaid, PlantUML, pandoc, + PDF export, code chunk, presentation writer, etc. + +### Getting Started with VS Code +Opening a project in Visual Studio Code is straightforward, especially that you can find `ExectOS.code-workspace` file +in project's GIT repository. Once you checkout the source code, you can open the workspace file directly from the command +line: +``` +code ExectOS.code-workspace +``` +Alternatively, you can start VS Code and use the menu options: + * Open Visual Studio Code. + * Go to File > Open Workspace from File... + * Navigate to the directory containing your cloned repository. + * Select the ExectOS.code-workspace file and click Open. + +VS Code will load everything defined in the workspace file, including folder structure and settings specific to the +ExectOS project. You're now ready to start working on the project. diff --git a/content/contributing/submitting-patches.md b/content/contributing/submitting-patches.md new file mode 100644 index 0000000..4ded142 --- /dev/null +++ b/content/contributing/submitting-patches.md @@ -0,0 +1,52 @@ ++++ +title = 'Submitting Patches' +date = 2024-06-17T23:47:42+02:00 ++++ +In order to review code better and use established lines of communication, we accept code in the form of Pull Requests +on our [Gitea](https://git.codingworkshop.eu.org/xt-sys/exectos/pulls) instance. The process may seem a little bit +complicated at first, but it will become very natural. It is important for us, to make sure the author and email settings +for your GIT are configured correctly. You should follow our '[Working with GIT](/contributing/working-with-git)' document, +but the key point is to use your real name and valid e-mail address. This is not just for developers to show a stronger +commitment and establish trust, but also helps discourage irresponsible programmers from submitting unacceptable code. +You will need a Gitea account which must also use your real name. You should be precise; having the names match helps in +identifying commits. + +### Patch Guidelines +In order to make your patches as easy to check as possible, try to keep them small, clear, and atomic: + * Include only closely related changes in one commit. + * Don't implement extra things that no one uses. + * Try to limit each merge request to only a few commits. + * Limit a commit to changing a single file or component. + +Above rules make the Pull Request easier to review. + +### Commit Message + + +### Quality Check +It never hurts to check through your changes one last time. Take a while, to look at each line of the patch and make sure +there are no unintentional or unrelated changes. Also make sure that the layout of your code conforms to our +[coding style](/contributing/coding-style). + +### Sending Pull Request +After checking in your local changes, you can submit a Pull Request on Gitea to get your changes upstream. This requires +you to be working on a Gitea fork. You should make up a temporary branch name for your changes. That branch will be deleted +once the merge request is merged, so it's better to avoid using the master branch directly. + +### Managing Pull Request +After you've submitted your merge request, a reviewer will be assigned to it, if someone is responsible for that area of +the code. You can also assign a reviewer yourself if you know who the right person is. If a reviewer gives some feedback +or a critique, carefully think about what they say and fix your patch before resubmitting. When updating your changes, you +can simply push the fixes as a new commit on top of your Pull Request. This is prefferred way, as allows us to compare +code before and after your fixes. All commits can be squashed by a reviewer upon merge. + +If your Pull Request remains in the queue for several weeks without being committed and without feedback, you can ask for +further suggestions on our [Discord](/contact-us) server. If you have patches rejected multiple times, don't be discouraged. +You might consider finding a mentor willing to pre-review your changes before you submit them again. + +### Reviewing Pull Request +If you are asked to review a merge request, and find things that need to be improved, you should add a comment to the merge +request from the Gitea interface. You can also fix things up yourself and push updated commits to the original branch, once +submitter explicitly give you access to his GIT repository. If you think that the merge request is good to go in, you +should mark it approved. As a rule, a merge request won't be committed until all reviewers have approved it. If you have +been assigned as a reviewer but you feel that you cannot meaningfully review the changes, feel free to unassign yourself. diff --git a/content/contributing/working-with-git.md b/content/contributing/working-with-git.md new file mode 100644 index 0000000..fee229b --- /dev/null +++ b/content/contributing/working-with-git.md @@ -0,0 +1,53 @@ ++++ +title = 'Working with GIT' +date = 2024-06-17T17:31:15+02:00 ++++ +The preferred method of contributing patches to ExectOS is via our self-hosted [Gitea](https://git.codingworkshop.eu.org) +instance. + +### Initial Setup +First of all you will have to create an account on our [Gitea](https://git.codingworkshop.eu.org) instance. Do note that +you can also use your existing GitHub or GitLab account via OAuth. Creating new account on our Gitea is pretty straight +forward, anyway: + 1. Go to our Gitea instance and click on "[Register](https://git.codingworkshop.eu.org/user/sign_up)" link in top, + right corner. + 2. Fill in your information. + 3. Add your SSH key(s) for easier pushing via SSH instead of HTTPS. + 4. Consider also enabling 2FA for improved security access and signing your commits with GPG. + +### Cloning Repositories + 1. Go to Gitea's frontage after you’ve signed in and search for the repository you want to clone. Click on its name to + open it. + 2. Click on 'Fork' button, to create your own copy of the repository. + 3. Either clone your fork of it, with + ``` + git clone ssh://git@git.codingworkshop.eu.org:8822//.git . + ``` + or if you already cloned the repo you can add your fork as remote, with + ``` + git remote add ssh://git@git.codingworkshop.eu.org:8822//.git + ``` + +### Proper GIT Setup +ExectOS uses GIT for Source Code Management (SCM) and GIT uses a username to associate commits with an identity. The GIT +username is not the same as your Gitea username. You can change the name that is associated with your GIT commits. The new +name you set will be visible in any future commits you push to Gitea from the command line. In order to accept your +patches, we require you to provide your real name and valid e-mail address. This can be done with the following commands: +``` +git config --global user.name "" +git config --global user.email "" +``` +Above command will update username and email globally, for every repository on your computer. Alternatively, these changes +can be introduced for a single repository, by changing the current working directory to the local repository where you want +to configure the name that is associated with your GIT commits and issueing the following commands: +``` +git config user.name "" +git config user.email "" +``` + +### Keeping Forks Updated +You should always ensure that you have the latest version of the repository you want to work on before starting your work to +avoid duplicating work and merge conflicts. You can do so with: +``` +git pull master --rebase +``` diff --git a/content/contributing/writing-documentation.md b/content/contributing/writing-documentation.md new file mode 100644 index 0000000..57a67af --- /dev/null +++ b/content/contributing/writing-documentation.md @@ -0,0 +1,36 @@ ++++ +title = 'Writing Documentation' +date = 2024-06-17T18:08:34+02:00 ++++ +Our documentation is integrated with this website and it is stored in GIT repository. This website is powered by the Hugo +Static Site Generator. All pages are created as simple Markdown files and everyone is free to submit Pull Requests to +enhance the website. This article will help you better understand the proper guidelines for submitting documentation. + +### Guidelines + * **Use standard English**: Use standard United States (U.S.) English throughout all technical publications. + * **Write in active-voice**: Active voice sentences clarify the performer of an action and are easier to understand than + passive-voice sentences. + * **Use present simple tense**: Users read documentation to perform tasks or gather information. For users, these + activities take place in their present, so the present tense is appropriate in most cases. + * **Write in second person**: Users are more engaged with documentation when you use second person (that is, you address + the user as "you"). + * **Use appropriate mood**: For procedures, use imperative mood. + * **Avoid ambiguous titles**: Each title should include a clear description of the page’s subject. + * **Write objectively**: Do not use humor, jargon, exclamation marks, idioms, metaphors, and other colloquialisms. + * **Write positively**: Write in a positive tone. Positive sentences improve readability. + * **Avoid personification**: Avoid the adverbs such as "probably", "hopefully", "basically", and so on. + * **Do not use contractions**: Generally, do not contract the words. + * **Use spelling and grammar checking tools**: Run text through spelling and grammar checking tools, if available. + +### Testing Documentation + 1. [Download](https://gohugo.io/) Hugo v0.125.7 or newer. + 2. Open a shell in the root of your repository and use below command to start server + ``` + hugo server -DF + ``` + 3. Open `http://localhost:1313/` in your browser to access the website and check the results. + +### Submitting Patches +We welcome patches for both documentation and the website. We use the GNU Free Documentation License 1.3 or later for all +documentation and website content. Contributions using other licenses are unlikely to be accepted. Patches should be +contributed via our [Gitea instance](https://git.codingworkshop.eu.org/xt-sys/website). diff --git a/content/documentation.md b/content/documentation.md new file mode 100644 index 0000000..d66d099 --- /dev/null +++ b/content/documentation.md @@ -0,0 +1,15 @@ ++++ +title = 'Documentation' +date = 2024-06-16T22:27:36+02:00 ++++ +### Getting Started + * [Frequently Asked Questions](/faq) + * [Get in Touch](/contact-us) + * [Installation Guide](/documentation/install-guide) + +### Contributing Documentation + * [Contributing to ExectOS](/contributing) + * [Working with GIT](/contributing/working-with-git) + +### Technical Details + * [XT Boot Loader](/documentation/xtldr) diff --git a/content/documentation/install-guide.md b/content/documentation/install-guide.md new file mode 100644 index 0000000..cd82342 --- /dev/null +++ b/content/documentation/install-guide.md @@ -0,0 +1,50 @@ ++++ +title = 'Installation Guide' +date = 2024-06-17T16:41:29+02:00 ++++ +ExectOS is in early development phase and thus it is NOT suitable for daily use, especially on real hardware. It is +recommended to run it in a virtual machine like Qemu or VirtualBox. Otherwise, you act at your own risk! + +### Running in Qemu +Running ExectOS in Qemu is straight-forward, as our build pipeline produces a disk image, that is ready to use in Qemu. +Once you download it and extract, you can use below commands to run the virtual machine, depending on the target CPU +architecture of the image. For x86_64 use: +``` +qemu-system-x86_64 -cpu host -enable-kvm -m 2G -hda disk-amd64.img -serial stdio \ + -drive file=sdk/firmware/ovmf_code_amd64.fd,if=pflash,format=raw,unit=0,readonly=on \ + -drive file=sdk/firmware/ovmf_vars_amd64.fd,if=pflash,format=raw,unit=1 + +``` +And for i686 use: +``` +qemu-system-i386 -cpu host -enable-kvm -m 1G -hda disk-i686.img -serial stdio \ + -drive file=sdk/firmware/ovmf_code_i686.fd,if=pflash,format=raw,unit=0,readonly=on \ + -drive file=sdk/firmware/ovmf_vars_i686.fd,if=pflash,format=raw,unit=1 + +``` +Above commands require an UEFI firmware to be available. It can be found in the +[ExectOS GIT repository](https://git.codingworkshop.eu.org/xt-sys/exectos/src/branch/master/sdk/firmware). + +### Running in VirtualBox +VirtualBox is commonly used for running the system in an isolated environment. In this case, the same disk image as +for Qemu can be used. However, it needs to be converted to QCOW2 format, that is supported by VirtualBox. This can be +done with the following command: +``` +qemu-img convert -O qcow2 disk.img disk.qcow2 +``` +Once, the disk image is converted, you can create a new virtual machine. As an Operating System, you can choose either +32-bit or 64-bit Windows® 10, depending on ExectOS disk image architecture. Just make sure, that EFI support is +enabled. + +### Running on Bare Metal +It is recommended to not install, nor run ExectOS on a real hardware. Otherwise, installation should be +straight-forward and self descriptive: + * Download a binary package or build XTOS yourself. + * Prepare a pendrive or USB stick. It should have at least first partition formatted as FAT32. + * Copy all binaries to USB drive, keeping the existing directory structure. Contents of the archive, or contents of + `build/output/binaries` is the root of your drive. Do NOT paste them into any subdirectory. + * Reboot the computer. + * Enter Firmware Setup or Boot Selection menu and choose your USB drive. + * Viola, enjoy! + +In case of any problems, take a photo of your screen and contact with ExectOS developers. diff --git a/content/documentation/xtldr.md b/content/documentation/xtldr.md new file mode 100644 index 0000000..a6f0204 --- /dev/null +++ b/content/documentation/xtldr.md @@ -0,0 +1,62 @@ ++++ +title = 'XT Boot Loader' +date = 2024-06-16T23:43:56+02:00 ++++ +XTLDR (abbreviation of XT Loader) is the boot loader dedicated for XTOS. It is the first program launched by the Unified +Extensible Firmware Interface (UEFI) of the computer and is responsible for loading the rest of ExectOS. The procedure is +quite different for UEFI and BIOS systems. However currently, legacy BIOS boot procedure is not supported by ExectOS. + +### UEFI +The Unified Extensible Firmware Interface (UEFI) has support for reading both the partition table as well as file systems. +UEFI does not launch any boot code from the Master Boot Record (MBR) whether it exists or not, instead booting relies on +boot entries in the NVRAM. The UEFI specification mandates support for the FAT12, FAT16, and FAT32 file systems, as well +as ISO9660 for optical discs. Any conformant vendor can optionally add support for additional file systems. + +UEFI launches EFI applications, e.g. boot loaders, boot managers, UEFI shell, etc. These applications are usually stored +as files in the EFI system partition (ESP). The applications can be launched by adding a boot entry to the NVRAM or from +the UEFI shell. + +### Startup Process +When a PC is powered on its UEFI firmware initializes the hardware components of the system. This includes CPU, memory, +and device initialization. Firmware has its own boot manager, which is responsible for loading UEFI applications stored +in the EFI System Partition (ESP), a dedicated partition on a data storage device, formatted with any from the supported +filesystem and attempts to load the selected EFI application (usually an OS bootloader) into memory and transfers control +to it. + +XTLDR accesses the file system on the ESP partition and reads the xtldr.ini file to determine what Operating Systems are +present. Also additional configuration, like debugging options is loaded. Afterwards, XTLDR loads additional modules, in +order to extend its functionality as well as to support additional file systems, that are normally not supported by UEFI. +This allows to boot Operating System kernel from the partition other to ESP. Then boot loader menu is presented to the +user. + +![XTLDR Boot Menu](/images/exectos/xtldr_boot_menu.png) + +After a user choose the position from the list, or timeout exceeded, XTLDR continues with loading additional modules, +specific to the chosen Operating System. If a non XTOS is selected, XTLDR loads the associated kernel file listed in the +configuration file and gives it control. Otherwise, if XTOS is selected, boot loader loads registry HIVE data, kernel +and boot drivers. Finally, starts the kernel, passing to it all the necessary information. + +### XTLDR Configuration +XTLDR's first action is to read the xtldr.ini file. It describes whole configuration for the boot loader as well as allows +the user to choose which Operating System to boot from at the menu. it also allows the user to pass preconfigured options +to the kernel. Regardless an OS, the location of the Operating System is written as an ARC (Advanced RISC Computing) path. +Below is an example of the xtldr.ini file: +``` +[XTLDR] +Debug=COM1,115200 +Default=ExectOS +KeepLastBoot=TRUE +Modules=beep +Timeout=10 +Tune=400 880 2 988 2 783 2 392 2 587 3 + +[ExectOS] +SystemName="ExectOS Operating System" +SystemType=XTOS +BootModules=xtos_o +SystemPath=multi(0)disk(0)rdisk(0)partition(1)/ExectOS +KernelFile=xtoskrnl.exe +Parameters=DEBUG=COM1,115200 +``` +A full list of configuration options with their descriptions can be found in the [example configuration](https://git.codingworkshop.eu.org/xt-sys/exectos/src/branch/master/bootdata/xtldr/xtldr.ini) +file in project's GIT repository. diff --git a/content/download.md b/content/download.md new file mode 100644 index 0000000..84aa247 --- /dev/null +++ b/content/download.md @@ -0,0 +1,20 @@ ++++ +title = 'Download' +date = 2024-06-16T22:35:11+02:00 ++++ +### ExectOS +ExectOS supports currently two architectures (i686 and AMD64). To get started today, either download a binaries for one of +supported architectures or test drive ExectOS on the QEMU emulator by downloading a disk image. You can find a full list +of files, available to download at [this page](https://artifacts.codingworkshop.eu.org/ExectOS/). Each file contains an +information about build date, SHA1, architecture and a type of artifact, eg: + * ExectOS-20240614-6b70074ec6-i686-bin.tar.gz - This archive contains a binary files that can be copied to USB disk and + booted up on bare metal hardware. + * ExectOS-20240614-6b70074ec6-i686-lib.tar.gz - Contains a libraries useful for building 3rd party drivers. + * ExectOS-20240614-6b70074ec6-i686-sym.tar.gz - This archive includes a debug symbols in PDB format. + * ExectOS-20240614-6b70074ec6-i686.img.gz - This is a compressed QEMU disk image, that can be used with this emulator. + +### XTChain +Get the latest prebuilt toolchain, needed to compile the ExectOS Operating System. This includes the Clang compiler, and +other build utilities you need to cross compile the project, including system core (boot loader, kernel and drivers). +The toolchain supports both i686 and AMD64 architectures, as well as ARMv7 and AArch64. Unfortunately, at the moment binary +package is available only for Linux host. To download the XTChain, click [here](https://github.com/xt-sys/xtchain/releases). diff --git a/content/faq.md b/content/faq.md new file mode 100644 index 0000000..c3f5ec5 --- /dev/null +++ b/content/faq.md @@ -0,0 +1,103 @@ ++++ +title = 'Frequently Asked Questions' +date = 2024-06-16T12:33:36+02:00 ++++ +#### What is ExectOS? +ExectOS is an open-source, general purpose operating system written from scratch and based on new XT architecture. +It aims to be modular, maintainable and compatible with existing software. + +#### What does ExectOS mean? What is the origin of this name? +The name 'ExectOS' doesn’t have a specific historical origin, as it appears to be a unique creation for this +Operating System. The term 'Exec' within ExectOS directly relates to execution - the act of carrying out tasks, +processes, and instructions. In the context of operating system, execution involves managing programs, resources, +and system operations. Users should associate ExectOS with streamlined performance and reliability. + +#### What does the ExectOS logo present and what is the relation between the logo and the OS name? +The three wavy lines in the ExectOS logo evoke a sense of fluidity and movement. Their arrangement, forms a shape +reminiscent of the capital letter ‘E,’ directly corresponding to the initial letter of ExectOS. The flowing waves +symbolize dynamism, progress, and forward motion. The smooth curves suggest a seamless user experience, while gradient +colors represent diversity and adaptability. All of this convey a message of innovation, user-friendliness, and +adaptability. It invites users to explore a new operating system that promises a seamless computing experience. + +#### What is the difference between XTOS and ExectOS? +XTOS is a common name of the Operating System standard based on the XT architecture. ExectOS is a name of the specific +project, that is a reference XTOS implementation, that implements all requirements from a corresponding specification. + +#### What does XT mean? +XT is a name of XTOS architecture of an Operating System, that consists of two main components, user mode and kernel +mode. It derives mostly from NT™ architecture, as well as uses a couple of ideas from other open source projects. +XT is a short for "neXTgen" architecture, but you can also call it "eXTendable". + +#### What architectures does ExectOS support? +ExectOS supports the x86_64 (sometimes called AMD64 or EM64T), as well as i686 CPU architectures. However, it requires +a modern EFI enabled hardware, thus it is not possible currently to boot ExectOS on a legacy BIOS. + +#### Is ExectOS a Windows replacement? +No. ExectOS is a brand new, modern system designed to run applications written for many different types of Operating +Systems. This allows to implement any environment subsystem to support applications that are strictly written to the +corresponding standard (eg. DOS, or POSIX). This means that running Windows applications might be as well possible at +some time. However development is mostly focused on providing system core at the moment. + +#### Is ExectOS another Unix based OS? +No. ExectOS implements the XT architecture which derives from NT™ architecture. It is modular, and consists of +two main layers: microkernel and user mode. Its' kernel mode has full access to the hardware and system resources and +runs code in a protected memory area. It consists of executive services, which is itself made up on many modules that +do specific tasks, a kernel and drivers. Unlike the NT™, system does not feature a separate Hardware Abstraction +Layer (HAL) between the physical hardware and the rest of the OS. Instead, XT architecture integrates a hardware specific +code with the kernel. + +#### Does ExectOS allow to use Windows drivers? +This is one of our goals. Thanks to the NT™ drivers compatibility layer provided by ExectOS, you should be able to +install and use the same drivers as you can on Windows®. + +#### Can I install ExectOS on a pendrive / USB stick? +Yes. This is how it is tested on a bare metal (real hardware). + +#### Program X does not work when I launch it. When can I except things to change? +It depends. ExectOS is in early development stage and it is not recommended for everyday usage. At this point we cannot +guarantee anything. + +#### When will feature X get added? +If you think an idea has merit, you may choose to discuss it on [Discord Server](https://discord.com/invite/zBzJ5qMGX7). +However, the best way to get a feature added to ExectOS is to implement it yourself. + +#### When will the project be finished? +Writing an Operating System is a complex task that requires time. Other popular Operating Systems, such as Linux, are +also constantly being developed to meet the everyday users requirements. + +#### Where can I obtain the source code? +ExectOS source code can be obtained from GIT repository available [here](https://git.codingworkshop.eu.org/xt-sys/exectos). +It can be also found on [GitHub](https://github.com/xt-sys/exectos) and [GitLab](https://gitlab.com/xt-sys/exectos) mirrors. + +#### Where can I download ExectOS? +Each ExectOS build, including binaries, disk image, libraries and debug symbols are available [here](https://artifacts.codingworkshop.eu.org/ExectOS/). + +#### How can I contribute to ExectOS? +We are looking for C and Assembler developers for core OS development as well as testers. If you are willing to help, +please join our [Discord server](https://discord.com/invite/zBzJ5qMGX7) and contact one of ExectOS developers. + +#### Why don't you use GCC? +Because GCC is a crap. + +#### Do you have any kind of tests to check if the code is working as expected? +We don't need tests. If it compiles, it is good enough; if it boots up, then it is perfect. + +#### Why don't you help Wine? +Wine implements Win32Api only, while ExectOS is a featureful Operating System, that implements a compatibility layer with +NT™. This means, ExectOS will be able to run NT™ drivers as well, not only Windows® software. However, thanks +to its modular design, it will be possible to implement Win32 subsystem as well at some point, based on Wine. + +#### Why don't you help ReactOS? +ExectOS goals are very different from ReactOS, and contrast the project's core philosophy as being quite on different paths. +While ReactOS aims to replicate Windows® NT™, ExectOS is a completely new Operating System implementing the XT +architecture which derives from NT™. Although both projects share the goal of being NT™ compatible, they intend +to achieve it in different ways. What ReactOS tries to replicate, ExectOS only implements as a compatibility layer. Thanks +to that, ExectOS does not need to strictly follow NT™ architecture and is capable of providing modern features. + +#### Do you intend to cooperate with ReactOS to achieve common goals? +No. We share Wine's opinion on the inappropriate reverse-engineering methods used in the ReactOS project, as well as its +association with the TinyKrnl project, which used every possible method of achieving the end result of having a 100% +compatible results. This especially applies to the so-called ‘dirty’ way. + +#### Which license does ExectOS use? +ExectOS is licensed under the GNU General Public License v3. diff --git a/content/source-code.md b/content/source-code.md new file mode 100644 index 0000000..44b9bee --- /dev/null +++ b/content/source-code.md @@ -0,0 +1,11 @@ ++++ +title = 'Source Code' +date = 2024-06-16T22:36:47+02:00 ++++ +### ExectOS + * Main GIT repository: https://git.codingworkshop.eu.org/xt-sys/exectos + * GitHub Mirror: https://github.com/xt-sys/exectos + +### XTChain + * Main GIT repository: https://git.codingworkshop.eu.org/xt-sys/xtchain + * GitHub Mirror: https://github.com/xt-sys/xtchain diff --git a/static/images/exectos/xtldr_boot_menu.png b/static/images/exectos/xtldr_boot_menu.png new file mode 100644 index 0000000..231bcc2 Binary files /dev/null and b/static/images/exectos/xtldr_boot_menu.png differ diff --git a/themes/exectos/config.yaml b/themes/exectos/config.yaml new file mode 100644 index 0000000..c34ab2a --- /dev/null +++ b/themes/exectos/config.yaml @@ -0,0 +1,3 @@ +module: + hugoVersion: + min: "0.84.0" diff --git a/themes/exectos/layouts/_default/baseof.html b/themes/exectos/layouts/_default/baseof.html new file mode 100644 index 0000000..c348b7e --- /dev/null +++ b/themes/exectos/layouts/_default/baseof.html @@ -0,0 +1,13 @@ + + + {{- partial "head.html" . -}} + + {{- partial "header.html" . -}} +
+
+ {{- block "main" . }}{{- end }} +
+
+ {{- partial "footer.html" . -}} + + diff --git a/themes/exectos/layouts/_default/list.html b/themes/exectos/layouts/_default/list.html new file mode 100644 index 0000000..c51ef88 --- /dev/null +++ b/themes/exectos/layouts/_default/list.html @@ -0,0 +1,9 @@ +{{ define "main" }} +

{{ .Title }}

+{{ range .Pages.ByPublishDate.Reverse }} +

{{ .Title }}

+ +

{{ .Summary }}

+
+{{ end }} +{{ end }} diff --git a/themes/exectos/layouts/_default/script.html b/themes/exectos/layouts/_default/script.html new file mode 100644 index 0000000..2038532 --- /dev/null +++ b/themes/exectos/layouts/_default/script.html @@ -0,0 +1,12 @@ + + + {{- partial "head.html" . -}} + + {{- partial "header.html" . -}} +
+ {{- block "main" . }}{{- end }} +
+ {{- partial "footer.html" . -}} + {{- partial "script.html" . -}} + + diff --git a/themes/exectos/layouts/_default/single.html b/themes/exectos/layouts/_default/single.html new file mode 100644 index 0000000..65955db --- /dev/null +++ b/themes/exectos/layouts/_default/single.html @@ -0,0 +1,5 @@ +{{ define "main" }} +

{{ .Title }}

+{{ .Content }} +

+{{ end }} diff --git a/themes/exectos/layouts/index.html b/themes/exectos/layouts/index.html new file mode 100644 index 0000000..bf71758 --- /dev/null +++ b/themes/exectos/layouts/index.html @@ -0,0 +1,13 @@ + + + {{- partial "head.html" . -}} + + {{- partial "header.html" . -}} +
+
+ {{ .Content }} +
+
+ {{- partial "footer.html" . -}} + + diff --git a/themes/exectos/layouts/partials/footer.html b/themes/exectos/layouts/partials/footer.html new file mode 100644 index 0000000..414d370 --- /dev/null +++ b/themes/exectos/layouts/partials/footer.html @@ -0,0 +1,10 @@ + diff --git a/themes/exectos/layouts/partials/head.html b/themes/exectos/layouts/partials/head.html new file mode 100644 index 0000000..f9f5d3a --- /dev/null +++ b/themes/exectos/layouts/partials/head.html @@ -0,0 +1,9 @@ + + + + + + + + {{ $title := print .Site.Title " | " .Title }}{{ if .IsHome }}{{ $title = .Site.Title }}{{ end }}{{ $title }} + diff --git a/themes/exectos/layouts/partials/header.html b/themes/exectos/layouts/partials/header.html new file mode 100644 index 0000000..7e7f6ee --- /dev/null +++ b/themes/exectos/layouts/partials/header.html @@ -0,0 +1,19 @@ +
+
+

LOGO {{ .Site.Title }}

+ +
+
diff --git a/themes/exectos/static/css/fontawesome-min.css b/themes/exectos/static/css/fontawesome-min.css new file mode 100644 index 0000000..a37a01b --- /dev/null +++ b/themes/exectos/static/css/fontawesome-min.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.4.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"} diff --git a/themes/exectos/static/css/style.css b/themes/exectos/static/css/style.css new file mode 100644 index 0000000..7884501 --- /dev/null +++ b/themes/exectos/static/css/style.css @@ -0,0 +1,239 @@ +@import url("/css/fontawesome-min.css"); + +@font-face { + font-family : 'Source Sans Pro'; + font-style : normal; + font-weight : 400; + src : url('/fonts/source-sans-pro-v9-latin-regular.eot'); + src : local('Source Sans Pro'), local('SourceSansPro-Regular'), + url('/fonts/source-sans-pro-v9-latin-regular.eot?#iefix') format('embedded-opentype'), + url('/fonts/source-sans-pro-v9-latin-regular.woff2') format('woff2'), + url('/fonts/source-sans-pro-v9-latin-regular.woff') format('woff'), + url('/fonts/source-sans-pro-v9-latin-regular.ttf') format('truetype'); +} + +@font-face { + font-family : 'Source Sans Pro'; + font-style : italic; + font-weight : 400; + src : url('/fonts/source-sans-pro-v9-latin-italic.eot'); + src : local('Source Sans Pro Italic'), local('SourceSansPro-It'), + url('/fonts/source-sans-pro-v9-latin-italic.eot?#iefix') format('embedded-opentype'), + url('/fonts/source-sans-pro-v9-latin-italic.woff2') format('woff2'), + url('/fonts/source-sans-pro-v9-latin-italic.woff') format('woff'), + url('/fonts/source-sans-pro-v9-latin-italic.ttf') format('truetype'); +} + +@font-face { + font-family : 'Source Sans Pro'; + font-style : normal; + font-weight : 700; + src : url('/fonts/source-sans-pro-v9-latin-700.eot'); + src : local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), + url('/fonts/source-sans-pro-v9-latin-700.eot?#iefix') format('embedded-opentype'), + url('/fonts/source-sans-pro-v9-latin-700.woff2') format('woff2'), + url('/fonts/source-sans-pro-v9-latin-700.woff') format('woff'), + url('/fonts/source-sans-pro-v9-latin-700.ttf') format('truetype'); +} + +:root { + color-scheme : light; +} + +html { + color : light-dark(#333333, #FFFFFF); + background-color : light-dark(#FFFFFF, #030C12); + margin : 0; + padding : 0; +} + +body { + font-family : "Source Sans Pro", "Trebuchet MS", "Verdana", sans-serif; + margin : 0; + padding : 0; +} + +code { + color : #186196; + font-weight : bold; +} + +h1 { + font-size : 28px; + margin-top : 8px; + padding : 1px; + vertical-align : middle; +} + +h2 { + border-bottom : 1px solid #DDDDDD; + font-size : 30px; + margin-left : -1em; + margin-right : -1em; + text-decoration : bold; +} + +h3 { + font-size : 18px; + margin-left : -1em; + margin-right : -1em; + text-decoration : bold; +} + +img { + border : 0px; + vertical-align : middle; +} + +pre { + background-color : #3C3C3C; + border-color : #3D3D3D; + border-radius : 4px; + color : #ECECEC; + display : block; + font-size : 13px; + line-height : 1.42857143; + margin : 0 0 10px; + overflow : auto; + padding : 9.5px; + word-break : break-all; + word-wrap : break-word; +} + +pre code { + color : #ECECEC; + font-weight : normal; +} + +.content { + font-size : 15px; + margin-left : 30%; + margin-right : 30%; + margin-top : 1.5em; +} + +.content img { + border : 0px; + display : block; + margin : auto; + vertical-align : middle; + text-align : center; +} + +.content li { + list-style-type : square; +} + +.copyright { + color : #404040; + font-family : "Source Sans Pro", "Trebuchet MS", "Verdana", sans-serif; + font-size : 10px; + text-align : center; + text-decoration : none; +} + +.copyright a { + color : #404040; + text-decoration : none; +} + +.copyright a:hover { + color : #404040; + text-decoration : none; +} + +.footer { + background : light-dark(#FFFFFF, #030C12); + color : light-dark(#000000, #FFFFFF); + clear : both; + font-family : sans-serif, verdana, Helvetica; + font-size : 12px; + margin-left : 10px; + margin-top : 0.4em; + padding : 0; + width : 100% +} + +.footer-left { + position : absolute; + text-align : left; + width : 50%; +} + +.footer-right { + left : 50%; + position : absolute; + text-align : right; + width : 50%; +} + +.header { + background : light-dark(#BEE0FF, #2185D0); + border-bottom : 2px solid #186196; + color : #186196; + clear : both; + font-size : 14px; + padding-left : 1em; + padding-top : 1px; + text-align : center; + vertical-align : middle; +} + +.header a { + color : light-dark(#186196, #CCCCCC); + padding-left : 5px; + padding-right : 5px; + padding-top : 1px; + text-decoration : none; +} + +.header a:hover { + color : light-dark(#000055, #FFFFFF); + padding-left : 5px; + padding-right : 5px; + padding-top : 1px; +} + +.header img { + margin : 0px; + padding : 0px; +} + +.header li { + display : inline; + margin-left : 2em; +} + +.header ul { + margin : 0px; + padding : 0px; + text-align : center; +} + +.wrapper_content { + margin-bottom : 2.5em; + padding : 6em 0 0 0; +} + +.wrapper_header { + background : light-dark(#FFFFFF, #030C12); + color : light-dark(#000000, #FFFFFF); + height : 6em; + left : 0; + position : absolute; + position : fixed; + top : 0; + width : 100%; +} + +.wrapper_footer { + background : light-dark(#FFFFFF, #030C12); + border-top : 2px solid #186196; + bottom : 0; + color : #000000; + height : 1.5em; + left : 0; + position : absolute; + position : fixed; + width : 100% +} diff --git a/themes/exectos/static/fonts/fontawesome-webfont.eot b/themes/exectos/static/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..a30335d Binary files /dev/null and b/themes/exectos/static/fonts/fontawesome-webfont.eot differ diff --git a/themes/exectos/static/fonts/fontawesome-webfont.woff2 b/themes/exectos/static/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..5560193 Binary files /dev/null and b/themes/exectos/static/fonts/fontawesome-webfont.woff2 differ diff --git a/themes/exectos/static/fonts/source-sans-pro-v9-latin-700.eot b/themes/exectos/static/fonts/source-sans-pro-v9-latin-700.eot new file mode 100644 index 0000000..dc9f857 Binary files /dev/null and b/themes/exectos/static/fonts/source-sans-pro-v9-latin-700.eot differ diff --git a/themes/exectos/static/fonts/source-sans-pro-v9-latin-700.ttf b/themes/exectos/static/fonts/source-sans-pro-v9-latin-700.ttf new file mode 100644 index 0000000..cfe7065 Binary files /dev/null and b/themes/exectos/static/fonts/source-sans-pro-v9-latin-700.ttf differ diff --git a/themes/exectos/static/fonts/source-sans-pro-v9-latin-700.woff b/themes/exectos/static/fonts/source-sans-pro-v9-latin-700.woff new file mode 100644 index 0000000..600751c Binary files /dev/null and b/themes/exectos/static/fonts/source-sans-pro-v9-latin-700.woff differ diff --git a/themes/exectos/static/fonts/source-sans-pro-v9-latin-700.woff2 b/themes/exectos/static/fonts/source-sans-pro-v9-latin-700.woff2 new file mode 100644 index 0000000..2486c1d Binary files /dev/null and b/themes/exectos/static/fonts/source-sans-pro-v9-latin-700.woff2 differ diff --git a/themes/exectos/static/fonts/source-sans-pro-v9-latin-italic.eot b/themes/exectos/static/fonts/source-sans-pro-v9-latin-italic.eot new file mode 100644 index 0000000..63f9eb2 Binary files /dev/null and b/themes/exectos/static/fonts/source-sans-pro-v9-latin-italic.eot differ diff --git a/themes/exectos/static/fonts/source-sans-pro-v9-latin-italic.ttf b/themes/exectos/static/fonts/source-sans-pro-v9-latin-italic.ttf new file mode 100644 index 0000000..0cf2e43 Binary files /dev/null and b/themes/exectos/static/fonts/source-sans-pro-v9-latin-italic.ttf differ diff --git a/themes/exectos/static/fonts/source-sans-pro-v9-latin-italic.woff b/themes/exectos/static/fonts/source-sans-pro-v9-latin-italic.woff new file mode 100644 index 0000000..5878fc6 Binary files /dev/null and b/themes/exectos/static/fonts/source-sans-pro-v9-latin-italic.woff differ diff --git a/themes/exectos/static/fonts/source-sans-pro-v9-latin-italic.woff2 b/themes/exectos/static/fonts/source-sans-pro-v9-latin-italic.woff2 new file mode 100644 index 0000000..90428c7 Binary files /dev/null and b/themes/exectos/static/fonts/source-sans-pro-v9-latin-italic.woff2 differ diff --git a/themes/exectos/static/fonts/source-sans-pro-v9-latin-regular.eot b/themes/exectos/static/fonts/source-sans-pro-v9-latin-regular.eot new file mode 100644 index 0000000..5dd59e7 Binary files /dev/null and b/themes/exectos/static/fonts/source-sans-pro-v9-latin-regular.eot differ diff --git a/themes/exectos/static/fonts/source-sans-pro-v9-latin-regular.ttf b/themes/exectos/static/fonts/source-sans-pro-v9-latin-regular.ttf new file mode 100644 index 0000000..950ff8b Binary files /dev/null and b/themes/exectos/static/fonts/source-sans-pro-v9-latin-regular.ttf differ diff --git a/themes/exectos/static/fonts/source-sans-pro-v9-latin-regular.woff b/themes/exectos/static/fonts/source-sans-pro-v9-latin-regular.woff new file mode 100644 index 0000000..dbdec39 Binary files /dev/null and b/themes/exectos/static/fonts/source-sans-pro-v9-latin-regular.woff differ diff --git a/themes/exectos/static/fonts/source-sans-pro-v9-latin-regular.woff2 b/themes/exectos/static/fonts/source-sans-pro-v9-latin-regular.woff2 new file mode 100644 index 0000000..da49c62 Binary files /dev/null and b/themes/exectos/static/fonts/source-sans-pro-v9-latin-regular.woff2 differ diff --git a/themes/exectos/static/images/exectos_logo.png b/themes/exectos/static/images/exectos_logo.png new file mode 100644 index 0000000..12eed44 Binary files /dev/null and b/themes/exectos/static/images/exectos_logo.png differ diff --git a/themes/exectos/theme.toml b/themes/exectos/theme.toml new file mode 100644 index 0000000..3d45124 --- /dev/null +++ b/themes/exectos/theme.toml @@ -0,0 +1,10 @@ +name = "ExectOS" +license = "GPLv3" +licenselink = "https://www.gnu.org/licenses/gpl-3.0.html" +description = "ExectOS Theme" +homepage = "https://exectos.eu.org" +languageCode = "en-us" +min_version = "0.1.0" + +[author] + name = "Rafal Kupiec"