From 25483702ac1a802c5a49a7674e6058150f7e71ee Mon Sep 17 00:00:00 2001 From: Bloxx12 Date: Tue, 1 Jul 2025 08:43:46 +0200 Subject: [PATCH] config dump --- config.kdl | 560 ++++++++++++++++++++++++++++---------------- helix-config.toml | 69 ++++++ languages.toml | 240 +++++++++++++++++++ nushell/atuin.nu | 105 +++++++++ nushell/config.nu | 462 ++++++++++++++++++++++++++++++++++++ nushell/env.nu | 26 ++ nushell/starship.nu | 44 ++++ nushell/zoxide.nu | 57 +++++ safe.toml | 61 +++++ 9 files changed, 1416 insertions(+), 208 deletions(-) create mode 100644 helix-config.toml create mode 100644 languages.toml create mode 100644 nushell/atuin.nu create mode 100644 nushell/config.nu create mode 100644 nushell/env.nu create mode 100644 nushell/starship.nu create mode 100644 nushell/zoxide.nu create mode 100644 safe.toml diff --git a/config.kdl b/config.kdl index 8f834ac..180da60 100644 --- a/config.kdl +++ b/config.kdl @@ -1,31 +1,26 @@ input { keyboard { xkb { - layout "gb,ru,de,us" - variant ",phonetic_winkeys,,dvorak" - options "grp:rctrl_rshift_toggle,,caps:escape, " - // compose:ralt -// compose:102 + layout "us,ru" + variant ",phonetic_winkeys" + options "grp:rctrl_rshift_toggle, compose:102" } - repeat-rate 60 - repeat-delay 200 + repeat-rate 60 + repeat-delay 200 + numlock } - touchpad { tap } - - // focus-follows-mouse max-scroll-amount="0%" - focus-follows-mouse + // focus-follows-mouse + focus-follows-mouse max-scroll-amount="0%" } - // Laptop output "eDP-1" { mode "1920x1080@59.999" scale 1 position x=0 y=0 } - // PC output "DP-2" { mode "1920x1080@59.999" @@ -37,249 +32,398 @@ output "HDMI-A-1" { scale 1 position x=1920 y=0 } - layout { - gaps 8 - + gaps 0 center-focused-column "on-overflow" - + focus-ring { + width 2 + active-color "#f9e2af" + inactive-color "transparent" + active-gradient from="#E5989B" to="#FFB4A2" angle=45 relative-to="workspace-view" in="oklch longer hue" + } + border { + width 1 + active-color "#000" + inactive-color "#000" + } + tab-indicator { + width 2 + gap 4 + gaps-between-tabs 2 + } + shadow { + on + } + insert-hint { + color "#ffc87f80" + gradient from="#f38ba880" to="#f9e2af80" angle=45 relative-to="workspace-view" + } preset-column-widths { + proportion 0.33333 proportion 0.5 proportion 0.66667 - proportion 0.33333 } - - default-column-width { proportion 0.5; } - - focus-ring { - off - } - - border { - width 4 - active-color "ffc87f" - inactive-color "#505050" + default-column-width { + proportion 0.5 } } - - // xwayland stuff spawn-at-startup "xwayland-satellite" spawn-at-startup "avizo-service" spawn-at-startup "keepassxc" spawn-at-startup "startxfce4" - - +spawn-at-startup "bash" "-c" "quickshell --path ~/repos/projects/nichts/modules/style/quickshell/shell" +spawn-at-startup "swww-daemon" +spawn-at-startup "swww-daemon" "--namespace" "overview" environment { DISPLAY ":0" } - +layer-rule { + match namespace="overview$" + place-within-backdrop true +} // prefer no client side decorations prefer-no-csd - -// no saving screenshots -screenshot-path null - - switch-events { - lid-close { spawn "swaylock"; } + lid-close { + spawn "swaylock" + } +} +overview { + zoom 0.65 + backdrop-color "#777777" } - - workspace "main" workspace "scratch" workspace "browser" workspace "social" -workspace "keepass" +workspace "keepassxc" workspace "infra" workspace "multimedia" - animations { - off - slowdown 1.0 + // off - window-open { - // duration-ms 1250 - // curve "linear" - - custom-shader r" - vec4 open_color(vec3 coords_geo, vec3 size_geo) { - // Get color from the window texture. - vec3 coords_tex = niri_geo_to_tex * coords_geo; - vec4 color = texture2D(niri_tex, coords_tex.st); - - vec2 coords = (coords_geo.xy - vec2(0.5, 0.5)) * size_geo.xy * 2.0; - coords = coords / length(size_geo.xy); - float p = niri_clamped_progress; - if (p * p <= dot(coords, coords)) - color = vec4(0.0); - - return color; - } - " - } - workspace-switch { - spring damping-ratio=1.0 stiffness=1000 epsilon=0.0001 - } } - // Open the Firefox picture-in-picture player as floating by default. window-rule { - match app-id=r#"librewolf$"# title="^Picture-in-Picture$" + match app-id="librewolf$" title="^Picture-in-Picture$" open-floating true open-on-workspace "browser" } - window-rule { - match app-id=r#"^org\.keepassxc\.KeePassXC$"# + match app-id="org.keepassxc.KeePassXC" block-out-from "screen-capture" - open-on-workspace "keepass" + open-on-workspace "keepassxc" } - hotkey-overlay { skip-at-startup } - cursor { xcursor-theme "BreezeX-RosePine-Linux" xcursor-size 32 - hide-when-typing } - binds { - Mod+Shift+Slash { show-hotkey-overlay; } - - Mod+Return { spawn "foot"; } - Mod+D { spawn "fuzzel"; } - Super+Alt+L { spawn "swaylock"; } - + Mod+Shift+Slash { + show-hotkey-overlay + } + // Mod+Return { + // spawn "foot" + // } + Mod+Return { + spawn "ghostty" + } + Mod+D { + spawn "bash" "-c" "quickshell --path ~/repos/projects/nichts/modules/style/quickshell/shell msg launcher open" + } + Mod+Alt+L { + spawn "swaylock" + } // Audio - XF86AudioRaiseVolume allow-when-locked=true { spawn "volumectl" "-u" "up"; } - XF86AudioLowerVolume allow-when-locked=true { spawn "volumectl" "-u" "down"; } - XF86AudioMute allow-when-locked=true { spawn "volumectl" "toggle-mute"; } - XF86AudioMicMute allow-when-locked=true { spawn "volumectl" "-m" "toggle-mute"; } - - XF86AudioPlay allow-when-locked=true { spawn "playerctl" "play-pause"; } - XF86AudioNext allow-when-locked=true { spawn "playerctl" "next"; } - XF86AudioPrev allow-when-locked=true { spawn "playerctl" "previous"; } - + XF86AudioRaiseVolume allow-when-locked=true { + spawn "volumectl" "-u" "up" + } + XF86AudioLowerVolume allow-when-locked=true { + spawn "volumectl" "-u" "down" + } + XF86AudioMute allow-when-locked=true { + spawn "volumectl" "toggle-mute" + } + XF86AudioMicMute allow-when-locked=true { + spawn "volumectl" "-m" "toggle-mute" + } + XF86AudioPlay allow-when-locked=true { + spawn "playerctl" "play-pause" + } + XF86AudioNext allow-when-locked=true { + spawn "playerctl" "next" + } + XF86AudioPrev allow-when-locked=true { + spawn "playerctl" "previous" + } // Monitor brightness - XF86MonBrightnessUp allow-when-locked=true { spawn "lightctl" "up"; } - XF86MonBrightnessDown allow-when-locked=true { spawn "lightctl" "down"; } - - Mod+Q { close-window; } - - 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+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+Ctrl+H { focus-monitor-left; } - Mod+Ctrl+J { focus-monitor-down; } - Mod+Ctrl+K { focus-monitor-up; } - Mod+Ctrl+L { focus-monitor-right; } - - Mod+Shift+Ctrl+Left { move-column-to-monitor-left; } - Mod+Shift+Ctrl+Down { move-column-to-monitor-down; } - Mod+Shift+Ctrl+Up { move-column-to-monitor-up; } - Mod+Shift+Ctrl+Right { move-column-to-monitor-right; } - - Mod+Shift+Ctrl+H { move-column-to-monitor-left; } - Mod+Shift+Ctrl+J { move-column-to-monitor-down; } - Mod+Shift+Ctrl+K { move-column-to-monitor-up; } - Mod+Shift+Ctrl+L { move-column-to-monitor-right; } - - - Mod+Page_Down { focus-workspace-down; } - Mod+Page_Up { focus-workspace-up; } - Mod+Shift+Page_Down { move-column-to-workspace-down; } - Mod+Shift+Page_Up { move-column-to-workspace-up; } - - Mod+U { focus-workspace-down; } - Mod+I { focus-workspace-up; } - Mod+Shift+U { move-column-to-workspace-down; } - Mod+Shift+I { move-column-to-workspace-up; } - - Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; } - Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; } - Mod+Shift+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; } - Mod+Shift+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; } - - Mod+WheelScrollRight { focus-column-right; } - Mod+WheelScrollLeft { focus-column-left; } - Mod+Shift+WheelScrollRight { move-column-right; } - Mod+Shift+WheelScrollLeft { move-column-left; } - - 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-column-to-workspace 1; } - Mod+Shift+2 { move-column-to-workspace 2; } - Mod+Shift+3 { move-column-to-workspace 3; } - Mod+Shift+4 { move-column-to-workspace 4; } - Mod+Shift+5 { move-column-to-workspace 5; } - Mod+Shift+6 { move-column-to-workspace 6; } - Mod+Shift+7 { move-column-to-workspace 7; } - Mod+Shift+8 { move-column-to-workspace 8; } - Mod+Shift+9 { move-column-to-workspace 9; } - - - Mod+BracketLeft { consume-or-expel-window-left; } - Mod+BracketRight { consume-or-expel-window-right; } - - Mod+Comma { consume-window-into-column; } - Mod+Period { expel-window-from-column; } - - Mod+R { switch-preset-column-width; } - Mod+Shift+R { switch-preset-window-height; } - Mod+Ctrl+R { reset-window-height; } - Mod+F { maximize-column; } - Mod+Shift+F { fullscreen-window; } - - Mod+Ctrl+F { expand-column-to-available-width; } - - Mod+C { center-column; } - - Mod+A {spawn "niri-switch-to-workspace"; } - - Mod+Minus { set-column-width "-10%"; } - Mod+Equal { set-column-width "+10%"; } - + XF86MonBrightnessUp allow-when-locked=true { + spawn "lightctl" "up" + } + XF86MonBrightnessDown allow-when-locked=true { + spawn "lightctl" "down" + } + Mod+Q { + close-window + } + 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+H { + move-column-left-or-to-monitor-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-or-to-monitor-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+Ctrl+H { + focus-monitor-left + } + Mod+Ctrl+J { + focus-monitor-down + } + Mod+Ctrl+K { + focus-monitor-up + } + Mod+Ctrl+L { + focus-monitor-right + } + Mod+Shift+Ctrl+Left { + move-column-to-monitor-left + } + Mod+Shift+Ctrl+Down { + move-column-to-monitor-down + } + Mod+Shift+Ctrl+Up { + move-column-to-monitor-up + } + Mod+Shift+Ctrl+Right { + move-column-to-monitor-right + } + Mod+Shift+Ctrl+H { + move-column-to-monitor-left + } + Mod+Shift+Ctrl+J { + move-column-to-monitor-down + } + Mod+Shift+Ctrl+K { + move-column-to-monitor-up + } + Mod+Shift+Ctrl+L { + move-column-to-monitor-right + } + Mod+Page_Down { + focus-workspace-down + } + Mod+Page_Up { + focus-workspace-up + } + Mod+Shift+Page_Down { + move-column-to-workspace-down + } + Mod+Shift+Page_Up { + move-column-to-workspace-up + } + Mod+U { + focus-workspace-down + } + Mod+I { + focus-workspace-up + } + Mod+Shift+U { + move-column-to-workspace-down + } + Mod+Shift+I { + move-column-to-workspace-up + } + Mod+WheelScrollDown cooldown-ms=150 { + focus-workspace-down + } + Mod+WheelScrollUp cooldown-ms=150 { + focus-workspace-up + } + Mod+Shift+WheelScrollDown cooldown-ms=150 { + move-column-to-workspace-down + } + Mod+Shift+WheelScrollUp cooldown-ms=150 { + move-column-to-workspace-up + } + Mod+WheelScrollRight { + focus-column-right + } + Mod+WheelScrollLeft { + focus-column-left + } + Mod+Shift+WheelScrollRight { + move-column-right + } + Mod+Shift+WheelScrollLeft { + move-column-left + } + 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-column-to-workspace 1 + } + Mod+Shift+2 { + move-column-to-workspace 2 + } + Mod+Shift+3 { + move-column-to-workspace 3 + } + Mod+Shift+4 { + move-column-to-workspace 4 + } + Mod+Shift+5 { + move-column-to-workspace 5 + } + Mod+Shift+6 { + move-column-to-workspace 6 + } + Mod+Shift+7 { + move-column-to-workspace 7 + } + Mod+Shift+8 { + move-column-to-workspace 8 + } + Mod+Shift+9 { + move-column-to-workspace 9 + } + Mod+BracketLeft { + consume-or-expel-window-left + } + Mod+BracketRight { + consume-or-expel-window-right + } + Mod+Comma { + consume-window-into-column + } + Mod+Period { + expel-window-from-column + } + Mod+R { + switch-preset-column-width + } + Mod+Shift+R { + switch-preset-window-height + } + Mod+Ctrl+R { + reset-window-height + } + Mod+F { + maximize-column + } + Mod+Shift+F { + fullscreen-window + } + Mod+Ctrl+F { + expand-column-to-available-width + } + Mod+C { + center-column + } + Mod+X { + focus-workspace "keepassxc" + } + Mod+Minus { + set-column-width "-10%" + } + Mod+Equal { + 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%"; } - + 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+V { toggle-window-floating; } - Mod+Shift+V { switch-focus-between-floating-and-tiling; } - - Mod+W { toggle-column-tabbed-display; } - - Print { screenshot; } - Ctrl+Print { screenshot-screen; } - Alt+Print { screenshot-window; } - - Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; } - - Mod+Shift+E { quit; } - - Mod+Shift+P { power-off-monitors; } + Mod+V { + toggle-window-floating + } + Mod+Shift+V { + switch-focus-between-floating-and-tiling + } + Mod+W { + toggle-column-tabbed-display + } + Mod+O { + toggle-overview + } + Print { + screenshot + } + Ctrl+Print { + screenshot-screen + } + Alt+Print { + screenshot + } + Mod+Escape allow-inhibiting=false { + toggle-keyboard-shortcuts-inhibit + } + Mod+Shift+E { + quit + } + Mod+Shift+P { + power-off-monitors + } } + diff --git a/helix-config.toml b/helix-config.toml new file mode 100644 index 0000000..2b04978 --- /dev/null +++ b/helix-config.toml @@ -0,0 +1,69 @@ +theme = "theme_transparent" + +[editor] +auto-format = true +bufferline = "multiple" +color-modes = true +completion-timeout = 5 +cursorline = false +line-number = "relative" +mouse = true +true-color = true + +[editor.cursor-shape] +insert = "bar" +normal = "block" +select = "underline" + +[editor.file-picker] +hidden = true + +[editor.gutters] +layout = ["diff", "diagnostics", "line-numbers", "spacer"] + +[editor.indent-guides] +render = true + +[editor.inline-diagnostics] +cursor-line = "hint" +other-lines = "error" + +[editor.lsp] +auto-signature-help = true +display-inlay-hints = false +display-messages = true +enable = true +snippets = true + +[editor.soft-wrap] +enable = true + +[editor.statusline] +left = ["spinner", "version-control", "diagnostics", "file-name"] +right = ["file-base-name", "file-type", "position", "file-encoding"] + +[keys.normal] +";" = "flip_selections" +"A-;" = "collapse_selection" +A-H = "goto_previous_buffer" +A-L = "goto_next_buffer" +A-f = ":format" +A-r = ":reload" +A-w = ":buffer-close" +A-x = "extend_to_line_bounds" +H = "extend_char_left" +J = "extend_line_down" +K = "extend_line_up" +L = "extend_char_right" +X = ["extend_line_up", "extend_to_line_bounds"] +esc = ["collapse_selection", "keep_primary_selection", "normal_mode"] + +[keys.normal.space] +i = ":toggle lsp.display-inlay-hints" + +[keys.select] +A-x = "extend_to_line_bounds" +X = ["extend_line_up", "extend_to_line_bounds"] + +[keys.select.g] +e = "goto_file_end" diff --git a/languages.toml b/languages.toml new file mode 100644 index 0000000..09af105 --- /dev/null +++ b/languages.toml @@ -0,0 +1,240 @@ +[[language]] +auto-format = true +name = "bash" + +[language.formatter] +args = ["-i", "2"] +command = "/nix/store/i2n1mira4g8wddjcd85mh8sccdgaf2q5-shfmt-3.11.0/bin/shfmt" + +[[language]] +file-types = ["clj", "cljs", "cljc", "clje", "cljr", "cljx", "edn", "boot", "yuck"] +injection-regex = "(clojure|clj|edn|boot|yuck)" +name = "clojure" + +[[language]] +auto-format = true +language-servers = ["cmake-language-server"] +name = "cmake" + +[language.formatter] +args = ["-"] +command = "/nix/store/yxhdb8acdzv6jxvl92jhb637z10x0a72-cmake-format-0.6.13/bin/cmake-format" + +[[language]] +auto-format = true +language-servers = ["dprint", "typescript-language-server"] +name = "javascript" + +[[language]] +file-types = ["jjdescription"] +language-servers = ["scls"] +name = "jjdescription" +scope = "source.jjdescription" + +[[language]] +name = "json" + +[language.formatter] +args = ["fmt", "-", "--ext", "json"] +command = "/nix/store/g47v9xixy8v2jn0k54df8hx7av885sa0-deno-2.3.6/bin/deno" + +[[language]] +auto-format = true +language-servers = ["scls", "taplo"] +name = "markdown" + +[language.formatter] +args = ["fmt", "-", "--ext", "md"] +command = "/nix/store/g47v9xixy8v2jn0k54df8hx7av885sa0-deno-2.3.6/bin/deno" + +[[language]] +language-servers = ["nil", "scls", "deadnix"] +name = "nix" + +[[language]] +language-servers = ["qmlls"] +name = "qml" + +[[language]] +auto-format = true +language-servers = ["basedpyright", "ruff"] +name = "python" + +[[language]] +auto-format = true +language-servers = ["dprint", "typescript-language-server"] +name = "typescript" + +[[language]] +name = "rust" + +[[language]] +auto-format = true +language-servers = ["clangd"] +name = "c" + +[[language]] +auto-format = true +name = "zig" + +[[language]] +name = "c" + +[language.debugger] +command = "/nix/store/30ny2x1zhcl6k65nmw6bqn9z7mrk0afy-gdb-16.3/bin/gdb" +name = "gdb" +transport = "stdio" + +[[language.debugger.templates]] +name = "binary" +request = "launch" +[[language.debugger.templates.completion]] +completion = "filename" +name = "binary" + +[language.debugger.templates.args] +program = "{0}" +runInTerminal = true + +[language-server.basedpyright] +command = "/nix/store/0sh11lymzi1m170swkm82sx6r4k14ss3-basedpyright-1.29.4/bin/basedpyright-langserver" + +[language-server.bash-language-server] +args = ["start"] +command = "/nix/store/dcv7h8ysjxmgb9i5972n63p3rzxqy94p-bash-language-server-5.6.0/bin/bash-language-server" + +[language-server.clangd] +command = "/nix/store/bx82p30rpg1nf54zs0gk7vqdg7bs7kb3-clang-tools-19.1.7/bin/clangd" + +[language-server.clangd.clangd] +fallbackFlags = ["-std=c++2b"] + +[language-server.cmake-language-server] +command = "/nix/store/zpaqswjjncvarqdlgsh9wzhi504y8lpi-cmake-language-server-0.1.11/bin/cmake-language-server" + +[language-server.deadnix] +command = "/nix/store/lg4dswldiwq04c5q1bn0hlr0q35p78rn-deadnix-1.2.1/bin/deadnix" + +[language-server.deno-lsp] +args = ["lsp"] +command = "/nix/store/g47v9xixy8v2jn0k54df8hx7av885sa0-deno-2.3.6/bin/deno" + +[language-server.deno-lsp.config.deno] +enable = true +lint = true +unstable = true + +[language-server.deno-lsp.config.deno.inlayHints.enumMemberValues] +enabled = true + +[language-server.deno-lsp.config.deno.inlayHints.functionLikeReturnTypes] +enabled = true + +[language-server.deno-lsp.config.deno.inlayHints.parameterNames] +enabled = "all" + +[language-server.deno-lsp.config.deno.inlayHints.parameterTypes] +enabled = true + +[language-server.deno-lsp.config.deno.inlayHints.propertyDeclarationTypes] +enabled = true + +[language-server.deno-lsp.config.deno.inlayHints.variableTypes] +enabled = true + +[language-server.deno-lsp.config.deno.suggest] +completeFunctionCalls = false + +[language-server.deno-lsp.config.deno.suggest.imports.hosts] +"https://deno.land" = true + +[language-server.deno-lsp.environment] +NO_COLOR = "1" + +[language-server.dprint] +args = ["lsp"] +command = "/nix/store/h7z1irpdrvi96ms9akdmzamj7xy7ax9l-dprint-0.50.0/bin/dprint" + +[language-server.nil] +command = "/nix/store/bcj2njar1n0kqpvkfj78mkldbx23im18-nil-unstable-02-06-2025/bin/nil" + +[language-server.nil.config.nil.formatting] +command = ["/nix/store/58230yv4qkhn5psmf2galbjl66lh5zmp-alejandra-4.0.0/bin/alejandra", "-q"] + +[language-server.qmlls] +args = ["-E"] +command = "/nix/store/g0ahmk2wixwwibdb49p29l69vhm6ymwa-qtdeclarative-6.9.0/bin/qmlls" + +[language-server.ruff] +args = ["server"] +command = "/nix/store/l1rij3b43sz459myl59i4d1lsl47cnzd-ruff-0.12.0/bin/ruff" + +[language-server.rust-analyzer.config.cargo] +features = "all" + +[language-server.rust-analyzer.config.check] +command = "clippy" +extraArgs = [ + "--", + "-D", + "clippy::pedantic", + "-W", + "clippy::nursery", + "-W", + "clippy::perf", +] + +[language-server.scls] +command = "/nix/store/ibpnrld4lpnrz3w0ksnyiw4z4vmqki76-simple-completion-language-server-0-unstable-2025-01-31/bin/simple-completion-language-server" + +[language-server.scls.config] +feature_citations = false +feature_paths = false +feature_snippets = true +feature_unicode_input = false +feature_words = true +max_completion_items = 100 +snippets_first = true +snippets_inline_by_word_tail = false + +[language-server.typescript-language-server] +args = ["--stdio"] +command = "/nix/store/7xllvpjj8a7rv1mq7mxzj657q520vl26-typescript-language-server-4.3.3/bin/typescript-language-server" + +[language-server.typescript-language-server.config.typescript-language-server.source.addMissingImports] +ts = true + +[language-server.typescript-language-server.config.typescript-language-server.source.fixAll] +ts = true + +[language-server.typescript-language-server.config.typescript-language-server.source.organizeImports] +ts = true + +[language-server.typescript-language-server.config.typescript-language-server.source.removeUnusedImports] +ts = true + +[language-server.typescript-language-server.config.typescript-language-server.source.sortImports] +ts = true + +[language-server.vscode-css-language-server] +args = ["--stdio"] +command = "/nix/store/kd0pk97ssa10z33r4sg30xpfvl252dyc-vscode-langservers-extracted-4.10.0/bin/vscode-css-language-server" + +[language-server.vscode-css-language-server.config] +provideFormatter = true + +[language-server.vscode-css-language-server.config.css.validate] +enable = true + +[language-server.vscode-css-language-server.config.scss.validate] +enable = true + +[language-server.zls] +command = "/nix/store/plzslh5qqrb60144w2drj5znd0hfp6av-zls-0.14.0/bin/zls" + +[language-server.zls.config] +build_on_save_args = ["check", "-fincremental", "--watch"] +enable_autofix = false +enable_build_on_save = true +highlight_global_var_declarations = true +warn_style = true diff --git a/nushell/atuin.nu b/nushell/atuin.nu new file mode 100644 index 0000000..7e4ba55 --- /dev/null +++ b/nushell/atuin.nu @@ -0,0 +1,105 @@ +# ============================================================================= +$env.ATUIN_SESSION = (atuin uuid) +hide-env -i ATUIN_HISTORY_ID + +# Magic token to make sure we don't record commands run by keybindings +let ATUIN_KEYBINDING_TOKEN = $"# (random uuid)" + +let _atuin_pre_execution = {|| + if ($nu | get -i history-enabled) == false { + return + } + let cmd = (commandline) + if ($cmd | is-empty) { + return + } + if not ($cmd | str starts-with $ATUIN_KEYBINDING_TOKEN) { + $env.ATUIN_HISTORY_ID = (atuin history start -- $cmd) + } +} +# ============================================================================= + +let _atuin_pre_prompt = {|| + let last_exit = $env.LAST_EXIT_CODE + if 'ATUIN_HISTORY_ID' not-in $env { + return + } + with-env { ATUIN_LOG: error } { + do { atuin history end $'--exit=($last_exit)' -- $env.ATUIN_HISTORY_ID } | complete + + } + hide-env ATUIN_HISTORY_ID +} +# ============================================================================= + +def _atuin_search_cmd [...flags: string] { + let nu_version = do { + let version = version + let major = $version.major? + if $major != null { + # These members are only available in versions > 0.92.2 + [$major $version.minor $version.patch] + } else { + # So fall back to the slower parsing when they're missing + $version.version | split row '.' | into int + } + } + [ + $ATUIN_KEYBINDING_TOKEN, + ([ + `with-env { ATUIN_LOG: error, ATUIN_QUERY: (commandline) } {`, + (if $nu_version.0 <= 0 and $nu_version.1 <= 90 { 'commandline' } else { 'commandline edit' }), + (if $nu_version.1 >= 92 { '(run-external atuin search' } else { '(run-external --redirect-stderr atuin search' }), + ($flags | append [--interactive] | each {|e| $'"($e)"'}), + (if $nu_version.1 >= 92 { ' e>| str trim)' } else {' | complete | $in.stderr | str substring ..-1)'}), + `}`, + ] | flatten | str join ' '), + ] | str join "\n" +} +# ============================================================================= + +$env.config = ($env | default {} config).config +$env.config = ($env.config | default {} hooks) +$env.config = ( + $env.config | upsert hooks ( + $env.config.hooks + | upsert pre_execution ( + $env.config.hooks | get -i pre_execution | default [] | append $_atuin_pre_execution) + | upsert pre_prompt ( + $env.config.hooks | get -i pre_prompt | default [] | append $_atuin_pre_prompt) + ) +) + +$env.config = ($env.config | default [] keybindings) + +$env.config = ( + $env.config | upsert keybindings ( + $env.config.keybindings + | append { + name: atuin + modifier: control + keycode: char_r + mode: [emacs, vi_normal, vi_insert] + event: { send: executehostcommand cmd: (_atuin_search_cmd) } + } + ) +) + +$env.config = ( + $env.config | upsert keybindings ( + $env.config.keybindings + | append { + name: atuin + modifier: none + keycode: up + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: menuup} + {send: executehostcommand cmd: (_atuin_search_cmd '--shell-up-key-binding') } + ] + } + } + ) +) +# ============================================================================= diff --git a/nushell/config.nu b/nushell/config.nu new file mode 100644 index 0000000..c048a83 --- /dev/null +++ b/nushell/config.nu @@ -0,0 +1,462 @@ +$env.config = { + bracketed_paste: true + buffer_editor: "" + datetime_format: {} + edit_mode: vi + error_style: fancy + float_precision: 2 + footer_mode: 25 + render_right_prompt_on_last_line: false + show_banner: false + use_ansi_coloring: true + use_kitty_protocol: true + + shell_integration: { + osc2: false + osc7: true + osc8: true + osc9_9: false + osc133: true + osc633: true + reset_application_mode: true + } +} + +$env.config.color_config = { + binary: white + block: white + bool: {|| if $in { "light_green" } else { "light_red" } } + cell-path: white + date: purple + duration: white + empty: blue + filesize: cyan + float: white + header: green_bold + hints: dark_gray + int: white + list: white + nothing: white + range: white + record: white + row_index: green_bold + search_result: { bg: red fg: white } + separator: white + string: {|| if $in =~ "^(#|0x)[a-fA-F0-9]+$" { ($in | str replace "0x" "#") } else { "white" } } + leading_trailing_space_bg: { attr: n } + + shape_and: purple_bold + shape_binary: purple_bold + shape_block: blue_bold + shape_bool: light_cyan + shape_closure: green_bold + shape_custom: green + shape_datetime: cyan_bold + shape_directory: cyan + shape_external: cyan + shape_externalarg: green_bold + shape_filepath: cyan + shape_flag: blue_bold + shape_float: purple_bold + shape_garbage: { fg: white bg: red attr: b} + shape_globpattern: cyan_bold + shape_int: purple_bold + shape_internalcall: cyan_bold + shape_list: cyan_bold + shape_literal: blue + shape_match_pattern: green + shape_nothing: light_cyan + shape_operator: yellow + shape_or: purple_bold + shape_pipe: purple_bold + shape_range: yellow_bold + shape_record: cyan_bold + shape_redirection: purple_bold + shape_signature: green_bold + shape_string: green + shape_table: blue_bold + shape_vardecl: purple + shape_variable: purple + shape_matching_brackets: { attr: u } + shape_string_interpolation: cyan_bold +} + +$env.config.ls = { + clickable_links: true + use_ls_colors: true +} + +$env.config.rm.always_trash = true + +$env.config.table = { + header_on_separator: false + index_mode: always + mode: light + padding: { left: 1 right: 1 } + show_empty: true + trim: { + methodology: wrapping + wrapping_try_keep_words: true + truncating_suffix: "..." + } +} + +$env.config.explore = { + command_bar_text: { fg: "#C4C9C6" } + highlight: { fg: black bg: yellow } + status: { + error: { fg: white bg: red } + warn: {} + info: {} + } + status_bar_background: { fg: "#1D1F21" bg: "#C4C9C6" } + table: { + split_line: { fg: "#404040" } + selected_cell: { bg: light_blue } + selected_row: {} + selected_column: {} + } +} + +$env.config.history = { + file_format: sqlite + isolation: false + max_size: 100_000 + sync_on_enter: true +} + +$env.config.completions = { + algorithm: prefix + case_sensitive: false + partial: true + quick: true + external: { + enable: true + max_results: 100 + completer: {|tokens: list| + let expanded = scope aliases | where name == $tokens.0 | get --ignore-errors expansion.0 + + mut expanded_tokens = if $expanded != null and $tokens.0 != "cd" { + $expanded | split row " " | append ($tokens | skip 1) + } else { + $tokens + } + + $expanded_tokens.0 = ($expanded_tokens.0 | str trim --left --char "^") + + fish --command $"complete '--do-complete=($expanded_tokens | str join ' ')'" + | $"value(char tab)description(char newline)" + $in + | from tsv --flexible --no-infer + } + } +} + +$env.config.cursor_shape = { + vi_insert: block + vi_normal: block +} + +$env.config.hooks = { + command_not_found: {||} + + display_output: { + tee { table --expand | print } + | $env.last = $in + } + + + pre_execution: [ + { + let prompt = commandline | str trim + + if ($prompt | is-empty) { + return + } + + print $"(ansi title)($prompt) — nu(char bel)" + } + ] + + + pre_prompt: [ + { + if (which direnv | is-empty) { + return + } + + direnv export json | from json | default {} | load-env + # Direnv outputs $PATH as a string, but nushell silently breaks if isn't a list-like table. + # The following behemoth of Nu code turns this into nu's format while following the standards of how to handle quotes, use it if you need quote handling instead of the line below it: + # $env.PATH = $env.PATH | parse --regex ('' + `((?:(?:"(?:(?:\\[\\"])|.)*?")|(?:'.*?')|[^` + (char env_sep) + `]*)*)`) | each {|x| $x.capture0 | parse --regex `(?:"((?:(?:\\"|.))*?)")|(?:'(.*?)')|([^'"]*)` | each {|y| if ($y.capture0 != "") { $y.capture0 | str replace -ar `\\([\\"])` `$1` } else if ($y.capture1 != "") { $y.capture1 } else $y.capture2 } | str join } + $env.PATH = $env.PATH | split row (char env_sep) + } + ] +} + +# Retrieve the output of the last command. +def _ []: nothing -> any { + $env.last +} + +$env.config.menus = [ + { + marker: "| " + name: completion_menu + only_buffer_difference: false + style: { + description_text: yellow + selected_text: green_reverse + text: green + } + type: { + col_padding: 2 + col_width: 20 + columns: 4 + layout: columnar + } + } + { + marker: "? " + name: history_menu + only_buffer_difference: true + style: { + description_text: yellow + selected_text: green_reverse + text: green + } + type: { + layout: list + page_size: 10 + } + } + { + marker: "? " + name: help_menu + only_buffer_difference: true + style: { + description_text: yellow + selected_text: green_reverse + text: green + } + type: { + col_padding: 2 + col_width: 20 + columns: 4 + description_rows: 10 + layout: description + selection_rows: 4 + } + } +] + +$env.config.keybindings = [ + { + name: copy_commandline + modifier: alt + keycode: char_c + mode: [ vi_normal vi_insert ] + event: { + send: executehostcommand + cmd: 'commandline | nu-highlight | $"```ansi\n($in)\n```" | copy' + } + } + { + name: completion_menu + modifier: none + keycode: tab + mode: [ vi_normal vi_insert ] + event: { + until: [ + { send: menu name: completion_menu } + { send: menunext } + { edit: complete } + ] + } + } + { + name: history_menu + modifier: control + keycode: char_h + mode: [ vi_insert vi_normal ] + event: { send: menu name: history_menu } + } + { + name: escape + modifier: none + keycode: escape + mode: [ vi_normal vi_insert ] + event: { send: esc } + } + { + name: cancel_command + modifier: control + keycode: char_c + mode: [ vi_normal vi_insert ] + event: { send: ctrlc } + } + { + name: quit_shell + modifier: control + keycode: char_d + mode: [ vi_normal vi_insert ] + event: { send: ctrld } + } + { + name: clear_screen + modifier: control + keycode: char_l + mode: [ vi_normal vi_insert ] + event: { send: clearscreen } + } + { + name: open_command_editor + modifier: control + keycode: char_o + mode: [ vi_normal vi_insert ] + event: { send: openeditor } + } + { + name: abbr + modifier: control + keycode: space + mode: [ vi_normal vi_insert ] + event: [ + { send: menu name: abbr_menu } + { edit: insertchar, value: " " } + ] + } + { + name: move_down + modifier: none + keycode: down + mode: [ vi_normal vi_insert ] + event: { + until: [ + { send: menudown } + { send: down } + ] + } + } + { + name: move_left + modifier: none + keycode: left + mode: [ vi_normal vi_insert ] + event: { + until: [ + { send: menuleft } + { send: left } + ] + } + } + { + name: move_right_or_take_history_hint + modifier: none + keycode: right + mode: [ vi_normal vi_insert ] + event: { + until: [ + { send: historyhintcomplete } + { send: menuright } + { send: right } + ] + } + } + { + name: move_one_word_left + modifier: control + keycode: left + mode: [ vi_normal vi_insert ] + event: { edit: movewordleft } + } + { + name: move_one_word_right_or_take_history_hint + modifier: control + keycode: right + mode: [ vi_normal vi_insert ] + event: { + until: [ + { send: historyhintwordcomplete } + { edit: movewordright } + ] + } + } + { + name: move_to_line_start + modifier: control + keycode: char_a + mode: [ vi_normal vi_insert ] + event: { edit: movetolinestart } + } + { + name: move_to_line_end_or_take_history_hint + modifier: control + keycode: char_e + mode: [ vi_normal vi_insert ] + event: { + until: [ + { send: historyhintcomplete } + { edit: movetolineend } + ] + } + } + { + name: delete_one_character_backward + modifier: none + keycode: backspace + mode: vi_insert + event: { edit: backspace } + } + { + name: delete_one_word_backward + modifier: control + keycode: backspace + mode: vi_insert + event: { edit: backspaceword } + } + { + name: newline_or_run_command + modifier: none + keycode: enter + mode: vi_insert + event: { send: enter } + } + { + name: take_history_hint + modifier: control + keycode: char_f + mode: [ vi_normal vi_insert ] + event: { + until: [ + { send: historyhintcomplete } + ] + } + } +] + +source ~/.config/nushell/atuin.nu + +source ~/.config/nushell/zoxide.nu +# source ~/.config/nushell/source_profile.nu + +# fix sudo by prepending /run/wrappers/bin to the PATH +# $env.PATH = ($env.PATH | split row (char esep) | prepend '/run/wrappers/bin') + + + +$env.STARSHIP_SHELL = "nu" + +def create_left_prompt [] { + starship prompt --cmd-duration $env.CMD_DURATION_MS $'--status=($env.LAST_EXIT_CODE)' +} + +# Use nushell functions to define your right and left prompt +$env.PROMPT_COMMAND = { || create_left_prompt } +$env.PROMPT_COMMAND_RIGHT = "" + +# The prompt indicators are environmental variables that represent +# the state of the prompt +$env.PROMPT_INDICATOR = "" +$env.PROMPT_INDICATOR_VI_INSERT = ": " +$env.PROMPT_INDICATOR_VI_NORMAL = "〉" +$env.PROMPT_MULTILINE_INDICATOR = "::: " diff --git a/nushell/env.nu b/nushell/env.nu new file mode 100644 index 0000000..61a542a --- /dev/null +++ b/nushell/env.nu @@ -0,0 +1,26 @@ +# env.nu +# +# Installed by: +# version = "0.102.0" +# +# Previously, environment variables were typically configured in `env.nu`. +# In general, most configuration can and should be performed in `config.nu` +# or one of the autoload directories. +# +# This file is generated for backwards compatibility for now. +# It is loaded before config.nu and login.nu +# +# See https://www.nushell.sh/book/configuration.html +# +# Also see `help config env` for more options. +# +# You can remove these comments if you want or leave +# them for future reference. +# +# def --wrapped sudo [...rest] { +# let escaped_args = $rest +# | 1.. +# | each { || to nuon } +# | str join ' ' +# ^sudo env XDG_RUNTIME_DIR=/run/user/0 nu --login --commands $'($rest.0) ($escaped_args)' +# } diff --git a/nushell/starship.nu b/nushell/starship.nu new file mode 100644 index 0000000..0041986 --- /dev/null +++ b/nushell/starship.nu @@ -0,0 +1,44 @@ +# this file is both a valid +# - overlay which can be loaded with `overlay use starship.nu` +# - module which can be used with `use starship.nu` +# - script which can be used with `source starship.nu` +export-env { $env.STARSHIP_SHELL = "nu"; load-env { + STARSHIP_SESSION_KEY: (random chars -l 16) + PROMPT_MULTILINE_INDICATOR: ( + ^/run/current-system/sw/bin/starship prompt --continuation + ) + + # Does not play well with default character module. + # TODO: Also Use starship vi mode indicators? + PROMPT_INDICATOR: "" + + PROMPT_COMMAND: {|| + # jobs are not supported + ( + ^/run/current-system/sw/bin/starship prompt + --cmd-duration $env.CMD_DURATION_MS + $"--status=($env.LAST_EXIT_CODE)" + --terminal-width (term size).columns + ) + } + + config: ($env.config? | default {} | merge { + render_right_prompt_on_last_line: true + }) + + PROMPT_COMMAND_RIGHT: {|| + ( + ^/run/current-system/sw/bin/starship prompt + --right + --cmd-duration $env.CMD_DURATION_MS + $"--status=($env.LAST_EXIT_CODE)" + --terminal-width (term size).columns + ) + } +}} + + +def create_left_prompt [] { + starship prompt --cmd-duration $env.CMD_DURATION_MS $'--status=($env.LAST_EXIT_CODE)' +} + diff --git a/nushell/zoxide.nu b/nushell/zoxide.nu new file mode 100644 index 0000000..57d115f --- /dev/null +++ b/nushell/zoxide.nu @@ -0,0 +1,57 @@ +# ============================================================================= +# +# Hook configuration for zoxide. +# + +# Initialize hook to add new entries to the database. +export-env { + $env.config = ( + $env.config? + | default {} + | upsert hooks { default {} } + | upsert hooks.env_change { default {} } + | upsert hooks.env_change.PWD { default [] } + ) + let __zoxide_hooked = ( + $env.config.hooks.env_change.PWD | any { try { get __zoxide_hook } catch { false } } + ) + if not $__zoxide_hooked { + $env.config.hooks.env_change.PWD = ($env.config.hooks.env_change.PWD | append { + __zoxide_hook: true, + code: {|_, dir| zoxide add -- $dir} + }) + } +} + +# ============================================================================= +# +# When using zoxide with --no-cmd, alias these internal functions as desired. +# + +# Jump to a directory using only keywords. +def --env --wrapped __zoxide_z [...rest: string] { + let path = match $rest { + [] => {'~'}, + [ '-' ] => {'-'}, + [ $arg ] if ($arg | path expand | path type) == 'dir' => {$arg} + _ => { + zoxide query --exclude $env.PWD -- ...$rest | str trim -r -c "\n" + } + } + cd $path +} + +# Jump to a directory using interactive search. +def --env --wrapped __zoxide_zi [...rest:string] { + cd $'(zoxide query --interactive -- ...$rest | str trim -r -c "\n")' +} + +# ============================================================================= +# +# Commands for zoxide. Disable these using --no-cmd. +# + +alias cd = __zoxide_z +alias ci = __zoxide_zi + +# ============================================================================= diff --git a/safe.toml b/safe.toml new file mode 100644 index 0000000..4934ec2 --- /dev/null +++ b/safe.toml @@ -0,0 +1,61 @@ +[user] +name = "" +email = "" + +[ui] +pager = ["bat", "--plain"] +default-command = ["log"] + +[ui.movement] +edit = true + +[ui.diff] +tool = ["difft", "--color", "always", "$left", "$right"] + + +[git] +push-new-bookmarks = true + + +# [signing] +# behavior = "own" +# backend = "ssh" +# key = "~/.ssh/id_ecdsa.pub" + + +[aliases] +c = ["commit"] +ci = ["commit", "--interactive"] +e = ["edit"] +i = ["git", "init", "--colocate"] +nb = ["bookmark", "create", "-r @-"] # "new bookmark" +pull = ["git", "fetch"] +push = ["git", "push", "--allow-new"] +r = ["rebase"] +s = ["squash"] +si = ["squash", "--interactive"] +tug = ["bookmark", "move", "--from", "closest_bookmark(@-)", "--to", "@-"] +ls = ["util", "exec", "--", "sh", "-c", """ +jj log --limit 12 +echo +jj status +"""] + +[revset-aliases] +'closest_bookmark(to)' = 'heads(::to & bookmarks())' + +[templates] +draft_commit_description = ''' +concat( + coalesce(description, "\n"), + surround( + "\nJJ: This commit contains the following changes:\n", "", + indent("JJ: ", diff.stat(72)), + ), + "\nJJ: ignore-rest\n", + diff.git(), +) +''' + +[template-aliases] +'format_short_id(id)' = 'id.shortest()'