Add NixOS on Framework
parent
abdf76368d
commit
12aae0afb4
|
@ -1,2 +1,3 @@
|
|||
.hugo_build.lock
|
||||
public
|
||||
*#
|
||||
|
|
|
@ -0,0 +1,210 @@
|
|||
---
|
||||
|
||||
layout: post
|
||||
title: "NixOS with AwesomeWM on a Framework laptop"
|
||||
slug: "nixos-awesomewm-framework"
|
||||
date: 2023-01-29 22:53:54
|
||||
categories: [linux]
|
||||
|
||||
---
|
||||
|
||||
[Framework] is a company that makes laptops that are easily repairable.
|
||||
[AwesomeWM] is a modular tiling window manager. [NixOS] is a Linux distribution
|
||||
that is configured using a declarative, idempotent language. This is a blog post
|
||||
about how to install and configure NixOS using AwesomeWM with no display manager
|
||||
(i.e. using `startx`) on a Framework laptop. I was inspired to write this after
|
||||
receiving help from [elly's post] about installing Alpine on a Framework laptop.
|
||||
|
||||
## Install NixOS
|
||||
|
||||
### Create install medium
|
||||
|
||||
Download a copy of the [NixOS installation media]. I used the Gnome graphical
|
||||
installer, but any of them will be fine. Once complete, you can burn the
|
||||
installation image to a USB flash drive using something like
|
||||
|
||||
```bash
|
||||
sudo dd if=/path/to/downloaded/image.iso of=/dev/sdX bs=4M status=progress
|
||||
```
|
||||
|
||||
### Disable secure boot
|
||||
|
||||
Next disable [secure boot] (at least temporarily) in order to boot the
|
||||
installer.
|
||||
|
||||
1. reboot the computer
|
||||
1. repeatedly press F2 until you see the UEFI BIOS menu
|
||||
1. go to the Security tab
|
||||
1. go the Secure Boot
|
||||
1. change "Enforce Secure Boot" to disabled
|
||||
1. press F10 to save and exit
|
||||
|
||||
### Run installer
|
||||
|
||||
Reboot the computer and repeatedly press F10 until the boot menu appears. Select
|
||||
the entry that has "USB" in it. Follow the prompts to install NixOS. You might
|
||||
need to connect to a WiFi network, close the installer, and reopen the
|
||||
installer. At the end of the installer, when prompted for which desktop
|
||||
environment to install, select "None / terminal only". Don't worry, we'll be
|
||||
installing AwesomeWM shortly.
|
||||
|
||||
## Connect to WiFi
|
||||
|
||||
After restarting and signing in at the login TTY, reconnect to the WiFi by
|
||||
running `nmtui` and following the prompts.
|
||||
|
||||
## Configure NixOS
|
||||
|
||||
There are many ways to set up a NixOS configuration. I personally use a
|
||||
[repository with Nix flakes]. By default you'll find your configuration in
|
||||
`/etc/nixos/`. In this section, I'm going to provide statements that you'll
|
||||
likely want to include in one of your NixOS configuration files. Which file to
|
||||
put it in is a matter of preference, and is left up to the user, though I'll
|
||||
provide links to where I included them in my repo.
|
||||
|
||||
### Kernel version
|
||||
|
||||
Wifi, Bluetooth, and graphics will require Linux Kernel 5.16 or greater. I
|
||||
simply set mine to install the latest for now.
|
||||
|
||||
[source](https://git.kindrobot.ca/kindrobot/nix-config/src/commit/03353c4d0eac0c6ba50843289d201bd055ff3822/box/framework2.nix#L14)
|
||||
```nix
|
||||
{
|
||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||
}
|
||||
```
|
||||
|
||||
### Backlight
|
||||
|
||||
xbacklight doesn't work out of the box. Get it working with
|
||||
|
||||
[source](https://git.kindrobot.ca/kindrobot/nix-config/src/commit/6dcc57a85715665d188de03e3c74a926056c58ea/box/framework2.nix#L42-L46)
|
||||
```nix
|
||||
{
|
||||
hardware.acpilight.enable = lib.mkDefault true;
|
||||
hardware.sensor.iio.enable = lib.mkDefault true;
|
||||
services.udev.extraRules = ''
|
||||
ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="intel_backlight", MODE="0666", RUN+="${pkgs.coreutils}/bin/chmod a+w /sys/class/backlight/%k/brightness"
|
||||
'';
|
||||
}
|
||||
```
|
||||
|
||||
### Bluetooth
|
||||
|
||||
Enable bluetooth with
|
||||
|
||||
[source](https://git.kindrobot.ca/kindrobot/nix-config/src/commit/6dcc57a85715665d188de03e3c74a926056c58ea/box/framework2.nix#L49)
|
||||
```nix
|
||||
{
|
||||
hardware.bluetooth.enable = true;
|
||||
}
|
||||
```
|
||||
|
||||
Manage bluetooth through the CLI with `bluetoothctl`.
|
||||
|
||||
### Fingerprint Scanner
|
||||
|
||||
Enable the fingerprint reader with
|
||||
|
||||
[source](https://git.kindrobot.ca/kindrobot/nix-config/src/commit/6dcc57a85715665d188de03e3c74a926056c58ea/box/framework2.nix#L50)
|
||||
```
|
||||
{
|
||||
services.fprintd.enable = true;
|
||||
}
|
||||
```
|
||||
|
||||
Enroll your fingerprint with `sudo fprintd-enroll $USER`. You'll then be able to
|
||||
user your finger print when signing in on a TTY and when using sudo.
|
||||
|
||||
### Increase the TTY console font
|
||||
|
||||
Because Framework laptops have high pixel density monitors, the main TTY console
|
||||
can be hard to read. Installing and enabling a larger font can help.
|
||||
|
||||
[source](https://git.kindrobot.ca/kindrobot/nix-config/src/commit/6dcc57a85715665d188de03e3c74a926056c58ea/box/framework2.nix#L51-L59)
|
||||
```nix
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
terminus_font
|
||||
];
|
||||
console = {
|
||||
earlySetup = true;
|
||||
font = "${pkgs.terminus_font}/share/consolefonts/ter-132n.psf.gz";
|
||||
packages = with pkgs; [ terminus_font ];
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### Specify working touchpad drivers
|
||||
|
||||
Curiously if you install Gnome or KDE, NixOS will figure out the the correct (or
|
||||
at least a working) touchpad driver. When using AwesomeWM with no display
|
||||
manager, we're on our own. Specify using the synaptics driver with some
|
||||
reasonable configuration.
|
||||
|
||||
[source](https://git.kindrobot.ca/kindrobot/nix-config/src/commit/6dcc57a85715665d188de03e3c74a926056c58ea/box/framework2.nix#L60-L64)
|
||||
```nix
|
||||
{
|
||||
services.xserver.synaptics = {
|
||||
enable = true;
|
||||
twoFingerScroll = true;
|
||||
accelFactor = "0.075";
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### Configure AwesomeWM
|
||||
|
||||
Some settings here are to help make the menu bar and title bars readable on the
|
||||
high DPI monitor.
|
||||
|
||||
[source](https://git.kindrobot.ca/kindrobot/nix-config/src/commit/6dcc57a85715665d188de03e3c74a926056c58ea/conf/awesome_workstation.nix#L5-L18)
|
||||
```nix
|
||||
{
|
||||
services.xserver.displayManager.startx.enable = true;
|
||||
services.xserver.windowManager.awesome = {
|
||||
enable = true;
|
||||
luaModules = with pkgs.luaPackages; [
|
||||
luarocks # is the package manager for Lua modules
|
||||
luadbi-mysql # Database abstraction layer
|
||||
];
|
||||
};
|
||||
services.xserver.dpi = 180;
|
||||
environment.variables = {
|
||||
GDK_SCALE = "2";
|
||||
GDK_DPI_SCALE = "0.5";
|
||||
_JAVA_OPTIONS = "-Dsun.java2d.uiScale=2";
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
Notice the this config enables a `startx` display manager. In fact, this is
|
||||
configuring NixOS to be able to do `startx` without a display manager. Create an
|
||||
`.xinitrc` with
|
||||
|
||||
```bash
|
||||
echo awesome > ~/.xinitrc
|
||||
```
|
||||
|
||||
### AwesomeWM bells and whistles
|
||||
|
||||
With all of the configuration up until now, after running `nixos-rebuild switch
|
||||
...`, (and probably restarting), you should be able to get into Awesome by
|
||||
signing in at the login TTY and running `startx`. If you'd like a more custom
|
||||
desktop with most of the function keys working, try cloning my (forked) awesome
|
||||
config:
|
||||
|
||||
```bash
|
||||
git clone --recurse-submodules --remote-submodules --depth 1 -j 2 https://github.com/kindrowboat/awesome-copycats.git ~/.config/awesome`
|
||||
```
|
||||
|
||||
and reload nix by pressing Ctrl+Super+R.
|
||||
|
||||
|
||||
[Framework]: https://frame.work
|
||||
[AwesomeWM]: https://awesomewm.org/
|
||||
[NixOS]: https://nixos.org
|
||||
[elly's post]: https://elly.town/d/blog/2022-10-20-alpine-framework.txt
|
||||
[NixOS installation media]: https://nixos.org/download.html#nixos-iso
|
||||
[secure boot]: https://en.wikipedia.org/wiki/Hardware_restriction#Secure_boot
|
||||
[repository with Nix flakes]: https://git.kindrobot.ca/kindrobot/nix-config
|
Loading…
Reference in New Issue