nix/system/modules/cosmic.nix

106 lines
3.6 KiB
Nix

{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";
};
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;
genBinding = key: modifiers: action: {
inherit key modifiers action;
};
genSpawnBinding = key: modifiers: app: {
inherit key modifiers;
action = {
type = "Spawn";
data = app;
};
};
in {
imports = [
../../util/cosmic.nix
];
services.desktopManager.cosmic = {
enable = true;
keybindings =
winManagementBindings
++ [
(genBinding "q" ["Super" "Shift"] "Close")
(genBinding "w" ["Super"] "ToggleStacking")
(genBinding "s" ["Super"] "ToggleOrientation")
(genBinding "space" ["Super"] "ToggleWindowFloating")
(genBinding "space" ["Super" "Shift"] "Maximize")
(genBinding "minus" ["Super"] "Minimize")
(genBinding "r" ["Super"] {
type = "Resizing";
data = "Outwards";
})
(genBinding "r" ["Super" "Shift"] {
type = "Resizing";
data = "Inwards";
})
(genBinding "period" ["Super"] "NextOutput")
(genBinding "period" ["Super" "Shift"] "MoveToNextOutput")
(genBinding "comma" ["Super"] "PreviousOutput")
(genBinding "comma" ["Super" "Shift"] "MoveToPreviousOutput")
(genSpawnBinding "f" ["Super"] "firefox")
(genSpawnBinding "e" ["Super"] "nautilus")
(genSpawnBinding "equal" ["Super"] "keepassxc")
(genSpawnBinding "return" ["Super"] "kitty")
(genSpawnBinding "s" ["Super" "Shift"] "cosmic-screenshot")
(genSpawnBinding null ["Super"] "cosmic-launcher")
(genSpawnBinding "d" ["Super"] "cosmic-app-library")
(genSpawnBinding "XF86AudioRaiseVolume" [] "amixer sset Master 5%+")
(genSpawnBinding "XF86AudioLowerVolume" [] "amixer sset Master 5%-")
(genSpawnBinding "XF86AudioMute" [] "amixer sset Master toggle")
(genSpawnBinding "XF86AudioNext" [] "playerctl next")
(genSpawnBinding "XF86AudioPrev" [] "playerctl previous")
(genSpawnBinding "XF86AudioPlay" [] "playerctl play-pause")
(genSpawnBinding "XF86AudioStop" [] "playerctl stop")
(
genSpawnBinding "XF86MonBrightnessUp" []
"busctl --user call com.system76.CosmicSettingsDaemon /com/system76/CosmicSettingsDaemon com.system76.CosmicSettingsDaemon IncreaseDisplayBrightness"
)
(
genSpawnBinding "XF86MonBrightnessDown" []
"busctl --user call com.system76.CosmicSettingsDaemon /com/system76/CosmicSettingsDaemon com.system76.CosmicSettingsDaemon DecreaseDisplayBrightness"
)
(genSpawnBinding "e" ["Super" "Shift"] "wlogout")
];
};
services.displayManager.cosmic-greeter.enable = true;
services.system76-scheduler.enable = true;
}