From 171d8f797d0dfba71e571db2b7178da6a226e2ac Mon Sep 17 00:00:00 2001 From: Gabriel Arazas Date: Sun, 12 Jan 2025 17:57:14 +0800 Subject: [PATCH] lib: reformat code --- lib/builders/build-dconf-db.nix | 5 +- lib/builders/hugo-build-site/default.nix | 451 ++++++++---------- lib/builders/xdg/make-association-list.nix | 31 +- lib/builders/xdg/make-desktop-entry.nix | 33 +- lib/builders/xdg/make-portal-config.nix | 20 +- lib/data.nix | 3 +- lib/env-builders.nix | 100 ++-- lib/env-specific/home-manager.nix | 12 +- lib/env-specific/nixos.nix | 49 +- lib/env-specific/nixvim.nix | 2 +- lib/env-specific/sops.nix | 18 +- lib/env-specific/wrapper-manager.nix | 69 ++- .../fetch-internet-archive/default.nix | 31 +- lib/fetchers/fetch-ugee-driver/default.nix | 13 +- lib/flake.nix | 7 +- lib/math.nix | 13 +- lib/trivial.nix | 73 ++- lib/utils/nixos.nix | 6 +- 18 files changed, 393 insertions(+), 543 deletions(-) diff --git a/lib/builders/build-dconf-db.nix b/lib/builders/build-dconf-db.nix index 57fa809a..da9ca78e 100644 --- a/lib/builders/build-dconf-db.nix +++ b/lib/builders/build-dconf-db.nix @@ -4,6 +4,5 @@ { dir, name ? baseNameOf dir, keyfiles, profile }@args: -runCommand "dconf-${name}" { - nativeBuildInputs = [ (lib.getBin dconf) ]; -} "dconf compile $out ${dir}" +runCommand "dconf-${name}" { nativeBuildInputs = [ (lib.getBin dconf) ]; } +"dconf compile $out ${dir}" diff --git a/lib/builders/hugo-build-site/default.nix b/lib/builders/hugo-build-site/default.nix index a9d63e05..cc148399 100644 --- a/lib/builders/hugo-build-site/default.nix +++ b/lib/builders/hugo-build-site/default.nix @@ -18,14 +18,7 @@ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -{ - hugo, - go, - cacert, - git, - lib, - stdenv, -}: +{ hugo, go, cacert, git, lib, stdenv, }: # A modified Go builder for generating a website with Hugo. Since it relies on # Hugo modules (which is basically wrapper around Go modules), this can be used @@ -34,297 +27,227 @@ # Take note, this doesn't work for Hugo projects with remote resources # right in the content since Hugo allows network access when generating # the website. -{ - name ? "${args'.pname}-${args'.version}", +{ name ? "${args'.pname}-${args'.version}", - nativeBuildInputs ? [ ], - passthru ? { }, +nativeBuildInputs ? [ ], passthru ? { }, - # A function to override the goModules derivation - overrideModAttrs ? (_oldAttrs: { }), +# A function to override the goModules derivation +overrideModAttrs ? (_oldAttrs: { }), - # path to go.mod and go.sum directory - modRoot ? "./", +# path to go.mod and go.sum directory +modRoot ? "./", - # vendorHash is the SRI hash of the vendored dependencies - # - # if vendorHash is null, then we won't fetch any dependencies and - # rely on the vendor folder within the source. - vendorHash ? throw ( - if args' ? vendorSha256 then - "buildHugoSite: Expect vendorHash instead of vendorSha256" - else - "buildHugoSite: vendorHash is missing" - ), +# vendorHash is the SRI hash of the vendored dependencies +# +# if vendorHash is null, then we won't fetch any dependencies and +# rely on the vendor folder within the source. +vendorHash ? throw (if args' ? vendorSha256 then + "buildHugoSite: Expect vendorHash instead of vendorSha256" +else + "buildHugoSite: vendorHash is missing"), - # Whether to delete the vendor folder supplied with the source. - deleteVendor ? false, +# Whether to delete the vendor folder supplied with the source. +deleteVendor ? false, - # Whether to fetch (go mod download) and proxy the vendor directory. - # This is useful if your code depends on c code and go mod tidy does not - # include the needed sources to build or if any dependency has case-insensitive - # conflicts which will produce platform dependant `vendorHash` checksums. - proxyVendor ? false, +# Whether to fetch (go mod download) and proxy the vendor directory. +# This is useful if your code depends on c code and go mod tidy does not +# include the needed sources to build or if any dependency has case-insensitive +# conflicts which will produce platform dependant `vendorHash` checksums. +proxyVendor ? false, - # We want parallel builds by default - enableParallelBuilding ? true, +# We want parallel builds by default +enableParallelBuilding ? true, - # Do not enable this without good reason - # IE: programs coupled with the compiler - allowGoReference ? false, +# Do not enable this without good reason +# IE: programs coupled with the compiler +allowGoReference ? false, - CGO_ENABLED ? go.CGO_ENABLED, +CGO_ENABLED ? go.CGO_ENABLED, - meta ? { }, +meta ? { }, - ldflags ? [ ], +ldflags ? [ ], - GOFLAGS ? [ ], +GOFLAGS ? [ ], - ... -}@args': +... }@args': let - args = removeAttrs args' [ - "overrideModAttrs" - "vendorSha256" - "vendorHash" - ]; + args = removeAttrs args' [ "overrideModAttrs" "vendorSha256" "vendorHash" ]; GO111MODULE = "on"; GOTOOLCHAIN = "local"; - hugoModules = - if (vendorHash == null) then - "" - else - (stdenv.mkDerivation { - name = "${name}-hugo-modules"; + hugoModules = if (vendorHash == null) then + "" + else + (stdenv.mkDerivation { + name = "${name}-hugo-modules"; - nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ - hugo - go - git - cacert - ]; - - inherit (args) src; - inherit (go) GOOS GOARCH; - inherit GO111MODULE GOTOOLCHAIN; - - # The following inheritence behavior is not trivial to expect, and some may - # argue it's not ideal. Changing it may break vendor hashes in Nixpkgs and - # out in the wild. In anycase, it's documented in: - # doc/languages-frameworks/go.section.md - prePatch = args.prePatch or ""; - patches = args.patches or [ ]; - patchFlags = args.patchFlags or [ ]; - postPatch = args.postPatch or ""; - preBuild = args.preBuild or ""; - postBuild = args.modPostBuild or ""; - sourceRoot = args.sourceRoot or ""; - setSourceRoot = args.setSourceRoot or ""; - env = args.env or { }; - - impureEnvVars = lib.fetchers.proxyImpureEnvVars ++ [ - "GIT_PROXY_COMMAND" - "SOCKS_SERVER" - "GOPROXY" - ]; - - configurePhase = - args.modConfigurePhase or '' - runHook preConfigure - export GOCACHE=$TMPDIR/go-cache - export GOPATH="$TMPDIR/go" - cd "${modRoot}" - runHook postConfigure - ''; - - buildPhase = - args.modBuildPhase or ( - '' - runHook preBuild - '' - + lib.optionalString deleteVendor '' - if [ ! -d _vendor ]; then - echo "_vendor folder does not exist, 'deleteVendor' is not needed" - exit 10 - else - rm -rf _vendor - fi - '' - + '' - if [ -d _vendor ]; then - echo "_vendor folder exists, please set 'vendorHash = null;' in your expression" - exit 10 - fi - - ${ - if proxyVendor then - '' - mkdir -p "''${GOPATH}/pkg/mod/cache/download" - hugo mod vendor - '' - else - '' - if (( "''${NIX_DEBUG:-0}" >= 1 )); then - hugoModVendorFlags+=(-v) - fi - hugo mod vendor "''${hugoModVendorFlags[@]}" - '' - } - - mkdir -p _vendor - - runHook postBuild - '' - ); - - installPhase = - args.modInstallPhase or '' - runHook preInstall - - ${ - if proxyVendor then - '' - rm -rf "''${GOPATH}/pkg/mod/cache/download/sumdb" - cp -r --reflink=auto "''${GOPATH}/pkg/mod/cache/download" $out - '' - else - '' - cp -r --reflink=auto _vendor $out - '' - } - - if ! [ "$(ls -A $out)" ]; then - echo "_vendor folder is empty, please set 'vendorHash = null;' in your expression" - exit 10 - fi - - runHook postInstall - ''; - - dontFixup = true; - - outputHashMode = "recursive"; - outputHash = vendorHash; - # Handle empty vendorHash; avoid - # error: empty hash requires explicit hash algorithm - outputHashAlgo = if vendorHash == "" then "sha256" else null; - }).overrideAttrs - overrideModAttrs; - - package = stdenv.mkDerivation ( - args - // { - nativeBuildInputs = [ - hugo - git - go - ] ++ nativeBuildInputs; + nativeBuildInputs = (args.nativeBuildInputs or [ ]) + ++ [ hugo go git cacert ]; + inherit (args) src; inherit (go) GOOS GOARCH; + inherit GO111MODULE GOTOOLCHAIN; - GOFLAGS = - GOFLAGS - ++ - lib.warnIf (lib.any (lib.hasPrefix "-mod=") GOFLAGS) - "use `proxyVendor` to control Go module/vendor behavior instead of setting `-mod=` in GOFLAGS" - (lib.optional (!proxyVendor) "-mod=vendor") - ++ - lib.warnIf (builtins.elem "-trimpath" GOFLAGS) - "`-trimpath` is added by default to GOFLAGS by buildHugoSite when allowGoReference isn't set to true" - (lib.optional (!allowGoReference) "-trimpath"); - inherit - CGO_ENABLED - enableParallelBuilding - GO111MODULE - GOTOOLCHAIN - ; + # The following inheritence behavior is not trivial to expect, and some may + # argue it's not ideal. Changing it may break vendor hashes in Nixpkgs and + # out in the wild. In anycase, it's documented in: + # doc/languages-frameworks/go.section.md + prePatch = args.prePatch or ""; + patches = args.patches or [ ]; + patchFlags = args.patchFlags or [ ]; + postPatch = args.postPatch or ""; + preBuild = args.preBuild or ""; + postBuild = args.modPostBuild or ""; + sourceRoot = args.sourceRoot or ""; + setSourceRoot = args.setSourceRoot or ""; + env = args.env or { }; - # If not set to an explicit value, set the buildid empty for reproducibility. - ldflags = ldflags ++ lib.optional (!lib.any (lib.hasPrefix "-buildid=") ldflags) "-buildid="; + impureEnvVars = lib.fetchers.proxyImpureEnvVars + ++ [ "GIT_PROXY_COMMAND" "SOCKS_SERVER" "GOPROXY" ]; - configurePhase = - args.configurePhase or ( - '' - runHook preConfigure + configurePhase = args.modConfigurePhase or '' + runHook preConfigure + export GOCACHE=$TMPDIR/go-cache + export GOPATH="$TMPDIR/go" + cd "${modRoot}" + runHook postConfigure + ''; - export GOCACHE=$TMPDIR/go-cache - export GOPATH="$TMPDIR/go" - export GOPROXY=off - export GOSUMDB=off - cd "$modRoot" - '' - + lib.optionalString (vendorHash != null) '' - ${ - if proxyVendor then - '' - export GOPROXY=file://${hugoModules} - '' - else - '' - rm -rf _vendor - cp -r --reflink=auto ${hugoModules} _vendor - '' - } - '' - + '' + buildPhase = args.modBuildPhase or ('' + runHook preBuild + '' + lib.optionalString deleteVendor '' + if [ ! -d _vendor ]; then + echo "_vendor folder does not exist, 'deleteVendor' is not needed" + exit 10 + else + rm -rf _vendor + fi + '' + '' + if [ -d _vendor ]; then + echo "_vendor folder exists, please set 'vendorHash = null;' in your expression" + exit 10 + fi - # currently pie is only enabled by default in pkgsMusl - # this will respect the `hardening{Disable,Enable}` flags if set - if [[ $NIX_HARDENING_ENABLE =~ "pie" ]]; then - export GOFLAGS="-buildmode=pie $GOFLAGS" - fi + ${if proxyVendor then '' + mkdir -p "''${GOPATH}/pkg/mod/cache/download" + hugo mod vendor + '' else '' + if (( "''${NIX_DEBUG:-0}" >= 1 )); then + hugoModVendorFlags+=(-v) + fi + hugo mod vendor "''${hugoModVendorFlags[@]}" + ''} - runHook postConfigure - '' - ); + mkdir -p _vendor - buildPhase = - args.buildPhase or '' - runHook preBuild - hugo "''${buildFlags[@]}" --destination public - runHook postBuild - ''; + runHook postBuild + ''); - doCheck = args.doCheck or true; - checkPhase = - args.checkPhase or '' - runHook preCheck + installPhase = args.modInstallPhase or '' + runHook preInstall - runHook postCheck - ''; + ${if proxyVendor then '' + rm -rf "''${GOPATH}/pkg/mod/cache/download/sumdb" + cp -r --reflink=auto "''${GOPATH}/pkg/mod/cache/download" $out + '' else '' + cp -r --reflink=auto _vendor $out + ''} - installPhase = - args.installPhase or '' - runHook preInstall + if ! [ "$(ls -A $out)" ]; then + echo "_vendor folder is empty, please set 'vendorHash = null;' in your expression" + exit 10 + fi - mkdir -p $out - cp -r public/* $out + runHook postInstall + ''; - runHook postInstall - ''; + dontFixup = true; - strictDeps = true; + outputHashMode = "recursive"; + outputHash = vendorHash; + # Handle empty vendorHash; avoid + # error: empty hash requires explicit hash algorithm + outputHashAlgo = if vendorHash == "" then "sha256" else null; + }).overrideAttrs overrideModAttrs; - disallowedReferences = lib.optional (!allowGoReference) go; + package = stdenv.mkDerivation (args // { + nativeBuildInputs = [ hugo git go ] ++ nativeBuildInputs; - passthru = passthru // { - inherit - go - hugo - hugoModules - vendorHash - ; - }; + inherit (go) GOOS GOARCH; - meta = { - # Add default meta information - platforms = go.meta.platforms or lib.platforms.all; - } // meta; - } - ); -in -package + GOFLAGS = GOFLAGS ++ lib.warnIf (lib.any (lib.hasPrefix "-mod=") GOFLAGS) + "use `proxyVendor` to control Go module/vendor behavior instead of setting `-mod=` in GOFLAGS" + (lib.optional (!proxyVendor) "-mod=vendor") + ++ lib.warnIf (builtins.elem "-trimpath" GOFLAGS) + "`-trimpath` is added by default to GOFLAGS by buildHugoSite when allowGoReference isn't set to true" + (lib.optional (!allowGoReference) "-trimpath"); + inherit CGO_ENABLED enableParallelBuilding GO111MODULE GOTOOLCHAIN; + + # If not set to an explicit value, set the buildid empty for reproducibility. + ldflags = ldflags + ++ lib.optional (!lib.any (lib.hasPrefix "-buildid=") ldflags) + "-buildid="; + + configurePhase = args.configurePhase or ('' + runHook preConfigure + + export GOCACHE=$TMPDIR/go-cache + export GOPATH="$TMPDIR/go" + export GOPROXY=off + export GOSUMDB=off + cd "$modRoot" + '' + lib.optionalString (vendorHash != null) '' + ${if proxyVendor then '' + export GOPROXY=file://${hugoModules} + '' else '' + rm -rf _vendor + cp -r --reflink=auto ${hugoModules} _vendor + ''} + '' + '' + + # currently pie is only enabled by default in pkgsMusl + # this will respect the `hardening{Disable,Enable}` flags if set + if [[ $NIX_HARDENING_ENABLE =~ "pie" ]]; then + export GOFLAGS="-buildmode=pie $GOFLAGS" + fi + + runHook postConfigure + ''); + + buildPhase = args.buildPhase or '' + runHook preBuild + hugo "''${buildFlags[@]}" --destination public + runHook postBuild + ''; + + doCheck = args.doCheck or true; + checkPhase = args.checkPhase or '' + runHook preCheck + + runHook postCheck + ''; + + installPhase = args.installPhase or '' + runHook preInstall + + mkdir -p $out + cp -r public/* $out + + runHook postInstall + ''; + + strictDeps = true; + + disallowedReferences = lib.optional (!allowGoReference) go; + + passthru = passthru // { inherit go hugo hugoModules vendorHash; }; + + meta = { + # Add default meta information + platforms = go.meta.platforms or lib.platforms.all; + } // meta; + }); +in package diff --git a/lib/builders/xdg/make-association-list.nix b/lib/builders/xdg/make-association-list.nix index 588b9997..eca1df6a 100644 --- a/lib/builders/xdg/make-association-list.nix +++ b/lib/builders/xdg/make-association-list.nix @@ -6,24 +6,25 @@ typically in lowercase ASCII. */ { - # An optional string containing the name of the desktop to be associated - # with. - desktopName ? "", +# 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 ? { }, +# 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 ? { }, +# 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 ? { }, -}: +# Set of applications to be opened associated with the MIME type. +defaultApplications ? { }, }: writeTextFile { - name = "xdg-mime-associations${lib.optionalString (desktopName != "") "-${desktopName}"}"; + name = "xdg-mime-associations${ + lib.optionalString (desktopName != "") "-${desktopName}" + }"; text = # Non-desktop-specific mimeapps.list are only allowed to specify # default applications. @@ -33,6 +34,8 @@ writeTextFile { "Added Associations" = addedAssociations; "Removed Associations" = removedAssociations; })); - destination = "/share/applications/${lib.optionalString (desktopName != "") "${desktopName}-"}mimeapps.list"; + destination = "/share/applications/${ + lib.optionalString (desktopName != "") "${desktopName}-" + }mimeapps.list"; } diff --git a/lib/builders/xdg/make-desktop-entry.nix b/lib/builders/xdg/make-desktop-entry.nix index a2448764..f4b0a601 100644 --- a/lib/builders/xdg/make-desktop-entry.nix +++ b/lib/builders/xdg/make-desktop-entry.nix @@ -6,19 +6,18 @@ 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, +# 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, +# Nix-representable data to be exported as the desktop entry. +config, - # Add a validation check for the exported desktop entry. - validate ? true, +# Add a validation check for the exported desktop entry. +validate ? true, - # Destination path relative to the output path. - destination ? "/share/applications/${name}.desktop", -}: +# Destination path relative to the output path. +destination ? "/share/applications/${name}.desktop", }: writeTextFile { name = "xdg-desktop-entry-${name}"; @@ -26,14 +25,14 @@ writeTextFile { listsAsDuplicateKeys = false; mkKeyValue = lib.generators.mkKeyValueDefault { mkValueString = v: - if lib.isList v then lib.concatStringsSep ";" v - else lib.generators.mkValueStringDefault { } 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" - ''; + checkPhase = lib.optionalString validate '' + ${lib.getExe' desktop-file-utils "desktop-file-validate"} "$target" + ''; } diff --git a/lib/builders/xdg/make-portal-config.nix b/lib/builders/xdg/make-portal-config.nix index 7a0eff78..edab936e 100644 --- a/lib/builders/xdg/make-portal-config.nix +++ b/lib/builders/xdg/make-portal-config.nix @@ -1,17 +1,19 @@ { 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. + configuration. Similarly, the given desktop name is assumed to be already + in its suitable form of a lowercase ASCII. */ -{ - desktopName ? "common", +{ desktopName ? "common", - # Nix-representable data to be exported as the portal configuration. - config, -}: +# Nix-representable data to be exported as the portal configuration. +config, }: writeTextFile { - name = "xdg-portal-config${lib.optionalString (desktopName != "common") "-${desktopName}"}"; + 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"; + destination = "/share/xdg-desktop-portal/${ + lib.optionalString (desktopName != "common") "${desktopName}-" + }portals.conf"; } diff --git a/lib/data.nix b/lib/data.nix index 8bffae7f..f6126ba3 100644 --- a/lib/data.nix +++ b/lib/data.nix @@ -55,8 +55,7 @@ => /nix/store/HASH-mustache-render-template */ renderMustacheTemplate = { template, context, extraArgs ? { } }: - let - extraArgs' = lib.cli.toGNUCommandLineShell { } extraArgs; + let extraArgs' = lib.cli.toGNUCommandLineShell { } extraArgs; in pkgs.runCommand "mustache-render-template" { nativeBuildInputs = with pkgs; [ mustache-go ]; context = builtins.toJSON context; diff --git a/lib/env-builders.nix b/lib/env-builders.nix index a502cfbc..1341d818 100644 --- a/lib/env-builders.nix +++ b/lib/env-builders.nix @@ -14,39 +14,30 @@ let # A set of nixos-generators modules including our custom ones. - nixosGeneratorModules = - let - officialFormats = builtins.readDir "${sources.nixos-generators}/formats"; - unofficialFormats = builtins.readDir ../modules/nixos-generators; - formats = officialFormats // unofficialFormats; - in - lib.mapAttrs' (n: _: lib.nameValuePair (lib.removeSuffix ".nix" n) { + nixosGeneratorModules = let + officialFormats = builtins.readDir "${sources.nixos-generators}/formats"; + unofficialFormats = builtins.readDir ../modules/nixos-generators; + formats = officialFormats // unofficialFormats; + in lib.mapAttrs' (n: _: + lib.nameValuePair (lib.removeSuffix ".nix" n) { imports = [ "${sources.nixos-generators}/format-module.nix" - ( - if (lib.hasAttr n officialFormats) - then "${sources.nixos-generators}/formats/${n}" - else "${../modules/nixos-generators}/${n}" - ) + (if (lib.hasAttr n officialFormats) then + "${sources.nixos-generators}/formats/${n}" + else + "${../modules/nixos-generators}/${n}") ]; }) formats; -in -rec { - mkNixosSystem = { - pkgs, - lib ? pkgs.lib, - system, - extraModules ? [ ], - specialArgs ? { }, - }: +in rec { + mkNixosSystem = + { pkgs, lib ? pkgs.lib, system, extraModules ? [ ], specialArgs ? { }, }: let nixosModules = ../modules/nixos; # Evaluating the system ourselves (which is trivial) instead of relying # on nixpkgs.lib.nixosSystem flake output. nixosSystem = args: import "${pkgs.path}/nixos/lib/eval-config.nix" args; - in - (lib.makeOverridable nixosSystem) { + in (lib.makeOverridable nixosSystem) { inherit pkgs; specialArgs = specialArgs // { foodogsquaredUtils = import ./utils/nixos.nix { inherit lib; }; @@ -55,9 +46,7 @@ rec { modules = extraModules ++ [ nixosModules ../modules/nixos/_private - ({ lib, ... }: { - nixpkgs.hostPlatform = lib.mkForce system; - }) + ({ lib, ... }: { nixpkgs.hostPlatform = lib.mkForce system; }) ]; # Since we're setting it through nixpkgs.hostPlatform, we'll have to pass @@ -66,44 +55,27 @@ rec { }; # A very very thin wrapper around `mkNixosSystem` to build with the given format. - mkNixosImage = { - pkgs, - system, - lib ? pkgs.lib, - extraModules ? [ ], - specialArgs ? { }, - format ? "iso", - }: + mkNixosImage = { pkgs, system, lib ? pkgs.lib, extraModules ? [ ] + , specialArgs ? { }, format ? "iso", }: let extraModules' = extraModules ++ [ nixosGeneratorModules.${format} ]; nixosSystem = mkNixosSystem { inherit pkgs lib system specialArgs; extraModules = extraModules'; }; - in - nixosSystem.config.system.build.${nixosSystem.config.formatAttr}; + in nixosSystem.config.system.build.${nixosSystem.config.formatAttr}; - mkHome = { - pkgs, - homeManagerSrc, - lib ? pkgs.lib, - modules ? [ ], - specialArgs ? { }, - }: - let - homeModules = ../modules/home-manager; - in - import "${homeManagerSrc}/modules" { + mkHome = + { pkgs, homeManagerSrc, lib ? pkgs.lib, modules ? [ ], specialArgs ? { }, }: + let homeModules = ../modules/home-manager; + in import "${homeManagerSrc}/modules" { inherit pkgs lib; check = true; extraSpecialArgs = specialArgs // { foodogsquaredModulesPath = builtins.toString homeModules; }; configuration = { lib, ... }: { - imports = modules ++ [ - homeModules - ../modules/home-manager/_private - ]; + imports = modules ++ [ homeModules ../modules/home-manager/_private ]; config = { programs.home-manager.path = homeManagerSrc; @@ -113,25 +85,17 @@ rec { }; }; - mkWrapper = { - pkgs, - lib ? pkgs.lib, - wrapperManagerSrc, - modules ? [ ], - specialArgs ? { }, - }: + mkWrapper = { pkgs, lib ? pkgs.lib, wrapperManagerSrc, modules ? [ ] + , specialArgs ? { }, }: let wrapperManagerModules = ../modules/wrapper-manager; wrapperManager = import wrapperManagerSrc { }; - in - wrapperManager.lib.build { - inherit pkgs lib; - specialArgs = specialArgs // { - foodogsquaredModulesPath = builtins.toString wrapperManagerModules; - }; - modules = modules ++ [ - wrapperManagerModules - ../modules/wrapper-manager/_private - ]; + in wrapperManager.lib.build { + inherit pkgs lib; + specialArgs = specialArgs // { + foodogsquaredModulesPath = builtins.toString wrapperManagerModules; }; + modules = modules + ++ [ wrapperManagerModules ../modules/wrapper-manager/_private ]; + }; } diff --git a/lib/env-specific/home-manager.nix b/lib/env-specific/home-manager.nix index 6409e775..ec4089c9 100644 --- a/lib/env-specific/home-manager.nix +++ b/lib/env-specific/home-manager.nix @@ -2,9 +2,8 @@ { pkgs, lib, self }: rec { - /* - Checks if there is the `osConfig` attribute and get the attribute path from - its system configuration. + /* Checks if there is the `osConfig` attribute and get the attribute path from + its system configuration. */ hasNixOSConfigAttr = # The configuration attribute set of the home-manager configuration. @@ -26,11 +25,10 @@ rec { # The default value when `attrPath` is missing. default: - attrs ? darwinConfig && pkgs.lib.attrByPath attrPath default attrs.darwinConfig; + attrs ? darwinConfig + && pkgs.lib.attrByPath attrPath default attrs.darwinConfig; - /* - A quick function to check if the optional NixOS system module is enabled. - */ + # A quick function to check if the optional NixOS system module is enabled. hasOSModuleEnabled = # The configuration attribute set of the home-manager configuration. attrs: diff --git a/lib/env-specific/nixos.nix b/lib/env-specific/nixos.nix index 979e43fd..fe5540e3 100644 --- a/lib/env-specific/nixos.nix +++ b/lib/env-specific/nixos.nix @@ -5,12 +5,10 @@ # Checks if the NixOS configuration is part of the nixos-generator build. # Typically, we just check if there's a certain attribute that is imported # from it. - hasNixosFormat = config: - lib.hasAttrByPath [ "formatAttr" ] config; + hasNixosFormat = config: lib.hasAttrByPath [ "formatAttr" ] config; # Checks if the NixOS config is being built for a particular format. - isFormat = config: format: - (config.formatAttr or "") == format; + isFormat = config: format: (config.formatAttr or "") == format; # Create a separate environment similar to NixOS `system.path`. This is # typically used to create isolated environments for custom desktop sessions @@ -21,17 +19,16 @@ pkgs.buildEnv (args // { inherit (config.environment) pathsToLink extraOutputsToInstall; ignoreCollisions = true; - postBuild = - '' - # Remove wrapped binaries, they shouldn't be accessible via PATH. - find $out/bin -maxdepth 1 -name ".*-wrapped" -type l -delete + postBuild = '' + # Remove wrapped binaries, they shouldn't be accessible via PATH. + find $out/bin -maxdepth 1 -name ".*-wrapped" -type l -delete - if [ -x $out/bin/glib-compile-schemas -a -w $out/share/glib-2.0/schemas ]; then - $out/bin/glib-compile-schemas $out/share/glib-2.0/schemas - fi + if [ -x $out/bin/glib-compile-schemas -a -w $out/share/glib-2.0/schemas ]; then + $out/bin/glib-compile-schemas $out/share/glib-2.0/schemas + fi - ${config.environment.extraSetup} - ''; + ${config.environment.extraSetup} + ''; }); # Given an environment (built with `pkgs.buildEnv`), create a systemd @@ -44,26 +41,24 @@ # Create a range object (as [start, end) in notation) that is typically used # in module options that accept them. - makeRange = start: range: - { from = start; to = start + range; }; + makeRange = start: range: { + from = start; + to = start + range; + }; # Create a range object (as [start + 1, end + 1] in notation) that is typically used # in module options that accept them except that the starting port is included. makeRange' = start: range: - let - start' = start + 1; - in - { from = start'; to = start' + range; }; + let start' = start + 1; + in { + from = start'; + to = start' + range; + }; - /* - A specific function that checks if specific filesystem setups are set. - */ + # A specific function that checks if specific filesystem setups are set. isFilesystemSet = config: setupName: config.suites.filesystem.setups.${setupName}.enable or false; - /* - Get the path from the state variable. - */ - getFilesystem = config: setupName: - config.state.paths.${setupName}; + # Get the path from the state variable. + getFilesystem = config: setupName: config.state.paths.${setupName}; } diff --git a/lib/env-specific/nixvim.nix b/lib/env-specific/nixvim.nix index 3a2a8379..e57c95e0 100644 --- a/lib/env-specific/nixvim.nix +++ b/lib/env-specific/nixvim.nix @@ -2,5 +2,5 @@ { isStandalone = config: - !config?hmConfig && !config?nixosConfig && !config?darwinConfig; + !config ? hmConfig && !config ? nixosConfig && !config ? darwinConfig; } diff --git a/lib/env-specific/sops.nix b/lib/env-specific/sops.nix index fc384e23..63bcc6b6 100644 --- a/lib/env-specific/sops.nix +++ b/lib/env-specific/sops.nix @@ -18,13 +18,8 @@ } */ getSecrets = sopsFile: secrets: - let - getKey = key: { inherit key sopsFile; }; - in - lib.mapAttrs - (path: attrs: - (getKey path) // attrs) - secrets; + let getKey = key: { inherit key sopsFile; }; + in lib.mapAttrs (path: attrs: (getKey path) // attrs) secrets; /* Prepend a prefix for the given secrets. This allows a workflow for separate sops file. @@ -44,10 +39,7 @@ })) */ attachSopsPathPrefix = prefix: secrets: - lib.mapAttrs' - (key: settings: - lib.nameValuePair - "${prefix}/${key}" - ({ inherit key; } // settings)) - secrets; + lib.mapAttrs' (key: settings: + lib.nameValuePair "${prefix}/${key}" ({ inherit key; } // settings)) + secrets; } diff --git a/lib/env-specific/wrapper-manager.nix b/lib/env-specific/wrapper-manager.nix index c59e9996..bd79c345 100644 --- a/lib/env-specific/wrapper-manager.nix +++ b/lib/env-specific/wrapper-manager.nix @@ -5,15 +5,12 @@ rec { containing all of the addons properly placed as a system resource folder. */ wrapBlenderAddons = { blenderPackage, addons }: - let - blenderVersion = lib.versions.majorMinor blenderPackage.version; - in - pkgs.runCommand "blender-system-resources" - { - passAsFile = [ "paths" ]; - paths = addons ++ [ blenderPackage ]; - nativeBuildInputs = with pkgs; [ outils ]; - } '' + let blenderVersion = lib.versions.majorMinor blenderPackage.version; + in pkgs.runCommand "blender-system-resources" { + passAsFile = [ "paths" ]; + paths = addons ++ [ blenderPackage ]; + nativeBuildInputs = with pkgs; [ outils ]; + } '' mkdir -p $out for i in $(cat $pathsPath); do resourcesPath="$i/share/blender" @@ -24,11 +21,10 @@ rec { done ''; - makeBlenderWrapper = module@{ blenderPackage, blenderArgs ? [ ] , addons ? [ ], ... }: - let - blenderAddons = wrapBlenderAddons { inherit blenderPackage addons; }; - in - lib.mkMerge [ + makeBlenderWrapper = + module@{ blenderPackage, blenderArgs ? [ ], addons ? [ ], ... }: + let blenderAddons = wrapBlenderAddons { inherit blenderPackage addons; }; + in lib.mkMerge [ { arg0 = lib.getExe' blenderPackage "blender"; prependArgs = lib.mkBefore blenderArgs; @@ -41,48 +37,49 @@ rec { (lib.removeAttrs module [ "blenderPackage" "blenderArgs" "addons" ]) ]; - /* Create a configuration module for quickly wrapping with Boxxy. - */ - makeBoxxyWrapper = module@{ boxxyArgs, wraparound, wraparoundArgs ? [], ... }: + # Create a configuration module for quickly wrapping with Boxxy. + makeBoxxyWrapper = + module@{ boxxyArgs, wraparound, wraparoundArgs ? [ ], ... }: lib.mkMerge [ { arg0 = lib.getExe' pkgs.boxxy "boxxy"; - prependArgs = lib.mkBefore (boxxyArgs ++ [ "--" wraparound ] ++ wraparoundArgs); + prependArgs = + lib.mkBefore (boxxyArgs ++ [ "--" wraparound ] ++ wraparoundArgs); } - (builtins.removeAttrs module [ "boxxyArgs" "wraparound" "wraparoundArgs" ]) + (builtins.removeAttrs module [ + "boxxyArgs" + "wraparound" + "wraparoundArgs" + ]) ]; /* Given the path to the source code, the attribute path, and the executable name, return the store path to one of its executables. */ - getNixglExecutable = { src, variant ? [ "auto" "nixGLDefault" ], nixglProgram ? "nixGL" }: + getNixglExecutable = + { src, variant ? [ "auto" "nixGLDefault" ], nixglProgram ? "nixGL" }: let nixgl = import src { inherit pkgs; }; nixglPkg = lib.getAttrFromPath variant nixgl; - in - lib.getExe' nixglPkg nixglProgram; + in lib.getExe' nixglPkg nixglProgram; - /* Create a configuration module for quickly wrapping with NixGL. - */ - makeNixglWrapper = { - nixglSrc, - nixglArgs, - nixglVariant, - nixglExecutable, - wraparound, - wraparoundArgs ? [], - ... - }@module: + # Create a configuration module for quickly wrapping with NixGL. + makeNixglWrapper = { nixglSrc, nixglArgs, nixglVariant, nixglExecutable + , wraparound, wraparoundArgs ? [ ], ... }@module: lib.mkMerge [ { arg0 = getNixglExecutable nixglSrc nixglVariant nixglExecutable; - prependArgs = lib.mkBefore (nixglArgs ++ [ "--" wraparound ] ++ wraparoundArgs); + prependArgs = + lib.mkBefore (nixglArgs ++ [ "--" wraparound ] ++ wraparoundArgs); } (builtins.removeAttrs module [ - "nixglArgs" "nixglVariant" "nixglExecutable" - "wraparound" "wraparoundArgs" + "nixglArgs" + "nixglVariant" + "nixglExecutable" + "wraparound" + "wraparoundArgs" ]) ]; } diff --git a/lib/fetchers/fetch-internet-archive/default.nix b/lib/fetchers/fetch-internet-archive/default.nix index ba96a68f..a79ddf96 100644 --- a/lib/fetchers/fetch-internet-archive/default.nix +++ b/lib/fetchers/fetch-internet-archive/default.nix @@ -1,27 +1,20 @@ { stdenvNoCC, lib, fetchzip, fetchurl, curl }: -{ - id, - file ? "", - formats ? [ ], - hash ? "", - name ? "internet-archive-${id}", +{ id, file ? "", formats ? [ ], hash ? "", name ? "internet-archive-${id}", }@args: let isFormatIndiciated = formats != [ ]; - url = - if isFormatIndiciated - then "https://archive.org/compress/${lib.escapeURL id}/formats=${lib.concatStringsSep "," formats}" - else "https://archive.org/download/${lib.escapeURL id}/${lib.escapeURL file}"; + url = if isFormatIndiciated then + "https://archive.org/compress/${lib.escapeURL id}/formats=${ + lib.concatStringsSep "," formats + }" + else + "https://archive.org/download/${lib.escapeURL id}/${lib.escapeURL file}"; - args' = lib.removeAttrs args [ "id" "file" "formats" ] // { - inherit url hash name; - }; + args' = lib.removeAttrs args [ "id" "file" "formats" ] // { + inherit url hash name; + }; - fetcher = - if isFormatIndiciated - then fetchzip - else fetchurl; -in - fetcher args' + fetcher = if isFormatIndiciated then fetchzip else fetchurl; +in fetcher args' diff --git a/lib/fetchers/fetch-ugee-driver/default.nix b/lib/fetchers/fetch-ugee-driver/default.nix index 6a9da63b..05905d54 100644 --- a/lib/fetchers/fetch-ugee-driver/default.nix +++ b/lib/fetchers/fetch-ugee-driver/default.nix @@ -1,15 +1,8 @@ { fetchzip, lib }: -{ - fileId, - pid, - ext ? "gz", - ... -}@args: +{ fileId, pid, ext ? "gz", ... }@args: -let - args' = lib.removeAttrs args [ "fileId" "pid" "ext" ]; -in -fetchzip (args' // { +let args' = lib.removeAttrs args [ "fileId" "pid" "ext" ]; +in fetchzip (args' // { url = "https://www.ugee.com/download/file/id/${fileId}/pid/${pid}/ext/${ext}"; }) diff --git a/lib/flake.nix b/lib/flake.nix index 95f8196a..09c3ae6c 100644 --- a/lib/flake.nix +++ b/lib/flake.nix @@ -1,7 +1,7 @@ # No, this is not a flake of the library set, it is a library subset for # flake-related shtick. This should be used VERY RARELY in most parts of the -# configuration because they are set up to be usable both in flakes- and -# non-flakes-enabled environment. +# configuration because they are set up to be usable both in flakes and +# flake-less environment. # # Take note it has a very strict design constraint of not relying on the # `inputs` attribute of the flake output. Instead, we're relying on the @@ -22,6 +22,5 @@ rec { fetchTree = metadata: inputName: builtins.fetchTree metadata.nodes.${inputName}.locked; - fetchInput = metadata: inputName: - (fetchTree metadata inputName).outPath; + fetchInput = metadata: inputName: (fetchTree metadata inputName).outPath; } diff --git a/lib/math.nix b/lib/math.nix index ef868753..7410ade6 100644 --- a/lib/math.nix +++ b/lib/math.nix @@ -11,8 +11,7 @@ rec { abs (1 / 5) => 0.2 */ - abs = number: - if number < 0 then -(number) else number; + abs = number: if number < 0 then -(number) else number; /* Exponentiates the given base with the exponent. Example: @@ -28,10 +27,10 @@ rec { let absValue = abs exponent; iter = product: counter: maxCount: - if counter > maxCount - then product - else iter (product * base) (counter + 1) maxCount; + if counter > maxCount then + product + else + iter (product * base) (counter + 1) maxCount; value = iter 1 1 absValue; - in - if exponent < 0 then (1 / value) else value; + in if exponent < 0 then (1 / value) else value; } diff --git a/lib/trivial.nix b/lib/trivial.nix index 82f0f084..8ebb88b0 100644 --- a/lib/trivial.nix +++ b/lib/trivial.nix @@ -23,7 +23,7 @@ rec { */ countAttrs = pred: attrs: lib.count (attr: pred attr.name attr.value) - (lib.mapAttrsToList lib.nameValuePair attrs); + (lib.mapAttrsToList lib.nameValuePair attrs); /* Filters and groups the attribute set into two separate attribute where it either accepted or denied from a given predicate function. @@ -33,14 +33,15 @@ rec { => { ok = { a = 4; }; notOk = { b = 2; c = 6; }; } */ filterAttrs' = f: attrs: - lib.foldlAttrs (acc: name: value: let - isOk = f name value; - in { - ok = acc.ok // lib.optionalAttrs isOk { ${name} = value; }; - notOk = acc.notOk // lib.optionalAttrs (!isOk) { ${name} = value; }; - }) - { ok = { }; notOk = { }; } - attrs; + lib.foldlAttrs (acc: name: value: + let isOk = f name value; + in { + ok = acc.ok // lib.optionalAttrs isOk { ${name} = value; }; + notOk = acc.notOk // lib.optionalAttrs (!isOk) { ${name} = value; }; + }) { + ok = { }; + notOk = { }; + } attrs; /* Convenient function for converting bits to bytes. @@ -87,8 +88,7 @@ rec { r = -27; q = -30; }; - in - prefixes.${c}; + in prefixes.${c}; /* Gives the multiplier for the metric units. @@ -99,8 +99,7 @@ rec { metricPrefixMultiplier "G" => 1000000000 */ - metricPrefixMultiplier = c: - self.math.pow 10 (SIPrefixExponent c); + metricPrefixMultiplier = c: self.math.pow 10 (SIPrefixExponent c); /* Gives the exponent with the associated binary prefix. @@ -126,8 +125,7 @@ rec { M = 20; K = 10; }; - in - prefixes.${c}; + in prefixes.${c}; /* Gives the multiplier for the given byte unit. Essentially returns the value in number of bytes. @@ -139,8 +137,7 @@ rec { binaryPrefixMultiplier "G" => 1.099511628×10¹² */ - binaryPrefixMultiplier = c: - self.math.pow 2 (binaryPrefixExponent c); + binaryPrefixMultiplier = c: self.math.pow 2 (binaryPrefixExponent c); /* Parse the given string containing the size into its appropriate value. Returns the value in number of bytes. @@ -157,37 +154,37 @@ rec { */ parseBytesSizeIntoInt = str: let - matches = builtins.match "([[:digit:]]+)[[:space:]]*([[:alpha:]]{1})(i?[B|b])" str; + matches = + builtins.match "([[:digit:]]+)[[:space:]]*([[:alpha:]]{1})(i?[B|b])" + str; numeral = lib.toInt (lib.lists.head matches); prefix = lib.lists.elemAt matches 1; suffix = lib.lists.last matches; isBinary = lib.hasPrefix "i" suffix; - multiplier = - let - multiplierFn = if isBinary then binaryPrefixMultiplier else metricPrefixMultiplier; - in - multiplierFn prefix; + multiplier = let + multiplierFn = + if isBinary then binaryPrefixMultiplier else metricPrefixMultiplier; + in multiplierFn prefix; bitDivider = if lib.hasSuffix "b" suffix then 8 else 1; - in - numeral * multiplier / bitDivider; + in numeral * multiplier / bitDivider; - /* - Given an attrset of unit size object, return the size in bytes. + /* Given an attrset of unit size object, return the size in bytes. - Example: - unitsToInt { size = 4; prefix = "G"; type = "binary"; } - => 4294967296 + Example: + unitsToInt { size = 4; prefix = "G"; type = "binary"; } + => 4294967296 - unitsToInt { size = 4; prefix = "G"; type = "metric"; } - => 4000000000 + unitsToInt { size = 4; prefix = "G"; type = "metric"; } + => 4000000000 */ unitsToInt = { size, prefix, type ? "binary" }: let - multiplierFn = - if type == "binary" then binaryPrefixMultiplier - else if type == "metric" then metricPrefixMultiplier - else builtins.throw "no multiplier type ${type}"; - in - size * (multiplierFn prefix); + multiplierFn = if type == "binary" then + binaryPrefixMultiplier + else if type == "metric" then + metricPrefixMultiplier + else + builtins.throw "no multiplier type ${type}"; + in size * (multiplierFn prefix); } diff --git a/lib/utils/nixos.nix b/lib/utils/nixos.nix index e35b9df8..3a9a9be9 100644 --- a/lib/utils/nixos.nix +++ b/lib/utils/nixos.nix @@ -3,10 +3,8 @@ { # This is only used for home-manager users without a NixOS user counterpart. mapHomeManagerUser = user: settings: - let - homeDirectory = "/home/${user}"; - in - ({ lib, ... }: { + let homeDirectory = "/home/${user}"; + in ({ lib, ... }: { home-manager.users."${user}" = { ... }: { imports = [ {