diff options
Diffstat (limited to 'home/rices')
| -rw-r--r-- | home/rices/schrottkatze/niri.nix | 33 | ||||
| -rw-r--r-- | home/rices/schrottkatze/niri/kdl/binds.kdl | 77 | ||||
| -rw-r--r-- | home/rices/schrottkatze/niri/kdl/input.kdl | 17 | ||||
| -rw-r--r-- | home/rices/schrottkatze/niri/kdl/overviews.kdl | 19 | ||||
| -rw-r--r-- | home/rices/schrottkatze/niri/kdl/privacy.kdl | 12 | ||||
| -rw-r--r-- | home/rices/schrottkatze/niri/kdl/quirks.kdl | 42 | ||||
| -rw-r--r-- | home/rices/schrottkatze/niri/kdl/screenshot.kdl | 6 | ||||
| -rw-r--r-- | home/rices/schrottkatze/niri/kdl/style.kdl | 84 | ||||
| -rw-r--r-- | home/rices/schrottkatze/niri/kdl/workspaces.kdl | 58 | ||||
| -rwxr-xr-x | home/rices/schrottkatze/niri/scripts/cpdate.sh | 20 | ||||
| -rw-r--r-- | home/rices/schrottkatze/niri/shaders/arc.frag | 131 | ||||
| -rw-r--r-- | home/rices/schrottkatze/niri/wallpaper.jpg | bin | 0 -> 8827762 bytes |
12 files changed, 499 insertions, 0 deletions
diff --git a/home/rices/schrottkatze/niri.nix b/home/rices/schrottkatze/niri.nix new file mode 100644 index 0000000..a69685f --- /dev/null +++ b/home/rices/schrottkatze/niri.nix @@ -0,0 +1,33 @@ +# this file must only be saved via autosave due to the formatter. +# else it will be ugly +{pkgs, lib, ...}: { + home.packages = with pkgs; [ + zenity + xwayland-satellite + ]; + home.file."config" = + let + kdlfiles = + builtins.readDir ./niri/kdl + |> lib.filterAttrs (key: value: value == "regular") + |> lib.mapAttrsToList (filename: _value: "include \"${./niri/kdl}/${filename}\""); + startups = + [ + ["eww" "open-many" "topBar" "bottomBar"] + ["${pkgs.swaybg}/bin/swaybg" "-i" "${./niri/wallpaper.jpg}" "-m" "fill"] + ["touch" ".config/niri/live.kdl"] + ] + |> map (map (word: "\"${word}\"")) + |> map (lib.concatStringsSep " ") + |> map (it: "spawn-at-startup ${it}"); + other = [ + "include \"live.kdl\"" + "output \"eDP-1\" { scale 1.1; }" + "animations { window-open { duration-ms 3000; curve \"linear\"; custom-shader r\"\n${builtins.readFile ./niri/shaders/arc.frag}\";};}" + "binds {Mod+Shift+I { spawn \"${./niri/scripts/cpdate.sh}\"; }; }" + ]; + in { + target = ".config/niri/config.kdl"; + text = lib.concatLines (startups ++ kdlfiles ++ other); + }; +} diff --git a/home/rices/schrottkatze/niri/kdl/binds.kdl b/home/rices/schrottkatze/niri/kdl/binds.kdl new file mode 100644 index 0000000..611e231 --- /dev/null +++ b/home/rices/schrottkatze/niri/kdl/binds.kdl @@ -0,0 +1,77 @@ +binds { + // spawn terminal + Mod+Return repeat=false { spawn "kitty"; } + Mod+D repeat=false { spawn "fuzzel"; } + Mod+I repeat=false { spawn "bemoji" "-n"; } + Mod+M repeat=false { spawn "hyprpicker"; } + Mod+E repeat=false { spawn "kitty" "hx" "~/.config/niri/live.kdl"; } + + Mod+Shift+E { quit; } + Mod+Shift+Q { close-window; } + Mod+Ctrl+Shift+P { power-off-monitors; } + + Mod+Shift+Ctrl+Slash allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; } + + Mod+Shift+Slash { show-hotkey-overlay; } + + Mod+Shift+C { set-dynamic-cast-window; } + Mod+Ctrl+C { set-dynamic-cast-monitor; } + Mod+Shift+Ctrl+C { clear-dynamic-cast-target; } + + // window/columns controls + Mod+H { focus-column-left; } + Mod+J { focus-window-down; } + Mod+K { focus-window-up; } + Mod+L { focus-column-right; } + Mod+Ctrl+H { move-column-left; } + Mod+Ctrl+J { move-window-down; } + Mod+Ctrl+K { move-window-up; } + Mod+Ctrl+L { move-column-right; } + Mod+R { switch-preset-column-width; } + + Mod+G { toggle-overview; } + + Mod+V { toggle-window-floating; } + Mod+Shift+V { switch-focus-between-floating-and-tiling; } + + // monitor controls + Mod+Shift+H { focus-monitor-left; } + Mod+Shift+J { focus-monitor-down; } + Mod+Shift+K { focus-monitor-up; } + Mod+Shift+L { focus-monitor-right; } + Mod+Shift+Ctrl+H { move-column-to-monitor-left; } + Mod+Shift+Ctrl+J { move-column-to-monitor-down; } + Mod+Shift+Ctrl+K { move-column-to-monitor-up; } + Mod+Shift+Ctrl+L { move-column-to-monitor-right; } + + // column editing stuffs + Mod+BracketLeft { consume-or-expel-window-left; } + Mod+BracketRight { consume-or-expel-window-right; } + Mod+C { center-column; } + Mod+Minus { set-column-width "-5%"; } + Mod+Equal { set-column-width "+5%"; } + Mod+Shift+Minus { set-window-height "-10%"; } + Mod+Shift+Equal { set-window-height "+10%"; } + Mod+Shift+W { toggle-column-tabbed-display; } + + Mod+F { maximize-column; } + Alt+F { expand-column-to-available-width; } + Mod+Shift+F { maximize-window-to-edges; } + Mod+Ctrl+F { fullscreen-window; } + + Mod+Shift+Ctrl+F { toggle-windowed-fullscreen; } + + // media keys + XF86AudioLowerVolume \ + allow-when-locked=true \ + { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; } + XF86AudioMicMute \ + allow-when-locked=true \ + { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; } + XF86AudioMute \ + allow-when-locked=true \ + { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; } + XF86AudioRaiseVolume \ + allow-when-locked=true \ + { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; } +} diff --git a/home/rices/schrottkatze/niri/kdl/input.kdl b/home/rices/schrottkatze/niri/kdl/input.kdl new file mode 100644 index 0000000..a8be309 --- /dev/null +++ b/home/rices/schrottkatze/niri/kdl/input.kdl @@ -0,0 +1,17 @@ +input { + keyboard { + xkb { + layout "us" + variant "altgr-intl" + } + repeat-delay 600 + repeat-rate 25 + track-layout "global" + } + touchpad { + dwt + dwtp + natural-scroll + } + mouse { accel-profile "flat"; } +} diff --git a/home/rices/schrottkatze/niri/kdl/overviews.kdl b/home/rices/schrottkatze/niri/kdl/overviews.kdl new file mode 100644 index 0000000..5cb4443 --- /dev/null +++ b/home/rices/schrottkatze/niri/kdl/overviews.kdl @@ -0,0 +1,19 @@ +overview { + backdrop-color "110000" + zoom 0.381966 + workspace-shadow { + offset x=0 y=10 + softness 60 + color "#7f00008f" + } +} + +recent-windows { + debounce-ms 1500 + open-delay-ms 300 + highlight { + active-color "f69ecf" + padding 5 + corner-radius 2.5 + } +} diff --git a/home/rices/schrottkatze/niri/kdl/privacy.kdl b/home/rices/schrottkatze/niri/kdl/privacy.kdl new file mode 100644 index 0000000..1190aeb --- /dev/null +++ b/home/rices/schrottkatze/niri/kdl/privacy.kdl @@ -0,0 +1,12 @@ +layer-rule { + match namespace="notifications" + block-out-from "screen-capture" +} + +window-rule { + match app-id="^signal|Element|org.gnome.Evolution$" + match title="^.*(Discord|Beispiel Screenshare block Bug|Bitwarden|Träwelling).*$" + exclude title="^.*((Schrottkatze|Statistics|Leaderboard) - Träwelling|chaos.social|Nekoverse|catgirl.cloud).*$" + exclude is-floating=true + block-out-from "screen-capture" +} diff --git a/home/rices/schrottkatze/niri/kdl/quirks.kdl b/home/rices/schrottkatze/niri/kdl/quirks.kdl new file mode 100644 index 0000000..07fa886 --- /dev/null +++ b/home/rices/schrottkatze/niri/kdl/quirks.kdl @@ -0,0 +1,42 @@ +// handle steam grabbing focus 1000 times on startup +window-rule { + match app-id="steam" title="Steam" + open-focused false +} + +// position steam notifs correctly: https://github.com/YaLTeR/niri/wiki/Application-Issues +window-rule { + match app-id="steam" title="^notificationtoasts_[\\d]+_desktop$" + open-focused false + border { off; } + shadow { off; } + baba-is-float false + default-floating-position relative-to="bottom-right" x=0 y=0 +} + +// fix guild wars +window-rule { + match app-id="steam_app_1284210" title="Guild Wars 2" + match app-id="(steam_app_[0-9]+|[Mm]inecraft.*|gamescope)" + border { off; } + shadow { off; } +} + +window-rule { + match app-id="chromium-browser" + geometry-corner-radius 6 6 1 1 +} + +window-rule { + match app-id="vesktop" is-floating=true + geometry-corner-radius 6 +} + +environment { + ELECTRON_OZONE_PLATFORM_HINT "auto" +} + +window-rule { + match app-id="zenity" + geometry-corner-radius 16 +} diff --git a/home/rices/schrottkatze/niri/kdl/screenshot.kdl b/home/rices/schrottkatze/niri/kdl/screenshot.kdl new file mode 100644 index 0000000..f99e15c --- /dev/null +++ b/home/rices/schrottkatze/niri/kdl/screenshot.kdl @@ -0,0 +1,6 @@ +screenshot-path "~/Pictures/screenshots/%Y-%m-%dT%H:%M:%S.png" +binds { + Mod+Ctrl+S { screenshot-screen; } + Mod+Shift+S { screenshot-window; } + Mod+S { screenshot; } +} diff --git a/home/rices/schrottkatze/niri/kdl/style.kdl b/home/rices/schrottkatze/niri/kdl/style.kdl new file mode 100644 index 0000000..fccf795 --- /dev/null +++ b/home/rices/schrottkatze/niri/kdl/style.kdl @@ -0,0 +1,84 @@ +prefer-no-csd + +cursor { + xcursor-theme "phinger-cursors-dark" + xcursor-size 32 + hide-when-typing + hide-after-inactive-ms 10000 +} + +layout { + gaps 15 + struts { + left 0 + right 0 + top 0 + bottom 0 + } + focus-ring { off; } + border { + on + width 3 + active-gradient angle=135 from="#f69ecf" in="oklch shorter hue" relative-to="window" to="#5bcefa" + inactive-gradient angle=135 from="#f69ecf" in="oklch shorter hue" relative-to="window" to="#ff9a56" + } + tab-indicator { + hide-when-single-tab + gap 2 + width 5 + length total-proportion=0.500000 + position "left" + gaps-between-tabs 0 + corner-radius 3 + active-color "#5bcefa" + inactive-color "#3c3836" + } + default-column-width + center-focused-column "never" +} + +window-rule { + match is-floating=true + exclude app-id="steam_app_[0-9]+" + shadow { + on + offset x=0 y=0 + softness 40 + color "#bab9e5af" + inactive-color "#fa9d99af" + } +} + +window-rule { + geometry-corner-radius 1 + clip-to-geometry true +} + +window-rule { + match is-window-cast-target=true + border { + on + active-gradient angle=135 \ + from="#64de50" \ + in="oklch shorter hue" \ + relative-to="window" \ + to="#5bcefa" + inactive-gradient angle=135 \ + from="#64de50" \ + in="oklch shorter hue" \ + relative-to="window" \ + to="#ff9a56" + } +} + +layer-rule { + match namespace="launcher" + geometry-corner-radius 10 + shadow { + on + offset x=0 y=0 + softness 40 + color "#bab9e5af" + } + baba-is-float true +} diff --git a/home/rices/schrottkatze/niri/kdl/workspaces.kdl b/home/rices/schrottkatze/niri/kdl/workspaces.kdl new file mode 100644 index 0000000..ab89dec --- /dev/null +++ b/home/rices/schrottkatze/niri/kdl/workspaces.kdl @@ -0,0 +1,58 @@ +// WS Social +workspace "social" + +spawn-at-startup "signal-desktop" +spawn-at-startup ".evolution-wrapped_" +spawn-at-startup "vesktop" +spawn-at-startup "deltachat" + +window-rule { + match app-id="^(signal|Element|org.gnome.Evolution|discord|steam|DeltaChat)$" + open-on-workspace "social" +} + +// WS Browser +workspace "browser" + +spawn-at-startup "firefox" +spawn-at-startup "obsidian" + +window-rule { + match app-id="^firefox|Chromium-browser|obsidian$" + open-on-workspace "browser" +} + +binds { + Mod+P { focus-workspace-up; } + Mod+N { focus-workspace-down; } + Mod+Ctrl+P { move-workspace-up; } + Mod+Ctrl+N { move-workspace-down; } + Mod+Shift+P { move-column-to-workspace-up; } + Mod+Shift+N { move-column-to-workspace-down; } + + Mod+Q { focus-workspace "social"; } + Mod+W { focus-workspace "browser"; } + Mod+E { focus-workspace 3; } + Mod+Ctrl+Q { move-column-to-workspace "social"; } + Mod+Ctrl+W { move-column-to-workspace "browser"; } + Mod+Ctrl+E { move-column-to-workspace 3; } + + Mod+1 { focus-workspace 4; } + Mod+2 { focus-workspace 5; } + Mod+3 { focus-workspace 6; } + Mod+4 { focus-workspace 7; } + Mod+5 { focus-workspace 8; } + Mod+6 { focus-workspace 9; } + Mod+7 { focus-workspace 10; } + Mod+8 { focus-workspace 11; } + Mod+9 { focus-workspace 12; } + Mod+Ctrl+1 { move-column-to-workspace 4; } + Mod+Ctrl+2 { move-column-to-workspace 5; } + Mod+Ctrl+3 { move-column-to-workspace 6; } + Mod+Ctrl+4 { move-column-to-workspace 7; } + Mod+Ctrl+5 { move-column-to-workspace 8; } + Mod+Ctrl+6 { move-column-to-workspace 9; } + Mod+Ctrl+7 { move-column-to-workspace 10; } + Mod+Ctrl+8 { move-column-to-workspace 11; } + Mod+Ctrl+9 { move-column-to-workspace 12; } +} diff --git a/home/rices/schrottkatze/niri/scripts/cpdate.sh b/home/rices/schrottkatze/niri/scripts/cpdate.sh new file mode 100755 index 0000000..acc2994 --- /dev/null +++ b/home/rices/schrottkatze/niri/scripts/cpdate.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env nu + +const FORMATS = [ + "%F" + "%R" + "%d.%m.%Y" + "%d.%m" + "%T" + "%FT%H" + "%FT%R" + "%F %R" + "%F %T" +]; + +def main [] { + let date = date now; + let len = $FORMATS | length; + + $FORMATS | each {|it| $date | format date $it } | to text | fuzzel -dl $len | str trim | wl-copy +} diff --git a/home/rices/schrottkatze/niri/shaders/arc.frag b/home/rices/schrottkatze/niri/shaders/arc.frag new file mode 100644 index 0000000..301357c --- /dev/null +++ b/home/rices/schrottkatze/niri/shaders/arc.frag @@ -0,0 +1,131 @@ + +#define PI 3.14159 + +#define TAU 6.28319 + +#define WIDTH 3. +#define RADIUS 1. + +#define WIPE_DURATION .2 +#define BORDER_LOOPS 3. +#define FADE_ITS 2. + +vec4 gradi(float pos, vec4 bg, vec4 fg, float fac, float mask) { + if (mask < 0.2) { + return bg; + } + + vec4 trans = vec4(0.); + vec4 purple = vec4(0.45, 0.13, 0.49, 1.0) * vec4(mask); + vec4 blue = vec4(0.25, 0.74, 0.81, 1.0) * vec4(mask); + vec4 white = vec4(mask); + float mult = 4. * fac; + + if (pos <= 0.125) { + return mix(bg, purple, max(0., pos * mult)); + } else if (pos <= 0.25) { + return mix(purple, blue, (pos * mult) - 1.); + } else if (pos <= 0.5) { + return mix(blue, white, (pos * mult) - 2.); + } else { + return fg; + } + +} + +// from niri source code: https://github.com/YaLTeR/niri/blob/f30db163b5748e8cf95c05aba77d0d3736f40543/src/render_helpers/shaders/border.frag#L211-L234 +float rounding_alpha(vec2 coords, vec2 size, vec4 corner_radius) { + vec2 center; + float radius; + + if (coords.x < corner_radius.x && coords.y < corner_radius.x) { + radius = corner_radius.x; + center = vec2(radius, radius); + } else if (size.x - corner_radius.y < coords.x && coords.y < corner_radius.y) { + radius = corner_radius.y; + center = vec2(size.x - radius, radius); + } else if (size.x - corner_radius.z < coords.x && size.y - corner_radius.z < coords.y) { + radius = corner_radius.z; + center = vec2(size.x - radius, size.y - radius); + } else if (coords.x < corner_radius.w && size.y - corner_radius.w < coords.y) { + radius = corner_radius.w; + center = vec2(radius, size.y - radius); + } else { + return 1.0;// + } + + float dist = distance(coords, center); + float half_px = 0.5; + return 1.0 - smoothstep(radius - half_px, radius + half_px, dist); +} + +vec4 open_color(vec3 coords_geo, vec3 size_geo) { + vec4 bg1 = vec4(.1, .1, .18, 1.0); + vec4 bg2 = vec4(.09, .05, .11, 1.0); + + vec3 coords_tex = niri_geo_to_tex * coords_geo; + vec4 color = texture2D(niri_tex, coords_tex.st); + + float pi = radians(180.); + + if (0.0 <= coords_geo.x && coords_geo.x <= 1.0 + && 0.0 <= coords_geo.y && coords_geo.y <= 1.0) + { + float pos = (coords_tex.x - ((1. / WIPE_DURATION) * niri_clamped_progress) * 2.) + 1.; + vec2 coords = (coords_geo.xy - vec2(0.5, 0.5)) * size_geo.xy * 2.0; + vec2 coords_abs = coords_geo.xy * size_geo.xy; + + float border_a = 1.; + + border_a *= rounding_alpha( + coords_abs.xy, + size_geo.xy, + vec4(RADIUS + WIDTH) + ); + + vec4 bg = mix(bg1, bg2, length(coords_tex.xy - vec2(1., 0.))) * border_a; + + color = gradi(pos, color, bg, 2.0, border_a); + + float angle = (atan(coords.y, coords.x) + PI) / TAU; + float spinny_angle = mod((angle + niri_clamped_progress * BORDER_LOOPS), 1.0) / 2.; + + vec2 border = WIDTH / size_geo.xy; + + float temp = border_a; + float round_a = 1. - rounding_alpha( + coords_abs.xy - WIDTH, + size_geo.xy - WIDTH * 2., + vec4(RADIUS) + ); + + if (coords_geo.x <= border.x || coords_geo.x >= (1. - border.x) || + coords_geo.y <= border.y || coords_geo.y >= (1. - border.y)) { + border_a *= round_a; + } + + float rest = 0.; + if (border_a + temp == 1.) { + rest = 1.; + } + + border_a *= round_a; + border_a += rest; + + vec4 grad = gradi( + spinny_angle, + vec4(.48, .37, .5, 1.), + vec4(1., 0., 0., 1.), + 2.0, // DO NOT TOUCH + border_a + ); + + if ((1. - niri_clamped_progress) < FADE_ITS / BORDER_LOOPS) { + border_a *= (1. - niri_clamped_progress) / (FADE_ITS / BORDER_LOOPS); + } + color = mix(color, grad, border_a); + + } + + return color; +} diff --git a/home/rices/schrottkatze/niri/wallpaper.jpg b/home/rices/schrottkatze/niri/wallpaper.jpg Binary files differnew file mode 100644 index 0000000..5b31b96 --- /dev/null +++ b/home/rices/schrottkatze/niri/wallpaper.jpg |
