From 93309a816c07b92da5e57c18bf737abdff1d809d Mon Sep 17 00:00:00 2001 From: Noa Aarts Date: Wed, 6 Mar 2024 15:21:15 +0100 Subject: [PATCH] seperate vnc config --- common/hyprland-vnc.nix | 119 ++++++++++++++++++ common/hyprland.nix | 3 +- common/waybar.nix | 1 + hosts/default/configuration.nix | 4 +- hosts/vnc/configuration.nix | 178 +++++++++++++++++++++++++++ hosts/vnc/hardware-configuration.nix | 37 ++++++ hosts/vnc/home.nix | 146 ++++++++++++++++++++++ hosts/vnc/nvidia.nix | 27 ++++ hosts/vnc/root.nix | 94 ++++++++++++++ 9 files changed, 606 insertions(+), 3 deletions(-) create mode 100644 common/hyprland-vnc.nix create mode 100644 hosts/vnc/configuration.nix create mode 100644 hosts/vnc/hardware-configuration.nix create mode 100644 hosts/vnc/home.nix create mode 100644 hosts/vnc/nvidia.nix create mode 100644 hosts/vnc/root.nix diff --git a/common/hyprland-vnc.nix b/common/hyprland-vnc.nix new file mode 100644 index 0000000..e8fd437 --- /dev/null +++ b/common/hyprland-vnc.nix @@ -0,0 +1,119 @@ +{ config, pkgs, inputs, ... }: + +{ + # these are necessary for the config to function correctly + imports = [ + ./kitty.nix + ./waybar.nix + ./wofi.nix + ]; + home.packages = with pkgs; [ + hyprland + + # I always want these with hyprland anyways + dunst + wl-clipboard + + slurp + grim + ]; + wayland.windowManager.hyprland = { + enable = true; + settings = { + monitor = [ + "DP-3,disable" + "DP-2,disable" + "HEADLESS-2,2256x1504,1920x1440,1" + ]; + windowrulev2 = [ + "opacity 1.0 0.6,class:^(kitty)$" + "stayfocused,class:^(wofi)$" + ]; + env = [ + "WLR_NO_HARDWARE_CURSORS,1" + ]; + exec-once = [ + "waybar" + "hyprctl output create headless && wayvnc 0.0.0.0 5909 && wayvncctl -w output-set HEADLESS-2" + "dunst" + "automapaper -C ${config.xdg.configHome}/automapaper/config.toml" + "automapaper -C ${config.xdg.configHome}/automapaper/config2nd.toml" + "hyprctl dispatcher focusmonitor 1" + ]; + general = { + sensitivity = "1.2"; + gaps_in = "2"; + gaps_out = "3"; + border_size = "3"; + "col.active_border"="0xff950fad"; + "col.inactive_border"="0xff26052e"; + }; + decoration = { + rounding = "6"; + active_opacity = "1"; + inactive_opacity = "1"; + }; + workspace = [ + "DP-3,1" + "DP-2,2" + ]; + animations = { + enabled = "1"; + animation = [ + "windows,1,2,default" + "border,1,10,default" + "fade,0,5,default" + "workspaces,1,4,default" + ]; + }; + "$mod" = "SUPER"; + bind = [ + "$mod,Return,exec,kitty" + "$mod,tab,cyclenext" + "SUPERSHIFT,Q,killactive" + "$mod,SPACE,exec,wofi-launch" + "$mod,P,exec,wofi-power" + "SUPERSHIFT,m,exit" + "$mod,H,movefocus,l" + "$mod,J,movefocus,u" + "$mod,K,movefocus,d" + "$mod,L,movefocus,r" + "SUPERSHIFT,H,movewindow,l" + "SUPERSHIFT,J,movewindow,u" + "SUPERSHIFT,K,movewindow,d" + "SUPERSHIFT,L,movewindow,r" + "$mod,F,togglefloating" + "$mod,X,togglespecialworkspace" + "SUPERSHIFT,X,movetoworkspace,special" + "$mod,Print,exec,grim - | wl-copy && notify-send 'Screenshot Copied to Clipboard'" + "SUPERSHIFT,S,exec,slurp | grim -g - /tmp/photo && wl-copy < /tmp/photo && notify-send 'Screenshot Copied to Clipboard'" + "$mod,f11,fullscreen,0" + ",XF86AudioLowerVolume,exec,wpctl set-volume @DEFAULT_SINK@ 1%-" + ",XF86AudioRaiseVolume,exec,wpctl set-volume @DEFAULT_SINK@ 1%+" + ",XF86AudioMute,exec,wpctl set-mute @DEFAULT_SINK@ toggle" + ",XF86AudioPlay,exec,playerctl play-pause" + ",XF86AudioPrev,exec,playerctl previous" + ",XF86AudioNext,exec,playerctl next" + ] + ++ ( + builtins.concatLists (builtins.genList ( + x: let + ws = let + c = (x+1); + in + builtins.toString (x); + in [ + "$mod,${ws},workspace,${ws}" + "ALT,${ws},movetoworkspace,${ws}" + ] + ) + 10) + ); + bindm = [ + "$mod,mouse:272,movewindow" + "$mod,mouse:273,resizewindow" + ]; + }; + }; + +} diff --git a/common/hyprland.nix b/common/hyprland.nix index ea9d16e..49c5ec0 100644 --- a/common/hyprland.nix +++ b/common/hyprland.nix @@ -23,6 +23,7 @@ monitor = [ "DP-3,2560x1440@144,1920x0,1" "DP-2,1920x1080@60,0x0,1" + "HEADLESS-2,2256x1504,1920x1440,1" ]; windowrulev2 = [ "opacity 1.0 0.6,class:^(kitty)$" @@ -33,7 +34,7 @@ ]; exec-once = [ "waybar" - "wayvnc" + "hyprctl output create headless && wayvnc 0.0.0.0 5909 && wayvncctl -w output-set HEADLESS-2" "dunst" "automapaper -C ${config.xdg.configHome}/automapaper/config.toml" "automapaper -C ${config.xdg.configHome}/automapaper/config2nd.toml" diff --git a/common/waybar.nix b/common/waybar.nix index 3f3561a..951f3d4 100644 --- a/common/waybar.nix +++ b/common/waybar.nix @@ -15,6 +15,7 @@ output = [ "DP-3" "DP-2" + "HEADLESS-2" ]; modules-left = [ "hyprland/workspaces" "tray" "custom/pronouns" "custom/spotify" ]; modules-center = [ "hyprland/window" "clock" ]; diff --git a/hosts/default/configuration.nix b/hosts/default/configuration.nix index 915389e..225785d 100644 --- a/hosts/default/configuration.nix +++ b/hosts/default/configuration.nix @@ -163,8 +163,8 @@ }; # Open ports in the firewall. - # networking.firewall.allowedTCPPorts = [ ... ]; - # networking.firewall.allowedUDPPorts = [ ... ]; + networking.firewall.allowedTCPPorts = [ 5909 ]; + networking.firewall.allowedUDPPorts = [ 5909 ]; # Or disable the firewall altogether. # networking.firewall.enable = false; diff --git a/hosts/vnc/configuration.nix b/hosts/vnc/configuration.nix new file mode 100644 index 0000000..225785d --- /dev/null +++ b/hosts/vnc/configuration.nix @@ -0,0 +1,178 @@ +# 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, inputs, nix-colors, ... }: + +{ + imports = + [ # Include the results of the hardware scan. + ./hardware-configuration.nix + ./nvidia.nix + inputs.home-manager.nixosModules.default + ]; + + # Bootloader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + + networking.hostName = "lambdaOS"; # 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; + + nix = { + settings = { + # auto optimise every so often + auto-optimise-store = true; + experimental-features = ["nix-command" "flakes"]; + }; + gc.automatic = true; + }; + + # Set your time zone. + time.timeZone = "Europe/Amsterdam"; + + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; + + i18n.extraLocaleSettings = { + LC_ADDRESS = "nl_NL.UTF-8"; + LC_IDENTIFICATION = "nl_NL.UTF-8"; + LC_MEASUREMENT = "nl_NL.UTF-8"; + LC_MONETARY = "nl_NL.UTF-8"; + LC_NAME = "nl_NL.UTF-8"; + LC_NUMERIC = "nl_NL.UTF-8"; + LC_PAPER = "nl_NL.UTF-8"; + LC_TELEPHONE = "nl_NL.UTF-8"; + LC_TIME = "nl_NL.UTF-8"; + }; + + services.xserver = { + enable = true; + displayManager = { + sddm.enable = true; + defaultSession = "hyprland"; + }; + xkb = { + layout = "us"; + variant = "intl"; + }; + }; + + + # Configure console keymap + console.keyMap = "us-acentos"; + + users.groups.nixpow.members = [ "root" ]; + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users.noa = { + isNormalUser = true; + description = "Noa Aarts"; + extraGroups = [ "networkmanager" "wheel" "nixpow" ]; + packages = with pkgs; [ + ]; + }; + + home-manager = { + extraSpecialArgs = { + inherit inputs; + inherit nix-colors; + }; + users = { + "noa" = import ./home.nix; + "root" = import ./root.nix; + }; + }; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + sddm + git + zsh + neovim + ]; + + # TODO find list of fonts to install + fonts.packages = with pkgs; [ + font-awesome + noto-fonts + fira-code + fira-code-symbols + liberation_ttf + ]; + + # 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; + # }; + programs.zsh.enable = true; + programs.steam.enable = true; + + programs.hyprland = { + enable = true; + portalPackage = pkgs.xdg-desktop-portal-hyprland; + }; + + programs.nix-ld.enable = true; + programs.nix-ld.libraries = with pkgs; [ + wayland + + ]; + + users.defaultUserShell = pkgs.zsh; + + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + jack.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 + ''; + security.polkit.enable = true; + + # List services that you want to enable: + + # Enable the OpenSSH daemon. + services.openssh = { + enable = true; + + settings.PasswordAuthentication = false; + settings.KbdInteractiveAuthentication = false; + }; + + # Open ports in the firewall. + networking.firewall.allowedTCPPorts = [ 5909 ]; + networking.firewall.allowedUDPPorts = [ 5909 ]; + # 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/vnc/hardware-configuration.nix b/hosts/vnc/hardware-configuration.nix new file mode 100644 index 0000000..17ffb75 --- /dev/null +++ b/hosts/vnc/hardware-configuration.nix @@ -0,0 +1,37 @@ +# 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" "ahci" "xhci_pci" "usbhid" "usb_storage" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/263716dd-52cb-4a91-ba0b-e39e492ed0e5"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/B08E-916D"; + fsType = "vfat"; + }; + + 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..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp39s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hosts/vnc/home.nix b/hosts/vnc/home.nix new file mode 100644 index 0000000..9647ccd --- /dev/null +++ b/hosts/vnc/home.nix @@ -0,0 +1,146 @@ +{ config, pkgs, inputs, ... }: + +{ + imports = + [ + inputs.nixvim.homeManagerModules.nixvim + ../../common/zsh.nix + ../../common/hyprland-vnc.nix + ../../common/git.nix + ../../common/nvim/nvim.nix + ../../common/discord/discord.nix + ../../common/spotify.nix + ../../common/automapaper/automapaper.nix + ../../common/firefox.nix + ]; + # Home Manager needs a bit of information about you and the paths it should + # manage. + home.username = "noa"; + home.homeDirectory = "/home/noa"; + + # 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 should not change this value, even if you update Home Manager. If you do + # want to update the value, then make sure to first check the Home Manager + # release notes. + home.stateVersion = "23.11"; # Please read the comment before changing. + + nixpkgs.config.allowUnfree = true; + + # The home.packages option allows you to install Nix packages into your + # environment. + home.packages = with pkgs; [ + file + unzip + zip + + dig + mtr + + obs-studio + steam-run + steam-tui + wayvnc + + btop + + dconf + pipewire + lsd + + # Programming langs + go + nodejs + rustup + + ]; + + + # Home Manager is pretty good at managing dotfiles. The primary way to manage + # plain files is through 'home.file'. + home.file = { + # # Building this configuration will create a copy of 'dotfiles/screenrc' in + # # the Nix store. Activating the configuration will then make '~/.screenrc' a + # # symlink to the Nix store copy. + # ".screenrc".source = dotfiles/screenrc; + + # # You can also set the file content immediately. + # ".gradle/gradle.properties".text = '' + # org.gradle.console=verbose + # org.gradle.daemon.idletimeout=3600000 + # ''; + }; + + # Home Manager can also manage your environment variables through + # 'home.sessionVariables'. If you don't want to manage your shell through Home + # Manager then you have to manually source 'hm-session-vars.sh' located at + # either + # + # ~/.nix-profile/etc/profile.d/hm-session-vars.sh + # + # or + # + # ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh + # + # or + # + # /etc/profiles/per-user/noa/etc/profile.d/hm-session-vars.sh + # + + + home.sessionVariables = { + EDITOR = "nvim"; + TERM = "kitty"; + }; + + xdg = { + enable = true; + }; + + xdg.userDirs = { + enable = true; + createDirectories = true; + }; + + xdg.portal = { + enable = true; + extraPortals = [ pkgs.xdg-desktop-portal-hyprland ]; + configPackages = [ pkgs.hyprland ]; + }; + + dconf = { + enable = true; + settings = { + "org/gnome/desktop/interface" = { + color-scheme = "prefer-dark"; + }; + }; + }; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; + + home.pointerCursor = + let + getFrom = url: hash: name: { + gtk.enable = true; + x11.enable = true; + name = name; + size = 32; + package = + pkgs.runCommand "moveUp" {} '' + mkdir -p $out/share/icons + ln -s ${pkgs.fetchzip { + url = url; + hash = hash; + }} $out/share/icons/${name} + ''; + }; + in + getFrom + "https://github.com/ful1e5/Bibata_Cursor_Rainbow/releases/download/v1.1.2/Bibata-Rainbow-Modern.tar.gz" + "sha256-Ps+IKPwQoRwO9Mqxwc/1nHhdBT2R25IoeHLKe48uHB8=" + "Bibata-Rainbow-Modern"; +} diff --git a/hosts/vnc/nvidia.nix b/hosts/vnc/nvidia.nix new file mode 100644 index 0000000..d9c8dd2 --- /dev/null +++ b/hosts/vnc/nvidia.nix @@ -0,0 +1,27 @@ +{ config, lib, pkgs, ... }: +{ + hardware.opengl = { + enable = true; + driSupport = true; + driSupport32Bit = true; + }; + + services.xserver.videoDrivers = [ "nvidia" ]; + + hardware.nvidia = { + + modesetting.enable = true; + + # NOTE change this if borked + powerManagement = { + enable = true; + finegrained = false; + }; + + open = false; + + nvidiaSettings = true; + + package = config.boot.kernelPackages.nvidiaPackages.stable; + }; +} diff --git a/hosts/vnc/root.nix b/hosts/vnc/root.nix new file mode 100644 index 0000000..5c4b6a5 --- /dev/null +++ b/hosts/vnc/root.nix @@ -0,0 +1,94 @@ +{ config, pkgs, inputs, ... }: + +{ + imports = + [ + inputs.nixvim.homeManagerModules.nixvim + ../../common/wofi.nix + ../../common/zsh.nix + ../../common/hyprland.nix + ../../common/waybar.nix + ../../common/git.nix + ../../common/nvim/nvim.nix + ]; + # Home Manager needs a bit of information about you and the paths it should + # manage. + home.username = "root"; + home.homeDirectory = "/root"; + + # 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 should not change this value, even if you update Home Manager. If you do + # want to update the value, then make sure to first check the Home Manager + # release notes. + home.stateVersion = "23.11"; # Please read the comment before changing. + + nixpkgs.config.allowUnfree = true; + + # The home.packages option allows you to install Nix packages into your + # environment. + home.packages = with pkgs; [ + file + unzip + zip + + dig + mtr + + kitty + lsd + ]; + + + # Home Manager is pretty good at managing dotfiles. The primary way to manage + # plain files is through 'home.file'. + home.file = { + # # Building this configuration will create a copy of 'dotfiles/screenrc' in + # # the Nix store. Activating the configuration will then make '~/.screenrc' a + # # symlink to the Nix store copy. + # ".screenrc".source = dotfiles/screenrc; + + # # You can also set the file content immediately. + # ".gradle/gradle.properties".text = '' + # org.gradle.console=verbose + # org.gradle.daemon.idletimeout=3600000 + # ''; + }; + + # Home Manager can also manage your environment variables through + # 'home.sessionVariables'. If you don't want to manage your shell through Home + # Manager then you have to manually source 'hm-session-vars.sh' located at + # either + # + # ~/.nix-profile/etc/profile.d/hm-session-vars.sh + # + # or + # + # ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh + # + # or + # + # /etc/profiles/per-user/noa/etc/profile.d/hm-session-vars.sh + # + home.sessionVariables = { + EDITOR = "nvim"; + TERM = "kitty"; + }; + + xdg.userDirs.enable = true; + xdg.userDirs.createDirectories = true; + + dconf = { + enable = true; + settings = { + "org/gnome/desktop/interface" = { + color-scheme = "prefer-dark"; + }; + }; + }; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; +}