{ 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}"; "${mod}+Shift+s" = "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-"; XF86AudioPrev = "exec playerctl previous"; "${mod}+XF86AudioPrev" = "exec playerctl position 5-"; "Alt+${mod}+XF86AudioPrev" = "exec playerctl position 60-"; XF86AudioPlay = "exec playerctl play-pause"; XF86AudioNext = "exec playerctl next"; "${mod}+XF86AudioNext" = "exec playerctl position 5+"; "Alt+${mod}+XF86AudioNext" = "exec playerctl position 60+"; "${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.swaylock = { enable = true; settings = { font-size = 14; }; }; services.swayidle = { enable = true; events = [{ event = "before-sleep"; command = "${pkgs.lib.getExe pkgs.swaylock} -f"; }]; }; 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 ] ++ [ playerctl ] ++ []; services.playerctld = { enable = true; }; # Configure notifications services.dunst = { enable = true; settings = { global = { font = "Rubik 12"; mouse_left_click = "do_action, close_current"; mouse_middle_click = "close_all"; mouse_right_click = "close_current"; }; }; }; }