Oddbean new post about | logout
 It's already here with https://gitworkshop.dev/.

It uses NIP-34 (git stuff) and the github cli-extension handles all the nostr stuff for you. I use it daily now and it works perfectly with all existing git tools, which is key. 
 Indeed.  And you can deploy it to your #pubkey home server for github-free censorship-resistant git.  That is a big step. 
 The friction on this is still too high so we have work to do 
 Can you describe the issues you are facing, where the friction is felt most?  
 Mostly in need of clarity on what configurable fields are, nostr requirements/dependencies that must be met before using and walkthrough flows. See my response to Dan on what is getting me tripped up 
 I agree with you there, some more hand-holding/explainers on the ngit init steps would be very helpful indeed. And thanks for posting such a detailed overview of the issues you experience!

  
 Let's reduce the friction. Any ideas? 
 🔴 Cloning the ngit-cli repo

Steps aren't obvious for where the code for ngit can be found. The push is primarily towards trusting prebuilt binaries.  Eventually I found 
https://codeberg.com/DanConwayDev/ngit-cli.git and https://github.com/DanConwayDev/ngit-cli.git

🔴 Building / Installing

Obviously depends on rust, so need to have that toolchain configured.  For people new to rust, indicating how to setup that toolchain could be a useful addition to the repository in either the README.md or INSTALL.md

🔴 NGIT INIT

Running ngit init presents a qr code to use in a remote signer. I choose 'n' for no, and have a prompt for login with nsec, bunker url, or nostr address.  I choose a nostr address which isn't configured for remote login.  So then I try to just spin up a new nsec, and save the login details.

Then I'm prompted for name (mine? the repo?), identifier, and description.  After analyzing nip-34, I beleive this correlates to the name of the repository, d-tag, and description.  After that is successfully entered, I get prompted for clone url (for fetch), so I use a mirror

name                    Corny Chat
identifier              corny-chat
description             🌽 Corny Chat is an open source audio space built on Jam that integrates Nostr and Lightning 
clone url               https://github.com/vicariousdrama/cornychat.git
web                     https://gitworkshop.dev/repo/corny-chat
maintainers             @Vic
relays                  ?
earliest unique commit  98fbb6e3aea7cf16a56e15ca959c4a7de4ef69bc    (Jan 3, 2024)

I didn't know what to put for relays and tried to enter a question mark thinking that would provide help on whether I need to specify a comma delimited list of values, include wss:// prefix etc.  Nope, it took that question mark as the string to attempt and later indicated impossible to parse URL: relative URL without a base.  For obvious reasions, the built in attempt to use nostr.mutinywallet.com also failed.

A maintainers.yaml file was created. I make changes to the file for the relays. Then commit and merge using normal git commands.

🔴 NGIT SEND

Next I attempt to ngit send and need to select commits for proposal. I'll just select the one I just sent. I get the warning about it already being in main, but I send anyway.  I get an error that it cannot find profile.

Seeing as my generated nsec/npub has no profile yet, I guess this is a dependency. So I quickly make a kind 0 event and retry

Next it declares that it cannot find my relay ilst and I should consider using another nostr client to create one to enhance my nostr experience.  At least it recognizes that I'm logged in as corny-chat-ngit-signer.  I attempt to configure relays via nostrudel, but ngit never sees those updates.  Weird that it can't just work with the relays specified in the maintainers.yaml file. So then I login to coracle and configure relays there with the hopes it'll publish the requisite events.  It claim kind 10002 is being published

Now it seems to progress. I make a test branch, simple file change, local commit, then ngit send

repo-relay is still failing for impossible to parse URL : relative URL without a base
One of the relays I've configured requires auth, but it seems to have pushed it and provided this output

view in gitworkshop.dev: https://gitworkshop.dev/repo/naddr1qq9xxmmjdeuj6cmgv96qygqn7mkzvjfccq5uce5hfe7xajncf6z6mc2asalaqxsdyvnffqechcpsgqqqw7vszqfll2f979/proposal/nevent1qqsrzgr0g90t8fnlt8mevueysn6w7nn07a0ensl2jfg7t36p66tuqmqpqylszfr3yf
view in another client:  https://njump.me/nevent1qqsrzgr0g90t8fnlt8mevueysn6w7nn07a0ensl2jfg7t36p66tuqmqpqylszfr3yf

Attempting to view that link in gitworkshop.dev failed Error! reference in URL is not a repository, proposal, issue or npub reference:
nevent1qqsrzgr0g90t8fnlt8mevueysn6w7nn07a0ensl2jfg7t36p66tuqmqpqylszfr3yf

The njump.me link works however so that's good

🔴 NGIT LIST

I see my ngit test proposal.  This is as far as I've looked into this today. 
 TL;DR --- Skipping past the don't trust verify that should apply to all code and preference for hand holding to get to a built state, the actual application needs some care to make it more informative, and more forgiving. If something is configured wrong, prompt for new values. Provide some way to "go back" in the config steps. Be overly clear on what is expected of each field as the context could be the user or the repo. I still dont know what value I need for repo-relay or its relevance

 https://i.nostr.build/8I6CNqN2C3DpLw8g.png 
 Thanks for your detailed outline of your experience. it is super helpful. The most recent changes to the master branch was actually related to some of providing a bit more guidance to the `ngit init` fields. We still have a way to go. 
 We'll get there. I want this for sure and its totally feasible. I know there are projects using it successfully today, I just want to make sure we get this as smooth as butter 
 nostr:nprofile1qqszrdqezqk63lqt4yzgftkfxjl4tdatea67akeezf8g6a0yj86p5hsppemhxue69uhkummn9ekx7mp0qyg8wumn8ghj7mn0wd68ytnddakj7qg3waehxw309ahx7um5wgh8w6twv5hs7hzcmq, it's super easy to use once your onboarded. Perhaps this is one of the things we need to spread P2P.. 

Would you like a short onboarding session? 
 May i recommend regular demos via hivetalk.org? 
 nostr:nprofile1qqszrdqezqk63lqt4yzgftkfxjl4tdatea67akeezf8g6a0yj86p5hsppemhxue69uhkummn9ekx7mp0qyg8wumn8ghj7mn0wd68ytnddakj7qg3waehxw309ahx7um5wgh8w6twv5hs7hzcmq I don't work on ngit, though I was recently onboarded and I'm happy to share what I have learnt with other people who want to use it. 

Regular demos might be interested for nostr:nprofile1qqs2qzx779ted7af5rt04vzw3l2hpzfgtk0a2pw6t2plaz4d2734vngpzamhxue69uhhyetvv9ujumn0wd68ytnzv9hxgtcppemhxue69uhkummn9ekx7mp0qy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7hycrvd though... 
 Yes. That's a good idea. I'm in the process of making some improvements to the on-boarding experience so once I've made that easier and more forgiving I'll do some video demos and live sessjons.