diff --git a/_nav.qd b/_nav.qd index f1648d1..c5de4ef 100644 --- a/_nav.qd +++ b/_nav.qd @@ -9,6 +9,8 @@ - [Firmware Updates](hardware/001-firmware-updates.qd) - [Thunderbolt](hardware/002-thunderbolt.qd) +- [Power Profiles](hardware/003-power-profiles.qd) +- [Keychron Keyboard](hardware/004-keychron.qd) ###! Software Configuration @@ -18,3 +20,5 @@ - [Signal](software/004-signal.qd) - [Telegram](software/005-telegram.qd) - [GnuPG](software/006-opengpg.qd) +- [GnuPG](software/007-kdeconnect.qd) +- [GnuPG](software/008-docker.qd) diff --git a/hardware/004-keychron.qd b/hardware/004-keychron.qd new file mode 100644 index 0000000..6c2f3bc --- /dev/null +++ b/hardware/004-keychron.qd @@ -0,0 +1,23 @@ +.docname {Keychron Keyboard} +.include {docs} + +# Keychron Keyboard + +To enable access to the keyboard for the QMK launcher (or similar programs), set the following udev rule in +`/etc/udev/rules.d/99-keychron.conf` + +``` +# The Keyboard Itself +KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="3434", ATTRS{idProduct}=="0aa1", MODE="0666", TAG+="uaccess", TAG+="udev-acl" +# The 2.4 Ghz Wireless Dongle +KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="3434", ATTRS{idProduct}=="d030", MODE="0666", TAG+="uaccess", TAG+="udev-acl" +``` + +Values for `idVendor` and `idProduct` can be found with `lsusb | grep -i Keychron`. + +Reload the udev rules `udevadm control --reload-rules` + +## Firmware Updates + +To enable firmware updates, install `yay -S dfu-util` to provide the required toolbox. + diff --git a/hardware/005-xps13-9350.qd b/hardware/005-xps13-9350.qd new file mode 100644 index 0000000..c44eefa --- /dev/null +++ b/hardware/005-xps13-9350.qd @@ -0,0 +1,177 @@ +.docname {XPS 13 9350 (2024)} +.include {docs} + +## Sound + +Install the firmware `sof-firmware` + +## Camera + +The camera, while available on free software and without drivers, +produces a very bad, raw image with green tint. + +To have a higher quality, we need to install a custom intel +driver. + +Install `linux-firmware-intel libcamera-tools dkms linux-headers intel-vision-drivers-dkms-git pipewire-libcamera`. + +Make sure that the `intel_cvs` kernel module (and dependency) is loaded: + +`/etc/modules-load.d/intel_cvs.conf`: +```txt +gpio_ljca +usb_ljca +intel_cvs +``` + +After rebooting `cam -l` should show `1: Internal front camera (\_SB_.LINK1)` +after some warnings. `qcam` should start a raw camera stream. +The raw camera stream will have a greenish tint. + +> Note: The Intel Vision Driver module must already be loaded when the ov02c10 sensor is probed. +> If you cannot see your camera, run `rmmod ov02c10` && `modprobe ov02c10` as root and try again. + +For Firefox, open about:config (See Firefox#Configuration) and set media.webrtc.camera.allow-pipewire to "True". + +For Chromium, enable the flag enable-webrtc-pipewire-camera in chrome://flags/ or set it in your configuration file. + +### Proprietary Hardware Stack + +The proprietary hardware stack requires additional components to be installed and configured, +but it provides substantially better video quality vs using only open source drivers and software. +First ensure that the above steps are complete at least to the point where qcam shows a raw camera stream. + +Download `intel-ipu7-dkms-git` and modify the PKBUILD file. + +```sh +mkdir ~/.camera_driver +cd ~/.camera_driver +git clone https://aur.archlinux.org/intel-ipu7-dkms-git.git +cd intel-ipu7-dkms-git +nvim PKGBUILD +``` + +- remove the dependency `intel-ivsc-firmware` from the `depends` section. +- Change `source=("git+${url}")` to instead point to a specific commit and + add a patch file to it + `source=("git+https://github.com/intel/ipu7-drivers.git#commit=77e3a0065697314cc7437a6eefd7e0d36ab06a4b" "https://patch-diff.githubusercontent.com/raw/intel/ipu7-drivers/pull/67.patch")` +- Add another `'SKIP'` to `sha256sums` +- In the `prepare()` section, apply the patch: `patch -Np1 -i ../67.patch` + +Here is the pkgfile + +```sh +# Maintainer: Yamada Hayao +# Contributer: Karim Vergnes + +pkgname=intel-ipu7-dkms-git +_pkgname=ipu7-drivers +pkgver=r77.77e3a00 +pkgrel=1 +pkgdesc="Intel IPU7 camera drivers (DKMS)" +arch=('any') +url="https://github.com/intel/${_pkgname}" +license=('unknown') +depends=('dkms') +provides=('intel-ivsc-driver-dkms-git' 'intel-ipu7-dkms') +conflicts=('intel-ivsc-driver-dkms-git') +makedepends=('git') +source=("git+https://github.com/intel/ipu7-drivers.git#commit=77e3a0065697314cc7437a6eefd7e0d36ab06a4b" "https://patch-diff.githubusercontent.com/raw/intel/ipu7-drivers/pull/67.patch") +sha256sums=('SKIP' 'SKIP') + +pkgver() { + cd $_pkgname + printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)" +} + +prepare() { + cd "$srcdir/$_pkgname" + patch -Np1 -i ../67.patch + sed -i "s/^PACKAGE_VERSION=\".*\"$/PACKAGE_VERSION=\"$pkgver\"/g" ./dkms.conf +} + +package() { + cd "$srcdir" + install -dm755 "$pkgdir/usr/src" + cp -rT "$_pkgname" "$pkgdir/usr/src/$_pkgname-$pkgver" +} +``` + +Run the package build and install + +- `makepkg --syncdeps` +- `makepkg --install` + +Install `intel-ipu7-camera-hal-git` + +Download `icamerasrc-git` and modify the PKBUILD file. + +```sh +cd ~/.camera_driver +git clone https://aur.archlinux.org/icamerasrc-git.git +cd icamerasrc-git +nvim PKGBUILD +``` + +- replace dpendency `ipu6-camera-hal` with `ipu7-camera-hal` + +Run the package build and install + +- `makepkg --syncdeps` +- `makepkg --install` + +### Config Files + +Make sure that the kernel modules load in the correct order +Remove the file `/etc/modules-load.d/intel_cvs.conf`. + +Create the file `/etc/modprobe.d/90-ipu7-usbio-order.conf` with + +```txt +softdep intel_ipu7 pre: usbio gpio_usbio i2c_usbio intel_cvs intel_skl_int3472_discrete +``` + +Create the file `/usr/lib/udev/rules.d/90-ipu7-psys.rules` + +```txt +KERNEL=="ipu7-psys0", MODE="0666", SYMLINK+="ipu-psys0" +``` + +Reboot the system. + +Check that the camera is now working with + +```sh +gst-launch-1.0 -v icamerasrc ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! videoconvert ! videoflip method=rotate-180 ! waylandsink +``` + +### V4L2 Relay + +Now, we can create a V4L2 loopback device that presents the gstreamer/icamerasrc stream when activated. + +Install `v4l2-relayd`. + +Create the following file to instantiate the virtual v4l2loopback device on boot: + +`/etc/modprobe.d/v4l2loopback.conf`: + +```txt +options v4l2loopback card_label="Intel IPU7 Virtual Camera" +``` + +Create the systemd service file for the relay. + +`/etc/v4l2-relayd.d/intel-ipu.conf` + +```ini +VIDEOSRC="icamerasrc device-name=ov02c10-uf ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! videoconvert ! videoflip method=rotate-180" +FORMAT=NV12 +WIDTH=1920 +HEIGHT=1080 +FRAMERATE=30/1 +CARD_LABEL="Intel IPU7 Virtual Camera" +``` + +Next, enable the `v4l2-relayd@intel-ipu.service`. + +After restarting your machine, any supported applications should see your camera as a standard V4L2 device with wide support. diff --git a/main.qd b/main.qd index ffcd378..6088f89 100644 --- a/main.qd +++ b/main.qd @@ -41,6 +41,9 @@ A system deployed with fz-stack **will not**: ## Todos +- node version in starship anzeigen +- node / nvm / npm version inspect + [arch-linux]: https://archlinux.org [arch-linux-wiki]: https://wiki.archlinux.org/title/Main_page [hyprland]: https://hypr.land diff --git a/software/001-librewolf.qd b/software/001-librewolf.qd index 1126286..194e17f 100644 --- a/software/001-librewolf.qd +++ b/software/001-librewolf.qd @@ -87,3 +87,6 @@ Download and Install the following extensions Check . Usage guide: +## Enable PWAs + +Enable PWAs by setting `browser.taskbarTabs.enabled` to `true` in `about:config` diff --git a/software/007-kdeconnect.md b/software/007-kdeconnect.md new file mode 100644 index 0000000..abf152f --- /dev/null +++ b/software/007-kdeconnect.md @@ -0,0 +1,5 @@ +.docname {KDE Connect} +.include {docs} + +KDE connect provides features to connect to Android. +Install `kdeconnect` diff --git a/software/008-docker.md b/software/008-docker.md new file mode 100644 index 0000000..c07f860 --- /dev/null +++ b/software/008-docker.md @@ -0,0 +1,7 @@ +.docname {Docker} +.include {docs} + +Install the package `docker`. Make sure that the user is in the group `docker`: +`sudo usermod -aG docker $USER`. + +If the group does not yet exist, it can be created with `groupadd -r docker`.