Compare commits
8 Commits
ee386e1ad4
...
multi-host
| Author | SHA1 | Date | |
|---|---|---|---|
| 231027cd5b | |||
| 19e2f737bc | |||
| 6440a4dc70 | |||
| c53829cbb3 | |||
| c9424ffd09 | |||
| a569683ea0 | |||
| 9a3f7807e1 | |||
| 1d7c4cebeb |
18
CLAUDE.md
18
CLAUDE.md
@@ -9,8 +9,7 @@ hosts/
|
|||||||
nikita-nixos/ # nikita's machine
|
nikita-nixos/ # nikita's machine
|
||||||
home/
|
home/
|
||||||
packages-base.nix # universal packages every host gets (neovim, ripgrep, etc.)
|
packages-base.nix # universal packages every host gets (neovim, ripgrep, etc.)
|
||||||
programs/ # one file per installable program
|
programs/ # installable programs (common.nix for simple packages, per-file for configured programs)
|
||||||
fonts.nix # font config
|
|
||||||
rofi.nix # rofi config + packages
|
rofi.nix # rofi config + packages
|
||||||
symlinks.nix # home-manager symlinks
|
symlinks.nix # home-manager symlinks
|
||||||
tmux.nix # tmux config
|
tmux.nix # tmux config
|
||||||
@@ -21,26 +20,29 @@ system/ # NixOS system-level modules
|
|||||||
|
|
||||||
## Adding a New Program
|
## Adding a New Program
|
||||||
|
|
||||||
1. Create `home/programs/<name>.nix`:
|
**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
|
```nix
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
home.packages = [ pkgs.<package-name> ];
|
# configuration + packages
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The filename is the program name; the package attribute can differ (e.g. `godot.nix` uses `pkgs.godot_4`).
|
Then add the import to `hosts/<host>/home.nix`:
|
||||||
|
|
||||||
2. Add the import to whichever hosts should have it in `hosts/<host>/home.nix`:
|
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
../../home/programs/<name>.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
|
## Rules
|
||||||
|
|
||||||
- `home/packages-base.nix` — shared baseline, imported by every host. Only add truly universal tools here (shell utilities, editors).
|
- `home/packages-base.nix` — shared baseline, imported by every host. Only add truly universal tools here (shell utilities, editors).
|
||||||
- `home/programs/` — one file per program. Hosts opt in by importing.
|
- `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.
|
- `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`.
|
- `system/` modules are NixOS system-level config (not home-manager). Add them to `hosts/<host>/default.nix`.
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
-- Autocmds are automatically loaded on the VeryLazy event
|
|
||||||
-- Default autocmds: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
-- Options are automatically loaded before lazy.nvim startup
|
|
||||||
-- Default options: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
|
|
||||||
@@ -2,12 +2,5 @@ return {
|
|||||||
{
|
{
|
||||||
"christoomey/vim-tmux-navigator",
|
"christoomey/vim-tmux-navigator",
|
||||||
lazy = false,
|
lazy = false,
|
||||||
cmd = {
|
|
||||||
"TmuxNavigateLeft",
|
|
||||||
"TmuxNavigateDown",
|
|
||||||
"TmuxNavigateUp",
|
|
||||||
"TmuxNavigateRight",
|
|
||||||
"TmuxNavigatePrevious",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,12 @@
|
|||||||
from libqtile import bar, extension, hook, layout, qtile, widget
|
from libqtile import bar, hook, layout, qtile, widget
|
||||||
from libqtile.config import Click, Drag, Group, Key, KeyChord, Match, Screen
|
from libqtile.config import Click, Drag, Group, Key, Match, Screen
|
||||||
from libqtile.lazy import lazy
|
from libqtile.lazy import lazy
|
||||||
from libqtile.utils import guess_terminal
|
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
|
|
||||||
mod = "mod4"
|
mod = "mod4"
|
||||||
terminal = guess_terminal()
|
terminal = "alacritty"
|
||||||
|
|
||||||
myTerm = "alacritty"
|
|
||||||
|
|
||||||
keys = [
|
keys = [
|
||||||
Key([mod], "h", lazy.layout.left(), desc="Move focus to left"),
|
Key([mod], "h", lazy.layout.left(), desc="Move focus to left"),
|
||||||
@@ -221,14 +218,14 @@ def make_top_bar(primary=False):
|
|||||||
widget.CPU(
|
widget.CPU(
|
||||||
foreground = colors[4],
|
foreground = colors[4],
|
||||||
padding = 8,
|
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}%",
|
format="CPU: {load_percent}%",
|
||||||
),
|
),
|
||||||
make_sep(),
|
make_sep(),
|
||||||
widget.Memory(
|
widget.Memory(
|
||||||
foreground = colors[8],
|
foreground = colors[8],
|
||||||
padding = 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}',
|
format = 'Mem: {MemUsed:.0f}{mm}',
|
||||||
),
|
),
|
||||||
make_sep(),
|
make_sep(),
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
fonts.fontconfig.enable = true;
|
|
||||||
}
|
|
||||||
@@ -5,6 +5,7 @@
|
|||||||
neovim
|
neovim
|
||||||
nerd-fonts.jetbrains-mono
|
nerd-fonts.jetbrains-mono
|
||||||
ripgrep
|
ripgrep
|
||||||
|
tea
|
||||||
unzip
|
unzip
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.alacritty ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.audacity ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.blender ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.blockbench ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.claude-code ];
|
|
||||||
}
|
|
||||||
31
home/programs/common.nix
Normal file
31
home/programs/common.nix
Normal file
@@ -0,0 +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
|
||||||
|
mpv
|
||||||
|
nil
|
||||||
|
nixpkgs-fmt
|
||||||
|
nodejs
|
||||||
|
obsidian
|
||||||
|
pkg-config
|
||||||
|
prismlauncher
|
||||||
|
vesktop
|
||||||
|
xclip
|
||||||
|
xwallpaper
|
||||||
|
yt-dlp
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.fd ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.filezilla ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.fzf ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.gcc ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.godot_4 ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.imv ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.jdk21 ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.jetbrains-toolbox ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.lazygit ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.lua-language-server ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.mpv ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.nil ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.nixpkgs-fmt ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.nodejs ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.obsidian ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.pkg-config ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.prismlauncher ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.vesktop ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.xclip ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.xwallpaper ];
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.yt-dlp ];
|
|
||||||
}
|
|
||||||
@@ -10,7 +10,6 @@
|
|||||||
"drun"
|
"drun"
|
||||||
"run"
|
"run"
|
||||||
"window"
|
"window"
|
||||||
"ssh"
|
|
||||||
];
|
];
|
||||||
extraConfig = {
|
extraConfig = {
|
||||||
show-icons = true;
|
show-icons = true;
|
||||||
|
|||||||
@@ -10,10 +10,8 @@
|
|||||||
../../system/locale.nix
|
../../system/locale.nix
|
||||||
../../system/fonts.nix
|
../../system/fonts.nix
|
||||||
../../system/nix.nix
|
../../system/nix.nix
|
||||||
../../system/ssh.nix
|
|
||||||
../../system/programs.nix
|
../../system/programs.nix
|
||||||
../../system/packages.nix
|
../../system/packages.nix
|
||||||
../../system/docker.nix
|
|
||||||
|
|
||||||
# marvin-only
|
# marvin-only
|
||||||
../../system/xserver.nix
|
../../system/xserver.nix
|
||||||
@@ -26,5 +24,8 @@
|
|||||||
networking.hostName = "hivebrain";
|
networking.hostName = "hivebrain";
|
||||||
system.stateVersion = "26.05";
|
system.stateVersion = "26.05";
|
||||||
|
|
||||||
|
services.openssh.enable = true;
|
||||||
|
virtualisation.docker.enable = true;
|
||||||
|
|
||||||
programs.steam.enable = true;
|
programs.steam.enable = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,39 +3,13 @@
|
|||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
../../home/zsh.nix
|
../../home/zsh.nix
|
||||||
../../home/fonts.nix
|
|
||||||
../../home/rofi.nix
|
../../home/rofi.nix
|
||||||
../../home/yazi.nix
|
../../home/yazi.nix
|
||||||
../../home/symlinks.nix
|
../../home/symlinks.nix
|
||||||
../../home/tmux.nix
|
../../home/tmux.nix
|
||||||
../../home/packages-base.nix
|
../../home/packages-base.nix
|
||||||
../../home/programs/alacritty.nix
|
../../home/programs/common.nix
|
||||||
../../home/programs/audacity.nix
|
|
||||||
../../home/programs/blender.nix
|
|
||||||
../../home/programs/blockbench.nix
|
|
||||||
../../home/programs/claude-code.nix
|
|
||||||
../../home/programs/fd.nix
|
|
||||||
../../home/programs/filezilla.nix
|
|
||||||
../../home/programs/fzf.nix
|
|
||||||
../../home/programs/gcc.nix
|
|
||||||
../../home/programs/godot.nix
|
|
||||||
../../home/programs/imv.nix
|
|
||||||
../../home/programs/jetbrains-toolbox.nix
|
|
||||||
../../home/programs/jdk.nix
|
|
||||||
../../home/programs/lazygit.nix
|
|
||||||
../../home/programs/lua-language-server.nix
|
|
||||||
../../home/programs/mpv.nix
|
|
||||||
../../home/programs/nil.nix
|
|
||||||
../../home/programs/nixpkgs-fmt.nix
|
|
||||||
../../home/programs/nodejs.nix
|
|
||||||
../../home/programs/obsidian.nix
|
|
||||||
../../home/programs/pkg-config.nix
|
|
||||||
../../home/programs/prismlauncher.nix
|
|
||||||
../../home/programs/rustup.nix
|
../../home/programs/rustup.nix
|
||||||
../../home/programs/vesktop.nix
|
|
||||||
../../home/programs/xclip.nix
|
|
||||||
../../home/programs/xwallpaper.nix
|
|
||||||
../../home/programs/yt-dlp.nix
|
|
||||||
];
|
];
|
||||||
|
|
||||||
home.username = "marvin";
|
home.username = "marvin";
|
||||||
|
|||||||
@@ -14,11 +14,12 @@
|
|||||||
../../system/packages.nix
|
../../system/packages.nix
|
||||||
|
|
||||||
# nikita-only
|
# nikita-only
|
||||||
../../system/plasma.nix
|
|
||||||
../../system/display-managers/sddm.nix
|
|
||||||
../../system/users/nikita.nix
|
../../system/users/nikita.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
networking.hostName = "nikita-nixos";
|
networking.hostName = "nikita-nixos";
|
||||||
system.stateVersion = "26.05";
|
system.stateVersion = "26.05";
|
||||||
|
|
||||||
|
services.displayManager.sddm.enable = true;
|
||||||
|
services.desktopManager.plasma6.enable = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,11 +3,10 @@
|
|||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
../../home/zsh.nix
|
../../home/zsh.nix
|
||||||
../../home/fonts.nix
|
|
||||||
../../home/yazi.nix
|
../../home/yazi.nix
|
||||||
../../home/symlinks.nix
|
../../home/symlinks.nix
|
||||||
../../home/packages-base.nix
|
../../home/packages-base.nix
|
||||||
../../home/programs/blender.nix
|
../../home/programs/common.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
home.username = "nikita";
|
home.username = "nikita";
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
services.displayManager.sddm.enable = true;
|
|
||||||
}
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
virtualisation.docker.enable = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
services.desktopManager.plasma6.enable = true;
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
services.openssh.enable = true;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user