commit 238ce6719cf87d1f9198464779ca0fc4dbe7575c Author: Přemysl Janouch Date: Sat Aug 15 05:44:44 2020 +0200 Initial commit Decided to split this out from haven git master, as it will change very often and contain information that is not strictly related. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..61d1148 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.html +gen.sh diff --git a/BadThings.adoc b/BadThings.adoc new file mode 100644 index 0000000..2c9ba3a --- /dev/null +++ b/BadThings.adoc @@ -0,0 +1,42 @@ +Bad things +========== + +Web browsers +------------ +https://drewdevault.com/2020/08/13/Web-browsers-need-to-stop.html + +Scrap it all, start anew. Content goes first, presentation second. Don't allow +for the inverse to happen. I'm not interested in anyone's animations and gray +font. + +GNOME 3 +------- +Removing features, worsening accessibility, making the UI incomprehensible, +piling up laughable levels of complexity, politically driven development, +everything is wrong here. + +KDE +--- +KDE will always be hideously ugly, it's the one constant in the universe. + +Unix terminals +-------------- +Barely tolerable with graphical displays. The character grid must go, not only +because variable pitch fonts are infinitely more pleasant to read. + +The only redeeming quality is how well these work over slow links. + +ASCII +----- +Outdated, made for teletypes. Unicode mostly just adds more complexity (and +characters). For sanity reasons, I'll put up with it and try to avoid the parts +I don't like, perhaps even banning certain characters where possible. + +Centralisation +-------------- +Try to build things so that they survive outages--resilient, robust, and even +anti-fragile. Admittably, this principle is hard for humans to follow. + +Speaking of which, project Haven has no public mirrors yet. Not that it matters +thus far... but eventually we should at least set up mirrorring to repo.or.cz, +which is local. diff --git a/GoodThings.adoc b/GoodThings.adoc new file mode 100644 index 0000000..c01b377 --- /dev/null +++ b/GoodThings.adoc @@ -0,0 +1,101 @@ +Good things +=========== + +Windows 95 +---------- +// TODO: Include a screenshot. + +Most applications followed design guidelines, giving a unified and simple UI. + +Could be reasonably well controlled from the keyboard. + +SerenityOS +---------- +https://github.com/SerenityOS/serenity + +// TODO: Include a screenshot. + +A project with a much larger scope than Haven but with somewhat similar goals, +to create a nice new environment. Gives proof that such a project can be +written in few people, given proper experience. + +ToaruOS +------- +https://github.com/klange/toaruos + +Similarly to SerenityOS, this proves that one can write an entire operating +system from scratch. Somewhat sadly, it just replicates the Linux desktop +without trying to make any fundamental changes whatsoever. Still, it makes for +a very interesting data point. + +Haiku +----- +Pretty. Desktop-first. Just the window manager sucks, and C++ is no longer +a reasonable choice for a high-level programming language, despite all the +effort to improve it. It's the foundations that are rotten. + +VIM +--- +Customizable modal text editor allowing for rather efficient editing. While the +internals might not be so great, the user interface is hard to beat once you get +used to it. + +With https://github.com/prabirshrestha/vim-lsp/[vim-lsp] it even shines as an +IDE, which is a wonderful development. + +Qt Creator +---------- +// TODO: Include a screenshot. + +Has a very good VIM emulator (rare!), excellent code navigation on top of that, +clean UI. + +Primarily a C++ IDE, yet slowly the Language Server Protocol implementation +makes it transcend into a general-purpose one. + +Vimperator/Pentadactyl/qutebrowser +---------------------------------- +// TODO: Include a screenshot. + +Vimperator/Pentadactyl has created a new standard in web browser usability. +The most important innovations being the addition of modality to the web browser +and the "follow link" feature, which is what I feel all mouse-first UIs +deserve. + +Too bad it can no longer work in current versions of Firefox as they cut off +all support for XUL addons. The good times are already behind us. I certainly +enjoyed them. + +qutebrowser went somewhat beyond in terms of how neat the integration of a VIM +interface and a web browser engine can be, rebuilding the concept on top of +Webkit, but to this day it lacks a normal AdBlock, and thus remains a toy. + +SourceHut +--------- +https://sourcehut.org/ + +Drew might be an opinionated asshole but that's not necessarily a bad quality. +His creations are compatible with my values. + +WikiWikiWeb +----------- +http://wiki.c2.com/ + +An interesting knowledge base. Simple formatting, automatic links. I've +borrowed the general concept for this very collection of texts (I don't want +to say "wiki" since no one else can edit). + +It's a shame that it's been frozen in time. + +AsciiDoc +-------- +I despise Markdown for its choices, and I don't want to suffer while writing. +Granted, I can see some faults in AsciiDoc as well, notably with how hard it is +to parse and process, but I haven't found anything better yet. One day I might +create a processor for a slightly modified subset of it. Until then, +libasciidoc is what I'll be using for all markup. + +Plan 9, Go +---------- +Pervasive simplicity. Sometimes it's annoying but overall you get the feeling +you have the entire platform under your control. diff --git a/Haven.adoc b/Haven.adoc new file mode 100644 index 0000000..8e5dd12 --- /dev/null +++ b/Haven.adoc @@ -0,0 +1,71 @@ +Haven +===== + +// This is a wiki of sorts, although, since no one else can edit it, +// it's just a personal wiki, or maybe just a collection of articles. +// Might name it like "writings" or even simply "db". + +As computer power user, I often get unhappy, especially as a result of +the changes that have happened over the last decade: + + - almost every application I use looks and feels different, + - senseless animations vie for my attention and add delays, + - many applications are hard to control from the keyboard, + - visual clutter distracts me from tasks at hand, + - lack of customizability sets all those problems in stone, + - and unbelievable hardware requirements, stemming from accidental complexity +and a general lack of care, push me to buy unnecessarily expensive equipment +just so that I don't feel like being _used by the computer_. + +*haven* is an umbrella project for a range of mostly desktop +applications. The greater goal is to create a fresh computing environment for +daily work and play--easily controllable, reasonably complex, both visually +and internally unified and last but not least responsive. + +I'm not trying to create anything novel but to achieve something +*elegant* and *pleasing*. + +.Related articles: + - https://lobste.rs/s/ksbcw5/12_principles_for_diverging_desktop + + While I don't fully agree with the vision, we have similar concerns. + +Further reading +--------------- +To get a better sense of the direction this project is going in, you can take +a look at a list of GoodThings and BadThings. If you're of the shallower kind, +have a look at Identity, and if you're interested in the overall design, +consult Technicalities. + +Status +------ +Trying to gain momentum, there's an astounding amount of work to be done. Hop +on if you know Go well, my contact is on the link:/[front page]. Top priority +tasks: + + - [x] start writing a detailed wiki for propagation purposes + - [ ] create a basic terminal emulator for `TERM=dumb` (exercise) + - [ ] create a basic CSV viewer (simple, useful) + - [ ] create an IRC client (lots of know-how, trivial UI) + - [ ] create a basic vi-inspired text editor (required component for later) + - [ ] create a personal wiki/organiser (urgent) + +Mockups +------- +// TODO: Mockups can be just included from different places. + +// SVG is too precise, must use HTML/CSS. + +.ht -- terminal emulator ++++ +
+
+This is just supposed to be a simple terminal emulator application.
+It ought to be a rather simple exercise.
+
+
++++ + +While I despise the Unix terminal, I can't just stop using Unix tools, and so +I'll need a means to interact with them. One day it might evolve into +a graphical terminal with a tty compatibility layer, which would need +integrating a custom POSIX shell such as https://github.com/mvdan/sh[]. diff --git a/Identity.adoc b/Identity.adoc new file mode 100644 index 0000000..b7eac66 --- /dev/null +++ b/Identity.adoc @@ -0,0 +1,33 @@ +Identity +======== + +The name "haven" merely hints at motivations and otherwise isn't of any +practical significance other than that we need an identifier. (This time +I resisted using something offensive for personal amusement.) + +A logo covering the entire project is not needed and it seems hard to figure out +anything meaningful anyway, though we might pick a specific font to use for the +project's name <1>. + + __ + <2> _/ /_ <1> | _ _ _ _ + \ _ \ |/ \ / \| \ / /_\ |/ \ + / / / / | | | | \ / | | | + /_/ /_/ | | \_/| \/ \_/ | | + +That being said, if any symbol is deeply desired, a simple "h" <2> or "hvn" +could work. I'm not sure where I took this "h" letter styling from, it seems +too familiar. The above illustrations also show how awful it looks when a logo +is just a stylized version of the first letter of a name when you put the two +next to each other. Distinctly redundant. Facebook and Twitter are doing fine, +though, perhaps because they do not use them together like that. + +Mascots +------- +I can think of two kinds of mascots that would bring me joy: an anime-style +character, or a My Little Pony OC. The color scheme would be mostly grayscale, +with something like shades of orange thrown in. + +Either of the two choices is hard to draw for me if I don't want to infringe on +someone else's copyright, so I might have to find someone else to do it. +Eventually. Priorities lie elsewhere. diff --git a/Technicalities.adoc b/Technicalities.adoc new file mode 100644 index 0000000..9fde623 --- /dev/null +++ b/Technicalities.adoc @@ -0,0 +1,77 @@ +Technicalities +============== + +Languages +--------- +Primarily Golang with limited C interfacing glue, secondarily C++17, mostly for +when the former cannot be reasonably used because of dependencies. + +Build system +------------ +https://github.com/zevv/bucklespring is a good example of a rather simplified +project that makes do with a single Makefile, even for cross-compilation on +Windows. Let us avoid CMake and the likes of it. + +It seems that Go can link dynamically, therefore I could build libhaven.so +(https://docs.google.com/document/d/1nr-TQHw_er6GOQRsF6T43GGhFDelrAP0NqSS_00RgZQ +and https://stackoverflow.com/questions/1757090/shared-library-in-go) +and have the rest of the package as rather small binaries linking to it. +The "cannot implicitly include runtime/cgo in a shared library" error is solved +by "go install", which again requires "-pkgdir" because of privileges. +libstd.so is a beautiful 30 megabytes (compared to libc.a: 4.9M). + +GUI +--- +Probably build on top of X11/Xlib or xgb. Wayland can wait until it +stabilizes--it should not be a major issue switching the backends. +Vector graphics can be handled by draw2d. + + - https://rosettacode.org/wiki/Window_creation/X11#Go + - https://github.com/llgcode/draw2d + +The c2 wiki unsurprisingly has a lot of material around the design and +realisation of GUIs, which might be useful. + +It seems like an aligning/constraint-based "layout manager" will be one of the +first harder problems here. However I certainly don't want to use fixed +coordinates as they would introduce problems with different fonts and i18n. + +We could use BDF fonts from the X11 distribution, but draw2d has native support +for FreeType fonts and it's more of a choice between vectors and bitmaps. + +The looks will be heavily inspired by Haiku and Windows 2000 and the user will +have no say in this, for simplicity. + +.Resources: + - https://github.com/golang/exp/tree/master/shiny is a GUI library + - https://github.com/as/shiny is a fork of it + - http://man.cat-v.org/plan_9/1/rio has a particular, unusual model + +Internationalisation +-------------------- +For i18n https://github.com/leonelquinteros/gotext could be used, however I'll +probably give up on this issue as I'm fine enough with English. + +Go also has x/text packages for this purpose, which might be better than GNU, +but they're essentially still in development. + +Versioning +---------- +Versions are for end users. We can use a zero-based, strictly increasing +number, be it a simple sequence or date-based numbers such as 1807. If we do +this at all, we will eventually also need to release patch versions. + +Since dates don't seem to convey important information, let us settle on 0, 1, +1.1, 2, 3, 3.1, 3.2, ... In practice releases are going to be scarce, unless +we find a person to take care of it. Note that there is no major/minor pair-- +a new project will be created when radical philosophical or architectural +changes are to be made. See Goal. + +Licensing +--------- +All will be released into the public domain. The preferred way of doing so is +the 0BSD license. + +Other people's libraries may be used or even imported if it makes sense, so long +as they're not licensed under something either viral like the GPL, or annoying +such as the original 4-clause BSD license. diff --git a/header.tmpl b/header.tmpl new file mode 100644 index 0000000..92a9fed --- /dev/null +++ b/header.tmpl @@ -0,0 +1,24 @@ + + + + + + +