From 6c62dfa7e38a4c2eca89cd0c4580978629147ae0 Mon Sep 17 00:00:00 2001 From: FinnPL Date: Tue, 2 Dec 2025 11:11:18 +0100 Subject: [PATCH 01/10] fix --- modules/home-manager/jetbrains.nix | 1 + modules/hyprland/hyprland-config.nix | 1 + 2 files changed, 2 insertions(+) diff --git a/modules/home-manager/jetbrains.nix b/modules/home-manager/jetbrains.nix index bf7dde0..88f1d50 100644 --- a/modules/home-manager/jetbrains.nix +++ b/modules/home-manager/jetbrains.nix @@ -54,5 +54,6 @@ in { home.sessionVariables = { JAVA_HOME = "${pkgs.openjdk}"; PATH = "$PATH:${pkgs.openjdk}/bin:${pkgs.gcc}/bin:${pkgs.jetbrains-toolbox}/bin"; + _JAVA_AWT_WM_NONREPARENTING = "1"; }; } diff --git a/modules/hyprland/hyprland-config.nix b/modules/hyprland/hyprland-config.nix index 45b5916..591f897 100644 --- a/modules/hyprland/hyprland-config.nix +++ b/modules/hyprland/hyprland-config.nix @@ -78,6 +78,7 @@ windowrule = opacity 0.98 override 0.98 override, match:class (gimp|gwenview|ristretto) windowrule = opacity 0.98 override 0.98 override, match:class (evince|okular|zathura) windowrule = opacity 0.98 override 0.98 override, match:class (vlc|mpv) + windowrule = opacity 0.98 override 0.98 override, match:class jetbrains $mod = SUPER From 1d1f85328e4b5b709bef050e07a86b8b57f5ef56 Mon Sep 17 00:00:00 2001 From: FinnPL Date: Tue, 2 Dec 2025 11:47:57 +0100 Subject: [PATCH 02/10] refactor: improve icon caching and loading logic in NotificationAppIcon --- .../common/widgets/NotificationAppIcon.qml | 78 +++++++++++++++---- 1 file changed, 63 insertions(+), 15 deletions(-) diff --git a/modules/quickshell/config/modules/common/widgets/NotificationAppIcon.qml b/modules/quickshell/config/modules/common/widgets/NotificationAppIcon.qml index ad250d9..42cd3c7 100644 --- a/modules/quickshell/config/modules/common/widgets/NotificationAppIcon.qml +++ b/modules/quickshell/config/modules/common/widgets/NotificationAppIcon.qml @@ -20,6 +20,16 @@ MaterialShape { // App icon property real appIconSize: implicitSize * appIconScale property real smallAppIconSize: implicitSize * smallAppIconScale + // Cache initial values to prevent icon changes during delete animations + property string cachedAppIcon: "" + property string cachedImage: "" + property string cachedSummary: "" + Component.onCompleted: { + cachedAppIcon = appIcon ?? "" + cachedImage = image ?? "" + cachedSummary = summary ?? "" + } + implicitSize: 38 * scale property list urgentShapes: [ MaterialShape.Shape.VerySunny, @@ -30,12 +40,12 @@ MaterialShape { // App icon color: isUrgent ? Appearance.colors.colPrimaryContainer : Appearance.colors.colSecondaryContainer Loader { id: materialSymbolLoader - active: root.appIcon == "" + active: root.cachedAppIcon == "" anchors.fill: parent sourceComponent: MaterialSymbol { text: { const defaultIcon = NotificationUtils.findSuitableMaterialSymbol("") - const guessedIcon = NotificationUtils.findSuitableMaterialSymbol(root.summary) + const guessedIcon = NotificationUtils.findSuitableMaterialSymbol(root.cachedSummary) return (root.urgency == NotificationUrgency.Critical && guessedIcon === defaultIcon) ? "priority_high" : guessedIcon } @@ -48,18 +58,38 @@ MaterialShape { // App icon } Loader { id: appIconLoader - active: root.image == "" && root.appIcon != "" + active: root.cachedImage == "" && root.cachedAppIcon != "" anchors.centerIn: parent - sourceComponent: IconImage { - id: appIconImage - implicitSize: root.appIconSize - asynchronous: true - source: Quickshell.iconPath(root.appIcon, "image-missing") + sourceComponent: Item { + implicitWidth: root.appIconSize + implicitHeight: root.appIconSize + // Use check=true to return empty string if icon doesn't exist + property string iconSource: Quickshell.iconPath(root.cachedAppIcon, true) + property bool iconValid: iconSource != "" + Image { + id: appIconImage + anchors.fill: parent + asynchronous: true + source: parent.iconSource + sourceSize.width: root.appIconSize + sourceSize.height: root.appIconSize + visible: parent.iconValid + } + // Fallback when icon doesn't exist + MaterialSymbol { + anchors.fill: parent + visible: !parent.iconValid + text: NotificationUtils.findSuitableMaterialSymbol(root.cachedSummary) + color: isUrgent ? Appearance.colors.colOnPrimaryContainer : Appearance.colors.colOnSecondaryContainer + iconSize: root.materialIconSize + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } } } Loader { id: notifImageLoader - active: root.image != "" + active: root.cachedImage != "" anchors.fill: parent sourceComponent: Item { anchors.fill: parent @@ -68,18 +98,19 @@ MaterialShape { // App icon anchors.fill: parent readonly property int size: parent.width - source: root.image + source: root.cachedImage fillMode: Image.PreserveAspectCrop cache: false antialiasing: true asynchronous: true + visible: status === Image.Ready width: size height: size sourceSize.width: size sourceSize.height: size - layer.enabled: true + layer.enabled: status === Image.Ready layer.effect: OpacityMask { maskSource: Rectangle { width: notifImage.size @@ -88,15 +119,32 @@ MaterialShape { // App icon } } } + // Fallback icon when image fails to load + Loader { + active: notifImage.status !== Image.Ready + anchors.fill: parent + sourceComponent: MaterialSymbol { + text: NotificationUtils.findSuitableMaterialSymbol(root.cachedSummary) + anchors.fill: parent + color: isUrgent ? Appearance.colors.colOnPrimaryContainer : Appearance.colors.colOnSecondaryContainer + iconSize: root.materialIconSize + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } Loader { id: notifImageAppIconLoader - active: root.appIcon != "" + // Only show if icon exists and image loaded successfully + active: root.cachedAppIcon != "" && notifImage.status === Image.Ready && Quickshell.iconPath(root.cachedAppIcon, true) != "" anchors.bottom: parent.bottom anchors.right: parent.right - sourceComponent: IconImage { - implicitSize: root.smallAppIconSize + sourceComponent: Image { + width: root.smallAppIconSize + height: root.smallAppIconSize asynchronous: true - source: Quickshell.iconPath(root.appIcon, "image-missing") + source: Quickshell.iconPath(root.cachedAppIcon, true) + sourceSize.width: root.smallAppIconSize + sourceSize.height: root.smallAppIconSize } } } From 26ed04d460718237a32635d4b43bf0ecc485ea74 Mon Sep 17 00:00:00 2001 From: FinnPL Date: Tue, 2 Dec 2025 12:01:53 +0100 Subject: [PATCH 03/10] feat: add Haskell package management and VSCode integration --- hosts/centaur/home.nix | 1 + modules/home-manager/haskell.nix | 19 +++++++++++++++++++ modules/home-manager/rust.nix | 4 ++++ 3 files changed, 24 insertions(+) create mode 100644 modules/home-manager/haskell.nix diff --git a/hosts/centaur/home.nix b/hosts/centaur/home.nix index 7fa9403..0674d4e 100644 --- a/hosts/centaur/home.nix +++ b/hosts/centaur/home.nix @@ -23,6 +23,7 @@ ../../modules/home-manager/discord.nix ../../modules/home-manager/neovim.nix ../../modules/home-manager/rust.nix + ../../modules/home-manager/haskell.nix ../../modules/hyprland/default.nix ]; diff --git a/modules/home-manager/haskell.nix b/modules/home-manager/haskell.nix new file mode 100644 index 0000000..d02deca --- /dev/null +++ b/modules/home-manager/haskell.nix @@ -0,0 +1,19 @@ +{ + config, + pkgs, + ... +}: +{ + home.packages = with pkgs; [ + haskell-language-server + ghc + cabal-install + stack + ormolu + stylish-haskell + ]; + + programs.vscode.profiles.default.extensions = with pkgs.vscode-extensions; [ + haskell.haskell + ]; +} diff --git a/modules/home-manager/rust.nix b/modules/home-manager/rust.nix index bbfff85..cbd25ed 100644 --- a/modules/home-manager/rust.nix +++ b/modules/home-manager/rust.nix @@ -18,4 +18,8 @@ home.sessionVariables = { RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}"; }; + + programs.vscode.profiles.default.extensions = with pkgs.vscode-extensions; [ + rust-lang.rust-analyzer + ]; } From 495362f8a7bca245a993b82b33400ceb84b3e9ff Mon Sep 17 00:00:00 2001 From: FinnPL Date: Tue, 2 Dec 2025 12:10:57 +0100 Subject: [PATCH 04/10] fix: update Python package management and remove Python extension from VSCode --- hosts/centaur/home.nix | 2 +- modules/home-manager/haskell.nix | 3 +-- .../{python-packages.nix => python.nix} | 16 ++++++++++++---- modules/home-manager/vscode.nix | 1 - 4 files changed, 14 insertions(+), 8 deletions(-) rename modules/home-manager/{python-packages.nix => python.nix} (70%) diff --git a/hosts/centaur/home.nix b/hosts/centaur/home.nix index 0674d4e..25c8460 100644 --- a/hosts/centaur/home.nix +++ b/hosts/centaur/home.nix @@ -18,7 +18,7 @@ ../../modules/home-manager/zsh.nix ../../modules/home-manager/jetbrains.nix ../../modules/home-manager/thunderbird.nix - ../../modules/home-manager/python-packages.nix + ../../modules/home-manager/python.nix ../../modules/home-manager/cli-tools.nix ../../modules/home-manager/discord.nix ../../modules/home-manager/neovim.nix diff --git a/modules/home-manager/haskell.nix b/modules/home-manager/haskell.nix index d02deca..4343ecf 100644 --- a/modules/home-manager/haskell.nix +++ b/modules/home-manager/haskell.nix @@ -2,8 +2,7 @@ config, pkgs, ... -}: -{ +}: { home.packages = with pkgs; [ haskell-language-server ghc diff --git a/modules/home-manager/python-packages.nix b/modules/home-manager/python.nix similarity index 70% rename from modules/home-manager/python-packages.nix rename to modules/home-manager/python.nix index 256a2ab..1e93469 100644 --- a/modules/home-manager/python-packages.nix +++ b/modules/home-manager/python.nix @@ -11,14 +11,18 @@ plotly sympy notebook - # For quickshell color generation pillow materialyoucolor + + # Linting / formatting / typing + black + isort + flake8 + pylint + mypy ]); in { - home.packages = [ - myPythonEnv - ]; + home.packages = [myPythonEnv]; programs.zsh.shellAliases = { jn = "${myPythonEnv}/bin/jupyter notebook"; @@ -31,4 +35,8 @@ in { home.activation.createNotebooksDir = '' mkdir -p ${config.home.homeDirectory}/notebooks ''; + + programs.vscode.profiles.default.extensions = with pkgs.vscode-extensions; [ + ms-python.python + ]; } diff --git a/modules/home-manager/vscode.nix b/modules/home-manager/vscode.nix index d7cd528..ce29a1b 100644 --- a/modules/home-manager/vscode.nix +++ b/modules/home-manager/vscode.nix @@ -8,7 +8,6 @@ programs.vscode = { enable = true; profiles.default.extensions = with pkgs.vscode-extensions; [ - ms-python.python #docker.docker ms-azuretools.vscode-docker #ms-azuretools.vscode-containers From 5a40239bfde37b92cccfb01c9999ac14204e1ee8 Mon Sep 17 00:00:00 2001 From: FinnPL Date: Sun, 21 Dec 2025 14:36:14 +0100 Subject: [PATCH 05/10] fix --- modules/quickshell/shell-config.nix | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/quickshell/shell-config.nix b/modules/quickshell/shell-config.nix index 14a194c..ccb0a4a 100644 --- a/modules/quickshell/shell-config.nix +++ b/modules/quickshell/shell-config.nix @@ -81,13 +81,20 @@ enabledPanels = [ "iiBar" "iiBackground" + "iiDock" "iiLock" "iiMediaControls" "iiNotificationPopup" "iiOnScreenDisplay" + "iiOverlay" "iiOverview" + "iiPolkit" + "iiRegionSelector" + "iiReloadPopup" + "iiScreenCorners" "iiSessionScreen" "iiSidebarRight" + "iiVerticalBar" ]; panelFamily = "ii"; policies = {}; From 67820cd08fe3693353291eaded9ef5fe3c5f8111 Mon Sep 17 00:00:00 2001 From: FinnPL Date: Thu, 26 Mar 2026 01:51:49 +0100 Subject: [PATCH 06/10] fix: update theme configuration and improve package references --- flake.lock | 257 +++++++++++++++++------------ flake.nix | 2 +- hosts/centaur/configuration.nix | 18 +- modules/home-manager/basics.nix | 11 +- modules/home-manager/cli-tools.nix | 2 +- modules/home-manager/discord.nix | 2 +- modules/home-manager/neovim.nix | 4 +- 7 files changed, 172 insertions(+), 124 deletions(-) diff --git a/flake.lock b/flake.lock index fcd7d64..c632df9 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ ] }, "locked": { - "lastModified": 1763922789, - "narHash": "sha256-XnkWjCpeXfip9tqYdL0b0zzBDjq+dgdISvEdSVGdVyA=", + "lastModified": 1774211390, + "narHash": "sha256-sTtAgCCaX8VNNZlQFACd3i1IQ+DB0Wf3COgiFS152ds=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "a20a0e67a33b6848378a91b871b89588d3a12573", + "rev": "f62a4dbfa4e5584f14ad4c62afedf6e4b433cf70", "type": "github" }, "original": { @@ -54,28 +54,28 @@ "base16-fish": { "flake": false, "locked": { - "lastModified": 1754405784, - "narHash": "sha256-l9xHIy+85FN+bEo6yquq2IjD1rSg9fjfjpyGP1W8YXo=", + "lastModified": 1765809053, + "narHash": "sha256-XCUQLoLfBJ8saWms2HCIj4NEN+xNsWBlU1NrEPcQG4s=", "owner": "tomyun", "repo": "base16-fish", - "rev": "23ae20a0093dca0d7b39d76ba2401af0ccf9c561", + "rev": "86cbea4dca62e08fb7fd83a70e96472f92574782", "type": "github" }, "original": { "owner": "tomyun", "repo": "base16-fish", - "rev": "23ae20a0093dca0d7b39d76ba2401af0ccf9c561", + "rev": "86cbea4dca62e08fb7fd83a70e96472f92574782", "type": "github" } }, "base16-helix": { "flake": false, "locked": { - "lastModified": 1752979451, - "narHash": "sha256-0CQM+FkYy0fOO/sMGhOoNL80ftsAzYCg9VhIrodqusM=", + "lastModified": 1760703920, + "narHash": "sha256-m82fGUYns4uHd+ZTdoLX2vlHikzwzdu2s2rYM2bNwzw=", "owner": "tinted-theming", "repo": "base16-helix", - "rev": "27cf1e66e50abc622fb76a3019012dc07c678fac", + "rev": "d646af9b7d14bff08824538164af99d0c521b185", "type": "github" }, "original": { @@ -109,11 +109,11 @@ }, "locked": { "dir": "pkgs/firefox-addons", - "lastModified": 1764561884, - "narHash": "sha256-vQ3iFPPhxsLqV3c5kgmYP53mVD6id6gsP0tN+oTmqok=", + "lastModified": 1774411399, + "narHash": "sha256-Qi3kg32UZe3eydNCrNMbKblBRM7OB+m+IQsL9uxlzPQ=", "owner": "rycee", "repo": "nur-expressions", - "rev": "aba4621459aec251d90d6452e3495b58a8a5e185", + "rev": "12af22aad517da1a19bf860e63666d063c1bc7b6", "type": "gitlab" }, "original": { @@ -126,11 +126,11 @@ "firefox-gnome-theme": { "flake": false, "locked": { - "lastModified": 1758112371, - "narHash": "sha256-lizRM2pj6PHrR25yimjyFn04OS4wcdbc38DCdBVa2rk=", + "lastModified": 1764873433, + "narHash": "sha256-1XPewtGMi+9wN9Ispoluxunw/RwozuTRVuuQOmxzt+A=", "owner": "rafaelmardojai", "repo": "firefox-gnome-theme", - "rev": "0909cfe4a2af8d358ad13b20246a350e14c2473d", + "rev": "f7ffd917ac0d253dbd6a3bf3da06888f57c69f92", "type": "github" }, "original": { @@ -142,15 +142,15 @@ "flake-compat": { "flake": false, "locked": { - "lastModified": 1761588595, - "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", - "owner": "edolstra", + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", + "owner": "NixOS", "repo": "flake-compat", - "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", "type": "github" }, "original": { - "owner": "edolstra", + "owner": "NixOS", "repo": "flake-compat", "type": "github" } @@ -162,7 +162,7 @@ "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", "revCount": 69, "type": "tarball", - "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz?rev=ff81ac966bb2cae68946d5ed5fc4994f96d0ffec&revCount=69" + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz" }, "original": { "type": "tarball", @@ -174,11 +174,11 @@ "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1754091436, - "narHash": "sha256-XKqDMN1/Qj1DKivQvscI4vmHfDfvYR2pfuFOJiCeewM=", + "lastModified": 1772408722, + "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "67df8c627c2c39c41dbec76a1f201929929ab0bd", + "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", "type": "github" }, "original": { @@ -195,11 +195,11 @@ ] }, "locked": { - "lastModified": 1756770412, - "narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=", + "lastModified": 1767609335, + "narHash": "sha256-feveD98mQpptwrAEggBQKJTYbvwwglSbOv53uCfH9PY=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "4524271976b625a4a605beefd893f270620fd751", + "rev": "250481aafeb741edfe23d29195671c19b36b6dca", "type": "github" }, "original": { @@ -250,11 +250,11 @@ "flake": false, "locked": { "host": "gitlab.gnome.org", - "lastModified": 1762869044, - "narHash": "sha256-nwm/GJ2Syigf7VccLAZ66mFC8mZJFqpJmIxSGKl7+Ds=", + "lastModified": 1767737596, + "narHash": "sha256-eFujfIUQDgWnSJBablOuG+32hCai192yRdrNHTv0a+s=", "owner": "GNOME", "repo": "gnome-shell", - "rev": "680e3d195a92203f28d4bf8c6e8bb537cc3ed4ad", + "rev": "ef02db02bf0ff342734d525b5767814770d85b49", "type": "gitlab" }, "original": { @@ -272,11 +272,11 @@ ] }, "locked": { - "lastModified": 1764603455, - "narHash": "sha256-Q70rxlbrxPcTtqWIb9+71rkJESxIOou5isZBvyOieXw=", + "lastModified": 1774379316, + "narHash": "sha256-0nGNxWDUH2Hzlj/R3Zf4FEK6fsFNB/dvewuboSRZqiI=", "owner": "nix-community", "repo": "home-manager", - "rev": "effe4c007d6243d9e69ce2242d76a2471c1b8d5c", + "rev": "1eb0549a1ab3fe3f5acf86668249be15fa0e64f7", "type": "github" }, "original": { @@ -301,11 +301,11 @@ ] }, "locked": { - "lastModified": 1753964049, - "narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=", + "lastModified": 1772461003, + "narHash": "sha256-pVICsV7FtcEeVwg5y/LFh3XFUkVJninm/P1j/JHzEbM=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5", + "rev": "b62396457b9cfe2ebf24fe05404b09d2a40f8ed7", "type": "github" }, "original": { @@ -330,11 +330,11 @@ ] }, "locked": { - "lastModified": 1763733840, - "narHash": "sha256-JnET78yl5RvpGuDQy3rCycOCkiKoLr5DN1fPhRNNMco=", + "lastModified": 1772461523, + "narHash": "sha256-mI6A51do+hEUzeJKk9YSWfVHdI/SEEIBi2tp5Whq5mI=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "8f1bec691b2d198c60cccabca7a94add2df4ed1a", + "rev": "7d63c04b4a2dd5e59ef943b4b143f46e713df804", "type": "github" }, "original": { @@ -353,17 +353,18 @@ "hyprlang": "hyprlang", "hyprutils": "hyprutils", "hyprwayland-scanner": "hyprwayland-scanner", + "hyprwire": "hyprwire", "nixpkgs": "nixpkgs", "pre-commit-hooks": "pre-commit-hooks", "systems": "systems", "xdph": "xdph" }, "locked": { - "lastModified": 1764607679, - "narHash": "sha256-1Bsem6lhJWMQmkLIml5oKOL+z1dYMewZ6ql0K35Y3TA=", + "lastModified": 1774483729, + "narHash": "sha256-hLERRUCBpbv48UmlhkoIl5UUKX9uuiruLg2SKSp2+e8=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "f82a8630d7a51dab4cc70924f500bf70e723db12", + "rev": "855b1cba40ab972dc7c03ccd76ff5aacbeed099d", "type": "github" }, "original": { @@ -405,11 +406,11 @@ ] }, "locked": { - "lastModified": 1763727565, - "narHash": "sha256-vRff/2R1U1jzPBy4OODqh2kfUzmizW/nfV2ROzTDIKo=", + "lastModified": 1772467975, + "narHash": "sha256-kipyuDBxrZq+beYpZqWzGvFWm4QbayW9agAvi94vDXY=", "owner": "hyprwm", "repo": "hyprland-guiutils", - "rev": "7724d3a12a0453e7aae05f2ef39474219f05a4b4", + "rev": "5e1c6b9025aaf4d578f3eff7c0eb1f0c197a9507", "type": "github" }, "original": { @@ -435,11 +436,11 @@ ] }, "locked": { - "lastModified": 1764607625, - "narHash": "sha256-Hrsqq3tWmnPdhqk1dtZPpglsWC+sSLlxV++ry+Zn6T4=", + "lastModified": 1771865848, + "narHash": "sha256-xwNa+1D8WPsDnJtUofDrtyDCZKZotbUymzV/R5s+M0I=", "owner": "hyprwm", "repo": "Hyprland-Plugins", - "rev": "be3fac629c964c74dd1fcb89a9e9bcb1ffd80f31", + "rev": "b85a56b9531013c79f2f3846fd6ee2ff014b8960", "type": "github" }, "original": { @@ -460,11 +461,11 @@ ] }, "locked": { - "lastModified": 1759610243, - "narHash": "sha256-+KEVnKBe8wz+a6dTLq8YDcF3UrhQElwsYJaVaHXJtoI=", + "lastModified": 1772460177, + "narHash": "sha256-/6G/MsPvtn7bc4Y32pserBT/Z4SUUdBd4XYJpOEKVR4=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "bd153e76f751f150a09328dbdeb5e4fab9d23622", + "rev": "1cb6db5fd6bb8aee419f4457402fa18293ace917", "type": "github" }, "original": { @@ -489,11 +490,11 @@ ] }, "locked": { - "lastModified": 1763819661, - "narHash": "sha256-0jLarTR/BLWdGlboM86bPVP2zKJNI2jvo3JietnDkOM=", + "lastModified": 1772459629, + "narHash": "sha256-/iwvNUYShmmnwmz/czEUh6+0eF5vCMv0xtDW0STPIuM=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "a318deec0c12409ec39c68d2be8096b636dc2a5c", + "rev": "7615ee388de18239a4ab1400946f3d0e498a8186", "type": "github" }, "original": { @@ -541,11 +542,11 @@ ] }, "locked": { - "lastModified": 1763503177, - "narHash": "sha256-VPoiswJBBmTLVuNncvT/8FpFR+sYcAi/LgP/zTZ+5rA=", + "lastModified": 1772462885, + "narHash": "sha256-5pHXrQK9zasMnIo6yME6EOXmWGFMSnCITcfKshhKJ9I=", "owner": "hyprwm", "repo": "hyprtoolkit", - "rev": "f4e1e12755567ecf39090203b8f43eace8279630", + "rev": "9af245a69fa6b286b88ddfc340afd288e00a6998", "type": "github" }, "original": { @@ -566,11 +567,11 @@ ] }, "locked": { - "lastModified": 1763996058, - "narHash": "sha256-DsqzFZvrEV+aDmavjaD4/bk5qxeZwhGxPWBQdpFyM9Y=", + "lastModified": 1774211405, + "narHash": "sha256-6KNwP4ojUzv3YBlZU5BqCpTrWHcix1Jo01BISsTT0xk=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "0168583075baffa083032ed13a8bea8ea12f281a", + "rev": "cb4e152dc72095a2af422956c6b689590572231a", "type": "github" }, "original": { @@ -591,11 +592,11 @@ ] }, "locked": { - "lastModified": 1763640274, - "narHash": "sha256-Uan1Nl9i4TF/kyFoHnTq1bd/rsWh4GAK/9/jDqLbY5A=", + "lastModified": 1772459835, + "narHash": "sha256-978jRz/y/9TKmZb/qD4lEYHCQGHpEXGqy+8X2lFZsak=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "f6cf414ca0e16a4d30198fd670ec86df3c89f671", + "rev": "0a692d4a645165eebd65f109146b8861e3a925e7", "type": "github" }, "original": { @@ -604,18 +605,48 @@ "type": "github" } }, + "hyprwire": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1773074819, + "narHash": "sha256-qRqYnXiKoJLRTcfaRukn7EifmST2IVBUMZOeZMAc5UA=", + "owner": "hyprwm", + "repo": "hyprwire", + "rev": "f68afd0e73687598cc2774804fedad76693046f0", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprwire", + "type": "github" + } + }, "nixcord": { "inputs": { "flake-compat": "flake-compat_2", "flake-parts": "flake-parts", - "nixpkgs": "nixpkgs_2" + "nixpkgs": "nixpkgs_2", + "nixpkgs-nixcord": "nixpkgs-nixcord" }, "locked": { - "lastModified": 1764576281, - "narHash": "sha256-f6vfwmIb9C3brI4/KJ9MFUDWt6FsKQ0dbMO6AuFc7E0=", + "lastModified": 1774456554, + "narHash": "sha256-FwlMuGluoa1iWkDsLrzi1ha5nGQzBbw3i+N385BQMgc=", "owner": "kaylorben", "repo": "nixcord", - "rev": "c8f47894134a4984acd319e66c4384eb1ff886e2", + "rev": "82c0155f98000cc691d2b25cc36908b9ba6a05aa", "type": "github" }, "original": { @@ -626,11 +657,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1763966396, - "narHash": "sha256-6eeL1YPcY1MV3DDStIDIdy/zZCDKgHdkCmsrLJFiZf0=", + "lastModified": 1774106199, + "narHash": "sha256-US5Tda2sKmjrg2lNHQL3jRQ6p96cgfWh3J1QBliQ8Ws=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5ae3b07d8d6527c42f17c876e404993199144b6a", + "rev": "6c9a78c09ff4d6c21d0319114873508a6ec01655", "type": "github" }, "original": { @@ -642,11 +673,11 @@ }, "nixpkgs-lib": { "locked": { - "lastModified": 1753579242, - "narHash": "sha256-zvaMGVn14/Zz8hnp4VWT9xVnhc8vuL3TStRqwk22biA=", + "lastModified": 1772328832, + "narHash": "sha256-e+/T/pmEkLP6BHhYjx6GmwP5ivonQQn0bJdH9YrRB+Q=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "0f36c44e01a6129be94e3ade315a5883f0228a6e", + "rev": "c185c7a5e5dd8f9add5b2f8ebeff00888b070742", "type": "github" }, "original": { @@ -655,29 +686,45 @@ "type": "github" } }, + "nixpkgs-nixcord": { + "locked": { + "lastModified": 1773222311, + "narHash": "sha256-BHoB/XpbqoZkVYZCfXJXfkR+GXFqwb/4zbWnOr2cRcU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0590cd39f728e129122770c029970378a79d076a", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-25.11", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_2": { "locked": { - "lastModified": 1754028485, - "narHash": "sha256-IiiXB3BDTi6UqzAZcf2S797hWEPCRZOwyNThJIYhUfk=", + "lastModified": 1773222311, + "narHash": "sha256-BHoB/XpbqoZkVYZCfXJXfkR+GXFqwb/4zbWnOr2cRcU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "59e69648d345d6e8fef86158c555730fa12af9de", + "rev": "0590cd39f728e129122770c029970378a79d076a", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-25.05", + "ref": "nixos-25.11", "repo": "nixpkgs", "type": "github" } }, "nixpkgs_3": { "locked": { - "lastModified": 1764517877, - "narHash": "sha256-pp3uT4hHijIC8JUK5MEqeAWmParJrgBVzHLNfJDZxg4=", + "lastModified": 1774106199, + "narHash": "sha256-US5Tda2sKmjrg2lNHQL3jRQ6p96cgfWh3J1QBliQ8Ws=", "owner": "nixos", "repo": "nixpkgs", - "rev": "2d293cbfa5a793b4c50d17c05ef9e385b90edf6c", + "rev": "6c9a78c09ff4d6c21d0319114873508a6ec01655", "type": "github" }, "original": { @@ -699,11 +746,11 @@ ] }, "locked": { - "lastModified": 1758998580, - "narHash": "sha256-VLx0z396gDCGSiowLMFz5XRO/XuNV+4EnDYjdJhHvUk=", + "lastModified": 1767810917, + "narHash": "sha256-ZKqhk772+v/bujjhla9VABwcvz+hB2IaRyeLT6CFnT0=", "owner": "nix-community", "repo": "NUR", - "rev": "ba8d9c98f5f4630bcb0e815ab456afd90c930728", + "rev": "dead29c804adc928d3a69dfe7f9f12d0eec1f1a4", "type": "github" }, "original": { @@ -722,11 +769,11 @@ ] }, "locked": { - "lastModified": 1763988335, - "narHash": "sha256-QlcnByMc8KBjpU37rbq5iP7Cp97HvjRP0ucfdh+M4Qc=", + "lastModified": 1774104215, + "narHash": "sha256-EAtviqz0sEAxdHS4crqu7JGR5oI3BwaqG0mw7CmXkO8=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "50b9238891e388c9fdc6a5c49e49c42533a1b5ce", + "rev": "f799ae951fde0627157f40aec28dec27b22076d0", "type": "github" }, "original": { @@ -742,11 +789,11 @@ ] }, "locked": { - "lastModified": 1764482797, - "narHash": "sha256-ynV90KoBrPe38YFlKAHtPFk4Ee3IANUsIFGxRaq7H/s=", + "lastModified": 1774422996, + "narHash": "sha256-mWjBJIbiMPCpljAQDk8RYf+92/lYZ5npHe2r2SJ+QWc=", "owner": "quickshell-mirror", "repo": "quickshell", - "rev": "d24e8e9736287d01ee73ef9d573d2bc316a62d5c", + "rev": "08058326f04e9b5e55c903b3702405a8d3556ac6", "type": "github" }, "original": { @@ -789,11 +836,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1764550443, - "narHash": "sha256-ArO2V1YEHmEILilTj4KPtqF4gqc1q2HBrrrmygQ/UyU=", + "lastModified": 1774124764, + "narHash": "sha256-Poz9WTjiRlqZIf197CrMMJfTifZhrZpbHFv0eU1Nhtg=", "owner": "danth", "repo": "stylix", - "rev": "794b6e1fa75177ebfeb32967f135858a1ab1ba15", + "rev": "e31c79f571c5595a155f84b9d77ce53a84745494", "type": "github" }, "original": { @@ -868,11 +915,11 @@ "tinted-schemes": { "flake": false, "locked": { - "lastModified": 1757716333, - "narHash": "sha256-d4km8W7w2zCUEmPAPUoLk1NlYrGODuVa3P7St+UrqkM=", + "lastModified": 1767710407, + "narHash": "sha256-+W1EB79Jl0/gm4JqmO0Nuc5C7hRdp4vfsV/VdzI+des=", "owner": "tinted-theming", "repo": "schemes", - "rev": "317a5e10c35825a6c905d912e480dfe8e71c7559", + "rev": "2800e2b8ac90f678d7e4acebe4fa253f602e05b2", "type": "github" }, "original": { @@ -884,11 +931,11 @@ "tinted-tmux": { "flake": false, "locked": { - "lastModified": 1757811970, - "narHash": "sha256-n5ZJgmzGZXOD9pZdAl1OnBu3PIqD+X3vEBUGbTi4JiI=", + "lastModified": 1767489635, + "narHash": "sha256-e6nnFnWXKBCJjCv4QG4bbcouJ6y3yeT70V9MofL32lU=", "owner": "tinted-theming", "repo": "tinted-tmux", - "rev": "d217ba31c846006e9e0ae70775b0ee0f00aa6b1e", + "rev": "3c32729ccae99be44fe8a125d20be06f8d7d8184", "type": "github" }, "original": { @@ -900,11 +947,11 @@ "tinted-zed": { "flake": false, "locked": { - "lastModified": 1757811247, - "narHash": "sha256-4EFOUyLj85NRL3OacHoLGEo0wjiRJzfsXtR4CZWAn6w=", + "lastModified": 1767488740, + "narHash": "sha256-wVOj0qyil8m+ouSsVZcNjl5ZR+1GdOOAooAatQXHbuU=", "owner": "tinted-theming", "repo": "base16-zed", - "rev": "824fe0aacf82b3c26690d14e8d2cedd56e18404e", + "rev": "11abb0b282ad3786a2aae088d3a01c60916f2e40", "type": "github" }, "original": { @@ -954,11 +1001,11 @@ ] }, "locked": { - "lastModified": 1761431178, - "narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=", + "lastModified": 1773601989, + "narHash": "sha256-2tJf/CQoHApoIudxHeJye+0Ii7scR0Yyi7pNiWk0Hn8=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "4b8801228ff958d028f588f0c2b911dbf32297f9", + "rev": "a9b862d1aa000a676d310cc62d249f7ad726233d", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 27652ff..020333a 100644 --- a/flake.nix +++ b/flake.nix @@ -42,7 +42,7 @@ ... } @ inputs: let themes = import ./modules/nixos/themes/defaults.nix; - activeTheme = themes.valua; # Change this to switch themes + activeTheme = themes.dracula; # Change this to switch themes wallpaperPath = "${inputs.wallpapers}/${activeTheme.wallpaper}"; in { theme = builtins.path { diff --git a/hosts/centaur/configuration.nix b/hosts/centaur/configuration.nix index 2c8f5c5..684ebe1 100644 --- a/hosts/centaur/configuration.nix +++ b/hosts/centaur/configuration.nix @@ -219,15 +219,15 @@ libGL libdrm mesa - xorg.libX11 - xorg.libXcursor - xorg.libXi - xorg.libXrandr - xorg.libXrender - xorg.libXext - xorg.libXfixes - xorg.libXtst - xorg.libxcb + libX11 + libXcursor + libXi + libXrandr + libXrender + libXext + libXfixes + libXtst + libxcb freetype fontconfig libxkbcommon diff --git a/modules/home-manager/basics.nix b/modules/home-manager/basics.nix index f165d60..c0f977e 100644 --- a/modules/home-manager/basics.nix +++ b/modules/home-manager/basics.nix @@ -9,14 +9,14 @@ blueman # File manager with improved functionality - xfce.thunar - xfce.thunar-archive-plugin - xfce.thunar-volman - xfce.thunar-media-tags-plugin + thunar + thunar-archive-plugin + thunar-volman + thunar-media-tags-plugin gvfs # Thumbnail generation for file managers - xfce.tumbler # Main thumbnail service + tumbler # Main thumbnail service ffmpegthumbnailer # Video thumbnails # Icon themes for better appearance @@ -49,6 +49,7 @@ # GTK configuration for better theming gtk = { enable = true; + gtk4.theme = config.gtk.theme; iconTheme = { name = "Papirus"; package = pkgs.papirus-icon-theme; diff --git a/modules/home-manager/cli-tools.nix b/modules/home-manager/cli-tools.nix index 0a6dd83..a0d39c9 100644 --- a/modules/home-manager/cli-tools.nix +++ b/modules/home-manager/cli-tools.nix @@ -6,7 +6,7 @@ home.packages = with pkgs; [ git gh - neofetch + fastfetch htop btop traceroute diff --git a/modules/home-manager/discord.nix b/modules/home-manager/discord.nix index 68ef06f..eea52ca 100644 --- a/modules/home-manager/discord.nix +++ b/modules/home-manager/discord.nix @@ -136,7 +136,7 @@ in { biggerStreamPreview.enable = true; messageLogger.enable = true; callTimer.enable = true; - clearUrLs.enable = true; + ClearURLs.enable = true; permissionsViewer.enable = true; platformIndicators.enable = true; relationshipNotifier.enable = true; diff --git a/modules/home-manager/neovim.nix b/modules/home-manager/neovim.nix index 3e09c89..6ac7d8f 100644 --- a/modules/home-manager/neovim.nix +++ b/modules/home-manager/neovim.nix @@ -27,7 +27,7 @@ # Git integration gitsigns-nvim - fugitive + vim-fugitive # UI improvements lualine-nvim @@ -47,7 +47,7 @@ plenary-nvim ]; - extraLuaConfig = '' + initLua = '' -- Basic settings vim.opt.number = true vim.opt.relativenumber = true From a50f6257a74c6dc47dec4b48369a3d3f9eee1a89 Mon Sep 17 00:00:00 2001 From: FinnPL Date: Thu, 26 Mar 2026 02:25:10 +0100 Subject: [PATCH 07/10] fix: update Hyprland startup command and improve wallpaper configuration --- hosts/centaur/configuration.nix | 2 +- modules/hyprland/hyprpaper.nix | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/hosts/centaur/configuration.nix b/hosts/centaur/configuration.nix index 684ebe1..c75afdf 100644 --- a/hosts/centaur/configuration.nix +++ b/hosts/centaur/configuration.nix @@ -121,7 +121,7 @@ "--remember-session" "--sessions ${waylandSessions}:${xSessions}" "--time" - "--cmd Hyprland" + "--cmd start-hyprland" "--asterisks" ]; flags = lib.concatStringsSep " " tuigreetOptions; diff --git a/modules/hyprland/hyprpaper.nix b/modules/hyprland/hyprpaper.nix index d6359f7..aba1b68 100644 --- a/modules/hyprland/hyprpaper.nix +++ b/modules/hyprland/hyprpaper.nix @@ -12,6 +12,11 @@ in { xdg.configFile."hypr/hyprpaper.conf".text = '' preload = ${wallpaperPath} - wallpaper = eDP-1,${wallpaperPath} + + wallpaper { + monitor = eDP-1 + path = ${wallpaperPath} + fit_mode = cover + } ''; } From 2970120142b12b087f701ab12bee37821e35a1c1 Mon Sep 17 00:00:00 2001 From: FinnPL Date: Thu, 26 Mar 2026 03:49:30 +0100 Subject: [PATCH 08/10] fix: refine brightness adjustment increments and update Hyprland configuration --- modules/hyprland/hyprland-config.nix | 271 ++++++++++-------- .../config/modules/ii/bar/BarContent.qml | 4 +- .../indicators/BrightnessIndicator.qml | 4 +- .../modules/ii/sidebarRight/QuickSliders.qml | 1 + .../quickshell/config/services/Brightness.qml | 39 +-- 5 files changed, 172 insertions(+), 147 deletions(-) diff --git a/modules/hyprland/hyprland-config.nix b/modules/hyprland/hyprland-config.nix index 591f897..edf4a9c 100644 --- a/modules/hyprland/hyprland-config.nix +++ b/modules/hyprland/hyprland-config.nix @@ -1,138 +1,159 @@ { config, pkgs, + lib, ... }: { home.packages = with pkgs; [ jq ]; - home.file.".config/hypr/hyprland.conf".text = '' - misc { - disable_hyprland_logo = true - } - exec-once = hyprpaper - exec-once = quickshell -p ~/.config/quickshell/shell.qml - exec-once = wl-paste --watch cliphist store - exec-once = sleep 3 && vesktop --start-minimized - - monitor = eDP-1,1920x1080@60,0x0,1 - - # Set Swiss German keyboard layout and enable natural scrolling - input { - kb_layout = ch - kb_variant = de - - touchpad { - natural_scroll = yes - } - } - - decoration { - rounding = 10 - inactive_opacity = 0.75 - active_opacity = 0.85 - - # Enable transparency/blur - blur { - enabled = true - size = 1 - passes = 5 - vibrancy = 0.1696 - new_optimizations = true - } - } - - general { - border_size = 2 - col.active_border = rgba(${config.lib.stylix.colors.base0D}ff) rgba(${config.lib.stylix.colors.base0C}ff) 45deg - col.inactive_border = rgba(${config.lib.stylix.colors.base00}00) - resize_on_border = false - allow_tearing = false - layout = dwindle - } - - animations { - enabled = true, animations - bezier = winIn, 0.1, 1.0, 0.1, 1.0 - bezier = winOut, 0.1, 1.0, 0.1, 1.0 - bezier = smoothOut, 0.5, 0, 0.99, 0.99 - bezier = layerOut,0.23,1,0.32,1 - animation = windowsIn, 1, 7, winIn, slide - animation = windowsOut, 1, 3, smoothOut, slide - animation = windowsMove, 1, 7, winIn, slide - animation = workspacesIn, 1, 8, winIn, slide - animation = workspacesOut, 1, 8, winOut, slide - animation = layersIn, 1, 7, winIn, slide - animation = layersOut, 1, 3, layerOut, slide - } - - dwindle { - preserve_split = true - } - - # Window rules (new v0.52 syntax) - windowrule = opacity 0.75 override 0.70 override, match:class thunar - windowrule = opacity 0.98 override 0.98 override, match:class firefox - windowrule = opacity 0.98 override 0.98 override, match:class vesktop - windowrule = opacity 0.98 override 0.98 override, match:class (gimp|gwenview|ristretto) - windowrule = opacity 0.98 override 0.98 override, match:class (evince|okular|zathura) - windowrule = opacity 0.98 override 0.98 override, match:class (vlc|mpv) - windowrule = opacity 0.98 override 0.98 override, match:class jetbrains - - - $mod = SUPER - $term = kitty - $browser = firefox - - # Quickshell toggles - bind = , XF86PowerOff, exec, quickshell msg -p ~/.config/quickshell session toggle - bind = $mod, L, exec, quickshell msg -p ~/.config/quickshell lock activate - bind = ALT, Tab, exec, quickshell msg -p ~/.config/quickshell overview toggle - bind = ALT, C, exec, quickshell msg -p ~/.config/quickshell sidebarRight toggle - - # Overview/App launcher via ALT+SPACE - bind = ALT, SPACE, exec, quickshell msg -p ~/.config/quickshell overview toggle - - # Clipboard via quickshell - bind = $mod, V, exec, quickshell msg -p ~/.config/quickshell overview clipboardToggle - - # Terminal & browser - bind = $mod, SPACE, exec, $term - bind = $mod, F, exec, $browser - - # Open Thunar with WIN+E - bind = $mod, E, exec, thunar - - # Move focus to different tile - bind = ALT, left, movefocus, l - bind = ALT, right, movefocus, r - bind = ALT, up, movefocus, u - bind = ALT, down, movefocus, d - - # Resize window - bind = $mod+CTRL, left, resizeactive, -30 0 - bind = $mod+CTRL, right, resizeactive, 30 0 - bind = $mod+CTRL, up, resizeactive, 0 -30 - bind = $mod+CTRL, down, resizeactive, 0 30 - - # Move between workspaces - bind = $mod+ALT, left, workspace, -1 - bind = $mod+ALT, right, workspace, +1 - - # Close window with ALT+Q - bind = ALT, Q, killactive, - - # Move active window (with edge detection) - bind = $mod, left, exec, ~/.config/hypr/move_or_switch.sh left - bind = $mod, right, exec, ~/.config/hypr/move_or_switch.sh right - bind = $mod, up, exec, ~/.config/hypr/move_or_switch.sh up - bind = $mod, down, exec, ~/.config/hypr/move_or_switch.sh down - - # Logout with SUPER+SHIFT+L - bind = $mod+SHIFT, L, exec, hyprctl dispatch exit - ''; + wayland.windowManager.hyprland = { + enable = true; + + settings = { + misc = { + disable_hyprland_logo = true; + disable_splash_rendering = true; + }; + + exec-once = [ + "hyprpaper" + "quickshell -p ~/.config/quickshell/shell.qml" + "wl-paste --watch cliphist store" + "sleep 3 && vesktop --start-minimized" + ]; + + monitor = [ + "eDP-1,1920x1080@60,0x0,1" + ]; + + input = { + kb_layout = "ch"; + kb_variant = "de"; + + touchpad = { + natural_scroll = true; + }; + }; + + decoration = { + rounding = 10; + inactive_opacity = 0.75; + active_opacity = 0.85; + + blur = { + enabled = true; + size = 1; + passes = 5; + vibrancy = 0.1696; + new_optimizations = true; + }; + }; + + general = { + border_size = 2; + "col.active_border" = lib.mkForce "rgba(${config.lib.stylix.colors.base0D}88) rgba(${config.lib.stylix.colors.base0C}88) 45deg"; + "col.inactive_border" = lib.mkForce "rgba(${config.lib.stylix.colors.base00}00)"; + resize_on_border = false; + allow_tearing = false; + layout = "dwindle"; + }; + + animations = { + enabled = true; + + bezier = [ + "winIn, 0.1, 1.0, 0.1, 1.0" + "winOut, 0.1, 1.0, 0.1, 1.0" + "smoothOut, 0.5, 0, 0.99, 0.99" + "layerOut, 0.23, 1, 0.32, 1" + ]; + + animation = [ + "windowsIn, 1, 7, winIn, slide" + "windowsOut, 1, 3, smoothOut, slide" + "windowsMove, 1, 7, winIn, slide" + "workspacesIn, 1, 8, winIn, slide" + "workspacesOut, 1, 8, winOut, slide" + "layersIn, 1, 7, winIn, slide" + "layersOut, 1, 3, layerOut, slide" + ]; + }; + + dwindle = { + preserve_split = true; + }; + + # Window rules (new v0.52 syntax) + windowrule = [ + "opacity 0.75 override 0.70 override, match:class thunar" + "opacity 0.98 override 0.98 override, match:class firefox" + "opacity 0.98 override 0.98 override, match:class vesktop" + "opacity 0.98 override 0.98 override, match:class (gimp|gwenview|ristretto)" + "opacity 0.98 override 0.98 override, match:class (evince|okular|zathura)" + "opacity 0.98 override 0.98 override, match:class (vlc|mpv)" + "opacity 0.98 override 0.98 override, match:class jetbrains" + ]; + + # Variables + "$mod" = "SUPER"; + "$term" = "kitty"; + "$browser" = "firefox"; + + bind = [ + # Quickshell toggles + ", XF86PowerOff, exec, quickshell msg -p ~/.config/quickshell session toggle" + "$mod, L, exec, quickshell msg -p ~/.config/quickshell lock activate" + "ALT, Tab, exec, quickshell msg -p ~/.config/quickshell overview toggle" + "ALT, C, exec, quickshell msg -p ~/.config/quickshell sidebarRight toggle" + + # Overview/App launcher via ALT+SPACE + "ALT, SPACE, exec, quickshell msg -p ~/.config/quickshell overview toggle" + + # Clipboard via quickshell + "$mod, V, exec, quickshell msg -p ~/.config/quickshell overview clipboardToggle" + + # Terminal & browser + "$mod, SPACE, exec, $term" + "$mod, F, exec, $browser" + + # Open Thunar with WIN+E + "$mod, E, exec, thunar" + + # Move focus to different tile + "ALT, left, movefocus, l" + "ALT, right, movefocus, r" + "ALT, up, movefocus, u" + "ALT, down, movefocus, d" + + # Move between workspaces + "$mod+ALT, left, workspace, -1" + "$mod+ALT, right, workspace, +1" + + # Close window with ALT+Q + "ALT, Q, killactive," + + # Move active window (with edge detection) + "$mod, left, exec, ~/.config/hypr/move_or_switch.sh left" + "$mod, right, exec, ~/.config/hypr/move_or_switch.sh right" + "$mod, up, exec, ~/.config/hypr/move_or_switch.sh up" + "$mod, down, exec, ~/.config/hypr/move_or_switch.sh down" + + # Logout with SUPER+SHIFT+L + "$mod+SHIFT, L, exec, hyprctl dispatch exit" + ]; + + binde = [ + "$mod+CTRL, left, resizeactive, -30 0" + "$mod+CTRL, right, resizeactive, 30 0" + "$mod+CTRL, up, resizeactive, 0 -30" + "$mod+CTRL, down, resizeactive, 0 30" + ]; + }; + }; + # Keep your bash script as an external executable file exactly as it was home.file = { ".config/hypr/move_or_switch.sh" = { text = builtins.readFile ../../none-nix/hypr/move_or_switch.sh; diff --git a/modules/quickshell/config/modules/ii/bar/BarContent.qml b/modules/quickshell/config/modules/ii/bar/BarContent.qml index fefcc0a..f0f2ffc 100644 --- a/modules/quickshell/config/modules/ii/bar/BarContent.qml +++ b/modules/quickshell/config/modules/ii/bar/BarContent.qml @@ -59,8 +59,8 @@ Item { // Bar content region implicitWidth: leftSectionRowLayout.implicitWidth implicitHeight: Appearance.sizes.baseBarHeight - onScrollDown: root.brightnessMonitor.setBrightness(root.brightnessMonitor.brightness - 0.05) - onScrollUp: root.brightnessMonitor.setBrightness(root.brightnessMonitor.brightness + 0.05) + onScrollDown: root.brightnessMonitor.setBrightness(root.brightnessMonitor.brightness - 0.01) + onScrollUp: root.brightnessMonitor.setBrightness(root.brightnessMonitor.brightness + 0.01) onMovedAway: GlobalStates.osdBrightnessOpen = false onPressed: event => { if (event.button === Qt.LeftButton) diff --git a/modules/quickshell/config/modules/ii/onScreenDisplay/indicators/BrightnessIndicator.qml b/modules/quickshell/config/modules/ii/onScreenDisplay/indicators/BrightnessIndicator.qml index fbdbd71..02fbca7 100644 --- a/modules/quickshell/config/modules/ii/onScreenDisplay/indicators/BrightnessIndicator.qml +++ b/modules/quickshell/config/modules/ii/onScreenDisplay/indicators/BrightnessIndicator.qml @@ -10,8 +10,8 @@ OsdValueIndicator { property var brightnessMonitor: Brightness.getMonitorForScreen(focusedScreen) icon: Hyprsunset.active ? "routine" : "light_mode" - rotateIcon: true - scaleIcon: true + rotateIcon: false + scaleIcon: false name: Translation.tr("Brightness") value: root.brightnessMonitor?.brightness ?? 50 } diff --git a/modules/quickshell/config/modules/ii/sidebarRight/QuickSliders.qml b/modules/quickshell/config/modules/ii/sidebarRight/QuickSliders.qml index 2692500..bc624bd 100644 --- a/modules/quickshell/config/modules/ii/sidebarRight/QuickSliders.qml +++ b/modules/quickshell/config/modules/ii/sidebarRight/QuickSliders.qml @@ -42,6 +42,7 @@ Rectangle { sourceComponent: QuickSlider { materialSymbol: "brightness_6" value: root.brightnessMonitor.brightness + stepSize: 0.01 onMoved: { root.brightnessMonitor.setBrightness(value) } diff --git a/modules/quickshell/config/services/Brightness.qml b/modules/quickshell/config/services/Brightness.qml index cd99127..0ebe584 100644 --- a/modules/quickshell/config/services/Brightness.qml +++ b/modules/quickshell/config/services/Brightness.qml @@ -31,14 +31,14 @@ Singleton { const focusedName = Hyprland.focusedMonitor.name; const monitor = monitors.find(m => focusedName === m.screen.name); if (monitor) - monitor.setBrightness(monitor.brightness + 0.05); + monitor.setBrightness(monitor.brightness + 0.01); // Changed from 0.05 to 0.01 } function decreaseBrightness(): void { const focusedName = Hyprland.focusedMonitor.name; const monitor = monitors.find(m => focusedName === m.screen.name); if (monitor) - monitor.setBrightness(monitor.brightness - 0.05); + monitor.setBrightness(monitor.brightness - 0.01); // Changed from 0.05 to 0.01 } reloadableId: "brightness" @@ -77,10 +77,6 @@ Singleton { onExited: root.ddcDetectFinished() } - Process { - id: setProc - } - component BrightnessMonitor: QtObject { id: monitor @@ -104,10 +100,6 @@ Singleton { enabled: false } - onMultipliedBrightnessChanged: { - setTimer.restart(); - } - function initialize() { monitor.ready = false; const match = root.ddcMonitors.find(m => m.name === screen.name && !root.monitors.slice(0, root.monitors.indexOf(this)).some(mon => mon.busNum === m.busNum)); @@ -132,26 +124,37 @@ Singleton { } // Shorter delay for more responsive brightness changes + property bool pendingSync: false property var setTimer: Timer { id: setTimer - interval: monitor.isDdc ? 300 : 50 + interval: 100 onTriggered: { - syncBrightness(); + if (monitor.pendingSync) { + monitor.pendingSync = false; + monitor.executeBrightnessCommand(); + } + } + } + + onMultipliedBrightnessChanged: { + if (!setTimer.running) { + executeBrightnessCommand(); + } else { + pendingSync = true; } } - function syncBrightness() { + function executeBrightnessCommand() { + setTimer.start(); // Start the cooldown const brightnessValue = Math.max(monitor.multipliedBrightness, 0); if (isDdc) { const rawValueRounded = Math.max(Math.floor(brightnessValue * monitor.rawMaxBrightness), 1); - setProc.command = ["ddcutil", "-b", busNum, "setvcp", "10", rawValueRounded]; - setProc.startDetached(); + Quickshell.execDetached(["ddcutil", "-b", monitor.busNum, "setvcp", "10", rawValueRounded.toString()]); } else { const valuePercentNumber = Math.floor(brightnessValue * 100); let valuePercent = `${valuePercentNumber}%`; - if (valuePercentNumber == 0) valuePercent = "1"; // Prevent fully black - setProc.command = ["brightnessctl", "--class", "backlight", "s", valuePercent, "--quiet"]; - setProc.startDetached(); + if (valuePercentNumber === 0) valuePercent = "1"; // Prevent fully black + Quickshell.execDetached(["brightnessctl", "--class", "backlight", "s", valuePercent, "--quiet"]); } } From cd16256f7a4872a2173b2c463eeeae783505293e Mon Sep 17 00:00:00 2001 From: FinnPL Date: Thu, 26 Mar 2026 11:55:32 +0100 Subject: [PATCH 09/10] feat: added security tools --- hosts/centaur/configuration.nix | 3 ++- hosts/centaur/home.nix | 1 + modules/home-manager/security-tools.nix | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 modules/home-manager/security-tools.nix diff --git a/hosts/centaur/configuration.nix b/hosts/centaur/configuration.nix index c75afdf..0a7977b 100644 --- a/hosts/centaur/configuration.nix +++ b/hosts/centaur/configuration.nix @@ -206,6 +206,7 @@ # PROGRAMS # ============================================================================ programs.zsh.enable = true; + programs.wireshark.enable = true; # Enable nix-ld for running unpatched dynamic binaries (JetBrains IDEs from Toolbox, etc.) programs.nix-ld = { @@ -253,7 +254,7 @@ users.users.fpl = { isNormalUser = true; description = "fpl"; - extraGroups = ["networkmanager" "wheel" "bluetooth"]; + extraGroups = ["networkmanager" "wheel" "bluetooth" "wireshark"]; shell = pkgs.zsh; packages = with pkgs; []; }; diff --git a/hosts/centaur/home.nix b/hosts/centaur/home.nix index 25c8460..c99a7c7 100644 --- a/hosts/centaur/home.nix +++ b/hosts/centaur/home.nix @@ -25,6 +25,7 @@ ../../modules/home-manager/rust.nix ../../modules/home-manager/haskell.nix ../../modules/hyprland/default.nix + ../../modules/home-manager/security-tools.nix ]; # This value determines the Home Manager release that your configuration is diff --git a/modules/home-manager/security-tools.nix b/modules/home-manager/security-tools.nix new file mode 100644 index 0000000..91853c2 --- /dev/null +++ b/modules/home-manager/security-tools.nix @@ -0,0 +1,14 @@ +{ + config, + pkgs, + ... +}: { + home.packages = with pkgs; [ + nmap + netcat-gnu + + tcpdump + wireshark + metasploit + ]; +} From 0b20c5171fc5caf2036a9514f7cd0c14d392cfa0 Mon Sep 17 00:00:00 2001 From: FinnPL Date: Thu, 26 Mar 2026 12:34:28 +0100 Subject: [PATCH 10/10] fix: enhance animation settings and window rules in Hyprland configuration --- modules/hyprland/hyprland-config.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules/hyprland/hyprland-config.nix b/modules/hyprland/hyprland-config.nix index edf4a9c..845907f 100644 --- a/modules/hyprland/hyprland-config.nix +++ b/modules/hyprland/hyprland-config.nix @@ -68,6 +68,7 @@ "winOut, 0.1, 1.0, 0.1, 1.0" "smoothOut, 0.5, 0, 0.99, 0.99" "layerOut, 0.23, 1, 0.32, 1" + "menuPop, 0.1, 1.15, 0.1, 1.0" ]; animation = [ @@ -78,6 +79,8 @@ "workspacesOut, 1, 8, winOut, slide" "layersIn, 1, 7, winIn, slide" "layersOut, 1, 3, layerOut, slide" + "layersIn, 1, 3, menuPop, popin 80%" + "layersOut, 1, 3, layerOut, fade" ]; }; @@ -94,6 +97,8 @@ "opacity 0.98 override 0.98 override, match:class (evince|okular|zathura)" "opacity 0.98 override 0.98 override, match:class (vlc|mpv)" "opacity 0.98 override 0.98 override, match:class jetbrains" + + "animation popin 80%, match:float 1" ]; # Variables