|xerus2000 1bee6518e6||6 days ago|
|hooks||5 months ago|
|nix||3 months ago|
|pkgs||6 days ago|
|scripts||1 week ago|
|.envrc||5 months ago|
|.gitignore||3 months ago|
|Jenkinsfile||3 months ago|
|LICENSE||5 months ago|
|Makefile||3 months ago|
|README.md||1 week ago|
|brittany.yaml||5 months ago|
|config.nix||6 days ago|
|default.nix||3 months ago|
|setup.sh||3 months ago|
|shell.nix||3 months ago|
|todos.txt||1 week ago|
Equilibrium is a modular task management framework based on the Entity-Component-System pattern.
If you do not set up lorri and direnv, you will have to enter a nix-shell via
nix-env -iA nixpkgs.lorri nixpkgs.direnv
./setup.sh(if you haven't already)
Then you should be able to use tools such as
that are provided by the
nix-shell directly in your shell.
If this doesn't work, or if you get the
lorri hasn't finished an evaluation of this project yet message,
lorri shell to force an evaluation.
# Clone the repository git clone https://codeberg.org/code-done/done.git # Go into the new project directory cd done # Run the setup script, which # - generates all necessary files # - optionally sets up git hooks for development # - asks to enter a nix-shell to start developing ./setup.sh
For faster build times (both locally and in CI), set up our cachix cache.
First, install cachix on your machine (it is not provided in the nix-shell):
nix-env -iA cachix -f https://cachix.org/api/v1/install
Then, enable the project's cache, so you can substitute to-be-built binaries with the ones from the cache:
cachix use code-done
As a team member you can get write access to the shared cache to reduce build times for others and the CI.
Follow the two steps above and execute the command found in our cloud in
make all-push or
make build-push instead of their non-
to update the caches after building.
While the make targets don't assume you are in a nix-shell,
make itself is
provided through it, so you should be inside a nix-shell for these.
make hls-setup once and whenever new files are created.
To start the Haskell Language Server you can use
$ make all)
Regenerates all generated files and tests and builds the project. The resulting
binary can be found in
$ make build)
Tests and builds the project.
$ make test)
Builds the project and test packages, compiles the tests and runs them. Also regenerates generated files if necessary.
$ make shell)
Enters a nix-shell, which forces a shell rebuild.
$ make clean)
Deletes all generated files, including
dist-newstyle folders in the packages,
which are generated by haskell-language-server.
$ make pkg)
An interactive code-generator to create new packages (or test packages).
$ make generate)
Generates all generated files. Will skip some if the project isn't clean
$ make clean).
$ make test.nix)
test.nix file, if it doesn't already exist.
$ make default.nix)
default.nix file for each package in
Edit the config.nix file and add
pkgs.PACKAGE_NAME to the
For example: If the package is
the added line should be
pkgs refers to the pinned version of nixpkgs used in the project.
You can add any other nix-package from other sources here as well.
However, make sure the version is properly pinned to avoid breaking the project in the future or on other machines.
niv to manage dependencies, including the pinned nixpkgs version.
Dependencies are pinned by including everything through a pinned version of nixpkgs, managed with
To update the pinned version, use
$ niv update.
Please check out the
taskell_board branch and refer to its README
for information on how to track issues and tasks.
We roughly follow the Kull Convention. Since we do everything on the command line there are no formal pull requests, instead reviews are requested in Taskell. You can look at this post for inspiration for a suitable setup.
In general, once a feature is in the review column of Taskell and somebody is assigned, the maintainer of that branch has to first rebase the branch on main so that everything is up to date. Then the reviewer can review the code and if everything looks good do a fast forward merge onto main.
The taskmanager is split into four categories of modules:
The core library defines the pipelines data can flow through and allows for easy combination of storage and logic modules.
The executable is the user-built main entrypoint for the program. It currently also handles user interfaces. In here, you should combine all the storage and logic modules you want to use and pass them to the core library.
Right now, a special exe-types (executable types) package is needed, its responsibilities will be divided into the core library and the executable package in the future.
Storage modules serialize and deserialize the task data into their respective storage format.
Logic modules implement features for tasks, from simple todo-states (todo/done) to scheduling.
$ make pkg tool, an interactive code-generator to create new packages in this project.