nix/home-manager/default.nix (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | {
config,
pkgs,
lib,
...
}:
let
inherit (lib)
mkEnableOption
mkPackageOption
mkOption
mkIf
types
literalExpression
filterAttrs
hasPrefix
hasInfix
mapAttrs'
removePrefix
nameValuePair
;
cfg = config.programs.scriptura;
in
{
options.programs.scriptura = {
enable = mkEnableOption "scriptura";
package = mkPackageOption pkgs "scriptura" { };
settings = mkOption {
default = { };
type = types.attrsOf types.str;
example = literalExpression ''
{
SCRIPTURA_ROOT = "''${config.home.homeDirectory}/.sd";
SCRIPTURA_EDITOR = "nvim";
SCRIPTURA_CAT = "lolcat";
}
'';
description = ''
Scriptura configuration, for options take a look at the
[documentation](https://git.alin.ovh/scriptura).
'';
};
shellAliases = mkOption {
default = { };
type = types.attrsOf types.str;
example = literalExpression ''
{
sf = "scriptura run";
sfm = "scriptura";
}
'';
description = ''
Shell aliases for the scriptura command. This makes it easier to use
shorter aliases like `sf` and `sfm`.
'';
};
};
config = mkIf cfg.enable {
home.packages = [ cfg.package ];
home.sessionVariables =
let
scripturaSettings = filterAttrs (name: value: hasPrefix "SCRIPTURA_" name) cfg.settings;
sdSettings = filterAttrs (name: value: hasPrefix "SD_" name) cfg.settings;
sdConverted = mapAttrs' (
name: value:
let
suffix = removePrefix "SD_" name;
in
nameValuePair ("SCRIPTURA_" + suffix) value
) sdSettings;
unprefixed = filterAttrs (name: value: !(hasInfix "_" name)) cfg.settings;
unprefixedConverted = mapAttrs' (name: value: nameValuePair ("SCRIPTURA_" + name) value) unprefixed;
in
unprefixedConverted // sdConverted // scripturaSettings;
home.shellAliases = cfg.shellAliases;
};
}
|