initial commit
Some checks failed
Nix CI / build (push) Failing after 31s

This commit is contained in:
Rustam Efimov 2026-04-01 08:50:01 +03:00
commit 30ce0dafc2
No known key found for this signature in database
195 changed files with 8902 additions and 0 deletions

10
users/macan/home.nix Normal file
View file

@ -0,0 +1,10 @@
{
imports = [
./variables
./modules/fish
./modules/nvf
./modules/stylix
];
targets.genericLinux.enable = true;
}

View file

@ -0,0 +1,7 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
python314
sqlite
];
}

View file

@ -0,0 +1,7 @@
{ config, ... }:
{
programs.fish = {
enable = true;
inherit (config) shellAliases;
};
}

View file

@ -0,0 +1,12 @@
{
programs.nvf.settings.vim.assistant.neocodeium = {
enable = true;
setupOpts = {
enabled = true;
log_level = "debug";
};
keymaps = {
accept = "<A-Tab>";
};
};
}

View file

@ -0,0 +1,31 @@
{
inputs,
pkgs,
...
}:
{
imports = [
inputs.nvf.homeManagerModules.default
./assistant.nix
./options.nix
./languages.nix
./picker.nix
./snacks.nix
./keymaps.nix
./utils.nix
./mini.nix
];
home.packages = with pkgs; [
neovim
];
programs.nvf = {
enable = true;
settings.vim = {
startPlugins = [
pkgs.vimPlugins.vim-kitty-navigator
];
};
};
}

View file

@ -0,0 +1,269 @@
{
programs.nvf.settings.vim = {
globals.mapleader = " ";
binds = {
whichKey = {
enable = true;
register = { };
};
};
keymaps = [
# "hjkl" -> "jkl;"
{
mode = "n"; # Normal mode
key = "j";
action = "<Left>";
desc = "Move Left";
}
{
mode = "n";
key = "k";
action = "<Down>";
desc = "Move Down";
}
{
mode = "n";
key = "l";
action = "<Up>";
desc = "Move Up";
}
{
mode = "n";
key = ";";
action = "<Right>";
desc = "Move Right";
}
{
mode = "v"; # Visual mode
key = "j";
action = "<Left>";
desc = "Move Left";
}
{
mode = "v";
key = "k";
action = "<Down>";
desc = "Move Down";
}
{
mode = "v";
key = "l";
action = "<Up>";
desc = "Move Up";
}
{
mode = "v";
key = ";";
action = "<Right>";
desc = "Move Right";
}
# General Mappings
{
key = "s";
mode = "n";
silent = true;
action = "<cmd>lua require('flash').jump()<cr>";
desc = "Flash";
}
{
key = "K";
mode = "n";
silent = true;
action = "<cmd>lua vim.lsp.buf.hover()<cr>";
desc = "LSP Hover";
}
{
key = "<C-tab>";
mode = "n";
silent = true;
action = "<cmd>bnext<cr>";
desc = "Next Buffer";
}
{
key = "rn";
mode = "n";
silent = true;
action = "<cmd>lua vim.lsp.buf.rename()<cr>";
desc = "Rename symbol";
}
# Escape from Insert Mode
{
key = "jj";
mode = "i";
action = "<Esc>";
desc = "Exit insert mode";
} # UI
{
key = "<leader>uw";
mode = "n";
silent = true;
action = "<cmd>set wrap!<cr>";
desc = "Toggle word wrapping";
}
{
key = "<leader>ul";
mode = "n";
silent = true;
action = "<cmd>set linebreak!<cr>";
desc = "Toggle linebreak";
}
{
key = "<leader>us";
mode = "n";
silent = true;
action = "<cmd>set spell!<cr>";
desc = "Toggle spellLazyGitcheck";
}
{
key = "<leader>uc";
mode = "n";
silent = true;
action = "<cmd>set cursorline!<cr>";
desc = "Toggle cursorline";
}
{
key = "<leader>un";
mode = "n";
silent = true;
action = "<cmd>set number!<cr>";
desc = "Toggle line numbers";
}
{
key = "<leader>ur";
mode = "n";
silent = true;
action = "<cmd>set relativenumber!<cr>";
desc = "Toggle relative line numbers";
}
{
key = "<leader>ut";
mode = "n";
silent = true;
action = "<cmd>set showtabline=2<cr>";
desc = "Show tabline";
}
{
key = "<leader>uT";
mode = "n";
silent = true;
action = "<cmd>set showtabline=0<cr>";
desc = "Hide tabline";
}
# Windows
{
key = "<leader>ws";
mode = "n";
silent = true;
action = "<cmd>split<cr>";
desc = "Split";
}
{
key = "<leader>wv";
mode = "n";
silent = true;
action = "<cmd>vsplit<cr>";
desc = "VSplit";
}
{
key = "<leader>wd";
mode = "n";
silent = true;
action = "<cmd>close<cr>";
desc = "Close";
}
# Disable Arrow Keys in Normal Mode
{
key = "<Up>";
mode = "n";
silent = true;
action = "<Nop>";
desc = "Disable Up Arrow";
}
{
key = "<Down>";
mode = "n";
silent = true;
action = "<Nop>";
desc = "Disable Down Arrow";
}
{
key = "<Left>";
mode = "n";
silent = true;
action = "<Nop>";
desc = "Disable Left Arrow";
}
{
key = "<Right>";
mode = "n";
silent = true;
action = "<Nop>";
desc = "Disable Right Arrow";
}
# Disable Arrow Keys in Visual Mode
{
key = "<Up>";
mode = "v";
silent = true;
action = "<Nop>";
desc = "Disable Up Arrow";
}
{
key = "<Down>";
mode = "v";
silent = true;
action = "<Nop>";
desc = "Disable Down Arrow";
}
{
key = "<Left>";
mode = "v";
silent = true;
action = "<Nop>";
desc = "Disable Left Arrow";
}
{
key = "<Right>";
mode = "v";
silent = true;
action = "<Nop>";
desc = "Disable Right Arrow";
}
# Disable Arrow Keys in Insert Mode
{
key = "<Up>";
mode = "i";
silent = true;
action = "<Nop>";
desc = "Disable Up Arrow";
}
{
key = "<Down>";
mode = "i";
silent = true;
action = "<Nop>";
desc = "Disable Down Arrow";
}
{
key = "<Left>";
mode = "i";
silent = true;
action = "<Nop>";
desc = "Disable Left Arrow";
}
{
key = "<Right>";
mode = "i";
silent = true;
action = "<Nop>";
desc = "Disable Right Arrow";
}
];
};
}

View file

@ -0,0 +1,122 @@
{ lib, ... }:
{
programs.nvf.settings.vim = {
diagnostics = {
enable = true;
config = {
signs = {
text = {
"vim.diagnostic.severity.Error" = " ";
"vim.diagnostic.severity.Warn" = " ";
"vim.diagnostic.severity.Hint" = " ";
"vim.diagnostic.severity.Info" = " ";
};
};
underline = true;
update_in_insert = true;
virtual_text = {
format =
lib.generators.mkLuaInline
# lua
''
function(diagnostic)
return string.format("%s", diagnostic.message)
--return string.format("%s (%s)", diagnostic.message, diagnostic.source)
end
'';
};
};
nvim-lint = {
enable = true;
};
};
syntaxHighlighting = true;
treesitter = {
enable = true;
autotagHtml = true;
context.enable = true;
highlight.enable = true;
};
lsp = {
enable = true;
trouble.enable = true;
lspSignature.enable = true;
lspconfig.enable = true;
formatOnSave = true;
inlayHints.enable = true;
null-ls.enable = true;
otter-nvim = {
enable = true;
setupOpts = {
buffers.set_filetype = true;
lsp = {
diagnostic_update_event = [
"BufWritePost"
"InsertLeave"
];
};
};
};
lspkind.enable = true;
lspsaga = {
enable = true;
setupOpts = {
ui = {
code_action = "";
};
lightbulb = {
sign = false;
virtual_text = true;
};
breadcrumbs.enable = false;
};
};
};
languages = {
enableDAP = true;
enableExtraDiagnostics = true;
enableFormat = true;
enableTreesitter = true;
bash.enable = true;
clang.enable = true;
css.enable = true;
elixir.enable = true;
go.enable = true;
html.enable = true;
json.enable = true;
lua.enable = true;
markdown = {
enable = true;
extensions = {
render-markdown-nvim = {
enable = true;
};
};
extraDiagnostics.enable = true;
};
nim.enable = true;
nix.enable = true;
python = {
enable = true;
format.type = [
"black"
"isort"
];
};
rust.enable = true;
tailwind.enable = true;
ts = {
enable = true;
extensions.ts-error-translator.enable = true;
};
yaml.enable = true;
zig.enable = true;
};
formatter = {
conform-nvim = {
enable = true;
};
};
};
}

