Initial
This commit is contained in:
commit
bf5098ed22
8 changed files with 225 additions and 0 deletions
1
.envrc
Normal file
1
.envrc
Normal file
|
@ -0,0 +1 @@
|
|||
use flake
|
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
node_modules
|
||||
.pijul
|
||||
.direnv
|
76
design.md
Normal file
76
design.md
Normal file
|
@ -0,0 +1,76 @@
|
|||
- CLI API
|
||||
|
||||
- `mznotes install` : Install a script into the database
|
||||
- `mznotes show` : Show the information about a particular node, by ID
|
||||
|
||||
- Database of nodes + code
|
||||
|
||||
- Code
|
||||
|
||||
- Code is all interface-based. Interface implementations give specific ways
|
||||
behaviors are implemented
|
||||
|
||||
- Standard interfaces:
|
||||
- Indexed
|
||||
|
||||
- Node definition
|
||||
|
||||
```
|
||||
struct Node {
|
||||
metadata: KVStore,
|
||||
implements: Set<InterfaceURI>,
|
||||
|
||||
edges: Set<(EdgeType, Edge)>,
|
||||
}
|
||||
```
|
||||
|
||||
- Within the metadata kv store, keys are namespaced, according to the
|
||||
application name. Application names must be registered ahead of time
|
||||
|
||||
- Nodes implement interfaces, the code of which is fetched from the internet
|
||||
and validated
|
||||
|
||||
- Nodes are namespaced, although namespacing isn't the primary hierarchy
|
||||
protocol.
|
||||
|
||||
- This is needed because the database itself has a privileged namespace
|
||||
- The privileged namespace is for keeping track of database state, for
|
||||
example which scripts are trusted
|
||||
|
||||
- Database service:
|
||||
|
||||
- IFTTT Events
|
||||
|
||||
- Local vs. distributed IFTTT events?
|
||||
- Local means that ur particular device is repsonsible for running it
|
||||
- Distributed means any device can consume the event???
|
||||
- is this even a good idea? Maybe just have one dedicated worker
|
||||
device. For example, may not want to run certain automation tasks
|
||||
on phone, while others may only be able to be run on phone
|
||||
|
||||
- Cron tasks
|
||||
- Sync protocol:
|
||||
- After a modification, the modification gets written to a queue
|
||||
- CRDT?
|
||||
|
||||
- Other privileged concepts:
|
||||
|
||||
- User: a pub/priv key pair
|
||||
|
||||
- Use cases
|
||||
|
||||
- Personal journaling (like Logseq)
|
||||
- Weight / fitness tracking
|
||||
- Calendar app (store events)
|
||||
- Git app (store code)
|
||||
- File backup
|
||||
- Chat / Mail?
|
||||
- Photo viewer + indexing using ML models for face detection / keywords
|
||||
|
||||
- Not sure yet:
|
||||
- Automatic sharing of database nodes? This seems like a bad idea for
|
||||
multiple reasons. Maybe better to just have a specific app for
|
||||
doing permission models
|
||||
|
||||
- Other concerns
|
||||
- Local protection using libsecret?
|
93
flake.lock
Normal file
93
flake.lock
Normal file
|
@ -0,0 +1,93 @@
|
|||
{
|
||||
"nodes": {
|
||||
"fenix": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs",
|
||||
"rust-analyzer-src": "rust-analyzer-src"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1679466129,
|
||||
"narHash": "sha256-BQt0ADAhPAwuoq3z+iprmHyw1NeyerOw1GiIEJkANGc=",
|
||||
"owner": "nix-community",
|
||||
"repo": "fenix",
|
||||
"rev": "49237f7a76b98954306e77a7bd42f6491ad5c6a7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "fenix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"locked": {
|
||||
"lastModified": 1678901627,
|
||||
"narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "flake-utils",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1679262748,
|
||||
"narHash": "sha256-DQCrrAFrkxijC6haUzOC5ZoFqpcv/tg2WxnyW3np1Cc=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "60c1d71f2ba4c80178ec84523c2ca0801522e0a6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1663551060,
|
||||
"narHash": "sha256-e2SR4cVx9p7aW/XnVsGsWZBplApA9ZJUjc0fejJhnYo=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "8a5b9ee7b7a2b38267c9481f5c629c015108ab0d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"fenix": "fenix",
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
}
|
||||
},
|
||||
"rust-analyzer-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1679428647,
|
||||
"narHash": "sha256-gyS7UDFNzQfRKJvUDlVuM8wXCIyreBmVq+aiPXhfTlk=",
|
||||
"owner": "rust-lang",
|
||||
"repo": "rust-analyzer",
|
||||
"rev": "3321799e8fac622db50fe8c3284062f7d0f1bf53",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "rust-lang",
|
||||
"ref": "nightly",
|
||||
"repo": "rust-analyzer",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
35
flake.nix
Normal file
35
flake.nix
Normal file
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
inputs = { fenix.url = "github:nix-community/fenix"; };
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils, fenix }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
overlays = [ fenix.overlays.default ];
|
||||
};
|
||||
|
||||
toolchain = pkgs.fenix.stable;
|
||||
in rec {
|
||||
devShell = pkgs.mkShell {
|
||||
packages = (with pkgs; [
|
||||
cargo-deny
|
||||
cargo-edit
|
||||
cargo-expand
|
||||
cargo-flamegraph
|
||||
cargo-watch
|
||||
|
||||
deno
|
||||
|
||||
(python310.withPackages (p: with p; [ ipython numpy scipy sympy ]))
|
||||
]) ++ (with toolchain; [
|
||||
cargo
|
||||
rustc
|
||||
clippy
|
||||
|
||||
# Get the nightly version of rustfmt so we can wrap comments
|
||||
pkgs.fenix.default.rustfmt
|
||||
]);
|
||||
};
|
||||
});
|
||||
}
|
4
proto/mznotes.proto
Normal file
4
proto/mznotes.proto
Normal file
|
@ -0,0 +1,4 @@
|
|||
syntax = "proto3";
|
||||
|
||||
service Database {
|
||||
}
|
1
src/core/app.ts
Normal file
1
src/core/app.ts
Normal file
|
@ -0,0 +1 @@
|
|||
import { Database } from "./db.ts";
|
12
src/core/db.ts
Normal file
12
src/core/db.ts
Normal file
|
@ -0,0 +1,12 @@
|
|||
export default class Database {
|
||||
public createNode(): Node {
|
||||
// TODO: Calculate the interfaces that must be implemented
|
||||
// Using the interface application rules
|
||||
let node = new Node();
|
||||
}
|
||||
}
|
||||
|
||||
export class Node {
|
||||
public delete() {
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue