diff --git a/flake.nix b/flake.nix index 33be7a1..e5701f0 100644 --- a/flake.nix +++ b/flake.nix @@ -28,7 +28,6 @@ }; modules = [ ./hosts/cap-slim7/configuration.nix - ./modules/nixos/hyprland-amd.nix inputs.home-manager.nixosModules.default nixos-hardware.nixosModules.lenovo-legion-16arha7 ]; @@ -38,7 +37,6 @@ system = "x86_64-linux"; modules = [ ./hosts/cap-nr200p/configuration.nix - ./modules/nixos/hyprland.nix inputs.home-manager.nixosModules.default ]; }; @@ -63,7 +61,6 @@ username = "caperren"; homeDirectory = "/home/caperren"; }; - }; - + }; }; } diff --git a/hosts/cap-nr200p/configuration.nix b/hosts/cap-nr200p/configuration.nix index 5af509f..1be80a6 100644 --- a/hosts/cap-nr200p/configuration.nix +++ b/hosts/cap-nr200p/configuration.nix @@ -11,413 +11,46 @@ { imports = [ - # Include the results of the hardware scan. + # Hardware Scan ./hardware-configuration.nix + + # Users + ../../users/caperren/caperren.nix + + # System Configuration + ../../modules/system/cpu-amd.nix + ../../modules/system/desktop.nix + ../../modules/system/fonts.nix + ../../modules/system/gpu-nvidia.nix + ../../modules/system/hyprland.nix + ../../modules/system/internationalization.nix + ../../modules/system/networking.nix + ../../modules/system/nix-settings.nix + ../../modules/system/pipewire.nix + ../../modules/system/security.nix + ../../modules/system/systemd-boot.nix + + # Application Groups + ../../modules/application-groups/3d-design.nix + ../../modules/application-groups/android.nix + ../../modules/application-groups/downloads.nix + ../../modules/application-groups/gaming.nix + ../../modules/application-groups/homelab.nix + ../../modules/application-groups/media.nix + ../../modules/application-groups/pcb-design.nix + ../../modules/application-groups/productivity.nix + ../../modules/application-groups/programming.nix + ../../modules/application-groups/social.nix + ../../modules/application-groups/system-utilities.nix + ../../modules/application-groups/virtualization.nix + ../../modules/application-groups/web.nix ]; - hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; - - boot = { - # Make v4l2loopback kernel module available to NixOS. - extraModulePackages = with config.boot.kernelPackages; [ - v4l2loopback - ]; - # Activate kernel module(s). - kernelModules = [ - # Virtual camera. - "v4l2loopback" - # Virtual Microphone. Custom DroidCam v4l2loopback driver needed for audio. - # "snd-aloop" - ]; - }; - - boot.extraModprobeConfig = '' - # exclusive_caps: Skype, Zoom, Teams etc. will only show device when actually streaming - # card_label: Name of virtual camera, how it'll show up in Skype, Zoom, Teams - # https://github.com/umlaeute/v4l2loopback - options v4l2loopback exclusive_caps=1 card_label="Virtual Camera" - ''; - - # - nix.settings.download-buffer-size = 524288000; - - # Bootloader. - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - - networking.hostName = "cap-nr200p"; # 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; - - # hardware.u2f.enable = true; - - services.flatpak.enable = true; - - # Enable flakes - nix.settings.experimental-features = [ - "nix-command" - "flakes" - ]; # -# + networking.hostName = "cap-nr200p"; # Define your hostname. # Set your time zone. time.timeZone = "America/Los_Angeles"; - # Select internationalisation properties. - i18n.defaultLocale = "en_US.UTF-8"; - - i18n.extraLocaleSettings = { - LC_ADDRESS = "en_US.UTF-8"; - LC_IDENTIFICATION = "en_US.UTF-8"; - LC_MEASUREMENT = "en_US.UTF-8"; - LC_MONETARY = "en_US.UTF-8"; - LC_NAME = "en_US.UTF-8"; - LC_NUMERIC = "en_US.UTF-8"; - LC_PAPER = "en_US.UTF-8"; - LC_TELEPHONE = "en_US.UTF-8"; - LC_TIME = "en_US.UTF-8"; - }; - - # Enable the X11 windowing system. - # services.xserver.enable = true; - - # Enable the XFCE Desktop Environment. - # services.xserver.displayManager.lightdm.enable = true; - # services.xserver.desktopManager.xfce.enable = true; - - # Configure keymap in X11 - services.xserver.xkb = { - layout = "us"; - variant = ""; - }; - - # Enable CUPS to print documents. - services.printing.enable = true; - - services.avahi = { - enable = true; - nssmdns4 = true; - openFirewall = 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.caperren = { - isNormalUser = true; - description = "Corwin Perren"; - extraGroups = [ - "networkmanager" - "wheel" - "input" - "dialout" - "plugdev" - "adbusers" - ]; - packages = with pkgs; [ - # thunderbird - ]; - }; - # users.users.crestline = { - # isNormalUser = true; - # description = "Crestline"; - # extraGroups = [ - # "networkmanager" - # "wheel" - # "input" - # "dialout" - # ]; - # packages = with pkgs; [ - # # thunderbird - # ]; - - # }; - - #services.displayManager.autoLogin = { - # enable = true; - # user = "crestline"; - #}; - - #services.xserver.displayManager.gdm.autoLogin.delay = 60; - - # 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; [ - # vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. - # wget - lf - git - wofi - nvtopPackages.full - htop - iftop - iotop - pulsemixer - arandr - util-linux - usbutils - telegram-desktop - discord - # spotify - vscode-with-extensions - swayimg - pavucontrol - networkmanagerapplet - pasystray - glava - spotify-player - hyprpicker - unetbootin - lf - dnsutils - unzip - playerctl - google-chrome - killall - #jetbrains.pycharm-professional - wget - jq - rofi-bluetooth - wl-clipboard - networkmanager - alsa-utils - nixfmt-rfc-style - mako - podman - kicad - obsidian - speedcrunch - deadbeef - vlc - sox - audacity - platformio - - # flatcam - pcb2gcode - jetbrains-toolbox - arduino-ide - # python311Full - gcc - stm32cubemx - stm32flash - easyeffects - ncspot - #yubikey-personalization-gui - #yubikey-manager-qt - #zoom-us - mangohud - distrobox - # plex-desktop - rpi-imager - rpiboot - imagemagick - prusa-slicer - freecad - wlogout - gparted - nix-update - ffmpeg-full - projectm_3 - heroic - flameshot - krename - xfce.mousepad - yt-dlp - soapysdr - soapyrtlsdr - # sdrpp - # brave - python3 - #nodejs_23 - streamdeck-ui - scrcpy - kanshi - #wsmancli - #realvnc-vnc-viewer - ncdu - hyprlock - openrgb-with-all-plugins - swayidle - transmission_4-qt - nixos-generators - openwsman - wsmancli - bs-manager - ]; - - services.monado = { - enable = true; - defaultRuntime = true; - highPriority = true; - }; - - services.hardware.openrgb.enable = true; - - services.meshcentral.enable = true; - programs.ydotool.enable = true; - programs.adb.enable = true; - - hardware.logitech.wireless.enable = true; - hardware.logitech.wireless.enableGraphical = true; - - services.sunshine = { - enable = true; - autoStart = true; - capSysAdmin = true; - openFirewall = true; - - }; - - programs.bash.shellAliases = { - nixrebuild = "pushd /etc/nixos && { trap 'popd' EXIT; sudo nixos-rebuild switch --flake .#$(hostname); }"; - nixupdate = "cd /etc/nixos && sudo nix flake update && sudo nixos-rebuild switch --flake .#$(hostname)"; - nixedit = "sudo nano /etc/nixos/hosts/$(hostname)/configuration.nix"; - - nixlimitfive = "sudo nix-env --list-generations --profile /nix/var/nix/profiles/system | head -n -5 | cut -d ' ' -f2 | xargs -I {} sudo nix-env --delete-generations --profile /nix/var/nix/profiles/system {}"; - - scrwebcam = "sudo pkill scrcpy ; sudo modprobe -r v4l2loopback ; sudo modprobe v4l2loopback && nohup scrcpy --camera-facing=back --video-source=camera --v4l2-sink=/dev/video0 --no-window --no-audio-playback 2>&1 1>/dev/null"; - }; - - virtualisation.waydroid.enable = true; - hardware.steam-hardware.enable = true; - - virtualisation.podman = { - enable = true; - dockerCompat = true; - }; - - services.udev.extraRules = '' - # ST-LINK V2 - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2_%n" - - # ST-LINK V2.1 - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2-1_%n" - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3752", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2-1_%n" - - # ST-LINK V3 - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374d", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3loader_%n" - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374e", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n" - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374f", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n" - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3753", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n" - - # CP2101 - CP 2104 - SUBSYSTEMS=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE="600", TAG+="uaccess", SYMLINK+="usb2ser_%n" - - # ATEN UC-232A - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0557", ATTRS{idProduct}=="2008", MODE="600", TAG+="uaccess", SYMLINK+="usb2ser_aten_%n" - ''; - - fonts.fontDir.enable = true; - fonts.fontconfig.enable = true; - fonts.fontconfig.antialias = true; - fonts.packages = with pkgs; [ - noto-fonts - noto-fonts-emoji - liberation_ttf - fira-code - fira-code-symbols - jetbrains-mono - mplus-outline-fonts.githubRelease - dina-font - proggyfonts - font-awesome - nerd-fonts.symbols-only - nerd-fonts.jetbrains-mono - ]; - - programs.thunar.enable = true; - programs.thunar.plugins = with pkgs.xfce; [ - thunar-archive-plugin - thunar-volman - ]; - services.gvfs.enable = true; # Mount, trash, and other functionalities - services.tumbler.enable = true; # Thumbnail support for images - - hardware.bluetooth.enable = true; # enables support for Bluetooth - hardware.bluetooth.powerOnBoot = true; # powers up the default Bluetooth controller on boot - services.blueman.enable = true; - - hardware.rtl-sdr.enable = true; - - security.sudo = { - enable = true; - extraRules = [ - { - commands = [ - { - command = "${pkgs.systemd}/bin/reboot"; - options = [ "NOPASSWD" ]; - } - { - command = "${pkgs.systemd}/bin/poweroff"; - options = [ "NOPASSWD" ]; - } - ]; - groups = [ "wheel" ]; - } - ]; - }; - - programs.steam = { - enable = true; - remotePlay.openFirewall = true; - dedicatedServer.openFirewall = true; - gamescopeSession.enable = true; - }; - - programs.gamescope = { - enable = true; - capSysNice = 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 @@ -425,5 +58,4 @@ # 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 = "23.11"; # Did you read the comment? - } diff --git a/hosts/cap-slim7/configuration.nix b/hosts/cap-slim7/configuration.nix index c5ee952..8ba226b 100644 --- a/hosts/cap-slim7/configuration.nix +++ b/hosts/cap-slim7/configuration.nix @@ -6,418 +6,47 @@ { imports = [ - # Include the results of the hardware scan. + # Hardware Scan ./hardware-configuration.nix + + # Users + ../../users/caperren/caperren.nix + + # System Configuration + ../../modules/system/cpu-amd.nix + ../../modules/system/displaylink.nix + ../../modules/system/fonts.nix + ../../modules/system/gpu-amd.nix + ../../modules/system/hyprland.nix + ../../modules/system/internationalization.nix + ../../modules/system/laptop.nix + ../../modules/system/networking.nix + ../../modules/system/nix-settings.nix + ../../modules/system/pipewire.nix + ../../modules/system/security.nix + ../../modules/system/systemd-boot.nix + + # Application Groups + ../../modules/application-groups/3d-design.nix + ../../modules/application-groups/android.nix + ../../modules/application-groups/downloads.nix + ../../modules/application-groups/gaming.nix + ../../modules/application-groups/homelab.nix + ../../modules/application-groups/media.nix + ../../modules/application-groups/pcb-design.nix + ../../modules/application-groups/productivity.nix + ../../modules/application-groups/programming.nix + ../../modules/application-groups/social.nix + ../../modules/application-groups/system-utilities.nix + ../../modules/application-groups/virtualization.nix + ../../modules/application-groups/web.nix ]; - #boot.kernelPackages = pkgs.linuxPackages_latest; - - # - nix.settings.download-buffer-size = 524288000; - - # Bootloader. - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - boot.loader.grub.configurationLimit = 8; - - networking.hostName = "cap-slim7"; # 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"; - - #security.sudo.extraConfig = '' - # Defaults timestamp_timeout=15 - #''; - - # security.polkit.extraConfig = '' - # polkit.addRule(function(action, subject) { - # if ((action.id == "org.freedesktop.login1.reboot" || - # action.id == "org.freedesktop.login1.poweroff") && - # subject.isInGroup("powerusers")) { - # return polkit.Result.YES; - # } - # }); - # ''; - - # Enable networking - networking.networkmanager.enable = true; - - # Enable flakes - nix.settings.experimental-features = [ - "nix-command" - "flakes" - ]; # -# + networking.hostName = "cap-slim7"; # Set your time zone. time.timeZone = "America/Los_Angeles"; # time.timeZone = "Pacific/Honolulu"; - #time.timeZone = "Europe/Oslo"; - # services.tzupdate.enable = true; - - # Select internationalisation properties. - i18n.defaultLocale = "en_US.UTF-8"; - - i18n.extraLocaleSettings = { - LC_ADDRESS = "en_US.UTF-8"; - LC_IDENTIFICATION = "en_US.UTF-8"; - LC_MEASUREMENT = "en_US.UTF-8"; - LC_MONETARY = "en_US.UTF-8"; - LC_NAME = "en_US.UTF-8"; - LC_NUMERIC = "en_US.UTF-8"; - LC_PAPER = "en_US.UTF-8"; - LC_TELEPHONE = "en_US.UTF-8"; - LC_TIME = "en_US.UTF-8"; - }; - - # Enable the X11 windowing system. - # services.xserver.enable = true; - - # Enable the XFCE Desktop Environment. - # services.xserver.displayManager.lightdm.enable = true; - # services.xserver.desktopManager.xfce.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.caperren = { - isNormalUser = true; - description = "Corwin Perren"; - extraGroups = [ - "networkmanager" - "wheel" - "input" - "dialout" - "plugdev" - "adbusers" - ]; - packages = with pkgs; [ - # thunderbird - ]; - }; - - # 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; [ - # droidcam-obs - # teensyduino - # ]; - # plugins = with obs-studio-plugins; [ - # PKGS END - # bottles - # lenovo-legion - obs-studio - #(wrapOBS { - #arduino-ide - #audacity - #deadbeef - #dolphin-emu - #dualsensectl - #easyeffects - #flameshot - #gcc - #glmark2 - #heroic - #jetbrains.pycharm-professional - #lf - #lf - #librewolf - #lutris - #meshcentral - #pcb2gcode - #projectm_3 - #python311Full - #qemu - #quickemu - #rofi-bluetooth - #s-tui - #scrcpy - #sox - #stm32cubemx - #stm32flash - #teensy-udev-rules - #transmission_4-qt - #via - #vlc - #vscode - #winetricks - #}) - vlc - alsa-utils - arandr - brightnessctl - discord - dnsutils - git - glava - google-chrome - htop - hyprpicker - iftop - iotop - jetbrains-toolbox - flameshot - jq - kanshi - killall - mako - ncdu - networkmanager - networkmanagerapplet - nixfmt-rfc-style - nodejs - nvtopPackages.full - obsidian - pasystray - pavucontrol - playerctl - podman - powertop - pulsemixer - speedcrunch - spotify-player - streamdeck-ui - telegram-desktop - unetbootin - unzip - usbutils - util-linux - wget - wl-clipboard - wlogout - wofi - xfce.mousepad - imagemagick - hyprlock - # plex-desktop - darktable - arduino - yt-dlp - nmap - signal-desktop - swayidle - hyprlock - pciutils - s-tui - woeusb - gparted - ]; - - hardware.logitech.wireless.enable = true; - hardware.logitech.wireless.enableGraphical = true; - - #programs.adb.enable = true; - services.meshcentral.enable = true; - services.xserver.videoDrivers = [ - "displaylink" - "modesetting" - ]; - programs.ydotool.enable = true; - - #boot.extraModulePackages = with config.boot.kernelPackages; [ - # v4l2loopback - #]; - #boot.extraModprobeConfig = '' - # options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1 - #''; - - #programs.virt-manager.enable = true; - #users.groups.libvirtd.members = [ "caperren" ]; - #virtualisation.libvirtd.enable = true; - #virtualisation.spiceUSBRedirection.enable = true; - #services.spice-vdagentd.enable = true; - - # services.automatic-timezoned.enable = true; - - programs.bash.shellAliases = { - nixrebuild = "pushd /etc/nixos && { trap 'popd' EXIT; sudo nixos-rebuild switch --flake .#$(hostname); }"; - nixupdate = "cd /etc/nixos && sudo nix flake update && sudo nixos-rebuild switch --flake .#$(hostname)"; - nixedit = "sudo nano /etc/nixos/hosts/$(hostname)/configuration.nix"; - - nixlimitfive = "sudo nix-env --list-generations --profile /nix/var/nix/profiles/system | head -n -5 | cut -d ' ' -f2 | xargs -I {} sudo nix-env --delete-generations --profile /nix/var/nix/profiles/system {}"; - }; - - #programs.appimage = { - # enable = true; - # binfmt = true; - #}; - - # services.power-profiles-daemon.enable = true; - - services.tlp = { - enable = true; - settings = { - ##### Defaults ###### - # WIFI - WIFI_PWR_ON_AC = "off"; - WIFI_PWR_ON_BAT = "off"; - - # AC - CPU_MIN_PERF_ON_AC = 0; - - # BATT - CPU_MIN_PERF_ON_BAT = 0; - CPU_MAX_PERF_ON_BAT = 35; - - CPU_SCALING_GOVERNOR_ON_BAT = "powersave"; - CPU_ENERGY_PERF_POLICY_ON_BAT = "power"; - - START_CHARGE_THRESH_BAT0 = 1; # On non-thinkpad lenovo, this sets conservation mode to 0 - STOP_CHARGE_THRESH_BAT0 = 1; # ..., but to 1 - - ###### Airplane Settings ##### - # AC - # CPU_MAX_PERF_ON_AC = 35; - - # CPU_SCALING_GOVERNOR_ON_AC = "powersave"; - # CPU_ENERGY_PERF_POLICY_ON_AC = "power"; - - ###### Normal Settings ###### - # AC - CPU_MAX_PERF_ON_AC = 100; - - CPU_SCALING_GOVERNOR_ON_AC = "performanc"; - CPU_ENERGY_PERF_POLICY_ON_AC = "performance"; - - # BATT - - ##### Special Overrides ##### - #Optional helps save long term battery health - # START_CHARGE_THRESH_BAT0 = 0; # On non-thinkpad lenovo, this sets conservation mode to 0 - # STOP_CHARGE_THRESH_BAT0 = 0; # ..., but to 1 - }; - }; - - #hardware.keyboard.qmk.enable = true; - #services.udev.packages = [ pkgs.via ]; - services.udev.extraRules = '' - # ST-LINK V2 - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2_%n" - - # ST-LINK V2.1 - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2-1_%n" - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3752", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2-1_%n" - - # ST-LINK V3 - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374d", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3loader_%n" - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374e", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n" - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374f", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n" - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3753", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n" - - # CP2101 - CP 2104 - SUBSYSTEMS=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE="600", TAG+="uaccess", SYMLINK+="usb2ser_%n" - - # ATEN UC-232A - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0557", ATTRS{idProduct}=="2008", MODE="600", TAG+="uaccess", SYMLINK+="usb2ser_aten_%n" - ''; - - fonts.fontDir.enable = true; - fonts.fontconfig.enable = true; - fonts.fontconfig.antialias = true; - fonts.packages = with pkgs; [ - noto-fonts - noto-fonts-emoji - liberation_ttf - fira-code - fira-code-symbols - jetbrains-mono - mplus-outline-fonts.githubRelease - dina-font - proggyfonts - font-awesome - nerd-fonts.symbols-only - nerd-fonts.jetbrains-mono - ]; - - programs.thunar.enable = true; - programs.thunar.plugins = with pkgs.xfce; [ - thunar-archive-plugin - thunar-volman - ]; - services.gvfs.enable = true; # Mount, trash, and other functionalities - services.tumbler.enable = true; # Thumbnail support for images - - hardware.bluetooth.enable = true; # enables support for Bluetooth - hardware.bluetooth.powerOnBoot = true; # powers up the default Bluetooth controller on boot - services.blueman.enable = true; - - security.sudo = { - enable = true; - extraRules = [ - { - commands = [ - { - command = "${pkgs.systemd}/bin/reboot"; - options = [ "NOPASSWD" ]; - } - { - command = "${pkgs.systemd}/bin/poweroff"; - options = [ "NOPASSWD" ]; - } - ]; - groups = [ "wheel" ]; - } - ]; - }; - - programs.steam = { - enable = true; - remotePlay.openFirewall = true; - dedicatedServer.openFirewall = true; - gamescopeSession.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 diff --git a/initial_setup.sh b/initial_setup.sh index 0e40eb0..606cd55 100755 --- a/initial_setup.sh +++ b/initial_setup.sh @@ -6,7 +6,7 @@ set -e SCRIPT_DIR=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")") GIT_REPO_NAME="nixos-configs" -GIT_RELEASE_BRANCH="playground" +GIT_RELEASE_BRANCH="$(hostname)" GIT_REPO_URL="git@github.com:caperren/$GIT_REPO_NAME.git" NIXOS_REPO_CONFIG_PARENT_PATH="/opt" diff --git a/modules/application-groups/3d-design.nix b/modules/application-groups/3d-design.nix new file mode 100644 index 0000000..4048143 --- /dev/null +++ b/modules/application-groups/3d-design.nix @@ -0,0 +1,8 @@ +{ config, pkgs, ... }: +{ + environment.systemPackages = with pkgs; [ + prusa-slicer + freecad + ]; + +} diff --git a/modules/application-groups/android.nix b/modules/application-groups/android.nix new file mode 100644 index 0000000..df68489 --- /dev/null +++ b/modules/application-groups/android.nix @@ -0,0 +1,5 @@ +{ config, pkgs, ... }: +{ + programs.adb.enable = true; + virtualisation.waydroid.enable = true; +} diff --git a/modules/application-groups/downloads.nix b/modules/application-groups/downloads.nix new file mode 100644 index 0000000..222e4c0 --- /dev/null +++ b/modules/application-groups/downloads.nix @@ -0,0 +1,7 @@ +{ pkgs, ... }: +{ + environment.systemPackages = with pkgs; [ + transmission_4-qt + yt-dlp + ]; +} diff --git a/modules/application-groups/gaming.nix b/modules/application-groups/gaming.nix new file mode 100644 index 0000000..33ff874 --- /dev/null +++ b/modules/application-groups/gaming.nix @@ -0,0 +1,32 @@ +{ pkgs, ... }: +{ + # Support steam hardware like the index and steam controller + hardware.steam-hardware.enable = true; + + # Steam + programs.steam = { + enable = true; + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = true; + gamescopeSession.enable = true; + }; + + # Valve's micro-compositor + programs.gamescope = { + enable = true; + capSysNice = true; + }; + + # Open source OpenXR runtime for VR + services.monado = { + enable = true; + defaultRuntime = true; + highPriority = true; + }; + + environment.systemPackages = with pkgs; [ + bs-manager + heroic + monado + ]; +} diff --git a/modules/application-groups/homelab.nix b/modules/application-groups/homelab.nix new file mode 100644 index 0000000..0d10251 --- /dev/null +++ b/modules/application-groups/homelab.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + services.meshcentral.enable = true; +} diff --git a/modules/application-groups/media.nix b/modules/application-groups/media.nix new file mode 100644 index 0000000..e15ce8a --- /dev/null +++ b/modules/application-groups/media.nix @@ -0,0 +1,43 @@ +{ config, pkgs, ... }: +{ + boot = { + # Make v4l2loopback kernel module available to NixOS. + extraModulePackages = with config.boot.kernelPackages; [ + v4l2loopback + ]; + # Activate kernel module(s). + kernelModules = [ + # Virtual camera. + "v4l2loopback" + # Virtual Microphone. Custom DroidCam v4l2loopback driver needed for audio. + # "snd-aloop" + ]; + }; + + boot.extraModprobeConfig = '' + # exclusive_caps: Skype, Zoom, Teams etc. will only show device when actually streaming + # card_label: Name of virtual camera, how it'll show up in Skype, Zoom, Teams + # https://github.com/umlaeute/v4l2loopback + options v4l2loopback exclusive_caps=1 card_label="Virtual Camera" + ''; + + programs.bash.shellAliases = { + scrwebcam = "sudo pkill scrcpy ; sudo modprobe -r v4l2loopback ; sudo modprobe v4l2loopback && nohup scrcpy --camera-facing=back --video-source=camera --v4l2-sink=/dev/video0 --no-window --no-audio-playback 2>&1 1>/dev/null"; + }; + + environment.systemPackages = with pkgs; [ + deadbeef + vlc + sox + audacity + glava + spotify-player + projectm_3 + obs-studio + darktable + + # Encountering build failures + # plex-desktop + ]; + +} diff --git a/modules/application-groups/pcb-design.nix b/modules/application-groups/pcb-design.nix new file mode 100644 index 0000000..1758f81 --- /dev/null +++ b/modules/application-groups/pcb-design.nix @@ -0,0 +1,8 @@ +{ config, pkgs, ... }: +{ + environment.systemPackages = with pkgs; [ + kicad + pcb2gcode + ]; + +} diff --git a/modules/application-groups/productivity.nix b/modules/application-groups/productivity.nix new file mode 100644 index 0000000..3eccb9f --- /dev/null +++ b/modules/application-groups/productivity.nix @@ -0,0 +1,6 @@ +{ pkgs, ... }: +{ + environment.systemPackages = with pkgs; [ + obsidian + ]; +} diff --git a/modules/application-groups/programming.nix b/modules/application-groups/programming.nix new file mode 100644 index 0000000..b194bf3 --- /dev/null +++ b/modules/application-groups/programming.nix @@ -0,0 +1,41 @@ +{ config, pkgs, ... }: +{ + environment.systemPackages = with pkgs; [ + vscode-with-extensions + nixfmt-rfc-style + platformio + jetbrains-toolbox + arduino-ide + python311Full + gcc + nodejs + stm32cubemx + stm32flash + python3Full + nix-update + nixos-generators + teensy-udev-rules + ]; + + services.udev.extraRules = '' + # ST-LINK V2 + SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2_%n" + + # ST-LINK V2.1 + SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2-1_%n" + SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3752", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv2-1_%n" + + # ST-LINK V3 + SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374d", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3loader_%n" + SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374e", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n" + SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374f", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n" + SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3753", MODE="600", TAG+="uaccess", SYMLINK+="stlinkv3_%n" + + # CP2101 - CP 2104 + SUBSYSTEMS=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE="600", TAG+="uaccess", SYMLINK+="usb2ser_%n" + + # ATEN UC-232A + SUBSYSTEMS=="usb", ATTRS{idVendor}=="0557", ATTRS{idProduct}=="2008", MODE="600", TAG+="uaccess", SYMLINK+="usb2ser_aten_%n" + ''; + +} diff --git a/modules/application-groups/sdr.nix b/modules/application-groups/sdr.nix new file mode 100644 index 0000000..ae62c8c --- /dev/null +++ b/modules/application-groups/sdr.nix @@ -0,0 +1,10 @@ +{ config, pkgs, ... }: +{ + hardware.rtl-sdr.enable = true; + + environment.systemPackages = with pkgs; [ + soapysdr + soapyrtlsdr + ]; + +} diff --git a/modules/application-groups/social.nix b/modules/application-groups/social.nix new file mode 100644 index 0000000..7b55cb8 --- /dev/null +++ b/modules/application-groups/social.nix @@ -0,0 +1,9 @@ +{ pkgs, ... }: +{ + + environment.systemPackages = with pkgs; [ + telegram-desktop + discord + ]; + +} diff --git a/modules/application-groups/system-utilities.nix b/modules/application-groups/system-utilities.nix new file mode 100644 index 0000000..502241e --- /dev/null +++ b/modules/application-groups/system-utilities.nix @@ -0,0 +1,57 @@ +{ config, pkgs, ... }: +{ + programs.thunar.enable = true; + programs.thunar.plugins = with pkgs.xfce; [ + thunar-archive-plugin + thunar-volman + ]; + services.gvfs.enable = true; # Mount, trash, and other functionalities + services.tumbler.enable = true; # Thumbnail support for images + + programs.ydotool.enable = true; + + services.openssh.enable = true; + services.printing.enable = true; + + hardware.logitech.wireless.enable = true; + hardware.logitech.wireless.enableGraphical = true; + hardware.keyboard.qmk.enable = true; + + services.hardware.openrgb.enable = true; + + environment.systemPackages = with pkgs; [ + kitty + lf + git + htop + iftop + iotop + util-linux + usbutils + dnsutils + unzip + killall + wget + jq + speedcrunch + gparted + ffmpeg-full + xfce.mousepad + imagemagick + nvtopPackages.full + ncdu + s-tui + nmap + pciutils + desktop-file-utils + rpi-imager + rpiboot + streamdeck-ui + scrcpy + openrgb-with-all-plugins + networkmanagerapplet + rofi-bluetooth + networkmanager + ]; + +} diff --git a/modules/application-groups/virtualization.nix b/modules/application-groups/virtualization.nix new file mode 100644 index 0000000..385dace --- /dev/null +++ b/modules/application-groups/virtualization.nix @@ -0,0 +1,12 @@ +{ config, pkgs, ... }: +{ + virtualisation.podman = { + enable = true; + dockerCompat = true; + }; + + environment.systemPackages = with pkgs; [ + distrobox + ]; + +} diff --git a/modules/application-groups/web.nix b/modules/application-groups/web.nix new file mode 100644 index 0000000..36f7535 --- /dev/null +++ b/modules/application-groups/web.nix @@ -0,0 +1,8 @@ +{ config, pkgs, ... }: +{ + programs.firefox.enable = true; + + environment.systemPackages = with pkgs; [ + google-chrome + ]; +} diff --git a/modules/nixos/hyprland-amd.nix b/modules/nixos/hyprland-amd.nix deleted file mode 100644 index 216c819..0000000 --- a/modules/nixos/hyprland-amd.nix +++ /dev/null @@ -1,82 +0,0 @@ -{ pkgs, config, ... }: -{ - programs.hyprland = { - enable = true; - xwayland.enable = true; - }; - -# programs.waybar = { -# enable = true; -## systemd.enable = true; -# }; - - 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; - }; - - # environment.sessionVariables = { - # If your cursor becomes invisible - # WLR_NO_HARDWARE_CURSORS = "1"; - # Hint electron apps to use wayland - # NIXOS_OZONE_WL = "1"; - # Fix waiting on vsync - # __GL_SYNC_TO_VBLANK = "0"; - # }; - - services.xserver = { - enable = true; - videoDrivers = [ "amdgpu" ]; - }; - services.displayManager.gdm = { - enable = true; - wayland = true; - }; - - # services.displayManager.autoLogin = { - # enable = true; - # user = "caperren"; - # }; - - hardware.graphics = { - enable = true; - enable32Bit = true; - }; - - # hardware.nvidia = { - # Enable modesetting for Wayland compositors (hyprland) - # modesetting.enable = true; - # Use the open source version of the kernel module (for driver 515.43.04+) - # Actually, just overridden to false for now - # open = false; - # Enable the Nvidia settings menu - # nvidiaSettings = true; - # Select the appropriate driver version for your specific GPU - # package = config.boot.kernelPackages.nvidiaPackages.stable; - # }; - environment.systemPackages = [ - pkgs.hyprland - pkgs.kitty - pkgs.waybar - pkgs.dunst - pkgs.libnotify - pkgs.rofi-wayland - pkgs.nwg-look - pkgs.desktop-file-utils - pkgs.grim - pkgs.slurp - pkgs.nwg-displays - - (pkgs.waybar.overrideAttrs (oldAttrs: { - mesonFlags = oldAttrs.mesonFlags ++ [ "-Dexperimental=true" ]; - })) - ]; - - xdg.portal.enable = true; - xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; -} diff --git a/modules/nixos/hyprland.nix b/modules/nixos/hyprland.nix deleted file mode 100644 index 8237e1f..0000000 --- a/modules/nixos/hyprland.nix +++ /dev/null @@ -1,77 +0,0 @@ -{ pkgs, config, ... }: -{ - programs.hyprland = { - enable = true; - xwayland.enable = true; - }; - - 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; - }; - - environment.sessionVariables = { - # If your cursor becomes invisible - WLR_NO_HARDWARE_CURSORS = "1"; - # Hint electron apps to use wayland - NIXOS_OZONE_WL = "1"; - # Fix waiting on vsync - __GL_SYNC_TO_VBLANK = "0"; - }; - - services.xserver = { - enable = true; - videoDrivers = [ "nvidia" ]; - }; - services.displayManager.gdm = { - enable = true; - wayland = true; - }; - -# services.displayManager.autoLogin = { -# enable = true; -# user = "caperren"; -# }; - - hardware.graphics = { - enable = true; - enable32Bit = true; - }; - - hardware.nvidia = { - # Enable modesetting for Wayland compositors (hyprland) - modesetting.enable = true; - # Use the open source version of the kernel module (for driver 515.43.04+) - # Actually, just overridden to false for now - open = false; - # Enable the Nvidia settings menu - nvidiaSettings = true; - # Select the appropriate driver version for your specific GPU - package = config.boot.kernelPackages.nvidiaPackages.stable; - }; - environment.systemPackages = [ - pkgs.hyprland - pkgs.kitty - pkgs.waybar - pkgs.dunst - pkgs.libnotify - pkgs.rofi-wayland - pkgs.nwg-look - pkgs.desktop-file-utils - pkgs.grim - pkgs.slurp - pkgs.nwg-displays - - (pkgs.waybar.overrideAttrs (oldAttrs: { - mesonFlags = oldAttrs.mesonFlags ++ [ "-Dexperimental=true" ]; - })) - ]; - - xdg.portal.enable = true; - xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; -} diff --git a/modules/system/cpu-amd.nix b/modules/system/cpu-amd.nix new file mode 100644 index 0000000..5b69c57 --- /dev/null +++ b/modules/system/cpu-amd.nix @@ -0,0 +1,4 @@ +{ config, lib, ... }: +{ + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/modules/system/desktop.nix b/modules/system/desktop.nix new file mode 100644 index 0000000..55a43dd --- /dev/null +++ b/modules/system/desktop.nix @@ -0,0 +1,10 @@ +{ config, pkgs, ... }: +{ + hardware.bluetooth.enable = true; # enables support for Bluetooth + hardware.bluetooth.powerOnBoot = true; # powers up the default Bluetooth controller on boot + services.blueman.enable = true; + + environment.systemPackages = with pkgs; [ + + ]; +} diff --git a/modules/system/displaylink.nix b/modules/system/displaylink.nix new file mode 100644 index 0000000..740c98c --- /dev/null +++ b/modules/system/displaylink.nix @@ -0,0 +1,8 @@ +{ config, pkgs, ... }: +{ + services.xserver.videoDrivers = [ + "displaylink" + "modesetting" + ]; + +} diff --git a/modules/system/fonts.nix b/modules/system/fonts.nix new file mode 100644 index 0000000..95fd68c --- /dev/null +++ b/modules/system/fonts.nix @@ -0,0 +1,20 @@ +{ config, pkgs, ... }: +{ + fonts.fontDir.enable = true; + fonts.fontconfig.enable = true; + fonts.fontconfig.antialias = true; + fonts.packages = with pkgs; [ + noto-fonts + noto-fonts-emoji + liberation_ttf + fira-code + fira-code-symbols + jetbrains-mono + mplus-outline-fonts.githubRelease + dina-font + proggyfonts + font-awesome + nerd-fonts.symbols-only + nerd-fonts.jetbrains-mono + ]; +} diff --git a/modules/system/gpu-amd.nix b/modules/system/gpu-amd.nix new file mode 100644 index 0000000..80b1f66 --- /dev/null +++ b/modules/system/gpu-amd.nix @@ -0,0 +1,5 @@ +{ config, pkgs, ... }: +{ + services.xserver.videoDrivers = [ "amdgpu" ]; + +} diff --git a/modules/system/gpu-nvidia.nix b/modules/system/gpu-nvidia.nix new file mode 100644 index 0000000..fca2856 --- /dev/null +++ b/modules/system/gpu-nvidia.nix @@ -0,0 +1,26 @@ +{ config, pkgs, ... }: +{ + environment.sessionVariables = { + # If your cursor becomes invisible + WLR_NO_HARDWARE_CURSORS = "1"; + # Hint electron apps to use wayland + NIXOS_OZONE_WL = "1"; + # Fix waiting on vsync + __GL_SYNC_TO_VBLANK = "0"; + }; + + services.xserver.videoDrivers = [ "nvidia" ]; + + hardware.nvidia = { + # Enable modesetting for Wayland compositors (hyprland) + modesetting.enable = true; + # Use the open source version of the kernel module (for driver 515.43.04+) + # Actually, just overridden to false for now + open = false; + # Enable the Nvidia settings menu + nvidiaSettings = true; + # Select the appropriate driver version for your specific GPU + package = config.boot.kernelPackages.nvidiaPackages.stable; + }; + +} diff --git a/modules/system/hyprland.nix b/modules/system/hyprland.nix new file mode 100644 index 0000000..0ac6f2b --- /dev/null +++ b/modules/system/hyprland.nix @@ -0,0 +1,51 @@ +{ config, pkgs, ... }: +{ + programs.hyprland = { + enable = true; + xwayland.enable = true; + }; + + services.displayManager.gdm = { + enable = true; + wayland = true; + }; + + services.xserver = { + enable = true; + }; + + hardware.graphics = { + enable = true; + enable32Bit = true; + }; + + xdg.portal.enable = true; + xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; + + environment.systemPackages = with pkgs; [ + waybar + dunst + libnotify + rofi-wayland + nwg-look + nwg-displays + slurp + grim + arandr + wl-clipboard + wlogout + flameshot + wofi + swayimg + hyprpicker + kanshi + hyprlock + swayidle + mako + + (pkgs.waybar.overrideAttrs (oldAttrs: { + mesonFlags = oldAttrs.mesonFlags ++ [ "-Dexperimental=true" ]; + })) + ]; + +} diff --git a/modules/system/internationalization.nix b/modules/system/internationalization.nix new file mode 100644 index 0000000..7e608bb --- /dev/null +++ b/modules/system/internationalization.nix @@ -0,0 +1,24 @@ +{ config, pkgs, ... }: +{ + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; + + i18n.extraLocaleSettings = { + LC_ADDRESS = "en_US.UTF-8"; + LC_IDENTIFICATION = "en_US.UTF-8"; + LC_MEASUREMENT = "en_US.UTF-8"; + LC_MONETARY = "en_US.UTF-8"; + LC_NAME = "en_US.UTF-8"; + LC_NUMERIC = "en_US.UTF-8"; + LC_PAPER = "en_US.UTF-8"; + LC_TELEPHONE = "en_US.UTF-8"; + LC_TIME = "en_US.UTF-8"; + }; + + # Configure keymap in X11 + services.xserver.xkb = { + layout = "us"; + variant = ""; + }; + +} diff --git a/modules/system/laptop.nix b/modules/system/laptop.nix new file mode 100644 index 0000000..680d4df --- /dev/null +++ b/modules/system/laptop.nix @@ -0,0 +1,56 @@ +{ config, pkgs, ... }: +{ + + hardware.bluetooth.enable = true; # enables support for Bluetooth + hardware.bluetooth.powerOnBoot = false; # powers up the default Bluetooth controller on boot + services.blueman.enable = true; + + environment.systemPackages = with pkgs; [ + brightnessctl + powertop + ]; + + services.tlp = { + enable = true; + settings = { + ##### Defaults ###### + # WIFI + WIFI_PWR_ON_AC = "off"; + WIFI_PWR_ON_BAT = "off"; + + # AC + CPU_MIN_PERF_ON_AC = 0; + + # BATT + CPU_MIN_PERF_ON_BAT = 0; + CPU_MAX_PERF_ON_BAT = 35; + + CPU_SCALING_GOVERNOR_ON_BAT = "powersave"; + CPU_ENERGY_PERF_POLICY_ON_BAT = "power"; + + START_CHARGE_THRESH_BAT0 = 1; # On non-thinkpad lenovo, this sets conservation mode to 0 + STOP_CHARGE_THRESH_BAT0 = 1; # ..., but to 1 + + ###### Airplane Settings ##### + # AC + # CPU_MAX_PERF_ON_AC = 35; + + # CPU_SCALING_GOVERNOR_ON_AC = "powersave"; + # CPU_ENERGY_PERF_POLICY_ON_AC = "power"; + + ###### Normal Settings ###### + # AC + CPU_MAX_PERF_ON_AC = 100; + + CPU_SCALING_GOVERNOR_ON_AC = "performance"; + CPU_ENERGY_PERF_POLICY_ON_AC = "performance"; + + # BATT + + ##### Special Overrides ##### + #Optional helps save long term battery health + # START_CHARGE_THRESH_BAT0 = 0; # On non-thinkpad lenovo, this sets conservation mode to 0 + # STOP_CHARGE_THRESH_BAT0 = 0; # ..., but to 1 + }; + }; +} diff --git a/modules/system/networking.nix b/modules/system/networking.nix new file mode 100644 index 0000000..01fbb0b --- /dev/null +++ b/modules/system/networking.nix @@ -0,0 +1,13 @@ +{ config, pkgs, ... }: +{ + # Enable networking + networking.networkmanager.enable = true; + + # Open ports in the firewall. + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + + # Or disable the firewall altogether. + networking.firewall.enable = false; + +} diff --git a/modules/system/nix-settings.nix b/modules/system/nix-settings.nix new file mode 100644 index 0000000..e327172 --- /dev/null +++ b/modules/system/nix-settings.nix @@ -0,0 +1,22 @@ +{ config, pkgs, ... }: +{ + # Enable flakes + nix.settings.experimental-features = [ + "nix-command" + "flakes" + ]; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # Generally want a larger download buffer + nix.settings.download-buffer-size = 524288000; + + programs.bash.shellAliases = { + nixrebuild = "pushd /etc/nixos && { trap 'popd' EXIT; sudo nixos-rebuild switch --flake .#$(hostname); }"; + nixupdate = "cd /etc/nixos && sudo nix flake update && sudo nixos-rebuild switch --flake .#$(hostname)"; + nixedit = "sudo nano /etc/nixos/hosts/$(hostname)/configuration.nix"; + + nixlimitfive = "sudo nix-env --list-generations --profile /nix/var/nix/profiles/system | head -n -5 | cut -d ' ' -f2 | xargs -I {} sudo nix-env --delete-generations --profile /nix/var/nix/profiles/system {}"; + }; +} diff --git a/modules/system/pipewire.nix b/modules/system/pipewire.nix new file mode 100644 index 0000000..b3ce057 --- /dev/null +++ b/modules/system/pipewire.nix @@ -0,0 +1,20 @@ +{ config, pkgs, ... }: +{ + services.pulseaudio.enable = false; + + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + + environment.systemPackages = with pkgs; [ + pavucontrol + pasystray + alsa-utils + pulsemixer + easyeffects + ]; +} diff --git a/modules/system/security.nix b/modules/system/security.nix new file mode 100644 index 0000000..e2a0caf --- /dev/null +++ b/modules/system/security.nix @@ -0,0 +1,21 @@ +{ pkgs, ... }: +{ + security.sudo = { + enable = true; + extraRules = [ + { + commands = [ + { + command = "${pkgs.systemd}/bin/reboot"; + options = [ "NOPASSWD" ]; + } + { + command = "${pkgs.systemd}/bin/poweroff"; + options = [ "NOPASSWD" ]; + } + ]; + groups = [ "wheel" ]; + } + ]; + }; +} diff --git a/modules/system/systemd-boot.nix b/modules/system/systemd-boot.nix new file mode 100644 index 0000000..d13b423 --- /dev/null +++ b/modules/system/systemd-boot.nix @@ -0,0 +1,7 @@ +{ pkgs, ... }: +{ + # Bootloader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + boot.loader.grub.configurationLimit = 8; +} diff --git a/modules/system/xfce.nix b/modules/system/xfce.nix new file mode 100644 index 0000000..f519bce --- /dev/null +++ b/modules/system/xfce.nix @@ -0,0 +1,10 @@ +{ config, pkgs, ... }: +{ + # Enable the X11 windowing system. + services.xserver.enable = true; + + # Enable the XFCE Desktop Environment. + services.xserver.displayManager.lightdm.enable = true; + services.xserver.desktopManager.xfce.enable = true; + +} diff --git a/users/caperren/caperren.nix b/users/caperren/caperren.nix new file mode 100644 index 0000000..fce03e8 --- /dev/null +++ b/users/caperren/caperren.nix @@ -0,0 +1,18 @@ +{ config, pkgs, ... }: +{ + users.users.caperren = { + isNormalUser = true; + description = "Corwin Perren"; + extraGroups = [ + "networkmanager" + "wheel" + "input" + "dialout" + "plugdev" + "adbusers" + ]; + packages = with pkgs; [ + obsidian + ]; + }; +} diff --git a/users/crestline/crestline.nix b/users/crestline/crestline.nix new file mode 100644 index 0000000..bcbeb38 --- /dev/null +++ b/users/crestline/crestline.nix @@ -0,0 +1,22 @@ +{ config, pkgs, ... }: +{ + users.users.crestline = { + isNormalUser = true; + description = "Crestline"; + extraGroups = [ + "networkmanager" + "wheel" + "input" + "dialout" + ]; + packages = with pkgs; [ ]; + + }; + + services.displayManager.autoLogin = { + enable = true; + user = "crestline"; + }; + + services.xserver.displayManager.gdm.autoLogin.delay = 60; +}