From c5214bff2354cfcd6381887f3ab77fa68ab5a9f5 Mon Sep 17 00:00:00 2001 From: Christoph Hollizeck Date: Tue, 10 Sep 2024 01:31:27 +0200 Subject: [PATCH] first 'working' hyperland config, no bar yet --- flake.lock | 401 ++++++++++++++++-- flake.nix | 11 + .../x86_64-linux/cholli@yggdrasil/default.nix | 2 + modules/home/apps/kitty/default.nix | 1 + .../nixos/apps/cli-apps/nixvim/default.nix | 6 +- modules/nixos/apps/zen-browser/default.nix | 17 +- modules/nixos/archetypes/gaming/default.nix | 2 +- .../desktop-manager/hyprland/default.nix | 209 ++++++++- modules/nixos/nix/default.nix | 29 ++ .../nixos/submodules/basics-wsl/default.nix | 7 +- systems/x86_64-linux/yggdrasil/default.nix | 25 +- 11 files changed, 639 insertions(+), 71 deletions(-) diff --git a/flake.lock b/flake.lock index 20e16be..9a3b9ba 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,38 @@ { "nodes": { + "aquamarine": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1725199881, + "narHash": "sha256-jsmipf/u1GFZE5tBUkr56CHMN6VpUWCAjfLIhvQijU0=", + "owner": "hyprwm", + "repo": "aquamarine", + "rev": "f8a687dd29ff019657498f1bd14da2fbbf0e604b", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "aquamarine", + "type": "github" + } + }, "fenix": { "inputs": { "nixpkgs": [ @@ -8,11 +41,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1725604324, - "narHash": "sha256-+VgeYuaCQn5vmoH1GTYQzvVTtWxirZmdDQJKr8uLgQI=", + "lastModified": 1725777030, + "narHash": "sha256-mieHgCmdbr/Tok3djbEVnNyLtnxEv5PHngN8wBu+RJA=", "owner": "nix-community", "repo": "fenix", - "rev": "d9afdb4465ba2f20bb73b0ff5d2c2837cafc2e14", + "rev": "7c59cc75e7d2328753b00766ab0a78a075609b25", "type": "github" }, "original": { @@ -122,7 +155,7 @@ }, "flake-utils": { "inputs": { - "systems": "systems" + "systems": "systems_2" }, "locked": { "lastModified": 1710146030, @@ -178,7 +211,7 @@ }, "flake-utils_2": { "inputs": { - "systems": "systems_2" + "systems": "systems_3" }, "locked": { "lastModified": 1710146030, @@ -196,7 +229,7 @@ }, "flake-utils_3": { "inputs": { - "systems": "systems_3" + "systems": "systems_4" }, "locked": { "lastModified": 1710146030, @@ -229,7 +262,7 @@ }, "flake-utils_5": { "inputs": { - "systems": "systems_4" + "systems": "systems_5" }, "locked": { "lastModified": 1694529238, @@ -248,7 +281,7 @@ "gen-luarc": { "inputs": { "flake-parts": "flake-parts", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs_2" }, "locked": { "lastModified": 1718922730, @@ -287,11 +320,11 @@ ] }, "locked": { - "lastModified": 1725628988, - "narHash": "sha256-Y6TBMTGu4bddUwszGjlcOuN0soVc1Gv43hp+1sT/GNI=", + "lastModified": 1725781935, + "narHash": "sha256-o6LRtdpgBTzev9n243Ktu3rn0/qsv0frFyJwU6vJsdE=", "owner": "nix-community", "repo": "home-manager", - "rev": "127ccc3eb7e36fa75e8c3fbd8a343154f66cc1c6", + "rev": "ec4c6928bbacc89cf10e9c959a7a47cbaad95344", "type": "github" }, "original": { @@ -301,6 +334,218 @@ "type": "github" } }, + "hy3": { + "inputs": { + "hyprland": [ + "hyprland" + ] + }, + "locked": { + "lastModified": 1725825817, + "narHash": "sha256-hBvwaMlgBuR2cB1Kx6cA1z7x38HXUujNcHtBsKhaEZs=", + "owner": "outfoxxed", + "repo": "hy3", + "rev": "4b194eb5486b89102726ad5f4492bb3440c46031", + "type": "github" + }, + "original": { + "owner": "outfoxxed", + "repo": "hy3", + "type": "github" + } + }, + "hyprcursor": { + "inputs": { + "hyprlang": [ + "hyprland", + "hyprlang" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1722623071, + "narHash": "sha256-sLADpVgebpCBFXkA1FlCXtvEPu1tdEsTfqK1hfeHySE=", + "owner": "hyprwm", + "repo": "hyprcursor", + "rev": "912d56025f03d41b1ad29510c423757b4379eb1c", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprcursor", + "type": "github" + } + }, + "hyprland": { + "inputs": { + "aquamarine": "aquamarine", + "hyprcursor": "hyprcursor", + "hyprlang": "hyprlang", + "hyprutils": "hyprutils", + "hyprwayland-scanner": "hyprwayland-scanner", + "nixpkgs": "nixpkgs", + "systems": "systems", + "xdph": "xdph" + }, + "locked": { + "lastModified": 1725752806, + "narHash": "sha256-UwmsA7O9Wofu6YWldyR8NDv1bzxNICIg85/uOrVq69Y=", + "ref": "refs/heads/main", + "rev": "312411fc7073143a8bf1fc3ba23ef403b7d15eee", + "revCount": 5195, + "submodules": true, + "type": "git", + "url": "https://github.com/hyprwm/Hyprland" + }, + "original": { + "submodules": true, + "type": "git", + "url": "https://github.com/hyprwm/Hyprland" + } + }, + "hyprland-plugins": { + "inputs": { + "hyprland": [ + "hyprland" + ], + "nixpkgs": [ + "hyprland-plugins", + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland-plugins", + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1723143591, + "narHash": "sha256-dPcWAeRJoG5CyWC32X3XX+Og0v/k1/S1N0T5dQWT32k=", + "owner": "hyprwm", + "repo": "hyprland-plugins", + "rev": "b73d7b901d8cb1172dd25c7b7159f0242c625a77", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-plugins", + "type": "github" + } + }, + "hyprland-protocols": { + "inputs": { + "nixpkgs": [ + "hyprland", + "xdph", + "nixpkgs" + ], + "systems": [ + "hyprland", + "xdph", + "systems" + ] + }, + "locked": { + "lastModified": 1721326555, + "narHash": "sha256-zCu4R0CSHEactW9JqYki26gy8h9f6rHmSwj4XJmlHgg=", + "owner": "hyprwm", + "repo": "hyprland-protocols", + "rev": "5a11232266bf1a1f5952d5b179c3f4b2facaaa84", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-protocols", + "type": "github" + } + }, + "hyprlang": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1725188252, + "narHash": "sha256-yBH8c4GDaEAtBrh+BqIlrx5vp6gG/Gu8fQQK63KAQgs=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "c12ab785ce1982f82594aff03b3104c598186ddd", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, + "hyprutils": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1724966483, + "narHash": "sha256-WXDgKIbzjYKczxSZOsJplCS1i1yrTUpsDPuJV/xpYLo=", + "owner": "hyprwm", + "repo": "hyprutils", + "rev": "8976e3f6a5357da953a09511d0c7f6a890fb6ec2", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprutils", + "type": "github" + } + }, + "hyprwayland-scanner": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1721324119, + "narHash": "sha256-SOOqIT27/X792+vsLSeFdrNTF+OSRp5qXv6Te+fb2Qg=", + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "rev": "a048a6cb015340bd82f97c1f40a4b595ca85cc30", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "type": "github" + } + }, "kickstartnvim": { "inputs": { "flake-utils": "flake-utils", @@ -347,11 +592,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1725477728, - "narHash": "sha256-ahej1VRqKmWbG7gewty+GlrSBEeGY/J2Zy8Nt8+3fdg=", + "lastModified": 1725716377, + "narHash": "sha256-7NzW9O/cAw7iWzRfh7Oo/SuSudL4a1YTKS6yoh3tMck=", "owner": "nixos", "repo": "nixos-hardware", - "rev": "880be1ab837e1e9fe0449dae41ac4d034694d4ce", + "rev": "04a1cda0c1725094a4db703cccbb956b7558f5a6", "type": "github" }, "original": { @@ -384,15 +629,15 @@ }, "nixpkgs": { "locked": { - "lastModified": 1718714799, - "narHash": "sha256-FUZpz9rg3gL8NVPKbqU8ei1VkPLsTIfAJ2fdAf5qjak=", - "owner": "nixos", + "lastModified": 1725103162, + "narHash": "sha256-Ym04C5+qovuQDYL/rKWSR+WESseQBbNAe5DsXNx5trY=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "c00d587b1a1afbf200b1d8f0b0e4ba9deb1c7f0e", + "rev": "12228ff1752d7b7624a54e9c1af4b222b3c1073b", "type": "github" }, "original": { - "owner": "nixos", + "owner": "NixOS", "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" @@ -412,11 +657,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1721524707, - "narHash": "sha256-5NctRsoE54N86nWd0psae70YSLfrOek3Kv1e8KoXe/0=", + "lastModified": 1725762081, + "narHash": "sha256-vNv+aJUW5/YurRy1ocfvs4q/48yVESwlC/yHzjkZSP8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "556533a23879fc7e5f98dd2e0b31a6911a213171", + "rev": "dc454045f5b5d814e5862a6d057e7bb5c29edc05", "type": "github" }, "original": { @@ -428,11 +673,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1725432240, - "narHash": "sha256-+yj+xgsfZaErbfYM3T+QvEE2hU7UuE+Jf0fJCJ8uPS0=", + "lastModified": 1718714799, + "narHash": "sha256-FUZpz9rg3gL8NVPKbqU8ei1VkPLsTIfAJ2fdAf5qjak=", "owner": "nixos", "repo": "nixpkgs", - "rev": "ad416d066ca1222956472ab7d0555a6946746a80", + "rev": "c00d587b1a1afbf200b1d8f0b0e4ba9deb1c7f0e", "type": "github" }, "original": { @@ -444,11 +689,27 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1725194671, - "narHash": "sha256-tLGCFEFTB5TaOKkpfw3iYT9dnk4awTP/q4w+ROpMfuw=", + "lastModified": 1725634671, + "narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1725534445, + "narHash": "sha256-Yd0FK9SkWy+ZPuNqUgmVPXokxDgMJoGuNpMEtkfcf84=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b833ff01a0d694b910daca6e2ff4a3f26dee478c", + "rev": "9bb1e7571aadf31ddb4af77fc64b2d59580f9a39", "type": "github" }, "original": { @@ -458,7 +719,7 @@ "type": "github" } }, - "nixpkgs_4": { + "nixpkgs_5": { "locked": { "lastModified": 1724819573, "narHash": "sha256-GnR7/ibgIH1vhoy8cYdmXE6iyZqKqFxQSVkFgosBh6w=", @@ -479,11 +740,14 @@ "fenix": "fenix", "gpg-base-conf": "gpg-base-conf", "home-manager": "home-manager", + "hy3": "hy3", + "hyprland": "hyprland", + "hyprland-plugins": "hyprland-plugins", "kickstartnvim": "kickstartnvim", "nix-ld": "nix-ld", "nixos-hardware": "nixos-hardware", "nixos-wsl": "nixos-wsl", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs_3", "snowfall-flake": "snowfall-flake", "snowfall-lib": "snowfall-lib_2", "sops-nix": "sops-nix", @@ -494,11 +758,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1725548942, - "narHash": "sha256-ZnF5MaOAeiiKIATYN4rrqNsnhSQOQ+Hvfg0mHLvN04Y=", + "lastModified": 1725630423, + "narHash": "sha256-gNCLk3Zg7JlAwmWbVHTH6f3+iqdeQ4fheOotCZy8x5M=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "124c7482167ff6eea4f7663c0be87ea568ccd8c6", + "rev": "08c7bbc2dbe4dcc8968484f1a0e1e6fe7a1d4f6d", "type": "github" }, "original": { @@ -578,15 +842,15 @@ }, "sops-nix": { "inputs": { - "nixpkgs": "nixpkgs_3", + "nixpkgs": "nixpkgs_4", "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1725540166, - "narHash": "sha256-htc9rsTMSAY5ek+DB3tpntdD/es0eam2hJgO92bWSys=", + "lastModified": 1725765163, + "narHash": "sha256-rfd2c47iVSFI6bRYy5l8wRijRBaYDeU7dM8XCDUGqlA=", "owner": "Mic92", "repo": "sops-nix", - "rev": "d9d781523a1463965cd1e1333a306e70d9feff07", + "rev": "b68757cd2c3fa66d6ccaa0d046ce42a9324e0070", "type": "github" }, "original": { @@ -597,16 +861,16 @@ }, "systems": { "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", "type": "github" }, "original": { "owner": "nix-systems", - "repo": "default", + "repo": "default-linux", "type": "github" } }, @@ -655,13 +919,28 @@ "type": "github" } }, + "systems_5": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "unstable": { "locked": { - "lastModified": 1725432240, - "narHash": "sha256-+yj+xgsfZaErbfYM3T+QvEE2hU7UuE+Jf0fJCJ8uPS0=", + "lastModified": 1725634671, + "narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=", "owner": "nixos", "repo": "nixpkgs", - "rev": "ad416d066ca1222956472ab7d0555a6946746a80", + "rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c", "type": "github" }, "original": { @@ -671,9 +950,39 @@ "type": "github" } }, + "xdph": { + "inputs": { + "hyprland-protocols": "hyprland-protocols", + "hyprlang": [ + "hyprland", + "hyprlang" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1725203932, + "narHash": "sha256-VLULC/OnI+6R9KEP2OIGk+uLJJsfRlaLouZ5gyFd2+Y=", + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "rev": "2425e8f541525fa7409d9f26a8ffaf92a3767251", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "type": "github" + } + }, "zen-browser": { "inputs": { - "nixpkgs": "nixpkgs_4" + "nixpkgs": "nixpkgs_5" }, "locked": { "lastModified": 1725529174, diff --git a/flake.nix b/flake.nix index b199e49..26117a6 100644 --- a/flake.nix +++ b/flake.nix @@ -25,6 +25,17 @@ inputs.nixpkgs.follows = "unstable"; }; + hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; + hyprland-plugins = { + url = "github:hyprwm/hyprland-plugins"; + inputs.hyprland.follows = "hyprland"; + }; + + hy3 = { + url = "github:outfoxxed/hy3"; + inputs.hyprland.follows = "hyprland"; + }; + ### # Snowfall dependencies snowfall-lib = { diff --git a/homes/x86_64-linux/cholli@yggdrasil/default.nix b/homes/x86_64-linux/cholli@yggdrasil/default.nix index 694b9c7..08dfc68 100644 --- a/homes/x86_64-linux/cholli@yggdrasil/default.nix +++ b/homes/x86_64-linux/cholli@yggdrasil/default.nix @@ -17,4 +17,6 @@ with lib.wyrdgard; direnv = enabled; }; }; + + home.stateVersion = "23.11"; } diff --git a/modules/home/apps/kitty/default.nix b/modules/home/apps/kitty/default.nix index 5858e88..3aa067d 100644 --- a/modules/home/apps/kitty/default.nix +++ b/modules/home/apps/kitty/default.nix @@ -28,6 +28,7 @@ in settings = { "background_opacity" = "0.95"; "shell" = "fish"; + "confirm_os_window_close" = "0"; }; }; }; diff --git a/modules/nixos/apps/cli-apps/nixvim/default.nix b/modules/nixos/apps/cli-apps/nixvim/default.nix index 2558e19..121341f 100644 --- a/modules/nixos/apps/cli-apps/nixvim/default.nix +++ b/modules/nixos/apps/cli-apps/nixvim/default.nix @@ -5,12 +5,12 @@ ... }: let - inherit(lib) mkIf; - inherit(lib.wyrdgard) mkBoolOpt; + inherit (lib) mkIf; + inherit (lib.wyrdgard) mkBoolOpt; cfg = config.wyrdgard.apps.cli-apps.nixvim; in { - options.wyrdgard.apps.cli-apps.nixvim = { + options.wyrdgard.apps.cli-apps.nixvim = { enable = mkBoolOpt true "Whether to enable nixvim or not (Default true)"; }; diff --git a/modules/nixos/apps/zen-browser/default.nix b/modules/nixos/apps/zen-browser/default.nix index 00bacc6..f7140f0 100644 --- a/modules/nixos/apps/zen-browser/default.nix +++ b/modules/nixos/apps/zen-browser/default.nix @@ -1,5 +1,4 @@ { - options, config, lib, pkgs, @@ -7,21 +6,25 @@ inputs, ... }: -with lib; -with lib.wyrdgard; + let + inherit (lib) mkIf mkEnableOption; cfg = config.wyrdgard.apps.zen-browser; + + zenbrowser = inputs.zen-browser.packages."${system}".default; in { - options.wyrdgard.apps.zen-browser = with types; { - enable = mkBoolOpt false "Whether or not to enable zen browser"; + options.wyrdgard.apps.zen-browser = { + enable = mkEnableOption "Whether or not to enable zen browser"; }; config = mkIf cfg.enable { - environment.systemPackages = with pkgs; [ - inputs.zen-browser.packages."${system}".default + environment.systemPackages = [ + zenbrowser ]; + environment.sessionVariables.DEFAULT_BROWSER = "${zenbrowser}/bin/zen"; + environment.etc = { "1password/custom_allowed_browsers" = { text = '' diff --git a/modules/nixos/archetypes/gaming/default.nix b/modules/nixos/archetypes/gaming/default.nix index 7a469d4..945afde 100644 --- a/modules/nixos/archetypes/gaming/default.nix +++ b/modules/nixos/archetypes/gaming/default.nix @@ -29,7 +29,7 @@ in }; apps = { - vivaldi = enabled; + zen-browser = enabled; }; }; }; diff --git a/modules/nixos/graphical-interface/desktop-manager/hyprland/default.nix b/modules/nixos/graphical-interface/desktop-manager/hyprland/default.nix index 628e89b..a963544 100644 --- a/modules/nixos/graphical-interface/desktop-manager/hyprland/default.nix +++ b/modules/nixos/graphical-interface/desktop-manager/hyprland/default.nix @@ -1,31 +1,230 @@ { config, + inputs, lib, pkgs, + system, ... }: -with lib; with lib.wyrdgard; let + inherit (lib) + mkIf + mkEnableOption + mkOption + mkMerge + types + ; cfg = config.wyrdgard.graphical-interface.desktop-manager.hyprland; + + cachix-url = "https://hyprland.cachix.org"; + cachix-key = "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="; + + hyprland-package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland; in { - options.wyrdgard.graphical-interface.desktop-manager.hyprland = with types; { + options.wyrdgard.graphical-interface.desktop-manager.hyprland = { enable = mkEnableOption "Whether to enable hyprland"; + settings = mkOption { + type = types.attrs; + default = { }; + description = "Additional Hyprland settings to apply."; + }; }; config = mkIf cfg.enable { environment.systemPackages = with pkgs; [ polkit - xdg-desktop-portal-hyprland - dconf + + wl-clipboard + wl-screenrec + wlr-randr + grimblast ]; services.xserver = enabled; programs.hyprland = { enable = true; - xwayland.enable = true; + package = hyprland-package; + portalPackage = + inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland; }; + + wyrdgard = { + nix.extra-substituters.${cachix-url} = { + key = cachix-key; + }; + + home.extraOptions = { + wayland.windowManager.hyprland = { + enable = true; + package = hyprland-package; + plugins = [ inputs.hy3.packages.${system}.hy3 ]; + settings = mkMerge [ + { + "$mod" = "SUPER"; + + exec-once = [ + "steam" + "discord" + ]; + + general = { + layout = "hy3"; + gaps_in = 5; + gaps_out = 5; + border_size = 1; + "col.active_border" = "rgba(88888888)"; + "col.inactive_border" = "rgba(00000088)"; + + allow_tearing = true; + resize_on_border = true; + }; + + decoration = { + rounding = 16; + blur = { + enabled = true; + brightness = 1.0; + contrast = 1.0; + noise = 1.0e-2; + + vibrancy = 0.2; + vibrancy_darkness = 0.5; + + passes = 4; + size = 7; + + popups = true; + popups_ignorealpha = 0.2; + }; + + drop_shadow = true; + shadow_ignore_window = true; + shadow_offset = "0 15"; + shadow_range = 100; + shadow_render_power = 2; + shadow_scale = 0.97; + "col.shadow" = "rgba(00000055)"; + }; + + animations = { + enabled = true; + animation = [ + "border, 1, 2, default" + "fade, 1, 4, default" + "windows, 1, 3, default, popin 80%" + "workspaces, 1, 2, default, slide" + ]; + }; + + bind = + [ + # compositor commands + "$mod SHIFT, R, exec, hyprctl reload" + "$mod SHIFT, Q, killactive," + "$mod SHIFT, E, exec, pkill Hyprland" + + "$mod, F, fullscreen," + "$mod, G, togglegroup," + "$mod SHIFT, N, changegroupactive, f" + "$mod SHIFT, P, changegroupactive, b" + "$mod, R, togglesplit," + "$mod, T, togglefloating," + "$mod, P, pseudo," + "$mod ALT, ,resizeactive," + + # move focus + "$mod, h, hy3:movefocus, l" + "$mod, j, hy3:movefocus, d" + "$mod, k, hy3:movefocus, u" + "$mod, l, hy3:movefocus, r" + "$mod, left, hy3:movefocus, l" + "$mod, down, hy3:movefocus, d" + "$mod, up, hy3:movefocus, u" + "$mod, right, hy3:movefocus, r" + + # move focus + "$mod SHIFT, h, hy3:movewindow, l, once" + "$mod SHIFT, j, hy3:movewindow, d, once" + "$mod SHIFT, k, hy3:movewindow, u, once" + "$mod SHIFT, l, hy3:movewindow, r, once" + "$mod SHIFT, left, hy3:movewindow, l, once" + "$mod SHIFT, down, hy3:movewindow, d, once" + "$mod SHIFT, up, hy3:movewindow, u, once" + "$mod SHIFT, right, hy3:movewindow, r, once" + + #run important programs + "$mod, Return, exec, kitty" + "$mod, Z, exec, zen" + # "$mod, D, exec, rofi -show combi" + + #screenshot + ", Print, exec, grimblast copy area" + ] + ++ ( + # workspaces + # binds $mod + [shift +] {1..9} to [move to] workspace {1..9} + builtins.concatLists ( + builtins.genList ( + i: + let + ws = i + 1; + in + [ + "$mod, code:1${toString i}, workspace, ${toString ws}" + "$mod SHIFT, code:1${toString i}, hy3:movetoworkspace, ${toString ws}" + ] + ) 9 + ) + ); + + # mouse movements + bindm = [ + "$mod, mouse:272, movewindow" + "$mod, mouse:273, resizewindow" + "$mod ALT, mouse:272, resizewindow" + ]; + + bindl = [ + # volume + ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + ", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" + ]; + + bindle = [ + # volume + ", XF86AudioRaiseVolume, exec, wpctl set-volume -l '1.0' @DEFAULT_AUDIO_SINK@ 6%+" + ", XF86AudioLowerVolume, exec, wpctl set-volume -l '1.0' @DEFAULT_AUDIO_SINK@ 6%-" + ]; + + input = { + kb_layout = "us"; + + # focus change on cursor move + follow_mouse = 1; + accel_profile = "flat"; + }; + + plugin = { + hy3 = { + autotile = { + enable = true; + trigger_width = 800; + trigger_height = 500; + }; + }; + }; + } + cfg.settings + ]; + + }; + + }; + }; + + environment.sessionVariables.NIXOS_OZONE_WL = "1"; }; } diff --git a/modules/nixos/nix/default.nix b/modules/nixos/nix/default.nix index ba20ec7..b0c4e47 100644 --- a/modules/nixos/nix/default.nix +++ b/modules/nixos/nix/default.nix @@ -8,14 +8,37 @@ with lib; with lib.wyrdgard; let cfg = config.wyrdgard.nix; + + substituters-submodule = types.submodule ( + { name, ... }: + { + options = with types; { + key = mkOpt (nullOr str) null "The trusted public key for this substituter."; + }; + } + ); in { options.wyrdgard.nix = with types; { enable = mkBoolOpt true "Whether or not to manage nix configuration."; package = mkOpt package pkgs.lix "Which nix package to use."; + + default-substituter = { + url = mkOpt str "https://cache.nixos.org" "The url for the substituter."; + key = + mkOpt str "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" + "The trusted public key for the substituter."; + }; + + extra-substituters = mkOpt (attrsOf substituters-submodule) { } "Extra substituters to configure."; }; config = mkIf cfg.enable { + assertions = mapAttrsToList (name: value: { + assertion = value.key != null; + message = "plusultra.nix.extra-substituters.${name}.key must be set"; + }) cfg.extra-substituters; + environment.systemPackages = with pkgs; [ snowfallorg.flake nixfmt-rfc-style @@ -43,6 +66,12 @@ in auto-optimise-store = true; trusted-users = users; allowed-users = users; + substituters = [ + cfg.default-substituter.url + ] ++ (mapAttrsToList (name: value: name) cfg.extra-substituters); + trusted-public-keys = [ + cfg.default-substituter.key + ] ++ (mapAttrsToList (name: value: value.key) cfg.extra-substituters); } // (lib.optionalAttrs config.wyrdgard.tools.direnv.enable { keep-outputs = true; diff --git a/modules/nixos/submodules/basics-wsl/default.nix b/modules/nixos/submodules/basics-wsl/default.nix index ccc953f..b6368ad 100644 --- a/modules/nixos/submodules/basics-wsl/default.nix +++ b/modules/nixos/submodules/basics-wsl/default.nix @@ -1,17 +1,16 @@ { - options, config, lib, pkgs, ... }: -with lib; -with lib.wyrdgard; let + inherit (lib) mkIf; + inherit (lib.wyrdgard) mkBoolOpt enabled; cfg = config.wyrdgard.submodules.basics-wsl; in { - options.wyrdgard.submodules.basics-wsl = with types; { + options.wyrdgard.submodules.basics-wsl = { enable = mkBoolOpt false "Whether or not to enable basic configuration."; }; diff --git a/systems/x86_64-linux/yggdrasil/default.nix b/systems/x86_64-linux/yggdrasil/default.nix index f426dd7..2fae8a0 100644 --- a/systems/x86_64-linux/yggdrasil/default.nix +++ b/systems/x86_64-linux/yggdrasil/default.nix @@ -3,12 +3,13 @@ lib, ... }: -with lib.wyrdgard; +let + inherit (lib.wyrdgard) enabled; +in { imports = [ ./hardware.nix ]; environment.systemPackages = with pkgs; [ - jetbrains.rust-rover path-of-building ]; @@ -22,13 +23,27 @@ with lib.wyrdgard; }; apps = { - vivaldi = enabled; - zen-browser = enabled; - discord = enabled; _1password = enabled; obs-studio = enabled; }; + graphical-interface.desktop-manager.hyprland = { + enable = true; + settings = { + monitor = [ + #Ultrawide + "DP-2,3440x1440@144, 0x0, 1" + #Vertical + "HDMI-A-1,1920x1080@144, auto-right, 1, transform, 1" + ]; + workspace = [ + "1, monitor:DP-2" + "2, monitor:HDMI-A-1" + "3, monitor:DP-2 on-created-empty:zen" + ]; + }; + }; + services = { factorio-server = enabled; onedrive = enabled;