Compare commits
2 Commits
9cc2ba3dae
...
ee386e1ad4
| Author | SHA1 | Date | |
|---|---|---|---|
| ee386e1ad4 | |||
| bc828f7adf |
46
CLAUDE.md
Normal file
46
CLAUDE.md
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
# 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/ # one file per installable program
|
||||||
|
fonts.nix # font config
|
||||||
|
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
|
||||||
|
|
||||||
|
1. Create `home/programs/<name>.nix`:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.<package-name> ];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The filename is the program name; the package attribute can differ (e.g. `godot.nix` uses `pkgs.godot_4`).
|
||||||
|
|
||||||
|
2. Add the import to whichever hosts should have it in `hosts/<host>/home.nix`:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
../../home/programs/<name>.nix
|
||||||
|
```
|
||||||
|
|
||||||
|
## Rules
|
||||||
|
|
||||||
|
- `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/<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`.
|
||||||
@@ -60,6 +60,9 @@ keys = [
|
|||||||
lazy.spawn('sh -c "maim -s | xclip -selection clipboard -t image/png -i"'),
|
lazy.spawn('sh -c "maim -s | xclip -selection clipboard -t image/png -i"'),
|
||||||
desc="Screenshot"
|
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.
|
# Add key bindings to switch VTs in Wayland.
|
||||||
@@ -229,7 +232,7 @@ def make_top_bar(primary=False):
|
|||||||
format = 'Mem: {MemUsed:.0f}{mm}',
|
format = 'Mem: {MemUsed:.0f}{mm}',
|
||||||
),
|
),
|
||||||
make_sep(),
|
make_sep(),
|
||||||
widget.Volume(
|
widget.PulseVolume(
|
||||||
foreground = colors[7],
|
foreground = colors[7],
|
||||||
padding = 8,
|
padding = 8,
|
||||||
fmt = 'Vol: {}',
|
fmt = 'Vol: {}',
|
||||||
@@ -249,8 +252,8 @@ def make_top_bar(primary=False):
|
|||||||
|
|
||||||
|
|
||||||
screens = [
|
screens = [
|
||||||
Screen(top = make_top_bar()),
|
|
||||||
Screen(top = make_top_bar(primary=True)),
|
Screen(top = make_top_bar(primary=True)),
|
||||||
|
Screen(top = make_top_bar()),
|
||||||
]
|
]
|
||||||
|
|
||||||
# Drag floating layouts.
|
# Drag floating layouts.
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
alacritty
|
|
||||||
claude-code
|
|
||||||
fd
|
|
||||||
fzf
|
|
||||||
gcc
|
|
||||||
lazygit
|
|
||||||
lua-language-server
|
|
||||||
nil
|
|
||||||
nixpkgs-fmt
|
|
||||||
nodejs
|
|
||||||
obsidian
|
|
||||||
pkg-config
|
|
||||||
rustup
|
|
||||||
steam
|
|
||||||
vesktop
|
|
||||||
xclip
|
|
||||||
xwallpaper
|
|
||||||
];
|
|
||||||
}
|
|
||||||
4
home/programs/alacritty.nix
Normal file
4
home/programs/alacritty.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.alacritty ];
|
||||||
|
}
|
||||||
4
home/programs/audacity.nix
Normal file
4
home/programs/audacity.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.audacity ];
|
||||||
|
}
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
home.packages = [ pkgs.blender ];
|
home.packages = [ pkgs.blender ];
|
||||||
}
|
}
|
||||||
4
home/programs/blockbench.nix
Normal file
4
home/programs/blockbench.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.blockbench ];
|
||||||
|
}
|
||||||
4
home/programs/claude-code.nix
Normal file
4
home/programs/claude-code.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.claude-code ];
|
||||||
|
}
|
||||||
4
home/programs/fd.nix
Normal file
4
home/programs/fd.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.fd ];
|
||||||
|
}
|
||||||
4
home/programs/filezilla.nix
Normal file
4
home/programs/filezilla.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.filezilla ];
|
||||||
|
}
|
||||||
4
home/programs/fzf.nix
Normal file
4
home/programs/fzf.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.fzf ];
|
||||||
|
}
|
||||||
4
home/programs/gcc.nix
Normal file
4
home/programs/gcc.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.gcc ];
|
||||||
|
}
|
||||||
4
home/programs/godot.nix
Normal file
4
home/programs/godot.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.godot_4 ];
|
||||||
|
}
|
||||||
4
home/programs/imv.nix
Normal file
4
home/programs/imv.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.imv ];
|
||||||
|
}
|
||||||
4
home/programs/jdk.nix
Normal file
4
home/programs/jdk.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.jdk21 ];
|
||||||
|
}
|
||||||
4
home/programs/jetbrains-toolbox.nix
Normal file
4
home/programs/jetbrains-toolbox.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.jetbrains-toolbox ];
|
||||||
|
}
|
||||||
4
home/programs/lazygit.nix
Normal file
4
home/programs/lazygit.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.lazygit ];
|
||||||
|
}
|
||||||
4
home/programs/lua-language-server.nix
Normal file
4
home/programs/lua-language-server.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.lua-language-server ];
|
||||||
|
}
|
||||||
4
home/programs/mpv.nix
Normal file
4
home/programs/mpv.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.mpv ];
|
||||||
|
}
|
||||||
4
home/programs/nil.nix
Normal file
4
home/programs/nil.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.nil ];
|
||||||
|
}
|
||||||
4
home/programs/nixpkgs-fmt.nix
Normal file
4
home/programs/nixpkgs-fmt.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.nixpkgs-fmt ];
|
||||||
|
}
|
||||||
4
home/programs/nodejs.nix
Normal file
4
home/programs/nodejs.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.nodejs ];
|
||||||
|
}
|
||||||
4
home/programs/obsidian.nix
Normal file
4
home/programs/obsidian.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.obsidian ];
|
||||||
|
}
|
||||||
4
home/programs/pkg-config.nix
Normal file
4
home/programs/pkg-config.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.pkg-config ];
|
||||||
|
}
|
||||||
4
home/programs/prismlauncher.nix
Normal file
4
home/programs/prismlauncher.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.prismlauncher ];
|
||||||
|
}
|
||||||
39
home/programs/rustup.nix
Normal file
39
home/programs/rustup.nix
Normal 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
|
||||||
|
]);
|
||||||
|
}
|
||||||
4
home/programs/vesktop.nix
Normal file
4
home/programs/vesktop.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.vesktop ];
|
||||||
|
}
|
||||||
4
home/programs/xclip.nix
Normal file
4
home/programs/xclip.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.xclip ];
|
||||||
|
}
|
||||||
4
home/programs/xwallpaper.nix
Normal file
4
home/programs/xwallpaper.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.xwallpaper ];
|
||||||
|
}
|
||||||
4
home/programs/yt-dlp.nix
Normal file
4
home/programs/yt-dlp.nix
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.packages = [ pkgs.yt-dlp ];
|
||||||
|
}
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
bind-key -T copy-mode-vi y send -X copy-pipe-and-cancel 'xclip -selection clipboard -i'
|
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%)
|
# Default layout on new session: main + right pane (~20%) + bottom pane (~15%)
|
||||||
set-hook -g session-created 'split-window -h -l 20% -c "#{pane_current_path}" ; select-pane -t 0 ; split-window -v -l 15% -c "#{pane_current_path}" ; select-pane -t 0'
|
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'
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,14 +13,18 @@
|
|||||||
../../system/ssh.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
|
||||||
../../system/picom.nix
|
../../system/picom.nix
|
||||||
../../system/display-managers/ly.nix
|
../../system/display-managers/ly.nix
|
||||||
../../system/users/marvin.nix
|
../../system/users/marvin.nix
|
||||||
|
../../system/clam.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
networking.hostName = "hivebrain";
|
networking.hostName = "hivebrain";
|
||||||
system.stateVersion = "26.05";
|
system.stateVersion = "26.05";
|
||||||
|
|
||||||
|
programs.steam.enable = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,10 +7,35 @@
|
|||||||
../../home/rofi.nix
|
../../home/rofi.nix
|
||||||
../../home/yazi.nix
|
../../home/yazi.nix
|
||||||
../../home/symlinks.nix
|
../../home/symlinks.nix
|
||||||
../../home/packages-base.nix
|
|
||||||
../../home/packages-marvin.nix
|
|
||||||
../../home/tmux.nix
|
../../home/tmux.nix
|
||||||
../../home/blender.nix
|
../../home/packages-base.nix
|
||||||
|
../../home/programs/alacritty.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/vesktop.nix
|
||||||
|
../../home/programs/xclip.nix
|
||||||
|
../../home/programs/xwallpaper.nix
|
||||||
|
../../home/programs/yt-dlp.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
home.username = "marvin";
|
home.username = "marvin";
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
../../home/yazi.nix
|
../../home/yazi.nix
|
||||||
../../home/symlinks.nix
|
../../home/symlinks.nix
|
||||||
../../home/packages-base.nix
|
../../home/packages-base.nix
|
||||||
../../home/blender.nix
|
../../home/programs/blender.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
home.username = "nikita";
|
home.username = "nikita";
|
||||||
|
|||||||
13
system/clam.nix
Normal file
13
system/clam.nix
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.clamav
|
||||||
|
pkgs.clamtk
|
||||||
|
];
|
||||||
|
|
||||||
|
services = {
|
||||||
|
clamav.daemon.enable = true;
|
||||||
|
clamav.updater.enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
6
system/docker.nix
Normal file
6
system/docker.nix
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
virtualisation.docker.enable = true;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -2,4 +2,8 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
networking.networkmanager.enable = true;
|
networking.networkmanager.enable = true;
|
||||||
|
|
||||||
|
# Steam LAN game transfer + Remote Play
|
||||||
|
networking.firewall.allowedTCPPorts = [ 27036 27037 27040 ];
|
||||||
|
networking.firewall.allowedUDPPorts = [ 27031 27036 ];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,4 +3,11 @@
|
|||||||
{
|
{
|
||||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||||
nixpkgs.config.allowUnfree = true;
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
||||||
|
nix.gc = {
|
||||||
|
automatic = true;
|
||||||
|
dates = "weekly";
|
||||||
|
options = "--delete-older-than 7d";
|
||||||
|
};
|
||||||
|
nix.settings.auto-optimise-store = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
{ ... }:
|
{ pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
programs.firefox.enable = true;
|
programs.firefox.enable = true;
|
||||||
programs.zsh.enable = true;
|
programs.zsh.enable = true;
|
||||||
programs.nix-ld.enable = true;
|
programs.nix-ld.enable = true;
|
||||||
|
|
||||||
|
environment.systemPackages = [ pkgs.ungoogled-chromium ];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
{
|
{
|
||||||
users.users.marvin = {
|
users.users.marvin = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
extraGroups = [ "wheel" ];
|
extraGroups = [ "wheel" "docker" ];
|
||||||
shell = pkgs.zsh;
|
shell = pkgs.zsh;
|
||||||
packages = with pkgs; [
|
packages = with pkgs; [
|
||||||
tree
|
tree
|
||||||
|
|||||||
@@ -11,16 +11,16 @@
|
|||||||
'';
|
'';
|
||||||
xrandrHeads = [
|
xrandrHeads = [
|
||||||
{
|
{
|
||||||
output = "HDMI-1";
|
output = "DP-3";
|
||||||
|
primary = true;
|
||||||
monitorConfig = ''
|
monitorConfig = ''
|
||||||
Option "Position" "0 0"
|
Option "Position" "0 0"
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
output = "DP-1";
|
output = "HDMI-1";
|
||||||
primary = true;
|
|
||||||
monitorConfig = ''
|
monitorConfig = ''
|
||||||
Option "Position" "1920 0"
|
Option "Position" "3440 0"
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|||||||
Reference in New Issue
Block a user