View file

@ -0,0 +1,13 @@
{
programs.nvf.settings.vim.mini = {
starter.enable = true;
comment.enable = true;
# cursorword.enable = true;
icons.enable = true;
indentscope.enable = true;
notify.enable = true;
pairs.enable = true;
diff.enable = true;
git.enable = true;
};
}

View file

@ -0,0 +1,41 @@
{ lib, ... }:
{
programs.nvf.settings.vim = {
viAlias = false;
vimAlias = true;
withNodeJs = true;
# syntaxHighlighting = true;
options = {
autoindent = true;
smartindent = true;
shiftwidth = 2;
foldlevel = 99;
foldcolumn = "auto:1";
mousescroll = "ver:1,hor:1";
mousemoveevent = true;
fillchars = "eob:,fold: ,foldopen:,foldsep:,foldclose:";
signcolumn = "yes";
tabstop = 2;
softtabstop = 2;
wrap = false;
};
globals = {
navic_silence = true; # navic tries to attach multiple LSPs and fails
suda_smart_edit = 1; # use super user write automatically
neovide_scale_factor = 0.7;
neovide_cursor_animation_length = 0.1;
neovide_cursor_short_animation_length = 0;
};
clipboard = {
enable = true;
registers = "unnamedplus";
providers.wl-copy.enable = true;
};
theme = {
enable = true;
name = lib.mkForce "catppuccin";
style = lib.mkForce "mocha";
transparent = lib.mkForce true;
};
};
}

View file

@ -0,0 +1,256 @@
{
programs.nvf.settings.vim = {
utility = {
oil-nvim.enable = true;
snacks-nvim = {
setupOpts = {
picker.enabled = true;
explorer.enabled = true;
};
};
};
keymaps = [
# Top Pickers & Explorer
{
key = "<leader> ";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.smart()<cr>";
desc = "Smart Find Files";
}
{
key = "<leader>,";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.buffers()<cr>";
desc = "Buffers";
}
{
key = "<leader>/";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.grep()<cr>";
desc = "Grep";
}
{
key = "<leader>:";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.command_history()<cr>";
desc = "Command History";
}
{
key = "<leader>e";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.explorer()<cr>";
desc = "File Explorer";
}
{
key = "-";
mode = "n";
silent = true;
action = "<cmd>Oil<cr>";
desc = "Oil";
}
# Find
{
key = "<leader>fb";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.buffers()<cr>";
desc = "Buffers";
}
{
key = "<leader>fc";
mode = "n";
silent = true;
action = ''<cmd>lua Snacks.picker.files({ cwd = vim.fn.stdpath("config") })<cr>'';
desc = "Find Config File";
}
{
key = "<leader>ff";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.files()<cr>";
desc = "Find Files";
}
{
key = "<leader>fg";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_files()<cr>";
desc = "Find Git Files";
}
{
key = "<leader>fp";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.projects()<cr>";
desc = "Projects";
}
{
key = "<leader>fr";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.recent()<cr>";
desc = "Recent";
}
{
key = "<leader>fn";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.notifications()<cr>";
desc = "Notification History";
}
{
key = "<leader>fe";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.icons()<cr>";
desc = "Emoji";
}
# Git
{
key = "<leader>gb";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_branches()<cr>";
desc = "Git Branches";
}
{
key = "<leader>gL";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_log()<cr>";
desc = "Git Log Line";
}
{
key = "<leader>gs";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_status()<cr>";
desc = "Git Status";
}
{
key = "<leader>gS";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_stash()<cr>";
desc = "Git Stash";
}
{
key = "<leader>gd";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_diff()<cr>";
desc = "Git Diff (Hunks)";
}
{
key = "<leader>gf";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_log_file()<cr>";
desc = "Git Log File";
}
# Grep
{
key = "<leader>sb";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lines()<cr>";
desc = "Buffer Lines";
}
{
key = "<leader>st";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.todo_comments()<cr>";
desc = "Todos";
}
{
key = "<leader>sB";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.grep_buffers()<cr>";
desc = "Grep Open Buffers";
}
{
key = "<leader>sg";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.grep()<cr>";
desc = "Grep";
}
{
key = "<leader>sw";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.grep_word()<cr>";
desc = "Visual selection or word";
}
{
key = "<leader>sr";
mode = "n";
silent = true;
action = "<cmd>nohlsearch<cr>";
desc = "Reset search";
}
# LSP
{
key = "gd";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_definitions()<cr>";
desc = "Goto Definition";
}
{
key = "gD";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_declarations()<cr>";
desc = "Goto Declaration";
}
{
key = "gr";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_references()<cr>";
desc = "References";
nowait = true;
}
{
key = "gI";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_implementations()<cr>";
desc = "Goto Implementation";
}
{
key = "gy";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_type_definitions()<cr>";
desc = "Goto Type Definition";
}
{
key = "<leader>ss";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_symbols()<cr>";
desc = "LSP Symbols";
}
{
key = "<leader>sS";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_workspace_symbols()<cr>";
desc = "LSP Workspace Symbols";
}
];
};
}

View file

@ -0,0 +1,16 @@
{
programs.nvf.settings.vim.utility.snacks-nvim = {
enable = true;
setupOpts = {
image = {
enabled = true;
setupOpts.doc.inline = false;
};
quickfile.enabled = true;
statuscolumn.enabled = true;
zen.enabled = true;
bufdelete.enabled = true;
gitsigns.enabled = true;
};
};
}

View file

@ -0,0 +1,50 @@
{ pkgs, ... }:
{
programs.nvf.settings.vim = {
undoFile.enable = true;
utility = {
motion.flash-nvim.enable = true;
outline.aerial-nvim.enable = true;
};
tabline.nvimBufferline.enable = true;
notes.todo-comments.enable = true;
statusline.lualine.enable = true;
autocomplete = {
nvim-cmp = {
enable = true;
sources = {
buffer = "[Buffer]";
nvim-cmp = null;
path = "[Path]";
};
sourcePlugins = [
pkgs.vimPlugins.cmp-cmdline
];
};
};
snippets.luasnip.enable = true;
ui = {
noice.enable = true;
colorizer.enable = true;
};
git = {
enable = true;
gitsigns.enable = true;
};
terminal.toggleterm = {
enable = true;
lazygit = {
enable = true;
mappings.open = "<leader>gl";
};
};
visuals = {
rainbow-delimiters.enable = true;
nvim-scrollbar = {
enable = false;
};
};
};
}

View file

@ -0,0 +1,45 @@
{
pkgs,
config,
inputs,
...
}:
{
imports = [
inputs.stylix.homeModules.stylix
];
stylix = {
enable = true;
base16Scheme = config.theme.colors;
cursor = {
name = "phinger-cursors-light";
package = pkgs.phinger-cursors;
size = 20;
};
fonts = {
monospace = {
package = pkgs.nerd-fonts.jetbrains-mono;
name = "JetBrains Mono Nerd Font";
};
sansSerif = {
package = pkgs.source-sans-pro;
name = "Source Sans Pro";
};
serif = {
package = pkgs.source-sans-pro;
name = "Source Sans Pro";
};
emoji = {
package = pkgs.noto-fonts-color-emoji;
name = "Noto Color Emoji";
};
inherit (config.theme.fonts) sizes;
};
polarity = "dark";
};
}

19
users/macan/system.nix Normal file
View file

