Unified Laptop and Desktop
This commit is contained in:
423
hosts/desktop/configuration.nix
Normal file
423
hosts/desktop/configuration.nix
Normal file
@@ -0,0 +1,423 @@
|
||||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page
|
||||
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
||||
|
||||
{ config, pkgs, master, lib, inputs, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[ # Include the results of the hardware scan.
|
||||
./hardware-configuration.nix
|
||||
];
|
||||
|
||||
# Bootloader.
|
||||
boot.loader.grub.enable = true;
|
||||
boot.loader.grub.devices = ["nodev"];
|
||||
boot.loader.grub.useOSProber = true;
|
||||
boot.loader.grub.efiSupport = true;
|
||||
boot.initrd.systemd.enable = true;
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
boot.loader.grub.timeoutStyle = "hidden";
|
||||
services.avahi = {
|
||||
enable = true;
|
||||
nssmdns4 = true;
|
||||
openFirewall = true;
|
||||
};
|
||||
|
||||
|
||||
boot = {
|
||||
|
||||
plymouth = {
|
||||
enable = true;
|
||||
theme = "square_hud";
|
||||
themePackages = with pkgs; [
|
||||
# By default we would install all themes
|
||||
(adi1090x-plymouth-themes.override {
|
||||
selected_themes = [ "square_hud" ];
|
||||
})
|
||||
];
|
||||
};
|
||||
|
||||
# Enable "Silent Boot"
|
||||
consoleLogLevel = 0;
|
||||
initrd.verbose = false;
|
||||
kernelParams = [
|
||||
"quiet"
|
||||
"splash"
|
||||
"boot.shell_on_fail"
|
||||
"loglevel=3"
|
||||
"rd.systemd.show_status=false"
|
||||
"rd.udev.log_level=3"
|
||||
"udev.log_priority=3"
|
||||
];
|
||||
# Hide the OS choice for bootloaders.
|
||||
# It's still possible to open the bootloader list by pressing any key
|
||||
# It will just not appear on screen unless a key is pressed
|
||||
loader.timeout = 0;
|
||||
|
||||
};
|
||||
|
||||
boot.extraModulePackages = with config.boot.kernelPackages; [ hid-tmff2 ];
|
||||
|
||||
networking.hostName = "nixos"; # 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/";
|
||||
|
||||
# Enable networking
|
||||
networking.networkmanager.enable = true;
|
||||
|
||||
|
||||
hardware.bluetooth.enable = true;
|
||||
hardware.bluetooth.package = pkgs.bluez;
|
||||
|
||||
nixpkgs.config.permittedInsecurePackages = [
|
||||
"electron-31.7.7"
|
||||
];
|
||||
|
||||
environment.variables.AMD_VULKAN_ICD = "RADV";
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "America/Chicago";
|
||||
environment.sessionVariables.NIXOS_OZONE_WL = "1";
|
||||
# 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 sytem.
|
||||
services.xserver.enable = true;
|
||||
|
||||
|
||||
# Enable the GNOME Desktop Environment.
|
||||
services.desktopManager.plasma6.enable = false;
|
||||
services.displayManager.sddm.enable = false;
|
||||
services.displayManager.cosmic-greeter.enable = false;
|
||||
services.desktopManager.cosmic.enable = false;
|
||||
/*services.displayManager = {
|
||||
autoLogin.enable = true;
|
||||
autoLogin.user = "joshuaelm";
|
||||
};*/
|
||||
security.pam.services.hyprlock = {};
|
||||
|
||||
services.greetd = {
|
||||
enable = true;
|
||||
settings = rec {
|
||||
initial_session = {
|
||||
command = "${pkgs.hyprland}/bin/Hyprland";
|
||||
user = "joshuaelm";
|
||||
};
|
||||
default_session = initial_session;
|
||||
};
|
||||
};
|
||||
|
||||
# Steam Deck Gamemode
|
||||
programs.steam.gamescopeSession.enable = true;
|
||||
|
||||
|
||||
# Polkit
|
||||
|
||||
security.polkit.enable = true;
|
||||
services.udisks2.enable = true;
|
||||
|
||||
|
||||
# Configure keymap in X11
|
||||
services.xserver = {
|
||||
xkb.layout = "us";
|
||||
xkb.variant = "";
|
||||
excludePackages = [ pkgs.xterm ];
|
||||
};
|
||||
|
||||
# Enable Swap
|
||||
|
||||
/*swapDevices = [ {
|
||||
device = "/var/lib/swapfile";
|
||||
size = 16*1024;
|
||||
}];*/
|
||||
|
||||
# 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;
|
||||
wireplumber.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;
|
||||
};
|
||||
hardware.pulseaudio.configFile = pkgs.runCommand "default.pa" {} ''
|
||||
sed 's/module-udev-detect$/module-udev-detect tsched=0/' \
|
||||
${pkgs.pulseaudio}/etc/pulse/default.pa > $out
|
||||
'';
|
||||
environment.etc."wireplumber/main.lua.d/90-suspend-timeout.lua" = {
|
||||
text = ''
|
||||
session.suspend-timeout-seconds = 0
|
||||
'';
|
||||
};
|
||||
|
||||
services.pipewire.extraConfig.pipewire-pulse."92-low-latency" = {
|
||||
context.modules = [
|
||||
{
|
||||
name = "libpipewire-module-protocol-pulse";
|
||||
args = {
|
||||
pulse.min.req = "32/48000";
|
||||
pulse.default.req = "32/48000";
|
||||
pulse.max.req = "32/48000";
|
||||
pulse.min.quantum = "32/48000";
|
||||
pulse.max.quantum = "32/48000";
|
||||
};
|
||||
}
|
||||
];
|
||||
stream.properties = {
|
||||
node.latency = "32/48000";
|
||||
resample.quality = 1;
|
||||
};
|
||||
};
|
||||
hardware.pulseaudio.extraConfig = ''
|
||||
.nofail
|
||||
unload-module module-suspend-on-idle
|
||||
.fail
|
||||
'';
|
||||
|
||||
|
||||
# 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’.
|
||||
programs.adb.enable = true;
|
||||
users.users.joshuaelm = {
|
||||
isNormalUser = true;
|
||||
description = "Joshua Elmasri";
|
||||
extraGroups = [ "networkmanager" "wheel" "adbusers" ];
|
||||
packages = with pkgs; [
|
||||
# thunderbird
|
||||
];
|
||||
};
|
||||
|
||||
nix.optimise.automatic = true;
|
||||
|
||||
# Allow unfree packages
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
# Configure drives
|
||||
|
||||
fileSystems."/mnt/Games" = {
|
||||
device = "/dev/nvme0n1p1";
|
||||
fsType = "btrfs";
|
||||
options = [
|
||||
"users"
|
||||
"nofail"
|
||||
"x-gvfs-show"
|
||||
"exec"
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
fileSystems."/mnt/More-Games" = {
|
||||
device = "/dev/disk/by-uuid/eb1d5913-63fb-4fd8-8299-b428fd2d5ea0";
|
||||
fsType = "btrfs";
|
||||
options = [
|
||||
"users"
|
||||
"nofail"
|
||||
"x-gvfs-show"
|
||||
"exec"
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Fonts
|
||||
fonts.packages = with pkgs; [
|
||||
fira-code
|
||||
fira-code-symbols
|
||||
roboto
|
||||
nerd-fonts.fira-code
|
||||
nerd-fonts.jetbrains-mono
|
||||
];
|
||||
|
||||
|
||||
# List packages installed in system profile. To search, run:
|
||||
# $ nix search wget
|
||||
environment.systemPackages = with pkgs; [
|
||||
(pkgs.buildFHSEnv {
|
||||
name = "fhs";
|
||||
targetPkgs = pkgs: with pkgs; [
|
||||
alsa-lib atk cairo cups curl dbus expat file fish fontconfig freetype
|
||||
fuse glib gtk3 libGL libnotify libxml2 libxslt netcat nspr nss openjdk8
|
||||
openssl.dev cava pango appimage-run pkg-config strace udev vulkan-loader watch wget which
|
||||
xorg.libX11 icu xorg.libxcb xorg.libXcomposite xorg.libXcursor
|
||||
xorg.libXdamage xorg.libXext xorg.libXfixes xorg.libXi xorg.libXrandr
|
||||
xorg.libXrender xorg.libXScrnSaver openssl xorg.libxshmfence xorg.libXtst
|
||||
xorg.xcbutilkeysyms zlib fontconfig.lib SDL2 libGL libuuid xorg.libXft
|
||||
];
|
||||
profile = ''export FHS=1'';
|
||||
runScript = "fish";
|
||||
})
|
||||
git
|
||||
bibata-cursors
|
||||
killall
|
||||
mangohud
|
||||
aonsoku
|
||||
teamspeak3
|
||||
cemu
|
||||
teamspeak6-client
|
||||
unetbootin
|
||||
labymod-launcher
|
||||
unzip
|
||||
winetricks
|
||||
cowsay
|
||||
pfetch
|
||||
ryujinx
|
||||
hyprpolkitagent
|
||||
gomatrix
|
||||
python3
|
||||
pavucontrol
|
||||
gnomeExtensions.tray-icons-reloaded
|
||||
cider
|
||||
xfce.thunar
|
||||
gnomeExtensions.open-bar
|
||||
wallust
|
||||
steamtinkerlaunch
|
||||
grub2
|
||||
cargo
|
||||
inputs.zen-browser.packages."${system}".default
|
||||
qalculate-qt
|
||||
kdePackages.kdenlive
|
||||
blueman
|
||||
fuse
|
||||
linux-wallpaperengine
|
||||
ntfs3g
|
||||
lapce
|
||||
prismlauncher
|
||||
librewolf
|
||||
protonup-qt
|
||||
mlt
|
||||
nspr
|
||||
nss_latest
|
||||
nssTools
|
||||
qt5.full
|
||||
dconf
|
||||
openjdk23
|
||||
heroic
|
||||
protontricks
|
||||
gamescope
|
||||
playerctl
|
||||
libsForQt5.qt5.qtwebsockets
|
||||
wine
|
||||
alvr
|
||||
bottles
|
||||
cava
|
||||
pop-icon-theme
|
||||
gnome-tweaks
|
||||
libnotify
|
||||
libreoffice
|
||||
hunspell
|
||||
hunspellDicts.en_US
|
||||
neovide
|
||||
flatpak
|
||||
gradience
|
||||
];
|
||||
|
||||
# VirtualBox
|
||||
|
||||
virtualisation.virtualbox.host.enable = true;
|
||||
users.extraGroups.vboxusers.members = [ "user-with-access-to-virtualbox" ];
|
||||
|
||||
|
||||
services.sunshine = {
|
||||
enable = true;
|
||||
autoStart = true;
|
||||
capSysAdmin = true;
|
||||
openFirewall = true;
|
||||
|
||||
};
|
||||
# Enable Steam
|
||||
programs.steam = {
|
||||
enable = true;
|
||||
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
|
||||
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
|
||||
};
|
||||
|
||||
nixpkgs.config.packageOverrides = pkgs: {
|
||||
steam = pkgs.steam.override {
|
||||
extraLibraries = pkgs: [ pkgs.xorg.libxcb ];
|
||||
extraPkgs = pkgs: with pkgs; [
|
||||
xorg.libXcursor
|
||||
xorg.libXi
|
||||
xorg.libXinerama
|
||||
xorg.libXScrnSaver
|
||||
libpng
|
||||
libpulseaudio
|
||||
libvorbis
|
||||
stdenv.cc.cc.lib
|
||||
libkrb5
|
||||
keyutils
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
programs.gamescope = {
|
||||
enable = true;
|
||||
capSysNice = true;
|
||||
};
|
||||
|
||||
programs.nix-ld.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;
|
||||
services.openssh.allowSFTP = true;
|
||||
|
||||
# Open ports in the firewall.
|
||||
networking.firewall.allowedTCPPorts = [ 7860 3042 47990 48010 5001 ];
|
||||
networking.firewall.allowedUDPPorts = [ 7860 3042 47990 4800 48010 ];
|
||||
# Or disable the firewall altogether.
|
||||
# networking.firewall.enable = false;
|
||||
|
||||
# This value determines the NixOS release from which the default
|
||||
# settings for stateful data, like file locations and database versions
|
||||
# on your system were taken. It‘s perfectly fine and recommended to leave
|
||||
# this value at the release version of the first install of this system.
|
||||
# Before changing this value read the documentation for this option
|
||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||
system.stateVersion = "23.11"; # Did you read the comment?
|
||||
# Enable lakes
|
||||
nix = {
|
||||
extraOptions = ''
|
||||
experimental-features = nix-command flakes
|
||||
'';
|
||||
};
|
||||
|
||||
}
|
||||
39
hosts/desktop/hardware-configuration.nix
Normal file
39
hosts/desktop/hardware-configuration.nix
Normal file
@@ -0,0 +1,39 @@
|
||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[ (modulesPath + "/installer/scan/not-detected.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-amd" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/disk/by-uuid/b6501e43-45c0-46bc-b77f-2f42c3a15572";
|
||||
fsType = "btrfs";
|
||||
options = [ "subvol=@" ];
|
||||
};
|
||||
|
||||
fileSystems."/boot" =
|
||||
{ device = "/dev/disk/by-uuid/FE68-923D";
|
||||
fsType = "vfat";
|
||||
options = [ "fmask=0077" "dmask=0077" ];
|
||||
};
|
||||
|
||||
swapDevices = [ ];
|
||||
|
||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||
# still possible to use this option, but it's recommended to use it in conjunction
|
||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.enp3s0.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
134
hosts/desktop/home.nix
Normal file
134
hosts/desktop/home.nix
Normal file
@@ -0,0 +1,134 @@
|
||||
{ config, pkgs, inputs, ... }:
|
||||
|
||||
{
|
||||
# Home Manager needs a bit of information about you and the
|
||||
# paths it should manage.
|
||||
home.username = "joshuaelm";
|
||||
home.homeDirectory = "/home/joshuaelm";
|
||||
|
||||
imports = [ ../../modules/nvim ../../modules/stylix.nix ../../modules/hypr/hyprland_desktop.nix ];
|
||||
|
||||
|
||||
home.packages = [
|
||||
pkgs.element-desktop
|
||||
pkgs.waybar
|
||||
pkgs.signal-desktop-bin
|
||||
pkgs.swaybg
|
||||
pkgs.gpu-screen-recorder
|
||||
pkgs.gpu-screen-recorder-gtk
|
||||
pkgs.supersonic
|
||||
pkgs.adw-gtk3
|
||||
pkgs.hyprpanel
|
||||
];
|
||||
|
||||
programs.hyprlock.enable = false;
|
||||
programs.kitty.enable = true;
|
||||
programs.cava.enable = true;
|
||||
programs.btop.enable = true;
|
||||
programs.rofi.enable = true;
|
||||
programs.rofi.package = pkgs.rofi-wayland;
|
||||
services.hyprpaper.enable = true;
|
||||
wayland.windowManager.hyprland.enable = true;
|
||||
|
||||
#xdg.configFile.hypr.source = ./modules/hypr;
|
||||
xdg.configFile.waybar.source = ./modules/waybar;
|
||||
xdg.configFile.cava.source = ./modules/cava;
|
||||
#xdg.configFile.kitty.source = ./modules/kitty;
|
||||
#xdg.configFile.rofi.source = ./modules/rofi;
|
||||
xdg.configFile.dunst.source = ./modules/dunst;
|
||||
home.file.".cache/ags/hyprpanel/options.json".source = ./modules/hyprpanel/options.json;
|
||||
|
||||
xdg.configFile.waybar.force = true;
|
||||
xdg.configFile.cava.force = true;
|
||||
xdg.configFile.dunst.force = true;
|
||||
home.file.".cache/ags/hyprpanel/options.json".force = true;
|
||||
|
||||
home.file.".icons/default".source = "${pkgs.bibata-cursors}/share/icons/Bibata-Modern-Classic";
|
||||
|
||||
services.mpd-mpris.enable = true;
|
||||
|
||||
|
||||
programs.rofi.extraConfig = {
|
||||
show-icons = true;
|
||||
drun-display-format = "{icon} {name}";
|
||||
hide-scrollbar = true;
|
||||
sidebar-mode = true;
|
||||
dpi = 110;
|
||||
font = "FreeSans Regular 12";
|
||||
icon-theme = "Gruvbox-Plus-Dark";
|
||||
};
|
||||
programs.rofi.theme = {
|
||||
window.height = 600;
|
||||
window.width = 600;
|
||||
window.border-radius = 10;
|
||||
|
||||
element = {
|
||||
padding = 5;
|
||||
border-radius = 10;
|
||||
};
|
||||
inputbar.padding = 14;
|
||||
listview = {
|
||||
padding = 8;
|
||||
border-radius = "0 0 10 10";
|
||||
border = "2 2 2 2";
|
||||
dynamic = false;
|
||||
};
|
||||
"element-text element-icon" = {
|
||||
size = 40;
|
||||
margin = "0 10 0 0";
|
||||
};
|
||||
mainbox.children = "inputbar, message, listview";
|
||||
mainbox.spacing = 0;
|
||||
};
|
||||
|
||||
programs.kitty.extraConfig = ''
|
||||
font_family Fira Code Nerd Font
|
||||
bold_font auto
|
||||
italic_font auto
|
||||
bold_italic_font auto
|
||||
confirm_os_window_close 0
|
||||
cursor_shape beam
|
||||
cursor_trail 3
|
||||
'';
|
||||
|
||||
|
||||
# This value determines the Home Manager release that your
|
||||
# configuration is compatible with. This helps avoid breakage
|
||||
# when a new Home Manager release introduces backwards
|
||||
# incompatible changes.
|
||||
#
|
||||
# You can update Home Manager without changing this value. See
|
||||
# the Home Manager release notes for a list of state version
|
||||
# changes in each release.
|
||||
home.stateVersion = "23.11";
|
||||
xdg.dataFile = {
|
||||
"Steam/compatibilitytools.d/SteamTinkerLaunch/compatibilitytool.vdf".text = ''
|
||||
"compatibilitytools"
|
||||
{
|
||||
"compat_tools"
|
||||
{
|
||||
"Proton-stl" // Internal name of this tool
|
||||
{
|
||||
"install_path" "."
|
||||
"display_name" "Steam Tinker Launch"
|
||||
|
||||
"from_oslist" "windows"
|
||||
"to_oslist" "linux"
|
||||
}
|
||||
}
|
||||
}
|
||||
'';
|
||||
"Steam/compatibilitytools.d/SteamTinkerLaunch/steamtinkerlaunch".source =
|
||||
config.lib.file.mkOutOfStoreSymlink "${pkgs.steamtinkerlaunch}/bin/steamtinkerlaunch";
|
||||
"Steam/compatibilitytools.d/SteamTinkerLaunch/toolmanifest.vdf".text = ''
|
||||
"manifest"
|
||||
{
|
||||
"commandline" "/steamtinkerlaunch run"
|
||||
"commandline_waitforexitandrun" "/steamtinkerlaunch waitforexitandrun"
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
# Let Home Manager install and manage itself.
|
||||
programs.home-manager.enable = true;
|
||||
}
|
||||
Reference in New Issue
Block a user