Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add dag library to config.lib #160

Merged
merged 1 commit into from
Dec 26, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 4 additions & 3 deletions modules/files.nix
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
{ pkgs, config, lib, ... }:

with lib;
with import ./lib/dag.nix { inherit lib; };

let

cfg = config.home.file;

dag = config.lib.dag;

homeDirectory = config.home.homeDirectory;

fileType = (import lib/file-type.nix {
Expand Down Expand Up @@ -51,7 +52,7 @@ in

# This verifies that the links we are about to create will not
# overwrite an existing file.
home.activation.checkLinkTargets = dagEntryBefore ["writeBoundary"] (
home.activation.checkLinkTargets = dag.entryBefore ["writeBoundary"] (
let
check = pkgs.writeText "check" ''
. ${./lib-bash/color-echo.sh}
Expand Down Expand Up @@ -107,7 +108,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 = dagEntryAfter ["writeBoundary"] (
home.activation.linkGeneration = dag.entryAfter ["writeBoundary"] (
let
link = pkgs.writeText "link" ''
newGenFiles="$1"
Expand Down
9 changes: 5 additions & 4 deletions modules/home-environment.nix
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
{ config, lib, pkgs, ... }:

with lib;
with import ./lib/dag.nix { inherit lib; };

let

cfg = config.home;

dag = config.lib.dag;

languageSubModule = types.submodule {
options = {
base = mkOption {
Expand Down Expand Up @@ -241,9 +242,9 @@ in

# A dummy entry acting as a boundary between the activation
# script's "check" and the "write" phases.
home.activation.writeBoundary = dagEntryAnywhere "";
home.activation.writeBoundary = dag.entryAnywhere "";

home.activation.installPackages = dagEntryAfter ["writeBoundary"] ''
home.activation.installPackages = dag.entryAfter ["writeBoundary"] ''
$DRY_RUN_CMD nix-env -i ${cfg.path}
'';

Expand All @@ -253,7 +254,7 @@ in
noteEcho Activating ${res.name}
${res.data}
'';
sortedCommands = dagTopoSort cfg.activation;
sortedCommands = dag.topoSort cfg.activation;
activationCmds =
if sortedCommands ? result then
concatStringsSep "\n" (map mkCmd sortedCommands.result)
Expand Down
18 changes: 18 additions & 0 deletions modules/lib/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{ lib }:

{
dag =
let
d = import ./dag.nix { inherit lib; };
in
{
empty = d.emptyDag;
isDag = d.isDag;
topoSort = d.dagTopoSort;
map = d.dagMap;
entryAnywhere = d.dagEntryAnywhere;
entryBetween = d.dagEntryBetween;
entryAfter = d.dagEntryAfter;
entryBefore = d.dagEntryBefore;
};
}
1 change: 1 addition & 0 deletions modules/modules.nix
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ let
config._module.args.baseModules = modules;
config._module.args.pkgs = lib.mkDefault pkgs;
config._module.check = check;
config.lib = import ./lib { inherit lib; };
config.nixpkgs.system = mkDefault pkgs.system;
};

Expand Down
5 changes: 3 additions & 2 deletions modules/programs/gnome-terminal.nix
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
{ config, lib, pkgs, ... }:

with lib;
with import ../lib/dag.nix { inherit lib; };

let

cfg = config.programs.gnome-terminal;

dag = config.lib.dag;

profileColorsSubModule = types.submodule (
{ ... }: {
options = {
Expand Down Expand Up @@ -181,7 +182,7 @@ in
home.packages = [ pkgs.gnome3.gnome_terminal ];

# The dconf service needs to be installed and prepared.
home.activation.gnomeTerminal = dagEntryAfter ["installPackages"] (
home.activation.gnomeTerminal = dag.entryAfter ["installPackages"] (
let
iniText = toDconfIni (buildIniSet cfg);
iniFile = pkgs.writeText "gnome-terminal.ini" iniText;
Expand Down
5 changes: 3 additions & 2 deletions modules/programs/home-manager.nix
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
{ config, lib, pkgs, ... }:

with lib;
with import ../lib/dag.nix { inherit lib; };

let

cfg = config.programs.home-manager;

dag = config.lib.dag;

in

{
Expand Down Expand Up @@ -42,7 +43,7 @@ in
# Uninstall manually installed home-manager, if such exists.
# Without this a file collision error will be printed.
home.activation.uninstallHomeManager =
dagEntryBetween [ "installPackages" ] [ "writeBoundary" ] ''
dag.entryBetween [ "installPackages" ] [ "writeBoundary" ] ''
if nix-env -q | grep -q "^home-manager$" ; then
$DRY_RUN_CMD nix-env -e home-manager

Expand Down
5 changes: 3 additions & 2 deletions modules/programs/info.nix
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,13 @@
{ config, lib, pkgs, ... }:

with lib;
with import ../lib/dag.nix { inherit lib; };

let

cfg = config.programs.info;

dag = config.lib.dag;

# Indexes info files found in this location
homeInfoPath = "$HOME/.nix-profile/share/info";

Expand Down Expand Up @@ -63,7 +64,7 @@ in
home.sessionVariables.INFOPATH =
"${cfg.homeInfoDirLocation}\${INFOPATH:+:}\${INFOPATH}";

home.activation.createHomeInfoDir = dagEntryAfter ["installPackages"] ''
home.activation.createHomeInfoDir = dag.entryAfter ["installPackages"] ''
oPATH=$PATH
export PATH="${lib.makeBinPath [ pkgs.gzip ]}''${PATH:+:}$PATH"
$DRY_RUN_CMD mkdir -p "${cfg.homeInfoDirLocation}"
Expand Down
7 changes: 4 additions & 3 deletions modules/services/polybar.nix
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
{ config, lib, pkgs, ... }:

with lib;
with import ../lib/dag.nix { inherit lib; };

let

cfg = config.services.polybar;

dag = config.lib.dag;

toPolybarIni = generators.toINI {
mkKeyValue = key: value:
let
Expand Down Expand Up @@ -131,15 +132,15 @@ in
};
};

home.activation.checkPolybar = dagEntryBefore [ "linkGeneration" ] ''
home.activation.checkPolybar = dag.entryBefore [ "linkGeneration" ] ''
if ! cmp --quiet \
"${configFile}" \
"$HOME/.config/polybar/config"; then
polybarChanged=1
fi
'';

home.activation.applyPolybar = dagEntryAfter [ "reloadSystemD" ] ''
home.activation.applyPolybar = dag.entryAfter [ "reloadSystemD" ] ''
if [[ -v polybarChanged && -v DISPLAY ]]; then
echo "Restarting polybar"
${config.systemd.user.systemctlPath} --user restart polybar.service
Expand Down
7 changes: 4 additions & 3 deletions modules/services/window-managers/i3.nix
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
{ config, lib, pkgs, ... }:

with lib;
with import ../../lib/dag.nix { inherit lib; };

let

cfg = config.xsession.windowManager.i3;

dag = config.lib.dag;

startupModule = types.submodule {
options = {
command = mkOption {
Expand Down Expand Up @@ -621,15 +622,15 @@ in
xsession.windowManager.command = "${cfg.package}/bin/i3";
xdg.configFile."i3/config".source = configFile;

home.activation.checkI3 = dagEntryBefore [ "linkGeneration" ] ''
home.activation.checkI3 = dag.entryBefore [ "linkGeneration" ] ''
if ! cmp --quiet \
"${configFile}" \
"${config.xdg.configHome}/i3/config"; then
i3Changed=1
fi
'';

home.activation.reloadI3 = dagEntryAfter [ "linkGeneration" ] ''
home.activation.reloadI3 = dag.entryAfter [ "linkGeneration" ] ''
if [[ -v i3Changed && -v DISPLAY ]]; then
echo "Reloading i3"
${cfg.package}/bin/i3-msg reload 1>/dev/null
Expand Down
7 changes: 4 additions & 3 deletions modules/services/window-managers/xmonad.nix
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
{ config, lib, pkgs, ... }:

with lib;
with import ../../lib/dag.nix { inherit lib; };

let

cfg = config.xsession.windowManager.xmonad;

dag = config.lib.dag;

xmonad = pkgs.xmonad-with-packages.override {
ghcWithPackages = cfg.haskellPackages.ghcWithPackages;
packages = self:
Expand Down Expand Up @@ -90,13 +91,13 @@ in
(mkIf (cfg.config != null) {
home.file.".xmonad/xmonad.hs".source = cfg.config;

home.activation.checkXmonad = dagEntryBefore [ "linkGeneration" ] ''
home.activation.checkXmonad = dag.entryBefore [ "linkGeneration" ] ''
if ! cmp --quiet "${cfg.config}" "$HOME/.xmonad/xmonad.hs"; then
xmonadChanged=1
fi
'';

home.activation.applyXmonad = dagEntryAfter [ "linkGeneration" ] ''
home.activation.applyXmonad = dag.entryAfter [ "linkGeneration" ] ''
if [[ -v xmonadChanged ]]; then
echo "Recompiling xmonad"
${config.xsession.windowManager.command} --recompile
Expand Down
5 changes: 3 additions & 2 deletions modules/systemd.nix
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
{ config, lib, pkgs, ... }:

with lib;
with import ./lib/dag.nix { inherit lib; };

let

cfg = config.systemd.user;

dag = config.lib.dag;

enabled = cfg.services != {}
|| cfg.sockets != {}
|| cfg.targets != {}
Expand Down Expand Up @@ -144,7 +145,7 @@ in
(buildServices "timer" cfg.timers)
);

home.activation.reloadSystemD = dagEntryAfter ["linkGeneration"] (
home.activation.reloadSystemD = dag.entryAfter ["linkGeneration"] (
if cfg.startServices then
''
PATH=${dirOf cfg.systemctlPath} \
Expand Down