{ config, pkgs, lib, ... }: { home.packages = with pkgs; [ kitty dunst feh dmenu blueman wl-clipboard swaybg slurp copyq gnome-calculator grim swappy xarchiver (flameshot.override { enableWlrSupport = true; }) ]; services.blueman-applet.enable = true; services.gnome-keyring.enable = true; programs.wofi.enable = true; programs.waybar.enable = true; home.pointerCursor = { enable = true; name = "Adwaita"; package = pkgs.adwaita-icon-theme; size = 16; sway.enable = true; x11.enable = true; gtk.enable = true; }; wayland.windowManager.sway = { enable = true; wrapperFeatures.gtk = true; extraOptions = [ "--unsupported-gpu" ]; config = { defaultWorkspace = "workspace number 1"; menu = "wofi --show run"; terminal = "kitty"; modifier = "Mod4"; bindkeysToCode = true; keybindings = let modifier = config.wayland.windowManager.sway.config.modifier; homeDir = config.home.homeDirectory; in lib.mkOptionDefault { "${modifier}+z" = "exec ${homeDir}/.config/sway/idle.sh"; "${modifier}+Shift+s" = "sticky toggle"; "${modifier}+g" = "exec ${homeDir}/.config/sway/random-bg.py onetime"; "${modifier}+n" = "exec pcmanfm"; "Print" = "exec flameshot gui --raw | wl-copy"; "Shift+Print" = "exec grim - | wl-copy"; "${modifier}+Print" = "exec flameshot gui --raw | feh --auto-zoom --scale-down -"; "${modifier}+c" = "exec copyq toggle"; "${modifier}+o" = "exec gnome-calculator"; "${modifier}+i" = "exec firefox"; "XF86AudioMute" = "exec pactl set-sink-mute @DEFAULT_SINK@ toggle"; "XF86AudioLowerVolume" = "exec pactl set-sink-volume @DEFAULT_SINK@ -5%"; "XF86AudioRaiseVolume" = "exec pactl set-sink-volume @DEFAULT_SINK@ +5%"; "XF86AudioMicMute" = "exec pactl set-source-mute @DEFAULT_SOURCE@ toggle"; }; focus.followMouse = "no"; bars = [ { command = "${pkgs.waybar}/bin/waybar"; } ]; input = { "type:keyboard" = { xkb_layout = "us,ru"; xkb_options = "grp:alt_caps_toggle"; xkb_numlock = "enabled"; }; }; startup = [ { command = "${config.home.homeDirectory}/.config/sway/startup.sh"; } { command = "${config.home.homeDirectory}/.config/sway/idle.sh"; } ]; window.commands = let mk = command: criteria: { command = command; criteria = criteria; }; popup = mk "floating enable; border pixel 1; sticky enable; shadows enable"; float = mk "floating enable; border pixel 1; shadows enable"; video = mk "inhibit_idle fullscreen; border none; max_render_time off"; important = mk "inhibit_idle open; floating enable; border pixel 1"; app_id = a: { app_id = a; }; title = a: { title = a; }; class = a: { class = a; }; window_type = a: { window_type = a; }; pcmanfm_title = a: { app_id = "pcmanfm"; title = a; }; in [ (popup (app_id "dunst")) (popup (app_id "com.github.hluk.copyq")) (popup (app_id "pavucontrol")) (popup (app_id "qtalarm")) (popup (app_id "blueman-manager")) (popup (class "feh")) (popup (title "Picture-in-Picture")) (popup (title "Picture in picture")) (float { window_role = "pop-up,task_dialog,About"; }) (float (window_type "dialog")) (float (window_type "utility")) (float (window_type "toolbar")) (float (window_type "splash")) (float (window_type "menu")) (float (window_type "dropdown_menu")) (float (window_type "popup_menu")) (float (window_type "tooltip")) (float (window_type "notification")) (float (class "bRAC")) (float (app_id "org.gnome.clocks")) (float (app_id "org.gnome.Calculator")) (float (app_id "galculator")) (video (app_id "mpv")) (video (app_id "vlc")) (video (app_id "firefox")) (video (app_id "org.telegram.desktop")) (video { instance = "chromium"; }) (video (class "firefox")) (video (class "Nightly")) (important (pcmanfm_title "Confirm to replace files")) (important (pcmanfm_title "(?:Open|Save) (?:File|Folder|As)")) (important (pcmanfm_title "^(File|Folder)\s*Already Exists\s*—\s*")) (important (pcmanfm_title "Move files")) (important (pcmanfm_title "Copy Files")) (important (pcmanfm_title "Delete Files")) (important (pcmanfm_title "Removable medium is inserted")) ]; }; }; xdg.configFile."sway/idle.sh".source = ./idle.sh; xdg.configFile."sway/startup.sh".source = ./startup.sh; xdg.configFile."sway/random-bg.py".source = ./random-bg.py; xdg.configFile."sway/wallpapers" = { source = ./wallpapers; recursive = true; }; xdg.configFile."waybar" = { source = ./waybar; recursive = true; }; xdg.mimeApps.defaultApplications = { "inode/directory" = "pcmanfm.desktop"; }; }