@sebastienrousseau/dotfiles 0.2.500 → 0.2.501
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +77 -0
- package/README.md +82 -44
- package/docs/.vitepress/reports/localization-readability-audit.md +4 -0
- package/docs/AI.md +8 -2
- package/docs/CNAME +1 -0
- package/docs/COPYRIGHT +1 -1
- package/docs/NAMING_CONVENTIONS.md +7 -0
- package/docs/README.md +4 -0
- package/docs/_config.yml +59 -0
- package/docs/adr/ADR-001-ci-cd-pipeline.md +17 -0
- package/docs/adr/ADR-002-shell-performance.md +9 -0
- package/docs/adr/ADR-003-security-first.md +18 -0
- package/docs/adr/ADR-004-cli-architecture.md +14 -0
- package/docs/adr/ADR-005-chezmoi-choice.md +10 -0
- package/docs/adr/ADR-006-shell-selection.md +9 -0
- package/docs/adr/ADR-007-multi-shell-parity.md +10 -1
- package/docs/adr/ADR-008-alias-system-architecture.md +10 -0
- package/docs/adr/ADR-009-wallpaper-driven-theming.md +131 -0
- package/docs/adr/ADR-010-starship-transient-prompt.md +144 -0
- package/docs/adr/ADR-011-nushell-tier3-keep.md +144 -0
- package/docs/adr/README.md +7 -0
- package/docs/architecture/ARCHITECTURE.md +4 -0
- package/docs/architecture/INTEROP.md +8 -0
- package/docs/architecture/REPO_LAYOUT.md +5 -1
- package/docs/architecture/WALKTHROUGH.md +4 -0
- package/docs/architecture/fleet-deployment.md +4 -0
- package/docs/archive/EUXIS_2026_REVIEW.md +11 -3
- package/docs/archive/LEGACY_ROADMAP.md +45 -27
- package/docs/archive/MILESTONE_v0.2.493.md +4 -0
- package/docs/archive/PLAN.md +46 -8
- package/docs/archive/REPO_AUDIT.md +8 -0
- package/docs/guides/INSTALL.md +4 -0
- package/docs/guides/NEOVIM_IDE_GUIDE.md +9 -0
- package/docs/guides/THEMING.md +8 -0
- package/docs/guides/TROUBLESHOOTING.md +28 -0
- package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +70 -1
- package/docs/index.md +6 -2
- package/docs/interop/A2A.md +7 -0
- package/docs/interop/POWERSHELL.md +102 -0
- package/docs/manual/00-introduction.md +5 -1
- package/docs/manual/01-concepts/01-architecture.md +4 -0
- package/docs/manual/01-concepts/02-trust-model.md +6 -2
- package/docs/manual/01-concepts/03-theme-engine.md +4 -0
- package/docs/manual/01-concepts/04-fleet.md +7 -1
- package/docs/manual/01-concepts/05-self-healing.md +8 -1
- package/docs/manual/02-tutorials/01-first-install.md +5 -0
- package/docs/manual/02-tutorials/02-add-wallpaper.md +5 -0
- package/docs/manual/02-tutorials/03-create-profile.md +6 -0
- package/docs/manual/02-tutorials/04-encrypt-secret.md +6 -0
- package/docs/manual/02-tutorials/05-deploy-fleet.md +5 -1
- package/docs/manual/03-reference/01-dot-cli.md +4 -0
- package/docs/manual/03-reference/02-config-files.md +8 -2
- package/docs/manual/03-reference/03-environment.md +4 -0
- package/docs/manual/03-reference/04-templates.md +7 -1
- package/docs/manual/03-reference/05-feature-flags.md +10 -0
- package/docs/manual/04-cookbook/01-recipes.md +4 -0
- package/docs/manual/04-cookbook/02-troubleshooting.md +32 -0
- package/docs/manual/04-cookbook/03-faq.md +8 -0
- package/docs/manual/05-appendices/A-platform-matrix.md +4 -0
- package/docs/manual/05-appendices/B-security-checklist.md +6 -0
- package/docs/manual/05-appendices/C-glossary.md +4 -0
- package/docs/manual/05-appendices/D-bibliography.md +5 -1
- package/docs/manual/05-appendices/E-license.md +4 -0
- package/docs/manual/_toc.yml +1 -1
- package/docs/manual/command-index.md +4 -0
- package/docs/manual/concept-index.md +4 -0
- package/docs/operations/ATTESTATION.md +5 -0
- package/docs/operations/CI_CADENCE.md +107 -0
- package/docs/operations/CI_COMPOSITES.md +156 -0
- package/docs/operations/COMPLETIONS.md +123 -0
- package/docs/operations/COVERAGE.md +148 -0
- package/docs/operations/DRIFT.md +107 -0
- package/docs/operations/MAINTENANCE.md +5 -1
- package/docs/operations/MIGRATION.md +14 -6
- package/docs/operations/OPERATIONS.md +24 -0
- package/docs/operations/PERFORMANCE.md +133 -0
- package/docs/operations/RELIABILITY.md +6 -0
- package/docs/operations/ROADMAP.md +36 -18
- package/docs/operations/TESTING.md +4 -0
- package/docs/operations/TRACEABILITY.md +4 -0
- package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +4 -0
- package/docs/operations/VERSION_SYNC.md +54 -5
- package/docs/reference/ALIASES.md +7 -0
- package/docs/reference/ALIASES_CHEATSHEET.md +5 -1
- package/docs/reference/ALIASES_DEPRECATIONS.md +5 -1
- package/docs/reference/FEATURES.md +4 -0
- package/docs/reference/FONTS.md +4 -0
- package/docs/reference/PROFILES.md +4 -0
- package/docs/reference/SCREENSHOTS.md +4 -0
- package/docs/reference/SCRIPTS.md +4 -0
- package/docs/reference/SUPPORT_MATRIX.md +10 -4
- package/docs/reference/THEMES.md +4 -0
- package/docs/reference/TOOLS.md +4 -0
- package/docs/reference/UTILS.md +16 -12
- package/docs/security/AI_ACT_COMPLIANCE.md +4 -0
- package/docs/security/AUDIT_BYPASS.md +103 -0
- package/docs/security/AUTOMATION_SECRETS.md +4 -0
- package/docs/security/CI_EGRESS_ALLOWLIST.md +127 -0
- package/docs/security/COMPLIANCE.md +5 -0
- package/docs/security/DEPS_DEV_EXCEPTIONS.md +86 -0
- package/docs/security/ENCRYPTION.md +5 -0
- package/docs/security/FMEA.md +4 -0
- package/docs/security/HISTORY_FILTERING.md +132 -0
- package/docs/security/INCIDENT_RESPONSE.md +4 -0
- package/docs/security/INSTALL_VERIFICATION.md +122 -0
- package/docs/security/KEYS.md +4 -0
- package/docs/security/KEY_ROTATION.md +4 -0
- package/docs/security/MCP_POLICY.md +9 -0
- package/docs/security/POLICY_RELEASES.md +4 -0
- package/docs/security/README.md +4 -0
- package/docs/security/SCORECARD.md +80 -0
- package/docs/security/SECRETS.md +12 -0
- package/docs/security/SECURITY.md +4 -0
- package/docs/security/SECURITY_CHECKLIST.md +11 -0
- package/docs/security/SHELL_EXEMPTIONS.md +145 -0
- package/docs/security/SOUP_REGISTER.md +4 -0
- package/docs/security/THREAT_MODEL.md +10 -0
- package/docs/security/VERIFICATION_VALIDATION.md +5 -1
- package/docs/themes/README.md +4 -0
- package/docs/themes/VISUAL_INTEGRITY_REPORT.md +4 -0
- package/dot_config/ai/identity.md +3 -0
- package/dot_config/ai/patterns/architect.md +2 -0
- package/dot_config/ai/patterns/hardener.md +2 -0
- package/dot_config/ai/patterns/refactor.md +2 -0
- package/dot_config/alacritty/alacritty.toml.tmpl +3 -3
- package/dot_config/atuin/config.toml.tmpl +47 -0
- package/dot_config/dotfiles/agent-card.json +1 -1
- package/dot_config/dotfiles/boot/README.md +2 -0
- package/dot_config/dotfiles/grub/README.md +2 -0
- package/dot_config/dotfiles/lock/README.md +2 -0
- package/dot_config/fish/conf.d/init.fish.tmpl +21 -0
- package/dot_config/fish/functions/_cached_eval.fish +84 -11
- package/dot_config/fish/functions/_cached_eval_clear.fish +17 -0
- package/dot_config/foot/foot.ini.tmpl +3 -3
- package/dot_config/fuzzel/fuzzel.ini.tmpl +2 -2
- package/dot_config/ghostty/config.tmpl +3 -3
- package/dot_config/git/hooks/executable_commit-msg +146 -0
- package/dot_config/goose/config.yaml +2 -2
- package/dot_config/gtk-3.0/gtk.css.tmpl +2 -2
- package/dot_config/gtk-3.0/settings.ini.tmpl +2 -2
- package/dot_config/gtk-4.0/gtk.css.tmpl +2 -2
- package/dot_config/gtk-4.0/settings.ini.tmpl +2 -2
- package/dot_config/kitty/kitty.conf.tmpl +3 -3
- package/dot_config/mise/config.toml +1 -1
- package/dot_config/niri/config.kdl.tmpl +2 -2
- package/dot_config/nushell/cached_eval.nu +80 -0
- package/dot_config/nushell/env.nu.tmpl +21 -13
- package/dot_config/shell/00-core-paths.sh.tmpl +1 -0
- package/dot_config/shell/05-core-safety.sh +1 -0
- package/dot_config/shell/10-secrets.sh +1 -0
- package/dot_config/shell/40-fzf-defaults.sh.tmpl +1 -0
- package/dot_config/shell/40-ls-colors.sh +1 -0
- package/dot_config/shell/50-logic-functions-core.sh.tmpl +1 -0
- package/dot_config/shell/50-logic-functions.sh.tmpl +1 -0
- package/dot_config/shell/51-logic-functions-extra.sh.tmpl +1 -0
- package/dot_config/shell/90-ux-aliases.sh.tmpl +1 -0
- package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +1 -0
- package/dot_config/shell/README.md +25 -8
- package/dot_config/starship.toml.tmpl +2 -2
- package/dot_config/tmux/tmux.conf.tmpl +3 -3
- package/dot_config/user-dirs.dirs +1 -0
- package/dot_config/vscode/settings.json.tmpl +2 -2
- package/dot_config/waybar/config.jsonc.tmpl +2 -2
- package/dot_config/waybar/style.css.tmpl +2 -2
- package/dot_config/wezterm/wezterm.lua.tmpl +3 -3
- package/dot_config/zsh/dot_zshrc.tmpl +154 -17
- package/dot_config/zsh/rc.d/00-alias-shims.zsh +28 -6
- package/dot_config/zsh/rc.d/30-options.zsh.tmpl +26 -6
- package/dot_local/bin/executable_bm +2 -0
- package/dot_local/bin/executable_dot +9 -2
- package/dot_local/bin/executable_dot-load-benchmark +1 -1
- package/dot_local/bin/executable_notify +2 -0
- package/dot_local/bin/executable_open +2 -0
- package/dot_local/bin/executable_tour +4 -2
- package/dot_local/bin/executable_up +3 -1
- package/install.sh +12 -4
- package/package.json +1 -1
- package/scripts/ci/check-dangerous-chmod.sh +19 -0
- package/scripts/ci/check-deps-dev.sh +236 -0
- package/scripts/ci/check-insecure-tls.sh +61 -0
- package/scripts/ci/check-regression-traceability.sh +67 -0
- package/scripts/ci/check-shell-preamble.sh +106 -0
- package/scripts/ci/run-coverage.sh +362 -0
- package/scripts/ci/validate-chezmoidata.sh +25 -0
- package/scripts/diagnostics/doctor.sh +173 -5
- package/scripts/diagnostics/drift-dashboard.sh +177 -13
- package/scripts/diagnostics/health.sh +21 -4
- package/scripts/diagnostics/perf.sh +304 -77
- package/scripts/diagnostics/workstation-attestation.sh +6 -1
- package/scripts/dot/commands/agent.sh +14 -5
- package/scripts/dot/commands/ai.sh +75 -10
- package/scripts/dot/lib/bento.sh +2 -1
- package/scripts/dot/lib/log.sh +6 -0
- package/scripts/dot/lib/platform.sh +1 -0
- package/scripts/dot/lib/ui.sh +11 -0
- package/scripts/dot/lib/utils.sh +5 -0
- package/scripts/git-hooks/pre-commit-audit.sh +1 -1
- package/scripts/git-hooks/pre-push +66 -3
- package/scripts/ops/heal-chezmoi.sh +41 -6
- package/scripts/qa/powershell-contract.ps1 +95 -0
- package/scripts/theme/merge-wallpaper.sh +4 -0
- package/scripts/theme/switch.sh +20 -10
- package/dot_config/atuin/config.toml +0 -40
- package/dot_local/bin/__pycache__/executable_dot-load-benchmark-ptycpython-312.pyc +0 -0
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
# WSL2 & Nix Integration Troubleshooting Guide
|
|
2
6
|
|
|
3
7
|
### Metadata
|
|
8
|
+
|
|
4
9
|
- **Type:** How-To Guide / Reference
|
|
5
10
|
- **Audience:** Intermediate / Advanced
|
|
6
11
|
- **Prerequisites:** Basic familiarity with command line, WSL2, and Nix package manager
|
|
@@ -25,6 +30,7 @@ A comprehensive troubleshooting guide for WSL2 edge cases, Nix integration issue
|
|
|
25
30
|
### Filesystem Issues
|
|
26
31
|
|
|
27
32
|
#### Problem: Symlinks fail to work between Windows and WSL2
|
|
33
|
+
|
|
28
34
|
```bash
|
|
29
35
|
# Check if symlinks are enabled
|
|
30
36
|
ls -la ~/.dotfiles/
|
|
@@ -34,13 +40,16 @@ ls -la ~/.dotfiles/
|
|
|
34
40
|
**Root Cause:** Windows filesystem doesn't support Unix symlinks by default.
|
|
35
41
|
|
|
36
42
|
**Solutions:**
|
|
43
|
+
|
|
37
44
|
1. **Enable Developer Mode** (Windows 10/11):
|
|
45
|
+
|
|
38
46
|
```powershell
|
|
39
47
|
# Run in PowerShell as Administrator
|
|
40
48
|
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
|
|
41
49
|
```
|
|
42
50
|
|
|
43
51
|
2. **Use WSL2 native filesystem**:
|
|
52
|
+
|
|
44
53
|
```bash
|
|
45
54
|
# Move dotfiles to WSL2 filesystem
|
|
46
55
|
cd ~
|
|
@@ -48,12 +57,14 @@ ls -la ~/.dotfiles/
|
|
|
48
57
|
```
|
|
49
58
|
|
|
50
59
|
3. **Configure Git for WSL2**:
|
|
60
|
+
|
|
51
61
|
```bash
|
|
52
62
|
git config --global core.symlinks true
|
|
53
63
|
git config --global core.autocrlf false
|
|
54
64
|
```
|
|
55
65
|
|
|
56
66
|
#### Problem: Slow filesystem performance on Windows drives
|
|
67
|
+
|
|
57
68
|
```bash
|
|
58
69
|
# Test filesystem performance
|
|
59
70
|
time ls -la /mnt/c/Users/
|
|
@@ -63,12 +74,14 @@ time ls -la ~/
|
|
|
63
74
|
**Solution:** Always work within WSL2 filesystem (`~/`) for performance-critical operations.
|
|
64
75
|
|
|
65
76
|
#### Problem: Permission denied errors on mounted Windows drives
|
|
77
|
+
|
|
66
78
|
```bash
|
|
67
79
|
# Check mount options
|
|
68
80
|
mount | grep drvfs
|
|
69
81
|
```
|
|
70
82
|
|
|
71
83
|
**Solution:** Remount with proper permissions:
|
|
84
|
+
|
|
72
85
|
```bash
|
|
73
86
|
# Create /etc/wsl.conf
|
|
74
87
|
sudo tee /etc/wsl.conf > /dev/null <<EOF
|
|
@@ -86,6 +99,7 @@ wsl --shutdown
|
|
|
86
99
|
### Networking Issues
|
|
87
100
|
|
|
88
101
|
#### Problem: DNS resolution fails in WSL2
|
|
102
|
+
|
|
89
103
|
```bash
|
|
90
104
|
# Test DNS resolution
|
|
91
105
|
nslookup github.com
|
|
@@ -93,15 +107,19 @@ ping github.com
|
|
|
93
107
|
```
|
|
94
108
|
|
|
95
109
|
**Solutions:**
|
|
110
|
+
|
|
96
111
|
1. **Reset WSL2 DNS**:
|
|
112
|
+
|
|
97
113
|
```bash
|
|
98
114
|
sudo rm /etc/resolv.conf
|
|
99
115
|
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
|
|
100
116
|
```
|
|
101
117
|
|
|
102
118
|
2. **Configure permanent DNS**:
|
|
119
|
+
|
|
103
120
|
```bash
|
|
104
121
|
sudo tee /etc/wsl.conf > /dev/null <<EOF
|
|
122
|
+
|
|
105
123
|
[network]
|
|
106
124
|
generateResolvConf = false
|
|
107
125
|
EOF
|
|
@@ -110,6 +128,7 @@ EOF
|
|
|
110
128
|
nameserver 1.1.1.1
|
|
111
129
|
nameserver 8.8.8.8
|
|
112
130
|
EOF
|
|
131
|
+
|
|
113
132
|
```
|
|
114
133
|
|
|
115
134
|
#### Problem: Port forwarding doesn't work
|
|
@@ -119,6 +138,7 @@ netstat -tulpn | grep :3000
|
|
|
119
138
|
```
|
|
120
139
|
|
|
121
140
|
**Solution:** Use Windows port proxy:
|
|
141
|
+
|
|
122
142
|
```powershell
|
|
123
143
|
# Run in PowerShell as Administrator
|
|
124
144
|
netsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress=172.x.x.x
|
|
@@ -127,6 +147,7 @@ netsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 conne
|
|
|
127
147
|
### Memory and Resource Issues
|
|
128
148
|
|
|
129
149
|
#### Problem: WSL2 consumes excessive memory
|
|
150
|
+
|
|
130
151
|
```bash
|
|
131
152
|
# Check WSL2 memory usage
|
|
132
153
|
cat /proc/meminfo | grep MemTotal
|
|
@@ -134,6 +155,7 @@ free -h
|
|
|
134
155
|
```
|
|
135
156
|
|
|
136
157
|
**Solution:** Limit WSL2 memory usage:
|
|
158
|
+
|
|
137
159
|
```ini
|
|
138
160
|
# Create %UserProfile%\.wslconfig
|
|
139
161
|
[wsl2]
|
|
@@ -143,7 +165,9 @@ swap=2GB
|
|
|
143
165
|
```
|
|
144
166
|
|
|
145
167
|
#### Problem: WSL2 doesn't release memory back to Windows
|
|
168
|
+
|
|
146
169
|
**Solution:** Compact WSL2 virtual disk:
|
|
170
|
+
|
|
147
171
|
```powershell
|
|
148
172
|
# Run in PowerShell as Administrator
|
|
149
173
|
wsl --shutdown
|
|
@@ -162,6 +186,7 @@ diskpart
|
|
|
162
186
|
### Installation Problems
|
|
163
187
|
|
|
164
188
|
#### Problem: Nix installation fails on WSL2
|
|
189
|
+
|
|
165
190
|
```bash
|
|
166
191
|
# Check if installation attempted
|
|
167
192
|
ls -la /nix/
|
|
@@ -169,23 +194,29 @@ which nix
|
|
|
169
194
|
```
|
|
170
195
|
|
|
171
196
|
**Solutions:**
|
|
197
|
+
|
|
172
198
|
1. **Use deterministic installer**:
|
|
199
|
+
|
|
173
200
|
```bash
|
|
174
201
|
curl -L https://nixos.org/nix/install | sh -s -- --daemon
|
|
175
202
|
```
|
|
176
203
|
|
|
177
204
|
2. **Fix permissions after installation**:
|
|
205
|
+
|
|
178
206
|
```bash
|
|
179
207
|
sudo chown -R $(whoami) /nix/var/nix/profiles/per-user/$(whoami)/
|
|
180
208
|
sudo chmod -R 755 /nix/var/nix/profiles/per-user/$(whoami)/
|
|
181
209
|
```
|
|
182
210
|
|
|
183
211
|
3. **Enable systemd for Nix daemon** (WSL2 Ubuntu 22.04+):
|
|
212
|
+
|
|
184
213
|
```bash
|
|
185
214
|
sudo tee /etc/wsl.conf > /dev/null <<EOF
|
|
215
|
+
|
|
186
216
|
[boot]
|
|
187
217
|
systemd=true
|
|
188
218
|
EOF
|
|
219
|
+
|
|
189
220
|
```
|
|
190
221
|
|
|
191
222
|
#### Problem: Nix flakes not recognized
|
|
@@ -195,6 +226,7 @@ nix flake --help
|
|
|
195
226
|
```
|
|
196
227
|
|
|
197
228
|
**Solution:** Enable experimental features:
|
|
229
|
+
|
|
198
230
|
```bash
|
|
199
231
|
mkdir -p ~/.config/nix/
|
|
200
232
|
tee ~/.config/nix/nix.conf > /dev/null <<EOF
|
|
@@ -210,18 +242,22 @@ EOF
|
|
|
210
242
|
```
|
|
211
243
|
|
|
212
244
|
#### Problem: SSL certificate errors during Nix operations
|
|
245
|
+
|
|
213
246
|
```bash
|
|
214
247
|
# Test Nix store access
|
|
215
248
|
nix ping-store
|
|
216
249
|
```
|
|
217
250
|
|
|
218
251
|
**Solutions:**
|
|
252
|
+
|
|
219
253
|
1. **Update CA certificates**:
|
|
254
|
+
|
|
220
255
|
```bash
|
|
221
256
|
sudo apt update && sudo apt install ca-certificates
|
|
222
257
|
```
|
|
223
258
|
|
|
224
259
|
2. **Configure Nix with custom CA bundle**:
|
|
260
|
+
|
|
225
261
|
```bash
|
|
226
262
|
export NIX_SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
|
|
227
263
|
echo 'export NIX_SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt' >> ~/.bashrc
|
|
@@ -230,6 +266,7 @@ nix ping-store
|
|
|
230
266
|
### Flake and Profile Issues
|
|
231
267
|
|
|
232
268
|
#### Problem: Flake lock file conflicts
|
|
269
|
+
|
|
233
270
|
```bash
|
|
234
271
|
# Check flake lock status
|
|
235
272
|
cd ~/.dotfiles/nix/
|
|
@@ -237,6 +274,7 @@ nix flake check --impure
|
|
|
237
274
|
```
|
|
238
275
|
|
|
239
276
|
**Solution:** Update and rebuild lock file:
|
|
277
|
+
|
|
240
278
|
```bash
|
|
241
279
|
cd ~/.dotfiles/nix/
|
|
242
280
|
rm flake.lock
|
|
@@ -245,6 +283,7 @@ nix flake check
|
|
|
245
283
|
```
|
|
246
284
|
|
|
247
285
|
#### Problem: Nix profile conflicts with system packages
|
|
286
|
+
|
|
248
287
|
```bash
|
|
249
288
|
# List Nix profiles
|
|
250
289
|
nix profile list
|
|
@@ -253,29 +292,35 @@ which -a git
|
|
|
253
292
|
```
|
|
254
293
|
|
|
255
294
|
**Solutions:**
|
|
295
|
+
|
|
256
296
|
1. **Remove conflicting profiles**:
|
|
297
|
+
|
|
257
298
|
```bash
|
|
258
299
|
nix profile remove <profile-number>
|
|
259
300
|
```
|
|
260
301
|
|
|
261
302
|
2. **Use priority settings**:
|
|
303
|
+
|
|
262
304
|
```bash
|
|
263
305
|
nix profile install nixpkgs#git --priority 10
|
|
264
306
|
```
|
|
265
307
|
|
|
266
308
|
3. **Create isolated development environments**:
|
|
309
|
+
|
|
267
310
|
```bash
|
|
268
311
|
cd ~/.dotfiles/nix/
|
|
269
312
|
nix develop
|
|
270
313
|
```
|
|
271
314
|
|
|
272
315
|
#### Problem: Nix store corruption
|
|
316
|
+
|
|
273
317
|
```bash
|
|
274
318
|
# Check store integrity
|
|
275
319
|
nix-store --verify --check-contents
|
|
276
320
|
```
|
|
277
321
|
|
|
278
322
|
**Solution:** Repair corrupted store:
|
|
323
|
+
|
|
279
324
|
```bash
|
|
280
325
|
# Stop Nix daemon
|
|
281
326
|
sudo systemctl stop nix-daemon
|
|
@@ -290,12 +335,14 @@ sudo systemctl start nix-daemon
|
|
|
290
335
|
### Build and Cache Issues
|
|
291
336
|
|
|
292
337
|
#### Problem: Binary cache not working
|
|
338
|
+
|
|
293
339
|
```bash
|
|
294
340
|
# Test cache connectivity
|
|
295
341
|
nix ping-store --store https://cache.nixos.org
|
|
296
342
|
```
|
|
297
343
|
|
|
298
344
|
**Solution:** Configure trusted substituters:
|
|
345
|
+
|
|
299
346
|
```bash
|
|
300
347
|
sudo tee -a /etc/nix/nix.conf > /dev/null <<EOF
|
|
301
348
|
substituters = https://cache.nixos.org/ https://nix-community.cachix.org
|
|
@@ -304,6 +351,7 @@ EOF
|
|
|
304
351
|
```
|
|
305
352
|
|
|
306
353
|
#### Problem: Out of disk space during build
|
|
354
|
+
|
|
307
355
|
```bash
|
|
308
356
|
# Check Nix store size
|
|
309
357
|
du -sh /nix/store/
|
|
@@ -311,6 +359,7 @@ df -h /nix/
|
|
|
311
359
|
```
|
|
312
360
|
|
|
313
361
|
**Solution:** Clean up Nix store:
|
|
362
|
+
|
|
314
363
|
```bash
|
|
315
364
|
# Remove unused packages
|
|
316
365
|
nix-collect-garbage
|
|
@@ -329,6 +378,7 @@ nix-store --optimise
|
|
|
329
378
|
### Complete System Recovery
|
|
330
379
|
|
|
331
380
|
#### Scenario: Dotfiles installation completely broken
|
|
381
|
+
|
|
332
382
|
```bash
|
|
333
383
|
# 1. Backup current state
|
|
334
384
|
cp ~/.zshrc ~/.zshrc.backup.$(date +%s)
|
|
@@ -348,6 +398,7 @@ curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfiles/main/ins
|
|
|
348
398
|
```
|
|
349
399
|
|
|
350
400
|
#### Scenario: WSL2 completely broken
|
|
401
|
+
|
|
351
402
|
```powershell
|
|
352
403
|
# From Windows PowerShell as Administrator
|
|
353
404
|
|
|
@@ -367,6 +418,7 @@ wsl -d Ubuntu -u root -- curl -fsSL https://raw.githubusercontent.com/sebastienr
|
|
|
367
418
|
### Partial Recovery
|
|
368
419
|
|
|
369
420
|
#### Fix broken Nix installation
|
|
421
|
+
|
|
370
422
|
```bash
|
|
371
423
|
# 1. Remove broken Nix
|
|
372
424
|
sudo rm -rf /nix/
|
|
@@ -387,6 +439,7 @@ which nix
|
|
|
387
439
|
```
|
|
388
440
|
|
|
389
441
|
#### Fix broken shell configuration
|
|
442
|
+
|
|
390
443
|
```bash
|
|
391
444
|
# 1. Use emergency shell config
|
|
392
445
|
cat > ~/.zshrc.emergency <<'EOF'
|
|
@@ -414,6 +467,7 @@ chezmoi apply
|
|
|
414
467
|
### Data Recovery
|
|
415
468
|
|
|
416
469
|
#### Recover encrypted secrets
|
|
470
|
+
|
|
417
471
|
```bash
|
|
418
472
|
# 1. Check if key file exists
|
|
419
473
|
ls -la ~/.config/chezmoi/key.txt
|
|
@@ -430,6 +484,7 @@ chezmoi execute-template --init --force
|
|
|
430
484
|
```
|
|
431
485
|
|
|
432
486
|
#### Recover Git configuration
|
|
487
|
+
|
|
433
488
|
```bash
|
|
434
489
|
# 1. Check current git config
|
|
435
490
|
git config --list --show-origin
|
|
@@ -453,6 +508,7 @@ git config --get core.editor
|
|
|
453
508
|
### WSL2 Performance Tuning
|
|
454
509
|
|
|
455
510
|
#### Optimize filesystem performance
|
|
511
|
+
|
|
456
512
|
```bash
|
|
457
513
|
# 1. Move frequently accessed files to WSL2 filesystem
|
|
458
514
|
mkdir -p ~/workspace
|
|
@@ -469,6 +525,7 @@ export EDITOR="nvim"
|
|
|
469
525
|
```
|
|
470
526
|
|
|
471
527
|
#### Reduce memory usage
|
|
528
|
+
|
|
472
529
|
```bash
|
|
473
530
|
# 1. Limit shell history
|
|
474
531
|
echo 'HISTSIZE=1000' >> ~/.zshrc
|
|
@@ -485,6 +542,7 @@ echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
|
|
|
485
542
|
### Nix Performance Tuning
|
|
486
543
|
|
|
487
544
|
#### Optimize Nix builds
|
|
545
|
+
|
|
488
546
|
```bash
|
|
489
547
|
# Configure build settings
|
|
490
548
|
sudo tee -a /etc/nix/nix.conf > /dev/null <<EOF
|
|
@@ -497,6 +555,7 @@ EOF
|
|
|
497
555
|
```
|
|
498
556
|
|
|
499
557
|
#### Enable build caching
|
|
558
|
+
|
|
500
559
|
```bash
|
|
501
560
|
# Install and configure cachix
|
|
502
561
|
nix profile install nixpkgs#cachix
|
|
@@ -513,6 +572,7 @@ echo 'eval "$(cachix completion bash)"' >> ~/.bashrc
|
|
|
513
572
|
### Moving from macOS to WSL2
|
|
514
573
|
|
|
515
574
|
#### Environment differences checklist
|
|
575
|
+
|
|
516
576
|
```bash
|
|
517
577
|
# 1. Check path differences
|
|
518
578
|
echo $PATH | tr ':' '\n' | sort
|
|
@@ -528,6 +588,7 @@ which nix 2>/dev/null && echo "Nix found"
|
|
|
528
588
|
```
|
|
529
589
|
|
|
530
590
|
#### Migration procedure
|
|
591
|
+
|
|
531
592
|
```bash
|
|
532
593
|
# 1. Export current configuration
|
|
533
594
|
cd ~/.dotfiles
|
|
@@ -551,6 +612,7 @@ chezmoi apply
|
|
|
551
612
|
### Moving from Linux to WSL2
|
|
552
613
|
|
|
553
614
|
#### Handle systemd differences
|
|
615
|
+
|
|
554
616
|
```bash
|
|
555
617
|
# Check systemd status
|
|
556
618
|
systemctl is-system-running 2>/dev/null || echo "systemd not available"
|
|
@@ -560,6 +622,7 @@ sudo service ssh start # Instead of systemctl start ssh
|
|
|
560
622
|
```
|
|
561
623
|
|
|
562
624
|
#### Network configuration migration
|
|
625
|
+
|
|
563
626
|
```bash
|
|
564
627
|
# 1. Export network settings from source system
|
|
565
628
|
ip route show > network-config.txt
|
|
@@ -576,6 +639,7 @@ cat /etc/resolv.conf >> network-config.txt
|
|
|
576
639
|
### Emergency Shell Access
|
|
577
640
|
|
|
578
641
|
#### If shell is completely broken
|
|
642
|
+
|
|
579
643
|
```bash
|
|
580
644
|
# 1. Access via different shell
|
|
581
645
|
/bin/bash --noprofile --norc
|
|
@@ -591,6 +655,7 @@ alias ll='ls -la'
|
|
|
591
655
|
```
|
|
592
656
|
|
|
593
657
|
#### If WSL2 won't start
|
|
658
|
+
|
|
594
659
|
```powershell
|
|
595
660
|
# From Windows PowerShell as Administrator
|
|
596
661
|
|
|
@@ -610,6 +675,7 @@ net start LxssManager
|
|
|
610
675
|
### Emergency Contacts and Resources
|
|
611
676
|
|
|
612
677
|
#### Diagnostic commands for support requests
|
|
678
|
+
|
|
613
679
|
```bash
|
|
614
680
|
# System information
|
|
615
681
|
cat /etc/os-release
|
|
@@ -652,6 +718,7 @@ echo "Diagnostic report saved to ~/diagnostic-report.txt"
|
|
|
652
718
|
```
|
|
653
719
|
|
|
654
720
|
#### Support channels
|
|
721
|
+
|
|
655
722
|
- GitHub Issues: [Repository Issues](https://github.com/sebastienrousseau/dotfiles/issues)
|
|
656
723
|
- WSL2 Documentation: [Microsoft WSL Docs](https://docs.microsoft.com/en-us/windows/wsl/)
|
|
657
724
|
- Nix Documentation: [Nix Manual](https://nixos.org/manual/nix/stable/)
|
|
@@ -662,6 +729,7 @@ echo "Diagnostic report saved to ~/diagnostic-report.txt"
|
|
|
662
729
|
## Quick Reference
|
|
663
730
|
|
|
664
731
|
### Essential Commands
|
|
732
|
+
|
|
665
733
|
```bash
|
|
666
734
|
# System status
|
|
667
735
|
dot doctor # Run dotfiles health check
|
|
@@ -681,6 +749,7 @@ export PATH=/usr/bin:/bin # Minimal PATH
|
|
|
681
749
|
```
|
|
682
750
|
|
|
683
751
|
### Recovery Commands
|
|
752
|
+
|
|
684
753
|
```bash
|
|
685
754
|
# Nuclear options (use with caution)
|
|
686
755
|
rm -rf ~/.local/share/chezmoi/ # Reset chezmoi
|
|
@@ -720,4 +789,4 @@ time ls ~/.dotfiles >/dev/null
|
|
|
720
789
|
free -m 2>/dev/null || vm_stat | head -5
|
|
721
790
|
```
|
|
722
791
|
|
|
723
|
-
Run this checklist and include the output when requesting support.
|
|
792
|
+
Run this checklist and include the output when requesting support.
|
package/docs/index.md
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
# .dotfiles
|
|
2
6
|
|
|
3
7
|
Cross-platform, signed, local-first dotfiles for macOS, Linux, and WSL.
|
|
4
8
|
|
|
5
9
|
[](https://github.com/sebastienrousseau/dotfiles/actions)
|
|
6
|
-
[](https://github.com/sebastienrousseau/dotfiles/releases/tag/v0.2.501)
|
|
7
11
|
[](https://github.com/sebastienrousseau/dotfiles/releases)
|
|
8
12
|
|
|
9
13
|
This site is published from the `docs/` directory on `master` and tracks the current workstation baseline, operational guidance, and security material for the repository.
|
|
@@ -34,6 +38,6 @@ This site is published from the `docs/` directory on `master` and tracks the cur
|
|
|
34
38
|
|
|
35
39
|
## Current Release
|
|
36
40
|
|
|
37
|
-
- Current tagged release: [`v0.2.
|
|
41
|
+
- Current tagged release: [`v0.2.501`](https://github.com/sebastienrousseau/dotfiles/releases/tag/v0.2.501)
|
|
38
42
|
- Latest release feed: [GitHub releases](https://github.com/sebastienrousseau/dotfiles/releases/latest)
|
|
39
43
|
- Source repository: [sebastienrousseau/dotfiles](https://github.com/sebastienrousseau/dotfiles)
|
package/docs/interop/A2A.md
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
# Agent Interop
|
|
2
6
|
|
|
3
7
|
The repository now ships an agent card and an A2A-ready discovery document.
|
|
4
8
|
|
|
5
9
|
Artifacts:
|
|
10
|
+
|
|
6
11
|
- [agent-card.json](/home/seb/.dotfiles/dot_config/dotfiles/agent-card.json)
|
|
7
12
|
- [agent.json](/home/seb/.dotfiles/.well-known/agent.json)
|
|
8
13
|
|
|
9
14
|
Core properties:
|
|
15
|
+
|
|
10
16
|
- bounded profiles: `ask`, `plan`, `apply`, `audit`
|
|
11
17
|
- MCP-governed execution
|
|
12
18
|
- workstation attestation export
|
|
@@ -15,6 +21,7 @@ Core properties:
|
|
|
15
21
|
- fleet attestation export
|
|
16
22
|
|
|
17
23
|
Tracked governance artifacts:
|
|
24
|
+
|
|
18
25
|
- policy bundles
|
|
19
26
|
- prompt registry
|
|
20
27
|
- model registry
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
{% raw %}
|
|
5
|
+
|
|
6
|
+
# PowerShell Parity
|
|
7
|
+
|
|
8
|
+
This page documents how PowerShell 7.5+ support is exercised in CI
|
|
9
|
+
and what specifically is verified. Closes the docs slice of
|
|
10
|
+
[#860](https://github.com/sebastienrousseau/dotfiles/issues/860).
|
|
11
|
+
|
|
12
|
+
## What ships
|
|
13
|
+
|
|
14
|
+
| File | Role |
|
|
15
|
+
|---|---|
|
|
16
|
+
| [`dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl`](../../dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl) | The dotfiles PowerShell profile. Deployed to `$PROFILE` (resolves to `~/.config/powershell/Microsoft.PowerShell_profile.ps1` on Linux/macOS; `Documents\PowerShell\Microsoft.PowerShell_profile.ps1` on Windows). |
|
|
17
|
+
| [`scripts/qa/powershell-contract.ps1`](../../scripts/qa/powershell-contract.ps1) | The runtime contract. Renders the template, dot-sources it, asserts required function shims exist, runs PSScriptAnalyzer. |
|
|
18
|
+
| [`tests/unit/install/test_powershell_profile_syntax.sh`](../../tests/unit/install/test_powershell_profile_syntax.sh) | Static-syntax test runnable on Linux/macOS via `pwsh` when present; falls back to brace-balance + textual invariants when not. |
|
|
19
|
+
|
|
20
|
+
## What's verified
|
|
21
|
+
|
|
22
|
+
### On every Linux/macOS PR (`tests/unit/install/...`)
|
|
23
|
+
|
|
24
|
+
- Profile file exists at the expected path.
|
|
25
|
+
- Defines the `dot` function shim so PowerShell users invoke the
|
|
26
|
+
same CLI as Unix shells.
|
|
27
|
+
- Sets `XDG_CONFIG_HOME` (matches Unix XDG conventions for
|
|
28
|
+
`~/.config/powershell` discoverability).
|
|
29
|
+
- Brace count balances (`{` vs `}`).
|
|
30
|
+
- If `pwsh` is installed locally, parses the rendered template via
|
|
31
|
+
`System.Management.Automation.Language.Parser` and fails on any
|
|
32
|
+
parse error.
|
|
33
|
+
|
|
34
|
+
### On `windows-latest` runner via reliability-gate.yml
|
|
35
|
+
|
|
36
|
+
The `powershell-contract` job runs `scripts/qa/powershell-contract.ps1`
|
|
37
|
+
which does:
|
|
38
|
+
|
|
39
|
+
1. **Renders the template** via `chezmoi execute-template` so any
|
|
40
|
+
chezmoi data references (e.g. `{{ .dotfiles_version }}`) resolve
|
|
41
|
+
to real values before parsing.
|
|
42
|
+
2. **Dot-sources** the rendered profile and asserts no exception is
|
|
43
|
+
thrown during load.
|
|
44
|
+
3. **Asserts the required function shims** are defined after load:
|
|
45
|
+
`dot`, `d`, `ll`, `la`, `cat`.
|
|
46
|
+
4. **Runs PSScriptAnalyzer** at `Error` severity. Warnings surface
|
|
47
|
+
but don't fail the gate (tightenable later).
|
|
48
|
+
|
|
49
|
+
Exit non-zero on any failure. The job is in the `reliability-summary`
|
|
50
|
+
required-checks list so a broken PowerShell profile blocks merge.
|
|
51
|
+
|
|
52
|
+
## Running locally
|
|
53
|
+
|
|
54
|
+
### On Linux/macOS
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Static test — runs in any context.
|
|
58
|
+
bash tests/unit/install/test_powershell_profile_syntax.sh
|
|
59
|
+
|
|
60
|
+
# Full contract — needs pwsh + chezmoi installed.
|
|
61
|
+
brew install --cask powershell # or apt / package manager equivalent
|
|
62
|
+
pwsh ./scripts/qa/powershell-contract.ps1
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### On Windows
|
|
66
|
+
|
|
67
|
+
```powershell
|
|
68
|
+
.\scripts\qa\powershell-contract.ps1
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Known limitations
|
|
72
|
+
|
|
73
|
+
- The contract doesn't currently exercise PowerShell-specific runtime
|
|
74
|
+
semantics (e.g. PSDrive providers, custom completion). Those are a
|
|
75
|
+
follow-up.
|
|
76
|
+
- Function shims are smoke-tested by name only — we check that
|
|
77
|
+
`Get-Command dot` resolves to a function, not that it actually
|
|
78
|
+
invokes the right binary. A richer integration test that creates a
|
|
79
|
+
fake `dot` binary and confirms the shim invokes it correctly is a
|
|
80
|
+
future hardening step.
|
|
81
|
+
- macOS is not in the matrix because `pwsh` isn't pre-installed on
|
|
82
|
+
GitHub macOS runners. The Linux/macOS static test runs on every PR
|
|
83
|
+
via the existing test suite; full pwsh validation is Windows-only
|
|
84
|
+
to keep the matrix small.
|
|
85
|
+
|
|
86
|
+
## When to update this page
|
|
87
|
+
|
|
88
|
+
- The PowerShell profile gains a new function → add it to the
|
|
89
|
+
`RequiredFunctions` array in `powershell-contract.ps1` AND to the
|
|
90
|
+
list above.
|
|
91
|
+
- A static-test invariant is added → document it in the "What's
|
|
92
|
+
verified on every PR" list.
|
|
93
|
+
- The PSScriptAnalyzer severity is tightened from `Error` to
|
|
94
|
+
`Warning` → update the relevant bullet here.
|
|
95
|
+
|
|
96
|
+
## References
|
|
97
|
+
|
|
98
|
+
- [PowerShell 7 docs](https://learn.microsoft.com/en-us/powershell/scripting/overview)
|
|
99
|
+
- [PSScriptAnalyzer rule reference](https://github.com/PowerShell/PSScriptAnalyzer/blob/master/docs/Rules/README.md)
|
|
100
|
+
- `.github/workflows/reliability-gate.yml` — Windows job definition.
|
|
101
|
+
- Issue [#860](https://github.com/sebastienrousseau/dotfiles/issues/860).
|
|
102
|
+
{% endraw %}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
# Introduction
|
|
2
6
|
|
|
3
|
-
This manual describes `.dotfiles` v0.2.
|
|
7
|
+
This manual describes `.dotfiles` v0.2.501 — a trusted agent workstation baseline for macOS, Linux, and WSL.
|
|
4
8
|
|
|
5
9
|
The repository is more than a personal dotfiles collection. It ships as workstation infrastructure: signed, attested, multi-platform, AI-aware, and self-healing. Chezmoi handles templating and platform differences. The `dot` CLI sits on top and coordinates lifecycle operations.
|
|
6
10
|
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
# Trust Model
|
|
2
6
|
|
|
3
7
|
The trust model combines cryptographic signing, local-first secrets, policy-gated agent operations, and machine-verifiable attestation.
|
|
@@ -6,7 +10,7 @@ The trust model combines cryptographic signing, local-first secrets, policy-gate
|
|
|
6
10
|
|
|
7
11
|
| Threat | Mitigation |
|
|
8
12
|
|:---|:---|
|
|
9
|
-
| Unauthorized code execution on the workstation | Signed commits, shellcheck gates, no `curl
|
|
13
|
+
| Unauthorized code execution on the workstation | Signed commits, shellcheck gates, no `curl \| sh` in install path |
|
|
10
14
|
| Secret leakage into Git history | Age/SOPS encryption, gitleaks in CI, `detect-secrets` baseline |
|
|
11
15
|
| Tampered upstream tool | SHA256-pinned chezmoi installer, SBOM + Grype CVE scan |
|
|
12
16
|
| Malicious agent behavior | MCP policy enforcement, agent profile allowlists, attestation logs |
|
|
@@ -94,7 +98,7 @@ Violations are logged to `~/.local/state/dotfiles/mcp-violations.log` and report
|
|
|
94
98
|
|
|
95
99
|
```json
|
|
96
100
|
{
|
|
97
|
-
"version": "0.2.
|
|
101
|
+
"version": "0.2.501",
|
|
98
102
|
"timestamp": "2026-04-16T09:00:00Z",
|
|
99
103
|
"host": {
|
|
100
104
|
"hostname_sha256": "...",
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
# The Theme Engine
|
|
2
6
|
|
|
3
7
|
`.dotfiles` generates terminal color palettes directly from wallpaper images. There are no hand-crafted themes — dominant colors are extracted via K-Means clustering in CIELAB color space, mapped to ANSI slots, and enforced to WCAG AAA contrast.
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
{% raw %}
|
|
5
|
+
|
|
1
6
|
# Fleet Architecture
|
|
2
7
|
|
|
3
8
|
A "fleet" is two or more workstations sharing a single `.dotfiles` source repository. The fleet model handles per-host customization, drift detection, and cross-host trust propagation.
|
|
@@ -67,7 +72,7 @@ Drift is normal during development. `dot heal` reconciles the source → local d
|
|
|
67
72
|
A typical output:
|
|
68
73
|
|
|
69
74
|
```
|
|
70
|
-
Fleet Attestation — v0.2.
|
|
75
|
+
Fleet Attestation — v0.2.501
|
|
71
76
|
|
|
72
77
|
Host Git SHA Policy Tools OK Drift Verified
|
|
73
78
|
-------------- ---------- --------- ---------- ------- --------
|
|
@@ -140,3 +145,4 @@ Only the host with the matching Age private key can decrypt. Other hosts see the
|
|
|
140
145
|
- [Fleet Deployment Architecture](../../architecture/fleet-deployment.md) — diagrams
|
|
141
146
|
- [Trust Model](02-trust-model.md)
|
|
142
147
|
- [Tutorial: Deploy to a Fleet](../02-tutorials/05-deploy-fleet.md)
|
|
148
|
+
{% endraw %}
|