|
192 | 192 | }; |
193 | 193 | }; |
194 | 194 |
|
195 | | - config = |
196 | | - let |
197 | | - # If homepage-dashboard is enabled, but none of the configuration values have been updated, |
198 | | - # then default to "unmanaged" configuration which is manually updated in |
199 | | - # var/lib/homepage-dashboard. This is to maintain backwards compatibility, and should be |
200 | | - # deprecated in a future release. |
201 | | - managedConfig = |
202 | | - !( |
203 | | - cfg.bookmarks == [ ] |
204 | | - && cfg.customCSS == "" |
205 | | - && cfg.customJS == "" |
206 | | - && cfg.docker == { } |
207 | | - && cfg.kubernetes == { } |
208 | | - && cfg.services == [ ] |
209 | | - && cfg.settings == { } |
210 | | - && cfg.widgets == [ ] |
211 | | - ); |
212 | | - |
213 | | - configDir = if managedConfig then "/etc/homepage-dashboard" else "/var/lib/homepage-dashboard"; |
214 | | - |
215 | | - msg = |
216 | | - "using unmanaged configuration for homepage-dashboard is deprecated and will be removed" |
217 | | - + " in 24.05. please see the NixOS documentation for `services.homepage-dashboard' and add" |
218 | | - + " your bookmarks, services, widgets, and other configuration using the options provided."; |
219 | | - in |
220 | | - lib.mkIf cfg.enable { |
221 | | - warnings = lib.optional (!managedConfig) msg; |
| 195 | + config = lib.mkIf cfg.enable { |
| 196 | + environment.etc = { |
| 197 | + "homepage-dashboard/custom.css".text = cfg.customCSS; |
| 198 | + "homepage-dashboard/custom.js".text = cfg.customJS; |
| 199 | + "homepage-dashboard/bookmarks.yaml".source = settingsFormat.generate "bookmarks.yaml" cfg.bookmarks; |
| 200 | + "homepage-dashboard/docker.yaml".source = settingsFormat.generate "docker.yaml" cfg.docker; |
| 201 | + "homepage-dashboard/kubernetes.yaml".source = |
| 202 | + settingsFormat.generate "kubernetes.yaml" cfg.kubernetes; |
| 203 | + "homepage-dashboard/services.yaml".source = settingsFormat.generate "services.yaml" cfg.services; |
| 204 | + "homepage-dashboard/settings.yaml".source = settingsFormat.generate "settings.yaml" cfg.settings; |
| 205 | + "homepage-dashboard/widgets.yaml".source = settingsFormat.generate "widgets.yaml" cfg.widgets; |
| 206 | + }; |
222 | 207 |
|
223 | | - environment.etc = lib.mkIf managedConfig { |
224 | | - "homepage-dashboard/custom.css".text = cfg.customCSS; |
225 | | - "homepage-dashboard/custom.js".text = cfg.customJS; |
| 208 | + systemd.services.homepage-dashboard = { |
| 209 | + description = "Homepage Dashboard"; |
| 210 | + after = [ "network.target" ]; |
| 211 | + wantedBy = [ "multi-user.target" ]; |
226 | 212 |
|
227 | | - "homepage-dashboard/bookmarks.yaml".source = settingsFormat.generate "bookmarks.yaml" cfg.bookmarks; |
228 | | - "homepage-dashboard/docker.yaml".source = settingsFormat.generate "docker.yaml" cfg.docker; |
229 | | - "homepage-dashboard/kubernetes.yaml".source = |
230 | | - settingsFormat.generate "kubernetes.yaml" cfg.kubernetes; |
231 | | - "homepage-dashboard/services.yaml".source = settingsFormat.generate "services.yaml" cfg.services; |
232 | | - "homepage-dashboard/settings.yaml".source = settingsFormat.generate "settings.yaml" cfg.settings; |
233 | | - "homepage-dashboard/widgets.yaml".source = settingsFormat.generate "widgets.yaml" cfg.widgets; |
| 213 | + environment = { |
| 214 | + HOMEPAGE_CONFIG_DIR = "/etc/homepage-dashboard"; |
| 215 | + NIXPKGS_HOMEPAGE_CACHE_DIR = "/var/cache/homepage-dashboard"; |
| 216 | + PORT = toString cfg.listenPort; |
| 217 | + LOG_TARGETS = "stdout"; |
234 | 218 | }; |
235 | 219 |
|
236 | | - systemd.services.homepage-dashboard = { |
237 | | - description = "Homepage Dashboard"; |
238 | | - after = [ "network.target" ]; |
239 | | - wantedBy = [ "multi-user.target" ]; |
240 | | - |
241 | | - environment = { |
242 | | - HOMEPAGE_CONFIG_DIR = configDir; |
243 | | - NIXPKGS_HOMEPAGE_CACHE_DIR = "/var/cache/homepage-dashboard"; |
244 | | - PORT = toString cfg.listenPort; |
245 | | - LOG_TARGETS = lib.mkIf managedConfig "stdout"; |
246 | | - }; |
247 | | - |
248 | | - serviceConfig = { |
249 | | - Type = "simple"; |
250 | | - DynamicUser = true; |
251 | | - EnvironmentFile = lib.mkIf (cfg.environmentFile != null) cfg.environmentFile; |
252 | | - StateDirectory = lib.mkIf (!managedConfig) "homepage-dashboard"; |
253 | | - CacheDirectory = "homepage-dashboard"; |
254 | | - ExecStart = lib.getExe cfg.package; |
255 | | - Restart = "on-failure"; |
256 | | - }; |
257 | | - |
258 | | - enableStrictShellChecks = true; |
259 | | - |
260 | | - preStart = '' |
261 | | - # Related: |
262 | | - # * https://github.com/NixOS/nixpkgs/issues/346016 ("homepage-dashboard: cache dir is not cleared upon version upgrade") |
263 | | - # * https://github.com/gethomepage/homepage/discussions/4560 ("homepage NixOS package does not clear cache on upgrade leaving broken state") |
264 | | - # * https://github.com/vercel/next.js/discussions/58864 ("Feature Request: Allow configuration of cache dir") |
265 | | - rm -rf "''${NIXPKGS_HOMEPAGE_CACHE_DIR:?}"/* |
266 | | - ''; |
| 220 | + serviceConfig = { |
| 221 | + Type = "simple"; |
| 222 | + DynamicUser = true; |
| 223 | + EnvironmentFile = lib.mkIf (cfg.environmentFile != null) cfg.environmentFile; |
| 224 | + StateDirectory = "homepage-dashboard"; |
| 225 | + CacheDirectory = "homepage-dashboard"; |
| 226 | + ExecStart = lib.getExe cfg.package; |
| 227 | + Restart = "on-failure"; |
267 | 228 | }; |
268 | 229 |
|
269 | | - networking.firewall = lib.mkIf cfg.openFirewall { |
270 | | - allowedTCPPorts = [ cfg.listenPort ]; |
271 | | - }; |
| 230 | + # Related: |
| 231 | + # * https://github.com/NixOS/nixpkgs/issues/346016 ("homepage-dashboard: cache dir is not cleared upon version upgrade") |
| 232 | + # * https://github.com/gethomepage/homepage/discussions/4560 ("homepage NixOS package does not clear cache on upgrade leaving broken state") |
| 233 | + # * https://github.com/vercel/next.js/discussions/58864 ("Feature Request: Allow configuration of cache dir") |
| 234 | + preStart = '' |
| 235 | + rm -rf "$NIXPKGS_HOMEPAGE_CACHE_DIR"/* |
| 236 | + ''; |
272 | 237 | }; |
| 238 | + |
| 239 | + networking.firewall = lib.mkIf cfg.openFirewall { |
| 240 | + allowedTCPPorts = [ cfg.listenPort ]; |
| 241 | + }; |
| 242 | + }; |
273 | 243 | } |
0 commit comments