1

Compare commits

...

30 Commits

Author SHA1 Message Date
815387a87e Modules/Hyprpanel: Disable bluetooth module 2025-07-30 14:07:08 +02:00
3c93a7e549 System/Servenix+Thinknix: Fix sops key issue, they key location assumed an impermanent setup
Changed the default location to /home/${username}/.secrets/age/age.key,
impermanent systems have to override this.
2025-07-25 23:33:48 +02:00
e677a74c41 Services/Immich+Jellyfin: Make containers privileged 2025-07-25 23:17:59 +02:00
a0d6bb0ab7 Services/Immich: Update to v1.136.0 2025-07-25 22:40:08 +02:00
03cf08f0d4 Home: Fix jetbrains ide tooltip focus flicker 2025-07-24 14:06:14 +02:00
c977589fde Modules/Impermanence: Persist blender, unity and obs-studio state 2025-07-24 14:00:50 +02:00
7af7980e07 Modules/Hyprpanel: Hide fcitx tray icon 2025-07-24 14:00:25 +02:00
c47ca40705 Home: Disable hyprland dynamicCursor and add keybinding to toggle mouse focus 2025-07-24 14:00:04 +02:00
ebd19812a2 Home/Nixinator: Enable cudaSupport for blender and obs-studio 2025-07-24 13:59:34 +02:00
844561a87c Modules/Impermanence: Persist unityhub 2025-07-23 11:53:04 +02:00
206d34adb2 System/Nixinator: Open local ports for Unity development 2025-07-23 00:32:20 +02:00
fa0a8f6901 Home/Nixinator: Add steam-run and fix nix-alien flake input 2025-07-22 21:49:48 +02:00
6db7efe71b Derivations/Unityhub: Add custom unityhub 3.13 derivation with fixed libxml and removed Gconf
nixpkgs issues/419634#issuecomment-3052547176
2025-07-22 19:29:13 +02:00
1418e62598 Flake: Add nixpkgs-stable input, put the overlays in the correct place and add jetbrains.rider overlay
Jetbrains apps are currently broken on unstable because of a
jetbrains.jdk buildfailure
2025-07-22 18:59:16 +02:00
59075d1619 Modules/Btop+Rofi: Make selected element coloring slightly more consistent 2025-07-22 17:35:57 +02:00
db8ada4360 Home: Start initial kitty terminal with fastfetch 2025-07-22 16:48:25 +02:00
6951525a3b Readme: Update screenshots 2025-07-22 16:40:03 +02:00
295651262a Home: Configure fastfetch 2025-07-22 16:39:57 +02:00
83fcdd9710 Flake: Update lock 2025-07-22 15:32:55 +02:00
262b8913eb Modules/Firefox+Qutebrowser: Add DeepWiki bookmark 2025-07-22 15:24:23 +02:00
32a3205604 Modules/Hyprland: Update dynamic cursor config 2025-07-22 15:11:45 +02:00
914e011081 System/Nixinator: Reset kernel log level 2025-07-22 14:58:36 +02:00
94017ce4c9 Modules/Hyprland: Configure hyprland plugins 2025-07-22 14:58:27 +02:00
4af0783c14 Modules/Hyprland: Split config into even more files 2025-07-22 14:24:52 +02:00
ee677b5c4c Flake: Let hyprland plugins follow hyprland 2025-07-22 14:16:33 +02:00
e65fbecd3c System: Reformat hardware-configurations 2025-07-22 14:16:17 +02:00
62584588f5 System/Nixinator: Switch to regular linux kernel 2025-07-22 14:16:08 +02:00
638b0c9366 System/Nixinator: Increase kernel + udev loglevel 2025-07-22 13:59:18 +02:00
b005336b02 Modules/Neovim: Improve files picker truncation 2025-07-22 13:58:50 +02:00
2412129204 System: Align system hyprland package with hyprland module 2025-07-22 13:58:34 +02:00
34 changed files with 1632 additions and 620 deletions

BIN
Btop.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 MiB

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 2.0 MiB

BIN
Rmpc.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

After

Width:  |  Height:  |  Size: 2.3 MiB

View File

@ -7,5 +7,6 @@
monolisa = pkgs.callPackage ./monolisa {};
msty = pkgs.callPackage ./msty {};
unityhub = pkgs.callPackage ./unityhub {};
tidal-dl-ng = pkgs.callPackage ./tidal-dl-ng {};
}

View File

