Your one-stop-cake-shop for everything Freshly Baked has to offer
1<!-- 2SPDX-FileCopyrightText: 2025 FreshlyBakedCake 3 4SPDX-License-Identifier: MIT 5--> 6 7# Welcome to the *patisserie* 8 9*~ your one-stop-cake-shop for everything Freshly Baked has to offer ~* 10 11## Structure 12 13*Patisserie* is a [monorepo](https://en.wikipedia.org/wiki/Monorepo), which means 14there are multiple projects hosted here. Here's a list! 15 16| Project | Shortcode | Description | 17| ----------------- | --------- | ------------------------------------------------------------------------------------------------- | 18| [*menu*][m] | m | Our URL shortening and [*golinks*][golinks] ("Quickly get to what you want to order") | 19| [*packetmix*][pm] | pm | Our [*NixOS*](https://nixos.org) configurations ("All you need to bake a delicious system") | 20| [*sprinkles*][s] | s | Our [*Niri*](https://github.com/YaLTeR/niri) widgets ("Add some decoration to your Niri desktop") | 21 22[m]: https://tangled.org/@freshlybakedca.ke/patisserie/tree/main/menu 23[pm]: https://tangled.org/@freshlybakedca.ke/patisserie/tree/main/packetmix 24[s]: https://tangled.org/@freshlybakedca.ke/patisserie/tree/main/sprinkles 25 26[golinks]: https://golinks.github.io/golinks/ 27 28Projects are developed in individual directories, and have a workspace file in 29`projects/${name}` to help you clone them down with everything they need. 30 31Shortcodes are used in commit messages as the first component of the area name 32in [Conventional Commit style](https://conventionalcommits.org). For example, 33feature commits to PacketMix should start with something like `feat(pm/...):`. 34For commits that affect all areas, the special shortcode `*` is used. 35 36## Cloning a single project 37 38You may clone and push to *patisserie* via [*tangled*](https://tangled.sh) as 39you usually would. If you'd like to clone only a single project, however, we 40provide a public [*josh* proxy](https://josh-project.github.io/josh/) which can 41be used to filter your clone: 42 43```bash 44git clone https://git.freshlybakedca.ke/patisserie.git:workspace=projects/packetmix.git 45# Swap out the "packetmix" at the end of the command for whatever project you want to clone 46``` 47 48If you need to push then, as with *tangled* normally, you are required to use 49SSH. 50 51*Josh* can push via SSH, but requires you to forward your SSH agent to 52authenticate your push: 53 54```ssh-config 55# In ~/.ssh/config 56Host git.freshlybakedca.ke 57 User git 58 ForwardAgent yes 59``` 60 61When you've added this section to your ssh config, you can add a custom push URL 62to use SSH. 63 64```bash 65git remote set-url --push ssh://git@git.freshlybakedca.ke/patisserie.git:workspace=projects/packetmix.git 66# Swap out "packetmix" at the end of the URL for whatever project you have cloned 67``` 68 69Except for when creating branches, pushing will work as-normal for SSH clones. 70 71### Creating new branches 72 73When pushing to *josh*, creating branches won't work on a regular `git push`. 74This is because *josh* doesn't know what state you want the rest of the 75repository to be for your branch 76 77You can tell *josh* by providing the `base=` push option like so: 78 79```bash 80git push origin HEAD:my-new-branch -o base=main 81``` 82 83If you're using a git frontend (e.g. [Jujutsu](https://jj-vcs.github.io/jj)) 84which does not allow you to set push options, you may find it useful to 85temporarily set them through the git configuration while performing git 86operations. In Jujutsu, you might do that through these aliases: 87 88```toml 89[aliases] 90josh-push-base-main = [ 'util', 'exec', '--', 'sh', '-c', 'git config push.pushOption base=main && jj git push "$@"; git config --unset push.pushOption', '--' ] 91josh-push-create = [ 'util', 'exec', '--', 'sh', '-c', 'git config push.pushOption create && jj git push "$@"; git config --unset push.pushOption', '--' ] 92josh-push-force = [ 'util', 'exec', '--', 'sh', '-c', 'git config push.pushOption force && jj git push "$@"; git config --unset push.pushOption', '--' ] 93josh-push-merge = [ 'util', 'exec', '--', 'sh', '-c', 'git config push.pushOption merge && jj git push "$@"; git config --unset push.pushOption', '--' ] 94``` 95 96You must make sure you always unset the push option, even if your push failed. 97Pushing with unexpected push options can cause accidental and annoying-to-fix 98actions to be taken on your behalf 99 100### Signing commits 101 102As *josh* rewrites commits, they will not be validly signed everywhere. 103We therefore recommend you turn off commit signing for *patisserie* or any 104subprojects which you clone down 105 106For example, 107 108```bash 109git config commit.gpgsign false 110``` 111 112or 113 114```bash 115jj config set --repo git.sign-on-push false 116```