diff --git a/hosts/garand-laptop/config.nix b/hosts/garand-laptop/config.nix new file mode 100644 index 0000000..ec7f72b --- /dev/null +++ b/hosts/garand-laptop/config.nix @@ -0,0 +1,575 @@ +{ + inputs, + config, + pkgs, + host, + username, + options, + ... +}: let + inherit (import ./variables.nix) keyboardLayout; +in { + imports = [ + ./hardware.nix + ./users.nix + ../../modules/amd-drivers.nix + ../../modules/nvidia-drivers.nix + ../../modules/nvidia-prime-drivers.nix + ../../modules/intel-drivers.nix + ../../modules/vm-guest-services.nix + ../../modules/local-hardware-clock.nix + ]; + + boot = { + # Kernel + kernelPackages = pkgs.linuxPackages_zen; + # This is for OBS Virtual Cam Support + kernelModules = ["v4l2loopback"]; + extraModulePackages = [config.boot.kernelPackages.v4l2loopback]; + # Needed For Some Steam Games + kernel.sysctl = { + "vm.max_map_count" = 2147483642; + }; + # Bootloader. + loader = { + systemd-boot.enable = true; + efi.canTouchEfiVariables = true; + }; + # Make /tmp a tmpfs + tmp = { + useTmpfs = false; + tmpfsSize = "30%"; + }; + # Appimage Support + binfmt.registrations.appimage = { + wrapInterpreterInShell = false; + interpreter = "${pkgs.appimage-run}/bin/appimage-run"; + recognitionType = "magic"; + offset = 0; + mask = ''\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff''; + magicOrExtension = ''\x7fELF....AI\x02''; + }; + plymouth.enable = true; + }; + + # Styling Options + stylix = { + enable = true; + image = ../../config/wallpapers/attack-on-titan-mikasa-ackerman.jpg; + # base16Scheme = { + # base00 = "232136"; + # base01 = "2a273f"; + # base02 = "393552"; + # base03 = "6e6a86"; + # base04 = "908caa"; + # base05 = "e0def4"; + # base06 = "e0def4"; + # base07 = "56526e"; + # base08 = "eb6f92"; + # base09 = "f6c177"; + # base0A = "ea9a97"; + # base0B = "3e8fb0"; + # base0C = "9ccfd8"; + # base0D = "c4a7e7"; + # base0E = "f6c177"; + # base0F = "56526e"; + # }; + polarity = "dark"; + opacity.terminal = 0.8; + cursor = { + package = pkgs.bibata-cursors; + name = "Bibata-Modern-Ice"; + size = 24; + }; + fonts = { + monospace = { + package = pkgs.nerd-fonts.fira-mono; + name = "FiraCode Nerd Fonts Mono"; + }; + sansSerif = { + package = pkgs.nerd-fonts.fira-code; + name = "FiraCode Nerd Fonts"; + }; + serif = { + package = pkgs.nerd-fonts.fira-code; + name = "FiraCode Nerd Fonts"; + }; + sizes = { + applications = 12; + terminal = 15; + desktop = 11; + popups = 12; + }; + }; + }; + + # Extra Module Options + drivers = { + amdgpu.enable = true; + nvidia.enable = false; + nvidia-prime = { + enable = false; + intelBusID = ""; + nvidiaBusID = ""; + }; + intel.enable = false; + }; + vm.guest-services.enable = false; + local.hardware-clock.enable = false; + + # Enable networking + networking = { + nameservers = ["176.9.1.117" "213.196.191.96" "2a01:4f8:151:34aa::198"]; + networkmanager.enable = true; + hostName = host; + timeServers = options.networking.timeServers.default ++ ["pool.ntp.org"]; + }; + + # Set your time zone. + time.timeZone = "Europe/Warsaw"; + + i18n = { + defaultLocale = "pl_PL.UTF-8"; + extraLocaleSettings = { + LC_ADDRESS = "pl_PL.UTF-8"; + LC_IDENTIFICATION = "pl_PL.UTF-8"; + LC_MEASUREMENT = "pl_PL.UTF-8"; + LC_MONETARY = "pl_PL.UTF-8"; + LC_NAME = "pl_PL.UTF-8"; + LC_NUMERIC = "pl_PL.UTF-8"; + LC_PAPER = "pl_PL.UTF-8"; + LC_TELEPHONE = "pl_PL.UTF-8"; + LC_TIME = "pl_PL.UTF-8"; + }; + }; + + programs = { + firefox.enable = false; + starship = { + enable = true; + settings = { + add_newline = false; + buf = { + symbol = " "; + }; + c = { + symbol = " "; + }; + directory = { + read_only = " 󰌾"; + }; + docker_context = { + symbol = " "; + }; + fossil_branch = { + symbol = " "; + }; + git_branch = { + symbol = " "; + }; + golang = { + symbol = " "; + }; + hg_branch = { + symbol = " "; + }; + hostname = { + ssh_symbol = " "; + }; + lua = { + symbol = " "; + }; + memory_usage = { + symbol = "󰍛 "; + }; + meson = { + symbol = "󰔷 "; + }; + nim = { + symbol = "󰆥 "; + }; + nix_shell = { + symbol = " "; + }; + nodejs = { + symbol = " "; + }; + ocaml = { + symbol = " "; + }; + package = { + symbol = "󰏗 "; + }; + python = { + symbol = " "; + }; + rust = { + symbol = " "; + }; + swift = { + symbol = " "; + }; + zig = { + symbol = " "; + }; + }; + }; + dconf.enable = true; + seahorse.enable = true; + fuse.userAllowOther = true; + mtr.enable = true; + gnupg.agent = { + enable = true; + enableSSHSupport = true; + }; + virt-manager.enable = true; + steam = { + enable = true; + gamescopeSession.enable = true; + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = true; + }; + thunar = { + enable = true; + plugins = with pkgs.xfce; [ + thunar-archive-plugin + thunar-volman + ]; + }; + }; + + nixpkgs.config = { + allowUnfree = true; + pulseaudio = true; + }; + + users = { + mutableUsers = true; + }; + + environment.systemPackages = with pkgs; [ + wget + killall + eza + git + cmatrix + lolcat + htop + libvirt + lxqt.lxqt-policykit + lm_sensors + unzip + unrar + libnotify + v4l-utils + ydotool + duf + ncdu + wl-clipboard + pciutils + ffmpeg + socat + cowsay + ripgrep + lshw + bat + pkg-config + meson + hyprpicker + ninja + brightnessctl + virt-viewer + swappy + appimage-run + networkmanagerapplet + yad + inxi + playerctl + nh + nixfmt-rfc-style + discord + libvirt + swww + grim + slurp + file-roller + swaynotificationcenter + imv + mpv + gimp + pavucontrol + tree + greetd.tuigreet + librewolf + protonup + plex-media-player + plexamp + bitwarden-desktop + vscode + vlc + nixd + ungoogled-chromium + slack + alejandra + tutanota-desktop + ookla-speedtest + anydesk + bun + docker + docker-compose + docker-slim + sl + nodejs + kdePackages.kdenlive + obs-studio + thefuck + cifs-utils + libreoffice + bastet + nsnake + exiftool + ]; + + fonts = { + packages = with pkgs; [ + noto-fonts-emoji + noto-fonts-cjk-sans + font-awesome + # Commenting Symbola out to fix install this will need to be fixed or an alternative found. + # symbola + material-icons + ]; + }; + + environment.variables = { + ZANEYOS_VERSION = "2.2"; + ZANEYOS = "true"; + }; + + # Extra Portal Configuration + xdg.portal = { + enable = true; + wlr.enable = true; + extraPortals = [ + pkgs.xdg-desktop-portal-gtk + pkgs.xdg-desktop-portal + ]; + configPackages = [ + pkgs.xdg-desktop-portal-gtk + pkgs.xdg-desktop-portal-hyprland + pkgs.xdg-desktop-portal + ]; + }; + + # Services to start + services = { + xserver = { + enable = false; + xkb = { + layout = "${keyboardLayout}"; + variant = ""; + }; + }; + resolved = { + enable = true; + dnssec = "true"; + domains = ["~."]; # "use as default interface for all requests" + # (see man resolved.conf) + # let Avahi handle mDNS publication + extraConfig = '' + DNSOverTLS=opportunistic + MulticastDNS=resolve + ''; + llmnr = "true"; + }; + greetd = { + enable = true; + vt = 3; + settings = { + default_session = { + # Wayland Desktop Manager is installed only for user ryan via home-manager! + user = username; + # .wayland-session is a script generated by home-manager, which links to the current wayland compositor(sway/hyprland or others). + # with such a vendor-no-locking script, we can switch to another wayland compositor without modifying greetd's config here. + # command = "$HOME/.wayland-session"; # start a wayland session directly without a login manager + command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland"; # start Hyprland with a TUI login manager + }; + }; + }; + smartd = { + enable = false; + autodetect = true; + }; + libinput.enable = true; + fstrim.enable = true; + gvfs.enable = true; + openssh.enable = true; + flatpak.enable = false; + printing = { + enable = true; + drivers = [ + # pkgs.hplipWithPlugin + ]; + }; + gnome.gnome-keyring.enable = true; + avahi = { + enable = true; + nssmdns4 = true; + openFirewall = true; + }; + ipp-usb.enable = true; + syncthing = { + enable = false; + user = "${username}"; + dataDir = "/home/${username}"; + configDir = "/home/${username}/.config/syncthing"; + }; + pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + rpcbind.enable = false; + nfs.server.enable = false; + }; + systemd.services.flatpak-repo = { + path = [pkgs.flatpak]; + script = '' + flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo + ''; + }; + + hardware = { + sane = { + enable = true; + extraBackends = [pkgs.sane-airscan]; + disabledDefaultBackends = ["escl"]; + }; + logitech = { + wireless = { + enable = false; + enableGraphical = false; + }; + }; + bluetooth = { + enable = true; + powerOnBoot = true; + }; + pulseaudio = { + enable = false; + extraConfig = "load-module module-combine-sink"; + }; + graphics = { + enable = true; + enable32Bit = true; + }; + }; + services.blueman.enable = true; + + # Security / Polkit + security = { + rtkit.enable = true; + polkit = { + enable = true; + extraConfig = '' + polkit.addRule(function(action, subject) { + if ( + subject.isInGroup("users") + && ( + action.id == "org.freedesktop.login1.reboot" || + action.id == "org.freedesktop.login1.reboot-multiple-sessions" || + action.id == "org.freedesktop.login1.power-off" || + action.id == "org.freedesktop.login1.power-off-multiple-sessions" + ) + ) + { + return polkit.Result.YES; + } + }) + ''; + }; + pam.services.swaylock = { + text = '' + auth include login + ''; + }; + sudo = { + enable = true; + extraConfig = '' + Defaults pwfeedback + ''; + }; + }; + + # Optimization settings and garbage collection automation + nix = { + settings = { + auto-optimise-store = true; + experimental-features = [ + "nix-command" + "flakes" + ]; + substituters = ["https://hyprland.cachix.org"]; + trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="]; + }; + gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 7d"; + }; + nixPath = ["nixpkgs=${inputs.nixpkgs}"]; + }; + + # Virtualization / Containers + virtualisation = { + libvirtd.enable = true; + docker = { + enable = true; + package = pkgs.docker; + }; + # podman = { + # enable = true; + # dockerCompat = true; + # defaultNetwork.settings.dns_enabled = true; + # }; + }; + + fileSystems."/mnt/Garand-Library" = { + device = "//192.168.1.156/Garand-Library"; + fsType = "cifs"; + options = [ + "rw" # Odczyt i zapis + "uid=1000" # UID użytkownika montującego (np. 1000 to często UID pierwszego użytkownika) + "gid=100" # GID grupy użytkownika montującego + "file_mode=0775" # Uprawnienia dla plików + "dir_mode=0775" # Uprawnienia dla katalogów + "credentials=/etc/smb-credentials" + ]; + }; + + # services.openvpn.servers = { + # RO-P2P = { + # config = '' + # config /home/garand_plg/Documents/RO-ovpn-tcp.ovpn + # ''; + # updateResolvConf = true; + # }; + # }; + + console.keyMap = "${keyboardLayout}"; + + # Open ports in the firewall. + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or disable the firewall altogether. + # networking.firewall.enable = false; + + # This value determines the NixOS release from which the default + # settings for stateful data, like file locations and database versions + # on your system were taken. It‘s perfectly fine and recommended to leave + # this value at the release version of the first install of this system. + # Before changing this value read the documentation for this option + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). + system.stateVersion = "23.11"; # Did you read the comment? +} diff --git a/hosts/garand-laptop/hardware.nix b/hosts/garand-laptop/hardware.nix new file mode 100644 index 0000000..970637e --- /dev/null +++ b/hosts/garand-laptop/hardware.nix @@ -0,0 +1,47 @@ +# 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 = ["nvme" "xhci_pci"]; + boot.initrd.kernelModules = []; + boot.kernelModules = ["kvm-amd"]; + boot.extraModulePackages = []; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/a96dc5a2-e2bf-4725-a7be-6b9d2b020fa6"; + fsType = "ext4"; + }; + + boot.initrd.luks.devices."luks-9b24a6b5-14e7-4e50-bd1d-c1af7382027c".device = "/dev/disk/by-uuid/9b24a6b5-14e7-4e50-bd1d-c1af7382027c"; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/3D12-F697"; + fsType = "vfat"; + options = ["fmask=0077" "dmask=0077"]; + }; + + swapDevices = [ + {device = "/dev/disk/by-uuid/f1c0ee39-01a9-4508-916a-978650d6c514";} + ]; + + # 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..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp3s0.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hosts/garand-laptop/home.nix b/hosts/garand-laptop/home.nix new file mode 100644 index 0000000..2752771 --- /dev/null +++ b/hosts/garand-laptop/home.nix @@ -0,0 +1,259 @@ +{ + pkgs, + lib, + username, + host, + ... +}: let + inherit (import ./variables.nix) gitUsername gitEmail; +in { + # Home Manager Settings + home.username = "${username}"; + home.homeDirectory = "/home/${username}"; + home.stateVersion = "23.11"; + + # Import Program Configurations + imports = [ + ../../config/emoji.nix + ../../config/fastfetch + ../../config/hyprland.nix + ../../config/rofi/rofi.nix + ../../config/rofi/config-emoji.nix + ../../config/rofi/config-long.nix + ../../config/swaync.nix + ../../config/waybar.nix + ../../config/wlogout.nix + ../../config/fastfetch + ]; + + # Place Files Inside Home Directory + home.file = { + "Pictures/Wallpapers".source = ../../config/wallpapers; + "Pictures/Wallpapers".recursive = true; + ".config/wlogout/icons".source = ../../config/wlogout; + ".config/wlogout/icons".recursive = true; + ".face.icon".source = ../../config/face.jpg; + ".config/face.jpg".source = ../../config/face.jpg; + ".config/swappy/config".text = '' + [Default] + save_dir=/home/${username}/Pictures/Screenshots + save_filename_format=swappy-%Y%m%d-%H%M%S.png + show_panel=false + line_size=5 + text_size=20 + text_font=Ubuntu + paint_mode=brush + early_exit=true + fill_shape=false + ''; + }; + + # Install & Configure Git + programs.git = { + enable = true; + userName = "${gitUsername}"; + userEmail = "${gitEmail}"; + }; + + # Create XDG Dirs + xdg = { + userDirs = { + enable = true; + createDirectories = true; + }; + }; + + dconf.settings = { + "org/virt-manager/virt-manager/connections" = { + autoconnect = ["qemu:///system"]; + uris = ["qemu:///system"]; + }; + }; + + # Styling Options + stylix = { + targets = { + waybar = { + enable = false; + }; + rofi = { + enable = false; + }; + hyprland = { + enable = false; + }; + }; + }; + gtk = { + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme; + }; + gtk3.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + gtk4.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + }; + qt = { + enable = true; + style.name = "adwaita-dark"; + platformTheme.name = "gtk3"; + }; + + # Scripts + home.packages = [ + (import ../../scripts/emopicker9000.nix {inherit pkgs;}) + (import ../../scripts/task-waybar.nix {inherit pkgs;}) + (import ../../scripts/squirtle.nix {inherit pkgs;}) + (import ../../scripts/nvidia-offload.nix {inherit pkgs;}) + (import ../../scripts/wallsetter.nix { + inherit pkgs; + inherit username; + }) + (import ../../scripts/web-search.nix {inherit pkgs;}) + (import ../../scripts/rofi-launcher.nix {inherit pkgs;}) + (import ../../scripts/screenshootin.nix {inherit pkgs;}) + (import ../../scripts/list-hypr-bindings.nix { + inherit pkgs; + inherit host; + }) + ]; + + services = { + hypridle = { + settings = { + general = { + after_sleep_cmd = "hyprctl dispatch dpms on"; + ignore_dbus_inhibit = false; + lock_cmd = "hyprlock"; + }; + listener = [ + { + timeout = 900; + on-timeout = "hyprlock"; + } + { + timeout = 1200; + on-timeout = "hyprctl dispatch dpms off"; + on-resume = "hyprctl dispatch dpms on"; + } + ]; + }; + }; + }; + + programs = { + gh.enable = true; + btop = { + enable = true; + }; + kitty = { + enable = true; + package = pkgs.kitty; + settings = { + scrollback_lines = 2000; + wheel_scroll_min_lines = 1; + window_padding_width = 4; + confirm_os_window_close = 0; + }; + extraConfig = '' + tab_bar_style fade + tab_fade 1 + active_tab_font_style bold + inactive_tab_font_style bold + ''; + }; + starship = { + enable = true; + package = pkgs.starship; + }; + bash = { + enable = true; + enableCompletion = true; + profileExtra = '' + #if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" = 1 ]; then + # exec Hyprland + #fi + ''; + initExtra = '' + fastfetch + if [ -f $HOME/.bashrc-personal ]; then + source $HOME/.bashrc-personal + fi + ''; + shellAliases = { + os-sw = "sudo nixos-rebuild switch --flake ~/zaneyos"; + os-bt = "sudo nixos-rebuild boot --flake ~/zaneyos"; + os-ts = "sudo nixos-rebuild test --flake ~/zaneyos"; + os-up = "sudo nix flake update"; + os-upg = "sudo nix flake update && sudo nixos-rebuild switch --flake ~/zaneyos"; + os-up-np = "sudo nix flake update --update-input nixpkgs"; + os-up-hm = "sudo nix flake update --update-input home-manager"; + os-up-sx = "sudo nix flake update --update-input stylix"; + fr = "nh os switch --hostname ${host} /home/${username}/zaneyos"; + fu = "nh os switch --hostname ${host} --update /home/${username}/zaneyos"; + zu = "sh <(curl -L https://gitlab.com/Zaney/zaneyos/-/raw/main/install-zaneyos.sh)"; + ncg = "nix-collect-garbage --delete-old && sudo nix-collect-garbage -d && sudo /run/current-system/bin/switch-to-configuration boot"; + n = "nano"; + f = "fuck"; + cat = "bat"; + st = "speedtest"; + ls = "eza --icons"; + ll = "eza -lh --icons --grid --group-directories-first"; + la = "eza -lah --icons --grid --group-directories-first"; + ssh-server = "ssh garand_plg@192.168.1.156 -p 556 -i ~/.ssh/hp-t640-homeserver"; + terminal = "cat /home/garand_plg/Documents/terminal.txt"; + e-terminal = "nano /home/garand_plg/Documents/terminal.txt"; + ".." = "cd .."; + }; + }; + home-manager.enable = true; + hyprlock = { + enable = true; + settings = { + general = { + disable_loading_bar = true; + grace = 10; + hide_cursor = true; + no_fade_in = false; + }; + background = lib.mkDefault [ + { + path = "/home/${username}/Pictures/Wallpapers/attack-on-titan-mikasa-ackerman.jpg"; + blur_passes = 3; + blur_size = 8; + } + ]; + image = [ + { + path = "/home/${username}/.config/face.jpg"; + size = 150; + border_size = 4; + border_color = "rgb(0C96F9)"; + rounding = -1; # Negative means circle + position = "0, 200"; + halign = "center"; + valign = "center"; + } + ]; + input-field = lib.mkDefault [ + { + size = "200, 50"; + position = "0, -80"; + monitor = ""; + dots_center = true; + fade_on_empty = false; + font_color = "rgb(CFE6F4)"; + inner_color = "rgb(657DC2)"; + outer_color = "rgb(0D0E15)"; + outline_thickness = 5; + placeholder_text = "Password..."; + shadow_passes = 2; + } + ]; + }; + }; + }; +} diff --git a/hosts/garand-laptop/users.nix b/hosts/garand-laptop/users.nix new file mode 100644 index 0000000..ecbee9b --- /dev/null +++ b/hosts/garand-laptop/users.nix @@ -0,0 +1,37 @@ +{ + pkgs, + username, + ... +}: let + inherit (import ./variables.nix) gitUsername; +in { + users.users = { + "${username}" = { + homeMode = "755"; + isNormalUser = true; + description = "${gitUsername}"; + extraGroups = [ + "networkmanager" + "wheel" + "libvirtd" + "scanner" + "lp" + "docker" + "audio" + ]; + shell = pkgs.bash; + ignoreShellProgramCheck = true; + # packages = with pkgs; [ + # ]; + }; + # "newuser" = { + # homeMode = "755"; + # isNormalUser = true; + # description = "New user account"; + # extraGroups = [ "networkmanager" "wheel" "libvirtd" ]; + # shell = pkgs.bash; + # ignoreShellProgramCheck = true; + # packages = with pkgs; []; + # }; + }; +} diff --git a/hosts/garand-laptop/variables.nix b/hosts/garand-laptop/variables.nix new file mode 100644 index 0000000..718e077 --- /dev/null +++ b/hosts/garand-laptop/variables.nix @@ -0,0 +1,16 @@ +{ + # Git Configuration ( For Pulling Software Repos ) + gitUsername = "GarandPLG"; + gitEmail = "garandplg@garandplg.com"; + + # Hyprland Settings + extraMonitorSettings = ""; + + # Waybar Settings + clock24h = true; + + # Program Options + browser = "librewolf"; # Set Default Browser (google-chrome-stable for google-chrome) + terminal = "kitty"; # Set Default System Terminal + keyboardLayout = "pl"; +}