@ -0,0 +1,19 @@
{ pkgs, ... }:
{
services.openssh.settings.AllowUsers = [ "macan" ];
programs.fish.enable = true;
users.users.macan = {
isNormalUser = true;
description = "macan";
uid = 1002;
extraGroups = [ ];
openssh.authorizedKeys = {
keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID+VwmEaHwGHqoSlyWgOZDEc0eSMIcr0vNAHNeqWUone macan"
];
};
shell = pkgs.fish;
};
}

View file

@ -0,0 +1,6 @@
{
imports = [
./theme.nix
./shell_aliases.nix
];
}

View file

@ -0,0 +1,33 @@
{ lib, ... }:
{
options.shellAliases = lib.mkOption {
type = lib.types.attrs;
default = {
e = "exit";
ls = "eza --icons=always --no-quotes";
tree = "eza --icons=always --tree --no-quotes";
cat = "bat --theme=base16 --color=always --paging=never --tabs=2 --wrap=never --plain";
mkdir = "mkdir -p";
poweroff = "sudo poweroff";
shutdown = "sudo poweroff";
reboot = "sudo reboot";
nix-shell = "nix-shell --command fish";
# git
ga = "git add";
gc = "git commit";
gp = "git push";
gpl = "git pull";
gs = "git status";
gd = "git diff";
gco = "git checkout";
gcb = "git checkout -b";
gbr = "git branch";
grs = "git reset HEAD~1";
grh = "git reset --hard HEAD~1";
gaa = "git add .";
gcm = "git commit -m";
};
};
}

View file

@ -0,0 +1,51 @@
{ lib, ... }:
{
options.theme = lib.mkOption {
type = lib.types.attrs;
default = {
rounding = 20;
gaps-in = 7;
gaps-out = 7 * 2;
active-opacity = 0.95;
inactive-opacity = 0.92;
blur = true;
border-size = 2;
animation-speed = "fast"; # "fast" | "medium" | "slow"
bar = {
position = "top"; # "top" | "bottom"
transparent = true;
transparentButtons = false;
floating = true;
};
colors = {
base00 = "000000"; # 000000 ----
base01 = "231a40"; # 231a40 ---
base02 = "432d59"; # 432d59 --
base03 = "593380"; # 593380 -
base04 = "00ff00"; # 7b43bf +
base05 = "b08ae6"; # b08ae6 ++
base06 = "9045e6"; # 9045e6 +++
base07 = "a366ff"; # a366ff ++++
base08 = "a82ee6"; # a82ee6 red
base09 = "bb66cc"; # bb66cc orange
base0A = "f29df2"; # f29df2 yellow
base0B = "4595e6"; # 41d9bF green
base0C = "40dfff"; # 40dfff aqua/cyan
base0D = "4136d9"; # 326ee6 blue
base0E = "7e5ce6"; # 7e5ce6 purple
base0F = "a886bf"; # a886bf brown
};
fonts = {
sizes = {
applications = 12;
desktop = 12;
popups = 12;
terminal = 10;
};
};
};
};
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6 MiB

20
users/rus07tam/home.nix Normal file
View file

@ -0,0 +1,20 @@
{ pkgs, ... }:
{
imports = [
./variables
./secrets/home.nix
./modules/fish
./modules/git
./modules/nvf
./modules/rclone
./modules/stylix
./modules/zellij
];
targets.genericLinux.enable = true;
home.packages = with pkgs; [
any-nix-shell
bitwarden-cli
];
}

View file

@ -0,0 +1,20 @@
{ pkgs, ... }:
{
imports = [
./../modules/alacritty
./../modules/clipboard
./../modules/firefox
./../modules/hyprland
./../modules/obsidian
./../modules/wofi
./../modules/zed
./../modules/apps.nix
./../modules/games.nix
];
xdg.enable = true;
home.packages = with pkgs; [
dragon-drop
];
}

View file

@ -0,0 +1,4 @@
{
imports = [
];
}

View file

@ -0,0 +1,15 @@
{ pkgs, ... }:
{
programs.alacritty = {
enable = true;
settings = {
terminal.shell = "${pkgs.fish}/bin/fish";
window = {
padding = {
x = 5;
y = 5;
};
};
};
};
}

View file

@ -0,0 +1,11 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
vscode-fhs
libreoffice-qt
hunspell
hunspellDicts.ru_RU
telegram-desktop
krita
];
}

View file

@ -0,0 +1,22 @@
{ pkgs, ... }:
let
clipboard = pkgs.writeShellScriptBin "clipboard" ''
#!/usr/bin/env bash
if [ -t 0 ]; then
${pkgs.wl-clipboard}/bin/wl-paste
else
cat - | ${pkgs.wl-clipboard}/bin/wl-copy -n
fi
'';
clipboard-clear = pkgs.writeShellScriptBin "clipboard-clear" ''
${pkgs.wl-clipboard}/bin/wl-copy --all
'';
in
{
home.packages = [
clipboard
clipboard-clear
];
}

View file

@ -0,0 +1,57 @@
{ pkgs, ... }:
{
programs.firefox = {
enable = true;
languagePacks = [
"en"
"ru"
];
profiles = {
rus07tam = {
isDefault = true;
search = {
force = true;
default = "ddg";
engines = {
"Nix Packages" = {
urls = [
{
template = "https://search.nixos.org/packages";
params = [
{
name = "channel";
value = "unstable";
}
{
name = "query";
value = "{searchTerms}";
}
];
}
];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@np" ];
};
"MyNixOS" = {
urls = [
{
template = "https://mynixos.com/search";
params = [
{
name = "q";
value = "{searchTerms}";
}
];
}
];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake-white.svg";
definedAliases = [ "@mn" ];
};
};
};
};
};
};
stylix.targets.firefox.profileNames = [ "rus07tam" ];
}

View file

@ -0,0 +1,7 @@
{ config, ... }:
{
programs.fish = {
enable = true;
inherit (config) shellAliases;
};
}

View file

@ -0,0 +1,6 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
osu-lazer-bin
];
}

View file

@ -0,0 +1,17 @@
{
programs.git = {
enable = true;
settings = {
init.defaultBranch = "main";
user = {
name = "Rustam Efimov";
email = "rus07tam+contact@ruject.fun";
};
};
signing = {
key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPRVeP7aRYdbIku7Qr6dLFLQrcq8LUUTTpYZZ3E8ZoQK";
format = "ssh";
signByDefault = true;
};
};
}

View file

@ -0,0 +1,57 @@
{ config, ... }:
let
animationSpeed = config.theme.animation-speed;
animationDuration =
if animationSpeed == "slow" then
"4"
else if animationSpeed == "medium" then
"2.5"
else
"1.5";
borderDuration =
if animationSpeed == "slow" then
"10"
else if animationSpeed == "medium" then
"6"
else
"3";
in
{
wayland.windowManager.hyprland.settings = {
animations = {
enabled = true;
bezier = [
"linear, 0, 0, 1, 1"
"md3_standard, 0.2, 0, 0, 1"
"md3_decel, 0.05, 0.7, 0.1, 1"
"md3_accel, 0.3, 0, 0.8, 0.15"
"overshot, 0.05, 0.9, 0.1, 1.1"
"crazyshot, 0.1, 1.5, 0.76, 0.92"
"hyprnostretch, 0.05, 0.9, 0.1, 1.0"
"menu_decel, 0.1, 1, 0, 1"
"menu_accel, 0.38, 0.04, 1, 0.07"
"easeInOutCirc, 0.85, 0, 0.15, 1"
"easeOutCirc, 0, 0.55, 0.45, 1"
"easeOutExpo, 0.16, 1, 0.3, 1"
"softAcDecel, 0.26, 0.26, 0.15, 1"
"md2, 0.4, 0, 0.2, 1"
];
animation = [
"windows, 1, ${animationDuration}, md3_decel, popin 60%"
"windowsIn, 1, ${animationDuration}, md3_decel, popin 60%"
"windowsOut, 1, ${animationDuration}, md3_accel, popin 60%"
"border, 1, ${borderDuration}, default"
"fade, 1, ${animationDuration}, md3_decel"
"layersIn, 1, ${animationDuration}, menu_decel, slide"
"layersOut, 1, ${animationDuration}, menu_accel"
"fadeLayersIn, 1, ${animationDuration}, menu_decel"
"fadeLayersOut, 1, ${animationDuration}, menu_accel"
"workspaces, 1, ${animationDuration}, menu_decel, slide"
"specialWorkspace, 1, ${animationDuration}, md3_decel, slidevert"
];
};
};
}

