From 48949336ff1cc16fd1c388b0136edf554a132215 Mon Sep 17 00:00:00 2001 From: Gabriel Arazas Date: Thu, 20 Mar 2025 08:55:05 +0800 Subject: [PATCH] lib: init XDG-specific subset This is arguably more suitable for certain environment but Nix ecosystem is already largely Unix-adjacent anyways. --- lib/default.nix | 2 ++ lib/xdg.nix | 31 +++++++++++++++++++++++++++++++ tests/lib/default.nix | 1 + tests/lib/xdg.nix | 14 ++++++++++++++ 4 files changed, 48 insertions(+) create mode 100644 lib/xdg.nix create mode 100644 tests/lib/xdg.nix diff --git a/lib/default.nix b/lib/default.nix index e3804469..24160a23 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -13,6 +13,7 @@ in pkgs.lib.makeExtensible (self: trivial = callLib ./trivial.nix; data = callLib ./data.nix; math = callLib ./math.nix; + xdg = callLib ./xdg.nix; # For future references, these are the only attributes that are going to be # exported as part of nixpkgs overlay. @@ -43,6 +44,7 @@ in pkgs.lib.makeExtensible (self: inherit (self.trivial) countAttrs filterAttrs'; inherit (self.data) importYAML renderTeraTemplate renderMustacheTemplate; inherit (self.fetchers) fetchInternetArchive fetchUgeeDriver; + inherit (self.xdg) getXdgDesktop; } // lib.optionalAttrs (builtins ? fetchTree) { flake = callLib ./flake.nix; diff --git a/lib/xdg.nix b/lib/xdg.nix new file mode 100644 index 00000000..137cbfa9 --- /dev/null +++ b/lib/xdg.nix @@ -0,0 +1,31 @@ +{ pkgs, lib, self }: + +rec { + /** + Naively get the absolute path of a `.desktop` file given a derivation and a + name. + + # Arguments + + drv + : The derivation. + + name + : The name of the `.desktop` file (without the `.desktop` extension). + + # Type + + ``` + getXdgDesktop :: Derivation -> String -> Path + ``` + + # Example + + ```nix + getXdgDesktop pkgs.wezterm "org.wezfurlong.wezterm" + => /nix/store/$HASH-wezterm-org.wezterm.wezterm.desktop + ``` + */ + getXdgDesktop = drv: name: + "${drv}/share/applications/${name}.desktop"; +} diff --git a/tests/lib/default.nix b/tests/lib/default.nix index fc32b352..4e1755cd 100644 --- a/tests/lib/default.nix +++ b/tests/lib/default.nix @@ -27,6 +27,7 @@ in { trivial = callLib ./trivial.nix; data = callLib ./data; math = callLib ./math.nix; + xdg = callLib ./xdg.nix; # Environment-specific subset. home-manager = callLib ./home-manager.nix; diff --git a/tests/lib/xdg.nix b/tests/lib/xdg.nix new file mode 100644 index 00000000..da05316a --- /dev/null +++ b/tests/lib/xdg.nix @@ -0,0 +1,14 @@ +{ pkgs, lib, self }: + +lib.runTests { + testGetXdgDesktop = { + expr = self.xdg.getXdgDesktop pkgs.wezterm "org.wezfurlong.wezterm"; + expected = "${pkgs.wezterm}/share/applications/org.wezfurlong.wezterm.desktop"; + }; + + # This should be a naive function so it should just naively get things. + testGetXdgDesktop2 = { + expr = self.xdg.getXdgDesktop pkgs.hello "non-existing-desktop"; + expected = "${pkgs.hello}/share/applications/non-existing-desktop.desktop"; + }; +}