diff --git a/WORKAROUNDS.md b/WORKAROUNDS.md new file mode 100644 index 0000000..fdd3cbe --- /dev/null +++ b/WORKAROUNDS.md @@ -0,0 +1,383 @@ +# Workarounds, Overrides & Temporary Fixes + +This document tracks all known workarounds, patches, and temporary overrides in this flake. +Each entry includes the file location, reason, and whether it is still required. + +**Status legend:** +- `ACTIVE` — still required, upstream fix not available +- `REDUNDANT` — upstream has fixed the issue; this override can be removed +- `UPSTREAM PENDING` — waiting on an upstream PR/issue +- `INTENTIONAL` — permanent design decision, not a workaround + +--- + +## Overlays (upstream package overrides) + +### `overlays/cosmic-settings-daemon/default.nix` +**Status:** `ACTIVE — UPSTREAM PENDING` + +`cosmic-settings-daemon 1.0.8` has a buggy `Cargo.lock` that references +`https://github.com/pop-os/dbus-settings-bindings` at two different commits +(`3b86984` for `cosmic-dbus-a11y`/`locale1`/`upower_dbus`, and `0fa672f8` +for the `cosmic-settings-daemon` subcrate). `cargoSetupHook` (used by +`fetchCargoVendor`/`cargoHash`) rejects this: *"Sources are not allowed to be +defined multiple times."* + +The fix overrides `cargoDeps` with `rustPlatform.importCargoLock`, which uses +a different vendoring strategy that handles multiple commits from the same repo. + +**Removal condition:** When nixpkgs updates `cosmic-settings-daemon` past 1.0.8 +with a fixed `Cargo.lock`, or applies `cargoLock` in its own package definition. + +--- + +### `overlays/cosmic-applets/default.nix` +**Status:** `ACTIVE — UPSTREAM PENDING` + +`cosmic-applets 1.0.8` has the same class of bug: its `Cargo.lock` references +`https://github.com/pop-os/cosmic-settings` at two different commits (`b46a55d` +for `cosmic-pipewire` and `cosmic-settings-sound-subscription`, and `55b502d` +for `cosmic-settings-a11y-manager-subscription` and several other crates). +`cargoSetupHook` rejects this with the same "Sources are not allowed to be +defined multiple times" error. + +Same fix as `cosmic-settings-daemon`: overrides `cargoDeps` with +`rustPlatform.importCargoLock`. + +**Removal condition:** When nixpkgs updates `cosmic-applets` past 1.0.8 with a +fixed `Cargo.lock`, or applies `cargoLock` in its own package definition. + +--- + +### ~~`overlays/waybar/default.nix`~~ — REMOVED +**Status:** `REMOVED` + +Previously added `-Dexperimental=true` to waybar's meson flags. nixpkgs now +includes `-Dexperimental=true` in its waybar definition, making the overlay +redundant. Removed. + +--- + +### `overlays/radios/default.nix` +**Status:** `ACTIVE` (protective — needed after next `flake update`) + +`radios` requires `pycountry>=24.0.0,<25.0.0` (PEP 440: `^24.0.0`). The +current locked nixpkgs has `pycountry 24.6.1` (in range), but nixpkgs HEAD +has already bumped `pycountry` to `26.2.16`, which will break `radios` after +the next `flake update`. The overlay applies `pythonRelaxDepsHook` to loosen +the upper bound. + +**Removal condition:** When the upstream `radios` package (`frenck/python-radios`) +or nixpkgs relaxes the pycountry version constraint. + +--- + +### `overlays/redis/default.nix` +**Status:** `INTENTIONAL` + +Replaces `redis` with `valkey` (the Redis community fork) globally. This is a +deliberate preference for the open-source fork over the Redis 7.x+ license change. + +--- + +### `overlays/stable/default.nix` +**Status:** `INTENTIONAL` + +Injects `pkgs.stable` as an attribute pointing to the stable nixpkgs channel, +so modules can selectively pull in stable packages. Not a workaround. + +--- + +## Flake Inputs (forks and custom branches) + +### `nixpkgs-otbr` — `github:mrene/nixpkgs/openthread-border-router` +**File:** `flake.nix:8` +**Status:** `ACTIVE — UPSTREAM PENDING` + +`openthread-border-router` is not yet packaged in nixpkgs-unstable. A community +member's nixpkgs fork provides the package, used by +`modules/nixos/homeassistant/services/thread/default.nix`. + +The fork is ~52,000 commits behind `nixos-unstable`, so it is pulled +only via `pkgs.callPackage` from the fork's path, not as a full channel overlay. + +**Removal condition:** When `openthread-border-router` is merged into nixpkgs. +Check: https://github.com/NixOS/nixpkgs/pulls?q=openthread-border-router + +--- + +### `snowfall-lib` — `github:mjallen18/snowfall-lib` +**File:** `flake.nix:26` +**Status:** `INTENTIONAL` + +Personal fork of `snowfallorg/lib` with 46 commits ahead of upstream, including: +- `fix: pass namespace argument to overlays` +- `fix: pass namespace argument to home-manager modules` +- `feat: support same username across multiple targets` +- `feat: enable per-channel configuration and fix pkgs selection` +- Performance improvements and additional features + +These are custom changes required by this flake's structure that have not been +upstreamed. + +--- + +### `steam-rom-manager` — `github:mjallen18/nix-steam-rom-manager` +**File:** `flake.nix:41` +**Status:** `INTENTIONAL` + +Personal fork/packaging of nix-steam-rom-manager. The upstream +(`nix-community/nix-steam-rom-manager`) may or may not exist; this is a +maintained fork. + +--- + +### Commented-out: `nvmd/disko` fork +**File:** `flake.nix:59-61` +**Status:** `REDUNDANT` (already disabled) + +```nix +# the fork is needed for partition attributes support +# url = "github:nvmd/disko/gpt-attrs"; +``` + +A community fork of disko with GPT partition attribute support was previously +used but has since been switched back to upstream `nix-community/disko`. The +comment can be cleaned up if the feature is no longer needed. + +--- + +## Build Fixes & postPatch + +### `packages/edk2-basetools/default.nix` — OpenSSL vendoring FIXME +**File:** `packages/edk2-basetools/default.nix:50-52` +**Status:** `UPSTREAM PENDING` (verify PR reference) + +```nix +# FIXME: unvendor OpenSSL again once upstream updates +# to a compatible version. +# Upstream PR: https://github.com/tianocore/edk2/pull/10946 +``` + +The comment references tianocore/edk2 PR #10946, but that PR's title is +*"update to openssl 3.5.1"* (now merged), not an unvendoring PR. The FIXME +comment may be referencing the wrong PR number or the issue may have evolved. +The edk2 build still vendor-patches OpenSSL compatibility; this should be +re-evaluated against the current edk2 upstream. + +**Action:** Verify whether the OpenSSL vendoring is still needed with current +edk2, and update or remove the FIXME comment. + +--- + +### `packages/bcachefs/default.nix` — Tests disabled +**File:** `packages/bcachefs/default.nix:100` +**Status:** `ACTIVE` + +```nix +# FIXME: Try enabling this once the default linux kernel is at least 6.7 +doCheck = false; # needs bcachefs module loaded on builder +``` + +Tests require a live bcachefs kernel module in the build sandbox, which is +not available. The comment mentions kernel ≥ 6.7, which is now the case +(nixpkgs is on 6.12+), but the underlying sandbox limitation still applies — +the build sandbox cannot load kernel modules regardless of kernel version. + +**Action:** The `6.7` condition is now met but irrelevant; update the comment +to reflect that the real blocker is sandbox access to kernel modules. + +--- + +### `packages/raspberrypi/linux-rpi/default.nix` — Failed kernel attempts +**File:** `packages/raspberrypi/linux-rpi/default.nix:25-43` +**Status:** `ACTIVE` (informational) + +Four newer RPi kernel versions (6.15.11 through 6.19.0-rc5) are commented out +because they "fail for various reasons." The active version is pinned to an +older working commit. + +**Action:** Periodically attempt to enable a newer kernel tag. The comments +serve as a history of failed attempts. + +--- + +### `packages/raspberrypi/linux-rpi/default.nix` — DTB aliasing hack +**File:** `packages/raspberrypi/linux-rpi/default.nix:110-148` +**Status:** `ACTIVE` + +```nix +# Make copies of the DTBs named after the upstream names so that U-Boot finds them. +# This is ugly as heck, but I don't know a better solution so far. +``` + +RPi's kernel ships DTBs with non-standard names (e.g. `bcm2708-rpi-zero-w.dtb`); +U-Boot expects canonical upstream names (e.g. `bcm2835-rpi-zero.dtb`). DTBs +are duplicated in `postFixup`. + +--- + +### `packages/homeassistant/ha-mail-and-packages/default.nix` — Hardcoded paths +**File:** `packages/homeassistant/ha-mail-and-packages/default.nix:25-37` +**Status:** `ACTIVE` + +The upstream HA integration hard-codes paths relative to its source directory, +which breaks in the Nix store. `postPatch` rewrites them to +`/var/lib/homeassistant/images/`. + +--- + +### `packages/homeassistant/ha-wyzeapi/default.nix` — Version pin relaxation +**File:** `packages/homeassistant/ha-wyzeapi/default.nix:24-27` +**Status:** `ACTIVE` + +Relaxes the minimum `wyzeapy` version pin from `0.5.28` to `0.5.27` to match +the version packaged in this flake. + +--- + +## Raspberry Pi — Structural Overrides + +### `modules/nixos/hardware/raspberry-pi/default.nix` — jemalloc 16K pages +**File:** `modules/nixos/hardware/raspberry-pi/default.nix:458-470` +**Status:** `ACTIVE` (structural) + +```nix +# https://github.com/nvmd/nixos-raspberrypi/issues/64 +jemalloc = prev.jemalloc.overrideAttrs (old: { + configureFlags = ... ++ [ "${pageSizeFlag}=14" ]; +}); +``` + +RPi5 uses 16K memory pages (2^14). jemalloc must be compiled with +`--with-lg-page=14`, otherwise it will use incorrect page size assumptions +and likely crash or corrupt memory. + +**References:** https://github.com/nvmd/nixos-raspberrypi/issues/64 + +--- + +### `systems/aarch64-linux/pi5/boot.nix` — 16K page kernel +**File:** `systems/aarch64-linux/pi5/boot.nix:22-35` +**Status:** `ACTIVE` (structural) + +Forces `CONFIG_ARM64_16K_PAGES=y` in the kernel config via `linux_6_19.override`. +`ignoreConfigErrors = true` is required because some kernel config options are +unavailable and would otherwise fail validation. + +--- + +### `packages/raspberrypi/ffmpeg-rpi/default.nix` — RPi hardware codec ffmpeg +**File:** `packages/raspberrypi/ffmpeg-rpi/default.nix` +**Status:** `ACTIVE` (structural) + +Custom ffmpeg build from `jc-kynesim/rpi-ffmpeg` fork with RPi hardware codec +support (`--enable-v4l2-request`, `--enable-sand`, etc.). Tests disabled +(`doCheck = false`) because the `imgutils` test fails on this build. + +--- + +## systemd Service Overrides + +### `systems/x86_64-linux/matt-nixos/default.nix` — networkd-wait-online +**File:** `systems/x86_64-linux/matt-nixos/default.nix:78` +**Status:** `INTENTIONAL` + +```nix +systemd.services.systemd-networkd-wait-online.enable = lib.mkForce false; +``` + +The `systemd-networkd-wait-online` service times out on this desktop, +blocking boot. Standard workaround for desktop systems that don't require +all interfaces to be up before proceeding. + +--- + +### `systems/x86_64-linux/allyx/default.nix` — Jovian NixOS conflicts +**File:** `systems/x86_64-linux/allyx/default.nix:121-123` +**Status:** `ACTIVE` + +```nix +systemd-networkd-wait-online.enable = lib.mkForce false; +power-profiles-daemon.enable = lib.mkForce false; +inputplumber.enable = lib.mkForce false; +``` + +On the ASUS ROG Ally X with Jovian NixOS and `handheld-daemon`: +- `power-profiles-daemon` conflicts with `handheld-daemon`'s power management +- `inputplumber` conflicts with `handheld-daemon`'s input handling +- `systemd-networkd-wait-online` times out as on matt-nixos + +--- + +### `modules/nixos/services/crowdsec/default.nix` — DynamicUser conflict +**File:** `modules/nixos/services/crowdsec/default.nix:133-143` +**Status:** `ACTIVE — UPSTREAM PENDING` + +```nix +systemd.services.crowdsec.serviceConfig.DynamicUser = lib.mkForce false; +systemd.services.crowdsec-firewall-bouncer.serviceConfig.DynamicUser = lib.mkForce false; +systemd.services.crowdsec-firewall-bouncer-register.serviceConfig.DynamicUser = lib.mkForce false; +``` + +The upstream NixOS crowdsec module uses `ReadWritePaths` (not `StateDirectory`) +on the main `crowdsec.service`, expecting `/var/lib/crowdsec` to be a real +directory. However, `crowdsec-firewall-bouncer-register` declares +`StateDirectory=crowdsec` with `DynamicUser=true`, which conflicts — it tries +to create `/var/lib/private/crowdsec` and symlink `/var/lib/crowdsec` to it, +but the directory already exists as a real path. Disabling `DynamicUser` on +all three services resolves the conflict by using the real `crowdsec` user. + +Additionally, `crowdsec-firewall-bouncer-register` calls `cscli` without `-c`, +expecting `/etc/crowdsec/config.yaml` to exist, but the upstream NixOS module +uses a Nix store path via `-c` and never creates that file. The module works +around this by extracting the store path at eval time. + +**Removal condition:** When the NixOS crowdsec module is fixed upstream to +handle state directory ownership consistently. + +--- + +## Incomplete / TODO Items + +These are not workarounds but known incomplete configurations: + +| File | Line | Description | +|------|------|-------------| +| `systems/x86_64-linux/jallen-nas/sops.nix` | 89, 113 | Collabora and MariaDB secrets not configured | +| `systems/x86_64-linux/jallen-nas/apps.nix` | 47 | Authentik environment secrets file not wired up | +| `modules/nixos/services/sparky-fitness/default.nix` | 36, 72 | DB passwords not yet moved to SOPS | +| `modules/nixos/services/your-spotify/default.nix` | 36 | Spotify API keys not yet moved to SOPS | +| `modules/nixos/services/booklore/default.nix` | 25 | Database password not yet a SOPS secret | +| `packages/raspberrypi/udev-rules/default.nix` | 33 | `15-i2c-modprobe.rules` disabled; `i2cprobe` script not ported | +| `modules/nixos/homeassistant/services/homeassistant/default.nix` | 214 | `roborock` integration marked broken | + +--- + +## Kernel Boot Parameters + +### `systems/x86_64-linux/matt-nixos/boot.nix` — NVMe power saving +**File:** `systems/x86_64-linux/matt-nixos/boot.nix:46-48` +**Status:** `ACTIVE` + +```nix +"nvme_core.default_ps_max_latency_us=0" +"pcie_aspm=off" +``` + +NVMe SSD power-saving states cause latency/stability issues on this machine. +Disabling ASPM and NVMe power states is a standard workaround for affected +hardware. + +--- + +### `systems/aarch64-linux/macbook-pro-nixos/boot.nix` — Fan control +**File:** `systems/aarch64-linux/macbook-pro-nixos/boot.nix:28` +**Status:** `ACTIVE` + +```nix +"melt_my_mac=1" +``` + +Undocumented Asahi Linux kernel parameter that enables fan control on Apple +Silicon Macs. The name is intentional (set by the Asahi kernel developers). diff --git a/flake.lock b/flake.lock index 5631180..3511cbb 100644 --- a/flake.lock +++ b/flake.lock @@ -663,11 +663,11 @@ "homebrew-cask": { "flake": false, "locked": { - "lastModified": 1774016339, - "narHash": "sha256-Jm5bZFPd0GQGvknb9tsqWRh3M/+itroC0vIvoDW0cOE=", + "lastModified": 1774025771, + "narHash": "sha256-3eMajNhR25AX9Dc9DgR3+cW4215kj/KRIuVyP9+X2/I=", "owner": "homebrew", "repo": "homebrew-cask", - "rev": "65b8191c7b9355eb2470dbe1eeb2633306064379", + "rev": "f69327f0a37edd3197c8e9cf1f34822025251627", "type": "github" }, "original": { @@ -679,11 +679,11 @@ "homebrew-core": { "flake": false, "locked": { - "lastModified": 1774017008, - "narHash": "sha256-kpYHVxgi+nu2H0aHxzY+3HNBDmFmjQYIn+U7ifsTt0Q=", + "lastModified": 1774028436, + "narHash": "sha256-mCYHZLfcOfLnNAfTOorW89fzXnmUTwOOwFmQxMViLoc=", "owner": "homebrew", "repo": "homebrew-core", - "rev": "5541cf046f2005a02940da8086550ffcfa77da4c", + "rev": "c5fc98d84606cc1ad94eeb0b61bc7b7c352f35ed", "type": "github" }, "original": { diff --git a/homes/x86_64-linux/matt@matt-nixos/default.nix b/homes/x86_64-linux/matt@matt-nixos/default.nix index 23fda6f..de2fd0a 100755 --- a/homes/x86_64-linux/matt@matt-nixos/default.nix +++ b/homes/x86_64-linux/matt@matt-nixos/default.nix @@ -167,6 +167,7 @@ in clevis compose2nix distrobox + goverlay heroic home-manager omnissa-horizon-client @@ -184,6 +185,7 @@ in virt-manager vorta waydroid-helper + winboat ] ++ (with pkgs.${namespace}; [ discord-krisp diff --git a/modules/home/desktop/gnome/default.nix b/modules/home/desktop/gnome/default.nix index 53050ce..bde069f 100644 --- a/modules/home/desktop/gnome/default.nix +++ b/modules/home/desktop/gnome/default.nix @@ -30,6 +30,7 @@ in gnomeExtensions.tiling-assistant gnomeExtensions.user-themes gnomeExtensions.wikiart-wallpaper + gnomeExtensions.boatman-winboat-monitor papirus-icon-theme pop-gtk-theme ]; diff --git a/modules/home/home/default.nix b/modules/home/home/default.nix index 1db8aec..72be2ae 100644 --- a/modules/home/home/default.nix +++ b/modules/home/home/default.nix @@ -66,15 +66,6 @@ in parted vesktop ] - ++ ( - if !isArm then - [ - # goverlay - # winboat - ] - else - [ ] - ) else [ ] ) diff --git a/modules/nixos/homeassistant/services/homeassistant/default.nix b/modules/nixos/homeassistant/services/homeassistant/default.nix index 75ab8e3..91efed2 100644 --- a/modules/nixos/homeassistant/services/homeassistant/default.nix +++ b/modules/nixos/homeassistant/services/homeassistant/default.nix @@ -323,7 +323,6 @@ in gehomesdk magicattr pyoverseerr - python-nanokvm python-roborock wyzeapy ]); diff --git a/overlays/cosmic-applets/default.nix b/overlays/cosmic-applets/default.nix new file mode 100644 index 0000000..0f1e7a3 --- /dev/null +++ b/overlays/cosmic-applets/default.nix @@ -0,0 +1,36 @@ +# Workaround for cosmic-applets 1.0.8 build failure: +# The Cargo.lock references https://github.com/pop-os/cosmic-settings at two +# different commits (b46a55d and 55b502d), which cargoSetupHook rejects: +# "Sources are not allowed to be defined multiple times." +# Using importCargoLock (via cargoDeps override) instead of fetchCargoVendor +# (cargoHash) avoids this check. Same pattern as cosmic-settings-daemon. +{ ... }: +final: prev: { + cosmic-applets = prev.cosmic-applets.overrideAttrs (old: { + cargoDeps = final.rustPlatform.importCargoLock { + lockFile = "${old.src}/Cargo.lock"; + outputHashes = { + "accesskit-0.16.0" = "sha256-uoLcd116WXQTu1ZTfJDEl9+3UPpGBN/QuJpkkGyRADQ="; + "atomicwrites-0.4.2" = "sha256-QZSuGPrJXh+svMeFWqAXoqZQxLq/WfIiamqvjJNVhxA="; + "clipboard_macos-0.1.0" = "sha256-+8CGmBf1Gl9gnBDtuKtkzUE5rySebhH7Bsq/kNlJofY="; + "cosmic-client-toolkit-0.2.0" = "sha256-ymn+BUTTzyHquPn4hvuoA3y1owFj8LVrmsPu2cdkFQ8="; + "cosmic-comp-config-0.1.0" = "sha256-uUpRd8bR2TyD7Y1lpKmJTaTNv9yNsZVnr0oWDQgHD/0="; + "cosmic-config-1.0.0" = "sha256-EDFFtQ+yiclZ1wrcbSHFhmx7d6rAPlU+qq/gh1HGqv8="; + "cosmic-dbus-a11y-0.1.0" = "sha256-1yVIL3SQnOEtTHoLiZgBH21holNxcOuToyQ+QdvqoBg="; + "cosmic-freedesktop-icons-0.4.0" = "sha256-D4bWHQ4Dp8UGiZjc6geh2c2SGYhB7mX13THpCUie1c4="; + "cosmic-notifications-config-0.1.0" = "sha256-41F8TtXvZ+EMM3zHHfadwTFCte+ZXC+hP25J8QQPrTE="; + "cosmic-panel-config-0.1.0" = "sha256-1Xwe1uONJbl4wq6QBbTI1suLiSlTzU4e/5WBccvghHE="; + "cosmic-pipewire-1.0.0" = "sha256-yqrYF4zDd5yh5oCJUttsHDCEOS6xmH/9M5Hd9kgU9yw="; + "cosmic-settings-a11y-manager-subscription-1.0.2" = + "sha256-OIVG0snnYtRkL8D3nurlygkqx6ugzIV4RPm7wReaE4o="; + "cosmic-settings-config-0.1.0" = "sha256-4YozCuj6lF9GmsV9eRD4HEb3G8tYKjQc3+ghYHxKrhE="; + "cosmic-text-0.17.1" = "sha256-NHjJBE/WSMhN29CKTuB7PyJv4y2JByi5pyTUDtVoF7g="; + "cosmic-time-0.4.0" = "sha256-D3+GjRigubsBD8VdCpKWXgphstbOn/ayHDel04xBP4U="; + "dpi-0.1.1" = "sha256-Saw9LIWIbOaxD5/yCSqaN71Tzn2NXFzJMorH8o58ktw="; + "iced_glyphon-0.6.0" = "sha256-u1vnsOjP8npQ57NNSikotuHxpi4Mp/rV9038vAgCsfQ="; + "smithay-clipboard-0.8.0" = "sha256-4InFXm0ahrqFrtNLeqIuE3yeOpxKZJZx+Bc0yQDtv34="; + "softbuffer-0.4.1" = "sha256-/ocK79Lr5ywP/bb5mrcm7eTzeBbwpOazojvFUsAjMKM="; + }; + }; + }); +} diff --git a/overlays/cosmic-settings-daemon/default.nix b/overlays/cosmic-settings-daemon/default.nix new file mode 100644 index 0000000..cc237b5 --- /dev/null +++ b/overlays/cosmic-settings-daemon/default.nix @@ -0,0 +1,31 @@ +# Workaround for cosmic-settings-daemon 1.0.8 build failure: +# The Cargo.lock references https://github.com/pop-os/dbus-settings-bindings +# at two different commits (3b86984 and 0fa672f8), which cargoSetupHook +# rejects ("Sources are not allowed to be defined multiple times"). +# +# Using importCargoLock (cargoLock) instead of fetchCargoVendor (cargoHash) +# avoids this check. We override cargoDeps directly since cargoLock is +# consumed by buildRustPackage before reaching mkDerivation. +{ ... }: +final: prev: { + cosmic-settings-daemon = prev.cosmic-settings-daemon.overrideAttrs (old: { + cargoDeps = final.rustPlatform.importCargoLock { + lockFile = "${old.src}/Cargo.lock"; + outputHashes = { + "atomicwrites-0.4.2" = "sha256-QZSuGPrJXh+svMeFWqAXoqZQxLq/WfIiamqvjJNVhxA="; + "clipboard_macos-0.1.0" = "sha256-+8CGmBf1Gl9gnBDtuKtkzUE5rySebhH7Bsq/kNlJofY="; + "cosmic-client-toolkit-0.1.0" = "sha256-KvXQJ/EIRyrlmi80WKl2T9Bn+j7GCfQlcjgcEVUxPkc="; + "cosmic-comp-config-0.1.0" = "sha256-H2eMYjJi9VXv6D5IREVjfqR46hC9dxT84lk9Ubpnhpk="; + "cosmic-config-1.0.0" = "sha256-JzryxfdMMn4Ew5lKCpirzT50Rd5egudfXXTSql0iFas="; + "cosmic-dbus-a11y-0.1.0" = "sha256-CEmzl/09rD11kgnoHP2Q6N/emDhEK4wQiqSXmIlsbPE="; + "cosmic-freedesktop-icons-0.4.0" = "sha256-D4bWHQ4Dp8UGiZjc6geh2c2SGYhB7mX13THpCUie1c4="; + "cosmic-settings-daemon-0.1.0" = "sha256-QIupze3m2au51yJWsBylz2rBfeqreFX2D/F2+JbIWmg="; + "cosmic-settings-subscriptions-0.1.0" = "sha256-PSp7a80TO6z7b+Gkf5jHz7KNVNfc29HF8DFqEjkC75o="; + "cosmic-text-0.17.1" = "sha256-NHjJBE/WSMhN29CKTuB7PyJv4y2JByi5pyTUDtVoF7g="; + "iced_glyphon-0.6.0" = "sha256-u1vnsOjP8npQ57NNSikotuHxpi4Mp/rV9038vAgCsfQ="; + "smithay-clipboard-0.8.0" = "sha256-4InFXm0ahrqFrtNLeqIuE3yeOpxKZJZx+Bc0yQDtv34="; + "softbuffer-0.4.1" = "sha256-/ocK79Lr5ywP/bb5mrcm7eTzeBbwpOazojvFUsAjMKM="; + }; + }; + }); +} diff --git a/overlays/radios/default.nix b/overlays/radios/default.nix new file mode 100644 index 0000000..3422add --- /dev/null +++ b/overlays/radios/default.nix @@ -0,0 +1,12 @@ +{ ... }: +final: prev: { + python3 = prev.python3.override { + packageOverrides = _pyFinal: pyPrev: { + radios = pyPrev.radios.overridePythonAttrs (old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pyPrev.pythonRelaxDepsHook ]; + pythonRelaxDeps = [ "pycountry" ]; + }); + }; + }; + python3Packages = final.python3.pkgs; +} diff --git a/overlays/waybar/default.nix b/overlays/waybar/default.nix deleted file mode 100644 index c09902f..0000000 --- a/overlays/waybar/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ ... }: -_final: prev: { - waybar = prev.waybar.overrideAttrs (old: { - mesonFlags = (old.mesonFlags or [ ]) ++ [ "-Dexperimental=true" ]; - }); -} diff --git a/packages/homeassistant/ha-nanokvm/default.nix b/packages/homeassistant/ha-nanokvm/default.nix index e038771..9099ff3 100644 --- a/packages/homeassistant/ha-nanokvm/default.nix +++ b/packages/homeassistant/ha-nanokvm/default.nix @@ -1,10 +1,71 @@ { buildHomeAssistantComponent, fetchFromGitHub, - pkgs, - namespace, + home-assistant, ... }: +let + python3Packages = home-assistant.python.pkgs; + python-nanokvm = python3Packages.buildPythonPackage rec { + pname = "nanokvm"; + version = "0.1.0"; + format = "pyproject"; + + src = fetchFromGitHub { + owner = "puddly"; + repo = "python-${pname}"; + rev = "v${version}"; + sha256 = "sha256-vIxvQtjaInnWQce7syiOWpP2kaw0IVw03HPovnB2J5M="; + }; + + prePatch = '' + rm -f pyproject.toml + cat > pyproject.toml << 'EOF' + [build-system] + requires = ["setuptools>=61.0.0", "wheel"] + build-backend = "setuptools.build_meta" + + [project] + name = "nanokvm" + version = "0.1.0" + description = "Async client for NanoKVM devices." + urls = {repository = "https://github.com/puddly/python-nanokvm"} + authors = [ + {name = "puddly", email = "puddly3@gmail.com"} + ] + readme = "README.md" + license = {text = "Apache-2.0"} + requires-python = ">=3.11" + dependencies = [ + "aiohttp", + "cryptography", + "yarl", + "pillow", + "pydantic", + "paramiko", + ] + + [tool.setuptools.packages.find] + exclude = ["tests", "tests.*"] + EOF + ''; + + buildInputs = with python3Packages; [ + setuptools + ]; + + propagatedBuildInputs = with python3Packages; [ + aiohttp + cryptography + yarl + pillow + pydantic + paramiko + ]; + + doCheck = false; + }; +in buildHomeAssistantComponent rec { owner = "Wouter0100"; domain = "nanokvm"; @@ -17,12 +78,10 @@ buildHomeAssistantComponent rec { hash = "sha256-S6g9mfPEixqeGQkXVK8PZJ/dnEC5ThKtbELAIAhCANM="; }; - propogatedBuildInputs = with pkgs.${namespace}; [ + propagatedBuildInputs = [ python-nanokvm ]; - buildInputs = propogatedBuildInputs; - postPatch = '' substituteInPlace custom_components/nanokvm/manifest.json \ --replace-fail '"nanokvm>=0.0.4"' '"nanokvm"'