Initial commit
This commit is contained in:
35
modules/desktop/apps.nix
Normal file
35
modules/desktop/apps.nix
Normal file
@@ -0,0 +1,35 @@
|
||||
{ pkgs, ... }: {
|
||||
hm.home.packages = with pkgs; [
|
||||
# qtox
|
||||
# jami
|
||||
# session-desktop
|
||||
# briar-desktop
|
||||
dino
|
||||
# retroshare
|
||||
# mumble
|
||||
telegram-desktop
|
||||
thunderbird
|
||||
# fractal
|
||||
|
||||
keepassxc
|
||||
monero-gui
|
||||
libreoffice-fresh
|
||||
anki
|
||||
|
||||
playerctl
|
||||
android-tools
|
||||
libqalculate
|
||||
deploy-rs
|
||||
|
||||
mpv
|
||||
];
|
||||
|
||||
imp.home.dirs = [
|
||||
".local/share/TelegramDesktop"
|
||||
".local/share/fractal" ".cache/fractal"
|
||||
".cache/keepassxc" ".config/keepassxc"
|
||||
".config/qalculate"
|
||||
".local/share/Anki2" ".local/share/Anki"
|
||||
".local/share/dino"
|
||||
];
|
||||
}
|
7
modules/desktop/avahi.nix
Normal file
7
modules/desktop/avahi.nix
Normal file
@@ -0,0 +1,7 @@
|
||||
{ ... }: {
|
||||
services.avahi = {
|
||||
enable = true;
|
||||
nssmdns4 = true;
|
||||
nssmdns6 = true;
|
||||
};
|
||||
}
|
29
modules/desktop/bluetooth.nix
Normal file
29
modules/desktop/bluetooth.nix
Normal file
@@ -0,0 +1,29 @@
|
||||
{ pkgs, ... }: {
|
||||
hardware.bluetooth = {
|
||||
enable = true;
|
||||
settings = {
|
||||
General = {
|
||||
Enable = "Source,Sink,Media,Socket";
|
||||
};
|
||||
Policy = {
|
||||
AutoEnable = "true";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
imp.dirs = [ "/var/lib/bluetooth" ];
|
||||
|
||||
hm = {
|
||||
home.packages = with pkgs; [ bluetuith ];
|
||||
systemd.user.enable = true;
|
||||
systemd.user.services.mpris-proxy = {
|
||||
Unit = {
|
||||
Description = "Mpris proxy";
|
||||
After = [ "bluetooth.target" "sound.target" ];
|
||||
};
|
||||
Service.ExecStart = "${pkgs.bluez}/bin/mpris-proxy";
|
||||
Install.WantedBy = [ "default.target" ];
|
||||
};
|
||||
};
|
||||
imp.home.files = [ ".cache/.bluetoothctl_history" ];
|
||||
}
|
29
modules/desktop/cinny.nix
Executable file
29
modules/desktop/cinny.nix
Executable file
@@ -0,0 +1,29 @@
|
||||
{ lib, pkgs, ... }: {
|
||||
services.caddy = {
|
||||
enable = lib.mkDefault true;
|
||||
virtualHosts."http://localhost:1989".extraConfig = ''
|
||||
encode zstd gzip
|
||||
root * ${pkgs.cinny}
|
||||
|
||||
|
||||
file_server
|
||||
@index {
|
||||
not path /index.html
|
||||
not path /public/*
|
||||
not path /assets/*
|
||||
|
||||
not path /config.json
|
||||
|
||||
not path /manifest.json
|
||||
not path /pdf.worker.min.js
|
||||
not path /olm.wasm
|
||||
not path /sw.js
|
||||
|
||||
path /*
|
||||
}
|
||||
|
||||
rewrite /*/olm.wasm /olm.wasm
|
||||
rewrite @index /index.html
|
||||
'';
|
||||
};
|
||||
}
|
36
modules/desktop/cups.nix
Normal file
36
modules/desktop/cups.nix
Normal file
@@ -0,0 +1,36 @@
|
||||
{ pkgs, username, ... }: {
|
||||
services.printing = {
|
||||
enable = true;
|
||||
drivers = [
|
||||
pkgs.splix # Xerox Phaser 3117
|
||||
pkgs.pantum-driver # Pantum M6500W
|
||||
];
|
||||
};
|
||||
hardware.printers = {
|
||||
ensurePrinters = [
|
||||
{
|
||||
name = "Pantum";
|
||||
location = "Home";
|
||||
deviceUri = "ipps://pantum._ipps._tcp.local/";
|
||||
model = "Pantum/Pantum-M6500W-Series.ppd";
|
||||
ppdOptions = {
|
||||
PageSize = "A4";
|
||||
};
|
||||
}
|
||||
];
|
||||
ensureDefaultPrinter = "Pantum";
|
||||
};
|
||||
|
||||
services.saned.enable = true;
|
||||
hardware.sane = {
|
||||
enable = true;
|
||||
extraBackends = [ pkgs.pantum-driver pkgs.sane-airscan ];
|
||||
};
|
||||
services.udev.packages = [ pkgs.sane-airscan ];
|
||||
|
||||
n.misc.unfreePackages = [
|
||||
"pantum-driver-1.1.123"
|
||||
"pantum-driver"
|
||||
];
|
||||
users.users.${username}.extraGroups = [ "scanner" "lp" ];
|
||||
}
|
133
modules/desktop/firefox.nix
Normal file
133
modules/desktop/firefox.nix
Normal file
@@ -0,0 +1,133 @@
|
||||
{ inputs, pkgs, ... }: {
|
||||
n.misc.defaults.firefox = [
|
||||
"text/html"
|
||||
"x-scheme-handler/http"
|
||||
"x-scheme-handler/https"
|
||||
"application/pdf"
|
||||
];
|
||||
|
||||
hm = {
|
||||
imports = [ inputs.arkenfox.hmModules.arkenfox ];
|
||||
stylix.targets.firefox = {
|
||||
enable = true;
|
||||
profileNames = [ "default" ];
|
||||
};
|
||||
|
||||
programs.firefox = {
|
||||
enable = true;
|
||||
# arkenfox.enable = true; # TODO: configure arkenfox
|
||||
|
||||
profiles.default = {
|
||||
id = 0;
|
||||
isDefault = true;
|
||||
|
||||
search = {
|
||||
default = "ddg";
|
||||
engines =
|
||||
let
|
||||
getIcon = url: sha256: pkgs.fetchurl { inherit url sha256; };
|
||||
nixicon = getIcon "https://nixos.org/favicon.ico" "sha256-58CkYxFA9Baioz3+avCQocft/AW9sgOLTPV71gxKD2g=";
|
||||
in {
|
||||
|
||||
# Github
|
||||
"GitHub" = {
|
||||
urls = [ { template = "https://github.com/search?q={searchTerms}"; } ];
|
||||
icon = getIcon "https://github.githubassets.com/favicons/favicon-dark.svg" "sha256-qu/d9ftvsntplFuxw9RFL8BpI9b2g5b6xfeGw6Ekh6w=";
|
||||
definedAliases = [ "@github" "@gh" ];
|
||||
};
|
||||
|
||||
# Knihi.com
|
||||
"Knihi.com" = {
|
||||
urls = [ { template = "https://knihi.com/search.html#{searchTerms}"; } ];
|
||||
icon = getIcon "https://knihi.com/img/logo.svg" "sha256-wTpuVFhstRE6HXSWvrom49Wl0NNEw7jB+3dQDcLEWFI=";
|
||||
definedAliases = [ "@knihi" "@knihi.com" ];
|
||||
};
|
||||
|
||||
# NixOS Packages
|
||||
"NixOS Packages" = {
|
||||
urls = [ { template = "https://search.nixos.org/packages?channel=unstable&query={searchTerms}"; } ];
|
||||
icon = nixicon;
|
||||
definedAliases = [ "@nixpkgs" "@np" "@pkg" ];
|
||||
};
|
||||
|
||||
# NixOS Options
|
||||
"NixOS Options" = {
|
||||
urls = [ { template = "https://search.nixos.org/options?channel=unstable&query={searchTerms}"; } ];
|
||||
icon = nixicon;
|
||||
definedAliases = [ "@nixopts" "@no" "@opt" ];
|
||||
};
|
||||
|
||||
# NixOS Wiki
|
||||
"NixOS Wiki" = {
|
||||
urls = [ { template = "https://nixos.wiki/index.php?search={searchTerms}"; } ];
|
||||
icon = getIcon "https://nixos.wiki/favicon.png" "sha256-Sw3Sysk6x/xDTwz6q2/HWaCZtffapsAuMMFjYN0FhIk=";
|
||||
definedAliases = [ "@nixoswiki" "@nw" ];
|
||||
};
|
||||
|
||||
# Home Manager options
|
||||
"Home Manager Options" = {
|
||||
urls = [ { template = "https://home-manager-options.extranix.com/?query={searchTerms}"; } ];
|
||||
icon = getIcon "https://nixos.wiki/favicon.png" "sha256-Sw3Sysk6x/xDTwz6q2/HWaCZtffapsAuMMFjYN0FhIk=";
|
||||
definedAliases = [ "@hm" ];
|
||||
};
|
||||
|
||||
# Noogle (nix-functions search)
|
||||
"Noogle" = {
|
||||
urls = [ { template = "https://noogle.dev/q?term={searchTerms}"; } ];
|
||||
icon = getIcon "https://noogle.dev/favicon.png" "sha256-5VjB+MeP1c25DQivVzZe77NRjKPkrJdYAd07Zm0nNVM=";
|
||||
definedAliases = [ "@noogle" "@f" "@l" "@func" ];
|
||||
};
|
||||
|
||||
# Rutracker
|
||||
"Rutracker" = {
|
||||
urls = [ { template = "https://rutracker.org/forum/tracker.php?nm={searchTerms}"; } ];
|
||||
icon = getIcon "https://rutracker.org/favicon.ico" "sha256-p6PGZMIvLUX38QL5LnHGDr0X1SfNes5JiRdh4WNj6Zg=";
|
||||
definedAliases = [ "@rutracker" "@rutr" "@torrent" "@tr" ];
|
||||
};
|
||||
|
||||
# Flibusta
|
||||
"Flibusta" = {
|
||||
urls = [ { template = "https://flibusta.is/booksearch?ask={searchTerms}"; } ];
|
||||
icon = getIcon "https://flibusta.is/sites/default/files/bluebreeze_favicon.ico" "sha256-Ksq+eviBPAVULOXOPAxhJJ5jx9iQqIiQ4dak9twng+I=";
|
||||
definedAliases = [ "@rutracker" "@rutr" "@torrent" "@tr" ];
|
||||
};
|
||||
|
||||
# Wiktionary
|
||||
"Wiktionary" = {
|
||||
urls = [ { template = "https://en.wiktionary.org/w/index.php?title=Special:Search&search={searchTerms}"; } ];
|
||||
icon = getIcon "https://en.wiktionary.org/static/favicon/piece.ico" "sha256-Mz5Z9nz+gPlNqo8SerFgQSAMN76557yWZp4rgbjkPv8=";
|
||||
definedAliases = [ "@wiktionary" "@w" ];
|
||||
};
|
||||
|
||||
# Verbum
|
||||
"Verbum" = {
|
||||
urls = [ { template = "https://verbum.by/?q={searchTerms}"; } ];
|
||||
icon = getIcon "https://verbum.by/statics/favicon.png" "sha256-/P3zuoHbL5Rb7MYxPeehVCmfoB/V73edTvGrHTA8hJ4=";
|
||||
definedAliases = [ "@verbum" "@v" ];
|
||||
};
|
||||
|
||||
# Sloŭnik.org
|
||||
"Slounik.org" = {
|
||||
urls = [ { template = "https://slounik.org/search?dict=&search={searchTerms}"; } ];
|
||||
icon = getIcon "https://slounik.org/icon.svg" "sha256-jDvQ0iNMZ8pFp6+uvzTBuEOuVstZP2t1+hzDDx7oCAk=";
|
||||
definedAliases = [ "@slounik" "@sl" ];
|
||||
};
|
||||
|
||||
# Youtube
|
||||
"Youtube" = {
|
||||
urls = [ { template = "https://www.youtube.com/results?search_query={searchTerms}"; } ];
|
||||
icon = getIcon "https://www.youtube.com/s/desktop/280a3f09/img/favicon.ico" "sha256-i7HQ+kOhdDbVndVG9vdMdtxEc13vdSLCLYAxFm24kR0=";
|
||||
definedAliases = [ "@youtube" "@yt" "@y" ];
|
||||
};
|
||||
|
||||
# Disable crap
|
||||
"bing".metaData.hidden = true;
|
||||
"google".metaData.hidden = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
imp.home.dirs = [ ".mozilla" ];
|
||||
}
|
54
modules/desktop/fish.nix
Normal file
54
modules/desktop/fish.nix
Normal file
@@ -0,0 +1,54 @@
|
||||
{ pkgs, config, ...}: {
|
||||
globals.hm = {
|
||||
programs.carapace = {
|
||||
enableFishIntegration = true;
|
||||
enable = true;
|
||||
};
|
||||
home.packages = with pkgs; [ grc fzf ];
|
||||
|
||||
# home.file.".config/fish/config.fish".force = lib.mkForce true;
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
shellAliases = config.n.misc.aliases;
|
||||
|
||||
interactiveShellInit = ''
|
||||
set fish_greeting
|
||||
fish_vi_key_bindings
|
||||
'';
|
||||
|
||||
plugins = with pkgs.fishPlugins; [
|
||||
# Colorized command output
|
||||
{ name = "grc"; src = grc.src; }
|
||||
# Fzf integration
|
||||
{ name = "fzf"; src = fzf-fish.src; }
|
||||
{ name = "forgit"; src = forgit.src; }
|
||||
# Usage frequency-based directory jumping
|
||||
{ name = "z"; src = z.src; }
|
||||
];
|
||||
|
||||
functions = {
|
||||
fish_prompt = "string join '' -- (set_color --bold green) (prompt_login) (set_color normal) ' ['(prompt_pwd)']' (set_color green) (fish_git_prompt) ' '(fish_default_mode_prompt)\\n(set_color blue)'> '(set_color normal)";
|
||||
fish_mode_prompt = "";
|
||||
fish_default_mode_prompt = ''
|
||||
switch $fish_bind_mode
|
||||
case default
|
||||
set_color red
|
||||
echo '[N]'
|
||||
case insert
|
||||
set_color green
|
||||
echo '[I]'
|
||||
case replace_one
|
||||
set_color green
|
||||
echo '[R]'
|
||||
case visual
|
||||
set_color brmagenta
|
||||
echo '[V]'
|
||||
end
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
imp.home.dirs = [ ".local/share/fish" ];
|
||||
users.defaultUserShell = pkgs.fish;
|
||||
programs.fish.enable = true;
|
||||
}
|
28
modules/desktop/fonts.nix
Normal file
28
modules/desktop/fonts.nix
Normal file
@@ -0,0 +1,28 @@
|
||||
{ pkgs, ... }: {
|
||||
fonts = {
|
||||
packages = with pkgs; ([
|
||||
# fira-code
|
||||
# fira-code-symbols
|
||||
noto-fonts-emoji
|
||||
]
|
||||
++ (with nerd-fonts; [
|
||||
fira-code
|
||||
fira-sans
|
||||
fira-mono
|
||||
noto
|
||||
font-awesome
|
||||
cozette
|
||||
source-han-sans
|
||||
ubuntu
|
||||
]));
|
||||
|
||||
fontconfig = {
|
||||
defaultFonts = {
|
||||
monospace = ["FiraCode Nerd Font Mono" "Noto Color Emoji"];
|
||||
sansSerif = ["FiraCode Nerd Font" "Noto Color Emoji"];
|
||||
serif = ["FiraCode Nerd Font" "Noto Color Emoji"];
|
||||
emoji = ["Noto Color Emoji"];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
6
modules/desktop/foot.nix
Normal file
6
modules/desktop/foot.nix
Normal file
@@ -0,0 +1,6 @@
|
||||
{ ... }: {
|
||||
hm.programs.foot = {
|
||||
enable = true;
|
||||
server.enable = true;
|
||||
};
|
||||
}
|
10
modules/desktop/gpg.nix
Normal file
10
modules/desktop/gpg.nix
Normal file
@@ -0,0 +1,10 @@
|
||||
{ pkgs, ... }: {
|
||||
hm.programs.gpg.enable = true;
|
||||
|
||||
hm.services.gpg-agent = {
|
||||
enable = true;
|
||||
enableSshSupport = false;
|
||||
pinentry.package = pkgs.pinentry-tty;
|
||||
enableFishIntegration = true;
|
||||
};
|
||||
}
|
3
modules/desktop/gvfs.nix
Normal file
3
modules/desktop/gvfs.nix
Normal file
@@ -0,0 +1,3 @@
|
||||
{ ... }: {
|
||||
services.gvfs.enable = true;
|
||||
}
|
20
modules/desktop/loupe.nix
Normal file
20
modules/desktop/loupe.nix
Normal file
@@ -0,0 +1,20 @@
|
||||
{ pkgs, ... }: {
|
||||
hm.home.packages = with pkgs; [ loupe ];
|
||||
n.misc.defaults."org.gnome.Loupe" = [
|
||||
"image/avif"
|
||||
"image/bmp"
|
||||
"image/gif"
|
||||
"image/jp2"
|
||||
"image/jpeg"
|
||||
"image/jpg"
|
||||
"image/jpm"
|
||||
"image/jpx"
|
||||
"image/jxl"
|
||||
"image/png"
|
||||
"image/tiff"
|
||||
"image/vnd.microsoft.icon"
|
||||
"image/webp"
|
||||
"image/webp"
|
||||
"image/x-tga"
|
||||
];
|
||||
}
|
5
modules/desktop/network-manager.nix
Normal file
5
modules/desktop/network-manager.nix
Normal file
@@ -0,0 +1,5 @@
|
||||
{ username, ... }: {
|
||||
networking.networkmanager.enable = true;
|
||||
users.users.${username}.extraGroups = [ "networkmanager" "netdev" ];
|
||||
imp.dirs = [ "/etc/NetworkManager" "/var/lib/NetworkManager" ];
|
||||
}
|
290
modules/desktop/niri.nix
Normal file
290
modules/desktop/niri.nix
Normal file
@@ -0,0 +1,290 @@
|
||||
{ lib, pkgs, config, inputs, username, ... }: {
|
||||
imports = [ inputs.niri.nixosModules.niri ];
|
||||
hm.imports = [ inputs.ags.homeManagerModules.ags ];
|
||||
|
||||
nixpkgs.overlays = [
|
||||
inputs.niri.overlays.niri
|
||||
(final: prev: {
|
||||
c.niri = final.niri-unstable;
|
||||
})
|
||||
];
|
||||
|
||||
programs.light.enable = true;
|
||||
programs.niri = {
|
||||
enable = true;
|
||||
package = pkgs.c.niri;
|
||||
};
|
||||
|
||||
hm.home.packages = with pkgs; [ mako wofi wl-clipboard wl-clipboard-x11 swaybg swayidle swaylock yambar ];
|
||||
hm.programs.niri.settings = {
|
||||
environment = {
|
||||
QT_QPA_PLATFORM = "wayland";
|
||||
NIXOS_OZONE_WL = "1";
|
||||
GSK_RENDERER = "gl";
|
||||
};
|
||||
|
||||
input = {
|
||||
touchpad = {
|
||||
natural-scroll = false;
|
||||
scroll-method = "two-finger";
|
||||
tap = true;
|
||||
};
|
||||
|
||||
keyboard = {
|
||||
xkb = {
|
||||
layout = "pl,by(ru)";
|
||||
options = "grp:caps_toggle,compose:menu";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
spawn-at-startup = [
|
||||
{ command = [ "${lib.getExe pkgs.mako}" ]; }
|
||||
{ command = [ "${lib.getExe pkgs.xwayland-satellite}" ]; }
|
||||
{ command = [ "${lib.getExe pkgs.swaybg}" "--image" "/home/${username}/Pictures/Wallpapers/1.png" ]; }
|
||||
{ command = let
|
||||
swaylock = "${lib.getExe pkgs.swaylock} -f -c 000000";
|
||||
niri = lib.getExe pkgs.niri;
|
||||
light = lib.getExe pkgs.light;
|
||||
script = pkgs.writeShellScript "lockscript.sh"
|
||||
''
|
||||
${lib.getExe pkgs.swayidle} -w \
|
||||
lock '${swaylock} && ${niri} msg action power-off-monitors' \
|
||||
unlock '${niri} msg action power-on-monitors' \
|
||||
timeout 200 '${swaylock}' \
|
||||
timeout 210 '${niri} msg action power-off-monitors' \
|
||||
resume '${niri} msg action power-on-monitors' \
|
||||
timeout 195 '${light} -U 50' \
|
||||
resume '${light} -A 50' \
|
||||
before-sleep '${swaylock}'
|
||||
'';
|
||||
in [ "sh" "-e" "${script}" ];
|
||||
}
|
||||
{ command = [ "${lib.getExe pkgs.yambar}" ]; }
|
||||
];
|
||||
binds = with config.hm.lib.niri.actions; let
|
||||
workspaces = [1 2 3 4 5 6 7 8 9];
|
||||
tags-binds = map (x: { "Mod+${toString x}".action = focus-workspace x;
|
||||
"Mod+Shift+${toString x}".action = move-column-to-index x;
|
||||
}) workspaces;
|
||||
in lib.mkMerge (tags-binds ++ [{
|
||||
# Volume
|
||||
"XF86AudioRaiseVolume" = {
|
||||
action = spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.01+";
|
||||
allow-when-locked = true;
|
||||
};
|
||||
"XF86AudioLowerVolume".action = spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.01-";
|
||||
"XF86AudioMute".action = spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle";
|
||||
"XF86AudioMicMute".action = spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle";
|
||||
|
||||
"XF86Calculator".action = spawn "foot" "-e" "qalc";
|
||||
|
||||
"XF86MonBrightnessUp".action = spawn "${lib.getExe pkgs.light}" "-A" "2";
|
||||
"XF86MonBrightnessDown".action = spawn "${lib.getExe pkgs.light}" "-U" "2";
|
||||
"XF86ScreenSaver".action = let session = "loginctl session-status | awk '{ print $1 }' | head -n 1";
|
||||
in spawn "loginctl lock-session $(${session})";
|
||||
|
||||
|
||||
"Mod+Shift+Q".action = close-window;
|
||||
"Mod+Shift+E".action = quit;
|
||||
"Mod+Space".action = toggle-window-floating;
|
||||
"Mod+O".action = toggle-overview;
|
||||
"Mod+Slash".action = show-hotkey-overlay;
|
||||
"Mod+P".action = toggle-window-rule-opacity;
|
||||
|
||||
"Mod+Minus".action = set-column-width "-10%";
|
||||
"Mod+Equal".action = set-column-width "+10%";
|
||||
"Mod+Shift+Minus".action = set-window-height "-10%";
|
||||
"Mod+Shift+Equal".action = set-window-height "+10%";
|
||||
|
||||
"Mod+W".action = toggle-column-tabbed-display;
|
||||
"Mod+Ctrl+H".action = consume-or-expel-window-left;
|
||||
"Mod+Ctrl+L".action = consume-or-expel-window-right;
|
||||
|
||||
"Mod+R".action = switch-preset-column-width;
|
||||
"Mod+Shift+R".action = reset-window-height;
|
||||
"Mod+F".action = maximize-column;
|
||||
"Mod+Shift+F".action = fullscreen-window;
|
||||
"Mod+C".action = center-column;
|
||||
|
||||
# Mouse
|
||||
"Mod+WheelScrollUp".action = focus-workspace-up;
|
||||
"Mod+WheelScrollDown".action = focus-workspace-down;
|
||||
|
||||
"Mod+Shift+WheelScrollDown".action = focus-column-right;
|
||||
"Mod+Shift+WheelScrollUp".action = focus-column-left;
|
||||
"Mod+Ctrl+Shift+WheelScrollDown".action = move-column-right;
|
||||
"Mod+Ctrl+Shift+WheelScrollUp".action = move-column-left;
|
||||
|
||||
# Focus window or workspace
|
||||
"Mod+Left".action = focus-column-left;
|
||||
"Mod+Down".action = focus-window-or-workspace-down;
|
||||
"Mod+Up".action = focus-window-or-workspace-up;
|
||||
"Mod+Right".action = focus-column-right;
|
||||
|
||||
"Mod+H".action = focus-column-left;
|
||||
"Mod+J".action = focus-window-or-workspace-down;
|
||||
"Mod+K".action = focus-window-or-workspace-up;
|
||||
"Mod+L".action = focus-column-right;
|
||||
|
||||
# Move window or workspace
|
||||
"Mod+Shift+Left".action = move-column-left;
|
||||
"Mod+Shift+Down".action = move-window-down-or-to-workspace-down;
|
||||
"Mod+Shift+Up".action = move-window-up-or-to-workspace-up;
|
||||
"Mod+Shift+Right".action = move-column-right;
|
||||
|
||||
"Mod+Shift+H".action = move-column-left;
|
||||
"Mod+Shift+J".action = move-window-down-or-to-workspace-down;
|
||||
"Mod+Shift+K".action = move-window-up-or-to-workspace-up;
|
||||
"Mod+Shift+L".action = move-column-right;
|
||||
|
||||
# Move workspace
|
||||
"Mod+U".action = move-workspace-down;
|
||||
"Mod+I".action = move-workspace-up;
|
||||
|
||||
"Mod+Ctrl+J".action = move-workspace-down;
|
||||
"Mod+Ctrl+K".action = move-workspace-up;
|
||||
|
||||
"Mod+Ctrl+Down".action = move-workspace-down;
|
||||
"Mod+Ctrl+Up".action = move-workspace-up;
|
||||
|
||||
# Screenshots
|
||||
"Print".action = screenshot;
|
||||
# "Ctrl+Print".action = screenshot-screen; # Only on niri-stable
|
||||
"Alt+Print".action = screenshot-window;
|
||||
|
||||
# "Mod+B".action = spawn "${lib.getExe pkgs.ungoogled-chromium}";
|
||||
"Mod+B".action = spawn "${lib.getExe pkgs.firefox}";
|
||||
"Mod+Shift+B".action = spawn "${lib.getExe pkgs.ungoogled-chromium}";
|
||||
"Mod+D".action = spawn "${lib.getExe pkgs.wofi}" "--show" "drun";
|
||||
# "Mod+Return".action = spawn "footclient";
|
||||
"Mod+Return".action = spawn "${lib.getExe pkgs.foot}";
|
||||
}]);
|
||||
|
||||
window-rules = [
|
||||
{
|
||||
matches = [
|
||||
{ title = "Cinny"; }
|
||||
{ title = "cinny"; }
|
||||
{ title = "Element"; }
|
||||
{ title = "element"; }
|
||||
{ title = "Library"; }
|
||||
{ title = "YouTube"; }
|
||||
{ title = "Invidious"; }
|
||||
{ title = "Piped"; }
|
||||
{ app-id = "org\.keepassxc\.KeePassXC"; }
|
||||
{ app-id = "org\.gnome\.World\.Secrets"; }
|
||||
{ app-id = "org\.gnome\.Nautilus"; }
|
||||
|
||||
{ title = "File Upload"; }
|
||||
{ title = "Open File"; }
|
||||
{ title = "Open Folder"; }
|
||||
{ app-id = "xdg-desktop-portal-gnome"; }
|
||||
|
||||
{ title = "Telegram"; }
|
||||
{ app-id= "io\.github\.tdesktop_x64\.TDesktop"; }
|
||||
];
|
||||
block-out-from = "screencast";
|
||||
}
|
||||
|
||||
{ matches = [
|
||||
{ app-id = "librewolf"; }
|
||||
{ app-id = "firefox"; }
|
||||
];
|
||||
open-maximized = true; }
|
||||
{ matches = [
|
||||
{ app-id = "alacritty"; }
|
||||
{ app-id = "foot"; }
|
||||
{ app-id = "footclient"; }
|
||||
];
|
||||
default-column-width = { proportion = 0.50; }; }
|
||||
|
||||
{
|
||||
matches = [
|
||||
{ is-active = false; }
|
||||
];
|
||||
opacity = 0.9;
|
||||
}
|
||||
{
|
||||
matches = [
|
||||
{ is-active = true; }
|
||||
];
|
||||
opacity = 1.0;
|
||||
}
|
||||
|
||||
{
|
||||
matches = [
|
||||
{ is-window-cast-target = true; }
|
||||
];
|
||||
focus-ring.active.gradient = { # TODO: set colors using stylix
|
||||
from = "#f38ba8";
|
||||
to = "#7d0d2d70";
|
||||
};
|
||||
focus-ring.inactive.color = "#7d0d2d";
|
||||
shadow = {
|
||||
enable = true;
|
||||
color = "#7d0d2d70";
|
||||
};
|
||||
}
|
||||
|
||||
{ geometry-corner-radius = {
|
||||
top-left = 3.0;
|
||||
top-right = 3.0;
|
||||
bottom-left = 0.0;
|
||||
bottom-right = 0.0;
|
||||
};
|
||||
clip-to-geometry = true;
|
||||
}
|
||||
];
|
||||
|
||||
layer-rules = [
|
||||
{
|
||||
matches = [
|
||||
{ namespace = "waybar"; }
|
||||
{ namespace = "yambar"; }
|
||||
];
|
||||
|
||||
opacity = 0.8;
|
||||
shadow = {
|
||||
enable = true;
|
||||
softness = 40;
|
||||
spread = 5;
|
||||
offset.x = 0;
|
||||
offset.y = 5;
|
||||
draw-behind-window = true;
|
||||
color = "#00000064";
|
||||
};
|
||||
}
|
||||
];
|
||||
|
||||
hotkey-overlay.skip-at-startup = true;
|
||||
|
||||
prefer-no-csd = true;
|
||||
animations = {
|
||||
workspace-switch.spring = {
|
||||
damping-ratio = 1.000000;
|
||||
epsilon = 0.000100;
|
||||
stiffness = 1000;
|
||||
};
|
||||
};
|
||||
|
||||
layout = {
|
||||
border.enable = false;
|
||||
focus-ring = {
|
||||
enable = true;
|
||||
width = 2;
|
||||
active.color = config.lib.stylix.colors.base0D;
|
||||
};
|
||||
|
||||
tab-indicator = {
|
||||
enable = true;
|
||||
gap = 5;
|
||||
width = 4;
|
||||
gaps-between-tabs = 3;
|
||||
active.color = config.lib.stylix.colors.base05;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
environment.etc."lemurs/wayland/niri".source = pkgs.writeShellScript "niri.sh" "${pkgs.niri}/bin/niri-session";
|
||||
}
|
121
modules/desktop/nvim/default.nix
Normal file
121
modules/desktop/nvim/default.nix
Normal file
@@ -0,0 +1,121 @@
|
||||
{ pkgs, config, ...}: {
|
||||
hm = {
|
||||
imports = [
|
||||
./lsp.nix
|
||||
./oil.nix
|
||||
];
|
||||
|
||||
programs.neovim = {
|
||||
enable = true;
|
||||
defaultEditor = true;
|
||||
viAlias = true;
|
||||
vimAlias = true;
|
||||
|
||||
extraLuaConfig = ''
|
||||
require "nvim.icons"
|
||||
require "nvim.keybinds"
|
||||
require "nvim.bufferline"
|
||||
require "nvim.cyrillic"
|
||||
-------------------
|
||||
local bind = vim.keymap.set
|
||||
local opt = vim.opt
|
||||
local g = vim.g
|
||||
local o = vim.o
|
||||
local cmd = vim.cmd
|
||||
-------------------
|
||||
|
||||
-- cmd [[colorscheme gruvbox]]
|
||||
|
||||
o.expandtab = true
|
||||
o.smarttab = true
|
||||
o.cindent = true
|
||||
o.autoindent = true
|
||||
|
||||
o.ignorecase = true
|
||||
o.smartcase = true
|
||||
|
||||
o.backup = false
|
||||
o.writebackup = false
|
||||
o.undofile = true
|
||||
o.swapfile = false
|
||||
|
||||
opt.relativenumber = true
|
||||
opt.number = true
|
||||
opt.tabstop = 2
|
||||
opt.shiftwidth = 2
|
||||
opt.spelllang = { "en_us", "ru", "by" }
|
||||
opt.mouse = "a"
|
||||
opt.termguicolors = true
|
||||
opt.clipboard = "unnamedplus"
|
||||
'';
|
||||
|
||||
plugins = with pkgs.vimPlugins; [
|
||||
nvim-tree-lua
|
||||
gruvbox-nvim
|
||||
which-key-nvim
|
||||
nvim-autopairs
|
||||
{ plugin = nvim-highlight-colors; type = "lua";
|
||||
config = "require('nvim-highlight-colors').setup({})"; }
|
||||
{ plugin = comment-nvim; type = "lua";
|
||||
config = "require('Comment').setup()"; }
|
||||
{ plugin = nvim-autopairs; type = "lua";
|
||||
config = ''require("nvim-autopairs").setup{}''; }
|
||||
{ plugin = lualine-nvim; type = "lua";
|
||||
config = ''require "nvim.lualine"''; }
|
||||
nvim-web-devicons
|
||||
vim-startuptime
|
||||
{ plugin = nvim-tree-lua; type = "lua";
|
||||
config = ''require "nvim.filemanager"''; }
|
||||
|
||||
{ plugin = telescope-nvim; type = "lua";
|
||||
config = ''
|
||||
require('telescope').load_extension('fzf')
|
||||
local telescope = require('telescope.builtin')
|
||||
-- Old keybinds
|
||||
bind('n', 'gfc', telescope.find_files, {})
|
||||
bind('n', 'gfs', telescope.live_grep, {})
|
||||
bind('n', 'gfb', telescope.buffers, {})
|
||||
-- New keybinds
|
||||
bind('n', '<space>/', telescope.live_grep, {})
|
||||
bind('n', '<space>h', telescope.help_tags, {})
|
||||
bind('n', '<space>b', telescope.buffers, {})
|
||||
bind('n', '<space>e', telescope.buffers, {})
|
||||
bind('n', '<space>f', telescope.find_files, {})
|
||||
''; }
|
||||
{ plugin = editorconfig-nvim; type = "lua";
|
||||
config = ''require "editorconfig"''; }
|
||||
telescope-fzf-native-nvim
|
||||
bufferline-nvim # ./lua/nvim/bufferline.lua
|
||||
];
|
||||
};
|
||||
|
||||
home = {
|
||||
file.".config/nvim/lua" = {
|
||||
enable = true;
|
||||
source = ./lua;
|
||||
target = ".config/nvim/lua";
|
||||
recursive = true;
|
||||
};
|
||||
};
|
||||
|
||||
editorconfig = {
|
||||
enable = true;
|
||||
settings = {
|
||||
"*" = {
|
||||
charset = "utf-8";
|
||||
end_of_line = "lf";
|
||||
trim_trailing_whitespace = true;
|
||||
insert_final_newline = true;
|
||||
max_line_width = 78;
|
||||
indent_style = "space";
|
||||
indent_size = 2;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
home.sessionVariables = {
|
||||
# EDITOR = lib.mkForce lib.getExe pkgs.neovim;
|
||||
MANPAGER = "${config.hm.home.sessionVariables.EDITOR} +Man!";
|
||||
};
|
||||
};
|
||||
}
|
24
modules/desktop/nvim/lsp.nix
Executable file
24
modules/desktop/nvim/lsp.nix
Executable file
@@ -0,0 +1,24 @@
|
||||
{ pkgs, ... }: {
|
||||
home.packages = with pkgs; [
|
||||
rust-analyzer
|
||||
pyright
|
||||
nixd
|
||||
lua-language-server
|
||||
nodePackages.typescript-language-server
|
||||
nodePackages.vscode-langservers-extracted
|
||||
gopls
|
||||
nimlsp
|
||||
clang-tools
|
||||
];
|
||||
|
||||
programs.neovim.plugins = with pkgs.vimPlugins; [
|
||||
{ plugin = nvim-lspconfig; type = "lua";
|
||||
config = ''require "nvim.lsp"''; }
|
||||
nvim-cmp
|
||||
luasnip
|
||||
cmp-nvim-lsp
|
||||
cmp_luasnip
|
||||
cmp-path
|
||||
cmp-buffer
|
||||
];
|
||||
}
|
43
modules/desktop/nvim/lua/nvim/bufferline.lua
Executable file
43
modules/desktop/nvim/lua/nvim/bufferline.lua
Executable file
@@ -0,0 +1,43 @@
|
||||
require("bufferline").setup{
|
||||
options = {
|
||||
diagnostics = "nvim_lsp",
|
||||
diagnostics_indicator = function(count, level, diagnostics_dict, context)
|
||||
local icon = level:match("error") and " " or " "
|
||||
return " " .. icon .. count
|
||||
end,
|
||||
|
||||
numbers = function(opts)
|
||||
return string.format('%s)', opts.ordinal, opts.id)
|
||||
end,
|
||||
|
||||
-- groups = {
|
||||
-- options = {
|
||||
-- toggle_hidden_on_enter = true -- when you re-enter a hidden group this options re-opens that group so the buffer is visible
|
||||
-- },
|
||||
-- items = {
|
||||
-- {
|
||||
-- name = "Code", -- Mandatory
|
||||
-- highlight = {underline = true, sp = "blue"}, -- Optional
|
||||
-- priority = 1,
|
||||
-- icon = "",
|
||||
-- matcher = function(buf)
|
||||
-- return buf.filename:match('%.rs') or buf.filename:match('%.py') or buf.filename:match('%.nix') or buf.filename:match('%.lua')
|
||||
-- end,
|
||||
-- },
|
||||
-- {
|
||||
-- name = "Docs",
|
||||
-- highlight = {undercurl = true, sp = "green"},
|
||||
-- auto_close = false,
|
||||
-- icon = "", -- Optional
|
||||
-- priority = 2,
|
||||
-- matcher = function(buf)
|
||||
-- return buf.filename:match('%.md') or buf.filename:match('%.txt') or buf.filename:match('LICENSE')
|
||||
-- end,
|
||||
-- separator = { -- Optional
|
||||
-- style = require('bufferline.groups').separator.tab
|
||||
-- },
|
||||
-- }
|
||||
-- }
|
||||
-- }
|
||||
}
|
||||
}
|
612
modules/desktop/nvim/lua/nvim/cyrillic.lua
Normal file
612
modules/desktop/nvim/lua/nvim/cyrillic.lua
Normal file
@@ -0,0 +1,612 @@
|
||||
-- Author: nrv
|
||||
-- Version: 1.0
|
||||
-- License: GPLv3
|
||||
-- URL: http://github.com/nativerv/cyrillic.nvim
|
||||
-- Description: Adds some support for Cyrillic keyboard
|
||||
-- layouts (Ukrainian, Russian) in Neovim
|
||||
|
||||
vim.cmd [[
|
||||
cabbrev <expr> ив getcmdtype()==':' && getcmdline()=="ив" ? "bd" : "ив"
|
||||
cabbrev <expr> ит getcmdtype()==':' && getcmdline()=="ит" ? "bn" : "ит"
|
||||
cabbrev <expr> й getcmdtype()==':' && getcmdline()=="й" ? "q" : "й"
|
||||
cabbrev <expr> йф getcmdtype()==':' && getcmdline()=="йф" ? "qa" : "йф"
|
||||
cabbrev <expr> ц getcmdtype()==':' && getcmdline()=="ц" ? "w" : "ц"
|
||||
cabbrev <expr> цй getcmdtype()==':' && getcmdline()=="цй" ? "wq" : "цй"
|
||||
]]
|
||||
|
||||
vim.keymap.set('', 'ё', '`', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '’', '`', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'й', 'q', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ц', 'w', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'у', 'e', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'к', 'r', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'е', 't', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'н', 'y', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'г', 'u', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ш', 'i', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'щ', 'o', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'з', 'p', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'х', '[', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ъ', ']', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ї', ']', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ф', 'a', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ы', 's', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'і', 's', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'в', 'd', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'а', 'f', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'п', 'g', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'р', 'h', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'о', 'j', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'л', 'k', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'д', 'l', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ж', ';', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'э', "'", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'є', "'", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'я', 'z', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ч', 'x', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'с', 'c', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'м', 'v', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'и', 'b', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'т', 'n', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ь', 'm', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'б', ',', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ю', '.', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Ё', '~', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Й', 'Q', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Ц', 'W', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'У', 'E', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'К', 'R', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Е', 'T', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Н', 'Y', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Г', 'U', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Ш', 'I', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Щ', 'O', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'З', 'P', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Х', '{', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Ъ', '}', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Ї', '}', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Ф', 'A', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Ы', 'S', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'І', 'S', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'В', 'D', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'А', 'F', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'П', 'G', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Р', 'H', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'О', 'J', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Л', 'K', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Д', 'L', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Ж', ':', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Э', '"', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Є', '"', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Я', 'Z', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Ч', 'X', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'С', 'C', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'М', 'V', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'И', 'B', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Т', 'N', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Ь', 'M', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Б', '<', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Ю', '>', { desc = 'which_key_ignore' })
|
||||
|
||||
vim.keymap.set('', 'ЯЯ', 'ZZ', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЯЙ', 'ZQ', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'йЖ', 'q:', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'й.', 'q/', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'й,', 'q?', { desc = 'which_key_ignore' })
|
||||
|
||||
vim.keymap.set('', 'ёё', '``', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёБ', '`<', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёЮ', '`>', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёх', '`[', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёъ', '`]', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёХ', '`{', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёЪ', '`}', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ээ', "''", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эБ', "'<", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эЮ', "'>", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эх', "'[", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эъ', "']", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эХ', "'{", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эЪ', "'}", { desc = 'which_key_ignore' })
|
||||
|
||||
vim.keymap.set('', 'хэ', "['", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'хё', '[`', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'хВ', '[D', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'хШ', '[I', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'хЗ', '[P', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'хх', '[[', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'хъ', '[]', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'хс', '[c', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'хв', '[d', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ха', '[f', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'хш', '[i', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'хь', '[m', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'хз', '[p', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'хы', '[s', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'хя', '[z', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'хХ', '[{', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ъэ', "]'", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ъё', ']`', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ъВ', ']D', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ъШ', ']I', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ъЗ', ']P', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ъх', '][', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ъъ', ']]', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ъс', ']c', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ъв', ']d', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ъа', ']f', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ъш', ']i', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ъь', ']m', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ъз', ']p', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ъы', ']s', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ъя', ']z', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ъХ', ']{', { desc = 'which_key_ignore' })
|
||||
|
||||
vim.keymap.set('', 'ьФ', 'mA', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёФ', '`A', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эФ', "'A", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёФ', 'g`A', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэФ', "g'A", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьИ', 'mB', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёИ', '`B', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эИ', "'B", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёИ', 'g`B', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэИ', "g'B", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьС', 'mC', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёС', '`C', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эС', "'C", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёС', 'g`C', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэС', "g'C", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьВ', 'mD', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёВ', '`D', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эВ', "'D", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёВ', 'g`D', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэВ', "g'D", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьУ', 'mE', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёУ', '`E', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эУ', "'E", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёУ', 'g`E', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэУ', "g'E", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьА', 'mF', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёА', '`F', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эА', "'F", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёА', 'g`F', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэА', "g'F", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьП', 'mG', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёП', '`G', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эП', "'G", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёП', 'g`G', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэП', "g'G", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьР', 'mH', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёР', '`H', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эР', "'H", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёР', 'g`H', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэР', "g'H", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьШ', 'mI', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёШ', '`I', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эШ', "'I", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёШ', 'g`I', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэШ', "g'I", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьО', 'mJ', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёО', '`J', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эО', "'J", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёО', 'g`J', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэО', "g'J", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьЛ', 'mK', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёЛ', '`K', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эЛ', "'K", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёЛ', 'g`K', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэЛ', "g'K", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьД', 'mL', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёД', '`L', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эД', "'L", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёД', 'g`L', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэД', "g'L", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьЬ', 'mM', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёЬ', '`M', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эЬ', "'M", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёЬ', 'g`M', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэЬ', "g'M", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьТ', 'mN', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёТ', '`N', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эТ', "'N", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёТ', 'g`N', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэТ', "g'N", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьЩ', 'mO', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёЩ', '`O', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эЩ', "'O", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёЩ', 'g`O', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэЩ', "g'O", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьЗ', 'mP', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёЗ', '`P', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эЗ', "'P", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёЗ', 'g`P', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэЗ', "g'P", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьЙ', 'mQ', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёЙ', '`Q', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эЙ', "'Q", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёЙ', 'g`Q', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэЙ', "g'Q", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьК', 'mR', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёК', '`R', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эК', "'R", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёК', 'g`R', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэК', "g'R", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьЫ', 'mS', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёЫ', '`S', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эЫ', "'S", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёЫ', 'g`S', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэЫ', "g'S", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьЕ', 'mT', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёЕ', '`T', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эЕ', "'T", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёЕ', 'g`T', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэЕ', "g'T", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьГ', 'mU', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёГ', '`U', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эГ', "'U", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёГ', 'g`U', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэГ', "g'U", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьМ', 'mV', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёМ', '`V', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эМ', "'V", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёМ', 'g`V', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэМ', "g'V", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьЦ', 'mW', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёЦ', '`W', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эЦ', "'W", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёЦ', 'g`W', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэЦ', "g'W", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьЧ', 'mX', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёЧ', '`X', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эЧ', "'X", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёЧ', 'g`X', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэЧ', "g'X", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьН', 'mY', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёН', '`Y', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эН', "'Y", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёН', 'g`Y', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэН', "g'Y", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьЯ', 'mZ', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёЯ', '`Z', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эЯ', "'Z", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёЯ', 'g`Z', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэЯ', "g'Z", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьф', 'ma', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёф', '`a', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эф', "'a", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёф', 'g`a', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэф', "g'a", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьи', 'mb', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёи', '`b', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эи', "'b", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёи', 'g`b', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэи', "g'b", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьс', 'mc', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёс', '`c', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эс', "'c", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёс', 'g`c', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэс', "g'c", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьв', 'md', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёв', '`d', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эв', "'d", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёв', 'g`d', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэв', "g'd", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьу', 'me', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёу', '`e', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эу', "'e", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёу', 'g`e', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэу', "g'e", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьа', 'mf', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёа', '`f', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эа', "'f", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёа', 'g`f', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэа', "g'f", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьп', 'mg', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёп', '`g', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эп', "'g", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёп', 'g`g', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэп', "g'g", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьр', 'mh', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёр', '`h', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эр', "'h", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёр', 'g`h', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэр', "g'h", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьш', 'mi', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёш', '`i', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эш', "'i", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёш', 'g`i', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэш', "g'i", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьо', 'mj', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёо', '`j', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эо', "'j", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёо', 'g`j', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэо', "g'j", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьл', 'mk', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёл', '`k', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эл', "'k", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёл', 'g`k', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэл', "g'k", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьд', 'ml', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёд', '`l', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эд', "'l", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёд', 'g`l', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэд', "g'l", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьь', 'mm', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёь', '`m', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эь', "'m", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёь', 'g`m', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэь', "g'm", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьт', 'mn', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёт', '`n', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эт', "'n", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёт', 'g`n', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэт', "g'n", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьщ', 'mo', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёщ', '`o', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эщ', "'o", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёщ', 'g`o', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэщ', "g'o", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьз', 'mp', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёз', '`p', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эз', "'p", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёз', 'g`p', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэз', "g'p", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьй', 'mq', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёй', '`q', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эй', "'q", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёй', 'g`q', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэй', "g'q", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьк', 'mr', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёк', '`r', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эк', "'r", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёк', 'g`r', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэк', "g'r", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьы', 'ms', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёы', '`s', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эы', "'s", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёы', 'g`s', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэы', "g's", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ье', 'mt', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёе', '`t', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эе', "'t", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёе', 'g`t', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэе', "g't", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьг', 'mu', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёг', '`u', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эг', "'u", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёг', 'g`u', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэг', "g'u", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьм', 'mv', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ём', '`v', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эм', "'v", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пём', 'g`v', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэм', "g'v", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьц', 'mw', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёц', '`w', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эц', "'w", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёц', 'g`w', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэц', "g'w", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьч', 'mx', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёч', '`x', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эч', "'x", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёч', 'g`x', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэч', "g'x", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ьн', 'my', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ён', '`y', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эн', "'y", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пён', 'g`y', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэн', "g'y", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ья', 'mz', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ёя', '`z', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'эя', "'z", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пёя', 'g`z', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пэя', "g'z", { desc = 'which_key_ignore' })
|
||||
|
||||
vim.keymap.set('', 'ЭЭ', '""', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭЖ', '":', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эю', '".', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭФ', '"A', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭИ', '"B', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭС', '"C', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭВ', '"D', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭУ', '"E', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭА', '"F', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭП', '"G', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭР', '"H', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭШ', '"I', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭО', '"J', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭЛ', '"K', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭД', '"L', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭЬ', '"M', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭТ', '"N', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭЩ', '"O', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭЗ', '"P', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭЙ', '"Q', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭК', '"R', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭЫ', '"S', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭЕ', '"T', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭГ', '"U', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭМ', '"V', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭЦ', '"W', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭЧ', '"X', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭН', '"Y', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ЭЯ', '"Z', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эф', '"a', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эи', '"b', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эс', '"c', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эв', '"d', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эу', '"e', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эа', '"f', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эп', '"g', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эр', '"h', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эш', '"i', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эо', '"j', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эл', '"k', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эд', '"l', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эь', '"m', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эт', '"n', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эщ', '"o', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эз', '"p', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эй', '"q', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эк', '"r', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эы', '"s', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эе', '"t', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эг', '"u', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эм', '"v', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эц', '"w', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эч', '"x', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эн', '"y', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'Эя', '"z', { desc = 'which_key_ignore' })
|
||||
|
||||
vim.keymap.set('', 'пБ', 'g<', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пВ', 'gD', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пУ', 'gE', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пР', 'gH', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пШ', 'gI', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пО', 'gJ', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пТ', 'gN', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пЗ', 'gP', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пЙ', 'gQ', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пК', 'gR', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пЕ', 'gT', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пГ', 'gU', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пМ', 'gV', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пъ', 'g]', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пф', 'ga', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пв', 'gd', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пу', 'ge', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'па', 'gf', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пА', 'gF', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пп', 'gg', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пр', 'gh', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пш', 'gi', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'по', 'gj', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пл', 'gk', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пт', 'gn', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пь', 'gm', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пщ', 'go', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пз', 'gp', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пй', 'gq', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пк', 'gr', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пы', 'gs', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пе', 'gt', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пг', 'gu', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пм', 'gv', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пц', 'gw', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пч', 'gx', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'пЁ', 'g~', { desc = 'which_key_ignore' })
|
||||
|
||||
vim.keymap.set('', 'яю', 'z.', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яФ', 'zA', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яС', 'zC', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яВ', 'zD', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яУ', 'zE', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яА', 'zF', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яП', 'zG', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яР', 'zH', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яД', 'zL', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яЬ', 'zM', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яТ', 'zN', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яЩ', 'zO', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яК', 'zR', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яЦ', 'zW', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яЧ', 'zX', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яф', 'za', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яи', 'zb', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яс', 'zc', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яв', 'zd', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яу', 'ze', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яа', 'zf', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яп', 'zg', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яр', 'zh', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яш', 'zi', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яо', 'zj', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ял', 'zk', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яд', 'zl', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яь', 'zm', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ят', 'zn', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ящ', 'zo', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'як', 'zr', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яы', 'zs', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яе', 'zt', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ям', 'zv', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яц', 'zw', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яч', 'zx', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'яя', 'zz', { desc = 'which_key_ignore' })
|
||||
|
||||
vim.keymap.set('', 'фЭ', 'a"', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'шЭ', 'i"', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'фэ', "a'", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'шэ', "i'", { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'фБ', 'a<', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'шБ', 'i<', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'фЮ', 'a>', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'шЮ', 'i>', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'фИ', 'aB', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'шИ', 'iB', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'фЦ', 'aW', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'шЦ', 'iW', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'фх', 'a[', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'шх', 'i[', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'фъ', 'a]', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'шъ', 'i]', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'фё', 'a`', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'шё', 'i`', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'фи', 'ab', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ши', 'ib', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'фз', 'ap', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'шз', 'ip', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'фы', 'as', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'шы', 'is', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'фе', 'at', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'ше', 'it', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'фц', 'aw', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'шц', 'iw', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'фХ', 'a{', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'шХ', 'i{', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'фЪ', 'a}', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', 'шЪ', 'i}', { desc = 'which_key_ignore' })
|
||||
|
||||
vim.keymap.set('', '<C-W>Б', '<C-W><', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>Ю', '<C-W>>', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>Р', '<C-W>H', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>О', '<C-W>J', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>Л', '<C-W>K', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>Д', '<C-W>L', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>З', '<C-W>P', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>К', '<C-W>R', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>Ы', '<C-W>S', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>Е', '<C-W>T', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>Ц', '<C-W>W', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>ъ', '<C-W>]', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>и', '<C-W>b', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>с', '<C-W>c', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>в', '<C-W>d', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>а', '<C-W>f', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>А', '<C-W>F', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>п', '<C-W>g', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>пъ', '<C-W>g]', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>пЪ', '<C-W>g}', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>па', '<C-W>gf', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>пА', '<C-W>gF', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>р', '<C-W>h', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>ш', '<C-W>i', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>о', '<C-W>j', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>л', '<C-W>k', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>д', '<C-W>l', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>т', '<C-W>n', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>щ', '<C-W>o', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>з', '<C-W>p', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>й', '<C-W>q', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>к', '<C-W>r', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>ы', '<C-W>s', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>е', '<C-W>t', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>м', '<C-W>v', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>ц', '<C-W>w', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>ч', '<C-W>x', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>я', '<C-W>z', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('', '<C-W>Ъ', '<C-W>}', { desc = 'which_key_ignore' })
|
||||
|
||||
vim.keymap.set('n', '№', '#', { desc = 'which_key_ignore' })
|
||||
vim.keymap.set('n', ';', '$', { desc = 'which_key_ignore' })
|
13
modules/desktop/nvim/lua/nvim/filemanager.lua
Executable file
13
modules/desktop/nvim/lua/nvim/filemanager.lua
Executable file
@@ -0,0 +1,13 @@
|
||||
local g = vim.g
|
||||
local bind = vim.keymap.set
|
||||
local nvimTree = require('nvim-tree.api')
|
||||
|
||||
g.loaded_netrw = 1
|
||||
g.loaded_netrwPlugin = 1
|
||||
g.netrw_banner = 0
|
||||
g.netrw_liststyle = 3
|
||||
g.netrw_browse_split = 3
|
||||
|
||||
require("nvim-tree").setup()
|
||||
|
||||
bind('n', 'tt', nvimTree.tree.toggle, {})
|
27
modules/desktop/nvim/lua/nvim/icons.lua
Executable file
27
modules/desktop/nvim/lua/nvim/icons.lua
Executable file
@@ -0,0 +1,27 @@
|
||||
require'nvim-web-devicons'.setup {
|
||||
override = {
|
||||
zsh = {
|
||||
icon = "",
|
||||
color = "#428850",
|
||||
cterm_color = "65",
|
||||
name = "Zsh"
|
||||
}
|
||||
};
|
||||
color_icons = true;
|
||||
default = true;
|
||||
strict = true;
|
||||
override_by_filename = {
|
||||
[".gitignore"] = {
|
||||
icon = "",
|
||||
color = "#f1502f",
|
||||
name = "Gitignore"
|
||||
}
|
||||
};
|
||||
-- override_by_extension = {
|
||||
-- ["log"] = {
|
||||
-- icon = "",
|
||||
-- color = "#81e043",
|
||||
-- name = "Log"
|
||||
-- }
|
||||
-- };
|
||||
}
|
8
modules/desktop/nvim/lua/nvim/keybinds.lua
Executable file
8
modules/desktop/nvim/lua/nvim/keybinds.lua
Executable file
@@ -0,0 +1,8 @@
|
||||
local bind = vim.keymap.set
|
||||
----------------------------
|
||||
|
||||
bind('n', '<space>1', ':b 1', {})
|
||||
bind('n', '<space>2', ':b 2', {})
|
||||
bind('n', '<space>3', ':b 3', {})
|
||||
bind('n', '<space>4', ':b 4', {})
|
||||
bind('n', '<space>5', ':b 5', {})
|
108
modules/desktop/nvim/lua/nvim/lsp.lua
Executable file
108
modules/desktop/nvim/lua/nvim/lsp.lua
Executable file
@@ -0,0 +1,108 @@
|
||||
local lspconfig = require('lspconfig')
|
||||
-- local luasnip = require 'luasnip'
|
||||
local cmp = require 'cmp'
|
||||
local capabilities = require("cmp_nvim_lsp").default_capabilities()
|
||||
|
||||
local servers = { 'pyright', 'rust_analyzer', 'nixd', 'lua_ls', 'ts_ls', 'html', 'cssls', 'gopls', 'nimls', 'clangd' }
|
||||
for _, lsp in ipairs(servers) do
|
||||
lspconfig[lsp].setup {
|
||||
-- on_attach = my_custom_on_attach,
|
||||
capabilities = capabilities,
|
||||
}
|
||||
end
|
||||
|
||||
-- lspconfig.lua_ls.setup {
|
||||
-- settings = {
|
||||
-- Lua = {
|
||||
-- runtime = {
|
||||
-- version = 'LuaJIT',
|
||||
-- },
|
||||
-- diagnostics = {
|
||||
-- globals = {'vim'},
|
||||
-- },
|
||||
-- workspace = {
|
||||
-- library = vim.api.nvim_get_runtime_file("", true),
|
||||
-- },
|
||||
-- telemetry = {
|
||||
-- enable = false,
|
||||
-- },
|
||||
-- },
|
||||
-- },
|
||||
-- }
|
||||
|
||||
-- Global mappings.
|
||||
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
|
||||
vim.keymap.set('n', '<space>d', vim.diagnostic.open_float)
|
||||
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev)
|
||||
vim.keymap.set('n', ']d', vim.diagnostic.goto_next)
|
||||
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist)
|
||||
|
||||
-- Use LspAttach autocommand to only map the following keys
|
||||
-- after the language server attaches to the current buffer
|
||||
vim.api.nvim_create_autocmd('LspAttach', {
|
||||
group = vim.api.nvim_create_augroup('UserLspConfig', {}),
|
||||
callback = function(ev)
|
||||
-- Enable completion triggered by <c-x><c-o>
|
||||
vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc'
|
||||
|
||||
-- Buffer local mappings.
|
||||
-- See `:help vim.lsp.*` for documentation on any of the below functions
|
||||
local opts = { buffer = ev.buf }
|
||||
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts)
|
||||
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts)
|
||||
vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
|
||||
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts)
|
||||
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, opts)
|
||||
vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, opts)
|
||||
vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, opts)
|
||||
vim.keymap.set('n', '<space>wl', function()
|
||||
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
|
||||
end, opts)
|
||||
vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, opts)
|
||||
vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, opts)
|
||||
vim.keymap.set({ 'n', 'v' }, '<space>ca', vim.lsp.buf.code_action, opts)
|
||||
vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts)
|
||||
end,
|
||||
})
|
||||
|
||||
cmp.setup {
|
||||
-- snippet = {
|
||||
-- expand = function(args)
|
||||
-- luasnip.lsp_expand(args.nody)
|
||||
-- end,
|
||||
-- },
|
||||
mapping = cmp.mapping.preset.insert({
|
||||
['<C-u>'] = cmp.mapping.scroll_docs(-4), -- Up
|
||||
['<C-d>'] = cmp.mapping.scroll_docs(4), -- Down
|
||||
-- C-b (back) C-f (forward) for snippet placeholder navigation.
|
||||
['<C-Space>'] = cmp.mapping.complete(),
|
||||
['<CR>'] = cmp.mapping.confirm {
|
||||
behavior = cmp.ConfirmBehavior.Replace,
|
||||
select = true,
|
||||
},
|
||||
-- ['<Tab>'] = cmp.mapping(function(fallback)
|
||||
-- if cmp.visible() then
|
||||
-- cmp.select_next_item()
|
||||
-- elseif luasnip.expand_or_jumpable() then
|
||||
-- luasnip.expand_or_jump()
|
||||
-- else
|
||||
-- fallback()
|
||||
-- end
|
||||
-- end, { 'i', 's' }),
|
||||
-- ['<S-Tab>'] = cmp.mapping(function(fallback)
|
||||
-- if cmp.visible() then
|
||||
-- cmp.select_prev_item()
|
||||
-- elseif luasnip.jumpable(-1) then
|
||||
-- luasnip.jump(-1)
|
||||
-- else
|
||||
-- fallback()
|
||||
-- end
|
||||
-- end, { 'i', 's' }),
|
||||
}),
|
||||
sources = {
|
||||
{ name = 'nvim_lsp' },
|
||||
-- { name = 'luasnip' },
|
||||
{ name = 'path' },
|
||||
{ name = 'buffer' },
|
||||
},
|
||||
}
|
24
modules/desktop/nvim/lua/nvim/lualine.lua
Executable file
24
modules/desktop/nvim/lua/nvim/lualine.lua
Executable file
@@ -0,0 +1,24 @@
|
||||
require('lualine').setup {
|
||||
options = {
|
||||
theme = "everforest",
|
||||
component_separators = '|',
|
||||
},
|
||||
sections = {
|
||||
lualine_a = { 'mode' },
|
||||
lualine_b = { 'filename', 'location' },
|
||||
lualine_c = { 'branch', 'diff', 'diagnostics'},
|
||||
lualine_x = { 'filetype' },
|
||||
lualine_y = { 'progress' },
|
||||
lualine_z = {{ 'fileformat', left_padding = 2 },},
|
||||
},
|
||||
inactive_sections = {
|
||||
lualine_a = { 'filename' },
|
||||
lualine_b = {},
|
||||
lualine_c = {},
|
||||
lualine_x = {},
|
||||
lualine_y = {},
|
||||
lualine_z = { 'location' },
|
||||
},
|
||||
tabline = {},
|
||||
extensions = { 'nvim-tree' },
|
||||
}
|
162
modules/desktop/nvim/oil.nix
Executable file
162
modules/desktop/nvim/oil.nix
Executable file
@@ -0,0 +1,162 @@
|
||||
{ pkgs, ... }: {
|
||||
programs.neovim.plugins = with pkgs.vimPlugins; [
|
||||
{ plugin = oil-nvim; type = "lua";
|
||||
config = ''
|
||||
require("oil").setup({
|
||||
-- Oil will take over directory buffers (e.g. `vim .` or `:e src/`)
|
||||
-- Set to false if you still want to use netrw.
|
||||
default_file_explorer = true,
|
||||
-- Id is automatically added at the beginning, and name at the end
|
||||
-- See :help oil-columns
|
||||
columns = {
|
||||
"icon",
|
||||
-- "permissions",
|
||||
-- "size",
|
||||
-- "mtime",
|
||||
},
|
||||
-- Buffer-local options to use for oil buffers
|
||||
buf_options = {
|
||||
buflisted = false,
|
||||
bufhidden = "hide",
|
||||
},
|
||||
-- Window-local options to use for oil buffers
|
||||
win_options = {
|
||||
wrap = false,
|
||||
signcolumn = "no",
|
||||
cursorcolumn = false,
|
||||
foldcolumn = "0",
|
||||
spell = false,
|
||||
list = false,
|
||||
conceallevel = 3,
|
||||
concealcursor = "nvic",
|
||||
},
|
||||
-- Send deleted files to the trash instead of permanently deleting them (:help oil-trash)
|
||||
delete_to_trash = false,
|
||||
-- Skip the confirmation popup for simple operations (:help oil.skip_confirm_for_simple_edits)
|
||||
skip_confirm_for_simple_edits = false,
|
||||
-- Selecting a new/moved/renamed file or directory will prompt you to save changes first
|
||||
-- (:help prompt_save_on_select_new_entry)
|
||||
prompt_save_on_select_new_entry = true,
|
||||
-- Oil will automatically delete hidden buffers after this delay
|
||||
-- You can set the delay to false to disable cleanup entirely
|
||||
-- Note that the cleanup process only starts when none of the oil buffers are currently displayed
|
||||
cleanup_delay_ms = 2000,
|
||||
lsp_file_methods = {
|
||||
-- Time to wait for LSP file operations to complete before skipping
|
||||
timeout_ms = 1000,
|
||||
-- Set to true to autosave buffers that are updated with LSP willRenameFiles
|
||||
-- Set to "unmodified" to only save unmodified buffers
|
||||
autosave_changes = false,
|
||||
},
|
||||
-- Constrain the cursor to the editable parts of the oil buffer
|
||||
-- Set to `false` to disable, or "name" to keep it on the file names
|
||||
constrain_cursor = "editable",
|
||||
-- Set to true to watch the filesystem for changes and reload oil
|
||||
experimental_watch_for_changes = false,
|
||||
-- Keymaps in oil buffer. Can be any value that `vim.keymap.set` accepts OR a table of keymap
|
||||
-- options with a `callback` (e.g. { callback = function() ... end, desc = "", mode = "n" })
|
||||
-- Additionally, if it is a string that matches "actions.<name>",
|
||||
-- it will use the mapping at require("oil.actions").<name>
|
||||
-- Set to `false` to remove a keymap
|
||||
-- See :help oil-actions for a list of all available actions
|
||||
keymaps = {
|
||||
["g?"] = "actions.show_help",
|
||||
["<CR>"] = "actions.select",
|
||||
["<C-s>"] = "actions.select_vsplit",
|
||||
["<C-h>"] = "actions.select_split",
|
||||
["<C-t>"] = "actions.select_tab",
|
||||
["<C-p>"] = "actions.preview",
|
||||
["<C-c>"] = "actions.close",
|
||||
["<C-l>"] = "actions.refresh",
|
||||
["-"] = "actions.parent",
|
||||
["_"] = "actions.open_cwd",
|
||||
["`"] = "actions.cd",
|
||||
["~"] = "actions.tcd",
|
||||
["gs"] = "actions.change_sort",
|
||||
["gx"] = "actions.open_external",
|
||||
["g."] = "actions.toggle_hidden",
|
||||
["g\\"] = "actions.toggle_trash",
|
||||
},
|
||||
-- Configuration for the floating keymaps help window
|
||||
keymaps_help = {
|
||||
border = "rounded",
|
||||
},
|
||||
-- Set to false to disable all of the above keymaps
|
||||
use_default_keymaps = true,
|
||||
view_options = {
|
||||
-- Show files and directories that start with "."
|
||||
show_hidden = false,
|
||||
-- This function defines what is considered a "hidden" file
|
||||
is_hidden_file = function(name, bufnr)
|
||||
return vim.startswith(name, ".")
|
||||
end,
|
||||
-- This function defines what will never be shown, even when `show_hidden` is set
|
||||
is_always_hidden = function(name, bufnr)
|
||||
return false
|
||||
end,
|
||||
sort = {
|
||||
-- sort order can be "asc" or "desc"
|
||||
-- see :help oil-columns to see which columns are sortable
|
||||
{ "type", "asc" },
|
||||
{ "name", "asc" },
|
||||
},
|
||||
},
|
||||
-- Configuration for the floating window in oil.open_float
|
||||
float = {
|
||||
-- Padding around the floating window
|
||||
padding = 2,
|
||||
max_width = 0,
|
||||
max_height = 0,
|
||||
border = "rounded",
|
||||
win_options = {
|
||||
winblend = 0,
|
||||
},
|
||||
-- This is the config that will be passed to nvim_open_win.
|
||||
-- Change values here to customize the layout
|
||||
override = function(conf)
|
||||
return conf
|
||||
end,
|
||||
},
|
||||
-- Configuration for the actions floating preview window
|
||||
preview = {
|
||||
-- Width dimensions can be integers or a float between 0 and 1 (e.g. 0.4 for 40%)
|
||||
-- min_width and max_width can be a single value or a list of mixed integer/float types.
|
||||
-- max_width = {100, 0.8} means "the lesser of 100 columns or 80% of total"
|
||||
max_width = 0.9,
|
||||
-- min_width = {40, 0.4} means "the greater of 40 columns or 40% of total"
|
||||
min_width = { 40, 0.4 },
|
||||
-- optionally define an integer/float for the exact width of the preview window
|
||||
width = nil,
|
||||
-- Height dimensions can be integers or a float between 0 and 1 (e.g. 0.4 for 40%)
|
||||
-- min_height and max_height can be a single value or a list of mixed integer/float types.
|
||||
-- max_height = {80, 0.9} means "the lesser of 80 columns or 90% of total"
|
||||
max_height = 0.9,
|
||||
-- min_height = {5, 0.1} means "the greater of 5 columns or 10% of total"
|
||||
min_height = { 5, 0.1 },
|
||||
-- optionally define an integer/float for the exact height of the preview window
|
||||
height = nil,
|
||||
border = "rounded",
|
||||
win_options = {
|
||||
winblend = 0,
|
||||
},
|
||||
-- Whether the preview window is automatically updated when the cursor is moved
|
||||
update_on_cursor_moved = true,
|
||||
},
|
||||
-- Configuration for the floating progress window
|
||||
progress = {
|
||||
max_width = 0.9,
|
||||
min_width = { 40, 0.4 },
|
||||
width = nil,
|
||||
max_height = { 10, 0.9 },
|
||||
min_height = { 5, 0.1 },
|
||||
height = nil,
|
||||
border = "rounded",
|
||||
minimized_border = "none",
|
||||
win_options = {
|
||||
winblend = 0,
|
||||
},
|
||||
},
|
||||
})
|
||||
''; }
|
||||
];
|
||||
}
|
62
modules/desktop/openssh.nix
Normal file
62
modules/desktop/openssh.nix
Normal file
@@ -0,0 +1,62 @@
|
||||
{ config, lib, pkgs, username, ... }:
|
||||
let socket = "/run/${username}/1000/ssh-agent";
|
||||
in {
|
||||
hm = {
|
||||
programs.ssh = {
|
||||
enable = true;
|
||||
hashKnownHosts = true;
|
||||
|
||||
matchBlocks = {
|
||||
"cepheus" = {
|
||||
hostname = "nothing.run";
|
||||
user = "root";
|
||||
port = 22;
|
||||
};
|
||||
};
|
||||
|
||||
extraConfig = "ObscureKeystrokeTiming yes";
|
||||
forwardAgent = true;
|
||||
addKeysToAgent = "yes";
|
||||
};
|
||||
services.ssh-agent.enable = true;
|
||||
home.sessionVariables = {
|
||||
# SSH_ASKPASS = lib.mkForce pkgs.kdePackages.ksshaskpass;
|
||||
SSH_AUTH_SOCK = socket;
|
||||
};
|
||||
};
|
||||
imp.home.dirs = [ ".ssh" ];
|
||||
services.openssh = {
|
||||
enable = lib.mkDefault false;
|
||||
openFirewall = lib.mkDefault false;
|
||||
};
|
||||
|
||||
systemd.user.services.ssh-agent-delete-keys =
|
||||
let
|
||||
ssh-add = "${pkgs.openssh}/bin/ssh-add";
|
||||
script = pkgs.writeShellScript "ssh-agent-delete-keys" ''
|
||||
while true; do
|
||||
state="$(${ssh-add} -l)"
|
||||
# if (echo $state | grep -i "The agent has no identities"); then
|
||||
if [[ $state != *"The agent has no identities"* ]]; then
|
||||
echo "Detected adding of key: $(${ssh-add} -l)"
|
||||
sleep $SSH_AGENT_KEY_LIFETIME
|
||||
${ssh-add} -D
|
||||
echo "Deleted the key: $(${ssh-add} -l)"
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
'';
|
||||
in {
|
||||
enable = true;
|
||||
after = [ "ssh-agent.service" ];
|
||||
wantedBy = [ "default.target" ];
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
ExecStart = script;
|
||||
};
|
||||
environment = {
|
||||
SSH_AUTH_SOCK = socket;
|
||||
SSH_AGENT_KEY_LIFETIME = "180";
|
||||
};
|
||||
};
|
||||
}
|
19
modules/desktop/pipewire.nix
Normal file
19
modules/desktop/pipewire.nix
Normal file
@@ -0,0 +1,19 @@
|
||||
{ pkgs, ... }: {
|
||||
services.pulseaudio.enable = false;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa = {
|
||||
enable = true;
|
||||
support32Bit = true;
|
||||
};
|
||||
pulse.enable = true;
|
||||
jack.enable = true;
|
||||
wireplumber.enable = true;
|
||||
};
|
||||
|
||||
hm.home.packages = with pkgs; [
|
||||
pavucontrol
|
||||
helvum
|
||||
pulseaudio
|
||||
];
|
||||
}
|
35
modules/desktop/qbittorrent.nix
Normal file
35
modules/desktop/qbittorrent.nix
Normal file
@@ -0,0 +1,35 @@
|
||||
{ username, pkgs, ... }: {
|
||||
systemd.services.qbittorrent-nox = let
|
||||
port = 1999;
|
||||
in {
|
||||
enable = true;
|
||||
description = "QBitTorrent server";
|
||||
wants = [ "network-online.target" ];
|
||||
after = [ "network-online.target" ];
|
||||
serviceConfig = {
|
||||
Type = "exec";
|
||||
User = username;
|
||||
ExecStart = "${pkgs.qbittorrent-nox}/bin/qbittorrent-nox --profile=\"/home/${username}/Torrent\" --configuration=\"/home/${username}/Torrent/config\" --webui-port=${toString port}";
|
||||
};
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
};
|
||||
# WebUI\LocalHostAuth=false
|
||||
|
||||
imp.home.dirs = [ "Torrent" ];
|
||||
|
||||
systemd.services.gdisk = {
|
||||
enable = true;
|
||||
description = "Automounting additional disk";
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
User = "root";
|
||||
ExecStart = pkgs.writeShellScript "mount-gdisk.sh" ''
|
||||
systemd-cryptsetup attach gd /dev/sda /nix/disks/gd/key header=/nix/disks/gd/header
|
||||
mkdir -p /mnt/gd
|
||||
mount /dev/mapper/gd /mnt/gd -o compress=zstd:2
|
||||
'';
|
||||
RemainAfterExit = true;
|
||||
ExecStop = "umount /dev/gd && systemd-cryptsetup detach gd";
|
||||
};
|
||||
};
|
||||
}
|
18
modules/desktop/stylix.nix
Normal file
18
modules/desktop/stylix.nix
Normal file
@@ -0,0 +1,18 @@
|
||||
{ inputs, pkgs, config, ... }: {
|
||||
imports = [ inputs.stylix.nixosModules.stylix ];
|
||||
stylix = {
|
||||
enable = true;
|
||||
base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml";
|
||||
polarity = "dark";
|
||||
image = ../../assets/Wallpaper.jpg;
|
||||
|
||||
fonts = {
|
||||
serif = config.stylix.fonts.monospace;
|
||||
sansSerif = config.stylix.fonts.monospace;
|
||||
monospace = {
|
||||
package = pkgs.nerd-fonts.fira-code;
|
||||
name = "FiraCode Nerd Font";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
51
modules/desktop/xcompose.nix
Normal file
51
modules/desktop/xcompose.nix
Normal file
@@ -0,0 +1,51 @@
|
||||
{ lib, pkgs, ... }:
|
||||
let
|
||||
makebinds = attrs: lib.pipe attrs [
|
||||
(attr: builtins.mapAttrs (_: keys: (builtins.map (key: "<${key}>") keys)) attr)
|
||||
(attr: (builtins.mapAttrs (_: keys: (builtins.concatStringsSep " " keys)) attr))
|
||||
(attr: (lib.attrsets.mapAttrsToList (sum: keys: ''<Multi_key> ${keys} : "${sum}"'') attr))
|
||||
(attr: builtins.concatStringsSep "\n" attr)
|
||||
];
|
||||
|
||||
binds = lib.concatStringsSep "\n" [
|
||||
# ''include "%L"''
|
||||
(makebinds {
|
||||
"ě" = [ "e" "j" ];
|
||||
|
||||
"ѣ" = [ "Cyrillic_ie" "Cyrillic_ie" ];
|
||||
"Ѣ" = [ "Cyrillic_IE" ];
|
||||
"ѳ" = [ "Cyrillic_ef" ];
|
||||
"ѵ" = [ "Cyrillic_i" ];
|
||||
"ґ" = [ "Cyrillic_ghe" ];
|
||||
"є" = [ "Cyrillic_ie" "Cyrillic_e" ];
|
||||
|
||||
"љ" = [ "Cyrillic_el" "Cyrillic_el" ];
|
||||
"њ" = [ "Cyrillic_en" "Cyrillic_en" ];
|
||||
|
||||
"ѧ" = [ "Cyrillic_e" "Cyrillic_en" ];
|
||||
"ѩ" = [ "Cyrillic_ie" "Cyrillic_en" ];
|
||||
"ѫ" = [ "Cyrillic_o" "Cyrillic_en" ];
|
||||
"ѭ" = [ "Cyrillic_io" "Cyrillic_en" ];
|
||||
|
||||
"¨" = [ "Colon" ];
|
||||
|
||||
"α" = [ "g" "a" ];
|
||||
"β" = [ "g" "b" ];
|
||||
"γ" = [ "g" "g" ];
|
||||
"λ" = [ "g" "l" ];
|
||||
})
|
||||
];
|
||||
|
||||
in {
|
||||
environment.variables.XCOMPOSEFILE = ".XCompose";
|
||||
hm = {
|
||||
home.file.".XCompose" = {
|
||||
enable = true;
|
||||
target = ".XCompose";
|
||||
recursive = false;
|
||||
text = binds;
|
||||
};
|
||||
|
||||
programs.niri.settings.input.keyboard.xkb.file = toString (pkgs.writeText "compose.xkb" binds);
|
||||
};
|
||||
}
|
690
modules/desktop/yambar.nix
Normal file
690
modules/desktop/yambar.nix
Normal file
@@ -0,0 +1,690 @@
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
config,
|
||||
host,
|
||||
...
|
||||
}: let
|
||||
niri = lib.getExe pkgs.c.niri;
|
||||
jq = lib.getExe pkgs.jq;
|
||||
workspaces_script = pkgs.writeShellScript "workspaces.sh" ''
|
||||
workspaces_num () {
|
||||
IFS=$'\n'
|
||||
local r=$(${niri} msg -j workspaces | ${jq} '.[].idx' | sort -nr | head -n1)
|
||||
echo $r
|
||||
}
|
||||
|
||||
get_idx () {
|
||||
local r=$(${niri} msg -j workspaces)
|
||||
for (( i=0; i<$(workspaces_num); i+=1 ))
|
||||
do
|
||||
local act=$(echo $r | ${jq} .[$i].id)
|
||||
if [ $act -eq $1 ]; then
|
||||
local idx=$(echo $r | ${jq} .[$i].idx)
|
||||
echo $idx
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
get_before () {
|
||||
if [ $1 -eq "1" ]; then
|
||||
echo ""
|
||||
else
|
||||
a=
|
||||
for (( i=1; i<$1; i++ )) do
|
||||
a="$a $i"
|
||||
done
|
||||
echo $a
|
||||
fi
|
||||
}
|
||||
|
||||
get_after () {
|
||||
if [ $1 -eq $2 ]; then
|
||||
echo ""
|
||||
else
|
||||
a=
|
||||
for (( i=$1+1; i<=$2; i++ )) do
|
||||
a="$a $i"
|
||||
done
|
||||
echo $a
|
||||
fi
|
||||
}
|
||||
|
||||
ret_add () {
|
||||
echo "before|string|$(get_before $1)"
|
||||
echo "after|string|$(get_after $1 $2)"
|
||||
}
|
||||
|
||||
bnum=$(workspaces_num)
|
||||
echo "number|int|$bnum"
|
||||
|
||||
beg=$(${niri} msg -j workspaces)
|
||||
|
||||
cf () {
|
||||
for (( i=0; i<$2; i+=1 ))
|
||||
do
|
||||
bact=$(echo $1 | ${jq} .[$i].is_active)
|
||||
if [[ "$bact" == "true" ]]; then
|
||||
bf=$(echo $1 | ${jq} .[$i].idx)
|
||||
echo "$bf"
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
sf=`cf "$beg" "$bnum"`
|
||||
echo "focused|int|$sf"
|
||||
ret_add $sf $bnum
|
||||
|
||||
echo ""
|
||||
|
||||
${niri} msg -j event-stream | while read -r line; do
|
||||
current=$(echo $line | ${jq} .WorkspaceActivated.id)
|
||||
if [[ "$current" != "null" ]]; then
|
||||
cn=$(workspaces_num)
|
||||
idx=$(get_idx $current)
|
||||
echo "number|int|$cn"
|
||||
echo "focused|int|$idx"
|
||||
ret_add $idx $cn
|
||||
echo ""
|
||||
fi
|
||||
|
||||
current=$(echo $line | ${jq} .WorkspacesChanged.workspaces)
|
||||
if [[ "$current" != "null" ]]; then
|
||||
cn=$(workspaces_num)
|
||||
c=$(cf "$current" "$cn")
|
||||
idx=$c
|
||||
echo "number|int|$cn"
|
||||
echo "focused|int|$idx"
|
||||
ret_add $c $cn
|
||||
echo ""
|
||||
fi
|
||||
done
|
||||
'';
|
||||
|
||||
lang_script = pkgs.writeShellScript "current_layout.sh" ''
|
||||
startl=$(${niri} msg -j keyboard-layouts | ${jq} .current_idx)
|
||||
echo "lang|int|$startl"
|
||||
echo ""
|
||||
|
||||
${niri} msg -j event-stream | while read -r line; do
|
||||
|
||||
current=$(echo $line | ${jq} .KeyboardLayoutSwitched.idx)
|
||||
if [[ "$current" != "null" ]]; then
|
||||
echo "lang|string|$current"
|
||||
echo ""
|
||||
fi
|
||||
done
|
||||
'';
|
||||
in {
|
||||
hm.programs.yambar = {
|
||||
enable = true;
|
||||
settings.bar = let
|
||||
# std_underline = {
|
||||
# underline = {
|
||||
# size = 2;
|
||||
# color = "ff0000ff";
|
||||
# };
|
||||
# };
|
||||
red = config.lib.stylix.colors.base08 + "ff";
|
||||
orange = config.lib.stylix.colors.base09 + "ff";
|
||||
yellow = config.lib.stylix.colors.base0A + "ff";
|
||||
white = config.lib.stylix.colors.base05 + "ff";
|
||||
grey = "999999ff";
|
||||
|
||||
awesome = "Font Awesome 6 Free:style=solid:pixelsize=14";
|
||||
in {
|
||||
font = "FiraCode Nerd Font:pixelsize=12";
|
||||
height = 26;
|
||||
location = "top";
|
||||
spacing = 8;
|
||||
margin = 7;
|
||||
foreground = white;
|
||||
background = config.lib.stylix.colors.base00 + "cc";
|
||||
left = [
|
||||
{
|
||||
script = {
|
||||
path = workspaces_script;
|
||||
args = [
|
||||
];
|
||||
content = [
|
||||
{
|
||||
string = {
|
||||
text = "{before}";
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = " {focused} ";
|
||||
foreground = orange;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = "{after}";
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
foreign-toplevel = {
|
||||
content = {
|
||||
map = {
|
||||
conditions = {
|
||||
"~activated" = {
|
||||
empty = {
|
||||
};
|
||||
};
|
||||
activated = [
|
||||
{
|
||||
string = {
|
||||
text = "{app-id}";
|
||||
foreground = orange;
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
|
||||
center = [
|
||||
{
|
||||
clock = {
|
||||
time-format = "%H:%M";
|
||||
content = [
|
||||
{
|
||||
string = {
|
||||
text = "{time}";
|
||||
on-click = "${lib.getExe pkgs.playerctl} play-pause";
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
];
|
||||
|
||||
right = [
|
||||
{
|
||||
network = {
|
||||
content = {
|
||||
map = {
|
||||
default = {
|
||||
empty = {
|
||||
};
|
||||
};
|
||||
conditions = {
|
||||
"name == enp2s0" = {
|
||||
map = {
|
||||
conditions = {
|
||||
"~carrier" = {
|
||||
empty = {
|
||||
};
|
||||
};
|
||||
carrier = {
|
||||
map = {
|
||||
default = {
|
||||
string = {
|
||||
text = "";
|
||||
font = awesome;
|
||||
foreground = white;
|
||||
};
|
||||
};
|
||||
conditions = {
|
||||
"state == up && ipv4 != \"\"" = {
|
||||
string = {
|
||||
text = "";
|
||||
foreground = red;
|
||||
font = awesome;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
network = {
|
||||
poll-interval = 1000;
|
||||
content = {
|
||||
map = {
|
||||
default = {
|
||||
empty = {
|
||||
};
|
||||
};
|
||||
conditions = {
|
||||
"name == wlan0" = {
|
||||
map = {
|
||||
default = {
|
||||
string = {
|
||||
text = "";
|
||||
font = awesome;
|
||||
foreground = white;
|
||||
};
|
||||
};
|
||||
conditions = {
|
||||
"state == down" = {
|
||||
string = {
|
||||
text = "";
|
||||
font = awesome;
|
||||
foreground = red;
|
||||
};
|
||||
};
|
||||
"state == up" = {
|
||||
map = {
|
||||
default = [
|
||||
{
|
||||
string = {
|
||||
text = "";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
];
|
||||
conditions = {
|
||||
"ipv4 == \"\"" = [
|
||||
{
|
||||
string = {
|
||||
text = "";
|
||||
font = awesome;
|
||||
foreground = red;
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
pipewire = let
|
||||
volume.conditions = {
|
||||
muted = {
|
||||
string = {
|
||||
text = "{cubic_volume}%";
|
||||
foreground = "999999ff";
|
||||
};
|
||||
};
|
||||
"~muted" = {
|
||||
string = {
|
||||
text = "{cubic_volume}%";
|
||||
};
|
||||
};
|
||||
};
|
||||
in {
|
||||
content.list.items = [
|
||||
{
|
||||
map.conditions = {
|
||||
"type == \"sink\"".map.conditions = {
|
||||
"bus == \"bluetooth\"" = {
|
||||
string = {
|
||||
text = " ";
|
||||
font = awesome;
|
||||
};
|
||||
};
|
||||
muted = {
|
||||
string = {
|
||||
text = " ";
|
||||
font = awesome;
|
||||
foreground = grey;
|
||||
};
|
||||
};
|
||||
"~muted" = [
|
||||
{
|
||||
ramp = {
|
||||
tag = "cubic_volume";
|
||||
items = [
|
||||
{
|
||||
string = {
|
||||
text = " ";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = " ";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
"type == \"source\"" = {
|
||||
map.conditions = {
|
||||
muted = {
|
||||
string = {
|
||||
text = " ";
|
||||
font = awesome;
|
||||
foreground = grey;
|
||||
};
|
||||
};
|
||||
"~muted" = {
|
||||
string = {
|
||||
text = " 🎙";
|
||||
font = awesome;
|
||||
foreground = yellow;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
{map."<<" = volume;}
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
backlight = {
|
||||
name = "amdgpu_bl2";
|
||||
content = [
|
||||
{
|
||||
string = {
|
||||
text = "";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = "{percent}%";
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
battery = let
|
||||
discharging = {
|
||||
list = {
|
||||
items = [
|
||||
{
|
||||
ramp = {
|
||||
tag = "capacity";
|
||||
items = [
|
||||
{
|
||||
string = {
|
||||
text = "";
|
||||
foreground = "ff0000ff";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = "";
|
||||
foreground = "ff0000ff";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = "";
|
||||
foreground = "ffa600ff";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = "";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = "";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = "";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = "";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = "";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = "";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = "";
|
||||
foreground = "00ff00ff";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = "{capacity}%";
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
in {
|
||||
name = if host == "tureis" then "BAT1" else "BAT0";
|
||||
poll-interval = 250;
|
||||
content = {
|
||||
map = {
|
||||
conditions = {
|
||||
"state == unknown" = {
|
||||
"<<" = discharging;
|
||||
};
|
||||
"state == discharging" = {
|
||||
"<<" = discharging;
|
||||
};
|
||||
"state == charging" = [
|
||||
{
|
||||
string = {
|
||||
text = "";
|
||||
foreground = "00ff00ff";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = "{capacity}%";
|
||||
};
|
||||
}
|
||||
];
|
||||
"state == full" = [
|
||||
{
|
||||
string = {
|
||||
text = "";
|
||||
foreground = "00ff00ff";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = "{capacity}%";
|
||||
};
|
||||
}
|
||||
];
|
||||
"state == \"not charging\"" = [
|
||||
{
|
||||
ramp = {
|
||||
tag = "capacity";
|
||||
items = [
|
||||
{
|
||||
string = {
|
||||
text = " ";
|
||||
foreground = "ff0000ff";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = " ";
|
||||
foreground = "ffa600ff";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = " ";
|
||||
foreground = "00ff00ff";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = " ";
|
||||
foreground = "00ff00ff";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = " ";
|
||||
foreground = "00ff00ff";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = " ";
|
||||
foreground = "00ff00ff";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = " ";
|
||||
foreground = "00ff00ff";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = " ";
|
||||
foreground = "00ff00ff";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = " ";
|
||||
foreground = "00ff00ff";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = " ";
|
||||
foreground = "00ff00ff";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = "{capacity}%";
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
clock = {
|
||||
date-format = "%d %B, %A";
|
||||
content = [
|
||||
{
|
||||
string = {
|
||||
text = "";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = "{date}";
|
||||
right-margin = 5;
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
script = {
|
||||
path = lang_script;
|
||||
args = [
|
||||
];
|
||||
content = {
|
||||
map = {
|
||||
default = {
|
||||
string = {
|
||||
text = "{lang}";
|
||||
};
|
||||
};
|
||||
conditions = {
|
||||
"lang == 0" = [
|
||||
{
|
||||
string = {
|
||||
text = "";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = "en";
|
||||
};
|
||||
}
|
||||
];
|
||||
"lang == 1" = [
|
||||
{
|
||||
string = {
|
||||
text = "";
|
||||
font = awesome;
|
||||
};
|
||||
}
|
||||
{
|
||||
string = {
|
||||
text = "ru";
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
45
modules/global/bash.nix
Normal file
45
modules/global/bash.nix
Normal file
@@ -0,0 +1,45 @@
|
||||
{ config, pkgs, ... }: {
|
||||
globals.hm.programs.carapace = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
};
|
||||
|
||||
globals.hm.programs.bash = {
|
||||
enable = true;
|
||||
shellAliases = config.n.misc.aliases;
|
||||
enableCompletion = true;
|
||||
|
||||
initExtra = ''
|
||||
#colorscript -e square
|
||||
_fix_cursor() {
|
||||
echo -ne '\e[5 q'
|
||||
}
|
||||
precmd_functions+=(_fix_cursor)
|
||||
export TERM="xterm-256color"
|
||||
PS1="\e[1;32m\u@\h\e[m \e[1;34m[\t]\e[m [\w]\n\e[0;34m-> %\e[m \e[0;32m"
|
||||
'';
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
wget
|
||||
curl
|
||||
tree
|
||||
htop
|
||||
killall
|
||||
jq
|
||||
p7zip
|
||||
tldr
|
||||
unzip
|
||||
mtr
|
||||
iperf3
|
||||
lsd
|
||||
bat
|
||||
ncdu
|
||||
ripgrep
|
||||
dig
|
||||
pwgen
|
||||
inxi
|
||||
alejandra
|
||||
tokei
|
||||
];
|
||||
}
|
17
modules/global/dnscrypt-proxy.nix
Normal file
17
modules/global/dnscrypt-proxy.nix
Normal file
@@ -0,0 +1,17 @@
|
||||
{ ... }: {
|
||||
services.dnscrypt-proxy2 = {
|
||||
enable = true;
|
||||
settings = {
|
||||
# listen_addresses = [ "127.0.0.1:53" ];
|
||||
listen_addresses = [ "0.0.0.0:53" ];
|
||||
max_clients = 200;
|
||||
force_tcp = true;
|
||||
netprobe_address = "192.168.1.1:53";
|
||||
server_names = [ "libredns-noads" "njalla-doh" ];
|
||||
};
|
||||
};
|
||||
|
||||
networking = {
|
||||
nameservers = [ "127.0.0.1" ];
|
||||
};
|
||||
}
|
6
modules/global/firewall.nix
Normal file
6
modules/global/firewall.nix
Normal file
@@ -0,0 +1,6 @@
|
||||
{ ... }: {
|
||||
networking.firewall = {
|
||||
allowedTCPPorts = [];
|
||||
allowedUDPPorts = [];
|
||||
};
|
||||
}
|
29
modules/global/git.nix
Normal file
29
modules/global/git.nix
Normal file
@@ -0,0 +1,29 @@
|
||||
{ pkgs, lib, ... }: {
|
||||
hm.programs.git.enable = true;
|
||||
environment.systemPackages = [ pkgs.git ];
|
||||
|
||||
hm.programs.git = {
|
||||
userEmail = "thary@riseup.net";
|
||||
userName = "Thary";
|
||||
signing = {
|
||||
signByDefault = true;
|
||||
};
|
||||
};
|
||||
|
||||
nodes.phoenix.hm = {
|
||||
programs.git.extraConfig = {
|
||||
commit.gpgsign = true;
|
||||
gpg.format = "ssh";
|
||||
gpg.ssh.allowedSignersFile = "~/.ssh/allowed_signers";
|
||||
user.signingkey = "~/.ssh/id_ed25519.pub";
|
||||
};
|
||||
home.file.".ssh/allowed_signers".text =
|
||||
# "* ${builtins.readFile /home/${username}/.ssh/id_ed25519.pub}";
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDEDqpSiQpbSsClh6UGb7Z2DA1Hy+EyePzTy+5hEVD/A";
|
||||
};
|
||||
|
||||
lib.n.misc.shellAliases = {
|
||||
gc = "${lib.getExe pkgs.git} commit -m";
|
||||
ga = "${lib.getExe pkgs.git} add";
|
||||
};
|
||||
}
|
26
modules/global/home-manager.nix
Executable file
26
modules/global/home-manager.nix
Executable file
@@ -0,0 +1,26 @@
|
||||
{ lib, username, config, inputs, ... }:
|
||||
with lib;
|
||||
{
|
||||
imports = [
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
(lib.mkAliasOptionModule [ "hm" ] [
|
||||
"home-manager"
|
||||
"users"
|
||||
username
|
||||
])
|
||||
];
|
||||
|
||||
options.globals.hm = mkOption { type = types.attrs; };
|
||||
config = {
|
||||
home-manager = {
|
||||
useGlobalPkgs = true;
|
||||
useUserPackages = true;
|
||||
# backupFileExtension = "hm-backup-" + pkgs.lib.readFile "${pkgs.runCommand "timestamp" {} "echo -n `date '+%Y%m%d%H%M%S'` > $out"}";
|
||||
backupFileExtension = "hm-backup-$(date \"+%Y%m%d%H%M%S\")";
|
||||
sharedModules = [ config.globals.hm ];
|
||||
};
|
||||
hm.home = {
|
||||
inherit (config.system) stateVersion;
|
||||
};
|
||||
};
|
||||
}
|
23
modules/global/locales.nix
Executable file
23
modules/global/locales.nix
Executable file
@@ -0,0 +1,23 @@
|
||||
{ ... }:
|
||||
let
|
||||
locales = "en_US.UTF-8";
|
||||
timezone = "Europe/Minsk";
|
||||
in {
|
||||
time.timeZone = timezone;
|
||||
|
||||
i18n = {
|
||||
defaultLocale = locales;
|
||||
extraLocaleSettings = {
|
||||
# LC_ADDRESS = locales;
|
||||
# LC_MEASUREMENT = locales;
|
||||
# LC_MONETARY = locales;
|
||||
# LC_NAME = locales;
|
||||
# LC_NUMERIC = locales;
|
||||
# LC_PAPER = locales;
|
||||
# LC_TELEPHONE = locales;
|
||||
# LC_TIME = locales;
|
||||
LANGUAGE = locales;
|
||||
LC_ALL = locales;
|
||||
};
|
||||
};
|
||||
}
|
8
modules/global/networking.nix
Normal file
8
modules/global/networking.nix
Normal file
@@ -0,0 +1,8 @@
|
||||
{ ... }: {
|
||||
# nodes.cepheus.networking.interfaces.ens18 = {
|
||||
# ipv4.addresses = [{
|
||||
# address = "158.220.126.56";
|
||||
# prefixLength = 24;
|
||||
# }];
|
||||
# };
|
||||
}
|
29
modules/global/nix.nix
Normal file
29
modules/global/nix.nix
Normal file
@@ -0,0 +1,29 @@
|
||||
{ pkgs, lib, inputs, username, config, ... }: {
|
||||
# imp.home.dirs = [ ".local/share/nix" ]; # Nix Repl history
|
||||
nix = {
|
||||
package = pkgs.lix;
|
||||
settings = {
|
||||
allowed-users = ["root" "@wheel"];
|
||||
trusted-users = [ "root" username ];
|
||||
experimental-features = ["nix-command" "flakes"];
|
||||
build-dir = "/nix/builds";
|
||||
};
|
||||
registry = lib.mapAttrs (_: value: {flake = value;}) inputs // { n.flake = inputs.nixpkgs; };
|
||||
nixPath = lib.mapAttrsToList (key: value: "${key}=${value.to.path}") config.nix.registry;
|
||||
};
|
||||
|
||||
system.stateVersion = "23.05"; # My first nixos was 22.11
|
||||
|
||||
nixpkgs.overlays = [
|
||||
(import ../../pkgs)
|
||||
];
|
||||
|
||||
# documentation = {
|
||||
# enable = true;
|
||||
# doc.enable = true;
|
||||
# dev.enable = true;
|
||||
# info.enable = true;
|
||||
# nixos.enable = true;
|
||||
# man.enable = true;
|
||||
# };
|
||||
}
|
44
modules/global/nvim.nix
Normal file
44
modules/global/nvim.nix
Normal file
@@ -0,0 +1,44 @@
|
||||
{ config, ...}: {
|
||||
globals.hm = {
|
||||
programs.neovim = {
|
||||
enable = true;
|
||||
defaultEditor = true;
|
||||
viAlias = true;
|
||||
vimAlias = true;
|
||||
|
||||
extraLuaConfig = ''
|
||||
local bind = vim.keymap.set
|
||||
local opt = vim.opt
|
||||
local g = vim.g
|
||||
local o = vim.o
|
||||
local cmd = vim.cmd
|
||||
|
||||
o.expandtab = true
|
||||
o.smarttab = true
|
||||
o.cindent = true
|
||||
o.autoindent = true
|
||||
|
||||
o.ignorecase = true
|
||||
o.smartcase = true
|
||||
|
||||
o.backup = false
|
||||
o.writebackup = false
|
||||
o.undofile = true
|
||||
o.swapfile = false
|
||||
|
||||
opt.relativenumber = true
|
||||
opt.number = true
|
||||
opt.tabstop = 2
|
||||
opt.shiftwidth = 2
|
||||
opt.mouse = "a"
|
||||
opt.termguicolors = true
|
||||
opt.clipboard = "unnamedplus"
|
||||
'';
|
||||
|
||||
home.sessionVariables = {
|
||||
# EDITOR = lib.mkForce lib.getExe pkgs.neovim;
|
||||
MANPAGER = "${config.hm.home.sessionVariables.EDITOR} +Man!";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
38
modules/global/secrets.nix
Normal file
38
modules/global/secrets.nix
Normal file
@@ -0,0 +1,38 @@
|
||||
{ inputs, host, lib, ... }:
|
||||
let
|
||||
keys = {
|
||||
phoenix = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBsrEEXQwcu4i7hOqCbpwd4EdC/+v9fAWm30MUXhVpp5";
|
||||
cepheus = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGm1PymMJ2JnE973UCaezWQFKyZi7lsAzHshUUwafa8F";
|
||||
naos = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIcR9C753wDWjg/oJxn6p9kLMaiaOPJFNT0xYPICXK52";
|
||||
};
|
||||
in {
|
||||
environment.systemPackages = [ inputs.agenix-rekey.packages.x86_64-linux.default ];
|
||||
imports = [
|
||||
inputs.agenix.nixosModules.default
|
||||
inputs.agenix-rekey.nixosModules.default
|
||||
];
|
||||
|
||||
age.identityPaths = [ "/nix/keys/identity" ]; # default key path
|
||||
age.rekey = {
|
||||
masterIdentities = [
|
||||
{ identity = "/home/user/.ssh/id_ed25519";
|
||||
pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDEDqpSiQpbSsClh6UGb7Z2DA1Hy+EyePzTy+5hEVD/A"; }
|
||||
];
|
||||
storageMode = "local";
|
||||
generatedSecretsDir = ../../secrets/generated/${host};
|
||||
localStorageDir = ../../secrets/rekeyed/${host};
|
||||
};
|
||||
|
||||
# services.openssh.enable = true;
|
||||
services.openssh.hostKeys = [{
|
||||
path = "/nix/keys/identity";
|
||||
type = "ed25519";
|
||||
}];
|
||||
|
||||
# TODO: define key via hosts/<name>/default.nix
|
||||
|
||||
nodes.phoenix.age.rekey.hostPubkey = keys.phoenix;
|
||||
nodes.cepheus.age.rekey.hostPubkey = keys.cepheus;
|
||||
# nodes.tureis.age.rekey.hostPubkey = ""; # TODO
|
||||
nodes.naos.age.rekey.hostPubkey = keys.naos;
|
||||
}
|
26
modules/global/security.nix
Normal file
26
modules/global/security.nix
Normal file
@@ -0,0 +1,26 @@
|
||||
{ username, pkgs, ... }: {
|
||||
security = {
|
||||
doas = {
|
||||
enable = true;
|
||||
wheelNeedsPassword = true;
|
||||
};
|
||||
sudo.enable = false;
|
||||
|
||||
# polkit.enable = lib.mkForce false;
|
||||
polkit.enable = true;
|
||||
};
|
||||
|
||||
|
||||
n.misc.aliases.sudo = "doas";
|
||||
|
||||
security.tpm2 = {
|
||||
enable = true;
|
||||
pkcs11.enable = true;
|
||||
pkcs11.package = pkgs.tpm2-pkcs11-fapi;
|
||||
tctiEnvironment.enable = true;
|
||||
};
|
||||
users.users.${username}.extraGroups = [ "tss" "admin" ];
|
||||
|
||||
environment.systemPackages = with pkgs; [ tpm2-pkcs11-fapi clevis tpm2-tools ];
|
||||
environment.variables.TPM2_PKCS11_BACKEND = "fapi";
|
||||
}
|
15
modules/n/aliases.nix
Normal file
15
modules/n/aliases.nix
Normal file
@@ -0,0 +1,15 @@
|
||||
{ lib, pkgs, ... }:
|
||||
with lib; {
|
||||
options.n.misc.aliases = mkOption {
|
||||
type = types.attrs;
|
||||
};
|
||||
config.n.misc.aliases = {
|
||||
ls = "${lib.getExe pkgs.lsd} --group-directories-first";
|
||||
la = "${lib.getExe pkgs.lsd} -l";
|
||||
cat = "${lib.getExe pkgs.bat}";
|
||||
dcat = "${lib.getExe pkgs.bat} --plain";
|
||||
list-generations = "nix-env -p /nix/var/nix/profiles/system --list-generations";
|
||||
delete-generations = "nix-env -p /nix/var/nix/profiles/system --delete-generations";
|
||||
myip = "${lib.getExe pkgs.curl} ipwho.de/json | ${lib.getExe pkgs.jq} .";
|
||||
};
|
||||
}
|
42
modules/n/bootloader.nix
Normal file
42
modules/n/bootloader.nix
Normal file
@@ -0,0 +1,42 @@
|
||||
{ lib, pkgs, config, inputs, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.n.host.bootloader;
|
||||
in {
|
||||
options.n.host.bootloader = mkOption { type = types.str; };
|
||||
|
||||
imports = [ inputs.lanzaboote.nixosModules.lanzaboote ];
|
||||
config = mkMerge [
|
||||
(mkIf (cfg == "lanzaboote") {
|
||||
environment.systemPackages = [ pkgs.sbctl ];
|
||||
|
||||
boot = {
|
||||
loader = {
|
||||
systemd-boot.enable = lib.mkForce false;
|
||||
grub.enable = lib.mkForce false;
|
||||
efi.canTouchEfiVariables = true;
|
||||
};
|
||||
bootspec.enable = true;
|
||||
lanzaboote = {
|
||||
enable = true;
|
||||
pkiBundle = "/var/lib/sbctl";
|
||||
};
|
||||
};
|
||||
|
||||
imp.dirs = [ { directory = "/var/lib/sbctl"; mode = "0400"; } ];
|
||||
})
|
||||
|
||||
(mkIf (cfg == "grub") {
|
||||
boot.loader.grub = {
|
||||
enable = true;
|
||||
efiSupport = lib.mkDefault false;
|
||||
# efiInstallAsRemovable = true; # TODO: what's it?
|
||||
device = "nodev";
|
||||
};
|
||||
boot.loader.systemd-boot.enable = lib.mkForce false;
|
||||
})
|
||||
(mkIf (cfg == "sysdboot") {
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
})
|
||||
];
|
||||
}
|
23
modules/n/default.nix
Normal file
23
modules/n/default.nix
Normal file
@@ -0,0 +1,23 @@
|
||||
{ lib, config, pkgs, host, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.n.host;
|
||||
in {
|
||||
options.n.host = {
|
||||
kernel = mkOption {
|
||||
type = types.raw;
|
||||
default = pkgs.linuxKernel.packages.linux_6_1_hardened;
|
||||
};
|
||||
|
||||
users = mkOption { type = with types; attrs; default = {}; };
|
||||
defaultUser = mkOption { type = type.str; };
|
||||
extras = mkOption { type = with types; listOf path; };
|
||||
types = mkOption { type = with types; listOf str; };
|
||||
};
|
||||
options.nodes = mkOption { type = with types; attrsOf attrs; };
|
||||
|
||||
config = {
|
||||
boot.kernelPackages = cfg.kernel;
|
||||
users.users = cfg.users;
|
||||
};
|
||||
}
|
16
modules/n/defaults.nix
Normal file
16
modules/n/defaults.nix
Normal file
@@ -0,0 +1,16 @@
|
||||
{ lib, config, ... }:
|
||||
with lib; { # Thanks to azahi!
|
||||
options.n.misc.defaults = mkOption {
|
||||
description = "Default applications.";
|
||||
type = with types; attrsOf (listOf str);
|
||||
default = {};
|
||||
};
|
||||
|
||||
config.hm.xdg = {
|
||||
enable = true;
|
||||
mimeApps = {
|
||||
enable = true;
|
||||
defaultApplications = mkMerge (mapAttrsToList (n: v: genAttrs v (_: [ "${n}.desktop" ])) config.n.misc.defaults);
|
||||
};
|
||||
};
|
||||
}
|
41
modules/n/hardware.nix
Normal file
41
modules/n/hardware.nix
Normal file
@@ -0,0 +1,41 @@
|
||||
{ lib, config, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.n.host.hardware;
|
||||
in {
|
||||
options.n.host.hardware = {
|
||||
cpu = mkOption { type = types.str; default = ""; };
|
||||
};
|
||||
config = mkMerge [
|
||||
(mkIf (cfg.cpu == "amd")
|
||||
{
|
||||
boot.kernelModules = [ "kvm-amd" ];
|
||||
hardware.cpu.amd.updateMicrocode = true;
|
||||
}
|
||||
)
|
||||
(mkIf (cfg.cpu == "intel")
|
||||
{
|
||||
hardware.cpu.intel.updateMicrocode = true;
|
||||
}
|
||||
)
|
||||
(mkIf (cfg.cpu == "virt")
|
||||
{
|
||||
boot.initrd.availableKernelModules = [
|
||||
"virtio_net"
|
||||
"virtio_pci"
|
||||
"virtio_mmio"
|
||||
"virtio_blk"
|
||||
"virtio_scsi"
|
||||
"9p"
|
||||
"9pnet_virtio"
|
||||
];
|
||||
boot.initrd.kernelModules = [
|
||||
"virtio_balloon"
|
||||
"virtio_console"
|
||||
"virtio_rng"
|
||||
"virtio_gpu"
|
||||
];
|
||||
}
|
||||
)
|
||||
];
|
||||
}
|
64
modules/n/impermanence.nix
Normal file
64
modules/n/impermanence.nix
Normal file
@@ -0,0 +1,64 @@
|
||||
{ lib, config, inputs, username, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.imp;
|
||||
in {
|
||||
imports = [
|
||||
inputs.impermanence.nixosModules.impermanence
|
||||
(mkAliasOptionModule [ "imp" "dirs" ] [
|
||||
"environment"
|
||||
"persistence"
|
||||
"/nix/persist"
|
||||
"directories"
|
||||
])
|
||||
];
|
||||
|
||||
options.imp.home = {
|
||||
files = mkOption {
|
||||
type = with types; listOf str;
|
||||
default = [];
|
||||
};
|
||||
dirs = mkOption {
|
||||
type = with types; listOf str;
|
||||
default = [];
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
environment.persistence."/nix/persist" = {
|
||||
enable = true;
|
||||
directories = [
|
||||
"/var/lib/systemd/coredump"
|
||||
"/var/lib/nixos"
|
||||
];
|
||||
files = [
|
||||
"/etc/machine-id"
|
||||
];
|
||||
};
|
||||
|
||||
environment.persistence."/nix/persist".users."${username}" = {
|
||||
# environment.persistence."/nix/persist".users."user" = {
|
||||
directories = builtins.map (x: { directory = x; mode = "0700"; })
|
||||
[
|
||||
"Audiobooks"
|
||||
"Books"
|
||||
"Desktop"
|
||||
"Documents"
|
||||
# "Downloads"
|
||||
"Extensions"
|
||||
"Forks"
|
||||
"Games"
|
||||
"IdeaProjects"
|
||||
"Keybase"
|
||||
"Library"
|
||||
"Monero"
|
||||
"Music"
|
||||
"Phone"
|
||||
"Pictures"
|
||||
"Projects"
|
||||
"Videos"
|
||||
] ++ cfg.home.dirs;
|
||||
files = builtins.map (x: { file = x; parentDirectory = { mode = "0700"; }; }) cfg.home.files;
|
||||
};
|
||||
};
|
||||
}
|
22
modules/n/networking.nix
Normal file
22
modules/n/networking.nix
Normal file
@@ -0,0 +1,22 @@
|
||||
{ host, lib, config, ... }:
|
||||
with lib;
|
||||
let cfg = config.n.host;
|
||||
in {
|
||||
options.n.host = {
|
||||
hostId = mkOption { type = types.str; };
|
||||
domain = mkOption { type = types.str; default = "${host}.local"; };
|
||||
};
|
||||
|
||||
config = {
|
||||
networking = {
|
||||
hostName = host;
|
||||
hostId = cfg.hostId;
|
||||
domain = cfg.domain;
|
||||
dhcpcd.enable = true;
|
||||
useDHCP = lib.mkDefault true;
|
||||
};
|
||||
systemd.network.wait-online.enable = lib.mkForce false;
|
||||
boot.initrd.systemd.network.wait-online.enable = lib.mkForce false;
|
||||
systemd.services.NetworkManager-wait-online.enable = lib.mkForce false;
|
||||
};
|
||||
}
|
13
modules/n/unfree.nix
Normal file
13
modules/n/unfree.nix
Normal file
@@ -0,0 +1,13 @@
|
||||
{ lib, config, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.n.misc.unfreePackages;
|
||||
in {
|
||||
options.n.misc.unfreePackages = mkOption {
|
||||
type = with types; listOf str;
|
||||
};
|
||||
|
||||
config = {
|
||||
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) cfg;
|
||||
};
|
||||
}
|
36
modules/server/containers.nix
Normal file
36
modules/server/containers.nix
Normal file
@@ -0,0 +1,36 @@
|
||||
{ host, lib, config, ... }: {
|
||||
networking.nat = {
|
||||
enable = true;
|
||||
# Use "ve-*" when using nftables instead of iptables
|
||||
internalInterfaces = ["ve-+"];
|
||||
externalInterface = "ens18";
|
||||
enableIPv6 = false;
|
||||
};
|
||||
|
||||
containers =
|
||||
if builtins.pathExists ../../hosts/${host}/containers
|
||||
then let
|
||||
containers_files' = builtins.readDir ../../hosts/${host}/containers;
|
||||
containers_files = lib.concatMapAttrs
|
||||
(container: _: {
|
||||
${lib.removeSuffix ".nix" container} = {};
|
||||
}) containers_files';
|
||||
|
||||
in builtins.mapAttrs (container: _: {
|
||||
autoStart = true;
|
||||
bindMounts = builtins.mapAttrs (_: value: { hostPath = value; isReadOnly = false; }) config.container.${container}.config.binds;
|
||||
tmpfs = [ "/" ];
|
||||
config = { lib, ... }: with lib; {
|
||||
imports = [
|
||||
../../hosts/${host}/containers/${container}.nix
|
||||
# ../containers
|
||||
../global/nix.nix
|
||||
../global/dnscrypt-proxy.nix
|
||||
];
|
||||
options = {
|
||||
binds = mkOption { type = types.attrs; default = {}; };
|
||||
};
|
||||
};
|
||||
}) containers_files
|
||||
else {};
|
||||
}
|
19
modules/server/openssh.nix
Normal file
19
modules/server/openssh.nix
Normal file
@@ -0,0 +1,19 @@
|
||||
{ username, ... }: let
|
||||
keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINkHOpdBpYV3KJV+AtBK3jD6MLDZzAwh9HFt0LsLxBV0" # Old key
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDEDqpSiQpbSsClh6UGb7Z2DA1Hy+EyePzTy+5hEVD/A" # Main key
|
||||
];
|
||||
in {
|
||||
users.users.${username}.openssh.authorizedKeys.keys = keys;
|
||||
users.users.root.openssh.authorizedKeys.keys = keys;
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
settings = {
|
||||
PasswordAuthentication = false;
|
||||
KbdInteractiveAuthentication = false;
|
||||
PermitRootLogin = "prohibit-password";
|
||||
};
|
||||
ports = [ 22 ];
|
||||
openFirewall = true;
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user