From bc828f7adfb0a60a129cdacafb83782bd305dfbd Mon Sep 17 00:00:00 2001 From: MDietermann Date: Wed, 12 Aug 2026 15:28:06 +0200 Subject: [PATCH] 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. --- config/qtile/config.py | 7 +++++-- home/packages-marvin.nix | 18 ----------------- home/programs/alacritty.nix | 4 ++++ home/programs/audacity.nix | 4 ++++ home/programs/blender.nix | 4 ++++ home/programs/blockbench.nix | 4 ++++ home/programs/claude-code.nix | 4 ++++ home/programs/fd.nix | 4 ++++ home/programs/filezilla.nix | 4 ++++ home/programs/fzf.nix | 4 ++++ home/programs/gcc.nix | 4 ++++ home/programs/godot.nix | 4 ++++ home/programs/imv.nix | 4 ++++ home/programs/jdk.nix | 4 ++++ home/programs/jetbrains-toolbox.nix | 4 ++++ home/programs/lazygit.nix | 4 ++++ home/programs/lua-language-server.nix | 4 ++++ home/programs/mpv.nix | 4 ++++ home/programs/nil.nix | 4 ++++ home/programs/nixpkgs-fmt.nix | 4 ++++ home/programs/nodejs.nix | 4 ++++ home/programs/obsidian.nix | 4 ++++ home/programs/pkg-config.nix | 4 ++++ home/programs/prismlauncher.nix | 4 ++++ home/programs/rustup.nix | 4 ++++ home/programs/vesktop.nix | 4 ++++ home/programs/xclip.nix | 4 ++++ home/programs/xwallpaper.nix | 4 ++++ home/programs/yt-dlp.nix | 4 ++++ home/tmux.nix | 3 +++ hosts/hivebrain/default.nix | 4 ++++ hosts/hivebrain/home.nix | 29 ++++++++++++++++++++++++++- hosts/nikita-nixos/home.nix | 1 + system/clam.nix | 13 ++++++++++++ system/docker.nix | 6 ++++++ system/networking.nix | 4 ++++ system/programs.nix | 4 +++- system/users/marvin.nix | 2 +- system/xserver.nix | 8 ++++---- 39 files changed, 180 insertions(+), 27 deletions(-) delete mode 100644 home/packages-marvin.nix create mode 100644 home/programs/alacritty.nix create mode 100644 home/programs/audacity.nix create mode 100644 home/programs/blender.nix create mode 100644 home/programs/blockbench.nix create mode 100644 home/programs/claude-code.nix create mode 100644 home/programs/fd.nix create mode 100644 home/programs/filezilla.nix create mode 100644 home/programs/fzf.nix create mode 100644 home/programs/gcc.nix create mode 100644 home/programs/godot.nix create mode 100644 home/programs/imv.nix create mode 100644 home/programs/jdk.nix create mode 100644 home/programs/jetbrains-toolbox.nix create mode 100644 home/programs/lazygit.nix create mode 100644 home/programs/lua-language-server.nix create mode 100644 home/programs/mpv.nix create mode 100644 home/programs/nil.nix create mode 100644 home/programs/nixpkgs-fmt.nix create mode 100644 home/programs/nodejs.nix create mode 100644 home/programs/obsidian.nix create mode 100644 home/programs/pkg-config.nix create mode 100644 home/programs/prismlauncher.nix create mode 100644 home/programs/rustup.nix create mode 100644 home/programs/vesktop.nix create mode 100644 home/programs/xclip.nix create mode 100644 home/programs/xwallpaper.nix create mode 100644 home/programs/yt-dlp.nix create mode 100644 system/clam.nix create mode 100644 system/docker.nix diff --git a/config/qtile/config.py b/config/qtile/config.py index 5c1bd9c..8324eaa 100644 --- a/config/qtile/config.py +++ b/config/qtile/config.py @@ -60,6 +60,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. @@ -229,7 +232,7 @@ def make_top_bar(primary=False): format = 'Mem: {MemUsed:.0f}{mm}', ), make_sep(), - widget.Volume( + widget.PulseVolume( foreground = colors[7], padding = 8, fmt = 'Vol: {}', @@ -249,8 +252,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. diff --git a/home/packages-marvin.nix b/home/packages-marvin.nix deleted file mode 100644 index 23784b8..0000000 --- a/home/packages-marvin.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ pkgs, ... }: - -{ - home.packages = with pkgs; [ - alacritty - claude-code - gcc - lua-language-server - nil - nixpkgs-fmt - nodejs - obsidian - pkg-config - rustup - steam - xwallpaper - ]; -} diff --git a/home/programs/alacritty.nix b/home/programs/alacritty.nix new file mode 100644 index 0000000..9795f2f --- /dev/null +++ b/home/programs/alacritty.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.alacritty ]; +} diff --git a/home/programs/audacity.nix b/home/programs/audacity.nix new file mode 100644 index 0000000..b570400 --- /dev/null +++ b/home/programs/audacity.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.audacity ]; +} diff --git a/home/programs/blender.nix b/home/programs/blender.nix new file mode 100644 index 0000000..f7e34ca --- /dev/null +++ b/home/programs/blender.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.blender ]; +} diff --git a/home/programs/blockbench.nix b/home/programs/blockbench.nix new file mode 100644 index 0000000..e17a897 --- /dev/null +++ b/home/programs/blockbench.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.blockbench ]; +} diff --git a/home/programs/claude-code.nix b/home/programs/claude-code.nix new file mode 100644 index 0000000..7c25562 --- /dev/null +++ b/home/programs/claude-code.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.claude-code ]; +} diff --git a/home/programs/fd.nix b/home/programs/fd.nix new file mode 100644 index 0000000..61bd222 --- /dev/null +++ b/home/programs/fd.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.fd ]; +} diff --git a/home/programs/filezilla.nix b/home/programs/filezilla.nix new file mode 100644 index 0000000..fe425a2 --- /dev/null +++ b/home/programs/filezilla.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.filezilla ]; +} diff --git a/home/programs/fzf.nix b/home/programs/fzf.nix new file mode 100644 index 0000000..3cc0147 --- /dev/null +++ b/home/programs/fzf.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.fzf ]; +} diff --git a/home/programs/gcc.nix b/home/programs/gcc.nix new file mode 100644 index 0000000..e7876f3 --- /dev/null +++ b/home/programs/gcc.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.gcc ]; +} diff --git a/home/programs/godot.nix b/home/programs/godot.nix new file mode 100644 index 0000000..3eafd81 --- /dev/null +++ b/home/programs/godot.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.godot_4 ]; +} diff --git a/home/programs/imv.nix b/home/programs/imv.nix new file mode 100644 index 0000000..2d090e4 --- /dev/null +++ b/home/programs/imv.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.imv ]; +} diff --git a/home/programs/jdk.nix b/home/programs/jdk.nix new file mode 100644 index 0000000..d03e3b8 --- /dev/null +++ b/home/programs/jdk.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.jdk21 ]; +} diff --git a/home/programs/jetbrains-toolbox.nix b/home/programs/jetbrains-toolbox.nix new file mode 100644 index 0000000..2460d94 --- /dev/null +++ b/home/programs/jetbrains-toolbox.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.jetbrains-toolbox ]; +} diff --git a/home/programs/lazygit.nix b/home/programs/lazygit.nix new file mode 100644 index 0000000..720dbd7 --- /dev/null +++ b/home/programs/lazygit.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.lazygit ]; +} diff --git a/home/programs/lua-language-server.nix b/home/programs/lua-language-server.nix new file mode 100644 index 0000000..85fe1b2 --- /dev/null +++ b/home/programs/lua-language-server.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.lua-language-server ]; +} diff --git a/home/programs/mpv.nix b/home/programs/mpv.nix new file mode 100644 index 0000000..368b977 --- /dev/null +++ b/home/programs/mpv.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.mpv ]; +} diff --git a/home/programs/nil.nix b/home/programs/nil.nix new file mode 100644 index 0000000..2f79402 --- /dev/null +++ b/home/programs/nil.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.nil ]; +} diff --git a/home/programs/nixpkgs-fmt.nix b/home/programs/nixpkgs-fmt.nix new file mode 100644 index 0000000..850628c --- /dev/null +++ b/home/programs/nixpkgs-fmt.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.nixpkgs-fmt ]; +} diff --git a/home/programs/nodejs.nix b/home/programs/nodejs.nix new file mode 100644 index 0000000..2c1beeb --- /dev/null +++ b/home/programs/nodejs.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.nodejs ]; +} diff --git a/home/programs/obsidian.nix b/home/programs/obsidian.nix new file mode 100644 index 0000000..510f09e --- /dev/null +++ b/home/programs/obsidian.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.obsidian ]; +} diff --git a/home/programs/pkg-config.nix b/home/programs/pkg-config.nix new file mode 100644 index 0000000..a9fad61 --- /dev/null +++ b/home/programs/pkg-config.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.pkg-config ]; +} diff --git a/home/programs/prismlauncher.nix b/home/programs/prismlauncher.nix new file mode 100644 index 0000000..10cdc0a --- /dev/null +++ b/home/programs/prismlauncher.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.prismlauncher ]; +} diff --git a/home/programs/rustup.nix b/home/programs/rustup.nix new file mode 100644 index 0000000..db8aa30 --- /dev/null +++ b/home/programs/rustup.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.rustup ]; +} diff --git a/home/programs/vesktop.nix b/home/programs/vesktop.nix new file mode 100644 index 0000000..9eae666 --- /dev/null +++ b/home/programs/vesktop.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.vesktop ]; +} diff --git a/home/programs/xclip.nix b/home/programs/xclip.nix new file mode 100644 index 0000000..0841e80 --- /dev/null +++ b/home/programs/xclip.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.xclip ]; +} diff --git a/home/programs/xwallpaper.nix b/home/programs/xwallpaper.nix new file mode 100644 index 0000000..a784f6d --- /dev/null +++ b/home/programs/xwallpaper.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.xwallpaper ]; +} diff --git a/home/programs/yt-dlp.nix b/home/programs/yt-dlp.nix new file mode 100644 index 0000000..a33c6f2 --- /dev/null +++ b/home/programs/yt-dlp.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.yt-dlp ]; +} diff --git a/home/tmux.nix b/home/tmux.nix index c0dcd6e..1525082 100644 --- a/home/tmux.nix +++ b/home/tmux.nix @@ -43,6 +43,9 @@ # 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' ''; }; } diff --git a/hosts/hivebrain/default.nix b/hosts/hivebrain/default.nix index 20be13a..c25c256 100644 --- a/hosts/hivebrain/default.nix +++ b/hosts/hivebrain/default.nix @@ -13,14 +13,18 @@ ../../system/ssh.nix ../../system/programs.nix ../../system/packages.nix + ../../system/docker.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"; + + programs.steam.enable = true; } diff --git a/hosts/hivebrain/home.nix b/hosts/hivebrain/home.nix index 467be87..c3d9285 100644 --- a/hosts/hivebrain/home.nix +++ b/hosts/hivebrain/home.nix @@ -7,8 +7,35 @@ ../../home/rofi.nix ../../home/yazi.nix ../../home/symlinks.nix + ../../home/tmux.nix ../../home/packages-base.nix - ../../home/packages-marvin.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"; diff --git a/hosts/nikita-nixos/home.nix b/hosts/nikita-nixos/home.nix index 6ccfddc..cb6a8e3 100644 --- a/hosts/nikita-nixos/home.nix +++ b/hosts/nikita-nixos/home.nix @@ -7,6 +7,7 @@ ../../home/yazi.nix ../../home/symlinks.nix ../../home/packages-base.nix + ../../home/programs/blender.nix ]; home.username = "nikita"; diff --git a/system/clam.nix b/system/clam.nix new file mode 100644 index 0000000..3c731f9 --- /dev/null +++ b/system/clam.nix @@ -0,0 +1,13 @@ +{ pkgs, ... }: + +{ + environment.systemPackages = [ + pkgs.clamav + pkgs.clamtk + ]; + + services = { + clamav.daemon.enable = true; + clamav.updater.enable = true; + }; +} diff --git a/system/docker.nix b/system/docker.nix new file mode 100644 index 0000000..2ea1048 --- /dev/null +++ b/system/docker.nix @@ -0,0 +1,6 @@ +{ ... }: + +{ + virtualisation.docker.enable = true; +} + diff --git a/system/networking.nix b/system/networking.nix index 6e2a390..bc18b67 100644 --- a/system/networking.nix +++ b/system/networking.nix @@ -2,4 +2,8 @@ { networking.networkmanager.enable = true; + + # Steam LAN game transfer + Remote Play + networking.firewall.allowedTCPPorts = [ 27036 27037 27040 ]; + networking.firewall.allowedUDPPorts = [ 27031 27036 ]; } diff --git a/system/programs.nix b/system/programs.nix index c823d1c..bf54589 100644 --- a/system/programs.nix +++ b/system/programs.nix @@ -1,7 +1,9 @@ -{ ... }: +{ pkgs, ... }: { programs.firefox.enable = true; programs.zsh.enable = true; programs.nix-ld.enable = true; + + environment.systemPackages = [ pkgs.ungoogled-chromium ]; } diff --git a/system/users/marvin.nix b/system/users/marvin.nix index e891491..8627184 100644 --- a/system/users/marvin.nix +++ b/system/users/marvin.nix @@ -3,7 +3,7 @@ { users.users.marvin = { isNormalUser = true; - extraGroups = [ "wheel" ]; + extraGroups = [ "wheel" "docker" ]; shell = pkgs.zsh; packages = with pkgs; [ tree diff --git a/system/xserver.nix b/system/xserver.nix index 833d82e..33193e6 100644 --- a/system/xserver.nix +++ b/system/xserver.nix @@ -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" ''; } ];