mirror of
https://github.com/EdenQwQ/nixos.git
synced 2025-12-26 10:14:58 +08:00
418 lines
15 KiB
Nix
418 lines
15 KiB
Nix
{ config, ... }:
|
|
let
|
|
outputConf =
|
|
builtins.attrNames config.monitors
|
|
|> map (
|
|
name:
|
|
with config.monitors.${name};
|
|
"output ${name} resolution ${toString mode.width}x${toString mode.height} position ${toString position.x},${toString position.y} scale ${toString scale} transform ${360 - rotation |> toString}"
|
|
)
|
|
|> builtins.concatStringsSep "\n";
|
|
in
|
|
{
|
|
xdg.configFile."scroll/config".text = with config.lib.stylix.colors; ''
|
|
# Default config for scroll
|
|
#
|
|
# Copy this to ~/.config/scroll/config and edit it to your liking.
|
|
#
|
|
# Read `man 5 scroll` for a complete reference.
|
|
|
|
### Variables
|
|
#
|
|
# Logo key. Use Mod1 for Alt.
|
|
set $mod Mod4
|
|
# Home row direction keys, like vim
|
|
set $left h
|
|
set $down j
|
|
set $up k
|
|
set $right l
|
|
# Your preferred terminal emulator
|
|
set $term kitty
|
|
# Your preferred application launcher
|
|
set $menu sh -c $(tofi-run)
|
|
|
|
### Output configuration
|
|
#
|
|
# Default wallpaper (more resolutions are available in @datadir@/backgrounds/scroll/)
|
|
# output * bg @datadir@/backgrounds/scroll/Sway_Wallpaper_Blue_1920x1080.png fill
|
|
#
|
|
# Example configuration:
|
|
#
|
|
# output HDMI-A-1 resolution 1920x1080 position 1920,0
|
|
#
|
|
# You can get the names of your outputs by running: scrollmsg -t get_outputs
|
|
${outputConf}
|
|
# output HDMI-A-1 resolution 2560x1600 position 0,60 scale 1.6 transform 270
|
|
# output eDP-1 resolution 2240x1400 position 1000,0 scale 1.6
|
|
|
|
### Idle configuration
|
|
#
|
|
# Example configuration:
|
|
#
|
|
# exec swayidle -w \
|
|
# timeout 300 'swaylock -f -c 000000' \
|
|
# timeout 600 'scrollmsg "output * power off"' resume 'scrollmsg "output * power on"' \
|
|
# before-sleep 'swaylock -f -c 000000'
|
|
#
|
|
# This will lock your screen after 300 seconds of inactivity, then turn off
|
|
# your displays after another 300 seconds, and turn your screens back on when
|
|
# resumed. It will also lock your screen before your computer goes to sleep.
|
|
|
|
### Input configuration
|
|
#
|
|
# Example configuration:
|
|
#
|
|
# input "2:14:SynPS/2_Synaptics_TouchPad" {
|
|
# dwt enabled
|
|
# tap enabled
|
|
# natural_scroll enabled
|
|
# middle_emulation enabled
|
|
# }
|
|
#
|
|
# You can get the names of your inputs by running: scrollmsg -t get_inputs
|
|
# Read `man 5 scroll-input` for more information about this section.
|
|
input "1267:12815:VEN_04F3:00_04F3:320F_Touchpad" {
|
|
tap enabled
|
|
drag_lock disabled
|
|
}
|
|
|
|
### Windows defaults
|
|
default_border pixel 4
|
|
gaps inner 5
|
|
gaps outer 5
|
|
client.focused ${base0E} ${base01} ${base05} ${base0A} ${base0E}
|
|
client.focused_inactive ${base03} ${base01} ${base05} ${base0A} ${base03}
|
|
client.unfocused ${base03} ${base01} ${base05} ${base0A} ${base03}
|
|
|
|
# Idle inhibit for fullscreen windows
|
|
for_window [all] inhibit_idle fullscreen
|
|
|
|
# Layout settings
|
|
layout_default_width 0.666666667
|
|
layout_default_height 1.0
|
|
layout_widths [0.33333333 0.5 0.666666667 1.0]
|
|
layout_heights [0.33333333 0.5 0.666666667 1.0]
|
|
|
|
fullscreen_movefocus true
|
|
|
|
### Key bindings
|
|
#
|
|
# Basics:
|
|
#
|
|
# Start a terminal
|
|
bindsym $mod+Return exec $term
|
|
|
|
# Kill focused window
|
|
bindsym $mod+q kill
|
|
|
|
# Start your launcher
|
|
bindsym $mod+p exec $menu
|
|
|
|
# Drag floating windows by holding down $mod and left mouse button.
|
|
# Resize them with right mouse button + $mod.
|
|
# Despite the name, also works for non-floating windows.
|
|
# Change normal to inverse to use left mouse button for resizing and right
|
|
# mouse button for dragging.
|
|
floating_modifier $mod normal
|
|
|
|
# Reload the configuration file
|
|
bindsym $mod+Shift+c reload
|
|
|
|
# Exit scroll (logs you out of your Wayland session)
|
|
bindsym $mod+Shift+x exec scrollnag -t warning -m 'You pressed the exit shortcut. Do you really want to exit scroll? This will end your Wayland session.' -B 'Yes, exit scroll' 'scrollmsg exit'
|
|
|
|
# Layout mode
|
|
bindsym $mod+alt+h set_mode h
|
|
bindsym $mod+alt+v set_mode v
|
|
#
|
|
# Moving around:
|
|
#
|
|
# Move your focus around
|
|
bindsym $mod+$left focus left
|
|
bindsym $mod+$down focus down
|
|
bindsym $mod+$up focus up
|
|
bindsym $mod+$right focus right
|
|
bindsym $mod+home focus beginning
|
|
bindsym $mod+end focus end
|
|
# Move the focused window with the same, but add Ctrl
|
|
bindsym $mod+Shift+$left move left
|
|
bindsym $mod+Shift+$down move down
|
|
bindsym $mod+Shift+$up move up
|
|
bindsym $mod+Shift+$right move right
|
|
bindsym $mod+Shift+home move beginning
|
|
bindsym $mod+Shift+end move end
|
|
# # nomode
|
|
# bindsym $mod+Alt+$left move left nomode
|
|
# bindsym $mod+Alt+$down move down nomode
|
|
# bindsym $mod+Alt+$up move up nomode
|
|
# bindsym $mod+Alt+$right move right nomode
|
|
# bindsym $mod+Alt+home move beginning nomode
|
|
# bindsym $mod+Alt+end move end nomode
|
|
|
|
# Focus other monitors
|
|
bindsym $mod+Ctrl+$left focus output left
|
|
bindsym $mod+Ctrl+$down focus output down
|
|
bindsym $mod+Ctrl+$up focus output up
|
|
bindsym $mod+Ctrl+$right focus output right
|
|
#
|
|
# Workspaces:
|
|
#
|
|
# Switch to workspace
|
|
bindsym $mod+1 workspace number 1
|
|
bindsym $mod+2 workspace number 2
|
|
bindsym $mod+3 workspace number 3
|
|
bindsym $mod+4 workspace number 4
|
|
bindsym $mod+5 workspace number 5
|
|
bindsym $mod+6 workspace number 6
|
|
bindsym $mod+7 workspace number 7
|
|
bindsym $mod+8 workspace number 8
|
|
bindsym $mod+9 workspace number 9
|
|
bindsym $mod+0 workspace number 10
|
|
# Move focused container to workspace
|
|
bindsym $mod+Shift+1 move container to workspace number 1; workspace number 1
|
|
bindsym $mod+Shift+2 move container to workspace number 2; workspace number 2
|
|
bindsym $mod+Shift+3 move container to workspace number 3; workspace number 3
|
|
bindsym $mod+Shift+4 move container to workspace number 4; workspace number 4
|
|
bindsym $mod+Shift+5 move container to workspace number 5; workspace number 5
|
|
bindsym $mod+Shift+6 move container to workspace number 6; workspace number 6
|
|
bindsym $mod+Shift+7 move container to workspace number 7; workspace number 7
|
|
bindsym $mod+Shift+8 move container to workspace number 8; workspace number 8
|
|
bindsym $mod+Shift+9 move container to workspace number 9; workspace number 9
|
|
bindsym $mod+Shift+0 move container to workspace number 10; workspace number 10
|
|
# Note: workspaces can have any name you want, not just numbers.
|
|
# We just use 1-10 as the default.
|
|
|
|
bindsym $mod+Ctrl+1 move workspace to output left
|
|
bindsym $mod+Ctrl+2 move workspace to output right
|
|
|
|
# Scaling
|
|
# Workspace
|
|
bindsym $mod+Shift+comma scale_workspace incr -0.05
|
|
bindsym --whole-window $mod+Shift+button4 scale_workspace incr -0.05
|
|
bindsym $mod+Shift+period scale_workspace incr 0.05
|
|
bindsym --whole-window $mod+Shift+button5 scale_workspace incr 0.05
|
|
bindsym $mod+Shift+Ctrl+period scale_workspace reset
|
|
|
|
# Overview
|
|
bindsym --no-repeat $mod+w scale_workspace overview
|
|
bindsym --whole-window button8 scale_workspace overview
|
|
|
|
# Jump
|
|
# jump_labels_color #9e1530FF
|
|
# jump_labels_background #15309eFF
|
|
# jump_labels_scale 0.9
|
|
# jump_labels_keys asdf
|
|
bindsym --no-repeat $mod+slash jump
|
|
|
|
# Content
|
|
bindsym $mod+comma scale_content incr -0.05
|
|
bindsym --whole-window $mod+button4 scale_content incr -0.05
|
|
bindsym $mod+period scale_content incr 0.05
|
|
bindsym --whole-window $mod+button5 scale_content incr 0.05
|
|
bindsym $mod+Ctrl+period scale_content reset
|
|
|
|
#
|
|
# Layout stuff:
|
|
#
|
|
# Make the current focus fullscreen
|
|
bindsym $mod+f fullscreen
|
|
bindsym $mod+Ctrl+f fullscreen global
|
|
|
|
# Toggle the current focus between tiling and floating mode
|
|
bindsym $mod+y focus mode_toggle
|
|
# Float a window
|
|
bindsym $mod+Shift+f floating toggle
|
|
|
|
# Toggle sticky
|
|
bindsym $mod+a sticky toggle
|
|
|
|
# Marks
|
|
# bindsym $mod+m exec scroll-mark-toggle.sh
|
|
# bindsym $mod+Shift+m exec scroll-mark-remove.sh
|
|
# bindsym $mod+apostrophe exec scroll-mark-switch.sh
|
|
|
|
#
|
|
# Scratchpad:
|
|
#
|
|
# Scroll has a "scratchpad", which is a bag of holding for windows.
|
|
# You can send windows there and get them back later.
|
|
|
|
# Move the currently focused window to the scratchpad
|
|
bindsym $mod+Shift+z move scratchpad
|
|
|
|
# Show the next scratchpad window or hide the focused scratchpad window.
|
|
# If there are multiple scratchpad windows, this command cycles through them.
|
|
bindsym $mod+z scratchpad show
|
|
|
|
#
|
|
# Mode modifiers
|
|
#
|
|
# mode "modifiers" {
|
|
# bindsym $right set_mode after; mode default
|
|
# bindsym $left set_mode before; mode default
|
|
# bindsym home set_mode beginning; mode default
|
|
# bindsym end set_mode end; mode default
|
|
# bindsym $up set_mode focus; mode default
|
|
# bindsym $down set_mode nofocus; mode default
|
|
# bindsym h set_mode center_horiz; mode default
|
|
# bindsym Shift+h set_mode nocenter_horiz; mode default
|
|
# bindsym v set_mode center_vert; mode default
|
|
# bindsym Shift+v set_mode nocenter_vert; mode default
|
|
# bindsym r set_mode reorder_auto; mode default
|
|
# bindsym Shift+r set_mode noreorder_auto; mode default
|
|
#
|
|
# # Return to default mode
|
|
# bindsym Escape mode "default"
|
|
# }
|
|
# bindsym $mod+backslash mode "modifiers"
|
|
|
|
#
|
|
# Resizing containers:
|
|
#
|
|
bindsym $mod+minus cycle_size h prev
|
|
bindsym $mod+equal cycle_size h next
|
|
bindsym $mod+Shift+minus cycle_size v prev
|
|
bindsym $mod+Shift+equal cycle_size v next
|
|
|
|
mode "setsizeh" {
|
|
bindsym 1 set_size h 0.125
|
|
bindsym 2 set_size h 0.1666666667
|
|
bindsym 3 set_size h 0.25
|
|
bindsym 4 set_size h 0.333333333
|
|
bindsym 5 set_size h 0.375
|
|
bindsym 6 set_size h 0.5
|
|
bindsym 7 set_size h 0.625
|
|
bindsym 8 set_size h 0.6666666667
|
|
bindsym 9 set_size h 0.75
|
|
bindsym 0 set_size h 0.833333333
|
|
bindsym minus set_size h 0.875
|
|
bindsym equal set_size h 1.0
|
|
|
|
# Return to default mode
|
|
bindsym Escape mode "default"
|
|
}
|
|
bindsym $mod+b mode "setsizeh"
|
|
|
|
mode "setsizev" {
|
|
bindsym 1 set_size v 0.125
|
|
bindsym 2 set_size v 0.1666666667
|
|
bindsym 3 set_size v 0.25
|
|
bindsym 4 set_size v 0.333333333
|
|
bindsym 5 set_size v 0.375
|
|
bindsym 6 set_size v 0.5
|
|
bindsym 7 set_size v 0.625
|
|
bindsym 8 set_size v 0.6666666667
|
|
bindsym 9 set_size v 0.75
|
|
bindsym 0 set_size v 0.833333333
|
|
bindsym minus set_size v 0.875
|
|
bindsym equal set_size v 1.0
|
|
|
|
# Return to default mode
|
|
bindsym Escape mode "default"
|
|
}
|
|
bindsym $mod+Shift+b mode "setsizev"
|
|
|
|
mode "resize" {
|
|
# left will shrink the containers width
|
|
# right will grow the containers width
|
|
# up will shrink the containers height
|
|
# down will grow the containers height
|
|
bindsym $left resize shrink width 100px
|
|
bindsym $down resize grow height 100px
|
|
bindsym $up resize shrink height 100px
|
|
bindsym $right resize grow width 100px
|
|
|
|
# Return to default mode
|
|
bindsym Escape mode "default"
|
|
}
|
|
bindsym $mod+Shift+r mode "resize"
|
|
|
|
mode "align" {
|
|
bindsym c align center; mode default
|
|
bindsym m align middle; mode default
|
|
bindsym r align reset; mode default
|
|
bindsym $left align left; mode default
|
|
bindsym $right align right; mode default
|
|
bindsym $up align up; mode default
|
|
bindsym $down align down; mode default
|
|
bindsym Escape mode "default"
|
|
}
|
|
bindsym $mod+c mode "align"
|
|
|
|
# mode "fit_size" {
|
|
# bindsym w fit_size h visible proportional; mode default
|
|
# bindsym Shift+w fit_size v visible proportional; mode default
|
|
# bindsym Ctrl+w fit_size h visible equal; mode default
|
|
# bindsym Ctrl+Shift+w fit_size v visible equal; mode default
|
|
#
|
|
# bindsym $right fit_size h toend proportional; mode default
|
|
# bindsym Shift+$right fit_size v toend proportional; mode default
|
|
# bindsym Ctrl+$right fit_size h toend equal; mode default
|
|
# bindsym Ctrl+Shift+$right fit_size v toend equal; mode default
|
|
#
|
|
# bindsym $left fit_size h tobeg proportional; mode default
|
|
# bindsym Shift+$left fit_size v tobeg proportional; mode default
|
|
# bindsym Ctrl+$left fit_size h tobeg equal; mode default
|
|
# bindsym Ctrl+Shift+$left fit_size v tobeg equal; mode default
|
|
#
|
|
# bindsym $up fit_size h active proportional; mode default
|
|
# bindsym Shift+$up fit_size v active proportional; mode default
|
|
# #bindsym Ctrl+$up fit_size h active equal; mode default
|
|
# #bindsym Ctrl+Shift+$up fit_size v active equal; mode default
|
|
#
|
|
# bindsym $down fit_size h all proportional; mode default
|
|
# bindsym Shift+$down fit_size v all proportional; mode default
|
|
# bindsym Ctrl+$down fit_size h all equal; mode default
|
|
# bindsym Ctrl+Shift+$down fit_size v all equal; mode default
|
|
# }
|
|
# bindsym $mod+w mode "fit_size"
|
|
|
|
#
|
|
# Utilities:
|
|
#
|
|
# Special keys to adjust volume via PulseAudio
|
|
bindsym --locked XF86AudioMute exec pactl set-sink-mute \@DEFAULT_SINK@ toggle
|
|
bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume \@DEFAULT_SINK@ -5%
|
|
bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume \@DEFAULT_SINK@ +5%
|
|
bindsym --locked XF86AudioMicMute exec pactl set-source-mute \@DEFAULT_SOURCE@ toggle
|
|
# Special keys to adjust brightness via brightnessctl
|
|
bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%-
|
|
bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+
|
|
# Special key to take a screenshot with grim
|
|
bindsym Print exec grim
|
|
|
|
|
|
focus_wrapping no
|
|
|
|
bindgesture swipe:4:right workspace next
|
|
bindgesture swipe:4:left workspace prev
|
|
|
|
bindgesture swipe:4:up scale_workspace overview
|
|
bindgesture swipe:4:down jump
|
|
|
|
bindgesture swipe:3:right focus right
|
|
bindgesture swipe:3:left focus left
|
|
bindgesture swipe:3:up focus up
|
|
bindgesture swipe:3:down focus down
|
|
|
|
#
|
|
# Status Bar:
|
|
#
|
|
# Read `man 5 scroll-bar` for more information about this section.
|
|
# bar {
|
|
# position top
|
|
#
|
|
# # When the status_command prints a new line to stdout, scrollbar updates.
|
|
# # The default just shows the current date and time.
|
|
# status_command while date +'%Y-%m-%d %X'; do sleep 1; done
|
|
#
|
|
# colors {
|
|
# statusline #ffffff
|
|
# background #323232
|
|
# inactive_workspace #32323200 #32323200 #5c5c5c
|
|
# }
|
|
# }
|
|
#
|
|
# include @sysconfdir@/scroll/config.d/*
|
|
'';
|
|
}
|