234 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			234 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ lib, config, pkgs, userName, ... }:
 | 
						|
{
 | 
						|
    options.swaywm = {
 | 
						|
        enable = lib.mkEnableOption "Enable sway window manager.";
 | 
						|
        useNonFree = lib.mkOption {
 | 
						|
            default = false;
 | 
						|
            example = true;
 | 
						|
            description = "Whether to enable non-free software in the sway config";
 | 
						|
        };
 | 
						|
        installGaming = lib.mkOption {
 | 
						|
            default = false;
 | 
						|
            example = true;
 | 
						|
            description = "Whether to install gaming software on the system.";
 | 
						|
        };
 | 
						|
        systemPackages = lib.mkOption {
 | 
						|
            default = [];
 | 
						|
            description = "Add any additional packages desired. Merged with sway defaults.";
 | 
						|
        };
 | 
						|
 | 
						|
    };
 | 
						|
 | 
						|
    ###
 | 
						|
    ##  Configuration
 | 
						|
    ###
 | 
						|
    config = lib.mkIf config.swaywm.enable {
 | 
						|
 | 
						|
        programs.sway.enable = true;
 | 
						|
        programs.sway.wrapperFeatures.gtk = true;
 | 
						|
 | 
						|
        nixpkgs.config.allowUnfree = config.swaywm.useNonFree;
 | 
						|
        # nixpkgs.config.allowUnsupportedSystem = true;
 | 
						|
        # For R2ModMan
 | 
						|
        # nixpkgs.config.permittedInsecurePackages = [
 | 
						|
        #     "electron-25.9.0"
 | 
						|
        # ];
 | 
						|
        
 | 
						|
        ###
 | 
						|
        ##  XDG portal setup
 | 
						|
        ###
 | 
						|
        xdg.portal = {
 | 
						|
            config = {
 | 
						|
                common = {
 | 
						|
                  default = [
 | 
						|
                    "wlr"
 | 
						|
                  ];
 | 
						|
                };
 | 
						|
            };
 | 
						|
            extraPortals = with pkgs; [
 | 
						|
                # xdg-desktop-portal-kde
 | 
						|
                xdg-desktop-portal-gtk
 | 
						|
            ];
 | 
						|
            wlr.enable = true;
 | 
						|
            enable = true;
 | 
						|
        };
 | 
						|
        xdg.sounds.enable = true;
 | 
						|
 | 
						|
        ###
 | 
						|
        ##  System Packages
 | 
						|
        ###
 | 
						|
        environment.systemPackages = with pkgs; lib.lists.flatten [
 | 
						|
             [
 | 
						|
                bash
 | 
						|
                foot
 | 
						|
                git
 | 
						|
                glib # gsettings
 | 
						|
                grim
 | 
						|
                sway-contrib.grimshot
 | 
						|
                libnotify
 | 
						|
                mako
 | 
						|
                man-pages
 | 
						|
                man-pages-posix
 | 
						|
                nautilus
 | 
						|
                ncspot
 | 
						|
                networkmanagerapplet
 | 
						|
                pavucontrol
 | 
						|
                slurp
 | 
						|
                syncthingtray
 | 
						|
                swaylock
 | 
						|
                swayidle
 | 
						|
                swaybg
 | 
						|
                # swww
 | 
						|
                tailscale-systray
 | 
						|
                wl-clipboard
 | 
						|
                waybar
 | 
						|
                wdisplays
 | 
						|
                wofi
 | 
						|
                xdg-utils
 | 
						|
                zsh
 | 
						|
                lxqt.lxqt-policykit
 | 
						|
                # Fonts
 | 
						|
             ]
 | 
						|
            config.swaywm.systemPackages
 | 
						|
        ];
 | 
						|
        environment.variables.QT_STYLE_OVERRIDE = "kvantum";
 | 
						|
 | 
						|
        # adds additional man pages
 | 
						|
        documentation.dev.enable = true;
 | 
						|
 | 
						|
        # For nautilus
 | 
						|
        services.gnome.sushi.enable = true;
 | 
						|
        programs.nautilus-open-any-terminal = {
 | 
						|
          enable = true;
 | 
						|
          terminal = "foot";
 | 
						|
        };
 | 
						|
        programs.file-roller.enable = true;
 | 
						|
        programs.xfconf.enable = true;
 | 
						|
 | 
						|
        programs.zsh.enable = true;
 | 
						|
        programs.steam = lib.mkIf config.swaywm.installGaming {
 | 
						|
            enable = true;
 | 
						|
            remotePlay.openFirewall = true;
 | 
						|
            gamescopeSession.enable = true;
 | 
						|
        };
 | 
						|
        programs.gamemode = {
 | 
						|
            enable = true;
 | 
						|
            settings = {
 | 
						|
                general = {
 | 
						|
                    reaper_freq = 5;
 | 
						|
                    desiredgov = "performance";
 | 
						|
                    softrealtime = "auto";
 | 
						|
                };
 | 
						|
            };
 | 
						|
        };
 | 
						|
        programs.corectrl = {
 | 
						|
            enable = true;
 | 
						|
            gpuOverclock.enable = true;
 | 
						|
        };
 | 
						|
 | 
						|
        programs.adb.enable = true;
 | 
						|
        # programs.kdeconnect.enable = true;
 | 
						|
        # service file to start the sshAgent
 | 
						|
        programs.ssh.startAgent = true;
 | 
						|
 | 
						|
        ###
 | 
						|
        ##  Services
 | 
						|
        ###
 | 
						|
        services.printing.enable = true;
 | 
						|
        services.printing.drivers = [ pkgs.brlaser ];
 | 
						|
        # Brother Scanner DS-640
 | 
						|
        hardware.sane.enable = true;
 | 
						|
        hardware.sane.brscan5.enable = true;
 | 
						|
        # Printing
 | 
						|
        services.avahi = {
 | 
						|
          enable = true;
 | 
						|
          nssmdns4 = true;
 | 
						|
          openFirewall = true;
 | 
						|
        };
 | 
						|
 | 
						|
        networking.firewall = {
 | 
						|
              enable = true;  # Enable the firewall
 | 
						|
              allowedTCPPorts = [ 8080 8081 ];  # Open port 8080 for TCP
 | 
						|
              # allowedUDPPorts = [ ... ];  # If you need UDP ports
 | 
						|
        };
 | 
						|
        virtualisation.docker.enable = true;
 | 
						|
        services.blueman.enable = true;
 | 
						|
        services.flatpak.enable = true;
 | 
						|
        services.gvfs.enable = true;  # thunar mount, trash, etc
 | 
						|
        services.tumbler.enable = true; # thunar thumbnails
 | 
						|
        services.openssh.enable = true;
 | 
						|
        services.dbus.enable = true;
 | 
						|
        services.syncthing.enable = true;
 | 
						|
        services.gnome.gnome-keyring.enable = true;
 | 
						|
        services.usbmuxd.enable = true;
 | 
						|
        services.tailscale = {
 | 
						|
            enable = true;
 | 
						|
            openFirewall = true;
 | 
						|
        };
 | 
						|
        # For betaflight configurator
 | 
						|
        services.udev.extraRules = ''
 | 
						|
            # DFU (Internal bootloader for STM32 and AT32 MCUs)
 | 
						|
            SUBSYSTEM=="usb", ATTRS{idVendor}=="2e3c", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout"
 | 
						|
            SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout"
 | 
						|
        '';
 | 
						|
        # For yubioath desktop
 | 
						|
        services.pcscd.enable = true;
 | 
						|
        # Audio
 | 
						|
        security.rtkit.enable = true;
 | 
						|
        services.pipewire = {
 | 
						|
          enable = true;
 | 
						|
          alsa.enable = true;
 | 
						|
          pulse.enable = true;
 | 
						|
          wireplumber.enable = true;
 | 
						|
        };
 | 
						|
 | 
						|
        ###
 | 
						|
        ##  Misc
 | 
						|
        ###
 | 
						|
        # Necessary for home-manager sway setup
 | 
						|
        security.polkit.enable = true;
 | 
						|
 | 
						|
        services.greetd = {
 | 
						|
          enable = true;
 | 
						|
          settings = rec {
 | 
						|
            initial_session = {
 | 
						|
              command = "${pkgs.sway}/bin/sway";
 | 
						|
              user = "nate";
 | 
						|
            };
 | 
						|
            default_session = initial_session;
 | 
						|
          };
 | 
						|
        };
 | 
						|
 | 
						|
        hardware.bluetooth = {
 | 
						|
            enable = true; # enables support for Bluetooth
 | 
						|
            powerOnBoot = true;
 | 
						|
            settings.General = {
 | 
						|
                  experimental = true; # show battery
 | 
						|
 | 
						|
                  # https://www.reddit.com/r/NixOS/comments/1ch5d2p/comment/lkbabax/
 | 
						|
                  # for pairing bluetooth controller
 | 
						|
                  Privacy = "device";
 | 
						|
                  JustWorksRepairing = "always";
 | 
						|
                  Class = "0x000100";
 | 
						|
                  FastConnectable = true;
 | 
						|
                };
 | 
						|
        };
 | 
						|
        hardware.xpadneo.enable = true;
 | 
						|
 | 
						|
        services.xserver.videoDrivers = [ "amdgpu" ];
 | 
						|
        # Enable HIP
 | 
						|
        systemd.tmpfiles.rules = [
 | 
						|
              "L+    /opt/rocm/hip   -    -    -     -    ${pkgs.rocmPackages.clr}"
 | 
						|
        ];
 | 
						|
        hardware.graphics = {
 | 
						|
            # Mesa
 | 
						|
            enable = true;
 | 
						|
            enable32Bit = true;
 | 
						|
            # Rocm support
 | 
						|
            extraPackages = with pkgs; [
 | 
						|
                rocmPackages.clr.icd
 | 
						|
            ];
 | 
						|
        };
 | 
						|
    };
 | 
						|
}
 |