{ config, lib, pkgs, ... }: let modifier = "Mod4"; # `Super` key fonts = { names = [ "Roboto" "Font Awesome 5 Free" "Font Awesome 5 Brands" "Arial" "sans-serif" ]; style = "Bold"; size = 10.0; }; in { imports = [ ./gtk.nix ./mako.nix ./waybar.nix ./wofi.nix ]; home.packages = with pkgs; [ wlogout brightnessctl pulseaudio grim slurp polkit_gnome xsettingsd swaylock swayidle wl-clipboard ]; home.sessionVariables = { MOZ_ENABLE_WAYLAND = "1"; XDG_CURRENT_DESKTOP = "sway"; XDG_SESSION_TYPE = "wayland"; }; programs = { zsh.loginExtra = '' if [ $(ps ax | grep "[s]sh-agent" | wc -l) -eq 0 ] ; then eval $(ssh-agent -s) > /dev/null fi if [ "$(tty)" = "/dev/tty1" ]; then exec sway &> /dev/null fi ''; zsh.profileExtra = '' if [ $(ps ax | grep "[s]sh-agent" | wc -l) -eq 0 ] ; then eval $(ssh-agent -s) > /dev/null fi if [ "$(tty)" = "/dev/tty1" ]; then exec sway &> /dev/null fi ''; }; wayland.windowManager.sway = { enable = true; # in order to import some variables (e.g. PATH) so that all the # units that will be started have all the required environment # variables extraSessionCommands = "systemctl --user import-environment"; # this will start sway-session.target and run # dbus-update-activation-environment systemdIntegration = true; config = { inherit fonts modifier; # FIXME: this should be a variable terminal = "kitty"; menu = ''${pkgs.wofi}/bin/wofi -S drun -p "app:" -L 10''; bars = [ ]; keybindings = lib.mkOptionDefault { # control the volume "XF86AudioRaiseVolume" = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-volume @DEFAULT_SINK@ +5%"; "XF86AudioLowerVolume" = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-volume @DEFAULT_SINK@ -5%"; "XF86AudioMute" = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-mute @DEFAULT_SINK@ toggle"; "XF86AudioMicMute" = "exec ${pkgs.pulseaudio}/bin/pactl set-source-mute @DEFAULT_SOURCE@ toggle"; # control brightness "XF86MonBrightnessDown" = "exec ${pkgs.brightnessctl}/bin/brightnessctl set 5%-"; "XF86MonBrightnessUp" = "exec ${pkgs.brightnessctl}/bin/brightnessctl set +5%"; # logout "${modifier}+Escape" = "exec ${pkgs.wlogout}/bin/wlogout"; # screenshot "${modifier}+s" = "exec ${pkgs.grim}/bin/grim $(xdg-user-dir DOCUMENTS)/screenshots/$(date +'%Y-%m-%d-%H%M%S_screenshot.png')"; "${modifier}+Shift+s" = "exec ${pkgs.slurp}/bin/slurp | ${pkgs.grim}/bin/grim -g - $(xdg-user-dir DOCUMENTS)/screenshots/$(date +'%Y-%m-%d-%H%M%S_screenshot.png')"; # File Manager "${modifier}+p" = "exec ${pkgs.pcmanfm}/bin/pcmanfm"; }; # use `swaymsg -t get_tree' to get the title/name/ID of the applications window = { commands = [ { criteria.class = ".blueman-manager-wrapped"; command = "floating enable"; } { criteria.class = "Pavucontrol"; command = "floating enable"; } ]; }; input = { "*" = { "xkb_layout" = "us,fr"; # map capslock to ctrl, and switch layout using shift+caps "xkb_options" = "ctrl:nocaps,grp:shift_caps_toggle"; }; }; assigns = { "1" = [{ app_id = "emacs"; }]; "2" = [{ app_id = "Alacritty"; }]; "3" = [{ app_id = "firefox"; }]; "4" = [{ app_id = "org.gnome.Fractal"; }]; }; output = { "*" = { scale = "1.5"; bg = "#2E3440 solid_color"; }; # This is for aptos "eDP-1" = { scale = "1.3"; }; }; }; }; xdg.configFile."swaylock/config".source = pkgs.writeText "config" '' daemonize hide-keyboard-layout indicator-caps-lock color=2E3440 font=Roboto ''; services.swayidle = { enable = true; events = [ { event = "before-sleep"; command = "${pkgs.swaylock}/bin/swaylock -fF"; } { event = "lock"; command = "${pkgs.swaylock}/bin/swaylock -fF"; } ]; timeouts = [ { timeout = 300; command = "${pkgs.sway}/bin/swaymsg \"output * dpms off\""; resumeCommand = "${pkgs.sway}/bin/swaymsg \"output * dpms on\""; } { timeout = 310; command = "${pkgs.systemd}/bin/loginctl lock-session"; } ]; }; }