mirror of
https://github.com/nix-community/home-manager.git
synced 2025-11-08 11:36:05 +01:00
treewide: remove with lib (#6512)
* nixos: remove with lib * nix-darwin: remove with lib * home-manager: remove with lib * modules/accounts: remove with lib * modules/config: remove with lib * modules/i18n: remove with lib * modules/misc: remove with lib * modules: remove with lib * modules/targets: remove with lib * tests/modules/firefox: remove with lib * tests/modules/services: remove with lib
This commit is contained in:
parent
83f4629364
commit
95711f9266
62 changed files with 618 additions and 666 deletions
|
|
@ -16,12 +16,12 @@ let
|
|||
in runCommand "home-manager" {
|
||||
preferLocalBuild = true;
|
||||
nativeBuildInputs = [ gettext ];
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
mainProgram = "home-manager";
|
||||
description = "A user environment configurator";
|
||||
maintainers = [ maintainers.rycee ];
|
||||
platforms = platforms.unix;
|
||||
license = licenses.mit;
|
||||
maintainers = [ lib.maintainers.rycee ];
|
||||
platforms = lib.platforms.unix;
|
||||
license = lib.licenses.mit;
|
||||
};
|
||||
} ''
|
||||
install -v -D -m755 ${./home-manager} $out/bin/home-manager
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
{ config, lib, ... }:
|
||||
let
|
||||
inherit (lib) mkOption types;
|
||||
|
||||
cfg = config.accounts.calendar;
|
||||
|
||||
|
|
@ -70,7 +68,7 @@ let
|
|||
};
|
||||
};
|
||||
|
||||
calendarOpts = { name, config, ... }: {
|
||||
calendarOpts = { name, ... }: {
|
||||
options = {
|
||||
name = mkOption {
|
||||
type = types.str;
|
||||
|
|
@ -125,7 +123,7 @@ in {
|
|||
type = types.str;
|
||||
example = ".calendar";
|
||||
apply = p:
|
||||
if hasPrefix "/" p then p else "${config.home.homeDirectory}/${p}";
|
||||
if lib.hasPrefix "/" p then p else "${config.home.homeDirectory}/${p}";
|
||||
description = ''
|
||||
The base directory in which to save calendars. May be a
|
||||
relative path, in which case it is relative the home
|
||||
|
|
@ -144,15 +142,15 @@ in {
|
|||
description = "List of calendars.";
|
||||
};
|
||||
};
|
||||
config = mkIf (cfg.accounts != { }) {
|
||||
config = lib.mkIf (cfg.accounts != { }) {
|
||||
assertions = let
|
||||
primaries =
|
||||
catAttrs "name" (filter (a: a.primary) (attrValues cfg.accounts));
|
||||
primaries = lib.catAttrs "name"
|
||||
(lib.filter (a: a.primary) (lib.attrValues cfg.accounts));
|
||||
in [{
|
||||
assertion = length primaries <= 1;
|
||||
assertion = lib.length primaries <= 1;
|
||||
message = "Must have at most one primary calendar account but found "
|
||||
+ toString (length primaries) + ", namely "
|
||||
+ concatStringsSep ", " primaries;
|
||||
+ toString (lib.length primaries) + ", namely "
|
||||
+ lib.concatStringsSep ", " primaries;
|
||||
}];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{ config, lib, ... }:
|
||||
|
||||
let
|
||||
inherit (lib) mkOption types;
|
||||
|
||||
cfg = config.accounts.contact;
|
||||
|
||||
|
|
@ -78,7 +77,7 @@ let
|
|||
};
|
||||
};
|
||||
|
||||
contactOpts = { name, config, ... }: {
|
||||
contactOpts = { name, ... }: {
|
||||
options = {
|
||||
name = mkOption {
|
||||
type = types.str;
|
||||
|
|
@ -114,7 +113,7 @@ in {
|
|||
basePath = mkOption {
|
||||
type = types.str;
|
||||
apply = p:
|
||||
if hasPrefix "/" p then p else "${config.home.homeDirectory}/${p}";
|
||||
if lib.hasPrefix "/" p then p else "${config.home.homeDirectory}/${p}";
|
||||
description = ''
|
||||
The base directory in which to save contacts. May be a
|
||||
relative path, in which case it is relative the home
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{ config, lib, ... }:
|
||||
|
||||
let
|
||||
inherit (lib) mkDefault mkIf mkOption types;
|
||||
|
||||
cfg = config.accounts.email;
|
||||
|
||||
|
|
@ -49,7 +48,7 @@ let
|
|||
default = ''
|
||||
--
|
||||
'';
|
||||
example = literalExpression ''
|
||||
example = lib.literalExpression ''
|
||||
~*~*~*~*~*~*~*~*~*~*~*~
|
||||
'';
|
||||
description = ''
|
||||
|
|
@ -60,7 +59,7 @@ let
|
|||
command = mkOption {
|
||||
type = with types; nullOr path;
|
||||
default = null;
|
||||
example = literalExpression ''
|
||||
example = lib.literalExpression ''
|
||||
pkgs.writeScript "signature" "echo This is my signature"
|
||||
'';
|
||||
description = "A command that generates a signature.";
|
||||
|
|
@ -308,7 +307,7 @@ let
|
|||
passwordCommand = mkOption {
|
||||
type = types.nullOr (types.either types.str (types.listOf types.str));
|
||||
default = null;
|
||||
apply = p: if isString p then splitString " " p else p;
|
||||
apply = p: if lib.isString p then lib.splitString " " p else p;
|
||||
example = "secret-tool lookup email me@example.org";
|
||||
description = ''
|
||||
A command, which when run writes the account password on
|
||||
|
|
@ -407,10 +406,10 @@ let
|
|||
};
|
||||
};
|
||||
|
||||
config = mkMerge [
|
||||
config = lib.mkMerge [
|
||||
{
|
||||
name = name;
|
||||
maildir = mkOptionDefault { path = "${name}"; };
|
||||
maildir = lib.mkOptionDefault { path = "${name}"; };
|
||||
}
|
||||
|
||||
(mkIf (config.flavor == "yandex.com") {
|
||||
|
|
@ -526,7 +525,7 @@ in {
|
|||
default = "${config.home.homeDirectory}/Maildir";
|
||||
defaultText = "Maildir";
|
||||
apply = p:
|
||||
if hasPrefix "/" p then p else "${config.home.homeDirectory}/${p}";
|
||||
if lib.hasPrefix "/" p then p else "${config.home.homeDirectory}/${p}";
|
||||
description = ''
|
||||
The base directory for account maildir directories. May be a
|
||||
relative path (e.g. the user setting this value as "MyMaildir"),
|
||||
|
|
@ -545,13 +544,14 @@ in {
|
|||
config = mkIf (cfg.accounts != { }) {
|
||||
assertions = [
|
||||
(let
|
||||
primaries =
|
||||
catAttrs "name" (filter (a: a.primary) (attrValues cfg.accounts));
|
||||
primaries = lib.catAttrs "name"
|
||||
(lib.filter (a: a.primary) (lib.attrValues cfg.accounts));
|
||||
in {
|
||||
assertion = length primaries == 1;
|
||||
assertion = lib.length primaries == 1;
|
||||
message = "Must have exactly one primary mail account but found "
|
||||
+ toString (length primaries) + optionalString (length primaries > 1)
|
||||
(", namely " + concatStringsSep ", " primaries);
|
||||
+ toString (lib.length primaries)
|
||||
+ lib.optionalString (lib.length primaries > 1)
|
||||
(", namely " + lib.concatStringsSep ", " primaries);
|
||||
})
|
||||
];
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
inherit (lib) mkDefault mkEnableOption mkOption types;
|
||||
|
||||
cfg = config.home.pointerCursor;
|
||||
|
||||
|
|
@ -10,7 +9,7 @@ let
|
|||
options = {
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
example = literalExpression "pkgs.vanilla-dmz";
|
||||
example = lib.literalExpression "pkgs.vanilla-dmz";
|
||||
description = "Package providing the cursor theme.";
|
||||
};
|
||||
|
||||
|
|
@ -64,8 +63,9 @@ let
|
|||
};
|
||||
};
|
||||
|
||||
cursorPath = "${cfg.package}/share/icons/${escapeShellArg cfg.name}/cursors/${
|
||||
escapeShellArg cfg.x11.defaultCursor
|
||||
cursorPath =
|
||||
"${cfg.package}/share/icons/${lib.escapeShellArg cfg.name}/cursors/${
|
||||
lib.escapeShellArg cfg.x11.defaultCursor
|
||||
}";
|
||||
|
||||
defaultIndexThemePackage = pkgs.writeTextFile {
|
||||
|
|
@ -83,25 +83,25 @@ let
|
|||
};
|
||||
|
||||
in {
|
||||
meta.maintainers = [ maintainers.league ];
|
||||
meta.maintainers = [ lib.maintainers.league ];
|
||||
|
||||
imports = [
|
||||
(mkAliasOptionModule [ "xsession" "pointerCursor" "package" ] [
|
||||
(lib.mkAliasOptionModule [ "xsession" "pointerCursor" "package" ] [
|
||||
"home"
|
||||
"pointerCursor"
|
||||
"package"
|
||||
])
|
||||
(mkAliasOptionModule [ "xsession" "pointerCursor" "name" ] [
|
||||
(lib.mkAliasOptionModule [ "xsession" "pointerCursor" "name" ] [
|
||||
"home"
|
||||
"pointerCursor"
|
||||
"name"
|
||||
])
|
||||
(mkAliasOptionModule [ "xsession" "pointerCursor" "size" ] [
|
||||
(lib.mkAliasOptionModule [ "xsession" "pointerCursor" "size" ] [
|
||||
"home"
|
||||
"pointerCursor"
|
||||
"size"
|
||||
])
|
||||
(mkAliasOptionModule [ "xsession" "pointerCursor" "defaultCursor" ] [
|
||||
(lib.mkAliasOptionModule [ "xsession" "pointerCursor" "defaultCursor" ] [
|
||||
"home"
|
||||
"pointerCursor"
|
||||
"x11"
|
||||
|
|
@ -109,8 +109,8 @@ in {
|
|||
])
|
||||
|
||||
({ ... }: {
|
||||
warnings = optional (any (x:
|
||||
getAttrFromPath
|
||||
warnings = lib.optional (lib.any (x:
|
||||
lib.getAttrFromPath
|
||||
([ "xsession" "pointerCursor" ] ++ [ x ] ++ [ "isDefined" ])
|
||||
options) [ "package" "name" "size" "defaultCursor" ]) ''
|
||||
The option `xsession.pointerCursor` has been merged into `home.pointerCursor` and will be removed
|
||||
|
|
@ -144,10 +144,11 @@ in {
|
|||
};
|
||||
};
|
||||
|
||||
config = mkIf (cfg != null) (mkMerge [
|
||||
config = lib.mkIf (cfg != null) (lib.mkMerge [
|
||||
{
|
||||
assertions = [
|
||||
(hm.assertions.assertPlatform "home.pointerCursor" pkgs platforms.linux)
|
||||
(lib.hm.assertions.assertPlatform "home.pointerCursor" pkgs
|
||||
lib.platforms.linux)
|
||||
];
|
||||
|
||||
home.packages = [ cfg.package defaultIndexThemePackage ];
|
||||
|
|
@ -178,7 +179,7 @@ in {
|
|||
"${cfg.package}/share/icons/${cfg.name}";
|
||||
}
|
||||
|
||||
(mkIf cfg.x11.enable {
|
||||
(lib.mkIf cfg.x11.enable {
|
||||
xsession.profileExtra = ''
|
||||
${pkgs.xorg.xsetroot}/bin/xsetroot -xcf ${cursorPath} ${
|
||||
toString cfg.size
|
||||
|
|
@ -191,11 +192,11 @@ in {
|
|||
};
|
||||
})
|
||||
|
||||
(mkIf cfg.gtk.enable {
|
||||
(lib.mkIf cfg.gtk.enable {
|
||||
gtk.cursorTheme = mkDefault { inherit (cfg) package name size; };
|
||||
})
|
||||
|
||||
(mkIf cfg.hyprcursor.enable {
|
||||
(lib.mkIf cfg.hyprcursor.enable {
|
||||
home.sessionVariables = {
|
||||
HYPRCURSOR_THEME = cfg.name;
|
||||
HYPRCURSOR_SIZE =
|
||||
|
|
@ -203,7 +204,7 @@ in {
|
|||
};
|
||||
})
|
||||
|
||||
(mkIf cfg.sway.enable {
|
||||
(lib.mkIf cfg.sway.enable {
|
||||
wayland.windowManager.sway = {
|
||||
config = {
|
||||
seat = {
|
||||
|
|
|
|||
|
|
@ -17,8 +17,6 @@
|
|||
|
||||
{ lib, pkgs, config, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
inherit (config.i18n) glibcLocales;
|
||||
|
||||
|
|
@ -27,19 +25,19 @@ let
|
|||
archivePath = "${glibcLocales}/lib/locale/locale-archive";
|
||||
|
||||
# lookup the version of glibcLocales and set the appropriate environment vars
|
||||
localeVars = if versionAtLeast version "2.27" then {
|
||||
localeVars = if lib.versionAtLeast version "2.27" then {
|
||||
LOCALE_ARCHIVE_2_27 = archivePath;
|
||||
} else if versionAtLeast version "2.11" then {
|
||||
} else if lib.versionAtLeast version "2.11" then {
|
||||
LOCALE_ARCHIVE_2_11 = archivePath;
|
||||
} else
|
||||
{ };
|
||||
|
||||
in {
|
||||
meta.maintainers = with maintainers; [ midchildan ];
|
||||
meta.maintainers = with lib.maintainers; [ midchildan ];
|
||||
|
||||
options = {
|
||||
i18n.glibcLocales = mkOption {
|
||||
type = types.path;
|
||||
i18n.glibcLocales = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
description = ''
|
||||
Customized `glibcLocales` package providing
|
||||
the `LOCALE_ARCHIVE_*` environment variable.
|
||||
|
|
@ -50,7 +48,7 @@ in {
|
|||
will be set to {var}`i18n.glibcLocales` from the
|
||||
system configuration.
|
||||
'';
|
||||
example = literalExpression ''
|
||||
example = lib.literalExpression ''
|
||||
pkgs.glibcLocales.override {
|
||||
allLocales = false;
|
||||
locales = [ "en_US.UTF-8/UTF-8" ];
|
||||
|
|
@ -58,11 +56,11 @@ in {
|
|||
'';
|
||||
# NB. See nixos/default.nix for NixOS default.
|
||||
default = pkgs.glibcLocales;
|
||||
defaultText = literalExpression "pkgs.glibcLocales";
|
||||
defaultText = lib.literalExpression "pkgs.glibcLocales";
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf pkgs.stdenv.hostPlatform.isLinux {
|
||||
config = lib.mkIf pkgs.stdenv.hostPlatform.isLinux {
|
||||
# For shell sessions.
|
||||
home.sessionVariables = localeVars;
|
||||
|
||||
|
|
|
|||
|
|
@ -5,16 +5,14 @@
|
|||
# Extra arguments passed to specialArgs.
|
||||
, extraSpecialArgs ? { } }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
collectFailed = cfg:
|
||||
map (x: x.message) (filter (x: !x.assertion) cfg.assertions);
|
||||
map (x: x.message) (lib.filter (x: !x.assertion) cfg.assertions);
|
||||
|
||||
showWarnings = res:
|
||||
let f = w: x: builtins.trace "[1;31mwarning: ${w}[0m" x;
|
||||
in fold f res res.config.warnings;
|
||||
in lib.fold f res res.config.warnings;
|
||||
|
||||
extendedLib = import ./lib/stdlib-extended.nix lib;
|
||||
|
||||
|
|
@ -32,7 +30,7 @@ let
|
|||
moduleChecks = raw:
|
||||
showWarnings (let
|
||||
failed = collectFailed raw.config;
|
||||
failedStr = concatStringsSep "\n" (map (x: "- ${x}") failed);
|
||||
failedStr = lib.concatStringsSep "\n" (map (x: "- ${x}") failed);
|
||||
in if failed == [ ] then
|
||||
raw
|
||||
else
|
||||
|
|
@ -52,8 +50,8 @@ let
|
|||
activation-script = module.config.home.activationPackage;
|
||||
|
||||
newsDisplay = rawModule.config.news.display;
|
||||
newsEntries = sort (a: b: a.time > b.time)
|
||||
(filter (a: a.condition) rawModule.config.news.entries);
|
||||
newsEntries = lib.sort (a: b: a.time > b.time)
|
||||
(lib.filter (a: a.condition) rawModule.config.news.entries);
|
||||
|
||||
inherit (module._module.args) pkgs;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
{ pkgs, config, lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = filterAttrs (n: f: f.enable) config.home.file;
|
||||
cfg = lib.filterAttrs (n: f: f.enable) config.home.file;
|
||||
|
||||
homeDirectory = config.home.homeDirectory;
|
||||
|
||||
|
|
@ -25,14 +23,14 @@ in
|
|||
|
||||
{
|
||||
options = {
|
||||
home.file = mkOption {
|
||||
home.file = lib.mkOption {
|
||||
description = "Attribute set of files to link into the user home.";
|
||||
default = {};
|
||||
type = fileType "home.file" "{env}`HOME`" homeDirectory;
|
||||
};
|
||||
|
||||
home-files = mkOption {
|
||||
type = types.package;
|
||||
home-files = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
internal = true;
|
||||
description = "Package to contain all home files";
|
||||
};
|
||||
|
|
@ -42,11 +40,11 @@ in
|
|||
assertions = [(
|
||||
let
|
||||
dups =
|
||||
attrNames
|
||||
(filterAttrs (n: v: v > 1)
|
||||
(foldAttrs (acc: v: acc + v) 0
|
||||
(mapAttrsToList (n: v: { ${v.target} = 1; }) cfg)));
|
||||
dupsStr = concatStringsSep ", " dups;
|
||||
lib.attrNames
|
||||
(lib.filterAttrs (n: v: v > 1)
|
||||
(lib.foldAttrs (acc: v: acc + v) 0
|
||||
(lib.mapAttrsToList (n: v: { ${v.target} = 1; }) cfg)));
|
||||
dupsStr = lib.concatStringsSep ", " dups;
|
||||
in {
|
||||
assertion = dups == [];
|
||||
message = ''
|
||||
|
|
@ -64,22 +62,22 @@ in
|
|||
lib.file.mkOutOfStoreSymlink = path:
|
||||
let
|
||||
pathStr = toString path;
|
||||
name = hm.strings.storeFileName (baseNameOf pathStr);
|
||||
name = lib.hm.strings.storeFileName (baseNameOf pathStr);
|
||||
in
|
||||
pkgs.runCommandLocal name {} ''ln -s ${escapeShellArg pathStr} $out'';
|
||||
pkgs.runCommandLocal name {} ''ln -s ${lib.escapeShellArg pathStr} $out'';
|
||||
|
||||
# This verifies that the links we are about to create will not
|
||||
# overwrite an existing file.
|
||||
home.activation.checkLinkTargets = hm.dag.entryBefore ["writeBoundary"] (
|
||||
home.activation.checkLinkTargets = lib.hm.dag.entryBefore ["writeBoundary"] (
|
||||
let
|
||||
# Paths that should be forcibly overwritten by Home Manager.
|
||||
# Caveat emptor!
|
||||
forcedPaths =
|
||||
concatMapStringsSep " " (p: ''"$HOME"/${escapeShellArg p}'')
|
||||
(mapAttrsToList (n: v: v.target)
|
||||
(filterAttrs (n: v: v.force) cfg));
|
||||
lib.concatMapStringsSep " " (p: ''"$HOME"/${lib.escapeShellArg p}'')
|
||||
(lib.mapAttrsToList (n: v: v.target)
|
||||
(lib.filterAttrs (n: v: v.force) cfg));
|
||||
|
||||
storeDir = escapeShellArg builtins.storeDir;
|
||||
storeDir = lib.escapeShellArg builtins.storeDir;
|
||||
|
||||
check = pkgs.substituteAll {
|
||||
src = ./files/check-link-targets.sh;
|
||||
|
|
@ -118,7 +116,7 @@ in
|
|||
# and a failure during the intermediate state FA ∩ FB will not
|
||||
# result in lost links because this set of links are in both the
|
||||
# source and target generation.
|
||||
home.activation.linkGeneration = hm.dag.entryAfter ["writeBoundary"] (
|
||||
home.activation.linkGeneration = lib.hm.dag.entryAfter ["writeBoundary"] (
|
||||
let
|
||||
link = pkgs.writeShellScript "link" ''
|
||||
${config.lib.bash.initHomeManagerLib}
|
||||
|
|
@ -151,7 +149,7 @@ in
|
|||
|
||||
# A symbolic link whose target path matches this pattern will be
|
||||
# considered part of a Home Manager generation.
|
||||
homeFilePattern="$(readlink -e ${escapeShellArg builtins.storeDir})/*-home-manager-files/*"
|
||||
homeFilePattern="$(readlink -e ${lib.escapeShellArg builtins.storeDir})/*-home-manager-files/*"
|
||||
|
||||
newGenFiles="$1"
|
||||
shift 1
|
||||
|
|
@ -216,9 +214,9 @@ in
|
|||
''
|
||||
);
|
||||
|
||||
home.activation.checkFilesChanged = hm.dag.entryBefore ["linkGeneration"] (
|
||||
home.activation.checkFilesChanged = lib.hm.dag.entryBefore ["linkGeneration"] (
|
||||
let
|
||||
homeDirArg = escapeShellArg homeDirectory;
|
||||
homeDirArg = lib.escapeShellArg homeDirectory;
|
||||
in ''
|
||||
function _cmp() {
|
||||
if [[ -d $1 && -d $2 ]]; then
|
||||
|
|
@ -228,31 +226,31 @@ in
|
|||
fi
|
||||
}
|
||||
declare -A changedFiles
|
||||
'' + concatMapStrings (v:
|
||||
'' + lib.concatMapStrings (v:
|
||||
let
|
||||
sourceArg = escapeShellArg (sourceStorePath v);
|
||||
targetArg = escapeShellArg v.target;
|
||||
sourceArg = lib.escapeShellArg (sourceStorePath v);
|
||||
targetArg = lib.escapeShellArg v.target;
|
||||
in ''
|
||||
_cmp ${sourceArg} ${homeDirArg}/${targetArg} \
|
||||
&& changedFiles[${targetArg}]=0 \
|
||||
|| changedFiles[${targetArg}]=1
|
||||
'') (filter (v: v.onChange != "") (attrValues cfg))
|
||||
'') (lib.filter (v: v.onChange != "") (lib.attrValues cfg))
|
||||
+ ''
|
||||
unset -f _cmp
|
||||
''
|
||||
);
|
||||
|
||||
home.activation.onFilesChange = hm.dag.entryAfter ["linkGeneration"] (
|
||||
concatMapStrings (v: ''
|
||||
if (( ''${changedFiles[${escapeShellArg v.target}]} == 1 )); then
|
||||
home.activation.onFilesChange = lib.hm.dag.entryAfter ["linkGeneration"] (
|
||||
lib.concatMapStrings (v: ''
|
||||
if (( ''${changedFiles[${lib.escapeShellArg v.target}]} == 1 )); then
|
||||
if [[ -v DRY_RUN || -v VERBOSE ]]; then
|
||||
echo "Running onChange hook for" ${escapeShellArg v.target}
|
||||
echo "Running onChange hook for" ${lib.escapeShellArg v.target}
|
||||
fi
|
||||
if [[ ! -v DRY_RUN ]]; then
|
||||
${v.onChange}
|
||||
fi
|
||||
fi
|
||||
'') (filter (v: v.onChange != "") (attrValues cfg))
|
||||
'') (lib.filter (v: v.onChange != "") (lib.attrValues cfg))
|
||||
);
|
||||
|
||||
# Symlink directories and files that have the right execute bit.
|
||||
|
|
@ -324,10 +322,10 @@ in
|
|||
fi
|
||||
fi
|
||||
}
|
||||
'' + concatStrings (
|
||||
mapAttrsToList (n: v: ''
|
||||
'' + lib.concatStrings (
|
||||
lib.mapAttrsToList (n: v: ''
|
||||
insertFile ${
|
||||
escapeShellArgs [
|
||||
lib.escapeShellArgs [
|
||||
(sourceStorePath v)
|
||||
v.target
|
||||
(if v.executable == null
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
inherit (lib) literalExpression mkOption types;
|
||||
|
||||
inherit (config.home) stateVersion;
|
||||
|
||||
|
|
@ -114,7 +113,7 @@ let
|
|||
layout = mkOption {
|
||||
type = with types; nullOr str;
|
||||
default =
|
||||
if versionAtLeast config.home.stateVersion "19.09"
|
||||
if lib.versionAtLeast config.home.stateVersion "19.09"
|
||||
then null
|
||||
else "us";
|
||||
defaultText = literalExpression "null";
|
||||
|
|
@ -148,7 +147,7 @@ let
|
|||
variant = mkOption {
|
||||
type = with types; nullOr str;
|
||||
default =
|
||||
if versionAtLeast config.home.stateVersion "19.09"
|
||||
if lib.versionAtLeast config.home.stateVersion "19.09"
|
||||
then null
|
||||
else "";
|
||||
defaultText = literalExpression "null";
|
||||
|
|
@ -167,10 +166,10 @@ let
|
|||
in
|
||||
|
||||
{
|
||||
meta.maintainers = [ maintainers.rycee ];
|
||||
meta.maintainers = [ lib.maintainers.rycee ];
|
||||
|
||||
imports = [
|
||||
(mkRemovedOptionModule [ "home" "sessionVariableSetter" ] ''
|
||||
(lib.mkRemovedOptionModule [ "home" "sessionVariableSetter" ] ''
|
||||
Session variables are now always set through the shell. This is
|
||||
done automatically if the shell configuration is managed by Home
|
||||
Manager. If not, then you must source the
|
||||
|
|
@ -223,7 +222,7 @@ in
|
|||
|
||||
home.keyboard = mkOption {
|
||||
type = types.nullOr keyboardSubModule;
|
||||
default = if versionAtLeast stateVersion "21.11" then null else { };
|
||||
default = if lib.versionAtLeast stateVersion "21.11" then null else { };
|
||||
defaultText = literalExpression ''
|
||||
"{ }" for state version < 21.11,
|
||||
"null" for state version ≥ 21.11
|
||||
|
|
@ -355,7 +354,7 @@ in
|
|||
home.emptyActivationPath = mkOption {
|
||||
internal = true;
|
||||
type = types.bool;
|
||||
default = versionAtLeast stateVersion "22.11";
|
||||
default = lib.versionAtLeast stateVersion "22.11";
|
||||
defaultText = literalExpression ''
|
||||
false for state version < 22.11,
|
||||
true for state version ≥ 22.11
|
||||
|
|
@ -370,7 +369,7 @@ in
|
|||
};
|
||||
|
||||
home.activation = mkOption {
|
||||
type = hm.types.dagOf types.str;
|
||||
type = lib.hm.types.dagOf types.str;
|
||||
default = {};
|
||||
example = literalExpression ''
|
||||
{
|
||||
|
|
@ -475,7 +474,7 @@ in
|
|||
'';
|
||||
};
|
||||
|
||||
home.preferXdgDirectories = mkEnableOption "" // {
|
||||
home.preferXdgDirectories = lib.mkEnableOption "" // {
|
||||
description = ''
|
||||
Whether to make programs use XDG directories whenever supported.
|
||||
'';
|
||||
|
|
@ -502,7 +501,7 @@ in
|
|||
config.home.enableNixpkgsReleaseCheck
|
||||
&& hmRelease != nixpkgsRelease;
|
||||
in
|
||||
optional releaseMismatch ''
|
||||
lib.optional releaseMismatch ''
|
||||
You are using
|
||||
|
||||
Home Manager version ${hmRelease} and
|
||||
|
|
@ -520,11 +519,11 @@ in
|
|||
'';
|
||||
|
||||
home.username =
|
||||
mkIf (versionOlder config.home.stateVersion "20.09")
|
||||
(mkDefault (builtins.getEnv "USER"));
|
||||
lib.mkIf (lib.versionOlder config.home.stateVersion "20.09")
|
||||
(lib.mkDefault (builtins.getEnv "USER"));
|
||||
home.homeDirectory =
|
||||
mkIf (versionOlder config.home.stateVersion "20.09")
|
||||
(mkDefault (builtins.getEnv "HOME"));
|
||||
lib.mkIf (lib.versionOlder config.home.stateVersion "20.09")
|
||||
(lib.mkDefault (builtins.getEnv "HOME"));
|
||||
|
||||
home.profileDirectory =
|
||||
if config.submoduleSupport.enable
|
||||
|
|
@ -540,7 +539,7 @@ in
|
|||
|
||||
home.sessionVariables =
|
||||
let
|
||||
maybeSet = n: v: optionalAttrs (v != null) { ${n} = v; };
|
||||
maybeSet = n: v: lib.optionalAttrs (v != null) { ${n} = v; };
|
||||
in
|
||||
(maybeSet "LANG" cfg.language.base)
|
||||
//
|
||||
|
|
@ -577,7 +576,7 @@ in
|
|||
|
||||
${config.lib.shell.exportAll cfg.sessionVariables}
|
||||
'' + lib.optionalString (cfg.sessionPath != [ ]) ''
|
||||
export PATH="$PATH''${PATH:+:}${concatStringsSep ":" cfg.sessionPath}"
|
||||
export PATH="$PATH''${PATH:+:}${lib.concatStringsSep ":" cfg.sessionPath}"
|
||||
'' + cfg.sessionVariablesExtra;
|
||||
};
|
||||
|
||||
|
|
@ -586,7 +585,7 @@ in
|
|||
# The entry acting as a boundary between the activation script's "check" and
|
||||
# the "write" phases. This is where we commit to attempting to actually
|
||||
# activate the configuration.
|
||||
home.activation.writeBoundary = hm.dag.entryAnywhere ''
|
||||
home.activation.writeBoundary = lib.hm.dag.entryAnywhere ''
|
||||
if [[ ! -v oldGenPath || "$oldGenPath" != "$newGenPath" ]] ; then
|
||||
_i "Creating new profile generation"
|
||||
run nix-env $VERBOSE_ARG --profile "$genProfilePath" --set "$newGenPath"
|
||||
|
|
@ -610,7 +609,7 @@ in
|
|||
# In case the user has moved from a user-install of Home Manager
|
||||
# to a submodule managed one we attempt to uninstall the
|
||||
# `home-manager-path` package if it is installed.
|
||||
home.activation.installPackages = hm.dag.entryAfter ["writeBoundary"] (
|
||||
home.activation.installPackages = lib.hm.dag.entryAfter ["writeBoundary"] (
|
||||
if config.submoduleSupport.externalPackageInstall
|
||||
then
|
||||
''
|
||||
|
|
@ -676,10 +675,10 @@ in
|
|||
_iNote "Activating %s" "${res.name}"
|
||||
${res.data}
|
||||
'';
|
||||
sortedCommands = hm.dag.topoSort cfg.activation;
|
||||
sortedCommands = lib.hm.dag.topoSort cfg.activation;
|
||||
activationCmds =
|
||||
if sortedCommands ? result then
|
||||
concatStringsSep "\n" (map mkCmd sortedCommands.result)
|
||||
lib.concatStringsSep "\n" (map mkCmd sortedCommands.result)
|
||||
else
|
||||
abort ("Dependency cycle in activation script: "
|
||||
+ builtins.toJSON sortedCommands);
|
||||
|
|
@ -708,7 +707,7 @@ in
|
|||
else
|
||||
":$(${pkgs.coreutils}/bin/dirname $(${pkgs.coreutils}/bin/readlink -m $(type -p nix-env)))"
|
||||
)
|
||||
+ optionalString (!cfg.emptyActivationPath) "\${PATH:+:}$PATH";
|
||||
+ lib.optionalString (!cfg.emptyActivationPath) "\${PATH:+:}$PATH";
|
||||
|
||||
activationScript = pkgs.writeShellScript "activation-script" ''
|
||||
set -eu
|
||||
|
|
@ -722,8 +721,8 @@ in
|
|||
${builtins.readFile ./lib-bash/activation-init.sh}
|
||||
|
||||
if [[ ! -v SKIP_SANITY_CHECKS ]]; then
|
||||
checkUsername ${escapeShellArg config.home.username}
|
||||
checkHomeDirectory ${escapeShellArg config.home.homeDirectory}
|
||||
checkUsername ${lib.escapeShellArg config.home.username}
|
||||
checkHomeDirectory ${lib.escapeShellArg config.home.homeDirectory}
|
||||
fi
|
||||
|
||||
# Create a temporary GC root to prevent collection during activation.
|
||||
|
|
@ -732,7 +731,7 @@ in
|
|||
|
||||
${activationCmds}
|
||||
|
||||
${optionalString (!config.uninstall) ''
|
||||
${lib.optionalString (!config.uninstall) ''
|
||||
# Create the "current generation" GC root.
|
||||
run --silence nix-store --realise "$newGenPath" --add-root "$currentGenGcPath"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
|
||||
cfg = config.i18n.inputMethod;
|
||||
|
|
@ -26,9 +25,9 @@ in {
|
|||
|
||||
options.i18n = {
|
||||
inputMethod = {
|
||||
enabled = mkOption {
|
||||
type = types.nullOr
|
||||
(types.enum [ "fcitx" "fcitx5" "nabi" "uim" "hime" "kime" ]);
|
||||
enabled = lib.mkOption {
|
||||
type = lib.types.nullOr
|
||||
(lib.types.enum [ "fcitx" "fcitx5" "nabi" "uim" "hime" "kime" ]);
|
||||
default = null;
|
||||
example = "fcitx5";
|
||||
description = ''
|
||||
|
|
@ -61,9 +60,9 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
package = mkOption {
|
||||
package = lib.mkOption {
|
||||
internal = true;
|
||||
type = types.nullOr types.path;
|
||||
type = lib.types.nullOr lib.types.path;
|
||||
default = null;
|
||||
description = ''
|
||||
The input method method package.
|
||||
|
|
@ -72,9 +71,10 @@ in {
|
|||
};
|
||||
};
|
||||
|
||||
config = mkIf (cfg.enabled != null) {
|
||||
config = lib.mkIf (cfg.enabled != null) {
|
||||
assertions = [
|
||||
(hm.assertions.assertPlatform "i18n.inputMethod" pkgs platforms.linux)
|
||||
(lib.hm.assertions.assertPlatform "i18n.inputMethod" pkgs
|
||||
lib.platforms.linux)
|
||||
{
|
||||
assertion = cfg.enabled != "fcitx";
|
||||
message = "fcitx has been removed, please use fcitx5 instead";
|
||||
|
|
@ -84,5 +84,5 @@ in {
|
|||
home.packages = [ cfg.package gtk2Cache gtk3Cache ];
|
||||
};
|
||||
|
||||
meta.maintainers = with lib; [ hm.maintainers.kranzes ];
|
||||
meta.maintainers = [ lib.hm.maintainers.kranzes ];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
im = config.i18n.inputMethod;
|
||||
cfg = im.fcitx5;
|
||||
|
|
@ -9,25 +7,25 @@ let
|
|||
in {
|
||||
options = {
|
||||
i18n.inputMethod.fcitx5 = {
|
||||
fcitx5-with-addons = mkOption {
|
||||
type = types.package;
|
||||
fcitx5-with-addons = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
default = pkgs.libsForQt5.fcitx5-with-addons;
|
||||
example = literalExpression "pkgs.kdePackages.fcitx5-with-addons";
|
||||
example = lib.literalExpression "pkgs.kdePackages.fcitx5-with-addons";
|
||||
description = ''
|
||||
The fcitx5 package to use.
|
||||
'';
|
||||
};
|
||||
addons = mkOption {
|
||||
type = with types; listOf package;
|
||||
addons = lib.mkOption {
|
||||
type = with lib.types; listOf package;
|
||||
default = [ ];
|
||||
example = literalExpression "with pkgs; [ fcitx5-rime ]";
|
||||
example = lib.literalExpression "with pkgs; [ fcitx5-rime ]";
|
||||
description = ''
|
||||
Enabled Fcitx5 addons.
|
||||
'';
|
||||
};
|
||||
|
||||
waylandFrontend = mkOption {
|
||||
type = types.bool;
|
||||
waylandFrontend = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Use the Wayland input method frontend.
|
||||
|
|
@ -37,7 +35,7 @@ in {
|
|||
};
|
||||
};
|
||||
|
||||
config = mkIf (im.enabled == "fcitx5") {
|
||||
config = lib.mkIf (im.enabled == "fcitx5") {
|
||||
i18n.inputMethod.package = fcitx5Package;
|
||||
|
||||
home.sessionVariables = {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
|
||||
with lib; {
|
||||
config = mkIf (config.i18n.inputMethod.enabled == "hime") {
|
||||
{
|
||||
config = lib.mkIf (config.i18n.inputMethod.enabled == "hime") {
|
||||
i18n.inputMethod.package = pkgs.hime;
|
||||
|
||||
home.sessionVariables = {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
|
||||
with lib; {
|
||||
config = mkIf (config.i18n.inputMethod.enabled == "nabi") {
|
||||
{
|
||||
config = lib.mkIf (config.i18n.inputMethod.enabled == "nabi") {
|
||||
i18n.inputMethod.package = pkgs.nabi;
|
||||
|
||||
home.sessionVariables = {
|
||||
|
|
|
|||
|
|
@ -1,14 +1,13 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let cfg = config.i18n.inputMethod.uim;
|
||||
in {
|
||||
options = {
|
||||
|
||||
i18n.inputMethod.uim = {
|
||||
toolbar = mkOption {
|
||||
type = types.enum [ "gtk" "gtk3" "gtk-systray" "gtk3-systray" "qt4" ];
|
||||
toolbar = lib.mkOption {
|
||||
type =
|
||||
lib.types.enum [ "gtk" "gtk3" "gtk-systray" "gtk3-systray" "qt4" ];
|
||||
default = "gtk";
|
||||
example = "gtk-systray";
|
||||
description = ''
|
||||
|
|
@ -19,7 +18,7 @@ in {
|
|||
|
||||
};
|
||||
|
||||
config = mkIf (config.i18n.inputMethod.enabled == "uim") {
|
||||
config = lib.mkIf (config.i18n.inputMethod.enabled == "uim") {
|
||||
i18n.inputMethod.package = pkgs.uim;
|
||||
|
||||
home.sessionVariables = {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.manual;
|
||||
|
|
@ -13,8 +11,8 @@ let
|
|||
|
||||
in {
|
||||
options = {
|
||||
manual.html.enable = mkOption {
|
||||
type = types.bool;
|
||||
manual.html.enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Whether to install the HTML manual. This also installs the
|
||||
|
|
@ -23,8 +21,8 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
manual.manpages.enable = mkOption {
|
||||
type = types.bool;
|
||||
manual.manpages.enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
example = false;
|
||||
description = ''
|
||||
|
|
@ -37,8 +35,8 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
manual.json.enable = mkOption {
|
||||
type = types.bool;
|
||||
manual.json.enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
example = true;
|
||||
description = ''
|
||||
|
|
@ -52,10 +50,10 @@ in {
|
|||
};
|
||||
|
||||
config = {
|
||||
home.packages = mkMerge [
|
||||
(mkIf cfg.html.enable [ docs.manual.html docs.manual.htmlOpenTool ])
|
||||
(mkIf cfg.manpages.enable [ docs.manPages ])
|
||||
(mkIf cfg.json.enable [ docs.options.json ])
|
||||
home.packages = lib.mkMerge [
|
||||
(lib.mkIf cfg.html.enable [ docs.manual.html docs.manual.htmlOpenTool ])
|
||||
(lib.mkIf cfg.manpages.enable [ docs.manPages ])
|
||||
(lib.mkIf cfg.json.enable [ docs.options.json ])
|
||||
];
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,29 +1,29 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
inherit (lib) types;
|
||||
|
||||
cfg = config.dconf;
|
||||
|
||||
toDconfIni = generators.toINI { mkKeyValue = mkIniKeyValue; };
|
||||
toDconfIni = lib.generators.toINI { mkKeyValue = mkIniKeyValue; };
|
||||
|
||||
mkIniKeyValue = key: value: "${key}=${toString (hm.gvariant.mkValue value)}";
|
||||
mkIniKeyValue = key: value:
|
||||
"${key}=${toString (lib.hm.gvariant.mkValue value)}";
|
||||
|
||||
# The dconf keys managed by this configuration. We store this as part of the
|
||||
# generation state to be able to reset keys that become unmanaged during
|
||||
# switch.
|
||||
stateDconfKeys = pkgs.writeText "dconf-keys.json" (builtins.toJSON
|
||||
(concatLists (mapAttrsToList
|
||||
(dir: entries: mapAttrsToList (key: _: "/${dir}/${key}") entries)
|
||||
(lib.concatLists (lib.mapAttrsToList
|
||||
(dir: entries: lib.mapAttrsToList (key: _: "/${dir}/${key}") entries)
|
||||
cfg.settings)));
|
||||
|
||||
in {
|
||||
meta.maintainers = [ maintainers.rycee ];
|
||||
meta.maintainers = [ lib.maintainers.rycee ];
|
||||
|
||||
options = {
|
||||
dconf = {
|
||||
enable = mkOption {
|
||||
enable = lib.mkOption {
|
||||
type = types.bool;
|
||||
# While technically dconf on darwin could work, our activation step
|
||||
# requires dbus, which only *lightly* supports Darwin in general, and
|
||||
|
|
@ -43,10 +43,10 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
settings = mkOption {
|
||||
type = with types; attrsOf (attrsOf hm.types.gvariant);
|
||||
settings = lib.mkOption {
|
||||
type = with types; attrsOf (attrsOf lib.hm.types.gvariant);
|
||||
default = { };
|
||||
example = literalExpression ''
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
"org/gnome/calculator" = {
|
||||
button-mode = "programming";
|
||||
|
|
@ -75,7 +75,7 @@ in {
|
|||
};
|
||||
};
|
||||
|
||||
config = mkIf (cfg.enable && cfg.settings != { }) {
|
||||
config = lib.mkIf (cfg.enable && cfg.settings != { }) {
|
||||
# Make sure the dconf directory exists.
|
||||
xdg.configFile."dconf/.keep".source = builtins.toFile "keep" "";
|
||||
|
||||
|
|
@ -84,53 +84,54 @@ in {
|
|||
ln -s ${stateDconfKeys} $out/state/${stateDconfKeys.name}
|
||||
'';
|
||||
|
||||
home.activation.dconfSettings = hm.dag.entryAfter [ "installPackages" ] (let
|
||||
iniFile = pkgs.writeText "hm-dconf.ini" (toDconfIni cfg.settings);
|
||||
home.activation.dconfSettings = lib.hm.dag.entryAfter [ "installPackages" ]
|
||||
(let
|
||||
iniFile = pkgs.writeText "hm-dconf.ini" (toDconfIni cfg.settings);
|
||||
|
||||
statePath = "state/${stateDconfKeys.name}";
|
||||
statePath = "state/${stateDconfKeys.name}";
|
||||
|
||||
cleanup = pkgs.writeShellScript "dconf-cleanup" ''
|
||||
set -euo pipefail
|
||||
cleanup = pkgs.writeShellScript "dconf-cleanup" ''
|
||||
set -euo pipefail
|
||||
|
||||
${config.lib.bash.initHomeManagerLib}
|
||||
${config.lib.bash.initHomeManagerLib}
|
||||
|
||||
PATH=${makeBinPath [ pkgs.dconf pkgs.jq ]}''${PATH:+:}$PATH
|
||||
PATH=${lib.makeBinPath [ pkgs.dconf pkgs.jq ]}''${PATH:+:}$PATH
|
||||
|
||||
oldState="$1"
|
||||
newState="$2"
|
||||
oldState="$1"
|
||||
newState="$2"
|
||||
|
||||
# Can't do cleanup if we don't know the old state.
|
||||
if [[ ! -f $oldState ]]; then
|
||||
exit 0
|
||||
# Can't do cleanup if we don't know the old state.
|
||||
if [[ ! -f $oldState ]]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Reset all keys that are present in the old generation but not the new
|
||||
# one.
|
||||
jq -r -n \
|
||||
--slurpfile old "$oldState" \
|
||||
--slurpfile new "$newState" \
|
||||
'($old[] - $new[])[]' \
|
||||
| while read -r key; do
|
||||
verboseEcho "Resetting dconf key \"$key\""
|
||||
run $DCONF_DBUS_RUN_SESSION dconf reset "$key"
|
||||
done
|
||||
'';
|
||||
in ''
|
||||
if [[ -v DBUS_SESSION_BUS_ADDRESS ]]; then
|
||||
export DCONF_DBUS_RUN_SESSION=""
|
||||
else
|
||||
export DCONF_DBUS_RUN_SESSION="${pkgs.dbus}/bin/dbus-run-session --dbus-daemon=${pkgs.dbus}/bin/dbus-daemon"
|
||||
fi
|
||||
|
||||
# Reset all keys that are present in the old generation but not the new
|
||||
# one.
|
||||
jq -r -n \
|
||||
--slurpfile old "$oldState" \
|
||||
--slurpfile new "$newState" \
|
||||
'($old[] - $new[])[]' \
|
||||
| while read -r key; do
|
||||
verboseEcho "Resetting dconf key \"$key\""
|
||||
run $DCONF_DBUS_RUN_SESSION dconf reset "$key"
|
||||
done
|
||||
'';
|
||||
in ''
|
||||
if [[ -v DBUS_SESSION_BUS_ADDRESS ]]; then
|
||||
export DCONF_DBUS_RUN_SESSION=""
|
||||
else
|
||||
export DCONF_DBUS_RUN_SESSION="${pkgs.dbus}/bin/dbus-run-session --dbus-daemon=${pkgs.dbus}/bin/dbus-daemon"
|
||||
fi
|
||||
if [[ -v oldGenPath ]]; then
|
||||
${cleanup} \
|
||||
"$oldGenPath/${statePath}" \
|
||||
"$newGenPath/${statePath}"
|
||||
fi
|
||||
|
||||
if [[ -v oldGenPath ]]; then
|
||||
${cleanup} \
|
||||
"$oldGenPath/${statePath}" \
|
||||
"$newGenPath/${statePath}"
|
||||
fi
|
||||
run $DCONF_DBUS_RUN_SESSION ${pkgs.dconf}/bin/dconf load / < ${iniFile}
|
||||
|
||||
run $DCONF_DBUS_RUN_SESSION ${pkgs.dconf}/bin/dconf load / < ${iniFile}
|
||||
|
||||
unset DCONF_DBUS_RUN_SESSION
|
||||
'');
|
||||
unset DCONF_DBUS_RUN_SESSION
|
||||
'');
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
|
||||
with lib;
|
||||
{ config, lib, ... }:
|
||||
|
||||
{
|
||||
options.home = {
|
||||
enableDebugInfo = mkEnableOption "" // {
|
||||
enableDebugInfo = lib.mkEnableOption "" // {
|
||||
description = ''
|
||||
Some Nix packages provide debug symbols for
|
||||
{command}`gdb` in the `debug` output.
|
||||
|
|
@ -15,7 +13,7 @@ with lib;
|
|||
};
|
||||
};
|
||||
|
||||
config = mkIf config.home.enableDebugInfo {
|
||||
config = lib.mkIf config.home.enableDebugInfo {
|
||||
home.extraOutputsToInstall = [ "debug" ];
|
||||
|
||||
home.sessionVariables = {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.editorconfig;
|
||||
|
|
@ -9,12 +7,12 @@ let
|
|||
iniFormat = pkgs.formats.ini { };
|
||||
|
||||
in {
|
||||
meta.maintainers = with maintainers; [ loicreynier ];
|
||||
meta.maintainers = with lib.maintainers; [ loicreynier ];
|
||||
|
||||
options.editorconfig = {
|
||||
enable = mkEnableOption "EditorConfig home configuration file";
|
||||
enable = lib.mkEnableOption "EditorConfig home configuration file";
|
||||
|
||||
settings = mkOption {
|
||||
settings = lib.mkOption {
|
||||
type = iniFormat.type;
|
||||
default = { };
|
||||
description = ''
|
||||
|
|
@ -23,7 +21,7 @@ in {
|
|||
it must not be added here.
|
||||
See <https://editorconfig.org> for documentation.
|
||||
'';
|
||||
example = literalExpression ''
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
"*" = {
|
||||
charset = "utf-8";
|
||||
|
|
@ -39,9 +37,9 @@ in {
|
|||
};
|
||||
};
|
||||
|
||||
config = mkIf (cfg.enable && cfg.settings != { }) {
|
||||
config = lib.mkIf (cfg.enable && cfg.settings != { }) {
|
||||
home.file.".editorconfig".text = let
|
||||
renderedSettings = generators.toINIWithGlobalSection { } {
|
||||
renderedSettings = lib.generators.toINIWithGlobalSection { } {
|
||||
globalSection = { root = true; };
|
||||
sections = cfg.settings;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@
|
|||
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.fonts.fontconfig;
|
||||
|
|
@ -13,10 +11,10 @@ let
|
|||
profileDirectory = config.home.profileDirectory;
|
||||
|
||||
in {
|
||||
meta.maintainers = [ maintainers.rycee ];
|
||||
meta.maintainers = [ lib.maintainers.rycee ];
|
||||
|
||||
imports = [
|
||||
(mkRenamedOptionModule [ "fonts" "fontconfig" "enableProfileFonts" ] [
|
||||
(lib.mkRenamedOptionModule [ "fonts" "fontconfig" "enableProfileFonts" ] [
|
||||
"fonts"
|
||||
"fontconfig"
|
||||
"enable"
|
||||
|
|
@ -25,8 +23,8 @@ in {
|
|||
|
||||
options = {
|
||||
fonts.fontconfig = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Whether to enable fontconfig configuration. This will, for
|
||||
|
|
@ -38,8 +36,8 @@ in {
|
|||
};
|
||||
|
||||
defaultFonts = {
|
||||
monospace = mkOption {
|
||||
type = with types; listOf str;
|
||||
monospace = lib.mkOption {
|
||||
type = with lib.types; listOf str;
|
||||
default = [ ];
|
||||
description = ''
|
||||
Per-user default monospace font(s). Multiple fonts may be listed in
|
||||
|
|
@ -47,8 +45,8 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
sansSerif = mkOption {
|
||||
type = with types; listOf str;
|
||||
sansSerif = lib.mkOption {
|
||||
type = with lib.types; listOf str;
|
||||
default = [ ];
|
||||
description = ''
|
||||
Per-user default sans serif font(s). Multiple fonts may be listed
|
||||
|
|
@ -56,8 +54,8 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
serif = mkOption {
|
||||
type = with types; listOf str;
|
||||
serif = lib.mkOption {
|
||||
type = with lib.types; listOf str;
|
||||
default = [ ];
|
||||
description = ''
|
||||
Per-user default serif font(s). Multiple fonts may be listed in
|
||||
|
|
@ -65,8 +63,8 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
emoji = mkOption {
|
||||
type = with types; listOf str;
|
||||
emoji = lib.mkOption {
|
||||
type = with lib.types; listOf str;
|
||||
default = [ ];
|
||||
description = ''
|
||||
Per-user default emoji font(s). Multiple fonts may be listed in
|
||||
|
|
@ -83,7 +81,7 @@ in {
|
|||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
config = lib.mkIf cfg.enable {
|
||||
home.packages = [
|
||||
# Make sure that buildEnv creates a real directory path so that we avoid
|
||||
# trying to write to a read-only location.
|
||||
|
|
@ -105,7 +103,7 @@ in {
|
|||
</fontconfig>
|
||||
EOF
|
||||
|
||||
${getBin pkgs.fontconfig}/bin/fc-cache -f
|
||||
${lib.getBin pkgs.fontconfig}/bin/fc-cache -f
|
||||
rm -f $out/lib/fontconfig/cache/CACHEDIR.TAG
|
||||
rmdir --ignore-fail-on-non-empty -p $out/lib/fontconfig/cache
|
||||
|
||||
|
|
@ -147,12 +145,12 @@ in {
|
|||
|
||||
"fontconfig/conf.d/52-hm-default-fonts.conf".text = let
|
||||
genDefault = fonts: name:
|
||||
optionalString (fonts != [ ]) ''
|
||||
lib.optionalString (fonts != [ ]) ''
|
||||
<alias binding="same">
|
||||
<family>${name}</family>
|
||||
<prefer>
|
||||
${
|
||||
concatStringsSep "" (map (font: ''
|
||||
lib.concatStringsSep "" (map (font: ''
|
||||
<family>${font}</family>
|
||||
'') fonts)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,29 +1,30 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{ config, lib, ... }:
|
||||
|
||||
let
|
||||
inherit (lib) literalExpression mkOption optionalAttrs types;
|
||||
|
||||
cfg = config.gtk;
|
||||
cfg2 = config.gtk.gtk2;
|
||||
cfg3 = config.gtk.gtk3;
|
||||
cfg4 = config.gtk.gtk4;
|
||||
|
||||
toGtk3Ini = generators.toINI {
|
||||
toGtk3Ini = lib.generators.toINI {
|
||||
mkKeyValue = key: value:
|
||||
let value' = if isBool value then boolToString value else toString value;
|
||||
in "${escape [ "=" ] key}=${value'}";
|
||||
let
|
||||
value' =
|
||||
if lib.isBool value then lib.boolToString value else toString value;
|
||||
in "${lib.escape [ "=" ] key}=${value'}";
|
||||
};
|
||||
|
||||
formatGtk2Option = n: v:
|
||||
let
|
||||
v' = if isBool v then
|
||||
boolToString value
|
||||
else if isString v then
|
||||
v' = if lib.isBool v then
|
||||
lib.boolToString lib.value
|
||||
else if lib.isString v then
|
||||
''"${v}"''
|
||||
else
|
||||
toString v;
|
||||
in "${escape [ "=" ] n} = ${v'}";
|
||||
in "${lib.escape [ "=" ] n} = ${v'}";
|
||||
|
||||
themeType = types.submodule {
|
||||
options = {
|
||||
|
|
@ -100,20 +101,20 @@ let
|
|||
};
|
||||
|
||||
in {
|
||||
meta.maintainers = [ maintainers.rycee ];
|
||||
meta.maintainers = [ lib.maintainers.rycee ];
|
||||
|
||||
imports = [
|
||||
(mkRemovedOptionModule [ "gtk" "gtk3" "waylandSupport" ] ''
|
||||
(lib.mkRemovedOptionModule [ "gtk" "gtk3" "waylandSupport" ] ''
|
||||
This options is not longer needed and can be removed.
|
||||
'')
|
||||
];
|
||||
|
||||
options = {
|
||||
gtk = {
|
||||
enable = mkEnableOption "GTK 2/3 configuration";
|
||||
enable = lib.mkEnableOption "GTK 2/3 configuration";
|
||||
|
||||
font = mkOption {
|
||||
type = types.nullOr hm.types.fontType;
|
||||
type = types.nullOr lib.hm.types.fontType;
|
||||
default = null;
|
||||
description = ''
|
||||
The font to use in GTK+ 2/3 applications.
|
||||
|
|
@ -219,7 +220,7 @@ in {
|
|||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable (let
|
||||
config = lib.mkIf cfg.enable (let
|
||||
gtkIni = optionalAttrs (cfg.font != null) {
|
||||
gtk-font-name =
|
||||
let fontSize = if cfg.font.size != null then cfg.font.size else 10;
|
||||
|
|
@ -258,18 +259,17 @@ in {
|
|||
};
|
||||
|
||||
optionalPackage = opt:
|
||||
optional (opt != null && opt.package != null) opt.package;
|
||||
lib.optional (opt != null && opt.package != null) opt.package;
|
||||
in {
|
||||
home.packages = concatMap optionalPackage [
|
||||
home.packages = lib.concatMap optionalPackage [
|
||||
cfg.font
|
||||
cfg.theme
|
||||
cfg.iconTheme
|
||||
cfg.cursorTheme
|
||||
];
|
||||
|
||||
home.file.${cfg2.configLocation}.text =
|
||||
concatMapStrings (l: l + "\n") (mapAttrsToList formatGtk2Option gtkIni)
|
||||
+ cfg2.extraConfig + "\n";
|
||||
home.file.${cfg2.configLocation}.text = lib.concatMapStrings (l: l + "\n")
|
||||
(lib.mapAttrsToList formatGtk2Option gtkIni) + cfg2.extraConfig + "\n";
|
||||
|
||||
home.sessionVariables.GTK2_RC_FILES = cfg2.configLocation;
|
||||
|
||||
|
|
@ -277,16 +277,17 @@ in {
|
|||
toGtk3Ini { Settings = gtkIni // cfg3.extraConfig; };
|
||||
|
||||
xdg.configFile."gtk-3.0/gtk.css" =
|
||||
mkIf (cfg3.extraCss != "") { text = cfg3.extraCss; };
|
||||
lib.mkIf (cfg3.extraCss != "") { text = cfg3.extraCss; };
|
||||
|
||||
xdg.configFile."gtk-3.0/bookmarks" = mkIf (cfg3.bookmarks != [ ]) {
|
||||
text = concatMapStrings (l: l + "\n") cfg3.bookmarks;
|
||||
xdg.configFile."gtk-3.0/bookmarks" = lib.mkIf (cfg3.bookmarks != [ ]) {
|
||||
text = lib.concatMapStrings (l: l + "\n") cfg3.bookmarks;
|
||||
};
|
||||
|
||||
xdg.configFile."gtk-4.0/settings.ini".text =
|
||||
toGtk3Ini { Settings = gtkIni // cfg4.extraConfig; };
|
||||
|
||||
xdg.configFile."gtk-4.0/gtk.css" = mkIf (gtk4Css != "") { text = gtk4Css; };
|
||||
xdg.configFile."gtk-4.0/gtk.css" =
|
||||
lib.mkIf (gtk4Css != "") { text = gtk4Css; };
|
||||
|
||||
dconf.settings."org/gnome/desktop/interface" = dconfIni;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
{ config, lib, options, pkgs, ... }:
|
||||
with lib;
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
inherit (lib) mkOption types;
|
||||
|
||||
cfg = config.news;
|
||||
|
||||
hostPlatform = pkgs.stdenv.hostPlatform;
|
||||
|
|
@ -39,10 +41,12 @@ let
|
|||
};
|
||||
};
|
||||
|
||||
config = { id = mkDefault (builtins.hashString "sha256" config.message); };
|
||||
config = {
|
||||
id = lib.mkDefault (builtins.hashString "sha256" config.message);
|
||||
};
|
||||
});
|
||||
in {
|
||||
meta.maintainers = [ maintainers.rycee ];
|
||||
meta.maintainers = [ lib.maintainers.rycee ];
|
||||
|
||||
options = {
|
||||
news = {
|
||||
|
|
@ -1891,8 +1895,8 @@ in {
|
|||
{
|
||||
time = "2024-12-08T17:22:13+00:00";
|
||||
condition = let
|
||||
usingMbsync = any (a: a.mbsync.enable)
|
||||
(attrValues config.accounts.email.accounts);
|
||||
usingMbsync = lib.any (a: a.mbsync.enable)
|
||||
(lib.attrValues config.accounts.email.accounts);
|
||||
in usingMbsync;
|
||||
message = ''
|
||||
isync/mbsync 1.5.0 has changed several things.
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.nixpkgs;
|
||||
|
|
@ -17,28 +15,28 @@ let
|
|||
let
|
||||
lhs = optCall lhs_ { inherit pkgs; };
|
||||
rhs = optCall rhs_ { inherit pkgs; };
|
||||
in lhs // rhs // optionalAttrs (lhs ? packageOverrides) {
|
||||
in lhs // rhs // lib.optionalAttrs (lhs ? packageOverrides) {
|
||||
packageOverrides = pkgs:
|
||||
optCall lhs.packageOverrides pkgs
|
||||
// optCall (attrByPath [ "packageOverrides" ] ({ }) rhs) pkgs;
|
||||
} // optionalAttrs (lhs ? perlPackageOverrides) {
|
||||
// optCall (lib.attrByPath [ "packageOverrides" ] { } rhs) pkgs;
|
||||
} // lib.optionalAttrs (lhs ? perlPackageOverrides) {
|
||||
perlPackageOverrides = pkgs:
|
||||
optCall lhs.perlPackageOverrides pkgs
|
||||
// optCall (attrByPath [ "perlPackageOverrides" ] ({ }) rhs) pkgs;
|
||||
// optCall (lib.attrByPath [ "perlPackageOverrides" ] { } rhs) pkgs;
|
||||
};
|
||||
|
||||
# Copied from nixpkgs.nix.
|
||||
configType = mkOptionType {
|
||||
configType = lib.mkOptionType {
|
||||
name = "nixpkgs-config";
|
||||
description = "nixpkgs config";
|
||||
check = x:
|
||||
let traceXIfNot = c: if c x then true else lib.traceSeqN 1 x false;
|
||||
in traceXIfNot isConfig;
|
||||
merge = args: fold (def: mergeConfig def.value) { };
|
||||
merge = args: lib.fold (def: mergeConfig def.value) { };
|
||||
};
|
||||
|
||||
# Copied from nixpkgs.nix.
|
||||
overlayType = mkOptionType {
|
||||
overlayType = lib.mkOptionType {
|
||||
name = "nixpkgs-overlay";
|
||||
description = "nixpkgs overlay";
|
||||
check = builtins.isFunction;
|
||||
|
|
@ -46,18 +44,18 @@ let
|
|||
};
|
||||
|
||||
in {
|
||||
meta.maintainers = with maintainers; [ thiagokokada ];
|
||||
meta.maintainers = with lib.maintainers; [ thiagokokada ];
|
||||
|
||||
options.nixpkgs = {
|
||||
config = mkOption {
|
||||
config = lib.mkOption {
|
||||
default = null;
|
||||
type = types.nullOr configType;
|
||||
type = lib.types.nullOr configType;
|
||||
visible = false;
|
||||
};
|
||||
|
||||
overlays = mkOption {
|
||||
overlays = lib.mkOption {
|
||||
default = null;
|
||||
type = types.nullOr (types.listOf overlayType);
|
||||
type = lib.types.nullOr (lib.types.listOf overlayType);
|
||||
visible = false;
|
||||
};
|
||||
};
|
||||
|
|
@ -73,7 +71,7 @@ in {
|
|||
}
|
||||
];
|
||||
|
||||
warnings = optional ((cfg.config != null) || (cfg.overlays != null)) ''
|
||||
warnings = lib.optional ((cfg.config != null) || (cfg.overlays != null)) ''
|
||||
You have set either `nixpkgs.config` or `nixpkgs.overlays` while using `home-manager.useGlobalPkgs`.
|
||||
This will soon not be possible. Please remove all `nixpkgs` options when using `home-manager.useGlobalPkgs`.
|
||||
'';
|
||||
|
|
|
|||
|
|
@ -2,8 +2,6 @@
|
|||
|
||||
{ config, lib, pkgs, pkgsPath, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
isConfig = x: builtins.isAttrs x || builtins.isFunction x;
|
||||
|
|
@ -14,40 +12,40 @@ let
|
|||
let
|
||||
lhs = optCall lhs_ { inherit pkgs; };
|
||||
rhs = optCall rhs_ { inherit pkgs; };
|
||||
in lhs // rhs // optionalAttrs (lhs ? packageOverrides) {
|
||||
in lhs // rhs // lib.optionalAttrs (lhs ? packageOverrides) {
|
||||
packageOverrides = pkgs:
|
||||
optCall lhs.packageOverrides pkgs
|
||||
// optCall (attrByPath [ "packageOverrides" ] ({ }) rhs) pkgs;
|
||||
} // optionalAttrs (lhs ? perlPackageOverrides) {
|
||||
// optCall (lib.attrByPath [ "packageOverrides" ] { } rhs) pkgs;
|
||||
} // lib.optionalAttrs (lhs ? perlPackageOverrides) {
|
||||
perlPackageOverrides = pkgs:
|
||||
optCall lhs.perlPackageOverrides pkgs
|
||||
// optCall (attrByPath [ "perlPackageOverrides" ] ({ }) rhs) pkgs;
|
||||
// optCall (lib.attrByPath [ "perlPackageOverrides" ] { } rhs) pkgs;
|
||||
};
|
||||
|
||||
configType = mkOptionType {
|
||||
configType = lib.mkOptionType {
|
||||
name = "nixpkgs-config";
|
||||
description = "nixpkgs config";
|
||||
check = x:
|
||||
let traceXIfNot = c: if c x then true else lib.traceSeqN 1 x false;
|
||||
in traceXIfNot isConfig;
|
||||
merge = args: fold (def: mergeConfig def.value) { };
|
||||
merge = args: lib.fold (def: mergeConfig def.value) { };
|
||||
};
|
||||
|
||||
overlayType = mkOptionType {
|
||||
overlayType = lib.mkOptionType {
|
||||
name = "nixpkgs-overlay";
|
||||
description = "nixpkgs overlay";
|
||||
check = lib.isFunction;
|
||||
merge = lib.mergeOneOption;
|
||||
};
|
||||
|
||||
_pkgs = import pkgsPath (filterAttrs (n: v: v != null) config.nixpkgs);
|
||||
_pkgs = import pkgsPath (lib.filterAttrs (n: v: v != null) config.nixpkgs);
|
||||
|
||||
in {
|
||||
options.nixpkgs = {
|
||||
config = mkOption {
|
||||
config = lib.mkOption {
|
||||
default = null;
|
||||
example = { allowBroken = true; };
|
||||
type = types.nullOr configType;
|
||||
type = lib.types.nullOr configType;
|
||||
description = ''
|
||||
The configuration of the Nix Packages collection. (For
|
||||
details, see the Nixpkgs documentation.) It allows you to set
|
||||
|
|
@ -72,9 +70,9 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
overlays = mkOption {
|
||||
overlays = lib.mkOption {
|
||||
default = null;
|
||||
example = literalExpression ''
|
||||
example = lib.literalExpression ''
|
||||
[
|
||||
(final: prev: {
|
||||
openssh = prev.openssh.override {
|
||||
|
|
@ -85,7 +83,7 @@ in {
|
|||
})
|
||||
]
|
||||
'';
|
||||
type = types.nullOr (types.listOf overlayType);
|
||||
type = lib.types.nullOr (lib.types.listOf overlayType);
|
||||
description = ''
|
||||
List of overlays to use with the Nix Packages collection. (For
|
||||
details, see the Nixpkgs documentation.) It allows you to
|
||||
|
|
@ -105,8 +103,8 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
system = mkOption {
|
||||
type = types.str;
|
||||
system = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
example = "i686-linux";
|
||||
internal = true;
|
||||
description = ''
|
||||
|
|
@ -123,7 +121,7 @@ in {
|
|||
_module.args = {
|
||||
# We use a no-op override to make sure that the option can be merged without evaluating
|
||||
# `_pkgs`, see https://github.com/nix-community/home-manager/pull/993
|
||||
pkgs = mkOverride modules.defaultOverridePriority _pkgs;
|
||||
pkgs = lib.mkOverride lib.modules.defaultOverridePriority _pkgs;
|
||||
pkgs_i686 =
|
||||
if _pkgs.stdenv.isLinux && _pkgs.stdenv.hostPlatform.isx86 then
|
||||
_pkgs.pkgsi686Linux
|
||||
|
|
|
|||
|
|
@ -1,19 +1,18 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.xsession.numlock;
|
||||
|
||||
in {
|
||||
meta.maintainers = [ maintainers.evanjs ];
|
||||
meta.maintainers = [ lib.maintainers.evanjs ];
|
||||
|
||||
options = { xsession.numlock.enable = mkEnableOption "Num Lock"; };
|
||||
options = { xsession.numlock.enable = lib.mkEnableOption "Num Lock"; };
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
config = lib.mkIf cfg.enable {
|
||||
assertions = [
|
||||
(hm.assertions.assertPlatform "xsession.numlock" pkgs platforms.linux)
|
||||
(lib.hm.assertions.assertPlatform "xsession.numlock" pkgs
|
||||
lib.platforms.linux)
|
||||
];
|
||||
|
||||
systemd.user.services.numlockx = {
|
||||
|
|
|
|||
|
|
@ -1,18 +1,16 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{ config, lib, ... }:
|
||||
|
||||
let
|
||||
|
||||
cfg = config.pam;
|
||||
|
||||
in {
|
||||
meta.maintainers = with maintainers; [ rycee veehaitch ];
|
||||
meta.maintainers = with lib.maintainers; [ rycee veehaitch ];
|
||||
|
||||
options = {
|
||||
pam.sessionVariables = mkOption {
|
||||
pam.sessionVariables = lib.mkOption {
|
||||
default = { };
|
||||
type = types.attrs;
|
||||
type = lib.types.attrs;
|
||||
example = { EDITOR = "vim"; };
|
||||
description = ''
|
||||
Environment variables that will be set for the PAM session.
|
||||
|
|
@ -25,10 +23,10 @@ in {
|
|||
};
|
||||
|
||||
pam.yubico.authorizedYubiKeys = {
|
||||
ids = mkOption {
|
||||
type = with types;
|
||||
ids = lib.mkOption {
|
||||
type = with lib.types;
|
||||
let
|
||||
yubiKeyId = addCheck str (s: stringLength s == 12) // {
|
||||
yubiKeyId = addCheck str (s: lib.stringLength s == 12) // {
|
||||
name = "yubiKeyId";
|
||||
description = "string of length 12";
|
||||
};
|
||||
|
|
@ -41,8 +39,8 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
path = mkOption {
|
||||
type = types.str;
|
||||
path = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = ".yubico/authorized_yubikeys";
|
||||
description = ''
|
||||
File path to write the authorized YubiKeys,
|
||||
|
|
@ -52,16 +50,16 @@ in {
|
|||
};
|
||||
};
|
||||
|
||||
config = mkMerge [
|
||||
(mkIf (cfg.sessionVariables != { }) {
|
||||
home.file.".pam_environment".text = concatStringsSep "\n"
|
||||
(mapAttrsToList (n: v: ''${n} OVERRIDE="${toString v}"'')
|
||||
config = lib.mkMerge [
|
||||
(lib.mkIf (cfg.sessionVariables != { }) {
|
||||
home.file.".pam_environment".text = lib.concatStringsSep "\n"
|
||||
(lib.mapAttrsToList (n: v: ''${n} OVERRIDE="${toString v}"'')
|
||||
cfg.sessionVariables) + "\n";
|
||||
})
|
||||
|
||||
(mkIf (cfg.yubico.authorizedYubiKeys.ids != [ ]) {
|
||||
(lib.mkIf (cfg.yubico.authorizedYubiKeys.ids != [ ]) {
|
||||
home.file.${cfg.yubico.authorizedYubiKeys.path}.text =
|
||||
concatStringsSep ":"
|
||||
lib.concatStringsSep ":"
|
||||
([ config.home.username ] ++ cfg.yubico.authorizedYubiKeys.ids);
|
||||
})
|
||||
];
|
||||
|
|
|
|||
|
|
@ -1,27 +1,25 @@
|
|||
{ config, name, extendModules, lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
{
|
||||
imports =
|
||||
[ (mkRenamedOptionModule [ "specialization" ] [ "specialisation" ]) ];
|
||||
[ (lib.mkRenamedOptionModule [ "specialization" ] [ "specialisation" ]) ];
|
||||
|
||||
options.specialisation = mkOption {
|
||||
type = types.attrsOf (types.submodule {
|
||||
options.specialisation = lib.mkOption {
|
||||
type = lib.types.attrsOf (lib.types.submodule {
|
||||
options = {
|
||||
configuration = mkOption {
|
||||
configuration = lib.mkOption {
|
||||
type = let
|
||||
extended = extendModules {
|
||||
modules = [{
|
||||
# Prevent infinite recursion
|
||||
specialisation = mkOverride 0 { };
|
||||
specialisation = lib.mkOverride 0 { };
|
||||
|
||||
# If used inside the NixOS/nix-darwin module, we get conflicting definitions
|
||||
# of `name` inside the specialisation: one is the user name coming from the
|
||||
# NixOS module definition and the other is `configuration`, the name of this
|
||||
# option. Thus we need to explicitly wire the former into the module arguments.
|
||||
# See discussion at https://github.com/nix-community/home-manager/issues/3716
|
||||
_module.args.name = mkForce name;
|
||||
_module.args.name = lib.mkForce name;
|
||||
}];
|
||||
};
|
||||
in extended.type;
|
||||
|
|
@ -70,20 +68,21 @@ with lib;
|
|||
'';
|
||||
};
|
||||
|
||||
config = mkIf (config.specialisation != { }) {
|
||||
config = lib.mkIf (config.specialisation != { }) {
|
||||
assertions = map (n: {
|
||||
assertion = !lib.hasInfix "/" n;
|
||||
message =
|
||||
"<name> in specialisation.<name> cannot contain a forward slash.";
|
||||
}) (attrNames config.specialisation);
|
||||
}) (lib.attrNames config.specialisation);
|
||||
|
||||
home.extraBuilderCommands = let
|
||||
link = n: v:
|
||||
let pkg = v.configuration.home.activationPackage;
|
||||
in "ln -s ${pkg} $out/specialisation/${escapeShellArg n}";
|
||||
in "ln -s ${pkg} $out/specialisation/${lib.escapeShellArg n}";
|
||||
in ''
|
||||
mkdir $out/specialisation
|
||||
${concatStringsSep "\n" (mapAttrsToList link config.specialisation)}
|
||||
${lib.concatStringsSep "\n"
|
||||
(lib.mapAttrsToList link config.specialisation)}
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,11 @@
|
|||
{ lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
{
|
||||
meta.maintainers = [ maintainers.rycee ];
|
||||
meta.maintainers = [ lib.maintainers.rycee ];
|
||||
|
||||
options.submoduleSupport = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
internal = true;
|
||||
description = ''
|
||||
|
|
@ -16,8 +14,8 @@ with lib;
|
|||
'';
|
||||
};
|
||||
|
||||
externalPackageInstall = mkOption {
|
||||
type = types.bool;
|
||||
externalPackageInstall = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
internal = true;
|
||||
description = ''
|
||||
|
|
@ -39,9 +37,9 @@ with lib;
|
|||
# module system can not inform modules about their non-existence; see
|
||||
# https://github.com/NixOS/nixpkgs/issues/311709#issuecomment-2110861842
|
||||
_module.args = {
|
||||
osConfig = mkDefault null;
|
||||
nixosConfig = mkDefault null;
|
||||
darwinConfig = mkDefault null;
|
||||
osConfig = lib.mkDefault null;
|
||||
nixosConfig = lib.mkDefault null;
|
||||
darwinConfig = lib.mkDefault null;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,16 +1,14 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.systemd.user.tmpfiles;
|
||||
|
||||
in {
|
||||
meta.maintainers = [ maintainers.dawidsowa ];
|
||||
meta.maintainers = [ lib.maintainers.dawidsowa ];
|
||||
|
||||
options.systemd.user.tmpfiles.rules = mkOption {
|
||||
type = types.listOf types.str;
|
||||
options.systemd.user.tmpfiles.rules = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.str;
|
||||
default = [ ];
|
||||
example = [ "L /home/user/Documents - - - - /mnt/data/Documents" ];
|
||||
description = ''
|
||||
|
|
@ -21,10 +19,10 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
config = mkIf (cfg.rules != [ ]) {
|
||||
config = lib.mkIf (cfg.rules != [ ]) {
|
||||
assertions = [
|
||||
(hm.assertions.assertPlatform "systemd.user.tmpfiles" pkgs
|
||||
platforms.linux)
|
||||
(lib.hm.assertions.assertPlatform "systemd.user.tmpfiles" pkgs
|
||||
lib.platforms.linux)
|
||||
];
|
||||
|
||||
xdg.configFile = {
|
||||
|
|
@ -32,7 +30,7 @@ in {
|
|||
text = ''
|
||||
# This file is created automatically and should not be modified.
|
||||
# Please change the option ‘systemd.user.tmpfiles.rules’ instead.
|
||||
${concatStringsSep "\n" cfg.rules}
|
||||
${lib.concatStringsSep "\n" cfg.rules}
|
||||
'';
|
||||
onChange = "${pkgs.systemd}/bin/systemd-tmpfiles --user --create";
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
{ config, lib, ... }:
|
||||
|
||||
let
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,13 @@
|
|||
{ config, lib, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
inherit (lib) types;
|
||||
|
||||
let releaseInfo = lib.importJSON ../../release.json;
|
||||
releaseInfo = lib.importJSON ../../release.json;
|
||||
|
||||
in {
|
||||
options = {
|
||||
home.stateVersion = mkOption {
|
||||
home.stateVersion = lib.mkOption {
|
||||
type = types.enum [
|
||||
"18.09"
|
||||
"19.03"
|
||||
|
|
@ -39,20 +40,20 @@ in {
|
|||
};
|
||||
|
||||
home.version = {
|
||||
full = mkOption {
|
||||
full = lib.mkOption {
|
||||
internal = true;
|
||||
readOnly = true;
|
||||
type = types.str;
|
||||
default = let
|
||||
inherit (config.home.version) release revision;
|
||||
suffix =
|
||||
optionalString (revision != null) "+${substring 0 8 revision}";
|
||||
suffix = lib.optionalString (revision != null)
|
||||
"+${lib.substring 0 8 revision}";
|
||||
in "${release}${suffix}";
|
||||
example = "22.11+213a0629";
|
||||
description = "The full Home Manager version.";
|
||||
};
|
||||
|
||||
release = mkOption {
|
||||
release = lib.mkOption {
|
||||
internal = true;
|
||||
readOnly = true;
|
||||
type = types.str;
|
||||
|
|
@ -61,7 +62,7 @@ in {
|
|||
description = "The Home Manager release.";
|
||||
};
|
||||
|
||||
isReleaseBranch = mkOption {
|
||||
isReleaseBranch = lib.mkOption {
|
||||
internal = true;
|
||||
readOnly = true;
|
||||
type = types.bool;
|
||||
|
|
@ -72,11 +73,14 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
revision = mkOption {
|
||||
revision = lib.mkOption {
|
||||
internal = true;
|
||||
type = types.nullOr types.str;
|
||||
default = let gitRepo = "${toString ./../..}/.git";
|
||||
in if pathIsGitRepo gitRepo then commitIdFromGitRepo gitRepo else null;
|
||||
in if lib.pathIsGitRepo gitRepo then
|
||||
lib.commitIdFromGitRepo gitRepo
|
||||
else
|
||||
null;
|
||||
description = ''
|
||||
The Git revision from which this Home Manager configuration was built.
|
||||
'';
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
{
|
||||
meta.maintainers = [ maintainers.rycee ];
|
||||
meta.maintainers = [ lib.maintainers.rycee ];
|
||||
|
||||
options.programs = let
|
||||
description = ''
|
||||
|
|
@ -12,13 +10,17 @@ with lib;
|
|||
directory.
|
||||
'';
|
||||
in {
|
||||
bash.enableVteIntegration = mkEnableOption "" // { inherit description; };
|
||||
bash.enableVteIntegration = lib.mkEnableOption "" // {
|
||||
inherit description;
|
||||
};
|
||||
|
||||
zsh.enableVteIntegration = mkEnableOption "" // { inherit description; };
|
||||
zsh.enableVteIntegration = lib.mkEnableOption "" // {
|
||||
inherit description;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkMerge [
|
||||
(mkIf config.programs.bash.enableVteIntegration {
|
||||
config = lib.mkMerge [
|
||||
(lib.mkIf config.programs.bash.enableVteIntegration {
|
||||
# Unfortunately we have to do a little dance here to fix two
|
||||
# problems with the upstream vte.sh file:
|
||||
#
|
||||
|
|
@ -42,7 +44,7 @@ with lib;
|
|||
'';
|
||||
})
|
||||
|
||||
(mkIf config.programs.zsh.enableVteIntegration {
|
||||
(lib.mkIf config.programs.zsh.enableVteIntegration {
|
||||
programs.zsh.initExtra = ''
|
||||
. ${pkgs.vte}/etc/profile.d/vte.sh
|
||||
'';
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
inherit (lib) literalExpression mkOption types;
|
||||
|
||||
desktopEntry = {
|
||||
imports = [
|
||||
(mkRemovedOptionModule [ "extraConfig" ]
|
||||
(lib.mkRemovedOptionModule [ "extraConfig" ]
|
||||
"The `extraConfig` option of `xdg.desktopEntries` has been removed following a change in Nixpkgs.")
|
||||
(mkRemovedOptionModule [ "fileValidation" ]
|
||||
(lib.mkRemovedOptionModule [ "fileValidation" ]
|
||||
"Validation of the desktop file is always enabled.")
|
||||
];
|
||||
options = {
|
||||
|
|
@ -172,12 +172,12 @@ let
|
|||
type exec icon comment terminal genericName startupNotify noDisplay
|
||||
prefersNonDefaultGPU actions;
|
||||
desktopName = config.name;
|
||||
mimeTypes = optionals (config.mimeType != null) config.mimeType;
|
||||
categories = optionals (config.categories != null) config.categories;
|
||||
mimeTypes = lib.optionals (config.mimeType != null) config.mimeType;
|
||||
categories = lib.optionals (config.categories != null) config.categories;
|
||||
extraConfig = config.settings;
|
||||
};
|
||||
in {
|
||||
meta.maintainers = [ hm.maintainers.cwyc ];
|
||||
meta.maintainers = [ lib.hm.maintainers.cwyc ];
|
||||
|
||||
options.xdg.desktopEntries = mkOption {
|
||||
description = ''
|
||||
|
|
@ -203,13 +203,16 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
config = mkIf (config.xdg.desktopEntries != { }) {
|
||||
config = lib.mkIf (config.xdg.desktopEntries != { }) {
|
||||
assertions = [
|
||||
(hm.assertions.assertPlatform "xdg.desktopEntries" pkgs platforms.linux)
|
||||
] ++ flatten (catAttrs "assertions" (attrValues config.xdg.desktopEntries));
|
||||
(lib.hm.assertions.assertPlatform "xdg.desktopEntries" pkgs
|
||||
lib.platforms.linux)
|
||||
] ++ lib.flatten
|
||||
(lib.catAttrs "assertions" (lib.attrValues config.xdg.desktopEntries));
|
||||
|
||||
home.packages = (map hiPrio # we need hiPrio to override existing entries
|
||||
(attrsets.mapAttrsToList makeFile config.xdg.desktopEntries));
|
||||
home.packages =
|
||||
(map lib.hiPrio # we need hiPrio to override existing entries
|
||||
(lib.attrsets.mapAttrsToList makeFile config.xdg.desktopEntries));
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,16 +1,15 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
inherit (lib) mkOption types;
|
||||
|
||||
cfg = config.xdg.mimeApps;
|
||||
|
||||
strListOrSingleton = with types;
|
||||
coercedTo (either (listOf str) str) toList (listOf str);
|
||||
coercedTo (either (listOf str) str) lib.toList (listOf str);
|
||||
|
||||
in {
|
||||
meta.maintainers = with maintainers; [ euxane ];
|
||||
meta.maintainers = with lib.maintainers; [ euxane ];
|
||||
|
||||
options.xdg.mimeApps = {
|
||||
enable = mkOption {
|
||||
|
|
@ -29,7 +28,7 @@ in {
|
|||
associations.added = mkOption {
|
||||
type = types.attrsOf strListOrSingleton;
|
||||
default = { };
|
||||
example = literalExpression ''
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
"mimetype1" = [ "foo1.desktop" "foo2.desktop" "foo3.desktop" ];
|
||||
"mimetype2" = "foo4.desktop";
|
||||
|
|
@ -56,7 +55,7 @@ in {
|
|||
defaultApplications = mkOption {
|
||||
type = types.attrsOf strListOrSingleton;
|
||||
default = { };
|
||||
example = literalExpression ''
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
"mimetype1" = [ "default1.desktop" "default2.desktop" ];
|
||||
}
|
||||
|
|
@ -71,22 +70,22 @@ in {
|
|||
};
|
||||
};
|
||||
|
||||
config = mkMerge [
|
||||
config = lib.mkMerge [
|
||||
{
|
||||
# Given a package that installs .desktop files in the usual location,
|
||||
# return a mapping from mime types to lists of desktop file names. This is
|
||||
# suitable for use with `xdg.mimeApps.defaultApplications`.
|
||||
lib.xdg.mimeAssociations = let
|
||||
processLines = str:
|
||||
zipAttrs
|
||||
(filter (e: e != null) (map processLine (splitString "\n" str)));
|
||||
lib.zipAttrs (lib.filter (e: e != null)
|
||||
(map processLine (lib.splitString "\n" str)));
|
||||
|
||||
processLine = str:
|
||||
let
|
||||
entry = splitString ";" str;
|
||||
k = elemAt entry 0;
|
||||
v = elemAt entry 1;
|
||||
in if length entry == 2 then { ${k} = v; } else null;
|
||||
entry = lib.splitString ";" str;
|
||||
k = lib.elemAt entry 0;
|
||||
v = lib.elemAt entry 1;
|
||||
in if lib.length entry == 2 then { ${k} = v; } else null;
|
||||
|
||||
associations = ps:
|
||||
pkgs.runCommand "mime-assoc" { inherit ps; } ''
|
||||
|
|
@ -100,17 +99,19 @@ in {
|
|||
in p: processLines (builtins.readFile (associations p));
|
||||
}
|
||||
|
||||
(mkIf cfg.enable {
|
||||
assertions =
|
||||
[ (hm.assertions.assertPlatform "xdg.mimeApps" pkgs platforms.linux) ];
|
||||
(lib.mkIf cfg.enable {
|
||||
assertions = [
|
||||
(lib.hm.assertions.assertPlatform "xdg.mimeApps" pkgs
|
||||
lib.platforms.linux)
|
||||
];
|
||||
|
||||
# Deprecated but still used by some applications.
|
||||
xdg.dataFile."applications/mimeapps.list".source =
|
||||
config.xdg.configFile."mimeapps.list".source;
|
||||
|
||||
xdg.configFile."mimeapps.list".text =
|
||||
let joinValues = mapAttrs (n: concatStringsSep ";");
|
||||
in generators.toINI { } {
|
||||
let joinValues = lib.mapAttrs (n: lib.concatStringsSep ";");
|
||||
in lib.generators.toINI { } {
|
||||
"Added Associations" = joinValues cfg.associations.added;
|
||||
"Removed Associations" = joinValues cfg.associations.removed;
|
||||
"Default Applications" = joinValues cfg.defaultApplications;
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.xdg.mime;
|
||||
inherit (lib) getExe getExe';
|
||||
|
||||
inherit (lib) getExe getExe' mkOption types;
|
||||
|
||||
in {
|
||||
options = {
|
||||
|
|
@ -13,8 +12,8 @@ in {
|
|||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = pkgs.stdenv.hostPlatform.isLinux;
|
||||
defaultText =
|
||||
literalExpression "true if host platform is Linux, false otherwise";
|
||||
defaultText = lib.literalExpression
|
||||
"true if host platform is Linux, false otherwise";
|
||||
description = ''
|
||||
Whether to install programs and files to support the
|
||||
XDG Shared MIME-info specification and XDG MIME Applications
|
||||
|
|
@ -29,22 +28,23 @@ in {
|
|||
sharedMimeInfoPackage = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.shared-mime-info;
|
||||
defaultText = literalExpression "pkgs.shared-mime-info";
|
||||
defaultText = lib.literalExpression "pkgs.shared-mime-info";
|
||||
description = "The package to use when running update-mime-database.";
|
||||
};
|
||||
|
||||
desktopFileUtilsPackage = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.desktop-file-utils;
|
||||
defaultText = literalExpression "pkgs.desktop-file-utils";
|
||||
defaultText = lib.literalExpression "pkgs.desktop-file-utils";
|
||||
description =
|
||||
"The package to use when running update-desktop-database.";
|
||||
};
|
||||
};
|
||||
};
|
||||
config = mkIf cfg.enable {
|
||||
assertions =
|
||||
[ (hm.assertions.assertPlatform "xdg.mime" pkgs platforms.linux) ];
|
||||
config = lib.mkIf cfg.enable {
|
||||
assertions = [
|
||||
(lib.hm.assertions.assertPlatform "xdg.mime" pkgs lib.platforms.linux)
|
||||
];
|
||||
|
||||
home.packages = [
|
||||
# Explicitly install package to provide basic mime types.
|
||||
|
|
|
|||
|
|
@ -1,33 +1,32 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
inherit (lib) types;
|
||||
|
||||
cfg = config.xdg.systemDirs;
|
||||
|
||||
configDirs = concatStringsSep ":" cfg.config;
|
||||
configDirs = lib.concatStringsSep ":" cfg.config;
|
||||
|
||||
dataDirs = concatStringsSep ":" cfg.data;
|
||||
dataDirs = lib.concatStringsSep ":" cfg.data;
|
||||
|
||||
in {
|
||||
meta.maintainers = with maintainers; [ tadfisher ];
|
||||
meta.maintainers = with lib.maintainers; [ tadfisher ];
|
||||
|
||||
options.xdg.systemDirs = {
|
||||
config = mkOption {
|
||||
config = lib.mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [ ];
|
||||
example = literalExpression ''[ "/etc/xdg" ]'';
|
||||
example = lib.literalExpression ''[ "/etc/xdg" ]'';
|
||||
description = ''
|
||||
Directory names to add to {env}`XDG_CONFIG_DIRS`
|
||||
in the user session.
|
||||
'';
|
||||
};
|
||||
|
||||
data = mkOption {
|
||||
data = lib.mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [ ];
|
||||
example = literalExpression ''[ "/usr/share" "/usr/local/share" ]'';
|
||||
example = lib.literalExpression ''[ "/usr/share" "/usr/local/share" ]'';
|
||||
description = ''
|
||||
Directory names to add to {env}`XDG_DATA_DIRS`
|
||||
in the user session.
|
||||
|
|
@ -35,14 +34,15 @@ in {
|
|||
};
|
||||
};
|
||||
|
||||
config = mkMerge [
|
||||
(mkIf (cfg.config != [ ] || cfg.data != [ ]) {
|
||||
config = lib.mkMerge [
|
||||
(lib.mkIf (cfg.config != [ ] || cfg.data != [ ]) {
|
||||
assertions = [
|
||||
(hm.assertions.assertPlatform "xdg.systemDirs" pkgs platforms.linux)
|
||||
(lib.hm.assertions.assertPlatform "xdg.systemDirs" pkgs
|
||||
lib.platforms.linux)
|
||||
];
|
||||
})
|
||||
|
||||
(mkIf (cfg.config != [ ]) {
|
||||
(lib.mkIf (cfg.config != [ ]) {
|
||||
home.sessionVariables.XDG_CONFIG_DIRS =
|
||||
"${configDirs}\${XDG_CONFIG_DIRS:+:$XDG_CONFIG_DIRS}";
|
||||
|
||||
|
|
@ -50,7 +50,7 @@ in {
|
|||
"${configDirs}\${XDG_CONFIG_DIRS:+:$XDG_CONFIG_DIRS}";
|
||||
})
|
||||
|
||||
(mkIf (cfg.data != [ ]) {
|
||||
(lib.mkIf (cfg.data != [ ]) {
|
||||
home.sessionVariables.XDG_DATA_DIRS =
|
||||
"${dataDirs}\${XDG_DATA_DIRS:+:$XDG_DATA_DIRS}";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,16 +1,15 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
inherit (lib) literalExpression mkOption types;
|
||||
|
||||
cfg = config.xdg.userDirs;
|
||||
|
||||
in {
|
||||
meta.maintainers = with maintainers; [ euxane ];
|
||||
meta.maintainers = with lib.maintainers; [ euxane ];
|
||||
|
||||
imports = [
|
||||
(mkRenamedOptionModule [ "xdg" "userDirs" "publishShare" ] [
|
||||
(lib.mkRenamedOptionModule [ "xdg" "userDirs" "publishShare" ] [
|
||||
"xdg"
|
||||
"userDirs"
|
||||
"publicShare"
|
||||
|
|
@ -108,11 +107,11 @@ in {
|
|||
};
|
||||
|
||||
createDirectories =
|
||||
mkEnableOption "automatic creation of the XDG user directories";
|
||||
lib.mkEnableOption "automatic creation of the XDG user directories";
|
||||
};
|
||||
|
||||
config = let
|
||||
directories = (filterAttrs (n: v: !isNull v) {
|
||||
directories = (lib.filterAttrs (n: v: !isNull v) {
|
||||
XDG_DESKTOP_DIR = cfg.desktop;
|
||||
XDG_DOCUMENTS_DIR = cfg.documents;
|
||||
XDG_DOWNLOAD_DIR = cfg.download;
|
||||
|
|
@ -122,24 +121,26 @@ in {
|
|||
XDG_TEMPLATES_DIR = cfg.templates;
|
||||
XDG_VIDEOS_DIR = cfg.videos;
|
||||
}) // cfg.extraConfig;
|
||||
in mkIf cfg.enable {
|
||||
assertions =
|
||||
[ (hm.assertions.assertPlatform "xdg.userDirs" pkgs platforms.linux) ];
|
||||
in lib.mkIf cfg.enable {
|
||||
assertions = [
|
||||
(lib.hm.assertions.assertPlatform "xdg.userDirs" pkgs lib.platforms.linux)
|
||||
];
|
||||
|
||||
xdg.configFile."user-dirs.dirs".text = let
|
||||
# For some reason, these need to be wrapped with quotes to be valid.
|
||||
wrapped = mapAttrs (_: value: ''"${value}"'') directories;
|
||||
in generators.toKeyValue { } wrapped;
|
||||
wrapped = lib.mapAttrs (_: value: ''"${value}"'') directories;
|
||||
in lib.generators.toKeyValue { } wrapped;
|
||||
|
||||
xdg.configFile."user-dirs.conf".text = "enabled=False";
|
||||
|
||||
home.sessionVariables = directories;
|
||||
|
||||
home.activation.createXdgUserDirectories = mkIf cfg.createDirectories (let
|
||||
directoriesList = attrValues directories;
|
||||
mkdir =
|
||||
(dir: ''[[ -L "${dir}" ]] || run mkdir -p $VERBOSE_ARG "${dir}"'');
|
||||
in lib.hm.dag.entryAfter [ "linkGeneration" ]
|
||||
(strings.concatMapStringsSep "\n" mkdir directoriesList));
|
||||
home.activation.createXdgUserDirectories = lib.mkIf cfg.createDirectories
|
||||
(let
|
||||
directoriesList = lib.attrValues directories;
|
||||
mkdir =
|
||||
(dir: ''[[ -L "${dir}" ]] || run mkdir -p $VERBOSE_ARG "${dir}"'');
|
||||
in lib.hm.dag.entryAfter [ "linkGeneration" ]
|
||||
(lib.strings.concatMapStringsSep "\n" mkdir directoriesList));
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
{ options, config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
inherit (lib) mkOptionDefault mkIf mkOption types;
|
||||
|
||||
cfg = config.xdg;
|
||||
|
||||
|
|
@ -22,7 +21,7 @@ let
|
|||
|
||||
in {
|
||||
options.xdg = {
|
||||
enable = mkEnableOption "management of XDG base directories";
|
||||
enable = lib.mkEnableOption "management of XDG base directories";
|
||||
|
||||
cacheFile = mkOption {
|
||||
type = fileType "xdg.cacheFile" "{var}`xdg.cacheHome`" cfg.cacheHome;
|
||||
|
|
@ -107,7 +106,7 @@ in {
|
|||
};
|
||||
};
|
||||
|
||||
config = mkMerge [
|
||||
config = lib.mkMerge [
|
||||
(let
|
||||
variables = {
|
||||
XDG_CACHE_HOME = cfg.cacheHome;
|
||||
|
|
@ -127,7 +126,7 @@ in {
|
|||
})
|
||||
|
||||
# Legacy non-deterministic setup.
|
||||
(mkIf (!cfg.enable && versionOlder config.home.stateVersion "20.09") {
|
||||
(mkIf (!cfg.enable && lib.versionOlder config.home.stateVersion "20.09") {
|
||||
xdg.cacheHome =
|
||||
mkOptionDefault (getEnvFallback "XDG_CACHE_HOME" defaultCacheHome);
|
||||
xdg.configHome =
|
||||
|
|
@ -139,7 +138,7 @@ in {
|
|||
})
|
||||
|
||||
# "Modern" deterministic setup.
|
||||
(mkIf (!cfg.enable && versionAtLeast config.home.stateVersion "20.09") {
|
||||
(mkIf (!cfg.enable && lib.versionAtLeast config.home.stateVersion "20.09") {
|
||||
xdg.cacheHome = mkOptionDefault defaultCacheHome;
|
||||
xdg.configHome = mkOptionDefault defaultConfigHome;
|
||||
xdg.dataHome = mkOptionDefault defaultDataHome;
|
||||
|
|
@ -147,14 +146,18 @@ in {
|
|||
})
|
||||
|
||||
{
|
||||
home.file = mkMerge [
|
||||
(mapAttrs' (name: file: nameValuePair "${cfg.cacheHome}/${name}" file)
|
||||
home.file = lib.mkMerge [
|
||||
(lib.mapAttrs'
|
||||
(name: file: lib.nameValuePair "${cfg.cacheHome}/${name}" file)
|
||||
cfg.cacheFile)
|
||||
(mapAttrs' (name: file: nameValuePair "${cfg.configHome}/${name}" file)
|
||||
(lib.mapAttrs'
|
||||
(name: file: lib.nameValuePair "${cfg.configHome}/${name}" file)
|
||||
cfg.configFile)
|
||||
(mapAttrs' (name: file: nameValuePair "${cfg.dataHome}/${name}" file)
|
||||
(lib.mapAttrs'
|
||||
(name: file: lib.nameValuePair "${cfg.dataHome}/${name}" file)
|
||||
cfg.dataFile)
|
||||
(mapAttrs' (name: file: nameValuePair "${cfg.stateHome}/${name}" file)
|
||||
(lib.mapAttrs'
|
||||
(name: file: lib.nameValuePair "${cfg.stateHome}/${name}" file)
|
||||
cfg.stateFile)
|
||||
{ "${cfg.cacheHome}/.keep".text = ""; }
|
||||
{ "${cfg.stateHome}/.keep".text = ""; }
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
inherit (lib) mkOption types;
|
||||
|
||||
cfg = config.xfconf;
|
||||
|
||||
|
|
@ -51,12 +50,12 @@ let
|
|||
"-s"
|
||||
v
|
||||
] else if builtins.isList v then
|
||||
[ "-a" ] ++ concatMap withType v
|
||||
[ "-a" ] ++ lib.concatMap withType v
|
||||
else
|
||||
throw "unexpected xfconf type: ${builtins.typeOf v}";
|
||||
|
||||
in {
|
||||
meta.maintainers = [ maintainers.chuangzhu ];
|
||||
meta.maintainers = [ lib.maintainers.chuangzhu ];
|
||||
|
||||
options.xfconf = {
|
||||
enable = mkOption {
|
||||
|
|
@ -81,7 +80,7 @@ in {
|
|||
description = "xfconf settings";
|
||||
};
|
||||
default = { };
|
||||
example = literalExpression ''
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
xfce4-session = {
|
||||
"startup/ssh-agent/enabled" = false;
|
||||
|
|
@ -99,16 +98,16 @@ in {
|
|||
};
|
||||
};
|
||||
|
||||
config = mkIf (cfg.enable && cfg.settings != { }) {
|
||||
config = lib.mkIf (cfg.enable && cfg.settings != { }) {
|
||||
assertions =
|
||||
[ (hm.assertions.assertPlatform "xfconf" pkgs platforms.linux) ];
|
||||
[ (lib.hm.assertions.assertPlatform "xfconf" pkgs lib.platforms.linux) ];
|
||||
|
||||
home.activation.xfconfSettings = hm.dag.entryAfter [ "installPackages" ]
|
||||
home.activation.xfconfSettings = lib.hm.dag.entryAfter [ "installPackages" ]
|
||||
(let
|
||||
mkCommand = channel: property: value: ''
|
||||
run ${pkgs.xfce.xfconf}/bin/xfconf-query \
|
||||
${
|
||||
escapeShellArgs ([ "-c" channel "-p" "/${property}" ]
|
||||
lib.escapeShellArgs ([ "-c" channel "-p" "/${property}" ]
|
||||
++ (if value == null then
|
||||
[ "-r" ]
|
||||
else
|
||||
|
|
@ -116,13 +115,12 @@ in {
|
|||
}
|
||||
'';
|
||||
|
||||
commands = mapAttrsToList
|
||||
(channel: properties: mapAttrsToList (mkCommand channel) properties)
|
||||
cfg.settings;
|
||||
commands = lib.mapAttrsToList (channel: properties:
|
||||
lib.mapAttrsToList (mkCommand channel) properties) cfg.settings;
|
||||
|
||||
load = pkgs.writeShellScript "load-xfconf" ''
|
||||
${config.lib.bash.initHomeManagerLib}
|
||||
${concatMapStrings concatStrings commands}
|
||||
${lib.concatMapStrings lib.concatStrings commands}
|
||||
'';
|
||||
in ''
|
||||
if [[ -v DBUS_SESSION_BUS_ADDRESS ]]; then
|
||||
|
|
|
|||
|
|
@ -9,8 +9,6 @@
|
|||
# If disabled, the pkgs attribute passed to this function is used instead.
|
||||
, useNixpkgsModule ? true }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
modules = [
|
||||
|
|
@ -442,28 +440,28 @@ let
|
|||
(pkgs.path + "/nixos/modules/misc/assertions.nix")
|
||||
(pkgs.path + "/nixos/modules/misc/meta.nix")
|
||||
|
||||
(mkRemovedOptionModule [ "services" "password-store-sync" ] ''
|
||||
(lib.mkRemovedOptionModule [ "services" "password-store-sync" ] ''
|
||||
Use services.git-sync instead.
|
||||
'')
|
||||
(mkRemovedOptionModule [ "services" "keepassx" ] ''
|
||||
(lib.mkRemovedOptionModule [ "services" "keepassx" ] ''
|
||||
KeePassX is no longer maintained.
|
||||
'')
|
||||
] ++ optional useNixpkgsModule ./misc/nixpkgs.nix
|
||||
++ optional (!useNixpkgsModule) ./misc/nixpkgs-disabled.nix;
|
||||
] ++ lib.optional useNixpkgsModule ./misc/nixpkgs.nix
|
||||
++ lib.optional (!useNixpkgsModule) ./misc/nixpkgs-disabled.nix;
|
||||
|
||||
pkgsModule = { config, ... }: {
|
||||
config = {
|
||||
_module.args.baseModules = modules;
|
||||
_module.args.pkgsPath = lib.mkDefault
|
||||
(if versionAtLeast config.home.stateVersion "20.09" then
|
||||
(if lib.versionAtLeast config.home.stateVersion "20.09" then
|
||||
pkgs.path
|
||||
else
|
||||
<nixpkgs>);
|
||||
_module.args.pkgs = lib.mkDefault pkgs;
|
||||
_module.check = check;
|
||||
lib = lib.hm;
|
||||
} // optionalAttrs useNixpkgsModule {
|
||||
nixpkgs.system = mkDefault pkgs.stdenv.hostPlatform.system;
|
||||
} // lib.optionalAttrs useNixpkgsModule {
|
||||
nixpkgs.system = lib.mkDefault pkgs.stdenv.hostPlatform.system;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
homeDir = config.home.homeDirectory;
|
||||
fontsEnv = pkgs.buildEnv {
|
||||
|
|
@ -13,13 +11,13 @@ let
|
|||
installDir = "${homeDir}/Library/Fonts/HomeManager";
|
||||
in {
|
||||
# macOS won't recognize symlinked fonts
|
||||
config = mkIf pkgs.stdenv.hostPlatform.isDarwin {
|
||||
config = lib.mkIf pkgs.stdenv.hostPlatform.isDarwin {
|
||||
home.file."Library/Fonts/.home-manager-fonts-version" = {
|
||||
text = "${fontsEnv}";
|
||||
onChange = ''
|
||||
run mkdir -p ${escapeShellArg installDir}
|
||||
run mkdir -p ${lib.escapeShellArg installDir}
|
||||
run ${pkgs.rsync}/bin/rsync $VERBOSE_ARG -acL --chmod=u+w --delete \
|
||||
${escapeShellArgs [ "${fonts}/" installDir ]}
|
||||
${lib.escapeShellArgs [ "${fonts}/" installDir ]}
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,15 +1,13 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.targets.darwin;
|
||||
homeDir = config.home.homeDirectory;
|
||||
confFile = pkgs.writeText "DefaultKeybinding.dict"
|
||||
(lib.generators.toPlist { } cfg.keybindings);
|
||||
in {
|
||||
options.targets.darwin.keybindings = mkOption {
|
||||
type = with types; attrsOf anything;
|
||||
options.targets.darwin.keybindings = lib.mkOption {
|
||||
type = with lib.types; attrsOf anything;
|
||||
default = { };
|
||||
example = {
|
||||
"^u" = "deleteToBeginningOfLine:";
|
||||
|
|
@ -28,15 +26,15 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
config = mkIf (cfg.keybindings != { }) {
|
||||
config = lib.mkIf (cfg.keybindings != { }) {
|
||||
assertions = [
|
||||
(hm.assertions.assertPlatform "targets.darwin.keybindings" pkgs
|
||||
platforms.darwin)
|
||||
(lib.hm.assertions.assertPlatform "targets.darwin.keybindings" pkgs
|
||||
lib.platforms.darwin)
|
||||
];
|
||||
|
||||
# NOTE: just copy the files because symlinks won't be recognized by macOS
|
||||
home.activation.setCocoaKeybindings =
|
||||
hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||
lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||
verboseEcho "Configuring keybindings for the Cocoa Text System"
|
||||
run install -Dm644 $VERBOSE_ARG \
|
||||
"${confFile}" "${homeDir}/Library/KeyBindings/DefaultKeyBinding.dict"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.targets.darwin;
|
||||
searchEngines = {
|
||||
|
|
@ -11,18 +9,18 @@ let
|
|||
Google = "com.google.www";
|
||||
Yahoo = "com.yahoo.www";
|
||||
};
|
||||
searchId = getAttr cfg.search searchEngines;
|
||||
searchId = lib.getAttr cfg.search searchEngines;
|
||||
in {
|
||||
options.targets.darwin.search = mkOption {
|
||||
type = with types; nullOr (enum (attrNames searchEngines));
|
||||
options.targets.darwin.search = lib.mkOption {
|
||||
type = with lib.types; nullOr (enum (lib.attrNames searchEngines));
|
||||
default = null;
|
||||
description = "Default search engine.";
|
||||
};
|
||||
|
||||
config = mkIf (cfg.search != null) {
|
||||
config = lib.mkIf (cfg.search != null) {
|
||||
assertions = [
|
||||
(hm.assertions.assertPlatform "targets.darwin.search" pkgs
|
||||
platforms.darwin)
|
||||
(lib.hm.assertions.assertPlatform "targets.darwin.search" pkgs
|
||||
lib.platforms.darwin)
|
||||
];
|
||||
|
||||
targets.darwin.defaults = {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.targets.darwin;
|
||||
|
||||
|
|
@ -13,27 +11,27 @@ let
|
|||
cliFlags = lib.optionalString isLocal "-currentHost";
|
||||
|
||||
toActivationCmd = domain: attrs:
|
||||
"run /usr/bin/defaults ${cliFlags} import ${escapeShellArg domain} ${
|
||||
toDefaultsFile domain attrs
|
||||
}";
|
||||
"run /usr/bin/defaults ${cliFlags} import ${
|
||||
lib.escapeShellArg domain
|
||||
} ${toDefaultsFile domain attrs}";
|
||||
|
||||
nonNullDefaults =
|
||||
mapAttrs (domain: attrs: (filterAttrs (n: v: v != null) attrs))
|
||||
lib.mapAttrs (domain: attrs: (lib.filterAttrs (n: v: v != null) attrs))
|
||||
settings;
|
||||
|
||||
writableDefaults =
|
||||
filterAttrs (domain: attrs: attrs != { }) nonNullDefaults;
|
||||
in mapAttrsToList toActivationCmd writableDefaults;
|
||||
lib.filterAttrs (domain: attrs: attrs != { }) nonNullDefaults;
|
||||
in lib.mapAttrsToList toActivationCmd writableDefaults;
|
||||
|
||||
defaultsCmds = mkActivationCmds false cfg.defaults;
|
||||
currentHostDefaultsCmds = mkActivationCmds true cfg.currentHostDefaults;
|
||||
|
||||
activationCmds = defaultsCmds ++ currentHostDefaultsCmds;
|
||||
in {
|
||||
meta.maintainers = [ maintainers.midchildan ];
|
||||
meta.maintainers = [ lib.maintainers.midchildan ];
|
||||
|
||||
options.targets.darwin.defaults = mkOption {
|
||||
type = types.submodule ./opts-allhosts.nix;
|
||||
options.targets.darwin.defaults = lib.mkOption {
|
||||
type = lib.types.submodule ./opts-allhosts.nix;
|
||||
default = { };
|
||||
example = {
|
||||
"com.apple.desktopservices" = {
|
||||
|
|
@ -56,8 +54,8 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
options.targets.darwin.currentHostDefaults = mkOption {
|
||||
type = types.submodule ./opts-currenthost.nix;
|
||||
options.targets.darwin.currentHostDefaults = lib.mkOption {
|
||||
type = lib.types.submodule ./opts-currenthost.nix;
|
||||
default = { };
|
||||
example = {
|
||||
"com.apple.controlcenter" = { BatteryShowPercentage = true; };
|
||||
|
|
@ -75,33 +73,34 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
config = mkIf (activationCmds != [ ]) {
|
||||
config = lib.mkIf (activationCmds != [ ]) {
|
||||
assertions = [
|
||||
(hm.assertions.assertPlatform "targets.darwin.defaults" pkgs
|
||||
platforms.darwin)
|
||||
(lib.hm.assertions.assertPlatform "targets.darwin.defaults" pkgs
|
||||
lib.platforms.darwin)
|
||||
];
|
||||
|
||||
warnings = let
|
||||
batteryOptionName = ''
|
||||
targets.darwin.currentHostDefaults."com.apple.controlcenter".BatteryShowPercentage'';
|
||||
batteryPercentage =
|
||||
attrByPath [ "com.apple.menuextra.battery" "ShowPercent" ] null
|
||||
lib.attrByPath [ "com.apple.menuextra.battery" "ShowPercent" ] null
|
||||
cfg.defaults;
|
||||
webkitDevExtras = attrByPath [
|
||||
webkitDevExtras = lib.attrByPath [
|
||||
"com.apple.Safari"
|
||||
"com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled"
|
||||
] null cfg.defaults;
|
||||
in optional (batteryPercentage != null) ''
|
||||
in lib.optional (batteryPercentage != null) ''
|
||||
The option 'com.apple.menuextra.battery.ShowPercent' no longer works on
|
||||
macOS 11 and later. Instead, use '${batteryOptionName}'.
|
||||
'' ++ optional (webkitDevExtras != null) ''
|
||||
'' ++ lib.optional (webkitDevExtras != null) ''
|
||||
The option 'com.apple.Safari.com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled'
|
||||
is no longer present in recent versions of Safari.
|
||||
'';
|
||||
|
||||
home.activation.setDarwinDefaults = hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||
verboseEcho "Configuring macOS user defaults"
|
||||
${concatStringsSep "\n" activationCmds}
|
||||
'';
|
||||
home.activation.setDarwinDefaults =
|
||||
lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||
verboseEcho "Configuring macOS user defaults"
|
||||
${lib.concatStringsSep "\n" activationCmds}
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
{ config, lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
inherit (lib) types;
|
||||
|
||||
mkNullableOption = args:
|
||||
lib.mkOption (args // {
|
||||
type = types.nullOr args.type;
|
||||
|
|
@ -284,12 +284,12 @@ in {
|
|||
};
|
||||
|
||||
config = {
|
||||
"com.apple.Safari" = mkIf (safari.IncludeDevelopMenu != null) {
|
||||
"com.apple.Safari" = lib.mkIf (safari.IncludeDevelopMenu != null) {
|
||||
WebKitDeveloperExtrasEnabledPreferenceKey = safari.IncludeDevelopMenu;
|
||||
"WebKitPreferences.developerExtrasEnabled" = safari.IncludeDevelopMenu;
|
||||
};
|
||||
"com.apple.Safari.SandboxBroker" =
|
||||
mkIf (safari.IncludeDevelopMenu != null) {
|
||||
lib.mkIf (safari.IncludeDevelopMenu != null) {
|
||||
ShowDevelopMenu = safari.IncludeDevelopMenu;
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{ config, lib, ... }:
|
||||
{ lib, ... }:
|
||||
|
||||
let
|
||||
mkNullableOption = args:
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.targets.genericLinux;
|
||||
|
|
@ -12,7 +10,7 @@ let
|
|||
|
||||
in {
|
||||
imports = [
|
||||
(mkRenamedOptionModule [ "targets" "genericLinux" "extraXdgDataDirs" ] [
|
||||
(lib.mkRenamedOptionModule [ "targets" "genericLinux" "extraXdgDataDirs" ] [
|
||||
"xdg"
|
||||
"systemDirs"
|
||||
"data"
|
||||
|
|
@ -20,7 +18,7 @@ in {
|
|||
];
|
||||
|
||||
options.targets.genericLinux = {
|
||||
enable = mkEnableOption "" // {
|
||||
enable = lib.mkEnableOption "" // {
|
||||
description = ''
|
||||
Whether to enable settings that make Home Manager work better on
|
||||
GNU/Linux distributions other than NixOS.
|
||||
|
|
@ -28,9 +26,10 @@ in {
|
|||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
config = lib.mkIf cfg.enable {
|
||||
assertions = [
|
||||
(hm.assertions.assertPlatform "targets.genericLinux" pkgs platforms.linux)
|
||||
(lib.hm.assertions.assertPlatform "targets.genericLinux" pkgs
|
||||
lib.platforms.linux)
|
||||
];
|
||||
|
||||
xdg.systemDirs.data = [
|
||||
|
|
@ -49,11 +48,12 @@ in {
|
|||
# resolving to the Nix store.
|
||||
# https://github.com/nix-community/home-manager/pull/2891#issuecomment-1101064521
|
||||
home.sessionVariables = {
|
||||
XCURSOR_PATH = "$XCURSOR_PATH\${XCURSOR_PATH:+:}" + concatStringsSep ":" [
|
||||
"${config.home.profileDirectory}/share/icons"
|
||||
"/usr/share/icons"
|
||||
"/usr/share/pixmaps"
|
||||
];
|
||||
XCURSOR_PATH = "$XCURSOR_PATH\${XCURSOR_PATH:+:}"
|
||||
+ lib.concatStringsSep ":" [
|
||||
"${config.home.profileDirectory}/share/icons"
|
||||
"/usr/share/icons"
|
||||
"/usr/share/pixmaps"
|
||||
];
|
||||
};
|
||||
|
||||
home.sessionVariablesExtra = ''
|
||||
|
|
@ -93,7 +93,7 @@ in {
|
|||
# https://salsa.debian.org/debian/ncurses/-/blob/master/debian/rules
|
||||
# https://src.fedoraproject.org/rpms/ncurses/blob/main/f/ncurses.spec
|
||||
# https://gitweb.gentoo.org/repo/gentoo.git/tree/sys-libs/ncurses/ncurses-6.2-r1.ebuild
|
||||
distroTerminfoDirs = concatStringsSep ":" [
|
||||
distroTerminfoDirs = lib.concatStringsSep ":" [
|
||||
"/etc/terminfo" # debian, fedora, gentoo
|
||||
"/lib/terminfo" # debian
|
||||
"/usr/share/terminfo" # package default, all distros
|
||||
|
|
|
|||
|
|
@ -1,24 +1,23 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
inherit (lib) mkOption types;
|
||||
|
||||
cfg = config.xresources;
|
||||
|
||||
formatLine = n: v:
|
||||
let
|
||||
formatList = x:
|
||||
if isList x then
|
||||
if lib.isList x then
|
||||
throw "can not convert 2-dimensional lists to Xresources format"
|
||||
else
|
||||
formatValue x;
|
||||
|
||||
formatValue = v:
|
||||
if isBool v then
|
||||
if lib.isBool v then
|
||||
(if v then "true" else "false")
|
||||
else if isList v then
|
||||
concatMapStringsSep ", " formatList v
|
||||
else if lib.isList v then
|
||||
lib.concatMapStringsSep ", " formatList v
|
||||
else
|
||||
toString v;
|
||||
in "${n}: ${formatValue v}";
|
||||
|
|
@ -26,7 +25,7 @@ let
|
|||
xrdbMerge = "${pkgs.xorg.xrdb}/bin/xrdb -merge ${cfg.path}";
|
||||
|
||||
in {
|
||||
meta.maintainers = [ maintainers.rycee ];
|
||||
meta.maintainers = [ lib.maintainers.rycee ];
|
||||
|
||||
options = {
|
||||
xresources.properties = mkOption {
|
||||
|
|
@ -36,7 +35,7 @@ in {
|
|||
entry = either prim (listOf prim);
|
||||
in nullOr (attrsOf entry);
|
||||
default = null;
|
||||
example = literalExpression ''
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
"Emacs*toolBar" = 0;
|
||||
"XTerm*faceName" = "dejavu sans mono";
|
||||
|
|
@ -58,7 +57,7 @@ in {
|
|||
xresources.extraConfig = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
example = literalExpression ''
|
||||
example = lib.literalExpression ''
|
||||
builtins.readFile (
|
||||
pkgs.fetchFromGitHub {
|
||||
owner = "solarized";
|
||||
|
|
@ -85,13 +84,13 @@ in {
|
|||
};
|
||||
};
|
||||
|
||||
config = mkIf ((cfg.properties != null && cfg.properties != { })
|
||||
config = lib.mkIf ((cfg.properties != null && cfg.properties != { })
|
||||
|| cfg.extraConfig != "") {
|
||||
home.file.${cfg.path} = {
|
||||
text = concatStringsSep "\n" ([ ]
|
||||
++ optional (cfg.extraConfig != "") cfg.extraConfig
|
||||
++ optionals (cfg.properties != null)
|
||||
(mapAttrsToList formatLine cfg.properties)) + "\n";
|
||||
text = lib.concatStringsSep "\n" ([ ]
|
||||
++ lib.optional (cfg.extraConfig != "") cfg.extraConfig
|
||||
++ lib.optionals (cfg.properties != null)
|
||||
(lib.mapAttrsToList formatLine cfg.properties)) + "\n";
|
||||
onChange = ''
|
||||
if [[ -v DISPLAY ]]; then
|
||||
${xrdbMerge}
|
||||
|
|
|
|||
|
|
@ -1,17 +1,16 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
inherit (lib) mkOption types;
|
||||
|
||||
cfg = config.xsession;
|
||||
|
||||
in {
|
||||
meta.maintainers = [ maintainers.rycee ];
|
||||
meta.maintainers = [ lib.maintainers.rycee ];
|
||||
|
||||
options = {
|
||||
xsession = {
|
||||
enable = mkEnableOption "X Session";
|
||||
enable = lib.mkEnableOption "X Session";
|
||||
|
||||
trayTarget = mkOption {
|
||||
readOnly = true;
|
||||
|
|
@ -49,7 +48,7 @@ in {
|
|||
|
||||
windowManager.command = mkOption {
|
||||
type = types.str;
|
||||
example = literalExpression ''
|
||||
example = lib.literalExpression ''
|
||||
let
|
||||
xmonad = pkgs.xmonad-with-packages.override {
|
||||
packages = self: [ self.xmonad-contrib self.taffybar ];
|
||||
|
|
@ -92,7 +91,7 @@ in {
|
|||
|
||||
importedVariables = mkOption {
|
||||
type = types.listOf (types.strMatching "[a-zA-Z_][a-zA-Z0-9_]*");
|
||||
apply = unique;
|
||||
apply = lib.unique;
|
||||
example = [ "GDK_PIXBUF_ICON_LOADER" ];
|
||||
visible = false;
|
||||
description = ''
|
||||
|
|
@ -104,9 +103,10 @@ in {
|
|||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
assertions =
|
||||
[ (hm.assertions.assertPlatform "xsession" pkgs platforms.linux) ];
|
||||
config = lib.mkIf cfg.enable {
|
||||
assertions = [
|
||||
(lib.hm.assertions.assertPlatform "xsession" pkgs lib.platforms.linux)
|
||||
];
|
||||
|
||||
xsession.importedVariables = [
|
||||
"DBUS_SESSION_BUS_ADDRESS"
|
||||
|
|
@ -119,7 +119,7 @@ in {
|
|||
];
|
||||
|
||||
systemd.user = {
|
||||
services = mkIf (config.home.keyboard != null) {
|
||||
services = lib.mkIf (config.home.keyboard != null) {
|
||||
setxkbmap = {
|
||||
Unit = {
|
||||
Description = "Set up keyboard in X";
|
||||
|
|
@ -134,9 +134,9 @@ in {
|
|||
RemainAfterExit = true;
|
||||
ExecStart = with config.home.keyboard;
|
||||
let
|
||||
args = optional (layout != null) "-layout '${layout}'"
|
||||
++ optional (variant != null) "-variant '${variant}'"
|
||||
++ optional (model != null) "-model '${model}'"
|
||||
args = lib.optional (layout != null) "-layout '${layout}'"
|
||||
++ lib.optional (variant != null) "-variant '${variant}'"
|
||||
++ lib.optional (model != null) "-model '${model}'"
|
||||
++ [ "-option ''" ] ++ map (v: "-option '${v}'") options;
|
||||
in "${pkgs.xorg.setxkbmap}/bin/setxkbmap ${toString args}";
|
||||
};
|
||||
|
|
@ -193,9 +193,9 @@ in {
|
|||
# script starts up graphical-session.target.
|
||||
systemctl --user stop graphical-session.target graphical-session-pre.target
|
||||
|
||||
${optionalString (cfg.importedVariables != [ ])
|
||||
${lib.optionalString (cfg.importedVariables != [ ])
|
||||
("systemctl --user import-environment "
|
||||
+ escapeShellArgs cfg.importedVariables)}
|
||||
+ lib.escapeShellArgs cfg.importedVariables)}
|
||||
|
||||
${cfg.profileExtra}
|
||||
|
||||
|
|
@ -224,9 +224,9 @@ in {
|
|||
sleep 0.5
|
||||
done
|
||||
|
||||
${optionalString (cfg.importedVariables != [ ])
|
||||
${lib.optionalString (cfg.importedVariables != [ ])
|
||||
("systemctl --user unset-environment "
|
||||
+ escapeShellArgs cfg.importedVariables)}
|
||||
+ lib.escapeShellArgs cfg.importedVariables)}
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.home-manager;
|
||||
|
|
@ -9,11 +7,11 @@ let
|
|||
in {
|
||||
imports = [ ../nixos/common.nix ];
|
||||
|
||||
config = mkMerge [
|
||||
config = lib.mkMerge [
|
||||
{ home-manager.extraSpecialArgs.darwinConfig = config; }
|
||||
(mkIf (cfg.users != { }) {
|
||||
system.activationScripts.postActivation.text = concatStringsSep "\n"
|
||||
(mapAttrsToList (username: usercfg: ''
|
||||
(lib.mkIf (cfg.users != { }) {
|
||||
system.activationScripts.postActivation.text = lib.concatStringsSep "\n"
|
||||
(lib.mapAttrsToList (username: usercfg: ''
|
||||
echo Activating home-manager configuration for ${username}
|
||||
sudo -u ${username} --set-home ${
|
||||
pkgs.writeShellScript "activation-${username}" ''
|
||||
|
|
|
|||
|
|
@ -3,9 +3,8 @@
|
|||
|
||||
{ options, config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
inherit (lib) flip mkOption mkEnableOption mkIf types;
|
||||
|
||||
cfg = config.home-manager;
|
||||
|
||||
|
|
@ -74,7 +73,7 @@ in {
|
|||
extraSpecialArgs = mkOption {
|
||||
type = types.attrs;
|
||||
default = { };
|
||||
example = literalExpression "{ inherit emacs-overlay; }";
|
||||
example = lib.literalExpression "{ inherit emacs-overlay; }";
|
||||
description = ''
|
||||
Extra `specialArgs` passed to Home Manager. This
|
||||
option can be used to pass additional arguments to all modules.
|
||||
|
|
@ -84,7 +83,8 @@ in {
|
|||
sharedModules = mkOption {
|
||||
type = with types; listOf raw;
|
||||
default = [ ];
|
||||
example = literalExpression "[ { home.packages = [ nixpkgs-fmt ]; } ]";
|
||||
example =
|
||||
lib.literalExpression "[ { home.packages = [ nixpkgs-fmt ]; } ]";
|
||||
description = ''
|
||||
Extra modules added to all users.
|
||||
'';
|
||||
|
|
@ -103,19 +103,18 @@ in {
|
|||
};
|
||||
};
|
||||
|
||||
config = (mkMerge [
|
||||
config = (lib.mkMerge [
|
||||
# Fix potential recursion when configuring home-manager users based on values in users.users #594
|
||||
(mkIf (cfg.useUserPackages && cfg.users != { }) {
|
||||
users.users =
|
||||
(mapAttrs (username: usercfg: { packages = [ usercfg.home.path ]; })
|
||||
cfg.users);
|
||||
users.users = (lib.mapAttrs
|
||||
(_username: usercfg: { packages = [ usercfg.home.path ]; }) cfg.users);
|
||||
environment.pathsToLink = [ "/etc/profile.d" ];
|
||||
})
|
||||
(mkIf (cfg.users != { }) {
|
||||
warnings = flatten (flip mapAttrsToList cfg.users (user: config:
|
||||
warnings = lib.flatten (flip lib.mapAttrsToList cfg.users (user: config:
|
||||
flip map config.warnings (warning: "${user} profile: ${warning}")));
|
||||
|
||||
assertions = flatten (flip mapAttrsToList cfg.users (user: config:
|
||||
assertions = lib.flatten (flip lib.mapAttrsToList cfg.users (user: config:
|
||||
flip map config.assertions (assertion: {
|
||||
inherit (assertion) assertion;
|
||||
message = "${user} profile: ${assertion.message}";
|
||||
|
|
|
|||
|
|
@ -1,19 +1,17 @@
|
|||
{ config, lib, pkgs, utils, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.home-manager;
|
||||
|
||||
serviceEnvironment = optionalAttrs (cfg.backupFileExtension != null) {
|
||||
serviceEnvironment = lib.optionalAttrs (cfg.backupFileExtension != null) {
|
||||
HOME_MANAGER_BACKUP_EXT = cfg.backupFileExtension;
|
||||
} // optionalAttrs cfg.verbose { VERBOSE = "1"; };
|
||||
} // lib.optionalAttrs cfg.verbose { VERBOSE = "1"; };
|
||||
|
||||
in {
|
||||
imports = [ ./common.nix ];
|
||||
|
||||
config = mkMerge [
|
||||
config = lib.mkMerge [
|
||||
{
|
||||
home-manager = {
|
||||
extraSpecialArgs.nixosConfig = config;
|
||||
|
|
@ -33,10 +31,11 @@ in {
|
|||
}];
|
||||
};
|
||||
}
|
||||
(mkIf (cfg.users != { }) {
|
||||
systemd.services = mapAttrs' (_: usercfg:
|
||||
(lib.mkIf (cfg.users != { }) {
|
||||
systemd.services = lib.mapAttrs' (_: usercfg:
|
||||
let username = usercfg.home.username;
|
||||
in nameValuePair ("home-manager-${utils.escapeSystemdPath username}") {
|
||||
in lib.nameValuePair
|
||||
"home-manager-${utils.escapeSystemdPath username}" {
|
||||
description = "Home Manager environment for ${username}";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
wants = [ "nix-daemon.socket" ];
|
||||
|
|
@ -61,7 +60,7 @@ in {
|
|||
|
||||
sed = "${pkgs.gnused}/bin/sed";
|
||||
|
||||
exportedSystemdVariables = concatStringsSep "|" [
|
||||
exportedSystemdVariables = lib.concatStringsSep "|" [
|
||||
"DBUS_SESSION_BUS_ADDRESS"
|
||||
"DISPLAY"
|
||||
"WAYLAND_DISPLAY"
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
modulePath:
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = getAttrFromPath modulePath config;
|
||||
cfg = lib.getAttrFromPath modulePath config;
|
||||
|
||||
firefoxMockOverlay = import ../../setup-firefox-mock-overlay.nix modulePath;
|
||||
|
||||
|
|
@ -18,7 +16,7 @@ let
|
|||
in {
|
||||
imports = [ firefoxMockOverlay ];
|
||||
|
||||
config = mkIf config.test.enableBig (setAttrByPath modulePath {
|
||||
config = lib.mkIf config.test.enableBig (lib.setAttrByPath modulePath {
|
||||
enable = true;
|
||||
profiles.bookmarks = {
|
||||
settings = { "general.smoothScroll" = false; };
|
||||
|
|
|
|||
|
|
@ -1,18 +1,15 @@
|
|||
modulePath:
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
{ config, lib, ... }:
|
||||
let
|
||||
|
||||
cfg = getAttrFromPath modulePath config;
|
||||
cfg = lib.getAttrFromPath modulePath config;
|
||||
|
||||
firefoxMockOverlay = import ../../setup-firefox-mock-overlay.nix modulePath;
|
||||
|
||||
in {
|
||||
imports = [ firefoxMockOverlay ];
|
||||
|
||||
config = mkIf config.test.enableBig (setAttrByPath modulePath {
|
||||
config = lib.mkIf config.test.enableBig (lib.setAttrByPath modulePath {
|
||||
enable = true;
|
||||
profiles.containers = {
|
||||
containers = {
|
||||
|
|
|
|||
|
|
@ -1,22 +1,20 @@
|
|||
modulePath:
|
||||
{ config, lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = getAttrFromPath modulePath config;
|
||||
cfg = lib.getAttrFromPath modulePath config;
|
||||
|
||||
firefoxMockOverlay = import ../../setup-firefox-mock-overlay.nix modulePath;
|
||||
|
||||
in {
|
||||
imports = [ firefoxMockOverlay ];
|
||||
|
||||
config = mkIf config.test.enableBig ({
|
||||
config = lib.mkIf config.test.enableBig ({
|
||||
test.asserts.assertions.expected = [''
|
||||
Must not have a ${cfg.name} container with an existing ID but
|
||||
- ID 9 is used by dangerous, shopping''];
|
||||
} // setAttrByPath modulePath {
|
||||
} // lib.setAttrByPath modulePath {
|
||||
enable = true;
|
||||
|
||||
profiles = {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
modulePath:
|
||||
{ config, lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
firefoxMockOverlay = import ../../setup-firefox-mock-overlay.nix modulePath;
|
||||
|
|
@ -10,10 +8,10 @@ let
|
|||
in {
|
||||
imports = [ firefoxMockOverlay ];
|
||||
|
||||
config = mkIf config.test.enableBig ({
|
||||
config = lib.mkIf config.test.enableBig ({
|
||||
test.asserts.assertions.expected =
|
||||
[ "Container id must be smaller than 4294967294 (2^32 - 2)" ];
|
||||
} // setAttrByPath modulePath {
|
||||
} // lib.setAttrByPath modulePath {
|
||||
enable = true;
|
||||
|
||||
profiles.my-profile = {
|
||||
|
|
|
|||
|
|
@ -1,22 +1,20 @@
|
|||
modulePath:
|
||||
{ config, lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = getAttrFromPath modulePath config;
|
||||
cfg = lib.getAttrFromPath modulePath config;
|
||||
|
||||
firefoxMockOverlay = import ../setup-firefox-mock-overlay.nix modulePath;
|
||||
|
||||
in {
|
||||
imports = [ firefoxMockOverlay ];
|
||||
|
||||
config = mkIf config.test.enableBig ({
|
||||
config = lib.mkIf config.test.enableBig ({
|
||||
test.asserts.assertions.expected = [''
|
||||
Must not have a ${cfg.name} profile with an existing ID but
|
||||
- ID 1 is used by first, second''];
|
||||
} // setAttrByPath modulePath {
|
||||
} // lib.setAttrByPath modulePath {
|
||||
enable = true;
|
||||
|
||||
profiles = {
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
modulePath:
|
||||
{ config, lib, ... }:
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = getAttrFromPath modulePath config;
|
||||
cfg = lib.getAttrFromPath modulePath config;
|
||||
|
||||
firefoxMockOverlay = import ../../setup-firefox-mock-overlay.nix modulePath;
|
||||
in {
|
||||
imports = [ firefoxMockOverlay ];
|
||||
|
||||
config = mkIf config.test.enableBig (setAttrByPath modulePath {
|
||||
config = lib.mkIf config.test.enableBig (lib.setAttrByPath modulePath {
|
||||
enable = true;
|
||||
profiles.extensions = {
|
||||
extensions = {
|
||||
|
|
|
|||
|
|
@ -1,18 +1,16 @@
|
|||
modulePath:
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{ config, lib, ... }:
|
||||
|
||||
let
|
||||
|
||||
cfg = getAttrFromPath modulePath config;
|
||||
cfg = lib.getAttrFromPath modulePath config;
|
||||
|
||||
firefoxMockOverlay = import ../../setup-firefox-mock-overlay.nix modulePath;
|
||||
|
||||
in {
|
||||
imports = [ firefoxMockOverlay ];
|
||||
|
||||
config = mkIf config.test.enableBig (setAttrByPath modulePath {
|
||||
config = lib.mkIf config.test.enableBig (lib.setAttrByPath modulePath {
|
||||
enable = true;
|
||||
profiles = {
|
||||
basic.isDefault = true;
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
modulePath:
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = getAttrFromPath modulePath config;
|
||||
cfg = lib.getAttrFromPath modulePath config;
|
||||
|
||||
firefoxMockOverlay = import ../../setup-firefox-mock-overlay.nix modulePath;
|
||||
|
||||
|
|
@ -18,7 +16,7 @@ let
|
|||
in {
|
||||
imports = [ firefoxMockOverlay ];
|
||||
|
||||
config = mkIf config.test.enableBig (setAttrByPath modulePath {
|
||||
config = lib.mkIf config.test.enableBig (lib.setAttrByPath modulePath {
|
||||
enable = true;
|
||||
profiles = {
|
||||
search = {
|
||||
|
|
|
|||
|
|
@ -1,18 +1,16 @@
|
|||
modulePath:
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{ config, lib, ... }:
|
||||
|
||||
let
|
||||
|
||||
cfg = getAttrFromPath modulePath config;
|
||||
cfg = lib.getAttrFromPath modulePath config;
|
||||
|
||||
firefoxMockOverlay = import ../../setup-firefox-mock-overlay.nix modulePath;
|
||||
|
||||
in {
|
||||
imports = [ firefoxMockOverlay ];
|
||||
|
||||
config = mkIf config.test.enableBig (setAttrByPath modulePath {
|
||||
config = lib.mkIf config.test.enableBig (lib.setAttrByPath modulePath {
|
||||
enable = true;
|
||||
profiles = {
|
||||
basic.isDefault = true;
|
||||
|
|
|
|||
|
|
@ -1,13 +1,11 @@
|
|||
modulePath:
|
||||
{ config, lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let firefoxMockOverlay = import ../setup-firefox-mock-overlay.nix modulePath;
|
||||
in {
|
||||
imports = [ firefoxMockOverlay ];
|
||||
|
||||
config = mkIf config.test.enableBig (setAttrByPath modulePath {
|
||||
config = lib.mkIf config.test.enableBig (lib.setAttrByPath modulePath {
|
||||
enable = true;
|
||||
|
||||
profiles = {
|
||||
|
|
|
|||
|
|
@ -15,16 +15,15 @@
|
|||
nmt.script =
|
||||
(import ./basic-configuration.nix { inherit config pkgs; }).nmt.script;
|
||||
|
||||
test.asserts.warnings.expected = with lib;
|
||||
let
|
||||
renamed = {
|
||||
xssLockExtraOptions = "xss-lock.extraOptions";
|
||||
xautolockExtraOptions = "xautolock.extraOptions";
|
||||
enableDetectSleep = "xautolock.detectSleep";
|
||||
};
|
||||
in mapAttrsToList (old: new:
|
||||
builtins.replaceStrings [ "\n" ] [ " " ] ''
|
||||
The option `services.screen-locker.${old}' defined in
|
||||
${showFiles options.services.screen-locker.${old}.files}
|
||||
has been renamed to `services.screen-locker.${new}'.'') renamed;
|
||||
test.asserts.warnings.expected = let
|
||||
renamed = {
|
||||
xssLockExtraOptions = "xss-lock.extraOptions";
|
||||
xautolockExtraOptions = "xautolock.extraOptions";
|
||||
enableDetectSleep = "xautolock.detectSleep";
|
||||
};
|
||||
in lib.mapAttrsToList (old: new:
|
||||
builtins.replaceStrings [ "\n" ] [ " " ] ''
|
||||
The option `services.screen-locker.${old}' defined in
|
||||
${lib.showFiles options.services.screen-locker.${old}.files}
|
||||
has been renamed to `services.screen-locker.${new}'.'') renamed;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue