- Introduced a new module for a11ywatch with Podman support, creating a bridge network and defining backend and frontend containers. - Configured Nginx to serve the a11ywatch application with SSL and ACME support. - Added user and group configurations for a11ywatch. - Created a systemd service to ensure the Podman network exists on boot. Implement Firefox Container Controller extension and host - Added a module for the Firefox Container Controller extension, allowing installation via Nix. - Created a native messaging host for the extension to communicate with the container controller. - Included CLI helpers to enqueue commands for showing and hiding containers. Enable fingerprint authentication in PAM - Configured fingerprint authentication for login, sudo, and swaylock services. Setup Raspberry Pi OS image creation script - Developed a script to create a read-only Raspberry Pi OS Lite image with Snapcast client. - Included configuration for Wi-Fi, hostname, and Snapcast server. - Implemented user and group setup for Snapcast client and ensured necessary services are enabled. Document Raspberry Pi Zero W setup instructions - Added detailed instructions for configuring Raspberry Pi OS on Zero W, including disabling unused services and setting up Snapcast client. Create test configuration script for NixOS - Implemented a script to perform dry-builds for NixOS configurations, allowing for easy validation of host configurations.
68 lines
1.8 KiB
Nix
68 lines
1.8 KiB
Nix
# firefox-container-controller-extension.nix
|
|
# Import this file in your configuration.nix to build and install the Container Controller extension.
|
|
# Usage in configuration.nix:
|
|
#
|
|
# let
|
|
# containerControllerXpi = import ./firefox-container-controller-extension.nix { inherit pkgs; };
|
|
# in {
|
|
# programs.firefox = {
|
|
# enable = true;
|
|
# profiles.default = {
|
|
# extensions = [ containerControllerXpi ];
|
|
# };
|
|
# };
|
|
# }
|
|
|
|
{ pkgs }:
|
|
|
|
pkgs.runCommand "firefox-containercontroller-xpi" {
|
|
nativeBuildInputs = [ pkgs.zip ];
|
|
} ''
|
|
# Create temp dir for packaging
|
|
TMPDIR=$(mktemp -d)
|
|
cd "$TMPDIR"
|
|
|
|
# Write manifest.json without leading spaces
|
|
cat > manifest.json << 'EOF'
|
|
{
|
|
"manifest_version": 2,
|
|
"name": "Container Controller",
|
|
"version": "1.0",
|
|
"applications": { "gecko": { "id": "containercontroller@cloonar.com" } },
|
|
"permissions": ["containers", "nativeMessaging"],
|
|
"background": { "scripts": ["background.js"] }
|
|
}
|
|
EOF
|
|
|
|
# Write background.js without indentation
|
|
cat > background.js << 'EOF'
|
|
async function poll() {
|
|
const resp = await browser.runtime.sendNativeMessage(
|
|
"com.firefox.containercontroller", {}
|
|
);
|
|
if (resp.userContextId && resp.action) {
|
|
try {
|
|
if (resp.action === "hide") {
|
|
await browser.containers.hideContainer({ userContextId: resp.userContextId });
|
|
} else if (resp.action === "show") {
|
|
await browser.containers.showContainer({ userContextId: resp.userContextId });
|
|
}
|
|
} catch (e) {}
|
|
}
|
|
}
|
|
|
|
// Poll every second
|
|
setInterval(poll, 1000);
|
|
EOF
|
|
|
|
# Ensure the Firefox extensions directory exists in the output
|
|
mkdir -p "$out/share/firefox/extensions"
|
|
|
|
# Create ZIP archive at root of package
|
|
# and use the updated extension id for the filename
|
|
zip -r "$out/share/firefox/extensions/containercontroller@cloonar.com.xpi" manifest.json background.js
|
|
|
|
# Clean up
|
|
rm -rf "$TMPDIR"
|
|
''
|