Add new server modules and configurations for various services

- Introduced `default-creds` module for managing default credentials with Umami integration.
- Added `fail2ban` module for brute-force attack protection with configurable ban times.
- Created `firewall` module to enable and configure basic firewall settings.
- Implemented `gitea` module for self-hosted Git service with PostgreSQL backend.
- Developed `glance` module for a customizable dashboard with various widgets and themes.
- Added `iknowyou` module for a self-hosted password manager with production and demo environments.
- Introduced `kernel-hardening` module for enhancing kernel security settings.
- Created `mazanoke` module for a simple web application with Nginx integration.
- Added `mealie` module for a self-hosted meal planning application.
- Implemented `stirling-pdf` module for PDF generation service.
- Developed `umami` module for self-hosted analytics with secret management.
- Added `ssh` module for secure SSH configuration with user restrictions.
- Introduced `nixy` theme for a customized aesthetic experience across services.
This commit is contained in:
KptltD00M
2026-06-16 23:03:39 +02:00
commit 5082521524
140 changed files with 9740 additions and 0 deletions
+33
View File
@@ -0,0 +1,33 @@
{
inputs,
pkgs,
config,
...
}: let
c = config.lib.stylix.colors;
in {
imports = [inputs.nvf.homeManagerModules.default];
programs.nvf = {
enable = true;
settings = {
vim.luaConfigRC.hl-overrides = ''
local function apply_hl()
vim.api.nvim_set_hl(0, "MiniStarterHeader", { fg = "#${c.base0D}", bold = true })
vim.api.nvim_set_hl(0, "SnacksPickerBorder", { fg = "#${c.base0D}" })
vim.api.nvim_set_hl(0, "SnacksPickerTitle", { fg = "#${c.base0D}", bold = true })
end
apply_hl()
vim.api.nvim_create_autocmd("ColorScheme", { pattern = "*", callback = apply_hl })
'';
imports = [
./options.nix
./languages.nix
./picker.nix
./snacks.nix
./keymaps.nix
./utils.nix
./mini.nix
];
};
};
}
+37
View File
@@ -0,0 +1,37 @@
{
inputs,
pkgs,
system,
...
}: let
nvimConfig = inputs.nvf.lib.neovimConfiguration {
inherit pkgs;
modules = [
./options.nix
./languages.nix
./picker.nix
./snacks.nix
./keymaps.nix
./utils.nix
./mini.nix
];
};
in {
packages.${system}.nvim = nvimConfig.neovim;
apps.${system}.nvim = {
type = "app";
program = "${nvimConfig.neovim}/bin/nvim";
};
defaultApp.${system} = {
type = "app";
program = "${nvimConfig.neovim}/bin/nvim";
};
homeManagerModules.nvim = {
imports = [
inputs.nvf.homeManagerModules.default
./default.nix
];
};
}
+327
View File
@@ -0,0 +1,327 @@
{
vim = {
globals.mapleader = " ";
keymaps = [
{
key = "s";
mode = "n";
silent = true;
action = "<cmd>lua MiniJump2d.start(MiniJump2d.builtin_opts.single_character)<cr>";
desc = "Jump2d";
}
{
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";
}
# Format
{
key = "<leader>lf";
mode = "n";
silent = true;
action = "<cmd>lua require('conform').format({ async = true, lsp_format = 'fallback' })<cr>";
desc = "Format file";
}
# Terminal
{
key = "<leader>tt";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.terminal.toggle()<cr>";
desc = "Toggle terminal";
}
{
key = "<leader>tf";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.terminal.toggle(nil, { style = 'float' })<cr>";
desc = "Toggle terminal (float)";
}
{
key = "<leader>tg";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.lazygit()<cr>";
desc = "Lazygit";
}
{
key = "<leader>ts";
mode = "v";
silent = true;
action = ":<C-u>SttrTransform<CR>";
desc = "String Transform";
}
{
key = "<leader>tj";
mode = "n";
silent = true;
action = ":JwtTui<CR>";
desc = "JWT TUI";
}
{
key = "<leader>tj";
mode = "v";
silent = true;
action = ":<C-u>JwtTuiOpen<CR>";
desc = "JWT TUI";
}
# 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";
}
# Todos
{
key = "<leader>xt";
mode = "n";
silent = true;
action = "<cmd>TodoTrouble<cr>";
desc = "Todo (Trouble)";
}
# Shell
{
key = "<leader>!";
mode = "n";
silent = true;
lua = true;
desc = "Insert command output";
action = ''
function()
local cmd = vim.fn.input("Command: ")
if cmd == "" then return end
local lines = vim.fn.systemlist(cmd)
while #lines > 0 and lines[#lines] == "" do
table.remove(lines)
end
if #lines == 0 then return end
vim.api.nvim_put(lines, "l", true, true)
end
'';
}
{
key = "<leader>!";
mode = "v";
silent = true;
lua = true;
desc = "Run command with selection";
action = ''
function()
local start_line = vim.fn.line("'<")
local end_line = vim.fn.line("'>")
local lines = vim.api.nvim_buf_get_lines(0, start_line - 1, end_line, false)
local input_text = table.concat(lines, "\n")
local cmd = vim.fn.input("$ ")
if cmd == "" then return end
local result = vim.fn.system({"bash", "-c", cmd}, input_text)
local output = vim.split(result, "\n", { plain = true })
if output[#output] == "" then table.remove(output) end
if #output == 0 then return end
vim.api.nvim_buf_set_lines(0, start_line - 1, end_line, false, output)
end
'';
}
# QOL
{
key = ">";
mode = "v";
silent = true;
action = ">gv";
desc = "Indent and keep selection";
}
{
key = "<";
mode = "v";
silent = true;
action = "<gv";
desc = "Dedent and keep selection";
}
# Move
{
key = "<C-h>";
mode = "n";
silent = true;
action = "<C-w>h";
desc = "Move to left window";
}
{
key = "<C-j>";
mode = "n";
silent = true;
action = "<C-w>j";
desc = "Move to bottom window";
}
{
key = "<C-k>";
mode = "n";
silent = true;
action = "<C-w>k";
desc = "Move to top window";
}
{
key = "<C-l>";
mode = "n";
silent = true;
action = "<C-w>l";
desc = "Move to right window";
}
# Save
{
key = "<C-s>";
mode = [
"n"
"i"
"v"
];
silent = true;
action = "<cmd>w<cr>";
desc = "Save file";
}
# Deactivate "esc"
{
key = "<Esc>";
mode = [
"n"
"i"
"v"
];
silent = true;
action = "<Nop>";
desc = "Disable Escape";
}
# Disable Arrow Keys in Normal Mode and Middle click
{
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";
}
{
key = "<MiddleMouse>";
mode = [
"n"
"i"
"v"
];
action = "<nop>";
silent = true;
}
{
key = "<2-MiddleMouse>";
mode = [
"n"
"i"
"v"
];
action = "<nop>";
silent = true;
}
{
key = "<3-MiddleMouse>";
mode = [
"n"
"i"
"v"
];
action = "<nop>";
silent = true;
}
];
};
}
+116
View File
@@ -0,0 +1,116 @@
{...}: {
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 = true;
};
nvim-lint = {
enable = true;
};
};
treesitter = {
enable = true;
autotagHtml = true;
context.enable = true;
highlight.enable = true;
textobjects.enable = true;
};
lsp = {
enable = true;
presets = {
tailwindcss-language-server = {
enable = true;
};
};
trouble.enable = true;
lspSignature.enable = true;
lspconfig.enable = true;
formatOnSave = false;
mappings.format = null;
inlayHints.enable = true;
servers.nil.settings.nix.autoArchive = 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;
};
symbol_in_winbar.enable = false;
};
};
};
languages = {
enableExtraDiagnostics = true;
enableFormat = true;
enableTreesitter = true;
python = {
enable = true;
lsp = {
enable = true;
servers = ["pyright"];
};
};
astro.enable = true;
go.enable = true;
markdown = {
enable = true;
format.type = ["prettierd"];
extensions = {
markview-nvim = {
enable = true;
setupOpts = {
preview = {
hybrid_modes = ["n"];
};
};
};
};
extraDiagnostics.enable = true;
};
typescript.enable = true;
css.enable = true;
svelte.enable = true;
html.enable = true;
bash.enable = true;
nix.enable = true;
lua.enable = true;
};
formatter = {
conform-nvim = {
enable = true;
setupOpts.format_on_save = {
lsp_format = "fallback";
};
};
};
};
}
+100
View File
@@ -0,0 +1,100 @@
{lib, ...}: {
vim.luaConfigRC.mini-clue = ''
local miniclue = require('mini.clue')
miniclue.setup({
triggers = {
{ mode = 'n', keys = '<Leader>' },
{ mode = 'x', keys = '<Leader>' },
{ mode = 'n', keys = 'g' },
{ mode = 'x', keys = 'g' },
{ mode = 'n', keys = "'" },
{ mode = 'n', keys = '`' },
{ mode = 'n', keys = '"' },
{ mode = 'i', keys = '<C-r>' },
{ mode = 'c', keys = '<C-r>' },
{ mode = 'n', keys = '<C-w>' },
{ mode = 'n', keys = 'z' },
},
clues = {
miniclue.gen_clues.g(),
miniclue.gen_clues.marks(),
miniclue.gen_clues.registers(),
miniclue.gen_clues.windows({ submode_resize = true }),
miniclue.gen_clues.z(),
{ mode = 'n', keys = '<Leader>f', desc = '+find' },
{ mode = 'n', keys = '<Leader>s', desc = '+search' },
{ mode = 'n', keys = '<Leader>t', desc = '+terminal' },
{ mode = 'n', keys = '<Leader>u', desc = '+ui' },
{ mode = 'n', keys = '<Leader>l', desc = '+lsp' },
{ mode = 'n', keys = '<Leader>x', desc = '+trouble' },
{ mode = 'n', keys = '<Leader>!', desc = 'shell' },
{ mode = 'v', keys = '<Leader>!', desc = 'shell' },
{ mode = 'n', keys = '<Leader>e', desc = 'yazi' },
},
window = { delay = 300 },
})
'';
vim.mini = {
ai.enable = true;
starter = {
enable = true;
setupOpts = {
header = ''
'';
footer = "";
items = [
{
name = "files";
action = lib.mkLuaInline "function() Snacks.picker.files() end";
section = "";
}
{
name = "directories";
action = lib.mkLuaInline "function() Snacks.explorer() end";
section = "";
}
{
name = "tmp";
action = lib.mkLuaInline ''
function()
local uuid = vim.fn.system("uuidgen"):match("(%S+)")
vim.cmd("edit /tmp/" .. uuid .. ".md")
end
'';
section = "";
}
{
name = "recent";
action = lib.mkLuaInline "function() Snacks.picker.recent() end";
section = "";
}
];
};
};
comment.enable = true;
icons.enable = true;
indentscope.enable = true;
pairs.enable = true;
diff.enable = true;
git.enable = true;
jump2d.enable = true;
statusline.enable = true;
clue.enable = true;
surround.enable = true;
};
}
+45
View File
@@ -0,0 +1,45 @@
{lib, ...}: {
vim = {
viAlias = false;
vimAlias = true;
withNodeJs = 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;
clipboard = {
enable = true;
registers = "unnamedplus";
};
luaConfigRC.osc52-clipboard = ''
vim.g.clipboard = {
name = 'OSC 52',
copy = {
['+'] = require('vim.ui.clipboard.osc52').copy '+',
['*'] = require('vim.ui.clipboard.osc52').copy '*',
},
paste = {
['+'] = require('vim.ui.clipboard.osc52').paste '+',
['*'] = require('vim.ui.clipboard.osc52').paste '*',
},
}
'';
theme = {
enable = true;
name = lib.mkForce "catppuccin";
style = lib.mkForce "mocha";
transparent = lib.mkForce true;
};
};
}
+162
View File
@@ -0,0 +1,162 @@
{
vim = {
utility = {
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>E";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.explorer()<cr>";
desc = "File Explorer";
}
{
key = "<leader>/";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lines()<cr>";
desc = "Buffer Lines";
}
# Find
{
key = "<leader>fb";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.buffers()<cr>";
desc = "Buffers";
}
{
key = "<leader>ff";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.files()<cr>";
desc = "Find 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>f:";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.command_history()<cr>";
desc = "Command History";
}
{
key = "<leader>fn";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.notifications()<cr>";
desc = "Notification History";
}
# Grep
{
key = "<leader>sg";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.grep()<cr>";
desc = "Grep";
}
{
key = "<leader>st";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.todo_comments()<cr>";
desc = "Todos";
}
{
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";
}
];
};
}
+18
View File
@@ -0,0 +1,18 @@
{
vim.utility.snacks-nvim = {
enable = true;
setupOpts = {
quickfile.enabled = true;
statuscolumn.enabled = true;
zen.enabled = true;
bufdelete.enabled = true;
gitsigns.enabled = true;
animate.enabled = true;
lazygit = {
enabled = true;
configure = false;
};
terminal.enabled = true;
};
};
}
+72
View File
@@ -0,0 +1,72 @@
{pkgs, ...}: {
vim = {
luaConfigRC.remove-todo-keymaps = ''
vim.keymap.del("n", "<leader>tdq")
vim.keymap.del("n", "<leader>tdt")
'';
undoFile.enable = true;
utility.yazi-nvim = {
enable = true;
mappings.openYazi = "<leader>e";
};
notes.todo-comments.enable = true;
assistant.copilot = {
enable = true;
cmp.enable = true;
};
autocomplete = {
nvim-cmp = {
enable = true;
sources = {
buffer = "[Buffer]";
path = "[Path]";
};
sourcePlugins = [
pkgs.vimPlugins.cmp-cmdline
];
};
};
snippets.luasnip.enable = true;
ui = {
noice.enable = true;
colorizer.enable = true;
};
visuals = {
rainbow-delimiters.enable = true;
};
extraPlugins = {
sttr-nvim = {
package = pkgs.vimUtils.buildVimPlugin {
name = "sttr-nvim";
src = pkgs.fetchFromGitHub {
owner = "anotherhadi";
repo = "sttr.nvim";
rev = "b41f2f51372222e23efbe5df9d72391cd933d4d1";
hash = "sha256-JPv0NNNUUNPNJM5LHYjcmTvilbOKB3OxI2Q6wxVbTks=";
};
};
setup = ''
require("sttr").setup()
'';
};
jwt-tui-nvim = {
package = pkgs.vimUtils.buildVimPlugin {
name = "jwt-tui-nvim";
src = pkgs.fetchFromGitHub {
owner = "anotherhadi";
repo = "jwt-tui.nvim";
rev = "c5100cb2cdfaf333014076a1a5c4c6a778bf3983";
hash = "sha256-qnQYZuQwyWkezhuyOorM67KBtatUboubofuT9A6McJI=";
};
};
setup = ''
require("jwt-tui").setup()
'';
};
};
};
}