Created
August 27, 2023 03:39
-
-
Save arilotter/fd396b1febcf1d1990a6d66d2f33fead to your computer and use it in GitHub Desktop.
beepy nix demo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ pkgs, ... }: | |
let | |
kernel = pkgs.rpi-kernels.latest.kernel; | |
sharp-drm-src = pkgs.fetchFromGitHub { | |
owner = "ardangelo"; | |
repo = "sharp-drm-driver"; | |
rev = "8bdc22653f0555b286c014dbb95bc8064f9693c4"; | |
sha256 = "sha256-eRj74G3SNwHgMqF9KYfCGLfaf2g+EZSdpIdnKW+FPwI="; | |
}; | |
sharpDriver = pkgs.stdenv.mkDerivation rec { | |
name = "sharp-drm"; | |
version = "0.0.1-${kernel.version}"; | |
src = sharp-drm-src; | |
hardeningDisable = [ "pic" "format" ]; | |
nativeBuildInputs = kernel.moduleBuildDependencies; | |
LINUX_DIR = "${kernel.dev}/lib/modules/${kernel.version}/build"; | |
installPhase = '' | |
runHook preInstall | |
mkdir -p $out/lib/modules/${kernel.version}/extra | |
INSTALL_MOD_PATH=$out make -C '${LINUX_DIR}' M='$(shell pwd)' modules_install | |
runHook postInstall | |
''; | |
}; | |
cmdline = pkgs.writeText "cmdline.txt" '' | |
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait fbcon=font:VGA8x8 fbcon=map:10 | |
''; | |
sharpOverlay = pkgs.runCommand "sharp-overlay" { } '' | |
mkdir $out | |
${pkgs.dtc}/bin/dtc -@ -I dts -O dtb -o $out/sharp-drm.dtbo ${sharp-drm-src}/sharp-drm.dts | |
''; | |
# https://github.com/ardangelo/beepberry-keyboard-driver | |
beepy-kbd-src = pkgs.fetchFromGitHub { | |
owner = "ardangelo"; | |
repo = "beepberry-keyboard-driver"; | |
rev = "9a755c0c4f1ac2d025a7f879d9132335420d235f"; | |
sha256 = "sha256-Hriw9tPOi2ZF/z56ySdXLBHFCeAqs0GMjuyAMswJrK0="; | |
}; | |
keyboardDriver = | |
pkgs.stdenv.mkDerivation rec { | |
pname = "beepy-kbd-driver"; | |
version = "2023-08-25-${kernel.version}"; | |
src = beepy-kbd-src; | |
hardeningDisable = [ "pic" "format" ]; | |
nativeBuildInputs = kernel.moduleBuildDependencies ++ [ pkgs.dtc ]; | |
LINUX_DIR = "${kernel.dev}/lib/modules/${kernel.version}/build"; | |
installPhase = '' | |
runHook preInstall | |
INSTALL_MOD_PATH=$out make -C '${LINUX_DIR}' M='$(shell pwd)' modules_install | |
# Install keymap | |
mkdir -p $out/share/keymaps/ | |
cp ./beepy-kbd.map $out/share/keymaps | |
# Install device tree overlay | |
mkdir -p $out/boot/overlays/ | |
cp ./beepy-kbd.dtbo $out/boot/overlays | |
ls -R $out | |
runHook postInstall | |
''; | |
}; | |
in | |
{ | |
# setup the Sharp display & BB keyboard | |
boot.extraModulePackages = [ sharpDriver keyboardDriver ]; | |
boot.kernelModules = [ "i2c-dev" ]; | |
console.packages = [ keyboardDriver ]; | |
console.keyMap = "beepy-kbd"; | |
console.earlySetup = true; | |
hardware.raspberry-pi.config.all = { | |
dt-overlays = { | |
sharp-drm = { | |
enable = true; | |
params = { }; | |
}; | |
beepy-kbd = { | |
enable = true; | |
params = { | |
irq_pin = { | |
enable = true; | |
value = "4"; | |
}; | |
}; | |
}; | |
}; | |
base-dt-params = { | |
i2c_arm = { | |
enable = true; | |
value = "on"; | |
}; | |
spi = { | |
enable = true; | |
value = "on"; | |
}; | |
}; | |
options = { | |
framebuffer_width = { | |
enable = true; | |
value = "400"; | |
}; | |
framebuffer_height = { | |
enable = true; | |
value = "240"; | |
}; | |
}; | |
}; | |
# fix for wifi rpi 3 and light 2 | |
boot.extraModprobeConfig = '' | |
options brcmfmac roamoff=1 feature_disable=0x82000 | |
''; | |
sdImage = { | |
compressImage = false; | |
populateFirmwareCommands = '' | |
mkdir -p firmware/overlays/ | |
chmod -R 777 firmware/overlays | |
ls -laR ${keyboardDriver} | |
cp ${sharpOverlay}/sharp-drm.dtbo firmware/overlays/ | |
cp ${keyboardDriver}/boot/overlays/* firmware/overlays/ | |
cp ${cmdline} firmware/cmdline.txt | |
''; | |
}; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ pkgs, ... }: | |
{ | |
nixpkgs = { | |
config.allowUnfree = true; | |
}; | |
nix = { | |
settings = { | |
experimental-features = "nix-command flakes"; | |
auto-optimise-store = true; | |
}; | |
}; | |
time.timeZone = "America/Toronto"; | |
i18n.defaultLocale = "en_US.UTF-8"; | |
security.polkit.enable = true; | |
sound.enable = false; | |
users = { | |
mutableUsers = false; | |
users.eric = { | |
isNormalUser = true; | |
home = "/home/eric"; | |
description = "Eric Lewis"; | |
uid = 1000; | |
extraGroups = [ | |
"wheel" | |
"sudoers" | |
"networkmanager" | |
"audio" | |
"dialout" | |
"video" | |
]; | |
shell = pkgs.fish; | |
hashedPassword = "RUN mkpasswd AND PASTE THE RESULT HERE"; | |
openssh.authorizedKeys.keys = | |
[ "PASTE YOUR SSH PUBLIC KEY HERE" ]; | |
}; | |
}; | |
environment.systemPackages = with pkgs; [ | |
wget | |
curl | |
git | |
zip | |
unzip | |
nano | |
]; | |
services.avahi = { | |
enable = true; | |
nssmdns = true; | |
}; | |
# https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion | |
system.stateVersion = "21.11"; | |
networking.hostName = "beepy"; | |
hardware = { | |
bluetooth.enable = true; | |
bluetooth.powerOnBoot = true; | |
enableRedistributableFirmware = true; | |
}; | |
environment.systemPackages = [ | |
pkgs.i2c-tools | |
]; | |
services.openssh.enable = true; | |
nixpkgs.hostPlatform = "aarch64-linux"; | |
# raspberry pi doesn't do so hot without swap. | |
swapDevices = [{ | |
device = "/var/lib/swapfile"; | |
size = 16 * 1024; | |
}]; | |
# enable autoprobing of bluetooth driver | |
# https://github.com/raspberrypi/linux/blob/c8c99191e1419062ac8b668956d19e788865912a/arch/arm/boot/dts/overlays/README#L222-L224 | |
hardware.raspberry-pi.config.all.base-dt-params.krnbt = { | |
enable = true; | |
value = "on"; | |
}; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
description = "ari's nice lil nix config :3"; | |
nixConfig = { | |
extra-substituters = [ "https://raspberry-pi-nix.cachix.org" ]; | |
extra-trusted-public-keys = [ | |
"raspberry-pi-nix.cachix.org-1:WmV2rdSangxW0rZjY/tBvBDSaNFQ3DyEQsVw8EvHn9o=" | |
]; | |
}; | |
inputs = { | |
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; | |
raspberry-pi-nix = { | |
url = "github:tstat/raspberry-pi-nix"; | |
inputs.nixpkgs.follows = "nixpkgs"; | |
}; | |
}; | |
outputs = { nixpkgs, ... }@inputs: rec { | |
nixosConfigurations = { | |
# kronos = saturn = cuz it rings ;) | |
# locally: `sudo nixos-rebuild switch --flake .#beepy` | |
# sd image: `nix build '.#beepy-sd'` | |
"beepy" = nixpkgs.lib.nixosSystem { | |
specialArgs = { inherit inputs; inherit nix-colors; }; | |
modules = [ | |
inputs.raspberry-pi-nix.nixosModules.raspberry-pi | |
./beepy-drivers.nix | |
./configuration.nix | |
]; | |
}; | |
}; | |
beepy-sd = nixosConfigurations.beepy.config.system.build.sdImage; | |
}; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment