| { pkgs |
| , lib |
| , home |
| , ... |
| }: { |
| home = { |
| wayland.windowManager.sway = { |
| enable = true; |
| wrapperFeatures.gtk = true; |
| package = pkgs.sway-unwrapped; |
| |
| config = rec { |
| assigns = { }; |
| bars = [ ]; |
| colors = { }; |
| defaultWorkspace = null; |
| down = "j"; |
| floating = { }; |
| focus = { }; |
| fonts = { }; |
| gaps = { |
| inner = 10; |
| top = -10; |
| outer = 0; |
| smartGaps = false; |
| }; |
| input = { |
| "type:touchpad" = { |
| dwt = "enabled"; |
| tap = "enabled"; |
| natural_scroll = "enabled"; |
| middle_emulation = "enabled"; |
| events = "disabled_on_external_mouse"; |
| }; |
| "type:keyboard" = { |
| xkb_layout = "gb"; |
| xkb_options = "caps:none"; |
| }; |
| "type:tablet_tool" = { |
| map_to_output = "eDP-1"; |
| }; |
| }; |
| keybindings = lib.mkOptionDefault { |
| "${modifier}+g" = "sticky toggle"; |
| "${modifier}+k" = "exec wl-copy -c"; |
| "${modifier}+f" = "maximize toggle"; |
| "XF86AudioRaiseVolume" = "exec pamixer -ui 5 && ( pamixer --get-mute && expr \"$(pamixer --get-volume)\" + 100 > $WOBSOCK ) || pamixer --get-volume > $WOBSOCK"; |
| "XF86AudioLowerVolume" = "exec pamixer -ud 5 && ( pamixer --get-mute && expr \"$(pamixer --get-volume)\" + 100 > $WOBSOCK ) || pamixer --get-volume > $WOBSOCK"; |
| "XF86AudioMute" = "exec pamixer --toggle-mute && ( pamixer --get-mute && expr \"$(pamixer --get-volume)\" + 100 > $WOBSOCK ) || pamixer --get-volume > $WOBSOCK"; |
| "XF86AudioMicMute" = "exec pamixer --toggle-mute --default-source && ( pamixer --get-mute --default-source && expr \"$(pamixer --default-source --get-volume)\" + 100 > $WOBSOCK ) || pamixer --default-source --get-volume > $WOBSOCK"; |
| "XF86MonBrightnessUp" = "exec light -A 3 && light -G | cut -d'.' -f1 > $WOBSOCK"; |
| "XF86MonBrightnessDown" = "exec light -U 3 && light -G | cut -d'.' -f1 > $WOBSOCK"; |
| "${modifier}+XF86AudioRaiseVolume" = "exec pamixer --default-source -ui 5 && ( pamixer --get-mute --default-source && expr \"$(pamixer --default-source --get-volume)\" + 100 > $WOBSOCK ) || pamixer --default-source --get-volume > $WOBSOCK"; |
| "${modifier}+XF86AudioLowerVolume" = "exec pamixer --default-source -ud 5 && ( pamixer --get-mute --default-source && expr \"$(pamixer --default-source --get-volume)\" + 100 > $WOBSOCK ) || pamixer --get-volume --default-source > $WOBSOCK"; |
| "${modifier}+XF86AudioMute" = "exec pamixer --toggle-mute --default-source && ( pamixer --get-mute --default-source && expr \"$(pamixer --default-source --get-volume)\" + 100 > $WOBSOCK ) || pamixer --default-source --get-volume > $WOBSOCK"; |
| "${modifier}+XF86MonBrightnessUp" = "exec light -A 6 && light -G | cut -d'.' -f1 > $WOBSOCK"; |
| "${modifier}+XF86MonBrightnessDown" = "exec light -U 6 && light -G | cut -d'.' -f1 > $WOBSOCK"; |
| "${modifier}+n" = ''exec wpa_cli select_network $(wpa_cli list_networks | tail -n +3 | rofi -dmenu -window-title "Select Network" | awk '{print $1;}')''; |
| }; |
| keycodebindings = { |
| "66" = "exec ${pkgs.wtype}/bin/wtype -P F12"; |
| }; |
| left = "h"; |
| modes = { |
| resize = { |
| Down = "resize grow height 10 px"; |
| Escape = "mode default"; |
| Left = "resize shrink width 10 px"; |
| Return = "mode default"; |
| Right = "resize grow width 10 px"; |
| Up = "resize shrink height 10 px"; |
| h = "resize shrink width 10 px"; |
| j = "resize grow height 10 px"; |
| k = "resize shrink height 10 px"; |
| l = "resize grow width 10 px"; |
| }; |
| }; |
| modifier = "Mod4"; |
| output = rec { |
| HDMI-A-1 = { |
| resolution = "3840x2160"; |
| bg = "#FFD0F9 solid_color"; |
| position = "0,0"; |
| }; |
| HDMI-A-2 = HDMI-A-1; |
| # For some reason my monitor sometimes gets one identifier and |
| # sometimes the other, despite being plugged into the same port |
| eDP-1 = { |
| resolution = "1920x1080"; |
| position = "0,2160"; |
| }; |
| "*" = { }; |
| }; |
| right = "l"; |
| seat = { |
| "*" = { |
| hide_cursor = "when-typing enable"; |
| }; |
| }; |
| startup = [ |
| { command = "dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK"; } |
| { |
| command = "light -N 1"; |
| always = false; |
| } |
| { |
| command = "\"pkill wob; rm -f $WOBSOCK && mkfifo $WOBSOCK && tail -f $WOBSOCK | wob --output='*'\""; |
| always = true; |
| } |
| ]; |
| terminal = "${pkgs.kitty}/bin/kitty"; |
| up = "k"; |
| window = { }; |
| workspaceAutoBackAndForth = true; |
| workspaceLayout = "default"; |
| workspaceOutputAssign = [ ]; |
| }; |
| |
| extraSessionCommands = '' |
| unset __HM_SESS_VARS_SOURCED |
| . "$HOME/.nix-profile/etc/profile.d/hm-session-vars.sh" |
| |
| # export WLR_NO_HARDWARE_CURSORS=1 |
| # TODO: Check if above is still needed w/ nvidia card enabled |
| # export SDL_VIDEODRIVER=wayland |
| # needs qt5.qtwayland in systemPackages |
| # export QT_QPA_PLATFORM=wayland |
| # export QT_WAYLAND_DISABLE_WINDOWDECORATION="1" |
| # Fix for some Java AWT applications (e.g. Android Studio), |
| # use this if they aren't displayed properly: |
| export _JAVA_AWT_WM_NONREPARENTING=1 |
| ''; |
| |
| swaynag = { |
| enable = false; |
| settings = { |
| "<config>" = { |
| background = "#ffffff99"; |
| border-bottom = "#00000000"; |
| button-background = "#ffffffcc"; |
| button-padding = 10; |
| button-border-size = 0; |
| }; |
| |
| warning = { |
| background = "#ffffff99"; |
| border-bottom = "#00000000"; |
| button-background = "#ffff00"; |
| }; |
| |
| error = { |
| background = "#ffffff99"; |
| border-bottom = "#00000000"; |
| button-background = "#ff0000"; |
| }; |
| |
| green = { |
| background = "#ffffff99"; |
| border-bottom = "#00000000"; |
| button-background = "#00b300"; |
| }; |
| |
| blue = { |
| background = "#ffffff99"; |
| border-bottom = "#00000000"; |
| button-background = "#0000ff"; |
| }; |
| }; |
| }; |
| |
| systemdIntegration = true; |
| |
| extraConfig = '' |
| set $WOBSOCK $XDG_RUNTIME_DIR/wob.sock |
| ''; |
| }; |
| |
| home.packages = with pkgs; [ |
| wl-clipboard |
| pamixer |
| wob |
| wtype |
| ]; |
| |
| programs.zsh.profileExtra = '' |
| if [ -z $DISPLAY ] && [ "$(tty)" = "/dev/tty1" ]; then |
| exec systemd-cat -t sway sway --unsupported-gpu |
| fi |
| ''; |
| }; |
| } |