mirror of
https://github.com/foo-dogsquared/nixos-config.git
synced 2025-01-31 04:58:01 +00:00
lib/builders: update folder structure
This is to organize for future builders that may be more comprehensive.
This commit is contained in:
parent
e56c0a6136
commit
0750c10a0d
@ -1,71 +0,0 @@
|
|||||||
{ pkgs, lib, self }:
|
|
||||||
|
|
||||||
{
|
|
||||||
/* Create an XDG MIME Association listing. This should also take care of
|
|
||||||
generating desktop-specific mimeapps.list if `desktopName` is given. The
|
|
||||||
given desktop name is already assumed to be in suitable casing which is
|
|
||||||
typically in lowercase ASCII.
|
|
||||||
*/
|
|
||||||
makeXDGMimeAssociationList = {
|
|
||||||
desktopName ? "",
|
|
||||||
addedAssociations ? { },
|
|
||||||
removedAssociations ? { },
|
|
||||||
defaultApplications ? { },
|
|
||||||
}:
|
|
||||||
pkgs.writeTextFile {
|
|
||||||
name = "xdg-mime-associations${lib.optionalString (desktopName != "") "-${desktopName}"}";
|
|
||||||
text =
|
|
||||||
# Non-desktop-specific mimeapps.list are only allowed to specify
|
|
||||||
# default applications.
|
|
||||||
lib.generators.toINI { } ({
|
|
||||||
"Default Applications" = defaultApplications;
|
|
||||||
} // (lib.optionalAttrs (desktopName == "") {
|
|
||||||
"Added Associations" = addedAssociations;
|
|
||||||
"Removed Associations" = removedAssociations;
|
|
||||||
}));
|
|
||||||
destination = "/share/applications/${lib.optionalString (desktopName != "") "${desktopName}-"}mimeapps.list";
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Create an XDG Portals configuration with the given desktop name and its
|
|
||||||
configuration. Similarly, the given desktop name is assumed to be already
|
|
||||||
in its suitable form of a lowercase ASCII.
|
|
||||||
*/
|
|
||||||
makeXDGPortalConfiguration = {
|
|
||||||
desktopName ? "common",
|
|
||||||
config,
|
|
||||||
}:
|
|
||||||
pkgs.writeTextFile {
|
|
||||||
name = "xdg-portal-config${lib.optionalString (desktopName != "common") "-${desktopName}"}";
|
|
||||||
text = lib.generators.toINI { } config;
|
|
||||||
destination = "/share/xdg-desktop-portal/${lib.optionalString (desktopName != "common") "${desktopName}-"}portals.conf";
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Create an XDG desktop entry file. Unlike the `makeDesktopItem`, it doesn't
|
|
||||||
have a required schema as long as it is valid data to be converted to.
|
|
||||||
Furthermore, the validation process can be disabled in case you want to
|
|
||||||
create something like an entry for a desktop session.
|
|
||||||
*/
|
|
||||||
makeXDGDesktopEntry = {
|
|
||||||
name,
|
|
||||||
config,
|
|
||||||
validate ? true,
|
|
||||||
destination ? "/share/applications/${name}.desktop",
|
|
||||||
}:
|
|
||||||
pkgs.writeTextFile {
|
|
||||||
name = "xdg-desktop-entry-${name}";
|
|
||||||
text = lib.generators.toINI {
|
|
||||||
listsAsDuplicateKeys = false;
|
|
||||||
mkKeyValue = lib.generators.mkKeyValueDefault {
|
|
||||||
mkValueString = v:
|
|
||||||
if lib.isList v then lib.concatStringsSep ";" v
|
|
||||||
else lib.generators.mkValueStringDefault { } v;
|
|
||||||
} "=";
|
|
||||||
} config;
|
|
||||||
inherit destination;
|
|
||||||
checkPhase =
|
|
||||||
lib.optionalString validate
|
|
||||||
''
|
|
||||||
${lib.getExe' pkgs.desktop-file-utils "desktop-file-validate"} "$target"
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
7
lib/builders/default.nix
Normal file
7
lib/builders/default.nix
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{ pkgs, lib, self }:
|
||||||
|
|
||||||
|
{
|
||||||
|
makeXDGMimeAssociationList = pkgs.callPackage ./xdg/make-association-list.nix { };
|
||||||
|
makeXDGPortalConfiguration = pkgs.callPackage ./xdg/make-portal-config.nix { };
|
||||||
|
makeXDGDesktopEntry = pkgs.callPackage ./xdg/make-desktop-entry.nix { };
|
||||||
|
}
|
38
lib/builders/xdg/make-association-list.nix
Normal file
38
lib/builders/xdg/make-association-list.nix
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
{ lib, writeTextFile }:
|
||||||
|
|
||||||
|
/* Create an XDG MIME Association listing. This should also take care of
|
||||||
|
generating desktop-specific mimeapps.list if `desktopName` is given. The
|
||||||
|
given desktop name is already assumed to be in suitable casing which is
|
||||||
|
typically in lowercase ASCII.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
# An optional string containing the name of the desktop to be associated
|
||||||
|
# with.
|
||||||
|
desktopName ? "",
|
||||||
|
|
||||||
|
# Applications to be put in `Added Associations`. This is not set when the
|
||||||
|
# database is desktop-specific (when the `desktopName` is non-empty.)
|
||||||
|
addedAssociations ? { },
|
||||||
|
|
||||||
|
# Associations to be put in `Removed Associations` in the file. Similar to
|
||||||
|
# `addedAssociations`, this will not be added when it is desktop-specific.
|
||||||
|
removedAssociations ? { },
|
||||||
|
|
||||||
|
# Set of applications to be opened associated with the MIME type.
|
||||||
|
defaultApplications ? { },
|
||||||
|
}:
|
||||||
|
|
||||||
|
writeTextFile {
|
||||||
|
name = "xdg-mime-associations${lib.optionalString (desktopName != "") "-${desktopName}"}";
|
||||||
|
text =
|
||||||
|
# Non-desktop-specific mimeapps.list are only allowed to specify
|
||||||
|
# default applications.
|
||||||
|
lib.generators.toINI { } ({
|
||||||
|
"Default Applications" = defaultApplications;
|
||||||
|
} // (lib.optionalAttrs (desktopName == "") {
|
||||||
|
"Added Associations" = addedAssociations;
|
||||||
|
"Removed Associations" = removedAssociations;
|
||||||
|
}));
|
||||||
|
destination = "/share/applications/${lib.optionalString (desktopName != "") "${desktopName}-"}mimeapps.list";
|
||||||
|
}
|
||||||
|
|
39
lib/builders/xdg/make-desktop-entry.nix
Normal file
39
lib/builders/xdg/make-desktop-entry.nix
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
{ lib, writeTextFile, desktop-file-utils }:
|
||||||
|
|
||||||
|
/* Create an XDG desktop entry file. Unlike the `makeDesktopItem`, it doesn't
|
||||||
|
have a required schema as long as it is valid data to be converted to.
|
||||||
|
Furthermore, the validation process can be disabled in case you want to
|
||||||
|
create something like an entry for a desktop session.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
# Name of the desktop entry. Only used as part of the package name and the
|
||||||
|
# default value of the destination path.
|
||||||
|
name,
|
||||||
|
|
||||||
|
# Nix-representable data to be exported as the desktop entry.
|
||||||
|
config,
|
||||||
|
|
||||||
|
# Add a validation check for the exported desktop entry.
|
||||||
|
validate ? true,
|
||||||
|
|
||||||
|
# Destination path relative to the output path.
|
||||||
|
destination ? "/share/applications/${name}.desktop",
|
||||||
|
}:
|
||||||
|
|
||||||
|
writeTextFile {
|
||||||
|
name = "xdg-desktop-entry-${name}";
|
||||||
|
text = lib.generators.toINI {
|
||||||
|
listsAsDuplicateKeys = false;
|
||||||
|
mkKeyValue = lib.generators.mkKeyValueDefault {
|
||||||
|
mkValueString = v:
|
||||||
|
if lib.isList v then lib.concatStringsSep ";" v
|
||||||
|
else lib.generators.mkValueStringDefault { } v;
|
||||||
|
} "=";
|
||||||
|
} config;
|
||||||
|
inherit destination;
|
||||||
|
checkPhase =
|
||||||
|
lib.optionalString validate
|
||||||
|
''
|
||||||
|
${lib.getExe' desktop-file-utils "desktop-file-validate"} "$target"
|
||||||
|
'';
|
||||||
|
}
|
17
lib/builders/xdg/make-portal-config.nix
Normal file
17
lib/builders/xdg/make-portal-config.nix
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{ lib, writeTextFile }:
|
||||||
|
|
||||||
|
/* Create an XDG Portals configuration with the given desktop name and its
|
||||||
|
configuration. Similarly, the given desktop name is assumed to be already
|
||||||
|
in its suitable form of a lowercase ASCII.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
desktopName ? "common",
|
||||||
|
|
||||||
|
# Nix-representable data to be exported as the portal configuration.
|
||||||
|
config,
|
||||||
|
}:
|
||||||
|
writeTextFile {
|
||||||
|
name = "xdg-portal-config${lib.optionalString (desktopName != "common") "-${desktopName}"}";
|
||||||
|
text = lib.generators.toINI { } config;
|
||||||
|
destination = "/share/xdg-desktop-portal/${lib.optionalString (desktopName != "common") "${desktopName}-"}portals.conf";
|
||||||
|
}
|
@ -14,7 +14,7 @@ pkgs.lib.makeExtensible
|
|||||||
let
|
let
|
||||||
callLib = file: import file { inherit pkgs lib self; };
|
callLib = file: import file { inherit pkgs lib self; };
|
||||||
in {
|
in {
|
||||||
builders = callLib ./builders.nix;
|
builders = callLib ./builders;
|
||||||
trivial = callLib ./trivial.nix;
|
trivial = callLib ./trivial.nix;
|
||||||
data = callLib ./data.nix;
|
data = callLib ./data.nix;
|
||||||
fetchers = callLib ./fetchers;
|
fetchers = callLib ./fetchers;
|
||||||
|
Loading…
Reference in New Issue
Block a user