View file

@ -0,0 +1,10 @@
{ pkgs, ... }:
{
wayland.windowManager.hyprland.settings = {
exec-once = [
"hyprpaper"
"${pkgs.firefox}/bin/firefox"
"${pkgs.throne}/bin/Throne"
];
};
}

View file

@ -0,0 +1,79 @@
{ pkgs, ... }:
{
wayland.windowManager.hyprland.settings = {
"$mainMod" = "SUPER";
"$shiftMod" = "SUPER_SHIFT";
bind = [
# Control
"$mainMod, C, killactive,"
"$mainMod, ESCAPE, exit,"
"$mainMod, V, togglefloating,"
"$mainMod, S, togglesplit,"
# Programs
"$mainMod, T, exec, alacritty"
"$mainMod, M, exec, ${pkgs.wofi}/bin/wofi --show drun"
# Move focus with "jkl;"
"$mainMod, j, movefocus, l"
"$mainMod, semicolon, movefocus, r"
"$mainMod, l, movefocus, u"
"$mainMod, k, movefocus, d"
# Move focus with arrows
"$mainMod, left, movefocus, l"
"$mainMod, right, movefocus, r"
"$mainMod, up, movefocus, u"
"$mainMod, down, movefocus, d"
# Screenshots
",PRINT, exec, ${pkgs.hyprshot}/bin/hyprshot -m region -o ~/Pictures/Screenshots"
"ALT,PRINT, exec, ${pkgs.hyprshot}/bin/hyprshot -m window -active -o ~/Pictures/Screenshots" # Screenshot active window
"$mainMod,PRINT, exec, ${pkgs.hyprshot}/bin/hyprshot -m output -o ~/Pictures/Screenshots" # Screenshot monitor
"$shiftMod,PRINT, exec, ${pkgs.hyprshot}/bin/hyprshot -m window -o ~/Pictures/Screenshots" # Screenshot window
# Switch workspaces
"$mainMod, 1, workspace, 1"
"$mainMod, 2, workspace, 2"
"$mainMod, 3, workspace, 3"
"$mainMod, 4, workspace, 4"
"$mainMod, 5, workspace, 5"
"$mainMod, 6, workspace, 6"
"$mainMod, 7, workspace, 7"
"$mainMod, 8, workspace, 8"
"$mainMod, 9, workspace, 9"
"$mainMod, 0, workspace, 10"
# Move window to workspace
"$mainMod SHIFT, 1, movetoworkspace, 1"
"$mainMod SHIFT, 2, movetoworkspace, 2"
"$mainMod SHIFT, 3, movetoworkspace, 3"
"$mainMod SHIFT, 4, movetoworkspace, 4"
"$mainMod SHIFT, 5, movetoworkspace, 5"
"$mainMod SHIFT, 6, movetoworkspace, 6"
"$mainMod SHIFT, 7, movetoworkspace, 7"
"$mainMod SHIFT, 8, movetoworkspace, 8"
"$mainMod SHIFT, 9, movetoworkspace, 9"
"$mainMod SHIFT, 0, movetoworkspace, 10"
# Scroll through existing workspaces with mainMod + scroll
"$mainMod, mouse_down, workspace, e+1"
"$mainMod, mouse_up, workspace, e-1"
];
bindm = [
# Move/resize windows with mainMod + LMB/RMB and dragging
"$mainMod, mouse:272, movewindow"
"$mainMod, mouse:273, resizewindow"
];
bindel = [
# Multimedia keys for volume and LCD brightness
",XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"
",XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
",XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
",XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
",XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+"
",XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-"
];
};
}

View file

@ -0,0 +1,44 @@
{
config,
lib,
...
}:
let
border-size = toString config.theme.border-size;
gaps-in = toString config.theme.gaps-in;
gaps-out = toString config.theme.gaps-out;
active-opacity = toString config.theme.active-opacity;
inactive-opacity = toString config.theme.inactive-opacity;
rounding = toString config.theme.rounding;
inherit (config.theme) blur;
inactive-border = "rgb(" + config.theme.colors.base00 + ")";
active-border = "rgb(" + config.theme.colors.base05 + ")";
in
{
wayland.windowManager.hyprland.settings = {
general = {
resize_on_border = true;
gaps_in = gaps-in;
gaps_out = gaps-out;
border_size = border-size;
layout = "dwindle";
"col.active_border" = lib.mkForce active-border;
"col.inactive_border" = lib.mkForce inactive-border;
};
decoration = {
inherit rounding;
active_opacity = active-opacity;
inactive_opacity = inactive-opacity;
shadow = {
enabled = true;
range = 20;
render_power = 3;
};
blur = {
enabled = if blur then "true" else "false";
size = 18;
};
};
};
}

View file

@ -0,0 +1,70 @@
{
imports = [
./animations.nix
./autorun.nix
./bindings.nix
./decoration.nix
./hyprlauncher.nix
./hyprpanel.nix
./hyprpaper.nix
./hyprtoolkit.nix
./input.nix
./rules.nix
];
wayland.windowManager.hyprland = {
enable = true;
};
wayland.windowManager.hyprland.settings = {
env = [
"XDG_CURRENT_DESKTOP,Hyprland"
"MOZ_ENABLE_WAYLAND,1"
"ANKI_WAYLAND,1"
"DISABLE_QT5_COMPAT,0"
"NIXOS_OZONE_WL,1"
"XDG_SESSION_TYPE,wayland"
"XDG_SESSION_DESKTOP,Hyprland"
"QT_AUTO_SCREEN_SCALE_FACTOR,1"
"QT_QPA_PLATFORM=wayland,xcb"
"QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
"ELECTRON_OZONE_PLATFORM_HINT,auto"
"__GL_GSYNC_ALLOWED,0"
"__GL_VRR_ALLOWED,0"
"DISABLE_QT5_COMPAT,0"
"DIRENV_LOG_FORMAT,"
"WLR_DRM_NO_ATOMIC,1"
"WLR_BACKEND,vulkan"
"WLR_RENDERER,vulkan"
"WLR_NO_HARDWARE_CURSORS,1"
"SDL_VIDEODRIVER,wayland"
"CLUTTER_BACKEND,wayland"
];
monitor = [
",preffered,auto,1"
];
dwindle = {
pseudotile = true;
preserve_split = true;
};
master = {
new_status = true;
allow_small_split = true;
mfact = 0.5;
};
misc = {
vfr = true;
disable_hyprland_logo = true;
disable_splash_rendering = true;
disable_autoreload = true;
focus_on_activate = true;
on_focus_under_fullscreen = 2;
};
"debug:disable_scale_checks" = true;
};
}

View file

@ -0,0 +1,26 @@
{
services.hyprlauncher = {
enable = true;
settings = {
cache = {
enabled = false;
};
finders = {
default_finder = "desktop";
desktop_prefix = "";
unicode_prefix = ".";
math_prefix = "=";
font_prefix = "'";
desktop_launch_prefix = "";
desktop_icons = true;
};
general = {
grab_focus = true;
};
ui = {
window_size = "400 260";
};
};
};
}

View file

