From 63ffbcfe89f83fb55737f423a80c5a5cd81e62b8 Mon Sep 17 00:00:00 2001 From: NullBite <me@nullbite.com> Date: Thu, 8 Feb 2024 13:05:53 +0100 Subject: [PATCH 01/13] create new versions of modules in temp dir --- system/default.nix | 1 + system/temp-new/README.md | 2 + system/temp-new/base.nix | 90 +++++++++++++++++++ system/temp-new/default.nix | 11 +++ system/temp-new/desktop-common.nix | 58 ++++++++++++ .../temp-new/fragments/hardware/bluetooth.nix | 16 ++++ .../fragments/hardware/nvidia-modeset.nix | 47 ++++++++++ system/temp-new/fragments/me.nix | 25 ++++++ system/temp-new/fragments/multimedia.nix | 22 +++++ system/temp-new/fragments/opengl.nix | 15 ++++ .../temp-new/fragments/software/syncthing.nix | 19 ++++ system/temp-new/fragments/sound.nix | 34 +++++++ system/temp-new/gaming.nix | 40 +++++++++ system/temp-new/hyprland.nix | 45 ++++++++++ system/temp-new/new-fragments/README.md | 19 ++++ system/temp-new/new-fragments/android.nix | 9 ++ system/temp-new/new-fragments/debugging.nix | 9 ++ system/temp-new/plasma.nix | 49 ++++++++++ system/temp-new/remote.nix | 23 +++++ system/temp-new/wm-common.nix | 21 +++++ 20 files changed, 555 insertions(+) create mode 100644 system/temp-new/README.md create mode 100644 system/temp-new/base.nix create mode 100644 system/temp-new/default.nix create mode 100644 system/temp-new/desktop-common.nix create mode 100644 system/temp-new/fragments/hardware/bluetooth.nix create mode 100644 system/temp-new/fragments/hardware/nvidia-modeset.nix create mode 100644 system/temp-new/fragments/me.nix create mode 100644 system/temp-new/fragments/multimedia.nix create mode 100644 system/temp-new/fragments/opengl.nix create mode 100644 system/temp-new/fragments/software/syncthing.nix create mode 100644 system/temp-new/fragments/sound.nix create mode 100644 system/temp-new/gaming.nix create mode 100644 system/temp-new/hyprland.nix create mode 100644 system/temp-new/new-fragments/README.md create mode 100644 system/temp-new/new-fragments/android.nix create mode 100644 system/temp-new/new-fragments/debugging.nix create mode 100644 system/temp-new/plasma.nix create mode 100644 system/temp-new/remote.nix create mode 100644 system/temp-new/wm-common.nix diff --git a/system/default.nix b/system/default.nix index 09dcd6a..0927272 100644 --- a/system/default.nix +++ b/system/default.nix @@ -4,6 +4,7 @@ let in { imports = [ + ./temp-new ]; config = {}; options.nixfiles = { diff --git a/system/temp-new/README.md b/system/temp-new/README.md new file mode 100644 index 0000000..e91ba36 --- /dev/null +++ b/system/temp-new/README.md @@ -0,0 +1,2 @@ +# system +This directory contains modules and configuration specific to my NixOS configuration. `default.nix` is the entrypoint to my module set; it can safely be loaded without making any configuration changes by default. diff --git a/system/temp-new/base.nix b/system/temp-new/base.nix new file mode 100644 index 0000000..8301dd4 --- /dev/null +++ b/system/temp-new/base.nix @@ -0,0 +1,90 @@ +{ config, lib, pkgs, options, inputs, ...}@args: +let + cfg = config.nixfiles.profile.base; +in +{ + options.nixfiles.profile.base = { + enable = lib.mkEnableOption "base config"; + }; + # TODO was gonna add something but i forgor and now i'm too lazy + # to delete this + config = lib.mkMerge [ + (lib.mkIf cfg.enable { + + # Enable my account + nixfiles.common.me = lib.mkDefault true; + + # locale settings + i18n = { + defaultLocale = "en_US.UTF-8"; + extraLocaleSettings = { + LC_ALL = "en_US.UTF-8"; + }; + }; + + # Enable flakes + nix.settings.experimental-features = ["nix-command" "flakes" ]; + + # fallback to building locally if binary cache fails (home-manager should be + # able to handle simple rebuilds offline) + nix.settings.fallback = true; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # networking.hostName = "nixos"; # Define your hostname. + # Pick only one of the below networking options. + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + networking.networkmanager.enable = lib.mkDefault true; # Easiest to use and most distros use this by default. + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + neovim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + wget + curl + git + git-lfs + stow + zsh + ntfs3g + openssh + sshfs + file + + fd + ripgrep + sbctl # TODO move this elsewhere + comma + nil + + # network utilities + inetutils + socat + nmap + hping + + # system utilities + htop + lshw + pciutils + ]; + + # this makes comma and legacy nix utils use the flake nixpkgs for ABI + # compatibility becasue once `, vkcube` couldn't find the correct opengl + # driver or something (also it reduces the download size of temporary shell + # closures) + nix.nixPath = [ "nixpkgs=${inputs.nixpkgs}" ] ++ options.nix.nixPath.default; + + programs.ssh.enableAskPassword = false; + programs.fuse.userAllowOther = true; + + programs.gnupg.agent = { + enable = lib.mkDefault true; + enableSSHSupport = lib.mkDefault true; + }; + + boot.loader.systemd-boot.configurationLimit = lib.mkDefault 15; + }) + ]; +} diff --git a/system/temp-new/default.nix b/system/temp-new/default.nix new file mode 100644 index 0000000..09dcd6a --- /dev/null +++ b/system/temp-new/default.nix @@ -0,0 +1,11 @@ +{ pkgs, config, lib, options, ... }@args: +let + cfg = config.nixfiles; +in +{ + imports = [ + ]; + config = {}; + options.nixfiles = { + }; +} diff --git a/system/temp-new/desktop-common.nix b/system/temp-new/desktop-common.nix new file mode 100644 index 0000000..6449a28 --- /dev/null +++ b/system/temp-new/desktop-common.nix @@ -0,0 +1,58 @@ +{ config, lib, pkgs, outputs, ...}: +let + cfg = config.nixfiles.common.desktop; + inherit (lib) mkIf mkDefault mkForce mkEnableOption; +in +{ + # imports = [ + # ./base.nix + # ./fragments/sound.nix + # ./fragments/multimedia.nix + # ./fragments/software/syncthing.nix + # ./fragments/hardware/bluetooth.nix + # ]; + + options.nixfiles.common.desktop = { + enable = mkEnableOption "common desktop options"; + }; + + config = mkIf cfg.enable { + # enable option sets + nixfiles = { + packageSets.multimedia.enable = true; + common = { + syncthing.enable = true; + bluetooth.enable = true; + sound.enable = true; + }; + }; + + # Enable the X11 windowing system. + services.xserver.enable = true; + + environment.systemPackages = with pkgs; [ + arc-theme + wl-clipboard + ]; + + # Enable flatpak + services.flatpak.enable = mkDefault true; + + # Enable CUPS to print documents. + services.printing.enable = mkDefault true; + + fonts.packages = with pkgs; [ + (nerdfonts.override { fonts = [ "FiraCode" ]; }) + noto-fonts-cjk + (outputs.packages.${pkgs.system}.google-fonts.override { fonts = [ "NovaSquare" ];}) + ]; + + # TODO this should be defined in home-manager or not at all probably + # FIXME also my name is hardcoded + users.users.nullbite = { + packages = with pkgs; [ + firefox + ]; + }; + }; +} diff --git a/system/temp-new/fragments/hardware/bluetooth.nix b/system/temp-new/fragments/hardware/bluetooth.nix new file mode 100644 index 0000000..1a8c7fb --- /dev/null +++ b/system/temp-new/fragments/hardware/bluetooth.nix @@ -0,0 +1,16 @@ +{ config, lib, pkgs, ...}: +let + cfg = config.nixfiles.common.bluetooth; +in +{ + options.nixfiles.common.bluetooth = { + enable = lib.mkEnableOption "Bluetooth"; + }; + + config = lib.mkIf cfg.enable { + hardware.bluetooth = { + enable = lib.mkDefault true; + powerOnBoot = lib.mkDefault true; + }; + }; +} diff --git a/system/temp-new/fragments/hardware/nvidia-modeset.nix b/system/temp-new/fragments/hardware/nvidia-modeset.nix new file mode 100644 index 0000000..1011b96 --- /dev/null +++ b/system/temp-new/fragments/hardware/nvidia-modeset.nix @@ -0,0 +1,47 @@ +{ config, lib, pkgs, ...}: +let + cfg = config.nixfiles.common.nvidia; +in +{ + # imports = [ + # ../opengl.nix + # ]; + + # Load nvidia driver for Xorg and Wayland + options.nixfiles.common.nvidia = { + modesetting.enable = lib.mkEnableOption "NVIDIA configuration with modesetting"; + }; + config = lib.mkIf cfg.modesetting.enable { + services.xserver.videoDrivers = ["nvidia"]; + + nixfiles.common.opengl.enable = true; + + hardware.nvidia = { + + # Modesetting is required. + modesetting.enable = lib.mkDefault true; + + # Nvidia power management. Experimental, and can cause sleep/suspend to fail. + powerManagement.enable = lib.mkDefault false; + # Fine-grained power management. Turns off GPU when not in use. + # Experimental and only works on modern Nvidia GPUs (Turing or newer). + powerManagement.finegrained = lib.mkDefault false; + + # Use the NVidia open source kernel module (not to be confused with the + # independent third-party "nouveau" open source driver). + # Support is limited to the Turing and later architectures. Full list of + # supported GPUs is at: + # https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus + # Only available from driver 515.43.04+ + # Currently alpha-quality/buggy, so false is currently the recommended setting. + open = lib.mkDefault false; + + # Enable the Nvidia settings menu, + # accessible via `nvidia-settings`. + nvidiaSettings = lib.mkDefault true; + + # Optionally, you may need to select the appropriate driver version for your specific GPU. + package = lib.mkDefault config.boot.kernelPackages.nvidiaPackages.production; + }; + }; +} diff --git a/system/temp-new/fragments/me.nix b/system/temp-new/fragments/me.nix new file mode 100644 index 0000000..c60924d --- /dev/null +++ b/system/temp-new/fragments/me.nix @@ -0,0 +1,25 @@ +{ config, lib, pkgs, ...}: +let + cfg = config.nixfiles.common.me; +in +{ + options.nixfiles.common.me = lib.mkEnableOption "my user account"; + config = lib.mkIf cfg.enable { + users.users.nullbite = { + isNormalUser = true; + extraGroups = [ "wheel" ]; + packages = with pkgs; [ + keychain + ]; + initialPassword = "changeme"; + shell = pkgs.zsh; + }; + + # shell config + programs.zsh.enable = true; + programs.fzf = { + keybindings = true; + fuzzyCompletion = true; + }; + }; +} diff --git a/system/temp-new/fragments/multimedia.nix b/system/temp-new/fragments/multimedia.nix new file mode 100644 index 0000000..ab6f5fc --- /dev/null +++ b/system/temp-new/fragments/multimedia.nix @@ -0,0 +1,22 @@ +{ config, lib, pkgs, ...}: +let + cfg = config.nixfiles.packageSets.multimedia; + inherit (lib) optionals mkEnableOption mkIf; +in +{ + options.nixfiles.packageSets.multimedia = { + enable = mkEnableOption "multimedia packages"; + }; + config = mkIf cfg.enable { + environment.systemPackages = with pkgs; optionals config.services.xserver.enable [ + mpv + gimp-with-plugins + krita + inkscape + ] ++ [ + yt-dlp + imagemagick + ffmpeg + ]; + }; +} diff --git a/system/temp-new/fragments/opengl.nix b/system/temp-new/fragments/opengl.nix new file mode 100644 index 0000000..afad162 --- /dev/null +++ b/system/temp-new/fragments/opengl.nix @@ -0,0 +1,15 @@ +{ config, lib, pkgs, ...}: +let + cfg = config.nixfiles.common.opengl; +in +{ + options.nixfiles.common.opengl.enable = lib.mkEnableOption "OpenGL configuration"; + config = lib.mkIf cfg.enable { + # Enable OpenGL + hardware.opengl = { + enable = true; + driSupport = lib.mkDefault true; + driSupport32Bit = lib.mkDefault config.hardware.opengl.driSupport; + }; + }; +} diff --git a/system/temp-new/fragments/software/syncthing.nix b/system/temp-new/fragments/software/syncthing.nix new file mode 100644 index 0000000..e17fad4 --- /dev/null +++ b/system/temp-new/fragments/software/syncthing.nix @@ -0,0 +1,19 @@ +{ config, lib, pkgs, ...}: +let + inherit (lib) mkEnableOption mkIf; + cfg = config.nixfiles.programs.syncthing; +in +{ + options.nixfiles.programs.syncthing = { + enable = mkEnableOption "Syncthing configuration"; + }; + + config = mkIf cfg.enable { + services.syncthing = { + enable = lib.mkDefault true; + user = lib.mkDefault "nullbite"; + dataDir = lib.mkDefault "/home/nullbite/Documents"; + configDir = lib.mkDefault "/home/nullbite/.config/syncthing"; + }; + }; +} diff --git a/system/temp-new/fragments/sound.nix b/system/temp-new/fragments/sound.nix new file mode 100644 index 0000000..cf52088 --- /dev/null +++ b/system/temp-new/fragments/sound.nix @@ -0,0 +1,34 @@ +{ config, lib, pkgs, ...}: +let + cfg = config.nixfiles.common.sound; + inherit (lib) mkEnableOption mkIf mkDefault; +in +{ + # Enable sound. + # sound.enable = true; + # hardware.pulseaudio.enable = true; + + options.nixfiles.common.sound = { + enable = mkEnableOption "sound configuration"; + }; + + config = mkIf cfg.enable { + security.rtkit.enable = mkDefault true; + services.pipewire = { + enable = true; + alsa.enable = mkDefault true; + alsa.support32Bit = mkDefault config.services.pipewire.alsa.enable; + pulse.enable = mkDefault true; + jack.enable = mkDefault true; + }; + + environment.systemPackages = with pkgs; [ + qpwgraph + easyeffects + ] ++ optionals config.services.pipewire.pulse.enable [ + pavucontrol + ncpamixer + pulsemixer + ]; + }; +} diff --git a/system/temp-new/gaming.nix b/system/temp-new/gaming.nix new file mode 100644 index 0000000..a332b65 --- /dev/null +++ b/system/temp-new/gaming.nix @@ -0,0 +1,40 @@ +{ config, lib, pkgs, ...}: +let + cfg = config.nixfiles.packageSets.gaming; +in +{ + # oopsies this is for home-manager + # programs.mangohud.enable = lib.mkDefault true; + + options.nixfiles.packageSets.gaming = { + enable = lib.mkEnableOption "gaming package set"; + }; + config = lib.mkIf cfg.enable { + programs.steam = { + enable = lib.mkDefault true; + gamescopeSession = { + enable = lib.mkDefault true; + }; + }; + + programs.gamemode = { + enable = lib.mkDefault true; + enableRenice = lib.mkDefault true; + }; + + programs.gamescope = { + enable = lib.mkDefault true; + capSysNice = lib.mkDefault false; + }; + + environment.systemPackages = with pkgs; [ + mangohud + goverlay + prismlauncher + glxinfo + vulkan-tools + legendary-gl + heroic + ]; + }; +} diff --git a/system/temp-new/hyprland.nix b/system/temp-new/hyprland.nix new file mode 100644 index 0000000..a9a9598 --- /dev/null +++ b/system/temp-new/hyprland.nix @@ -0,0 +1,45 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.nixfiles.sessions.hyprland; +in +{ + # imports = [ + # ./desktop-common.nix + # # FIXME make this into an option + # ./wm-common.nix + # ]; + + options.nixfiles.sessions.hyprland = { + enable = lib.mkEnableOption "hyprland configuration"; + }; + + config = lib.mkIf cfg.enable { + services.xserver.displayManager.sddm.enable = true; + + programs.hyprland = { + enable = true; + # TODO base this on if nvidia is enabled + enableNvidiaPatches = lib.mkDefault true; + xwayland.enable = true; + }; + + xdg.portal = { + enable = true; + extraPortals = [ + pkgs.xdg-desktop-portal-gtk + ]; + }; + + environment.systemPackages = with pkgs; [ + kitty + dunst + polkit-kde-agent + eww + hyprpaper + rofi + hyprpicker + udiskie + polkit-kde-agent + ]; + }; +} diff --git a/system/temp-new/new-fragments/README.md b/system/temp-new/new-fragments/README.md new file mode 100644 index 0000000..3031dac --- /dev/null +++ b/system/temp-new/new-fragments/README.md @@ -0,0 +1,19 @@ +# Fragments +These are Nix modules which aim to configure only one aspect of the system. +This can include installing and configuring single programs such as Steam, +MangoHud, Syncthing, or OpenSSH, as well as setting generic options for certain +hardware setups, such as NVIDIA PRIME Offloading. + +## TODO +These are some fragments that I want to create: +- hardware/nvidia +- hardware/nvidia-supergfxd +- hardware/printing + - CUPS + - QZTray (maybe?) +- software/steam +- software/syncthing +- software/libreoffice +- software/ssh +- software/gnupg +- software/pam-gnupg (dep. software/gnupg) diff --git a/system/temp-new/new-fragments/android.nix b/system/temp-new/new-fragments/android.nix new file mode 100644 index 0000000..39a069c --- /dev/null +++ b/system/temp-new/new-fragments/android.nix @@ -0,0 +1,9 @@ +{ config, lib, pkgs, outputs, vars, ...}@args: +{ + imports = [ outputs.nixosModules.adb ]; + + config = { + programs.adb.enable = true; + users.users.${vars.username}.extraGroups = [ "adbusers" ]; + }; +} diff --git a/system/temp-new/new-fragments/debugging.nix b/system/temp-new/new-fragments/debugging.nix new file mode 100644 index 0000000..0bde8b4 --- /dev/null +++ b/system/temp-new/new-fragments/debugging.nix @@ -0,0 +1,9 @@ +{ config, lib, pkgs, ...}: +{ + environment = { + enableDebugInfo = true; + systemPackages = with pkgs; [ + gdb + ]; + }; +} diff --git a/system/temp-new/plasma.nix b/system/temp-new/plasma.nix new file mode 100644 index 0000000..f1dc0f4 --- /dev/null +++ b/system/temp-new/plasma.nix @@ -0,0 +1,49 @@ +{ config, lib, pkgs, ...}: +let + sleep = "${pkgs.coreutils}/bin/sleep"; + systemctl = "${pkgs.systemd}/bin/systemctl"; + inherit (lib) mkIf mkEnableOption mkForce mkDefault; + cfg = config.nixfiles.session.plasma; +in +{ + # imports = [ + # ./desktop-common.nix + # ]; + + options.nixfiles.session.plasma = { + enable = mkEnableOption "KDE Plasma session"; + }; + + config = mkIf cfg.enable { + nixfiles.common.desktop.enable = true; + + services.xserver.displayManager.sddm.enable = mkDefault true; + services.xserver.desktopManager.plasma5.enable = true; + services.xserver.displayManager.defaultSession = "plasmawayland"; + programs.kdeconnect.enable = mkDefault true; + + systemd.user = { + services.restart-xdg-desktop-portal-kde = { + enable = true; + description = "hack to fix xdg-desktop-portal on kde"; + wantedBy = [ "graphical-session.target" ]; + after = [ "plasma-core.target" "xdg-desktop-portal.service" ]; + requisite = [ "plasma-core.target" ]; + + serviceConfig = { + ExecStart = [ + "${sleep} 5" + "${systemctl} --user restart xdg-desktop-portal.service" + ]; + Type = "oneshot"; + RemainAfterExit = "yes"; + }; + }; + }; + + environment.systemPackages = with pkgs; [ + # this fixes tiny file dialogs for Minecraft + libsForQt5.kdialog + ]; + }; +} diff --git a/system/temp-new/remote.nix b/system/temp-new/remote.nix new file mode 100644 index 0000000..78acb17 --- /dev/null +++ b/system/temp-new/remote.nix @@ -0,0 +1,23 @@ +{ config, lib, pkgs, ... }: +with lib; let + cfg = config.nixfiles.common.remoteAccess; +in +{ + config = lib.mkIf cfg.enable { + # Enable the OpenSSH daemon. + # services.openssh.enable = true; + services.openssh = { + enable = true; + openFirewall = true; + settings = { + + }; + }; + + services.tailscale.enable = true; + + networking.wireguard.enable = true; + }; + options = { + nixfiles.common.remoteAccess = mkEnbaleOption "remote access options" ; }; +} diff --git a/system/temp-new/wm-common.nix b/system/temp-new/wm-common.nix new file mode 100644 index 0000000..d3bd487 --- /dev/null +++ b/system/temp-new/wm-common.nix @@ -0,0 +1,21 @@ +{ pkgs, lib, config, options, ...}: +let + inherit (lib) mkDefault mkIf mkEnableOption; + cfg = config.nixfiles.common.window-manager; +in +{ + config = mkIf cfg.enable { + # Common options for standalone window managers; many of these (or + # alternatives thereof) are pulled in by desktop environments. + services = { + power-profiles-daemon.enable = mkDefault true; + blueman.enable = mkDefault config.hardware.bluetooth.enable; + }; + programs = { + nm-applet.enable = mkDefault config.networking.networkmanager.enable; + }; + }; + options = { + nixfiles.common.window-manager.enable = mkEnableOption "common window manager configuration"; + }; +} From 969abe113e074282396fde0bc2ee4ce342c602d0 Mon Sep 17 00:00:00 2001 From: NullBite <me@nullbite.com> Date: Thu, 8 Feb 2024 13:10:31 +0100 Subject: [PATCH 02/13] Replace old modules --- system/base.nix | 91 ++++++++++++++++++- system/default.nix | 1 - system/desktop-common.nix | 77 ++++++++++------ system/fragments/base.nix | 74 --------------- system/fragments/cli-multimedia.nix | 8 -- system/fragments/hardware/bluetooth.nix | 15 ++- system/fragments/hardware/nvidia-modeset.nix | 60 +++++++----- system/fragments/me.nix | 35 ++++--- system/fragments/multimedia.nix | 24 ++++- system/fragments/opengl.nix | 18 ++-- system/fragments/software/syncthing.nix | 20 +++- system/fragments/sound.nix | 42 ++++++--- system/gaming.nix | 50 +++++----- system/hyprland.nix | 64 +++++++------ system/{fragments => new-fragments}/README.md | 0 system/{ => new-fragments}/android.nix | 0 system/{ => new-fragments}/debugging.nix | 0 system/plasma.nix | 68 ++++++++------ system/remote.nix | 27 ++++-- system/temp-new/README.md | 2 - system/temp-new/base.nix | 90 ------------------ system/temp-new/default.nix | 11 --- system/temp-new/desktop-common.nix | 58 ------------ .../temp-new/fragments/hardware/bluetooth.nix | 16 ---- .../fragments/hardware/nvidia-modeset.nix | 47 ---------- system/temp-new/fragments/me.nix | 25 ----- system/temp-new/fragments/multimedia.nix | 22 ----- system/temp-new/fragments/opengl.nix | 15 --- .../temp-new/fragments/software/syncthing.nix | 19 ---- system/temp-new/fragments/sound.nix | 34 ------- system/temp-new/gaming.nix | 40 -------- system/temp-new/hyprland.nix | 45 --------- system/temp-new/new-fragments/README.md | 19 ---- system/temp-new/new-fragments/android.nix | 9 -- system/temp-new/new-fragments/debugging.nix | 9 -- system/temp-new/plasma.nix | 49 ---------- system/temp-new/remote.nix | 23 ----- system/temp-new/wm-common.nix | 21 ----- system/wm-common.nix | 22 +++-- 39 files changed, 411 insertions(+), 839 deletions(-) delete mode 100644 system/fragments/base.nix delete mode 100644 system/fragments/cli-multimedia.nix rename system/{fragments => new-fragments}/README.md (100%) rename system/{ => new-fragments}/android.nix (100%) rename system/{ => new-fragments}/debugging.nix (100%) delete mode 100644 system/temp-new/README.md delete mode 100644 system/temp-new/base.nix delete mode 100644 system/temp-new/default.nix delete mode 100644 system/temp-new/desktop-common.nix delete mode 100644 system/temp-new/fragments/hardware/bluetooth.nix delete mode 100644 system/temp-new/fragments/hardware/nvidia-modeset.nix delete mode 100644 system/temp-new/fragments/me.nix delete mode 100644 system/temp-new/fragments/multimedia.nix delete mode 100644 system/temp-new/fragments/opengl.nix delete mode 100644 system/temp-new/fragments/software/syncthing.nix delete mode 100644 system/temp-new/fragments/sound.nix delete mode 100644 system/temp-new/gaming.nix delete mode 100644 system/temp-new/hyprland.nix delete mode 100644 system/temp-new/new-fragments/README.md delete mode 100644 system/temp-new/new-fragments/android.nix delete mode 100644 system/temp-new/new-fragments/debugging.nix delete mode 100644 system/temp-new/plasma.nix delete mode 100644 system/temp-new/remote.nix delete mode 100644 system/temp-new/wm-common.nix diff --git a/system/base.nix b/system/base.nix index aa55cee..8301dd4 100644 --- a/system/base.nix +++ b/system/base.nix @@ -1,7 +1,90 @@ -{ config, lib, pkgs, ...}: +{ config, lib, pkgs, options, inputs, ...}@args: +let + cfg = config.nixfiles.profile.base; +in { - imports = [ - ./fragments/base.nix - ./fragments/me.nix + options.nixfiles.profile.base = { + enable = lib.mkEnableOption "base config"; + }; + # TODO was gonna add something but i forgor and now i'm too lazy + # to delete this + config = lib.mkMerge [ + (lib.mkIf cfg.enable { + + # Enable my account + nixfiles.common.me = lib.mkDefault true; + + # locale settings + i18n = { + defaultLocale = "en_US.UTF-8"; + extraLocaleSettings = { + LC_ALL = "en_US.UTF-8"; + }; + }; + + # Enable flakes + nix.settings.experimental-features = ["nix-command" "flakes" ]; + + # fallback to building locally if binary cache fails (home-manager should be + # able to handle simple rebuilds offline) + nix.settings.fallback = true; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # networking.hostName = "nixos"; # Define your hostname. + # Pick only one of the below networking options. + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + networking.networkmanager.enable = lib.mkDefault true; # Easiest to use and most distros use this by default. + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + neovim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + wget + curl + git + git-lfs + stow + zsh + ntfs3g + openssh + sshfs + file + + fd + ripgrep + sbctl # TODO move this elsewhere + comma + nil + + # network utilities + inetutils + socat + nmap + hping + + # system utilities + htop + lshw + pciutils + ]; + + # this makes comma and legacy nix utils use the flake nixpkgs for ABI + # compatibility becasue once `, vkcube` couldn't find the correct opengl + # driver or something (also it reduces the download size of temporary shell + # closures) + nix.nixPath = [ "nixpkgs=${inputs.nixpkgs}" ] ++ options.nix.nixPath.default; + + programs.ssh.enableAskPassword = false; + programs.fuse.userAllowOther = true; + + programs.gnupg.agent = { + enable = lib.mkDefault true; + enableSSHSupport = lib.mkDefault true; + }; + + boot.loader.systemd-boot.configurationLimit = lib.mkDefault 15; + }) ]; } diff --git a/system/default.nix b/system/default.nix index 0927272..09dcd6a 100644 --- a/system/default.nix +++ b/system/default.nix @@ -4,7 +4,6 @@ let in { imports = [ - ./temp-new ]; config = {}; options.nixfiles = { diff --git a/system/desktop-common.nix b/system/desktop-common.nix index 49aa07e..6449a28 100644 --- a/system/desktop-common.nix +++ b/system/desktop-common.nix @@ -1,37 +1,58 @@ { config, lib, pkgs, outputs, ...}: - +let + cfg = config.nixfiles.common.desktop; + inherit (lib) mkIf mkDefault mkForce mkEnableOption; +in { - imports = [ - ./base.nix - ./fragments/sound.nix - ./fragments/multimedia.nix - ./fragments/software/syncthing.nix - ./fragments/hardware/bluetooth.nix - ]; - - # Enable the X11 windowing system. - services.xserver.enable = true; + # imports = [ + # ./base.nix + # ./fragments/sound.nix + # ./fragments/multimedia.nix + # ./fragments/software/syncthing.nix + # ./fragments/hardware/bluetooth.nix + # ]; - environment.systemPackages = with pkgs; [ - arc-theme - wl-clipboard - ]; + options.nixfiles.common.desktop = { + enable = mkEnableOption "common desktop options"; + }; - # Enable flatpak - services.flatpak.enable = true; + config = mkIf cfg.enable { + # enable option sets + nixfiles = { + packageSets.multimedia.enable = true; + common = { + syncthing.enable = true; + bluetooth.enable = true; + sound.enable = true; + }; + }; - # Enable CUPS to print documents. - services.printing.enable = true; + # Enable the X11 windowing system. + services.xserver.enable = true; - fonts.packages = with pkgs; [ - (nerdfonts.override { fonts = [ "FiraCode" ]; }) - noto-fonts-cjk - (outputs.packages.${pkgs.system}.google-fonts.override { fonts = [ "NovaSquare" ];}) - ]; - - users.users.nullbite = { - packages = with pkgs; [ - firefox + environment.systemPackages = with pkgs; [ + arc-theme + wl-clipboard ]; + + # Enable flatpak + services.flatpak.enable = mkDefault true; + + # Enable CUPS to print documents. + services.printing.enable = mkDefault true; + + fonts.packages = with pkgs; [ + (nerdfonts.override { fonts = [ "FiraCode" ]; }) + noto-fonts-cjk + (outputs.packages.${pkgs.system}.google-fonts.override { fonts = [ "NovaSquare" ];}) + ]; + + # TODO this should be defined in home-manager or not at all probably + # FIXME also my name is hardcoded + users.users.nullbite = { + packages = with pkgs; [ + firefox + ]; + }; }; } diff --git a/system/fragments/base.nix b/system/fragments/base.nix deleted file mode 100644 index de4d18b..0000000 --- a/system/fragments/base.nix +++ /dev/null @@ -1,74 +0,0 @@ -{ config, lib, pkgs, options, inputs, ...}@args: -{ - # locale settings - i18n = { - defaultLocale = "en_US.UTF-8"; - extraLocaleSettings = { - LC_ALL = "en_US.UTF-8"; - }; - }; - - # Enable flakes - nix.settings.experimental-features = ["nix-command" "flakes" ]; - - # fallback to building locally if binary cache fails (home-manager should be - # able to handle simple rebuilds offline) - nix.settings.fallback = true; - - # Allow unfree packages - nixpkgs.config.allowUnfree = true; - - # networking.hostName = "nixos"; # Define your hostname. - # Pick only one of the below networking options. - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. - networking.networkmanager.enable = lib.mkDefault true; # Easiest to use and most distros use this by default. - - # List packages installed in system profile. To search, run: - # $ nix search wget - environment.systemPackages = with pkgs; [ - neovim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. - wget - curl - git - git-lfs - stow - zsh - ntfs3g - openssh - sshfs - file - - fd - ripgrep - sbctl # TODO move this elsewhere - comma - nil - - # network utilities - inetutils - socat - nmap - hping - - # system utilities - htop - lshw - pciutils - ]; - - # this makes comma and legacy nix utils use the flake nixpkgs for ABI - # compatibility becasue once `, vkcube` couldn't find the correct opengl - # driver or something (also it reduces the download size of temporary shell - # closures) - nix.nixPath = [ "nixpkgs=${inputs.nixpkgs}" ] ++ options.nix.nixPath.default; - - programs.ssh.enableAskPassword = false; - programs.fuse.userAllowOther = true; - - programs.gnupg.agent = { - enable = lib.mkDefault true; - enableSSHSupport = lib.mkDefault true; - }; - - boot.loader.systemd-boot.configurationLimit = lib.mkDefault 15; -} diff --git a/system/fragments/cli-multimedia.nix b/system/fragments/cli-multimedia.nix deleted file mode 100644 index 370aac0..0000000 --- a/system/fragments/cli-multimedia.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, lib, pkgs, ...}: -{ - environment.systemPackages = with pkgs; [ - yt-dlp - imagemagick - ffmpeg - ]; -} diff --git a/system/fragments/hardware/bluetooth.nix b/system/fragments/hardware/bluetooth.nix index dd84452..1a8c7fb 100644 --- a/system/fragments/hardware/bluetooth.nix +++ b/system/fragments/hardware/bluetooth.nix @@ -1,7 +1,16 @@ { config, lib, pkgs, ...}: +let + cfg = config.nixfiles.common.bluetooth; +in { - hardware.bluetooth = { - enable = lib.mkDefault true; - powerOnBoot = lib.mkDefault true; + options.nixfiles.common.bluetooth = { + enable = lib.mkEnableOption "Bluetooth"; + }; + + config = lib.mkIf cfg.enable { + hardware.bluetooth = { + enable = lib.mkDefault true; + powerOnBoot = lib.mkDefault true; + }; }; } diff --git a/system/fragments/hardware/nvidia-modeset.nix b/system/fragments/hardware/nvidia-modeset.nix index 2f9c44b..1011b96 100644 --- a/system/fragments/hardware/nvidia-modeset.nix +++ b/system/fragments/hardware/nvidia-modeset.nix @@ -1,37 +1,47 @@ { config, lib, pkgs, ...}: +let + cfg = config.nixfiles.common.nvidia; +in { - imports = [ - ../opengl.nix - ]; + # imports = [ + # ../opengl.nix + # ]; # Load nvidia driver for Xorg and Wayland - services.xserver.videoDrivers = ["nvidia"]; + options.nixfiles.common.nvidia = { + modesetting.enable = lib.mkEnableOption "NVIDIA configuration with modesetting"; + }; + config = lib.mkIf cfg.modesetting.enable { + services.xserver.videoDrivers = ["nvidia"]; - hardware.nvidia = { + nixfiles.common.opengl.enable = true; - # Modesetting is required. - modesetting.enable = lib.mkDefault true; + hardware.nvidia = { - # Nvidia power management. Experimental, and can cause sleep/suspend to fail. - powerManagement.enable = lib.mkDefault false; - # Fine-grained power management. Turns off GPU when not in use. - # Experimental and only works on modern Nvidia GPUs (Turing or newer). - powerManagement.finegrained = lib.mkDefault false; + # Modesetting is required. + modesetting.enable = lib.mkDefault true; - # Use the NVidia open source kernel module (not to be confused with the - # independent third-party "nouveau" open source driver). - # Support is limited to the Turing and later architectures. Full list of - # supported GPUs is at: - # https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus - # Only available from driver 515.43.04+ - # Currently alpha-quality/buggy, so false is currently the recommended setting. - open = lib.mkDefault false; + # Nvidia power management. Experimental, and can cause sleep/suspend to fail. + powerManagement.enable = lib.mkDefault false; + # Fine-grained power management. Turns off GPU when not in use. + # Experimental and only works on modern Nvidia GPUs (Turing or newer). + powerManagement.finegrained = lib.mkDefault false; - # Enable the Nvidia settings menu, - # accessible via `nvidia-settings`. - nvidiaSettings = lib.mkDefault true; + # Use the NVidia open source kernel module (not to be confused with the + # independent third-party "nouveau" open source driver). + # Support is limited to the Turing and later architectures. Full list of + # supported GPUs is at: + # https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus + # Only available from driver 515.43.04+ + # Currently alpha-quality/buggy, so false is currently the recommended setting. + open = lib.mkDefault false; - # Optionally, you may need to select the appropriate driver version for your specific GPU. - package = lib.mkDefault config.boot.kernelPackages.nvidiaPackages.production; + # Enable the Nvidia settings menu, + # accessible via `nvidia-settings`. + nvidiaSettings = lib.mkDefault true; + + # Optionally, you may need to select the appropriate driver version for your specific GPU. + package = lib.mkDefault config.boot.kernelPackages.nvidiaPackages.production; + }; }; } diff --git a/system/fragments/me.nix b/system/fragments/me.nix index 5a74daa..c60924d 100644 --- a/system/fragments/me.nix +++ b/system/fragments/me.nix @@ -1,20 +1,25 @@ { config, lib, pkgs, ...}: +let + cfg = config.nixfiles.common.me; +in { - users.users.nullbite = { - isNormalUser = true; - extraGroups = [ "wheel" ]; - packages = with pkgs; [ - keychain - ]; - initialPassword = "changeme"; - shell = pkgs.zsh; - }; + options.nixfiles.common.me = lib.mkEnableOption "my user account"; + config = lib.mkIf cfg.enable { + users.users.nullbite = { + isNormalUser = true; + extraGroups = [ "wheel" ]; + packages = with pkgs; [ + keychain + ]; + initialPassword = "changeme"; + shell = pkgs.zsh; + }; - # shell config - programs.zsh.enable = true; - programs.fzf = { - keybindings = true; - fuzzyCompletion = true; + # shell config + programs.zsh.enable = true; + programs.fzf = { + keybindings = true; + fuzzyCompletion = true; + }; }; - } diff --git a/system/fragments/multimedia.nix b/system/fragments/multimedia.nix index 7120919..ab6f5fc 100644 --- a/system/fragments/multimedia.nix +++ b/system/fragments/multimedia.nix @@ -1,8 +1,22 @@ { config, lib, pkgs, ...}: +let + cfg = config.nixfiles.packageSets.multimedia; + inherit (lib) optionals mkEnableOption mkIf; +in { - imports = [ ./cli-multimedia.nix ]; - environment.systemPackages = with pkgs; [ - mpv - gimp-with-plugins - ]; + options.nixfiles.packageSets.multimedia = { + enable = mkEnableOption "multimedia packages"; + }; + config = mkIf cfg.enable { + environment.systemPackages = with pkgs; optionals config.services.xserver.enable [ + mpv + gimp-with-plugins + krita + inkscape + ] ++ [ + yt-dlp + imagemagick + ffmpeg + ]; + }; } diff --git a/system/fragments/opengl.nix b/system/fragments/opengl.nix index 79ee5d2..afad162 100644 --- a/system/fragments/opengl.nix +++ b/system/fragments/opengl.nix @@ -1,11 +1,15 @@ { config, lib, pkgs, ...}: +let + cfg = config.nixfiles.common.opengl; +in { - - # Enable OpenGL - hardware.opengl = { - enable = true; - driSupport = true; - driSupport32Bit = true; + options.nixfiles.common.opengl.enable = lib.mkEnableOption "OpenGL configuration"; + config = lib.mkIf cfg.enable { + # Enable OpenGL + hardware.opengl = { + enable = true; + driSupport = lib.mkDefault true; + driSupport32Bit = lib.mkDefault config.hardware.opengl.driSupport; + }; }; - } diff --git a/system/fragments/software/syncthing.nix b/system/fragments/software/syncthing.nix index da6d2da..e17fad4 100644 --- a/system/fragments/software/syncthing.nix +++ b/system/fragments/software/syncthing.nix @@ -1,9 +1,19 @@ { config, lib, pkgs, ...}: +let + inherit (lib) mkEnableOption mkIf; + cfg = config.nixfiles.programs.syncthing; +in { - services.syncthing = { - enable = lib.mkDefault true; - user = lib.mkDefault "nullbite"; - dataDir = lib.mkDefault "/home/nullbite/Documents"; - configDir = lib.mkDefault "/home/nullbite/.config/syncthing"; + options.nixfiles.programs.syncthing = { + enable = mkEnableOption "Syncthing configuration"; + }; + + config = mkIf cfg.enable { + services.syncthing = { + enable = lib.mkDefault true; + user = lib.mkDefault "nullbite"; + dataDir = lib.mkDefault "/home/nullbite/Documents"; + configDir = lib.mkDefault "/home/nullbite/.config/syncthing"; + }; }; } diff --git a/system/fragments/sound.nix b/system/fragments/sound.nix index a4e606a..cf52088 100644 --- a/system/fragments/sound.nix +++ b/system/fragments/sound.nix @@ -1,22 +1,34 @@ { config, lib, pkgs, ...}: +let + cfg = config.nixfiles.common.sound; + inherit (lib) mkEnableOption mkIf mkDefault; +in { # Enable sound. # sound.enable = true; # hardware.pulseaudio.enable = true; - security.rtkit.enable = true; - services.pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - jack.enable = true; + + options.nixfiles.common.sound = { + enable = mkEnableOption "sound configuration"; + }; + + config = mkIf cfg.enable { + security.rtkit.enable = mkDefault true; + services.pipewire = { + enable = true; + alsa.enable = mkDefault true; + alsa.support32Bit = mkDefault config.services.pipewire.alsa.enable; + pulse.enable = mkDefault true; + jack.enable = mkDefault true; + }; + + environment.systemPackages = with pkgs; [ + qpwgraph + easyeffects + ] ++ optionals config.services.pipewire.pulse.enable [ + pavucontrol + ncpamixer + pulsemixer + ]; }; - - environment.systemPackages = with pkgs; [ - qpwgraph - pavucontrol - ncpamixer - pulsemixer - easyeffects - ]; } diff --git a/system/gaming.nix b/system/gaming.nix index 258d158..a332b65 100644 --- a/system/gaming.nix +++ b/system/gaming.nix @@ -1,32 +1,40 @@ { config, lib, pkgs, ...}: +let + cfg = config.nixfiles.packageSets.gaming; +in { # oopsies this is for home-manager # programs.mangohud.enable = lib.mkDefault true; - programs.steam = { - enable = lib.mkDefault true; - gamescopeSession = { + options.nixfiles.packageSets.gaming = { + enable = lib.mkEnableOption "gaming package set"; + }; + config = lib.mkIf cfg.enable { + programs.steam = { enable = lib.mkDefault true; + gamescopeSession = { + enable = lib.mkDefault true; + }; }; - }; - programs.gamemode = { - enable = lib.mkDefault true; - enableRenice = lib.mkDefault true; - }; + programs.gamemode = { + enable = lib.mkDefault true; + enableRenice = lib.mkDefault true; + }; - programs.gamescope = { - enable = lib.mkDefault true; - capSysNice = lib.mkDefault false; - }; + programs.gamescope = { + enable = lib.mkDefault true; + capSysNice = lib.mkDefault false; + }; - environment.systemPackages = with pkgs; [ - mangohud - goverlay - prismlauncher - glxinfo - vulkan-tools - legendary-gl - heroic - ]; + environment.systemPackages = with pkgs; [ + mangohud + goverlay + prismlauncher + glxinfo + vulkan-tools + legendary-gl + heroic + ]; + }; } diff --git a/system/hyprland.nix b/system/hyprland.nix index a71426e..a9a9598 100644 --- a/system/hyprland.nix +++ b/system/hyprland.nix @@ -1,35 +1,45 @@ { lib, pkgs, config, ... }: +let + cfg = config.nixfiles.sessions.hyprland; +in { - imports = [ - ./desktop-common.nix - # FIXME make this into an option - ./wm-common.nix - ]; + # imports = [ + # ./desktop-common.nix + # # FIXME make this into an option + # ./wm-common.nix + # ]; - services.xserver.displayManager.sddm.enable = true; - - programs.hyprland = { - enable = true; - enableNvidiaPatches = true; - xwayland.enable = true; + options.nixfiles.sessions.hyprland = { + enable = lib.mkEnableOption "hyprland configuration"; }; - xdg.portal = { - enable = true; - extraPortals = [ - pkgs.xdg-desktop-portal-gtk + config = lib.mkIf cfg.enable { + services.xserver.displayManager.sddm.enable = true; + + programs.hyprland = { + enable = true; + # TODO base this on if nvidia is enabled + enableNvidiaPatches = lib.mkDefault true; + xwayland.enable = true; + }; + + xdg.portal = { + enable = true; + extraPortals = [ + pkgs.xdg-desktop-portal-gtk + ]; + }; + + environment.systemPackages = with pkgs; [ + kitty + dunst + polkit-kde-agent + eww + hyprpaper + rofi + hyprpicker + udiskie + polkit-kde-agent ]; }; - - environment.systemPackages = with pkgs; [ - kitty - dunst - polkit-kde-agent - eww - hyprpaper - rofi - hyprpicker - udiskie - polkit-kde-agent - ]; } diff --git a/system/fragments/README.md b/system/new-fragments/README.md similarity index 100% rename from system/fragments/README.md rename to system/new-fragments/README.md diff --git a/system/android.nix b/system/new-fragments/android.nix similarity index 100% rename from system/android.nix rename to system/new-fragments/android.nix diff --git a/system/debugging.nix b/system/new-fragments/debugging.nix similarity index 100% rename from system/debugging.nix rename to system/new-fragments/debugging.nix diff --git a/system/plasma.nix b/system/plasma.nix index 5e69c8d..f1dc0f4 100644 --- a/system/plasma.nix +++ b/system/plasma.nix @@ -2,38 +2,48 @@ let sleep = "${pkgs.coreutils}/bin/sleep"; systemctl = "${pkgs.systemd}/bin/systemctl"; + inherit (lib) mkIf mkEnableOption mkForce mkDefault; + cfg = config.nixfiles.session.plasma; in { - imports = [ - ./desktop-common.nix - ]; + # imports = [ + # ./desktop-common.nix + # ]; - services.xserver.displayManager.sddm.enable = true; - services.xserver.desktopManager.plasma5.enable = true; - services.xserver.displayManager.defaultSession = "plasmawayland"; - programs.kdeconnect.enable = true; - - systemd.user = { - services.restart-xdg-desktop-portal-kde = { - enable = true; - description = "hack to fix xdg-desktop-portal on kde"; - wantedBy = [ "graphical-session.target" ]; - after = [ "plasma-core.target" "xdg-desktop-portal.service" ]; - requisite = [ "plasma-core.target" ]; - - serviceConfig = { - ExecStart = [ - "${sleep} 5" - "${systemctl} --user restart xdg-desktop-portal.service" - ]; - Type = "oneshot"; - RemainAfterExit = "yes"; - }; - }; + options.nixfiles.session.plasma = { + enable = mkEnableOption "KDE Plasma session"; }; - environment.systemPackages = with pkgs; [ - # this fixes tiny file dialogs for Minecraft - libsForQt5.kdialog - ]; + config = mkIf cfg.enable { + nixfiles.common.desktop.enable = true; + + services.xserver.displayManager.sddm.enable = mkDefault true; + services.xserver.desktopManager.plasma5.enable = true; + services.xserver.displayManager.defaultSession = "plasmawayland"; + programs.kdeconnect.enable = mkDefault true; + + systemd.user = { + services.restart-xdg-desktop-portal-kde = { + enable = true; + description = "hack to fix xdg-desktop-portal on kde"; + wantedBy = [ "graphical-session.target" ]; + after = [ "plasma-core.target" "xdg-desktop-portal.service" ]; + requisite = [ "plasma-core.target" ]; + + serviceConfig = { + ExecStart = [ + "${sleep} 5" + "${systemctl} --user restart xdg-desktop-portal.service" + ]; + Type = "oneshot"; + RemainAfterExit = "yes"; + }; + }; + }; + + environment.systemPackages = with pkgs; [ + # this fixes tiny file dialogs for Minecraft + libsForQt5.kdialog + ]; + }; } diff --git a/system/remote.nix b/system/remote.nix index 86d20e3..78acb17 100644 --- a/system/remote.nix +++ b/system/remote.nix @@ -1,16 +1,23 @@ { config, lib, pkgs, ... }: +with lib; let + cfg = config.nixfiles.common.remoteAccess; +in { - # Enable the OpenSSH daemon. - # services.openssh.enable = true; - services.openssh = { - enable = true; - openFirewall = true; - settings = { + config = lib.mkIf cfg.enable { + # Enable the OpenSSH daemon. + # services.openssh.enable = true; + services.openssh = { + enable = true; + openFirewall = true; + settings = { + }; }; + + services.tailscale.enable = true; + + networking.wireguard.enable = true; }; - - services.tailscale.enable = true; - - networking.wireguard.enable = true; + options = { + nixfiles.common.remoteAccess = mkEnbaleOption "remote access options" ; }; } diff --git a/system/temp-new/README.md b/system/temp-new/README.md deleted file mode 100644 index e91ba36..0000000 --- a/system/temp-new/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# system -This directory contains modules and configuration specific to my NixOS configuration. `default.nix` is the entrypoint to my module set; it can safely be loaded without making any configuration changes by default. diff --git a/system/temp-new/base.nix b/system/temp-new/base.nix deleted file mode 100644 index 8301dd4..0000000 --- a/system/temp-new/base.nix +++ /dev/null @@ -1,90 +0,0 @@ -{ config, lib, pkgs, options, inputs, ...}@args: -let - cfg = config.nixfiles.profile.base; -in -{ - options.nixfiles.profile.base = { - enable = lib.mkEnableOption "base config"; - }; - # TODO was gonna add something but i forgor and now i'm too lazy - # to delete this - config = lib.mkMerge [ - (lib.mkIf cfg.enable { - - # Enable my account - nixfiles.common.me = lib.mkDefault true; - - # locale settings - i18n = { - defaultLocale = "en_US.UTF-8"; - extraLocaleSettings = { - LC_ALL = "en_US.UTF-8"; - }; - }; - - # Enable flakes - nix.settings.experimental-features = ["nix-command" "flakes" ]; - - # fallback to building locally if binary cache fails (home-manager should be - # able to handle simple rebuilds offline) - nix.settings.fallback = true; - - # Allow unfree packages - nixpkgs.config.allowUnfree = true; - - # networking.hostName = "nixos"; # Define your hostname. - # Pick only one of the below networking options. - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. - networking.networkmanager.enable = lib.mkDefault true; # Easiest to use and most distros use this by default. - - # List packages installed in system profile. To search, run: - # $ nix search wget - environment.systemPackages = with pkgs; [ - neovim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. - wget - curl - git - git-lfs - stow - zsh - ntfs3g - openssh - sshfs - file - - fd - ripgrep - sbctl # TODO move this elsewhere - comma - nil - - # network utilities - inetutils - socat - nmap - hping - - # system utilities - htop - lshw - pciutils - ]; - - # this makes comma and legacy nix utils use the flake nixpkgs for ABI - # compatibility becasue once `, vkcube` couldn't find the correct opengl - # driver or something (also it reduces the download size of temporary shell - # closures) - nix.nixPath = [ "nixpkgs=${inputs.nixpkgs}" ] ++ options.nix.nixPath.default; - - programs.ssh.enableAskPassword = false; - programs.fuse.userAllowOther = true; - - programs.gnupg.agent = { - enable = lib.mkDefault true; - enableSSHSupport = lib.mkDefault true; - }; - - boot.loader.systemd-boot.configurationLimit = lib.mkDefault 15; - }) - ]; -} diff --git a/system/temp-new/default.nix b/system/temp-new/default.nix deleted file mode 100644 index 09dcd6a..0000000 --- a/system/temp-new/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ pkgs, config, lib, options, ... }@args: -let - cfg = config.nixfiles; -in -{ - imports = [ - ]; - config = {}; - options.nixfiles = { - }; -} diff --git a/system/temp-new/desktop-common.nix b/system/temp-new/desktop-common.nix deleted file mode 100644 index 6449a28..0000000 --- a/system/temp-new/desktop-common.nix +++ /dev/null @@ -1,58 +0,0 @@ -{ config, lib, pkgs, outputs, ...}: -let - cfg = config.nixfiles.common.desktop; - inherit (lib) mkIf mkDefault mkForce mkEnableOption; -in -{ - # imports = [ - # ./base.nix - # ./fragments/sound.nix - # ./fragments/multimedia.nix - # ./fragments/software/syncthing.nix - # ./fragments/hardware/bluetooth.nix - # ]; - - options.nixfiles.common.desktop = { - enable = mkEnableOption "common desktop options"; - }; - - config = mkIf cfg.enable { - # enable option sets - nixfiles = { - packageSets.multimedia.enable = true; - common = { - syncthing.enable = true; - bluetooth.enable = true; - sound.enable = true; - }; - }; - - # Enable the X11 windowing system. - services.xserver.enable = true; - - environment.systemPackages = with pkgs; [ - arc-theme - wl-clipboard - ]; - - # Enable flatpak - services.flatpak.enable = mkDefault true; - - # Enable CUPS to print documents. - services.printing.enable = mkDefault true; - - fonts.packages = with pkgs; [ - (nerdfonts.override { fonts = [ "FiraCode" ]; }) - noto-fonts-cjk - (outputs.packages.${pkgs.system}.google-fonts.override { fonts = [ "NovaSquare" ];}) - ]; - - # TODO this should be defined in home-manager or not at all probably - # FIXME also my name is hardcoded - users.users.nullbite = { - packages = with pkgs; [ - firefox - ]; - }; - }; -} diff --git a/system/temp-new/fragments/hardware/bluetooth.nix b/system/temp-new/fragments/hardware/bluetooth.nix deleted file mode 100644 index 1a8c7fb..0000000 --- a/system/temp-new/fragments/hardware/bluetooth.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ config, lib, pkgs, ...}: -let - cfg = config.nixfiles.common.bluetooth; -in -{ - options.nixfiles.common.bluetooth = { - enable = lib.mkEnableOption "Bluetooth"; - }; - - config = lib.mkIf cfg.enable { - hardware.bluetooth = { - enable = lib.mkDefault true; - powerOnBoot = lib.mkDefault true; - }; - }; -} diff --git a/system/temp-new/fragments/hardware/nvidia-modeset.nix b/system/temp-new/fragments/hardware/nvidia-modeset.nix deleted file mode 100644 index 1011b96..0000000 --- a/system/temp-new/fragments/hardware/nvidia-modeset.nix +++ /dev/null @@ -1,47 +0,0 @@ -{ config, lib, pkgs, ...}: -let - cfg = config.nixfiles.common.nvidia; -in -{ - # imports = [ - # ../opengl.nix - # ]; - - # Load nvidia driver for Xorg and Wayland - options.nixfiles.common.nvidia = { - modesetting.enable = lib.mkEnableOption "NVIDIA configuration with modesetting"; - }; - config = lib.mkIf cfg.modesetting.enable { - services.xserver.videoDrivers = ["nvidia"]; - - nixfiles.common.opengl.enable = true; - - hardware.nvidia = { - - # Modesetting is required. - modesetting.enable = lib.mkDefault true; - - # Nvidia power management. Experimental, and can cause sleep/suspend to fail. - powerManagement.enable = lib.mkDefault false; - # Fine-grained power management. Turns off GPU when not in use. - # Experimental and only works on modern Nvidia GPUs (Turing or newer). - powerManagement.finegrained = lib.mkDefault false; - - # Use the NVidia open source kernel module (not to be confused with the - # independent third-party "nouveau" open source driver). - # Support is limited to the Turing and later architectures. Full list of - # supported GPUs is at: - # https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus - # Only available from driver 515.43.04+ - # Currently alpha-quality/buggy, so false is currently the recommended setting. - open = lib.mkDefault false; - - # Enable the Nvidia settings menu, - # accessible via `nvidia-settings`. - nvidiaSettings = lib.mkDefault true; - - # Optionally, you may need to select the appropriate driver version for your specific GPU. - package = lib.mkDefault config.boot.kernelPackages.nvidiaPackages.production; - }; - }; -} diff --git a/system/temp-new/fragments/me.nix b/system/temp-new/fragments/me.nix deleted file mode 100644 index c60924d..0000000 --- a/system/temp-new/fragments/me.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ config, lib, pkgs, ...}: -let - cfg = config.nixfiles.common.me; -in -{ - options.nixfiles.common.me = lib.mkEnableOption "my user account"; - config = lib.mkIf cfg.enable { - users.users.nullbite = { - isNormalUser = true; - extraGroups = [ "wheel" ]; - packages = with pkgs; [ - keychain - ]; - initialPassword = "changeme"; - shell = pkgs.zsh; - }; - - # shell config - programs.zsh.enable = true; - programs.fzf = { - keybindings = true; - fuzzyCompletion = true; - }; - }; -} diff --git a/system/temp-new/fragments/multimedia.nix b/system/temp-new/fragments/multimedia.nix deleted file mode 100644 index ab6f5fc..0000000 --- a/system/temp-new/fragments/multimedia.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ config, lib, pkgs, ...}: -let - cfg = config.nixfiles.packageSets.multimedia; - inherit (lib) optionals mkEnableOption mkIf; -in -{ - options.nixfiles.packageSets.multimedia = { - enable = mkEnableOption "multimedia packages"; - }; - config = mkIf cfg.enable { - environment.systemPackages = with pkgs; optionals config.services.xserver.enable [ - mpv - gimp-with-plugins - krita - inkscape - ] ++ [ - yt-dlp - imagemagick - ffmpeg - ]; - }; -} diff --git a/system/temp-new/fragments/opengl.nix b/system/temp-new/fragments/opengl.nix deleted file mode 100644 index afad162..0000000 --- a/system/temp-new/fragments/opengl.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ config, lib, pkgs, ...}: -let - cfg = config.nixfiles.common.opengl; -in -{ - options.nixfiles.common.opengl.enable = lib.mkEnableOption "OpenGL configuration"; - config = lib.mkIf cfg.enable { - # Enable OpenGL - hardware.opengl = { - enable = true; - driSupport = lib.mkDefault true; - driSupport32Bit = lib.mkDefault config.hardware.opengl.driSupport; - }; - }; -} diff --git a/system/temp-new/fragments/software/syncthing.nix b/system/temp-new/fragments/software/syncthing.nix deleted file mode 100644 index e17fad4..0000000 --- a/system/temp-new/fragments/software/syncthing.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ config, lib, pkgs, ...}: -let - inherit (lib) mkEnableOption mkIf; - cfg = config.nixfiles.programs.syncthing; -in -{ - options.nixfiles.programs.syncthing = { - enable = mkEnableOption "Syncthing configuration"; - }; - - config = mkIf cfg.enable { - services.syncthing = { - enable = lib.mkDefault true; - user = lib.mkDefault "nullbite"; - dataDir = lib.mkDefault "/home/nullbite/Documents"; - configDir = lib.mkDefault "/home/nullbite/.config/syncthing"; - }; - }; -} diff --git a/system/temp-new/fragments/sound.nix b/system/temp-new/fragments/sound.nix deleted file mode 100644 index cf52088..0000000 --- a/system/temp-new/fragments/sound.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ config, lib, pkgs, ...}: -let - cfg = config.nixfiles.common.sound; - inherit (lib) mkEnableOption mkIf mkDefault; -in -{ - # Enable sound. - # sound.enable = true; - # hardware.pulseaudio.enable = true; - - options.nixfiles.common.sound = { - enable = mkEnableOption "sound configuration"; - }; - - config = mkIf cfg.enable { - security.rtkit.enable = mkDefault true; - services.pipewire = { - enable = true; - alsa.enable = mkDefault true; - alsa.support32Bit = mkDefault config.services.pipewire.alsa.enable; - pulse.enable = mkDefault true; - jack.enable = mkDefault true; - }; - - environment.systemPackages = with pkgs; [ - qpwgraph - easyeffects - ] ++ optionals config.services.pipewire.pulse.enable [ - pavucontrol - ncpamixer - pulsemixer - ]; - }; -} diff --git a/system/temp-new/gaming.nix b/system/temp-new/gaming.nix deleted file mode 100644 index a332b65..0000000 --- a/system/temp-new/gaming.nix +++ /dev/null @@ -1,40 +0,0 @@ -{ config, lib, pkgs, ...}: -let - cfg = config.nixfiles.packageSets.gaming; -in -{ - # oopsies this is for home-manager - # programs.mangohud.enable = lib.mkDefault true; - - options.nixfiles.packageSets.gaming = { - enable = lib.mkEnableOption "gaming package set"; - }; - config = lib.mkIf cfg.enable { - programs.steam = { - enable = lib.mkDefault true; - gamescopeSession = { - enable = lib.mkDefault true; - }; - }; - - programs.gamemode = { - enable = lib.mkDefault true; - enableRenice = lib.mkDefault true; - }; - - programs.gamescope = { - enable = lib.mkDefault true; - capSysNice = lib.mkDefault false; - }; - - environment.systemPackages = with pkgs; [ - mangohud - goverlay - prismlauncher - glxinfo - vulkan-tools - legendary-gl - heroic - ]; - }; -} diff --git a/system/temp-new/hyprland.nix b/system/temp-new/hyprland.nix deleted file mode 100644 index a9a9598..0000000 --- a/system/temp-new/hyprland.nix +++ /dev/null @@ -1,45 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.nixfiles.sessions.hyprland; -in -{ - # imports = [ - # ./desktop-common.nix - # # FIXME make this into an option - # ./wm-common.nix - # ]; - - options.nixfiles.sessions.hyprland = { - enable = lib.mkEnableOption "hyprland configuration"; - }; - - config = lib.mkIf cfg.enable { - services.xserver.displayManager.sddm.enable = true; - - programs.hyprland = { - enable = true; - # TODO base this on if nvidia is enabled - enableNvidiaPatches = lib.mkDefault true; - xwayland.enable = true; - }; - - xdg.portal = { - enable = true; - extraPortals = [ - pkgs.xdg-desktop-portal-gtk - ]; - }; - - environment.systemPackages = with pkgs; [ - kitty - dunst - polkit-kde-agent - eww - hyprpaper - rofi - hyprpicker - udiskie - polkit-kde-agent - ]; - }; -} diff --git a/system/temp-new/new-fragments/README.md b/system/temp-new/new-fragments/README.md deleted file mode 100644 index 3031dac..0000000 --- a/system/temp-new/new-fragments/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Fragments -These are Nix modules which aim to configure only one aspect of the system. -This can include installing and configuring single programs such as Steam, -MangoHud, Syncthing, or OpenSSH, as well as setting generic options for certain -hardware setups, such as NVIDIA PRIME Offloading. - -## TODO -These are some fragments that I want to create: -- hardware/nvidia -- hardware/nvidia-supergfxd -- hardware/printing - - CUPS - - QZTray (maybe?) -- software/steam -- software/syncthing -- software/libreoffice -- software/ssh -- software/gnupg -- software/pam-gnupg (dep. software/gnupg) diff --git a/system/temp-new/new-fragments/android.nix b/system/temp-new/new-fragments/android.nix deleted file mode 100644 index 39a069c..0000000 --- a/system/temp-new/new-fragments/android.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ config, lib, pkgs, outputs, vars, ...}@args: -{ - imports = [ outputs.nixosModules.adb ]; - - config = { - programs.adb.enable = true; - users.users.${vars.username}.extraGroups = [ "adbusers" ]; - }; -} diff --git a/system/temp-new/new-fragments/debugging.nix b/system/temp-new/new-fragments/debugging.nix deleted file mode 100644 index 0bde8b4..0000000 --- a/system/temp-new/new-fragments/debugging.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ config, lib, pkgs, ...}: -{ - environment = { - enableDebugInfo = true; - systemPackages = with pkgs; [ - gdb - ]; - }; -} diff --git a/system/temp-new/plasma.nix b/system/temp-new/plasma.nix deleted file mode 100644 index f1dc0f4..0000000 --- a/system/temp-new/plasma.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ config, lib, pkgs, ...}: -let - sleep = "${pkgs.coreutils}/bin/sleep"; - systemctl = "${pkgs.systemd}/bin/systemctl"; - inherit (lib) mkIf mkEnableOption mkForce mkDefault; - cfg = config.nixfiles.session.plasma; -in -{ - # imports = [ - # ./desktop-common.nix - # ]; - - options.nixfiles.session.plasma = { - enable = mkEnableOption "KDE Plasma session"; - }; - - config = mkIf cfg.enable { - nixfiles.common.desktop.enable = true; - - services.xserver.displayManager.sddm.enable = mkDefault true; - services.xserver.desktopManager.plasma5.enable = true; - services.xserver.displayManager.defaultSession = "plasmawayland"; - programs.kdeconnect.enable = mkDefault true; - - systemd.user = { - services.restart-xdg-desktop-portal-kde = { - enable = true; - description = "hack to fix xdg-desktop-portal on kde"; - wantedBy = [ "graphical-session.target" ]; - after = [ "plasma-core.target" "xdg-desktop-portal.service" ]; - requisite = [ "plasma-core.target" ]; - - serviceConfig = { - ExecStart = [ - "${sleep} 5" - "${systemctl} --user restart xdg-desktop-portal.service" - ]; - Type = "oneshot"; - RemainAfterExit = "yes"; - }; - }; - }; - - environment.systemPackages = with pkgs; [ - # this fixes tiny file dialogs for Minecraft - libsForQt5.kdialog - ]; - }; -} diff --git a/system/temp-new/remote.nix b/system/temp-new/remote.nix deleted file mode 100644 index 78acb17..0000000 --- a/system/temp-new/remote.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ config, lib, pkgs, ... }: -with lib; let - cfg = config.nixfiles.common.remoteAccess; -in -{ - config = lib.mkIf cfg.enable { - # Enable the OpenSSH daemon. - # services.openssh.enable = true; - services.openssh = { - enable = true; - openFirewall = true; - settings = { - - }; - }; - - services.tailscale.enable = true; - - networking.wireguard.enable = true; - }; - options = { - nixfiles.common.remoteAccess = mkEnbaleOption "remote access options" ; }; -} diff --git a/system/temp-new/wm-common.nix b/system/temp-new/wm-common.nix deleted file mode 100644 index d3bd487..0000000 --- a/system/temp-new/wm-common.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ pkgs, lib, config, options, ...}: -let - inherit (lib) mkDefault mkIf mkEnableOption; - cfg = config.nixfiles.common.window-manager; -in -{ - config = mkIf cfg.enable { - # Common options for standalone window managers; many of these (or - # alternatives thereof) are pulled in by desktop environments. - services = { - power-profiles-daemon.enable = mkDefault true; - blueman.enable = mkDefault config.hardware.bluetooth.enable; - }; - programs = { - nm-applet.enable = mkDefault config.networking.networkmanager.enable; - }; - }; - options = { - nixfiles.common.window-manager.enable = mkEnableOption "common window manager configuration"; - }; -} diff --git a/system/wm-common.nix b/system/wm-common.nix index 606f19b..d3bd487 100644 --- a/system/wm-common.nix +++ b/system/wm-common.nix @@ -1,15 +1,21 @@ { pkgs, lib, config, options, ...}: let - inherit (lib) mkDefault; + inherit (lib) mkDefault mkIf mkEnableOption; + cfg = config.nixfiles.common.window-manager; in { - # Common options for standalone window managers; many of these (or - # alternatives thereof) are pulled in by desktop environments. - services = { - power-profiles-daemon.enable = mkDefault true; - blueman.enable = mkDefault config.hardware.bluetooth.enable; + config = mkIf cfg.enable { + # Common options for standalone window managers; many of these (or + # alternatives thereof) are pulled in by desktop environments. + services = { + power-profiles-daemon.enable = mkDefault true; + blueman.enable = mkDefault config.hardware.bluetooth.enable; + }; + programs = { + nm-applet.enable = mkDefault config.networking.networkmanager.enable; + }; }; - programs = { - nm-applet.enable = mkDefault config.networking.networkmanager.enable; + options = { + nixfiles.common.window-manager.enable = mkEnableOption "common window manager configuration"; }; } From 6ea5c557a3d61bca24aef49b25007d2d51038336 Mon Sep 17 00:00:00 2001 From: NullBite <me@nullbite.com> Date: Thu, 8 Feb 2024 14:48:09 +0100 Subject: [PATCH 03/13] Reorganize system modules --- system/README.md | 4 +++- system/common/default.nix | 9 +++++++++ system/{desktop-common.nix => common/desktop.nix} | 0 system/{fragments => common}/me.nix | 0 system/{ => common}/remote.nix | 0 system/{wm-common.nix => common/wm.nix} | 0 system/{new-fragments => fragments}/README.md | 0 system/{new-fragments => fragments}/android.nix | 0 system/{new-fragments => fragments}/debugging.nix | 0 system/{fragments => }/hardware/bluetooth.nix | 0 system/hardware/default.nix | 9 +++++++++ .../hardware/nvidia-modeset.nix => hardware/nvidia.nix} | 0 system/{fragments => hardware}/opengl.nix | 0 system/{fragments => hardware}/sound.nix | 0 system/package-sets/default.nix | 7 +++++++ system/{ => package-sets}/gaming.nix | 0 system/{fragments => package-sets}/multimedia.nix | 0 system/{ => profile}/base.nix | 0 system/profile/default.nix | 6 ++++++ system/programs/default.nix | 6 ++++++ system/{fragments/software => programs}/syncthing.nix | 0 system/sessions/default.nix | 5 +++++ system/{ => sessions}/hyprland.nix | 0 system/{ => sessions}/plasma.nix | 0 24 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 system/common/default.nix rename system/{desktop-common.nix => common/desktop.nix} (100%) rename system/{fragments => common}/me.nix (100%) rename system/{ => common}/remote.nix (100%) rename system/{wm-common.nix => common/wm.nix} (100%) rename system/{new-fragments => fragments}/README.md (100%) rename system/{new-fragments => fragments}/android.nix (100%) rename system/{new-fragments => fragments}/debugging.nix (100%) rename system/{fragments => }/hardware/bluetooth.nix (100%) create mode 100644 system/hardware/default.nix rename system/{fragments/hardware/nvidia-modeset.nix => hardware/nvidia.nix} (100%) rename system/{fragments => hardware}/opengl.nix (100%) rename system/{fragments => hardware}/sound.nix (100%) create mode 100644 system/package-sets/default.nix rename system/{ => package-sets}/gaming.nix (100%) rename system/{fragments => package-sets}/multimedia.nix (100%) rename system/{ => profile}/base.nix (100%) create mode 100644 system/profile/default.nix create mode 100644 system/programs/default.nix rename system/{fragments/software => programs}/syncthing.nix (100%) create mode 100644 system/sessions/default.nix rename system/{ => sessions}/hyprland.nix (100%) rename system/{ => sessions}/plasma.nix (100%) diff --git a/system/README.md b/system/README.md index e91ba36..f066869 100644 --- a/system/README.md +++ b/system/README.md @@ -1,2 +1,4 @@ # system -This directory contains modules and configuration specific to my NixOS configuration. `default.nix` is the entrypoint to my module set; it can safely be loaded without making any configuration changes by default. +This directory contains modules and configuration specific to my NixOS +configuration. `default.nix` is the entrypoint to my module set; it can +safely be loaded without making any configuration changes by default. diff --git a/system/common/default.nix b/system/common/default.nix new file mode 100644 index 0000000..84e16c5 --- /dev/null +++ b/system/common/default.nix @@ -0,0 +1,9 @@ +{...}: +{ + imports = [ + ./desktop.nix + ./me.nix + ./remote.nix + ./wm.nix + ]; +} diff --git a/system/desktop-common.nix b/system/common/desktop.nix similarity index 100% rename from system/desktop-common.nix rename to system/common/desktop.nix diff --git a/system/fragments/me.nix b/system/common/me.nix similarity index 100% rename from system/fragments/me.nix rename to system/common/me.nix diff --git a/system/remote.nix b/system/common/remote.nix similarity index 100% rename from system/remote.nix rename to system/common/remote.nix diff --git a/system/wm-common.nix b/system/common/wm.nix similarity index 100% rename from system/wm-common.nix rename to system/common/wm.nix diff --git a/system/new-fragments/README.md b/system/fragments/README.md similarity index 100% rename from system/new-fragments/README.md rename to system/fragments/README.md diff --git a/system/new-fragments/android.nix b/system/fragments/android.nix similarity index 100% rename from system/new-fragments/android.nix rename to system/fragments/android.nix diff --git a/system/new-fragments/debugging.nix b/system/fragments/debugging.nix similarity index 100% rename from system/new-fragments/debugging.nix rename to system/fragments/debugging.nix diff --git a/system/fragments/hardware/bluetooth.nix b/system/hardware/bluetooth.nix similarity index 100% rename from system/fragments/hardware/bluetooth.nix rename to system/hardware/bluetooth.nix diff --git a/system/hardware/default.nix b/system/hardware/default.nix new file mode 100644 index 0000000..2b2c44c --- /dev/null +++ b/system/hardware/default.nix @@ -0,0 +1,9 @@ +{...}: +{ + imports = [ + ./bluetooth.nix + ./nvidia.nix + ./opengl.nix + ./sound.nix + ]; +} diff --git a/system/fragments/hardware/nvidia-modeset.nix b/system/hardware/nvidia.nix similarity index 100% rename from system/fragments/hardware/nvidia-modeset.nix rename to system/hardware/nvidia.nix diff --git a/system/fragments/opengl.nix b/system/hardware/opengl.nix similarity index 100% rename from system/fragments/opengl.nix rename to system/hardware/opengl.nix diff --git a/system/fragments/sound.nix b/system/hardware/sound.nix similarity index 100% rename from system/fragments/sound.nix rename to system/hardware/sound.nix diff --git a/system/package-sets/default.nix b/system/package-sets/default.nix new file mode 100644 index 0000000..ba7cdaf --- /dev/null +++ b/system/package-sets/default.nix @@ -0,0 +1,7 @@ +{...}: +{ + imports = [ + ./gaming.nix + ./multimedia.nix + ]; +} diff --git a/system/gaming.nix b/system/package-sets/gaming.nix similarity index 100% rename from system/gaming.nix rename to system/package-sets/gaming.nix diff --git a/system/fragments/multimedia.nix b/system/package-sets/multimedia.nix similarity index 100% rename from system/fragments/multimedia.nix rename to system/package-sets/multimedia.nix diff --git a/system/base.nix b/system/profile/base.nix similarity index 100% rename from system/base.nix rename to system/profile/base.nix diff --git a/system/profile/default.nix b/system/profile/default.nix new file mode 100644 index 0000000..8d83827 --- /dev/null +++ b/system/profile/default.nix @@ -0,0 +1,6 @@ +{...}: +{ + imports = [ + ./base.nix + ]; +} diff --git a/system/programs/default.nix b/system/programs/default.nix new file mode 100644 index 0000000..eb50170 --- /dev/null +++ b/system/programs/default.nix @@ -0,0 +1,6 @@ +{...}: +{ + imports = [ + ./syncthing.nix + ]; +} diff --git a/system/fragments/software/syncthing.nix b/system/programs/syncthing.nix similarity index 100% rename from system/fragments/software/syncthing.nix rename to system/programs/syncthing.nix diff --git a/system/sessions/default.nix b/system/sessions/default.nix new file mode 100644 index 0000000..d8474e3 --- /dev/null +++ b/system/sessions/default.nix @@ -0,0 +1,5 @@ +{...}: +{ imports = [ + ./hyprland.nix + ./plasma.nix +];} diff --git a/system/hyprland.nix b/system/sessions/hyprland.nix similarity index 100% rename from system/hyprland.nix rename to system/sessions/hyprland.nix diff --git a/system/plasma.nix b/system/sessions/plasma.nix similarity index 100% rename from system/plasma.nix rename to system/sessions/plasma.nix From e99905a096a8c33125d1839ee1f417e614c5e3e6 Mon Sep 17 00:00:00 2001 From: NullBite <me@nullbite.com> Date: Thu, 8 Feb 2024 14:49:33 +0100 Subject: [PATCH 04/13] Delete fragments/README.md --- system/fragments/README.md | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 system/fragments/README.md diff --git a/system/fragments/README.md b/system/fragments/README.md deleted file mode 100644 index 3031dac..0000000 --- a/system/fragments/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Fragments -These are Nix modules which aim to configure only one aspect of the system. -This can include installing and configuring single programs such as Steam, -MangoHud, Syncthing, or OpenSSH, as well as setting generic options for certain -hardware setups, such as NVIDIA PRIME Offloading. - -## TODO -These are some fragments that I want to create: -- hardware/nvidia -- hardware/nvidia-supergfxd -- hardware/printing - - CUPS - - QZTray (maybe?) -- software/steam -- software/syncthing -- software/libreoffice -- software/ssh -- software/gnupg -- software/pam-gnupg (dep. software/gnupg) From 1dedbbb489d6e2088d02d879d6ad70dadb644f5f Mon Sep 17 00:00:00 2001 From: NullBite <me@nullbite.com> Date: Thu, 8 Feb 2024 15:08:16 +0100 Subject: [PATCH 05/13] Rename some common options to hardware --- system/hardware/bluetooth.nix | 4 ++-- system/hardware/nvidia.nix | 6 +++--- system/hardware/opengl.nix | 4 ++-- system/hardware/sound.nix | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/system/hardware/bluetooth.nix b/system/hardware/bluetooth.nix index 1a8c7fb..a6916aa 100644 --- a/system/hardware/bluetooth.nix +++ b/system/hardware/bluetooth.nix @@ -1,9 +1,9 @@ { config, lib, pkgs, ...}: let - cfg = config.nixfiles.common.bluetooth; + cfg = config.nixfiles.hardware.bluetooth; in { - options.nixfiles.common.bluetooth = { + options.nixfiles.hardware.bluetooth = { enable = lib.mkEnableOption "Bluetooth"; }; diff --git a/system/hardware/nvidia.nix b/system/hardware/nvidia.nix index 1011b96..7b36584 100644 --- a/system/hardware/nvidia.nix +++ b/system/hardware/nvidia.nix @@ -1,6 +1,6 @@ { config, lib, pkgs, ...}: let - cfg = config.nixfiles.common.nvidia; + cfg = config.nixfiles.hardware.nvidia; in { # imports = [ @@ -8,13 +8,13 @@ in # ]; # Load nvidia driver for Xorg and Wayland - options.nixfiles.common.nvidia = { + options.nixfiles.hardware.nvidia = { modesetting.enable = lib.mkEnableOption "NVIDIA configuration with modesetting"; }; config = lib.mkIf cfg.modesetting.enable { services.xserver.videoDrivers = ["nvidia"]; - nixfiles.common.opengl.enable = true; + nixfiles.hardware.opengl.enable = true; hardware.nvidia = { diff --git a/system/hardware/opengl.nix b/system/hardware/opengl.nix index afad162..b48a19b 100644 --- a/system/hardware/opengl.nix +++ b/system/hardware/opengl.nix @@ -1,9 +1,9 @@ { config, lib, pkgs, ...}: let - cfg = config.nixfiles.common.opengl; + cfg = config.nixfiles.hardware.opengl; in { - options.nixfiles.common.opengl.enable = lib.mkEnableOption "OpenGL configuration"; + options.nixfiles.hardware.opengl.enable = lib.mkEnableOption "OpenGL configuration"; config = lib.mkIf cfg.enable { # Enable OpenGL hardware.opengl = { diff --git a/system/hardware/sound.nix b/system/hardware/sound.nix index cf52088..ab264bd 100644 --- a/system/hardware/sound.nix +++ b/system/hardware/sound.nix @@ -1,6 +1,6 @@ { config, lib, pkgs, ...}: let - cfg = config.nixfiles.common.sound; + cfg = config.nixfiles.hardware.sound; inherit (lib) mkEnableOption mkIf mkDefault; in { @@ -8,7 +8,7 @@ in # sound.enable = true; # hardware.pulseaudio.enable = true; - options.nixfiles.common.sound = { + options.nixfiles.hardware.sound = { enable = mkEnableOption "sound configuration"; }; From e4ad12e39e07d91882e2ed6177070dd786a05ae0 Mon Sep 17 00:00:00 2001 From: NullBite <me@nullbite.com> Date: Thu, 8 Feb 2024 15:08:40 +0100 Subject: [PATCH 06/13] system: import all modules --- system/default.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/system/default.nix b/system/default.nix index 09dcd6a..d3ce6be 100644 --- a/system/default.nix +++ b/system/default.nix @@ -4,6 +4,12 @@ let in { imports = [ + ./common + ./hardware + ./package-sets + ./profile + ./programs + ./sessions ]; config = {}; options.nixfiles = { From dc9ac237ff54561eb504d2130ad2401534bf3c2d Mon Sep 17 00:00:00 2001 From: NullBite <me@nullbite.com> Date: Thu, 8 Feb 2024 15:11:14 +0100 Subject: [PATCH 07/13] Rename (nixfiles.common) window-manager to wm --- system/common/wm.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system/common/wm.nix b/system/common/wm.nix index d3bd487..30b6f20 100644 --- a/system/common/wm.nix +++ b/system/common/wm.nix @@ -1,7 +1,7 @@ { pkgs, lib, config, options, ...}: let inherit (lib) mkDefault mkIf mkEnableOption; - cfg = config.nixfiles.common.window-manager; + cfg = config.nixfiles.common.wm; in { config = mkIf cfg.enable { @@ -16,6 +16,6 @@ in }; }; options = { - nixfiles.common.window-manager.enable = mkEnableOption "common window manager configuration"; + nixfiles.common.wm.enable = mkEnableOption "common window manager configuration"; }; } From dba31a2cbb59cda3203c33f3b8d6599ea8eae4e0 Mon Sep 17 00:00:00 2001 From: NullBite <me@nullbite.com> Date: Thu, 8 Feb 2024 15:20:44 +0100 Subject: [PATCH 08/13] Add option dependencies for desktop and hyprland --- system/common/desktop.nix | 9 +++++---- system/sessions/hyprland.nix | 6 ++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/system/common/desktop.nix b/system/common/desktop.nix index 6449a28..61119d8 100644 --- a/system/common/desktop.nix +++ b/system/common/desktop.nix @@ -19,11 +19,12 @@ in config = mkIf cfg.enable { # enable option sets nixfiles = { - packageSets.multimedia.enable = true; + profile.base.enable = true; + packageSets.multimedia.enable = mkDefault true; + programs.syncthing.enable = mkDefault true; common = { - syncthing.enable = true; - bluetooth.enable = true; - sound.enable = true; + bluetooth.enable = mkDefault true; + sound.enable = mkDefault true; }; }; diff --git a/system/sessions/hyprland.nix b/system/sessions/hyprland.nix index a9a9598..a55ba7d 100644 --- a/system/sessions/hyprland.nix +++ b/system/sessions/hyprland.nix @@ -14,6 +14,12 @@ in }; config = lib.mkIf cfg.enable { + # enable dependencies + nixfiles.common = { + desktop.enable = true; + wm.enable = true; + }; + services.xserver.displayManager.sddm.enable = true; programs.hyprland = { From 8146099eb613b92f4e48e2e9583c3230c15528a0 Mon Sep 17 00:00:00 2001 From: NullBite <me@nullbite.com> Date: Thu, 8 Feb 2024 15:38:49 +0100 Subject: [PATCH 09/13] remove broken `with` statement (average nix lang) --- system/common/remote.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system/common/remote.nix b/system/common/remote.nix index 78acb17..f3c1008 100644 --- a/system/common/remote.nix +++ b/system/common/remote.nix @@ -1,5 +1,5 @@ { config, lib, pkgs, ... }: -with lib; let +let cfg = config.nixfiles.common.remoteAccess; in { @@ -19,5 +19,5 @@ in networking.wireguard.enable = true; }; options = { - nixfiles.common.remoteAccess = mkEnbaleOption "remote access options" ; }; + nixfiles.common.remoteAccess = lib.mkEnbaleOption "remote access options" ; }; } From 405f7b432924bb6305a0694007c8bc949f5f6de6 Mon Sep 17 00:00:00 2001 From: NullBite <me@nullbite.com> Date: Thu, 8 Feb 2024 15:39:51 +0100 Subject: [PATCH 10/13] Fix typo --- system/common/remote.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/common/remote.nix b/system/common/remote.nix index f3c1008..b941501 100644 --- a/system/common/remote.nix +++ b/system/common/remote.nix @@ -19,5 +19,5 @@ in networking.wireguard.enable = true; }; options = { - nixfiles.common.remoteAccess = lib.mkEnbaleOption "remote access options" ; }; + nixfiles.common.remoteAccess = lib.mkEnableOption "remote access options" ; }; } From ff029aea41e27616494bb6cc696be7bff858b8cc Mon Sep 17 00:00:00 2001 From: NullBite <me@nullbite.com> Date: Thu, 8 Feb 2024 16:53:38 +0100 Subject: [PATCH 11/13] Fix a lot of module options --- system/common/desktop.nix | 2 +- system/common/me.nix | 5 ++++- system/common/remote.nix | 2 +- system/profile/base.nix | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/system/common/desktop.nix b/system/common/desktop.nix index 61119d8..edf5df4 100644 --- a/system/common/desktop.nix +++ b/system/common/desktop.nix @@ -22,7 +22,7 @@ in profile.base.enable = true; packageSets.multimedia.enable = mkDefault true; programs.syncthing.enable = mkDefault true; - common = { + hardware = { bluetooth.enable = mkDefault true; sound.enable = mkDefault true; }; diff --git a/system/common/me.nix b/system/common/me.nix index c60924d..74c3271 100644 --- a/system/common/me.nix +++ b/system/common/me.nix @@ -3,7 +3,10 @@ let cfg = config.nixfiles.common.me; in { - options.nixfiles.common.me = lib.mkEnableOption "my user account"; + options.nixfiles.common.me = { + enable = lib.mkEnableOption "my user account"; + }; + config = lib.mkIf cfg.enable { users.users.nullbite = { isNormalUser = true; diff --git a/system/common/remote.nix b/system/common/remote.nix index b941501..699e0d2 100644 --- a/system/common/remote.nix +++ b/system/common/remote.nix @@ -19,5 +19,5 @@ in networking.wireguard.enable = true; }; options = { - nixfiles.common.remoteAccess = lib.mkEnableOption "remote access options" ; }; + nixfiles.common.remoteAccess.enable = lib.mkEnableOption "remote access options" ; }; } diff --git a/system/profile/base.nix b/system/profile/base.nix index 8301dd4..589f681 100644 --- a/system/profile/base.nix +++ b/system/profile/base.nix @@ -12,7 +12,7 @@ in (lib.mkIf cfg.enable { # Enable my account - nixfiles.common.me = lib.mkDefault true; + nixfiles.common.me.enable = lib.mkDefault true; # locale settings i18n = { From da9ffbd320cb76b9e2be07575924520e917c2eb3 Mon Sep 17 00:00:00 2001 From: NullBite <me@nullbite.com> Date: Thu, 8 Feb 2024 18:25:31 +0100 Subject: [PATCH 12/13] small fixes --- modules/home-manager/default.nix | 1 + system/hardware/sound.nix | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/home-manager/default.nix b/modules/home-manager/default.nix index 0967ef4..da2b766 100644 --- a/modules/home-manager/default.nix +++ b/modules/home-manager/default.nix @@ -1 +1,2 @@ +_: {} diff --git a/system/hardware/sound.nix b/system/hardware/sound.nix index ab264bd..1e8b92f 100644 --- a/system/hardware/sound.nix +++ b/system/hardware/sound.nix @@ -1,7 +1,7 @@ { config, lib, pkgs, ...}: let cfg = config.nixfiles.hardware.sound; - inherit (lib) mkEnableOption mkIf mkDefault; + inherit (lib) optionals mkEnableOption mkIf mkDefault; in { # Enable sound. From 5dc2cfad0d74ccb6724c345985e63f3dd8da2d10 Mon Sep 17 00:00:00 2001 From: NullBite <me@nullbite.com> Date: Thu, 8 Feb 2024 18:34:31 +0100 Subject: [PATCH 13/13] slab: switch to nixfiles options --- hosts/slab/configuration.nix | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/hosts/slab/configuration.nix b/hosts/slab/configuration.nix index 1982631..469884d 100644 --- a/hosts/slab/configuration.nix +++ b/hosts/slab/configuration.nix @@ -17,14 +17,18 @@ [ # Include the results of the hardware scan. ./hardware-configuration.nix + ../../system # nixfiles modules ./nvidia-optimus.nix - ../../system/remote.nix - # ../../system/plasma.nix - ../../system/fragments/opengl.nix - ../../system/gaming.nix - ../../system/android.nix - ../../system/hyprland.nix + ../../system/fragments/android.nix ]; + nixfiles = { + common.remoteAccess.enable = true; + hardware.opengl.enable = true; + packageSets.gaming.enable = true; + sessions.hyprland.enable = true; + sessions.plasma.enable = lib.mkDefault false; + }; + networking.hostName = "slab";