summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--.config/dunst/dunstrc494
-rw-r--r--.config/gammastep/config.ini73
-rw-r--r--.config/hypr/hyprlock.conf61
-rw-r--r--.config/niri/binds.kdl275
-rw-r--r--.config/niri/config.kdl58
-rw-r--r--.config/niri/input.kdl66
-rw-r--r--.config/niri/layout.kdl156
-rw-r--r--.config/niri/output.kdl37
-rw-r--r--.config/niri/windows.kdl69
-rw-r--r--.config/swayidle/config4
-rw-r--r--.config/systemd/user/swaybg.service12
-rw-r--r--.config/systemd/user/swayidle.service12
-rw-r--r--.config/vicinae/vicinae.json24
-rw-r--r--.config/waybar/config.jsonc124
-rw-r--r--.config/waybar/style.css102
15 files changed, 1567 insertions, 0 deletions
diff --git a/.config/dunst/dunstrc b/.config/dunst/dunstrc
new file mode 100644
index 0000000..04ab944
--- /dev/null
+++ b/.config/dunst/dunstrc
@@ -0,0 +1,494 @@
1# See dunst(5) for all configuration options
2
3[global]
4 ### Display ###
5
6 # Which monitor should the notifications be displayed on.
7 monitor = 0
8
9 # Display notification on focused monitor. Possible modes are:
10 # mouse: follow mouse pointer
11 # keyboard: follow window with keyboard focus
12 # none: don't follow anything
13 #
14 # "keyboard" needs a window manager that exports the
15 # _NET_ACTIVE_WINDOW property.
16 # This should be the case for almost all modern window managers.
17 #
18 # If this option is set to mouse or keyboard, the monitor option
19 # will be ignored.
20 follow = none
21
22 ### Geometry ###
23
24 # The width of the window, excluding the frame.
25 # dynamic width from 0 to 300
26 # width = (0, 300)
27 # constant width of 300
28 width = 400
29
30 # The height of a single notification, excluding the frame.
31 # dynamic height from 0 to 300
32 height = (0, 300)
33 # constant height of 300
34 # height = 300
35 # NOTE: Dunst from version 1.11 and older don't support dynamic height
36 # and the given value is treated as the maximum height
37
38 # Position the notification in the top right corner
39 origin = top-right
40
41 # Offset from the origin
42 # NOTE: Dunst from version 1.11 and older use this alternative notation
43 # offset = 10x50
44 offset = (32, 32)
45
46 # Scale factor. It is auto-detected if value is 0.
47 scale = 0
48
49 # Maximum number of notification (0 means no limit)
50 notification_limit = 20
51
52 # Show how many messages are currently hidden (because of
53 # notification_limit).
54 indicate_hidden = yes
55
56 ### Progress bar ###
57
58 # Turn on the progress bar. It appears when a progress hint is passed with
59 # for example dunstify -h int:value:12
60 progress_bar = true
61
62 # Set the progress bar height. This includes the frame, so make sure
63 # it's at least twice as big as the frame width.
64 progress_bar_height = 8
65
66 # Set the frame width of the progress bar
67 progress_bar_frame_width = 0
68
69 # Set the minimum width for the progress bar
70 progress_bar_min_width = 150
71
72 # Set the maximum width for the progress bar
73 progress_bar_max_width = 300
74
75 # Corner radius for the progress bar. 0 disables rounded corners.
76 progress_bar_corner_radius = 4
77
78 # Define which corners to round when drawing the progress bar. If progress_bar_corner_radius
79 # is set to 0 this option will be ignored.
80 progress_bar_corners = all
81
82 # Corner radius for the icon image.
83 icon_corner_radius = 0
84
85 # Define which corners to round when drawing the icon image. If icon_corner_radius
86 # is set to 0 this option will be ignored.
87 icon_corners = all
88
89 # The transparency of the window. Range: [0; 100].
90 # This option will only work if a compositing window manager is
91 # present (e.g. xcompmgr, compiz, etc.). (X11 only)
92 transparency = 0
93
94 # Draw a line of "separator_height" pixel height between two
95 # notifications.
96 # Set to 0 to disable.
97 # If gap_size is greater than 0, this setting will be ignored.
98 separator_height = 2
99
100 # Padding between text and separator.
101 padding = 8
102
103 # Horizontal padding.
104 horizontal_padding = 8
105
106 # Padding between text and icon.
107 text_icon_padding = 0
108
109 # Defines width in pixels of frame around the notification window.
110 # Set to 0 to disable.
111 frame_width = 2
112
113 # Defines color of the frame around the notification window.
114 frame_color = "#aaaaaa"
115
116 # Size of gap to display between notifications - requires a compositor.
117 # If value is greater than 0, separator_height will be ignored and a border
118 # of size frame_width will be drawn around each notification instead.
119 # Click events on gaps do not currently propagate to applications below.
120 gap_size = 16
121
122 # Define a color for the separator.
123 # possible values are:
124 # * auto: dunst tries to find a color fitting to the background;
125 # * foreground: use the same color as the foreground;
126 # * frame: use the same color as the frame;
127 # * anything else will be interpreted as a X color.
128 separator_color = frame
129
130 # Sort type.
131 # possible values are:
132 # * id: sort by id
133 # * urgency_ascending: sort by urgency (low then normal then critical)
134 # * urgency_descending: sort by urgency (critical then normal then low)
135 # * update: sort by update (most recent always at the top)
136 sort = yes
137
138 # Don't remove messages, if the user is idle (no mouse or keyboard input)
139 # for longer than idle_threshold seconds.
140 # Set to 0 to disable.
141 # A client can set the 'transient' hint to bypass this. See the rules
142 # section for how to disable this if necessary
143 idle_threshold = 120
144
145 ### Text ###
146
147 font = Noto 11
148
149 # The spacing between lines. If the height is smaller than the
150 # font height, it will get raised to the font height.
151 line_height = 0
152
153 # Possible values are:
154 # full: Allow a small subset of html markup in notifications:
155 # <b>bold</b>
156 # <i>italic</i>
157 # <s>strikethrough</s>
158 # <u>underline</u>
159 #
160 # For a complete reference see
161 # <https://docs.gtk.org/Pango/pango_markup.html>.
162 #
163 # strip: This setting is provided for compatibility with some broken
164 # clients that send markup even though it's not enabled on the
165 # server. Dunst will try to strip the markup but the parsing is
166 # simplistic so using this option outside of matching rules for
167 # specific applications *IS GREATLY DISCOURAGED*.
168 #
169 # no: Disable markup parsing, incoming notifications will be treated as
170 # plain text. Dunst will not advertise that it has the body-markup
171 # capability if this is set as a global setting.
172 #
173 # It's important to note that markup inside the format option will be parsed
174 # regardless of what this is set to.
175 markup = full
176
177 # The format of the message. Possible variables are:
178 # %a appname
179 # %s summary
180 # %b body
181 # %c category
182 # %S stack_tag
183 # %i iconname (including its path)
184 # %I iconname (without its path)
185 # %p progress value if set ([ 0%] to [100%]) or nothing
186 # %n progress value if set without any extra characters
187 # %% literal %
188 # Markup is allowed
189 format = "<b>%s</b> (%a)\n%b"
190
191 # Alignment of message text.
192 # Possible values are "left", "center" and "right".
193 alignment = left
194
195 # Vertical alignment of message text and icon.
196 # Possible values are "top", "center" and "bottom".
197 vertical_alignment = center
198
199 # Show age of message if message is older than show_age_threshold
200 # seconds.
201 # Set to -1 to disable.
202 show_age_threshold = 60
203
204 # Specify where to make an ellipsis in long lines.
205 # Possible values are "start", "middle" and "end".
206 ellipsize = end
207
208 # Ignore newlines '\n' in notifications.
209 ignore_newline = no
210
211 # Stack together notifications with the same content
212 stack_duplicates = true
213
214 # Hide the count of stacked notifications with the same content
215 hide_duplicate_count = false
216
217 # Display indicators for URLs (U) and actions (A).
218 show_indicators = yes
219
220 ### Icons ###
221
222 # Recursive icon lookup. You can set a single theme, instead of having to
223 # define all lookup paths.
224 enable_recursive_icon_lookup = true
225
226 # Set icon theme (only used for recursive icon lookup)
227 icon_theme = breeze
228 # You can also set multiple icon themes, with the leftmost one being used first.
229 # icon_theme = "Adwaita, breeze"
230
231 # Align icons left/right/top/off
232 icon_position = left
233
234 # Scale small icons up to this size, set to 0 to disable. Helpful
235 # for e.g. small files or high-dpi screens. In case of conflict,
236 # max_icon_size takes precedence over this.
237 min_icon_size = 32
238
239 # Scale larger icons down to this size, set to 0 to disable
240 max_icon_size = 128
241
242 # Paths to default icons (only necessary when not using recursive icon lookup)
243 # icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
244
245 ### History ###
246
247 # Should a notification popped up from history be sticky or timeout
248 # as if it would normally do.
249 sticky_history = yes
250
251 # Maximum amount of notifications kept in history
252 history_length = 20
253
254 ### Misc/Advanced ###
255
256 # dmenu path.
257 dmenu = /usr/bin/vicinae dmenu
258
259 # Browser for opening urls in context menu.
260 browser = /usr/bin/xdg-open
261
262 # Always run rule-defined scripts, even if the notification is suppressed
263 always_run_script = true
264
265 # Define the title of the windows spawned by dunst (X11 only)
266 title = Dunst
267
268 # Define the class of the windows spawned by dunst (X11 only)
269 class = Dunst
270
271 # Define the corner radius of the notification window
272 # in pixel size. If the radius is 0, you have no rounded
273 # corners.
274 # The radius will be automatically lowered if it exceeds half of the
275 # notification height to avoid clipping text and/or icons.
276 corner_radius = 12
277
278 # Define which corners to round when drawing the window. If the corner radius
279 # is set to 0 this option will be ignored.
280 #
281 # Comma-separated list of the corners. The accepted corner values are bottom-right,
282 # bottom-left, top-right, top-left, top, bottom, left, right or all.
283 corners = all
284
285 # Ignore the dbus closeNotification message.
286 # Useful to enforce the timeout set by dunst configuration. Without this
287 # parameter, an application may close the notification sent before the
288 # user defined timeout.
289 ignore_dbusclose = false
290
291 ### Wayland ###
292 # These settings are Wayland-specific. They have no effect when using X11
293
294 # Uncomment this if you want to let notifications appear under fullscreen
295 # applications (default: overlay)
296 # layer = top
297
298 # Set this to true to use X11 output on Wayland.
299 force_xwayland = false
300
301 ### Legacy
302
303 # Use the Xinerama extension instead of RandR for multi-monitor support.
304 # This setting is provided for compatibility with older nVidia drivers that
305 # do not support RandR and using it on systems that support RandR is highly
306 # discouraged.
307 #
308 # By enabling this setting dunst will not be able to detect when a monitor
309 # is connected or disconnected which might break follow mode if the screen
310 # layout changes.
311 force_xinerama = false
312
313 ### mouse
314
315 # Defines list of actions for each mouse event
316 # Possible values are:
317 # * none: Don't do anything.
318 # * do_action: Invoke the action determined by the action_name rule. If there is no
319 # such action, open the context menu.
320 # * open_url: If the notification has exactly one url, open it. If there are multiple
321 # ones, open the context menu.
322 # * close_current: Close current notification.
323 # * remove_current: Remove current notification from history.
324 # * close_all: Close all notifications.
325 # * context: Open context menu for the notification.
326 # * context_all: Open context menu for all notifications.
327 # These values can be strung together for each mouse event, and
328 # will be executed in sequence.
329 mouse_left_click = open_url,close_current
330 mouse_middle_click = context,close_current
331 mouse_right_click = close_all
332
333# Experimental features that may or may not work correctly. Do not expect them
334# to have a consistent behaviour across releases.
335[experimental]
336 # Calculate the dpi to use on a per-monitor basis.
337 # If this setting is enabled the Xft.dpi value will be ignored and instead
338 # dunst will attempt to calculate an appropriate dpi value for each monitor
339 # using the resolution and physical size. This might be useful in setups
340 # where there are multiple screens with very different dpi values.
341 per_monitor_dpi = false
342
343
344[urgency_low]
345 # IMPORTANT: colors have to be defined in quotation marks.
346 # Otherwise the "#" and following would be interpreted as a comment.
347 background = "#222222"
348 foreground = "#888888"
349 timeout = 10
350 default_icon = dialog-information
351
352[urgency_normal]
353 background = "#285577"
354 foreground = "#ffffff"
355 timeout = 10
356 override_pause_level = 30
357 default_icon = dialog-information
358
359[urgency_critical]
360 background = "#900000"
361 foreground = "#ffffff"
362 frame_color = "#ff0000"
363 timeout = 0
364 override_pause_level = 60
365 default_icon = dialog-warning
366
367# Every section that isn't one of the above is interpreted as a rules to
368# override settings for certain messages.
369#
370# Messages can be matched by
371# appname (discouraged, see desktop_entry)
372# body
373# category
374# desktop_entry
375# icon
376# match_transient
377# msg_urgency
378# stack_tag
379# summary
380#
381# and you can override the
382# background
383# foreground
384# format
385# frame_color
386# fullscreen
387# new_icon
388# set_stack_tag
389# set_transient
390# set_category
391# timeout
392# urgency
393# icon_position
394# skip_display
395# history_ignore
396# action_name
397# word_wrap
398# ellipsize
399# alignment
400# hide_text
401# override_pause_level
402#
403# Shell-like globbing will get expanded.
404#
405# Instead of the appname filter, it's recommended to use the desktop_entry filter.
406# GLib based applications export their desktop-entry name. In comparison to the appname,
407# the desktop-entry won't get localized.
408#
409# You can also allow a notification to appear even when paused. Notification will appear whenever notification's override_pause_level >= dunst's paused level.
410# This can be used to set partial pause modes, where more urgent notifications get through, but less urgent stay paused. To do that, you can override the following in the rules:
411# override_pause_level = X
412
413# SCRIPTING
414# You can specify a script that gets run when the rule matches by
415# setting the "script" option.
416# The script will be called as follows:
417# script appname summary body icon urgency
418# where urgency can be "LOW", "NORMAL" or "CRITICAL".
419#
420# NOTE: It might be helpful to run dunst -print in a terminal in order
421# to find fitting options for rules.
422
423# Disable the transient hint so that idle_threshold cannot be bypassed from the
424# client
425#[transient_disable]
426# match_transient = yes
427# set_transient = no
428#
429# Make the handling of transient notifications more strict by making them not
430# be placed in history.
431#[transient_history_ignore]
432# match_transient = yes
433# history_ignore = yes
434
435# fullscreen values
436# show: show the notifications, regardless if there is a fullscreen window opened
437# delay: displays the new notification, if there is no fullscreen window active
438# If the notification is already drawn, it won't get undrawn.
439# pushback: same as delay, but when switching into fullscreen, the notification will get
440# withdrawn from screen again and will get delayed like a new notification
441#[fullscreen_delay_everything]
442# fullscreen = delay
443#[fullscreen_show_critical]
444# msg_urgency = critical
445# fullscreen = show
446
447#[espeak]
448# summary = "*"
449# script = dunst_espeak.sh
450
451#[script-test]
452# summary = "*script*"
453# script = dunst_test.sh
454
455#[ignore]
456# # This notification will not be displayed
457# summary = "foobar"
458# skip_display = true
459
460#[history-ignore]
461# # This notification will not be saved in history
462# summary = "foobar"
463# history_ignore = yes
464
465#[skip-display]
466# # This notification will not be displayed, but will be included in the history
467# summary = "foobar"
468# skip_display = yes
469
470#[signed_on]
471# appname = Pidgin
472# summary = "*signed on*"
473# urgency = low
474#
475#[signed_off]
476# appname = Pidgin
477# summary = *signed off*
478# urgency = low
479#
480#[says]
481# appname = Pidgin
482# summary = *says*
483# urgency = critical
484#
485#[twitter]
486# appname = Pidgin
487# summary = *twitter.com*
488# urgency = normal
489#
490#[stack-volumes]
491# appname = "some_volume_notifiers"
492# set_stack_tag = "volume"
493#
494# vim: ft=cfg
diff --git a/.config/gammastep/config.ini b/.config/gammastep/config.ini
new file mode 100644
index 0000000..b3baa1f
--- /dev/null
+++ b/.config/gammastep/config.ini
@@ -0,0 +1,73 @@
1; Global settings
2[general]
3; Set the day and night screen temperatures
4temp-day=5700
5temp-night=4500
6
7; Disable the smooth fade between temperatures when Redshift starts and stops.
8; 0 will cause an immediate change between screen temperatures.
9; 1 will gradually apply the new screen temperature over a couple of seconds.
10fade=1
11
12; Solar elevation thresholds.
13; By default, Redshift will use the current elevation of the sun to determine
14; whether it is daytime, night or in transition (dawn/dusk). When the sun is
15; above the degrees specified with elevation-high it is considered daytime and
16; below elevation-low it is considered night.
17;elevation-high=3
18;elevation-low=-6
19
20; Custom dawn/dusk intervals.
21; Instead of using the solar elevation, the time intervals of dawn and dusk
22; can be specified manually. The times must be specified as HH:MM in 24-hour
23; format.
24;dawn-time=6:00-7:45
25;dusk-time=18:35-20:15
26
27; Set the screen brightness. Default is 1.0.
28;brightness=0.9
29; It is also possible to use different settings for day and night
30; since version 1.8.
31;brightness-day=0.7
32;brightness-night=0.4
33; Set the screen gamma (for all colors, or each color channel
34; individually)
35; gamma=0.8
36;gamma=0.8:0.7:0.8
37; This can also be set individually for day and night since
38; version 1.10.
39;gamma-day=0.8:0.7:0.8
40;gamma-night=0.6
41
42; Set the location-provider: 'geoclue2', 'manual'.
43; The location provider settings are in a different section.
44location-provider=manual
45
46; Set the adjustment-method: 'randr', 'vidmode', 'drm', 'wayland'.
47; 'randr' is the preferred X11 method, 'vidmode' is an older API
48; that works in some cases when 'randr' does not.
49; The adjustment method settings are in a different section.
50adjustment-method=wayland
51
52; Configuration of the location-provider:
53; type 'gammastep -l PROVIDER:help' to see the settings.
54; ex: 'gammastep -l manual:help'
55; Keep in mind that longitudes west of Greenwich (e.g. the Americas)
56; are negative numbers.
57[manual]
58; 60.03,30.4 Sosnovka park
59lat=60.03
60lon=30.4
61
62; Configuration of the adjustment-method
63; type 'gammastep -m METHOD:help' to see the settings.
64; ex: 'gammastep -m randr:help'
65; In this example, randr is configured to adjust only screen 0.
66; Note that the numbering starts from 0, so this is actually the first screen.
67; If this option is not specified, Redshift will try to adjust _all_ screens.
68[randr]
69screen=0
70
71; In this example, wayland is configured to match outputs based on their name.
72[wayland]
73# output=eDP-*
diff --git a/.config/hypr/hyprlock.conf b/.config/hypr/hyprlock.conf
new file mode 100644
index 0000000..03f6a6d
--- /dev/null
+++ b/.config/hypr/hyprlock.conf
@@ -0,0 +1,61 @@
1general {
2 hide_cursor = true
3 ignore_empty_input = true
4}
5
6background {
7 path = ~/.config/wallpaper
8 blur_passes = 1
9 blur_size = 5
10}
11
12input-field {
13 hide_input = false
14 fade_on_empty = false
15 shadow_passes = 2
16 shadow_size = 5
17 outline_thickness = 1
18 size = 300, 50
19 rounding = 10
20 outer_color = rgb(238, 238, 238)
21 inner_color = rgb(40, 40, 46)
22 font_color = rgb(238, 238, 238)
23 check_color = rgb(236, 198, 156)
24}
25
26# Time
27label {
28 text = cmd[update:1000] echo "<span>$(date +%R)</span>"
29 color = rgb(238, 238, 238)
30 font_size = 50
31 shadow_passes = 1
32 valign = top
33 position = 0, -200
34}
35
36# Date
37label {
38 text = cmd[update:1000] echo "<span>$(date +'%A, %d %B %Y')</span>"
39 color = rgb(238, 238, 238)
40 font_size = 20
41 shadow_passes = 1
42 valign = top
43 position = 0, -300
44}
45
46label {
47 text = $USER
48 color = rgb(238, 238, 238)
49 font_size = 20
50 position = 0, 75
51 shadow_passes = 1
52}
53
54label {
55 text = cmd[] fortune goedel -s
56 color = rgb(238, 238, 238)
57 shadow_passes = 1
58 font_size = 14
59 valign = bottom
60 position = 0, 50
61}
diff --git a/.config/niri/binds.kdl b/.config/niri/binds.kdl
new file mode 100644
index 0000000..28b8ac6
--- /dev/null
+++ b/.config/niri/binds.kdl
@@ -0,0 +1,275 @@
1binds {
2 // Keys consist of modifiers separated by + signs, followed by an XKB key name
3 // in the end. To find an XKB name for a particular key, you may use a program
4 // like wev.
5 //
6 // "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
7 // when running as a winit window.
8 //
9 // Most actions that you can bind here can also be invoked programmatically with
10 // `niri msg action do-something`.
11
12 // Mod-Shift-/, which is usually the same as Mod-?,
13 // shows a list of important hotkeys.
14 Mod+Shift+Slash { show-hotkey-overlay; }
15
16 // Suggested binds for running programs: terminal, app launcher, screen locker.
17 Mod+T hotkey-overlay-title="Open a Terminal: alacritty" { spawn "alacritty"; }
18 Alt+Space hotkey-overlay-title="App menu" { spawn "vicinae" "toggle" ; }
19 Super+Alt+L hotkey-overlay-title="Lock the Screen" { spawn "loginctl" "lock-session"; }
20
21 // Use spawn-sh to run a shell command. Do this if you need pipes, multiple commands, etc.
22 // Note: the entire command goes as a single argument. It's passed verbatim to `sh -c`.
23 // For example, this is a standard bind to toggle the screen reader (orca).
24 Super+Alt+S allow-when-locked=true hotkey-overlay-title=null { spawn-sh "pkill orca || exec orca"; }
25
26 // Example volume keys mappings for PipeWire & WirePlumber.
27 // The allow-when-locked=true property makes them work even when the session is locked.
28 // Using spawn-sh allows to pass multiple arguments together with the command.
29 // "-l 1.0" limits the volume to 100%.
30 XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05+ -l 1.0"; }
31 XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05-"; }
32 XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; }
33 XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; }
34
35 // Example media keys mapping using playerctl.
36 // This will work with any MPRIS-enabled media player.
37 XF86AudioPlay allow-when-locked=true { spawn-sh "playerctl play-pause"; }
38 XF86AudioStop allow-when-locked=true { spawn-sh "playerctl stop"; }
39 XF86AudioPrev allow-when-locked=true { spawn-sh "playerctl previous"; }
40 XF86AudioNext allow-when-locked=true { spawn-sh "playerctl next"; }
41
42 // Example brightness key mappings for brightnessctl.
43 // You can use regular spawn with multiple arguments too (to avoid going through "sh"),
44 // but you need to manually put each argument in separate "" quotes.
45 XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "+10%"; }
46 XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "10%-"; }
47
48 // Open/close the Overview: a zoomed-out view of workspaces and windows.
49 // You can also move the mouse into the top-left hot corner,
50 // or do a four-finger swipe up on a touchpad.
51 Mod+O repeat=false { toggle-overview; }
52
53 Mod+D repeat=false { close-window; }
54
55 Mod+Left { focus-column-left; }
56 Mod+Down { focus-window-down; }
57 Mod+Up { focus-window-up; }
58 Mod+Right { focus-column-right; }
59 Mod+H { focus-column-left; }
60 Mod+J { focus-window-down; }
61 Mod+K { focus-window-up; }
62 Mod+L { focus-column-right; }
63
64 Mod+Ctrl+Left { move-column-left; }
65 Mod+Ctrl+Down { move-window-down; }
66 Mod+Ctrl+Up { move-window-up; }
67 Mod+Ctrl+Right { move-column-right; }
68 Mod+Ctrl+H { move-column-left; }
69 Mod+Ctrl+J { move-window-down; }
70 Mod+Ctrl+K { move-window-up; }
71 Mod+Ctrl+L { move-column-right; }
72
73 // Alternative commands that move across workspaces when reaching
74 // the first or last window in a column.
75 // Mod+J { focus-window-or-workspace-down; }
76 // Mod+K { focus-window-or-workspace-up; }
77 // Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
78 // Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
79
80 Mod+Home { focus-column-first; }
81 Mod+End { focus-column-last; }
82 Mod+Ctrl+Home { move-column-to-first; }
83 Mod+Ctrl+End { move-column-to-last; }
84
85 Mod+Shift+Left { focus-monitor-left; }
86 Mod+Shift+Down { focus-monitor-down; }
87 Mod+Shift+Up { focus-monitor-up; }
88 Mod+Shift+Right { focus-monitor-right; }
89 Mod+Shift+H { focus-monitor-left; }
90 Mod+Shift+J { focus-monitor-down; }
91 Mod+Shift+K { focus-monitor-up; }
92 Mod+Shift+L { focus-monitor-right; }
93
94 Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
95 Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
96 Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
97 Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
98 Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
99 Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
100 Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
101 Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
102
103 // Alternatively, there are commands to move just a single window:
104 // Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
105 // ...
106
107 // And you can also move a whole workspace to another monitor:
108 // Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; }
109 // ...
110
111 Mod+Page_Down { focus-workspace-down; }
112 Mod+Page_Up { focus-workspace-up; }
113 Mod+U { focus-workspace-down; }
114 Mod+I { focus-workspace-up; }
115 Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
116 Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
117 Mod+Ctrl+U { move-column-to-workspace-down; }
118 Mod+Ctrl+I { move-column-to-workspace-up; }
119
120 // Alternatively, there are commands to move just a single window:
121 // Mod+Ctrl+Page_Down { move-window-to-workspace-down; }
122 // ...
123
124 Mod+Shift+Page_Down { move-workspace-down; }
125 Mod+Shift+Page_Up { move-workspace-up; }
126 Mod+Shift+U { move-workspace-down; }
127 Mod+Shift+I { move-workspace-up; }
128
129 // You can bind mouse wheel scroll ticks using the following syntax.
130 // These binds will change direction based on the natural-scroll setting.
131 //
132 // To avoid scrolling through workspaces really fast, you can use
133 // the cooldown-ms property. The bind will be rate-limited to this value.
134 // You can set a cooldown on any bind, but it's most useful for the wheel.
135 Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
136 Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
137 Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
138 Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
139
140 Mod+WheelScrollRight { focus-column-right; }
141 Mod+WheelScrollLeft { focus-column-left; }
142 Mod+Ctrl+WheelScrollRight { move-column-right; }
143 Mod+Ctrl+WheelScrollLeft { move-column-left; }
144
145 // Usually scrolling up and down with Shift in applications results in
146 // horizontal scrolling; these binds replicate that.
147 Mod+Shift+WheelScrollDown { focus-column-right; }
148 Mod+Shift+WheelScrollUp { focus-column-left; }
149 Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
150 Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
151
152 // Similarly, you can bind touchpad scroll "ticks".
153 // Touchpad scrolling is continuous, so for these binds it is split into
154 // discrete intervals.
155 // These binds are also affected by touchpad's natural-scroll, so these
156 // example binds are "inverted", since we have natural-scroll enabled for
157 // touchpads by default.
158 // Mod+TouchpadScrollDown { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02+"; }
159 // Mod+TouchpadScrollUp { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02-"; }
160
161 // You can refer to workspaces by index. However, keep in mind that
162 // niri is a dynamic workspace system, so these commands are kind of
163 // "best effort". Trying to refer to a workspace index bigger than
164 // the current workspace count will instead refer to the bottommost
165 // (empty) workspace.
166 //
167 // For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
168 // will all refer to the 3rd workspace.
169 Mod+1 { focus-workspace 1; }
170 Mod+2 { focus-workspace 2; }
171 Mod+3 { focus-workspace 3; }
172 Mod+4 { focus-workspace 4; }
173 Mod+5 { focus-workspace 5; }
174 Mod+6 { focus-workspace 6; }
175 Mod+7 { focus-workspace 7; }
176 Mod+8 { focus-workspace 8; }
177 Mod+9 { focus-workspace 9; }
178 Mod+Ctrl+1 { move-column-to-workspace 1; }
179 Mod+Ctrl+2 { move-column-to-workspace 2; }
180 Mod+Ctrl+3 { move-column-to-workspace 3; }
181 Mod+Ctrl+4 { move-column-to-workspace 4; }
182 Mod+Ctrl+5 { move-column-to-workspace 5; }
183 Mod+Ctrl+6 { move-column-to-workspace 6; }
184 Mod+Ctrl+7 { move-column-to-workspace 7; }
185 Mod+Ctrl+8 { move-column-to-workspace 8; }
186 Mod+Ctrl+9 { move-column-to-workspace 9; }
187
188 // Alternatively, there are commands to move just a single window:
189 // Mod+Ctrl+1 { move-window-to-workspace 1; }
190
191 // Switches focus between the current and the previous workspace.
192 // Mod+Tab { focus-workspace-previous; }
193
194 // The following binds move the focused window in and out of a column.
195 // If the window is alone, they will consume it into the nearby column to the side.
196 // If the window is already in a column, they will expel it out.
197 Mod+BracketLeft { consume-or-expel-window-left; }
198 Mod+BracketRight { consume-or-expel-window-right; }
199
200 // Consume one window from the right to the bottom of the focused column.
201 Mod+Comma { consume-window-into-column; }
202 // Expel the bottom window from the focused column to the right.
203 Mod+Period { expel-window-from-column; }
204
205 Mod+R { switch-preset-column-width; }
206 // Cycling through the presets in reverse order is also possible.
207 // Mod+R { switch-preset-column-width-back; }
208 Mod+Shift+R { switch-preset-window-height; }
209 Mod+Ctrl+R { reset-window-height; }
210 Mod+F { maximize-column; }
211 Mod+Shift+F { fullscreen-window; }
212
213 // Expand the focused column to space not taken up by other fully visible columns.
214 // Makes the column "fill the rest of the space".
215 Mod+Ctrl+F { expand-column-to-available-width; }
216
217 Mod+C { center-column; }
218
219 // Center all fully visible columns on screen.
220 Mod+Ctrl+C { center-visible-columns; }
221
222 // Finer width adjustments.
223 // This command can also:
224 // * set width in pixels: "1000"
225 // * adjust width in pixels: "-5" or "+5"
226 // * set width as a percentage of screen width: "25%"
227 // * adjust width as a percentage of screen width: "-10%" or "+10%"
228 // Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
229 // set-column-width "100" will make the column occupy 200 physical screen pixels.
230 Mod+Minus { set-column-width "-10%"; }
231 Mod+Equal { set-column-width "+10%"; }
232
233 // Finer height adjustments when in column with other windows.
234 Mod+Shift+Minus { set-window-height "-10%"; }
235 Mod+Shift+Equal { set-window-height "+10%"; }
236
237 // Move the focused window between the floating and the tiling layout.
238 Mod+V { toggle-window-floating; }
239 Mod+Shift+V { switch-focus-between-floating-and-tiling; }
240
241 // Toggle tabbed column display mode.
242 // Windows in this column will appear as vertical tabs,
243 // rather than stacked on top of each other.
244 Mod+W { toggle-column-tabbed-display; }
245
246 // Actions to switch layouts.
247 // Note: if you uncomment these, make sure you do NOT have
248 // a matching layout switch hotkey configured in xkb options above.
249 // Having both at once on the same hotkey will break the switching,
250 // since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
251 // Mod+Space { switch-layout "next"; }
252 // Mod+Shift+Space { switch-layout "prev"; }
253
254 Print { screenshot; }
255 Ctrl+Print { screenshot-screen; }
256 Alt+Print { screenshot-window; }
257
258 // Applications such as remote-desktop clients and software KVM switches may
259 // request that niri stops processing the keyboard shortcuts defined here
260 // so they may, for example, forward the key presses as-is to a remote machine.
261 // It's a good idea to bind an escape hatch to toggle the inhibitor,
262 // so a buggy application can't hold your session hostage.
263 //
264 // The allow-inhibiting=false property can be applied to other binds as well,
265 // which ensures niri always processes them, even when an inhibitor is active.
266 Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
267
268 // The quit action will show a confirmation dialog to avoid accidental exits.
269 Ctrl+Alt+Delete { quit; }
270
271 // Powers off the monitors. To turn them back on, do any input like
272 // moving the mouse or pressing any other key.
273 Mod+Shift+P { power-off-monitors; }
274}
275
diff --git a/.config/niri/config.kdl b/.config/niri/config.kdl
new file mode 100644
index 0000000..cc2efef
--- /dev/null
+++ b/.config/niri/config.kdl
@@ -0,0 +1,58 @@
1// This config is in the KDL format: https://kdl.dev
2// "/-" comments out the following node.
3// Check the wiki for a full description of the configuration:
4// https://yalter.github.io/niri/Configuration:-Introduction
5
6include "input.kdl"
7include "output.kdl"
8include "layout.kdl"
9include "binds.kdl"
10include "windows.kdl"
11
12
13// Add lines like this to spawn processes at startup.
14// Note that running niri as a session supports xdg-desktop-autostart,
15// which may be more convenient to use.
16// See the binds section below for more spawn examples.
17
18spawn-sh-at-startup "vicinae server"
19spawn-sh-at-startup "gammastep"
20
21// To run a shell command (with variables, pipes, etc.), use spawn-sh-at-startup:
22// spawn-sh-at-startup "qs -c ~/source/qs/MyAwesomeShell"
23
24hotkey-overlay {
25 skip-at-startup
26 hide-not-bound
27}
28
29// Uncomment this line to ask the clients to omit their client-side decorations if possible.
30// If the client will specifically ask for CSD, the request will be honored.
31// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners.
32// This option will also fix border/focus ring drawing behind some semitransparent windows.
33// After enabling or disabling this, you need to restart the apps for this to take effect.
34prefer-no-csd
35
36// You can change the path where screenshots are saved.
37// A ~ at the front will be expanded to the home directory.
38// The path is formatted with strftime(3) to give you the screenshot date and time.
39screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
40
41// You can also set this to null to disable saving screenshots to disk.
42// screenshot-path null
43
44// Animation settings.
45// The wiki explains how to configure individual animations:
46// https://yalter.github.io/niri/Configuration:-Animations
47animations {
48 // Uncomment to turn off all animations.
49 // off
50
51 // Slow down all animations by this factor. Values below 1 speed them up instead.
52 // slowdown 3.0
53}
54
55cursor {
56 xcursor-theme "breeze_cursors"
57}
58
diff --git a/.config/niri/input.kdl b/.config/niri/input.kdl
new file mode 100644
index 0000000..b6cdc7e
--- /dev/null
+++ b/.config/niri/input.kdl
@@ -0,0 +1,66 @@
1// Input device configuration.
2// Find the full list of options on the wiki:
3// https://yalter.github.io/niri/Configuration:-Input
4input {
5 keyboard {
6 xkb {
7 // You can set rules, model, layout, variant and options.
8 // For more information, see xkeyboard-config(7).
9
10 layout "us,ru"
11 options "grp:win_space_toggle,caps:escape"
12
13 // If this section is empty, niri will fetch xkb settings
14 // from org.freedesktop.locale1. You can control these using
15 // localectl set-x11-keymap.
16 }
17
18 // Enable numlock on startup, omitting this setting disables it.
19 numlock
20 track-layout "window"
21 }
22
23 // Next sections include libinput settings.
24 // Omitting settings disables them, or leaves them at their default values.
25 // All commented-out settings here are examples, not defaults.
26 touchpad {
27 // off
28 tap
29 // dwt
30 // dwtp
31 // drag false
32 // drag-lock
33 natural-scroll
34 // accel-speed 0.2
35 // accel-profile "flat"
36 // scroll-method "two-finger"
37 // disabled-on-external-mouse
38 }
39
40 mouse {
41 // off
42 // natural-scroll
43 accel-speed -0.3
44 accel-profile "flat"
45 // scroll-method "no-scroll"
46 }
47
48 trackpoint {
49 // off
50 // natural-scroll
51 // accel-speed 0.2
52 // accel-profile "flat"
53 // scroll-method "on-button-down"
54 // scroll-button 273
55 // scroll-button-lock
56 // middle-emulation
57 }
58
59 // Uncomment this to make the mouse warp to the center of newly focused windows.
60 // warp-mouse-to-focus
61
62 // Focus windows and outputs automatically when moving the mouse into them.
63 // Setting max-scroll-amount="0%" makes it work only on windows already fully on screen.
64 // focus-follows-mouse max-scroll-amount="0%"
65}
66
diff --git a/.config/niri/layout.kdl b/.config/niri/layout.kdl
new file mode 100644
index 0000000..646ee56
--- /dev/null
+++ b/.config/niri/layout.kdl
@@ -0,0 +1,156 @@
1// Settings that influence how windows are positioned and sized.
2// Find more information on the wiki:
3// https://yalter.github.io/niri/Configuration:-Layout
4layout {
5 // Set gaps around windows in logical pixels.
6 gaps 16
7
8 // When to center a column when changing focus, options are:
9 // - "never", default behavior, focusing an off-screen column will keep at the left
10 // or right edge of the screen.
11 // - "always", the focused column will always be centered.
12 // - "on-overflow", focusing a column will center it if it doesn't fit
13 // together with the previously focused column.
14 center-focused-column "never"
15
16 // You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between.
17 preset-column-widths {
18 // Proportion sets the width as a fraction of the output width, taking gaps into account.
19 // For example, you can perfectly fit four windows sized "proportion 0.25" on an output.
20 // The default preset widths are 1/3, 1/2 and 2/3 of the output.
21 proportion 0.33333
22 proportion 0.5
23 proportion 0.66667
24
25 // Fixed sets the width in logical pixels exactly.
26 // fixed 1920
27 }
28
29 // You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between.
30 // preset-window-heights { }
31
32 // You can change the default width of the new windows.
33 default-column-width { proportion 0.5; }
34 // If you leave the brackets empty, the windows themselves will decide their initial width.
35 // default-column-width {}
36
37 // By default focus ring and border are rendered as a solid background rectangle
38 // behind windows. That is, they will show up through semitransparent windows.
39 // This is because windows using client-side decorations can have an arbitrary shape.
40 //
41 // If you don't like that, you should uncomment `prefer-no-csd` below.
42 // Niri will draw focus ring and border *around* windows that agree to omit their
43 // client-side decorations.
44 //
45 // Alternatively, you can override it with a window rule called
46 // `draw-border-with-background`.
47
48 // You can change how the focus ring looks.
49 focus-ring {
50 // Uncomment this line to disable the focus ring.
51 // off
52
53 // How many logical pixels the ring extends out from the windows.
54 width 4
55
56 // Colors can be set in a variety of ways:
57 // - CSS named colors: "red"
58 // - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa"
59 // - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others.
60
61 // Color of the ring on the active monitor.
62 active-color "#7fc8ff"
63
64 // Color of the ring on inactive monitors.
65 //
66 // The focus ring only draws around the active window, so the only place
67 // where you can see its inactive-color is on other monitors.
68 inactive-color "#505050"
69
70 // You can also use gradients. They take precedence over solid colors.
71 // Gradients are rendered the same as CSS linear-gradient(angle, from, to).
72 // The angle is the same as in linear-gradient, and is optional,
73 // defaulting to 180 (top-to-bottom gradient).
74 // You can use any CSS linear-gradient tool on the web to set these up.
75 // Changing the color space is also supported, check the wiki for more info.
76 //
77 // active-gradient from="#80c8ff" to="#c7ff7f" angle=45
78
79 // You can also color the gradient relative to the entire view
80 // of the workspace, rather than relative to just the window itself.
81 // To do that, set relative-to="workspace-view".
82 //
83 // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
84 }
85
86 // You can also add a border. It's similar to the focus ring, but always visible.
87 border {
88 // The settings are the same as for the focus ring.
89 // If you enable the border, you probably want to disable the focus ring.
90 off
91
92 width 4
93 active-color "#ffc87f"
94 inactive-color "#505050"
95
96 // Color of the border around windows that request your attention.
97 urgent-color "#9b0000"
98
99 // Gradients can use a few different interpolation color spaces.
100 // For example, this is a pastel rainbow gradient via in="oklch longer hue".
101 //
102 // active-gradient from="#e5989b" to="#ffb4a2" angle=45 relative-to="workspace-view" in="oklch longer hue"
103
104 // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
105 }
106
107 // You can enable drop shadows for windows.
108 shadow {
109 // Uncomment the next line to enable shadows.
110 // on
111
112 // By default, the shadow draws only around its window, and not behind it.
113 // Uncomment this setting to make the shadow draw behind its window.
114 //
115 // Note that niri has no way of knowing about the CSD window corner
116 // radius. It has to assume that windows have square corners, leading to
117 // shadow artifacts inside the CSD rounded corners. This setting fixes
118 // those artifacts.
119 //
120 // However, instead you may want to set prefer-no-csd and/or
121 // geometry-corner-radius. Then, niri will know the corner radius and
122 // draw the shadow correctly, without having to draw it behind the
123 // window. These will also remove client-side shadows if the window
124 // draws any.
125 //
126 // draw-behind-window true
127
128 // You can change how shadows look. The values below are in logical
129 // pixels and match the CSS box-shadow properties.
130
131 // Softness controls the shadow blur radius.
132 softness 30
133
134 // Spread expands the shadow.
135 spread 5
136
137 // Offset moves the shadow relative to the window.
138 offset x=0 y=5
139
140 // You can also change the shadow color and opacity.
141 color "#0007"
142 }
143
144 // Struts shrink the area occupied by windows, similarly to layer-shell panels.
145 // You can think of them as a kind of outer gaps. They are set in logical pixels.
146 // Left and right struts will cause the next window to the side to always be visible.
147 // Top and bottom struts will simply add outer gaps in addition to the area occupied by
148 // layer-shell panels and regular gaps.
149 struts {
150 // left 64
151 // right 64
152 // top 64
153 // bottom 64
154 }
155}
156
diff --git a/.config/niri/output.kdl b/.config/niri/output.kdl
new file mode 100644
index 0000000..d0355e8
--- /dev/null
+++ b/.config/niri/output.kdl
@@ -0,0 +1,37 @@
1// You can configure outputs by their name, which you can find
2// by running `niri msg outputs` while inside a niri instance.
3// The built-in laptop monitor is usually called "eDP-1".
4// Find more information on the wiki:
5// https://yalter.github.io/niri/Configuration:-Outputs
6// Remember to uncomment the node by removing "/-"!
7/-output "eDP-1" {
8 // Uncomment this line to disable this output.
9 // off
10
11 // Resolution and, optionally, refresh rate of the output.
12 // The format is "<width>x<height>" or "<width>x<height>@<refresh rate>".
13 // If the refresh rate is omitted, niri will pick the highest refresh rate
14 // for the resolution.
15 // If the mode is omitted altogether or is invalid, niri will pick one automatically.
16 // Run `niri msg outputs` while inside a niri instance to list all outputs and their modes.
17 mode "[email protected]"
18
19 // You can use integer or fractional scale, for example use 1.5 for 150% scale.
20 scale 2
21
22 // Transform allows to rotate the output counter-clockwise, valid values are:
23 // normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270.
24 transform "normal"
25
26 // Position of the output in the global coordinate space.
27 // This affects directional monitor actions like "focus-monitor-left", and cursor movement.
28 // The cursor can only move between directly adjacent outputs.
29 // Output scale and rotation has to be taken into account for positioning:
30 // outputs are sized in logical, or scaled, pixels.
31 // For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080,
32 // so to put another output directly adjacent to it on the right, set its x to 1920.
33 // If the position is unset or results in an overlap, the output is instead placed
34 // automatically.
35 position x=1280 y=0
36}
37
diff --git a/.config/niri/windows.kdl b/.config/niri/windows.kdl
new file mode 100644
index 0000000..44410d3
--- /dev/null
+++ b/.config/niri/windows.kdl
@@ -0,0 +1,69 @@
1workspace "main"
2workspace "games"
3
4// Window rules let you adjust behavior for individual windows.
5// Find more information on the wiki:
6// https://yalter.github.io/niri/Configuration:-Window-Rules
7
8window-rule {
9 geometry-corner-radius 12
10 clip-to-geometry true
11}
12
13// Open the Firefox picture-in-picture player as floating by default.
14window-rule {
15 // This app-id regular expression will work for both:
16 // - host Firefox (app-id is "firefox")
17 // - Flatpak Firefox (app-id is "org.mozilla.firefox")
18 match app-id=r#"firefox$"# title="^Picture-in-Picture$"
19
20 open-floating true
21 default-floating-position x=32 y=32 relative-to="bottom-right"
22}
23
24window-rule {
25 match app-id=r#"firefox"# title="Choose User Profile"
26
27 open-floating true
28}
29
30window-rule {
31 match app-id=r#"^org\.keepassxc\.KeePassXC$"#
32
33 block-out-from "screen-capture"
34}
35
36window-rule {
37 match app-id=r#"^org\.telegram\.desktop$"#
38 exclude app-id=r#"^org\.telegram\.desktop$"# title="Media viewer"
39
40 default-column-width {
41 fixed 900
42 }
43}
44
45window-rule {
46 match app-id=r#"^org\.telegram\.desktop$"# title="Media viewer"
47
48 open-floating true
49}
50
51window-rule {
52 match app-id=r#"steam"#
53
54 open-on-workspace "games"
55}
56
57window-rule {
58 match app-id=r#"steam"# title="Steam"
59
60 open-maximized true
61}
62
63window-rule {
64 match app-id=r#"steam"# title="Friends List"
65
66 default-column-width {
67 fixed 500
68 }
69}
diff --git a/.config/swayidle/config b/.config/swayidle/config
new file mode 100644
index 0000000..f77d7ef
--- /dev/null
+++ b/.config/swayidle/config
@@ -0,0 +1,4 @@
1timeout 300 'loginctl lock-session'
2timeout 3600 'systemctl suspend'
3before-sleep 'hyprlock --grace 5'
4lock 'hyprlock'
diff --git a/.config/systemd/user/swaybg.service b/.config/systemd/user/swaybg.service
new file mode 100644
index 0000000..4a7903c
--- /dev/null
+++ b/.config/systemd/user/swaybg.service
@@ -0,0 +1,12 @@
1[Unit]
2Description=Wallpaper utility for Wayland
3After=graphical-session.target
4PartOf=graphical-session.target
5Requisite=graphical-session.target
6
7[Install]
8WantedBy=niri.service
9
10[Service]
11ExecStart=/usr/bin/swaybg --image "%h/.config/wallpaper"
12Restart=on-failure
diff --git a/.config/systemd/user/swayidle.service b/.config/systemd/user/swayidle.service
new file mode 100644
index 0000000..3f4397c
--- /dev/null
+++ b/.config/systemd/user/swayidle.service
@@ -0,0 +1,12 @@
1[Unit]
2Description=Idle management daemon for Wayland
3After=graphical-session.target
4PartOf=graphical-session.target
5Requisite=graphical-session.target
6
7[Install]
8WantedBy=niri.service
9
10[Service]
11ExecStart=/usr/bin/swayidle -w
12Restart=on-failure
diff --git a/.config/vicinae/vicinae.json b/.config/vicinae/vicinae.json
new file mode 100644
index 0000000..a8338f3
--- /dev/null
+++ b/.config/vicinae/vicinae.json
@@ -0,0 +1,24 @@
1{
2 "closeOnFocusLoss": true,
3 "considerPreedit": false,
4 "faviconService": "twenty",
5 "font": {
6 "size": 10.5
7 },
8 "keybinding": "default",
9 "keybinds": {
10 },
11 "popToRootOnClose": true,
12 "rootSearch": {
13 "searchFiles": false
14 },
15 "theme": {
16 "iconTheme": "Breeze",
17 "name": "rose-pine"
18 },
19 "window": {
20 "csd": true,
21 "opacity": 0.98,
22 "rounding": 10
23 }
24}
diff --git a/.config/waybar/config.jsonc b/.config/waybar/config.jsonc
new file mode 100644
index 0000000..76d5f01
--- /dev/null
+++ b/.config/waybar/config.jsonc
@@ -0,0 +1,124 @@
1// -*- mode: jsonc -*-
2{
3 "layer": "top", // Waybar at top layer
4 "position": "top", // Waybar position (top|bottom|left|right)
5 "height": 32, // Waybar height (to be removed for auto height)
6 // "width": 1280, // Waybar width
7 "spacing": 4, // Gaps between modules (4px)
8 // Choose the order of the modules
9 "modules-left": [
10 "niri/workspaces"
11 ],
12 "modules-center": [
13 "niri/window"
14 ],
15 "modules-right": [
16 "tray",
17 "pulseaudio",
18 // "group/system-status",
19 // "user",
20 "niri/language",
21 "battery",
22 "clock"
23 ],
24 // Modules configuration
25 "niri/workspaces": {
26 "format": "{icon}",
27 "format-icons": {
28 "main": "",
29 "games": "󰊖",
30 "default": ""
31 }
32 },
33 "niri/language": {
34 "format-en": "EN",
35 "format-ru": "RU"
36 },
37 "tray": {
38 // "icon-size": 21,
39 "spacing": 10,
40 // "icons": {
41 // "blueman": "bluetooth",
42 // "TelegramDesktop": "$HOME/.local/share/icons/hicolor/16x16/apps/telegram.png"
43 // }
44 },
45 "clock": {
46 "tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
47 "format": "{:%R}",
48 "format-alt": "{:%F}"
49 },
50 "group/system-status": {
51 "modules": [
52 "network",
53 "memory",
54 "cpu",
55 "temperature"
56 ],
57 "orientation": "inherit",
58 "drawer": {
59 }
60 },
61 "cpu": {
62 "format": "CPU {usage}% {avg_frequency}",
63 "tooltip": false
64 },
65 "memory": {
66 "format": "RAM {percentage}% + {swapPercentage}%"
67 },
68 "user": {
69 "format": "{work_H}:{work_M} Up"
70 },
71 "temperature": {
72 // "thermal-zone": 2,
73 // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
74 "critical-threshold": 80,
75 // "format-critical": "{temperatureC}°C {icon}",
76 "format": "{temperatureC}°C"
77 },
78 "backlight": {
79 // "device": "acpi_video1",
80 "format": "{percent}% {icon}",
81 "format-icons": ["", "", "", "", "", "", "", "", ""]
82 },
83 "battery": {
84 "states": {
85 // "good": 95,
86 "warning": 30,
87 "critical": 15
88 },
89 "format": "{capacity}% {icon}",
90 "format-full": "{capacity}% {icon}",
91 "format-charging": "{capacity}% ",
92 "format-plugged": "{capacity}% ",
93 "format-alt": "{time} {icon}",
94 // "format-good": "", // An empty format will hide the module
95 // "format-full": "",
96 "format-icons": ["", "", "", "", ""]
97 },
98 "network": {
99 "format-wifi": "{essid} ({signalStrength}%) ",
100 "format-ethernet": "{ipaddr}/{cidr}",
101 "tooltip-format": "{ifname} via {gwaddr}",
102 "format-linked": "{ifname} (No IP)",
103 "format-disconnected": "Disconnected ⚠",
104 "format-alt": "↑ {bandwidthUpBits} ↓ {bandwidthDownBits}"
105 },
106 "pulseaudio": {
107 "scroll-step": 5, // %, can be a float
108 "format": "{volume}% {icon}",
109 "format-bluetooth": "{volume}% {icon}",
110 "format-bluetooth-muted": " {icon} {format_source}",
111 "format-muted": " {format_source}",
112 "format-source-muted": "",
113 "format-icons": {
114 "headphone": "",
115 "hands-free": "",
116 "headset": "",
117 "phone": "",
118 "portable": "",
119 "car": "",
120 "default": ["", "", ""]
121 },
122 "on-click": "pavucontrol"
123 }
124}
diff --git a/.config/waybar/style.css b/.config/waybar/style.css
new file mode 100644
index 0000000..42ecf2b
--- /dev/null
+++ b/.config/waybar/style.css
@@ -0,0 +1,102 @@
1* {
2 font-family: "NotoSans Nerd Font", sans-serif;
3 font-size: 14px;
4 color: rgba(238, 238, 238, 1);
5}
6
7window#waybar {
8 background-color: rgb(40, 40, 46);
9 border-bottom: 1px solid rgba(238, 238, 238, 0.3);
10 transition-property: background-color;
11 transition-duration: .5s;
12}
13
14window#waybar.hidden {
15 opacity: 0.2;
16}
17
18tooltip {
19 background: rgb(40, 40, 46);
20}
21
22tooltip label {
23 padding: 0.2em 0.4em;
24}
25
26button {
27 /* Use box-shadow instead of border so the text isn't offset */
28 box-shadow: inset 0 -3px transparent;
29 /* Avoid rounded borders under each button name */
30 border: none;
31 border-radius: 0;
32}
33
34/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
35button:hover {
36 background: inherit;
37 box-shadow: inset 0 -3px #ffffff;
38}
39
40#workspaces button {
41 padding: 0 5px;
42 background-color: transparent;
43 min-width: 2em;
44}
45
46#workspaces button:hover {
47 background: rgba(0, 0, 0, 0.2);
48}
49
50#workspaces button.focused {
51 color: rgb(150, 145, 238);
52 background-color: rgba(238, 238, 238, 0.2);
53 box-shadow: inset 0 -3px rgb(150, 145, 238);
54}
55
56#workspaces button.urgent {
57 background-color: #eb4d4b;
58}
59
60#mode {
61 background-color: #64727D;
62 box-shadow: inset 0 -3px #ffffff;
63}
64
65window#window {
66 font-family: "JetBrainsMono", monospace;
67}
68
69#clock,
70#battery,
71#cpu,
72#memory,
73#disk,
74#temperature,
75#backlight,
76#network,
77#pulseaudio,
78#wireplumber,
79#custom-media,
80#tray,
81#mode,
82#idle_inhibitor,
83#scratchpad,
84#power-profiles-daemon,
85#mpd {
86 padding: 0 10px;
87}
88
89#window,
90#workspaces {
91 margin: 0 4px;
92}
93
94/* If workspaces is the leftmost module, omit left margin */
95.modules-left > widget:first-child > #workspaces {
96 margin-left: 0;
97}
98
99/* If workspaces is the rightmost module, omit right margin */
100.modules-right > widget:last-child > #workspaces {
101 margin-right: 0;
102}