{ config, osConfig, lib, ... }: let ccfg = import ../../../config.nix; cfg_path = [ ccfg.custom_config_key "desktopEnvironment" "i3" ]; cfg = lib.attrsets.getAttrFromPath cfg_path osConfig; in { xsession.windowManager.i3 = { enable = true; config = lib.attrsets.recursiveUpdate { startup = [ { command = "setxkbmap -layout us -option caps:escape"; } ]; modifier = "Mod4"; terminal = cfg.terminalCommand; keybindings = let mod = config.xsession.windowManager.i3.config.modifier; in { # Focus "${mod}+h" = "focus left"; "${mod}+l" = "focus right"; "${mod}+k" = "focus up"; "${mod}+j" = "focus down"; # Apps "${mod}+Return" = "exec ${cfg.terminalCommand}"; # "${mod}+space" = "exec ${cfg.menu}"; TODO "${mod}+q" = "kill"; "${mod}+Shift+Escape" = "exit"; "${mod}+Shift+q" = "exec i3lock"; "${mod}+f" = "floating toggle"; }; # See home-manager documentation for everything you can add here. } cfg.extraOptions; }; }