{ lib, ... }: let inherit (lib) range mapAttrsToList; inherit (builtins) toString; workspaceRange = range 1 6; makeWorkspaceBinding = modifiers: action: map (i: { inherit modifiers; key = toString i; action = { type = action; data = i; }; }) workspaceRange; focusWsBindings = makeWorkspaceBinding [ "Super" ] "Workspace"; moveWsBindings = makeWorkspaceBinding [ "Super" "Shift" ] "SendToWorkspace"; hjkl = { "h" = "Left"; "j" = "Down"; "k" = "Up"; "l" = "Right"; # "i" = "In"; # "u" = "Out"; }; makeDirBinding = modifiers: action: mapAttrsToList (key: dir: { inherit key modifiers; action = { type = action; data = dir; }; }) hjkl; focusBindings = makeDirBinding [ "Super" ] "Focus"; moveBindings = makeDirBinding [ "Super" "Shift" ] "Move"; winManagementBindings = focusWsBindings ++ moveWsBindings ++ focusBindings ++ moveBindings; binding = key: modifiers: action: { inherit key modifiers action; }; spawnBinding = key: modifiers: app: { inherit key modifiers; action = { type = "Spawn"; data = app; }; }; systemBinding = key: modifiers: action: { inherit key modifiers; action = { type = "System"; data = action; }; }; in { imports = [ ../util/cosmic.nix ]; config.cosmic = { enable = true; defaultKeybindings = false; keybindings = winManagementBindings ++ [ # System bindings appear broken? (binding "q" [ "Super" "Shift" ] "Close") (binding "w" [ "Super" ] "ToggleStacking") (binding "s" [ "Super" ] "ToggleOrientation") (binding "space" [ "Super" ] "ToggleWindowFloating") (binding "space" [ "Super" "Shift" ] "Maximize") (binding "minus" [ "Super" ] "Minimize") (binding "r" [ "Super" ] { type = "Resizing"; data = "Outwards"; }) (binding "r" [ "Super" "Shift" ] { type = "Resizing"; data = "Inwards"; }) (binding "tab" [ "Super" ] "NextOutput") (binding "tab" [ "Super" "Shift" ] "MoveToNextOutput") (binding "grave" [ "Super" ] "PreviousOutput") (binding "grave" [ "Super" "Shift" ] "MoveToPreviousOutput") (spawnBinding "equal" [ "Super" ] "keepassxc") (systemBinding "f" [ "Super" ] "WebBrowser") # my mime handling is fucked # (systemBinding "e" ["Super"] "HomeFolder") # (systemBinding "return" ["Super"] "Terminal") (spawnBinding "return" [ "Super" ] "kitty") # (systemBinding "s" ["Super" "Shift"] "Screenshot") (systemBinding null [ "Super" ] "Launcher") (systemBinding "d" [ "Super" ] "AppLibrary") (systemBinding "XF86AudioRaiseVolume" [ ] "VolumeRaise") (systemBinding "XF86AudioLowerVolume" [ ] "VolumeLower") (systemBinding "XF86AudioMute" [ ] "Mute") (spawnBinding "XF86AudioNext" [ ] "playerctl next") (spawnBinding "XF86AudioPrev" [ ] "playerctl previous") (spawnBinding "XF86AudioPlay" [ ] "playerctl play-pause") (spawnBinding "XF86AudioStop" [ ] "playerctl stop") (systemBinding "XF86MonBrightnessUp" [ ] "BrightnessUp") (systemBinding "XF86MonBrightnessDown" [ ] "BrightnessDown") (spawnBinding "e" [ "Super" "Shift" ] "wlogout") # old, pre-System bindings # (binding "q" ["Super" "Shift"] "Close") # (binding "w" ["Super"] "ToggleStacking") # (binding "s" ["Super"] "ToggleOrientation") # (binding "space" ["Super"] "ToggleWindowFloating") # (binding "space" ["Super" "Shift"] "Maximize") # (binding "minus" ["Super"] "Minimize") # (binding "r" ["Super"] { # type = "Resizing"; # data = "Outwards"; # }) # (binding "r" ["Super" "Shift"] { # type = "Resizing"; # data = "Inwards"; # }) # (binding "tab" ["Super"] "NextOutput") # (binding "tab" ["Super" "Shift"] "MoveToNextOutput") # (binding "grave" ["Super"] "PreviousOutput") # (binding "grave" ["Super" "Shift"] "MoveToPreviousOutput") # (spawnBinding "f" ["Super"] "firefox") (spawnBinding "e" [ "Super" ] "nautilus") # (spawnBinding "equal" ["Super"] "keepassxc") # (spawnBinding "return" ["Super"] "kitty") (spawnBinding "s" [ "Super" "Shift" ] "cosmic-screenshot") # (spawnBinding null ["Super"] "cosmic-launcher") # (spawnBinding "d" ["Super"] "cosmic-app-library") # (spawnBinding "XF86AudioRaiseVolume" [] "amixer sset Master 5%+") # (spawnBinding "XF86AudioLowerVolume" [] "amixer sset Master 5%-") # (spawnBinding "XF86AudioMute" [] "amixer sset Master toggle") # (spawnBinding "XF86AudioNext" [] "playerctl next") # (spawnBinding "XF86AudioPrev" [] "playerctl previous") # (spawnBinding "XF86AudioPlay" [] "playerctl play-pause") # (spawnBinding "XF86AudioStop" [] "playerctl stop") # ( # spawnBinding "XF86MonBrightnessUp" [] # "busctl --user call com.system76.CosmicSettingsDaemon /com/system76/CosmicSettingsDaemon com.system76.CosmicSettingsDaemon IncreaseDisplayBrightness" # ) # ( # spawnBinding "XF86MonBrightnessDown" [] # "busctl --user call com.system76.CosmicSettingsDaemon /com/system76/CosmicSettingsDaemon com.system76.CosmicSettingsDaemon DecreaseDisplayBrightness" # ) # (spawnBinding "e" ["Super" "Shift"] "wlogout") ]; }; }