[wip] better organize pages, enable org-hugo-auto-export-on-save
[~bandali/bndl.org] / content-org / aminb.org
CommitLineData
caf3b78c
AB
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
bdec7790 11* Pages
ae39b0da
AB
12:PROPERTIES:
13:EXPORT_HUGO_SECTION: /
bdec7790
AB
14:END:
15
16** Home
17:PROPERTIES:
ae39b0da
AB
18:EXPORT_FILE_NAME: _index
19:END:
20
21I'm a [[/uw][graduate student]] in the [[https://watform.uwaterloo.ca][WatForm]] group at University of Waterloo,
22supervised by [[https://cs.uwaterloo.ca/~nday/][Dr. Nancy Day]]. I'm interested in using formal methods,
23especially type systems, to help make software more reliable.
24
caf3b78c
AB
25** CV
26:PROPERTIES:
27:EXPORT_FILE_NAME: cv
bdec7790 28:EXPORT_HUGO_MENU: :menu topnav :weight 10
caf3b78c
AB
29:END:
30
31My academic {{{abbr(CV)}}} is available as [[/cv.pdf][cv.pdf]],
32and an outdated professional resume is available as [[/resume.pdf][resume.pdf]] as
33well.
34
35I'm interested in functional programming and functional languages,
36type systems, and formal methods in general. I love writing Haskell
37and I'm looking into Rust and Lean as well. Feel free to [[/contact][drop me a
38line]] if you like to geek out about any of the above.
39
40** TODO Now
41
42** TODO Projects
43
d6fab81a
AB
44** DONE Contact
45CLOSED: [2018-09-03 Mon 20:44]
46:PROPERTIES:
47:EXPORT_FILE_NAME: contact
bdec7790 48:EXPORT_HUGO_MENU: :menu topnav :weight 40
d6fab81a
AB
49:EXPORT_HUGO_CUSTOM_FRONT_MATTER: :customTitle "Say hello!"
50:END:
51
52#+macro: xmpp @@html:<a href="xmpp:$1">$1</a>@@
53
54You can contact me via email or through my accounts on various online
55platforms.
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]]
eac9e3d2 61- [[mailto:abandali@uwaterloo.ca][abandali@uwaterloo.ca]], I'm a [[/uw][grad student]] @ UW
d6fab81a
AB
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+
caf3b78c 78
eac9e3d2
AB
79** Colophon
80:PROPERTIES:
81:EXPORT_FILE_NAME: colophon
eac9e3d2
AB
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
88This is my personal website, previous versions of which I've ran on
89different 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
91Emacs + Org mode.
92
93The sources are available on https://git.sr.ht/~aminb/aminb.org. The
94site 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
96deployed 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
100To toggle night mode, click on {{{light}}}, which is always available
101on the top navigation menu. It saves its state in a browser cookie,
102other than that no JavaScript is required to use this website.
103
104*** Copyright and Licenses
105:PROPERTIES:
106:CUSTOM_ID: copyright
107:END:
108
109The source code for this site is licensed under version 3 (or, at your
110option, 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
bdec7790
AB
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:
122Results from static site search implemented using /Fusejs/, /jquery/
123and /mark.js/. -- [[https://gist.github.com/eddiewebb/735feb48f50f0ddd65ae5606a1cb41ae][Source]]
124
caf3b78c
AB
125* Posts
126:PROPERTIES:
127:EXPORT_HUGO_SECTION: post
ae39b0da 128:EXPORT_HUGO_AUTO_SET_LASTMOD: t
caf3b78c
AB
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
caf3b78c 135:EXPORT_OPTIONS: ^:{}
ae39b0da
AB
136:EXPORT_HUGO_ALIASES: /2016/11/arch-macbook-air
137:EXPORT_HUGO_CUSTOM_FRONT_MATTER: :toc true
caf3b78c
AB
138:END:
139
140This post summarizes how I install and dual-boot Arch GNU/Linux with
141Full-Disk Encryption alongside macOS. It is not meant to be a
142replacement 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]].
143Rather, it mostly serves as a small summary with a few useful notes
144about the gotchas.
145
146So, make sure you understand what you type into your terminal. If you
147don't, checking out the Arch wiki should probably be your first step.
148
149/Note:/ you will need internet access throughout the installation and
150the MacBook Air's WiFi doesn't work out of the box on Arch. I
151recommend using your phone's USB Tethering (if it does support it), or
152using an Ethernet-USB adapter.
153
154*** Shrinking the macOS partition
155
156The first step I take is resizing the HFS+ macOS partition to make
157room for the new {{{abbr(GNU/Linux)}}} installation. There are plenty
158of tutorials on how to do this using macOS's Disk Utility, so do that
159and then come back!
160
161*** Creating a bootable Arch Installer USB
162
163There are different ways of creating a bootable Arch USB, all
164documented on the [[https://wiki.archlinux.org/index.php/USB_flash_installation_media][USB flash installation media]] page on the Arch wiki,
165but the simplest one is using =dd= if you already have access to
166another UNIX system.
167
168{{{span(red,Warning:)}}} make sure you backup the data on your flash
169drive, as =dd= will irrevocably destroy all data on it.
170
171Use =lsblk= to find the name (block device) of your USB drive, then
172run =dd= (as root) as shown below:
173
174#+begin_src bash
175dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync
176#+end_src
177
178Replace =/path/to/archlinux.iso= with the path to the Arch image you
179have downloaded, and =/dev/sdx= with your drive.
180
181*** Booting up from the USB
182
183After creating the install USB, reboot your laptop and hold the alt
184key and boot into the USB.
185
186When booting is complete and you're presented with the prompt, it's a
187good time to make sure you're connected to the internet (see the
188/note/ at the top of this post).
189
190Use =ping= to verify that you've established a connection:
191
192#+begin_src bash
193ping archlinux.org
194#+end_src
195
196*** Updating the system clock
197
198Once you're connected to the internet, make sure the system clock is
199accurate:
200
201#+begin_src bash
202timedatectl set-ntp true # start and enable systemd-timesyncd
203#+end_src
204
205You can check the service status using =timedatectl status=.
206
207*** Partitioning
208:PROPERTIES:
209:CUSTOM_ID: partitioning
210:END:
211
212I 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
214personally prefer =cfdisk=.
215
216*** Setting up LVM & LUKS
217
218I 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
219partition.
220
221First, let's set up the underlying encrypted partition:
222
223#+begin_src bash
224cryptsetup -v --cipher aes-xts-plain64 --key-size 512 --hash sha512 \
225 --iter-time 5000 --use-urandom -y luksFormat /dev/sdaX
226#+end_src
227
228where =/dev/sdaX= is the partition you created in the last step
229(e.g. =/dev/sda4=). For more information about the =cryptsetup=
230options, see the [[https://wiki.archlinux.org/index.php/Dm-crypt/Device_encryption#Encryption_options_for_LUKS_mode][LUKS encryption options]].
231
232Then we open the container:
233
234#+begin_src bash
235cryptsetup open --type luks /dev/sdaX lvm
236#+end_src
237
238Now it's time to use lvm and prepare the logical volume(s):
239
240#+begin_src bash
241pvcreate /dev/mapper/lvm
242vgcreate vg /dev/mapper/lvm
243lvcreate --extents +100%FREE -n root vg
244#+end_src
245
246This will create a physical volume on the mapping we just opened,
247create a volume group named =vg= on the physical volume, and create a
248logical volume named =root= that spans the entire volume group. More
249complex setups are possible thanks to the great flexibility of lvm.
250
251We now format the logical volume with =ext4=:
252
253#+begin_src bash
254mkfs.ext4 /dev/mapper/vg-root
255#+end_src
256
257*** Installing the base system
258
259Let's mount the logical volume, make a directory for the mount point
260of the boot partition, and mount the boot partition (=/dev/sda1=):
261
262#+begin_src bash
263mount /dev/mapper/vg-root /mnt
264mkdir /mnt/boot
265mount /dev/sda1 /mnt/boot
266#+end_src
267
268Finally, let's install the base system (and optionally =base-devel=):
269
270#+begin_src bash
271pacstrap /mnt base base-devel
272#+end_src
273
274*** Configuring the system
275
276Let's generate the fstab:
277
278#+begin_src bash
279genfstab -U /mnt >> /mnt/etc/fstab
280#+end_src
281
282Use your favorite terminal-based editor, edit the fstab file and add
283the =discard= option for the root partition to enable TRIM on the SSD.
284
285Now we change root into our newly installed system and will configure
286it. Adjust these according to your own setup.
287
288#+begin_src bash
289arch-chroot /mnt /bin/bash
290passwd # set the root password
291echo myhostname > /etc/hostname # set the hostname
292ln -s /usr/share/zoneinfo/Canada/Eastern /etc/localtime # time zone
293hwclock --systohc --utc # write system clock to hardware clock (UTC)
294useradd -m -G wheel -s /bin/bash myuser # create myuser
295passwd myuser # set the password for myuser
296echo "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
298locale-gen
299echo LANG=en_US.UTF-8 > /etc/locale.conf
300export LANG=en_US.UTF-8
301#+end_src
302
303Then adjust the initramfs hooks in =/etc/mkinitcpio.conf= and enable
304the =encrypt= and =lvm2= hooks, and make sure =keyboard= is available
305before =encrypt= so you can actually type in the LUKS password when
306booting. Your =HOOKS= line should look similar to this:
307
308#+begin_src
309HOOKS="base udev autodetect modconf block keyboard encrypt lvm2 filesystems fsck"
310#+end_src
311
312After adjusting the hooks, build the initramfs:
313
314#+begin_src bash
315mkinitcpio -p linux
316#+end_src
317
318Now, install the =intel-ucode= package. We'll configure the bootloader
319to enable intel microcode updates.
320
321#+begin_src bash
322pacman -S intel-ucode
323#+end_src
324
325Create the =/boot/loader/loader.conf= with the following content
326(adjust the timeout to your liking):
327
328#+begin_src
329default arch
330timeout 3
331#+end_src
332
333Then create the entry for Arch:
334
335#+begin_src bash
336mkdir -p /boot/loader/entries
337touch /boot/loader/entries/arch.conf
338#+end_src
339
340Now edit =/boot/loader/entries/arch.conf= to specify the Arch entry:
341
342#+begin_src
343title Arch GNU/Linux
344linux /vmlinuz-linux
345initrd /intel-ucode.img
346initrd /initramfs-linux.img
347options cryptdevice=/dev/sdaX:vg:allow-discards root=/dev/mapper/vg-root rw
348#+end_src
349
350Again, =/dev/sdaX= is the partition you created in the [[#partitioning][partitioning]]
351step as the underlying encrypted partition.
352
353Finally, install the bootloader, exit the chroot, umount and reboot!
354
355#+begin_src bash
356bootctl install
357exit
358umount -R /mnt
359reboot
360#+end_src
361
362*** Post-installation recommendations
363
364Congratulations! You now have a minimal Arch installation.
365
366At this point, I usually install my favorite AUR helper, [[https://aur.archlinux.org/packages/pacaur/][pacaur]], then
367I 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]]
368backlight driver to fix the post suspend/resume issue where three's no
369brightness after waking up from suspend, and the only available
370brightness would be 100%.
371
372#+begin_src bash
373pacaur -S linux-headers dkms # linux-headers is required for dkms
374pacaur -S broadcom-wl-dkms
375pacaur -S mba6x_bl-dkms
376#+end_src
377
378Then, 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
385Check out the [[https://wiki.archlinux.org/index.php/General_recommendations][General recommendations]] for more details.
386
387*** References
388
389Here are some resources I've come across each with lots of useful bits
390and 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
caf3b78c
AB
401
402* COMMENT Local Variables :ARCHIVE:
403# Local Variables:
bdec7790
AB
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
caf3b78c 406# End: