diff --git a/modules/home-environment.nix b/modules/home-environment.nix index a25501fd..c577c307 100644 --- a/modules/home-environment.nix +++ b/modules/home-environment.nix @@ -139,9 +139,12 @@ in }; home.keyboard = mkOption { - type = keyboardSubModule; + type = types.nullOr keyboardSubModule; default = {}; - description = "Keyboard configuration."; + description = '' + Keyboard configuration. Set to null to + disable Home Manager keyboard management. + ''; }; home.sessionVariables = mkOption { diff --git a/modules/xsession.nix b/modules/xsession.nix index 1c562dd0..42fe45bb 100644 --- a/modules/xsession.nix +++ b/modules/xsession.nix @@ -66,39 +66,43 @@ in }; config = mkIf cfg.enable { - systemd.user.services.setxkbmap = { - Unit = { - Description = "Set up keyboard in X"; - After = [ "graphical-session-pre.target" ]; - PartOf = [ "graphical-session.target" ]; + systemd.user = { + services = mkIf (config.home.keyboard != null) { + setxkbmap = { + Unit = { + Description = "Set up keyboard in X"; + After = [ "graphical-session-pre.target" ]; + PartOf = [ "graphical-session.target" ]; + }; + + Install = { + WantedBy = [ "graphical-session.target" ]; + }; + + Service = { + Type = "oneshot"; + ExecStart = + let + args = concatStringsSep " " ( + [ + "-layout '${config.home.keyboard.layout}'" + "-variant '${config.home.keyboard.variant}'" + ] ++ + (map (v: "-option '${v}'") config.home.keyboard.options) + ); + in + "${pkgs.xorg.setxkbmap}/bin/setxkbmap ${args}"; + }; + }; }; - Install = { - WantedBy = [ "graphical-session.target" ]; - }; - - Service = { - Type = "oneshot"; - ExecStart = - let - args = concatStringsSep " " ( - [ - "-layout '${config.home.keyboard.layout}'" - "-variant '${config.home.keyboard.variant}'" - ] ++ - (map (v: "-option '${v}'") config.home.keyboard.options) - ); - in - "${pkgs.xorg.setxkbmap}/bin/setxkbmap ${args}"; - }; - }; - - # A basic graphical session target for Home Manager. - systemd.user.targets.hm-graphical-session = { - Unit = { - Description = "Home Manager X session"; - Requires = [ "graphical-session-pre.target" ]; - BindsTo = [ "graphical-session.target" ]; + # A basic graphical session target for Home Manager. + targets.hm-graphical-session = { + Unit = { + Description = "Home Manager X session"; + Requires = [ "graphical-session-pre.target" ]; + BindsTo = [ "graphical-session.target" ]; + }; }; };