362 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			362 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ pkgs, lib, config, stable, ... }:
 | 
						|
 | 
						|
let
 | 
						|
  laptop = builtins.readFile "/etc/hostname" == "syl\n";
 | 
						|
in
 | 
						|
{
 | 
						|
 | 
						|
  # nix = {
 | 
						|
  #   package = pkgs.nixVersions.git;
 | 
						|
  # };
 | 
						|
 | 
						|
  # This adds hyprland cache to cachix and relaxes sandbox
 | 
						|
  nix.settings = {
 | 
						|
    substituters = [ "https://hyprland.cachix.org" ];
 | 
						|
    trusted-public-keys =
 | 
						|
      [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ];
 | 
						|
    sandbox = "relaxed";
 | 
						|
  };
 | 
						|
 | 
						|
 | 
						|
  # Use the systemd-boot EFI boot loader.
 | 
						|
  boot = {
 | 
						|
    kernelPackages = pkgs.linuxPackages_zen;
 | 
						|
    kernelParams = [ "mem_sleep_default=deep" "nvme.noacpi=1" ];
 | 
						|
    # initrd.kernelModules = [ "amdgpu" ];
 | 
						|
  };
 | 
						|
 | 
						|
  # The global useDHCP flag is deprecated, therefore explicitly set to false here.
 | 
						|
  # Per-interface useDHCP will be mandatory in the future, so this generated config
 | 
						|
  # replicates the default behaviour.
 | 
						|
  networking.useDHCP = false;
 | 
						|
 | 
						|
  boot.supportedFilesystems = [ "ntfs" ];
 | 
						|
 | 
						|
  services = {
 | 
						|
    desktopManager.cosmic.enable = true;
 | 
						|
  };
 | 
						|
 | 
						|
  programs.nix-ld.enable = true;
 | 
						|
  # programs.ssh.startAgent = true;
 | 
						|
  security.pam.services.kwallet = {
 | 
						|
    name = "kwallet";
 | 
						|
    enableKwallet = true;
 | 
						|
  };
 | 
						|
 | 
						|
  systemd = {
 | 
						|
    oomd = {
 | 
						|
      enable = true;
 | 
						|
      enableRootSlice = true;
 | 
						|
      enableUserSlices = true;
 | 
						|
      enableSystemSlice = true;
 | 
						|
    };
 | 
						|
    settings.Manager = {
 | 
						|
      DefaultIOAccounting = true;
 | 
						|
      DefaultIPAccounting = true;
 | 
						|
      DefaultTimeoutStopSec = "10s";
 | 
						|
      DefaultTimeoutStartSec = "10s";
 | 
						|
    };
 | 
						|
  };
 | 
						|
  fonts.packages = with pkgs; [
 | 
						|
    nerd-fonts.victor-mono
 | 
						|
    noto-fonts
 | 
						|
    noto-fonts-cjk-sans
 | 
						|
    noto-fonts-emoji
 | 
						|
    liberation_ttf
 | 
						|
    mplus-outline-fonts.githubRelease
 | 
						|
    dina-font
 | 
						|
    proggyfonts
 | 
						|
  ];
 | 
						|
 | 
						|
  hardware = { keyboard.qmk.enable = true; };
 | 
						|
 | 
						|
  security.pam.services = {
 | 
						|
    # sddm.enableKwallet = true;
 | 
						|
    greetd.enableKwallet = true;
 | 
						|
    swaylock = { };
 | 
						|
  };
 | 
						|
 | 
						|
  services.displayManager.cosmic-greeter = {
 | 
						|
    enable = true;
 | 
						|
  };
 | 
						|
 | 
						|
  # services.greetd = {
 | 
						|
  #   enable = true;
 | 
						|
  #   settings = rec {
 | 
						|
  #     initial_session = {
 | 
						|
  #       command = "uwsm start hyprland-uwsm.desktop";
 | 
						|
  #       user = "chris";
 | 
						|
  #     };
 | 
						|
  #     default_session = {
 | 
						|
  #       command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time -r --window-padding 2 --cmd 'uwsm start hyprland-uwsm.desktop' -s /etc/greetd/environments";
 | 
						|
  #       user = "greeter";
 | 
						|
  #     };
 | 
						|
  #     cosmic_session = {
 | 
						|
  #       command = "start-cosmic";
 | 
						|
  #       user = "chris";
 | 
						|
  #     };
 | 
						|
  #     hyprland_session = {
 | 
						|
  #       command = "uwsm start hyprland-uwsm.desktop";
 | 
						|
  #       user = "chris";
 | 
						|
  #     };
 | 
						|
  #   };
 | 
						|
  # };
 | 
						|
 | 
						|
  services.displayManager.sessionPackages = [
 | 
						|
    ((pkgs.writeTextFile {
 | 
						|
      name = "cosmic-on-niri";
 | 
						|
      destination = "/share/wayland-sessions/NOSMIC.desktop";
 | 
						|
      text = ''
 | 
						|
        [Desktop Entry]
 | 
						|
        Name=NOSMIC
 | 
						|
        Comment=This session logs you into the COSMIC desktop on niri
 | 
						|
        Type=Application
 | 
						|
        DesktopNames=niri
 | 
						|
        Exec=${pkgs.writeShellApplication {
 | 
						|
                       name = "start-cosmic-ext-niri";
 | 
						|
                       runtimeInputs = [ pkgs.systemd pkgs.dbus pkgs.cosmic-session pkgs.bash pkgs.coreutils ];
 | 
						|
                       text = ''
 | 
						|
            set -e
 | 
						|
            # From: https://people.debian.org/~mpitt/systemd.conf-2016-graphical-session.pdf
 | 
						|
            if command -v systemctl >/dev/null; then
 | 
						|
                # robustness: if the previous graphical session left some failed units,
 | 
						|
                # reset them so that they don't break this startup
 | 
						|
                for unit in $(systemctl --user --no-legend --state=failed --plain list-units | cut -f1 -d' '); do
 | 
						|
                    partof="$(systemctl --user show -p PartOf --value "$unit")"
 | 
						|
                    for target in cosmic-session.target graphical-session.target; do
 | 
						|
                        if [ "$partof" = "$target" ]; then
 | 
						|
                            systemctl --user reset-failed "$unit"
 | 
						|
                            break
 | 
						|
                        fi
 | 
						|
                    done
 | 
						|
                done
 | 
						|
            fi
 | 
						|
            # use the user's preferred shell to acquire environment variables
 | 
						|
            # see: https://github.com/pop-os/cosmic-session/issues/23
 | 
						|
            if [ -n "''${SHELL:-}" ]; then
 | 
						|
                # --in-login-shell: our flag to indicate that we don't need to recurse any further
 | 
						|
                if [ "''${1:-}" != "--in-login-shell" ]; then
 | 
						|
                    # `exec -l`: like `login`, prefixes $SHELL with a hyphen to start a login shell
 | 
						|
                    exec bash -c "exec -l ${"'"}''${SHELL}' -c ${"'"}''${0} --in-login-shell'"
 | 
						|
                fi
 | 
						|
            fi
 | 
						|
            export XDG_CURRENT_DESKTOP="''${XDG_CURRENT_DESKTOP:=niri}"
 | 
						|
            export XDG_SESSION_TYPE="''${XDG_SESSION_TYPE:=wayland}"
 | 
						|
            export XCURSOR_THEME="''${XCURSOR_THEME:=Cosmic}"
 | 
						|
            export _JAVA_AWT_WM_NONREPARENTING=1
 | 
						|
            export GDK_BACKEND=wayland,x11
 | 
						|
            export MOZ_ENABLE_WAYLAND=1
 | 
						|
            export QT_QPA_PLATFORM="wayland;xcb"
 | 
						|
            export QT_AUTO_SCREEN_SCALE_FACTOR=1
 | 
						|
            export QT_ENABLE_HIGHDPI_SCALING=1
 | 
						|
            if command -v systemctl >/dev/null; then
 | 
						|
                # set environment variables for new units started by user service manager
 | 
						|
                systemctl --user import-environment XDG_SESSION_TYPE XDG_CURRENT_DESKTOP
 | 
						|
            fi
 | 
						|
            # Run cosmic-session
 | 
						|
            if [[ -z "''${DBUS_SESSION_BUS_ADDRESS}" ]]; then
 | 
						|
                exec dbus-run-session -- cosmic-session niri
 | 
						|
            else
 | 
						|
                exec cosmic-session niri
 | 
						|
            fi
 | 
						|
          '';
 | 
						|
                     }}/bin/start-cosmic-ext-niri
 | 
						|
      '';
 | 
						|
    }
 | 
						|
 | 
						|
    ).overrideAttrs
 | 
						|
      (old: {
 | 
						|
        passthru.providedSessions = [ "NOSMIC" ];
 | 
						|
      }))
 | 
						|
  ];
 | 
						|
 | 
						|
  programs.regreet = { enable = true; };
 | 
						|
 | 
						|
  environment.etc."greetd/environments".text = ''
 | 
						|
    hyprland
 | 
						|
    dbus-run-session startplasma-wayland
 | 
						|
    fish
 | 
						|
    bash
 | 
						|
  '';
 | 
						|
 | 
						|
  # qt = {
 | 
						|
  #   platformTheme = "qt5ct";
 | 
						|
  #   enable = true;
 | 
						|
  # };
 | 
						|
 | 
						|
  xdg.portal = {
 | 
						|
    enable = true;
 | 
						|
    extraPortals = [ pkgs.kdePackages.xdg-desktop-portal-kde ];
 | 
						|
  };
 | 
						|
 | 
						|
  programs.hyprland = {
 | 
						|
    enable = true;
 | 
						|
    withUWSM = true;
 | 
						|
    xwayland.enable = true;
 | 
						|
  };
 | 
						|
 | 
						|
  services.avahi = {
 | 
						|
    enable = true;
 | 
						|
    nssmdns4 = true;
 | 
						|
  };
 | 
						|
 | 
						|
  # Enable sound.
 | 
						|
  security.rtkit.enable = true;
 | 
						|
  services.pipewire = {
 | 
						|
    enable = true;
 | 
						|
    alsa.enable = true;
 | 
						|
    alsa.support32Bit = true;
 | 
						|
    pulse.enable = true;
 | 
						|
    jack.enable = true;
 | 
						|
    wireplumber.enable = true;
 | 
						|
  };
 | 
						|
 | 
						|
  # Needed for some pipewire progs and other gtk apps
 | 
						|
  programs.dconf.enable = true;
 | 
						|
 | 
						|
  environment.variables = {
 | 
						|
    SAL_USE_VCLPLUGIN = "kf5";
 | 
						|
    EDITOR = "emacsclient -t -a";
 | 
						|
    VISUAL = "emacsclient -c -a";
 | 
						|
    QT_LOGGING_RULES = "js=true; kwin_*.debug=true";
 | 
						|
    # GTK_USE_PORTAL = "1";
 | 
						|
    # Fixing Qt apps in other environments
 | 
						|
    # Thought I needed this but apparently they are working fine without it.
 | 
						|
    # QT_XCB_GL_INTEGRATION = "xcb_egl";
 | 
						|
    # QT_QPA_PLATFORM_PLUGIN_PATH = "${pkgs.qt5.qtbase.bin}/lib/qt-${pkgs.qt5.qtbase.qtCompatVersion}/plugins/platforms";
 | 
						|
    NIXOS_OZONE_WL = "1";
 | 
						|
    _JAVA_AWT_WM_NONEREPARENTING = "1";
 | 
						|
    # DISABLE_QT5_COMPAT = "0";
 | 
						|
    GDK_BACKEND = "wayland";
 | 
						|
    ANKI_WAYLAND = "1";
 | 
						|
    WLR_DRM_NO_ATOMIC = "1";
 | 
						|
    QT_AUTO_SCREEN_SCALE_FACTOR = "1";
 | 
						|
    QT_QPA_PLATFORM = "wayland";
 | 
						|
    # QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
 | 
						|
    # QT_QPA_PLATFORMTHEME = "qt5ct";
 | 
						|
    MOZ_ENABLE_WAYLAND = "1";
 | 
						|
    MOZ_DBUS_REMOTE = "1";
 | 
						|
    WLR_BACKEND = "vulkan";
 | 
						|
    WLR_RENDERER = "vulkan";
 | 
						|
    XDG_SESSION_TYPE = "wayland";
 | 
						|
    # Remember that this causes issues in some games use "unset SDL_VIDEODRIVER &&"
 | 
						|
    SDL_VIDEODRIVER = "wayland";
 | 
						|
    CLUTTER_BACKEND = "wayland";
 | 
						|
    WLR_NO_HARDWARE_CURSORS = "1";
 | 
						|
  };
 | 
						|
 | 
						|
  programs.partition-manager.enable = true;
 | 
						|
  programs.kdeconnect.enable = true;
 | 
						|
 | 
						|
  # Turn on flatpak
 | 
						|
  services.flatpak.enable = true;
 | 
						|
  programs.appimage.enable = true;
 | 
						|
  programs.appimage.binfmt = true;
 | 
						|
 | 
						|
  # Configure keymap in X11
 | 
						|
  services.xserver.xkb.layout = "us";
 | 
						|
 | 
						|
  # Enable CUPS to print documents.
 | 
						|
  services.printing.enable = true;
 | 
						|
  services.printing.drivers =
 | 
						|
    [ pkgs.gutenprint pkgs.gutenprintBin pkgs.cnijfilter2 ];
 | 
						|
 | 
						|
  services.usbmuxd.enable = true;
 | 
						|
  services.fstrim.enable = true;
 | 
						|
 | 
						|
  #######################
 | 
						|
  # VIRTUALIZATION
 | 
						|
  #######################
 | 
						|
 | 
						|
  # virtualisation.waydroid.enable = true;
 | 
						|
  virtualisation.podman.enable = true;
 | 
						|
  # virtualisation.docker.enable = true;
 | 
						|
  virtualisation.libvirtd = {
 | 
						|
    enable = true;
 | 
						|
    qemu = {
 | 
						|
      runAsRoot = false;
 | 
						|
      swtpm.enable = true;
 | 
						|
    };
 | 
						|
  };
 | 
						|
  services.samba-wsdd.enable = true;
 | 
						|
  services.samba = {
 | 
						|
    enable = true;
 | 
						|
    # settings = {
 | 
						|
    #   workgroup = "WORKGROUP";
 | 
						|
    #   "server string" = "smbnix";
 | 
						|
    #   "netbios name" = "smbnix";
 | 
						|
    #   security = "user";
 | 
						|
    #   "hosts allow" = ["192.168.0." "127.0.0.1" "localhost"];
 | 
						|
    #   "hosts deny" = "0.0.0.0/0";
 | 
						|
    #   "guest account" = "nobody";
 | 
						|
    #   "map to guest" = "bad user";
 | 
						|
    # };
 | 
						|
    shares = {
 | 
						|
      public = {
 | 
						|
        path = "/home/chris";
 | 
						|
        "read only" = false;
 | 
						|
        browsable = true;
 | 
						|
        "guest ok" = true;
 | 
						|
        comment = "Share";
 | 
						|
      };
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  # services.syncthing = {
 | 
						|
  #   enable = true;
 | 
						|
  #   dataDir = "/home/chris";
 | 
						|
  #   openDefaultPorts = true;
 | 
						|
  #   configDir = "/home/chris/.config/syncthing";
 | 
						|
  #   user = "chris";
 | 
						|
  #   group = "users";
 | 
						|
  #   guiAddress = "0.0.0.0:8384";
 | 
						|
  #   overrideFolders = true;
 | 
						|
  #   overrideDevices = true;
 | 
						|
  #   settings = {
 | 
						|
  #     gui = {
 | 
						|
  #       theme = "dark";
 | 
						|
  #     };
 | 
						|
  #     devices = {
 | 
						|
  #       syl = {
 | 
						|
  #         id = "AJMADOK-TENODAA-VSOEW2A-4RXY2XI-YNHIS7H-H3ZYAO5-3UQ64EE-O2N5BAY";
 | 
						|
  #       };
 | 
						|
  #       kaladin = {
 | 
						|
  #         id = "4MQVV7D-WMZ6TZQ-2OSJCHO-ZCOCUCK-DXZLDM4-PWBHJHS-PMI45EH-QGIMAAJ";
 | 
						|
  #       };
 | 
						|
  #       shadow = {
 | 
						|
  #         id = "B24VU6Z-URTMEXN-ZYKRWX7-XWSTHXD-XKX67EB-XSKMT4V-KWKGX7Q-W7DB2QV";
 | 
						|
  #       };
 | 
						|
  #       tablet = {
 | 
						|
  #         id = "4HEXCNH-MCVBZQX-LQ735TG-P2VTJ7N-CZ5MK4P-ICZAPC7-YCXVEWV-7NILMA5";
 | 
						|
  #       };
 | 
						|
  #       kohlin = {
 | 
						|
  #         id = "BSWKBRR-2IJBCHA-UQY7DE7-CV2U2IL-PMFQFCJ-D5ZZJMU-FPYRUPC-MCC32QQ";
 | 
						|
  #       };
 | 
						|
  #       dalinar = {
 | 
						|
  #         id = "MPRMA33-XHW6SRE-D2EDBCP-TSMRNGI-ZCE2TAN-FE4BMKA-PSKGYJW-CRIEJQL";
 | 
						|
  #       };
 | 
						|
  #     };
 | 
						|
  #     folders = {
 | 
						|
  #       docs = {
 | 
						|
  #         path = "/home/chris/docs";
 | 
						|
  #         devices = [ (if laptop then "kaladin" else "syl") "shadow" "dalinar" ];
 | 
						|
  #         versioning = {
 | 
						|
  #           type = "staggered";
 | 
						|
  #           fsPath = "~/.local/syncthing/backup";
 | 
						|
  #           params = {
 | 
						|
  #             cleanInterval = 3600;
 | 
						|
  #             maxAge = 31536000;
 | 
						|
  #           };
 | 
						|
  #         };
 | 
						|
  #       };
 | 
						|
  #     };
 | 
						|
  #   };
 | 
						|
  # };
 | 
						|
 | 
						|
 | 
						|
  # Android Tools
 | 
						|
  programs.adb.enable = true;
 | 
						|
  services.udev.packages = [ pkgs.android-udev-rules ];
 | 
						|
 | 
						|
  services.esphome = { enable = true; };
 | 
						|
}
 |