1
1
mirror of https://github.com/LnL7/nix-darwin.git synced 2024-09-11 12:49:18 +03:00

Merge pull request #102 from peel/f-fonts-module

initialise fonts module
This commit is contained in:
Daiderd Jordan 2018-10-11 19:10:42 +02:00 committed by GitHub
commit 166560ca76
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 78 additions and 0 deletions

View File

@ -131,6 +131,7 @@ Whether to activate system at boot time.
## Modules
- [`environment`](https://github.com/LnL7/nix-darwin/blob/master/modules/environment)
- [`fonts`](https://github.com/LnL7/nix-darwin/blob/master/modules/fonts)
- [`launchd.daemons`](https://github.com/LnL7/nix-darwin/blob/master/modules/launchd/launchd.nix)
- [`launchd.envVariables`](https://github.com/LnL7/nix-darwin/blob/master/modules/launchd)
- [`launchd.user.agents`](https://github.com/LnL7/nix-darwin/blob/master/modules/launchd/launchd.nix)

View File

@ -43,6 +43,7 @@ let
./modules/nix/nix-info.nix
./modules/nix/nixpkgs.nix
./modules/environment
./modules/fonts
./modules/launchd
./modules/services/activate-system
./modules/services/buildkite-agent.nix

57
modules/fonts/default.nix Normal file
View File

@ -0,0 +1,57 @@
{ config, lib, pkgs, ... }:
with lib;
with builtins;
let
cfg = config.fonts;
readDirsRec = path: let
home = readDir path;
list = mapAttrsToList (name: type:
let newPath = "${path}/${name}";
in if (type == "directory" || type == "symlink") && !(isFont name) then readDirsRec newPath else [ newPath ]) home;
in flatten list;
isFont = name: let
fontExt = [ ".ttf" ".otf" ];
hasExt = exts: name: foldl' (acc: ext: (hasSuffix ext name) || acc) false exts;
in hasExt fontExt name;
fontFiles = dir: filter isFont (readDirsRec dir);
libraryLink = font: "ln -fn '/run/current-system/sw/share/fonts/${baseNameOf font}' '/Library/Fonts/${baseNameOf font}'";
outLink = font: "ln -sfn -t $out/share/fonts/ '${font}'";
fontLinks = link: dir: concatMapStringsSep "\n" link (fontFiles dir);
systemFontsDir = pkgs.runCommand "systemFontsDir" {} ''
mkdir -p "$out/share/fonts"
echo ${toString config.fonts.fonts}
${concatMapStringsSep "\n" (fontLinks outLink) config.fonts.fonts}
'';
in {
options = {
fonts = {
enableFontDir = mkOption {
default = false;
description = ''
Whether to enable font directory management and link all fonts in <filename>/run/current-system/sw/share/fonts</filename>.
Important: removes all manually-added fonts.
'';
};
fonts = mkOption {
type = types.listOf types.path;
default = [];
example = literalExample "[ pkgs.dejavu_fonts ]";
description = "List of primary font paths.";
};
};
};
config = {
system.activationScripts.fonts.text = "" + optionalString cfg.enableFontDir ''
# Set up fonts.
echo "resetting fonts..." >&2
fontrestore default -n 2>&1 | grep -o '/Library/Fonts/.*' | tr '\n' '\0' | xargs -0 rm || true
echo "updating fonts..." >&2
${fontLinks libraryLink systemFontsDir}
'';
environment.systemPackages = [ systemFontsDir ];
environment.pathsToLink = [ "/share/fonts" ];
};
}

View File

@ -64,6 +64,7 @@ in
${cfg.activationScripts.time.text}
${cfg.activationScripts.networking.text}
${cfg.activationScripts.keyboard.text}
${cfg.activationScripts.fonts.text}
${cfg.activationScripts.postActivation.text}

View File

@ -114,6 +114,7 @@ let
tests.system-path-fish = makeTest ./tests/system-path-fish.nix;
tests.system-shells = makeTest ./tests/system-shells.nix;
tests.users-groups = makeTest ./tests/users-groups.nix;
tests.fonts = makeTest ./tests/fonts.nix;
}
// (mapTestOn (packagePlatforms packageSet));

17
tests/fonts.nix Normal file
View File

@ -0,0 +1,17 @@
{ config, pkgs, ... }:
let
fonts = pkgs.runCommand "fonts-0.0.0" {} "mkdir -p $out";
in {
fonts = {
enableFontDir = true;
fonts = [ pkgs.dejavu_fonts ];
};
test = ''
echo checking installed fonts >&2
grep -o "fontrestore default -n" ${config.out}/activate
grep -o "ln -fn '/run/current-system/sw/share/fonts/DejaVuSans.ttf' '/Library/Fonts/DejaVuSans.ttf'" ${config.out}/activate
'';
}