diff --git a/.gitea/workflows/publish.yml b/.gitea/workflows/publish.yml index bf8b6dd..30d4568 100644 --- a/.gitea/workflows/publish.yml +++ b/.gitea/workflows/publish.yml @@ -23,4 +23,4 @@ jobs: username: 'aproksha' password: ${{ secrets.password }} localDir: 'public' - remoteDir: '/var/www/virtual/aproksha/html/' \ No newline at end of file + remoteDir: '/var/www/virtual/aproksha/david.aparoksha.dev/' \ No newline at end of file diff --git a/README.md b/README.md index ac4b5b5..082e98e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -# The Aparoksha Website +# David's Website -This is the source of the [website of the Aparoksha project](https://www.aparoksha.dev). +This is the source of [David's website](https://david.aparoksha.dev). -It is built using [Zola](https://www.getzola.org/) and the [Duckquill theme](https://codeberg.org/daudix/duckquill) and hosted by [Uberspace](https://uberspace.de/en/). +It is built using [Zola](https://www.getzola.org/) and the [Duckquill theme](https://codeberg.org/daudix/duckquill) and hosted by [Uberspace](https://uberspace.de/en/). diff --git a/config.toml b/config.toml index 30f923b..02c4dd6 100644 --- a/config.toml +++ b/config.toml @@ -1,8 +1,8 @@ # Zola config -title = "Aparoksha" -base_url = "https://www.aparoksha.dev/" -description = "One app, fully native on every platform" +title = "david-swift" +base_url = "https://david.aparoksha.dev/" +description = "A student interested in coding. Loves GNOME and Swift!" theme = "duckquill" minify_html = true @@ -25,10 +25,10 @@ smart_punctuation = true styles = [ "custom.css" ] -accent_color = "#FF2D75" -accent_color_dark = "#FF2D75" -issues_url = "https://git.aparoksha.dev/aparoksha/aparoksha.dev/issues" -source_url = "https://git.aparoksha.dev/aparoksha/aparoksha.dev" +accent_color = "#6E7DFB" +accent_color_dark = "#6E7DFB" +issues_url = "https://git.aparoksha.dev/david-swift/david.aparoksha.dev/issues" +source_url = "https://git.aparoksha.dev/david-swift/david.aparoksha.dev" show_copy_button = true show_share_button = true @@ -36,17 +36,15 @@ show_share_button = true show_copyright = true show_powered_by = true show_source = true +links = [ + { url = "https://mastodon.de/@david_swift", name = "Fediverse" }, + { url = "https://ko-fi.com/david_swift", name = "Donate" } +] [extra.nav] links = [ - { name = "Guides" , menu = [ - { url = "@/backends/_index.md", name = "Backends" }, - { url = "/tutorials", name = "Tutorials" }, - { url = "/hig", name = "Human Interface Guidelines" }, - { url = "/docs", name = "Documentation" }, - ]}, - { url = "https://forums.aparoksha.dev/", name = "Community" }, - { url = "https://git.aparoksha.dev/aparoksha", name = "Code" }, + { url = "/blog", name = "Blog" }, + { url = "https://www.aparoksha.dev/", name = "Aparoksha" }, ] [search] diff --git a/content/_index.md b/content/_index.md index c57496e..3a2b701 100644 --- a/content/_index.md +++ b/content/_index.md @@ -5,86 +5,34 @@ {{ image(url="trailer.gif" full_bleed=true) }} ---> -# Native. Cross-platform. +# About Me
-Create your next cross-platform app with Aparoksha to give it a native look on each platform. -Aparoksha is easy-to-use, safe, and aparoksha, meaning that its reactive and declarative approach as well as the clean syntax significantly enhance the readability. +I'm David, a GNOME šŸ‘£ user enjoying the Swift programming language. +
-Get Started +Find Me on the Fediverse
+## Frameworks -## Start with Simple Views +I'm currently working on a declarative cross-platform UI framework, +which displays _fully_ native widgets on each supported platform. -A view is a piece of the user interface. -Create your own views, such as `Avatar`, `Post`, and `Timeline`. -Combine them into pages, windows, and apps. +The platform-specific backends are completely independent projects, providing widgets that are not part of the cross-platform framework. +They grow based on your feedback. [Try the frameworks.](https://www.aparoksha.dev) - +- [Aparoksha](https://www.aparoksha.dev/) is the cross-platform framework displaying native widgets on each supported platform. +- [Adwaita for Swift](https://www.aparoksha.dev/backends/adwaita/) is part of the Aparoksha framework, allowing the creation of native apps for the awesome [GNOME desktop](https://www.gnome.org/). +- Simplifying the use of WinUI on Windows, [WinUI for Swift](https://www.aparoksha.dev/backends/winui/) feels like SwiftUI on Windows. +- The [TermKitBackend](https://www.aparoksha.dev/backends/termkit/) lets you create Terminal UIs in a declarative way. -{% crt() %} -``` -struct Timeline: View { +Create a declarative framework on top of an imperative API yourself using the [Meta package](https://meta.aparoksha.dev/documentation/meta/). +Find projects [here](https://www.aparoksha.dev/backends/) and in the [Aparoksha forums](https://forums.aparoksha.dev/). - var posts: Posts +## Apps - var view: Body { - ForEach(posts) { post in - Avatar(user: post.user) - Post(post: post) - } - } - -} -``` -{% end %} - -## The Magic of the State - -Each of your views has the ability to store state throughout view updates. -Let's create a simple counter view: - - - -{% crt() %} -``` -struct SearchView: View { - - @State private var count = 0 - - var view: Body { - Button(icon: .minus) { - count -= 1 - } - Text("\(count)") - Button(icon: .plus) { - count += 1 - } - } - -} -``` -{% end %} - -## Supported Platforms - -Aparoksha's goal is to enable you to bring your app to as many users as possible on completely different platforms. -Therefore, it is built in an open and extensible way. -Creating a backend for a new platform is almost as simple as creating an app! - -A list of some backends is available [here](@/backends/_index.md). They can be combined with Aparoksha in a simple way. -Aparoksha itself currently supports the three major desktop platforms [GNOME](@/backends/Adwaita/index.md), [Windows](@/backends/WinUI/index.md), and [macOS](@/backends/AppKit/index.md). -What makes the Aparoksha project unique is that each backend is a fully independent project, optimized for its platform. -In a cross-platform app, you can leverage the full potential of the individual backends by writing platform-specific bits of code. +- [Memorize](https://flathub.org/apps/io.github.david_swift.Flashcards) is an open source, native Quizlet alternative. It is only available for GNOME (at the moment šŸ˜Ž). diff --git a/content/backends/Adwaita/Adwaita.png b/content/backends/Adwaita/Adwaita.png deleted file mode 100644 index eba0d2c..0000000 Binary files a/content/backends/Adwaita/Adwaita.png and /dev/null differ diff --git a/content/backends/Adwaita/App.png b/content/backends/Adwaita/App.png deleted file mode 100644 index 48a6f82..0000000 Binary files a/content/backends/Adwaita/App.png and /dev/null differ diff --git a/content/backends/Adwaita/Environment.png b/content/backends/Adwaita/Environment.png deleted file mode 100644 index cd26e3c..0000000 Binary files a/content/backends/Adwaita/Environment.png and /dev/null differ diff --git a/content/backends/Adwaita/index.md b/content/backends/Adwaita/index.md deleted file mode 100644 index 9c73b89..0000000 --- a/content/backends/Adwaita/index.md +++ /dev/null @@ -1,52 +0,0 @@ -+++ -title = "Adwaita" -description = "Develop beautiful apps following the design guidelines of the GNOME desktop." -date = 2023-09-12 -[taxonomies] -tags = ["Linux", "Aparoksha"] -[extra] -featured = true -banner = "Adwaita.png" -+++ - -Develop beautiful apps following the design guidelines of the GNOME desktop. - -Read the documentation to get started or browse the code on GitHub. - -## The Backend - -The Adwaita backend is based on the _libadwaita_ C API. -libadwaita is used for developing native GNOME apps. - -## The Development Environment - -It is recommended to develop Libadwaita apps on a Linux system. -Linux is probably available for your device and can be installed alongside Windows or macOS. -I recommend picking a Linux distribution offering a vanilla GNOME experience, such as Fedora or VanillaOS. - -Now, install GNOME Builder via the GNOME Software application. - -### Flatpak - -Flatpak facilitates the distribution of apps on Linux. -If you decide to use Flatpak already when developing the app, you do not have to install any dependencies on your system. -Simply clone the template repository, open in GNOME Builder, and run the template app. -Follow the instructions in the readme file to create your own app. - -{{ image(url="Environment.png", alt="A native GNOME app called Tuba") }} - -## The Design - -This backend allows the creation of apps following the GNOME Human Interface Guidelines. -The following screenshot serves as an example for GNOME's design language. - -{{ image(url="App.png", alt="A native GNOME app called Tuba" transparent=true) }} - -## Distribution - -The apps can be distributed using Flatpak. The most popular app store is Flathub. -Read the instructions in the official docs. - -## Aparoksha Interoperability -This backend is part of the Aparoksha package. If you use default Aparoksha elements, they will render correctly on GNOME. -You can call platform-specific widgets for GNOME as well. diff --git a/content/backends/AppKit/index.md b/content/backends/AppKit/index.md deleted file mode 100644 index 8fe179b..0000000 --- a/content/backends/AppKit/index.md +++ /dev/null @@ -1,11 +0,0 @@ -+++ -title = "AppKit" -description = "Build fully native macOS apps." -date = 2024-09-13 -[taxonomies] -tags = ["macOS", "Aparoksha"] -[extra] -featured = true -+++ - -Hello diff --git a/content/backends/TermKit/index.md b/content/backends/TermKit/index.md deleted file mode 100644 index 8775d8c..0000000 --- a/content/backends/TermKit/index.md +++ /dev/null @@ -1,12 +0,0 @@ -+++ -title = "TermKit" -description = "Create simple user interfaces for terminal applications." -date = 2024-07-10 -authors = ["david-swift"] -[taxonomies] -tags = ["Linux", "macOS"] -[extra] -hot = false -+++ - -Hello diff --git a/content/backends/WinUI/index.md b/content/backends/WinUI/index.md deleted file mode 100644 index 7625098..0000000 --- a/content/backends/WinUI/index.md +++ /dev/null @@ -1,11 +0,0 @@ -+++ -title = "WinUI" -description = "Create apps for Microsoft Windows." -date = 2024-09-13 -[taxonomies] -tags = ["Windows", "Aparoksha"] -[extra] -featured = true -+++ - -Hello diff --git a/content/backends/_index.md b/content/backends/_index.md deleted file mode 100644 index 1493f97..0000000 --- a/content/backends/_index.md +++ /dev/null @@ -1,12 +0,0 @@ -+++ -title = "Available Backends" -sort_by = "date" -template = "article_list.html" -page_template = "article.html" -+++ - -The backends listed here are based on the Meta package. -They can be used in combination with the Aparoksha package. - -The backends marked with a star are part of the Aparoksha package. -This means that all the user interface elements included in the Aparoksha package will automatically render correctly with these backends. diff --git a/content/blog/NativeCrossPlatform/GNOME.png b/content/blog/NativeCrossPlatform/GNOME.png new file mode 100644 index 0000000..89e323a Binary files /dev/null and b/content/blog/NativeCrossPlatform/GNOME.png differ diff --git a/content/blog/NativeCrossPlatform/Windows.png b/content/blog/NativeCrossPlatform/Windows.png new file mode 100755 index 0000000..0fbb012 Binary files /dev/null and b/content/blog/NativeCrossPlatform/Windows.png differ diff --git a/content/blog/NativeCrossPlatform/index.md b/content/blog/NativeCrossPlatform/index.md new file mode 100644 index 0000000..8a324ee --- /dev/null +++ b/content/blog/NativeCrossPlatform/index.md @@ -0,0 +1,115 @@ ++++ +title = "Native Cross-Platform Apps" +description = "Develop beautiful apps following the design guidelines of the GNOME desktop." +date = 2024-09-17 +[taxonomies] +tags = ["Aparoksha", "GNOME", "Swift"] ++++ + +In March, I had the chance to write about the _Adwaita for Swift_ project on the official Swift blog. +_Adwaita for Swift_ is a declarative interface on top of the libadwaita and GTK frameworks, allowing the creation of fully native GNOME apps. + +Some months earlier, The Browser Company published Swift bindings for WinUI 3, the native UI framework on Windows. +Officially, Swift offers interoperability with C, C++, and Objective-C, but certain packages, such as JavaKit or PythonKit, add support for even more languages. +Therefore, it is possible to use a huge range of UI frameworks in Swift code. + +This is an ideal basis for a cross-platform UI framework. + +## Native Apps + +Cross-platform UI frameworks like React Native primarily target mobile phones. +While React Native offers support for Windows and macOS, the look does not fully match that of _really_ native apps built using WinUI or SwiftUI. +Native Linux UI frameworks like libadwaita and Qt are not supported at all. + +While each platform has its own native look, there are obviously many parallels. +As an example, there is a ā€œflat navigationā€ pattern in each UI framework. +Furthermore, it is very common to implement flat navigation with a sidebar or a view switcher. + +My goal is to create a single UI framework around those patterns, allowing the creation of apps that look native on each supported platform. + +{% alert(note=true) %} +The following screenshots show a simple user interface built using the Aparoksha framework. +Note that the framework is still in an early stage of development and currently supports only two platforms. +I'll mention later in this article why I want to share my project already. +{% end %} + +
+
+ {{ image(url="GNOME.png", alt="A simple native GNOME app." transparent=true) }} +
+
+ {{ image(url="Windows.png", alt="A simple native WinUI app." transparent=true) }} +
+
+ +Especially in an early state as now, but also when the framework is more mature, there are a lot of widgets in the native frameworks that are not implemented as a cross-platform widget (yet). +Requesting new widgets is always possible via the forums or the Gitea issues, but certain widgets might not have an equivalent on other platforms. +This fact has influenced the modular architecture of the project. + +## Architecture + +The foundation of the project is the Meta package. +It allows ā€œconvertingā€ any imperative UI framework into a declarative framework. +Find more information about my definition of a declarative design in the Meta documentation. + +A declarative framework based on Meta is a backend. Currently, there are adwaita-swift and winui-swift, which are part of the Aparoksha framework, as well as the simple TermKitBackend. +An up-to-date list is available on the Aparoksha website. + +{% alert(note=true) %} +Some of the repositories were previously developed on GitHub. +The development will move to the Gitea instance of the Aparoksha project. + +I'm leaving GitHub because of the points mentioned in this article. +{% end %} + +Aparoksha is an umbrella backend, a backend that calls different other backends based on the detected platform or an optional environment variable. + +As the backends are fully independent of the Aparoksha framework, they can provide platform-specific features that Aparoksha does not (yet) support. +If one wants to create an app exclusively for one platform, one can directly import and use a backend. + +In the same way, it is possible to define certain views specifically for one platform in apps built using the cross-platform Aparoksha framework. + +## Benefits for _Adwaita for Swift_ + +Having a separate package for the ā€œtranslationā€ from imperative to declarative code led to numerous improvements for the _Adwaita for Swift_ framework. +Previously, it could happen that views were updated that did not actually have to be updated. +This has been fixed. The current state of a widget's property is always compared to the previous state before updating, if possible. + +Furthermore, a much more simple and declarative syntax for creating widgets has been introduced. +Note that the previous syntax may still be required for very complex or special widgets. +The _Adwaita for Swift_ documentation has been updated, find a short article here. + +Models have been introduced for working with other APIs that require classes and should modify state. + +Due to the modular design, it is easy to extend the Meta framework and add custom functionality. +A simple example is the SQLite for Meta library. + +As already mentioned, backends are fully independent of the Aparoksha framework. +Using _Adwaita for Swift_ directly will always be possible. + +## Why I'm Announcing the Framework So Early + +The WinUI for Swift and the Aparoksha frameworks are still in early development. +So, why am I announcing those projects already? + +First, I want to encourage users of _Adwaita for Swift_ to update their dependency. +The repository is now available here, with the documentation being hosted here. + +Second, I hope to spark the interest of some people with this article. +I've decided to start the Aparoksha project with support for GNOME and Windows. +I'd love to add support for other platforms as well: + +- KDE (one framework to develop native GNOME and KDE apps - wouldn't that be qt?) +- macOS +- iOS +- Android + +If you have ideas for other platforms, I'm open to suggestions! Discuss them in the forums. +Creating a declarative UI framework yourself is not too difficult. You can find a guide here, and I'm happy to answer questions in the forums! + +It would be really cool if people who have the time and inclination to develop or contribute to a backend would take a look at the mentioned platforms. +Finding contributors is the main reason I'm publishing this article. + +If you want to use the Aparoksha framework, subscribe to the RSS feed [here](/rss.xml) and wait some months for the introductory article. + +Thanks in advance for any feedback and code! Don't hesitate to share your ideas, concerns, and questions. diff --git a/content/blog/_index.md b/content/blog/_index.md new file mode 100644 index 0000000..ed9a1a7 --- /dev/null +++ b/content/blog/_index.md @@ -0,0 +1,8 @@ ++++ +title = "Blog" +sort_by = "date" +template = "article_list.html" +page_template = "article.html" ++++ + +I announce new projects or major releases, and might write about other stuff here too. diff --git a/content/david/index.md b/content/david/index.md deleted file mode 100644 index e62eeb9..0000000 --- a/content/david/index.md +++ /dev/null @@ -1,13 +0,0 @@ -+++ -title = "Hi!" -+++ - -I'm David, the maintainer of the Aparoksha project. -You can find me on Mastodon, -this project's Gitea instance, -and on GitHub. - -If you benefit from this project and have enough money, donations are appreciated to compensate the server costs. -Thank you! - -Don't forget to share your projects on the Fediverse and in the Aparoksha forums :) diff --git a/content/docs/index.md b/content/docs/index.md deleted file mode 100644 index 21c8ef3..0000000 --- a/content/docs/index.md +++ /dev/null @@ -1,6 +0,0 @@ -+++ -title = "Documentation" -featured = true -[taxonomies] -tags = ["Linux", "macOS", "Windows", "Aparoksha"] -+++ diff --git a/content/hig/index.md b/content/hig/index.md deleted file mode 100644 index 54c509b..0000000 --- a/content/hig/index.md +++ /dev/null @@ -1,6 +0,0 @@ -+++ -title = "Human Interface Guidelines" -featured = true -[taxonomies] -tags = ["Linux", "macOS", "Windows", "Aparoksha"] -+++ diff --git a/content/tutorials/GettingStarted/index.md b/content/tutorials/GettingStarted/index.md deleted file mode 100644 index b0845ad..0000000 --- a/content/tutorials/GettingStarted/index.md +++ /dev/null @@ -1,7 +0,0 @@ -+++ -title = "Getting Started" -description = "Learn Aparoksha following a simple path." -date = 2023-09-12 -[taxonomies] -tags = ["Linux", "macOS", "Windows", "Aparoksha"] -+++ diff --git a/content/tutorials/_index.md b/content/tutorials/_index.md deleted file mode 100644 index 830ae23..0000000 --- a/content/tutorials/_index.md +++ /dev/null @@ -1,6 +0,0 @@ -+++ -title = "Tutorials" -sort_by = "date" -template = "article_list.html" -page_template = "article.html" -+++ diff --git a/sass/custom.scss b/sass/custom.scss index 3bc4d26..61ba68c 100644 --- a/sass/custom.scss +++ b/sass/custom.scss @@ -33,6 +33,14 @@ h6 { font-size: 0.5rem; } -.logo { - color: #EE2D75; +.column { + float: left; + padding: 5px; + width: 50%; +} + +.row::after { + content: ""; + clear: both; + display: table; } \ No newline at end of file diff --git a/static/favicon.png b/static/favicon.png index 65e145e..3c80cd9 100644 Binary files a/static/favicon.png and b/static/favicon.png differ