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