232 lines
8.2 KiB
Nix
232 lines
8.2 KiB
Nix
{
|
|
pkgs,
|
|
lib,
|
|
config,
|
|
...
|
|
}:
|
|
{
|
|
imports = [ ./bar ];
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
rmenu
|
|
grim
|
|
slurp
|
|
brightnessctl
|
|
wl-clipboard
|
|
swaymux
|
|
qt6ct
|
|
swaynotificationcenter
|
|
searchclip
|
|
ydotool
|
|
networkmanagerapplet
|
|
];
|
|
|
|
grimmShared.sway = {
|
|
enable = true;
|
|
config =
|
|
let
|
|
inherit (lib) getExe getExe';
|
|
inherit (pkgs)
|
|
rmenu
|
|
xdg-terminal-exec
|
|
slurp
|
|
swaymux
|
|
grim
|
|
brightnessctl
|
|
searchclip
|
|
ranger
|
|
deskwhich
|
|
;
|
|
in
|
|
{
|
|
definitions = {
|
|
mod = "Mod4";
|
|
left = "h";
|
|
down = "j";
|
|
up = "k";
|
|
right = "l";
|
|
menu = "${getExe rmenu} -r drun | xargs swaymsg exec --";
|
|
menu_run = "${getExe rmenu} -r run | xargs swaymsg exec --";
|
|
|
|
primecol = "#8800FF";
|
|
accentcol = "#5700a0";
|
|
splitcol = "#69507f";
|
|
actsplitcol = "#cd97fc";
|
|
darkcol = "#202020";
|
|
urgentcol = "#9e3c3c";
|
|
realwhite = "#C7D3E3";
|
|
};
|
|
keybinds =
|
|
{
|
|
"$mod+d" = "exec $menu";
|
|
"$mod+Shift+d" = "exec $menu_run";
|
|
"$mod+Shift+s" = ''exec ${getExe grim} -g "$(${getExe slurp} -d)" - | wl-copy'';
|
|
"$mod+Shift+Return" = "exec ${getExe xdg-terminal-exec} xonsh";
|
|
"$mod+Return" = "exec ${getExe xdg-terminal-exec}";
|
|
"$mod+Shift+q" = "kill";
|
|
"$mod+Shift+c" = "reload";
|
|
"$mod+Shift+e" = "exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit'";
|
|
|
|
# Move your focus around
|
|
"$mod+$left" = "focus left";
|
|
"$mod+$down" = "focus down";
|
|
"$mod+$up" = "focus up";
|
|
"$mod+$right" = "focus right";
|
|
# Or use $mod+[up|down|left|right]
|
|
"$mod+Left" = "focus left";
|
|
"$mod+Down" = "focus down";
|
|
"$mod+Up" = "focus up";
|
|
"$mod+Right" = "focus right";
|
|
|
|
# Move the focused window with the same, but add Shift
|
|
"$mod+Shift+$left" = "move left";
|
|
"$mod+Shift+$down" = "move down";
|
|
"$mod+Shift+$up" = "move up";
|
|
"$mod+Shift+$right" = "move right";
|
|
# Ditto, with arrow keys
|
|
"$mod+Shift+Left" = "move left";
|
|
"$mod+Shift+Down" = "move down";
|
|
"$mod+Shift+Up" = "move up";
|
|
"$mod+Shift+Right" = "move right";
|
|
|
|
# Layout stuff:
|
|
#
|
|
# You can "split" the current object of your focus with
|
|
# $mod+b or $mod+v, for horizontal and vertical splits
|
|
# respectively.
|
|
"$mod+b" = "splith";
|
|
"$mod+v" = "splitv";
|
|
|
|
# Switch the current container between different layout styles
|
|
"$mod+s" = "layout stacking";
|
|
"$mod+w" = "layout tabbed";
|
|
"$mod+e" = "layout toggle split";
|
|
|
|
# Make the current focus fullscreen
|
|
"$mod+f" = "fullscreen";
|
|
|
|
# Toggle the current focus between tiling and floating mode
|
|
"$mod+Shift+space" = "floating toggle";
|
|
|
|
# Swap focus between the tiling area and the floating area
|
|
"$mod+space" = "focus mode_toggle";
|
|
|
|
# Move focus to the parent container
|
|
"$mod+a" = "focus parent";
|
|
|
|
"$mod+Shift+minus" = "move scratchpad";
|
|
"$mod+minus" = "scratchpad show";
|
|
|
|
"$mod+r" = "mode \"resize\"";
|
|
|
|
XF86AudioRaiseVolume = "exec pactl set-sink-volume @DEFAULT_SINK@ +5%";
|
|
XF86AudioLowerVolume = "exec pactl set-sink-volume @DEFAULT_SINK@ -5%";
|
|
"Shift+XF86AudioLowerVolume" = "exec pactl set-source-volume @DEFAULT_SOURCE@ -5%";
|
|
"Shift+XF86AudioRaiseVolume" = "exec pactl set-source-volume @DEFAULT_SOURCE@ +5%";
|
|
XF86AudioMute = "exec pactl set-sink-mute @DEFAULT_SINK@ toggle";
|
|
XF86AudioPlay = "exec playerctl play-pause";
|
|
XF86AudioNext = "exec playerctl next";
|
|
XF86AudioPrev = "exec playerctl previous";
|
|
"$mod+c" = "exec ${getExe swaymux}";
|
|
XF86MonBrightnessUp = "exec ${getExe brightnessctl} s 10+%";
|
|
XF86MonBrightnessDown = "exec ${getExe brightnessctl} s 10-%";
|
|
XF86Explorer = "exec ${getExe xdg-terminal-exec} ${getExe ranger}";
|
|
XF86Search = "exec ${getExe searchclip}";
|
|
XF86HomePage =
|
|
let
|
|
open = pkgs.writeShellScriptBin "open_or_switch_browser" ''
|
|
browser=$(xdg-settings get default-web-browser | sed "s/\.desktop//")
|
|
swaymsg [app_id="$browser"] focus || ${getExe deskwhich} $browser | xargs gio launch
|
|
'';
|
|
in
|
|
"exec ${getExe open}";
|
|
XF86Tools =
|
|
let
|
|
open = pkgs.writeShellScriptBin "open_or_switch_spotify" ''
|
|
# FIXME: spotify is being weird
|
|
while IFS= read -r pid; do
|
|
swaymsg [pid=$pid] focus && exit 0
|
|
done <<< $(pgrep spotify -u "$(whoami)")
|
|
${getExe deskwhich} spotify | xargs gio launch
|
|
'';
|
|
in
|
|
"exec ${getExe open}"; # for some reason tools = audio media on my keyboard??
|
|
XF86Mail =
|
|
let
|
|
open = pkgs.writeShellScriptBin "open_or_switch_mail" ''
|
|
desk=$(xdg-settings get default-url-scheme-handler mailto | sed "s/\.desktop//")
|
|
swaymsg [app_id="$desk"] focus || ${getExe deskwhich} $desk | xargs gio launch
|
|
'';
|
|
in
|
|
"exec ${getExe open}";
|
|
# XF86Bluetooth = "exec blueman-manager";
|
|
}
|
|
// (
|
|
let
|
|
inherit (builtins) toString;
|
|
in
|
|
lib.mergeAttrsList (
|
|
map (n: {
|
|
"$mod+${toString n}" = "workspace number ${toString n}";
|
|
"$mod+Shift+${toString n}" = "move container to workspace number ${toString n}";
|
|
}) (lib.range 0 9)
|
|
)
|
|
);
|
|
autolaunch = [
|
|
(getExe' pkgs.dbus "dbus-update-activation-environment")
|
|
(getExe' pkgs.xdg-user-dirs "xdg-user-dirs-update")
|
|
''${getExe' pkgs.coreutils-full "sleep"} 3 && ${getExe' pkgs.blueman "blueman-applet"}''
|
|
(getExe' pkgs.lxqt.lxqt-policykit "lxqt-policykit-agent")
|
|
(getExe' config.hardware.opentabletdriver.package "otd-daemon")
|
|
pkgs.swaynotificationcenter
|
|
pkgs.networkmanagerapplet
|
|
# (pkgs.writeShellScriptBin "rmenu-cache-clear" "rm -r $HOME/.cache/rmenu") # invalidate rmenu cache on sway restart
|
|
];
|
|
extraConfig = ''
|
|
output * bg ${./wallpapers/switzerland.jpg} fill
|
|
|
|
floating_modifier $mod normal
|
|
|
|
input type:keyboard xkb_numlock enabled
|
|
include /etc/sway/config.d/*
|
|
|
|
# Borders, gaps, titlebars, behavior
|
|
default_border pixel 3
|
|
default_floating_border pixel 3
|
|
gaps inner 5
|
|
titlebar_padding 5 5
|
|
|
|
#5Smart things
|
|
smart_gaps on
|
|
hide_edge_borders --i3 smart
|
|
|
|
|
|
input * {
|
|
xkb_layout "de"
|
|
dwt disabled
|
|
}
|
|
|
|
for_window [app_id="swaymux"] floating enable
|
|
for_window [app_id="rmenu"] floating enable
|
|
# for_window [app_id="firefox.*" title="Picture-in-Picture"] floating enable
|
|
for_window [app_id="lxqt-policykit-agent"] floating enable
|
|
for_window [title="OpenSSH Authentication Passphrase request"] floating enable
|
|
'';
|
|
|
|
modes.resize.keybinds = {
|
|
"$left" = "resize shrink width 10px";
|
|
"$down" = "resize grow height 10px";
|
|
"$up" = "resize shrink height 10px";
|
|
"$right" = "resize grow width 10px";
|
|
|
|
Left = "resize shrink width 10px";
|
|
Down = "resize grow height 10px";
|
|
Up = "resize shrink height 10px";
|
|
Right = "resize grow width 10px";
|
|
|
|
Return = "mode \"default\"";
|
|
Escape = "mode \"default\"";
|
|
};
|
|
};
|
|
};
|
|
}
|