Merge commit '196db18' into release-17.03

This commit is contained in:
Robert Helgesson 2017-06-30 22:46:58 +02:00
commit 3c3f68bf61
No known key found for this signature in database
GPG key ID: C3DB11069E65DC86
13 changed files with 128 additions and 51 deletions

View file

@ -286,6 +286,8 @@ in
home.activation.linkGeneration = dagEntryAfter ["writeBoundary"] (
let
pattern = "-home-manager-files/";
link = pkgs.writeText "link" ''
newGenFiles="$1"
shift
@ -298,6 +300,8 @@ in
'';
cleanup = pkgs.writeText "cleanup" ''
. ${./lib-bash/color-echo.sh}
newGenFiles="$1"
oldGenFiles="$2"
shift 2
@ -306,6 +310,8 @@ in
targetPath="$HOME/$relativePath"
if [[ -e "$newGenFiles/$relativePath" ]] ; then
$VERBOSE_ECHO "Checking $targetPath exists"
elif [[ ! "$(readlink -e "$targetPath")" =~ "${pattern}" ]] ; then
warnEcho "Path '$targetPath' not link into Home Manager generation. Skipping delete."
else
echo "Checking $targetPath gone (deleting)"
$DRY_RUN_CMD rm $VERBOSE_ARG "$targetPath"

View file

@ -22,8 +22,8 @@ with lib;
systemd.user.services.dunst = {
Unit = {
Description = "Dunst notification daemon";
Requires = "graphical-session.target";
After = "graphical-session.target";
After = [ "graphical-session-pre.target" ];
PartOf = [ "graphical-session.target" ];
};
Service = {

View file

@ -28,6 +28,7 @@ in
systemd.user.services.gnome-keyring = {
Unit = {
Description = "GNOME Keyring";
PartOf = [ "graphical-session-pre.target" ];
};
Service = {
@ -45,7 +46,7 @@ in
};
Install = {
WantedBy = [ "graphical-session.target" ];
WantedBy = [ "graphical-session-pre.target" ];
};
};
};

View file

@ -29,41 +29,89 @@ in
};
};
config = mkIf cfg.enable {
home.file.".gnupg/gpg-agent.conf".text = concatStringsSep "\n" (
optional cfg.enableSshSupport
"enable-ssh-support"
++
optional (cfg.defaultCacheTtl != null)
"default-cache-ttl ${toString cfg.defaultCacheTtl}"
);
config = mkIf cfg.enable (mkMerge [
{
home.file.".gnupg/gpg-agent.conf".text = concatStringsSep "\n" (
optional cfg.enableSshSupport
"enable-ssh-support"
++
optional (cfg.defaultCacheTtl != null)
"default-cache-ttl ${toString cfg.defaultCacheTtl}"
);
home.sessionVariables =
optionalAttrs cfg.enableSshSupport {
SSH_AUTH_SOCK = "\${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent.ssh";
home.sessionVariables =
optionalAttrs cfg.enableSshSupport {
SSH_AUTH_SOCK = "\${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent.ssh";
};
programs.bash.initExtra = ''
GPG_TTY="$(tty)"
export GPG_TTY
gpg-connect-agent updatestartuptty /bye > /dev/null
'';
}
# The systemd units below are direct translations of the
# descriptions in the
#
# ${pkgs.gnupg}/share/doc/gnupg/examples/systemd-user
#
# directory.
{
systemd.user.services.gpg-agent = {
Unit = {
Description = "GnuPG cryptographic agent and passphrase cache";
Documentation = "man:gpg-agent(1)";
Requires = "gpg-agent.socket";
After = "gpg-agent.socket";
# This is a socket-activated service:
RefuseManualStart = true;
};
Service = {
ExecStart = "${pkgs.gnupg}/bin/gpg-agent --supervised";
ExecReload = "${pkgs.gnupg}/bin/gpgconf --reload gpg-agent";
};
};
programs.bash.initExtra = ''
GPG_TTY="$(tty)"
export GPG_TTY
gpg-connect-agent updatestartuptty /bye > /dev/null
'';
systemd.user.sockets.gpg-agent = {
Unit = {
Description = "GnuPG cryptographic agent and passphrase cache";
Documentation = "man:gpg-agent(1)";
};
systemd.user.services.gpg-agent = {
Unit = {
Description = "GnuPG private key agent";
IgnoreOnIsolate = true;
};
Socket = {
ListenStream = "%t/gnupg/S.gpg-agent";
FileDescriptorName = "std";
SocketMode = "0600";
DirectoryMode = "0700";
};
Service = {
Type = "forking";
ExecStart = "${pkgs.gnupg}/bin/gpg-agent --daemon";
Restart = "on-abort";
Install = {
WantedBy = [ "sockets.target" ];
};
};
}
Install = {
WantedBy = [ "default.target" ];
(mkIf cfg.enableSshSupport {
systemd.user.sockets.gpg-agent-ssh = {
Unit = {
Description = "GnuPG cryptographic agent (ssh-agent emulation)";
Documentation = "man:gpg-agent(1) man:ssh-add(1) man:ssh-agent(1) man:ssh(1)";
};
Socket = {
ListenStream = "%t/gnupg/S.gpg-agent.ssh";
FileDescriptorName = "ssh";
Service = "gpg-agent.service";
SocketMode = "0600";
DirectoryMode = "0700";
};
Install = {
WantedBy = [ "sockets.target" ];
};
};
};
};
})
]);
}

View file

@ -13,6 +13,8 @@ with lib;
systemd.user.services.keepassx = {
Unit = {
Description = "KeePassX password manager";
After = [ "graphical-session-pre.target" ];
PartOf = [ "graphical-session.target" ];
};
Install = {

View file

@ -13,6 +13,8 @@ with lib;
systemd.user.services.network-manager-applet = {
Unit = {
Description = "Network Manager applet";
After = [ "graphical-session-pre.target" ];
PartOf = [ "graphical-session.target" ];
};
Install = {

View file

@ -42,11 +42,13 @@ in
systemd.user.services.random-background = {
Unit = {
Description = "Set random desktop background using feh";
After = [ "graphical-session-pre.target" ];
PartOf = [ "graphical-session.target" ];
};
Service = {
Type = "oneshot";
ExecStart = "${pkgs.feh}/bin/feh --randomize --bg-fill %h/backgrounds/";
ExecStart = "${pkgs.feh}/bin/feh --randomize --bg-fill ${cfg.imageDirectory}";
IOSchedulingClass = "idle";
};

View file

@ -99,6 +99,8 @@ in {
systemd.user.services.redshift = {
Unit = {
Description = "Redshift colour temperature adjuster";
After = [ "graphical-session-pre.target" ];
PartOf = [ "graphical-session.target" ];
};
Install = {

View file

@ -27,6 +27,8 @@ in
systemd.user.services.taffybar = {
Unit = {
Description = "Taffybar desktop bar";
After = [ "graphical-session-pre.target" ];
PartOf = [ "graphical-session.target" ];
};
Service = {

View file

@ -13,8 +13,8 @@ with lib;
systemd.user.services.udiskie = {
Unit = {
Description = "Udiskie mount daemon";
Requires = [ "taffybar.service" ];
After = [ "taffybar.service" ];
After = [ "graphical-session-pre.target" ];
PartOf = [ "graphical-session.target" ];
};
Service = {

View file

@ -13,6 +13,8 @@ with lib;
systemd.user.services.xscreensaver = {
Unit = {
Description = "XScreenSaver";
After = [ "graphical-session-pre.target" ];
PartOf = [ "graphical-session.target" ];
};
Service = {

View file

@ -7,7 +7,10 @@ let
cfg = config.systemd.user;
enabled = cfg.services != {} || cfg.targets != {} || cfg.timers != {};
enabled = cfg.services != {}
|| cfg.sockets != {}
|| cfg.targets != {}
|| cfg.timers != {};
toSystemdIni = (import lib/generators.nix).toINI {
mkKeyValue = key: value:
@ -50,6 +53,12 @@ in
description = "Definition of systemd per-user service units.";
};
sockets = mkOption {
default = {};
type = types.attrs;
description = "Definition of systemd per-user sockets";
};
targets = mkOption {
default = {};
type = types.attrs;
@ -72,7 +81,9 @@ in
message =
let
names = concatStringsSep ", " (
attrNames (cfg.services // cfg.targets // cfg.timers)
attrNames (
cfg.services // cfg.sockets // cfg.targets // cfg.timers
)
);
in
"Must use Linux for modules that require systemd: " + names;
@ -87,6 +98,8 @@ in
listToAttrs (
(buildServices "service" cfg.services)
++
(buildServices "socket" cfg.sockets)
++
(buildServices "target" cfg.targets)
++
(buildServices "timer" cfg.timers)

View file

@ -38,6 +38,8 @@ in
systemd.user.services.setxkbmap = {
Unit = {
Description = "Set up keyboard in X";
After = [ "graphical-session-pre.target" ];
PartOf = [ "graphical-session.target" ];
};
Install = {
@ -60,19 +62,12 @@ in
};
};
# For stuff that needs to start just before a graphical session
# starts.
systemd.user.targets.graphical-session-pre = {
# A basic graphical session target for Home Manager.
systemd.user.targets.hm-graphical-session = {
Unit = {
Description = "Pre-graphical session";
};
};
# A basic graphical session target. Apparently this will come
# standard in future Systemd versions.
systemd.user.targets.graphical-session = {
Unit = {
Description = "Graphical session";
Description = "Home Manager X session";
Requires = [ "graphical-session-pre.target" ];
BindsTo = [ "graphical-session.target" ];
};
};
@ -83,6 +78,9 @@ in
. "$HOME/.profile"
fi
# If there are any running services from a previous session.
systemctl --user stop graphical-session.target graphical-session-pre.target
systemctl --user import-environment DBUS_SESSION_BUS_ADDRESS
systemctl --user import-environment DISPLAY
systemctl --user import-environment SSH_AUTH_SOCK
@ -90,8 +88,7 @@ in
systemctl --user import-environment XDG_DATA_DIRS
systemctl --user import-environment XDG_RUNTIME_DIR
systemctl --user restart graphical-session-pre.target
systemctl --user restart graphical-session.target
systemctl --user start hm-graphical-session.target
${cfg.initExtra}