Hyprland Config Refactor:

- Removed flake inputs everywhere, git flakes always broke. Idk what those bitches doing
- Moved Rules and Plugins to their own files
- Reworked binds to use a script and not the shitty nix implementation
- Installed and setup Hyprscroller
- Some Theming with colors and wallpaper with hyprpaper
This commit is contained in:
Chris Toph 2025-03-31 12:32:30 -04:00
parent 0288b2d7d5
commit a2c2b26da2
10 changed files with 446 additions and 812 deletions

622
flake.lock generated
View file

@ -1,48 +1,26 @@
{
"nodes": {
"aquamarine": {
"flake-parts": {
"inputs": {
"hyprutils": "hyprutils",
"hyprwayland-scanner": "hyprwayland-scanner",
"nixpkgs": [
"nixpkgs-unstable"
],
"systems": "systems"
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1742162448,
"narHash": "sha256-ybpV2+yNExdHnMhhhmtxqgBCgI+nRr8gi/D+VVb9lQY=",
"ref": "refs/tags/v0.8.0",
"rev": "1c8fa0bf04d706698311cf595e80bbd6d3697956",
"revCount": 279,
"type": "git",
"url": "https://github.com/hyprwm/aquamarine"
},
"original": {
"ref": "refs/tags/v0.8.0",
"type": "git",
"url": "https://github.com/hyprwm/aquamarine"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"lastModified": 1741352980,
"narHash": "sha256-+u2UunDA4Cl5Fci3m7S643HzKmIDAe+fiXrLqYsR2fs=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "f4330d22f1c5d2ba72d3d22df5597d123fdb60a9",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems_6"
"systems": "systems_3"
},
"locked": {
"lastModified": 1681202837,
@ -58,35 +36,13 @@
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"hyprland",
"pre-commit-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"hardware": {
"locked": {
"lastModified": 1741792691,
"narHash": "sha256-f0BVt1/cvA0DQ/q3rB+HY4g4tKksd03ZkzI4xehC2Ew=",
"lastModified": 1743167577,
"narHash": "sha256-I09SrXIO0UdyBFfh0fxDq5WnCDg8XKmZ1HQbaXzMA1k=",
"owner": "nixos",
"repo": "nixos-hardware",
"rev": "e1f12151258b12c567f456d8248e4694e9390613",
"rev": "0ed819e708af17bfc4bbc63ee080ef308a24aa42",
"type": "github"
},
"original": {
@ -102,11 +58,11 @@
]
},
"locked": {
"lastModified": 1741955947,
"narHash": "sha256-2lbURKclgKqBNm7hVRtWh0A7NrdsibD0EaWhahUVhhY=",
"lastModified": 1743267068,
"narHash": "sha256-G7866vbO5jgqMcYJzgbxej40O6mBGQMGt6gM0himjoA=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "4e12151c9e014e2449e0beca2c0e9534b96a26b4",
"rev": "b431496538b0e294fbe44a1441b24ae8195c63f0",
"type": "github"
},
"original": {
@ -115,252 +71,13 @@
"type": "github"
}
},
"hyprcursor": {
"inputs": {
"hyprlang": [
"hyprland",
"hyprlang"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1738664950,
"narHash": "sha256-xIeGNM+iivwVHkv9tHwOqoUP5dDrtees34bbFKKMZYs=",
"owner": "hyprwm",
"repo": "hyprcursor",
"rev": "7c6d165e1eb9045a996551eb9f121b6d1b30adc3",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprcursor",
"type": "github"
}
},
"hyprgraphics": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1739049071,
"narHash": "sha256-3+7TpXMrbsUXSwgr5VAKAnmkzMb6JO+Rvc9XRb5NMg4=",
"owner": "hyprwm",
"repo": "hyprgraphics",
"rev": "175c6b29b6ff82100539e7c4363a35a02c74dd73",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprgraphics",
"type": "github"
}
},
"hyprland": {
"inputs": {
"aquamarine": [
"aquamarine"
],
"hyprcursor": "hyprcursor",
"hyprgraphics": "hyprgraphics",
"hyprland-protocols": "hyprland-protocols",
"hyprland-qtutils": "hyprland-qtutils",
"hyprlang": "hyprlang_2",
"hyprutils": "hyprutils_3",
"hyprwayland-scanner": "hyprwayland-scanner_2",
"nixpkgs": [
"nixpkgs-unstable"
],
"pre-commit-hooks": "pre-commit-hooks",
"systems": "systems_2",
"xdph": "xdph"
},
"locked": {
"lastModified": 1738457237,
"narHash": "sha256-dSKR1VpjpdJVZ5dmLgIvAu3K+DYrSbohZkqxSQhjw8U=",
"ref": "refs/tags/v0.47.2",
"rev": "882f7ad7d2bbfc7440d0ccaef93b1cdd78e8e3ff",
"revCount": 5767,
"submodules": true,
"type": "git",
"url": "https://github.com/hyprwm/Hyprland"
},
"original": {
"ref": "refs/tags/v0.47.2",
"submodules": true,
"type": "git",
"url": "https://github.com/hyprwm/Hyprland"
}
},
"hyprland-protocols": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1738422629,
"narHash": "sha256-5v+bv75wJWvahyM2xcMTSNNxmV8a7hb01Eey5zYnBJw=",
"owner": "hyprwm",
"repo": "hyprland-protocols",
"rev": "755aef8dab49d0fc4663c715fa4ad221b2aedaed",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-protocols",
"type": "github"
}
},
"hyprland-qt-support": {
"inputs": {
"hyprlang": [
"hyprland",
"hyprland-qtutils",
"hyprlang"
],
"nixpkgs": [
"hyprland",
"hyprland-qtutils",
"nixpkgs"
],
"systems": [
"hyprland",
"hyprland-qtutils",
"systems"
]
},
"locked": {
"lastModified": 1737634706,
"narHash": "sha256-nGCibkfsXz7ARx5R+SnisRtMq21IQIhazp6viBU8I/A=",
"owner": "hyprwm",
"repo": "hyprland-qt-support",
"rev": "8810df502cdee755993cb803eba7b23f189db795",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-qt-support",
"type": "github"
}
},
"hyprland-qtutils": {
"inputs": {
"hyprland-qt-support": "hyprland-qt-support",
"hyprlang": "hyprlang",
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1739048983,
"narHash": "sha256-REhTcXq4qs3B3cCDtLlYDz0GZvmsBSh947Ub6pQWGTQ=",
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"rev": "3504a293c8f8db4127cb0f7cfc1a318ffb4316f8",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"type": "github"
}
},
"hyprlang": {
"inputs": {
"hyprutils": "hyprutils_2",
"nixpkgs": [
"hyprland",
"hyprland-qtutils",
"nixpkgs"
],
"systems": [
"hyprland",
"hyprland-qtutils",
"systems"
]
},
"locked": {
"lastModified": 1741191527,
"narHash": "sha256-kM+11Nch47Xwfgtw2EpRitJuORy4miwoMuRi5tyMBDY=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "72df3861f1197e41b078faa3e38eedd60e00018d",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprlang",
"type": "github"
}
},
"hyprlang_2": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1741191527,
"narHash": "sha256-kM+11Nch47Xwfgtw2EpRitJuORy4miwoMuRi5tyMBDY=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "72df3861f1197e41b078faa3e38eedd60e00018d",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprlang",
"type": "github"
}
},
"hyprlang_3": {
"inputs": {
"nixpkgs": [
"rose-pine-hyprcursor",
"nixpkgs"
],
"systems": "systems_4"
"systems": "systems"
},
"locked": {
"lastModified": 1709914708,
@ -376,163 +93,34 @@
"type": "github"
}
},
"hyprspace": {
"inputs": {
"hyprland": [
"hyprland"
],
"systems": "systems_3"
},
"locked": {
"lastModified": 1741933157,
"narHash": "sha256-HEWIQ1SgUTnc964oDsi68rQQug57BqbdUYqZvr3Ep0A=",
"owner": "KZDKM",
"repo": "Hyprspace",
"rev": "c3cf91bdb6a912f9d2c2779deebdf23385fd659a",
"type": "github"
},
"original": {
"owner": "KZDKM",
"repo": "Hyprspace",
"type": "github"
}
},
"hyprutils": {
"nix-gaming": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": [
"aquamarine",
"nixpkgs"
],
"systems": [
"aquamarine",
"systems"
]
},
"locked": {
"lastModified": 1741534688,
"narHash": "sha256-EV3945SnjOCuRVbGRghsWx/9D89FyshnSO1Q6/TuQ14=",
"owner": "hyprwm",
"repo": "hyprutils",
"rev": "dd1f720cbc2dbb3c71167c9598045dd3261d27b3",
"lastModified": 1742998728,
"narHash": "sha256-WOJEfqNrgvUFgGlA70S3h9iHIJtT6qhwxVwbiUdVhXs=",
"owner": "fufexan",
"repo": "nix-gaming",
"rev": "5f44cf346870efd1c6300d81d03a132a8834e0e4",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprutils",
"type": "github"
}
},
"hyprutils_2": {
"inputs": {
"nixpkgs": [
"hyprland",
"hyprland-qtutils",
"hyprlang",
"nixpkgs"
],
"systems": [
"hyprland",
"hyprland-qtutils",
"hyprlang",
"systems"
]
},
"locked": {
"lastModified": 1737632363,
"narHash": "sha256-X9I8POSlHxBVjD0fiX1O2j7U9Zi1+4rIkrsyHP0uHXY=",
"owner": "hyprwm",
"repo": "hyprutils",
"rev": "006620eb29d54ea9086538891404c78563d1bae1",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprutils",
"type": "github"
}
},
"hyprutils_3": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1741534688,
"narHash": "sha256-EV3945SnjOCuRVbGRghsWx/9D89FyshnSO1Q6/TuQ14=",
"owner": "hyprwm",
"repo": "hyprutils",
"rev": "dd1f720cbc2dbb3c71167c9598045dd3261d27b3",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprutils",
"type": "github"
}
},
"hyprwayland-scanner": {
"inputs": {
"nixpkgs": [
"aquamarine",
"nixpkgs"
],
"systems": [
"aquamarine",
"systems"
]
},
"locked": {
"lastModified": 1739870480,
"narHash": "sha256-SiDN5BGxa/1hAsqhgJsS03C3t2QrLgBT8u+ENJ0Qzwc=",
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"rev": "206367a08dc5ac4ba7ad31bdca391d098082e64b",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"type": "github"
}
},
"hyprwayland-scanner_2": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1739870480,
"narHash": "sha256-SiDN5BGxa/1hAsqhgJsS03C3t2QrLgBT8u+ENJ0Qzwc=",
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"rev": "206367a08dc5ac4ba7ad31bdca391d098082e64b",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"owner": "fufexan",
"repo": "nix-gaming",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1741851582,
"narHash": "sha256-cPfs8qMccim2RBgtKGF+x9IBCduRvd/N5F4nYpU0TVE=",
"lastModified": 1743095683,
"narHash": "sha256-gWd4urRoLRe8GLVC/3rYRae1h+xfQzt09xOfb0PaHSk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "6607cf789e541e7873d40d3a8f7815ea92204f32",
"rev": "5e5402ecbcb27af32284d4a62553c019a3a49ea6",
"type": "github"
},
"original": {
@ -542,6 +130,21 @@
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1740877520,
"narHash": "sha256-oiwv/ZK/2FhGxrCkQkB83i7GnWXPPLzoqFHpDD3uYpk=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "147dee35aab2193b174e4c0868bd80ead5ce755c",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs-ovmf": {
"locked": {
"lastModified": 1708984720,
@ -560,11 +163,11 @@
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1741862977,
"narHash": "sha256-prZ0M8vE/ghRGGZcflvxCu40ObKaB+ikn74/xQoNrGQ=",
"lastModified": 1743231893,
"narHash": "sha256-tpJsHMUPEhEnzySoQxx7+kA+KUtgWqvlcUBqROYNNt0=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "cdd2ef009676ac92b715ff26630164bb88fec4e0",
"rev": "c570c1f5304493cafe133b8d843c7c1c4a10d3a6",
"type": "github"
},
"original": {
@ -576,11 +179,11 @@
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1741851582,
"narHash": "sha256-cPfs8qMccim2RBgtKGF+x9IBCduRvd/N5F4nYpU0TVE=",
"lastModified": 1743095683,
"narHash": "sha256-gWd4urRoLRe8GLVC/3rYRae1h+xfQzt09xOfb0PaHSk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "6607cf789e541e7873d40d3a8f7815ea92204f32",
"rev": "5e5402ecbcb27af32284d4a62553c019a3a49ea6",
"type": "github"
},
"original": {
@ -626,36 +229,11 @@
"url": "https://flakehub.com/f/AshleyYakeley/NixVirt/%2A.tar.gz"
}
},
"pre-commit-hooks": {
"inputs": {
"flake-compat": "flake-compat",
"gitignore": "gitignore",
"nixpkgs": [
"hyprland",
"nixpkgs"
]
},
"locked": {
"lastModified": 1741379162,
"narHash": "sha256-srpAbmJapkaqGRE3ytf3bj4XshspVR5964OX5LfjDWc=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "b5a62751225b2f62ff3147d0a334055ebadcd5cc",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"root": {
"inputs": {
"aquamarine": "aquamarine",
"hardware": "hardware",
"home-manager": "home-manager",
"hyprland": "hyprland",
"hyprspace": "hyprspace",
"nix-gaming": "nix-gaming",
"nixpkgs": "nixpkgs",
"nixpkgs-stable": "nixpkgs-stable",
"nixpkgs-unstable": "nixpkgs-unstable",
@ -667,7 +245,7 @@
},
"rose-pine-hyprcursor": {
"inputs": {
"hyprlang": "hyprlang_3",
"hyprlang": "hyprlang",
"nixpkgs": "nixpkgs_2",
"utils": "utils"
},
@ -701,51 +279,6 @@
}
},
"systems_2": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"systems_3": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"systems_4": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"systems_5": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@ -760,7 +293,7 @@
"type": "github"
}
},
"systems_6": {
"systems_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@ -777,7 +310,7 @@
},
"utils": {
"inputs": {
"systems": "systems_5"
"systems": "systems_2"
},
"locked": {
"lastModified": 1710146030,
@ -814,47 +347,6 @@
"type": "github"
}
},
"xdph": {
"inputs": {
"hyprland-protocols": [
"hyprland",
"hyprland-protocols"
],
"hyprlang": [
"hyprland",
"hyprlang"
],
"hyprutils": [
"hyprland",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprwayland-scanner"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1741934139,
"narHash": "sha256-ZhTcTH9FoeAtbPfWGrhkH7RjLJZ7GeF18nygLAMR+WE=",
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"rev": "150b0b6f52bb422a1b232a53698606fe0320dde0",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"type": "github"
}
},
"zen-browser": {
"inputs": {
"nixpkgs": [
@ -862,11 +354,11 @@
]
},
"locked": {
"lastModified": 1741838758,
"narHash": "sha256-nGTC/y9e+1+QIVCzIbiSpPiXM2HfS8YwIDCp52CcOQ4=",
"lastModified": 1743134754,
"narHash": "sha256-NC90oFdXwjABXs7wg0tMi5yxNW/xT1bgezg+0a9+3AI=",
"owner": "youwen5",
"repo": "zen-browser-flake",
"rev": "03a7fc89bc48344aed00e01b409c1d6ffc4c52ce",
"rev": "ceb2e7122307700e9c310973c793c2c241dc0901",
"type": "github"
},
"original": {

View file

@ -32,33 +32,6 @@
## Hyprland ##
aquamarine = {
type = "git";
url = "https://github.com/hyprwm/aquamarine";
ref = "refs/tags/v0.8.0";
inputs.nixpkgs.follows = "nixpkgs-unstable";
};
hyprland = {
type = "git";
submodules = true;
url = "https://github.com/hyprwm/Hyprland";
ref = "refs/tags/v0.47.2";
inputs.aquamarine.follows = "aquamarine";
inputs.nixpkgs.follows = "nixpkgs-unstable";
};
# TODO: Not working but id like to fix it
# hycov = {
# url = "github:bighu630/hycov";
# inputs.hyprland.follows = "hyprland";
# };
hyprspace = {
url = "github:KZDKM/Hyprspace";
inputs.hyprland.follows = "hyprland";
};
rose-pine-hyprcursor = {
url = "github:ndom91/rose-pine-hyprcursor";
};

View file

@ -4,119 +4,196 @@
pkgs,
...
}:
{
#INFO: Reference bind flags: https://wiki.hyprland.org/Configuring/Binds/#bind-flags
wayland.windowManager.hyprland.settings =
let
# -- Functions --
defaultApp =
type: "${pkgs.gtk3}/bin/gtk-launch $(${pkgs.xdg-utils}/bin/xdg-mime query default ${type})";
exec = script: "${pkgs.fish}/bin/fish ${script}";
xdg-open = command: "${pkgs.xdg-utils}/bin/xdg-open ${command}";
let
## Functions, Variables and Launchers ##
# -- Script Launchers --
# colorpicker = exec ./scripts/colorpicker.fish;
# lockscreen = exec ./scripts/lockscreen.fish;
# notify = exec ./scripts/notify.fish;
terminal = exec ./scripts/terminal.fish;
# wlogout = exec ./scripts/wlogout.fish;
# colorpicker = exec ./scripts/colorpicker.fish;
# lockscreen = exec ./scripts/lockscreen.fish;
# notify = exec ./scripts/notify.fish;
# wlogout = exec ./scripts/wlogout.fish;
#gtk-play = "${pkgs.libcanberra-gtk3}/bin/canberra-gtk-play";
#makoctl = "${config.services.mako.package}/bin/makoctl";
#notify-send = "${pkgs.libnotify}/bin/notify-send";
#playerctl = lib.getExe pkgs.playerctl; # installed via /home/common/optional/desktops/playerctl.nix
#swaylock = "lib.getExe pkgs.swaylock;
# -- Commands or Binaries --
browser = defaultApp "x-scheme-handler/https";
editor = "code";
menu = "${pkgs.walker}/bin/walker --modules applications,ssh";
files = xdg-open "$HOME";
pactl = lib.getExe' pkgs.pulseaudio "pactl";
defaultApp =
type: "${pkgs.gtk3}/bin/gtk-launch $(${pkgs.xdg-utils}/bin/xdg-mime query default ${type})";
exec = script: "${pkgs.fish}/bin/fish ${script}";
#playerctl = lib.getExe pkgs.playerctl; # installed via /home/common/optional/desktops/playerctl.nix
#swaylock = "lib.getExe pkgs.swaylock;
#makoctl = "${config.services.mako.package}/bin/makoctl";
#gtk-play = "${pkgs.libcanberra-gtk3}/bin/canberra-gtk-play";
#notify-send = "${pkgs.libnotify}/bin/notify-send";
files = "${pkgs.nautilus}/bin/nautilus $HOME";
browser = defaultApp "x-scheme-handler/https";
editor = "code";
launcher = "${pkgs.walker}/bin/walker --modules applications,ssh";
pactl = lib.getExe' pkgs.pulseaudio "pactl";
terminal = exec ./scripts/terminal.fish;
# This shits too long
lowerVol = "XF86AudioLowerVolume";
raiseVol = "XF86AudioRaiseVolume";
in
{
## Mouse Binds ##
bindm = [
", mouse:275, movewindow"
", mouse:276, resizewindow"
];
## Long ass keys ##
lowerVol = "XF86AudioLowerVolume";
raiseVol = "XF86AudioRaiseVolume";
## Non-consuming Binds ##
bindn = [
];
## Keybinds & Submaps ##
## Repeat Binds ##
binde = [
# Resize active window 5 pixels in direction
"SUPER_ALT, left, resizeactive, -20 0"
"SUPER_ALT, right, resizeactive, 20 0"
"SUPER_ALT, up, resizeactive, 0 -20"
"SUPER_ALT, down, resizeactive, 0 20"
#INFO: Did this scripts to avoid the shitty hyprland config implementation for nix :)
submaps = {
## Submap: Reset ##
"" = {
binds = {
## One-Shot Binds ##
"" = [
## Terminal ##
"SUPER, T, exec, ${terminal}"
# "SUPER_SHIFT, T, exec, ${terminal}" # Floating
# "SUPER_ALT, T, exec, ${terminal}" # Select
# -- Volume --
", ${raiseVol}, exec, ${pactl} set-sink-volume @DEFAULT_SINK@ +5%"
", ${lowerVol}, exec, ${pactl} set-sink-volume @DEFAULT_SINK@ -5%"
", ${raiseVol}, exec, ${pactl} set-source-volume @DEFAULT_SOURCE@ +5%"
", ${lowerVol}, exec, ${pactl} set-source-volume @DEFAULT_SOURCE@ -5%"
];
## App Runs ##
"SUPER, F, exec, ${files}"
"SUPER, E, exec, ${editor}"
"SUPER, W, exec, ${browser}"
"SUPER, N, exec, nm-connection-editor"
## One-shot Binds ##
bind = [
# -- Terminal --
"SUPER, T, exec, ${terminal}"
"SUPER_SHIFT, T, exec, ${terminal}" # floating
"SUPER_ALT, T, exec, ${terminal}" # select size?
## Launcher ##
"SUPER, SUPER_L, exec, ${launcher}"
# "SUPER, SUPER_L, exec, ${launcher} --app launcher"
# "SUPER, P, exec, ${launcher} --app color" # Color Picker
# "SUPER, V, exec, ${launcher} --app clip" # Clipboard
# "SUPER, X, exec, ${launcher} --app power" # Power Menu
# -- Apps --
"SUPER, F, exec, ${files}"
"SUPER, E, exec, ${editor}"
"SUPER, W, exec, ${browser}"
"SUPER, N, exec, nm-connection-editor"
# "SUPER, P, exec, ${colorpicker}"
## System ##
"SUPER, L, exec, hyprlock"
# "SUPER, L, exec, ${lockscreen}"
"SUPER, Q, killactive,"
"CTRL_ALT, Delete, exit,"
# -- Menu --
"SUPER, SUPER_L, exec, ${menu}"
# "SUPER, V, exec, ${menu}"
## Window Management ##
"SUPER_SHIFT, F, fullscreen, 0"
# "SUPER, F, exec, ${notify} 'Fullscreen Mode'"
"SUPER, Backspace, togglefloating,"
"SUPER, Backspace, centerwindow,"
"SUPER, left, scroller:movefocus, l"
"SUPER, right, scroller:movefocus, r"
"SUPER, up, scroller:movefocus, u"
"SUPER, down, scroller:movefocus, d"
"SUPER_SHIFT, left, scroller:movewindow, l, nomode"
"SUPER_SHIFT, right, scroller:movewindow, r, nomode"
"SUPER_SHIFT, up, scroller:movewindow, u, nomode"
"SUPER_SHIFT, down, scroller:movewindow, d, nomode"
"SUPER_SHIFT, P, pin,"
# "SUPER_SHIFT, P, exec, ${notify} 'Toggled Pin'"
"SUPER_SHIFT, S, swapnext"
# "SUPER_SHIFT, O, toggleopaque"
"SUPER, G, togglegroup"
# "SUPER, G, exec, ${notify} 'Toggled Group'"
"SUPER, Tab, changegroupactive, f"
# -- System --
# "SUPER, X, exec, ${wlogout}"
# "SUPER, L, exec, ${lockscreen}"
"SUPER, L, exec, hyprlock"
"SUPER, Q, killactive,"
"CTRL_ALT, Delete, exit,"
# ## Workspaces ##
# ", Home, hyprexpo:expo, toggle"
", Home, overview:toggle"
"ALT, Tab, cyclenext,"
"ALT, Tab, bringactivetotop,"
"SUPER_ALT, G, submap, steam"
# -- Window Management --
"SUPER_SHIFT, F, fullscreen, 0"
# "SUPER, F, exec, ${notify} 'Fullscreen Mode'"
"SUPER, Backspace, togglefloating,"
"SUPER, Backspace, centerwindow,"
"SUPER, left, movefocus, l"
"SUPER, right, movefocus, r"
"SUPER, up, movefocus, u"
"SUPER, down, movefocus, d"
"SUPER_SHIFT, left, movewindow, l"
"SUPER_SHIFT, right, movewindow, r"
"SUPER_SHIFT, up, movewindow, u"
"SUPER_SHIFT, down, movewindow, d"
"SUPER_SHIFT, P, pin,"
# "SUPER_SHIFT, P, exec, ${notify} 'Toggled Pin'"
"SUPER_SHIFT, S, swapnext"
# "SUPER_SHIFT, O, toggleopaque"
"SUPER, G, togglegroup"
# "SUPER, G, exec, ${notify} 'Toggled Group'"
"SUPER, Tab, changegroupactive, f"
## Scroller ##
"SUPER, P, scroller:pin"
"SUPER, P, scroller:alignwindow, left"
"SUPER, P, scroller:setsize, onethird"
# "\\notify"
"SUPER_SHIFT, P, scroller:pin"
"SUPER_SHIFT, P, scroller:alignwindow, right"
"SUPER_SHIFT, P, scroller:setsize, onethird"
# "\\notify"
"SUPER, A, scroller:jump"
# F20 - F23
", code:198, scroller:selectiontoggle"
", code:199, scroller:selectionworkspace"
", code:200, scroller:selectionmove, e"
", code:201, scroller:selectionreset"
# -- Workspaces --
", Home, overview:toggle"
# "SUPER, A, "
# TODO: use hycov for alt tab, https://github.com/bighu630/hycov
"ALT, Tab, cyclenext,"
"ALT, Tab, bringactivetotop,"
];
];
## Repeating Binds ##
e = [
"SUPER_ALT, left, scroller:cyclewidth, next"
"SUPER_ALT, right, scroller:cyclewidth, prev"
"SUPER_ALT, up, scroller:cycleheight, next"
"SUPER_ALT, down, scroller:cycleheight, prev"
# "SUPER_ALT, left, resizeactive, -20 0"
# "SUPER_ALT, right, resizeactive, 20 0"
# "SUPER_ALT, up, resizeactive, 0 -20"
# "SUPER_ALT, down, resizeactive, 0 20"
", ${raiseVol}, exec, ${pactl} set-sink-volume @DEFAULT_SINK@ +5%"
", ${lowerVol}, exec, ${pactl} set-sink-volume @DEFAULT_SINK@ -5%"
", ${raiseVol}, exec, ${pactl} set-source-volume @DEFAULT_SOURCE@ +5%"
", ${lowerVol}, exec, ${pactl} set-source-volume @DEFAULT_SOURCE@ -5%"
];
## Mouse Binds ##
m = [
", mouse:275, movewindow"
", mouse:276, resizewindow"
];
};
};
## Submap: Steam ##
steam = {
binds = {
"" = [
"SUPER, Escape, submap, reset"
"SUPER, SUPER_L, pass"
", mouse:275, pass"
", mouse:276, pass"
];
};
};
};
submaps-json = pkgs.writeText "submaps.json" (builtins.toJSON submaps);
submaps-script = pkgs.writeScript "submap-script" ''
#!/usr/bin/env fish
# Usage: ./parse_submaps.fish path/to/file.json
if test (count $argv) -lt 1
echo "Usage: $argv[0] path/to/file.json"
exit 1
end
set json_file $argv[1]
# Iterate over submaps preserving order
for entry in (${pkgs.jq}/bin/jq -c '.| to_entries[]' $json_file)
set submap_name (echo $entry | ${pkgs.jq}/bin/jq -r '.key')
echo "submap=$submap_name"
# Process each binds entry within the submap
for bind_entry in (echo $entry | ${pkgs.jq}/bin/jq -c '.value.binds | to_entries[]')
set bind_key (echo $bind_entry | ${pkgs.jq}/bin/jq -r '.key')
if test "$bind_key" = ""
set prefix "bind="
else if test "$bind_key" = "unbind"
set prefix "unbind="
else
set prefix "bind$bind_key="
end
# Process each binding's value in the array
for binding in (echo $bind_entry | ${pkgs.jq}/bin/jq -r '.value[]')
echo "$prefix$binding"
end
end
# Append submap reset except for default "" submap
if not test "$submap_name" = ""
echo "submap=reset"
end
end
'';
submaps-run = pkgs.runCommand "submaps-run" { inherit submaps-json submaps-script; } ''
mkdir -p $out
${pkgs.fish}/bin/fish ${submaps-script} ${submaps-json} > $out/submaps-out
'';
in
{
wayland.windowManager.hyprland.extraConfig = builtins.readFile "${submaps-run}/submaps-out";
}

View file

@ -12,7 +12,6 @@
wayland.windowManager.hyprland = {
enable = true;
# withUWSM = true; # One day, but not today
package = inputs.hyprland.packages."${pkgs.system}".hyprland;
systemd = {
enable = true;
@ -23,15 +22,7 @@
];
};
plugins = [
# inputs.hycov.packages.${pkgs.system}.hycov
(inputs.hyprspace.packages.${pkgs.system}.Hyprspace.overrideAttrs {
dontUseCmakeConfigure = true;
})
];
settings = {
## Environment Vars ##
env = [
"NIXOS_OZONE_WL, 1" # for ozone-based and electron apps to run on wayland
@ -59,8 +50,8 @@
) (config.monitors)
);
# I love this :)
# Creates 5 workspaces for all monitors
# This used to be usefull now its just overkill
# Creates 1 persistent workspaces for all monitors
workspace =
let
json = pkgs.writeTextFile {
@ -71,7 +62,7 @@
mkdir "$out"; ${pkgs.jq}/bin/jq -r '
[ to_entries[] |
(.key as $i | .value.name as $name |
[ range(0;5) | ($i * 5 + .) as $wsnum |
[ range(0;1) | ($i * 1 + .) as $wsnum |
if . == 0 then "\($wsnum), monitor:\($name), default:true, persistent:true"
else "\($wsnum), monitor:\($name)" end
]
@ -131,11 +122,12 @@
## Appearance ##
general = {
layout = "scroller";
border_size = 2;
gaps_in = 6;
gaps_out = 6;
"col.inactive_border" = "0x44e3625e";
"col.active_border" = "0x20e3625e";
"col.inactive_border" = "rgb(191b1c)";
"col.active_border" = "rgb(1cbdd9) rgb(f6ef9d) 30deg";
allow_tearing = true; # used to reduce latency and/or jitter in games
snap = {
enabled = true;
@ -146,13 +138,15 @@
decoration = {
rounding = 10;
rounding_power = 4.0;
active_opacity = 0.90;
inactive_opacity = 0.80;
active_opacity = 0.85;
inactive_opacity = 0.75;
fullscreen_opacity = 1.0;
dim_inactive = true;
dim_strength = 0.2;
blur = {
enabled = true;
size = 15;
passes = 2;
size = 7;
passes = 3;
new_optimizations = true;
ignore_opacity = true;
xray = true;
@ -162,10 +156,10 @@
shadow = {
enabled = true;
range = 30;
render_power = 3;
scale = 1.0;
color = "0x66000000";
color_inactive = "0x66000000";
render_power = 2;
scale = 1.5;
color = "rgb(191b1c)";
color_inactive = "rgb(191b1c)";
};
};
@ -181,102 +175,6 @@
"border, 1, 10 ,default"
"workspaces, 1, 5 ,default, slide"
];
## Auto Launch ##
exec-once = [
''${pkgs.waypaper}/bin/waypaper --restore''
];
## Layers Rules ##
layer = [
#"blur, rofi"
#"ignorezero, rofi"
#"ignorezero, logout_dialog"
];
## Window Rules ##
windowrule = [
# Dialogs
"float, title:^(Open File)(.*)$"
"float, title:^(Select a File)(.*)$"
"float, title:^(Choose wallpaper)(.*)$"
"float, title:^(Open Folder)(.*)$"
"float, title:^(Save As)(.*)$"
"float, title:^(Library)(.*)$"
"float, title:^(Accounts)(.*)$"
];
windowrulev2 = [
#Zen Extensions
"suppressevent maximize, class:^(zen)$"
"float, class:^(galculator)$"
"float, class:^(waypaper)$"
"float, class:^(keymapp)$"
#
# ========== Always opaque ==========
#
"opaque, class:^([Gg]imp)$"
"opaque, class:^([Ff]lameshot)$"
"opaque, class:^([Ii]nkscape)$"
"opaque, class:^([Bb]lender)$"
"opaque, class:^([Oo][Bb][Ss])$"
"opaque, class:^([Ss]team)$"
"opaque, class:^([Ss]team_app_*)$"
"opaque, class:^([Vv]lc)$"
# Remove transparency from video
"opaque, title:^(Netflix)(.*)$"
"opaque, title:^(.*YouTube.*)$"
"opaque, title:^(Picture-in-Picture)$"
#
# ========== Scratch rules ==========
#
#"size 80% 85%, workspace:^(special:special)$"
#"center, workspace:^(special:special)$"
#
# ========== Steam rules ==========
#
"stayfocused, title:^()$,class:^([Ss]team)$"
"minsize 1 1, title:^()$,class:^([Ss]team)$"
"immediate, class:^([Ss]team_app_*)$"
"workspace 7, class:^([Ss]team_app_*)$"
"monitor 0, class:^([Ss]team_app_*)$"
#
# ========== Fameshot rules ==========
#
# flameshot currently doesn't have great wayland support so needs some tweaks
#"rounding 0, class:^([Ff]lameshot)$"
#"noborder, class:^([Ff]lameshot)$"
#"float, class:^([Ff]lameshot)$"
#"move 0 0, class:^([Ff]lameshot)$"
#"suppressevent fullscreen, class:^([Ff]lameshot)$"
# "monitor:DP-1, ${flameshot}"
#
# ========== Workspace Assignments ==========
#
# "workspace 8, class:^(virt-manager)$"
# "workspace 8, class:^(obsidian)$"
# "workspace 9, class:^(brave-browser)$"
# "workspace 9, class:^(signal)$"
# "workspace 9, class:^(org.telegram.desktop)$"
# "workspace 9, class:^(discord)$"
# "workspace 0, title:^([Ss]potify*)$"
# "workspace special, class:^(yubioath-flutter)$"
];
# load at the end of the hyperland set
# extraConfig = '''';
plugin = {
};
};
};
}

View file

@ -0,0 +1,39 @@
# Hyprpaper is used to set the wallpaper on the system
{
pkgs,
config,
...
}:
let
# wallpaper = "/home/${config.hostSpec.username}/Pictures/Wallpapers/wallpaper.jpg";
# wallpaper = "/home/${config.hostSpec.username}/Pictures/Wallpapers/wallpaper.png";
wallpaper = "/home/${config.hostSpec.username}/Pictures/Wallpapers/invincible.jpg";
in
{
# The wallpaper is set by stylix
services.hyprpaper = {
enable = true;
settings = {
ipc = "on";
splash = false;
splash_offset = 2.0;
preload = [
wallpaper
];
wallpaper = [
", ${wallpaper}"
];
};
};
home.file."Pictures/Wallpapers" = {
source = ./wallpapers;
recursive = true;
};
wayland.windowManager.hyprland.settings = {
exec-once = [
"${pkgs.hyprpaper}/bin/hyprpaper"
];
};
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

View file

@ -0,0 +1,67 @@
{ pkgs, inputs, ... }:
{
home.packages = [
# pkgs.hyprlandPlugins.hyprexpo
pkgs.hyprlandPlugins.hyprspace
pkgs.hyprlandPlugins.hyprscroller
];
wayland.windowManager.hyprland = {
plugins = [
# pkgs.hyprlandPlugins.hyprexpo
pkgs.hyprlandPlugins.hyprspace
pkgs.hyprlandPlugins.hyprscroller
];
# TODO: Colors and Theme
settings = {
windowrulev2 = [
"bordercolor rgb(191b1c) rgb(ffffff) 25deg, tag: scroller:pinned"
];
plugin = {
# hyprexpo = {
# columns = 3;
# gap_size = 5;
# bg_col = "rgb(000000)";
# workspace_method = "center current"; # [center/first] [workspace] e.g. first 1 or center m+1
# };
overview = {
centerAligned = true;
hideOverlayLayers = true;
showSpecialWorkspaces = true;
};
scroller = {
center_active_column = true;
center_active_window = false;
focus_wrap = true;
overview_scale_content = false;
"col.selection_border" = "rgb(191b1c)";
jump_labels_font = "Monocraft";
jump_labels_color = "rgb(ffffff)";
jump_labels_scale = "0.1";
jump_labels_keys = "qwfpgarstd";
# monitor_options = ''
# (
# DP-3 = (
# mode = row;
# column_default_width = onehalf;
# column_widths = onehalf onethird twothirds threefourths;
# window_default_height = seveneighths;
# window_heights = seveneighths onehalf onethird twothirds
# ),
# HDMI-A-2 = (
# mode = col;
# column_default_width = one;
# column_widths = one onehalf;
# window_default_height = twothirds;
# window_heights = seveneighths onehalf onethird twothirds
# ),
# )'';
monitor_options = "(DP-3 = (mode = row;column_default_width = onehalf;column_widths = threequarters twothirds onehalf onethird;window_default_height = one;window_heights = one seveneighths twothirds onehalf onethird),HDMI-A-2 = (mode = col; column_default_width = one;column_widths = one onehalf;window_default_height = twothirds;window_heights = seveneighths twothirds onehalf onethird),)";
};
};
};
};
}

View file

@ -0,0 +1,90 @@
{
wayland.windowManager.hyprland.settings = {
## Layers Rules ##
layer = [
#"blur, rofi"
#"ignorezero, rofi"
#"ignorezero, logout_dialog"
];
## Window Rules ##
windowrulev2 = [
# Dialogs
"float, title:^(Open File)(.*)$"
"float, title:^(Select a File)(.*)$"
"float, title:^(Choose wallpaper)(.*)$"
"float, title:^(Open Folder)(.*)$"
"float, title:^(Save As)(.*)$"
"float, title:^(Library)(.*)$"
"float, title:^(Accounts)(.*)$"
"float, title:^(Media viewer)$"
## Zen ##
"suppressevent maximize, class:^(zen)$"
"float, title:^(Picture-in-Picture)$"
"pin, title:^(Picture-in-Picture)$"
"float, class:^(zen)$, title:^(File Upload)$"
"workspace special silent, title:^(Zen Sharing Indicator)$"
"workspace special silent, title:^(.*is sharing (your screen|a window)\.)$"
# Float Apps
"float, class:^(galculator)$"
"float, class:^(waypaper)$"
"float, class:^(keymapp)$"
# Nautilus
"float, initialClass:^(org.gnome.Nautilus)$"
"float, initialClass:^(org.gnome.Nautilus)$, move 10% 50%"
"size 30% 30%, initialClass:^(org.gnome.Nautilus)$"
# Always opaque
"opaque, class:^([Gg]imp)$"
"opaque, class:^([Ff]lameshot)$"
"opaque, class:^([Ii]nkscape)$"
"opaque, class:^([Bb]lender)$"
"opaque, class:^([Oo][Bb][Ss])$"
"opaque, class:^([Vv]lc)$"
# Remove transparency from video
"opaque, title:^(Netflix)(.*)$"
"opaque, title:^(.*YouTube.*)$"
## Scratch rules ##
#"size 80% 85%, workspace:^(special:special)$"
#"center, workspace:^(special:special)$"
## Steam rules ##
"stayfocused, initialClass:^([Gg]amescope)$"
"fullscreen, initialClass:^([Gg]amescope)$"
"minsize 1 1, initialClass:^([Gg]amescope)$"
"immediate, initialClass:^([Gg]amescope)$"
"workspace 3, initialClass:^([Gg]amescope)$"
"monitor 0, initialClass:^([Gg]amescope)$"
#
# ========== Fameshot rules ==========
#
# flameshot currently doesn't have great wayland support so needs some tweaks
#"rounding 0, class:^([Ff]lameshot)$"
#"noborder, class:^([Ff]lameshot)$"
#"float, class:^([Ff]lameshot)$"
#"move 0 0, class:^([Ff]lameshot)$"
#"suppressevent fullscreen, class:^([Ff]lameshot)$"
# "monitor:DP-1, ${flameshot}"
## Workspace Assignments ##
"workspace 1, initialClass:^(vesktop)$"
"workspace 1, initialClass:^(spotify)$"
"workspace 1, initialClass:^(org.telegram.desktop)$"
# "workspace name:4, initialClass:^(virt-manager)$"
# "workspace 8, class:^(obsidian)$"
# "workspace 9, class:^(brave-browser)$"
];
};
}

View file

@ -11,8 +11,6 @@
programs.hyprland = {
enable = true;
# withUWSM = true; # One day, but not today
package = inputs.hyprland.packages."${pkgs.system}".hyprland;
portalPackage = inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland;
};
environment.systemPackages = [