Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nix flake(s) for taskwarrior installation. #107

Open
a-t-0 opened this issue Sep 10, 2024 · 0 comments
Open

Nix flake(s) for taskwarrior installation. #107

a-t-0 opened this issue Sep 10, 2024 · 0 comments

Comments

@a-t-0
Copy link
Contributor

a-t-0 commented Sep 10, 2024

Feature Description

Thank you for having a look at the requirement specification! If you like open source and privacy, please keep on reading!

(100)This is a description for 1, or 2 (in case Android needs a separate flake) working Nix flake(s) (from NixOS) that installs:
- Taskwarrior 3.1
- Timewarrior
- A self-hosted sync-service (E.g. Nextcloud).
- (Optional: TaskChampion Sync Server)
on Ubuntu and Android (LineageOS), with self-signed SSL certificates for syncing over Tor.

Additional features:

B0. (15) If you include Taskwarrior and Timewarrior integration with DAVx5 Calendar syncing with automated onion configuration (on Android),
B0.1 (10) Including self-hosted Nextcloud - DAVx5 sync (to Android) over tor on Ubuntu 24.04) LTS).
B.1 (15) Including support for Freenet.
B.2 (10) Including support for I2P.
B.3 (10) Including support for Windows (instead ofUbuntu),
B.4 (15) if you are able to automate (escalation to WSL for) Nix support on Windows, such that it also works on Windows 11).

(Optional) Resources

The newest feature of this configuration would be the Nix flakes, I do not yet have proper experience with those.

  • The Taskwarrior installation is included (in sub-optimal form (not updated to 3.2) in this repo.

  • The TaskServer installation is included (in sub-optimal form (not updated to 3.1) in this repo.

  • The code for self-signed SSL certificates for Onion domains is found here, it is applied here.

  • Here is the F-droid taskwarrior app.

  • Here is the F-droid orbot app.

  • Here is the DAVx5 orbot app.

  • Here is a template for Bash projects, including a CLI and Bats tests, with pre-commit.

  • This is a structure that contains bash logging, and the development of Bash code in modular form, like pip packages (for Bash): 1 2 3 4 5.

Requirements

The requirements below need to be satisfied by your deliverable.
R.-1 The Nix flake(s) (and if absolutely necessary, additional software) can be ran in a single command to satisfy the requirements below.
R.0 - Shall install taskwarrior version >= 3.1.
R.1 - Shall install TimeWarrior version >= 1.7.1.
R.2 - Shall facilitate the installation of a self-hosted sync service that works over Tor with self-signed SLL certificates. (E.g. Taskchampion Sync Server or Nextcloud) .
R.4 - Shall install a Taskwarrior sync functionality on the Android phone, that works over Tor with self-signed SLL certificates.
R.5 - Shall install the F-droid Taskwarrior
R.5 - Shall install self-signed onion SSL certificates that are automatically installed on:
R.5.1 - The trust store of Ubuntu 24.04 LTS such that Firefox and Taskwarrior sync accept the self-signed root CA certificate for the selected onion domain for synchronisation over Tor.
R.5.2 - The trust store of a rooted LineageOS version >= 11 such that the Taskwarrior app sync accepts the self-signed root CA certificate, and SSL certificates for synchronisation over Tor.
R.5.3 - With public self-signed root CA cert being transferred over, either Bluetooth, ADB, QR code or wifi.

Android (Feel free to propose a counter solution for UbuntuAndroid).

R.5.3.1 - One to 3 human click (within 1 minute, so not at start and end of installation), to grant permission to installing device (Ubuntu) to Android device is allowed.
R.5.3.2 - Either a Bash script or Android2nix wrapper app (including F-droid taskwarrior app) shall be used for this purpose. (Preferably Android2nix).
R.9 - All Android configurations shall be independendent of the GUI of the apps (so no “clicking” simulation).

Bash (if used)

R.5.3.2.1 - The bash script shall consist of only functions, with the exception of: a import.sh file with file imports, a config.d/config.sh file with global export variables, a main.sh file that loads the import statements, config file, argument parser and argument processor.
R.5.3.2.2 - The bash script(s) shall have at least 95% (preferably) BashUnit (or alternatively ShellSpec or Bats) code coverage. (Preferably meaningful, branch coverage).

Tor/Onion Syncing

R.6 - The TaskChampion and Taskwarrior sync server shall sync over a tor/onion domain.
R.7 - The installed software shall setup a self-hosted .onion domain on the Ubuntu 24.04 LTS that spins up upon boot depending on:
R.7.1 - The current selected Wifi, the user shall be able to select Wifi networks upon which the tor server will stop (if running) when connecting to that Wifi, and not start when connected to that Wifi network.
R.7.2 - The onion domain shall be able to be generated from:
R.7.2.1 - A custom private key for that onion domain.
R.7.2.2 - A vanity domain substring.
R.7.2.2.1 - If the vanity domain computation is estimated to take longer than 5 minutes, the user shall receive an additional prompt with (proceed, cancel, retry) prior to finding the vanity domain.
R.7.2.3 - A human readable seed that can be deterministically mapped to a single onion domain private key (Like brainwallet).
R.7.2.3.1 - The user shall receive a warning stating that this can be an unsafe method of generating an onion domain private key, depending on the seed properties).
R.8 - If needed, the setup shall install and configure Orbot to facilitate the tor network connection.
R.8.1 - If used, Orbot will be configured to not be connected to Tor on a pre-deteremined list of Wifi networks.

Nix

R.10 - The nix flakes shall have a (separate) config that facilitates:
R.10.1 - Safely getting the onion domain private key from the user.
R.10.2 - Safely getting the self-signed SSL certificate (private keys) from the user.
R.10.3 - Which network protocol for shall be used for sync (E.g. Tor, Freenet).
R.10.4 - Which wifi networks will not facilitate tor connections on the Ubuntu LTS
R.10.5 - Which wifi networks will not facilitate tor connections on Orbot.

Code quality requirements

R.11 - The PR shall be pre-commit compliant.
R.12 - All code shall have (branch) code coverage > 95%.
R.13 - The task server shall run on Ubuntu 24.04 LTS.
R.14 - All prerequisites shall be checked before the installation is started.
R.15 - The software can be fully uninstalled and removed, restoring the system state to what it was before installation.
R.16 - The software can be installed, uninstalled and re-installed etc. without issues.

Ps. I am aware these requirements do not satisfy (the) 10 requirements on requirements, please feel free to ask for clarifications or suggest improvements :)

Note, I think you are able to read in between the lines what the objective is, if the requirements constrain your design option (search) space, please propose a change, so that I can optionally improve the requirement set.


  • The numbers specified are quantified as in the expression on the flyer, and will be transferred in XMR, LINK, ETH or BTC (no preference available) at the average (at 18:00 CEST) Kraken-exchange rate of the 2 days of:
    • PR submission
    • merger
  • We take care of the transaction costs, you will get the specified and agreed amounts in full.
  • Payment is initiated towards the requested address within 168 hours of merger.
  • For eligibility on bounty, propose a strategy/approach in this issue, and await for either:
    • S.0 Requested changes (with resubmission until S.1 is reached (or the bounty is closed).
    • S.1 Confirmation/GO signal on strategy/approach execution, with pending reward.

First step

Submit strategy/approach in this issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant