|
| 1 | +# Framework-branded wallpaper packs, installed system-wide so GNOME and |
| 2 | +# KDE Plasma wallpaper pickers can find them. |
| 3 | +# |
| 4 | +# Each pack is opt-in; pick the ones that match your hardware, for example: |
| 5 | +# hardware.framework.wallpapers.laptop13pro.enable = true; |
| 6 | +# |
| 7 | +# Or enable every pack at once: |
| 8 | +# hardware.framework.wallpapers.enableAll = true; |
| 9 | +# |
| 10 | +# To set one as the default in GNOME, add a GSettings override, e.g.: |
| 11 | +# services.desktopManager.gnome.extraGSettingsOverrides = '' |
| 12 | +# [org.gnome.desktop.background] |
| 13 | +# picture-uri='file:///run/current-system/sw/share/backgrounds/framework-laptop13pro-wallpapers/framework-laptop13pro-1.png' |
| 14 | +# ''; |
| 15 | +{ |
| 16 | + config, |
| 17 | + lib, |
| 18 | + pkgs, |
| 19 | + ... |
| 20 | +}: |
| 21 | +let |
| 22 | + cfg = config.hardware.framework.wallpapers; |
| 23 | + |
| 24 | + mkPack = |
| 25 | + { |
| 26 | + id, |
| 27 | + url, |
| 28 | + hash, |
| 29 | + }: |
| 30 | + pkgs.stdenvNoCC.mkDerivation { |
| 31 | + pname = "framework-${id}-wallpapers"; |
| 32 | + version = "2026-04-24"; |
| 33 | + src = pkgs.fetchzip { |
| 34 | + inherit url hash; |
| 35 | + stripRoot = false; |
| 36 | + }; |
| 37 | + |
| 38 | + dontConfigure = true; |
| 39 | + dontBuild = true; |
| 40 | + |
| 41 | + installPhase = '' |
| 42 | + runHook preInstall |
| 43 | +
|
| 44 | + bg_dir="$out/share/backgrounds/framework-${id}-wallpapers" |
| 45 | + mkdir -p "$bg_dir" "$out/share/gnome-background-properties" |
| 46 | +
|
| 47 | + xml="$out/share/gnome-background-properties/framework-${id}.xml" |
| 48 | + { |
| 49 | + echo '<?xml version="1.0" encoding="UTF-8"?>' |
| 50 | + echo '<!DOCTYPE wallpapers SYSTEM "gnome-wp-list.dtd">' |
| 51 | + echo '<wallpapers>' |
| 52 | + } > "$xml" |
| 53 | +
|
| 54 | + i=1 |
| 55 | + while IFS= read -r -d "" f; do |
| 56 | + base=$(basename "$f") |
| 57 | + ext="''${base##*.}" |
| 58 | + name="''${base%.*}" |
| 59 | + slug="framework-${id}-$i" |
| 60 | + dest="$bg_dir/$slug.$ext" |
| 61 | + cp "$f" "$dest" |
| 62 | +
|
| 63 | + { |
| 64 | + echo ' <wallpaper deleted="false">' |
| 65 | + echo " <name>$name</name>" |
| 66 | + echo " <filename>$dest</filename>" |
| 67 | + echo ' <options>zoom</options>' |
| 68 | + echo ' <shade_type>solid</shade_type>' |
| 69 | + echo ' <pcolor>#000000</pcolor>' |
| 70 | + echo ' <scolor>#000000</scolor>' |
| 71 | + echo ' </wallpaper>' |
| 72 | + } >> "$xml" |
| 73 | +
|
| 74 | + kde_dir="$out/share/wallpapers/$slug/contents/images" |
| 75 | + mkdir -p "$kde_dir" |
| 76 | + ln -s "$dest" "$kde_dir/$slug.$ext" |
| 77 | + { |
| 78 | + echo '[Desktop Entry]' |
| 79 | + echo "Name=$name" |
| 80 | + echo "X-KDE-PluginInfo-Name=$slug" |
| 81 | + } > "$out/share/wallpapers/$slug/metadata.desktop" |
| 82 | +
|
| 83 | + i=$((i + 1)) |
| 84 | + done < <(find "$src" -type f \( -iname '*.png' -o -iname '*.jpg' \) -print0 | sort -z) |
| 85 | +
|
| 86 | + echo '</wallpapers>' >> "$xml" |
| 87 | +
|
| 88 | + runHook postInstall |
| 89 | + ''; |
| 90 | + |
| 91 | + meta = { |
| 92 | + description = "Framework ${id} wallpaper pack"; |
| 93 | + homepage = "https://frame.work/wallpapers"; |
| 94 | + platforms = lib.platforms.all; |
| 95 | + }; |
| 96 | + }; |
| 97 | + |
| 98 | + packs = { |
| 99 | + desktop = mkPack { |
| 100 | + id = "desktop"; |
| 101 | + url = "https://downloads.frame.work/assets/framework-desktop-wallpaper-pack.zip"; |
| 102 | + hash = "sha256-MRCBf+8lWJMf6xys3aV4a5yeJOfrqU0ntoEGV7QAGe4="; |
| 103 | + }; |
| 104 | + laptop12 = mkPack { |
| 105 | + id = "laptop12"; |
| 106 | + url = "https://downloads.frame.work/assets/framework-laptop12-wallpaper-pack.zip"; |
| 107 | + hash = "sha256-r6VCLMBd0HtR9YzDg94UB7FuuNa4PTsjvpPCR3MHKRA="; |
| 108 | + }; |
| 109 | + laptop13 = mkPack { |
| 110 | + id = "laptop13"; |
| 111 | + url = "https://downloads.frame.work/assets/framework-laptop13-wallpaper-pack.zip"; |
| 112 | + hash = "sha256-biTp0uoEFScCyulszGSwdceC97xouOMQgoivB43vZpo="; |
| 113 | + }; |
| 114 | + laptop13pro = mkPack { |
| 115 | + id = "laptop13pro"; |
| 116 | + url = "https://downloads.frame.work/assets/framework-laptop13pro-wallpaper-pack.zip"; |
| 117 | + hash = "sha256-BHo7glMjORE5IPRPTfScJ4QBXqiu/+Ga7oruH6rHYms="; |
| 118 | + }; |
| 119 | + laptop16 = mkPack { |
| 120 | + id = "laptop16"; |
| 121 | + url = "https://downloads.frame.work/assets/framework-laptop16-wallpaper-pack.zip"; |
| 122 | + hash = "sha256-u+zWlIVZ/Gqk71F6r35Y1akLCwcVxcP/CzDZWcmsSU8="; |
| 123 | + }; |
| 124 | + }; |
| 125 | +in |
| 126 | +{ |
| 127 | + options.hardware.framework.wallpapers = { |
| 128 | + enableAll = lib.mkEnableOption "all Framework wallpaper packs"; |
| 129 | + desktop.enable = lib.mkEnableOption "the Framework Desktop wallpaper pack"; |
| 130 | + laptop12.enable = lib.mkEnableOption "the Framework Laptop 12 wallpaper pack"; |
| 131 | + laptop13.enable = lib.mkEnableOption "the Framework Laptop 13 wallpaper pack"; |
| 132 | + laptop13pro.enable = lib.mkEnableOption "the Framework Laptop 13 Pro wallpaper pack"; |
| 133 | + laptop16.enable = lib.mkEnableOption "the Framework Laptop 16 wallpaper pack"; |
| 134 | + }; |
| 135 | + |
| 136 | + config.environment.systemPackages = lib.concatLists [ |
| 137 | + (lib.optional (cfg.enableAll || cfg.desktop.enable) packs.desktop) |
| 138 | + (lib.optional (cfg.enableAll || cfg.laptop12.enable) packs.laptop12) |
| 139 | + (lib.optional (cfg.enableAll || cfg.laptop13.enable) packs.laptop13) |
| 140 | + (lib.optional (cfg.enableAll || cfg.laptop13pro.enable) packs.laptop13pro) |
| 141 | + (lib.optional (cfg.enableAll || cfg.laptop16.enable) packs.laptop16) |
| 142 | + ]; |
| 143 | +} |
0 commit comments