Skip to content

Commit b359509

Browse files
committed
deploy: 9f3c6a0
1 parent 6efe248 commit b359509

5 files changed

Lines changed: 231 additions & 165 deletions

File tree

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1">
6+
<title>arch-pantheon-btrfs-guide</title>
7+
<link rel="stylesheet" href="../static/style.css">
8+
<link rel="alternate" type="application/atom+xml" title="~/tools" href="../feed.xml">
9+
</head>
10+
<body>
11+
<header class="site-header">
12+
<div class="site-header__inner">
13+
<span class="site-header__name"><a href="../index.html">~/tools</a></span>
14+
15+
</div>
16+
</header>
17+
18+
<main>
19+
20+
<div class="project-header">
21+
<a class="project-header__back" href="../index.html">&#8592; all projects</a>
22+
23+
<h1>arch-pantheon-btrfs-guide</h1>
24+
25+
26+
27+
<div class="project-header__meta">
28+
<span class="badge badge--type">repo</span>
29+
30+
31+
</div>
32+
33+
<div class="project-header__actions">
34+
35+
36+
37+
<a class="btn" href="https://github.com/svandragt/arch-pantheon-btrfs-guide">&#8599; GitHub</a>
38+
39+
</div>
40+
</div>
41+
42+
<div class="readme">
43+
<h1>Arch Linux + Pantheon + Btrfs Snapshots</h1>
44+
<p>Command reference for installing Arch Linux with the Pantheon desktop
45+
(elementary OS's DE) and openSUSE-style Btrfs snapshots via Snapper +
46+
GRUB rollback.</p>
47+
<h2>Part 1: Base System</h2>
48+
<pre><code>iwctl
49+
station wlan0 connect YOUR_SSID
50+
exit
51+
</code></pre>
52+
<pre><code>archinstall
53+
</code></pre>
54+
<p>In the menu: Btrfs filesystem, GRUB bootloader, no desktop environment.</p>
55+
<h2>Part 2: Pantheon</h2>
56+
<pre><code>sudo pacman -Syu
57+
</code></pre>
58+
<blockquote>
59+
<p><strong>Known issue:</strong> <code>lightdm-pantheon-greeter</code> currently depends on <code>mutter46</code>,
60+
which conflicts with the regular <code>mutter</code> that <code>gala</code> itself needs. This is
61+
an upstream packaging lag (Arch has a history of pinning gala/wingpanel to
62+
older mutter versions each release cycle while catching up). Until it's
63+
fixed, ignore that one package and use <code>lightdm-gtk-greeter</code> instead —
64+
same login manager, just a plainer greeter screen.</p>
65+
</blockquote>
66+
<pre><code>sudo pacman -S --needed --ignore lightdm-pantheon-greeter \
67+
pantheon lightdm-gtk-greeter network-manager-applet polkit-gnome openssh \
68+
sound-theme-elementary elementary-icon-theme elementary-wallpapers \
69+
pantheon-default-settings networkmanager
70+
</code></pre>
71+
<pre><code>sudo systemctl enable lightdm
72+
sudo systemctl enable NetworkManager
73+
sudo systemctl enable sshd
74+
sudo systemctl enable --now polkit
75+
sudo reboot
76+
</code></pre>
77+
<p><code>network-manager-applet</code> gives you a tray icon to manage networks,
78+
<code>polkit-gnome</code> handles privilege-escalation prompts inside the desktop, and
79+
<code>openssh</code> gives you an SSH fallback into the VM if the graphical session
80+
ever breaks (handy since TTY-switching can be unreliable in QEMU/KVM —
81+
find the VM's IP with <code>virsh domifaddr &lt;vm-name&gt;</code> from the host, then
82+
<code>ssh youruser@&lt;vm-ip&gt;</code>).</p>
83+
<p>Optional apps:</p>
84+
<pre><code>sudo pacman -S pantheon-files pantheon-terminal pantheon-screenshot \
85+
gnome-keyring gvfs file-roller xdg-user-dirs xdg-utils
86+
xdg-user-dirs-update
87+
</code></pre>
88+
<p>Optional AUR helper + tweaks panel:</p>
89+
<pre><code>sudo pacman -S --needed git base-devel
90+
git clone https://aur.archlinux.org/yay.git
91+
cd yay
92+
makepkg -si
93+
</code></pre>
94+
<pre><code>yay -S switchboard-plug-pantheon-tweaks-git
95+
</code></pre>
96+
<p>Note: Pantheon on Wayland is less mature than X11. If Plank or
97+
Wingpanel glitch, log out and pick the X11/&quot;Classic&quot; session.</p>
98+
<h2>Part 3: Btrfs Snapshots (Snapper)</h2>
99+
<pre><code>sudo pacman -S --needed snapper grub-btrfs inotify-tools
100+
</code></pre>
101+
<pre><code>yay -S snap-pac
102+
</code></pre>
103+
<pre><code>sudo umount /.snapshots
104+
sudo rm -rf /.snapshots
105+
sudo snapper -c root create-config /
106+
sudo btrfs subvolume delete /.snapshots
107+
sudo mkdir /.snapshots
108+
sudo mount -a
109+
sudo chmod 750 /.snapshots
110+
</code></pre>
111+
<pre><code>sudo systemctl enable --now snapper-timeline.timer
112+
sudo systemctl enable --now snapper-cleanup.timer
113+
</code></pre>
114+
<pre><code>sudo systemctl enable --now grub-btrfsd.service
115+
sudo grub-mkconfig -o /boot/grub/grub.cfg
116+
</code></pre>
117+
<p>Test:</p>
118+
<pre><code>sudo pacman -S cowsay
119+
sudo snapper -c root list
120+
</code></pre>
121+
<p>Rollback:</p>
122+
<pre><code>sudo snapper rollback &lt;snapshot-number&gt;
123+
</code></pre>
124+
<p>Optional GUI:</p>
125+
<pre><code>yay -S btrfs-assistant
126+
</code></pre>
127+
<h2>Quick Reference</h2>
128+
<p>| Task | Command |
129+
|---|---|
130+
| List snapshots | <code>sudo snapper -c root list</code> |
131+
| Create manual snapshot | <code>sudo snapper -c root create -d &quot;description&quot;</code> |
132+
| Roll back to a snapshot | <code>sudo snapper rollback &lt;number&gt;</code> |
133+
| Delete a snapshot | <code>sudo snapper -c root delete &lt;number&gt;</code> |
134+
| Rebuild GRUB snapshot menu | <code>sudo grub-mkconfig -o /boot/grub/grub.cfg</code> |</p>
135+
136+
</div>
137+
138+
</main>
139+
140+
<footer class="site-footer">
141+
Built with <a href="https://tools.vandragt.com/toolhub/">ToolHub</a>
142+
</footer>
143+
</body>
144+
</html>

‎feed.xml‎

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,21 @@
33
<id>https://tools.vandragt.com/feed.xml</id>
44
<title>~/tools</title>
55
<subtitle>Tools &amp; Projects</subtitle>
6-
<updated>2026-08-22T11:58:33Z</updated>
6+
<updated>2026-08-23T13:05:58Z</updated>
77
<link rel="alternate" type="text/html" href="https://tools.vandragt.com"/>
88
<link rel="self" type="application/atom+xml" href="https://tools.vandragt.com/feed.xml"/>
99
<author><name>svandragt</name></author>
1010

11+
<entry>
12+
<id>https://github.com/svandragt/arch-pantheon-btrfs-guide</id>
13+
<title>arch-pantheon-btrfs-guide</title>
14+
<updated>2026-08-23T13:05:58Z</updated>
15+
<published>2026-08-23T13:05:58Z</published>
16+
<link rel="alternate" type="text/html" href="https://github.com/svandragt/arch-pantheon-btrfs-guide"/>
17+
<summary>arch-pantheon-btrfs-guide</summary>
18+
19+
</entry>
20+
1121
<entry>
1222
<id>https://github.com/svandragt/lamb</id>
1323
<title>lamb</title>
@@ -190,11 +200,11 @@
190200
</entry>
191201

192202
<entry>
193-
<id>https://github.com/svandragt/lessons-ai</id>
194-
<title>lessons-ai</title>
203+
<id>https://github.com/svandragt/lessons</id>
204+
<title>lessons</title>
195205
<updated>2026-07-03T12:32:56Z</updated>
196206
<published>2026-07-03T12:32:56Z</published>
197-
<link rel="alternate" type="text/html" href="https://github.com/svandragt/lessons-ai"/>
207+
<link rel="alternate" type="text/html" href="https://github.com/svandragt/lessons"/>
198208
<summary>Learn from the llm-agent</summary>
199209

200210
</entry>
@@ -232,16 +242,4 @@
232242

233243
</entry>
234244

235-
<entry>
236-
<id>https://github.com/svandragt/timetracker</id>
237-
<title>timetracker</title>
238-
<updated>2026-06-23T12:56:14Z</updated>
239-
<published>2026-06-23T12:56:14Z</published>
240-
<link rel="alternate" type="text/html" href="https://github.com/svandragt/timetracker"/>
241-
<summary>Very lean timetracker</summary>
242-
<category term="linux"/>
243-
<category term="timetracker"/>
244-
245-
</entry>
246-
247245
</feed>

‎index.html‎

Lines changed: 70 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,74 @@ <h2 class="section-heading">Pinned</h2>
214214
<h2 class="section-heading">Active projects</h2>
215215
<div class="project-grid">
216216

217+
<div class="project-card"
218+
data-type="repo" data-section="active" data-tags="maintenance plex plex-media-server" data-license="MIT">
219+
<div class="project-card__name">
220+
221+
<a href="plex-janitor/index.html">plex-janitor</a>
222+
</div>
223+
224+
<div class="project-card__desc">Delete watched episodes and films</div>
225+
226+
<div class="project-card__meta">
227+
<span class="badge badge--type">repo</span>
228+
<button class="badge badge--tag" data-tag="maintenance" type="button">maintenance</button><button class="badge badge--tag" data-tag="plex" type="button">plex</button><button class="badge badge--tag" data-tag="plex-media-server" type="button">plex-media-server</button>
229+
</div>
230+
231+
<div class="project-card__links">
232+
233+
234+
<a href="https://github.com/svandragt/plex-janitor">&#8599; repo</a>
235+
236+
<button class="project-card__license" data-license="MIT" type="button">MIT</button>
237+
</div>
238+
239+
</div>
240+
241+
<div class="project-card"
242+
data-type="repo" data-section="active" data-tags="" data-license="">
243+
<div class="project-card__name">
244+
245+
<a href="giftpack/index.html">giftpack</a>
246+
</div>
247+
248+
<div class="project-card__meta">
249+
<span class="badge badge--type">repo</span>
250+
251+
</div>
252+
253+
<div class="project-card__links">
254+
255+
256+
<a href="https://github.com/svandragt/giftpack">&#8599; repo</a>
257+
258+
259+
</div>
260+
261+
</div>
262+
263+
<div class="project-card"
264+
data-type="repo" data-section="active" data-tags="" data-license="">
265+
<div class="project-card__name">
266+
267+
<a href="arch-pantheon-btrfs-guide/index.html">arch-pantheon-btrfs-guide</a>
268+
</div>
269+
270+
<div class="project-card__meta">
271+
<span class="badge badge--type">repo</span>
272+
273+
</div>
274+
275+
<div class="project-card__links">
276+
277+
278+
<a href="https://github.com/svandragt/arch-pantheon-btrfs-guide">&#8599; repo</a>
279+
280+
281+
</div>
282+
283+
</div>
284+
217285
<div class="project-card"
218286
data-type="repo" data-section="active" data-tags="" data-license="">
219287
<div class="project-card__name">
@@ -360,7 +428,7 @@ <h2 class="section-heading">Active projects</h2>
360428
data-type="repo" data-section="active" data-tags="" data-license="">
361429
<div class="project-card__name">
362430

363-
<a href="lessons-ai/index.html">lessons-ai</a>
431+
<a href="lessons/index.html">lessons</a>
364432
</div>
365433

366434
<div class="project-card__desc">Learn from the llm-agent</div>
@@ -373,7 +441,7 @@ <h2 class="section-heading">Active projects</h2>
373441
<div class="project-card__links">
374442
<a href="https://lessons.vandragt.com/">&#8599; website</a>
375443

376-
<a href="https://github.com/svandragt/lessons-ai">&#8599; repo</a>
444+
<a href="https://github.com/svandragt/lessons">&#8599; repo</a>
377445

378446

379447
</div>
@@ -524,30 +592,6 @@ <h2 class="section-heading">Active projects</h2>
524592

525593
</div>
526594

527-
<div class="project-card"
528-
data-type="repo" data-section="active" data-tags="maintenance plex plex-media-server" data-license="MIT">
529-
<div class="project-card__name">
530-
531-
<a href="plex-janitor/index.html">plex-janitor</a>
532-
</div>
533-
534-
<div class="project-card__desc">Delete watched episodes and films</div>
535-
536-
<div class="project-card__meta">
537-
<span class="badge badge--type">repo</span>
538-
<button class="badge badge--tag" data-tag="maintenance" type="button">maintenance</button><button class="badge badge--tag" data-tag="plex" type="button">plex</button><button class="badge badge--tag" data-tag="plex-media-server" type="button">plex-media-server</button>
539-
</div>
540-
541-
<div class="project-card__links">
542-
543-
544-
<a href="https://github.com/svandragt/plex-janitor">&#8599; repo</a>
545-
546-
<button class="project-card__license" data-license="MIT" type="button">MIT</button>
547-
</div>
548-
549-
</div>
550-
551595
<div class="project-card"
552596
data-type="repo" data-section="active" data-tags="" data-license="">
553597
<div class="project-card__name">
@@ -786,28 +830,6 @@ <h2 class="section-heading">Active projects</h2>
786830

787831
</div>
788832

789-
<div class="project-card"
790-
data-type="repo" data-section="active" data-tags="" data-license="">
791-
<div class="project-card__name">
792-
793-
<a href="giftpack/index.html">giftpack</a>
794-
</div>
795-
796-
<div class="project-card__meta">
797-
<span class="badge badge--type">repo</span>
798-
799-
</div>
800-
801-
<div class="project-card__links">
802-
803-
804-
<a href="https://github.com/svandragt/giftpack">&#8599; repo</a>
805-
806-
807-
</div>
808-
809-
</div>
810-
811833
<div class="project-card"
812834
data-type="repo" data-section="active" data-tags="chatgpt export" data-license="">
813835
<div class="project-card__name">
@@ -2221,30 +2243,6 @@ <h2 class="section-heading">Archived</h2>
22212243

22222244
</div>
22232245

2224-
<div class="project-card"
2225-
data-type="repo" data-section="archived" data-tags="" data-license="">
2226-
<div class="project-card__name">
2227-
2228-
<a href="mvb/index.html">mvb</a>
2229-
</div>
2230-
2231-
<div class="project-card__desc">Minimum viable blog.</div>
2232-
2233-
<div class="project-card__meta">
2234-
<span class="badge badge--type">repo</span>
2235-
2236-
</div>
2237-
2238-
<div class="project-card__links">
2239-
2240-
2241-
<a href="https://github.com/svandragt/mvb">&#8599; repo</a>
2242-
2243-
2244-
</div>
2245-
2246-
</div>
2247-
22482246
<div class="project-card"
22492247
data-type="repo" data-section="archived" data-tags="" data-license="">
22502248
<div class="project-card__name">

0 commit comments

Comments
 (0)