super duper changes :D

This commit is contained in:
2026-02-22 20:02:46 +01:00
parent 72cdbe93ff
commit ffd09e5046
10 changed files with 665 additions and 19 deletions

View File

@@ -4,35 +4,61 @@
My dotfiles managed with [home manager](https://github.com/nix-community/home-manager) My dotfiles managed with [home manager](https://github.com/nix-community/home-manager)
# What's inside? # What's inside?
- Fish config ### Configured with native nix
- Kitty config * Ashell
- Hypr* stuff config * Atuin
- Mako config * Bat
- ashell, waybar config * Btop
- nvim config * Fish
* Git
* Hypridle
* Hyprland
* Hyprlauncher
* Hyprlock
* Hyprsunset
* Kitty
* Mako
* Nixvim
* Satty
* SSH
* Waybar
* Yazi
* Zoxide
* Fastfetch
* GTK 3.0
* GTK 4.0
* MangoHud
* Mimeapps
* Catppuccin
* Home Manager
## Screenshot ## Screenshot
![Desktop screenshot](assets/screenshot.png) ![Desktop screenshot](assets/screenshot.png)
![Terminal screenshot](assets/terminal.png) ![Terminal screenshot](assets/terminal.png)
# Some history # Some history about my dotfiles
My first ever [dotfiles](https://github.com/szymon-jozef/dotfiles) repo was just named… Dotfiles. It was pretty bare bones. My first ever [dotfiles](https://github.com/szymon-jozef/dotfiles) repo was just named… Dotfiles. It was pretty bare bones.
Then I created [superior dotfiles](https://github.com/szymon-jozef/superior_dotfiles). I used it with [chezmoi](https://www.chezmoi.io/). It was pretty good, but then I decided to try something else… Then I created [superior dotfiles](https://github.com/szymon-jozef/superior_dotfiles). I used it with [chezmoi](https://www.chezmoi.io/). It was pretty good, but then I decided to try something else…
As of today I'm using this repo with home manager. I'm still trying stuff out, but it looks pretty good right now. As of today I'm using this repo with home manager. I'm still trying stuff out, but it looks pretty good right now.
# How to try this out? # How to use this?
I guess you should [install home manager](https://nix-community.github.io/home-manager/index.xhtml#sec-install-standalone). You can do it on *any* distro, but I only use Arch, so I don't guarantee it will work elsewhere. To try it out just copy this repo to `~/.config/home-manager`, cd there and then run: You need to have [home manager](https://nix-community.github.io/home-manager/index.xhtml#sec-install-standalone) installed. Install needs to be **standalone**. It may not work as NixOS module.
**Important**: don't forget to change your user info in `flake.nix` before running this command! ## Arch Linux
## On NixOS 0. If you're extra lazy you can use `install_nix_and_home_manager_on_arch.sh` script to install nix and home-manager. Just run it with `chmod +x ./install_nix_and_home_manager_on_arch.sh && ./install_nix_and_home_manager_on_arch.sh`
```bash 1. Copy this repo to `~/.config/home-manager` or somewhere else.
home-manager switch --flake .#nixos -b backup 2. Make sure to change variable to your liking inside `flake.nix`. Especially your username and home path!
``` 3. Download all the dependencies `sudo yay -Syu --needed - < arch_packages.txt`. You can use any other aur helper if you want to, but be aware that regular pacman most likely won't work as `ashell` is not in regular repos yet.
## On Arch 4. Run this command to apply all the configurations for the first time `home-manager switch --flake .#arch -b backup`. Make sure to be in the repo root. All your existing files will be backed up with `.backup` extension.
```bash 5. Enjoy! Now you can use [nh](https://github.com/nix-community/nh). So for example to switch use `nh home switch . -c arch --backup-extension backup`
home-manager switch --flake .#arch -b backup
``` ## NixOS
1. Copy this repo to `~/.config/home-manager` or somewhere else.
2. Make sure to change variable to your liking inside `flake.nix`. Especially your username and home path!
3. Run this command to apply all the configurations for the first time `home-manager switch --flake .#nixos -b backup`. Make sure to be in the repo root. All your existing files will be backed up with `.backup` extension.
4. Enjoy! Now you can use [nh](https://github.com/nix-community/nh). So for example to switch use `nh home switch . -c nixos --backup-extension backup`
--- ---
I hope you'll enjoy it, if you for whatever reason want to try this random ass dotfiles found on the internet… I hope you'll enjoy it, if you for whatever reason want to try this random ass dotfiles found on the internet…

9
arch_packages.txt Normal file
View File

@@ -0,0 +1,9 @@
ashell
waybar
hyprland
hyprlauncher
hypridle
hyprlock
hyprsunset
satty
kitty

View File

@@ -43,6 +43,12 @@
# status bars # status bars
./modules/ashell.nix ./modules/ashell.nix
./modules/waybar.nix ./modules/waybar.nix
# hypr
./modules/hypr/hyprland.nix
./modules/hypr/hyprlauncher.nix
./modules/hypr/hypridle.nix
./modules/hypr/hyprlock.nix
./modules/hypr/hyprsunset.nix
]; ];
# === DOTFILES IMPORT === # === DOTFILES IMPORT ===
@@ -52,7 +58,7 @@
# ".config/nvim".source = ./dotfiles/nvim; # ".config/nvim".source = ./dotfiles/nvim;
".config/gtk-3.0/settings.ini".source = ./dotfiles/gtk-3.0/settings.ini; ".config/gtk-3.0/settings.ini".source = ./dotfiles/gtk-3.0/settings.ini;
".config/gtk-4.0".source = ./dotfiles/gtk-4.0; ".config/gtk-4.0".source = ./dotfiles/gtk-4.0;
".config/hypr".source = ./dotfiles/hypr; # ".config/hypr".source = ./dotfiles/hypr;
".config/mimeapps.list".source = ./dotfiles/mimeapps.list; ".config/mimeapps.list".source = ./dotfiles/mimeapps.list;
".local/bin".source = ./scripts; ".local/bin".source = ./scripts;
}; };

View File

@@ -0,0 +1,10 @@
#!/bin/env bash
echo "=== NIX INSTALLATION ==="
sh <(curl --proto '=https' --tlsv1.2 -L https://nixos.org/nix/install) --daemon
echo "=== HOME MANAGER INSTALLATION ==="
nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager
nix-channel --update
nix-shell '<home-manager>' -A install

33
modules/hypr/hypridle.nix Normal file
View File

@@ -0,0 +1,33 @@
{ isNixOS, lib, ... }:
{
services.hypridle = {
enable = true;
package = lib.mkIf (!isNixOS) null;
settings = {
general = {
lock_cmd = "pidof hyprlock || hyprlock";
before_sleep_cmd = "hyprlock";
after_sleep_cmd = "hyprctl dispatch dpms on";
};
listener = [
{
timeout = 300; # 5 min
on-timeout = "hyprlock";
}
{
timeout = 330; # 5.5 min
on-timeout = "hyprctl dispatch dpms off";
on-resume = "hyprctl dispatch dpms on";
}
{
timeout = 330; # 5.5 min
on-timeout = "openrgb -c black";
on-resume = "openrgb -c green";
}
];
};
};
}

418
modules/hypr/hyprland.nix Normal file
View File

@@ -0,0 +1,418 @@
{ isNixOS, lib, ... }:
{
wayland.windowManager.hyprland = {
enable = true;
package = lib.mkIf (!isNixOS) null;
settings = {
"$mainMod" = "SUPER";
"$terminal" = "uwsm app -- kitty";
"$menu" = "hyprlauncher";
"$music_player" = "flatpak run com.spotify.Client";
"$notes" = "obsidian";
"$browser" = "zen-browser";
"$openrgb_color" = "09ce30";
env = [
"XCURSOR_SIZE, 32"
"HYPRCURSOR_SIZE, 32"
"HYPRCURSOR_THEME, theme_phinger-cursors-light"
"XDG_CURRENT_DESKTOP,Hyprland"
];
general = {
gaps_in = 4;
gaps_out = 6;
border_size = 4;
"col.active_border" = "$blue $sky";
"col.inactive_border" = "$overlay1";
resize_on_border = false;
allow_tearing = false;
layout = "dwindle";
};
animations = {
enabled = true;
bezier = [
"easeOutQuint,0.23,1,0.32,1"
"easeInOutCubic,0.65,0.05,0.36,1"
"linear,0,0,1,1"
"almostLinear,0.5,0.5,0.75,1.0"
"quick,0.15,0,0.1,1"
];
animation = [
"global, 1, 7, default"
"border, 1, 3.39, easeOutQuint"
"windows, 1, 2.79, easeOutQuint"
"windowsIn, 1, 2.1, easeOutQuint, popin 87%"
"windowsOut, 1, 1, linear, popin 87%"
"fadeIn, 1, 1.4, almostLinear"
"fadeOut, 1, 1.2, almostLinear"
"fade, 1, 3.03, quick"
"layers, 1, 2, easeOutQuint"
"layersIn, 1, 2, easeOutQuint, fade"
"layersOut, 1, 1, linear, fade"
"fadeLayersIn, 1, 1.4, almostLinear"
"fadeLayersOut, 1, 1.1, almostLinear"
"workspaces, 1, 1.4, quick, slidevert"
"workspacesIn, 1, 0.5, quick, slidevert"
"workspacesOut, 1, 0.5, quick, slidevert"
];
};
decoration = {
rounding = 1;
rounding_power = 2;
active_opacity = 1.0;
inactive_opacity = 1.0;
shadow = {
enabled = true;
range = 1;
render_power = 1;
color = "$overlay0";
};
blur = {
enabled = true;
size = 1;
passes = 1;
vibrancy = 0.1696;
};
};
dwindle = {
pseudotile = true;
preserve_split = true;
};
master = {
new_status = "slave";
allow_small_split = true;
orientation = "left";
};
ecosystem = {
enforce_permissions = true;
};
permission = [
"/usr/bin/grim, screencopy, allow"
"/usr/bin/hyprlock, screencopy, allow"
"/usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow"
];
input = {
kb_layout = "pl";
kb_variant = "";
kb_model = "";
kb_options = "caps:escape_shifted_capslock";
kb_rules = "";
follow_mouse = 1;
left_handed = true;
sensitivity = 0;
touchpad = {
natural_scroll = true;
};
};
cursor = {
no_hardware_cursors = true;
inactive_timeout = 5;
warp_on_change_workspace = 1;
zoom_factor = 1.0;
hide_on_key_press = 1;
};
misc = {
force_default_wallpaper = 0;
disable_hyprland_logo = true;
middle_click_paste = false;
};
xwayland = {
force_zero_scaling = 1;
};
quirks = {
prefer_hdr = 1;
};
"exec-once" = [
"wl-paste --type text --watch cliphist store"
"wl-paste --type image --watch cliphist store"
"uwsm app -- kdeconnect-indicator"
"uwsm app -- ashell"
"swww-daemon"
"openrgb -c $openrgb_color"
];
workspace = [
"1, monitor:DP-2"
"2, monitor:DP-1"
"3, monitor:DP-1"
"4, monitor:DP-1"
"5, monitor:DP-1"
"6, monitor:DP-1"
"7, monitor:HDMI-A-2"
"9, monitor:DP-2"
"10, monitor:DP-2"
"w[tv1], gapsout:0, gapsin:0"
"f[1], gapsout:0, gapsin:0"
];
windowrule = [
# smart gaps
"border_size 0, match:float 0, match:workspace w[tv1]"
"rounding 0, match:float 0, match:workspace w[tv1]"
"border_size 0, match:float 0, match:workspace f[1]"
"rounding 0, match:float 0, match:workspace f[1]"
# general rules
"match:class ^(signal)$, workspace 1"
"match:class ^(vesktop)$, workspace 1 silent"
"match:class ^(chrome-facebook.com__-Default)$, workspace 1"
"match:class ^(zen)$, workspace 2"
"match:class ^(com.github.IsmaelMartinez.teams_for_linux)$, workspace 2"
"match:class ^(FreeTube)$, workspace 2"
"match:class ^(chrome-x.com__-Default)$, workspace 2"
"match:class ^(chrome-www.inoreader.com__all_articles-Default)$, workspace 2"
"match:class ^(chrome-mail.proton.me__u_0_inbox.com-Default)$, workspace 2"
"match:class ^(chrome-app.tuta.com__-Default)$, workspace 2"
"match:class ^(steam)$, workspace 3 silent"
"match:class ^(heroic)$, workspace 3"
"match:class ^(net.lutris.Lutris)$, workspace 3"
"match:class ^(rpcs3)$, workspace 3"
"match:class ^(winboat)$, workspace 5"
"match:class ^(obsidian)$, workspace 6"
"match:class ^(gimp)$, workspace 8"
"match:class .*potify, workspace 9 silent"
"match:class ^(com.obsproject.Studio)$, workspace 10"
];
bind = [
# background
"$mainMod, V, exec, cliphist list | hyprlauncher -m | cliphist decode | wl-copy"
"$mainMod ALT_L, V, exec, cliphist wipe && notify-send \"Clipboard\" \"Clipboard cleared!\""
# power management
"$mainMod L_SHIFT ctrl, l, exec, hyprlock"
"$mainMod L_SHIFT ctrl, r, exec, openrgb -c black && systemctl reboot"
"$mainMod L_SHIFT ctrl, p, exec, openrgb -c black && systemctl poweroff"
"$mainMod L_SHIFT ctrl, s, exec, openrgb -c black && pidof hyprlock || sleep 1 && systemctl sleep"
"$mainMod L_SHIFT ctrl, m, exec, uwsm stop"
# zoom
"$mainMod alt, 0, exec, hyprctl -q keyword cursor:zoom_factor 1"
# focus management
"$mainMod, h, movefocus, l"
"$mainMod, l, movefocus, r"
"$mainMod, k, movefocus, u"
"$mainMod, j, movefocus, d"
"$mainMod, mouse_down, workspace, e+1"
"$mainMod, mouse_up, workspace, e-1"
"$mainMod L_SHIFT, right, exec, hyprctl dispatch movecurrentworkspacetomonitor +1"
"$mainMod L_SHIFT, left, exec, hyprctl dispatch movecurrentworkspacetomonitor -1"
# workspace management
"$mainMod, 1, workspace, 1"
"$mainMod, 2, workspace, 2"
"$mainMod, 3, workspace, 3"
"$mainMod, 4, workspace, 4"
"$mainMod, 5, workspace, 5"
"$mainMod, 6, workspace, 6"
"$mainMod, 7, workspace, 7"
"$mainMod, 8, workspace, 8"
"$mainMod, 9, workspace, 9"
"$mainMod, 0, workspace, 10"
# window management
"$mainMod SHIFT, 1, movetoworkspace, 1"
"$mainMod SHIFT, 2, movetoworkspace, 2"
"$mainMod SHIFT, 3, movetoworkspace, 3"
"$mainMod SHIFT, 4, movetoworkspace, 4"
"$mainMod SHIFT, 5, movetoworkspace, 5"
"$mainMod SHIFT, 6, movetoworkspace, 6"
"$mainMod SHIFT, 7, movetoworkspace, 7"
"$mainMod SHIFT, 8, movetoworkspace, 8"
"$mainMod SHIFT, 9, movetoworkspace, 9"
"$mainMod SHIFT, 0, movetoworkspace, 10"
# special workspace
"$mainMod, TAB, togglespecialworkspace, magic"
"$mainMod SHIFT, TAB, movetoworkspace, special:magic"
# layout
"$mainMod, S, layoutmsg, swapwithmaster"
"$mainMod, n, layoutmsg, swapnext"
"$mainMod, p, layoutmsg, swapprev"
# apps
"$mainMod, M, exec, [float] waypaper"
"$mainMod, RETURN, exec, [workspace 4] $terminal"
"$mainMod CONTROL_L, RETURN, exec, $terminal"
"$mainMod, space , exec, $menu"
"$mainMod ALT_L, c, exec, openrgb -c $openrgb_color"
"$mainMod Control_L, s, exec,[workspace 1] signal-desktop --password-store=\"kwallet6\""
"$mainMod Control_L, s, focuswindow, class:^(signal)$"
"$mainMod Control_L, s, focuswindow, title:^(signal)$"
"$mainMod Control_L, v, sendshortcut, ctrl, k, class:^(vesktop)$"
"$mainMod Control_L, v, exec, uwsm app -- vesktop"
"$mainMod Control_L, v, focuswindow, class:^(vesktop)$"
"$mainMod Control_L, g, exec, uwsm app -- steam"
"$mainMod Control_L, g, focuswindow, class:^(steam)$"
"$mainMod Control_L, b, exec, uwsm app -- $browser"
"$mainMod Control_L, b, focuswindow, class:^(zen)$"
"$mainMod Control_L, n, exec, [workspace 6] uwsm app -- $notes"
"$mainMod Control_L, n, focuswindow, class:^(obsidian)$"
"$mainMod Control_L, m, exec, [workspace 9] uwsm app -- $music_player"
"$mainMod Control_L, f, exec, uwsm app -- freetube"
"$mainMod Control_L, f, focuswindow, class:^(freetube)$"
"$mainMod Control_L, x, exec, uwsm app -- ~/.local/share/applications/x.desktop"
"$mainMod Control_L, x, focuswindow, class:^(chrome-x.com__-Default)$"
"$mainMod CONTROL_L L_SHIFT, B, exec, killall ashell && uwsm app -- ashell"
];
binde = [
"$mainMod alt, equal, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor | awk '/^float.*/ {print $2 * 1.1}')"
"$mainMod alt, minus, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor | awk '/^float.*/ {print $2 * 0.9}')"
"$mainMod L_SHIFT, l, resizeactive, 10 0"
"$mainMod L_SHIFT, h, resizeactive, -10 0"
"$mainMod L_SHIFT, k, resizeactive, 0 -10"
"$mainMod L_SHIFT, j, resizeactive, 0 10"
];
bindel = [
",XF86MonBrightnessDown, exec, hyprctl hyprsunset gamma -10"
",XF86MonBrightnessUp, exec, hyprctl hyprsunset gamma +10"
", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ && ~/.local/bin/wp-vol.sh && paplay /usr/share/sounds/freedesktop/stereo/bell.oga"
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- && ~/.local/bin/wp-vol.sh && paplay /usr/share/sounds/freedesktop/stereo/bell.oga"
", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_SOURCE@ toggle"
];
bindl = [
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_SINK@ toggle && ~/.local/bin/check-if-muted.sh"
", XF86AudioNext, exec, playerctl next"
", Pause, exec, playerctl play-pause"
"$mainMod, Pause, exec, playerctl play-pause --player spotify"
", XF86AudioPlay, exec, playerctl play-pause"
", XF86AudioPrev, exec, playerctl previous"
];
bindt = [
", PRINT, exec, ~/.local/bin/screenshot.sh region"
"$mainMod, PRINT, exec, ~/.local/bin/screenshot.sh fullscreen"
"alt_l, PRINT, exec, ~/.local/bin/screenshot.sh window"
];
bindm = [
"$mainMod, mouse:272, movewindow"
"$mainMod, mouse:273, resizewindow"
];
bindd = [
"$mainMod, F, Make app fullscreen, fullscreen"
"$mainMod, T, Toggle floating, togglefloating"
"$mainMod, P, Toggle pseudo, pseudo"
"$mainMod, S, Toggle split, togglesplit"
"$mainMod, Q, Kill active window, killactive"
];
};
extraConfig = ''
windowrule {
name = pavucontrol-float
match:class = ^(org.pulseaudio.pavucontrol)$
float = 1
size = 80% 60%
stay_focused = 1
center = 1
pin = 1
}
windowrule {
name = share-picker-float
match:class = ^(hyprland-share-picker)$
float = 1
center = 1
pin = 1
}
windowrule {
name = steam-friends-list
match:title = ^(Lista znajomych)$
float = 1
center = 1
size = 40% 60%
}
windowrule {
name = vesktop-dont-focus-pls
match:class = ^(vesktop)$
no_initial_focus = 1
focus_on_activate = 0
render_unfocused = 1
}
windowrule {
name = xdg-desktop-portal-gtk
match:class = ^(xdg-desktop-portal-gtk)$
float = 1
center = 1
size = 55% 50%
}
windowrule {
name = picture-in-picture
match:title = ^(Obraz w obrazie)$
pseudo = 1
no_initial_focus = 1
}
windowrule {
name = login-google-zen
match:title = ^(Logowanie Konta Google Zen Browser)$
float = 1
center = 1
}
windowrule {
name = prism-launcher
match:class = ^(org.prismlauncher.PrismLauncher)$
workspace = 3
}
windowrule {
name = gamescope
match:class = ^(gamescope)$
workspace = 3
}
monitorv2 {
output = DP-1
mode = 2560x1440@180.06
position = 0x0
scale = 1
vrr = 1
supports_wide_color = 1
bitdepth = 10
sdr_min_luminance = 0.005
sdr_max_luminance = 220
cm = hdr
supports_hdr = 1
}
monitorv2 {
output = DP-2
mode = 1920x1080@144
position = auto-left
vrr = 1
scale = 1.0
}
monitorv2 {
output = HDMI-A-2
mode = highres
position = auto-up
scale = 1
}
monitorv2 {
output =
position = auto-right
scale = 1
}
'';
};
}

View File

@@ -0,0 +1,22 @@
{ isNixOS, lib, ... }:
{
services.hyprlauncher = {
enable = true;
package = lib.mkIf (!isNixOS) null;
settings = {
cache.enabled = true;
finders = {
desktop_icons = true;
desktop_launch_prefix = "uwsm app --";
};
general = {
grab_focus = true;
};
};
};
}

88
modules/hypr/hyprlock.nix Normal file
View File

@@ -0,0 +1,88 @@
{ isNixOS, lib, ... }:
{
programs.hyprlock = {
enable = true;
package = lib.mkIf (!isNixOS) null;
settings = {
"$font" = "Monospace";
general = {
hide_cursor = false;
};
animations = {
enabled = true;
bezier = [
"linear, 1, 1, 0, 0"
];
animation = [
"fadeIn, 1, 5, linear"
"fadeOut, 1, 5, linear"
"inputFieldDots, 1, 2, linear"
];
};
background = [
{
monitor = "";
path = "screenshot";
blur_passes = 3;
}
];
input-field = [
{
monitor = "";
size = "20%, 5%";
outline_thickness = 3;
inner_color = "rgba(0, 0, 0, 0.0)";
outer_color = "rgba(33ccffee) rgba(00ff99ee) 45deg";
check_color = "rgba(00ff99ee) rgba(ff6633ee) 120deg";
fail_color = "rgba(ff6633ee) rgba(ff0066ee) 40deg";
font_color = "rgb(143, 143, 143)";
fade_on_empty = false;
rounding = 15;
font_family = "$font";
placeholder_text = "Input password...";
fail_text = "$PAMFAIL";
dots_spacing = 0.3;
position = "0, -20";
halign = "center";
valign = "center";
}
];
label = [
{
monitor = "";
text = "$TIME";
font_size = 90;
font_family = "$font";
position = "-30, 0";
halign = "right";
valign = "top";
}
{
monitor = "";
text = ''cmd[update:60000] date +"%A, %d %B %Y"'';
font_size = 25;
font_family = "$font";
position = "-30, -150";
halign = "right";
valign = "top";
}
{
monitor = "";
text = "$LAYOUT[pl]";
font_size = 24;
onclick = "hyprctl switchxkblayout all next";
position = "250, -20";
halign = "center";
valign = "center";
}
];
};
};
}

View File

@@ -0,0 +1,33 @@
{
isNixOS,
pkgs,
...
}:
{
services.hyprsunset = {
enable = true;
package =
if isNixOS then
pkgs.hyprsunset
else
(pkgs.writeShellScriptBin "hyprsunset" "exec /usr/bin/hyprsunset \"$@\"");
settings = {
max-gamma = 150;
profile = [
{
time = "7:00";
identity = true;
}
{
time = "21:00";
identity = false;
temperature = 4500;
gamma = 0.8;
}
];
};
};
}

View File

@@ -166,6 +166,7 @@
cssls.enable = true; cssls.enable = true;
html.enable = true; html.enable = true;
emmet_ls.enable = true; emmet_ls.enable = true;
friendly-snippets.enable = true;
# dev # dev
clangd.enable = true; clangd.enable = true;
pyright.enable = true; pyright.enable = true;