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 | Description |
17| ----------- | ------------------------------------------------------------------------------------------------- |
18| *packetmix* | Our [*NixOS*](https://nixos.org) configurations ("All you need to bake a delicious system") |
19| *sprinkles* | Our [*Niri*](https://github.com/YaLTeR/niri) widgets ("Add some decoration to your Niri desktop") |
20
21## Cloning a single project
22
23You may clone and push to *patisserie* via [*tangled*](https://tangled.sh) as
24you usually would. If you'd like to clone only a single project, however, we
25provide a public [*josh* proxy](https://josh-project.github.io/josh/) which can
26be used to filter your clone:
27
28```bash
29git clone https://git.freshlybakedca.ke/patisserie.git:workspace=projects/packetmix.git
30# Swap out the "packetmix" at the end of the command for whatever project you want to clone
31```
32
33If you need to push then, as with *tangled* normally, you are required to use
34SSH.
35
36*Josh* can push via SSH, but requires you to forward your SSH agent to
37authenticate your push:
38
39```ssh-config
40# In ~/.ssh/config
41Host git.freshlybakedca.ke
42 User git
43 ForwardAgent yes
44```
45
46When you've added this section to your ssh config, you can add a custom push URL
47to use SSH.
48
49```bash
50git remote set-url --push ssh://git@git.freshlybakedca.ke/patisserie.git:workspace=projects/packetmix.git
51# Swap out "packetmix" at the end of the URL for whatever project you have cloned
52```
53
54Except for when creating branches, pushing will work as-normal for SSH clones.
55
56### Creating new branches
57
58When pushing to *josh*, creating branches won't work on a regular `git push`.
59This is because *josh* doesn't know what state you want the rest of the
60repository to be for your branch
61
62You can tell *josh* by providing the `base=` push option like so:
63
64```bash
65git push origin HEAD:my-new-branch -o base=main
66```
67
68If you're using a git frontend (e.g. [Jujutsu](https://jj-vcs.github.io/jj))
69which does not allow you to set push options, you may find it useful to
70temporarily set them through the git configuration while performing git
71operations. In Jujutsu, you might do that through these aliases:
72
73```toml
74[aliases]
75josh-push-base-main = [ 'util', 'exec', '--', 'sh', '-c', 'git config push.pushOption base=main && jj git push "$@"; git config --unset push.pushOption', '--' ]
76josh-push-create = [ 'util', 'exec', '--', 'sh', '-c', 'git config push.pushOption create && jj git push "$@"; git config --unset push.pushOption', '--' ]
77josh-push-force = [ 'util', 'exec', '--', 'sh', '-c', 'git config push.pushOption force && jj git push "$@"; git config --unset push.pushOption', '--' ]
78josh-push-merge = [ 'util', 'exec', '--', 'sh', '-c', 'git config push.pushOption merge && jj git push "$@"; git config --unset push.pushOption', '--' ]
79```
80
81You must make sure you always unset the push option, even if your push failed.
82Pushing with unexpected push options can cause accidental and annoying-to-fix
83actions to be taken on your behalf
84
85### Signing commits
86
87As *josh* rewrites commits, they will not be validly signed everywhere.
88We therefore recommend you turn off commit signing for *patisserie* or any
89subprojects which you clone down
90
91For example,
92
93```bash
94git config commit.gpgsign false
95```
96
97or
98
99```bash
100jj config set --repo git.sign-on-push false
101```