1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# This terminal draws braille, ∅ and the rounded borders fine; keep the full set.
= "default"
= "full"
# Worktrees are rows too; Submodules stay hidden.
= true
= false
# advance_on_toggle = false # true also moves the cursor down after space checks a row
# notice_timeout = "3s" # "0s" turns the timer off, not Notices
# One declared action runs after a refresh you asked for: `r` and `R`, never the
# background sweep.
= "tidy"
# The same shape either side of the built-in sync. Both default to nothing.
# before_sync = "tidy"
# after_sync = "tidy"
# The lifecycle: refresh looks at git state alone, always on; fetch reaches the
# network to keep that state current, off by default; auto_update rides fetch's
# cycle to fast-forward what it finds behind. The built-in `sync` action does
# that same fast-forward on demand, on the same eligibility rule, whenever
# asked rather than on fetch's own cycle; `sync` is also the name of the Cell
# comparing an Entity against its upstream, a different thing from the action.
# Full picture:
# https://github.com/paulchiu/repon/blob/main/docs/spec/config.md#refresh-fetch-and-auto-update
[]
= "2s" # "0s" turns the sweep off
= "5m"
= true
[]
= true
= "5m"
= 4
[]
= true # fast-forward only, rides the fetch cycle
# Everything, both roots. First declared, so this is the default Set.
[[]]
= "dev"
= ["~/dev", "~/dev-misc"]
# One client, minus the graveyard. Globs are case-sensitive. Its own on_refresh
# names tidy explicitly, so a later edit to the top-level default cannot retarget
# this Set's refresh key by accident.
[[]]
= "work"
= ["~/dev"]
= ["**/acme/**"]
= ["**/archive/**", "**/node_modules/**"]
= "tidy"
# A Set's own hook wins over the top-level one for the rows in this Set.
= "tidy"
# before_sync = "tidy"
# origin/HEAD on this one still says master; pin it.
[[]]
= "~/dev/legacy-api"
= "main"
# A vendored mirror. List it, never touch it.
[[]]
= "~/dev/vendor-mirror"
= true
[[]]
= "lazygit"
= ["lazygit"]
[[]]
= "tuicr"
= ["tuicr"]
# VISUAL, then EDITOR, then vi. "code --wait" splits into two argv elements.
[[]]
= "editor"
= "EDITOR"
# env = {} # merged over the guaranteed set
# disabled = false # drops a shipped default
# The pipe is why this one opts into the shell.
[[]]
= "log"
= ["git log --oneline -20 | less"]
= true
# interactive = false # $SHELL -ic instead of -c: sources your rc file, needs shell = true
# tmux returns the instant the pane exists, so Repon keeps its screen rather than
# tearing it down and reclaiming it for nothing.
[[]]
= "pane"
= ['tmux split-window -c "$REPON_REPO_PATH" lazygit']
= true
= false
# Step two runs only if step one exited zero.
[[]]
= "reinstall"
= "Reinstall dependencies from scratch"
= 4
= "kind:repo" # skip Worktrees and Submodules: they share node_modules with the Repo
# confirm = true # ask before fanning out
[[]]
= ["rm", "-rf", "node_modules"]
# shell = false # runs through $SHELL -c
# without it, $VAR and $(cmd) above stay literal, not expanded
# interactive = false # $SHELL -ic instead of -c: sources your rc file, needs shell = true
# env = {} # merged over the guaranteed environment contract
[[]]
= ["pnpm", "install"]
[[]]
= "tidy"
= "Whatever each Repo needs once its state is fresh"
= 4
[[]]
= ["tidy-repo"]
# Only what changes. Everything else keeps the default map.
[]
= "ctrl-l" # a rebind moves the binding: plain r stops refreshing
[]
= "" # unbind it entirely