@ -1,4 +1,3 @@
# Taken from pull/422785
{
lib,
stdenv,
@ -47,7 +46,15 @@ stdenv.mkDerivation rec {
++ extraPkgs pkgs;
multiPkgs = pkgs:
with pkgs;
with pkgs; let
libxml2-legacy = libxml2.overrideAttrs (previousAttrs: rec {
version = "2.13.8";
src = fetchurl {
url = "mirror://gnome/sources/libxml2/${lib.versions.majorMinor version}/libxml2-${version}.tar.xz";
hash = "sha256-J3KUyzMRmrcbK8gfL0Rem8lDW4k60VuyzSsOhZoO6Eo=";
};
});
in
[
# Unity Hub ldd dependencies
cups
@ -94,7 +101,7 @@ stdenv.mkDerivation rec {
xorg.libXcursor
glib
gdk-pixbuf
libxml2
libxml2-legacy
zlib
clang
git # for git-based packages in unity package manager

589
flake.lock generated
View File

@ -1,5 +1,38 @@
{
"nodes": {
"aquamarine": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprwayland-scanner"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1752743471,
"narHash": "sha256-4izhj1j7J4mE8LgljCXSIUDculqOsxxhdoC81VhqizM=",
"owner": "hyprwm",
"repo": "aquamarine",
"rev": "e31b575d19e7cf8a8f4398e2f9cffe27a1332506",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "aquamarine",
"type": "github"
}
},
"devshell": {
"inputs": {
"nixpkgs": "nixpkgs"
@ -40,6 +73,22 @@
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_2": {
"locked": {
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
@ -54,7 +103,7 @@
"type": "github"
}
},
"flake-compat_2": {
"flake-compat_3": {
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
@ -112,7 +161,7 @@
},
"flake-utils": {
"inputs": {
"systems": "systems"
"systems": "systems_3"
},
"locked": {
"lastModified": 1731533236,
@ -143,13 +192,35 @@
"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": 1752666637,
"narHash": "sha256-P8J72psdc/rWliIvp8jUpoQ6qRDlVzgSDDlgkaXQ0Fw=",
"lastModified": 1753122741,
"narHash": "sha256-nFxE8lk9JvGelxClCmwuJYftbHqwnc01dRN4DVLUroM=",
"owner": "nixos",
"repo": "nixos-hardware",
"rev": "d1bfa8f6ccfb5c383e1eba609c1eb67ca24ed153",
"rev": "cc66fddc6cb04ab479a1bb062f4d4da27c936a22",
"type": "github"
},
"original": {
@ -165,11 +236,11 @@
]
},
"locked": {
"lastModified": 1752814804,
"narHash": "sha256-irfg7lnfEpJY+3Cffkluzp2MTVw1Uq9QGxFp6qadcXI=",
"lastModified": 1753180535,
"narHash": "sha256-KEtlzMs2O7FDvciFtjk9W4hyau013Pj9qZNK9a0PxEc=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "d0300c8808e41da81d6edfc202f3d3833c157daf",
"rev": "847711c7ffa9944b0c5c39a8342ac8eb6a9f9abc",
"type": "github"
},
"original": {
@ -178,6 +249,339 @@
"type": "github"
}
},
"hypr-dynamic-cursors": {
"inputs": {
"hyprland": [
"hyprland"
],
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1752956935,
"narHash": "sha256-Yd5oSg1gS/mwobd5YFrLC3I4bar/cSGNGuIvxF3UeHE=",
"owner": "VirtCode",
"repo": "hypr-dynamic-cursors",
"rev": "d6eb0b798c9b07f7f866647c8eb1d75a930501be",
"type": "github"
},
"original": {
"owner": "VirtCode",
"repo": "hypr-dynamic-cursors",
"type": "github"
}
},
"hyprcursor": {
"inputs": {
"hyprlang": [
"hyprland",
"hyprlang"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1749155331,
"narHash": "sha256-XR9fsI0zwLiFWfqi/pdS/VD+YNorKb3XIykgTg4l1nA=",
"owner": "hyprwm",
"repo": "hyprcursor",
"rev": "45fcc10b4c282746d93ec406a740c43b48b4ef80",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprcursor",
"type": "github"
}
},
"hyprgraphics": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1752149140,
"narHash": "sha256-gbh1HL98Fdqu0jJIWN4OJQN7Kkth7+rbkFpSZLm/62A=",
"owner": "hyprwm",
"repo": "hyprgraphics",
"rev": "340494a38b5ec453dfc542c6226481f736cc8a9a",
"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",
"hyprutils": "hyprutils",
"hyprwayland-scanner": "hyprwayland-scanner",
"nixpkgs": [
"nixpkgs"
],
"pre-commit-hooks": "pre-commit-hooks",
"systems": "systems",
"xdph": "xdph"
},
"locked": {
"lastModified": 1753175652,
"narHash": "sha256-IXwbcUXRMINAcmmOoscjcElf990YSUCsPHoab0GAJ2M=",
"owner": "hyprwm",
"repo": "Hyprland",
"rev": "fdbbad04bbf2382e9a980418c976668fc062f195",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "Hyprland",
"type": "github"
}
},
"hyprland-plugins": {
"inputs": {
"hyprland": [
"hyprland"
],
"nixpkgs": [
"nixpkgs"
],
"systems": [
"hyprland-plugins",
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1753028264,
"narHash": "sha256-GbfsRZWW5uBAOeddLkmrYV2XmAbI0etVUTBXFH5thcw=",
"owner": "hyprwm",
"repo": "hyprland-plugins",
"rev": "14f9a444793d6dd78c29033acf9c3c974ded708d",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-plugins",
"type": "github"
}
},
"hyprland-protocols": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1749046714,
"narHash": "sha256-kymV5FMnddYGI+UjwIw8ceDjdeg7ToDVjbHCvUlhn14=",
"owner": "hyprwm",
"repo": "hyprland-protocols",
"rev": "613878cb6f459c5e323aaafe1e6f388ac8a36330",
"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": 1749154592,
"narHash": "sha256-DO7z5CeT/ddSGDEnK9mAXm1qlGL47L3VAHLlLXoCjhE=",
"owner": "hyprwm",
"repo": "hyprland-qt-support",
"rev": "4c8053c3c888138a30c3a6c45c2e45f5484f2074",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-qt-support",
"type": "github"
}
},
"hyprland-qtutils": {
"inputs": {
"hyprland-qt-support": "hyprland-qt-support",
"hyprlang": [
"hyprland",
"hyprlang"
],
"hyprutils": [
"hyprland",
"hyprland-qtutils",
"hyprlang",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1750371812,
"narHash": "sha256-D868K1dVEACw17elVxRgXC6hOxY+54wIEjURztDWLk8=",
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"rev": "b13c7481e37856f322177010bdf75fccacd1adc8",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"type": "github"
}
},
"hyprlang": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1750371198,
"narHash": "sha256-/iuJ1paQOBoSLqHflRNNGyroqfF/yvPNurxzcCT0cAE=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "cee01452bca58d6cadb3224e21e370de8bc20f0b",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprlang",
"type": "github"
}
},
"hyprspace": {
"inputs": {
"hyprland": [
"hyprland"
],
"systems": "systems_2"
},
"locked": {
"lastModified": 1752663231,
"narHash": "sha256-rTItuAWpzICMREF8Ww8cK4hYgNMRXJ4wjkN0akLlaWE=",
"owner": "KZDKM",
"repo": "Hyprspace",
"rev": "0a82e3724f929de8ad8fb04d2b7fa128493f24f7",
"type": "github"
},
"original": {
"owner": "KZDKM",
"repo": "Hyprspace",
"type": "github"
}
},
"hyprutils": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1752252310,
"narHash": "sha256-06i1pIh6wb+sDeDmWlzuPwIdaFMxLlj1J9I5B9XqSeo=",
"owner": "hyprwm",
"repo": "hyprutils",
"rev": "bcabcbada90ed2aacb435dc09b91001819a6dc82",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprutils",
"type": "github"
}
},
"hyprwayland-scanner": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1751897909,
"narHash": "sha256-FnhBENxihITZldThvbO7883PdXC/2dzW4eiNvtoV5Ao=",
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"rev": "fcca0c61f988a9d092cbb33e906775014c61579d",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"type": "github"
}
},
"impermanence": {
"locked": {
"lastModified": 1737831083,
@ -223,7 +627,7 @@
},
"naersk": {
"inputs": {
"nixpkgs": "nixpkgs_3"
"nixpkgs": "nixpkgs_4"
},
"locked": {
"lastModified": 1733346208,
@ -241,11 +645,9 @@
},
"nix-alien": {
"inputs": {
"flake-compat": "flake-compat",
"flake-compat": "flake-compat_2",
"nix-index-database": "nix-index-database",
"nixpkgs": [
"nixpkgs"
]
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1752566074,
@ -314,13 +716,45 @@
"type": "github"
}
},
"nixpkgs_2": {
"nixpkgs-stable": {
"locked": {
"lastModified": 1752687322,
"narHash": "sha256-RKwfXA4OZROjBTQAl9WOZQFm7L8Bo93FQwSJpAiSRvo=",
"lastModified": 1753115646,
"narHash": "sha256-yLuz5cz5Z+sn8DRAfNkrd2Z1cV6DaYO9JMrEz4KZo/c=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "6e987485eb2c77e5dcc5af4e3c70843711ef9251",
"rev": "92c2e04a475523e723c67ef872d8037379073681",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-25.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1752950548,
"narHash": "sha256-NS6BLD0lxOrnCiEOcvQCDVPXafX1/ek1dfJHX1nUIzc=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "c87b95e25065c028d31a94f06a62927d18763fdf",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1752950548,
"narHash": "sha256-NS6BLD0lxOrnCiEOcvQCDVPXafX1/ek1dfJHX1nUIzc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "c87b95e25065c028d31a94f06a62927d18763fdf",
"type": "github"
},
"original": {
@ -330,7 +764,7 @@
"type": "github"
}
},
"nixpkgs_3": {
"nixpkgs_4": {
"locked": {
"lastModified": 1734323986,
"narHash": "sha256-m/lh6hYMIWDYHCAsn81CDAiXoT3gmxXI9J987W5tZrE=",
@ -350,14 +784,14 @@
"nixpkgs"
],
"nuschtosSearch": "nuschtosSearch",
"systems": "systems_2"
"systems": "systems_4"
},
"locked": {
"lastModified": 1752762787,
"narHash": "sha256-WZLSOR2Pei7C4nH/ntKUqOZOAa5rgvc2fVZl4RoEXmw=",
"lastModified": 1752976861,
"narHash": "sha256-59HcrqHfbSJUdmpzrAa9x8fW1PoS+ZGhCjL5k5HbyV8=",
"owner": "nix-community",
"repo": "nixvim",
"rev": "bc0555c8694d43fb63ae2c7afec08b6987431a04",
"rev": "0c50ed9349199219583cb1ed1a972d71e06039ec",
"type": "github"
},
"original": {
@ -368,7 +802,7 @@
},
"nps": {
"inputs": {
"flake-compat": "flake-compat_2",
"flake-compat": "flake-compat_3",
"flake-utils": "flake-utils_2",
"naersk": "naersk",
"nixpkgs": [
@ -397,11 +831,11 @@
]
},
"locked": {
"lastModified": 1752857527,
"narHash": "sha256-M5/WooUjn1pOpixt9vEFc9AsCo+3Zi7wUNWl3VBJTRg=",
"lastModified": 1753188105,
"narHash": "sha256-+TzCdjqNolMiaXQputij1ZRd1kP5xp2AIcwWzxh+gDU=",
"owner": "nix-community",
"repo": "NUR",
"rev": "fa509d10e459de7c36829cc2850d1df61c7e2e96",
"rev": "e5000d3243509388c73347fab9d6adccba943a61",
"type": "github"
},
"original": {
@ -448,16 +882,44 @@
"type": "github"
}
},
"pre-commit-hooks": {
"inputs": {
"flake-compat": "flake-compat",
"gitignore": "gitignore",
"nixpkgs": [
"hyprland",
"nixpkgs"
]
},
"locked": {
"lastModified": 1750779888,
"narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"root": {
"inputs": {
"devshell": "devshell",
"disko": "disko",
"hardware": "hardware",
"home-manager": "home-manager",
"hypr-dynamic-cursors": "hypr-dynamic-cursors",
"hyprland": "hyprland",
"hyprland-plugins": "hyprland-plugins",
"hyprspace": "hyprspace",
"impermanence": "impermanence",
"nix-alien": "nix-alien",
"nix-flatpak": "nix-flatpak",
"nixpkgs": "nixpkgs_2",
"nixpkgs": "nixpkgs_3",
"nixpkgs-stable": "nixpkgs-stable",
"nixvim": "nixvim",
"nps": "nps",
"nur": "nur",
@ -486,6 +948,36 @@
}
},
"systems": {
"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_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": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@ -500,7 +992,7 @@
"type": "github"
}
},
"systems_2": {
"systems_4": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@ -535,6 +1027,47 @@
"repo": "textfox",
"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": 1751300244,
"narHash": "sha256-PFuv1TZVYvQhha0ac53E3YgdtmLShrN0t4T6xqHl0jE=",
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"rev": "6115f3fdcb2c1a57b4a80a69f3c797e47607b90a",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"type": "github"
}
}
},
"root": "root",

View File

@ -12,6 +12,9 @@
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
hardware.url = "github:nixos/nixos-hardware";
# NOTE: Update this after May and November
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.05";
# Home Manager
home-manager.url = "github:nix-community/home-manager";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
@ -38,7 +41,9 @@
# Run unpatched binaries on NixOS
nix-alien.url = "github:thiagokokada/nix-alien";
nix-alien.inputs.nixpkgs.follows = "nixpkgs";
# Don't follow nixpkgs:
# https://github.com/thiagokokada/nix-alien#user-content-nixos-installation-with-flakes
# nix-alien.inputs.nixpkgs.follows = "nixpkgs";
# Hyprland (use flake so plugins are not built from source)
hyprland.url = "github:hyprwm/Hyprland";
@ -47,8 +52,13 @@
# HyprPlugins
hyprland-plugins.url = "github:hyprwm/hyprland-plugins";
hyprland-plugins.inputs.nixpkgs.follows = "nixpkgs";
hyprland-plugins.inputs.hyprland.follows = "hyprland";
hypr-dynamic-cursors.url = "github:VirtCode/hypr-dynamic-cursors";
hypr-dynamic-cursors.inputs.nixpkgs.follows = "nixpkgs";
hypr-dynamic-cursors.inputs.hyprland.follows = "hyprland";
hyprspace.url = "github:KZDKM/Hyprspace";
# hyprspace.inputs.nixpkgs.follows = "nixpkgs";
hyprspace.inputs.hyprland.follows = "hyprland";
# NeoVim <3
nixvim.url = "github:nix-community/nixvim";
@ -69,10 +79,6 @@
# Realtime audio
# musnix.url = "github:musnix/musnix";
# musnix.inputs.nixpkgs.follows = "nixpkgs";
# Pinned versions
# v4l2loopback-pinned.url = "github:nixos/nixpkgs/4684fd6b0c01e4b7d99027a34c93c2e09ecafee2";
# unityhub-pinned.url = "github:huantianad/nixpkgs/9542b0bc7701e173a10e6977e57bbba68bb3051f";
};
# Outputs is a function that takes the inputs as arguments.
@ -106,41 +112,24 @@
# firefox = prev.firefox.override { ... };
# myBrowser = final.firefox;
# }
overlays = [
overlays = let
# Maintain additional stable pkgs.
# This is supposed to provide a backup for packages in case they
# stop building on the unstable branch.
# It should otherwise not be mixed with this configuration,
# so don't even pass it to the modules.
pkgs-stable = import inputs.nixpkgs-stable {
inherit system;
config.allowUnfree = true;
config.allowUnfreePredicate = pkg: true;
};
in [
inputs.devshell.overlays.default
inputs.nur.overlays.default
# inputs.emacs-overlay.overlay
# Overriding specific packages from a different nixpkgs (e.g. a pull request)
# can be done like this. Note that this creates an additional nixpkgs instance.
# https://github.com/NixOS/nixpkgs/issues/418451
# (final: prev: {
# unityhub_pinned_3_13 = import inputs.unityhub-pinned {
# config.allowUnfree = true;
# localSystem = {inherit (prev) system;};
# };
# })
# TODO: Remove this after 0.15.1 hit nixpkgs
(final: prev: {
neovide = prev.neovide.overrideAttrs (finalAttrs: prevAttrs: {
version = "0.15.1";
src = prev.fetchFromGitHub {
owner = "neovide";
repo = "neovide";
tag = finalAttrs.version;
hash = "sha256-2iV3g6tcCkMF7sFG/GZDz3czPZNIDi6YLfrVzYO9jYI=";
};
cargoHash = "sha256-YlHAcUCRk6ROg5yXIumHfsiR/2TrsSzbuXz/IQK7sEo=";
cargoDeps = prev.rustPlatform.fetchCargoVendor {
inherit (finalAttrs) pname src version;
hash = finalAttrs.cargoHash;
};
});
})
# All my own overlays
(import ./overlays {inherit nixpkgs inputs;})
# All my own overlays (derivations + modifications)
(import ./overlays {inherit inputs nixpkgs pkgs-stable;})
];
};

View File

@ -41,8 +41,7 @@
};
modules = {
# TODO: Reenable after build-failure on 2025-07-18
beets.enable = false; # !headless;
beets.enable = !headless;
btop.enable = true;
@ -82,136 +81,7 @@
signCommits = true;
};
hyprland = {
enable = !headless;
dunst.enable = !config.modules.hyprpanel.enable; # Disable for hyprpanel
keybindings = {
main-mod = "SUPER";
bindings = {
"$mainMod, t" = ["exec, kitty"];
"$mainMod, e" = ["exec, kitty --title=Yazi yazi"];
"$mainMod, n" = ["exec, neovide"];
# "$mainMod, r" = ["exec, kitty --title=Rmpc rmpc"];
"$mainMod CTRL, n" = ["exec, kitty --title=Navi navi"];
"$mainMod SHIFT, n" = ["exec, neovide ${config.paths.dotfiles}/navi/christoph.cheat"];
"$mainMod SHIFT, f" = ["exec, neovide ${config.paths.dotfiles}/flake.nix"];
"$mainMod, p" = ["exec, hyprpicker --autocopy --format=hex"];
"$mainMod, s" = ["exec, grim -g \"$(slurp)\""];
"$mainMod CTRL, s" = ["exec, grim -g \"$(slurp)\" - | wl-copy"];
"$mainMod SHIFT, s" = ["exec, grim -g \"$(slurp)\" - | wl-copy"];
", XF86AudioRaiseVolume" = ["exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+"];
", XF86AudioLowerVolume" = ["exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%-"];
", XF86AudioPlay" = ["exec, playerctl play-pause"];
", XF86AudioPrev" = ["exec, playerctl previous"];
", XF86AudioNext" = ["exec, playerctl next"];
", XF86MonBrightnessDown" = ["exec, hyprctl hyprsunset gamma -10"];
", XF86MonBrightnessUp" = ["exec, hyprctl hyprsunset gamma +10"];
"$mainMod, XF86MonBrightnessDown" = ["exec, hyprctl hyprsunset temperature 5750"];
"$mainMod, XF86MonBrightnessUp" = ["exec, hyprctl hyprsunset identity"];
# "CTRL ALT, t" = ["exec, bash -c 'systemctl --user restart hyprpanel.service'"];
};
ws-bindings = {
# "<Workspace>" = "<Key>";
"1" = "1";
"2" = "2";
"3" = "3";
"4" = "4";
"5" = "5";
"6" = "6";
"7" = "7";
"8" = "8";
"9" = "9";
"10" = "0";
};
special-ws-bindings = {
"ferdium" = "x";
"msty" = "z";
"btop" = "b";
"rmpc" = "r";
};
};
autostart = {
immediate = [
"kitty"
"zeal"
"nextcloud --background"
"protonvpn-app"
# "kdeconnect-indicator" # started by services.kdeconnect.indicator
];
delayed = [
"keepassxc" # The tray doesn't work when started too early
];
special-silent = {
"ferdium" = ["ferdium"];
"msty" = ["msty"];
"btop" = ["kitty --title=Btop btop"];
"rmpc" = ["kitty --title=Rmpc rmpc"];
};
};
windowrules = [];
workspacerules = {
"1" = [];
"2" = ["Zotero" "neovide" "code-url-handler"];
"3" = ["obsidian" "unityhub" "Unity"];
"4" = ["firefox" "Google-chrome" "chromium-browser" "org.qutebrowser.qutebrowser"];
"5" = ["steam"];
"6" = ["steam_app_(.+)"];
"7" = ["signal"];
"8" = ["tidal-hifi"];
"9" = ["discord"];
"10" = ["python3"];
};
floating = [
{class = "org.kde.polkit-kde-authentication-agent-1";}
{
class = "thunar";
title = "File Operation Progress";
}
{class = "ffplay";}
];
transparent-opacity = "0.75";
transparent = [
"kitty"
"Alacritty"
"discord"
"signal"
"vesktop"
"Spotify"
"tidal-hifi"
"obsidian"
"firefox"
"org.qutebrowser.qutebrowser"
"jetbrains-clion"
"jetbrains-idea"
"jetbrains-pycharm"
"jetbrains-rustrover"
"jetbrains-rider"
"jetbrains-webstorm"
"code-url-handler"
"neovide"
"steam"
"ferdium"
"Msty"
];
};
hyprland = import ./hyprland.nix {inherit pkgs config headless;};
hyprpanel.enable = !headless;
kitty.enable = !headless;
lazygit.enable = true;
@ -561,17 +431,20 @@
waves = false; # default false
};
color = {
color = let
color = config.modules.color;
in {
# https://github.com/catppuccin/cava/blob/main/themes/latte-transparent.cava
gradient = 1;
gradient_color_1 = "'#179299'";
gradient_color_2 = "'#04a5e5'";
gradient_color_3 = "'#209fb5'";
gradient_color_4 = "'#1e66f5'";
gradient_color_5 = "'#8839ef'";
gradient_color_6 = "'#ea76cb'";
gradient_color_7 = "'#e64553'";
gradient_color_8 = "'#d20f39'";
gradient_color_1 = "'${color.hexS.teal}'";
gradient_color_2 = "'${color.hexS.sky}'";
gradient_color_3 = "'${color.hexS.sapphire}'";
gradient_color_4 = "'${color.hexS.blue}'";
gradient_color_5 = "'${color.hexS.mauve}'";
gradient_color_6 = "'${color.hexS.pink}'";
gradient_color_7 = "'${color.hexS.maroon}'";
gradient_color_8 = "'${color.hexS.red}'";
};
};
};
@ -586,7 +459,155 @@
enableFishIntegration = config.modules.fish.enable;
};
fastfetch.enable = true;
fastfetch = {
enable = true;
settings = {
logo = {
padding = {
top = 3;
left = 1;
right = 2;
};
};
display = {
separator = "";
key.width = 17;
};
# Box Drawing: ╭ ─ ╮ ╰ ╯ │
modules = [
# Title
{
type = "title";
format = "{#1} {#}{user-name-colored}";
}
# System Information
{
type = "custom";
format = "{#1} {#}System Information";
}
{
type = "os";
key = "{#separator} {#keys}󰍹 OS";
}
{
type = "kernel";
key = "{#separator} {#keys}󰒋 Kernel";
}
{
type = "bootmgr";
key = "{#separator} {#keys}󰒋 BootMGR";
}
{
type = "uptime";
key = "{#separator} {#keys}󰅐 Uptime";
}
{
type = "packages";
key = "{#separator} {#keys}󰏖 Packages";
# format = "{all}";
}
{
type = "custom";
format = "{#1}";
}
# Desktop Environment
{
type = "custom";
format = "{#1} {#}Desktop Environment";
}
{
type = "de";
key = "{#separator} {#keys}󰧨 DE";
}
{
type = "wm";
key = "{#separator} {#keys}󱂬 WM";
}
{
type = "wmtheme";
key = "{#separator} {#keys}󰉼 Theme";
}
{
type = "display";
key = "{#separator} {#keys}󰹑 Resolution";
}
{
type = "shell";
key = "{#separator} {#keys}󰞷 Shell";
}
{
type = "terminalfont";
key = "{#separator} {#keys}󰛖 Font";
}
{
type = "icons";
key = "{#separator} {#keys} Icons";
}
{
type = "cursor";
key = "{#separator} {#keys}󰆽 Cursor";
}
{
type = "custom";
format = "{#1}";
}
# Hardware Information
{
type = "custom";
format = "{#1} {#}Hardware Information";
}
{
type = "board";
key = "{#separator} {#keys} Board";
}
{
type = "cpu";
key = "{#separator} {#keys}󰻠 CPU";
}
{
type = "gpu";
key = "{#separator} {#keys}󰢮 GPU";
}
{
type = "memory";
key = "{#separator} {#keys}󰍛 Memory";
}
# {
# type = "disk";
# key = "{#separator}│ {#keys}󰋊 Disk (/)";
# folders = "/";
# }
# {
# type = "disk";
# key = "{#separator}│ {#keys}󰋊 Disk (~/Games)";
# folders = "/home/christoph/Games";
# }
{
type = "btrfs";
key = "{#separator} {#keys}󰋊 BTRFS";
}
{
type = "custom";
format = "{#1}";
}
# Colors Footer
{
type = "colors";
key = "{#separator} {#1}";
keyWidth = 6;
symbol = "circle";
}
];
};
};
fd.enable = true;
fzf = {

161
home/christoph/hyprland.nix Normal file
View File

@ -0,0 +1,161 @@
{
pkgs,
config,
headless,
}: {
enable = !headless;
dunst.enable = !config.modules.hyprpanel.enable; # Disable for hyprpanel
bars.enable = false;
dynamicCursor.enable = false;
trails.enable = true;
hyprspace.enable = true;
keybindings = {
main-mod = "SUPER";
bindings = {
"$mainMod, t" = ["exec, kitty"];
"$mainMod, e" = ["exec, kitty --title=Yazi yazi"];
"$mainMod, n" = ["exec, neovide"];
# "$mainMod, r" = ["exec, kitty --title=Rmpc rmpc"];
"$mainMod CTRL, n" = ["exec, kitty --title=Navi navi"];
"$mainMod SHIFT, n" = ["exec, neovide ${config.paths.dotfiles}/navi/christoph.cheat"];
"$mainMod SHIFT, f" = ["exec, neovide ${config.paths.dotfiles}/flake.nix"];
"$mainMod, p" = ["exec, hyprpicker --autocopy --format=hex"];
"$mainMod, s" = ["exec, grim -g \"$(slurp)\""];
"$mainMod CTRL, s" = ["exec, grim -g \"$(slurp)\" - | wl-copy"];
"$mainMod SHIFT, s" = ["exec, grim -g \"$(slurp)\" - | wl-copy"];
", XF86AudioRaiseVolume" = ["exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+"];
", XF86AudioLowerVolume" = ["exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%-"];
", XF86AudioPlay" = ["exec, playerctl play-pause"];
", XF86AudioPrev" = ["exec, playerctl previous"];
", XF86AudioNext" = ["exec, playerctl next"];
", XF86MonBrightnessDown" = ["exec, hyprctl hyprsunset gamma -10"];
", XF86MonBrightnessUp" = ["exec, hyprctl hyprsunset gamma +10"];
"$mainMod, XF86MonBrightnessDown" = ["exec, hyprctl hyprsunset temperature 5750"];
"$mainMod, XF86MonBrightnessUp" = ["exec, hyprctl hyprsunset identity"];
"CTRL ALT, f" = let
hyprctl = "${config.wayland.windowManager.hyprland.package}/bin/hyprctl";
grep = "${pkgs.gnugrep}/bin/grep";
awk = "${pkgs.gawk}/bin/gawk";
notify = "${pkgs.libnotify}/bin/notify-send";
toggleMouseFocus = pkgs.writeScriptBin "hypr-toggle-mouse-focus" ''
CURRENT=$(${hyprctl} getoption input:follow_mouse | ${grep} int | ${awk} -F' ' '{print $2}')
if [[ "$CURRENT" == "1" ]]; then
${hyprctl} keyword input:follow_mouse 0
${notify} "Disabled Mouse Focus!"
else
${hyprctl} keyword input:follow_mouse 1
${notify} "Enabled Mouse Focus!"
fi
'';
in ["exec, ${toggleMouseFocus}/bin/hypr-toggle-mouse-focus"];
# "CTRL ALT, t" = ["exec, bash -c 'systemctl --user restart hyprpanel.service'"];
};
ws-bindings = {
# "<Workspace>" = "<Key>";
"1" = "1";
"2" = "2";
"3" = "3";
"4" = "4";
"5" = "5";
"6" = "6";
"7" = "7";
"8" = "8";
"9" = "9";
"10" = "0";
};
special-ws-bindings = {
"ferdium" = "x";
"msty" = "z";
"btop" = "b";
"rmpc" = "r";
};
};
autostart = {
immediate = [
"kitty --hold fastfetch"
"zeal"
"nextcloud --background"
"protonvpn-app"
# "kdeconnect-indicator" # started by services.kdeconnect.indicator
];
delayed = [
"keepassxc" # The tray doesn't work when started too early
];
special-silent = {
"ferdium" = ["ferdium"];
"msty" = ["msty"];
"btop" = ["kitty --title=Btop btop"];
"rmpc" = ["kitty --title=Rmpc rmpc"];
};
};
windowrules = [
# Fix jetbrains tooltip flicker
"float,class:^(jetbrains-.*)$,title:^(win[0-9]+)$"
"nofocus,class:^(jetbrains-.*)$,title:^(win[0-9]+)$"
];
workspacerules = {
"1" = [];
"2" = ["Zotero" "neovide" "code-url-handler"];
"3" = ["obsidian"];
"4" = ["firefox" "Google-chrome" "chromium-browser" "org.qutebrowser.qutebrowser"];
"5" = ["steam"];
"6" = ["steam_app_(.+)"];
"7" = ["signal"];
"8" = ["tidal-hifi"];
"9" = ["discord"];
"10" = ["python3"];
};
floating = [
{class = "org.kde.polkit-kde-authentication-agent-1";}
{
class = "thunar";
title = "File Operation Progress";
}
{class = "ffplay";}
{class = "Unity";}
];
transparent-opacity = "0.75";
transparent = [
"kitty"
"Alacritty"
"discord"
"signal"
"vesktop"
"Spotify"
"tidal-hifi"
"obsidian"
"firefox"
"org.qutebrowser.qutebrowser"
"jetbrains-clion"
"jetbrains-idea"
"jetbrains-pycharm"
"jetbrains-rustrover"
"jetbrains-rider"
"jetbrains-webstorm"
"code-url-handler"
"neovide"
"steam"
"ferdium"
"Msty"
];
}

View File

@ -91,8 +91,7 @@
# Add any extra libraries you want accessible to Rider here
];
# TODO: Broken, jetbrains.jdk doesn't build (see nixpkgs #425328)
unity-rider = pkgs.jetbrains.rider.overrideAttrs (attrs: {
rider-unity = pkgs.jetbrains.rider.overrideAttrs (attrs: {
postInstall =
''
# Wrap rider with extra tools and libraries
@ -115,25 +114,27 @@
});
in {
packages = with pkgs; [
# quartus-prime-lite # Intel FPGA design software
# Intel FPGA design software
# quartus-prime-lite
# Don't want heavy IDE's on the laptop
# jetbrains.clion
# jetbrains.rust-rover
# jetbrains.pycharm-professional
# jetbrains.idea-ultimate
# jetbrains.webstorm
# jetbrains.rider
# Unity Stuff
# TODO: Unity module
# unityhub # TODO: Wait for https://nixpk.gs/pr-tracker.html?pr=422785
# unity-rider
# dotnetCore
# mono
unityhub
rider-unity
dotnetCore
mono
steam-run-free # nix-alien doesn't seem to run unity apps, this does...
blender
(blender.override {cudaSupport = true;})
godot_4
obs-studio
(obs-studio.override {cudaSupport = true;})
kdePackages.kdenlive
krita
makemkv
@ -144,19 +145,20 @@
file = lib.mkMerge [
{
# ".local/share/applications/jetbrains-rider.desktop".source = let
# desktopFile = pkgs.makeDesktopItem {
# name = "jetbrains-rider";
# desktopName = "Rider";
# exec = "\"${unity-rider}/bin/rider\"";
# icon = "rider";
# type = "Application";
# # Don't show desktop icon in search or run launcher
# extraConfig.NoDisplay = "true";
# };
# in "${desktopFile}/share/applications/jetbrains-rider.desktop";
".local/share/applications/jetbrains-rider.desktop".source = let
desktopFile = pkgs.makeDesktopItem {
name = "jetbrains-rider";
desktopName = "Rider";
exec = "\"${rider-unity}/bin/rider\"";
icon = "rider";
type = "Application";
# Don't show desktop icon in search or run launcher
extraConfig.NoDisplay = "true";
};
in "${desktopFile}/share/applications/jetbrains-rider.desktop";
".var/app/com.valvesoftware.Steam/config/MangoHud/MangoHud.conf".source = ../../../config/mangohud/MangoHud.conf;
".var/app/com.valvesoftware.Steam/config/MangoHud/MangoHud.conf".source =
../../../config/mangohud/MangoHud.conf;
}
(lib.optionalAttrs (mylib.modules.contains config.home.packages pkgs.makemkv) {
".MakeMKV/settings.conf".source =
@ -213,7 +215,7 @@
"com.usebottles.bottles"
"io.github.lawstorant.boxflat"
"com.unity.UnityHub"
# "com.unity.UnityHub"
];
overrides = {

View File

@ -34,10 +34,10 @@ in {
theme[hi_fg]=${color.hexS.accent}
# Background color of selected item in processes box
theme[selected_bg]=${color.hexS.surface1}
theme[selected_bg]=${color.hexS.accentDim}
# Foreground color of selected item in processes box
theme[selected_fg]=${color.hexS.accent}
theme[selected_fg]=${color.hexS.accentText}
# Color of inactive/disabled text
theme[inactive_fg]=${color.hexS.overlay0}

View File

@ -78,6 +78,7 @@ in [
(mkBm "DeepSeek Chat" "https://chat.deepseek.com/")
(mkBm "Claude Chat" "https://claude.ai/new")
(mkBm "ChatGPT" "https://chatgpt.com/")
(mkBm "DeepWiki" "https://deepwiki.com/")
"separator"
(mkBm "Mistral API" "https://console.mistral.ai/usage")
(mkBm "DeepSeek API" "https://platform.deepseek.com/usage")

View File

@ -11,7 +11,7 @@ builtins.concatLists [
"wl-paste -t text --watch clipman store --no-persist"
"wl-paste -p -t text --watch clipman store -P --histpath=\"~/.local/share/clipman-primary.json\""
"hyprctl setcursor Bibata-Modern-Classic 16"
"hyprctl setcursor ${config.home.pointerCursor.name} ${builtins.toString config.home.pointerCursor.size}"
"hyprsunset --identity"
# HACK: Hyprland doesn't set the xwayland/x11 keymap correctly

View File

@ -10,20 +10,21 @@
}: let
inherit (config.modules) hyprland color;
# Autostart programs
always-exec = import ./autostart.nix {inherit lib pkgs config hyprland;};
# Keybindings
always-bind = import ./mappings.nix {inherit lib config hyprland;};
# Mousebindings
always-bindm = {
"$mainMod, mouse:272" = ["movewindow"];
"$mainMod, mouse:273" = ["resizewindow"];
};
always-exec = import ./autostart.nix {inherit lib pkgs config hyprland;};
in {
options.modules.hyprland = import ./options.nix {inherit lib mylib;};
config = lib.mkIf hyprland.enable {
# Some assertion is not possible if HM is used standalone,
# because nixosConfig won't be available.
assertions = [
{
assertion = nixosConfig.programs.hyprland.enable;
@ -47,7 +48,7 @@ in {
x11.enable = true;
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Classic";
size = 16;
size = 24;
};
packages = with pkgs; [
@ -144,210 +145,31 @@ in {
systemd.variables = ["--all"]; # Import PATH into systemd
xwayland.enable = true;
plugins = [
inputs.hypr-dynamic-cursors.packages.${pkgs.system}.hypr-dynamic-cursors
inputs.hyprland-plugins.packages.${pkgs.system}.hyprbars
plugins = builtins.concatLists [
(lib.optionals
hyprland.bars.enable
[inputs.hyprland-plugins.packages.${pkgs.system}.hyprbars])
(lib.optionals
hyprland.dynamicCursor.enable
[inputs.hypr-dynamic-cursors.packages.${pkgs.system}.hypr-dynamic-cursors])
(lib.optionals
hyprland.trails.enable
[inputs.hyprland-plugins.packages.${pkgs.system}.hyprtrails])
(lib.optionals
hyprland.hyprspace.enable
[inputs.hyprspace.packages.${pkgs.system}.Hyprspace])
];
settings = {
"$mainMod" = "${hyprland.keybindings.main-mod}";
general = {
gaps_in = 5;
gaps_out = 10;
border_size = 2;
"col.active_border" = "rgb(${color.hex.accent})";
"col.inactive_border" = "rgb(${color.hex.base})";
};
group = {
groupbar = {
enabled = true;
render_titles = false;
font_size = 10;
gradients = false;
"col.active" = "rgb(${color.hex.accent})";
"col.inactive" = "rgb(${color.hex.base})";
};
"col.border_active" = "rgb(${color.hex.accent})";
"col.border_inactive" = "rgb(${color.hex.base})";
};
input = {
kb_layout = hyprland.keyboard.layout;
kb_variant = hyprland.keyboard.variant;
kb_options = hyprland.keyboard.option;
kb_model = "pc104";
kb_rules = "";
follow_mouse = true;
touchpad = {
natural_scroll = "no";
};
sensitivity = 0; # -1.0 - 1.0, 0 means no modification.
};
monitor = let
mkMonitor = name: conf:
"${name}, "
+ "${builtins.toString conf.width}x${builtins.toString conf.height}@"
+ "${builtins.toString conf.rate}, "
+ "${builtins.toString conf.x}x${builtins.toString conf.y}, "
+ "${builtins.toString conf.scale}";
in
hyprland.monitors
|> builtins.mapAttrs mkMonitor
|> builtins.attrValues;
workspace = let
mkWorkspace = monitor: workspace:
"${builtins.toString workspace}, "
+ "monitor:${builtins.toString monitor}";
mkWorkspaces = monitor: workspace-list:
builtins.map (mkWorkspace monitor) workspace-list;
in
hyprland.workspaces
|> builtins.mapAttrs mkWorkspaces
|> builtins.attrValues
|> builtins.concatLists;
bind = let
mkBind = key: action: "${key}, ${action}";
mkBinds = key: actions: builtins.map (mkBind key) actions;
in
(hyprland.keybindings.bindings // always-bind)
|> builtins.mapAttrs mkBinds
|> builtins.attrValues
|> builtins.concatLists;
bindm = let
mkBind = key: action: "${key}, ${action}";
mkBinds = key: actions: builtins.map (mkBind key) actions;
in
settings = import ./settings.nix {
inherit
lib
config
hyprland
color
always-exec
always-bind
always-bindm
|> builtins.mapAttrs mkBinds
|> builtins.attrValues
|> builtins.concatLists;
exec-once = let
mkDelayedStart = str: ''hyprctl dispatch exec "sleep 5s && ${str}"'';
mkSpecialSilentStart = w: str: "[workspace special:${w} silent] ${str}";
mkSpecialSilentStarts = w: strs: builtins.map (mkSpecialSilentStart w) strs;
in
lib.mkMerge [
always-exec
hyprland.autostart.immediate
(hyprland.autostart.special-silent
|> builtins.mapAttrs mkSpecialSilentStarts
|> builtins.attrValues
|> builtins.concatLists)
(hyprland.autostart.delayed
|> builtins.map mkDelayedStart)
];
windowrule = let
mkWorkspaceRule = workspace: class:
"workspace ${workspace}, "
+ "class:^(${class})$";
mkWorkspaceRules = workspace: class-list:
builtins.map (mkWorkspaceRule workspace) class-list;
mkFloatingRule = attrs:
"float"
+ (lib.optionalString (builtins.hasAttr "class" attrs) ", class:^(${attrs.class})$")
+ (lib.optionalString (builtins.hasAttr "title" attrs) ", title:^(${attrs.title})$");
mkTranslucentRule = class:
"opacity ${hyprland.transparent-opacity} ${hyprland.transparent-opacity}, "
+ "class:^(${class})$";
in
lib.mkMerge [
(hyprland.workspacerules
|> builtins.mapAttrs mkWorkspaceRules
|> builtins.attrValues
|> builtins.concatLists)
(hyprland.floating
|> builtins.map mkFloatingRule)
(hyprland.transparent
|> builtins.map mkTranslucentRule)
hyprland.windowrules
];
dwindle = {
pseudotile = true;
preserve_split = true;
};
master = {
new_status = "master";
};
gestures = {
workspace_swipe = false;
};
misc = {
# Say no to the anime girl
disable_hyprland_logo = true;
force_default_wallpaper = 0;
# Say no to the "Application not responding" window
enable_anr_dialog = false;
disable_splash_rendering = true;
font_family = "${color.font}";
};
# Because those are not windows, but layers,
# we have to blur them explicitly
layerrule = [
"blur,rofi"
"ignorealpha 0.001,rofi" # Fix pixelated corners
"xray 0,rofi" # Render on top of other windows
"dimaround,rofi"
"blur,waybar"
"blur,gtk4-layer-shell"
"blur,bar-0"
"blur,bar-1"
];
decoration = {
rounding = 4;
shadow = {
enabled = false;
};
blur = {
enabled = true;
size = 10;
passes = 3;
new_optimizations = true;
ignore_opacity = true;
xray = true;
};
};
animations = {
enabled = true;
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
animation = [
"windows, 1, 7, myBezier"
"windowsOut, 1, 7, default,popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 6, default"
];
};
;
};
};
};

View File

@ -2,9 +2,15 @@
lib,
mylib,
...
}: rec {
}: {
enable = lib.mkEnableOption "Hyprland Window Manager + Compositor";
dunst.enable = lib.mkEnableOption "Enable dunst notification daemon";
bars.enable = lib.mkEnableOption "Enable window bars";
dynamicCursor.enable = lib.mkEnableOption "Enable dynamic cursors";
trails.enable = lib.mkEnableOption "Enable dynamic window trails";
hyprspace.enable = lib.mkEnableOption "Enable hyprspace workspace overview";
keyboard = {
layout = lib.mkOption {
type = lib.types.str;
@ -25,128 +31,6 @@
};
};
dunst.enable = lib.mkEnableOption "Enable dunst notification daemon";
monitors = lib.mkOption {
type = lib.types.attrs;
description = "Hyprland Monitor Configurations";
example = ''
{
"HDMI-A-1" = {
width = 2560;
height = 1440;
rate = 144;
x = 1920;
y = 0;
scale = 1;
}
}
'';
};
workspaces = lib.mkOption {
type = lib.types.attrs;
description = "How workspaces are distributed to monitors. These monitors will also receive a wallpaper.";
example = ''
{
"HDMI-A-1" = [1 2 3 4 5 6 7 8 9];
"HDMI-A-2" = [0];
}
'';
};
autostart = {
immediate = lib.mkOption {
type = lib.types.listOf lib.types.str;
description = "Programs to launch when Hyprland starts";
example = ''
[
"kitty"
]
'';
default = [];
};
delayed = lib.mkOption {
type = lib.types.listOf lib.types.str;
description = "Programs to launch with a delay when Hyprland starts (e.g. to wait for the waybar tray)";
example = ''
[
"keepassxc"
"nextcloud --background"
]
'';
default = [];
};
special-silent = lib.mkOption {
type = lib.types.attrsOf (lib.types.listOf lib.types.str);
description = "Programs to silently launch on special workspaces";
example = ''
{
"ferdium" = ["ferdium"];
"btop" = ["kitty --title=Btop btop"];
}
'';
default = {};
};
};
workspacerules = lib.mkOption {
type = lib.types.attrs;
description = "Launch programs on specified workspaces, accepts window class.";
example = ''
{
"2" = [
"jetbrains-clion"
"code-url-handler"
];
}
'';
};
windowrules = lib.mkOption {
type = lib.types.listOf lib.types.str;
description = "Specify specific window rules.";
example = ''
[
"suppressevent activate, class: Unity"
]
'';
};
transparent-opacity = lib.mkOption {
type = lib.types.str;
description = "The opacity transparent windows should have.";
example = "0.8";
};
floating = lib.mkOption {
type = lib.types.listOf lib.types.attrs;
description = "What programs are floating down here?";
example = ''
[
{
class = "thunar";
title = "File Operation Progress";
}
{
class = "org.kde.polkit-kde-authentication-agent-1";
}
]
'';
};
transparent = lib.mkOption {
type = lib.types.listOf lib.types.str;
description = "What programs should be transparent? Accepts window class.";
example = ''
[
"kitty"
]
'';
};
keybindings = {
main-mod = lib.mkOption {
type = lib.types.str;
@ -197,4 +81,124 @@
'';
};
};
monitors = lib.mkOption {
type = lib.types.attrs;
description = "Hyprland Monitor Configurations";
example = ''
{
"HDMI-A-1" = {
width = 2560;
height = 1440;
rate = 144;
x = 1920;
y = 0;
scale = 1;
}
}
'';
};
workspaces = lib.mkOption {
type = lib.types.attrs;
description = "How workspaces are distributed to monitors. These monitors will also receive a wallpaper.";
example = ''
{
"HDMI-A-1" = [1 2 3 4 5 6 7 8 9];
"HDMI-A-2" = [0];
}
'';
};
workspacerules = lib.mkOption {
type = lib.types.attrs;
description = "Launch programs on specified workspaces, accepts window class.";
example = ''
{
"2" = [
"jetbrains-clion"
"code-url-handler"
];
}
'';
};
windowrules = lib.mkOption {
type = lib.types.listOf lib.types.str;
description = "Specify specific window rules.";
example = ''
[
"suppressevent activate, class: Unity"
]
'';
};
transparent-opacity = lib.mkOption {
type = lib.types.str;
description = "The opacity transparent windows should have.";
example = "0.8";
};
transparent = lib.mkOption {
type = lib.types.listOf lib.types.str;
description = "What programs should be transparent? Accepts window class.";
example = ''
[
"kitty"
]
'';
};
floating = lib.mkOption {
type = lib.types.listOf lib.types.attrs;
description = "What programs are floating down here?";
example = ''
[
{
class = "thunar";
title = "File Operation Progress";
}
{
class = "org.kde.polkit-kde-authentication-agent-1";
}
]
'';
};
autostart = {
immediate = lib.mkOption {
type = lib.types.listOf lib.types.str;
description = "Programs to launch when Hyprland starts";
example = ''
[
"kitty"
]
'';
default = [];
};
delayed = lib.mkOption {
type = lib.types.listOf lib.types.str;
description = "Programs to launch with a delay when Hyprland starts (e.g. to wait for the waybar tray)";
example = ''
[
"keepassxc"
"nextcloud --background"
]
'';
default = [];
};
special-silent = lib.mkOption {
type = lib.types.attrsOf (lib.types.listOf lib.types.str);
description = "Programs to silently launch on special workspaces";
example = ''
{
"ferdium" = ["ferdium"];
"btop" = ["kitty --title=Btop btop"];
}
'';
default = {};
};
};
}

View File

@ -0,0 +1,359 @@
{
lib,
config,
hyprland,
color,
always-exec,
always-bind,
always-bindm,
}: {
"$mainMod" = "${hyprland.keybindings.main-mod}";
general = {
gaps_in = 5;
gaps_out = 10;
border_size = 2;
"col.active_border" = "rgb(${color.hex.accent})";
"col.inactive_border" = "rgb(${color.hex.base})";
};
group = {
groupbar = {
enabled = true;
render_titles = false;
font_size = 10;
gradients = false;
"col.active" = "rgb(${color.hex.accent})";
"col.inactive" = "rgb(${color.hex.base})";
};
"col.border_active" = "rgb(${color.hex.accent})";
"col.border_inactive" = "rgb(${color.hex.base})";
};
input = {
kb_layout = hyprland.keyboard.layout;
kb_variant = hyprland.keyboard.variant;
kb_options = hyprland.keyboard.option;
kb_model = "pc104";
kb_rules = "";
follow_mouse = true;
touchpad = {
natural_scroll = "no";
};
sensitivity = 0; # -1.0 - 1.0, 0 means no modification.
};
monitor = let
mkMonitor = name: conf:
"${name}, "
+ "${builtins.toString conf.width}x${builtins.toString conf.height}@"
+ "${builtins.toString conf.rate}, "
+ "${builtins.toString conf.x}x${builtins.toString conf.y}, "
+ "${builtins.toString conf.scale}";
in
hyprland.monitors
|> builtins.mapAttrs mkMonitor
|> builtins.attrValues;
workspace = let
mkWorkspace = monitor: workspace:
"${builtins.toString workspace}, "
+ "monitor:${builtins.toString monitor}";
mkWorkspaces = monitor: workspace-list:
builtins.map (mkWorkspace monitor) workspace-list;
in
hyprland.workspaces
|> builtins.mapAttrs mkWorkspaces
|> builtins.attrValues
|> builtins.concatLists;
bind = let
mkBind = key: action: "${key}, ${action}";
mkBinds = key: actions: builtins.map (mkBind key) actions;
in
(hyprland.keybindings.bindings // always-bind)
|> builtins.mapAttrs mkBinds
|> builtins.attrValues
|> builtins.concatLists;
bindm = let
mkBind = key: action: "${key}, ${action}";
mkBinds = key: actions: builtins.map (mkBind key) actions;
in
always-bindm
|> builtins.mapAttrs mkBinds
|> builtins.attrValues
|> builtins.concatLists;
exec-once = let
mkDelayedStart = str: ''hyprctl dispatch exec "sleep 5s && ${str}"'';
mkSpecialSilentStart = w: str: "[workspace special:${w} silent] ${str}";
mkSpecialSilentStarts = w: strs: builtins.map (mkSpecialSilentStart w) strs;
in
lib.mkMerge [
always-exec
hyprland.autostart.immediate
(hyprland.autostart.special-silent
|> builtins.mapAttrs mkSpecialSilentStarts
|> builtins.attrValues
|> builtins.concatLists)
(hyprland.autostart.delayed
|> builtins.map mkDelayedStart)
];
windowrule = let
mkWorkspaceRule = workspace: class:
"workspace ${workspace}, "
+ "class:^(${class})$";
mkWorkspaceRules = workspace: class-list:
builtins.map (mkWorkspaceRule workspace) class-list;
mkFloatingRule = attrs:
"float"
+ (lib.optionalString (builtins.hasAttr "class" attrs) ", class:^(${attrs.class})$")
+ (lib.optionalString (builtins.hasAttr "title" attrs) ", title:^(${attrs.title})$");
mkTranslucentRule = class:
"opacity ${hyprland.transparent-opacity} ${hyprland.transparent-opacity}, "
+ "class:^(${class})$";
in
lib.mkMerge [
(hyprland.workspacerules
|> builtins.mapAttrs mkWorkspaceRules
|> builtins.attrValues
|> builtins.concatLists)
(hyprland.floating
|> builtins.map mkFloatingRule)
(hyprland.transparent
|> builtins.map mkTranslucentRule)
hyprland.windowrules
];
dwindle = {
pseudotile = true;
preserve_split = true;
};
master = {
new_status = "master";
};
gestures = {
workspace_swipe = false;
};
misc = {
# Say no to the anime girl
disable_hyprland_logo = true;
force_default_wallpaper = 0;
# Say no to the "Application not responding" window
enable_anr_dialog = false;
disable_splash_rendering = true;
font_family = "${color.font}";
};
# Because those are not windows, but layers,
# we have to blur them explicitly
layerrule = [
"blur,rofi"
"ignorealpha 0.001,rofi" # Fix pixelated corners
"xray 0,rofi" # Render on top of other windows
"dimaround,rofi"
"blur,waybar"
"blur,gtk4-layer-shell"
"blur,bar-0"
"blur,bar-1"
];
decoration = {
rounding = 4;
shadow = {
enabled = false;
};
blur = {
enabled = true;
size = 10;
passes = 3;
new_optimizations = true;
ignore_opacity = true;
xray = true;
};
};
animations = {
enabled = true;
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
animation = [
"windows, 1, 7, myBezier"
"windowsOut, 1, 7, default,popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 6, default"
];
};
plugin = lib.mergeAttrsList [
(lib.optionalAttrs hyprland.bars.enable {
hyprbars = {
enabled = true;
bar_height = 25;
bar_blur = true;
bar_color = "rgb(${color.hex.base})";
col.text = "rgb(${color.hex.text})";
bar_title_enabled = true;
bar_text_size = 12;
bar_text_font = color.font;
bar_text_align = "center";
bar_buttons_alignment = "left";
bar_part_of_window = true;
bar_precedence_over_border = false;
# example buttons (R -> L)
# hyprbars-button = color, size, on-click
hyprbars-button = [
"rgb(${color.hex.red}), 10, 󰖭, hyprctl dispatch killactive"
"rgb(${color.hex.green}), 10, , hyprctl dispatch fullscreen 1"
];
# cmd to run on double click of the bar
on_double_click = "hyprctl dispatch fullscreen 1";
};
})
(lib.optionalAttrs hyprland.dynamicCursor.enable {
dynamic-cursors = {
# enables the plugin
enabled = true;
# sets the cursor behaviour, supports these values:
# tilt - tilt the cursor based on x-velocity
# rotate - rotate the cursor based on movement direction
# stretch - stretch the cursor shape based on direction and velocity
# none - do not change the cursors behaviour
mode = "rotate";
# minimum angle difference in degrees after which the shape is changed
# smaller values are smoother, but more expensive for hw cursors
threshold = 2;
# for mode = rotate
rotate = {
# length in px of the simulated stick used to rotate the cursor
# most realistic if this is your actual cursor size
length = 20;
# clockwise offset applied to the angle in degrees
# this will apply to ALL shapes
offset = 0.0;
};
# for mode = tilt
tilt = {
# controls how powerful the tilt is, the lower, the more power
# this value controls at which speed (px/s) the full tilt is reached
# the full tilt being 60° in both directions
limit = 1000;
# relationship between speed and tilt, supports these values:
# linear - a linear function is used
# quadratic - a quadratic function is used (most realistic to actual air drag)
# negative_quadratic - negative version of the quadratic one, feels more aggressive
# see `activation` in `src/mode/utils.cpp` for how exactly the calculation is done
function = "negative_quadratic";
# time window (ms) over which the speed is calculated
# higher values will make slow motions smoother but more delayed
window = 100;
};
# configure shake to find
# magnifies the cursor if its is being shaken
shake = {
# enables shake to find
enabled = false;
# use nearest-neighbour (pixelated) scaling when shaking
# may look weird when effects are enabled
nearest = true;
# controls how soon a shake is detected
# lower values mean sooner
threshold = 3.0;
# magnification level immediately after shake start
base = 1.5;
# magnification increase per second when continuing to shake
speed = 0.0;
# how much the speed is influenced by the current shake intensitiy
influence = 0.0;
# maximal magnification the cursor can reach
# values below 1 disable the limit (e.g. 0)
limit = 0.0;
# time in millseconds the cursor will stay magnified after a shake has ended
timeout = 1000;
# show cursor behaviour `tilt`, `rotate`, etc. while shaking
effects = true;
# enable ipc events for shake
# see the `ipc` section below
ipc = false;
};
# use hyprcursor to get a higher resolution texture when the cursor is magnified
# see the `hyprcursor` section below
hyprcursor = {
# use nearest-neighbour (pixelated) scaling when magnifing beyond texture size
# this will also have effect without hyprcursor support being enabled
# 0 / false - never use pixelated scaling
# 1 / true - use pixelated when no highres image
# 2 - always use pixleated scaling
nearest = true;
# enable dedicated hyprcursor support
enabled = true;
# resolution in pixels to load the magnified shapes at
# be warned that loading a very high-resolution image will take a long time and might impact memory consumption
# -1 means we use [normal cursor size] * [shake:base option]
resolution = -1;
# shape to use when clientside cursors are being magnified
# see the shape-name property of shape rules for possible names
# specifying clientside will use the actual shape, but will be pixelated
fallback = "clientside";
};
};
})
(lib.optionalAttrs hyprland.trails.enable {
hyprtrails = {
color = "rgb(${color.hex.accent})";
};
})
(lib.optionalAttrs hyprland.hyprspace.enable {
overview = {};
})
];
}

View File

@ -28,12 +28,13 @@ in {
"bar.autoHide" = "never";
# https://github.com/Jas-SinghFSU/HyprPanel/blob/master/src/configuration/modules/config/bar/layouts/index.ts
# TODO: To module option
# TODO: This should contain battery etc. for laptop
"bar.layouts" = {
"HDMI-A-1" = {
"left" = ["workspaces" "windowtitle"];
"middle" = ["media"]; # "cava"
"right" = ["volume" "network" "bluetooth" "cpu" "ram" "storage" "clock" "systray" "notifications"];
"right" = ["volume" "network" "cpu" "ram" "storage" "clock" "systray" "notifications"]; # "bluetooth"
};
"DP-1" = {
"left" = ["workspaces" "windowtitle"];
@ -282,7 +283,12 @@ in {
"theme.bar.buttons.clock.spacing" = "6px";
"theme.bar.buttons.clock.text" = "#${color.hex.accentText}";
# TODO: To module option
# https://github.com/Jas-SinghFSU/HyprPanel/blob/master/src/configuration/modules/config/bar/systray/index.ts
"bar.systray.ignore" = [
"Fcitx" # Keyboard indicator
]; # Middle click the tray icon to show a notification with the app name :)
"bar.systray.customIcons" = {};
# https://github.com/Jas-SinghFSU/HyprPanel/blob/master/src/configuration/modules/theme/bar/buttons/systray.ts
"theme.bar.buttons.systray.background" = "#${color.hex.blue}";

View File

@ -1574,6 +1574,7 @@ in {
'';
in {
enabled = true;
layout = {
cycle = true;
preset.__raw = defaultLayout;
@ -1584,6 +1585,13 @@ in {
layout.__raw = defaultLayout;
};
};
formatters = {
file = {
filename_first = true;
truncate = 80;
};
};
};
};
};

View File

@ -68,6 +68,7 @@ in {
(mkBm "DeepSeek Chat" "https://chat.deepseek.com/")
(mkBm "Claude Chat" "https://claude.ai/new")
(mkBm "ChatGPT" "https://chatgpt.com/")
(mkBm "DeepWiki" "https://deepwiki.com/")
(mkBm "Mistral API" "https://console.mistral.ai/usage")
(mkBm "DeepSeek API" "https://platform.deepseek.com/usage")
(mkBm "Claude API" "https://console.anthropic.com/usage")

View File

@ -62,21 +62,7 @@ in {
background-color = mkLiteral trans;
};
"message" = {
background-color = mkLiteral trans;
};
"error-message" = {
background-color = mkLiteral trans;
margin = mkLiteral "0px 0px 10px 0px";
};
"textbox" = {
background-color = mkLiteral trans;
padding = 6;
margin = mkLiteral "10px 10px 0px 10px";
border-radius = 3;
};
# TOP INPUT BAR START
"inputbar" = {
children = builtins.map mkLiteral ["prompt" "entry"];
@ -101,6 +87,26 @@ in {
border-color = mkLiteral color.hexS.accentHl;
};
# MESSAGEBOX (usually not visible)
"message" = {
background-color = mkLiteral trans;
};
"error-message" = {
background-color = mkLiteral trans;
margin = mkLiteral "0px 0px 10px 0px";
};
"textbox" = {
background-color = mkLiteral trans;
padding = 6;
margin = mkLiteral "10px 10px 0px 10px";
border-radius = 3;
};
# LISTVIEW
"listview" = {
# border = mkLiteral "0px 0px 0px";
padding = 0;
@ -109,7 +115,7 @@ in {
background-color = mkLiteral trans;
border = mkLiteral "2 solid 2 solid 2 solid 2 solid";
border-radius = 3;
border-color = mkLiteral color.hexS.accentHl;
border-color = mkLiteral color.hexS.accentDim;
};
"element" = {
@ -125,7 +131,7 @@ in {
};
"element selected" = {
background-color = mkLiteral color.hexS.accentHl;
background-color = mkLiteral color.hexS.accentDim;
text-color = mkLiteral color.hexS.accentText;
};
};

View File

@ -1,6 +1,7 @@
{
inputs,
nixpkgs,
pkgs-stable,
...
}: let
# Taken from https://github.com/Misterio77/nix-config/blob/main/overlay/default.nix
@ -11,14 +12,39 @@
pkgs = final;
};
modifications = final: prev: rec {
modifications = final: prev: {
# Only kept as an example, has nothing to do with current dconf-editor-wrapped derivation
# dconf-editor-wrapped = import ./dconf-editor.nix { inherit final prev; };
# Use dconf-editor.nix: { final, prev }: final.<package>.overrideAttrs (oldAttrs: { ... }) or sth similar
# Overriding specific packages from a different nixpkgs (e.g. a pull request)
# can be done like this. Note that this creates an additional nixpkgs instance.
# https://github.com/NixOS/nixpkgs/issues/418451
# unityhub_3_13 =
# (import inputs.unityhub-pinned {
# config.allowUnfree = true;
# localSystem = {inherit (prev) system;};
# }).unityhub;
# TODO: Remove this after 0.15.1 hits nixpkgs
neovide = prev.neovide.overrideAttrs (finalAttrs: prevAttrs: {
version = "0.15.1";
src = prev.fetchFromGitHub {
owner = "neovide";
repo = "neovide";
tag = finalAttrs.version;
hash = "sha256-2iV3g6tcCkMF7sFG/GZDz3czPZNIDi6YLfrVzYO9jYI=";
};
cargoHash = "sha256-YlHAcUCRk6ROg5yXIumHfsiR/2TrsSzbuXz/IQK7sEo=";
cargoDeps = prev.rustPlatform.fetchCargoVendor {
inherit (finalAttrs) pname src version;
hash = finalAttrs.cargoHash;
};
});
# TODO: Remove this after jetbrains.jdk builds again (nixpkgs issue 425328)
jetbrains.rider = pkgs-stable.jetbrains.rider;
};
in
# TODO: I have absolutely no clue what happens here lol
# Basically we need some sort of list of all overlays that can be imported from the flake
# in the overlays = [ ... ] section of the pkgs = import nixpkgs { ... } configuration
# Somehow this library function turns additions/modifications into that
# Composes a list of overlays and returns a single overlay function that combines them.
nixpkgs.lib.composeManyExtensions [additions modifications]

View File

@ -213,7 +213,7 @@ with mylib.networking; {
};
# https://github.com/NixOS/nixpkgs/issues/179486
supportedLocales = ["en_US.UTF-8/UTF-8" "de_DE.UTF-8/UTF-8"];
supportedLocales = ["${en}/UTF-8" "${de}/UTF-8"];
};
console = {
@ -339,6 +339,10 @@ with mylib.networking; {
hyprland = {
enable = !headless;
package = inputs.hyprland.packages.${system}.hyprland;
portalPackage = inputs.hyprland.packages.${system}.xdg-desktop-portal-hyprland;
xwayland.enable = true;
withUWSM = true;
};

View File

@ -43,9 +43,10 @@ in {
xdg-desktop-portal-gtk # Fallback
]
(lib.mkIf desktopportal.hyprland.enable [
xdg-desktop-portal-hyprland
])
# We don't need to install that explicitly
# (lib.mkIf desktopportal.hyprland.enable [
# xdg-desktop-portal-hyprland
# ])
(lib.mkIf desktopportal.termfilechooser.enable [
xdg-desktop-portal-termfilechooser # Filechooser using yazi

View File

@ -43,6 +43,12 @@ in {
mkRFile = mkFile "root";
mkUDir = mkDir "${username}";
mkUFile = mkFile "${username}";
# TODO: sth. like this, make options for configdirs/sharedirs/statedirs/homedirs
# populate options from respective modules, not here...
# mkConfigDirs = dirs:
# dirs
# |> builtins.map (dir: ".config/${dir}")
# |> builtins.map mkUDir # NOTE: mkUDir has wrong arg order
in
lib.mkIf impermanence.enable {
# TODO: Create options to allow host-specific impermanence setup
@ -80,13 +86,13 @@ in {
files = [
# NOTE: Don't put files generated/linked by HM here (they're already managed)
# TODO: These files are not mounted?
(mkUFile ".config/.tidal-dl.json" m755)
(mkUFile ".config/.tidal-dl.token.json" m755)
(mkUFile ".config/QtProject.conf" m755) # KeePassXC
# TODO: Specifying files here (e.g. .config/QtProject.conf) doesn't seem to work
# They won't get mounted, also they can't be unmounted (because they're not mounted),
# which leads to /home not being unmounted correctly during shutdown...
];
directories = [
# Home directory
(mkUDir "Downloads" m755)
(mkUDir "Documents" m755)
(mkUDir "GitRepos" m755)
@ -98,26 +104,35 @@ in {
(mkUDir "Unity" m755)
(mkUDir "Videos" m755)
# Secrets
(mkUDir ".gnupg" m755) # m600
(mkUDir ".secrets" m755) # m644
(mkUDir ".ssh" m755) # m644
# The shit some applications add to ~/ without asking
(mkUDir ".android" m755) # Unity
(mkUDir ".gradle" m755) # Unity
(mkUDir ".java" m755) # Unity/Rider
(mkUDir ".mozilla/firefox" m755) # TODO: Remove this someday
(mkUDir ".mozilla/native-messaging-hosts" m755)
(mkUDir ".nix-package-search" m755)
(mkUDir ".nv" m755) # Unity
(mkUDir ".ollama" m755)
(mkUDir ".plastic4" m755) # Unity
(mkUDir ".var/app" m755)
(mkUDir ".vim/undo" m755)
(mkUDir ".zotero" m755)
# Cache that's actually useful
(mkUDir ".cache/fish/generated_completions" m755)
(mkUDir ".cache/nix-index" m755)
(mkUDir ".cache/nix-search-tv" m755)
(mkUDir ".cache/nvim" m755)
# Config
(mkUDir ".config/.android" m755) # Unity
(mkUDir ".config/beets" m755)
(mkUDir ".config/blender" m755)
(mkUDir ".config/chromium" m755) # TODO: Remove this someday
(mkUDir ".config/Ferdium" m755)
(mkUDir ".config/fish/completions" m755)
@ -128,18 +143,22 @@ in {
(mkUDir ".config/Msty" m755)
(mkUDir ".config/Nextcloud" m755)
(mkUDir ".config/obsidian" m755)
(mkUDir ".config/obs-studio" m755)
(mkUDir ".config/Signal" m755)
(mkUDir ".config/singularitygroup-hotreload" m755) # Unity
(mkUDir ".config/tidal-hifi" m755)
(mkUDir ".config/tidal_dl_ng" m755)
(mkUDir ".config/unity3d" m755) # Unity
(mkUDir ".config/unityhub" m755) # Unity
(mkUDir ".config/vlc" m755)
(mkUDir ".config/Zeal" m755)
# Share
(mkUDir ".local/share/direnv" m755)
(mkUDir ".local/share/docker" m755)
(mkUDir ".local/share/fish" m755)
(mkUDir ".local/share/flatpak" m755)
(mkUDir ".local/share/JetBrains" m755) # Unity/Rider
(mkUDir ".local/share/JetBrains" m755) # Unity
(mkUDir ".local/share/hyprland" m755)
(mkUDir ".local/share/keyrings" m755) # m700
(mkUDir ".local/share/mime" m755)
@ -147,9 +166,12 @@ in {
(mkUDir ".local/share/nvim" m755)
(mkUDir ".local/share/qutebrowser" m755)
(mkUDir ".local/share/systemd" m755)
(mkUDir ".local/share/unity3d" m755) # Unity
(mkUDir ".local/share/zoxide" m755)
# State
(mkUDir ".local/state/astal/notifd" m755)
(mkUDir ".local/state/home-manager/gc-roots" m755) # nix-flatpak stores its state there
(mkUDir ".local/state/lazygit" m755)
(mkUDir ".local/state/nix" m755)
(mkUDir ".local/state/nvim" m755)

View File

@ -26,9 +26,7 @@ in {
defaultSopsFile = ./secrets.yaml;
age = {
# NOTE: Sops needs the keys before impermanence kicks in
# so we have to link to /persist directly...
keyFile = "/persist/home/${username}/.secrets/age/age.key";
keyFile = lib.mkDefault "/home/${username}/.secrets/age/age.key";
generateKey = false;
sshKeyPaths = [];
};

View File

@ -61,8 +61,8 @@
};
allowedTCPPorts = [
# 7777 # AvaTalk
# 12777 # AvaTalk
7777 # AvaTalk
12777 # AvaTalk
# 31431 # Parsec
5173 # SvelteKit
8090 # PocketBase
@ -70,8 +70,8 @@
];
allowedUDPPorts = [
# 7777 # AvaTalk
# 12777 # AvaTalk
7777 # AvaTalk
12777 # AvaTalk
# 31431 # Parsec
5173 # SvelteKit
8090 # PocketBase
@ -85,6 +85,10 @@
];
};
# NOTE: Sops needs the keys before impermanence kicks in
# so we have to link to /persist directly...
sops.age.keyFile = "/persist/home/${username}/.secrets/age/age.key";
sops.templates."makemkv-settings.conf" = {
owner = config.users.users.${username}.name;
content = ''
@ -94,9 +98,9 @@
};
boot = {
kernelPackages = pkgs.linuxPackages_zen;
# kernelPackages = pkgs.linuxPackages_zen;
# kernelParams = ["quiet"];
# kernelParams = [ "quiet" ];
# plymouth.enable = true;
};

View File

@ -12,12 +12,22 @@
imports = [(modulesPath + "/installer/scan/not-detected.nix")];
boot = {
initrd.availableKernelModules = ["xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod"];
initrd.availableKernelModules = [
"xhci_pci"
"ahci"
"nvme"
"usbhid"
"usb_storage"
"sd_mod"
];
# Enable early Nvidia kernel modesetting
# https://wiki.archlinux.org/title/GDM#GDM_ignores_Wayland_and_uses_X.Org_by_default (not fixed by this)
# https://wiki.archlinux.org/title/Kernel_mode_setting#Early_KMS_start
initrd.kernelModules = ["nvidia" "nvidia_modeset" "nvidia_uvm" "nvidia_drm"]; # NVIDIA
initrd.kernelModules = [
# Enable Nvidia early KMS
"nvidia"
"nvidia_modeset"
"nvidia_uvm"
"nvidia_drm"
];
initrd.supportedFilesystems = [
"ext4"
@ -33,9 +43,11 @@
blacklistedKernelModules = ["k10temp"]; # Disable in favor of zenpower
# Enable AMD pstate
# https://github.com/NixOS/nixos-hardware/blob/master/common/cpu/amd/pstate.nix
kernelParams = ["amd_pstate=active"];
kernelParams = [
# Enable AMD pstate
# https://github.com/NixOS/nixos-hardware/blob/master/common/cpu/amd/pstate.nix
"amd_pstate=active"
];
# extraModprobeConfig = ''
# options iwlwifi 11n_disable=1 wd_disable=0
@ -107,9 +119,9 @@
package = config.boot.kernelPackages.nvidiaPackages.stable;
# package = config.boot.kernelPackages.nvidiaPackages.beta;
modesetting.enable = true; # Not officially supported by NVidia but needed for wayland
open = true;
nvidiaSettings = false; # Those are for x-server
modesetting.enable = true; # Required for wayland
};
# video.hidpi.enable = lib.mkDefault true; # No longer has any effect

View File

@ -13,10 +13,21 @@
];
boot = {
initrd.availableKernelModules = ["xhci_pci" "ehci_pci" "ahci" "usb_storage" "sd_mod" "rtsx_pci_sdmmc"];
initrd.availableKernelModules = [
"xhci_pci"
"ehci_pci"
"ahci"
"usb_storage"
"sd_mod"
"rtsx_pci_sdmmc"
];
initrd.kernelModules = [];
kernelModules = ["kvm-intel"];
extraModulePackages = with config.boot.kernelPackages; [];
# NOTE: Didn't work with Zen, switched to regular kernel instead
# kernelPatches = [
# {

View File

@ -10,7 +10,14 @@
];
boot = {
initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"];
initrd.availableKernelModules = [
"ata_piix"
"uhci_hcd"
"virtio_pci"
"virtio_scsi"
"sd_mod"
"sr_mod"
];
initrd.kernelModules = [];
kernelModules = ["kvm-intel"];
extraModulePackages = [];

View File

@ -6,7 +6,7 @@
}: let
vectorchordVersion = "0.4.2";
pgvectorsVersion = "0.2.0";
immichVersion = "1.135.3";
immichVersion = "1.136.0";
in {
virtualisation.oci-containers.containers = {
immich-database = {
@ -103,7 +103,7 @@ in {
};
extraOptions = [
# "--privileged"
"--privileged"
"--device=nvidia.com/gpu=all"
"--net=behind-nginx"
];

View File

@ -43,7 +43,7 @@ in {
};
extraOptions = [
# "--privileged"
"--privileged"
"--device=nvidia.com/gpu=all"
"--net=behind-nginx"
];

View File

@ -10,7 +10,13 @@
];
boot = {
initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod"];
initrd.availableKernelModules = [
"ata_piix"
"uhci_hcd"
"virtio_pci"
"virtio_scsi"
"sd_mod"
];
initrd.kernelModules = [];
kernelModules = [
"kvm-intel"