[wip] better organize pages, enable org-hugo-auto-export-on-save
[~bandali/bndl.org] / content-org / aminb.org
1 #+title: sources of aminb.org's pages and posts
2
3 #+hugo_base_dir: ..
4 #+seq_todo: TODO DRAFT DONE
5 #+property: header-args :eval never-export
6 #+options: author:nil
7
8 #+macro: abbr @@html:<abbr>$1</abbr>@@
9 #+macro: span @@html:<span class="$1">$2</span>@@
10
11 * Pages
12 :PROPERTIES:
13 :EXPORT_HUGO_SECTION: /
14 :END:
15
16 ** Home
17 :PROPERTIES:
18 :EXPORT_FILE_NAME: _index
19 :END:
20
21 I'm a [[/uw][graduate student]] in the [[https://watform.uwaterloo.ca][WatForm]] group at University of Waterloo,
22 supervised by [[https://cs.uwaterloo.ca/~nday/][Dr. Nancy Day]]. I'm interested in using formal methods,
23 especially type systems, to help make software more reliable.
24
25 ** CV
26 :PROPERTIES:
27 :EXPORT_FILE_NAME: cv
28 :EXPORT_HUGO_MENU: :menu topnav :weight 10
29 :END:
30
31 My academic {{{abbr(CV)}}} is available as [[/cv.pdf][cv.pdf]],
32 and an outdated professional resume is available as [[/resume.pdf][resume.pdf]] as
33 well.
34
35 I'm interested in functional programming and functional languages,
36 type systems, and formal methods in general. I love writing Haskell
37 and I'm looking into Rust and Lean as well. Feel free to [[/contact][drop me a
38 line]] if you like to geek out about any of the above.
39
40 ** TODO Now
41
42 ** TODO Projects
43
44 ** DONE Contact
45 CLOSED: [2018-09-03 Mon 20:44]
46 :PROPERTIES:
47 :EXPORT_FILE_NAME: contact
48 :EXPORT_HUGO_MENU: :menu topnav :weight 40
49 :EXPORT_HUGO_CUSTOM_FRONT_MATTER: :customTitle "Say hello!"
50 :END:
51
52 #+macro: xmpp @@html:<a href="xmpp:$1">$1</a>@@
53
54 You can contact me via email or through my accounts on various online
55 platforms.
56
57 *** Contact info
58
59 - [[mailto:amin@aminb.org][amin@aminb.org]]
60 - [[mailto:amin@gnu.org][amin@gnu.org]], I'm a volunteer [[https://www.gnu.org/people/webmeisters.html#aminb][GNU webmaster]]
61 - [[mailto:abandali@uwaterloo.ca][abandali@uwaterloo.ca]], I'm a [[/uw][grad student]] @ UW
62 - gpg key: [[https://pgp.surfnet.nl/pks/lookup?op=vindex&fingerprint=on&search=0xD1FBA36627D65876][CDDE 75F9 0353 8E71 813C DA27 D1FB A366 27D6 5876]]
63 - aminb on [[https://freenode.net][freenode]] and [[https://wiki.mozilla.org/IRC][moznet]] IRC
64 - [[https://matrix.to/#/@aminb:matrix.org][@aminb:matrix.org]] on Matrix
65 - {{{xmpp(aminb@member.fsf.org)}}} via XMPP
66 - [[https://pleroma.site/users/aminb][aminb@pleroma.site]] on the [[https://en.wikipedia.org/wiki/Fediverse][fediverse]]
67
68 *** Other online places
69
70 - [[https://git.sr.ht/%257Eaminb][~aminb]] on [[https://sr.ht][sr.ht]]
71 - [[https://lobste.rs/u/aminb][aminb]] on Lobsters
72 - [[https://gitlab.com/aminb][aminb]] on GitLab
73 - [[https://keybase.io/amin][amin]] on Keybase
74 - [[https://news.ycombinator.com/user?id=aban][aban]] on HN
75 - [[https://www.reddit.com/u/aminb][aminb]] on Reddit
76 - +[[https://github.com/aminb][aminb]] on GitHub+
77 - +[[https://twitter.com/aminban][aminban]] on Twitter+
78
79 ** Colophon
80 :PROPERTIES:
81 :EXPORT_FILE_NAME: colophon
82 :END:
83
84 #+macro: light @@html:<label class="light-off-button-inline" for="light-off"></label>@@
85 #+macro: ccbysa @@html:<a rel="license" href="//creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International @@{{{ccbysa-img}}}@@html:</a>@@
86 #+macro: ccbysa-img @@html:<img alt="Creative Commons Licence" style="border-width:0" src="//i.creativecommons.org/l/by-sa/4.0/80x15.png"/>@@
87
88 This is my personal website, previous versions of which I've ran on
89 different domains since 2012. The last version was generated using
90 [[https://www.romanzolotarev.com/ssg.html][ssg]] (shout out to Roman Zolotarev), but I've since ported it to GNU
91 Emacs + Org mode.
92
93 The sources are available on https://git.sr.ht/~aminb/aminb.org. The
94 site is automatically generated on each =git push= using the
95 [[https://builds.sr.ht][builds.sr.ht]] service (see the [[https://git.sr.ht/~aminb/aminb.org/tree/.build.yml][=.build.yml=]] build manifest) and is
96 deployed to my server, where it's served by [[https://www.nginx.com][Nginx]] on [[https://www.debian.org][Debian GNU/Linux]].
97
98 *** Night mode
99
100 To toggle night mode, click on {{{light}}}, which is always available
101 on the top navigation menu. It saves its state in a browser cookie,
102 other than that no JavaScript is required to use this website.
103
104 *** Copyright and Licenses
105 :PROPERTIES:
106 :CUSTOM_ID: copyright
107 :END:
108
109 The source code for this site is licensed under version 3 (or, at your
110 option, any later version) of the [[https://gnu.org/licenses/gpl.html][GNU General Public License]] (see the
111 [[https://git.sr.ht/~aminb/aminb.org/tree/COPYING][=COPYING=]] file). The contents of the website are licensed under a
112 {{{ccbysa}}} license.
113
114 ** Search
115 :PROPERTIES:
116 :EXPORT_HUGO_SECTION: /
117 :EXPORT_FILE_NAME: search
118 :EXPORT_HUGO_LAYOUT: search
119 :EXPORT_HUGO_OUTPUTS: html json
120 :EXPORT_HUGO_CUSTOM_FRONT_MATTER: :sitemap '((priority . 0.1))
121 :END:
122 Results from static site search implemented using /Fusejs/, /jquery/
123 and /mark.js/. -- [[https://gist.github.com/eddiewebb/735feb48f50f0ddd65ae5606a1cb41ae][Source]]
124
125 * Posts
126 :PROPERTIES:
127 :EXPORT_HUGO_SECTION: post
128 :EXPORT_HUGO_AUTO_SET_LASTMOD: t
129 :END:
130
131 ** Arch GNU/Linux on MacBook Air 2013 :arch:macbook:
132 :PROPERTIES:
133 :EXPORT_FILE_NAME: arch-macbook-air
134 :EXPORT_DATE: 2016-11-01
135 :EXPORT_OPTIONS: ^:{}
136 :EXPORT_HUGO_ALIASES: /2016/11/arch-macbook-air
137 :EXPORT_HUGO_CUSTOM_FRONT_MATTER: :toc true
138 :END:
139
140 This post summarizes how I install and dual-boot Arch GNU/Linux with
141 Full-Disk Encryption alongside macOS. It is not meant to be a
142 replacement for the [[https://wiki.archlinux.org/index.php/installation_guide][Installation Guide]] or the former [[https://csdietz.github.io/arch-beginner-guide/][Beginner's Guide]].
143 Rather, it mostly serves as a small summary with a few useful notes
144 about the gotchas.
145
146 So, make sure you understand what you type into your terminal. If you
147 don't, checking out the Arch wiki should probably be your first step.
148
149 /Note:/ you will need internet access throughout the installation and
150 the MacBook Air's WiFi doesn't work out of the box on Arch. I
151 recommend using your phone's USB Tethering (if it does support it), or
152 using an Ethernet-USB adapter.
153
154 *** Shrinking the macOS partition
155
156 The first step I take is resizing the HFS+ macOS partition to make
157 room for the new {{{abbr(GNU/Linux)}}} installation. There are plenty
158 of tutorials on how to do this using macOS's Disk Utility, so do that
159 and then come back!
160
161 *** Creating a bootable Arch Installer USB
162
163 There are different ways of creating a bootable Arch USB, all
164 documented on the [[https://wiki.archlinux.org/index.php/USB_flash_installation_media][USB flash installation media]] page on the Arch wiki,
165 but the simplest one is using =dd= if you already have access to
166 another UNIX system.
167
168 {{{span(red,Warning:)}}} make sure you backup the data on your flash
169 drive, as =dd= will irrevocably destroy all data on it.
170
171 Use =lsblk= to find the name (block device) of your USB drive, then
172 run =dd= (as root) as shown below:
173
174 #+begin_src bash
175 dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync
176 #+end_src
177
178 Replace =/path/to/archlinux.iso= with the path to the Arch image you
179 have downloaded, and =/dev/sdx= with your drive.
180
181 *** Booting up from the USB
182
183 After creating the install USB, reboot your laptop and hold the alt
184 key and boot into the USB.
185
186 When booting is complete and you're presented with the prompt, it's a
187 good time to make sure you're connected to the internet (see the
188 /note/ at the top of this post).
189
190 Use =ping= to verify that you've established a connection:
191
192 #+begin_src bash
193 ping archlinux.org
194 #+end_src
195
196 *** Updating the system clock
197
198 Once you're connected to the internet, make sure the system clock is
199 accurate:
200
201 #+begin_src bash
202 timedatectl set-ntp true # start and enable systemd-timesyncd
203 #+end_src
204
205 You can check the service status using =timedatectl status=.
206
207 *** Partitioning
208 :PROPERTIES:
209 :CUSTOM_ID: partitioning
210 :END:
211
212 I won't dive into partitioning and instead, I'll refer you to the
213 [[https://wiki.archlinux.org/index.php/Partitioning][Partitioning]] page of Arch wiki. Of the available partitioning tools, I
214 personally prefer =cfdisk=.
215
216 *** Setting up LVM & LUKS
217
218 I use a [[https://wiki.archlinux.org/index.php/Dm-crypt/Encrypting_an_entire_system#LVM_on_LUKS][LVM on LUKS]] setup, where I set up LVM on top of the encrypted
219 partition.
220
221 First, let's set up the underlying encrypted partition:
222
223 #+begin_src bash
224 cryptsetup -v --cipher aes-xts-plain64 --key-size 512 --hash sha512 \
225 --iter-time 5000 --use-urandom -y luksFormat /dev/sdaX
226 #+end_src
227
228 where =/dev/sdaX= is the partition you created in the last step
229 (e.g. =/dev/sda4=). For more information about the =cryptsetup=
230 options, see the [[https://wiki.archlinux.org/index.php/Dm-crypt/Device_encryption#Encryption_options_for_LUKS_mode][LUKS encryption options]].
231
232 Then we open the container:
233
234 #+begin_src bash
235 cryptsetup open --type luks /dev/sdaX lvm
236 #+end_src
237
238 Now it's time to use lvm and prepare the logical volume(s):
239
240 #+begin_src bash
241 pvcreate /dev/mapper/lvm
242 vgcreate vg /dev/mapper/lvm
243 lvcreate --extents +100%FREE -n root vg
244 #+end_src
245
246 This will create a physical volume on the mapping we just opened,
247 create a volume group named =vg= on the physical volume, and create a
248 logical volume named =root= that spans the entire volume group. More
249 complex setups are possible thanks to the great flexibility of lvm.
250
251 We now format the logical volume with =ext4=:
252
253 #+begin_src bash
254 mkfs.ext4 /dev/mapper/vg-root
255 #+end_src
256
257 *** Installing the base system
258
259 Let's mount the logical volume, make a directory for the mount point
260 of the boot partition, and mount the boot partition (=/dev/sda1=):
261
262 #+begin_src bash
263 mount /dev/mapper/vg-root /mnt
264 mkdir /mnt/boot
265 mount /dev/sda1 /mnt/boot
266 #+end_src
267
268 Finally, let's install the base system (and optionally =base-devel=):
269
270 #+begin_src bash
271 pacstrap /mnt base base-devel
272 #+end_src
273
274 *** Configuring the system
275
276 Let's generate the fstab:
277
278 #+begin_src bash
279 genfstab -U /mnt >> /mnt/etc/fstab
280 #+end_src
281
282 Use your favorite terminal-based editor, edit the fstab file and add
283 the =discard= option for the root partition to enable TRIM on the SSD.
284
285 Now we change root into our newly installed system and will configure
286 it. Adjust these according to your own setup.
287
288 #+begin_src bash
289 arch-chroot /mnt /bin/bash
290 passwd # set the root password
291 echo myhostname > /etc/hostname # set the hostname
292 ln -s /usr/share/zoneinfo/Canada/Eastern /etc/localtime # time zone
293 hwclock --systohc --utc # write system clock to hardware clock (UTC)
294 useradd -m -G wheel -s /bin/bash myuser # create myuser
295 passwd myuser # set the password for myuser
296 echo "myuser ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/myuser
297 # uncomment en_US.UTF-8 UTF-8 and other needed locales in /etc/locale.gen
298 locale-gen
299 echo LANG=en_US.UTF-8 > /etc/locale.conf
300 export LANG=en_US.UTF-8
301 #+end_src
302
303 Then adjust the initramfs hooks in =/etc/mkinitcpio.conf= and enable
304 the =encrypt= and =lvm2= hooks, and make sure =keyboard= is available
305 before =encrypt= so you can actually type in the LUKS password when
306 booting. Your =HOOKS= line should look similar to this:
307
308 #+begin_src
309 HOOKS="base udev autodetect modconf block keyboard encrypt lvm2 filesystems fsck"
310 #+end_src
311
312 After adjusting the hooks, build the initramfs:
313
314 #+begin_src bash
315 mkinitcpio -p linux
316 #+end_src
317
318 Now, install the =intel-ucode= package. We'll configure the bootloader
319 to enable intel microcode updates.
320
321 #+begin_src bash
322 pacman -S intel-ucode
323 #+end_src
324
325 Create the =/boot/loader/loader.conf= with the following content
326 (adjust the timeout to your liking):
327
328 #+begin_src
329 default arch
330 timeout 3
331 #+end_src
332
333 Then create the entry for Arch:
334
335 #+begin_src bash
336 mkdir -p /boot/loader/entries
337 touch /boot/loader/entries/arch.conf
338 #+end_src
339
340 Now edit =/boot/loader/entries/arch.conf= to specify the Arch entry:
341
342 #+begin_src
343 title Arch GNU/Linux
344 linux /vmlinuz-linux
345 initrd /intel-ucode.img
346 initrd /initramfs-linux.img
347 options cryptdevice=/dev/sdaX:vg:allow-discards root=/dev/mapper/vg-root rw
348 #+end_src
349
350 Again, =/dev/sdaX= is the partition you created in the [[#partitioning][partitioning]]
351 step as the underlying encrypted partition.
352
353 Finally, install the bootloader, exit the chroot, umount and reboot!
354
355 #+begin_src bash
356 bootctl install
357 exit
358 umount -R /mnt
359 reboot
360 #+end_src
361
362 *** Post-installation recommendations
363
364 Congratulations! You now have a minimal Arch installation.
365
366 At this point, I usually install my favorite AUR helper, [[https://aur.archlinux.org/packages/pacaur/][pacaur]], then
367 I install the [[https://aur.archlinux.org/packages/broadcom-wl-dkms/][broadcom-wl-dkms]] wireless driver and [[https://aur.archlinux.org/packages/mba6x_bl-dkms/][mba6x_bl-dkms]]
368 backlight driver to fix the post suspend/resume issue where three's no
369 brightness after waking up from suspend, and the only available
370 brightness would be 100%.
371
372 #+begin_src bash
373 pacaur -S linux-headers dkms # linux-headers is required for dkms
374 pacaur -S broadcom-wl-dkms
375 pacaur -S mba6x_bl-dkms
376 #+end_src
377
378 Then, I'd like to install
379
380 - input, graphics, and sound drivers,
381 - a desktop environment (I prefer Xfce or LXQt),
382 - a display manager for login screen (lightdm or sddm), and
383 - a network manager (NetworkManager or ConnMan).
384
385 Check out the [[https://wiki.archlinux.org/index.php/General_recommendations][General recommendations]] for more details.
386
387 *** References
388
389 Here are some resources I've come across each with lots of useful bits
390 and pieces, about installing Arch on a MacBook:
391
392 - [[https://github.com/pandeiro/arch-on-air][pandeiro/arch-on-air]]
393 - [[https://loicpefferkorn.net/2015/01/arch-linux-on-macbook-pro-retina-2014-with-dm-crypt-lvm-and-suspend-to-disk/][Arch Linux on MacBook Pro Retina 2014 with DM-Crypt, LVM and suspend to disk]]
394 - [[http://frankshin.com/installing-archlinux-on-macbook-air-2013/][Installing Archlinux on Macbook Air 2013]]
395 - [[http://panks.me/posts/2013/06/arch-linux-installation-with-os-x-on-macbook-air-dual-boot/][Arch Linux Installation with OS X on Macbook Air (Dual Boot)]]
396 - [[https://visual-assault.org/2016/03/05/install-encrypted-arch-linux-on-apple-macbook-pro/][Installing (encrypted) Arch Linux on an Apple MacBook Pro]]
397 - [[http://alexeyzabelin.com/arch-on-mac][Installing Arch Linux on a MacBook Air 2013]]
398 - [[https://medium.com/phils-thought-bubble-of-recent-stuff/arch-linux-running-on-my-macbook-2ea525ebefe3][Arch Linux running on my MacBook]]
399 - [[http://codylittlewood.com/arch-linux-on-macbook-pro-installation/][Dual boot Arch Linux on MacBook Pro Installation]]
400
401
402 * COMMENT Local Variables :ARCHIVE:
403 # Local Variables:
404 # org-hugo-footer: "\n\n[//]: # \"Exported with love from a post written in Org mode\"\n[//]: # \"- https://ox-hugo.scripter.co\""
405 # org-hugo-auto-export-on-save: t
406 # End: