Compare commits

..

17 Commits

Author SHA1 Message Date
231027cd5b add tea (Gitea CLI) to home packages 2026-08-13 13:02:42 +02:00
19e2f737bc Fix stale documentation in CLAUDE.md
- Remove deleted fonts.nix from directory layout
- Update 'Adding a New Program' section to reflect ponytail cleanup: simple packages go in common.nix, per-file only for programs needing real configuration
- Update Rules section to document common.nix and per-file program patterns
2026-08-12 15:57:10 +02:00
6440a4dc70 Remove rofi ssh mode and tmux-navigator cmd block
The ssh rofi mode serves no purpose with no SSH hosts configured.
The cmd block in tmux-navigator only affects lazy loading, which is disabled.
2026-08-12 15:50:52 +02:00
c53829cbb3 Remove dead fonts.nix stub
home/fonts.nix only set fonts.fontconfig.enable = true, which home-manager
enables automatically when font packages are declared. Delete the file and
remove its imports from both host home.nix files.
2026-08-12 15:49:50 +02:00
c9424ffd09 Fix qtile config: consolidate terminal variable and remove unused imports 2026-08-12 15:46:19 +02:00
a569683ea0 Inline one-liner system modules into host defaults
- services.openssh.enable, virtualisation.docker.enable into hivebrain
- services.displayManager.sddm.enable, services.desktopManager.plasma6.enable into nikita-nixos
- Remove four no-longer-needed system modules
2026-08-12 15:43:43 +02:00
9a3f7807e1 Remove empty LazyVim config stubs
LazyVim loads its defaults without these files present, so the empty
stubs are unnecessary overhead.
2026-08-12 15:41:56 +02:00
1d7c4cebeb Collapse 26 trivial single-package programs into home/programs/common.nix
Consolidates alacritty, audacity, blender, blockbench, claude-code, fd,
filezilla, fzf, gcc, godot_4, imv, jdk21, jetbrains-toolbox, lazygit,
lua-language-server, mpv, nil, nixpkgs-fmt, nodejs, obsidian, pkg-config,
prismlauncher, vesktop, xclip, xwallpaper, yt-dlp into a single list.

rustup.nix kept separate due to its configuration (session vars, many deps).

Updates imports:
- hivebrain: all 26 + rustup now via common.nix + rustup.nix
- nikita-nixos: blender.nix → common.nix (gets all lightweight tools)
2026-08-12 15:37:35 +02:00
ee386e1ad4 Merge remote; add nix auto-GC and CLAUDE.md
Resolves conflict with upstream tmux/blender additions (already covered
by the per-program restructure). Adds weekly nix GC (--delete-older-than 7d),
store auto-optimise, and project CLAUDE.md.
2026-08-12 15:29:45 +02:00
bc828f7adf Restructure packages into per-program home/programs/ modules
Replaces the monolithic packages-marvin.nix with one file per program
so hosts can opt in selectively. Adds docker, clamav, steam, and
audio keybindings for hivebrain. Fixes monitor order and switches
volume widget to PulseVolume.
2026-08-12 15:28:06 +02:00
9cc2ba3dae Added tmux with custom initial setup (marvin only) & blender (both) 2026-07-01 20:06:16 +02:00
7d5b6f7d3e Nvim switch from NvChad to LazyVim 2026-07-01 20:04:41 +02:00
c239d8dbda Drop ssh module from nikita-nixos host 2026-06-29 19:31:56 +02:00
0cd3f5ce32 Install Instructions 2026-06-29 19:31:10 +02:00
e442f610c3 Scaffold nikita-nixos host
Add a second nixosConfigurations entry for a friend's machine running
Plasma 6 + SDDM. The hardware-configuration.nix is a placeholder; it
must be replaced with the output of nixos-generate-config on the
actual hardware before installing. Git identity in hosts/nikita-nixos/
home.nix is also a placeholder.
2026-06-29 18:53:20 +02:00
3ae5cba9a6 Restructure flake into per-host modules
Move host-specific files under hosts/<name>/ so a second machine can be
added without forking the repo. Split system/users.nix and
system/display-manager.nix into per-option subfolders, separate the
home-manager packages list into a shared base and a personal bundle,
extract networking.hostName out of the shared networking module, and
inline the git identity into the per-host home.nix. Add .gitignore
guardrails to keep secrets out.
2026-06-29 18:52:53 +02:00
c2d233b3fa Ignore docs/ directory 2026-06-29 18:15:38 +02:00
49 changed files with 526 additions and 382 deletions

9
.gitignore vendored
View File

@@ -1 +1,10 @@
.claude
docs/
# secret guardrails — keep credentials out of the repo
secrets/
*.age
*.key
*.pem
.env
.env.*

48
CLAUDE.md Normal file
View File

@@ -0,0 +1,48 @@
# NixOS Dotfiles
## Directory Layout
```
flake.nix # entry point, defines hosts
hosts/
hivebrain/ # marvin's main machine
nikita-nixos/ # nikita's machine
home/
packages-base.nix # universal packages every host gets (neovim, ripgrep, etc.)
programs/ # installable programs (common.nix for simple packages, per-file for configured programs)
rofi.nix # rofi config + packages
symlinks.nix # home-manager symlinks
tmux.nix # tmux config
yazi.nix # yazi config
zsh.nix # zsh config
system/ # NixOS system-level modules
```
## Adding a New Program
**For simple packages (no config):** Add the package to `home/programs/common.nix`'s `home.packages` list.
**For programs that need configuration** (session variables, extra options, dependencies): Create `home/programs/<name>.nix`:
```nix
{ pkgs, ... }:
{
# configuration + packages
}
```
Then add the import to `hosts/<host>/home.nix`:
```nix
../../home/programs/<name>.nix
```
Example: `rustup.nix` needs config (session variables) so it gets its own file. Simple packages like `lazygit` go in `common.nix`.
## Rules
- `home/packages-base.nix` — shared baseline, imported by every host. Only add truly universal tools here (shell utilities, editors).
- `home/programs/common.nix` — simple packages that just need to be installed (no extra config).
- `home/programs/<name>.nix` — programs that need real configuration beyond just `home.packages`. Hosts opt in by importing.
- `home/<tool>.nix` (tmux, zsh, rofi, etc.) — for programs that need configuration beyond just installing a package. Same opt-in pattern via host imports.
- `system/` modules are NixOS system-level config (not home-manager). Add them to `hosts/<host>/default.nix`.

12
README.md Normal file
View File

@@ -0,0 +1,12 @@
What's verified:
- nix flake check passes for both hivebrain and nikita-nixos
- nixos-rebuild dry-build --flake .#hivebrain succeeds (your config is unchanged in behavior)
- nixos-rebuild dry-build --flake .#nikita-nixos succeeds (Plasma 6 + SDDM derivation resolves)
- main is untouched
What's still TODO before you can install nikita-nixos:
- Replace hosts/nikita-nixos/hardware-configuration.nix (placeholder with PLACEHOLDER-ROOT label) with
the real output of nixos-generate-config --root /mnt on his machine.
- Replace the placeholder git identity in hosts/nikita-nixos/home.nix (currently Nikita /
nikita@example.com).
- Set Nikita's password with passwd after first boot — nothing is baked in.

8
config/nvim/.gitignore vendored Normal file
View File

@@ -0,0 +1,8 @@
tt.*
.tests
doc/tags
debug
.repro
foo.*
*.log
data

15
config/nvim/.neoconf.json Normal file
View File

@@ -0,0 +1,15 @@
{
"neodev": {
"library": {
"enabled": true,
"plugins": true
}
},
"neoconf": {
"plugins": {
"lua_ls": {
"enabled": true
}
}
}
}

View File

@@ -1,24 +0,0 @@
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <https://unlicense.org>

View File

@@ -1,9 +0,0 @@
**This repo is supposed to be used as config by NvChad users!**
- The main nvchad repo (NvChad/NvChad) is used as a plugin by this repo.
- So you just import its modules , like `require "nvchad.options" , require "nvchad.mappings"`
- So you can delete the .git from this repo ( when you clone it locally ) or fork it :)
# Credits
1) Lazyvim starter https://github.com/LazyVim/starter as nvchad's starter was inspired by Lazyvim's . It made a lot of things easier!

View File

@@ -1,37 +1,2 @@
vim.g.base46_cache = vim.fn.stdpath "data" .. "/base46/"
vim.g.mapleader = " "
-- bootstrap lazy and all plugins
local lazypath = vim.fn.stdpath "data" .. "/lazy/lazy.nvim"
if not vim.uv.fs_stat(lazypath) then
local repo = "https://github.com/folke/lazy.nvim.git"
vim.fn.system { "git", "clone", "--filter=blob:none", repo, "--branch=stable", lazypath }
end
vim.opt.rtp:prepend(lazypath)
local lazy_config = require "configs.lazy"
-- load plugins
require("lazy").setup({
{
"NvChad/NvChad",
lazy = false,
branch = "v2.5",
import = "nvchad.plugins",
},
{ import = "plugins" },
}, lazy_config)
-- load theme
dofile(vim.g.base46_cache .. "defaults")
dofile(vim.g.base46_cache .. "statusline")
require "options"
require "autocmds"
vim.schedule(function()
require "mappings"
end)
-- bootstrap lazy.nvim, LazyVim and your plugins
require("config.lazy")

View File

@@ -1,29 +1,43 @@
{
"LuaSnip": { "branch": "master", "commit": "0abc8f390b278c3b4aabc4c004ac8a088b65cf24" },
"NvChad": { "branch": "v2.5", "commit": "d042cc975247c2aa55fcb228e5d146dc1dc6c648" },
"base46": { "branch": "v3.0", "commit": "884b990dcdbe07520a0892da6ba3e8d202b46337" },
"LazyVim": { "branch": "main", "commit": "459a4c3b1059671e766a46c7cc223827dc67e3d0" },
"blink.cmp": { "branch": "main", "commit": "78336bc89ee5365633bcf754d93df01678b5c08f" },
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
"catppuccin": { "branch": "main", "commit": "e068ab5f8261f23f6f71ffd8791ae40315b77b9c" },
"conform.nvim": { "branch": "master", "commit": "619363c30309d29ffa631e67c8183f2a72caa373" },
"crates.nvim": { "branch": "main", "commit": "694357861ec9ebf12475ddcdd04ea45a0923c32d" },
"flash.nvim": { "branch": "main", "commit": "fcea7ff883235d9024dc41e638f164a450c14ca2" },
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
"gitsigns.nvim": { "branch": "main", "commit": "2038c666bd9d8a0b7349a0b6ee00dc83104b9ecf" },
"indent-blankline.nvim": { "branch": "master", "commit": "d28a3f70721c79e3c5f6693057ae929f3d9c0a03" },
"grug-far.nvim": { "branch": "main", "commit": "c69859c1d5427ab5fc7ed12380ab521b4e336691" },
"lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" },
"lazydev.nvim": { "branch": "main", "commit": "ff2cbcba459b637ec3fd165a2be59b7bbaeedf0d" },
"lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "47059d71b42d74b0a1e9f61c1d99d301039c3b5b" },
"mason-nvim-dap.nvim": { "branch": "main", "commit": "9a10e096703966335bd5c46c8c875d5b0690dade" },
"mason.nvim": { "branch": "main", "commit": "2a6940af80375532e5e9e7c1f2fc6319a1b7a69d" },
"menu": { "branch": "main", "commit": "7a0a4a2896b715c066cfbe320bdc048091874cc6" },
"minty": { "branch": "main", "commit": "aafc9e8e0afe6bf57580858a2849578d8d8db9e0" },
"nvim-autopairs": { "branch": "master", "commit": "7b9923abad60b903ece7c52940e1321d39eccc79" },
"nvim-cmp": { "branch": "main", "commit": "a1d504892f2bc56c2e79b65c6faded2fd21f3eca" },
"mini.ai": { "branch": "main", "commit": "cb20f298ebf5ae91924cd0c6c310712de2ef4086" },
"mini.icons": { "branch": "main", "commit": "e56797f90192d81f1fda02e662fc3e8e3d775027" },
"mini.pairs": { "branch": "main", "commit": "db0fac0a25884183650352ccf92b362a41ed2e9c" },
"noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" },
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
"nvim-dap": { "branch": "master", "commit": "9e848e09a697ee95302a3ef2dd43fd6eb709e570" },
"nvim-dap-ui": { "branch": "master", "commit": "1a66cabaa4a4da0be107d5eda6d57242f0fe7e49" },
"nvim-dap-virtual-text": { "branch": "master", "commit": "fbdb48c2ed45f4a8293d0d483f7730d24467ccb6" },
"nvim-lint": { "branch": "master", "commit": "a219b2c9e5b4765e5c845aba119dad55806fcaf1" },
"nvim-lspconfig": { "branch": "master", "commit": "3371bf298c1f56efc26771ee961f461176958fb5" },
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
"nvim-tree.lua": { "branch": "master", "commit": "8e8be709c9a93e1ebefde7964884a8b564bfd3e0" },
"nvim-treesitter": { "branch": "main", "commit": "4916d6592ede8c07973490d9322f187e07dfefac" },
"nvim-web-devicons": { "branch": "master", "commit": "dfbfaa967a6f7ec50789bead7ef87e336c1fa63c" },
"nvim-treesitter-textobjects": { "branch": "main", "commit": "851e865342e5a4cb1ae23d31caf6e991e1c99f1e" },
"nvim-ts-autotag": { "branch": "main", "commit": "88c1453db4ba7dd24131086fe51fdf74e587d275" },
"persistence.nvim": { "branch": "main", "commit": "b20b2a7887bd39c1a356980b45e03250f3dce49c" },
"plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" },
"rose-pine": { "branch": "main", "commit": "ff483051a47e27d84bdef47703538df1ed9f4a47" },
"rustaceanvim": { "branch": "main", "commit": "5a3a4158857ee1f7ec839b6ddd87cc0083a19c5f" },
"telescope.nvim": { "branch": "master", "commit": "427b576c16792edad01a92b89721d923c19ad60f" },
"ui": { "branch": "v3.0", "commit": "3e67e9d5325fd47fdbc90ca00a147db2f3525754" },
"volt": { "branch": "main", "commit": "620de1321f275ec9d80028c68d1b88b409c0c8b1" },
"snacks.nvim": { "branch": "main", "commit": "882c996cf28183f4d63640de0b4c02ec886d01f2" },
"todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" },
"tokyonight.nvim": { "branch": "main", "commit": "cdc07ac78467a233fd62c493de29a17e0cf2b2b6" },
"trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" },
"ts-comments.nvim": { "branch": "main", "commit": "a59d6092213447450191122c9346f309161504cb" },
"vim-tmux-navigator": { "branch": "master", "commit": "e41c431a0c7b7388ae7ba341f01a0d217eb3a432" },
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }
}

10
config/nvim/lazyvim.json Normal file
View File

@@ -0,0 +1,10 @@
{
"extras": [
],
"install_version": 8,
"news": {
"NEWS.md": "11866"
},
"version": 8
}

View File

@@ -1 +0,0 @@
require "nvchad.autocmds"

View File

@@ -1,24 +0,0 @@
-- This file needs to have same structure as nvconfig.lua
-- https://github.com/NvChad/ui/blob/v3.0/lua/nvconfig.lua
-- Please read that file to know all available options :(
---@type ChadrcConfig
local M = {}
M.base46 = {
theme = "rosepine",
-- hl_override = {
-- Comment = { italic = true },
-- ["@comment"] = { italic = true },
-- },
}
-- M.nvdash = { load_on_startup = true }
-- M.ui = {
-- tabufline = {
-- lazyload = false
-- }
-- }
return M

View File

@@ -0,0 +1,22 @@
-- Keymaps are automatically loaded on the VeryLazy event
-- Default keymaps: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
local map = vim.keymap.set
map("n", ";", ":", { desc = "CMD enter command mode" })
map("i", "jk", "<ESC>")
-- DAP (override LazyVim defaults with previous muscle-memory bindings)
map("n", "<Leader>dl", function() require("dap").step_into() end, { desc = "Debugger step into" })
map("n", "<Leader>dj", function() require("dap").step_over() end, { desc = "Debugger step over" })
map("n", "<Leader>dk", function() require("dap").step_out() end, { desc = "Debugger step out" })
map("n", "<Leader>dc", function() require("dap").continue() end, { desc = "Debugger continue" })
map("n", "<Leader>db", function() require("dap").toggle_breakpoint() end, { desc = "Debugger toggle breakpoint" })
map("n", "<Leader>dd", function()
require("dap").set_breakpoint(vim.fn.input("Breakpoint condition: "))
end, { desc = "Debugger conditional breakpoint" })
map("n", "<Leader>de", function() require("dap").terminate() end, { desc = "Debugger terminate" })
map("n", "<Leader>dr", function() require("dap").run_last() end, { desc = "Debugger run last" })
-- rustaceanvim
map("n", "<Leader>dt", "<cmd>RustLsp testables<CR>", { desc = "Rust testables" })

View File

@@ -0,0 +1,41 @@
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)
require("lazy").setup({
spec = {
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
{ import = "lazyvim.plugins.extras.dap.core" },
{ import = "lazyvim.plugins.extras.lang.rust" },
{ import = "plugins" },
},
defaults = {
lazy = false,
version = false,
},
install = { colorscheme = { "rose-pine", "tokyonight", "habamax" } },
checker = { enabled = true, notify = false },
performance = {
rtp = {
disabled_plugins = {
"gzip",
"tarPlugin",
"tohtml",
"tutor",
"zipPlugin",
},
},
},
})

View File

@@ -1,15 +0,0 @@
local options = {
formatters_by_ft = {
lua = { "stylua" },
-- css = { "prettier" },
-- html = { "prettier" },
},
-- format_on_save = {
-- -- These options will be passed to conform.format()
-- timeout_ms = 500,
-- lsp_fallback = true,
-- },
}
return options

View File

@@ -1,47 +0,0 @@
return {
defaults = { lazy = true },
install = { colorscheme = { "nvchad" } },
ui = {
icons = {
ft = "",
lazy = "󰂠 ",
loaded = "",
not_loaded = "",
},
},
performance = {
rtp = {
disabled_plugins = {
"2html_plugin",
"tohtml",
"getscript",
"getscriptPlugin",
"gzip",
"logipat",
"netrw",
"netrwPlugin",
"netrwSettings",
"netrwFileHandlers",
"matchit",
"tar",
"tarPlugin",
"rrhelper",
"spellfile_plugin",
"vimball",
"vimballPlugin",
"zip",
"zipPlugin",
"tutor",
"rplugin",
"syntax",
"synmenu",
"optwin",
"compiler",
"bugreport",
"ftplugin",
},
},
},
}

View File

@@ -1,6 +0,0 @@
require("nvchad.configs.lspconfig").defaults()
local servers = { "html", "cssls" }
vim.lsp.enable(servers)
-- read :h vim.lsp.config for changing options of lsp servers

View File

@@ -1,28 +0,0 @@
require "nvchad.mappings"
-- add yours here
local map = vim.keymap.set
map("n", ";", ":", { desc = "CMD enter command mode" })
map("i", "jk", "<ESC>")
-- map({ "n", "i", "v" }, "<C-s>", "<cmd> w <cr>")
-- Nvim DAP
map("n", "<Leader>dl", "<cmd>lua require'dap'.step_into()<CR>", { desc = "Debugger step into" })
map("n", "<Leader>dj", "<cmd>lua require'dap'.step_over()<CR>", { desc = "Debugger step over" })
map("n", "<Leader>dk", "<cmd>lua require'dap'.step_out()<CR>", { desc = "Debugger step out" })
map("n", "<Leader>dc", "<cmd>lua require'dap'.continue()<CR>", { desc = "Debugger continue" })
map("n", "<Leader>db", "<cmd>lua require'dap'.toggle_breakpoint()<CR>", { desc = "Debugger toggle breakpoint" })
map(
"n",
"<Leader>dd",
"<cmd>lua require'dap'.set_breakpoint(vim.fn.input('Breakpoint condition: '))<CR>",
{ desc = "Debugger set conditional breakpoint" }
)
map("n", "<Leader>de", "<cmd>lua require'dap'.terminate()<CR>", { desc = "Debugger reset" })
map("n", "<Leader>dr", "<cmd>lua require'dap'.run_last()<CR>", { desc = "Debugger run last" })
-- rustaceanvim
map("n", "<Leader>dt", "<cmd>lua vim.cmd('RustLsp testables')<CR>", { desc = "Debugger testables" })

View File

@@ -1,6 +0,0 @@
require "nvchad.options"
-- add yours here!
-- local o = vim.o
-- o.cursorlineopt ='both' -- to enable cursorline!

View File

@@ -0,0 +1,8 @@
return {
{ "rose-pine/neovim", name = "rose-pine", lazy = false, priority = 1000 },
{
"LazyVim/LazyVim",
opts = { colorscheme = "rose-pine" },
},
}

View File

@@ -1,83 +0,0 @@
return {
{
"stevearc/conform.nvim",
-- event = 'BufWritePre', -- uncomment for format on save
opts = require "configs.conform",
},
-- These are some examples, uncomment them if you want to see them work!
{
"neovim/nvim-lspconfig",
config = function()
require "configs.lspconfig"
end,
},
{
'mrcjkb/rustaceanvim',
-- To avoid being surprised by breaking changes,
-- I recommend you set a version range
version = '^9',
-- This plugin implements proper lazy-loading (see :h lua-plugin-lazy).
-- No need for lazy.nvim to lazy-load it.
lazy = false,
config = function()
local mason_registry = require('mason-registry')
local codelldb = mason_registry.get_package('codelldb')
local extension_path = codelldb:get_install_path() .. "/extension/"
local codelldb_path = extension_path .. "adapter/codelldb"
local liblldb_ext = vim.uv.os_uname().sysname == "Darwin" and "dylib" or "so"
local liblldb_path = extension_path .. "lldb/lib/liblldb." .. liblldb_ext
local cfg = require('rustaceanvim.config')
vim.g.rustaceanvim = {
dap = {
adapter = cfg.get_codelldb_adapter(codelldb_path, liblldb_path),
},
}
end
},
{
'mfussenegger/nvim-dap',
config = function()
local dap, dapui = require('dap'), require('dapui')
dap.listeners.before.attach.dapui_config = function()
dapui.open()
end
dap.listeners.before.launch.dapui_config = function()
dapui.open()
end
dap.listeners.before.event_terminated.dapui_config = function()
dapui.close()
end
dap.listeners.before.event_exited.dapui_config = function()
dapui.close()
end
end
},
{
'rcarriga/nvim-dap-ui',
dependencies = { 'mfussenegger/nvim-dap', 'nvim-neotest/nvim-nio' },
config = function()
require('dapui').setup()
end,
},
{ import = "nvchad.blink.lazyspec" },
{
"nvim-treesitter/nvim-treesitter",
opts = {
ensure_installed = {
"vim", "lua", "vimdoc",
"html", "css"
},
},
},
}

View File

@@ -0,0 +1,6 @@
return {
{
"christoomey/vim-tmux-navigator",
lazy = false,
},
}

View File

@@ -1,15 +1,12 @@
from libqtile import bar, extension, hook, layout, qtile, widget
from libqtile.config import Click, Drag, Group, Key, KeyChord, Match, Screen
from libqtile import bar, hook, layout, qtile, widget
from libqtile.config import Click, Drag, Group, Key, Match, Screen
from libqtile.lazy import lazy
from libqtile.utils import guess_terminal
import os
import subprocess
mod = "mod4"
terminal = guess_terminal()
myTerm = "alacritty"
terminal = "alacritty"
keys = [
Key([mod], "h", lazy.layout.left(), desc="Move focus to left"),
@@ -60,6 +57,9 @@ keys = [
lazy.spawn('sh -c "maim -s | xclip -selection clipboard -t image/png -i"'),
desc="Screenshot"
),
Key([mod], "F6", lazy.spawn("wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+"), desc="Volume up 5%"),
Key([mod], "F5", lazy.spawn("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), desc="Volume down 5%"),
Key([mod], "F4", lazy.spawn("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), desc="Mute toggle"),
]
# Add key bindings to switch VTs in Wayland.
@@ -218,18 +218,18 @@ def make_top_bar(primary=False):
widget.CPU(
foreground = colors[4],
padding = 8,
mouse_callbacks = {'Button1': lambda: qtile.cmd_spawn(myTerm + ' -e btop')},
mouse_callbacks = {'Button1': lambda: qtile.cmd_spawn(terminal + ' -e btop')},
format="CPU: {load_percent}%",
),
make_sep(),
widget.Memory(
foreground = colors[8],
padding = 8,
mouse_callbacks = {'Button1': lambda: qtile.cmd_spawn(myTerm + ' -e btop')},
mouse_callbacks = {'Button1': lambda: qtile.cmd_spawn(terminal + ' -e btop')},
format = 'Mem: {MemUsed:.0f}{mm}',
),
make_sep(),
widget.Volume(
widget.PulseVolume(
foreground = colors[7],
padding = 8,
fmt = 'Vol: {}',
@@ -249,8 +249,8 @@ def make_top_bar(primary=False):
screens = [
Screen(top = make_top_bar()),
Screen(top = make_top_bar(primary=True)),
Screen(top = make_top_bar()),
]
# Drag floating layouts.

View File

@@ -1,21 +0,0 @@
{ ... }:
{
imports = [
./hardware-configuration.nix
./system/boot.nix
./system/networking.nix
./system/locale.nix
./system/xserver.nix
./system/picom.nix
./system/display-manager.nix
./system/fonts.nix
./system/users.nix
./system/programs.nix
./system/packages.nix
./system/ssh.nix
./system/nix.nix
];
system.stateVersion = "26.05";
}

View File

@@ -9,20 +9,32 @@
};
};
outputs = { self, nixpkgs, home-manager, ... }: {
nixosConfigurations.hivebrain = nixpkgs.lib.nixosSystem {
outputs = { self, nixpkgs, home-manager, ... }:
let
mkHost = { hostPath, username, homePath }: nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix
hostPath
home-manager.nixosModules.home-manager {
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
users.marvin = import ./home.nix;
users.${username} = import homePath;
backupFileExtension = "backup";
};
}
];
};
in {
nixosConfigurations.hivebrain = mkHost {
hostPath = ./hosts/hivebrain;
username = "marvin";
homePath = ./hosts/hivebrain/home.nix;
};
nixosConfigurations.nikita-nixos = mkHost {
hostPath = ./hosts/nikita-nixos;
username = "nikita";
homePath = ./hosts/nikita-nixos/home.nix;
};
};
}

View File

@@ -1,17 +0,0 @@
{ ... }:
{
imports = [
./home/zsh.nix
./home/git.nix
./home/rofi.nix
./home/yazi.nix
./home/packages.nix
./home/symlinks.nix
./home/fonts.nix
];
home.username = "marvin";
home.homeDirectory = "/home/marvin";
home.stateVersion = "26.05";
}

View File

@@ -1,5 +0,0 @@
{ ... }:
{
fonts.fontconfig.enable = true;
}

View File

@@ -1,11 +0,0 @@
{ ... }:
{
programs.git = {
enable = true;
settings.user = {
name = "MDietermann";
email = "marvin.dietermann@hive-brain.de";
};
};
}

11
home/packages-base.nix Normal file
View File

@@ -0,0 +1,11 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
neovim
nerd-fonts.jetbrains-mono
ripgrep
tea
unzip
];
}