@ -0,0 +1,224 @@
{
config,
lib,
...
}:
let
inherit (config.theme.bar) transparentButtons;
accent = "#${config.lib.stylix.colors.base0D}";
accent-alt = "#${config.lib.stylix.colors.base03}";
background = "#${config.lib.stylix.colors.base00}";
background-alt = "#${config.lib.stylix.colors.base01}";
foreground = "#${config.lib.stylix.colors.base05}";
foregroundOnWallpaper = "#${config.theme.textColorOnWallpaper}";
font = "${config.stylix.fonts.serif.name}";
fontSizeForHyprpanel = "${toString config.stylix.fonts.sizes.desktop}px";
inherit (config.theme) rounding;
inherit (config.theme) border-size;
inherit (config.theme) gaps-out;
inherit (config.theme) gaps-in;
inherit (config.theme.bar) floating;
inherit (config.theme.bar) transparent;
inherit (config.theme.bar) position;
notificationOpacity = 90;
in
{
programs.hyprpanel = {
enable = true;
settings = lib.mkForce {
bar = {
layouts = {
"*" = {
left = [
"dashboard"
"workspaces"
"windowtitle"
];
middle = [
"media"
"cava"
];
right = [
"systray"
"volume"
"clock"
"notifications"
"kbinput"
];
};
};
launcher.icon = "";
workspaces = {
show_numbered = false;
workspaces = 7;
numbered_active_indicator = "color";
monitorSpecific = false;
applicationIconEmptyWorkspace = "";
showApplicationIcons = true;
showWsIcons = true;
};
windowtitle.label = true;
volume.label = false;
network.truncation_size = 12;
bluetooth.label = false;
clock.format = "%a %b %d %I:%M %p";
notifications.show_total = true;
media.show_active_only = true;
customModules = {
updates.pollingInterval = 1440000;
cava = {
showIcon = false;
stereo = true;
showActiveOnly = true;
};
};
};
notifications = {
position = "top right";
showActionsOnHover = true;
};
menus = {
dashboard = {
shortcuts.enabled = false;
powermenu = {
confirmation = false;
avatar.image = "~/.face.icon";
};
directories = { };
};
power.lowBatteryNotification = true;
};
wallpaper.enable = false;
theme = {
font = {
name = font;
size = fontSizeForHyprpanel;
};
osd = {
enable = true;
orientation = "vertical";
location = "left";
radius = toString rounding + "px";
margins = "0px 0px 0px 10px";
muted_zero = true;
bar_color = accent;
bar_overflow_color = accent-alt;
icon = background;
icon_container = accent;
label = accent;
bar_container = background-alt;
};
notification = {
opacity = notificationOpacity;
enableShadow = true;
border_radius = toString rounding + "px";
background = background-alt;
actions = {
background = accent;
text = foreground;
};
label = accent;
border = background-alt;
text = foreground;
labelicon = accent;
close_button = {
background = background-alt;
label = "#f38ba8";
};
};
bar = {
outer_spacing = if floating && transparent then "0px" else "8px";
margin_top = (if position == "top" then toString (gaps-in * 2) else "0") + "px";
margin_bottom = (if position == "top" then "0" else toString (gaps-in * 2)) + "px";
margin_sides = toString gaps-out + "px";
border_radius = toString rounding + "px";
inherit transparent;
location = position;
dropdownGap = "4.5em";
inherit floating;
menus = {
inherit background;
cards = background-alt;
label = foreground;
text = foreground;
border.color = accent;
popover = {
text = foreground;
background = background-alt;
};
listitems.active = accent;
icons.active = accent;
switch.enabled = accent;
check_radio_button.active = accent;
buttons = {
default = accent;
active = accent;
};
iconbuttons.active = accent;
progressbar.foreground = accent;
slider.primary = accent;
tooltip = {
background = background-alt;
text = foreground;
};
dropdownmenu = {
background = background-alt;
text = foreground;
};
shadow = if transparent then "0 0 0 0" else "0px 0px 3px 1px #16161e";
monochrome = true;
card_radius = toString rounding + "px";
border = {
size = toString border-size + "px";
radius = toString rounding + "px";
};
menu.media = {
background.color = background-alt;
card = {
color = background-alt;
tint = 90;
};
};
};
background = background + (if transparentButtons && transparent then "00" else "");
buttons = {
workspaces = {
hover = accent-alt;
active = accent;
available = accent-alt;
occupied = accent-alt;
};
y_margins = if floating && transparent then "0px" else "8px";
spacing = "0.3em";
radius = (if transparent then toString rounding else toString (rounding - 8)) + "px";
padding_x = "0.8rem";
padding_y = "0.4rem";
style = "default";
monochrome = true;
text = if transparent && transparentButtons then foregroundOnWallpaper else foreground;
background =
(if transparent then background else background-alt) + (if transparentButtons then "00" else "");
icon = accent;
hover = lib.mkForce background;
notifications = {
hover = background;
total = accent;
icon = accent;
background = lib.mkForce background-alt;
};
};
};
};
};
};
}

View file

@ -0,0 +1,11 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [ hyprpaper ];
services.hyprpaper = {
enable = true;
settings = {
splash = false;
splash_offset = 2;
};
};
}

View file

@ -0,0 +1,25 @@
{
config,
pkgs,
...
}:
let
inherit (config.theme) colors;
font = config.stylix.fonts.serif.name;
font-size = config.stylix.fonts.sizes.popups;
in
{
home.packages = with pkgs; [ wofi-emoji ];
xdg.configFile."hypr/hyprtoolkit.conf".text = ''
background = 0x${colors.base00}
base = 0x${colors.base01}
alternate_base = 0x${colors.base02}
text = 0x${colors.base05}
bright_text = 0x${colors.base06}
accent = 0x${colors.base0D}
accent_secondary = 0x${colors.base0E}
font_family = ${font}
font_size = ${toString font-size}
'';
}

View file

@ -0,0 +1,24 @@
{
wayland.windowManager.hyprland.settings = {
cursor = {
no_hardware_cursors = true;
hide_on_touch = true;
inactive_timeout = 0;
};
input = {
kb_layout = "us,ru";
kb_options = "altwin:swap_alt_win,grp:caps_toggle";
follow_mouse = 1;
sensitivity = 0.5;
repeat_delay = 300;
repeat_rate = 50;
numlock_by_default = true;
touchpad = {
natural_scroll = true;
clickfinger_behavior = true;
};
};
};
}

View file

@ -0,0 +1,7 @@
{
wayland.windowManager.hyprland.settings = {
windowrule = [
"match:class .*, suppress_event maximize"
];
};
}

View file

@ -0,0 +1,12 @@
{
programs.nvf.settings.vim.assistant.neocodeium = {
enable = true;
setupOpts = {
enabled = true;
log_level = "debug";
};
keymaps = {
accept = "<A-Tab>";
};
};
}

View file

@ -0,0 +1,31 @@
{
inputs,
pkgs,
...
}:
{
imports = [
inputs.nvf.homeManagerModules.default
./assistant.nix
./options.nix
./languages.nix
./picker.nix
./snacks.nix
./keymaps.nix
./utils.nix
./mini.nix
];
home.packages = with pkgs; [
neovim
];
programs.nvf = {
enable = true;
settings.vim = {
startPlugins = [
pkgs.vimPlugins.vim-kitty-navigator
];
};
};
}

View file

