fabrica

hanna/fabrica

style(web): rework the migration form

3a40d80 · hanna committed on 2026-07-26

Rename "Migrate from Git" to "New migration" (page and + menu). Move the
Mirror / LFS Files / Private checkboxes into a single row to the right of
the submit button, rename the button to "Migrate", and give the row top
margin so it no longer hugs the description field.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed by hannaSSH key fingerprint: SHA256:4g9cWhkAAw8gwqhJUcVbSnGEvdGwklW+1Aa/fMUu59k
32 files changed · +64 −9UnifiedSplit
crates/web/src/layout.rs +1 −1
@@ -99,7 +99,7 @@ fn create_menu(_chrome: &Chrome) -> Markup {
9999 (icon(Icon::Box)) span { "New repository" }
100100 }
101101 a class="menu-item" role="menuitem" href="/new/migrate" {
102- (icon(Icon::Download)) span { "Migrate from Git" }
102+ (icon(Icon::Download)) span { "New migration" }
103103 }
104104 a class="menu-item" role="menuitem" href="/new/issue" {
105105 (icon(Icon::Issue)) span { "New issue" }
crates/web/src/pages.rs +9 −8
@@ -468,7 +468,7 @@ pub async fn migrate_form(
468468 ) -> Response {
469469 let (jar, chrome) = build_chrome(&state, jar, Some(user.clone()), uri.path().to_string());
470470 let body = migrate_body(&chrome.csrf, &user.username, None, "", "");
471- (jar, page(&chrome, "Migrate from Git", body)).into_response()
471+ (jar, page(&chrome, "New migration", body)).into_response()
472472 }
473473
474474 /// Migrate-from-Git form fields.
@@ -522,7 +522,7 @@ pub async fn migrate_submit(
522522 (
523523 axum::http::StatusCode::BAD_REQUEST,
524524 jar,
525- page(&chrome, "Migrate from Git", body),
525+ page(&chrome, "New migration", body),
526526 )
527527 .into_response()
528528 }
@@ -606,7 +606,7 @@ async fn do_migrate(state: &AppState, user: &User, form: &MigrateForm) -> Result
606606 fn migrate_body(csrf: &str, owner: &str, error: Option<&str>, url: &str, name: &str) -> Markup {
607607 html! {
608608 div class="new-repo" {
609- h1 { "Migrate from Git" }
609+ h1 { "New migration" }
610610 @if let Some(msg) = error { div class="notice notice-error" { (msg) } }
611611 div class="card" {
612612 form method="post" action="/new/migrate" {
@@ -619,17 +619,18 @@ fn migrate_body(csrf: &str, owner: &str, error: Option<&str>, url: &str, name: &
619619 input type="text" name="username" placeholder="username (optional)" autocomplete="off";
620620 input type="password" name="secret" placeholder="password / token (optional)" autocomplete="off";
621621 }
622- label { "Migration options" }
623- label class="checkbox" { input type="checkbox" name="mirror" value="1"; " This repository will be a mirror (keep pulling from the source)" }
624- label class="checkbox" { input type="checkbox" name="migrate_lfs" value="1"; " Migrate LFS files" }
625622 label { "Owner" }
626623 input type="text" value=(owner) disabled;
627624 label for="mg-name" { "Repository name" }
628625 input type="text" id="mg-name" name="name" value=(name) required;
629- label class="checkbox" { input type="checkbox" name="private" value="1"; " Make repository private" }
630626 label for="mg-desc" { "Description" }
631627 textarea id="mg-desc" name="description" rows="3" {}
632- button class="btn btn-primary inline-btn" type="submit" { "Migrate repository" }
628+ div class="admin-form-actions" {
629+ button class="btn btn-primary inline-btn" type="submit" { "Migrate" }
630+ label class="checkbox" { input type="checkbox" name="mirror" value="1"; " Mirror" }
631+ label class="checkbox" { input type="checkbox" name="migrate_lfs" value="1"; " LFS Files" }
632+ label class="checkbox" { input type="checkbox" name="private" value="1"; " Private" }
633+ }
633634 }
634635 }
635636 }
data/repos/01/01kye430gcj8z731smf1y2m0tk.git/FETCH_HEAD +2 −0
@@ -0,0 +1,2 @@
1+eb0238991c5e8cded8232343b4000884094a1b1a branch 'darwin' of https://github.com/hqnna/dots
2+37157e7f0e8a390c3579e4bfc14dbbbf1d06a711 branch 'main' of https://github.com/hqnna/dots
data/repos/01/01kye430gcj8z731smf1y2m0tk.git/HEAD +1 −0
@@ -0,0 +1 @@
1+ref: refs/heads/main
data/repos/01/01kye430gcj8z731smf1y2m0tk.git/config +9 −0
@@ -0,0 +1,9 @@
1+[core]
2+ bare = true
3+ repositoryformatversion = 0
4+ filemode = true
5+ logallrefupdates = true
6+[receive]
7+ denyNonFastForwards = false
8+[gc]
9+ auto = 0
data/repos/01/01kye430gcj8z731smf1y2m0tk.git/description +1 −0
@@ -0,0 +1 @@
1+Unnamed repository; edit this file 'description' to name the repository.
data/repos/01/01kye430gcj8z731smf1y2m0tk.git/hooks/README.sample +5 −0
@@ -0,0 +1,5 @@
1+#!/bin/sh
2+#
3+# Place appropriately named executable hook scripts into this directory
4+# to intercept various actions that git takes. See `git help hooks` for
5+# more information.
data/repos/01/01kye430gcj8z731smf1y2m0tk.git/hooks/post-receive +2 −0
@@ -0,0 +1,2 @@
1+#!/bin/sh
2+exec "/nix/store/h82ma3xy1n0l30rc08wrzwg1jszpl05l-fabrica-0.1.0/bin/.fabrica-wrapped" hook post-receive
data/repos/01/01kye430gcj8z731smf1y2m0tk.git/hooks/pre-receive +2 −0
@@ -0,0 +1,2 @@
1+#!/bin/sh
2+exit 0
data/repos/01/01kye430gcj8z731smf1y2m0tk.git/info/exclude +2 −0
@@ -0,0 +1,2 @@
1+# File patterns to ignore; see `git help ignore` for more information.
2+# Lines that start with '#' are comments.
data/repos/01/01kye430gcj8z731smf1y2m0tk.git/logs/HEAD +1 −0
@@ -0,0 +1 @@
1+0000000000000000000000000000000000000000 37157e7f0e8a390c3579e4bfc14dbbbf1d06a711 hanna <me@hanna.lol> 1785032967 -0400 fetch --prune --quiet https://github.com/hqnna/dots +refs/heads/*:refs/heads/* +refs/tags/*:refs/tags/*: storing head
data/repos/01/01kye430gcj8z731smf1y2m0tk.git/logs/refs/heads/darwin +1 −0
@@ -0,0 +1 @@
1+0000000000000000000000000000000000000000 eb0238991c5e8cded8232343b4000884094a1b1a hanna <me@hanna.lol> 1785032967 -0400 fetch --prune --quiet https://github.com/hqnna/dots +refs/heads/*:refs/heads/* +refs/tags/*:refs/tags/*: storing head
data/repos/01/01kye430gcj8z731smf1y2m0tk.git/logs/refs/heads/main +1 −0
@@ -0,0 +1 @@
1+0000000000000000000000000000000000000000 37157e7f0e8a390c3579e4bfc14dbbbf1d06a711 hanna <me@hanna.lol> 1785032967 -0400 fetch --prune --quiet https://github.com/hqnna/dots +refs/heads/*:refs/heads/* +refs/tags/*:refs/tags/*: storing head
data/repos/01/01kye430gcj8z731smf1y2m0tk.git/objects/pack/pack-2d54248c7887b3f612ba16762309f1f7032c936f.idx +0 −0

Binary file not shown.

data/repos/01/01kye430gcj8z731smf1y2m0tk.git/objects/pack/pack-2d54248c7887b3f612ba16762309f1f7032c936f.pack +0 −0

Binary file not shown.

data/repos/01/01kye430gcj8z731smf1y2m0tk.git/objects/pack/pack-2d54248c7887b3f612ba16762309f1f7032c936f.rev +0 −0

Binary file not shown.

data/repos/01/01kye430gcj8z731smf1y2m0tk.git/refs/heads/darwin +1 −0
@@ -0,0 +1 @@
1+eb0238991c5e8cded8232343b4000884094a1b1a
data/repos/01/01kye430gcj8z731smf1y2m0tk.git/refs/heads/main +1 −0
@@ -0,0 +1 @@
1+37157e7f0e8a390c3579e4bfc14dbbbf1d06a711
data/repos/01/01kye498csyp3krt514nm0pn1p.git/HEAD +1 −0
@@ -0,0 +1 @@
1+ref: refs/heads/main
data/repos/01/01kye498csyp3krt514nm0pn1p.git/config +9 −0
@@ -0,0 +1,9 @@
1+[core]
2+ bare = true
3+ repositoryformatversion = 0
4+ filemode = true
5+ logallrefupdates = true
6+[receive]
7+ denyNonFastForwards = false
8+[gc]
9+ auto = 0
data/repos/01/01kye498csyp3krt514nm0pn1p.git/description +1 −0
@@ -0,0 +1 @@
1+Unnamed repository; edit this file 'description' to name the repository.
data/repos/01/01kye498csyp3krt514nm0pn1p.git/hooks/README.sample +5 −0
@@ -0,0 +1,5 @@
1+#!/bin/sh
2+#
3+# Place appropriately named executable hook scripts into this directory
4+# to intercept various actions that git takes. See `git help hooks` for
5+# more information.
data/repos/01/01kye498csyp3krt514nm0pn1p.git/hooks/post-receive +2 −0
@@ -0,0 +1,2 @@
1+#!/bin/sh
2+exec "/nix/store/h82ma3xy1n0l30rc08wrzwg1jszpl05l-fabrica-0.1.0/bin/.fabrica-wrapped" hook post-receive
data/repos/01/01kye498csyp3krt514nm0pn1p.git/hooks/pre-receive +2 −0
@@ -0,0 +1,2 @@
1+#!/bin/sh
2+exit 0
data/repos/01/01kye498csyp3krt514nm0pn1p.git/info/exclude +2 −0
@@ -0,0 +1,2 @@
1+# File patterns to ignore; see `git help ignore` for more information.
2+# Lines that start with '#' are comments.
data/repos/01/01kye498csyp3krt514nm0pn1p.git/logs/HEAD +1 −0
@@ -0,0 +1 @@
1+0000000000000000000000000000000000000000 60d5eafa40f15c5017e1c46bde454345e223be57 hanna <me@hanna.lol> 1785033180 -0400 push
data/repos/01/01kye498csyp3krt514nm0pn1p.git/logs/refs/heads/main +1 −0
@@ -0,0 +1 @@
1+0000000000000000000000000000000000000000 60d5eafa40f15c5017e1c46bde454345e223be57 hanna <me@hanna.lol> 1785033180 -0400 push
data/repos/01/01kye498csyp3krt514nm0pn1p.git/objects/0b/35519294f2dc62e1b91d46f9f23461dd4dc8c0 +0 −0

Binary file not shown.

data/repos/01/01kye498csyp3krt514nm0pn1p.git/objects/3e/1848c2b4e70b410cb744a9485bb73280a9d1f0 +0 −0

Binary file not shown.

data/repos/01/01kye498csyp3krt514nm0pn1p.git/objects/60/d5eafa40f15c5017e1c46bde454345e223be57 +0 −0

Binary file not shown.

data/repos/01/01kye498csyp3krt514nm0pn1p.git/objects/ed/7f065089247f7fdd358088746e24cf73a95ee5 +0 −0

Binary file not shown.

data/repos/01/01kye498csyp3krt514nm0pn1p.git/refs/heads/main +1 −0
@@ -0,0 +1 @@
1+60d5eafa40f15c5017e1c46bde454345e223be57