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```