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