Desktop usability adjustments #1
@@ -2,10 +2,10 @@
 | 
			
		||||
  description = "Nix config entry point";
 | 
			
		||||
 | 
			
		||||
  inputs = {
 | 
			
		||||
    nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
 | 
			
		||||
    nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
 | 
			
		||||
    nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
 | 
			
		||||
    # Home manager
 | 
			
		||||
    home-manager.url = "github:nix-community/home-manager/release-24.11";
 | 
			
		||||
    home-manager.url = "github:nix-community/home-manager/release-25.05";
 | 
			
		||||
    home-manager.inputs.nixpkgs.follows = "nixpkgs";
 | 
			
		||||
    # Managing flatpak apps
 | 
			
		||||
    nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.4.1";
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,8 @@
 | 
			
		||||
  programs.vscode = {
 | 
			
		||||
    enable = true;
 | 
			
		||||
 | 
			
		||||
    profiles = {
 | 
			
		||||
      default = {
 | 
			
		||||
        extensions = with pkgs.vscode-extensions; [
 | 
			
		||||
          # QOL
 | 
			
		||||
          mhutchie.git-graph
 | 
			
		||||
@@ -19,4 +21,101 @@
 | 
			
		||||
          jnoortheen.nix-ide
 | 
			
		||||
        ];
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      keybindings = {
 | 
			
		||||
        "ctrl+shift+." = "workbench.action.terminal.focus";
 | 
			
		||||
        "ctlr+#" = "editor.action.commentLine";
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      userSettings = ''
 | 
			
		||||
        {
 | 
			
		||||
          "telemetry.enableCrashReporter": false,
 | 
			
		||||
          "telemetry.enableTelemetry": false,
 | 
			
		||||
          "git.ignoreMissingGitWarning": true,
 | 
			
		||||
          "editor.suggestSelection": "first",
 | 
			
		||||
          "workbench.editorAssociations": {
 | 
			
		||||
              "*.ipynb": "jupyter-notebook"
 | 
			
		||||
          },
 | 
			
		||||
          "workbench.startupEditor": "newUntitledFile",
 | 
			
		||||
          "editor.renderWhitespace": "none",
 | 
			
		||||
          "editor.acceptSuggestionOnEnter": "off",
 | 
			
		||||
          "explorer.confirmDelete": false,
 | 
			
		||||
          "git.confirmSync": false,
 | 
			
		||||
          "workbench.iconTheme": "vs-seti",
 | 
			
		||||
          "editor.fontLigatures": true,
 | 
			
		||||
          "explorer.confirmDragAndDrop": false,
 | 
			
		||||
          "editor.wordWrap": "on",
 | 
			
		||||
          "files.associations": {
 | 
			
		||||
          },
 | 
			
		||||
          "settingsSync.ignoredSettings": [
 | 
			
		||||
              "editor.fontFamily",
 | 
			
		||||
              "terminal.integrated.fontFamily",
 | 
			
		||||
              "-python.venvFolders"
 | 
			
		||||
          ],
 | 
			
		||||
          "jupyter.askForKernelRestart": false,
 | 
			
		||||
          "security.workspace.trust.untrustedFiles": "open",
 | 
			
		||||
          "notebook.cellToolbarLocation": {
 | 
			
		||||
              "default": "right",
 | 
			
		||||
              "jupyter-notebook": "left"
 | 
			
		||||
          },
 | 
			
		||||
          "git.enableSmartCommit": true,
 | 
			
		||||
          "terminal.integrated.fontFamily": "Fira Code",
 | 
			
		||||
          "settingsSync.ignoredExtensions": [
 | 
			
		||||
              "ms-vscode-remote.remote-wsl",
 | 
			
		||||
              "ms-vscode-remote.remote-ssh-edit",
 | 
			
		||||
              "ms-vscode-remote.remote-ssh"
 | 
			
		||||
          ],
 | 
			
		||||
          "editor.bracketPairColorization.enabled": true,
 | 
			
		||||
          "jupyter.widgetScriptSources": [
 | 
			
		||||
              "jsdelivr.com",
 | 
			
		||||
              "unpkg.com"
 | 
			
		||||
          ],
 | 
			
		||||
              "%DOC%.tex"
 | 
			
		||||
          ],
 | 
			
		||||
          "diffEditor.renderSideBySide": false,
 | 
			
		||||
          "editor.inlineSuggest.enabled": true,
 | 
			
		||||
              "suppressLineUncommittedWarning": true
 | 
			
		||||
          },
 | 
			
		||||
          "github.copilot.enable": {
 | 
			
		||||
              "*": true,
 | 
			
		||||
              "plaintext": true,
 | 
			
		||||
              "markdown": true,
 | 
			
		||||
              "scminput": false,
 | 
			
		||||
              "yaml": true
 | 
			
		||||
          },
 | 
			
		||||
          "redhat.telemetry.enabled": false,
 | 
			
		||||
          "git.autofetch": true,
 | 
			
		||||
          "terminal.integrated.enableMultiLinePasteWarning": false,
 | 
			
		||||
          "editor.unicodeHighlight.nonBasicASCII": false,
 | 
			
		||||
          "jupyter.disableJupyterAutoStart": true,
 | 
			
		||||
          "editor.unicodeHighlight.invisibleCharacters": false,
 | 
			
		||||
          "editor.unicodeHighlight.ambiguousCharacters": false,
 | 
			
		||||
          "diffEditor.ignoreTrimWhitespace": false,
 | 
			
		||||
          "update.showReleaseNotes": false,
 | 
			
		||||
          "terminal.external.linuxExec": "kitty",
 | 
			
		||||
          "window.dialogStyle": "custom",
 | 
			
		||||
          "window.titleBarStyle": "custom",
 | 
			
		||||
          "github.copilot.editor.enableAutoCompletions": true,
 | 
			
		||||
          "window.menuBarVisibility": "compact",
 | 
			
		||||
          "workbench.colorTheme": "Default Light+",
 | 
			
		||||
          "github.copilot.advanced": {},
 | 
			
		||||
          "git.openRepositoryInParentFolders": "never",
 | 
			
		||||
          "terminal.integrated.commandsToSkipShell": [
 | 
			
		||||
              "language-julia.interrupt"
 | 
			
		||||
          ],
 | 
			
		||||
          "diffEditor.hideUnchangedRegions.enabled": true,
 | 
			
		||||
          "[typst]": {
 | 
			
		||||
              "editor.wordSeparators": "`~!@#$%^&*()=+[{]}\\|;:'\",.<>/?"
 | 
			
		||||
          },
 | 
			
		||||
          "[typst-code]": {
 | 
			
		||||
              "editor.wordSeparators": "`~!@#$%^&*()=+[{]}\\|;:'\",.<>/?"
 | 
			
		||||
          },
 | 
			
		||||
          "tinymist.fontPaths": [
 | 
			
		||||
              "./font"
 | 
			
		||||
          ],
 | 
			
		||||
          "editor.fontFamily": "'FiraCode Nerd Font Mono', 'monospace', monospace",
 | 
			
		||||
        };
 | 
			
		||||
      '';
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										32
									
								
								modules/home-manager/hypr/cursor.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								modules/home-manager/hypr/cursor.nix
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
{inputs, pkgs, ...}: 
 | 
			
		||||
{
 | 
			
		||||
    gtk = {
 | 
			
		||||
        enable = true;
 | 
			
		||||
        cursorTheme = {
 | 
			
		||||
            package = pkgs.capitaine-cursors;
 | 
			
		||||
            name = "capitaine-cursors-white";
 | 
			
		||||
            size = 32;
 | 
			
		||||
        };
 | 
			
		||||
        # iconTheme = {
 | 
			
		||||
        # name = "Papirus-Dark";
 | 
			
		||||
        # package = pkgs.papirus-icon-theme;
 | 
			
		||||
        # };
 | 
			
		||||
        # theme = {
 | 
			
		||||
        # name = "Materia-dark";
 | 
			
		||||
        # package = pkgs.materia-theme;
 | 
			
		||||
        # };
 | 
			
		||||
        # font = {
 | 
			
		||||
        # name = "Inter";
 | 
			
		||||
        # size = 11;
 | 
			
		||||
        # package = pkgs.inter;
 | 
			
		||||
        # };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    home.pointerCursor = {
 | 
			
		||||
        gtk.enable = true;
 | 
			
		||||
        package = pkgs.capitaine-cursors;
 | 
			
		||||
        name = "capitaine-cursors-white";
 | 
			
		||||
        size = 32;
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  imports = [
 | 
			
		||||
    ./cursor.nix
 | 
			
		||||
    ./hyprland-customization.nix
 | 
			
		||||
    ./hyprpaper.nix
 | 
			
		||||
    ./waybar.nix
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,9 @@
 | 
			
		||||
        "$mod, s, exec, $ide"
 | 
			
		||||
        "$mod, e, exec, nautilus"
 | 
			
		||||
        
 | 
			
		||||
        # Lock screen
 | 
			
		||||
        "$mod+Shift, l, exec, hyprlock"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        "$mod+Shift, Q, killactive," # Close window
 | 
			
		||||
        "$mod, f, togglefloating," # Toggle Floating
 | 
			
		||||
@@ -56,6 +59,9 @@
 | 
			
		||||
        # "${pkgs.hyprpaper}/bin/hyprpaper"
 | 
			
		||||
        # hyprpaper is handled as its own service
 | 
			
		||||
        "${pkgs.waybar}/bin/waybar"
 | 
			
		||||
        # Fixes cursor themes in gnome apps under hyprland
 | 
			
		||||
        "gsettings set org.gnome.desktop.interface cursor-theme '${config.home.pointerCursor.name}'"
 | 
			
		||||
        "gsettings set org.gnome.desktop.interface cursor-size ${toString home.pointerCursor.size}"
 | 
			
		||||
      ];
 | 
			
		||||
 | 
			
		||||
      general = {
 | 
			
		||||
@@ -144,35 +150,4 @@
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  services.swaync.enable = true;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  gtk = {
 | 
			
		||||
    enable = true;
 | 
			
		||||
    cursorTheme = {
 | 
			
		||||
      package = pkgs.capitaine-cursors;
 | 
			
		||||
      name = "capitaine-cursors-white";
 | 
			
		||||
      size = 32;
 | 
			
		||||
    };
 | 
			
		||||
    iconTheme = {
 | 
			
		||||
      name = "Papirus-Dark";
 | 
			
		||||
      package = pkgs.papirus-icon-theme;
 | 
			
		||||
    };
 | 
			
		||||
    theme = {
 | 
			
		||||
      name = "Materia-dark";
 | 
			
		||||
      package = pkgs.materia-theme;
 | 
			
		||||
    };
 | 
			
		||||
    font = {
 | 
			
		||||
      name = "Inter";
 | 
			
		||||
      size = 11;
 | 
			
		||||
      package = pkgs.inter;
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  home.pointerCursor = {
 | 
			
		||||
    gtk.enable = true;
 | 
			
		||||
    package = pkgs.capitaine-cursors;
 | 
			
		||||
    name = "capitaine-cursors-white";
 | 
			
		||||
    size = 32;
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,57 +4,57 @@
 | 
			
		||||
 ...
 | 
			
		||||
}:
 | 
			
		||||
with lib; let
 | 
			
		||||
  # wallpapers = builtins.path { path = ../../../wallpapers; };
 | 
			
		||||
  wallpapers = builtins.readDir ../../../wallpapers;
 | 
			
		||||
 | 
			
		||||
  # wallpaperBashArray = "(\"${strings.concatStrings (strings.intersperse "\" \"" (map (wallpaper: "${wallpaper}") wallpapers))}\")";
 | 
			
		||||
  # wallpaperRandomizer = pkgs.writeShellScriptBin "wallpaperRandomizer" ''
 | 
			
		||||
  #   wallpapers=${wallpaperBashArray}
 | 
			
		||||
  #   rand=$[$RANDOM % ''${#wallpapers[@]}]
 | 
			
		||||
  #   wallpaper=''${wallpapers[$rand]}
 | 
			
		||||
  wallpaperBashArray = "(\"${strings.concatStrings (strings.intersperse "\" \"" (map (wallpaper: ../../../wallpapers + "/" + wallpaper) (attrNames wallpapers)))}\")";
 | 
			
		||||
  wallpaperRandomizer = pkgs.writeShellScriptBin "wallpaperRandomizer" ''
 | 
			
		||||
    wallpapers=${wallpaperBashArray}
 | 
			
		||||
    rand=$[$RANDOM % ''${#wallpapers[@]}]
 | 
			
		||||
    wallpaper=''${wallpapers[$rand]}
 | 
			
		||||
 | 
			
		||||
  #   monitor=(`hyprctl monitors | grep Monitor | awk '{print $2}'`)
 | 
			
		||||
  #   hyprctl hyprpaper unload all
 | 
			
		||||
  #   hyprctl hyprpaper preload $wallpaper
 | 
			
		||||
  #   for m in ''${monitor[@]}; do
 | 
			
		||||
  #     hyprctl hyprpaper wallpaper "$m,$wallpaper"
 | 
			
		||||
  #   done
 | 
			
		||||
  # '';
 | 
			
		||||
    monitor=(`hyprctl monitors | grep Monitor | awk '{print $2}'`)
 | 
			
		||||
    hyprctl hyprpaper unload all
 | 
			
		||||
    hyprctl hyprpaper preload $wallpaper
 | 
			
		||||
    for m in ''${monitor[@]}; do
 | 
			
		||||
      hyprctl hyprpaper wallpaper "$m,$wallpaper"
 | 
			
		||||
    done
 | 
			
		||||
  '';
 | 
			
		||||
in {
 | 
			
		||||
  # home.packages = [wallpaperRandomizer];
 | 
			
		||||
  home.packages = [wallpaperRandomizer];
 | 
			
		||||
 | 
			
		||||
  # services.hyprpaper = {
 | 
			
		||||
  #   enable = true;
 | 
			
		||||
  services.hyprpaper = {
 | 
			
		||||
    enable = true;
 | 
			
		||||
 | 
			
		||||
  #   # settings = {
 | 
			
		||||
  #   #   ipc = "on";
 | 
			
		||||
  #   #   splash = false;
 | 
			
		||||
  #   #   splash_offset = 2.0;
 | 
			
		||||
  #   # };
 | 
			
		||||
    # settings = {
 | 
			
		||||
    #   ipc = "on";
 | 
			
		||||
    #   splash = false;
 | 
			
		||||
    #   splash_offset = 2.0;
 | 
			
		||||
    # };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  # systemd.user = {
 | 
			
		||||
  #   services.wallpaperRandomizer = {
 | 
			
		||||
  #     Install = {WantedBy = ["graphical-session.target"];};
 | 
			
		||||
  systemd.user = {
 | 
			
		||||
    services.wallpaperRandomizer = {
 | 
			
		||||
      Install = {WantedBy = ["graphical-session.target"];};
 | 
			
		||||
 | 
			
		||||
  #     Unit = {
 | 
			
		||||
  #       Description = "Set random desktop background using hyprpaper";
 | 
			
		||||
  #       After = ["graphical-session-pre.target"];
 | 
			
		||||
  #       PartOf = ["graphical-session.target"];
 | 
			
		||||
  #     };
 | 
			
		||||
      Unit = {
 | 
			
		||||
        Description = "Set random desktop background using hyprpaper";
 | 
			
		||||
        After = ["graphical-session-pre.target"];
 | 
			
		||||
        PartOf = ["graphical-session.target"];
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
  #     Service = {
 | 
			
		||||
  #       Type = "oneshot";
 | 
			
		||||
  #       ExecStart = "${wallpaperRandomizer}/bin/wallpaperRandomizer";
 | 
			
		||||
  #       IOSchedulingClass = "idle";
 | 
			
		||||
  #     };
 | 
			
		||||
  #   };
 | 
			
		||||
      Service = {
 | 
			
		||||
        Type = "oneshot";
 | 
			
		||||
        ExecStart = "${wallpaperRandomizer}/bin/wallpaperRandomizer";
 | 
			
		||||
        IOSchedulingClass = "idle";
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
  #   timers.wallpaperRandomizer = {
 | 
			
		||||
  #     Unit = {Description = "Set random desktop background using hyprpaper on an interval";};
 | 
			
		||||
    timers.wallpaperRandomizer = {
 | 
			
		||||
      Unit = {Description = "Set random desktop background using hyprpaper on an interval";};
 | 
			
		||||
 | 
			
		||||
  #     Timer = {OnUnitActiveSec = "6h";};
 | 
			
		||||
      Timer = {OnUnitActiveSec = "6h";};
 | 
			
		||||
 | 
			
		||||
  #     Install = {WantedBy = ["timers.target"];};
 | 
			
		||||
  #   };
 | 
			
		||||
  # };
 | 
			
		||||
      Install = {WantedBy = ["timers.target"];};
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
@@ -5,9 +5,8 @@
 | 
			
		||||
 | 
			
		||||
    # waybar requires font-awesome
 | 
			
		||||
    home.packages = [
 | 
			
		||||
        pkgs.font-awesome
 | 
			
		||||
        pkgs.font-awesome_5
 | 
			
		||||
        pkgs.fira-code
 | 
			
		||||
        # fira code now contains ligatures and font-awesome
 | 
			
		||||
        nerd-fonts.fira-code
 | 
			
		||||
        pkgs.pavucontrol
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
@@ -141,7 +140,7 @@
 | 
			
		||||
                border: none;
 | 
			
		||||
                border-radius: 0;
 | 
			
		||||
                /* `otf-font-awesome` is required to be installed for icons */
 | 
			
		||||
                font-family: Liberation Mono;
 | 
			
		||||
                font-family: FiraCode Nerd Font;
 | 
			
		||||
                min-height: 20px;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -4,8 +4,20 @@
 | 
			
		||||
 | 
			
		||||
  xdg.portal = {
 | 
			
		||||
    enable = true;
 | 
			
		||||
    configPackages [ pkgs.hyprland ];
 | 
			
		||||
 | 
			
		||||
    extraPortals = [
 | 
			
		||||
        pkgs.xdg-desktop-portal-gtk
 | 
			
		||||
    ];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  xdg.userDirs = {
 | 
			
		||||
    enable = true;
 | 
			
		||||
    createDirectories = true;
 | 
			
		||||
    desktop = "Desktop";
 | 
			
		||||
    documents = "Documents";
 | 
			
		||||
    downloads = "Downloads";
 | 
			
		||||
    pictures = "Pictures";
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -17,16 +17,18 @@
 | 
			
		||||
          enable = true;
 | 
			
		||||
        };
 | 
			
		||||
        hardware.nvidia = {
 | 
			
		||||
          # prime = {
 | 
			
		||||
          #   nvidiaBusId = "PCI:1:0:0";
 | 
			
		||||
          #   intelBusId = "PCI:0:2:0";
 | 
			
		||||
          # };
 | 
			
		||||
          modesetting.enable = true;
 | 
			
		||||
          powerManagement.enable = true;
 | 
			
		||||
          powerManagement.finegrained = false;
 | 
			
		||||
          open = false;
 | 
			
		||||
          nvidiaSettings = false;
 | 
			
		||||
 | 
			
		||||
          prime = {
 | 
			
		||||
            sync.enable = true;
 | 
			
		||||
            nvidiaBusId = "PCI:1:0:0";
 | 
			
		||||
            intelBusId = "PCI:0:2:0";
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          package = config.boot.kernelPackages.nvidiaPackages.mkDriver {
 | 
			
		||||
            version = "565.77";
 | 
			
		||||
            sha256_64bit = "sha256-CnqnQsRrzzTXZpgkAtF7PbH9s7wbiTRNcM0SPByzFHw=";
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user