View File

@@ -1,22 +1,31 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
alacritty
audacity
blender
blockbench
claude-code
fd
filezilla
fzf
gcc
godot_4
imv
jdk21
jetbrains-toolbox
lazygit
lua-language-server
neovim
nerd-fonts.jetbrains-mono
mpv
nil
nixpkgs-fmt
nodejs
obsidian
pkg-config
ripgrep
rustup
steam
unzip
prismlauncher
vesktop
xclip
xwallpaper
yt-dlp
];
}

39
home/programs/rustup.nix Normal file
View File

@@ -0,0 +1,39 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
rustup
sqlx-cli
openssl.dev
# Bevy / Wayland runtime deps
wayland
wayland-protocols
libxkbcommon
libGL
vulkan-loader
alsa-lib
udev
libx11
libxcursor
libxi
libxrandr
libxcb
];
home.sessionVariables.PKG_CONFIG_PATH = "${pkgs.openssl.dev}/lib/pkgconfig";
# ponytail: global LD_LIBRARY_PATH so `cargo run` finds these without a shell.nix
home.sessionVariables.LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath (with pkgs; [
wayland
libxkbcommon
libGL
vulkan-loader
alsa-lib
udev
libx11
libxcursor
libxi
libxrandr
libxcb
]);
}

View File

@@ -10,7 +10,6 @@
"drun"
"run"
"window"
"ssh"
];
extraConfig = {
show-icons = true;

51
home/tmux.nix Normal file
View File

@@ -0,0 +1,51 @@
{ pkgs, ... }:
{
programs.tmux = {
enable = true;
prefix = "C-Space";
keyMode = "vi";
mouse = true;
escapeTime = 10;
terminal = "tmux-256color";
historyLimit = 50000;
baseIndex = 1;
plugins = with pkgs.tmuxPlugins; [
vim-tmux-navigator
resurrect
{
plugin = continuum;
extraConfig = ''
set -g @continuum-restore 'on'
set -g @continuum-save-interval '15'
'';
}
];
extraConfig = ''
# True-color + undercurl passthrough for nvim LSP underlines
set -ga terminal-overrides ',*256col*:Tc'
set -as terminal-overrides ',*:Smulx=\E[4::%p1%dm'
set -as terminal-overrides ',*:Setulc=\E[58::2::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m'
set -g renumber-windows on
setw -g pane-base-index 1
# Splits open in pane's CWD
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %
bind c new-window -c "#{pane_current_path}"
# Reload config
bind r source-file ~/.config/tmux/tmux.conf \; display "reloaded"
# Vi copy-mode: v select, y yank to X11 clipboard
bind-key -T copy-mode-vi v send -X begin-selection
bind-key -T copy-mode-vi y send -X copy-pipe-and-cancel 'xclip -selection clipboard -i'
# Default layout on new session: main + right pane (~20%) + bottom pane (~15%)
set-hook -g session-created 'split-window -v -l 15% -c "#{pane_current_path}" ; select-pane -t 1 ; split-window -h -l 20% -c "#{pane_current_path}" ; select-pane -t 1'
'';
};
}

View File

@@ -19,7 +19,7 @@
shellAliases = {
btw = "echo I use NixOS";
reload-nixos = "sudo nixos-rebuild switch --flake ~/nixos-dotfiles#hivebrain";
reload-nixos = "sudo nixos-rebuild switch --flake ~/nixos-dotfiles";
};
};
}

View File

@@ -0,0 +1,31 @@
{ ... }:
{
imports = [
./hardware-configuration.nix
# shared
../../system/boot.nix
../../system/networking.nix
../../system/locale.nix
../../system/fonts.nix
../../system/nix.nix
../../system/programs.nix
../../system/packages.nix
# marvin-only
../../system/xserver.nix
../../system/picom.nix
../../system/display-managers/ly.nix
../../system/users/marvin.nix
../../system/clam.nix
];
networking.hostName = "hivebrain";
system.stateVersion = "26.05";
services.openssh.enable = true;
virtualisation.docker.enable = true;
programs.steam.enable = true;
}

