From a923539c85389fdcd240a1fb51718d47336b79a0 Mon Sep 17 00:00:00 2001 From: aleidk Date: Mon, 27 Oct 2025 11:39:38 -0300 Subject: [PATCH 01/28] update niri config --- .dotter/aleidk-work-laptop.toml | 26 + .dotter/global.toml | 6 +- configs/mako/config | 1 + configs/niri/config.kdl | 871 +++++++++++++++------------- configs/nvim/lua/aleidk/options.lua | 1 + kdlfmt.kdl | 3 + 6 files changed, 494 insertions(+), 414 deletions(-) create mode 100644 kdlfmt.kdl diff --git a/.dotter/aleidk-work-laptop.toml b/.dotter/aleidk-work-laptop.toml index 05fd1ac..b1fe098 100644 --- a/.dotter/aleidk-work-laptop.toml +++ b/.dotter/aleidk-work-laptop.toml @@ -4,4 +4,30 @@ packages = ["default"] [files] "configs/hypr/work-laptop/hyprland.conf" = "~/.config/hypr/include/work-laptop.conf" + +[files."configs/niri/config.kdl"] +target = "~/.config/niri/config.kdl" +type = "template" +append = """ +window-rule { + match app-id="brave-work" + open-on-workspace "1" + open-focused true + + default-column-width { + proportion 0.5 + } +} +window-rule { + match app-id="brave-personal" + open-on-workspace "2" + open-focused false + + default-column-width { + proportion 0.5 + } +} + +""" + [variables] diff --git a/.dotter/global.toml b/.dotter/global.toml index a137e13..9fe01c6 100644 --- a/.dotter/global.toml +++ b/.dotter/global.toml @@ -4,7 +4,7 @@ default_target_type = "symbolic" [helpers] [default] -depends = [] +depends = ["niri"] [default.files] "configs/fish" = "~/.config/fish" @@ -21,7 +21,6 @@ depends = [] "configs/mako" = "~/.config/mako" "configs/mise" = "~/.config/mise" "configs/mpv" = "~/.config/mpv" -"configs/niri" = "~/.config/niri" "configs/nvim" = "~/.config/nvim" "configs/rofi" = "~/.config/rofi" "configs/swappy" = "~/.config/swappy" @@ -37,3 +36,6 @@ depends = [] [default.variables] + +[niri.files] +"configs/niri" = "~/.config/niri" diff --git a/configs/mako/config b/configs/mako/config index 1b7531f..7a78949 100644 --- a/configs/mako/config +++ b/configs/mako/config @@ -1,4 +1,5 @@ default-timeout=5000 +anchor=top-center # Colors diff --git a/configs/niri/config.kdl b/configs/niri/config.kdl index 06185e2..9581911 100644 --- a/configs/niri/config.kdl +++ b/configs/niri/config.kdl @@ -1,37 +1,455 @@ +// ╭─────────────────────────────────────────────────────────╮ +// │ Windows Rules │ +// ╰─────────────────────────────────────────────────────────╯ +window-rule { + // This regular expression is intentionally made as specific as possible, + // since this is the default config, and we want no false positives. + // You can get away with just app-id="wezterm" if you want. + match app-id="^org\\.wezfurlong\\.wezterm$" + default-column-width { + + } +} +// Floatin Windows +window-rule { + match app-id="firefox$" title="^Picture-in-Picture$" + match app-id="^brave-.*-Default$" + // Extensions popup open-floating true +} +window-rule { + match app-id="^org\\.keepassxc\\.KeePassXC$" + match app-id="^org\\.gnome\\.World\\.Secrets$" + // block-out-from "screen-capture" + // Use this instead if you want them visible on third-party screenshot tools. + block-out-from "screencast" +} +window-rule { + match app-id="brave-browser" + match at-startup=true + default-column-width { + proportion 0.75 + } +} +window-rule { + match title="^Meet: .*" app-id="brave-browser" + open-floating true +} +window-rule { + geometry-corner-radius 4 + clip-to-geometry true +} +// ╭─────────────────────────────────────────────────────────╮ +// │ Auto Start Apps │ +// ╰─────────────────────────────────────────────────────────╯ +spawn-at-startup "/usr/lib/pam_kwallet_init" +spawn-at-startup "udieskie" +spawn-at-startup "brave" +// To run a shell command (with variables, pipes, etc.), use spawn-sh-at-startup: +// spawn-sh-at-startup "qs -c ~/source/qs/MyAwesomeShell" +// ╭─────────────────────────────────────────────────────────╮ +// │ System Config │ +// ╰─────────────────────────────────────────────────────────╯ +// ── Layout Config ─────────────────────────────────────────────────── +layout { + gaps 10 + always-center-single-column + center-focused-column "never" + preset-column-widths { + // The default preset widths are 1/3, 1/2 and 2/3 of the output. + proportion 0.33333 + proportion 0.5 + proportion 0.66667 + } + preset-window-heights { + + } + default-column-width { + proportion 0.5 + } + focus-ring { + // Uncomment this line to disable the focus ring. + // off + // How many logical pixels the ring extends out from the windows. + width 2 + active-color "#7fc8ff" + inactive-color "#505050" + } +} +// ── Keybindings ───────────────────────────────────────────────────── +binds { + Mod+Shift+Slash { + show-hotkey-overlay + } + Mod+Return hotkey-overlay-title="Open a Terminal: kitty" { + spawn "kitty" + } + Mod+D hotkey-overlay-title="Run an Application: Rofi" { + spawn "rofi" "-show" "drun" "-run-command" "uwsm app -- {cmd}" + } + XF86AudioRaiseVolume allow-when-locked=true { + spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+" + } + XF86AudioLowerVolume allow-when-locked=true { + spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1-" + } + XF86AudioMute allow-when-locked=true { + spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + } + XF86AudioMicMute allow-when-locked=true { + spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" + } + XF86MonBrightnessUp allow-when-locked=true { + spawn "brightnessctl" "--class=backlight" "set" "+10%" + } + XF86MonBrightnessDown allow-when-locked=true { + spawn "brightnessctl" "--class=backlight" "set" "10%-" + } + // Open/close the Overview: a zoomed-out view of workspaces and windows. + // You can also move the mouse into the top-left hot corner, + // or do a four-finger swipe up on a touchpad. + Mod+A repeat=false { + toggle-overview + } + Mod+Shift+Q repeat=false { + close-window + } + Mod+Tab { + focus-column-right-or-first + } + Mod+shift+Tab { + focus-column-left-or-last + } + Mod+Left { + focus-column-left + } + Mod+Down { + focus-window-or-workspace-down + } + Mod+Up { + focus-window-or-workspace-up + } + Mod+Right { + focus-column-right + } + Mod+H { + focus-column-left + } + Mod+J { + focus-window-or-workspace-down + } + Mod+K { + focus-window-or-workspace-up + } + Mod+L { + focus-column-right + } + Mod+Shift+Left { + move-column-left + } + Mod+Shift+Down { + move-window-down-or-to-workspace-down + } + Mod+Shift+Up { + move-window-up-or-to-workspace-up + } + Mod+Shift+Right { + move-column-right + } + Mod+Shift+H { + move-column-left + } + Mod+Shift+J { + move-window-down-or-to-workspace-down + } + Mod+Shift+K { + move-window-up-or-to-workspace-up + } + Mod+Shift+L { + move-column-right + } + Mod+Home { + focus-column-first + } + Mod+End { + focus-column-last + } + Mod+Ctrl+Home { + move-column-to-first + } + Mod+Ctrl+End { + move-column-to-last + } + Mod+WheelScrollDown cooldown-ms=150 { + focus-column-right + } + Mod+WheelScrollUp cooldown-ms=150 { + focus-column-left + } + Mod+Ctrl+WheelScrollDown cooldown-ms=150 { + move-column-to-workspace-down + } + Mod+Ctrl+WheelScrollUp cooldown-ms=150 { + move-column-to-workspace-up + } + Mod+WheelScrollRight { + focus-column-right + } + Mod+WheelScrollLeft { + focus-column-left + } + Mod+Ctrl+WheelScrollRight { + move-column-right + } + Mod+Ctrl+WheelScrollLeft { + move-column-left + } + Mod+Shift+WheelScrollDown cooldown-ms=150 { + focus-workspace-down + } + Mod+Shift+WheelScrollUp cooldown-ms=150 { + focus-workspace-up + } + Mod+Ctrl+Shift+WheelScrollDown { + move-column-right + } + Mod+Ctrl+Shift+WheelScrollUp { + move-column-left + } + // Similarly, you can bind touchpad scroll "ticks". + // Touchpad scrolling is continuous, so for these binds it is split into + // discrete intervals. + // These binds are also affected by touchpad's natural-scroll, so these + // example binds are "inverted", since we have natural-scroll enabled for + // touchpads by default. + // Mod+TouchpadScrollDown { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02+"; } + // Mod+TouchpadScrollUp { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02-"; } + Mod+1 { + focus-workspace 1 + } + Mod+2 { + focus-workspace 2 + } + Mod+3 { + focus-workspace 3 + } + Mod+4 { + focus-workspace 4 + } + Mod+5 { + focus-workspace 5 + } + Mod+6 { + focus-workspace 6 + } + Mod+7 { + focus-workspace 7 + } + Mod+8 { + focus-workspace 8 + } + Mod+9 { + focus-workspace 9 + } + Mod+Shift+1 { + move-window-to-workspace 1 + } + Mod+Shift+2 { + move-window-to-workspace 2 + } + Mod+Shift+3 { + move-window-to-workspace 3 + } + Mod+Shift+4 { + move-window-to-workspace 4 + } + Mod+Shift+5 { + move-window-to-workspace 5 + } + Mod+Shift+6 { + move-window-to-workspace 6 + } + Mod+Shift+7 { + move-window-to-workspace 7 + } + Mod+Shift+8 { + move-window-to-workspace 8 + } + Mod+Shift+9 { + move-window-to-workspace 9 + } + // Switches focus between the current and the previous workspace. + Mod+Bar { + focus-workspace-previous + } + // The following binds move the focused window in and out of a column. + // If the window is alone, they will consume it into the nearby column to the side. + // If the window is already in a column, they will expel it out. + Mod+BraceLeft { + consume-or-expel-window-left + } + Mod+BraceRight { + consume-or-expel-window-right + } + // Consume one window from the right to the bottom of the focused column. + Mod+Comma { + consume-window-into-column + } + // Expel the bottom window from the focused column to the right. + Mod+Period { + expel-window-from-column + } + Mod+R { + switch-preset-column-width + } + // Cycling through the presets in reverse order is also possible. + // Mod+R { switch-preset-column-width-back; } + Mod+Shift+R { + switch-preset-window-height + } + Mod+Ctrl+R { + reset-window-height + } + Mod+F { + maximize-column + } + Mod+Shift+F { + fullscreen-window + } + // Expand the focused column to space not taken up by other fully visible columns. + // Makes the column "fill the rest of the space". + Mod+Ctrl+F { + expand-column-to-available-width + } + Mod+C { + center-column + } + // Center all fully visible columns on screen. + Mod+Ctrl+C { + center-visible-columns + } + // Finer width adjustments. + // This command can also: + // * set width in pixels: "1000" + // * adjust width in pixels: "-5" or "+5" + // * set width as a percentage of screen width: "25%" + // * adjust width as a percentage of screen width: "-10%" or "+10%" + // Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0, + // set-column-width "100" will make the column occupy 200 physical screen pixels. + Mod+Minus { + set-column-width "-10%" + } + Mod+Plus { + set-column-width "+10%" + } + // Finer height adjustments when in column with other windows. + Mod+Shift+Minus { + set-window-height "-10%" + } + Mod+Shift+Equal { + set-window-height "+10%" + } + // Move the focused window between the floating and the tiling layout. + Mod+Shift+Space { + toggle-window-floating + } + Mod+Space { + switch-focus-between-floating-and-tiling + } + // Toggle tabbed column display mode. + // Windows in this column will appear as vertical tabs, + // rather than stacked on top of each other. + Mod+W { + toggle-column-tabbed-display + } + Print { + screenshot + } + Shift+Print { + screenshot-window + } + Shift+Ctrl+Print hotkey-overlay-title="Edit image in Clipboard" { + spawn-sh "wl-paste | swappy -f -" + } + // Applications such as remote-desktop clients and software KVM switches may + // request that niri stops processing the keyboard shortcuts defined here + // so they may, for example, forward the key presses as-is to a remote machine. + // It's a good idea to bind an escape hatch to toggle the inhibitor, + // so a buggy application can't hold your session hostage. + // + // The allow-inhibiting=false property can be applied to other binds as well, + // which ensures niri always processes them, even when an inhibitor is active. + Mod+Escape allow-inhibiting=false { + toggle-keyboard-shortcuts-inhibit + } + // The quit action will show a confirmation dialog to avoid accidental exits. + Mod+Shift+E { + quit + } + Ctrl+Alt+Delete { + quit + } +} +// ── Environment Variables ─────────────────────────────────────────── +environment { + QT_STYLE_OVERRIDE "kvantum" + QT_AUTO_SCREEN_SCALE_FACTOR "1" + QT_QPA_PLATFORM "wayland;xcb" + QT_WAYLAND_DISABLE_WINDOWDECORATION "1" + QT_QPA_PLATFORMTHEME "qt5ct" + MOZ_ENABLE_WAYLAND "1" + XCURSOR_SIZE "24" + GTK_THEME "catppuccin-macchiato-teal-standard-default" + SSH_AUTH_SOCK "$XDG_RUNTIME_DIR/rbw/ssh-agent-socket" + EDITOR "nvim" + VISUAL "nvim" + TERMINAL "/usr/bin/kitty" +} +// ── Display Options ───────────────────────────────────────────────── +output "eDP-1" { + off +} +output "HDMI-A-1" { + scale 1 + mode "3440x1440" +} +output "DP-1" { + variable-refresh-rate on-demand=true +} +// ── Input Options ─────────────────────────────────────────────────── input { - keyboard { - xkb { - layout "latam" - options "caps:escape" - } - // Enable numlock on startup, omitting this setting disables it. - numlock + keyboard { + xkb { + layout "latam" + options "caps:escape" } - // Next sections include libinput settings. - // Omitting settings disables them, or leaves them at their default values. - // All commented-out settings here are examples, not defaults. - touchpad { - // off - tap - // dwt - // dwtp - // drag false - // drag-lock - natural-scroll + // Enable numlock on startup, omitting this setting disables it. + numlock + } + // Next sections include libinput settings. + // Omitting settings disables them, or leaves them at their default values. + // All commented-out settings here are examples, not defaults. + touchpad { + // off + tap + // dwt + // dwtp + // drag false + // drag-lock + natural-scroll // accel-speed 0.2 // accel-profile "flat" // scroll-method "two-finger" // disabled-on-external-mouse - } - mouse { + } + mouse { // off // natural-scroll // accel-speed 0.2 // accel-profile "flat" // scroll-method "no-scroll" - } - trackpoint { + } + trackpoint { // off // natural-scroll // accel-speed 0.2 @@ -41,53 +459,11 @@ input { // scroll-button-lock // middle-emulation - } - // warp-mouse-to-focus - focus-follows-mouse + } + // warp-mouse-to-focus + focus-follows-mouse } -output "DP-1" { - variable-refresh-rate on-demand=true -} -layout { - gaps 10 - always-center-single-column - center-focused-column "never" - preset-column-widths { - // The default preset widths are 1/3, 1/2 and 2/3 of the output. - proportion 0.33333 - proportion 0.5 - proportion 0.66667 - } - preset-window-heights { - - } - default-column-width { - - } - focus-ring { - // Uncomment this line to disable the focus ring. - // off - // How many logical pixels the ring extends out from the windows. - width 2 - active-color "#7fc8ff" - inactive-color "#505050" - } -} -spawn-at-startup "/usr/lib/pam_kwallet_init" -spawn-at-startup "udieskiiw" -spawn-at-startup "brave" -// To run a shell command (with variables, pipes, etc.), use spawn-sh-at-startup: -// spawn-sh-at-startup "qs -c ~/source/qs/MyAwesomeShell" -hotkey-overlay { - skip-at-startup -} -// Uncomment this line to ask the clients to omit their client-side decorations if possible. -// If the client will specifically ask for CSD, the request will be honored. -// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners. -// This option will also fix border/focus ring drawing behind some semitransparent windows. -// After enabling or disabling this, you need to restart the apps for this to take effect. -// prefer-no-csd -screenshot-path null +// ── Animations ────────────────────────────────────────────────────── animations { // Uncomment to turn off all animations. // off @@ -96,348 +472,19 @@ animations { // slowdown 3.0 } -window-rule { - // This regular expression is intentionally made as specific as possible, - // since this is the default config, and we want no false positives. - // You can get away with just app-id="wezterm" if you want. - match app-id="^org\\.wezfurlong\\.wezterm$" - default-column-width { - - } -} -window-rule { - match app-id="firefox$" title="^Picture-in-Picture$" - open-floating true -} -window-rule { - match app-id="^org\\.keepassxc\\.KeePassXC$" - match app-id="^org\\.gnome\\.World\\.Secrets$" - // block-out-from "screen-capture" - // Use this instead if you want them visible on third-party screenshot tools. - block-out-from "screencast" -} -window-rule { - match app-id="brave-browser" - match at-startup=true - default-column-width { - proportion 0.75 - } -} -window-rule { - geometry-corner-radius 4 - clip-to-geometry true -} -binds { - Mod+Shift+Slash { - show-hotkey-overlay - } - Mod+Return hotkey-overlay-title="Open a Terminal: kitty" { - spawn "kitty" - } - Mod+D hotkey-overlay-title="Run an Application: Rofi" { - spawn "rofi" "-show" "drun" "-run-command" "uwsm app -- {cmd}" - } - XF86AudioRaiseVolume allow-when-locked=true { - spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+" - } - XF86AudioLowerVolume allow-when-locked=true { - spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1-" - } - XF86AudioMute allow-when-locked=true { - spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" - } - XF86AudioMicMute allow-when-locked=true { - spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" - } - XF86MonBrightnessUp allow-when-locked=true { - spawn "brightnessctl" "--class=backlight" "set" "+10%" - } - XF86MonBrightnessDown allow-when-locked=true { - spawn "brightnessctl" "--class=backlight" "set" "10%-" - } - // Open/close the Overview: a zoomed-out view of workspaces and windows. - // You can also move the mouse into the top-left hot corner, - // or do a four-finger swipe up on a touchpad. - Mod+A repeat=false { - toggle-overview - } - Mod+Shift+Q repeat=false { - close-window - } - Mod+Tab { - focus-column-right-or-first - } - Mod+shift+Tab { - focus-column-left-or-last - } - Mod+Left { - focus-column-left - } - Mod+Down { - focus-window-or-workspace-down - } - Mod+Up { - focus-window-or-workspace-up - } - Mod+Right { - focus-column-right - } - Mod+H { - focus-column-left - } - Mod+J { - focus-window-or-workspace-down - } - Mod+K { - focus-window-or-workspace-up - } - Mod+L { - focus-column-right - } - Mod+Shift+Left { - move-column-left - } - Mod+Shift+Down { - move-window-down-or-to-workspace-down - } - Mod+Shift+Up { - move-window-up-or-to-workspace-up - } - Mod+Shift+Right { - move-column-right - } - Mod+Shift+H { - move-column-left - } - Mod+Shift+J { - move-window-down-or-to-workspace-down - } - Mod+Shift+K { - move-window-up-or-to-workspace-up - } - Mod+Shift+L { - move-column-right - } - Mod+Home { - focus-column-first - } - Mod+End { - focus-column-last - } - Mod+Ctrl+Home { - move-column-to-first - } - Mod+Ctrl+End { - move-column-to-last - } - Mod+WheelScrollDown cooldown-ms=150 { - focus-column-right - } - Mod+WheelScrollUp cooldown-ms=150 { - focus-column-left - } - Mod+Ctrl+WheelScrollDown cooldown-ms=150 { - move-column-to-workspace-down - } - Mod+Ctrl+WheelScrollUp cooldown-ms=150 { - move-column-to-workspace-up - } - Mod+WheelScrollRight { - focus-column-right - } - Mod+WheelScrollLeft { - focus-column-left - } - Mod+Ctrl+WheelScrollRight { - move-column-right - } - Mod+Ctrl+WheelScrollLeft { - move-column-left - } - Mod+Shift+WheelScrollDown cooldown-ms=150 { - focus-workspace-down - } - Mod+Shift+WheelScrollUp cooldown-ms=150 { - focus-workspace-up - } - Mod+Ctrl+Shift+WheelScrollDown { - move-column-right - } - Mod+Ctrl+Shift+WheelScrollUp { - move-column-left - } - // Similarly, you can bind touchpad scroll "ticks". - // Touchpad scrolling is continuous, so for these binds it is split into - // discrete intervals. - // These binds are also affected by touchpad's natural-scroll, so these - // example binds are "inverted", since we have natural-scroll enabled for - // touchpads by default. - // Mod+TouchpadScrollDown { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02+"; } - // Mod+TouchpadScrollUp { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02-"; } - Mod+1 { - focus-workspace 1 - } - Mod+2 { - focus-workspace 2 - } - Mod+3 { - focus-workspace 3 - } - Mod+4 { - focus-workspace 4 - } - Mod+5 { - focus-workspace 5 - } - Mod+6 { - focus-workspace 6 - } - Mod+7 { - focus-workspace 7 - } - Mod+8 { - focus-workspace 8 - } - Mod+9 { - focus-workspace 9 - } - Mod+Shift+1 { - move-window-to-workspace 1 - } - Mod+Shift+2 { - move-window-to-workspace 2 - } - Mod+Shift+3 { - move-window-to-workspace 3 - } - Mod+Shift+4 { - move-window-to-workspace 4 - } - Mod+Shift+5 { - move-window-to-workspace 5 - } - Mod+Shift+6 { - move-window-to-workspace 6 - } - Mod+Shift+7 { - move-window-to-workspace 7 - } - Mod+Shift+8 { - move-window-to-workspace 8 - } - Mod+Shift+9 { - move-window-to-workspace 9 - } - // Switches focus between the current and the previous workspace. - Mod+Bar { - focus-workspace-previous - } - // The following binds move the focused window in and out of a column. - // If the window is alone, they will consume it into the nearby column to the side. - // If the window is already in a column, they will expel it out. - Mod+BraceLeft { - consume-or-expel-window-left - } - Mod+BraceRight { - consume-or-expel-window-right - } - // Consume one window from the right to the bottom of the focused column. - Mod+Comma { - consume-window-into-column - } - // Expel the bottom window from the focused column to the right. - Mod+Period { - expel-window-from-column - } - Mod+R { - switch-preset-column-width - } - // Cycling through the presets in reverse order is also possible. - // Mod+R { switch-preset-column-width-back; } - Mod+Shift+R { - switch-preset-window-height - } - Mod+Ctrl+R { - reset-window-height - } - Mod+F { - maximize-column - } - Mod+Shift+F { - fullscreen-window - } - // Expand the focused column to space not taken up by other fully visible columns. - // Makes the column "fill the rest of the space". - Mod+Ctrl+F { - expand-column-to-available-width - } - Mod+C { - center-column - } - // Center all fully visible columns on screen. - Mod+Ctrl+C { - center-visible-columns - } - // Finer width adjustments. - // This command can also: - // * set width in pixels: "1000" - // * adjust width in pixels: "-5" or "+5" - // * set width as a percentage of screen width: "25%" - // * adjust width as a percentage of screen width: "-10%" or "+10%" - // Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0, - // set-column-width "100" will make the column occupy 200 physical screen pixels. - Mod+Minus { - set-column-width "-10%" - } - Mod+Plus { - set-column-width "+10%" - } - // Finer height adjustments when in column with other windows. - Mod+Shift+Minus { - set-window-height "-10%" - } - Mod+Shift+Equal { - set-window-height "+10%" - } - // Move the focused window between the floating and the tiling layout. - Mod+Shift+Space { - toggle-window-floating - } - Mod+Space { - switch-focus-between-floating-and-tiling - } - // Toggle tabbed column display mode. - // Windows in this column will appear as vertical tabs, - // rather than stacked on top of each other. - Mod+W { - toggle-column-tabbed-display - } - Print { - screenshot - } - Shift+Ctrl+Print { - screenshot-screen - } - Shift+Print { - screenshot-window - } - // Applications such as remote-desktop clients and software KVM switches may - // request that niri stops processing the keyboard shortcuts defined here - // so they may, for example, forward the key presses as-is to a remote machine. - // It's a good idea to bind an escape hatch to toggle the inhibitor, - // so a buggy application can't hold your session hostage. - // - // The allow-inhibiting=false property can be applied to other binds as well, - // which ensures niri always processes them, even when an inhibitor is active. - Mod+Escape allow-inhibiting=false { - toggle-keyboard-shortcuts-inhibit - } - // The quit action will show a confirmation dialog to avoid accidental exits. - Mod+Shift+E { - quit - } - Ctrl+Alt+Delete { - quit - } -} +// ── Misc ──────────────────────────────────────────────────────────── +cursor { + xcursor-theme "catppuccin-macchiato-lavender-cursors" + xcursor-size 24 +} +hotkey-overlay { + skip-at-startup +} +// Uncomment this line to ask the clients to omit their client-side decorations if possible. +// If the client will specifically ask for CSD, the request will be honored. +// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners. +// This option will also fix border/focus ring drawing behind some semitransparent windows. +// After enabling or disabling this, you need to restart the apps for this to take effect. +// prefer-no-csd +screenshot-path null diff --git a/configs/nvim/lua/aleidk/options.lua b/configs/nvim/lua/aleidk/options.lua index 2334a40..da04eeb 100644 --- a/configs/nvim/lua/aleidk/options.lua +++ b/configs/nvim/lua/aleidk/options.lua @@ -36,6 +36,7 @@ opt.pumblend = 10 -- Popup blend opt.pumheight = 10 -- Maximum number of entries in a popup -- opt.relativenumber = true -- Relative line numbers opt.scrolloff = 15 -- Lines of context +opt.sidescrolloff = 25 -- Columns of context opt.sessionoptions = { "buffers", "curdir", "tabpages", "winsize" } opt.shiftround = true -- Round indent opt.shiftwidth = 2 -- Size of an indent diff --git a/kdlfmt.kdl b/kdlfmt.kdl new file mode 100644 index 0000000..69d621c --- /dev/null +++ b/kdlfmt.kdl @@ -0,0 +1,3 @@ +indent_size 2 +use_tabs #false + From e9edfb922a530703deb90bfb0889d024dd1e86a9 Mon Sep 17 00:00:00 2001 From: aleidk Date: Mon, 3 Nov 2025 09:37:13 -0300 Subject: [PATCH 02/28] add quick term support --- configs/ghostty/config | 5 +- configs/kitty/quick-access-terminal.conf | 120 +++++++++++++++++++++++ configs/lazygit/config.yml | 26 ++--- configs/niri/config.kdl | 20 +++- 4 files changed, 153 insertions(+), 18 deletions(-) create mode 100644 configs/kitty/quick-access-terminal.conf diff --git a/configs/ghostty/config b/configs/ghostty/config index 4d1ff59..fa8602d 100644 --- a/configs/ghostty/config +++ b/configs/ghostty/config @@ -1,7 +1,10 @@ -theme = catppuccin-macchiato +theme = Catppuccin Macchiato +font-family = JetBrainsMono Nerd Font # Common +keybind = global:ctrl+shift+x=toggle_quick_terminal + keybind = ctrl+space>o=write_selection_file:open keybind = ctrl+space>shift+o=write_selection_file:paste diff --git a/configs/kitty/quick-access-terminal.conf b/configs/kitty/quick-access-terminal.conf new file mode 100644 index 0000000..3d3949b --- /dev/null +++ b/configs/kitty/quick-access-terminal.conf @@ -0,0 +1,120 @@ +lines 30 + +#: The number of lines shown in the panel. Ignored for background, +#: centered, and vertical panels. If it has the suffix px then it sets +#: the height of the panel in pixels instead of lines. + +columns 200 + +#: The number of columns shown in the panel. Ignored for background, +#: centered, and horizontal panels. If it has the suffix px then it +#: sets the width of the panel in pixels instead of columns. + +edge top + +#: Which edge of the screen to place the panel on. Note that some +#: window managers (such as i3) do not support placing docked windows +#: on the left and right edges. The value background means make the +#: panel the "desktop wallpaper". Note that when using sway if you set +#: a background in your sway config it will cover the background drawn +#: using this kitten. Additionally, there are three more values: +#: center, center-sized and none. The value center anchors the panel +#: to all sides and covers the entire display (on macOS the part of +#: the display not covered by titlebar and dock). The panel can be +#: shrunk and placed using the margin parameters. The value none +#: anchors the panel to the top left corner and should be placed using +#: the margin parameters. Its size is set by lines and columns. The +#: value center-sized is just like none except that the panel is +#: centered instead of in the top left corner and the margins have no +#: effect. + +background_opacity 1 + +#: The background opacity of the window. This works the same as the +#: kitty option of the same name, it is present here as it has a +#: different default value for the quick access terminal. + +# hide_on_focus_loss no + +#: Hide the window when it loses keyboard focus automatically. Using +#: this option will force focus_policy to on-demand. + +# grab_keyboard no + +#: Grab the keyboard. This means global shortcuts defined in the OS +#: will be passed to kitty instead. Useful if you want to create an OS +#: modal window. How well this works depends on the OS/window +#: manager/desktop environment. On Wayland it works only if the +#: compositor implements the inhibit-keyboard-shortcuts protocol +#: . On macOS Apple doesn't allow applications to grab the +#: keyboard without special permissions, so it doesn't work. + +margin_left 50 + +#: Set the left margin for the panel, in pixels. Has no effect for +#: right edge panels. Only works on macOS and Wayland compositors that +#: supports the wlr layer shell protocol. + +margin_right 50 + +#: Set the right margin for the panel, in pixels. Has no effect for +#: left edge panels. Only works on macOS and Wayland compositors that +#: supports the wlr layer shell protocol. + +margin_top 10 + +#: Set the top margin for the panel, in pixels. Has no effect for +#: bottom edge panels. Only works on macOS and Wayland compositors +#: that supports the wlr layer shell protocol. + +# margin_bottom 0 + +#: Set the bottom margin for the panel, in pixels. Has no effect for +#: top edge panels. Only works on macOS and Wayland compositors that +#: supports the wlr layer shell protocol. + +# kitty_conf + +#: Path to config file to use for kitty when drawing the window. Can +#: be specified multiple times. By default, the normal kitty.conf is +#: used. Relative paths are resolved with respect to the kitty config +#: directory. + +kitty_override window_padding_width=0 8 + +#: Override individual kitty configuration options, can be specified +#: multiple times. Syntax: kitty_override name=value. For example: +#: kitty_override font_size=20. + +app_id kitty-quick-access + +#: On Wayland set the namespace of the layer shell surface. On X11 set +#: the WM_CLASS assigned to the quick access window. (Linux only) + +# output_name + +#: The panel can only be displayed on a single monitor (output) at a +#: time. This allows you to specify which output is used, by name. If +#: not specified the compositor will choose an output automatically, +#: typically the last output the user interacted with or the primary +#: monitor. Run kitten panel --output-name list to get a list of +#: available outputs. Use listjson for a json encoded output. Note +#: that on Wayland the output can only be set at panel creation time, +#: it cannot be changed after creation, nor is there anyway to display +#: a single panel on all outputs. Please complain to the Wayland +#: developers about this. + +# start_as_hidden no + +#: Whether to start the quick access terminal hidden. Useful if you +#: are starting it as part of system startup. + +# focus_policy exclusive + +#: On a Wayland compositor that supports the wlr layer shell protocol, +#: specify the focus policy for keyboard interactivity with the panel. +#: Please refer to the wlr layer shell protocol documentation for more +#: details. Note that different Wayland compositors behave very +#: differently with exclusive, your mileage may vary. On macOS, +#: exclusive and on-demand are currently the same. diff --git a/configs/lazygit/config.yml b/configs/lazygit/config.yml index d596e42..2d38e28 100644 --- a/configs/lazygit/config.yml +++ b/configs/lazygit/config.yml @@ -155,18 +155,18 @@ gui: # Config relating to git git: # See https://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Pagers.md - paging: - # Value of the --color arg in the git diff command. Some pagers want this to be set to 'always' and some want it set to 'never' - colorArg: always - # e.g. - # diff-so-fancy - # delta --dark --paging=never - # ydiff -p cat -s --wrap --width={{columnWidth}} - pager: "" - # If true, Lazygit will use whatever pager is specified in `$GIT_PAGER`, `$PAGER`, or your *git config*. If the pager ends with something like ` | less` we will strip that part out, because less doesn't play nice with our rendering approach. If the custom pager uses less under the hood, that will also break rendering (hence the `--paging=never` flag for the `delta` pager). - useConfig: true - # e.g. 'difft --color=always' - externalDiffCommand: "" + pagers: + - # Value of the --color arg in the git diff command. Some pagers want this to be set to 'always' and some want it set to 'never' + colorArg: always + # e.g. + # diff-so-fancy + # delta --dark --paging=never + # ydiff -p cat -s --wrap --width={{columnWidth}} + pager: "" + # If true, Lazygit will use whatever pager is specified in `$GIT_PAGER`, `$PAGER`, or your *git config*. If the pager ends with something like ` | less` we will strip that part out, because less doesn't play nice with our rendering approach. If the custom pager uses less under the hood, that will also break rendering (hence the `--paging=never` flag for the `delta` pager). + useConfig: true + # e.g. 'difft --color=always' + externalDiffCommand: "" # Config relating to committing commit: # If true, pass '--signoff' flag when committing @@ -406,7 +406,7 @@ keybinding: viewResetOptions: D fetch: f toggleTreeView: '`' - openMergeTool: M + openMergeOptions: M openStatusFilter: copyFileInfoToClipboard: "y" branches: diff --git a/configs/niri/config.kdl b/configs/niri/config.kdl index 9581911..c33f17d 100644 --- a/configs/niri/config.kdl +++ b/configs/niri/config.kdl @@ -38,6 +38,16 @@ window-rule { geometry-corner-radius 4 clip-to-geometry true } +layer-rule { + match namespace="kitty-quick-access" + geometry-corner-radius 12 + shadow { + on + spread 10 + softness 20 + offset x=-10 y=10 + } +} // ╭─────────────────────────────────────────────────────────╮ // │ Auto Start Apps │ // ╰─────────────────────────────────────────────────────────╯ @@ -83,6 +93,12 @@ binds { Mod+Return hotkey-overlay-title="Open a Terminal: kitty" { spawn "kitty" } + Mod+Shift+Return hotkey-overlay-title="Open Quick Terminal" { + spawn "kitten" "quick_access_terminal" + } + Mod+Shift+E hotkey-overlay-title="Open Code Editor" { + spawn-sh "kitten quick_access_terminal --instance-group editor-choice fish -c \"zeditor (zoxide query -i)\"" + } Mod+D hotkey-overlay-title="Run an Application: Rofi" { spawn "rofi" "-show" "drun" "-run-command" "uwsm app -- {cmd}" } @@ -381,10 +397,6 @@ binds { Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit } - // The quit action will show a confirmation dialog to avoid accidental exits. - Mod+Shift+E { - quit - } Ctrl+Alt+Delete { quit } From 14d8aed4a224b1991ca21e2908f02651e727f342 Mon Sep 17 00:00:00 2001 From: aleidk Date: Wed, 5 Nov 2025 09:44:48 -0300 Subject: [PATCH 03/28] update hypridle for niri --- configs/hypr/base/hypridle.conf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/configs/hypr/base/hypridle.conf b/configs/hypr/base/hypridle.conf index a4b4f88..d96ac12 100644 --- a/configs/hypr/base/hypridle.conf +++ b/configs/hypr/base/hypridle.conf @@ -1,7 +1,7 @@ general { - lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances. - before_sleep_cmd = loginctl lock-session # lock before suspend. - after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display. + lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances. + before_sleep_cmd = loginctl lock-session # lock before suspend. + after_sleep_cmd = niri msg action power-on-monitors # to avoid having to press a key twice to turn on the display. } listener { @@ -23,9 +23,9 @@ listener { } listener { - timeout = 330 # 5.5min - on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed - on-resume = hyprctl dispatch dpms on && brightnessctl -r # screen on when activity is detected after timeout has fired. + timeout = 330 # 5.5min + on-timeout = niri msg action power-off-monitors # screen off when timeout has passed + on-resume = niri msg action power-on-monitors && brightnessctl -r # screen on when activity is detected after timeout has fired. } listener { From 47deec465646e8e38d7909ad6e99214e2d7c360a Mon Sep 17 00:00:00 2001 From: aleidk Date: Thu, 6 Nov 2025 11:03:57 -0300 Subject: [PATCH 04/28] minor niri updates --- configs/niri/config.kdl | 6 ++ configs/niri/fix_float.py | 124 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 configs/niri/fix_float.py diff --git a/configs/niri/config.kdl b/configs/niri/config.kdl index c33f17d..190037a 100644 --- a/configs/niri/config.kdl +++ b/configs/niri/config.kdl @@ -16,6 +16,11 @@ window-rule { match app-id="^brave-.*-Default$" // Extensions popup open-floating true } +// Full width window +window-rule { + match app-id="beekeeper-studio" + open-maximized true +} window-rule { match app-id="^org\\.keepassxc\\.KeePassXC$" match app-id="^org\\.gnome\\.World\\.Secrets$" @@ -51,6 +56,7 @@ layer-rule { // ╭─────────────────────────────────────────────────────────╮ // │ Auto Start Apps │ // ╰─────────────────────────────────────────────────────────╯ +spawn-at-startup "./fix_float.py" spawn-at-startup "/usr/lib/pam_kwallet_init" spawn-at-startup "udieskie" spawn-at-startup "brave" diff --git a/configs/niri/fix_float.py b/configs/niri/fix_float.py new file mode 100644 index 0000000..7090668 --- /dev/null +++ b/configs/niri/fix_float.py @@ -0,0 +1,124 @@ +#!/usr/bin/python3 +""" +Like open-float, but dynamically. Floats a window when it matches the rules. + +Some windows don't have the right title and app-id when they open, and only set +them afterward. This script is like open-float for those windows. + +Usage: fill in the RULES array below, then run the script. +""" + +import json +import os +import re +from dataclasses import dataclass, field +from socket import AF_UNIX, SHUT_WR, socket + + +@dataclass(kw_only=True) +class Match: + title: str | None = None + app_id: str | None = None + + def matches(self, window): + if self.title is None and self.app_id is None: + return False + + matched = True + + if self.title is not None: + matched &= re.search(self.title, window["title"]) is not None + if self.app_id is not None: + matched &= re.search(self.app_id, window["app_id"]) is not None + + return matched + + +@dataclass +class Rule: + match: list[Match] = field(default_factory=list) + exclude: list[Match] = field(default_factory=list) + + def matches(self, window): + if len(self.match) > 0 and not any(m.matches(window) for m in self.match): + return False + if any(m.matches(window) for m in self.exclude): + return False + + return True + + +# Write your rules here. One Rule() = one window-rule {}. +RULES = [ + # window-rule {} with one match. + Rule([Match(title="Bitwarden", app_id="^brave-.*-Default$")]), + # window-rule {} with one match and one exclude. + # Rule( + # [Match(title="rs")], + # exclude=[Match(app_id="Alacritty")], + # ), + # window-rule {} with two matches. + # Rule( + # [ + # Match(app_id="^foot$"), + # Match(app_id="^mpv$"), + # ] + # ), +] + + +if len(RULES) == 0: + print("fill in the RULES list, then run the script") + exit() + + +niri_socket = socket(AF_UNIX) +niri_socket.connect(os.environ["NIRI_SOCKET"]) +file = niri_socket.makefile("rw") + +_ = file.write('"EventStream"') +file.flush() +niri_socket.shutdown(SHUT_WR) + +windows = {} + + +def send(request): + with socket(AF_UNIX) as niri_socket: + niri_socket.connect(os.environ["NIRI_SOCKET"]) + file = niri_socket.makefile("rw") + _ = file.write(json.dumps(request)) + file.flush() + + +def float(id: int): + send({"Action": {"MoveWindowToFloating": {"id": id}}}) + send({"Action": {"SetWindowWidth": {"id": id, "change": {"SetProportion": 20}}}}) + send({"Action": {"SetWindowHeight": {"id": id, "change": {"SetProportion": 50}}}}) + + +def update_matched(win): + win["matched"] = False + if existing := windows.get(win["id"]): + win["matched"] = existing["matched"] + + matched_before = win["matched"] + win["matched"] = any(r.matches(win) for r in RULES) + if win["matched"] and not matched_before: + print(f"floating title={win['title']}, app_id={win['app_id']}") + float(win["id"]) + + +for line in file: + event = json.loads(line) + + if changed := event.get("WindowsChanged"): + for win in changed["windows"]: + update_matched(win) + windows = {win["id"]: win for win in changed["windows"]} + elif changed := event.get("WindowOpenedOrChanged"): + win = changed["window"] + update_matched(win) + windows[win["id"]] = win + elif changed := event.get("WindowClosed"): + del windows[changed["id"]] From d0ffade8ce8c250155f10323920e7487895826bc Mon Sep 17 00:00:00 2001 From: aleidk Date: Wed, 12 Nov 2025 13:45:07 -0300 Subject: [PATCH 05/28] update lsp config --- configs/nvim/lazy-lock.json | 5 +++-- configs/nvim/lua/aleidk/options.lua | 18 ++---------------- configs/nvim/lua/aleidk/plugins/init.lua | 11 +++++++---- 3 files changed, 12 insertions(+), 22 deletions(-) diff --git a/configs/nvim/lazy-lock.json b/configs/nvim/lazy-lock.json index 35fbf0e..f7066e1 100644 --- a/configs/nvim/lazy-lock.json +++ b/configs/nvim/lazy-lock.json @@ -11,7 +11,8 @@ "hardtime.nvim": { "branch": "main", "commit": "3541ad24faff78274669eceaf130502eb7f1261a" }, "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, "lazydev.nvim": { "branch": "main", "commit": "f59bd14a852ca43db38e3662395354cb2a9b13e0" }, - "mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "b1d9a914b02ba5660f1e272a03314b31d4576fe2" }, + "mason.nvim": { "branch": "main", "commit": "ad7146aa61dcaeb54fa900144d768f040090bff0" }, "mini.nvim": { "branch": "main", "commit": "94cae4660a8b2d95dbbd56e1fbc6fcfa2716d152" }, "neogen": { "branch": "main", "commit": "dc50715c009f89b8111197fd2f282f6042daa7ea" }, "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, @@ -19,7 +20,7 @@ "nvim-dap-view": { "branch": "main", "commit": "390dae6bf67f3342ebb481159932ef0fe54822ba" }, "nvim-dap-virtual-text": { "branch": "master", "commit": "fbdb48c2ed45f4a8293d0d483f7730d24467ccb6" }, "nvim-lint": { "branch": "master", "commit": "6b46370d02cd001509a765591a3ffc481b538794" }, - "nvim-lspconfig": { "branch": "master", "commit": "f47cd681d7cb6048876a2e908b6d8ba1e530d152" }, + "nvim-lspconfig": { "branch": "master", "commit": "c8503e63c6afab3ed34b49865a4a4edbb1ebf4a8" }, "nvim-treesitter": { "branch": "main", "commit": "802195d8f1980db25a7a39a55f9a25df21756c73" }, "nvim-treesitter-context": { "branch": "master", "commit": "66a9b5fa9e806918b5fe3dba00c6cce7e230abd2" }, "nvim-treesitter-textobjects": { "branch": "main", "commit": "1b2d85d3de6114c4bcea89ffb2cd1ce9e3a19931" }, diff --git a/configs/nvim/lua/aleidk/options.lua b/configs/nvim/lua/aleidk/options.lua index da04eeb..3e2a011 100644 --- a/configs/nvim/lua/aleidk/options.lua +++ b/configs/nvim/lua/aleidk/options.lua @@ -142,6 +142,8 @@ vim.filetype.add({ pattern = { -- INFO: Match filenames like - ".env.example", ".env.local" and so on ["%.env%.[%w_.-]+"] = "dotenv", + ["compose.*%.ya?ml"] = "yaml.docker-compose", + ["docker-compose.*%.ya?ml"] = "yaml.docker-compose", [".*%.blade%.php"] = "blade", [".*%.hurl.*"] = "hurl", [".*/hypr/.*%.conf"] = "hyprlang", @@ -160,22 +162,6 @@ vim.lsp.config("rust-analyzer", { } }) -vim.lsp.enable({ - "bashls", - "biome", - "fish_lsp", - "gleam", - "gopls", - "hyprls", - "intelephense", - "jsonls", - "kotlin_lsp", - "lua_ls", - "nushell", - "pyright", - "ruff", - -- "rust_analyzer", -- managed by rustacean.nvim -}) vim.lsp.inlay_hint.enable(true) diff --git a/configs/nvim/lua/aleidk/plugins/init.lua b/configs/nvim/lua/aleidk/plugins/init.lua index 948f2b3..245f048 100644 --- a/configs/nvim/lua/aleidk/plugins/init.lua +++ b/configs/nvim/lua/aleidk/plugins/init.lua @@ -1,10 +1,13 @@ return { - 'neovim/nvim-lspconfig', - 'tpope/vim-sleuth', -- Detect tabstop and shiftwidth automatically { - "mason-org/mason.nvim", - opts = {} + "mason-org/mason-lspconfig.nvim", + opts = {}, + dependencies = { + { "mason-org/mason.nvim", opts = {} }, + "neovim/nvim-lspconfig", + }, }, + 'tpope/vim-sleuth', -- Detect tabstop and shiftwidth automatically { "ckolkey/ts-node-action", dependencies = { "nvim-treesitter" }, From 0c60392b1f992e4bc9fee9375694f72eb2c63f1c Mon Sep 17 00:00:00 2001 From: aleidk Date: Fri, 21 Nov 2025 09:08:15 -0300 Subject: [PATCH 06/28] minor update --- configs/niri/config.kdl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/niri/config.kdl b/configs/niri/config.kdl index 190037a..68c2792 100644 --- a/configs/niri/config.kdl +++ b/configs/niri/config.kdl @@ -32,7 +32,7 @@ window-rule { match app-id="brave-browser" match at-startup=true default-column-width { - proportion 0.75 + proportion 0.5 } } window-rule { From fc134591c2413fdd86cfb7c48733ff99453bce36 Mon Sep 17 00:00:00 2001 From: aleidk Date: Wed, 26 Nov 2025 10:05:55 -0300 Subject: [PATCH 07/28] add function to source .env files in fish --- configs/fish/functions/envsource.fish | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 configs/fish/functions/envsource.fish diff --git a/configs/fish/functions/envsource.fish b/configs/fish/functions/envsource.fish new file mode 100644 index 0000000..af570e4 --- /dev/null +++ b/configs/fish/functions/envsource.fish @@ -0,0 +1,7 @@ +function envsource + for line in (cat $argv | grep -v '^#') + set item (string split -m 1 '=' $line) + set -gx $item[1] $item[2] + echo "Exported key $item[1]" + end +end From a85aa9ee0f4181a3a442f5dc92b767735169b055 Mon Sep 17 00:00:00 2001 From: aleidk Date: Wed, 10 Dec 2025 16:42:29 -0300 Subject: [PATCH 08/28] add arch setup justfile --- .justfile | 49 +++++++++++++++++++ bootstrap/pkgs_arch.txt | 72 ++++++++++++++++++++++++++++ configs/nvim/init.lua | 1 + configs/nvim/lua/aleidk/commands.lua | 11 +++++ 4 files changed, 133 insertions(+) create mode 100644 .justfile create mode 100644 bootstrap/pkgs_arch.txt create mode 100644 configs/nvim/lua/aleidk/commands.lua diff --git a/.justfile b/.justfile new file mode 100644 index 0000000..af46a10 --- /dev/null +++ b/.justfile @@ -0,0 +1,49 @@ +packages_file := quote(justfile_directory() / "bootstrap/pkgs_arch.txt") + +bootstrap: setup_pacman setup_paru install_packages + + +install_packages: update_packages + paru -S --needed --noconfirm - < {{ packages_file }} + +update_packages: + paru -Syu --noconfirm + +clean_orphans: + -sudo pacman -Qdtq | sudo pacman -Rns - + @echo "\n\n{{ BLUE }}The following files are not owned by any package anymore:{{ NORMAL }}" + +# setup sudo: +# sudo loop +# show asterisk on password + +setup_pacman: + # add automatic updates + sudo sed -i \ + -e 's/#\?ParallelDownloads = [0-9]\+/ParallelDownloads = {{ num_cpus() }}/' \ + -e 's/#\?Color\+/Color/' \ + -e 's/#\?ILoveCandy\+/ILoveCandy/' \ + -e 's/#\?VerbosePkgLists\+/VerbosePkgLists/' \ + /etc/pacman.conf + +setup_paru: + #!/usr/bin/env bash + set -euxo pipefail + + if ! command -v paru &> /dev/null ; then + tmp=$(mktemp -d) + sudo pacman -S --needed base-devel + git clone https://aur.archlinux.org/paru.git "$tmp" + cd "$tmp" + makepkg -si + cd - + rm -rf "$tmp" + fi + + sudo sed -i \ + -e 's/#\?BottomUp\+/BottomUp/' \ + -e 's/#\?SudoLoop\+/SudoLoop/' \ + -e 's/#\?CombinedUpgrade\+/CombinedUpgrade/' \ + -e 's/#\?CleanAfter\+/CleanAfter/' \ + -e 's/#\?NewsOnUpgrade\+/NewsOnUpgrade/' \ + /etc/paru.conf diff --git a/bootstrap/pkgs_arch.txt b/bootstrap/pkgs_arch.txt new file mode 100644 index 0000000..705fde1 --- /dev/null +++ b/bootstrap/pkgs_arch.txt @@ -0,0 +1,72 @@ +age +atuin +brave-bin +bun-bin +catppuccin-cursors-macchiato +catppuccin-gtk-theme-macchiato +catppuccin-sddm-theme-macchiato +celluloid +deno +dotter-rs-bin +dunst +eza +fish +flatpak +fzf +git +gitleaks +gnome-disk-utility +just +kitty +kvantum +kvantum-theme-catppuccin-git +lazygit +limine +limine-mkinitcpio-hook +limine-snapper-sync +lostfiles +lxappearance +ly +nautilus +nautilus-admin-gtk4 +nautilus-image-converter +nautilus-open-any-terminal +neovim +noto-fonts +noto-fonts-cjk +noto-fonts-emoji +paccache-hook +plymouth-theme-catppuccin-macchiato-git +podman +pre-commit +pwvucontrol +qt5-wayland +qt6-wayland +rofi +rofi-rbw +rofimoji +rsync +sops +swappy +tailscale +tealdeer +trash-cli +ttf-dejavu +ttf-fira-code +ttf-fira-mono +ttf-fira-sans +ttf-firacode-nerd +ttf-jetbrains-mono-nerd +ttf-ms-win11-auto +ttf-nerd-fonts-symbols-mono +ttf-nunito +ttf-opensans +ttf-roboto +ttf-roboto-mono-nerd +udiskie +vim +wget +yazi +zed +zip +zoxide diff --git a/configs/nvim/init.lua b/configs/nvim/init.lua index ea65040..b926841 100644 --- a/configs/nvim/init.lua +++ b/configs/nvim/init.lua @@ -16,6 +16,7 @@ end vim.opt.rtp:prepend(lazypath) require("aleidk.options") +require("aleidk.commands") require("aleidk.autocmds") require("aleidk.keymaps") diff --git a/configs/nvim/lua/aleidk/commands.lua b/configs/nvim/lua/aleidk/commands.lua new file mode 100644 index 0000000..8fd969b --- /dev/null +++ b/configs/nvim/lua/aleidk/commands.lua @@ -0,0 +1,11 @@ +vim.api.nvim_create_user_command("SopsDecrypt", function(args) + vim.cmd([[! sops decrypt -i %]]) +end, { + desc = "Decrypt current file with sops", +}) + +vim.api.nvim_create_user_command("SopsEncrypt", function(args) + vim.cmd([[! sops encrypt -i %]]) +end, { + desc = "Decrypt current file with sops", +}) From 20f68e1dee1f37d26aaf536ec1a3197f5ea00b57 Mon Sep 17 00:00:00 2001 From: aleidk Date: Fri, 12 Dec 2025 12:18:47 -0300 Subject: [PATCH 09/28] update niri for multi monitor support --- .dotter/aleidk-work-laptop.toml | 27 +------------------------ .dotter/global.toml | 2 +- .stylua.toml | 2 +- configs/niri/{ => base}/config.kdl | 19 +++++++----------- configs/niri/base/include/.gitkeep | 0 configs/niri/work-laptop/local.kdl | 32 ++++++++++++++++++++++++++++++ 6 files changed, 42 insertions(+), 40 deletions(-) rename configs/niri/{ => base}/config.kdl (97%) create mode 100644 configs/niri/base/include/.gitkeep create mode 100644 configs/niri/work-laptop/local.kdl diff --git a/.dotter/aleidk-work-laptop.toml b/.dotter/aleidk-work-laptop.toml index b1fe098..66baeae 100644 --- a/.dotter/aleidk-work-laptop.toml +++ b/.dotter/aleidk-work-laptop.toml @@ -3,31 +3,6 @@ packages = ["default"] [files] "configs/hypr/work-laptop/hyprland.conf" = "~/.config/hypr/include/work-laptop.conf" - - -[files."configs/niri/config.kdl"] -target = "~/.config/niri/config.kdl" -type = "template" -append = """ -window-rule { - match app-id="brave-work" - open-on-workspace "1" - open-focused true - - default-column-width { - proportion 0.5 - } -} -window-rule { - match app-id="brave-personal" - open-on-workspace "2" - open-focused false - - default-column-width { - proportion 0.5 - } -} - -""" +"configs/niri/work-laptop/local.kdl" = "~/.config/niri/include/local.kdl" [variables] diff --git a/.dotter/global.toml b/.dotter/global.toml index 36b6ef0..ff29554 100644 --- a/.dotter/global.toml +++ b/.dotter/global.toml @@ -39,4 +39,4 @@ depends = ["niri"] [default.variables] [niri.files] -"configs/niri" = "~/.config/niri" +"configs/niri/base" = "~/.config/niri" diff --git a/.stylua.toml b/.stylua.toml index f0f7a59..c38f62a 100644 --- a/.stylua.toml +++ b/.stylua.toml @@ -1,7 +1,7 @@ syntax = "All" column_width = 120 line_endings = "Unix" -indent_type = "indent_type" +indent_type = "Spaces" indent_width = 2 quote_style = "AutoPreferDouble" call_parentheses = "Always" diff --git a/configs/niri/config.kdl b/configs/niri/base/config.kdl similarity index 97% rename from configs/niri/config.kdl rename to configs/niri/base/config.kdl index 68c2792..4f340da 100644 --- a/configs/niri/config.kdl +++ b/configs/niri/base/config.kdl @@ -1,10 +1,11 @@ +include "include/local.kdl" // ╭─────────────────────────────────────────────────────────╮ // │ Windows Rules │ // ╰─────────────────────────────────────────────────────────╯ window-rule { // This regular expression is intentionally made as specific as possible, // since this is the default config, and we want no false positives. - // You can get away with just app-id="wezterm" if you want. + // You can get away with just app-id="wezterm" f you want. match app-id="^org\\.wezfurlong\\.wezterm$" default-column-width { @@ -109,10 +110,10 @@ binds { spawn "rofi" "-show" "drun" "-run-command" "uwsm app -- {cmd}" } XF86AudioRaiseVolume allow-when-locked=true { - spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+" + spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.025+" } XF86AudioLowerVolume allow-when-locked=true { - spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1-" + spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.025-" } XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" @@ -151,10 +152,10 @@ binds { focus-window-or-workspace-up } Mod+Right { - focus-column-right + focus-column-or-monitor-right } Mod+H { - focus-column-left + focus-column-or-monitor-left } Mod+J { focus-window-or-workspace-down @@ -163,7 +164,7 @@ binds { focus-window-or-workspace-up } Mod+L { - focus-column-right + focus-column-or-monitor-right } Mod+Shift+Left { move-column-left @@ -423,16 +424,10 @@ environment { TERMINAL "/usr/bin/kitty" } // ── Display Options ───────────────────────────────────────────────── -output "eDP-1" { - off -} output "HDMI-A-1" { scale 1 mode "3440x1440" } -output "DP-1" { - variable-refresh-rate on-demand=true -} // ── Input Options ─────────────────────────────────────────────────── input { keyboard { diff --git a/configs/niri/base/include/.gitkeep b/configs/niri/base/include/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/configs/niri/work-laptop/local.kdl b/configs/niri/work-laptop/local.kdl new file mode 100644 index 0000000..0e93f89 --- /dev/null +++ b/configs/niri/work-laptop/local.kdl @@ -0,0 +1,32 @@ +window-rule { + match app-id="brave-work" + open-on-workspace "1" + open-focused true + default-column-width { + proportion 0.5 + } +} +window-rule { + match app-id="brave-personal" + open-on-workspace "2" + open-focused false + default-column-width { + proportion 0.5 + } +} +output "HDMI-A-1" { + scale 1 + mode "3440x1440" + focus-at-startup + position x=1920 y=0 +} +output "eDP-1" { + mode "1920x1080@60.000" + position x=0 y=720 + layout { + default-column-width { + proportion 1.0 + } + } +} + From 6fa42a7c2da0367e1d07f9f2a62c19b48adf0314 Mon Sep 17 00:00:00 2001 From: aleidk Date: Thu, 18 Dec 2025 09:20:46 -0300 Subject: [PATCH 10/28] mini update nvim config --- configs/fish/config.fish | 2 - configs/nvim/lua/aleidk/options.lua | 79 ++++++++++--------- .../lua/aleidk/plugins/language-support.lua | 45 +++++------ configs/nvim/lua/aleidk/plugins/training.lua | 25 +++--- 4 files changed, 78 insertions(+), 73 deletions(-) diff --git a/configs/fish/config.fish b/configs/fish/config.fish index cbde320..9f5e5f6 100644 --- a/configs/fish/config.fish +++ b/configs/fish/config.fish @@ -2,7 +2,5 @@ if status is-interactive # Commands to run in interactive sessions can go here zoxide init --cmd cd fish | source atuin init fish | source - - mise activate fish | source end diff --git a/configs/nvim/lua/aleidk/options.lua b/configs/nvim/lua/aleidk/options.lua index 3e2a011..cf76fb6 100644 --- a/configs/nvim/lua/aleidk/options.lua +++ b/configs/nvim/lua/aleidk/options.lua @@ -10,54 +10,54 @@ vim.o.diffopt = "vertical,closeoff,filler" local opt = vim.opt vim.schedule(function() - vim.opt.clipboard = 'unnamedplus' + vim.opt.clipboard = "unnamedplus" end) -- opt.shortmess:append({ W = true, I = true, c = true }) -- INFO: this control the format of some messages -- vim.o.exrc = true -- vim.opt.list = true -- Sets how neovim will display certain whitespace characters in the editor. -- vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '␣' } -opt.autowrite = true -- Enable auto write -opt.breakindent = true -- Every wrapped line will continue visually indented +opt.autowrite = true -- Enable auto write +opt.breakindent = true -- Every wrapped line will continue visually indented opt.completeopt = "menu,menuone,noselect" -opt.conceallevel = 2 -- Hide * markup for bold and italic -opt.confirm = true -- Confirm to save changes before exiting modified buffer -opt.cursorline = true -- Enable highlighting of the current line -opt.expandtab = true -- Use spaces instead of tabs +opt.conceallevel = 2 -- Hide * markup for bold and italic +opt.confirm = true -- Confirm to save changes before exiting modified buffer +opt.cursorline = true -- Enable highlighting of the current line +opt.expandtab = true -- Use spaces instead of tabs opt.formatoptions = "jcroqlnt" -- tcqj opt.grepformat = "%f:%l:%c:%m" opt.grepprg = "rg --vimgrep" -opt.ignorecase = true -- Ignore case -opt.inccommand = 'split' -- Preview substitutions live, as you type! -opt.mouse = "a" -- Enable mouse mode -opt.nrformats = 'blank,bin,hex' -opt.number = true -- Print line number -opt.pumblend = 10 -- Popup blend -opt.pumheight = 10 -- Maximum number of entries in a popup +opt.ignorecase = true -- Ignore case +opt.inccommand = "split" -- Preview substitutions live, as you type! +opt.mouse = "a" -- Enable mouse mode +opt.nrformats = "blank,bin,hex" +opt.number = true -- Print line number +opt.pumblend = 10 -- Popup blend +opt.pumheight = 10 -- Maximum number of entries in a popup -- opt.relativenumber = true -- Relative line numbers -opt.scrolloff = 15 -- Lines of context -opt.sidescrolloff = 25 -- Columns of context +opt.scrolloff = 15 -- Lines of context +opt.sidescrolloff = 25 -- Columns of context opt.sessionoptions = { "buffers", "curdir", "tabpages", "winsize" } -opt.shiftround = true -- Round indent -opt.shiftwidth = 2 -- Size of an indent -opt.showmode = false -- Don't show mode since we have a statusline -opt.sidescrolloff = 8 -- Columns of context -opt.signcolumn = "yes" -- Always show the signcolumn, otherwise it would shift the text each time -opt.smartcase = true -- Don't ignore case with capitals -opt.smartindent = true -- Insert indents automatically +opt.shiftround = true -- Round indent +opt.shiftwidth = 2 -- Size of an indent +opt.showmode = false -- Don't show mode since we have a statusline +opt.sidescrolloff = 8 -- Columns of context +opt.signcolumn = "yes" -- Always show the signcolumn, otherwise it would shift the text each time +opt.smartcase = true -- Don't ignore case with capitals +opt.smartindent = true -- Insert indents automatically opt.spelllang = { "en" } -opt.splitbelow = true -- Put new windows below current -opt.splitright = true -- Put new windows right of current -opt.tabstop = 2 -- Number of spaces tabs count for +opt.splitbelow = true -- Put new windows below current +opt.splitright = true -- Put new windows right of current +opt.tabstop = 2 -- Number of spaces tabs count for opt.termguicolors = true -- True color support opt.undofile = true opt.undolevels = 10000 -opt.updatetime = 200 -- Save swap file and trigger CursorHold +opt.updatetime = 200 -- Save swap file and trigger CursorHold opt.wildmode = "longest,list:full" -- Command-line completion mode -opt.winminwidth = 5 -- Minimum window width -opt.wrap = false -- Disable line wrap -vim.o.completeopt = 'noselect,menu,menuone,noinsert,popup' -vim.o.winborder = 'rounded' +opt.winminwidth = 5 -- Minimum window width +opt.wrap = false -- Disable line wrap +vim.o.completeopt = "noselect,menu,menuone,noinsert,popup" +vim.o.winborder = "rounded" vim.o.sessionoptions = "blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions" @@ -130,18 +130,18 @@ vim.filetype.add({ mdx = "mdx", log = "log", conf = "conf", - env = "dotenv", + -- env = "dotenv", }, -- Detect and apply filetypes based on the entire filename filename = { - [".env"] = "dotenv", + -- [".env"] = "dotenv", ["env"] = "dotenv", ["tsconfig.json"] = "jsonc", }, -- Detect and apply filetypes based on certain patterns of the filenames pattern = { -- INFO: Match filenames like - ".env.example", ".env.local" and so on - ["%.env%.[%w_.-]+"] = "dotenv", + -- ["%.env%.[%w_.-]+"] = "dotenv", ["compose.*%.ya?ml"] = "yaml.docker-compose", ["docker-compose.*%.ya?ml"] = "yaml.docker-compose", [".*%.blade%.php"] = "blade", @@ -157,11 +157,16 @@ vim.filetype.add({ vim.lsp.config("rust-analyzer", { tools = { code_actions = { - ui_select_fallback = true - } - } + ui_select_fallback = true, + }, + }, }) +vim.g.markdown_fenced_languages = { + "ts=typescript", +} + +vim.lsp.enable("denols") vim.lsp.inlay_hint.enable(true) diff --git a/configs/nvim/lua/aleidk/plugins/language-support.lua b/configs/nvim/lua/aleidk/plugins/language-support.lua index c47309b..bee76db 100644 --- a/configs/nvim/lua/aleidk/plugins/language-support.lua +++ b/configs/nvim/lua/aleidk/plugins/language-support.lua @@ -1,24 +1,25 @@ return { - { - 'mrcjkb/rustaceanvim', - version = '^6', -- Recommended - lazy = false, -- This plugin is already lazy - }, - { - -- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins - -- used for completion, annotations and signatures of Neovim apis - 'folke/lazydev.nvim', - ft = 'lua', - opts = { - library = { - -- Load luvit types when the `vim.uv` word is found - { path = "${3rd}/luv/library", words = { "vim%.uv" } } - }, - }, - }, - { - "pmizio/typescript-tools.nvim", - dependencies = { "nvim-lua/plenary.nvim", "neovim/nvim-lspconfig" }, - opts = {}, - } + { + "mrcjkb/rustaceanvim", + version = "^6", -- Recommended + lazy = false, -- This plugin is already lazy + }, + { + -- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins + -- used for completion, annotations and signatures of Neovim apis + "folke/lazydev.nvim", + ft = "lua", + opts = { + library = { + -- Load luvit types when the `vim.uv` word is found + { path = "${3rd}/luv/library", words = { "vim%.uv" } }, + }, + }, + }, + { + "pmizio/typescript-tools.nvim", + enabled = false, + dependencies = { "nvim-lua/plenary.nvim", "neovim/nvim-lspconfig" }, + opts = {}, + }, } diff --git a/configs/nvim/lua/aleidk/plugins/training.lua b/configs/nvim/lua/aleidk/plugins/training.lua index 6eb3bfc..47012a6 100644 --- a/configs/nvim/lua/aleidk/plugins/training.lua +++ b/configs/nvim/lua/aleidk/plugins/training.lua @@ -1,14 +1,15 @@ return { - { - "m4xshen/hardtime.nvim", - lazy = false, - dependencies = { "MunifTanjim/nui.nvim" }, - keys = { - { "uH", "Hardtime toggle", desc = "Toggle hardtime" } - }, - opts = { - max_count = 10, - disable_mouse = false, - }, - }, + { + "m4xshen/hardtime.nvim", + lazy = false, + dependencies = { "MunifTanjim/nui.nvim" }, + keys = { + { "uH", "Hardtime toggle", desc = "Toggle hardtime" }, + }, + opts = { + max_count = 10, + disable_mouse = false, + restriction_mode = "hint", + }, + }, } From fca513c15a35a9b45d00747c3f806325977de573 Mon Sep 17 00:00:00 2001 From: aleidk Date: Wed, 7 Jan 2026 11:51:14 -0300 Subject: [PATCH 11/28] add secret generatiopn function --- configs/nvim/lua/aleidk/commands.lua | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/configs/nvim/lua/aleidk/commands.lua b/configs/nvim/lua/aleidk/commands.lua index 8fd969b..d98e0fb 100644 --- a/configs/nvim/lua/aleidk/commands.lua +++ b/configs/nvim/lua/aleidk/commands.lua @@ -1,11 +1,19 @@ vim.api.nvim_create_user_command("SopsDecrypt", function(args) - vim.cmd([[! sops decrypt -i %]]) + vim.cmd([[! sops decrypt -i %]]) end, { desc = "Decrypt current file with sops", }) vim.api.nvim_create_user_command("SopsEncrypt", function(args) - vim.cmd([[! sops encrypt -i %]]) + vim.cmd([[! sops encrypt -i %]]) end, { desc = "Decrypt current file with sops", }) + +vim.api.nvim_create_user_command("Secret", function(args) + local response = vim.system({ "openssl", "rand", "-base64", "32" }, { text = true }):wait() + + vim.api.nvim_paste(vim.trim(response.stdout), false, -1) +end, { + desc = "Generate secret", +}) From 272aadbda3a29910bf9b6c6ab2dadd1496045370 Mon Sep 17 00:00:00 2001 From: aleidk Date: Thu, 8 Jan 2026 09:37:55 -0300 Subject: [PATCH 12/28] small update --- configs/fish/fish_variables | 41 +------------------------------------ 1 file changed, 1 insertion(+), 40 deletions(-) diff --git a/configs/fish/fish_variables b/configs/fish/fish_variables index 2a3c309..956b451 100644 --- a/configs/fish/fish_variables +++ b/configs/fish/fish_variables @@ -1,52 +1,13 @@ # This file contains fish universal variable definitions. # VERSION: 3.0 -SETUVAR __fish_initialized:3800 +SETUVAR __fish_initialized:4300 SETUVAR _fisher_catppuccin_2F_fish_files:\x7e/\x2econfig/fish/themes/Catppuccin\x20Frappe\x2etheme\x1e\x7e/\x2econfig/fish/themes/Catppuccin\x20Latte\x2etheme\x1e\x7e/\x2econfig/fish/themes/Catppuccin\x20Macchiato\x2etheme\x1e\x7e/\x2econfig/fish/themes/Catppuccin\x20Mocha\x2etheme SETUVAR _fisher_jorgebucaran_2F_autopair_2E_fish_files:\x7e/\x2econfig/fish/functions/_autopair_backspace\x2efish\x1e\x7e/\x2econfig/fish/functions/_autopair_insert_left\x2efish\x1e\x7e/\x2econfig/fish/functions/_autopair_insert_right\x2efish\x1e\x7e/\x2econfig/fish/functions/_autopair_insert_same\x2efish\x1e\x7e/\x2econfig/fish/functions/_autopair_tab\x2efish\x1e\x7e/\x2econfig/fish/conf\x2ed/autopair\x2efish SETUVAR _fisher_jorgebucaran_2F_fisher_files:\x7e/\x2econfig/fish/functions/fisher\x2efish\x1e\x7e/\x2econfig/fish/completions/fisher\x2efish SETUVAR _fisher_plugins:jorgebucaran/fisher\x1ecatppuccin/fish\x1epure\x2dfish/pure\x1ejorgebucaran/autopair\x2efish SETUVAR _fisher_pure_2D_fish_2F_pure_files:\x7e/\x2econfig/fish/functions/_pure_check_availability\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_check_for_new_release\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_detect_container_by_cgroup_method\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_detect_container_by_pid_method\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_format_time\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_get_prompt_symbol\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_is_inside_container\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_is_single_line_prompt\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_k8s_context\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_k8s_namespace\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_parse_directory\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_parse_git_branch\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_place_iterm2_prompt_mark\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prefix_root_prompt\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_print_prompt\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_print_prompt_rows\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_aws_profile\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_beginning\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_command_duration\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_container\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_current_folder\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_ending\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_first_line\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_git\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_git_branch\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_git_dirty\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_git_pending_commits\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_git_stash\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_jobs\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_k8s\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_new_line\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_nixdevshell\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_ssh\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_symbol\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_system_time\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_vimode\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_prompt_virtualenv\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_set_color\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_set_default\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_string_width\x2efish\x1e\x7e/\x2econfig/fish/functions/_pure_user_at_host\x2efish\x1e\x7e/\x2econfig/fish/functions/fish_greeting\x2efish\x1e\x7e/\x2econfig/fish/functions/fish_mode_prompt\x2efish\x1e\x7e/\x2econfig/fish/functions/fish_prompt\x2efish\x1e\x7e/\x2econfig/fish/functions/fish_title\x2efish\x1e\x7e/\x2econfig/fish/conf\x2ed/_pure_init\x2efish\x1e\x7e/\x2econfig/fish/conf\x2ed/pure\x2efish SETUVAR _fisher_upgraded_to_4_4:\x1d -SETUVAR fish_color_autosuggestion:6e738d -SETUVAR fish_color_cancel:ed8796 -SETUVAR fish_color_command:8aadf4 -SETUVAR fish_color_comment:8087a2 -SETUVAR fish_color_cwd:eed49f -SETUVAR fish_color_cwd_root:red -SETUVAR fish_color_end:f5a97f -SETUVAR fish_color_error:ed8796 -SETUVAR fish_color_escape:ee99a0 -SETUVAR fish_color_gray:6e738d -SETUVAR fish_color_history_current:\x2d\x2dbold -SETUVAR fish_color_host:8aadf4 -SETUVAR fish_color_host_remote:a6da95 -SETUVAR fish_color_keyword:ed8796 -SETUVAR fish_color_normal:cad3f5 -SETUVAR fish_color_operator:f5bde6 -SETUVAR fish_color_option:a6da95 -SETUVAR fish_color_param:f0c6c6 -SETUVAR fish_color_quote:a6da95 -SETUVAR fish_color_redirection:f5bde6 -SETUVAR fish_color_search_match:\x2d\x2dbackground\x3d363a4f -SETUVAR fish_color_selection:\x2d\x2dbackground\x3d363a4f -SETUVAR fish_color_status:ed8796 -SETUVAR fish_color_user:8bd5ca -SETUVAR fish_color_valid_path:\x2d\x2dunderline SETUVAR fish_greeting:\x1d -SETUVAR fish_key_bindings:fish_default_key_bindings -SETUVAR fish_pager_color_background:\x1d -SETUVAR fish_pager_color_completion:cad3f5 -SETUVAR fish_pager_color_description:6e738d -SETUVAR fish_pager_color_prefix:f5bde6 -SETUVAR fish_pager_color_progress:6e738d -SETUVAR fish_pager_color_secondary_background:\x1d -SETUVAR fish_pager_color_secondary_completion:\x1d -SETUVAR fish_pager_color_secondary_description:\x1d -SETUVAR fish_pager_color_secondary_prefix:\x1d -SETUVAR fish_pager_color_selected_background:\x1d -SETUVAR fish_pager_color_selected_completion:\x1d -SETUVAR fish_pager_color_selected_description:\x1d -SETUVAR fish_pager_color_selected_prefix:\x1d SETUVAR fish_user_paths:/home/aleidk/\x2ecargo/bin\x1e/usr/local/sbin\x1e/usr/local/bin\x1e/usr/bin\x1e/var/lib/flatpak/exports/bin\x1e/home/aleidk/\x2elocal/bin SETUVAR pure_begin_prompt_with_current_directory:true SETUVAR pure_check_for_new_release:false From efbbe37a304cc67bea1e01156e5ff06f2a9d0af0 Mon Sep 17 00:00:00 2001 From: aleidk Date: Thu, 8 Jan 2026 14:49:09 -0300 Subject: [PATCH 13/28] modularize niri config --- configs/niri/base/config.kdl | 503 +-------------------------- configs/niri/base/keys.kdl | 291 ++++++++++++++++ configs/niri/base/noctalia-shell.kdl | 16 + configs/niri/base/options.kdl | 67 ++++ configs/niri/base/rules.kdl | 53 +++ configs/niri/work-laptop/local.kdl | 8 +- 6 files changed, 436 insertions(+), 502 deletions(-) create mode 100644 configs/niri/base/keys.kdl create mode 100644 configs/niri/base/noctalia-shell.kdl create mode 100644 configs/niri/base/options.kdl create mode 100644 configs/niri/base/rules.kdl diff --git a/configs/niri/base/config.kdl b/configs/niri/base/config.kdl index 4f340da..399a3fe 100644 --- a/configs/niri/base/config.kdl +++ b/configs/niri/base/config.kdl @@ -1,503 +1,8 @@ -include "include/local.kdl" -// ╭─────────────────────────────────────────────────────────╮ -// │ Windows Rules │ -// ╰─────────────────────────────────────────────────────────╯ -window-rule { - // This regular expression is intentionally made as specific as possible, - // since this is the default config, and we want no false positives. - // You can get away with just app-id="wezterm" f you want. - match app-id="^org\\.wezfurlong\\.wezterm$" - default-column-width { +include "noctalia-shell.kdl" +include "keys.kdl" +include "options.kdl" - } -} -// Floatin Windows -window-rule { - match app-id="firefox$" title="^Picture-in-Picture$" - match app-id="^brave-.*-Default$" - // Extensions popup open-floating true -} -// Full width window -window-rule { - match app-id="beekeeper-studio" - open-maximized true -} -window-rule { - match app-id="^org\\.keepassxc\\.KeePassXC$" - match app-id="^org\\.gnome\\.World\\.Secrets$" - // block-out-from "screen-capture" - // Use this instead if you want them visible on third-party screenshot tools. - block-out-from "screencast" -} -window-rule { - match app-id="brave-browser" - match at-startup=true - default-column-width { - proportion 0.5 - } -} -window-rule { - match title="^Meet: .*" app-id="brave-browser" - open-floating true -} -window-rule { - geometry-corner-radius 4 - clip-to-geometry true -} -layer-rule { - match namespace="kitty-quick-access" - geometry-corner-radius 12 - shadow { - on - spread 10 - softness 20 - offset x=-10 y=10 - } -} -// ╭─────────────────────────────────────────────────────────╮ -// │ Auto Start Apps │ -// ╰─────────────────────────────────────────────────────────╯ spawn-at-startup "./fix_float.py" -spawn-at-startup "/usr/lib/pam_kwallet_init" spawn-at-startup "udieskie" -spawn-at-startup "brave" -// To run a shell command (with variables, pipes, etc.), use spawn-sh-at-startup: -// spawn-sh-at-startup "qs -c ~/source/qs/MyAwesomeShell" -// ╭─────────────────────────────────────────────────────────╮ -// │ System Config │ -// ╰─────────────────────────────────────────────────────────╯ -// ── Layout Config ─────────────────────────────────────────────────── -layout { - gaps 10 - always-center-single-column - center-focused-column "never" - preset-column-widths { - // The default preset widths are 1/3, 1/2 and 2/3 of the output. - proportion 0.33333 - proportion 0.5 - proportion 0.66667 - } - preset-window-heights { - - } - default-column-width { - proportion 0.5 - } - focus-ring { - // Uncomment this line to disable the focus ring. - // off - // How many logical pixels the ring extends out from the windows. - width 2 - active-color "#7fc8ff" - inactive-color "#505050" - } -} -// ── Keybindings ───────────────────────────────────────────────────── -binds { - Mod+Shift+Slash { - show-hotkey-overlay - } - Mod+Return hotkey-overlay-title="Open a Terminal: kitty" { - spawn "kitty" - } - Mod+Shift+Return hotkey-overlay-title="Open Quick Terminal" { - spawn "kitten" "quick_access_terminal" - } - Mod+Shift+E hotkey-overlay-title="Open Code Editor" { - spawn-sh "kitten quick_access_terminal --instance-group editor-choice fish -c \"zeditor (zoxide query -i)\"" - } - Mod+D hotkey-overlay-title="Run an Application: Rofi" { - spawn "rofi" "-show" "drun" "-run-command" "uwsm app -- {cmd}" - } - XF86AudioRaiseVolume allow-when-locked=true { - spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.025+" - } - XF86AudioLowerVolume allow-when-locked=true { - spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.025-" - } - XF86AudioMute allow-when-locked=true { - spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" - } - XF86AudioMicMute allow-when-locked=true { - spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" - } - XF86MonBrightnessUp allow-when-locked=true { - spawn "brightnessctl" "--class=backlight" "set" "+10%" - } - XF86MonBrightnessDown allow-when-locked=true { - spawn "brightnessctl" "--class=backlight" "set" "10%-" - } - // Open/close the Overview: a zoomed-out view of workspaces and windows. - // You can also move the mouse into the top-left hot corner, - // or do a four-finger swipe up on a touchpad. - Mod+A repeat=false { - toggle-overview - } - Mod+Shift+Q repeat=false { - close-window - } - Mod+Tab { - focus-column-right-or-first - } - Mod+shift+Tab { - focus-column-left-or-last - } - Mod+Left { - focus-column-left - } - Mod+Down { - focus-window-or-workspace-down - } - Mod+Up { - focus-window-or-workspace-up - } - Mod+Right { - focus-column-or-monitor-right - } - Mod+H { - focus-column-or-monitor-left - } - Mod+J { - focus-window-or-workspace-down - } - Mod+K { - focus-window-or-workspace-up - } - Mod+L { - focus-column-or-monitor-right - } - Mod+Shift+Left { - move-column-left - } - Mod+Shift+Down { - move-window-down-or-to-workspace-down - } - Mod+Shift+Up { - move-window-up-or-to-workspace-up - } - Mod+Shift+Right { - move-column-right - } - Mod+Shift+H { - move-column-left - } - Mod+Shift+J { - move-window-down-or-to-workspace-down - } - Mod+Shift+K { - move-window-up-or-to-workspace-up - } - Mod+Shift+L { - move-column-right - } - Mod+Home { - focus-column-first - } - Mod+End { - focus-column-last - } - Mod+Ctrl+Home { - move-column-to-first - } - Mod+Ctrl+End { - move-column-to-last - } - Mod+WheelScrollDown cooldown-ms=150 { - focus-column-right - } - Mod+WheelScrollUp cooldown-ms=150 { - focus-column-left - } - Mod+Ctrl+WheelScrollDown cooldown-ms=150 { - move-column-to-workspace-down - } - Mod+Ctrl+WheelScrollUp cooldown-ms=150 { - move-column-to-workspace-up - } - Mod+WheelScrollRight { - focus-column-right - } - Mod+WheelScrollLeft { - focus-column-left - } - Mod+Ctrl+WheelScrollRight { - move-column-right - } - Mod+Ctrl+WheelScrollLeft { - move-column-left - } - Mod+Shift+WheelScrollDown cooldown-ms=150 { - focus-workspace-down - } - Mod+Shift+WheelScrollUp cooldown-ms=150 { - focus-workspace-up - } - Mod+Ctrl+Shift+WheelScrollDown { - move-column-right - } - Mod+Ctrl+Shift+WheelScrollUp { - move-column-left - } - // Similarly, you can bind touchpad scroll "ticks". - // Touchpad scrolling is continuous, so for these binds it is split into - // discrete intervals. - // These binds are also affected by touchpad's natural-scroll, so these - // example binds are "inverted", since we have natural-scroll enabled for - // touchpads by default. - // Mod+TouchpadScrollDown { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02+"; } - // Mod+TouchpadScrollUp { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02-"; } - Mod+1 { - focus-workspace 1 - } - Mod+2 { - focus-workspace 2 - } - Mod+3 { - focus-workspace 3 - } - Mod+4 { - focus-workspace 4 - } - Mod+5 { - focus-workspace 5 - } - Mod+6 { - focus-workspace 6 - } - Mod+7 { - focus-workspace 7 - } - Mod+8 { - focus-workspace 8 - } - Mod+9 { - focus-workspace 9 - } - Mod+Shift+1 { - move-window-to-workspace 1 - } - Mod+Shift+2 { - move-window-to-workspace 2 - } - Mod+Shift+3 { - move-window-to-workspace 3 - } - Mod+Shift+4 { - move-window-to-workspace 4 - } - Mod+Shift+5 { - move-window-to-workspace 5 - } - Mod+Shift+6 { - move-window-to-workspace 6 - } - Mod+Shift+7 { - move-window-to-workspace 7 - } - Mod+Shift+8 { - move-window-to-workspace 8 - } - Mod+Shift+9 { - move-window-to-workspace 9 - } - // Switches focus between the current and the previous workspace. - Mod+Bar { - focus-workspace-previous - } - // The following binds move the focused window in and out of a column. - // If the window is alone, they will consume it into the nearby column to the side. - // If the window is already in a column, they will expel it out. - Mod+BraceLeft { - consume-or-expel-window-left - } - Mod+BraceRight { - consume-or-expel-window-right - } - // Consume one window from the right to the bottom of the focused column. - Mod+Comma { - consume-window-into-column - } - // Expel the bottom window from the focused column to the right. - Mod+Period { - expel-window-from-column - } - Mod+R { - switch-preset-column-width - } - // Cycling through the presets in reverse order is also possible. - // Mod+R { switch-preset-column-width-back; } - Mod+Shift+R { - switch-preset-window-height - } - Mod+Ctrl+R { - reset-window-height - } - Mod+F { - maximize-column - } - Mod+Shift+F { - fullscreen-window - } - // Expand the focused column to space not taken up by other fully visible columns. - // Makes the column "fill the rest of the space". - Mod+Ctrl+F { - expand-column-to-available-width - } - Mod+C { - center-column - } - // Center all fully visible columns on screen. - Mod+Ctrl+C { - center-visible-columns - } - // Finer width adjustments. - // This command can also: - // * set width in pixels: "1000" - // * adjust width in pixels: "-5" or "+5" - // * set width as a percentage of screen width: "25%" - // * adjust width as a percentage of screen width: "-10%" or "+10%" - // Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0, - // set-column-width "100" will make the column occupy 200 physical screen pixels. - Mod+Minus { - set-column-width "-10%" - } - Mod+Plus { - set-column-width "+10%" - } - // Finer height adjustments when in column with other windows. - Mod+Shift+Minus { - set-window-height "-10%" - } - Mod+Shift+Equal { - set-window-height "+10%" - } - // Move the focused window between the floating and the tiling layout. - Mod+Shift+Space { - toggle-window-floating - } - Mod+Space { - switch-focus-between-floating-and-tiling - } - // Toggle tabbed column display mode. - // Windows in this column will appear as vertical tabs, - // rather than stacked on top of each other. - Mod+W { - toggle-column-tabbed-display - } - Print { - screenshot - } - Shift+Print { - screenshot-window - } - Shift+Ctrl+Print hotkey-overlay-title="Edit image in Clipboard" { - spawn-sh "wl-paste | swappy -f -" - } - // Applications such as remote-desktop clients and software KVM switches may - // request that niri stops processing the keyboard shortcuts defined here - // so they may, for example, forward the key presses as-is to a remote machine. - // It's a good idea to bind an escape hatch to toggle the inhibitor, - // so a buggy application can't hold your session hostage. - // - // The allow-inhibiting=false property can be applied to other binds as well, - // which ensures niri always processes them, even when an inhibitor is active. - Mod+Escape allow-inhibiting=false { - toggle-keyboard-shortcuts-inhibit - } - Ctrl+Alt+Delete { - quit - } -} -// ── Environment Variables ─────────────────────────────────────────── -environment { - QT_STYLE_OVERRIDE "kvantum" - QT_AUTO_SCREEN_SCALE_FACTOR "1" - QT_QPA_PLATFORM "wayland;xcb" - QT_WAYLAND_DISABLE_WINDOWDECORATION "1" - QT_QPA_PLATFORMTHEME "qt5ct" - MOZ_ENABLE_WAYLAND "1" - XCURSOR_SIZE "24" - GTK_THEME "catppuccin-macchiato-teal-standard-default" - SSH_AUTH_SOCK "$XDG_RUNTIME_DIR/rbw/ssh-agent-socket" - EDITOR "nvim" - VISUAL "nvim" - TERMINAL "/usr/bin/kitty" -} -// ── Display Options ───────────────────────────────────────────────── -output "HDMI-A-1" { - scale 1 - mode "3440x1440" -} -// ── Input Options ─────────────────────────────────────────────────── -input { - keyboard { - xkb { - layout "latam" - options "caps:escape" - } - // Enable numlock on startup, omitting this setting disables it. - numlock - } - // Next sections include libinput settings. - // Omitting settings disables them, or leaves them at their default values. - // All commented-out settings here are examples, not defaults. - touchpad { - // off - tap - // dwt - // dwtp - // drag false - // drag-lock - natural-scroll - // accel-speed 0.2 - // accel-profile "flat" - // scroll-method "two-finger" - // disabled-on-external-mouse - } - mouse { - // off - // natural-scroll - // accel-speed 0.2 - // accel-profile "flat" - // scroll-method "no-scroll" - - } - trackpoint { - // off - // natural-scroll - // accel-speed 0.2 - // accel-profile "flat" - // scroll-method "on-button-down" - // scroll-button 273 - // scroll-button-lock - // middle-emulation - - } - // warp-mouse-to-focus - focus-follows-mouse -} -// ── Animations ────────────────────────────────────────────────────── -animations { - // Uncomment to turn off all animations. - // off - - // Slow down all animations by this factor. Values below 1 speed them up instead. - // slowdown 3.0 - -} -// ── Misc ──────────────────────────────────────────────────────────── -cursor { - xcursor-theme "catppuccin-macchiato-lavender-cursors" - xcursor-size 24 -} -hotkey-overlay { - skip-at-startup -} -// Uncomment this line to ask the clients to omit their client-side decorations if possible. -// If the client will specifically ask for CSD, the request will be honored. -// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners. -// This option will also fix border/focus ring drawing behind some semitransparent windows. -// After enabling or disabling this, you need to restart the apps for this to take effect. -// prefer-no-csd -screenshot-path null +include "include/local.kdl" diff --git a/configs/niri/base/keys.kdl b/configs/niri/base/keys.kdl new file mode 100644 index 0000000..3e71629 --- /dev/null +++ b/configs/niri/base/keys.kdl @@ -0,0 +1,291 @@ +binds { + Mod+Shift+Slash { + show-hotkey-overlay + } + // + // ╭─────────────────────────────────────────────────────────╮ + // │ Launchers │ + // ╰─────────────────────────────────────────────────────────╯ + // + Mod+Return hotkey-overlay-title="Open Terminal" { + spawn "kitty" + } + Mod+Shift+Return hotkey-overlay-title="Open Quick Terminal" { + spawn "kitten" "quick_access_terminal" + } + Mod+D hotkey-overlay-title="Launcher" { + spawn "qs" "ipc" "-c" "noctalia-shell" "call" "launcher" "toggle" + } + // + // ╭─────────────────────────────────────────────────────────╮ + // │ Layout │ + // ╰─────────────────────────────────────────────────────────╯ + // + Mod+R { + switch-preset-column-width + } + Mod+Shift+R { + expand-column-to-available-width + } + Mod+F { + maximize-column + } + Mod+Shift+F { + fullscreen-window + } + Mod+C { + center-column + } + // + // ╭─────────────────────────────────────────────────────────╮ + // │ Window Management │ + // ╰─────────────────────────────────────────────────────────╯ + // + Mod+W repeat=false { + toggle-overview + } + Mod+Shift+Q repeat=false { + close-window + } + // + // ── Change focus ──────────────────────────────────────────────────── + // + Mod+Tab { + focus-column-right-or-first + } + Mod+shift+Tab { + focus-column-left-or-last + } + Mod+Left { + focus-column-left + } + Mod+Down { + focus-window-or-workspace-down + } + Mod+Up { + focus-window-or-workspace-up + } + Mod+Right { + focus-column-or-monitor-right + } + Mod+Ctrl+Left { + consume-or-expel-window-left + } + Mod+Ctrl+Right { + consume-or-expel-window-right + } + Mod+Alt+Left { + consume-window-into-column + } + Mod+Alt+Right { + expel-window-from-column + } + Mod+H { + focus-column-or-monitor-left + } + Mod+J { + focus-window-or-workspace-down + } + Mod+K { + focus-window-or-workspace-up + } + Mod+L { + focus-column-or-monitor-right + } + Mod+Ctrl+H { + consume-or-expel-window-left + } + Mod+Ctrl+L { + consume-or-expel-window-right + } + Mod+Alt+H { + consume-window-into-column + } + Mod+Alt+L { + expel-window-from-column + } + Mod+WheelScrollDown cooldown-ms=150 { + focus-column-right + } + Mod+WheelScrollUp cooldown-ms=150 { + focus-column-left + } + Mod+Space { + switch-focus-between-floating-and-tiling + } + // + // ── Move windows ──────────────────────────────────────────────────── + // + Mod+Shift+Left { + move-column-left + } + Mod+Shift+Down { + move-window-down-or-to-workspace-down + } + Mod+Shift+Up { + move-window-up-or-to-workspace-up + } + Mod+Shift+Right { + move-column-right + } + Mod+Shift+H { + move-column-left + } + Mod+Shift+J { + move-window-down-or-to-workspace-down + } + Mod+Shift+K { + move-window-up-or-to-workspace-up + } + Mod+Shift+L { + move-column-right + } + Mod+Ctrl+WheelScrollDown cooldown-ms=150 { + move-column-to-workspace-down + } + Mod+Ctrl+WheelScrollUp cooldown-ms=150 { + move-column-to-workspace-up + } + Mod+WheelScrollRight { + focus-column-right + } + Mod+WheelScrollLeft { + focus-column-left + } + Mod+Ctrl+WheelScrollRight { + move-column-right + } + Mod+Ctrl+WheelScrollLeft { + move-column-left + } + Mod+Ctrl+Shift+WheelScrollDown { + move-column-right + } + Mod+Ctrl+Shift+WheelScrollUp { + move-column-left + } + Mod+Shift+Space { + toggle-window-floating + } + // + // ╭─────────────────────────────────────────────────────────╮ + // │ Workspaces │ + // ╰─────────────────────────────────────────────────────────╯ + // + Mod+Bar { + // Switches focus between the current and the previous workspace. + focus-workspace-previous + } + Mod+1 { + focus-workspace 1 + } + Mod+2 { + focus-workspace 2 + } + Mod+3 { + focus-workspace 3 + } + Mod+4 { + focus-workspace 4 + } + Mod+5 { + focus-workspace 5 + } + Mod+6 { + focus-workspace 6 + } + Mod+7 { + focus-workspace 7 + } + Mod+8 { + focus-workspace 8 + } + Mod+9 { + focus-workspace 9 + } + Mod+Shift+1 { + move-window-to-workspace 1 + } + Mod+Shift+2 { + move-window-to-workspace 2 + } + Mod+Shift+3 { + move-window-to-workspace 3 + } + Mod+Shift+4 { + move-window-to-workspace 4 + } + Mod+Shift+5 { + move-window-to-workspace 5 + } + Mod+Shift+6 { + move-window-to-workspace 6 + } + Mod+Shift+7 { + move-window-to-workspace 7 + } + Mod+Shift+8 { + move-window-to-workspace 8 + } + Mod+Shift+9 { + move-window-to-workspace 9 + } + Mod+Shift+WheelScrollDown cooldown-ms=150 { + focus-workspace-down + } + Mod+Shift+WheelScrollUp cooldown-ms=150 { + focus-workspace-up + } + // + // ╭─────────────────────────────────────────────────────────╮ + // │ Volume │ + // ╰─────────────────────────────────────────────────────────╯ + // + XF86AudioRaiseVolume allow-when-locked=true { + spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.025+" + } + XF86AudioLowerVolume allow-when-locked=true { + spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.025-" + } + XF86AudioMute allow-when-locked=true { + spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + } + XF86AudioMicMute allow-when-locked=true { + spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" + } + // + // ╭─────────────────────────────────────────────────────────╮ + // │ Brightness │ + // ╰─────────────────────────────────────────────────────────╯ + // + XF86MonBrightnessUp allow-when-locked=true { + spawn "brightnessctl" "--class=backlight" "set" "+10%" + } + XF86MonBrightnessDown allow-when-locked=true { + spawn "brightnessctl" "--class=backlight" "set" "10%-" + } + Print { + screenshot + } + Shift+Print { + screenshot-window + } + Shift+Ctrl+Print hotkey-overlay-title="Edit image in Clipboard" { + spawn-sh "wl-paste | swappy -f -" + } + // Applications such as remote-desktop clients and software KVM switches may + // request that niri stops processing the keyboard shortcuts defined here + // so they may, for example, forward the key presses as-is to a remote machine. + // It's a good idea to bind an escape hatch to toggle the inhibitor, + // so a buggy application can't hold your session hostage. + // + // The allow-inhibiting=false property can be applied to other binds as well, + // which ensures niri always processes them, even when an inhibitor is active. + Mod+Escape allow-inhibiting=false { + toggle-keyboard-shortcuts-inhibit + } + Ctrl+Alt+Delete { + quit + } +} + diff --git a/configs/niri/base/noctalia-shell.kdl b/configs/niri/base/noctalia-shell.kdl new file mode 100644 index 0000000..8e4f66c --- /dev/null +++ b/configs/niri/base/noctalia-shell.kdl @@ -0,0 +1,16 @@ +window-rule { + // Rounded corners for a modern look. + geometry-corner-radius 20 + // Clips window contents to the rounded corner boundaries. + clip-to-geometry true +} +debug { + // Allows notification actions and window activation from Noctalia. + honor-xdg-activation-with-invalid-serial +} +// Set the overview wallpaper on the backdrop. +layer-rule { + match namespace="^noctalia-overview*" + place-within-backdrop true +} + diff --git a/configs/niri/base/options.kdl b/configs/niri/base/options.kdl new file mode 100644 index 0000000..13d0ac9 --- /dev/null +++ b/configs/niri/base/options.kdl @@ -0,0 +1,67 @@ +// ── Layout Config ─────────────────────────────────────────────────── +layout { + gaps 10 + always-center-single-column + center-focused-column "never" + preset-column-widths { + // The default preset widths are 1/3, 1/2 and 2/3 of the output. + proportion 0.33333 + proportion 0.5 + proportion 0.66667 + } + preset-window-heights { + + } + default-column-width { + proportion 0.5 + } + focus-ring { + // Uncomment this line to disable the focus ring. + // off + // How many logical pixels the ring extends out from the windows. + width 2 + active-color "#7fc8ff" + inactive-color "#505050" + } +} +// ── Environment Variables ─────────────────────────────────────────── +environment { + ELECTRON_OZONE_PLATFORM_HINT "auto" + QT_STYLE_OVERRIDE "kvantum" + QT_AUTO_SCREEN_SCALE_FACTOR "1" + QT_QPA_PLATFORM "wayland;xcb" + QT_WAYLAND_DISABLE_WINDOWDECORATION "1" + QT_QPA_PLATFORMTHEME "qt5ct" + MOZ_ENABLE_WAYLAND "1" + XCURSOR_SIZE "24" + GTK_THEME "catppuccin-macchiato-teal-standard-default" + SSH_AUTH_SOCK "$XDG_RUNTIME_DIR/rbw/ssh-agent-socket" + EDITOR "nvim" + VISUAL "nvim" + TERMINAL "/usr/bin/kitty" +} +// ── Input Options ─────────────────────────────────────────────────── +input { + keyboard { + xkb { + layout "latam" + options "caps:escape" + } + numlock + } + touchpad { + tap + natural-scroll + } + focus-follows-mouse +} +// ── Misc ──────────────────────────────────────────────────────────── +cursor { + xcursor-theme "catppuccin-macchiato-lavender-cursors" + xcursor-size 24 +} +hotkey-overlay { + skip-at-startup +} +screenshot-path null + diff --git a/configs/niri/base/rules.kdl b/configs/niri/base/rules.kdl new file mode 100644 index 0000000..6c6bf46 --- /dev/null +++ b/configs/niri/base/rules.kdl @@ -0,0 +1,53 @@ +window-rule { + // This regular expression is intentionally made as specific as possible, + // since this is the default config, and we want no false positives. + // You can get away with just app-id="wezterm" f you want. + match app-id="^org\\.wezfurlong\\.wezterm$" + default-column-width { + + } +} +// Floatin Windows +window-rule { + match app-id="firefox$" title="^Picture-in-Picture$" + match app-id="^brave-.*-Default$" + // Extensions popup open-floating true +} +// Full width window +window-rule { + match app-id="beekeeper-studio" + open-maximized true +} +window-rule { + match app-id="^org\\.keepassxc\\.KeePassXC$" + match app-id="^org\\.gnome\\.World\\.Secrets$" + // block-out-from "screen-capture" + // Use this instead if you want them visible on third-party screenshot tools. + block-out-from "screencast" +} +window-rule { + match app-id="brave-browser" + match at-startup=true + default-column-width { + proportion 0.5 + } +} +window-rule { + match title="^Meet: .*" app-id="brave-browser" + open-floating true +} +window-rule { + geometry-corner-radius 4 + clip-to-geometry true +} +layer-rule { + match namespace="kitty-quick-access" + geometry-corner-radius 12 + shadow { + on + spread 10 + softness 20 + offset x=-10 y=10 + } +} + diff --git a/configs/niri/work-laptop/local.kdl b/configs/niri/work-laptop/local.kdl index 0e93f89..fdb8b9d 100644 --- a/configs/niri/work-laptop/local.kdl +++ b/configs/niri/work-laptop/local.kdl @@ -1,5 +1,7 @@ +spawn-at-startup "brave" +spawn-at-startup "firefox" window-rule { - match app-id="brave-work" + match app-id="firefox" open-on-workspace "1" open-focused true default-column-width { @@ -7,7 +9,7 @@ window-rule { } } window-rule { - match app-id="brave-personal" + match app-id="brave-browser" open-on-workspace "2" open-focused false default-column-width { @@ -22,7 +24,7 @@ output "HDMI-A-1" { } output "eDP-1" { mode "1920x1080@60.000" - position x=0 y=720 + position x=0 y=0 layout { default-column-width { proportion 1.0 From 26c904b9f6462775871e3be07a4b25a7a11da910 Mon Sep 17 00:00:00 2001 From: aleidk Date: Thu, 8 Jan 2026 14:52:39 -0300 Subject: [PATCH 14/28] add noctalia config --- .dotter/global.toml | 1 + configs/noctalia/colors.json | 18 + .../Catppuccin Macchiato Teal.json | 38 ++ .../alacritty/Catppuccin Lavender dark | 33 ++ .../alacritty/Catppuccin Lavender light | 33 ++ .../terminal/foot/Catppuccin Lavender dark | 22 + .../terminal/foot/Catppuccin Lavender light | 22 + .../terminal/ghostty/Catppuccin Lavender dark | 22 + .../ghostty/Catppuccin Lavender light | 22 + .../kitty/Catppuccin Lavender dark.conf | 22 + .../kitty/Catppuccin Lavender light.conf | 22 + .../wezterm/Catppuccin Lavender dark.toml | 84 +++ .../wezterm/Catppuccin Lavender light.toml | 84 +++ configs/noctalia/pam/password.conf | 3 + configs/noctalia/plugins.json | 16 + configs/noctalia/plugins/.gitkeep | 0 configs/noctalia/settings.json | 517 ++++++++++++++++++ configs/yazi/package.toml | 8 +- configs/yazi/yazi.toml | 9 +- 19 files changed, 967 insertions(+), 9 deletions(-) create mode 100644 configs/noctalia/colors.json create mode 100644 configs/noctalia/colorschemes/Catppuccin Macchiato Teal/Catppuccin Macchiato Teal.json create mode 100644 configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/alacritty/Catppuccin Lavender dark create mode 100644 configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/alacritty/Catppuccin Lavender light create mode 100644 configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/foot/Catppuccin Lavender dark create mode 100644 configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/foot/Catppuccin Lavender light create mode 100644 configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/ghostty/Catppuccin Lavender dark create mode 100644 configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/ghostty/Catppuccin Lavender light create mode 100644 configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/kitty/Catppuccin Lavender dark.conf create mode 100644 configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/kitty/Catppuccin Lavender light.conf create mode 100644 configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/wezterm/Catppuccin Lavender dark.toml create mode 100644 configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/wezterm/Catppuccin Lavender light.toml create mode 100644 configs/noctalia/pam/password.conf create mode 100644 configs/noctalia/plugins.json create mode 100644 configs/noctalia/plugins/.gitkeep create mode 100644 configs/noctalia/settings.json diff --git a/.dotter/global.toml b/.dotter/global.toml index ff29554..91826df 100644 --- a/.dotter/global.toml +++ b/.dotter/global.toml @@ -40,3 +40,4 @@ depends = ["niri"] [niri.files] "configs/niri/base" = "~/.config/niri" +"configs/noctalia" = "~/.config/noctalia" diff --git a/configs/noctalia/colors.json b/configs/noctalia/colors.json new file mode 100644 index 0000000..af5a746 --- /dev/null +++ b/configs/noctalia/colors.json @@ -0,0 +1,18 @@ +{ + "mError": "#f38ba8", + "mHover": "#c6a0f6", + "mOnError": "#24273a", + "mOnHover": "#24273a", + "mOnPrimary": "#24273a", + "mOnSecondary": "#24273a", + "mOnSurface": "#cad3f5", + "mOnSurfaceVariant": "#cad3f5", + "mOnTertiary": "#24273a", + "mOutline": "#494d64", + "mPrimary": "#8bd5ca", + "mSecondary": "#c6a0f6", + "mShadow": "#1e2030", + "mSurface": "#1e1e2e", + "mSurfaceVariant": "#363a4f", + "mTertiary": "#b7bdf8" +} diff --git a/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/Catppuccin Macchiato Teal.json b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/Catppuccin Macchiato Teal.json new file mode 100644 index 0000000..172b98c --- /dev/null +++ b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/Catppuccin Macchiato Teal.json @@ -0,0 +1,38 @@ +{ + "dark": { + "mPrimary": "#8bd5ca", + "mOnPrimary": "#24273a", + "mSecondary": "#c6a0f6", + "mOnSecondary": "#24273a", + "mTertiary": "#b7bdf8", + "mOnTertiary": "#24273a", + "mError": "#f38ba8", + "mOnError": "#24273a", + "mSurface": "#1e1e2e", + "mOnSurface": "#cad3f5", + "mSurfaceVariant": "#363a4f", + "mOnSurfaceVariant": "#cad3f5", + "mOutline": "#494d64", + "mShadow": "#1e2030", + "mHover": "#c6a0f6", + "mOnHover": "#24273a" + }, + "light": { + "mPrimary": "#179299", + "mOnPrimary": "#eff1f5", + "mSecondary": "#8839ef", + "mOnSecondary": "#eff1f5", + "mTertiary": "#7287fd", + "mOnTertiary": "#eff1f5", + "mError": "#d20f39", + "mOnError": "#dce0e8", + "mSurface": "#eff1f5", + "mOnSurface": "#4c4f69", + "mSurfaceVariant": "#ccd0da", + "mOnSurfaceVariant": "#6c6f85", + "mOutline": "#a5adcb", + "mShadow": "#dce0e8", + "mHover": "#8839ef", + "mOnHover": "#eff1f5" + } +} diff --git a/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/alacritty/Catppuccin Lavender dark b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/alacritty/Catppuccin Lavender dark new file mode 100644 index 0000000..82645d6 --- /dev/null +++ b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/alacritty/Catppuccin Lavender dark @@ -0,0 +1,33 @@ +# Colors (Catppuccin Mocha) + +[colors.bright] +black = '#585b70' +blue = '#74a8fc' +cyan = '#6bd7ca' +green = '#89d88b' +magenta = '#f2aede' +red = '#f37799' +white = '#bac2de' +yellow = '#ebd391' + +[colors.cursor] +cursor = '#f5e0dc' +text = '#1e1e2e' + +[colors.normal] +black = '#45475a' +blue = '#89b4fa' +cyan = '#94e2d5' +green = '#a6e3a1' +magenta = '#f5c2e7' +red = '#f38ba8' +white = '#a6adc8' +yellow = '#f9e2af' + +[colors.primary] +background = '#1e1e2e' +foreground = '#cdd6f4' + +[colors.selection] +background = '#585b70' +text = '#cdd6f4' \ No newline at end of file diff --git a/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/alacritty/Catppuccin Lavender light b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/alacritty/Catppuccin Lavender light new file mode 100644 index 0000000..41159c7 --- /dev/null +++ b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/alacritty/Catppuccin Lavender light @@ -0,0 +1,33 @@ +# Colors (Catppuccin Latte) + +[colors.bright] +black = '#6c6f85' +blue = '#456eff' +cyan = '#2d9fa8' +green = '#49af3d' +magenta = '#fe85d8' +red = '#de293e' +white = '#bcc0cc' +yellow = '#eea02d' + +[colors.cursor] +cursor = '#dc8a78' +text = '#eff1f5' + +[colors.normal] +black = '#5c5f77' +blue = '#1e66f5' +cyan = '#179299' +green = '#40a02b' +magenta = '#ea76cb' +red = '#d20f39' +white = '#acb0be' +yellow = '#df8e1d' + +[colors.primary] +background = '#eff1f5' +foreground = '#4c4f69' + +[colors.selection] +background = '#acb0be' +text = '#4c4f69' \ No newline at end of file diff --git a/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/foot/Catppuccin Lavender dark b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/foot/Catppuccin Lavender dark new file mode 100644 index 0000000..6e30e18 --- /dev/null +++ b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/foot/Catppuccin Lavender dark @@ -0,0 +1,22 @@ +[colors] +foreground=cdd6f4 +background=1e1e2e +regular0=45475a +regular1=f38ba8 +regular2=a6e3a1 +regular3=f9e2af +regular4=89b4fa +regular5=f5c2e7 +regular6=94e2d5 +regular7=a6adc8 +bright0=585b70 +bright1=f37799 +bright2=89d88b +bright3=ebd391 +bright4=74a8fc +bright5=f2aede +bright6=6bd7ca +bright7=bac2de +selection-foreground=cdd6f4 +selection-background=585b70 +cursor=1e1e2e f5e0dc diff --git a/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/foot/Catppuccin Lavender light b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/foot/Catppuccin Lavender light new file mode 100644 index 0000000..6877ab8 --- /dev/null +++ b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/foot/Catppuccin Lavender light @@ -0,0 +1,22 @@ +[colors] +foreground=c6d0f5 +background=303446 +regular0=51576d +regular1=e78284 +regular2=a6d189 +regular3=e5c890 +regular4=8caaee +regular5=f4b8e4 +regular6=81c8be +regular7=a5adce +bright0=626880 +bright1=e67172 +bright2=8ec772 +bright3=d9ba73 +bright4=7b9ef0 +bright5=f2a4db +bright6=5abfb5 +bright7=b5bfe2 +selection-foreground=c6d0f5 +selection-background=626880 +cursor=303446 f2d5cf diff --git a/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/ghostty/Catppuccin Lavender dark b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/ghostty/Catppuccin Lavender dark new file mode 100644 index 0000000..2b2ec39 --- /dev/null +++ b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/ghostty/Catppuccin Lavender dark @@ -0,0 +1,22 @@ +palette = 0=#45475a +palette = 1=#f38ba8 +palette = 2=#a6e3a1 +palette = 3=#f9e2af +palette = 4=#89b4fa +palette = 5=#f5c2e7 +palette = 6=#94e2d5 +palette = 7=#a6adc8 +palette = 8=#585b70 +palette = 9=#f37799 +palette = 10=#89d88b +palette = 11=#ebd391 +palette = 12=#74a8fc +palette = 13=#f2aede +palette = 14=#6bd7ca +palette = 15=#bac2de +background = #1e1e2e +foreground = #cdd6f4 +cursor-color = #f5e0dc +cursor-text = #1e1e2e +selection-background = #585b70 +selection-foreground = #cdd6f4 diff --git a/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/ghostty/Catppuccin Lavender light b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/ghostty/Catppuccin Lavender light new file mode 100644 index 0000000..94cb2ba --- /dev/null +++ b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/ghostty/Catppuccin Lavender light @@ -0,0 +1,22 @@ +palette = 0=#5c5f77 +palette = 1=#d20f39 +palette = 2=#40a02b +palette = 3=#df8e1d +palette = 4=#1e66f5 +palette = 5=#ea76cb +palette = 6=#179299 +palette = 7=#acb0be +palette = 8=#6c6f85 +palette = 9=#de293e +palette = 10=#49af3d +palette = 11=#eea02d +palette = 12=#456eff +palette = 13=#fe85d8 +palette = 14=#2d9fa8 +palette = 15=#bcc0cc +background = #eff1f5 +foreground = #4c4f69 +cursor-color = #dc8a78 +cursor-text = #eff1f5 +selection-background = #acb0be +selection-foreground = #4c4f69 diff --git a/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/kitty/Catppuccin Lavender dark.conf b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/kitty/Catppuccin Lavender dark.conf new file mode 100644 index 0000000..d566605 --- /dev/null +++ b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/kitty/Catppuccin Lavender dark.conf @@ -0,0 +1,22 @@ +color0 #45475a +color1 #f38ba8 +color2 #a6e3a1 +color3 #f9e2af +color4 #89b4fa +color5 #f5c2e7 +color6 #94e2d5 +color7 #a6adc8 +color8 #585b70 +color9 #f37799 +color10 #89d88b +color11 #ebd391 +color12 #74a8fc +color13 #f2aede +color14 #6bd7ca +color15 #bac2de +background #1e1e2e +selection_foreground #1e1e2e +cursor #f5e0dc +cursor_text_color #1e1e2e +foreground #cdd6f4 +selection_background #cdd6f4 diff --git a/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/kitty/Catppuccin Lavender light.conf b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/kitty/Catppuccin Lavender light.conf new file mode 100644 index 0000000..a30e3ae --- /dev/null +++ b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/kitty/Catppuccin Lavender light.conf @@ -0,0 +1,22 @@ +color0 #5c5f77 +color1 #d20f39 +color2 #40a02b +color3 #df8e1d +color4 #1e66f5 +color5 #ea76cb +color6 #179299 +color7 #acb0be +color8 #6c6f85 +color9 #de293e +color10 #49af3d +color11 #eea02d +color12 #456eff +color13 #fe85d8 +color14 #2d9fa8 +color15 #bcc0cc +background #eff1f5 +selection_foreground #eff1f5 +cursor #dc8a78 +cursor_text_color #eff1f5 +foreground #4c4f69 +selection_background #4c4f69 diff --git a/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/wezterm/Catppuccin Lavender dark.toml b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/wezterm/Catppuccin Lavender dark.toml new file mode 100644 index 0000000..5d4eb50 --- /dev/null +++ b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/wezterm/Catppuccin Lavender dark.toml @@ -0,0 +1,84 @@ +[colors] +ansi = [ + "#45475a", + "#f38ba8", + "#a6e3a1", + "#f9e2af", + "#89b4fa", + "#f5c2e7", + "#94e2d5", + "#bac2de", +] +background = "#1e1e2e" +brights = [ + "#585b70", + "#f38ba8", + "#a6e3a1", + "#f9e2af", + "#89b4fa", + "#f5c2e7", + "#94e2d5", + "#a6adc8", +] +compose_cursor = "#f2cdcd" +cursor_bg = "#f5e0dc" +cursor_border = "#f5e0dc" +cursor_fg = "#11111b" +foreground = "#cdd6f4" +scrollbar_thumb = "#585b70" +selection_bg = "#585b70" +selection_fg = "#cdd6f4" +split = "#6c7086" +visual_bell = "#313244" + +[colors.indexed] +16 = "#fab387" +17 = "#f5e0dc" + +[colors.tab_bar] +background = "#11111b" +inactive_tab_edge = "#313244" + +[colors.tab_bar.active_tab] +bg_color = "#cba6f7" +fg_color = "#11111b" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[colors.tab_bar.inactive_tab] +bg_color = "#181825" +fg_color = "#cdd6f4" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[colors.tab_bar.inactive_tab_hover] +bg_color = "#1e1e2e" +fg_color = "#cdd6f4" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[colors.tab_bar.new_tab] +bg_color = "#313244" +fg_color = "#cdd6f4" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[colors.tab_bar.new_tab_hover] +bg_color = "#45475a" +fg_color = "#cdd6f4" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[metadata] +author = "Catppuccin Org" +name = "Noctalia" diff --git a/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/wezterm/Catppuccin Lavender light.toml b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/wezterm/Catppuccin Lavender light.toml new file mode 100644 index 0000000..9feddaa --- /dev/null +++ b/configs/noctalia/colorschemes/Catppuccin Macchiato Teal/terminal/wezterm/Catppuccin Lavender light.toml @@ -0,0 +1,84 @@ +[colors] +ansi = [ + "#bcc0cc", + "#d20f39", + "#40a02b", + "#df8e1d", + "#1e66f5", + "#ea76cb", + "#179299", + "#5c5f77", +] +background = "#eff1f5" +brights = [ + "#acb0be", + "#d20f39", + "#40a02b", + "#df8e1d", + "#1e66f5", + "#ea76cb", + "#179299", + "#6c6f85", +] +compose_cursor = "#dd7878" +cursor_bg = "#dc8a78" +cursor_border = "#dc8a78" +cursor_fg = "#dce0e8" +foreground = "#4c4f69" +scrollbar_thumb = "#acb0be" +selection_bg = "#acb0be" +selection_fg = "#4c4f69" +split = "#9ca0b0" +visual_bell = "#ccd0da" + +[colors.indexed] +16 = "#fe640b" +17 = "#dc8a78" + +[colors.tab_bar] +background = "#dce0e8" +inactive_tab_edge = "#ccd0da" + +[colors.tab_bar.active_tab] +bg_color = "#8839ef" +fg_color = "#dce0e8" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[colors.tab_bar.inactive_tab] +bg_color = "#e6e9ef" +fg_color = "#4c4f69" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[colors.tab_bar.inactive_tab_hover] +bg_color = "#eff1f5" +fg_color = "#4c4f69" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[colors.tab_bar.new_tab] +bg_color = "#ccd0da" +fg_color = "#4c4f69" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[colors.tab_bar.new_tab_hover] +bg_color = "#bcc0cc" +fg_color = "#4c4f69" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[metadata] +author = "Catppuccin Org" +name = "Noctalia" diff --git a/configs/noctalia/pam/password.conf b/configs/noctalia/pam/password.conf new file mode 100644 index 0000000..68fc325 --- /dev/null +++ b/configs/noctalia/pam/password.conf @@ -0,0 +1,3 @@ +#auth sufficient pam_fprintd.so max-tries=1 +# only uncomment this if you have a fingerprint reader +auth required pam_unix.so diff --git a/configs/noctalia/plugins.json b/configs/noctalia/plugins.json new file mode 100644 index 0000000..4b43c99 --- /dev/null +++ b/configs/noctalia/plugins.json @@ -0,0 +1,16 @@ +{ + "sources": [ + { + "enabled": true, + "name": "Official Noctalia Plugins", + "url": "https://github.com/noctalia-dev/noctalia-plugins" + } + ], + "states": { + "kaomoji-provider": { + "enabled": true, + "sourceUrl": "https://github.com/noctalia-dev/noctalia-plugins" + } + }, + "version": 1 +} diff --git a/configs/noctalia/plugins/.gitkeep b/configs/noctalia/plugins/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/configs/noctalia/settings.json b/configs/noctalia/settings.json new file mode 100644 index 0000000..fa6174d --- /dev/null +++ b/configs/noctalia/settings.json @@ -0,0 +1,517 @@ +{ + "appLauncher": { + "customLaunchPrefix": "", + "customLaunchPrefixEnabled": false, + "enableClipPreview": true, + "enableClipboardHistory": true, + "iconMode": "tabler", + "ignoreMouseInput": false, + "pinnedExecs": [ + ], + "position": "center", + "screenshotAnnotationTool": "", + "showCategories": false, + "showIconBackground": true, + "sortByMostUsed": true, + "terminalCommand": "xterm -e", + "useApp2Unit": false, + "viewMode": "list" + }, + "audio": { + "cavaFrameRate": 30, + "externalMixer": "pwvucontrol || pavucontrol", + "mprisBlacklist": [ + ], + "preferredPlayer": "", + "visualizerType": "mirrored", + "volumeOverdrive": false, + "volumeStep": 5 + }, + "bar": { + "backgroundOpacity": 0, + "capsuleOpacity": 1, + "density": "default", + "exclusive": true, + "floating": true, + "marginHorizontal": 0.18, + "marginVertical": 0.25, + "monitors": [ + ], + "outerCorners": true, + "position": "top", + "showCapsule": true, + "showOutline": false, + "useSeparateOpacity": true, + "widgets": { + "center": [ + { + "customFont": "", + "formatHorizontal": "h:mm AP", + "formatVertical": "HH mm - dd MM", + "id": "Clock", + "tooltipFormat": "yyyy-MM-dd", + "useCustomFont": false, + "usePrimaryColor": false + } + ], + "left": [ + { + "characterCount": 2, + "colorizeIcons": false, + "enableScrollWheel": true, + "followFocusedScreen": false, + "groupedBorderOpacity": 1, + "hideUnoccupied": false, + "iconScale": 0.8, + "id": "Workspace", + "labelMode": "none", + "showApplications": false, + "showLabelsOnlyWhenOccupied": true, + "unfocusedIconsOpacity": 1 + }, + { + "hideMode": "hidden", + "hideWhenIdle": false, + "id": "MediaMini", + "maxWidth": 200, + "scrollingMode": "hover", + "showAlbumArt": false, + "showArtistFirst": false, + "showProgressRing": true, + "showVisualizer": true, + "useFixedWidth": false, + "visualizerType": "wave" + }, + { + "colorizeIcons": false, + "hideMode": "transparent", + "id": "ActiveWindow", + "maxWidth": 145, + "scrollingMode": "hover", + "showIcon": true, + "useFixedWidth": false + } + ], + "right": [ + { + "blacklist": [ + ], + "colorizeIcons": false, + "drawerEnabled": true, + "hidePassive": false, + "id": "Tray", + "pinned": [ + ] + }, + { + "id": "WallpaperSelector" + }, + { + "hideWhenZero": false, + "id": "NotificationHistory", + "showUnreadBadge": true + }, + { + "displayMode": "onhover", + "id": "Volume" + }, + { + "deviceNativePath": "", + "displayMode": "alwaysShow", + "hideIfNotDetected": true, + "id": "Battery", + "showNoctaliaPerformance": true, + "showPowerProfiles": true, + "warningThreshold": 20 + }, + { + "colorizeDistroLogo": false, + "colorizeSystemIcon": "primary", + "customIconPath": "", + "enableColorization": true, + "icon": "settings", + "id": "ControlCenter", + "useDistroLogo": false + } + ] + } + }, + "brightness": { + "brightnessStep": 5, + "enableDdcSupport": false, + "enforceMinimum": true + }, + "calendar": { + "cards": [ + { + "enabled": true, + "id": "calendar-header-card" + }, + { + "enabled": true, + "id": "calendar-month-card" + }, + { + "enabled": true, + "id": "weather-card" + }, + { + "enabled": false, + "id": "timer-card" + } + ] + }, + "colorSchemes": { + "darkMode": true, + "generateTemplatesForPredefined": false, + "manualSunrise": "06:30", + "manualSunset": "18:30", + "matugenSchemeType": "scheme-fruit-salad", + "predefinedScheme": "Catppuccin Macchiato Teal", + "schedulingMode": "off", + "useWallpaperColors": false + }, + "controlCenter": { + "cards": [ + { + "enabled": true, + "id": "profile-card" + }, + { + "enabled": true, + "id": "shortcuts-card" + }, + { + "enabled": true, + "id": "audio-card" + }, + { + "enabled": true, + "id": "brightness-card" + }, + { + "enabled": true, + "id": "weather-card" + }, + { + "enabled": true, + "id": "media-sysmon-card" + } + ], + "diskPath": "/", + "position": "close_to_bar_button", + "shortcuts": { + "left": [ + { + "id": "WiFi" + }, + { + "id": "Bluetooth" + }, + { + "id": "ScreenRecorder" + }, + { + "id": "WallpaperSelector" + } + ], + "right": [ + { + "id": "Notifications" + }, + { + "id": "PowerProfile" + }, + { + "id": "KeepAwake" + }, + { + "id": "NightLight" + } + ] + } + }, + "desktopWidgets": { + "enabled": false, + "gridSnap": false, + "monitorWidgets": [ + ] + }, + "dock": { + "animationSpeed": 1, + "backgroundOpacity": 1, + "colorizeIcons": false, + "deadOpacity": 0.6, + "displayMode": "auto_hide", + "enabled": false, + "floatingRatio": 1, + "inactiveIndicators": false, + "monitors": [ + ], + "onlySameOutput": true, + "pinnedApps": [ + "org.gnome.Nautilus", + "yazi" + ], + "pinnedStatic": false, + "size": 1 + }, + "general": { + "allowPanelsOnScreenWithoutBar": true, + "animationDisabled": false, + "animationSpeed": 1, + "avatarImage": "/home/aleidk/.face", + "boxRadiusRatio": 1, + "compactLockScreen": false, + "dimmerOpacity": 0.25, + "enableShadows": true, + "forceBlackScreenCorners": false, + "iRadiusRatio": 1, + "language": "", + "lockOnSuspend": true, + "radiusRatio": 1, + "scaleRatio": 1, + "screenRadiusRatio": 1, + "shadowDirection": "bottom_right", + "shadowOffsetX": 2, + "shadowOffsetY": 3, + "showHibernateOnLockScreen": false, + "showScreenCorners": false, + "showSessionButtonsOnLockScreen": true + }, + "hooks": { + "darkModeChange": "", + "enabled": false, + "performanceModeDisabled": "", + "performanceModeEnabled": "", + "screenLock": "", + "screenUnlock": "", + "wallpaperChange": "" + }, + "location": { + "analogClockInCalendar": false, + "firstDayOfWeek": -1, + "name": "Santiago", + "showCalendarEvents": true, + "showCalendarWeather": true, + "showWeekNumberInCalendar": false, + "use12hourFormat": true, + "useFahrenheit": false, + "weatherEnabled": true, + "weatherShowEffects": true + }, + "network": { + "bluetoothDetailsViewMode": "grid", + "bluetoothHideUnnamedDevices": false, + "bluetoothRssiPollIntervalMs": 10000, + "bluetoothRssiPollingEnabled": false, + "wifiDetailsViewMode": "grid", + "wifiEnabled": true + }, + "nightLight": { + "autoSchedule": true, + "dayTemp": "6500", + "enabled": true, + "forced": false, + "manualSunrise": "06:30", + "manualSunset": "18:30", + "nightTemp": "4000" + }, + "notifications": { + "backgroundOpacity": 1, + "criticalUrgencyDuration": 15, + "enableKeyboardLayoutToast": true, + "enabled": true, + "location": "top", + "lowUrgencyDuration": 3, + "monitors": [ + ], + "normalUrgencyDuration": 8, + "overlayLayer": true, + "respectExpireTimeout": true, + "saveToHistory": { + "critical": true, + "low": true, + "normal": true + }, + "sounds": { + "criticalSoundFile": "", + "enabled": true, + "excludedApps": "discord,firefox,chrome,chromium,edge", + "lowSoundFile": "", + "normalSoundFile": "", + "separateSounds": true, + "volume": 0.5 + } + }, + "osd": { + "autoHideMs": 2000, + "backgroundOpacity": 1, + "enabled": true, + "enabledTypes": [ + 0, + 1, + 2, + 4 + ], + "location": "bottom", + "monitors": [ + ], + "overlayLayer": true + }, + "screenRecorder": { + "audioCodec": "opus", + "audioSource": "default_output", + "colorRange": "limited", + "copyToClipboard": false, + "directory": "/home/aleidk/Videos", + "frameRate": 60, + "quality": "very_high", + "showCursor": true, + "videoCodec": "h264", + "videoSource": "portal" + }, + "sessionMenu": { + "countdownDuration": 5000, + "enableCountdown": true, + "largeButtonsLayout": "single-row", + "largeButtonsStyle": false, + "position": "center", + "powerOptions": [ + { + "action": "lock", + "command": "", + "countdownEnabled": true, + "enabled": true + }, + { + "action": "suspend", + "command": "", + "countdownEnabled": true, + "enabled": true + }, + { + "action": "hibernate", + "command": "", + "countdownEnabled": true, + "enabled": true + }, + { + "action": "reboot", + "command": "", + "countdownEnabled": true, + "enabled": true + }, + { + "action": "logout", + "command": "", + "countdownEnabled": true, + "enabled": true + }, + { + "action": "shutdown", + "command": "", + "countdownEnabled": true, + "enabled": true + } + ], + "showHeader": true, + "showNumberLabels": true + }, + "settingsVersion": 37, + "systemMonitor": { + "cpuCriticalThreshold": 90, + "cpuPollingInterval": 3000, + "cpuWarningThreshold": 80, + "criticalColor": "", + "diskCriticalThreshold": 90, + "diskPollingInterval": 3000, + "diskWarningThreshold": 80, + "enableDgpuMonitoring": false, + "externalMonitor": "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor", + "gpuCriticalThreshold": 90, + "gpuPollingInterval": 3000, + "gpuWarningThreshold": 80, + "loadAvgPollingInterval": 3000, + "memCriticalThreshold": 90, + "memPollingInterval": 3000, + "memWarningThreshold": 80, + "networkPollingInterval": 3000, + "tempCriticalThreshold": 90, + "tempPollingInterval": 3000, + "tempWarningThreshold": 80, + "useCustomColors": false, + "warningColor": "" + }, + "templates": { + "alacritty": false, + "cava": false, + "code": false, + "discord": false, + "emacs": false, + "enableUserTemplates": false, + "foot": false, + "fuzzel": false, + "ghostty": false, + "gtk": false, + "helix": false, + "hyprland": false, + "kcolorscheme": false, + "kitty": false, + "mango": false, + "niri": false, + "pywalfox": false, + "qt": false, + "spicetify": false, + "telegram": false, + "vicinae": false, + "walker": false, + "wezterm": false, + "yazi": false, + "zed": false + }, + "ui": { + "boxBorderEnabled": false, + "fontDefault": "Sans Serif", + "fontDefaultScale": 1, + "fontFixed": "monospace", + "fontFixedScale": 1, + "panelBackgroundOpacity": 0.93, + "panelsAttachedToBar": false, + "settingsPanelMode": "centered", + "tooltipsEnabled": true + }, + "wallpaper": { + "directory": "/home/aleidk/Pictures/Wallpapers", + "enableMultiMonitorDirectories": false, + "enabled": true, + "fillColor": "#000000", + "fillMode": "crop", + "hideWallpaperFilenames": true, + "monitorDirectories": [ + ], + "overviewEnabled": true, + "panelPosition": "center", + "randomEnabled": true, + "randomIntervalSec": 900, + "recursiveSearch": true, + "setWallpaperOnAllMonitors": true, + "solidColor": "#1a1a2e", + "transitionDuration": 1500, + "transitionEdgeSmoothness": 0.05, + "transitionType": "random", + "useSolidColor": false, + "useWallhaven": false, + "wallhavenApiKey": "", + "wallhavenCategories": "111", + "wallhavenOrder": "desc", + "wallhavenPurity": "100", + "wallhavenQuery": "", + "wallhavenRatios": "", + "wallhavenResolutionHeight": "", + "wallhavenResolutionMode": "atleast", + "wallhavenResolutionWidth": "", + "wallhavenSorting": "relevance", + "wallpaperChangeMode": "random" + } +} diff --git a/configs/yazi/package.toml b/configs/yazi/package.toml index a548b83..14b4153 100644 --- a/configs/yazi/package.toml +++ b/configs/yazi/package.toml @@ -1,6 +1,6 @@ [[plugin.deps]] use = "yazi-rs/plugins:full-border" -rev = "1ab21d4" +rev = "68f7d48" hash = "3996fc74044bc44144b323686f887e1" [[plugin.deps]] @@ -10,10 +10,10 @@ hash = "68603fdd1dcaf415227e2c77a9317947" [[plugin.deps]] use = "yazi-rs/plugins:smart-enter" -rev = "1ab21d4" +rev = "68f7d48" hash = "56fdabc96fc1f4d53c96eb884b02a5be" [[flavor.deps]] use = "yazi-rs/flavors:catppuccin-macchiato" -rev = "d3fd3a5" -hash = "e6c5beeb1da3199355734273ee452a7f" +rev = "4a1802a" +hash = "b069dba45e199684b16fa12d385642ed" diff --git a/configs/yazi/yazi.toml b/configs/yazi/yazi.toml index 96b9bac..3a64e39 100644 --- a/configs/yazi/yazi.toml +++ b/configs/yazi/yazi.toml @@ -22,7 +22,6 @@ image_filter = "triangle" image_quality = 75 max_height = 900 max_width = 600 -sixel_fraction = 15 tab_size = 2 wrap = "no" @@ -37,7 +36,7 @@ upload_img = [{ run = 'immich upload --recursive "$@" || read -n 1 -p "press any [open] rules = [ # Folder - { name = "*/", use = ["edit", "open", "reveal"] }, + { url = "*/", use = ["edit", "open", "reveal"] }, # Text { mime = "text/*", use = ["edit", "reveal"] }, @@ -76,7 +75,7 @@ suppress_preload = false fetchers = [ # Mimetype - { id = "mime", name = "*", run = "mime", if = "!mime", prio = "high" }, + { id = "mime", url = "*", run = "mime", if = "!mime", prio = "high" }, ] preloaders = [ # example @@ -91,7 +90,7 @@ preloaders = [ { mime = "application/vnd.ms-opentype", run = "font" }, ] previewers = [ - { name = "*/", run = "folder", sync = true }, + { url = "*/", run = "folder", sync = true }, # Code { mime = "text/*", run = "code" }, { mime = "*/{xml,javascript,x-wine-extension-ini}", run = "code" }, @@ -111,7 +110,7 @@ previewers = [ { mime = "font/*", run = "font" }, { mime = "application/vnd.ms-opentype", run = "font" }, # Fallback - { name = "*", run = "file" }, + { url = "*", run = "file" }, ] [input] From ced3795edf3d2fbc9c283bcc76bc652438740fd0 Mon Sep 17 00:00:00 2001 From: aleidk Date: Thu, 8 Jan 2026 15:41:05 -0300 Subject: [PATCH 15/28] update arch package list --- bootstrap/pkgs_arch.txt | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/bootstrap/pkgs_arch.txt b/bootstrap/pkgs_arch.txt index 705fde1..33498bd 100644 --- a/bootstrap/pkgs_arch.txt +++ b/bootstrap/pkgs_arch.txt @@ -1,11 +1,20 @@ age +arch-update atuin +base +base-devel +bat +bluetui +bluez +bluez-utils brave-bin bun-bin catppuccin-cursors-macchiato catppuccin-gtk-theme-macchiato -catppuccin-sddm-theme-macchiato +cava celluloid +cliphist +composer deno dotter-rs-bin dunst @@ -16,14 +25,13 @@ fzf git gitleaks gnome-disk-utility +gnome-keyring +hypridle just kitty kvantum kvantum-theme-catppuccin-git lazygit -limine -limine-mkinitcpio-hook -limine-snapper-sync lostfiles lxappearance ly @@ -32,20 +40,22 @@ nautilus-admin-gtk4 nautilus-image-converter nautilus-open-any-terminal neovim +niri +noctalia-shell noto-fonts noto-fonts-cjk noto-fonts-emoji paccache-hook +paru plymouth-theme-catppuccin-macchiato-git podman +power-profiles-daemon pre-commit pwvucontrol qt5-wayland qt6-wayland -rofi -rofi-rbw -rofimoji rsync +seahorse sops swappy tailscale @@ -64,8 +74,14 @@ ttf-opensans ttf-roboto ttf-roboto-mono-nerd udiskie +unrar vim wget +wlsunset +xdg-desktop-portal-gtk +xdg-desktop-portal-hyprland +xdg-terminal-exec +xwayland-satellite yazi zed zip From f357ee61fae2cb53639fa0c7d430a783008d61f8 Mon Sep 17 00:00:00 2001 From: aleidk Date: Fri, 9 Jan 2026 14:14:16 -0300 Subject: [PATCH 16/28] update yazi config --- configs/hypr/base/hypridle.conf | 8 +++---- configs/yazi/init.lua | 10 ++++++++ configs/yazi/keymap.toml | 12 +++++++++- configs/yazi/package.toml | 30 +++++++++++++++++++++++ configs/yazi/vfs.toml | 1 + configs/yazi/yazi.toml | 42 ++------------------------------- 6 files changed, 58 insertions(+), 45 deletions(-) create mode 100644 configs/yazi/vfs.toml diff --git a/configs/hypr/base/hypridle.conf b/configs/hypr/base/hypridle.conf index d96ac12..0ca4130 100644 --- a/configs/hypr/base/hypridle.conf +++ b/configs/hypr/base/hypridle.conf @@ -1,7 +1,7 @@ general { - lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances. - before_sleep_cmd = loginctl lock-session # lock before suspend. - after_sleep_cmd = niri msg action power-on-monitors # to avoid having to press a key twice to turn on the display. + lock_cmd = qs -c noctalia-shell ipc call lockScreen lock # avoid starting multiple hyprlock instances. + before_sleep_cmd = loginctl lock-session # lock before suspend. + after_sleep_cmd = niri msg action power-on-monitors # to avoid having to press a key twice to turn on the display. } listener { @@ -23,7 +23,7 @@ listener { } listener { - timeout = 330 # 5.5min + timeout = 600 # 5.5min on-timeout = niri msg action power-off-monitors # screen off when timeout has passed on-resume = niri msg action power-on-monitors && brightnessctl -r # screen on when activity is detected after timeout has fired. } diff --git a/configs/yazi/init.lua b/configs/yazi/init.lua index 6c283c4..8572cb2 100644 --- a/configs/yazi/init.lua +++ b/configs/yazi/init.lua @@ -1 +1,11 @@ require("full-border"):setup() +require("recycle-bin"):setup() + +require("restore"):setup({ + -- Show confirm prompt before restore. + -- NOTE: even if set this to false, overwrite prompt still pop up + show_confirm = false, -- Optional + + -- Suppress success notification when all files or folder are restored. + suppress_success_notification = false, -- Optional +}) diff --git a/configs/yazi/keymap.toml b/configs/yazi/keymap.toml index c20f2ca..80ee09b 100644 --- a/configs/yazi/keymap.toml +++ b/configs/yazi/keymap.toml @@ -16,17 +16,25 @@ prepend_keymap = [ { on = [""], run = ["enter", "escape --visual --select"], desc = "Enter the child directory" }, # Operation + { on = ["C"], run = "plugin ouch", desc = "Compress" }, { on = ["r"], run = "rename --empty=stem --cursor=start", desc = "Rename a file or directory" }, { on = ["R"], run = "rename --cursor=end", desc = "Rename a file or directory (keeping the current filename)" }, + { on = ["d", "d"], run = "remove --force", desc = "Trash selected files" }, + { on = ["d", "D"], run = "remove --permanently", desc = "Permanently delete selected files" }, + { on = ["d", "t"], run = "plugin recycle-bin", desc = "Open Recycle Bin menu" }, + { on = ["d", "u"], run = "plugin restore", desc = "Restore last deleted files/folders" }, + # Copy - { on = ["c", "c"], run = "copy path", desc = "Copy the absolute path" }, + { on = ["c", "c"], run = "plugin wl-clipboard", desc = "Copy file content" }, + { on = ["c", "p"], run = "copy path", desc = "Copy the absolute path" }, { on = ["c", "d"], run = "copy dirname", desc = "Copy the path of the parent directory" }, { on = ["c", "f"], run = "copy filename", desc = "Copy the name of the file" }, { on = ["c", "n"], run = "copy name_without_ext", desc = "Copy the name of the file without the extension" }, { on = ["c", "r"], run = "plugin rsync", desc = "Copy files using rsync" }, # Goto + { on = ["g", "r"], run = "plugin cd-git-root", desc = "Go to git repo root" }, { on = ["g", "h"], run = "cd ~", desc = "Go home" }, { on = ["g", "c"], run = "cd ~/.config", desc = "Goto ~/.config" }, { on = ["g", "d"], run = "cd ~/Downloads", desc = "Goto ~/Downloads" }, @@ -45,6 +53,8 @@ prepend_keymap = [ { on = ["", "d"], run = ["shell 'ya pub-to 0 DiffRemote --orphan --list \"$@\"'", "quit"], desc = "Diff with transfer.nvim" }, { on = ["", ""], run = ["shell 'ya pub-to 0 TransferDirDiff --list \"$@\"'"], desc = "Diff directory with transfer.nvim" }, + # File Info + { on = ["m", "S"], run = "plugin what-size", desc = "Show size of selection or CWD" }, ] [input] diff --git a/configs/yazi/package.toml b/configs/yazi/package.toml index 14b4153..78f9b0a 100644 --- a/configs/yazi/package.toml +++ b/configs/yazi/package.toml @@ -13,6 +13,36 @@ use = "yazi-rs/plugins:smart-enter" rev = "68f7d48" hash = "56fdabc96fc1f4d53c96eb884b02a5be" +[[plugin.deps]] +use = "ciarandg/cd-git-root" +rev = "a0e0f4b" +hash = "b84a85f3b513bd9c0a0ab93cc7c8e4c3" + +[[plugin.deps]] +use = "pirafrank/what-size" +rev = "179ebf6" +hash = "57056b9728006881d580ccabe8154a9c" + +[[plugin.deps]] +use = "uhs-robert/recycle-bin" +rev = "69d7d4c" +hash = "38dac2fc8f4b50bbdaa46e699720a54a" + +[[plugin.deps]] +use = "boydaihungst/restore" +rev = "4eda0bf" +hash = "778941e7f1ebbacd60f4e254bb3c51de" + +[[plugin.deps]] +use = "grappas/wl-clipboard" +rev = "e9a38e4" +hash = "6b8e5d6b09626facec713923d3ddb54b" + +[[plugin.deps]] +use = "ndtoan96/ouch" +rev = "cfb9140" +hash = "b5067143415bd2d46c0dfa57319ddcef" + [[flavor.deps]] use = "yazi-rs/flavors:catppuccin-macchiato" rev = "4a1802a" diff --git a/configs/yazi/vfs.toml b/configs/yazi/vfs.toml new file mode 100644 index 0000000..48be1da --- /dev/null +++ b/configs/yazi/vfs.toml @@ -0,0 +1 @@ +[services] diff --git a/configs/yazi/yazi.toml b/configs/yazi/yazi.toml index 3a64e39..d773506 100644 --- a/configs/yazi/yazi.toml +++ b/configs/yazi/yazi.toml @@ -16,7 +16,7 @@ mouse_events = ["click", "scroll"] title_format = "Yazi: {cwd}" [preview] -cache_dir = "" +cache_dir = "$HOME/.cache/yazi" image_delay = 0 image_filter = "triangle" image_quality = 75 @@ -72,46 +72,8 @@ image_bound = [0, 0] suppress_preload = false [plugin] +prepend_previewers = [{ mime = "application/{*zip,tar,bzip2,7z*,rar,xz,zstd,java-archive}", run = "ouch --show-file-icons" }] -fetchers = [ - # Mimetype - { id = "mime", url = "*", run = "mime", if = "!mime", prio = "high" }, -] -preloaders = [ - # example - { mime = "image/{avif,heic,jxl,svg+xml}", run = "magick" }, - { mime = "image/*", run = "image" }, - # Video - { mime = "video/*", run = "video" }, - # PDF - { mime = "application/pdf", run = "pdf" }, - # Font - { mime = "font/*", run = "font" }, - { mime = "application/vnd.ms-opentype", run = "font" }, -] -previewers = [ - { url = "*/", run = "folder", sync = true }, - # Code - { mime = "text/*", run = "code" }, - { mime = "*/{xml,javascript,x-wine-extension-ini}", run = "code" }, - # JSON - { mime = "application/{json,x-ndjson}", run = "json" }, - # Image - { mime = "image/{avif,hei?,jxl,svg+xml}", run = "magick" }, - { mime = "image/*", run = "image" }, - # Video - { mime = "video/*", run = "video" }, - # PDF - { mime = "application/pdf", run = "pdf" }, - # Archive - { mime = "application/{,g}zip", run = "archive" }, - { mime = "application/x-{tar,bzip*,7z-compressed,xz,rar,iso9660-image}", run = "archive" }, - # Font - { mime = "font/*", run = "font" }, - { mime = "application/vnd.ms-opentype", run = "font" }, - # Fallback - { url = "*", run = "file" }, -] [input] cursor_blink = false From a119a8e7cb45fdf88075832d8ba6ef04ce79c513 Mon Sep 17 00:00:00 2001 From: aleidk Date: Fri, 9 Jan 2026 16:53:39 -0300 Subject: [PATCH 17/28] update toml formatter config --- .taplo.toml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/.taplo.toml b/.taplo.toml index 19cac95..e3baee1 100644 --- a/.taplo.toml +++ b/.taplo.toml @@ -1,3 +1,12 @@ [formatting] -inline_table_expand = false -array_auto_expand = false +inline_table_expand = false +array_auto_expand = false +align_entries = true +align_comments = true +array_auto_collapse = false +compact_arrays = false +compact_inline_tables = false +indent_tables = true +indent_entries = true +reorder_keys = true +reorder_inline_tables = true From add508264b0bb9dd9b89e0f239277fe9804d5bfc Mon Sep 17 00:00:00 2001 From: aleidk Date: Fri, 9 Jan 2026 16:54:30 -0300 Subject: [PATCH 18/28] modularize dotter packages foo --- .dotter/aleidk-work-laptop.toml | 7 +- .dotter/global.toml | 86 ++++--- bootstrap/pkgs_arch_raw.txt | 216 ++++++++++++++++++ configs/noctalia/settings.json | 48 ++-- .../user/niri.service.wants/noctalia.service | 1 + .../{override.conf => hyprland-override.conf} | 0 6 files changed, 296 insertions(+), 62 deletions(-) create mode 100644 bootstrap/pkgs_arch_raw.txt create mode 120000 configs/systemd/user/niri.service.wants/noctalia.service rename configs/systemd/waybar.service.d/{override.conf => hyprland-override.conf} (100%) diff --git a/.dotter/aleidk-work-laptop.toml b/.dotter/aleidk-work-laptop.toml index 66baeae..c9e77d5 100644 --- a/.dotter/aleidk-work-laptop.toml +++ b/.dotter/aleidk-work-laptop.toml @@ -1,8 +1,7 @@ -includes = [] -packages = ["default"] +includes = [ ] +packages = [ "default", "niri", "dev" ] [files] -"configs/hypr/work-laptop/hyprland.conf" = "~/.config/hypr/include/work-laptop.conf" -"configs/niri/work-laptop/local.kdl" = "~/.config/niri/include/local.kdl" + "configs/niri/work-laptop/local.kdl" = "~/.config/niri/include/local.kdl" [variables] diff --git a/.dotter/global.toml b/.dotter/global.toml index 91826df..8170728 100644 --- a/.dotter/global.toml +++ b/.dotter/global.toml @@ -1,43 +1,61 @@ [settings] -default_target_type = "symbolic" + default_target_type = "symbolic" [helpers] [default] -depends = ["niri"] + depends = [ "cli-utils" ] -[default.files] -"configs/fish" = "~/.config/fish" -"configs/alacritty" = "~/.config/alacritty" -"configs/atuin" = "~/.config/atuin" -"configs/bat" = "~/.config/bat" -"configs/containers" = "~/.config/containers" -"configs/fzf" = "~/.config/fzf" -"configs/ghostty" = "~/.config/ghostty" -"configs/git" = "~/.config/git" -"configs/hypr/base" = "~/.config/hypr" -"configs/kitty" = "~/.config/kitty" -"configs/lazygit" = "~/.config/lazygit" -"configs/mako" = "~/.config/mako" -"configs/mise" = "~/.config/mise" -"configs/mpv" = "~/.config/mpv" -"configs/nvim" = "~/.config/nvim" -"configs/rofi" = "~/.config/rofi" -"configs/swappy" = "~/.config/swappy" -"configs/swaync" = "~/.config/swaync" -"configs/uwsm" = "~/.config/uwsm" -"configs/vimiv" = "~/.config/vimiv" -"configs/waybar" = "~/.config/waybar" -"configs/wezterm" = "~/.config/wezterm" -"configs/wlogout" = "~/.config/wlogout" -"configs/wpaperd" = "~/.config/wpaperd" -"configs/yazi" = "~/.config/yazi" -"configs/systemd" = "~/.config/systemd" -"configs/zed" = "~/.config/zed" + [default.files] + "configs/containers" = "~/.config/containers" + "configs/mpv" = "~/.config/mpv" + "configs/swappy" = "~/.config/swappy" + + [default.variables] + +[wm.files] + "configs/uwsm" = "~/.config/uwsm" + "configs/vimiv" = "~/.config/vimiv" + +[niri] + depends = [ "wm", "terminals" ] + [niri.files] + "configs/niri/base" = "~/.config/niri" + "configs/noctalia" = "~/.config/noctalia" + "configs/systemd/user/niri.service.wants" = "~/.config/systemd/user/niri.service.wants" + +[hyprland.files] + "configs/hypr/base" = "~/.config/hypr" + "configs/systemd/waybar.service.d/hyprland-override.conf" = "~/.config/systemd/waybar.service.d/override.conf" + +[wayland-composed.files] + "configs/mako" = "~/.config/mako" + "configs/rofi" = "~/.config/rofi" + "configs/swaync" = "~/.config/swaync" + "configs/waybar" = "~/.config/waybar" + "configs/wlogout" = "~/.config/wlogout" + "configs/wpaperd" = "~/.config/wpaperd" -[default.variables] +[terminals.files] + "configs/alacritty" = "~/.config/alacritty" + "configs/ghostty" = "~/.config/ghostty" + "configs/kitty" = "~/.config/kitty" + "configs/wezterm" = "~/.config/wezterm" -[niri.files] -"configs/niri/base" = "~/.config/niri" -"configs/noctalia" = "~/.config/noctalia" +[cli-utils.files] + "configs/atuin" = "~/.config/atuin" + "configs/bat" = "~/.config/bat" + "configs/fish" = "~/.config/fish" + "configs/fzf" = "~/.config/fzf" + "configs/yazi" = "~/.config/yazi" + +[dev] + depends = [ "cli-utils", "terminals" ] + + [dev.files] + "configs/git" = "~/.config/git" + "configs/lazygit" = "~/.config/lazygit" + "configs/mise" = "~/.config/mise" + "configs/nvim" = "~/.config/nvim" + "configs/zed" = "~/.config/zed" diff --git a/bootstrap/pkgs_arch_raw.txt b/bootstrap/pkgs_arch_raw.txt new file mode 100644 index 0000000..5e67356 --- /dev/null +++ b/bootstrap/pkgs_arch_raw.txt @@ -0,0 +1,216 @@ +age +arch-update +arm-none-eabi-binutils +arm-none-eabi-gcc +arm-none-eabi-newlib +atuin +avr-binutils +avr-gcc +avr-libc +avrdude +base +base-devel +bat +beekeeper-studio-bin +bitwarden +blueman +bluetui +bluez +bluez-utils +brave-bin +btrfs-progs +bun-bin +catppuccin-cursors-macchiato +catppuccin-gtk-theme-macchiato +catppuccin-sddm-theme-macchiato +cava +celluloid +cliphist +composer +cpio +cronie +cups +deno +dfu-programmer +dfu-util +dolphin +dotter-rs-bin +dunst +efibootmgr +egl-wayland +evince +eza +fd +feishin-bin +fgj +firefox +fish +flatpak +font-manager +fzf +gedit +git +gitleaks +gnome-disk-utility +gnome-keyring +gnome-shell-extension-appindicator +gnome-system-monitor +goimapnotify +grim +gst-plugin-pipewire +hoppscotch-bin +htop +hypridle +hyprland +hyprlock +hyprpaper +hyprpolkitagent +hyprshot +intel-media-driver +intel-ucode +iwd +just +kitty +kvantum +kvantum-theme-catppuccin-git +kwallet-pam +kwalletmanager +lazygit +lib32-nvidia-580xx-utils +libcurl-compat +libfido2 +libre-menu-editor +libreoffice-still +libva-intel-driver +limine +limine-mkinitcpio-hook +limine-snapper-sync +linux-firmware +linux-headers +linux-lts +linux-lts-headers +linux-zen +linux-zen-headers +lostfiles +lxappearance +ly +man-db +mutt-wizard +nano +nautilus +nautilus-admin-gtk4 +nautilus-image-converter +nautilus-open-any-terminal +neomutt +neovim +network-manager-applet +networkmanager +niri +noctalia-shell +noto-fonts +noto-fonts-cjk +noto-fonts-emoji +nss-mdns +nvidia-580xx-dkms +nvidia-580xx-settings +nvtop +obs-studio +obsidian +ouch +paccache-hook +paru +paru-debug +perl-image-exiftool +php-pear +picard +pipewire-alsa +pipewire-jack +pipewire-pulse +plymouth-theme-catppuccin-macchiato-git +pnpm +podman +polkit-kde-agent +power-profiles-daemon +pre-commit +pwvucontrol +python-pip +qt5-wayland +qt6-wayland +resvg +riscv64-elf-binutils +riscv64-elf-gcc +riscv64-elf-newlib +rofi +rofi-rbw +rofimoji +rsync +rtl8821ce-dkms-git +rust-analyzer +seahorse +selectdefaultapplication-fork-git +slimbookbattery +slurp +smartmontools +snap-pac +snp +sof-firmware +sops +stylepak-git +swappy +swaync +swayosd-git +system-config-printer +tailscale +tealdeer +texlive-fontsextra +toml-bombadil +trash-cli +tsukimi-bin +ttf-dejavu +ttf-fira-code +ttf-fira-mono +ttf-fira-sans +ttf-firacode-nerd +ttf-jetbrains-mono-nerd +ttf-ms-win11-auto +ttf-nerd-fonts-symbols-mono +ttf-nunito +ttf-opensans +ttf-roboto +ttf-roboto-mono-nerd +tuckr +udiskie +ueberzugpp +unrar +uwsm +vim +vulkan-intel +vulkan-nouveau +vulkan-radeon +waybar +waypaper +webkit2gtk-4.1 +wev +wezterm +wget +wireless_tools +wlogout +wlsunset +wofi +wpaperd +wtype +xdg-desktop-portal-gtk +xdg-desktop-portal-hyprland +xdg-terminal-exec +xf86-video-amdgpu +xf86-video-ati +xf86-video-nouveau +xorg-server +xorg-xinit +xwayland-satellite +yadm +yazi +zed +zip +zoxide +zram-generator diff --git a/configs/noctalia/settings.json b/configs/noctalia/settings.json index fa6174d..a3edb4f 100644 --- a/configs/noctalia/settings.json +++ b/configs/noctalia/settings.json @@ -1,12 +1,14 @@ { "appLauncher": { + "autoPasteClipboard": false, + "clipboardWrapText": true, "customLaunchPrefix": "", "customLaunchPrefixEnabled": false, "enableClipPreview": true, "enableClipboardHistory": true, "iconMode": "tabler", "ignoreMouseInput": false, - "pinnedExecs": [ + "pinnedApps": [ ], "position": "center", "screenshotAnnotationTool": "", @@ -19,7 +21,6 @@ }, "audio": { "cavaFrameRate": 30, - "externalMixer": "pwvucontrol || pavucontrol", "mprisBlacklist": [ ], "preferredPlayer": "", @@ -33,8 +34,8 @@ "density": "default", "exclusive": true, "floating": true, - "marginHorizontal": 0.18, - "marginVertical": 0.25, + "marginHorizontal": 3, + "marginVertical": 5, "monitors": [ ], "outerCorners": true, @@ -70,10 +71,15 @@ "unfocusedIconsOpacity": 1 }, { + "compactMode": false, + "compactShowAlbumArt": true, + "compactShowVisualizer": false, "hideMode": "hidden", "hideWhenIdle": false, "id": "MediaMini", "maxWidth": 200, + "panelShowAlbumArt": true, + "panelShowVisualizer": true, "scrollingMode": "hover", "showAlbumArt": false, "showArtistFirst": false, @@ -113,7 +119,8 @@ }, { "displayMode": "onhover", - "id": "Volume" + "id": "Volume", + "middleClickCommand": "pwvucontrol || pavucontrol" }, { "deviceNativePath": "", @@ -163,7 +170,6 @@ }, "colorSchemes": { "darkMode": true, - "generateTemplatesForPredefined": false, "manualSunrise": "06:30", "manualSunset": "18:30", "matugenSchemeType": "scheme-fruit-salad", @@ -208,9 +214,6 @@ { "id": "Bluetooth" }, - { - "id": "ScreenRecorder" - }, { "id": "WallpaperSelector" } @@ -254,6 +257,7 @@ "yazi" ], "pinnedStatic": false, + "position": "bottom", "size": 1 }, "general": { @@ -275,6 +279,7 @@ "shadowDirection": "bottom_right", "shadowOffsetX": 2, "shadowOffsetY": 3, + "showChangelogOnStartup": true, "showHibernateOnLockScreen": false, "showScreenCorners": false, "showSessionButtonsOnLockScreen": true @@ -291,6 +296,8 @@ "location": { "analogClockInCalendar": false, "firstDayOfWeek": -1, + "hideWeatherCityName": false, + "hideWeatherTimezone": false, "name": "Santiago", "showCalendarEvents": true, "showCalendarWeather": true, @@ -359,18 +366,6 @@ ], "overlayLayer": true }, - "screenRecorder": { - "audioCodec": "opus", - "audioSource": "default_output", - "colorRange": "limited", - "copyToClipboard": false, - "directory": "/home/aleidk/Videos", - "frameRate": 60, - "quality": "very_high", - "showCursor": true, - "videoCodec": "h264", - "videoSource": "portal" - }, "sessionMenu": { "countdownDuration": 5000, "enableCountdown": true, @@ -418,7 +413,7 @@ "showHeader": true, "showNumberLabels": true }, - "settingsVersion": 37, + "settingsVersion": 39, "systemMonitor": { "cpuCriticalThreshold": 90, "cpuPollingInterval": 3000, @@ -468,18 +463,23 @@ "walker": false, "wezterm": false, "yazi": false, - "zed": false + "zed": false, + "zenBrowser": false }, "ui": { + "bluetoothDetailsViewMode": "grid", + "bluetoothHideUnnamedDevices": false, "boxBorderEnabled": false, "fontDefault": "Sans Serif", "fontDefaultScale": 1, "fontFixed": "monospace", "fontFixedScale": 1, + "networkPanelView": "wifi", "panelBackgroundOpacity": 0.93, "panelsAttachedToBar": false, "settingsPanelMode": "centered", - "tooltipsEnabled": true + "tooltipsEnabled": true, + "wifiDetailsViewMode": "grid" }, "wallpaper": { "directory": "/home/aleidk/Pictures/Wallpapers", diff --git a/configs/systemd/user/niri.service.wants/noctalia.service b/configs/systemd/user/niri.service.wants/noctalia.service new file mode 120000 index 0000000..7643639 --- /dev/null +++ b/configs/systemd/user/niri.service.wants/noctalia.service @@ -0,0 +1 @@ +/usr/lib/systemd/user/noctalia.service \ No newline at end of file diff --git a/configs/systemd/waybar.service.d/override.conf b/configs/systemd/waybar.service.d/hyprland-override.conf similarity index 100% rename from configs/systemd/waybar.service.d/override.conf rename to configs/systemd/waybar.service.d/hyprland-override.conf From dfe6b7fe40628cfc12ce6f4da8ec042872208778 Mon Sep 17 00:00:00 2001 From: aleidk Date: Mon, 12 Jan 2026 14:55:20 -0300 Subject: [PATCH 19/28] update dots management --- .dotter/global.toml | 8 ++- Hooks/containers/post_reload_daemons.sh | 3 - bootstrap/bootstrap.sh | 29 --------- bootstrap/bootstrap.yaml | 69 --------------------- bootstrap/variables.yaml | 81 ------------------------- configs/fish/functions/dots.fish | 3 + .justfile => configs/just/arch.just | 4 +- configs/just/dots.just | 4 ++ configs/just/justfile | 2 + 9 files changed, 16 insertions(+), 187 deletions(-) delete mode 100755 Hooks/containers/post_reload_daemons.sh delete mode 100755 bootstrap/bootstrap.sh delete mode 100644 bootstrap/bootstrap.yaml delete mode 100644 bootstrap/variables.yaml create mode 100644 configs/fish/functions/dots.fish rename .justfile => configs/just/arch.just (95%) create mode 100644 configs/just/dots.just create mode 100644 configs/just/justfile diff --git a/.dotter/global.toml b/.dotter/global.toml index 8170728..0a0d981 100644 --- a/.dotter/global.toml +++ b/.dotter/global.toml @@ -7,9 +7,11 @@ depends = [ "cli-utils" ] [default.files] - "configs/containers" = "~/.config/containers" - "configs/mpv" = "~/.config/mpv" - "configs/swappy" = "~/.config/swappy" + "configs/containers" = "~/.config/containers" + "configs/just" = "~/.config/just" + "configs/just/dots.just" = { target = "~/.config/just/dots.just", type = "template" } + "configs/mpv" = "~/.config/mpv" + "configs/swappy" = "~/.config/swappy" [default.variables] diff --git a/Hooks/containers/post_reload_daemons.sh b/Hooks/containers/post_reload_daemons.sh deleted file mode 100755 index ff88b1b..0000000 --- a/Hooks/containers/post_reload_daemons.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -systemctl --user daemon-reload diff --git a/bootstrap/bootstrap.sh b/bootstrap/bootstrap.sh deleted file mode 100755 index d9eb29d..0000000 --- a/bootstrap/bootstrap.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -set -eou pipefail - -export ANSIBLE_STDOUT_CALLBACK=minimal - -if ! command -v uv >/dev/null 2>&1; then - echo -e "Installing UV...\n" - curl -LsSf https://astral.sh/uv/install.sh | sh -fi - -echo -e "Executing playbook...\n" - -if [[ -d ~/.config/dotfiles ]]; then - pushd ~/.config/dotfiles/bootstrap/ || exit - - # dotfiles are cloned, executed localy - uvx --from ansible ansible-playbook --ask-become-pass bootstrap.yaml - -else - - # dotfiles are not cloned, executed remotly - uvx --from ansible ansible-pull --ask-become-pass --url ssh://git@git.alecodes.page:24062/alecodes/dots.git bootstrap/bootstrap.yaml - -fi - -popd || exit - -echo -e "Done!\n" diff --git a/bootstrap/bootstrap.yaml b/bootstrap/bootstrap.yaml deleted file mode 100644 index 88211b3..0000000 --- a/bootstrap/bootstrap.yaml +++ /dev/null @@ -1,69 +0,0 @@ -- name: Bootstrap system installation - hosts: localhost - vars_files: - - ./variables.yaml - tasks: - - name: Fedora setup - when: ansible_facts['distribution'] == "Fedora" - block: - - name: Enable copr repos - become: true - loop: "{{ distros.fedora.copr }}" - community.general.copr: - state: enabled - name: "{{ item }}" - - - name: Install packages - become: true - ansible.builtin.package: - state: present - name: "{{ distros.Global.packages }}" - - - name: 'Ensure rustup is setup' - ansible.builtin.command: "{{ (ansible_facts['pkg_mgr'] in ['dnf5']) | ternary('rustup-init -y --no-modify-path', 'rustup --no-modify-path -y') }}" - args: - creates: ~/.cargo/env - - - name: "Installing Cargo Binstall" - ansible.builtin.unarchive: - remote_src: true - src: https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-x86_64-unknown-linux-musl.tgz - dest: "{{ ansible_env.HOME }}/.cargo/bin/" - keep_newer: true - extra_opts: - - "--no-anchored" - - "cargo-binstall" - - - - name: 'Install cargo packages' - loop: "{{ distros[ansible_facts['distribution']].cargo }}" - register: cargo_log - notify: - - Deploy dots - - Install yazi packages - ansible.builtin.command: - cmd: "cargo binstall --no-confirm --locked {{ item.pkg }}" - creates: "{{ ansible_env.HOME }}/.cargo/bin/{{ item.bin }}" - - - name: Generate an OpenSSH keypair - community.crypto.openssh_keypair: - path: ~/.ssh/id_ed25519 - type: ed25519 - - - name: Clone dotfiles - ignore_errors: true - notify: - - Deploy dots - - Install yazi packages - ansible.builtin.git: - accept_newhostkey: true - repo: ssh://git@git.alecodes.page:24062/alecodes/dots.git - dest: ~/.config/dotfiles - update: true - version: main - - handlers: - - name: Deploy dots - ansible.builtin.command: tuckr add * - - name: Install yazi packages - ansible.builtin.command: ya pkg install diff --git a/bootstrap/variables.yaml b/bootstrap/variables.yaml deleted file mode 100644 index 6e8d0df..0000000 --- a/bootstrap/variables.yaml +++ /dev/null @@ -1,81 +0,0 @@ -distros: - Fedora: - copr: - - atim/lazygit - - the4runner/firefox-dev - packages: {} - cargo: - - pkg: yazi-fm - bin: yazi - - pkg: yazi-cli - bin: yazi - - pkg: tuckr - bin: tuckr - - Arch: - packages: - - tuckr-git - cargo: {} - - Global: - packages: - - adwaita-cursor-theme - - adwaita-icon-theme - - adwaita-icon-theme-legacy - - adwaita-mono-fonts - - adwaita-sans-fonts - - bat - - breeze-icon-theme - - breeze-icon-theme-fedora - - curl - - duf - - eza - - fd-find - - firefox-dev - - fish - - flatpak - - fzf - - git - - grim - - kitty - - lazygit - - neovim - - nodejs - - openssh - - openssh-askpass - - openssh-clients - - openssh-server - - openssl - - openssl-devel - - openssl-libs - - php-cli - - php-common - - php-intl - - php-mbstring - - php-pecl-zip - - php-process - - php-soap - - php-xml - - rhythmbox - - ripgrep - - rofi-themes - - rofi-wayland - - rofimoji - - rootfiles - - rsync - - rustup - - sd - - sed - - sushi - - swappy - - tailscale - - tealdeer - - trash-cli - - tree - - tree-sitter-cli - - udisks2 - - unrar - - unrar-free - - unzip - - zip - - zoxide diff --git a/configs/fish/functions/dots.fish b/configs/fish/functions/dots.fish new file mode 100644 index 0000000..9ec4e4f --- /dev/null +++ b/configs/fish/functions/dots.fish @@ -0,0 +1,3 @@ +function dots --wraps='just -g' --description 'alias dots just -g' + just -g $argv +end diff --git a/.justfile b/configs/just/arch.just similarity index 95% rename from .justfile rename to configs/just/arch.just index af46a10..1445d2b 100644 --- a/.justfile +++ b/configs/just/arch.just @@ -3,10 +3,10 @@ packages_file := quote(justfile_directory() / "bootstrap/pkgs_arch.txt") bootstrap: setup_pacman setup_paru install_packages -install_packages: update_packages +install_packages: update paru -S --needed --noconfirm - < {{ packages_file }} -update_packages: +update: paru -Syu --noconfirm clean_orphans: diff --git a/configs/just/dots.just b/configs/just/dots.just new file mode 100644 index 0000000..9ca0f26 --- /dev/null +++ b/configs/just/dots.just @@ -0,0 +1,4 @@ +set working-directory := "{{ dotter.current_dir }}" + +deploy: + dotter deploy diff --git a/configs/just/justfile b/configs/just/justfile new file mode 100644 index 0000000..885aceb --- /dev/null +++ b/configs/just/justfile @@ -0,0 +1,2 @@ +mod dots +mod arch From 4fa7bf655bd322ad3197c6f93cc9cff721e6c614 Mon Sep 17 00:00:00 2001 From: aleidk Date: Thu, 15 Jan 2026 09:28:21 -0300 Subject: [PATCH 20/28] fix yazi.nvim issue in ministarter --- configs/nvim/lazy-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/nvim/lazy-lock.json b/configs/nvim/lazy-lock.json index f7066e1..93288d1 100644 --- a/configs/nvim/lazy-lock.json +++ b/configs/nvim/lazy-lock.json @@ -35,5 +35,5 @@ "ts-node-action": { "branch": "master", "commit": "6d3b60754fd87963d70eadaa2f77873b447eac26" }, "typescript-tools.nvim": { "branch": "master", "commit": "3c501d7c7f79457932a8750a2a1476a004c5c1a9" }, "vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" }, - "yazi.nvim": { "branch": "main", "commit": "053867916a9be3cb46f84b6f095ee731bbddd213" } + "yazi.nvim": { "branch": "main", "commit": "d99c95ab3bc990dfd0a4ecf2d6f24c5ce4fe9747" } } From d04317762f4eb5ae134e8f1b232c9d92073f8486 Mon Sep 17 00:00:00 2001 From: aleidk Date: Thu, 15 Jan 2026 09:57:00 -0300 Subject: [PATCH 21/28] add debian server pkgs list --- bootstrap/pkgs_debian_server.txt | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 bootstrap/pkgs_debian_server.txt diff --git a/bootstrap/pkgs_debian_server.txt b/bootstrap/pkgs_debian_server.txt new file mode 100644 index 0000000..fcc60ba --- /dev/null +++ b/bootstrap/pkgs_debian_server.txt @@ -0,0 +1,23 @@ +bat +curl +du-dust +duf +eza +fd-find +fish +fuse3 +fzf +grep +jq +just +megatools +ncdu +neovim +rclone +ripgrep +rsync +sed +sudo +vim +wget +zoxide From 8a5f7b8a0a8d96bbaa61c4a63d9b308392d15f1e Mon Sep 17 00:00:00 2001 From: aleidk Date: Thu, 15 Jan 2026 10:28:58 -0300 Subject: [PATCH 22/28] minimal update --- .dotter/global.toml | 12 +++++++++--- .dotter/ninji.toml | 6 ++++++ configs/fish/config.fish | 2 ++ 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 .dotter/ninji.toml diff --git a/.dotter/global.toml b/.dotter/global.toml index 0a0d981..f7471ab 100644 --- a/.dotter/global.toml +++ b/.dotter/global.toml @@ -7,14 +7,17 @@ depends = [ "cli-utils" ] [default.files] - "configs/containers" = "~/.config/containers" "configs/just" = "~/.config/just" "configs/just/dots.just" = { target = "~/.config/just/dots.just", type = "template" } - "configs/mpv" = "~/.config/mpv" - "configs/swappy" = "~/.config/swappy" [default.variables] +[desktop] + depends = [ "default" ] + [desktop.files] + "configs/mpv" = "~/.config/mpv" + "configs/swappy" = "~/.config/swappy" + [wm.files] "configs/uwsm" = "~/.config/uwsm" "configs/vimiv" = "~/.config/vimiv" @@ -61,3 +64,6 @@ "configs/mise" = "~/.config/mise" "configs/nvim" = "~/.config/nvim" "configs/zed" = "~/.config/zed" + +[nvim-min.files] + "configs/nvim-min" = "~/.config/nvim" diff --git a/.dotter/ninji.toml b/.dotter/ninji.toml new file mode 100644 index 0000000..31dc803 --- /dev/null +++ b/.dotter/ninji.toml @@ -0,0 +1,6 @@ +includes = [ ] +packages = [ "default" ] + +[files] + +[variables] diff --git a/configs/fish/config.fish b/configs/fish/config.fish index 9f5e5f6..9b59c9f 100644 --- a/configs/fish/config.fish +++ b/configs/fish/config.fish @@ -1,3 +1,5 @@ +fish_config theme choose "Catppuccin Macchiato" + if status is-interactive # Commands to run in interactive sessions can go here zoxide init --cmd cd fish | source From 6944ab1e253b9c82301f348e6b63173a01baa8a6 Mon Sep 17 00:00:00 2001 From: aleidk Date: Thu, 29 Jan 2026 12:25:32 -0300 Subject: [PATCH 23/28] minor updates --- .dotter/global.toml | 12 +- configs/fish/functions/envsource.fish | 2 +- configs/just/dots.just | 6 + configs/noctalia/pam/password.conf | 4 +- configs/noctalia/settings.json | 69 ++- configs/nvim/lua/aleidk/options.lua | 1 + configs/nvim/lua/aleidk/plugins/mini.lua | 436 +++++++++--------- .../nvim/lua/aleidk/plugins/treesitter.lua | 10 +- .../user/niri.service.wants/hypridle.service | 1 + 9 files changed, 275 insertions(+), 266 deletions(-) create mode 120000 configs/systemd/user/niri.service.wants/hypridle.service diff --git a/.dotter/global.toml b/.dotter/global.toml index f7471ab..a0de78a 100644 --- a/.dotter/global.toml +++ b/.dotter/global.toml @@ -25,6 +25,7 @@ [niri] depends = [ "wm", "terminals" ] [niri.files] + "configs/hypr/base/hypridle.conf" = "~/.config/hypr/hypridle.conf" "configs/niri/base" = "~/.config/niri" "configs/noctalia" = "~/.config/noctalia" "configs/systemd/user/niri.service.wants" = "~/.config/systemd/user/niri.service.wants" @@ -59,11 +60,12 @@ depends = [ "cli-utils", "terminals" ] [dev.files] - "configs/git" = "~/.config/git" - "configs/lazygit" = "~/.config/lazygit" - "configs/mise" = "~/.config/mise" - "configs/nvim" = "~/.config/nvim" - "configs/zed" = "~/.config/zed" + "configs/containers" = "~/.config/containers" + "configs/git" = "~/.config/git" + "configs/lazygit" = "~/.config/lazygit" + "configs/mise" = "~/.config/mise" + "configs/nvim" = "~/.config/nvim" + "configs/zed" = "~/.config/zed" [nvim-min.files] "configs/nvim-min" = "~/.config/nvim" diff --git a/configs/fish/functions/envsource.fish b/configs/fish/functions/envsource.fish index af570e4..bc66566 100644 --- a/configs/fish/functions/envsource.fish +++ b/configs/fish/functions/envsource.fish @@ -1,5 +1,5 @@ function envsource - for line in (cat $argv | grep -v '^#') + for line in (cat $argv[1] | grep -v -e '^\([[:space:]]\|#.*\)*$') set item (string split -m 1 '=' $line) set -gx $item[1] $item[2] echo "Exported key $item[1]" diff --git a/configs/just/dots.just b/configs/just/dots.just index 9ca0f26..311be21 100644 --- a/configs/just/dots.just +++ b/configs/just/dots.just @@ -2,3 +2,9 @@ set working-directory := "{{ dotter.current_dir }}" deploy: dotter deploy + +enable_tailscale: + sudo tailscale set --operator=$USER + tailscale configure systray --enable-startup=systemd + systemctl --user daemon-reload + systemctl --user enable --now tailscale-systray diff --git a/configs/noctalia/pam/password.conf b/configs/noctalia/pam/password.conf index 68fc325..a659b71 100644 --- a/configs/noctalia/pam/password.conf +++ b/configs/noctalia/pam/password.conf @@ -1,3 +1,3 @@ -#auth sufficient pam_fprintd.so max-tries=1 -# only uncomment this if you have a fingerprint reader +auth sufficient pam_fprintd.so timeout=-1 +auth sufficient /run/current-system/sw/lib/security/pam_fprintd.so timeout=-1 # for NixOS auth required pam_unix.so diff --git a/configs/noctalia/settings.json b/configs/noctalia/settings.json index a3edb4f..3cf2b80 100644 --- a/configs/noctalia/settings.json +++ b/configs/noctalia/settings.json @@ -6,7 +6,8 @@ "customLaunchPrefixEnabled": false, "enableClipPreview": true, "enableClipboardHistory": true, - "iconMode": "tabler", + "enableSettingsSearch": true, + "iconMode": "native", "ignoreMouseInput": false, "pinnedApps": [ ], @@ -25,6 +26,7 @@ ], "preferredPlayer": "", "visualizerType": "mirrored", + "volumeFeedback": false, "volumeOverdrive": false, "volumeStep": 5 }, @@ -34,12 +36,15 @@ "density": "default", "exclusive": true, "floating": true, + "hideOnOverview": false, "marginHorizontal": 3, "marginVertical": 5, "monitors": [ ], "outerCorners": true, "position": "top", + "screenOverrides": [ + ], "showCapsule": true, "showOutline": false, "useSeparateOpacity": true, @@ -107,6 +112,7 @@ "hidePassive": false, "id": "Tray", "pinned": [ + "systray_17288" ] }, { @@ -114,9 +120,14 @@ }, { "hideWhenZero": false, + "hideWhenZeroUnread": false, "id": "NotificationHistory", "showUnreadBadge": true }, + { + "displayMode": "onhover", + "id": "Network" + }, { "displayMode": "onhover", "id": "Volume", @@ -125,6 +136,7 @@ { "deviceNativePath": "", "displayMode": "alwaysShow", + "hideIfIdle": false, "hideIfNotDetected": true, "id": "Battery", "showNoctaliaPerformance": true, @@ -161,18 +173,15 @@ { "enabled": true, "id": "weather-card" - }, - { - "enabled": false, - "id": "timer-card" } ] }, "colorSchemes": { "darkMode": true, + "generationMethod": "tonal-spot", "manualSunrise": "06:30", "manualSunset": "18:30", - "matugenSchemeType": "scheme-fruit-salad", + "monitorForColors": "", "predefinedScheme": "Catppuccin Macchiato Teal", "schedulingMode": "off", "useWallpaperColors": false @@ -268,11 +277,13 @@ "boxRadiusRatio": 1, "compactLockScreen": false, "dimmerOpacity": 0.25, + "enableLockScreenCountdown": true, "enableShadows": true, "forceBlackScreenCorners": false, "iRadiusRatio": 1, "language": "", "lockOnSuspend": true, + "lockScreenCountdownDuration": 5000, "radiusRatio": 1, "scaleRatio": 1, "screenRadiusRatio": 1, @@ -282,7 +293,8 @@ "showChangelogOnStartup": true, "showHibernateOnLockScreen": false, "showScreenCorners": false, - "showSessionButtonsOnLockScreen": true + "showSessionButtonsOnLockScreen": true, + "telemetryEnabled": false }, "hooks": { "darkModeChange": "", @@ -291,6 +303,8 @@ "performanceModeEnabled": "", "screenLock": "", "screenUnlock": "", + "session": "", + "startup": "", "wallpaperChange": "" }, "location": { @@ -312,7 +326,7 @@ "bluetoothHideUnnamedDevices": false, "bluetoothRssiPollIntervalMs": 10000, "bluetoothRssiPollingEnabled": false, - "wifiDetailsViewMode": "grid", + "wifiDetailsViewMode": "list", "wifiEnabled": true }, "nightLight": { @@ -328,6 +342,7 @@ "backgroundOpacity": 1, "criticalUrgencyDuration": 15, "enableKeyboardLayoutToast": true, + "enableMediaToast": false, "enabled": true, "location": "top", "lowUrgencyDuration": 3, @@ -413,7 +428,7 @@ "showHeader": true, "showNumberLabels": true }, - "settingsVersion": 39, + "settingsVersion": 44, "systemMonitor": { "cpuCriticalThreshold": 90, "cpuPollingInterval": 3000, @@ -432,6 +447,8 @@ "memPollingInterval": 3000, "memWarningThreshold": 80, "networkPollingInterval": 3000, + "swapCriticalThreshold": 90, + "swapWarningThreshold": 80, "tempCriticalThreshold": 90, "tempPollingInterval": 3000, "tempWarningThreshold": 80, @@ -439,32 +456,9 @@ "warningColor": "" }, "templates": { - "alacritty": false, - "cava": false, - "code": false, - "discord": false, - "emacs": false, - "enableUserTemplates": false, - "foot": false, - "fuzzel": false, - "ghostty": false, - "gtk": false, - "helix": false, - "hyprland": false, - "kcolorscheme": false, - "kitty": false, - "mango": false, - "niri": false, - "pywalfox": false, - "qt": false, - "spicetify": false, - "telegram": false, - "vicinae": false, - "walker": false, - "wezterm": false, - "yazi": false, - "zed": false, - "zenBrowser": false + "activeTemplates": [ + ], + "enableUserTheming": false }, "ui": { "bluetoothDetailsViewMode": "grid", @@ -482,6 +476,7 @@ "wifiDetailsViewMode": "grid" }, "wallpaper": { + "automationEnabled": true, "directory": "/home/aleidk/Pictures/Wallpapers", "enableMultiMonitorDirectories": false, "enabled": true, @@ -492,16 +487,16 @@ ], "overviewEnabled": true, "panelPosition": "center", - "randomEnabled": true, "randomIntervalSec": 900, - "recursiveSearch": true, "setWallpaperOnAllMonitors": true, + "showHiddenFiles": false, "solidColor": "#1a1a2e", "transitionDuration": 1500, "transitionEdgeSmoothness": 0.05, "transitionType": "random", "useSolidColor": false, "useWallhaven": false, + "viewMode": "recursive", "wallhavenApiKey": "", "wallhavenCategories": "111", "wallhavenOrder": "desc", diff --git a/configs/nvim/lua/aleidk/options.lua b/configs/nvim/lua/aleidk/options.lua index cf76fb6..87fc81e 100644 --- a/configs/nvim/lua/aleidk/options.lua +++ b/configs/nvim/lua/aleidk/options.lua @@ -167,6 +167,7 @@ vim.g.markdown_fenced_languages = { } vim.lsp.enable("denols") +vim.lsp.enable("phpactor") vim.lsp.inlay_hint.enable(true) diff --git a/configs/nvim/lua/aleidk/plugins/mini.lua b/configs/nvim/lua/aleidk/plugins/mini.lua index ca46956..32e5c93 100644 --- a/configs/nvim/lua/aleidk/plugins/mini.lua +++ b/configs/nvim/lua/aleidk/plugins/mini.lua @@ -1,248 +1,246 @@ return { - 'echasnovski/mini.nvim', - version = '*', - dependencies = { - "rafamadriz/friendly-snippets", - }, - config = function() - require('mini.icons').setup() + "echasnovski/mini.nvim", + version = "*", + dependencies = { + "rafamadriz/friendly-snippets", + }, + config = function() + require("mini.icons").setup() - vim.fn.sign_define("DapBreakpoint", { text = " ", texthl = "DapBreakpoint" }) - vim.fn.sign_define("DapBreakpointCondition", { text = " ", texthl = "DapBreakpointCondition" }) - vim.fn.sign_define("DapBreakpointRejected", { text = " ", texthl = "DapBreakpointRejected" }) - vim.fn.sign_define("DapLogPoint", { text = ".>", texthl = "DapLogPoint" }) - vim.fn.sign_define("DapStopped", { text = "󰁕 ", texthl = "DapStopped", numhl = "debugPC" }) + vim.fn.sign_define("DapBreakpoint", { text = " ", texthl = "DapBreakpoint" }) + vim.fn.sign_define("DapBreakpointCondition", { text = " ", texthl = "DapBreakpointCondition" }) + vim.fn.sign_define("DapBreakpointRejected", { text = " ", texthl = "DapBreakpointRejected" }) + vim.fn.sign_define("DapLogPoint", { text = ".>", texthl = "DapLogPoint" }) + vim.fn.sign_define("DapStopped", { text = "󰁕 ", texthl = "DapStopped", numhl = "debugPC" }) + require("mini.bracketed").setup({ + diagnostic = { options = { severity = vim.diagnostic.severity.ERROR } }, + }) + require("mini.ai").setup({}) + require("mini.cursorword").setup() -- Highlight word under cursor + require("mini.extra").setup() + require("mini.jump").setup({ + mappings = { + repeat_jump = "", + }, + }) -- Extend f, F, t, T + require("mini.jump2d").setup({ + spotter = require("mini.jump2d").gen_pattern_spotter("[^%s%p]+", "start"), + view = { + dim = true, + n_steps_ahead = 2, + }, + allowed_lines = { + blank = false, + cursor_at = false, + }, + }) + require("mini.surround").setup() + require("mini.operators").setup() + require("mini.pairs").setup({ + modes = { command = true }, + }) - require('mini.bracketed').setup({ - diagnostic = { options = { severity = vim.diagnostic.severity.ERROR } }, - }) - require("mini.ai").setup({}) - require('mini.cursorword').setup() -- Highlight word under cursor - require('mini.extra').setup() - require('mini.jump').setup({ - mappings = { - repeat_jump = "" - } - }) -- Extend f, F, t, T - require('mini.jump2d').setup( - { - spotter = require('mini.jump2d').gen_pattern_spotter('[^%s%p]+', 'start'), - view = { - dim = true, - n_steps_ahead = 2 - }, - allowed_lines = { - blank = false, - cursor_at = false - }, - } - ) - require('mini.surround').setup() - require('mini.operators').setup() - require('mini.pairs').setup({ - modes = { command = true } - }) + require("mini.splitjoin").setup() + require("mini.align").setup({}) + -- require('mini.animate').setup() + require("mini.notify").setup() + vim.notify = require("mini.notify").make_notify() + vim.keymap.set( + "n", + "un", + require("mini.notify").show_history, + { desc = "Show notifications", silent = true } + ) + require("mini.statusline").setup() + require("mini.diff").setup({ view = { style = "sign" } }) - require('mini.splitjoin').setup() - require("mini.align").setup({}) - -- require('mini.animate').setup() - require('mini.notify').setup() - vim.notify = require('mini.notify').make_notify() - vim.keymap.set('n', 'un', require('mini.notify').show_history, { desc = 'Show notifications', silent = true }) - require('mini.statusline').setup() - require('mini.diff').setup({ view = { style = 'sign' } }) + require("mini.git").setup({}) - require('mini.git').setup({}) + vim.keymap.set( + { "n", "x" }, + "gs", + "lua MiniGit.show_at_cursor()", + { desc = "Show at cursor", silent = true } + ) - vim.keymap.set({ 'n', 'x' }, 'gs', 'lua MiniGit.show_at_cursor()', - { desc = 'Show at cursor', silent = true }) + local starter = require("mini.starter") + starter.setup({ + footer = "", + evaluate_single = true, + items = { + starter.sections.recent_files(10, true), + starter.sections.sessions(5, true), + starter.sections.pick(), + starter.sections.builtin_actions(), + }, + content_hooks = { + starter.gen_hook.adding_bullet(), + starter.gen_hook.indexing("all", { "Builtin actions" }), + starter.gen_hook.aligning("center", "center"), + }, + }) - local starter = require('mini.starter') - starter.setup({ - footer = '', - evaluate_single = true, - items = { - starter.sections.recent_files(10, true), - starter.sections.sessions(5, true), - starter.sections.pick(), - starter.sections.builtin_actions(), - }, - content_hooks = { - starter.gen_hook.adding_bullet(), - starter.gen_hook.indexing('all', { 'Builtin actions' }), - starter.gen_hook.aligning("center", "center"), - }, - }) + require("mini.indentscope").setup({ + draw = { + animation = require("mini.indentscope").gen_animation.none(), + }, + }) - require('mini.indentscope').setup({ - draw = { - animation = require('mini.indentscope').gen_animation.none(), - }, - }) + require("mini.move").setup({ + mappings = { + -- Move visual selection in Visual mode + left = "H", + right = "L", + down = "J", + up = "K", - require('mini.move').setup({ - mappings = { - -- Move visual selection in Visual mode - left = 'H', - right = 'L', - down = 'J', - up = 'K', + -- Move current line in Normal mode + line_left = "", + line_right = "", + line_down = "", + line_up = "", + }, + }) + require("mini.comment").setup({ + options = { + -- Whether to ignore blank lines when commenting + ignore_blank_line = true, + -- Whether to ignore blank lines in actions and textobject + start_of_line = true, + }, + }) - -- Move current line in Normal mode - line_left = '', - line_right = '', - line_down = '', - line_up = '', - }, - }) - require('mini.comment').setup({ - options = { - -- Whether to ignore blank lines when commenting - ignore_blank_line = true, - -- Whether to ignore blank lines in actions and textobject - start_of_line = true, - }, - }) + local gen_loader = require("mini.snippets").gen_loader + require("mini.snippets").setup({ + snippets = { + -- Load custom file with global snippets first (adjust for Windows) + gen_loader.from_file("~/.config/nvim-unstable/snippets/global.json"), - local gen_loader = require('mini.snippets').gen_loader - require('mini.snippets').setup({ - snippets = { - -- Load custom file with global snippets first (adjust for Windows) - gen_loader.from_file('~/.config/nvim-unstable/snippets/global.json'), + -- Load snippets based on current language by reading files from + -- "snippets/" subdirectories from 'runtimepath' directories. + gen_loader.from_lang(), + }, + }) - -- Load snippets based on current language by reading files from - -- "snippets/" subdirectories from 'runtimepath' directories. - gen_loader.from_lang(), - }, - }) + local miniclue = require("mini.clue") + miniclue.setup({ + triggers = { + -- Leader triggers + { mode = "n", keys = "" }, + { mode = "v", keys = "" }, + { mode = "x", keys = "" }, - local miniclue = require("mini.clue") - miniclue.setup({ - triggers = { - -- Leader triggers - { mode = "n", keys = "" }, - { mode = "v", keys = "" }, - { mode = "x", keys = "" }, + -- Built-in completion + { mode = "i", keys = "" }, - -- Built-in completion - { mode = "i", keys = "" }, + -- `g` key + { mode = "n", keys = "g" }, + { mode = "x", keys = "g" }, - -- `g` key - { mode = "n", keys = "g" }, - { mode = "x", keys = "g" }, + -- Marks + { mode = "n", keys = "'" }, + { mode = "n", keys = "`" }, + { mode = "x", keys = "'" }, + { mode = "x", keys = "`" }, - -- Marks - { mode = "n", keys = "'" }, - { mode = "n", keys = "`" }, - { mode = "x", keys = "'" }, - { mode = "x", keys = "`" }, + -- Registers + { mode = "n", keys = '"' }, + { mode = "x", keys = '"' }, + { mode = "i", keys = "" }, + { mode = "c", keys = "" }, - -- Registers - { mode = "n", keys = '"' }, - { mode = "x", keys = '"' }, - { mode = "i", keys = "" }, - { mode = "c", keys = "" }, + -- Window commands + { mode = "n", keys = "" }, - -- Window commands - { mode = "n", keys = "" }, + -- `z` key + { mode = "n", keys = "z" }, + { mode = "x", keys = "z" }, + }, - -- `z` key - { mode = "n", keys = "z" }, - { mode = "x", keys = "z" }, - }, + -- Add a "postkeys" value to activate those keys after others + clues = { + miniclue.gen_clues.builtin_completion(), + miniclue.gen_clues.g(), + miniclue.gen_clues.marks(), + miniclue.gen_clues.registers(), + miniclue.gen_clues.windows(), + miniclue.gen_clues.z(), - -- Add a "postkeys" value to activate those keys after others - clues = { - miniclue.gen_clues.builtin_completion(), - miniclue.gen_clues.g(), - miniclue.gen_clues.marks(), - miniclue.gen_clues.registers(), - miniclue.gen_clues.windows(), - miniclue.gen_clues.z(), + { mode = "n", keys = "", desc = "+Bookmarks" }, + { mode = "n", keys = "n", postkeys = "" }, + { mode = "n", keys = "N", postkeys = "" }, + { mode = "n", keys = "b", desc = "+Buffers" }, + { mode = "n", keys = "bh", postkeys = "b" }, + { mode = "n", keys = "bl", postkeys = "b" }, + { mode = "n", keys = "d", desc = "+Debugger" }, + { mode = "n", keys = "dh", postkeys = "d" }, + { mode = "n", keys = "dJ", postkeys = "d" }, + { mode = "n", keys = "dj", postkeys = "d" }, + { mode = "n", keys = "dk", postkeys = "d" }, + { mode = "n", keys = "dl", postkeys = "d" }, + { mode = "n", keys = "f", desc = "+Find" }, + { mode = "n", keys = "g", desc = "+Git" }, + { mode = "n", keys = "l", desc = "+LSP" }, + { mode = "n", keys = "u", desc = "+UI & Config" }, + { mode = "n", keys = "p", desc = "+Run stuff" }, + { mode = "n", keys = "z", desc = "+ZK" }, + { mode = "v", keys = "z", desc = "+ZK" }, + { mode = "n", keys = "g?", desc = "+Print Debug" }, + }, - { mode = "n", keys = "", desc = "+Bookmarks" }, - { mode = "n", keys = "n", postkeys = "" }, - { mode = "n", keys = "N", postkeys = "" }, - { mode = "n", keys = "b", desc = "+Buffers" }, - { mode = "n", keys = "bh", postkeys = "b" }, - { mode = "n", keys = "bl", postkeys = "b" }, - { mode = "n", keys = "d", desc = "+Debugger" }, - { mode = "n", keys = "dh", postkeys = "d" }, - { mode = "n", keys = "dJ", postkeys = "d" }, - { mode = "n", keys = "dj", postkeys = "d" }, - { mode = "n", keys = "dk", postkeys = "d" }, - { mode = "n", keys = "dl", postkeys = "d" }, - { mode = "n", keys = "f", desc = "+Find" }, - { mode = "n", keys = "g", desc = "+Git" }, - { mode = "n", keys = "l", desc = "+LSP" }, - { mode = "n", keys = "r", desc = "+Replace" }, - { mode = "n", keys = "u", desc = "+UI & Config" }, - { mode = "n", keys = "w", desc = "+Workspace" }, - { mode = "n", keys = "p", desc = "+Run stuff" }, - { mode = "n", keys = "z", desc = "+ZK" }, - { mode = "v", keys = "z", desc = "+ZK" }, - { mode = "v", keys = "a", desc = "+AI" }, - { mode = "n", keys = "a", desc = "+AI" }, - { mode = "n", keys = "g?", desc = "+Print Debug" }, - }, + -- Clue window settings + window = { + -- Floating window config + config = { + width = "auto", + }, + -- Delay before showing clue window + delay = 200, + -- Keys to scroll inside the clue window + scroll_down = "", + scroll_up = "", + }, + }) - -- Clue window settings - window = { - -- Floating window config - config = { - width = "auto", - }, - -- Delay before showing clue window - delay = 200, - -- Keys to scroll inside the clue window - scroll_down = "", - scroll_up = "", - }, - }) + local hipatterns = require("mini.hipatterns") + hipatterns.setup({ + highlighters = { + -- Highlight standalone 'FIXME', 'HACK', 'TODO', 'NOTE' + fixme = { pattern = "%f[%w]()FIXME()%f[%W]", group = "MiniHipatternsFixme" }, + hack = { pattern = "%f[%w]()HACK()%f[%W]", group = "MiniHipatternsHack" }, + todo = { pattern = "%f[%w]()TODO()%f[%W]", group = "MiniHipatternsTodo" }, + note = { pattern = "%f[%w]()NOTE()%f[%W]", group = "MiniHipatternsNote" }, - local hipatterns = require('mini.hipatterns') - hipatterns.setup({ - highlighters = { - -- Highlight standalone 'FIXME', 'HACK', 'TODO', 'NOTE' - fixme = { pattern = '%f[%w]()FIXME()%f[%W]', group = 'MiniHipatternsFixme' }, - hack = { pattern = '%f[%w]()HACK()%f[%W]', group = 'MiniHipatternsHack' }, - todo = { pattern = '%f[%w]()TODO()%f[%W]', group = 'MiniHipatternsTodo' }, - note = { pattern = '%f[%w]()NOTE()%f[%W]', group = 'MiniHipatternsNote' }, + -- Highlight hex color strings (`#rrggbb`) using that color + hex_color = hipatterns.gen_highlighter.hex_color(), + }, + }) - -- Highlight hex color strings (`#rrggbb`) using that color - hex_color = hipatterns.gen_highlighter.hex_color(), - }, - }) + require("mini.sessions").setup({ + autowrite = false, + }) + vim.keymap.set("n", "us", function() + local default_name = require("mini.sessions").get_latest() or "Session.vim" + vim.ui.input({ prompt = "Session name: ", default = default_name }, function(input) + if input == nil then return end + require("mini.sessions").write(input) + end) + end, { desc = "Save session", silent = true }) + vim.keymap.set("n", "uS", function() + require("mini.sessions").read() + end, { desc = "Load session (latest)", silent = true }) - require('mini.sessions').setup({ - autowrite = false - }) - vim.keymap.set('n', 'us', function() - local default_name = require('mini.sessions').get_latest() or "Session.vim" - vim.ui.input({ prompt = "Session name: ", default = default_name }, function(input) - if input == nil then - return - end - require('mini.sessions').write(input) - end) - end, - { desc = 'Save session', silent = true }) - vim.keymap.set('n', 'uS', function() require('mini.sessions').read() end, - { desc = 'Load session (latest)', silent = true }) + vim.api.nvim_create_user_command("SessionSelect", function() + require("mini.sessions").select("read") + end, {}) - vim.api.nvim_create_user_command("SessionSelect", function() - require('mini.sessions').select('read') - end, {}) + vim.api.nvim_create_user_command("SessionDelete", function() + require("mini.sessions").select("delete") + end, {}) - vim.api.nvim_create_user_command("SessionDelete", function() - require('mini.sessions').select('delete') - end, {}) - - - vim.keymap.set('n', 'uz', function() - require('mini.misc').zoom() - end, - { desc = 'Toggle zoom', silent = true }) - end + vim.keymap.set("n", "uz", function() + require("mini.misc").zoom() + end, { desc = "Toggle zoom", silent = true }) + end, } diff --git a/configs/nvim/lua/aleidk/plugins/treesitter.lua b/configs/nvim/lua/aleidk/plugins/treesitter.lua index 012ccd0..7ca4043 100644 --- a/configs/nvim/lua/aleidk/plugins/treesitter.lua +++ b/configs/nvim/lua/aleidk/plugins/treesitter.lua @@ -42,11 +42,17 @@ return { }) vim.keymap.set({ "n", "x", "o" }, "]]", function() - ts_obj.move.goto_next({ "@block.outer", "@function.outer", "@class.outer" }, "textobjects") + require("nvim-treesitter-textobjects.move").goto_next( + { "@block.outer", "@function.outer", "@class.outer" }, + "textobjects" + ) end) vim.keymap.set({ "n", "x", "o" }, "[[", function() - ts_obj.move.goto_previous({ "@block.outer", "@function.outer", "@class.outer" }, "textobjects") + require("nvim-treesitter-textobjects.move").goto_previous( + { "@block.outer", "@function.outer", "@class.outer" }, + "textobjects" + ) end) local ts_repeat_move = require("nvim-treesitter-textobjects.repeatable_move") diff --git a/configs/systemd/user/niri.service.wants/hypridle.service b/configs/systemd/user/niri.service.wants/hypridle.service new file mode 120000 index 0000000..55da293 --- /dev/null +++ b/configs/systemd/user/niri.service.wants/hypridle.service @@ -0,0 +1 @@ +/usr/lib/systemd/user/hypridle.service \ No newline at end of file From b3df5795f27d799b6e5882d3f337375aa94e2db4 Mon Sep 17 00:00:00 2001 From: aleidk Date: Thu, 29 Jan 2026 12:26:43 -0300 Subject: [PATCH 24/28] add ssh-tunnel service and functions --- configs/containers/systemd/dev-databases.pod | 1 - configs/containers/systemd/dev-dbui.container | 21 ++++++-------- configs/fish/functions/ssh-tunnel.fish | 28 +++++++++++++++++++ .../systemd/user/database-ssh-tunnel@.service | 10 +++++++ 4 files changed, 47 insertions(+), 13 deletions(-) create mode 100644 configs/fish/functions/ssh-tunnel.fish create mode 100644 configs/systemd/user/database-ssh-tunnel@.service diff --git a/configs/containers/systemd/dev-databases.pod b/configs/containers/systemd/dev-databases.pod index c11ff1b..f547b3e 100644 --- a/configs/containers/systemd/dev-databases.pod +++ b/configs/containers/systemd/dev-databases.pod @@ -1,4 +1,3 @@ [Pod] PodName=databases -PublishPort=9090:3000 PublishPort=5432:5432 diff --git a/configs/containers/systemd/dev-dbui.container b/configs/containers/systemd/dev-dbui.container index 6a8b0f1..259e832 100644 --- a/configs/containers/systemd/dev-dbui.container +++ b/configs/containers/systemd/dev-dbui.container @@ -1,14 +1,11 @@ [Container] -Image=docker.io/dbgate/dbgate +Image=docker.io/adminneoorg/adminneo AutoUpdate=registry -Pod=dev-databases.pod -Environment=CONNECTIONS=POSTGRES -Environment=LABEL_POSTGRES="Localhost Postgres" -Environment=ENGINE_POSTGRES=postgres@dbgate-plugin-postgres -Environment=SERVER_POSTGRES=localhost -Environment=PORT_POSTGRES=5432 -Environment=USER_POSTGRES=postgres -Environment=PASSWORD_POSTGRES=1234 - -[Service] -ExecStartPost=/usr/bin/xdg-open http://localhost:9090 +Network=host +Environment=NEO_THEME=default +Environment=NEO_COLOR_VARIANT=green +Environment=NEO_JSON_VALUES_DETECTION=true +Environment=NEO_JSON_VALUES_AUTO_FORMAT=true +Environment=NEO_NAVIGATION_MODE=dual +Environment=NEO_PREFER_SELECTION=true +Environment=NEO_RELATION_LINKS=true diff --git a/configs/fish/functions/ssh-tunnel.fish b/configs/fish/functions/ssh-tunnel.fish new file mode 100644 index 0000000..fca446c --- /dev/null +++ b/configs/fish/functions/ssh-tunnel.fish @@ -0,0 +1,28 @@ +function ssh-tunnel + set -l label "Select SSH tunnel to activate:" + + set -l tunnel (fd . ~/.ssh/tunnels.d/ | fzf -d / --with-nth=6 --accept-nth=6 --nth=6 --preview='bat {}' --input-label=foo --input-label-pos=bottom | cut -d "." -f 1) + + if test -z $tunnel + return + end + + envsource "$HOME/.ssh/tunnels.d/$tunnel.conf" + + echo "Activating connection $tunnel..." + + if not systemctl --user is-active "database-ssh-tunnel@$tunnel.service" -q + systemctl --user start "database-ssh-tunnel@$tunnel.service" + end + + if test (string lower $DB_START_EXPLORER) = "true" + echo "Opening Databse in browser, password will be copied to the clipboard..." + + if not systemctl --user is-active "dev-dbui.service" -q + systemctl --user start "dev-dbui.service" + end + + wl-copy "$DB_PASSWORD" + xdg-open "http://localhost:8080?$DB_DRIVER=$TUNNEL_LOCAL_ADDRESS:$TUNNEL_LOCAL_PORT&username=$DB_USER&db=$DB_NAME&ns=public" + end +end diff --git a/configs/systemd/user/database-ssh-tunnel@.service b/configs/systemd/user/database-ssh-tunnel@.service new file mode 100644 index 0000000..7c1ce0e --- /dev/null +++ b/configs/systemd/user/database-ssh-tunnel@.service @@ -0,0 +1,10 @@ +[Unit] +Description=SSH Persistent port forward for %i, makes available remote port locally +After=network-online.target +Wants=network-online.target + +[Service] +EnvironmentFile=%h/.ssh/tunnels.d/%i.conf +ExecStart=/usr/bin/ssh -NT -o ExitOnForwardFailure=yes -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -L ${TUNNEL_LOCAL_ADDRESS}:${TUNNEL_LOCAL_PORT}:${TUNNEL_REMOTE_ADDRESS}:${TUNNEL_REMOTE_PORT} ${TUNNEL_SSH_HOST} +RestartSec=3 +Restart=always From 63a18416df91003d28f75eedd178a05b40c0a7fc Mon Sep 17 00:00:00 2001 From: aleidk Date: Fri, 30 Jan 2026 15:25:15 -0300 Subject: [PATCH 25/28] add rumdl as markdown linter/formatter --- .dotter/global.toml | 1 + configs/nvim/lazy-lock.json | 6 +- configs/nvim/lua/aleidk/options.lua | 5 + configs/nvim/lua/aleidk/plugins/formatter.lua | 2 +- configs/nvim/lua/aleidk/plugins/linters.lua | 50 ++--- configs/rumdl/rumdl.toml | 177 ++++++++++++++++++ 6 files changed, 212 insertions(+), 29 deletions(-) create mode 100644 configs/rumdl/rumdl.toml diff --git a/.dotter/global.toml b/.dotter/global.toml index a0de78a..66a80ff 100644 --- a/.dotter/global.toml +++ b/.dotter/global.toml @@ -65,6 +65,7 @@ "configs/lazygit" = "~/.config/lazygit" "configs/mise" = "~/.config/mise" "configs/nvim" = "~/.config/nvim" + "configs/rumdl" = "~/.config/rumdl" "configs/zed" = "~/.config/zed" [nvim-min.files] diff --git a/configs/nvim/lazy-lock.json b/configs/nvim/lazy-lock.json index 93288d1..181005e 100644 --- a/configs/nvim/lazy-lock.json +++ b/configs/nvim/lazy-lock.json @@ -3,7 +3,7 @@ "blink.compat": { "branch": "main", "commit": "08943fdf2eb00432d6205db6d0239434135416bd" }, "catppuccin": { "branch": "main", "commit": "faf15ab0201b564b6368ffa47b56feefc92ce3f4" }, "comment-box.nvim": { "branch": "main", "commit": "06bb771690bc9df0763d14769b779062d8f12bc5" }, - "conform.nvim": { "branch": "master", "commit": "a203480a350b03092e473bf3001733d547160a73" }, + "conform.nvim": { "branch": "master", "commit": "c2526f1cde528a66e086ab1668e996d162c75f4f" }, "flatten.nvim": { "branch": "main", "commit": "72527798e75b5e34757491947c2cb853ce21dc0e" }, "friendly-snippets": { "branch": "main", "commit": "de8fce94985873666bd9712ea3e49ee17aadb1ed" }, "fzf-lua": { "branch": "main", "commit": "758173f499d15410ecb50c5519a41b27c33e645d" }, @@ -11,7 +11,7 @@ "hardtime.nvim": { "branch": "main", "commit": "3541ad24faff78274669eceaf130502eb7f1261a" }, "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, "lazydev.nvim": { "branch": "main", "commit": "f59bd14a852ca43db38e3662395354cb2a9b13e0" }, - "mason-lspconfig.nvim": { "branch": "main", "commit": "b1d9a914b02ba5660f1e272a03314b31d4576fe2" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "c953789db7fd28eafe5eb5659846d34b5024b3cc" }, "mason.nvim": { "branch": "main", "commit": "ad7146aa61dcaeb54fa900144d768f040090bff0" }, "mini.nvim": { "branch": "main", "commit": "94cae4660a8b2d95dbbd56e1fbc6fcfa2716d152" }, "neogen": { "branch": "main", "commit": "dc50715c009f89b8111197fd2f282f6042daa7ea" }, @@ -19,7 +19,7 @@ "nvim-dap": { "branch": "master", "commit": "5dd4d50f2e6a2eaf9e57fad023d294ef371bda35" }, "nvim-dap-view": { "branch": "main", "commit": "390dae6bf67f3342ebb481159932ef0fe54822ba" }, "nvim-dap-virtual-text": { "branch": "master", "commit": "fbdb48c2ed45f4a8293d0d483f7730d24467ccb6" }, - "nvim-lint": { "branch": "master", "commit": "6b46370d02cd001509a765591a3ffc481b538794" }, + "nvim-lint": { "branch": "master", "commit": "b3292aac30b935d4cccf0904053d1c7930df8a20" }, "nvim-lspconfig": { "branch": "master", "commit": "c8503e63c6afab3ed34b49865a4a4edbb1ebf4a8" }, "nvim-treesitter": { "branch": "main", "commit": "802195d8f1980db25a7a39a55f9a25df21756c73" }, "nvim-treesitter-context": { "branch": "master", "commit": "66a9b5fa9e806918b5fe3dba00c6cce7e230abd2" }, diff --git a/configs/nvim/lua/aleidk/options.lua b/configs/nvim/lua/aleidk/options.lua index 87fc81e..d3fb9be 100644 --- a/configs/nvim/lua/aleidk/options.lua +++ b/configs/nvim/lua/aleidk/options.lua @@ -161,6 +161,11 @@ vim.lsp.config("rust-analyzer", { }, }, }) +vim.lsp.config("rumdl", { + cmd = { "rumdl", "server" }, + filetypes = { "markdown" }, + root_markers = { ".git" }, +}) vim.g.markdown_fenced_languages = { "ts=typescript", diff --git a/configs/nvim/lua/aleidk/plugins/formatter.lua b/configs/nvim/lua/aleidk/plugins/formatter.lua index f7add11..2679748 100644 --- a/configs/nvim/lua/aleidk/plugins/formatter.lua +++ b/configs/nvim/lua/aleidk/plugins/formatter.lua @@ -23,7 +23,7 @@ return { json = { "biome" }, jsonc = { "biome" }, lua = { "stylua" }, - markdown = { "markdownlint" }, + markdown = { "rumdl" }, php = { "pint" }, python = { "ruff_format", "ruff_organize_imports" }, rust = { "rustfmt" }, diff --git a/configs/nvim/lua/aleidk/plugins/linters.lua b/configs/nvim/lua/aleidk/plugins/linters.lua index f73dc84..d55af16 100644 --- a/configs/nvim/lua/aleidk/plugins/linters.lua +++ b/configs/nvim/lua/aleidk/plugins/linters.lua @@ -1,30 +1,30 @@ return { - "mfussenegger/nvim-lint", - event = "VeryLazy", - config = function() - local lint = require("lint") + "mfussenegger/nvim-lint", + event = "VeryLazy", + config = function() + local lint = require("lint") - lint.linters.gitlint.stdin = true - lint.linters.gitlint.args = { "--contrib", "contrib-title-conventional-commits", "--msg-filename", "-" } + lint.linters.gitlint.stdin = true + lint.linters.gitlint.args = { "--contrib", "contrib-title-conventional-commits", "--msg-filename", "-" } - lint.linters_by_ft = { - -- astro = { "eslint_d" }, - kotlin = { "ktlint" }, - python = { "ruff" }, - sh = { "shellcheck" }, - NeogitCommitMessage = { "gitlint" }, - gitcommit = { "gitlint" }, - markdown = { "markdownlint" }, - javascript = { "biomejs" }, - typescript = { "biomejs" }, - javascriptreact = { "biomejs" }, - typescriptreact = { "biomejs" }, - } + lint.linters_by_ft = { + -- astro = { "eslint_d" }, + kotlin = { "ktlint" }, + python = { "ruff" }, + sh = { "shellcheck" }, + NeogitCommitMessage = { "gitlint" }, + gitcommit = { "gitlint" }, + -- markdown = { "rumdl" }, runned as LSP + javascript = { "biomejs" }, + typescript = { "biomejs" }, + javascriptreact = { "biomejs" }, + typescriptreact = { "biomejs" }, + } - vim.api.nvim_create_autocmd({ "BufWritePost" }, { - callback = function() - require("lint").try_lint() - end, - }) - end, + vim.api.nvim_create_autocmd({ "BufWritePost" }, { + callback = function() + require("lint").try_lint() + end, + }) + end, } diff --git a/configs/rumdl/rumdl.toml b/configs/rumdl/rumdl.toml new file mode 100644 index 0000000..8e90d60 --- /dev/null +++ b/configs/rumdl/rumdl.toml @@ -0,0 +1,177 @@ +[global] + disable = [ ] + enable = [ ] + exclude = [ ] + flavor = "gfm" + include = [ ] + respect_gitignore = true + +[MD001] + front-matter-title = true + +[MD003] + # Heading style should be consistent + style = "atx" + +[MD004] + style = "dash" + +[MD007] + start-indented = false + style = "text-aligned" + +[MD009] + br-spaces = 2 + list-item-empty-lines = false + strict = false + +[MD010] + spaces-per-tab = 4 + +[MD012] + maximum = 1 + +[MD013] + abbreviations = [ ] + code-blocks = true + headings = true + length-mode = "visual" + line-length = 80 + paragraphs = false + reflow = true + reflow-mode = "sentence-per-line" + strict = false + tables = false + +[MD014] + show-output = true + +[MD022] + allowed-at-start = true + lines-above = 1 + lines-below = 1 + +[MD024] + allow-different-nesting = false + siblings-only = true + +[MD025] + allow-document-sections = false + allow-with-separators = false + front-matter-title = "title" + level = 1 + +[MD026] + punctuation = ".,;:!" + +[MD029] + style = "one-or-ordered" + +[MD030] + ol-multi = 1 + ol-single = 1 + ul-multi = 1 + ul-single = 1 + +[MD031] + list-items = true + +[MD032] + allow-lazy-continuation = true + +[MD033] + allowed-elements = [ ] + disallowed-elements = [ ] + +[MD035] + style = "consistent" + +[MD036] + punctuation = ".,;:!?" + +[MD041] + front-matter-title = "title" + front-matter-title-pattern = "" + level = 1 + +[MD043] + headings = [ ] + match-case = false + +[MD044] + code-blocks = false + html-comments = false + html-elements = true + names = [ ] + +[MD045] + placeholder-text = "TODO: Add image description" + +[MD046] + style = "fenced" + +[MD048] + style = "consistent" + +[MD049] + # Italic Text + style = "underscore" + +[MD050] + # Bold Text + style = "asterisk" + +[MD051] + anchor-style = "github" + +[MD053] + ignored-definitions = [ ] + +[MD054] + autolink = true + collapsed = true + full = true + inline = true + shortcut = true + url-inline = true + +[MD055] + style = "consistent" + +[MD058] + minimum-after = 1 + minimum-before = 1 + +[MD059] + prohibited-texts = [ "click here", "here", "link", "more" ] + +[MD060] + column-align = "auto" + enabled = true + max-width = 0 + style = "aligned" + +[MD061] + case-sensitive = true + terms = [ ] + +[MD063] + enabled = true + ignore-words = [ ] + lowercase-words = [ "a", "an", "and", "as", "at", "but", "by", "for", "from", "in", "into", "nor", "of", "off", "on", "or", "per", "so", "the", "to", "up", "via", "with", "yet" ] + max-level = 6 + min-level = 1 + preserve-cased-words = true + style = "title_case" + +[MD064] + allow-sentence-double-space = false + +[MD072] + enabled = true + +[md073] + enabled = true + enforce-order = true + max-level = 4 + min-level = 2 From 876fd4faf4016daa21b7636fb1285af241552b23 Mon Sep 17 00:00:00 2001 From: aleidk Date: Fri, 30 Jan 2026 16:45:03 -0300 Subject: [PATCH 26/28] add compose key to niri --- configs/fish/functions/ssh-tunnel.fish | 2 +- configs/niri/base/options.kdl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configs/fish/functions/ssh-tunnel.fish b/configs/fish/functions/ssh-tunnel.fish index fca446c..113d4eb 100644 --- a/configs/fish/functions/ssh-tunnel.fish +++ b/configs/fish/functions/ssh-tunnel.fish @@ -7,7 +7,7 @@ function ssh-tunnel return end - envsource "$HOME/.ssh/tunnels.d/$tunnel.conf" + envsource "$HOME/.ssh/tunnels.d/$tunnel.conf" > /dev/null echo "Activating connection $tunnel..." diff --git a/configs/niri/base/options.kdl b/configs/niri/base/options.kdl index 13d0ac9..c7c58a1 100644 --- a/configs/niri/base/options.kdl +++ b/configs/niri/base/options.kdl @@ -45,7 +45,7 @@ input { keyboard { xkb { layout "latam" - options "caps:escape" + options "caps:escape,compose:lctrl-altgr" } numlock } From 8e8e637dbedfce6219aa15435cdd7590b77882dc Mon Sep 17 00:00:00 2001 From: aleidk Date: Tue, 3 Feb 2026 13:06:37 -0300 Subject: [PATCH 27/28] minor updates --- configs/fish/functions/mega-dl.fish | 31 +++++++++++++++++++++++++++++ configs/noctalia/plugins.json | 2 +- configs/noctalia/settings.json | 23 ++++++++++++++++++--- 3 files changed, 52 insertions(+), 4 deletions(-) create mode 100644 configs/fish/functions/mega-dl.fish diff --git a/configs/fish/functions/mega-dl.fish b/configs/fish/functions/mega-dl.fish new file mode 100644 index 0000000..abe70ac --- /dev/null +++ b/configs/fish/functions/mega-dl.fish @@ -0,0 +1,31 @@ +function mega-dl --argument-names link + set server "t-800" + + if test -z $link + echo "No arguments provided!" + return + end + + # rotate vpn proxy exit node to get new ip + echo "Requesting new public ip to VPN provider" + curl -s -X PUT $server:8000/v1/vpn/status --json '{"status": "stopped"}' > /dev/null + curl -s -X PUT $server:8000/v1/vpn/status --json '{"status": "running"}' > /dev/null + + while true + set -l response (curl -s $server:8000/v1/publicip/ip) + set -l public_ip (echo $response | jq -r ".public_ip") + set -l country (echo $response | jq -r ".country") + set -l city (echo $response | jq -r ".city") + + # wait for the connection to be stablished + if test -z $public_ip + sleep 0.2 + else + echo -e "New IP is $public_ip from $country/$city\n" + break + end + end + + # use vpn as proxy + megatools dl --proxy http://$server:8888 $link +end diff --git a/configs/noctalia/plugins.json b/configs/noctalia/plugins.json index 4b43c99..04a5604 100644 --- a/configs/noctalia/plugins.json +++ b/configs/noctalia/plugins.json @@ -2,7 +2,7 @@ "sources": [ { "enabled": true, - "name": "Official Noctalia Plugins", + "name": "Noctalia Plugins", "url": "https://github.com/noctalia-dev/noctalia-plugins" } ], diff --git a/configs/noctalia/settings.json b/configs/noctalia/settings.json index 3cf2b80..7e05bf9 100644 --- a/configs/noctalia/settings.json +++ b/configs/noctalia/settings.json @@ -1,12 +1,15 @@ { "appLauncher": { "autoPasteClipboard": false, + "clipboardWatchImageCommand": "wl-paste --type image --watch cliphist store", + "clipboardWatchTextCommand": "wl-paste --type text --watch cliphist store", "clipboardWrapText": true, "customLaunchPrefix": "", "customLaunchPrefixEnabled": false, "enableClipPreview": true, "enableClipboardHistory": true, "enableSettingsSearch": true, + "enableWindowsSearch": true, "iconMode": "native", "ignoreMouseInput": false, "pinnedApps": [ @@ -31,11 +34,16 @@ "volumeStep": 5 }, "bar": { + "autoHideDelay": 500, + "autoShowDelay": 150, "backgroundOpacity": 0, + "barType": "floating", "capsuleOpacity": 1, "density": "default", - "exclusive": true, + "displayMode": "always_visible", "floating": true, + "frameRadius": 12, + "frameThickness": 8, "hideOnOverview": false, "marginHorizontal": 3, "marginVertical": 5, @@ -64,14 +72,19 @@ { "characterCount": 2, "colorizeIcons": false, + "emptyColor": "secondary", "enableScrollWheel": true, + "focusedColor": "primary", "followFocusedScreen": false, "groupedBorderOpacity": 1, "hideUnoccupied": false, "iconScale": 0.8, "id": "Workspace", "labelMode": "none", + "occupiedColor": "secondary", + "reverseScroll": false, "showApplications": false, + "showBadge": true, "showLabelsOnlyWhenOccupied": true, "unfocusedIconsOpacity": 1 }, @@ -122,7 +135,8 @@ "hideWhenZero": false, "hideWhenZeroUnread": false, "id": "NotificationHistory", - "showUnreadBadge": true + "showUnreadBadge": true, + "unreadBadgeColor": "primary" }, { "displayMode": "onhover", @@ -271,8 +285,10 @@ }, "general": { "allowPanelsOnScreenWithoutBar": true, + "allowPasswordWithFprintd": false, "animationDisabled": false, "animationSpeed": 1, + "autoStartAuth": false, "avatarImage": "/home/aleidk/.face", "boxRadiusRatio": 1, "compactLockScreen": false, @@ -428,7 +444,7 @@ "showHeader": true, "showNumberLabels": true }, - "settingsVersion": 44, + "settingsVersion": 46, "systemMonitor": { "cpuCriticalThreshold": 90, "cpuPollingInterval": 3000, @@ -491,6 +507,7 @@ "setWallpaperOnAllMonitors": true, "showHiddenFiles": false, "solidColor": "#1a1a2e", + "sortOrder": "name", "transitionDuration": 1500, "transitionEdgeSmoothness": 0.05, "transitionType": "random", From c5bc93250ea4ff441fb0f2e995ef1241822cb7b4 Mon Sep 17 00:00:00 2001 From: aleidk Date: Wed, 4 Feb 2026 12:11:22 -0300 Subject: [PATCH 28/28] update zed config --- configs/noctalia/pam/password.conf | 3 - configs/zed | 1 - configs/zed/config.json | 116 +++++++++++++ configs/zed/keymap.json | 188 +++++++++++++++++++++ configs/zed/settings.json | 253 +++++++++++++++++++++++++++++ configs/zed/themes/.keep | 0 szurubooru_toolkit.log | 0 7 files changed, 557 insertions(+), 4 deletions(-) delete mode 100644 configs/noctalia/pam/password.conf delete mode 120000 configs/zed create mode 100644 configs/zed/config.json create mode 100644 configs/zed/keymap.json create mode 100644 configs/zed/settings.json create mode 100644 configs/zed/themes/.keep create mode 100644 szurubooru_toolkit.log diff --git a/configs/noctalia/pam/password.conf b/configs/noctalia/pam/password.conf deleted file mode 100644 index a659b71..0000000 --- a/configs/noctalia/pam/password.conf +++ /dev/null @@ -1,3 +0,0 @@ -auth sufficient pam_fprintd.so timeout=-1 -auth sufficient /run/current-system/sw/lib/security/pam_fprintd.so timeout=-1 # for NixOS -auth required pam_unix.so diff --git a/configs/zed b/configs/zed deleted file mode 120000 index 2283778..0000000 --- a/configs/zed +++ /dev/null @@ -1 +0,0 @@ -/home/aleidk/.config/dotfiles/Configs/zed/.config/zed \ No newline at end of file diff --git a/configs/zed/config.json b/configs/zed/config.json new file mode 100644 index 0000000..2a6e27f --- /dev/null +++ b/configs/zed/config.json @@ -0,0 +1,116 @@ +// Zed settings +// +// For information on how to configure Zed, see the Zed +// documentation: https://zed.dev/docs/configuring-zed +// +// To see all of Zed's default settings without changing your +// custom settings, run `zed: open default settings` from the +// command palette (cmd-shift-p / ctrl-shift-p) +{ + "git": { + "inline_blame": { + "enabled": false + } + }, + "agent": { + "button": false, + "model_parameters": [] + }, + "collaboration_panel": { + "button": false + }, + "notification_panel": { + "button": false + }, + "git_panel": { + "status_style": "icon" + }, + "bottom_dock_layout": "contained", + "preview_tabs": { + "enable_preview_from_file_finder": true + }, + "tabs": { + "show_diagnostics": "all", + "file_icons": true, + "git_status": true + }, + "search": { + "button": true + }, + "diagnostics": { + "button": true + }, + "debugger": { + "button": true + }, + "status_bar": { + "cursor_position_button": true, + "active_language_button": true + }, + "project_panel": { + "hide_root": true, + "starts_open": false, + "entry_spacing": "standard", + "hide_gitignore": false, + "button": true + }, + "toolbar": { + "code_actions": true + }, + "horizontal_scroll_margin": 6.0, + "vertical_scroll_margin": 5.0, + "use_system_window_tabs": false, + "tab_bar": { + "show_nav_history_buttons": false, + "show": true + }, + "title_bar": { + "show_branch_icon": true, + "show_branch_name": true, + "show_project_items": true, + "show_onboarding_banner": false, + "show_menus": false, + "show_user_picture": false, + "show_sign_in": false + }, + "terminal": { + "button": true, + "font_size": 12.0 + }, + "indent_guides": { + "coloring": "indent_aware" + }, + "tab_size": 2, + "scrollbar": { + "show": "never" + }, + "auto_signature_help": true, + "ui_font_family": "Adwaita Sans", + "buffer_font_family": "JetBrainsMono Nerd Font", + "icon_theme": { + "mode": "system", + "light": "Catppuccin Macchiato", + "dark": "Catppuccin Macchiato" + }, + "ssh_connections": [ + { + "host": "GetDTE-Prod-App", + "args": [], + "projects": [ + { + "paths": ["/bcn/invoice-chile/scripts"] + } + ] + } + ], + "disable_ai": true, + "auto_update": false, + "vim_mode": true, + "ui_font_size": 16.0, + "buffer_font_size": 14.0, + "theme": { + "mode": "system", + "light": "Catppuccin Macchiato", + "dark": "Catppuccin Macchiato" + } +} diff --git a/configs/zed/keymap.json b/configs/zed/keymap.json new file mode 100644 index 0000000..42d207c --- /dev/null +++ b/configs/zed/keymap.json @@ -0,0 +1,188 @@ +[ + { + "context": "Editor && (vim_mode == normal || vim_mode == visual) && !VimWaiting && !menu", + "bindings": { + // Git + "enter": "vim::PushSneak", + // Toggle inlay hints + "space u i": "editor::ToggleInlayHints", + + // NOTE: Toggle Zen mode, not fully working yet + "space u z": "workspace::ToggleZoom", + + // Open recent project + "space f p": "projects::OpenRecent", + // Search word under cursor + "space f w": "pane::DeploySearch", + + // Go to file with `gf` + "g f": "editor::OpenExcerpts" + } + }, + { + // move context menus with Ctrl + hjkl in completions + "context": "(vim_mode == normal || vim_mode == insert) && (showing_code_actions || showing_completions)", + "bindings": { + "ctrl-h": "editor::ContextMenuPrevious", + "ctrl-j": "editor::ContextMenuNext", + "ctrl-k": "editor::ContextMenuPrevious", + "ctrl-l": "editor::ContextMenuNext" + } + }, + { + "context": "Editor && (vim_mode == normal || vim_mode == insert)", + "bindings": { + "ctrl-shift-v": "editor::Paste" + } + }, + { + // move context menus with Ctrl + hjkl in menus + "context": "Picker || menu", + "bindings": { + "ctrl-h": "menu::SelectPrevious", + "ctrl-j": "menu::SelectNext", + "ctrl-k": "menu::SelectPrevious", + "ctrl-l": "menu::SelectNext" + } + }, + { + "context": "Editor && VimControl && !VimWaiting && !menu", + "bindings": { + "|": "pane::SplitVertical", + + // Window movement bindings + // Ctrl jklk to move between panes + "ctrl-h": "workspace::ActivatePaneLeft", + "ctrl-l": "workspace::ActivatePaneRight", + "ctrl-k": "workspace::ActivatePaneUp", + "ctrl-j": "workspace::ActivatePaneDown", + + "space e": "pane::RevealInProjectPanel", + + // +LSP + "space l a": "editor::ToggleCodeActions", + "space l r": "editor::Rename", + "g d": "editor::GoToDefinition", + "g D": "editor::GoToDefinitionSplit", + "g i": "editor::GoToImplementation", + "g I": "editor::GoToImplementationSplit", + "g t": "editor::GoToTypeDefinition", + "g T": "editor::GoToTypeDefinitionSplit", + "g r": "editor::FindAllReferences", + "space l j": "editor::GoToDiagnostic", + "space l k": "editor::GoToPreviousDiagnostic", + + // Symbol search + "space f o": "outline::Toggle", + "space f O": "project_symbols::Toggle", + + // Diagnostic + "space f q": "diagnostics::Deploy", + + // +Git + // Git prev/next hunk + "space g j": "editor::GoToHunk", + "space g k": "editor::GoToPreviousHunk", + + // + Buffers + // Switch between buffers + "shift-h": "pane::ActivatePreviousItem", + "shift-l": "pane::ActivateNextItem", + + // Close active panel + "space b c": "pane::CloseActiveItem", + "space b d": "pane::CloseActiveItem", + // Close other items + "space b o": "pane::CloseOtherItems", + // Save file + "ctrl-s": "workspace::Save", + // File finder + "space f f": "file_finder::Toggle", + // Project search + "space f W": "pane::DeploySearch" + } + }, + { + "context": "Editor && vim_mode == visual", + "bindings": { + "shift-j": "editor::MoveLineDown", + "shift-k": "editor::MoveLineUp" + } + }, + // Empty pane, set of keybindings that are available when there is no active editor + { + "context": "(EmptyPane || SharedScreen) && vim_mode != insert", + "bindings": { + // Open file finder + "space f f": "file_finder::Toggle", + // Open recent project + "space f p": "projects::OpenRecent" + } + }, + { + "context": "Workspace", + "bindings": { + "ctrl-t": "terminal_panel::ToggleFocus" + } + }, + { + "context": "Terminal", + "bindings": { + "ctrl-h": "workspace::ActivatePaneLeft", + "ctrl-l": "workspace::ActivatePaneRight", + "ctrl-k": "workspace::ActivatePaneUp", + "ctrl-j": "workspace::ActivatePaneDown" + } + }, + // File panel (netrw) + { + "context": "ProjectPanel && not_editing", + "bindings": { + "a": "project_panel::NewFile", + "A": "project_panel::NewDirectory", + "r": "project_panel::Rename", + "d": "project_panel::Delete", + "x": "project_panel::Cut", + "c": "project_panel::Copy", + "p": "project_panel::Paste", + "y": "workspace::CopyRelativePath", + "Y": "workspace::CopyPath", + "o": ["project_panel::Open", "workspace::toggleLeftDock"], + // Close project panel as project file panel on the right + // Navigate between panel + "ctrl-h": "workspace::ActivatePaneLeft", + "ctrl-l": "workspace::ActivatePaneRight", + "ctrl-k": "workspace::ActivatePaneUp", + "ctrl-j": "workspace::ActivatePaneDown", + "space e": "workspace::ToggleLeftDock" + } + }, + // Panel nagivation + { + "context": "Dock", + "bindings": { + "ctrl-w h": "workspace::ActivatePaneLeft", + "ctrl-w l": "workspace::ActivatePaneRight", + "ctrl-w k": "workspace::ActivatePaneUp", + "ctrl-w j": "workspace::ActivatePaneDown" + } + }, + { + "context": "vim_operator == a || vim_operator == i || vim_operator == cs", + "bindings": { + // mini.ai plugin behavior + "\"": "vim::MiniQuotes", + "[": "vim::MiniBrackets", + "]": "vim::MiniBrackets", + "q": "vim::MiniQuotes", + "b": "vim::MiniBrackets" + } + }, + { + "context": "vim_mode == visual", + "bindings": { + "shift-s": "vim::PushAddSurrounds", + "g x": "vim::Exchange" + } + } +] diff --git a/configs/zed/settings.json b/configs/zed/settings.json new file mode 100644 index 0000000..7a44ad3 --- /dev/null +++ b/configs/zed/settings.json @@ -0,0 +1,253 @@ +// Zed settings +// +// For information on how to configure Zed, see the Zed +// documentation: https://zed.dev/docs/configuring-zed +// +// To see all of Zed's default settings without changing your +// custom settings, run `zed: open default settings` from the +// command palette (cmd-shift-p / ctrl-shift-p) +{ + "zoomed_padding": false, + "active_pane_modifiers": { + "border_size": -1.0 + }, + "window_decorations": "client", + "close_on_file_delete": true, + "file_finder": { + "modal_max_width": "medium" + }, + "use_smartcase_search": true, + "colorize_brackets": true, + "show_whitespaces": "selection", + "always_treat_brackets_as_autoclosed": false, + "vim": { + "use_smartcase_find": true + }, + "sticky_scroll": { + "enabled": true + }, + "scroll_beyond_last_line": "vertical_scroll_margin", + "which_key": { + "enabled": true + }, + "rounded_selection": true, + "current_line_highlight": "gutter", + "cursor_shape": "bar", + "session": { + "trust_all_worktrees": true + }, + "lsp_document_colors": "inlay", + "inlay_hints": { + "show_background": false, + "show_other_hints": true, + "show_parameter_hints": true, + "show_type_hints": true, + "show_value_hints": true, + "enabled": true, + }, + "languages": { + "PHP": { + "inlay_hints": { + "enabled": true, + }, + }, + "Markdown": { + "enable_language_server": true, + "language_servers": ["rumdl"], + "formatter": "language_server", + "format_on_save": "on", + }, + }, + "git": { + "inline_blame": { + "enabled": false, + }, + }, + "agent": { + "button": true, + "model_parameters": [], + }, + "collaboration_panel": { + "button": false, + }, + "notification_panel": { + "button": false, + }, + "git_panel": { + "tree_view": true, + "collapse_untracked_diff": false, + "sort_by_path": false, + "status_style": "label_color", + }, + "bottom_dock_layout": "contained", + "preview_tabs": { + "enable_preview_from_file_finder": true, + }, + "tabs": { + "show_diagnostics": "errors", + "file_icons": true, + "git_status": true, + }, + "search": { + "center_on_match": true, + "button": false, + }, + "diagnostics": { + "inline": { + "min_column": 0, + "padding": 4, + "enabled": true, + }, + "button": true, + }, + "debugger": { + "button": true, + }, + "status_bar": { + "cursor_position_button": true, + "active_language_button": true, + }, + "project_panel": { + "sort_mode": "directories_first", + "hide_hidden": false, + "show_diagnostics": "errors", + "hide_root": true, + "starts_open": false, + "entry_spacing": "standard", + "hide_gitignore": false, + "button": true, + }, + "toolbar": { + "breadcrumbs": true, + "selections_menu": true, + "quick_actions": false, + "code_actions": true, + }, + "horizontal_scroll_margin": 25.0, + "vertical_scroll_margin": 15.0, + "use_system_window_tabs": false, + "tab_bar": { + "show_pinned_tabs_in_separate_row": false, + "show_tab_bar_buttons": false, + "show_nav_history_buttons": false, + "show": true, + }, + "title_bar": { + "show_user_menu": false, + "show_branch_icon": true, + "show_branch_name": true, + "show_project_items": true, + "show_onboarding_banner": false, + "show_menus": false, + "show_user_picture": false, + "show_sign_in": false, + }, + "terminal": { + "toolbar": { + "breadcrumbs": false + }, + "button": true, + "font_size": 14.0, + }, + "indent_guides": { + "active_line_width": 1, + "background_coloring": "disabled", + "coloring": "fixed", + }, + "tab_size": 2, + "scrollbar": { + "show": "never", + }, + "auto_signature_help": true, + "ui_font_family": "DejaVu Sans", + "buffer_font_family": "JetBrainsMono Nerd Font", + "icon_theme": { + "mode": "system", + "light": "Catppuccin Macchiato", + "dark": "Catppuccin Macchiato", + }, + "ssh_connections": [ + { + "host": "GetDTE-Prod-App", + "args": [], + "projects": [ + { + "paths": ["/bcn/invoice-chile/scripts"], + }, + { + "paths": ["/bcn/workflow"], + }, + { + "paths": ["/bcn/workflow/piloto/php/./"], + }, + ], + }, + { + "host": "t-800", + "args": [], + "projects": [ + { + "paths": ["/opt/stacks"], + }, + ], + "nickname": "T-800", + }, + { + "host": "getwfr-2-piloto", + "args": [], + "projects": [], + }, + { + "host": "saria", + "args": [], + "projects": [ + { + "paths": ["/opt/stacks"], + }, + ], + "nickname": "Saria", + }, + { + "host": "getwfr-2-prod", + "args": [], + "projects": [ + { + "paths": ["/bcn/workflow/produccion/php/./"], + }, + ], + }, + ], + "disable_ai": false, + "auto_update": false, + "vim_mode": true, + "ui_font_size": 16.0, + "buffer_font_size": 14.0, + "theme": { + "mode": "system", + "light": "Catppuccin Macchiato", + "dark": "Catppuccin Macchiato", + }, + "lsp": { + "rumdl": { + "binary": { + "path": "rumdl", + "arguments": ["server"], + }, + }, + "rust-analyzer": { + "enable_lsp_tasks": true, + "initialization_options": { + "inlayHints": { + "maxLength": null, + "lifetimeElisionHints": { + "enable": "skip_trivial", + "useParameterNames": true, + }, + "closureReturnTypeHints": { + "enable": "always", + }, + }, + }, + }, + }, +} diff --git a/configs/zed/themes/.keep b/configs/zed/themes/.keep new file mode 100644 index 0000000..e69de29 diff --git a/szurubooru_toolkit.log b/szurubooru_toolkit.log new file mode 100644 index 0000000..e69de29