aboutsummaryrefslogblamecommitdiff
path: root/home/profiles/sway.nix
blob: 066555696dad7d58f7881e78ca4538a426a0551f (plain) (tree)











































































































































































                                                                                                                                                      
{ config, lib, pkgs, ... }:
let
  modifier = "Mod4"; # `Super` key
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 = {
      # FIXME: this should be a variable
      terminal = "alacritty";
      modifier = modifier;
      menu = ''${pkgs.wofi}/bin/wofi -S drun -p "app:" -L 10'';
      bars = [ ];
      fonts = {
        names = [ "Source Code Pro" ];
        size = 10.0;
      };
      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" ''
    color=2E3440
    daemonize
    indicator-caps-lock
    hide-keyboard-layout
  '';

  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";
      }
    ];
  };
}