@ -0,0 +1,269 @@
{
programs.nvf.settings.vim = {
globals.mapleader = " ";
binds = {
whichKey = {
enable = true;
register = { };
};
};
keymaps = [
# "hjkl" -> "jkl;"
{
mode = "n"; # Normal mode
key = "j";
action = "<Left>";
desc = "Move Left";
}
{
mode = "n";
key = "k";
action = "<Down>";
desc = "Move Down";
}
{
mode = "n";
key = "l";
action = "<Up>";
desc = "Move Up";
}
{
mode = "n";
key = ";";
action = "<Right>";
desc = "Move Right";
}
{
mode = "v"; # Visual mode
key = "j";
action = "<Left>";
desc = "Move Left";
}
{
mode = "v";
key = "k";
action = "<Down>";
desc = "Move Down";
}
{
mode = "v";
key = "l";
action = "<Up>";
desc = "Move Up";
}
{
mode = "v";
key = ";";
action = "<Right>";
desc = "Move Right";
}
# General Mappings
{
key = "s";
mode = "n";
silent = true;
action = "<cmd>lua require('flash').jump()<cr>";
desc = "Flash";
}
{
key = "K";
mode = "n";
silent = true;
action = "<cmd>lua vim.lsp.buf.hover()<cr>";
desc = "LSP Hover";
}
{
key = "<C-tab>";
mode = "n";
silent = true;
action = "<cmd>bnext<cr>";
desc = "Next Buffer";
}
{
key = "rn";
mode = "n";
silent = true;
action = "<cmd>lua vim.lsp.buf.rename()<cr>";
desc = "Rename symbol";
}
# Escape from Insert Mode
{
key = "jj";
mode = "i";
action = "<Esc>";
desc = "Exit insert mode";
} # UI
{
key = "<leader>uw";
mode = "n";
silent = true;
action = "<cmd>set wrap!<cr>";
desc = "Toggle word wrapping";
}
{
key = "<leader>ul";
mode = "n";
silent = true;
action = "<cmd>set linebreak!<cr>";
desc = "Toggle linebreak";
}
{
key = "<leader>us";
mode = "n";
silent = true;
action = "<cmd>set spell!<cr>";
desc = "Toggle spellLazyGitcheck";
}
{
key = "<leader>uc";
mode = "n";
silent = true;
action = "<cmd>set cursorline!<cr>";
desc = "Toggle cursorline";
}
{
key = "<leader>un";
mode = "n";
silent = true;
action = "<cmd>set number!<cr>";
desc = "Toggle line numbers";
}
{
key = "<leader>ur";
mode = "n";
silent = true;
action = "<cmd>set relativenumber!<cr>";
desc = "Toggle relative line numbers";
}
{
key = "<leader>ut";
mode = "n";
silent = true;
action = "<cmd>set showtabline=2<cr>";
desc = "Show tabline";
}
{
key = "<leader>uT";
mode = "n";
silent = true;
action = "<cmd>set showtabline=0<cr>";
desc = "Hide tabline";
}
# Windows
{
key = "<leader>ws";
mode = "n";
silent = true;
action = "<cmd>split<cr>";
desc = "Split";
}
{
key = "<leader>wv";
mode = "n";
silent = true;
action = "<cmd>vsplit<cr>";
desc = "VSplit";
}
{
key = "<leader>wd";
mode = "n";
silent = true;
action = "<cmd>close<cr>";
desc = "Close";
}
# Disable Arrow Keys in Normal Mode
{
key = "<Up>";
mode = "n";
silent = true;
action = "<Nop>";
desc = "Disable Up Arrow";
}
{
key = "<Down>";
mode = "n";
silent = true;
action = "<Nop>";
desc = "Disable Down Arrow";
}
{
key = "<Left>";
mode = "n";
silent = true;
action = "<Nop>";
desc = "Disable Left Arrow";
}
{
key = "<Right>";
mode = "n";
silent = true;
action = "<Nop>";
desc = "Disable Right Arrow";
}
# Disable Arrow Keys in Visual Mode
{
key = "<Up>";
mode = "v";
silent = true;
action = "<Nop>";
desc = "Disable Up Arrow";
}
{
key = "<Down>";
mode = "v";
silent = true;
action = "<Nop>";
desc = "Disable Down Arrow";
}
{
key = "<Left>";
mode = "v";
silent = true;
action = "<Nop>";
desc = "Disable Left Arrow";
}
{
key = "<Right>";
mode = "v";
silent = true;
action = "<Nop>";
desc = "Disable Right Arrow";
}
# Disable Arrow Keys in Insert Mode
{
key = "<Up>";
mode = "i";
silent = true;
action = "<Nop>";
desc = "Disable Up Arrow";
}
{
key = "<Down>";
mode = "i";
silent = true;
action = "<Nop>";
desc = "Disable Down Arrow";
}
{
key = "<Left>";
mode = "i";
silent = true;
action = "<Nop>";
desc = "Disable Left Arrow";
}
{
key = "<Right>";
mode = "i";
silent = true;
action = "<Nop>";
desc = "Disable Right Arrow";
}
];
};
}

View file

@ -0,0 +1,122 @@
{ lib, ... }:
{
programs.nvf.settings.vim = {
diagnostics = {
enable = true;
config = {
signs = {
text = {
"vim.diagnostic.severity.Error" = " ";
"vim.diagnostic.severity.Warn" = " ";
"vim.diagnostic.severity.Hint" = " ";
"vim.diagnostic.severity.Info" = " ";
};
};
underline = true;
update_in_insert = true;
virtual_text = {
format =
lib.generators.mkLuaInline
# lua
''
function(diagnostic)
return string.format("%s", diagnostic.message)
--return string.format("%s (%s)", diagnostic.message, diagnostic.source)
end
'';
};
};
nvim-lint = {
enable = true;
};
};
syntaxHighlighting = true;
treesitter = {
enable = true;
autotagHtml = true;
context.enable = true;
highlight.enable = true;
};
lsp = {
enable = true;
trouble.enable = true;
lspSignature.enable = true;
lspconfig.enable = true;
formatOnSave = true;
inlayHints.enable = true;
null-ls.enable = true;
otter-nvim = {
enable = true;
setupOpts = {
buffers.set_filetype = true;
lsp = {
diagnostic_update_event = [
"BufWritePost"
"InsertLeave"
];
};
};
};
lspkind.enable = true;
lspsaga = {
enable = true;
setupOpts = {
ui = {
code_action = "";
};
lightbulb = {
sign = false;
virtual_text = true;
};
breadcrumbs.enable = false;
};
};
};
languages = {
enableDAP = true;
enableExtraDiagnostics = true;
enableFormat = true;
enableTreesitter = true;
bash.enable = true;
clang.enable = true;
css.enable = true;
elixir.enable = true;
go.enable = true;
html.enable = true;
json.enable = true;
lua.enable = true;
markdown = {
enable = true;
extensions = {
render-markdown-nvim = {
enable = true;
};
};
extraDiagnostics.enable = true;
};
nim.enable = true;
nix.enable = true;
python = {
enable = true;
format.type = [
"black"
"isort"
];
};
rust.enable = true;
tailwind.enable = true;
ts = {
enable = true;
extensions.ts-error-translator.enable = true;
};
yaml.enable = true;
zig.enable = true;
};
formatter = {
conform-nvim = {
enable = true;
};
};
};
}

View file

@ -0,0 +1,13 @@
{
programs.nvf.settings.vim.mini = {
starter.enable = true;
comment.enable = true;
# cursorword.enable = true;
icons.enable = true;
indentscope.enable = true;
notify.enable = true;
pairs.enable = true;
diff.enable = true;
git.enable = true;
};
}

View file

@ -0,0 +1,41 @@
{ lib, ... }:
{
programs.nvf.settings.vim = {
viAlias = false;
vimAlias = true;
withNodeJs = true;
# syntaxHighlighting = true;
options = {
autoindent = true;
smartindent = true;
shiftwidth = 2;
foldlevel = 99;
foldcolumn = "auto:1";
mousescroll = "ver:1,hor:1";
mousemoveevent = true;
fillchars = "eob:,fold: ,foldopen:,foldsep:,foldclose:";
signcolumn = "yes";
tabstop = 2;
softtabstop = 2;
wrap = false;
};
globals = {
navic_silence = true; # navic tries to attach multiple LSPs and fails
suda_smart_edit = 1; # use super user write automatically
neovide_scale_factor = 0.7;
neovide_cursor_animation_length = 0.1;
neovide_cursor_short_animation_length = 0;
};
clipboard = {
enable = true;
registers = "unnamedplus";
providers.wl-copy.enable = true;
};
theme = {
enable = true;
name = lib.mkForce "catppuccin";
style = lib.mkForce "mocha";
transparent = lib.mkForce true;
};
};
}

View file