26
hosts/hivebrain/home.nix Normal file
View File

@@ -0,0 +1,26 @@
{ ... }:
{
imports = [
../../home/zsh.nix
../../home/rofi.nix
../../home/yazi.nix
../../home/symlinks.nix
../../home/tmux.nix
../../home/packages-base.nix
../../home/programs/common.nix
../../home/programs/rustup.nix
];
home.username = "marvin";
home.homeDirectory = "/home/marvin";
home.stateVersion = "26.05";
programs.git = {
enable = true;
settings.user = {
name = "MDietermann";
email = "marvin.dietermann@hive-brain.de";
};
};
}

View File

@@ -0,0 +1,25 @@
{ ... }:
{
imports = [
./hardware-configuration.nix
# shared
../../system/boot.nix
../../system/networking.nix
../../system/locale.nix
../../system/fonts.nix
../../system/nix.nix
../../system/programs.nix
../../system/packages.nix
# nikita-only
../../system/users/nikita.nix
];
networking.hostName = "nikita-nixos";
system.stateVersion = "26.05";
services.displayManager.sddm.enable = true;
services.desktopManager.plasma6.enable = true;
}

View File

@@ -0,0 +1,24 @@
{ lib, modulesPath, ... }:
# Placeholder hardware-configuration. Replace with the file generated on
# Nikita's actual machine via `nixos-generate-config --root /mnt` before
# building or installing.
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ ];
boot.extraModulePackages = [ ];
fileSystems."/" = {
device = "/dev/disk/by-label/PLACEHOLDER-ROOT";
fsType = "ext4";
};
swapDevices = [ ];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}

View File

@@ -0,0 +1,24 @@
{ ... }:
{
imports = [
../../home/zsh.nix
../../home/yazi.nix
../../home/symlinks.nix
../../home/packages-base.nix
../../home/programs/common.nix
];
home.username = "nikita";
home.homeDirectory = "/home/nikita";
home.stateVersion = "26.05";
# TODO: replace with Nikita's actual git identity before first use
programs.git = {
enable = true;
settings.user = {
name = "Nikita";
email = "nikita@example.com";
};
};
}

13
system/clam.nix Normal file
View File

@@ -0,0 +1,13 @@
{ pkgs, ... }:
{
environment.systemPackages = [
pkgs.clamav
pkgs.clamtk
];
services = {
clamav.daemon.enable = true;
clamav.updater.enable = true;
};
}

View File

@@ -1,6 +1,9 @@
{ ... }:
{
networking.hostName = "hivebrain";
networking.networkmanager.enable = true;
# Steam LAN game transfer + Remote Play
networking.firewall.allowedTCPPorts = [ 27036 27037 27040 ];
networking.firewall.allowedUDPPorts = [ 27031 27036 ];
}

View File

@@ -3,4 +3,11 @@
{
nix.settings.experimental-features = [ "nix-command" "flakes" ];
nixpkgs.config.allowUnfree = true;
nix.gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 7d";
};
nix.settings.auto-optimise-store = true;
}

View File

@@ -1,7 +1,9 @@
{ ... }:
{ pkgs, ... }:
{
programs.firefox.enable = true;
programs.zsh.enable = true;
programs.nix-ld.enable = true;
environment.systemPackages = [ pkgs.ungoogled-chromium ];
}

View File

@@ -1,5 +0,0 @@
{ ... }:
{
services.openssh.enable = true;
}

View File

@@ -3,7 +3,7 @@
{
users.users.marvin = {
isNormalUser = true;
extraGroups = [ "wheel" ];
extraGroups = [ "wheel" "docker" ];
shell = pkgs.zsh;
packages = with pkgs; [
tree

12
system/users/nikita.nix Normal file
View File

@@ -0,0 +1,12 @@
{ pkgs, ... }:
{
users.users.nikita = {
isNormalUser = true;
extraGroups = [ "wheel" "networkmanager" ];
shell = pkgs.zsh;
packages = with pkgs; [
tree
];
};
}

View File

@@ -11,16 +11,16 @@
'';
xrandrHeads = [
{
output = "HDMI-1";
output = "DP-3";
primary = true;
monitorConfig = ''
Option "Position" "0 0"
'';
}
{
output = "DP-1";
primary = true;
output = "HDMI-1";
monitorConfig = ''
Option "Position" "1920 0"
Option "Position" "3440 0"
'';
}
];