{ pkgs, config, lib, packages', ... }: let inherit (import ../lib.nix {}) mkSimpleTrayService; lockCmd = "${pkgs.swaylock}/bin/swaylock -efF --color '#000000'"; displayOffCmd = "${pkgs.sway}/bin/swaymsg 'output * power off'"; displayOnCmd = "${pkgs.sway}/bin/swaymsg 'output * power on'"; swapOutputWorkspaces = ../../../scripts/sway-swapoutputworkspaces.sh; in { imports = [ ../profiles/wayland-desktop.nix ../programs/waybar.nix ../programs/salut.nix ]; services = { blueman-applet.enable = true; flameshot.enable = true; }; home.packages = [ pkgs.swayidle pkgs.swaylock packages'.yofi pkgs.fuzzel # required by any bar that has a tray plugin pkgs.libappindicator-gtk3 ## themes pkgs.gnome.adwaita-icon-theme pkgs.hicolor-icon-theme pkgs.gnome-icon-theme ## fonts pkgs.dejavu_fonts # just a basic good fond pkgs.font-awesome_5 # needed by i3status-rust pkgs.nerdfonts pkgs.font-awesome pkgs.roboto pkgs.ttf_bitstream_vera # from the wiki pkgs.noto-fonts pkgs.noto-fonts-cjk pkgs.noto-fonts-cjk-sans pkgs.noto-fonts-cjk-serif pkgs.noto-fonts-emoji pkgs.noto-fonts-emoji-blob-bin pkgs.noto-fonts-extra pkgs.noto-fonts-lgc-plus pkgs.liberation_ttf pkgs.fira-code pkgs.fira-code-symbols pkgs.mplus-outline-fonts.githubRelease pkgs.dina-font pkgs.monoid pkgs.hermit # by colemickens pkgs.gelasio # metric-compatible with Georgia pkgs.powerline-symbols pkgs.iosevka-comfy.comfy-fixed ]; wayland.windowManager.sway = { enable = true; systemdIntegration = true; xwayland = false; config = let modifier = "Mod4"; inherit (config.wayland.windowManager.sway.config) left right up down; in { inherit modifier; bars = []; input = { "type:keyboard" = { xkb_layout = "us"; xkb_variant = "altgr-intl"; xkb_options = "nodeadkeys"; }; "type:touchpad" = { natural_scroll = "enabled"; }; }; keybindings = lib.mkOptionDefault { # as of 2023-05-21 the `!!` arg parsing mode was broken for me on yofi # "${modifier}+d" = "exec ${packages'.yofi}/bin/yofi binapps"; "${modifier}+d" = "exec ${pkgs.fuzzel}/bin/fuzzel"; # only 1-9 exist on the default config "${modifier}+0" = "workspace number 0"; "${modifier}+Shift+0" = "move container to workspace number 0"; # move workspace to output "${modifier}+Control+Shift+${left}" = "move workspace to output left"; "${modifier}+Control+Shift+${right}" = "move workspace to output right"; "${modifier}+Control+Shift+${up}" = "move workspace to output up"; "${modifier}+Control+Shift+${down}" = "move workspace to output down"; # move workspace to output with arrow keys "${modifier}+Control+Shift+Left" = "move workspace to output left"; "${modifier}+Control+Shift+Right" = "move workspace to output right"; "${modifier}+Control+Shift+Up" = "move workspace to output up"; "${modifier}+Control+Shift+Down" = "move workspace to output down"; "${modifier}+Shift+e" = "exec swaymsg exit"; "${modifier}+q" = "kill"; "${modifier}+x" = "exec ${swapOutputWorkspaces}"; "${modifier}+Ctrl+l" = "exec ${lockCmd}"; "--locked XF86AudioPlay" = "exec ${pkgs.playerctl}/bin/playerctl play-pause"; "XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl previous"; "XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl next"; "XF86AudioRaiseVolume" = "exec ${pkgs.pulsemixer}/bin/pulsemixer --change-volume +5"; "XF86AudioLowerVolume" = "exec ${pkgs.pulsemixer}/bin/pulsemixer --change-volume -5"; "--locked XF86AudioMute" = "exec ${pkgs.pulsemixer}/bin/pulsemixer --toggle-mute"; # TODO: screenshot util, flameshot doesn't work in the packaged version "Print" = "exec ${pkgs.flameshot}/bin/flameshot gui"; }; terminal = "alacritty"; startup = [ # Launch Firefox on start # {command = "firefox";} # {command = "gnome-keyring --replace"} {command = "systemctl --user restart waybar";} ]; colors.focused = lib.mkOptionDefault { childBorder = lib.mkForce "#ffa500"; }; window.border = 4; }; }; services.swayidle = { enable = true; timeouts = [ { timeout = 10; command = "if ${pkgs.procps}/bin/pgrep -x swaylock; then ${displayOffCmd}; fi"; resumeCommand = displayOnCmd; } { timeout = 60 * 5; command = lockCmd; } { timeout = 60 * 6; command = displayOffCmd; resumeCommand = displayOnCmd; } ]; events = [ { event = "before-sleep"; command = builtins.concatStringsSep "; " [ lockCmd "${pkgs.playerctl}/bin/playerctl pause" ]; } { event = "after-resume"; command = displayOnCmd; } { event = "lock"; command = lockCmd; } ]; }; }