nix-dotfiles/snippets/sway.nix
2025-04-05 17:40:20 -04:00

149 lines
5.6 KiB
Nix
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ lib, pkgs, config, ... }@inputs:
let
extra = ../extra;
scripts = ../scripts;
changebrightness = pkgs.writeShellScript "changebrightness"
(builtins.readFile "${scripts}/changebrightness.sh");
mod = "Mod4";
shutdownMenu = pkgs.writeShellScript "shutdownmenu"
(builtins.readFile "${scripts}/shutdownmenu.sh");
backgroundImage = "${extra}/kuwaitboat.jpg";
multiTouchGesturesConfig = ''
bindgesture swipe:4:up focus parent
bindgesture swipe:4:left workspace prev
bindgesture swipe:4:right workspace next
bindgesture swipe:3:up focus up
bindgesture swipe:3:down focus down
bindgesture swipe:3:left focus left
bindgesture swipe:3:right focus right
'';
in {
wayland.windowManager.sway = {
enable = true;
config = {
terminal = "${pkgs.lib.getExe inputs.config.defaultPrograms.terminal}";
modifier = mod;
fonts = {
names = [ "Rubik" ];
style = "Regular";
size = 12.0;
};
input = {
"type:touchpad" = {
natural_scroll = "disabled";
dwt = "disabled";
click_method = "clickfinger";
scroll_factor = "0.5";
};
"type:keyboard" = {
xkb_layout = "ca,ca";
xkb_variant = ",eng";
};
};
window = {
border = 2;
titlebar = true;
};
keybindings = let
screenshotPath =
"Pictures/Screenshots/screenshot`date +%Y%m%d%H%M%S`.png";
in lib.mkOptionDefault ({ # Screenshot keybinds
"Print" =
"exec grim - | wl-copy && wl-paste > ${screenshotPath}"; # Take screenshot of whole screen, save it, and copy it to clipboard
"Shift+Print" = ''
exec swaymsg -t get_tree | ${pkgs.lib.getExe pkgs.jq} -r '.. | select(.focused?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | grim -g - | wl-copy && wl-paste > ${screenshotPath}''; # Take screenshot of current window, save it, and copy it to clipboard
"Ctrl+Print" =
"exec grim -g \"`slurp`\" - | wl-copy && wl-paste > ${screenshotPath}";
} // rec { # Function Media Keys
XF86MonBrightnessUp = "exec bash ${changebrightness} 1";
XF86MonBrightnessDown = "exec bash ${changebrightness} -1";
XF86AudioMute = "exec wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
"${mod}+XF86AudioMute" =
"exec wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
XF86AudioRaiseVolume = "exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05+";
XF86AudioLowerVolume = "exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05-";
"${mod}+XF86AudioRaiseVolume" =
"exec wpctl set-volume @DEFAULT_AUDIO_SOURCE@ 0.05+";
"${mod}+XF86AudioLowerVolume" =
"exec wpctl set-volume @DEFAULT_AUDIO_SOURCE@ 0.05-";
"${mod}+Shift+e" = null;
XF86AudioMedia =
"dunstctl set-paused toggle; dunstify -a 'dunst_mute_key' -u low -h string:x-dunst-stack-tag:dunst_mute_key 'Notifications mute toggled'";
XF86PowerOff =
"exec DMENU_COMMAND='rofi -dmenu -prompt=\"Sélectionnez :\"' bash ${shutdownMenu}";
"${mod}+Pause" = XF86PowerOff;
} // {
"${mod}+space" = ''input "*" xkb_switch_layout next'';
"${mod}+Shift+l" = "exec swaylock -f";
"${mod}+Home" = "move workspace to output left";
"${mod}+End" = "move workspace to output right";
} // lib.attrsets.mergeAttrsList (map (n: {
# Change focus between workspaces
"${mod}+${n}" = "exec swaysome focus ${n}";
# Move containers between workspaces
"${mod}+Shift+${n}" = "exec swaysome move ${n}";
# Focus workspace groups
"${mod}+Alt+${n}" = "exec swaysome focus-group ${n}";
# Move containers to other workspace groups
"${mod}+Alt+Shift+${n}" = "exec swaysome move-to-group ${n}";
}) (map toString (lib.lists.range 0 9)) ) // {
"${mod}+o" = "exec swaysome next-output";
"${mod}+Shift+o" = "exec swaysome prev-output";
"${mod}+Alt+o" = "exec swaysome workspace-group-next-output";
"${mod}+Alt+Shift+o" = "exec swaysome workspace-group-prev-output";
} // { });
# menu = "j4-dmenu-desktop --no-generic --term=${
# terminal
# } --dmenu='${dmenuCommand}'";
menu = "${pkgs.lib.getExe config.programs.rofi.package} -modes \"drun,run\" -show-icons -show drun";
focus.followMouse = false;
};
extraConfig =
''
output 'eDP-1' scale 1.50
'' + # Fractional scaling to 1.50
''
output 'DP-10' pos 0,0
output 'DP-9' pos 1920,0 transform 270
'' + # CTF Docking Station Monitors
''
exec gammastep-indicator
'' + # gammastep-indicator enables red shift
''
exec dunst
'' + # Enable notifications
''
exec "activate-linux -c 0.5-0.5-0.5-0.5"
'' + # Enable Activate Linux
multiTouchGesturesConfig + # Multi-touch touchpad gestures
''
exec swaybg -i ${backgroundImage}
'' + # Background image
''
focus_on_window_activation focus
'' + # Focus on window activation lol
''
set $laptop eDP-1
bindswitch --reload --locked lid:on output $laptop disable
bindswitch --reload --locked lid:off output $laptop enable
'' + # Clamshell mode
''
exec swaysome init 1
'' +
"";
};
programs.rofi = {
enable = true;
font = "Rubik 12";
package = pkgs.rofi-wayland;
theme = "android_notification";
};
home.packages = with pkgs;
[ swaybg bemenu j4-dmenu-desktop swaysome ] ++
[ brightnessctl grim slurp wl-clipboard wdisplays ]
[];
}