# Source layout aero browser apps, compiled with ghcjs apex server-side api stuff, compiled with ghc bild temporary storage for build artifacts chip executable scripts in python, bash depo for deployment, machine-specific nix code lore shared libraries, compiled with either ghc/js mode nixos modules; services and modular config pack nix packages & external packages that we import soar s3/spaces assets, like images, via git-annex This isn't totally in place yet, but it's something to work toward. The main source directory is `lore`. Stuff in `aero` and `apex` should be small functions specific to the server/client. The two special locations are `soar` and `bild`. The former is for images and other assets to be synced to digital ocean's object storage. The latter's contents are gitignore'd and can be deleted at any time because they will just be rebuilt later. # Development To get a development shell, for example to work on ibb, you can do: $ nix-shell -A pack.ibb $ chip/make ibb The build system topology is defined in `./default.nix`, so follow the import paths there to see what's available for building and installing locally. For example, to build `ibb`: `nix-build -A pack.ibb`. Or, to build the main app server with all dependencies and configuration: `nix-build -A depo.nutin-madaj.system`. Omitting `.system` will also build a VM that you can run locally for testing. ## Goals of the developer workflow: - have minimal ceremony - default to asynchrony, but allow for synchronous work when necessary - automate the boring stuff - standardize environments, tooling, and versions to minimize friction while collaborating - support the longevity and self-sustainability of the project Ideally, each contributor should be able to go off grid for a day or a week or more, continue working offline, submit their work when finished, and have no or minimal conflicts. This also refers to the resiliance of the production systems. We should never need "out of office" email auto-replies, or urgent contact. No pager duy, no daily standups. Yes, this policy will affect what code we write, not just how we write it; that is by design. # Deployment To build the production server config locally: nix-build -A depo.nutin-madaj.system To push the built closure and switch to the new configuration (will ask for ssh passphrase 2x): chip/push nutin-madaj