1 #+title: sources of aminb.org's pages and posts
4 #+seq_todo: TODO DRAFT DONE
5 #+property: header-args :eval never-export
8 #+macro: abbr @@html:<abbr>$1</abbr>@@
9 #+macro: span @@html:<span class="$1">$2</span>@@
13 :EXPORT_HUGO_SECTION: /
18 :EXPORT_FILE_NAME: _index
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.
28 :EXPORT_HUGO_MENU: :menu topnav :weight 10
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
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.
45 CLOSED: [2018-09-03 Mon 20:44]
47 :EXPORT_FILE_NAME: contact
48 :EXPORT_HUGO_MENU: :menu topnav :weight 40
49 :EXPORT_HUGO_CUSTOM_FRONT_MATTER: :customTitle "Say hello!"
52 #+macro: xmpp @@html:<a href="xmpp:$1">$1</a>@@
54 You can contact me via email or through my accounts on various online
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]]
68 *** Other online places
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+
81 :EXPORT_FILE_NAME: colophon
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"/>@@
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
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]].
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.
104 *** Copyright and Licenses
106 :CUSTOM_ID: copyright
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.
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))
122 Results from static site search implemented using /Fusejs/, /jquery/
123 and /mark.js/. -- [[https://gist.github.com/eddiewebb/735feb48f50f0ddd65ae5606a1cb41ae][Source]]
127 :EXPORT_HUGO_SECTION: post
128 :EXPORT_HUGO_AUTO_SET_LASTMOD: t
131 ** Arch GNU/Linux on MacBook Air 2013 :arch:macbook:
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
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
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.
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.
154 *** Shrinking the macOS partition
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
161 *** Creating a bootable Arch Installer USB
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
168 {{{span(red,Warning:)}}} make sure you backup the data on your flash
169 drive, as =dd= will irrevocably destroy all data on it.
171 Use =lsblk= to find the name (block device) of your USB drive, then
172 run =dd= (as root) as shown below:
175 dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync
178 Replace =/path/to/archlinux.iso= with the path to the Arch image you
179 have downloaded, and =/dev/sdx= with your drive.
181 *** Booting up from the USB
183 After creating the install USB, reboot your laptop and hold the alt
184 key and boot into the USB.
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).
190 Use =ping= to verify that you've established a connection:
196 *** Updating the system clock
198 Once you're connected to the internet, make sure the system clock is
202 timedatectl set-ntp true # start and enable systemd-timesyncd
205 You can check the service status using =timedatectl status=.
209 :CUSTOM_ID: partitioning
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=.
216 *** Setting up LVM & LUKS
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
221 First, let's set up the underlying encrypted partition:
224 cryptsetup -v --cipher aes-xts-plain64 --key-size 512 --hash sha512 \
225 --iter-time 5000 --use-urandom -y luksFormat /dev/sdaX
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]].
232 Then we open the container:
235 cryptsetup open --type luks /dev/sdaX lvm
238 Now it's time to use lvm and prepare the logical volume(s):
241 pvcreate /dev/mapper/lvm
242 vgcreate vg /dev/mapper/lvm
243 lvcreate --extents +100%FREE -n root vg
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.
251 We now format the logical volume with =ext4=:
254 mkfs.ext4 /dev/mapper/vg-root
257 *** Installing the base system
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=):
263 mount /dev/mapper/vg-root /mnt
265 mount /dev/sda1 /mnt/boot
268 Finally, let's install the base system (and optionally =base-devel=):
271 pacstrap /mnt base base-devel
274 *** Configuring the system
276 Let's generate the fstab:
279 genfstab -U /mnt >> /mnt/etc/fstab
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.
285 Now we change root into our newly installed system and will configure
286 it. Adjust these according to your own setup.
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
299 echo LANG=en_US.UTF-8 > /etc/locale.conf
300 export LANG=en_US.UTF-8
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:
309 HOOKS="base udev autodetect modconf block keyboard encrypt lvm2 filesystems fsck"
312 After adjusting the hooks, build the initramfs:
318 Now, install the =intel-ucode= package. We'll configure the bootloader
319 to enable intel microcode updates.
322 pacman -S intel-ucode
325 Create the =/boot/loader/loader.conf= with the following content
326 (adjust the timeout to your liking):
333 Then create the entry for Arch:
336 mkdir -p /boot/loader/entries
337 touch /boot/loader/entries/arch.conf
340 Now edit =/boot/loader/entries/arch.conf= to specify the Arch entry:
345 initrd /intel-ucode.img
346 initrd /initramfs-linux.img
347 options cryptdevice=/dev/sdaX:vg:allow-discards root=/dev/mapper/vg-root rw
350 Again, =/dev/sdaX= is the partition you created in the [[#partitioning][partitioning]]
351 step as the underlying encrypted partition.
353 Finally, install the bootloader, exit the chroot, umount and reboot!
362 *** Post-installation recommendations
364 Congratulations! You now have a minimal Arch installation.
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%.
373 pacaur -S linux-headers dkms # linux-headers is required for dkms
374 pacaur -S broadcom-wl-dkms
375 pacaur -S mba6x_bl-dkms
378 Then, I'd like to install
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).
385 Check out the [[https://wiki.archlinux.org/index.php/General_recommendations][General recommendations]] for more details.
389 Here are some resources I've come across each with lots of useful bits
390 and pieces, about installing Arch on a MacBook:
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]]
402 * COMMENT Local Variables :ARCHIVE:
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