@ -0,0 +1,256 @@
{
programs.nvf.settings.vim = {
utility = {
oil-nvim.enable = true;
snacks-nvim = {
setupOpts = {
picker.enabled = true;
explorer.enabled = true;
};
};
};
keymaps = [
# Top Pickers & Explorer
{
key = "<leader> ";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.smart()<cr>";
desc = "Smart Find Files";
}
{
key = "<leader>,";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.buffers()<cr>";
desc = "Buffers";
}
{
key = "<leader>/";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.grep()<cr>";
desc = "Grep";
}
{
key = "<leader>:";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.command_history()<cr>";
desc = "Command History";
}
{
key = "<leader>e";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.explorer()<cr>";
desc = "File Explorer";
}
{
key = "-";
mode = "n";
silent = true;
action = "<cmd>Oil<cr>";
desc = "Oil";
}
# Find
{
key = "<leader>fb";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.buffers()<cr>";
desc = "Buffers";
}
{
key = "<leader>fc";
mode = "n";
silent = true;
action = ''<cmd>lua Snacks.picker.files({ cwd = vim.fn.stdpath("config") })<cr>'';
desc = "Find Config File";
}
{
key = "<leader>ff";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.files()<cr>";
desc = "Find Files";
}
{
key = "<leader>fg";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_files()<cr>";
desc = "Find Git Files";
}
{
key = "<leader>fp";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.projects()<cr>";
desc = "Projects";
}
{
key = "<leader>fr";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.recent()<cr>";
desc = "Recent";
}
{
key = "<leader>fn";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.notifications()<cr>";
desc = "Notification History";
}
{
key = "<leader>fe";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.icons()<cr>";
desc = "Emoji";
}
# Git
{
key = "<leader>gb";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_branches()<cr>";
desc = "Git Branches";
}
{
key = "<leader>gL";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_log()<cr>";
desc = "Git Log Line";
}
{
key = "<leader>gs";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_status()<cr>";
desc = "Git Status";
}
{
key = "<leader>gS";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_stash()<cr>";
desc = "Git Stash";
}
{
key = "<leader>gd";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_diff()<cr>";
desc = "Git Diff (Hunks)";
}
{
key = "<leader>gf";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_log_file()<cr>";
desc = "Git Log File";
}
# Grep
{
key = "<leader>sb";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lines()<cr>";
desc = "Buffer Lines";
}
{
key = "<leader>st";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.todo_comments()<cr>";
desc = "Todos";
}
{
key = "<leader>sB";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.grep_buffers()<cr>";
desc = "Grep Open Buffers";
}
{
key = "<leader>sg";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.grep()<cr>";
desc = "Grep";
}
{
key = "<leader>sw";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.grep_word()<cr>";
desc = "Visual selection or word";
}
{
key = "<leader>sr";
mode = "n";
silent = true;
action = "<cmd>nohlsearch<cr>";
desc = "Reset search";
}
# LSP
{
key = "gd";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_definitions()<cr>";
desc = "Goto Definition";
}
{
key = "gD";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_declarations()<cr>";
desc = "Goto Declaration";
}
{
key = "gr";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_references()<cr>";
desc = "References";
nowait = true;
}
{
key = "gI";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_implementations()<cr>";
desc = "Goto Implementation";
}
{
key = "gy";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_type_definitions()<cr>";
desc = "Goto Type Definition";
}
{
key = "<leader>ss";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_symbols()<cr>";
desc = "LSP Symbols";
}
{
key = "<leader>sS";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_workspace_symbols()<cr>";
desc = "LSP Workspace Symbols";
}
];
};
}

View file

@ -0,0 +1,16 @@
{
programs.nvf.settings.vim.utility.snacks-nvim = {
enable = true;
setupOpts = {
image = {
enabled = true;
setupOpts.doc.inline = false;
};
quickfile.enabled = true;
statuscolumn.enabled = true;
zen.enabled = true;
bufdelete.enabled = true;
gitsigns.enabled = true;
};
};
}

View file

@ -0,0 +1,50 @@
{ pkgs, ... }:
{
programs.nvf.settings.vim = {
undoFile.enable = true;
utility = {
motion.flash-nvim.enable = true;
outline.aerial-nvim.enable = true;
};
tabline.nvimBufferline.enable = true;
notes.todo-comments.enable = true;
statusline.lualine.enable = true;
autocomplete = {
nvim-cmp = {
enable = true;
sources = {
buffer = "[Buffer]";
nvim-cmp = null;
path = "[Path]";
};
sourcePlugins = [
pkgs.vimPlugins.cmp-cmdline
];
};
};
snippets.luasnip.enable = true;
ui = {
noice.enable = true;
colorizer.enable = true;
};
git = {
enable = true;
gitsigns.enable = true;
};
terminal.toggleterm = {
enable = true;
lazygit = {
enable = true;
mappings.open = "<leader>gl";
};
};
visuals = {
rainbow-delimiters.enable = true;
nvim-scrollbar = {
enable = false;
};
};
};
}

View file

@ -0,0 +1,28 @@
{
programs.obsidian = {
enable = true;
defaultSettings = {
corePlugins = [
"backlink"
"bases"
"bookmarks"
"canvas"
"command-palette"
"daily-notes"
"editor-status"
"file-explorer"
"file-recovery"
"global-search"
"graph"
"note-composer"
"outgoing-link"
"outline"
"page-preview"
"switcher"
"tag-pane"
"templates"
"word-count"
];
};
};
}

View file

@ -0,0 +1,6 @@
{
imports = [
./secrets.nix
./service.nix
];
}

View file

@ -0,0 +1,6 @@
{
sops.secrets = {
"rus07tam/openclaw/gatewayToken" = { };
"rus07tam/openclaw/telegramToken" = { };
};
}

View file

@ -0,0 +1,37 @@
{ sec, inputs, ... }:
{
imports = [
inputs.nix-openclaw.homeManagerModules.openclaw
];
programs.openclaw = {
enable = true;
installApp = false;
bundledPlugins = {
summarize.enable = true;
};
instances.default = {
enable = true;
systemd.enable = true;
config = {
gateway = {
mode = "local";
auth.token = sec."rus07tam/openclaw/gatewayToken".value;
};
channels.telegram = {
tokenFile = sec."rus07tam/openclaw/telegramToken".path;
allowFrom = [ 6146757977 ];
groups = {
"*" = {
requireMention = true;
};
};
};
};
};
};
}

View file

@ -0,0 +1,9 @@
{
imports = [
./nextcloud.nix
];
programs.rclone = {
enable = true;
};
}

View file

@ -0,0 +1,22 @@
{
config,
sec,
...
}:
{
sops.secrets."rus07tam/tokens/nextcloud.ruject.fun" = { };
programs.rclone.remotes.nextcloud = {
config = {
type = "webdav";
vendor = "nextcloud";
url = "https://nextcloud.ruject.fun/remote.php/dav/files/rus07tam";
user = "rus07tam";
};
secrets.pass = sec."rus07tam/tokens/nextcloud.ruject.fun".path;
mounts."" = {
enable = true;
mountPoint = "${config.home.homeDirectory}/Nextcloud";
};
};
}

View file

@ -0,0 +1,47 @@
{
pkgs,
config,
inputs,
...
}:
{
imports = [
inputs.stylix.homeModules.stylix
];
stylix = {
enable = true;
base16Scheme = config.theme.colors;
cursor = {
name = "phinger-cursors-light";
package = pkgs.phinger-cursors;
size = 20;
};
fonts = {
monospace = {
package = pkgs.nerd-fonts.jetbrains-mono;
name = "JetBrains Mono Nerd Font";
};
sansSerif = {
package = pkgs.source-sans-pro;
name = "Source Sans Pro";
};
serif = {
package = pkgs.source-sans-pro;
name = "Source Sans Pro";
};
emoji = {
package = pkgs.noto-fonts-color-emoji;
name = "Noto Color Emoji";
};
inherit (config.theme.fonts) sizes;
};
polarity = "dark";
image = config.assets.wallpaper;
};
}

View file

@ -0,0 +1,113 @@
{
config,
pkgs,
lib,
...
}:
let
accent = "#${config.theme.colors.base0D}";
background = "#${config.theme.colors.base00}";
background-alt = "#${config.theme.colors.base01}";
foreground = "#${config.theme.colors.base05}";
font = config.stylix.fonts.serif.name;
inherit (config.theme) rounding;
font-size = config.stylix.fonts.sizes.popups;
in
{
home.packages = with pkgs; [ wofi-emoji ];
programs.wofi = {
enable = true;
settings = {
allow_markup = true;
width = 650;
show = "drun";
prompt = "Apps";
normal_window = true;
layer = "top";
height = "325px";
orientation = "vertical";
halign = "fill";
line_wrap = "off";
dynamic_lines = false;
allow_images = true;
image_size = 24;
exec_search = false;
hide_search = false;
parse_search = false;
insensitive = true;
hide_scroll = true;
no_actions = true;
sort_order = "default";
gtk_dark = true;
filter_rate = 100;
key_expand = "Tab";
key_exit = "Escape";
};
style =
lib.mkForce
# css
''
* {
font-family: "${font}";
font-weight: 600;
font-size: ${toString font-size}px;
}
#window {
background-color: ${background};
color: ${foreground};
border-radius: ${toString rounding}px;
}
#outer-box {
padding: 20px;
}
#input {
background-color: ${background-alt};
border: 0px solid ${accent};
color: ${foreground};
padding: 8px 12px;
}
#scroll {
margin-top: 20px;
}
#inner-box {}
#img {
padding-right: 8px;
}
#text {
color: ${foreground};
}
#text:selected {
color: ${foreground};
}
#entry {
padding: 6px;
}
#entry:selected {
background-color: ${accent};
color: ${foreground};
}
#unselected {}
#selected {}
#input,
#entry:selected {
border-radius: ${toString rounding}px;
}
'';
};
}

