first commit
This commit is contained in:
161
configuration.nix
Normal file
161
configuration.nix
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
# Edit this configuration file to define what should be installed on
|
||||||
|
# your system. Help is available in the configuration.nix(5) man page
|
||||||
|
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
||||||
|
|
||||||
|
{ config,
|
||||||
|
lib,
|
||||||
|
modulesPath,
|
||||||
|
pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports =
|
||||||
|
[ # Include the results of the hardware scan.
|
||||||
|
<home-manager/nixos>
|
||||||
|
./hardware-configuration.nix
|
||||||
|
./modules/firefox.nix
|
||||||
|
./modules/bluetooth.nix
|
||||||
|
./modules/wireshark.nix
|
||||||
|
./modules/ollama.nix
|
||||||
|
./modules/opensnitch.nix
|
||||||
|
./modules/rust.nix
|
||||||
|
./modules/steam.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
# Bootloader.
|
||||||
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
|
|
||||||
|
# Use latest kernel.
|
||||||
|
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||||
|
|
||||||
|
|
||||||
|
networking.hostName = "raidy"; # Define your hostname.
|
||||||
|
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
||||||
|
|
||||||
|
# Configure network proxy if necessary
|
||||||
|
# networking.proxy.default = "http://user:password@proxy:port/";
|
||||||
|
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
||||||
|
|
||||||
|
# Enable networking
|
||||||
|
networking.networkmanager.enable = true;
|
||||||
|
|
||||||
|
# Set your time zone.
|
||||||
|
time.timeZone = "Europe/Berlin";
|
||||||
|
|
||||||
|
# Select internationalisation properties.
|
||||||
|
i18n.defaultLocale = "de_DE.UTF-8";
|
||||||
|
|
||||||
|
i18n.extraLocaleSettings = {
|
||||||
|
LC_ADDRESS = "de_DE.UTF-8";
|
||||||
|
LC_IDENTIFICATION = "de_DE.UTF-8";
|
||||||
|
LC_MEASUREMENT = "de_DE.UTF-8";
|
||||||
|
LC_MONETARY = "de_DE.UTF-8";
|
||||||
|
LC_NAME = "de_DE.UTF-8";
|
||||||
|
LC_NUMERIC = "de_DE.UTF-8";
|
||||||
|
LC_PAPER = "de_DE.UTF-8";
|
||||||
|
LC_TELEPHONE = "de_DE.UTF-8";
|
||||||
|
LC_TIME = "de_DE.UTF-8";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable the X11 windowing system.
|
||||||
|
# You can disable this if you're only using the Wayland session.
|
||||||
|
services.xserver.enable = true;
|
||||||
|
|
||||||
|
# Enable the KDE Plasma Desktop Environment.
|
||||||
|
services.displayManager.sddm.enable = true;
|
||||||
|
services.displayManager.sddm.autoNumlock = true;
|
||||||
|
services.desktopManager.plasma6.enable = true;
|
||||||
|
|
||||||
|
# Configure keymap in X11
|
||||||
|
services.xserver.xkb = {
|
||||||
|
layout = "us";
|
||||||
|
variant = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable CUPS to print documents.
|
||||||
|
services.printing.enable = true;
|
||||||
|
|
||||||
|
# Enable sound with pipewire.
|
||||||
|
services.pulseaudio.enable = false;
|
||||||
|
security.rtkit.enable = true;
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
alsa.enable = true;
|
||||||
|
alsa.support32Bit = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
# If you want to use JACK applications, uncomment this
|
||||||
|
#jack.enable = true;
|
||||||
|
|
||||||
|
# use the example session manager (no others are packaged yet so this is enabled by default,
|
||||||
|
# no need to redefine it in your config for now)
|
||||||
|
#media-session.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable touchpad support (enabled default in most desktopManager).
|
||||||
|
# services.xserver.libinput.enable = true;
|
||||||
|
|
||||||
|
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||||
|
users.users.dwessels = {
|
||||||
|
isNormalUser = true;
|
||||||
|
description = "Damian Wessels";
|
||||||
|
extraGroups = [ "networkmanager" "wheel" ];
|
||||||
|
# packages = with pkgs; [
|
||||||
|
# kdePackages.kate
|
||||||
|
# thunderbird
|
||||||
|
# ];
|
||||||
|
};
|
||||||
|
|
||||||
|
home-manager.users.dwessels = import ./home.nix;
|
||||||
|
# Enable automatic login for the user.
|
||||||
|
services.displayManager.autoLogin.enable = true;
|
||||||
|
services.displayManager.autoLogin.user = "dwessels";
|
||||||
|
|
||||||
|
# Install firefox.
|
||||||
|
#programs.firefox.enable = true;
|
||||||
|
|
||||||
|
# Allow unfree packages
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
||||||
|
# List packages installed in system profile. To search, run:
|
||||||
|
# $ nix search wget
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
helix
|
||||||
|
home-manager
|
||||||
|
qmk
|
||||||
|
via
|
||||||
|
];
|
||||||
|
|
||||||
|
services.pcscd.enable = true;
|
||||||
|
services.udev.packages = [ pkgs.yubikey-personalization pkgs.via ];
|
||||||
|
|
||||||
|
|
||||||
|
hardware.keyboard.qmk.enable = true;
|
||||||
|
|
||||||
|
# Some programs need SUID wrappers, can be configured further or are
|
||||||
|
# started in user sessions.
|
||||||
|
# programs.mtr.enable = true;
|
||||||
|
# programs.gnupg.agent = {
|
||||||
|
# enable = true;
|
||||||
|
# enableSSHSupport = true;
|
||||||
|
# };
|
||||||
|
|
||||||
|
# List services that you want to enable:
|
||||||
|
|
||||||
|
# Enable the OpenSSH daemon.
|
||||||
|
# services.openssh.enable = true;
|
||||||
|
|
||||||
|
# Open ports in the firewall.
|
||||||
|
# networking.firewall.allowedTCPPorts = [ ... ];
|
||||||
|
# networking.firewall.allowedUDPPorts = [ ... ];
|
||||||
|
# Or disable the firewall altogether.
|
||||||
|
# networking.firewall.enable = false;
|
||||||
|
|
||||||
|
# This value determines the NixOS release from which the default
|
||||||
|
# settings for stateful data, like file locations and database versions
|
||||||
|
# on your system were taken. It‘s perfectly fine and recommended to leave
|
||||||
|
# this value at the release version of the first install of this system.
|
||||||
|
# Before changing this value read the documentation for this option
|
||||||
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
|
system.stateVersion = "25.05"; # Did you read the comment?
|
||||||
|
|
||||||
|
}
|
||||||
41
hardware-configuration.nix
Normal file
41
hardware-configuration.nix
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
|
# and may be overwritten by future invocations. Please make changes
|
||||||
|
# to /etc/nixos/configuration.nix instead.
|
||||||
|
{ config, lib, pkgs, modulesPath, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports =
|
||||||
|
[ (modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "nvme" "usb_storage" "usbhid" "sd_mod" ];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-amd" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
fileSystems."/" =
|
||||||
|
{ device = "/dev/disk/by-uuid/24cf3bad-f49c-416a-81b1-a2cef90e7d32";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot" =
|
||||||
|
{ device = "/dev/disk/by-uuid/7C62-54E8";
|
||||||
|
fsType = "vfat";
|
||||||
|
options = [ "fmask=0077" "dmask=0077" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices =
|
||||||
|
[ { device = "/dev/disk/by-uuid/e9c95d55-b793-446b-9147-f6d0796517c5"; }
|
||||||
|
];
|
||||||
|
|
||||||
|
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||||
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
# still possible to use this option, but it's recommended to use it in conjunction
|
||||||
|
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||||
|
networking.useDHCP = lib.mkDefault true;
|
||||||
|
# networking.interfaces.enp2s0.useDHCP = lib.mkDefault true;
|
||||||
|
# networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true;
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
}
|
||||||
78
home.nix
Normal file
78
home.nix
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
{ lib, pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
unstable_pkgs = import (pkgs.fetchgit {
|
||||||
|
name = "nixpkgs-unstable-aug-29-2025";
|
||||||
|
url = "https://github.com/nixos/nixpkgs/";
|
||||||
|
rev = "604f22e0304b679e96edd9f47cbbfc4d513a3751";
|
||||||
|
hash = "sha256-9+O/hi9UjnF4yPjR3tcUbxhg/ga0OpFGgVLvSW5FfbE=";
|
||||||
|
}) { };
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
home.username = "dwessels";
|
||||||
|
home.homeDirectory = "/home/dwessels";
|
||||||
|
home.stateVersion = "22.11";
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
kdePackages.kate
|
||||||
|
alacritty
|
||||||
|
dig
|
||||||
|
evince
|
||||||
|
gnupg
|
||||||
|
htop
|
||||||
|
jq
|
||||||
|
openssl
|
||||||
|
pciutils
|
||||||
|
ripgrep
|
||||||
|
meld
|
||||||
|
nixfmt-rfc-style
|
||||||
|
neovim
|
||||||
|
nmap
|
||||||
|
tokei
|
||||||
|
tree
|
||||||
|
trivy
|
||||||
|
usbutils
|
||||||
|
whois
|
||||||
|
vlc
|
||||||
|
zellij
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
programs.alacritty = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
window = {
|
||||||
|
dynamic_padding = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.bash = {
|
||||||
|
enable = true;
|
||||||
|
# bashrcExtra = ''
|
||||||
|
# if [ "$TERM_PROGRAM" != "zed" ]; then
|
||||||
|
# eval "$(zellij setup --generate-auto-start bash)"
|
||||||
|
# fi
|
||||||
|
# # Needed to use yubkiey for SSH key
|
||||||
|
# export GPG_TTY="$(tty)"
|
||||||
|
# export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
|
||||||
|
# '';
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.helix = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.zellij = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
show_startup_tips = false;
|
||||||
|
ui = {
|
||||||
|
pane_frames = {
|
||||||
|
hide_session_name = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
6
modules/bluetooth.nix
Normal file
6
modules/bluetooth.nix
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{ pkgs, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
hardware.bluetooth.enable = true;
|
||||||
|
services.blueman.enable = true;
|
||||||
|
}
|
||||||
81
modules/firefox.nix
Normal file
81
modules/firefox.nix
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
{ pkgs, lib, ... }:
|
||||||
|
let
|
||||||
|
managed-firefox = (
|
||||||
|
pkgs.firefox.override {
|
||||||
|
extraPolicies = {
|
||||||
|
AutofillCreditCardEnabled = false;
|
||||||
|
DisableFirefoxAccounts = true;
|
||||||
|
DisableFirefoxScreenshots = true;
|
||||||
|
DisableFirefoxStudies = true;
|
||||||
|
DisablePocket = true;
|
||||||
|
DisableTelemetry = true;
|
||||||
|
DontCheckDefaultBrowser = true;
|
||||||
|
EnableTrackingProtection = {
|
||||||
|
Value = true;
|
||||||
|
Locked = true;
|
||||||
|
Cryptomining = true;
|
||||||
|
Fingerprinting = true;
|
||||||
|
EmailTracking = true;
|
||||||
|
};
|
||||||
|
ExtensionSettings = {
|
||||||
|
"*".installation_mode = "blocked"; # blocks all addons except the ones specified below
|
||||||
|
# 1Password:
|
||||||
|
"{d634138d-c276-4fc8-924b-40a0ea21d284}" = {
|
||||||
|
install_url = "https://addons.mozilla.org/firefox/downloads/latest/1password-x-password-manager/latest.xpi";
|
||||||
|
installation_mode = "force_installed";
|
||||||
|
};
|
||||||
|
# Facebook container
|
||||||
|
"@contain-facebook" = {
|
||||||
|
install_url = "https://addons.mozilla.org/firefox/downloads/latest/facebook-container/latest.xpi";
|
||||||
|
installation_mode = "force_installed";
|
||||||
|
};
|
||||||
|
# Kagi search
|
||||||
|
"search@kagi.com" = {
|
||||||
|
install_url = "https://addons.mozilla.org/firefox/downloads/latest/kagi-search-for-firefox/latest.xpi";
|
||||||
|
installation_mode = "force_installed";
|
||||||
|
};
|
||||||
|
# ublock origin
|
||||||
|
"uBlock0@raymondhill.net" = {
|
||||||
|
install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
|
||||||
|
installation_mode = "force_installed";
|
||||||
|
};
|
||||||
|
# bitwarden
|
||||||
|
"" = {
|
||||||
|
install_url = "https://addons.mozilla.org/firefox/downloads/latest/bitwarden-password-manager/latest.xpi";
|
||||||
|
installation_mode = "force_installed";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
FirefoxSuggest = {
|
||||||
|
WebSuggestions = false;
|
||||||
|
SponsoredSuggestions = false;
|
||||||
|
ImproveSuggest = false;
|
||||||
|
Locked = true;
|
||||||
|
};
|
||||||
|
PasswordManagerEnabled = false;
|
||||||
|
PictureInPicture = {
|
||||||
|
Enabled = true;
|
||||||
|
Locked = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
in
|
||||||
|
{
|
||||||
|
environment.systemPackages = [ managed-firefox ];
|
||||||
|
|
||||||
|
services.opensnitch.rules = {
|
||||||
|
rule-000-firefox = {
|
||||||
|
name = "Allow Firefox";
|
||||||
|
enabled = true;
|
||||||
|
action = "allow";
|
||||||
|
duration = "always";
|
||||||
|
operator = {
|
||||||
|
type = "simple";
|
||||||
|
sensitive = false;
|
||||||
|
operand = "process.path";
|
||||||
|
data = "${lib.getBin managed-firefox}/lib/firefox/firefox";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
36
modules/ollama.nix
Normal file
36
modules/ollama.nix
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
{ pkgs, lib, ... }:
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
services.ollama = {
|
||||||
|
enable = true;
|
||||||
|
acceleration = "rocm";
|
||||||
|
};
|
||||||
|
|
||||||
|
services.opensnitch.rules = {
|
||||||
|
rule-500-download-models = {
|
||||||
|
name = "Allow ollama to fetch models";
|
||||||
|
enabled = true;
|
||||||
|
action = "allow";
|
||||||
|
duration = "always";
|
||||||
|
operator = {
|
||||||
|
type = "list";
|
||||||
|
operand = "list";
|
||||||
|
list = [
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
sensitive = false;
|
||||||
|
operand = "process.path";
|
||||||
|
data = "${lib.getBin pkgs.ollama-rocm}/bin/.ollama-wrapped";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "regexp";
|
||||||
|
operand = "dest.host";
|
||||||
|
sensitive = false;
|
||||||
|
data = "^(registry.ollama.ai)|(([a-z0-9|-]+\\.)*cloudflarestorage.com)$";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
185
modules/opensnitch.nix
Normal file
185
modules/opensnitch.nix
Normal file
@@ -0,0 +1,185 @@
|
|||||||
|
{ pkgs, lib, ... }:
|
||||||
|
{
|
||||||
|
environment.systemPackages = [ pkgs.opensnitch-ui ];
|
||||||
|
|
||||||
|
# Set start up applications
|
||||||
|
# shitty version of this https://github.com/nix-community/home-manager/issues/3447#issuecomment-1328294558
|
||||||
|
environment.etc."xdg/autostart/opensnitch_ui.desktop".source = (
|
||||||
|
pkgs.opensnitch-ui + "/share/applications/opensnitch_ui.desktop"
|
||||||
|
);
|
||||||
|
|
||||||
|
# A list of general rules needed no matter how the system is configured
|
||||||
|
services.opensnitch = {
|
||||||
|
enable = true;
|
||||||
|
settings.DefaultAction = "deny";
|
||||||
|
rules = {
|
||||||
|
rule-000-localhost = {
|
||||||
|
name = "Allow all localhost";
|
||||||
|
enabled = true;
|
||||||
|
action = "allow";
|
||||||
|
duration = "always";
|
||||||
|
operator = {
|
||||||
|
type = "regexp";
|
||||||
|
operand = "dest.ip";
|
||||||
|
sensitive = false;
|
||||||
|
data = "^(127\\.0\\.0\\.1|::1)$";
|
||||||
|
list = [ ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
rule-100-avahi-ipv4 = {
|
||||||
|
name = "Allow avahi daemon IPv4";
|
||||||
|
enabled = true;
|
||||||
|
action = "allow";
|
||||||
|
duration = "always";
|
||||||
|
operator = {
|
||||||
|
type = "list";
|
||||||
|
operand = "list";
|
||||||
|
list = [
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
operand = "process.path";
|
||||||
|
sensitive = false;
|
||||||
|
data = "${lib.getBin pkgs.avahi}/bin/avahi-daemon";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "network";
|
||||||
|
operand = "dest.network";
|
||||||
|
data = "224.0.0.0/24";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
rule-100-avahi-ipv6 = {
|
||||||
|
name = "Allow avahi daemon IPv6";
|
||||||
|
enabled = true;
|
||||||
|
action = "allow";
|
||||||
|
duration = "always";
|
||||||
|
operator = {
|
||||||
|
type = "list";
|
||||||
|
operand = "list";
|
||||||
|
list = [
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
operand = "process.path";
|
||||||
|
sensitive = false;
|
||||||
|
data = "${lib.getBin pkgs.avahi}/bin/avahi-daemon";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
operand = "dest.ip";
|
||||||
|
data = "ff02::fb";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
rule-100-ntp = {
|
||||||
|
name = "Allow NTP";
|
||||||
|
enabled = true;
|
||||||
|
action = "allow";
|
||||||
|
duration = "always";
|
||||||
|
operator = {
|
||||||
|
type = "list";
|
||||||
|
operand = "list";
|
||||||
|
list = [
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
sensitive = false;
|
||||||
|
operand = "process.path";
|
||||||
|
data = "${lib.getBin pkgs.systemd}/lib/systemd/systemd-timesyncd";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
operand = "dest.port";
|
||||||
|
sensitive = false;
|
||||||
|
data = "123";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
operand = "protocol";
|
||||||
|
sensitive = false;
|
||||||
|
data = "udp";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
rule-100-nix-update = {
|
||||||
|
name = "Allow Nix";
|
||||||
|
enabled = true;
|
||||||
|
action = "allow";
|
||||||
|
duration = "always";
|
||||||
|
operator = {
|
||||||
|
type = "list";
|
||||||
|
operand = "list";
|
||||||
|
list = [
|
||||||
|
{
|
||||||
|
type = "regexp";
|
||||||
|
sensitive = false;
|
||||||
|
operand = "process.path";
|
||||||
|
data = "^.*/bin/nix$";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "regexp";
|
||||||
|
operand = "dest.host";
|
||||||
|
sensitive = false;
|
||||||
|
data = "^(([a-z0-9|-]+\\.)*github\\.com|([a-z0-9|-]+\\.)*nixos\\.org)$";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
rule-100-NetworkManager = {
|
||||||
|
name = "Allow NetworkManager";
|
||||||
|
enabled = true;
|
||||||
|
action = "allow";
|
||||||
|
duration = "always";
|
||||||
|
operator = {
|
||||||
|
type = "list";
|
||||||
|
operand = "list";
|
||||||
|
list = [
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
sensitive = false;
|
||||||
|
operand = "process.path";
|
||||||
|
data = "${lib.getBin pkgs.networkmanager}/bin/NetworkManager";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
operand = "dest.port";
|
||||||
|
sensitive = false;
|
||||||
|
data = "67";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
operand = "protocol";
|
||||||
|
sensitive = false;
|
||||||
|
data = "udp";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
rule-500-ssh-github = {
|
||||||
|
name = "Allow SSH to github";
|
||||||
|
enabled = true;
|
||||||
|
action = "allow";
|
||||||
|
duration = "always";
|
||||||
|
operator = {
|
||||||
|
type = "list";
|
||||||
|
operand = "list";
|
||||||
|
list = [
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
sensitive = false;
|
||||||
|
operand = "process.path";
|
||||||
|
data = "${lib.getBin pkgs.openssh}/bin/ssh";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
operand = "dest.host";
|
||||||
|
sensitive = false;
|
||||||
|
data = "github.com";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
58
modules/rust.nix
Normal file
58
modules/rust.nix
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
{ pkgs, lib, ... }:
|
||||||
|
{
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
clang
|
||||||
|
rustup
|
||||||
|
];
|
||||||
|
|
||||||
|
services.opensnitch.rules = {
|
||||||
|
rule-500-cargo = {
|
||||||
|
name = "Allow cargo to reach needed sites";
|
||||||
|
enabled = true;
|
||||||
|
action = "allow";
|
||||||
|
duration = "always";
|
||||||
|
operator = {
|
||||||
|
type = "list";
|
||||||
|
operand = "list";
|
||||||
|
list = [
|
||||||
|
{
|
||||||
|
type = "regexp";
|
||||||
|
sensitive = false;
|
||||||
|
operand = "process.path";
|
||||||
|
data = "^(/home/dwessels/\\.rustup/toolchains/(.*)/bin/cargo)|(${lib.getBin pkgs.cargo}/bin/cargo)$";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "regexp";
|
||||||
|
operand = "dest.host";
|
||||||
|
sensitive = false;
|
||||||
|
data = "^(([a-z0-9|-]+\\.)*crates\\.io)|(([a-z0-9|-]+\\.)*github\\.com)$";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
rule-500-rustup = {
|
||||||
|
name = "Allow rustup to reach needed sites";
|
||||||
|
enabled = true;
|
||||||
|
action = "allow";
|
||||||
|
duration = "always";
|
||||||
|
operator = {
|
||||||
|
type = "list";
|
||||||
|
operand = "list";
|
||||||
|
list = [
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
sensitive = false;
|
||||||
|
operand = "process.path";
|
||||||
|
data = "${lib.getBin pkgs.rustup}/bin/.rustup-wrapped";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
operand = "dest.host";
|
||||||
|
sensitive = false;
|
||||||
|
data = "static.rust-lang.org";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
144
modules/steam.nix
Normal file
144
modules/steam.nix
Normal file
@@ -0,0 +1,144 @@
|
|||||||
|
{ pkgs, lib, ... }:
|
||||||
|
let
|
||||||
|
steamRegex = "^/home/dwessels/\\.local/share/Steam/ubuntu12_32/steam|/home/dwessels/\\.local/share/Steam/ubuntu12_64/steamwebhelper$";
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
environment.systemPackages = with pkgs; [ steam ];
|
||||||
|
|
||||||
|
# We need 32bit versions of all the OpenGL etc libraries for steam to run
|
||||||
|
hardware.graphics.enable32Bit = true;
|
||||||
|
|
||||||
|
programs.steam = {
|
||||||
|
remotePlay.openFirewall = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.opensnitch.rules = {
|
||||||
|
rule-600-steam-lan = {
|
||||||
|
name = "Allow Steam to reach out on LAN";
|
||||||
|
enabled = true;
|
||||||
|
action = "allow";
|
||||||
|
duration = "always";
|
||||||
|
operator = {
|
||||||
|
type = "list";
|
||||||
|
operand = "list";
|
||||||
|
list = [
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
sensitive = false;
|
||||||
|
operand = "process.path";
|
||||||
|
data = "/home/dwessels/.local/share/Steam/ubuntu12_32/steam";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "network";
|
||||||
|
operand = "dest.network";
|
||||||
|
data = "192.168.1.0/24";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
operand = "dest.port";
|
||||||
|
sensitive = false;
|
||||||
|
data = "27036";
|
||||||
|
}
|
||||||
|
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
rule-600-steam-akamaihd = {
|
||||||
|
name = "Allow Steam to reach akamaihd";
|
||||||
|
enabled = true;
|
||||||
|
action = "allow";
|
||||||
|
duration = "always";
|
||||||
|
operator = {
|
||||||
|
type = "list";
|
||||||
|
operand = "list";
|
||||||
|
list = [
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
sensitive = false;
|
||||||
|
operand = "process.path";
|
||||||
|
data = "/home/dwessels/.local/share/Steam/ubuntu12_64/steamwebhelper";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
operand = "dest.host";
|
||||||
|
sensitive = false;
|
||||||
|
data = "steamcommunity-a.akamaihd.net";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
rule-600-steam-to-steam-domain = {
|
||||||
|
name = "Allow Steam to reach steam domains";
|
||||||
|
enabled = true;
|
||||||
|
action = "allow";
|
||||||
|
duration = "always";
|
||||||
|
operator = {
|
||||||
|
type = "list";
|
||||||
|
operand = "list";
|
||||||
|
list = [
|
||||||
|
{
|
||||||
|
type = "regexp";
|
||||||
|
sensitive = false;
|
||||||
|
operand = "process.path";
|
||||||
|
data = steamRegex;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "regexp";
|
||||||
|
operand = "dest.host";
|
||||||
|
sensitive = false;
|
||||||
|
data = "^([a-z0-9|-]+\\.)*(steampowered\\.com|steamcommunity\\.com|steamserver\\.net|steamstatic\\.com|steamcontent\\.com)$";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
rule-600-steam-webhelper-google = {
|
||||||
|
name = "Allow Steam web helper to reach google APIs";
|
||||||
|
enabled = true;
|
||||||
|
action = "allow";
|
||||||
|
duration = "always";
|
||||||
|
operator = {
|
||||||
|
type = "list";
|
||||||
|
operand = "list";
|
||||||
|
list = [
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
sensitive = false;
|
||||||
|
operand = "process.path";
|
||||||
|
data = "/home/dwessels/.local/share/Steam/ubuntu12_64/steamwebhelper";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "regexp";
|
||||||
|
operand = "dest.host";
|
||||||
|
sensitive = false;
|
||||||
|
data = "^(update|steamcloud-us-east1\\.storage\\.)\\.googleapis\\.com$";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
rule-600-steam-webhelper-youtube = {
|
||||||
|
name = "Allow Steam web helper to reach youtube";
|
||||||
|
enabled = true;
|
||||||
|
action = "allow";
|
||||||
|
duration = "always";
|
||||||
|
operator = {
|
||||||
|
type = "list";
|
||||||
|
operand = "list";
|
||||||
|
list = [
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
sensitive = false;
|
||||||
|
operand = "process.path";
|
||||||
|
data = "/home/dwessels/.local/share/Steam/ubuntu12_64/steamwebhelper";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "simple";
|
||||||
|
operand = "dest.host";
|
||||||
|
sensitive = false;
|
||||||
|
data = "www.youtube.com";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
13
modules/wireshark.nix
Normal file
13
modules/wireshark.nix
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
users.groups.wireshark = { };
|
||||||
|
security.wrappers.dumpcap = {
|
||||||
|
source = "${pkgs.wireshark}/bin/dumpcap";
|
||||||
|
permissions = "u+xs,g+x";
|
||||||
|
owner = "root";
|
||||||
|
group = "wireshark";
|
||||||
|
};
|
||||||
|
|
||||||
|
users.users.dwessels.extraGroups = [ "wireshark" ];
|
||||||
|
environment.systemPackages = [ pkgs.wireshark ];
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user