From 07c7c3b3f81c4d167534c7ae68081c2d9b7ed673 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thea=20Sch=C3=B6bl?= Date: Wed, 26 Aug 2026 09:04:34 +0200 Subject: [PATCH] feat: stuff --- hosts/MONSTER/default.nix | 6 ++ hosts/shark/default.nix | 9 +++ .../desktops/hyprland/default.nix | 3 +- modules/nixos/default.nix | 2 + modules/nixos/services/nfs.nix | 67 +++++++++++++++++++ modules/nixos/services/nfsclient.nix | 39 +++++++++++ modules/nixos/usecases/3d-printing.nix | 1 + modules/nixos/usecases/gaming.nix | 16 ++--- 8 files changed, 133 insertions(+), 10 deletions(-) create mode 100644 modules/nixos/services/nfs.nix create mode 100644 modules/nixos/services/nfsclient.nix diff --git a/hosts/MONSTER/default.nix b/hosts/MONSTER/default.nix index 5f98cc8..c442e4a 100644 --- a/hosts/MONSTER/default.nix +++ b/hosts/MONSTER/default.nix @@ -196,6 +196,12 @@ ausweisapp ]; + /*services.nfsclient = { + enable = true; + ip = "192.168.0.51"; + exportedDirs = [ "shared" ]; + };*/ + networking = { firewall = { allowedTCPPorts = [ diff --git a/hosts/shark/default.nix b/hosts/shark/default.nix index c9881da..a669bd2 100644 --- a/hosts/shark/default.nix +++ b/hosts/shark/default.nix @@ -157,6 +157,15 @@ ]; }; + /* + services.nfshare = { + enable = true; + allowedIps = [ "192.168.0.84" ]; + baseDir = "/export"; + exportedDirs = [ "shared" ]; + }; + */ + # List packages installed in system profile. To search, run: environment.systemPackages = with pkgs; [ # Essential utils diff --git a/modules/home-manager/desktops/hyprland/default.nix b/modules/home-manager/desktops/hyprland/default.nix index 5cbd933..1df5f04 100644 --- a/modules/home-manager/desktops/hyprland/default.nix +++ b/modules/home-manager/desktops/hyprland/default.nix @@ -2,6 +2,7 @@ pkgs, lib, osConfig, + username, ... }: let @@ -57,7 +58,7 @@ in decoration.border_part_of_window = false; }; bind = [ - (bind "SUPER + C" "hl.dsp.window.close()") + (bind (if username == "luci" then "SUPER + Q" else "SUPER + C") "hl.dsp.window.close()") (bind "SUPER + P" '' function() hl.dsp.window.float() diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix index df698ff..71f5a64 100644 --- a/modules/nixos/default.nix +++ b/modules/nixos/default.nix @@ -36,6 +36,8 @@ ./usecases/windows-vm.nix ./services/airprint.nix + ./services/nfs.nix + ./services/nfsclient.nix ./shell/dunst.nix ./shell/firefox-pip.nix diff --git a/modules/nixos/services/nfs.nix b/modules/nixos/services/nfs.nix new file mode 100644 index 0000000..ce16b48 --- /dev/null +++ b/modules/nixos/services/nfs.nix @@ -0,0 +1,67 @@ +{ + lib, + config, + ... +}: +with lib; + +let + cfg = config.services.nfshare; + lockdPort = 4001; + mountdPort = 4002; + statdPort = 4000; +in +{ + options.services.nfshare = { + enable = mkEnableOption "Enable shared directory"; + allowedIps = mkOption { + type = types.listOf types.str; + }; + baseDir = mkOption { + type = types.str; + default = "/export"; + }; + exportedDirs = mkOption { + type = types.listOf types.str; + }; + }; + + config = mkIf cfg.enable { + services.nfs.server = { + inherit lockdPort mountdPort statdPort; + enable = true; + exports = ( + lib.concatStringsSep "\n" ( + lib.concatMap ( + ip: + [ "${cfg.baseDir} ${ip}(rw,fsid=0,no_subtree_check)" ] + ++ (lib.map ( + dir: "${cfg.baseDir}/${dir} ${ip}(rw,nohide,insecure,no_subtree_check)" + ) cfg.exportedDirs) + ) cfg.allowedIps + ) + ); + extraNfsdConfig = ""; + }; + + networking.firewall = { + enable = true; + allowedTCPPorts = [ + 111 + 2049 + lockdPort + mountdPort + statdPort + 20048 + ]; + allowedUDPPorts = [ + 111 + 2049 + lockdPort + mountdPort + statdPort + 20048 + ]; + }; + }; +} diff --git a/modules/nixos/services/nfsclient.nix b/modules/nixos/services/nfsclient.nix new file mode 100644 index 0000000..65851ac --- /dev/null +++ b/modules/nixos/services/nfsclient.nix @@ -0,0 +1,39 @@ +{ + lib, + config, + ... +}: +with lib; + +let + cfg = config.services.nfsclient; +in +{ + options.services.nfsclient = { + enable = mkEnableOption "Enable shared directory"; + ip = mkOption { + type = types.str; + }; + exportedDirs = mkOption { + type = types.listOf types.str; + }; + }; + + config = mkIf cfg.enable { + boot.supportedFilesystems = [ "nfs" ]; + fileSystems = builtins.listToAttrs ( + lib.map (dir: { + name = "/mnt/${dir}"; + value = { + device = "${cfg.ip}:/shared"; + fsType = "nfs4"; + options = [ + "x-systemd.idle-timeout=600" + "x-systemd.automount" + "noauto" + ]; + }; + }) cfg.exportedDirs + ); + }; +} diff --git a/modules/nixos/usecases/3d-printing.nix b/modules/nixos/usecases/3d-printing.nix index c296079..49cfd37 100644 --- a/modules/nixos/usecases/3d-printing.nix +++ b/modules/nixos/usecases/3d-printing.nix @@ -34,6 +34,7 @@ in home-manager.users.${username} = { home.packages = with pkgs; [ freecad + plasticity orca-slicer ]; programs = { diff --git a/modules/nixos/usecases/gaming.nix b/modules/nixos/usecases/gaming.nix index fe53dbf..d2bdd79 100644 --- a/modules/nixos/usecases/gaming.nix +++ b/modules/nixos/usecases/gaming.nix @@ -29,15 +29,13 @@ in environment.systemPackages = with pkgs; [ oversteer obs-studio - /* - (lutris.override { - extraLibraries = - pkgs: with pkgs; [ - libgudev - libvdpau - ]; - }) - */ + (lutris.override { + extraLibraries = + pkgs: with pkgs; [ + libgudev + libvdpau + ]; + }) # rpcs3 # bottles wineWow64Packages.stagingFull