View file

@ -0,0 +1,143 @@
{
pkgs,
lib,
...
}:
{
programs.zed-editor = {
enable = true;
extensions = [
"nix"
"git-firefly"
"toml"
"ruff"
"pylsp"
"shades-of-purple-theme"
"material-icon-theme"
];
extraPackages = with pkgs; [
nixd
ruff
];
mutableUserDebug = false;
mutableUserKeymaps = false;
mutableUserSettings = false;
mutableUserTasks = false;
userSettings = {
auto_update = false;
base_keymap = "VSCode";
edit_predictions = {
disabled_globs = [
"**/.env*"
"**/*.pem"
"**/*.key"
"**/*.cert"
"**/*.crt"
"**/secrets.yml"
];
};
features = {
copilot = false;
};
file_scan_exclusions = [
"_build"
".vscode"
".lexical"
".elixir_ls"
".coverage"
".venv"
".pytest_cache/"
".mypy_cache/"
".ruff_cache"
".git/"
".idea"
"**/__pycache__"
"node_modules"
"test_db.sql"
".ropeproject"
".expert"
];
format_on_save = "on";
icon_theme = {
mode = "system";
light = "Material Icon Theme";
dark = "Material Icon Theme";
};
load_direnv = "direct";
languages = {
Markdown = { };
Nix = {
language_servers = [
"nixd"
"!nil"
];
formatter.external = {
command = "${lib.getExe pkgs.nixfmt}";
arguments = [
"--quiet"
"--"
];
};
show_edit_predictions = true;
};
Python = {
language_servers = [
"ty"
"ruff"
];
format_on_save = "on";
formatter = [
{
code_action = "source.fixAll.ruff";
}
{
code_action = "source.organizeImports.ruff";
}
{
language_server = {
name = "ruff";
};
}
];
show_edit_predictions = true;
};
};
lsp = {
nixd = {
binary.path = lib.getExe pkgs.nixd;
};
ruff = {
binary = {
path = lib.getExe pkgs.ruff;
arguments = [ "server" ];
};
};
};
preview_tabs = {
enabled = true;
enable_preview_from_file_finder = true;
enable_preview_from_code_navigation = true;
};
show_edit_predictions = true;
tabs = {
file_icons = true;
git_status = true;
};
tab_size = 2;
telemetry = {
diagnostics = false;
metrics = false;
};
minimap.show = "never";
use_smartcase_search = true;
vim_mode = true;
relative_line_numbers = true;
remove_trailing_whitespace_on_save = true;
theme = lib.mkForce {
mode = "system";
light = "Shades Of Purple";
dark = "Shades Of Purple (Super Dark)";
};
};
};
}

View file

@ -0,0 +1,5 @@
{
programs.zellij = {
enable = true;
};
}

View file

@ -0,0 +1,17 @@
{
sops = {
defaultSopsFile = ./../../../secrets/rus07tam.yaml;
age.sshKeyPaths = [
"/home/rus07tam/.ssh/id_ed25519"
];
secrets = {
"rus07tam/keys/ssh/public" = {
mode = "0644";
};
"rus07tam/keys/ssh/private" = {
mode = "0600";
};
};
};
}

View file

@ -0,0 +1,21 @@
{
sops = {
secrets = {
"rus07tam/hashedPassword" = {
sopsFile = ./../../../secrets/rus07tam.yaml;
};
"rus07tam/keys/ssh/public" = {
sopsFile = ./../../../secrets/rus07tam.yaml;
mode = "0644";
owner = "rus07tam";
group = "users";
};
"rus07tam/keys/ssh/private" = {
sopsFile = ./../../../secrets/rus07tam.yaml;
mode = "0600";
owner = "rus07tam";
group = "users";
};
};
};
}

29
users/rus07tam/system.nix Normal file
View file

@ -0,0 +1,29 @@
{
pkgs,
sec,
...
}:
{
imports = [ ./secrets/system.nix ];
services.openssh.settings.AllowUsers = [ "rus07tam" ];
programs.fish.enable = true;
users.users.rus07tam = {
isNormalUser = true;
description = "rus07tam";
uid = 1000;
extraGroups = [
"networkmanager"
"wheel"
];
hashedPasswordFile = sec."rus07tam/hashedPassword".path;
openssh.authorizedKeys = {
keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPRVeP7aRYdbIku7Qr6dLFLQrcq8LUUTTpYZZ3E8ZoQK ruject@rus07tam"
];
};
shell = pkgs.fish;
};
}

View file

@ -0,0 +1,9 @@
{ lib, ... }:
{
options.assets = lib.mkOption {
type = lib.types.attrs;
default = {
wallpaper = ../assets/wallpaper.png;
};
};
}

View file

@ -0,0 +1,7 @@
{
imports = [
./assets.nix
./theme.nix
./shell_aliases.nix
];
}

View file

@ -0,0 +1,45 @@
{
lib,
pkgs,
...
}:
{
options.shellAliases = lib.mkOption {
type = lib.types.attrs;
default = {
e = "exit";
ls = "eza --icons=always --no-quotes";
tree = "eza --icons=always --tree --no-quotes";
cat = "bat --theme=base16 --color=always --paging=never --tabs=2 --wrap=never --plain";
mkdir = "mkdir -p";
rm = "${pkgs.rmtrash}/bin/rmtrash";
rmdir = "${pkgs.rmtrash}/bin/rmdirtrash";
frm = "${pkgs.coreutils}/bin/rm";
frmdir = "${pkgs.coreutils}/bin/rmdir";
poweroff = "sudo poweroff";
shutdown = "sudo poweroff";
reboot = "sudo reboot";
nix-shell = "nix-shell --command fish";
# git
ga = "git add";
gc = "git commit";
gp = "git push";
gpl = "git pull";
gs = "git status";
gl = "git log";
gd = "git diff";
gf = "git fetch";
gm = "git merge";
gsw = "git switch";
gco = "git checkout";
gcb = "git checkout -b";
gbr = "git branch";
grs = "git reset HEAD~1";
grh = "git reset --hard HEAD~1";
gaa = "git add .";
gcm = "git commit -m";
};
};
}

View file

@ -0,0 +1,51 @@
{ lib, ... }:
{
options.theme = lib.mkOption {
type = lib.types.attrs;
default = {
rounding = 20;
gaps-in = 7;
gaps-out = 7 * 2;
active-opacity = 0.95;
inactive-opacity = 0.92;
blur = true;
border-size = 2;
animation-speed = "fast"; # "fast" | "medium" | "slow"
bar = {
position = "top"; # "top" | "bottom"
transparent = true;
transparentButtons = false;
floating = true;
};
colors = {
base00 = "000000"; # 000000 ----
base01 = "231a40"; # 231a40 ---
base02 = "432d59"; # 432d59 --
base03 = "593380"; # 593380 -
base04 = "00ff00"; # 7b43bf +
base05 = "b08ae6"; # b08ae6 ++
base06 = "9045e6"; # 9045e6 +++
base07 = "a366ff"; # a366ff ++++
base08 = "a82ee6"; # a82ee6 red
base09 = "bb66cc"; # bb66cc orange
base0A = "f29df2"; # f29df2 yellow
base0B = "4595e6"; # 41d9bF green
base0C = "40dfff"; # 40dfff aqua/cyan
base0D = "4136d9"; # 326ee6 blue
base0E = "7e5ce6"; # 7e5ce6 purple
base0F = "a886bf"; # a886bf brown
};
fonts = {
sizes = {
applications = 12;
desktop = 12;
popups = 12;
terminal = 10;
};
};
};
};
}