diff --git a/configuration.nix b/configuration.nix index 34cdcfa..e26a6d1 100644 --- a/configuration.nix +++ b/configuration.nix @@ -12,6 +12,7 @@ { # Bootloader. + boot.kernelPackages = pkgs.linuxPackages_zen; boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; @@ -33,6 +34,19 @@ networkmanager.enable = false; useNetworkd = true; useDHCP = false; + + wireless.iwd = { + enable = true; + settings = { + General = { + EnableNetworkConfiguration = true; + }; + Network = { + EnableIPv6 = true; + NameResolvingService = "systemd"; + }; + }; + }; }; systemd.network = { enable = true; @@ -87,13 +101,17 @@ # Enable the X11 windowing system. # You can disable this if you're only using the Wayland session. - services.xserver.enable = true; + services.xserver = { + display = 0; + enable = true; + }; # Enable the KDE Plasma Desktop Environment. # services.displayManager.sddm.enable = true; # services.desktopManager.plasma6.enable = true; services.desktopManager.cosmic.enable = true; services.displayManager.cosmic-greeter.enable = true; + programs.niri.enable = true; # Configure keymap in X11 services.xserver.xkb = { @@ -142,7 +160,7 @@ programs.localsend.enable = true; # Enable sound with pipewire. - hardware.pulseaudio.enable = false; + services.pulseaudio.enable = false; security.rtkit.enable = true; services.pipewire = { enable = true; @@ -179,6 +197,7 @@ # List packages installed in system profile. To search, run: environment.systemPackages = with pkgs; [ + nix-output-monitor wget git vim @@ -219,4 +238,5 @@ ]; system.stateVersion = "24.11"; # Did you read the comment? + } diff --git a/flake.lock b/flake.lock index 5037aeb..44bdd9e 100644 --- a/flake.lock +++ b/flake.lock @@ -15,6 +15,25 @@ "type": "github" } }, + "dae": { + "inputs": { + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1735839355, + "narHash": "sha256-lpCluUgqSIZYgVlc9nxm9+dBN5UWjTXodgGjyHL86HM=", + "owner": "daeuniverse", + "repo": "flake.nix", + "rev": "84e086608ebc04973387fd57b548139476358638", + "type": "github" + }, + "original": { + "owner": "daeuniverse", + "repo": "flake.nix", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -62,6 +81,24 @@ } }, "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1730504689, + "narHash": "sha256-hgmguH29K2fvs9szpq2r3pz2/8cJd2LPS+b4tfNFCwE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "506278e768c2a08bec68eb62932193e341f55c90", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { "inputs": { "nixpkgs-lib": [ "nur", @@ -82,9 +119,27 @@ "type": "github" } }, - "flake-parts_2": { + "flake-parts_3": { "inputs": { - "nixpkgs-lib": "nixpkgs-lib" + "nixpkgs-lib": "nixpkgs-lib_2" + }, + "locked": { + "lastModified": 1733312601, + "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_4": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_3" }, "locked": { "lastModified": 1727826117, @@ -159,11 +214,11 @@ "systems": "systems_5" }, "locked": { - "lastModified": 1726560853, - "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -175,17 +230,17 @@ "freetype2": { "flake": false, "locked": { - "lastModified": 1687587065, - "narHash": "sha256-+Fh+/k+NWL5Ow9sDLtp8Cv/8rLNA1oByQQCIQS/bysY=", - "owner": "wez", - "repo": "freetype2", - "rev": "e4586d960f339cf75e2e0b34aee30a0ed8353c0d", + "lastModified": 1723459814, + "narHash": "sha256-4l90lDtpgm5xlh2m7ifrqNy373DTRTULRkAzicrM93c=", + "owner": "freetype", + "repo": "freetype", + "rev": "42608f77f20749dd6ddc9e0536788eaad70ea4b5", "type": "github" }, "original": { - "owner": "wez", - "repo": "freetype2", - "rev": "e4586d960f339cf75e2e0b34aee30a0ed8353c0d", + "owner": "freetype", + "ref": "VER-2-13-3", + "repo": "freetype", "type": "github" } }, @@ -197,11 +252,11 @@ "zig": "zig" }, "locked": { - "lastModified": 1735362327, - "narHash": "sha256-kD49xAUMCWU60IRKoJiyJTaEUum7rk45OYjZfwWr3Ck=", + "lastModified": 1736131979, + "narHash": "sha256-NPfIRTbmzP5+IbbDIYED3zxVd+b1DSsl8nCGRBt3iQo=", "owner": "ghostty-org", "repo": "ghostty", - "rev": "6cbd69da7839260508466f9dfb2bc0c0fbb43991", + "rev": "6181487bad55f8bbff9ce4f849a40fac72120f82", "type": "github" }, "original": { @@ -213,16 +268,16 @@ "harfbuzz": { "flake": false, "locked": { - "lastModified": 1711722720, - "narHash": "sha256-GdxcAPx5QyniSHPAN1ih28AD9JLUPR0ItqW9JEsl3pU=", + "lastModified": 1719502711, + "narHash": "sha256-2ieCf3ftNk851FZBDPVl+7QHWBqD729KiUxUyxi26Yg=", "owner": "harfbuzz", "repo": "harfbuzz", - "rev": "63973005bc07aba599b47fdd4cf788647b601ccd", + "rev": "9c03576c49db6e7207d9bcdfe3abd170a809157f", "type": "github" }, "original": { "owner": "harfbuzz", - "ref": "8.4.0", + "ref": "9.0.0", "repo": "harfbuzz", "type": "github" } @@ -237,11 +292,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1735311473, - "narHash": "sha256-PIAQe6E07XFYYwv0ARV9oqgV/d30etcMKEEBzyyI1NU=", + "lastModified": 1736116509, + "narHash": "sha256-ZcUDcqSSLmSLgNVFZ9r3wQ2Dp7MK94kZ1gSOABJ2+Wo=", "owner": "helix-editor", "repo": "helix", - "rev": "a5a7cff311e909ecab41f840742a5309634aeec3", + "rev": "6c9619d0944570727ce1f9e8212c4081456fc361", "type": "github" }, "original": { @@ -258,11 +313,11 @@ ] }, "locked": { - "lastModified": 1735343815, - "narHash": "sha256-p7IJP/97zJda/wwCn1T2LJBz4olF5LjNf4uwhuyvARo=", + "lastModified": 1736089250, + "narHash": "sha256-/LPWMiiJGPHGd7ZYEgmbE2da4zvBW0acmshUjYC3WG4=", "owner": "nix-community", "repo": "home-manager", - "rev": "b7a7cd5dd1a74a9fe86ed4e016f91c78483b527a", + "rev": "172b91bfb2b7f5c4a8c6ceac29fd53a01ef07196", "type": "github" }, "original": { @@ -296,17 +351,73 @@ "libpng": { "flake": false, "locked": { - "lastModified": 1549245649, - "narHash": "sha256-1+cRp0Ungme/OGfc9kGJbklYIWAFxk8Il1M+NV4KSgw=", - "owner": "glennrp", + "lastModified": 1726173884, + "narHash": "sha256-gBfHgGaqVYdmhWXoNKZzPyGzyw2rr3zp+DjWmfC41jk=", + "owner": "pnggroup", "repo": "libpng", - "rev": "8439534daa1d3a5705ba92e653eda9251246dd61", + "rev": "f5e92d76973a7a53f517579bc95d61483bf108c0", "type": "github" }, "original": { - "owner": "glennrp", + "owner": "pnggroup", + "ref": "v1.6.44", "repo": "libpng", - "rev": "8439534daa1d3a5705ba92e653eda9251246dd61", + "type": "github" + } + }, + "niri-flake": { + "inputs": { + "niri-stable": "niri-stable", + "niri-unstable": "niri-unstable", + "nixpkgs": "nixpkgs_2", + "nixpkgs-stable": "nixpkgs-stable_2", + "xwayland-satellite-stable": "xwayland-satellite-stable", + "xwayland-satellite-unstable": "xwayland-satellite-unstable" + }, + "locked": { + "lastModified": 1736149834, + "narHash": "sha256-newGrF/Y2a457+jjWEwg+oVGeFnSt1UY6zkF/hlSMCY=", + "owner": "sodiboo", + "repo": "niri-flake", + "rev": "2ac88ed580655c5cf089b279c7b6227328bb4a95", + "type": "github" + }, + "original": { + "owner": "sodiboo", + "repo": "niri-flake", + "type": "github" + } + }, + "niri-stable": { + "flake": false, + "locked": { + "lastModified": 1731483594, + "narHash": "sha256-Qjf7alRbPPERfiZsM9EMKX+HwjESky1tieh5PJIkLwE=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "75c79116a7e40cbc0e110ce0cdd500e896458679", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "ref": "v0.1.10.1", + "repo": "niri", + "type": "github" + } + }, + "niri-unstable": { + "flake": false, + "locked": { + "lastModified": 1736073506, + "narHash": "sha256-c8UMa0Yb8hYm9D3Q/k+GsRxsk8oTYy2OJywCHjWXrlU=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "89678c7b1e6ebe6ec5411db5a2b99bd6bea63565", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "repo": "niri", "type": "github" } }, @@ -319,7 +430,7 @@ "nix-github-actions": "nix-github-actions", "nixpkgs": [ "oskars-dotfiles", - "nixpkgs-unstable" + "nixpkgs" ], "nixpkgs-wine": "nixpkgs-wine", "systems": "systems_3", @@ -339,12 +450,33 @@ "type": "github" } }, - "nix-gaming": { + "nix-darwin": { "inputs": { - "flake-parts": "flake-parts_2", "nixpkgs": [ "oskars-dotfiles", - "nixpkgs-unstable" + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1735218083, + "narHash": "sha256-MoUAbmXz9TEr7zlKDRO56DBJHe30+7B5X7nhXm+Vpc8=", + "owner": "LnL7", + "repo": "nix-darwin", + "rev": "bc03f7818771a75716966ce8c23110b715eff2aa", + "type": "github" + }, + "original": { + "owner": "LnL7", + "repo": "nix-darwin", + "type": "github" + } + }, + "nix-gaming": { + "inputs": { + "flake-parts": "flake-parts_4", + "nixpkgs": [ + "oskars-dotfiles", + "nixpkgs" ], "umu": "umu" }, @@ -388,16 +520,16 @@ "nixos-cosmic": { "inputs": { "flake-compat": "flake-compat_2", - "nixpkgs": "nixpkgs", - "nixpkgs-stable": "nixpkgs-stable_2", + "nixpkgs": "nixpkgs_3", + "nixpkgs-stable": "nixpkgs-stable_3", "rust-overlay": "rust-overlay_2" }, "locked": { - "lastModified": 1735362320, - "narHash": "sha256-nNPTwaTLwMFX4Y0ugxwubIw2LJ+qt2g2FrwBVjRr1zI=", + "lastModified": 1736127757, + "narHash": "sha256-VYQqg7vaRoao+A5XUrflxcDBe1kXQUGSQId4M7fz8nw=", "owner": "lilyinstarlight", "repo": "nixos-cosmic", - "rev": "7da43ac24467b538ae5f07117709665b189887fd", + "rev": "5e273a14a62532d518e1ea5d7bc3f9a2c001ea95", "type": "github" }, "original": { @@ -408,11 +540,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1734954597, - "narHash": "sha256-QIhd8/0x30gEv8XEE1iAnrdMlKuQ0EzthfDR7Hwl+fk=", + "lastModified": 1735388221, + "narHash": "sha256-e5IOgjQf0SZcFCEV/gMGrsI0gCJyqOKShBQU0iiM3Kg=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "def1d472c832d77885f174089b0d34854b007198", + "rev": "7c674c6734f61157e321db595dbfcd8523e04e19", "type": "github" }, "original": { @@ -424,11 +556,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1735291276, - "narHash": "sha256-NYVcA06+blsLG6wpAbSPTCyLvxD/92Hy4vlY9WxFI1M=", + "lastModified": 1730531603, + "narHash": "sha256-Dqg6si5CqIzm87sp57j5nTaeBbWhHFaVyG7V6L8k3lY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "634fd46801442d760e09493a794c4f15db2d0cbb", + "rev": "7ffd9ae656aec493492b44d0ddfb28e79a1ea25d", "type": "github" }, "original": { @@ -438,7 +570,47 @@ "type": "github" } }, + "nixpkgs-darwin": { + "locked": { + "lastModified": 1735171749, + "narHash": "sha256-UA56kDQSztRWbpsG9bK+jIGyZ0YZAcIsYAhXDHIr8zs=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "03b02bb3356e29e9d4d1200f9b1f5f36bf3780f0", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-24.11-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs-lib": { + "locked": { + "lastModified": 1730504152, + "narHash": "sha256-lXvH/vOfb4aGYyvFmZK/HlsNsr/0CVWlwYvo2rxJk3s=", + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/cc2f28000298e1269cea6612cd06ec9979dd5d7f.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/cc2f28000298e1269cea6612cd06ec9979dd5d7f.tar.gz" + } + }, + "nixpkgs-lib_2": { + "locked": { + "lastModified": 1733096140, + "narHash": "sha256-1qRH7uAUsyQI7R1Uwl4T+XvdNv778H0Nb5njNrqvylY=", + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz" + } + }, + "nixpkgs-lib_3": { "locked": { "lastModified": 1727825735, "narHash": "sha256-0xHYkMkeLVQAMa7gvkddbPqpxph+hDzdu1XdGPJR+Os=", @@ -468,11 +640,27 @@ }, "nixpkgs-stable_2": { "locked": { - "lastModified": 1735141468, - "narHash": "sha256-VIAjBr1qGcEbmhLwQJD6TABppPMggzOvqFsqkDoMsAY=", + "lastModified": 1736061677, + "narHash": "sha256-DjkQPnkAfd7eB522PwnkGhOMuT9QVCZspDpJJYyOj60=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4005c3ff7505313cbc21081776ad0ce5dfd7a3ce", + "rev": "cbd8ec4de4469333c82ff40d057350c30e9f7d36", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_3": { + "locked": { + "lastModified": 1736061677, + "narHash": "sha256-DjkQPnkAfd7eB522PwnkGhOMuT9QVCZspDpJJYyOj60=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "cbd8ec4de4469333c82ff40d057350c30e9f7d36", "type": "github" }, "original": { @@ -532,11 +720,43 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1735291276, - "narHash": "sha256-NYVcA06+blsLG6wpAbSPTCyLvxD/92Hy4vlY9WxFI1M=", + "lastModified": 1736012469, + "narHash": "sha256-/qlNWm/IEVVH7GfgAIyP6EsVZI6zjAx1cV5zNyrs+rI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "634fd46801442d760e09493a794c4f15db2d0cbb", + "rev": "8f3e1f807051e32d8c95cd12b9b421623850a34d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1735834308, + "narHash": "sha256-dklw3AXr3OGO4/XT1Tu3Xz9n/we8GctZZ75ZWVqAVhk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6df24922a1400241dae323af55f30e4318a6ca65", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1736012469, + "narHash": "sha256-/qlNWm/IEVVH7GfgAIyP6EsVZI6zjAx1cV5zNyrs+rI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "8f3e1f807051e32d8c95cd12b9b421623850a34d", "type": "github" }, "original": { @@ -548,18 +768,18 @@ }, "nur": { "inputs": { - "flake-parts": "flake-parts", + "flake-parts": "flake-parts_2", "nixpkgs": [ "nixpkgs" ], "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1735367808, - "narHash": "sha256-OdwpdXcrLpZfxQVECzzDzYDnxWl8M0iyryX2Hyg0J7A=", + "lastModified": 1736163949, + "narHash": "sha256-ewYhjZY7zHQ9Jv1ePIShLGM5odwyX06OWzDNHxEpcs8=", "owner": "nix-community", "repo": "NUR", - "rev": "db1a42be19ec69ba2e7f92f62dfc102ef1d2a91c", + "rev": "879889538510c1974242e90c17fe1d1ad156f822", "type": "github" }, "original": { @@ -585,24 +805,26 @@ }, "oskars-dotfiles": { "inputs": { + "flake-parts": "flake-parts_3", "home-manager": "home-manager_2", "nix-citizen": "nix-citizen", + "nix-darwin": "nix-darwin", "nix-gaming": "nix-gaming", "nixpkgs": [ "nixpkgs" ], + "nixpkgs-darwin": "nixpkgs-darwin", "nixpkgs-unstable": "nixpkgs-unstable_2", "nur": "nur_2", "rust-overlay": "rust-overlay_3", - "winapps": "winapps", - "zen-browser": "zen-browser" + "winapps": "winapps" }, "locked": { - "lastModified": 1733907511, - "narHash": "sha256-9ERM2ihW8Z3Jb9ZsPqSxI7GCTeJcW5jDl/Q39FZcGIo=", + "lastModified": 1735384567, + "narHash": "sha256-8+cAKak4QNBsvg+qUEROeH+xvBNfjHtBBI/gI/zRP7Q=", "owner": "oskardotglobal", "repo": ".dotfiles", - "rev": "77a46fb1a4b42ef9b7d35c6fa6b5be5d6545c066", + "rev": "88510c4f7bb9d8939f17d4f1e33d6a7a47d7ba2b", "type": "github" }, "original": { @@ -614,12 +836,14 @@ }, "root": { "inputs": { + "dae": "dae", "ghostty": "ghostty", "helix": "helix", "home-manager": "home-manager", + "niri-flake": "niri-flake", "nixos-cosmic": "nixos-cosmic", "nixos-hardware": "nixos-hardware", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs_4", "nur": "nur", "oskars-dotfiles": "oskars-dotfiles", "wezterm": "wezterm" @@ -654,11 +878,11 @@ ] }, "locked": { - "lastModified": 1735266518, - "narHash": "sha256-2XkWYGgT+911gOLjgBj+8W8ZJk6P0qHJNz8RfKgT/5o=", + "lastModified": 1736044260, + "narHash": "sha256-DTAr0mAd8AZwWgRtU9ZZFPz3DwNeoH/Oi/1QMSqc9YQ=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "e0b3654b716098b47f3643c65fbb75ef49c033e1", + "rev": "c8ed24cc104ebbc218d992e208131e9f024b69f0", "type": "github" }, "original": { @@ -696,11 +920,11 @@ ] }, "locked": { - "lastModified": 1729477859, - "narHash": "sha256-r0VyeJxy4O4CgTB/PNtfQft9fPfN1VuGvnZiCxDArvg=", + "lastModified": 1735871325, + "narHash": "sha256-6Ta5E4mhSfCP6LdkzkG2+BciLOCPeLKuYTJ6lOHW+mI=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "ada8266712449c4c0e6ee6fcbc442b3c217c79e1", + "rev": "a599f011db521766cbaf7c2f5874182485554f00", "type": "github" }, "original": { @@ -867,11 +1091,11 @@ }, "locked": { "dir": "nix", - "lastModified": 1733412933, - "narHash": "sha256-2OPDEgUEh0B6OIcSWtBbkw/zFi8r2VfluLj7FebTaVA=", + "lastModified": 1735931735, + "narHash": "sha256-4wzEN5IPYmqLP8TAdFatoRhCZ7W9y65AWoYN0Qgvbg8=", "owner": "wez", "repo": "wezterm", - "rev": "6f375e29a2c4d70b8b51956edd494693196c6692", + "rev": "8e9cf912e66f704f300fac6107206a75036de1e7", "type": "github" }, "original": { @@ -905,24 +1129,36 @@ "type": "github" } }, - "zen-browser": { - "inputs": { - "nixpkgs": [ - "oskars-dotfiles", - "nixpkgs" - ] - }, + "xwayland-satellite-stable": { + "flake": false, "locked": { - "lastModified": 1731689537, - "narHash": "sha256-0wN39XFD5bVcNANh9uLoQYyKbp9r6xX+oON1qI+L9iI=", - "owner": "ch4og", - "repo": "zen-browser-flake", - "rev": "064be844324965da1d596a541fdd831efe4a3a32", + "lastModified": 1730166465, + "narHash": "sha256-nq7bouXQXaaPPo/E+Jbq+wNHnatD4dY8OxSrRqzvy6s=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "a713cf46cb7db84a0d1b57c3a397c610cad3cf98", "type": "github" }, "original": { - "owner": "ch4og", - "repo": "zen-browser-flake", + "owner": "Supreeeme", + "ref": "v0.5", + "repo": "xwayland-satellite", + "type": "github" + } + }, + "xwayland-satellite-unstable": { + "flake": false, + "locked": { + "lastModified": 1734745564, + "narHash": "sha256-JQNl4pqonVVPQ2JzEOLUcPVRNj//FFFNRDyvQoOkG7s=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "94da1af75326d89ecb12aba0cc9362e93ffdc766", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "repo": "xwayland-satellite", "type": "github" } }, @@ -954,16 +1190,16 @@ "zlib": { "flake": false, "locked": { - "lastModified": 1484501380, - "narHash": "sha256-j5b6aki1ztrzfCqu8y729sPar8GpyQWIrajdzpJC+ww=", + "lastModified": 1705948357, + "narHash": "sha256-TkPLWSN5QcPlL9D0kc/yhH0/puE9bFND24aj5NVDKYs=", "owner": "madler", "repo": "zlib", - "rev": "cacf7f1d4e3d44d871b605da3b647f07d718623f", + "rev": "51b7f2abdade71cd9bb0e7a373ef2610ec6f9daf", "type": "github" }, "original": { "owner": "madler", - "ref": "v1.2.11", + "ref": "v1.3.1", "repo": "zlib", "type": "github" } diff --git a/flake.nix b/flake.nix index 733340a..1a32ddc 100644 --- a/flake.nix +++ b/flake.nix @@ -19,6 +19,7 @@ url = "github:oskardotglobal/.dotfiles/nix"; inputs.nixpkgs.follows = "nixpkgs"; }; + niri-flake.url = "github:sodiboo/niri-flake"; nur = { url = "github:nix-community/NUR"; inputs.nixpkgs.follows = "nixpkgs"; @@ -26,6 +27,7 @@ nixos-cosmic.url = "github:lilyinstarlight/nixos-cosmic"; ghostty.url = "github:ghostty-org/ghostty"; nixos-hardware.url = "github:NixOS/nixos-hardware/master"; + dae.url = "github:daeuniverse/flake.nix"; }; outputs = { @@ -41,6 +43,7 @@ inherit inputs; }; modules = [ + inputs.niri-flake.nixosModules.niri { nix.settings = { substituters = [ "https://cosmic.cachix.org/" ]; @@ -50,6 +53,7 @@ (final: prev: { helix = inputs.helix.packages."${system}".default; }) + inputs.niri-flake.overlays.niri ]; } inputs.nixos-hardware.nixosModules.asus-fx506hm @@ -60,6 +64,7 @@ ./hardware-configuration.nix home-manager.nixosModules.home-manager ./users + inputs.dae.nixosModules.dae ]; }; }; diff --git a/users/dae/config.dae b/users/dae/config.dae new file mode 100644 index 0000000..6c3efc9 --- /dev/null +++ b/users/dae/config.dae @@ -0,0 +1,82 @@ +include { + proxy.d/*.dae +} + +global { + # 绑定到 LAN 和/或 WAN 接口。将下述接口替换成你自己的接口名。 + lan_interface: auto + wan_interface: auto + + log_level: trace + allow_insecure: false + auto_config_kernel_parameter: true + dial_mode: domain +} + +# 更多的 DNS 样例见 https://github.com/daeuniverse/dae/blob/main/docs/en/configuration/dns.md +dns { + upstream { + googledns: 'tcp+udp://8.8.8.8:53' + alidns: 'udp://114.114.114.114:53' + } + routing { + request { + fallback: alidns + } + response { + upstream(googledns) -> accept + ip(geoip: private) && !qname(geosite: cn) -> googledns + fallback: accept + } + } +} + +group { + proxy { + filter: subtag(wget) + policy: min_moving_avg + } + us { + filter: subtag(wget) && name(keyword: "美国") + policy: min_moving_avg + } + hk { + filter: subtag(wget) && name(keyword: "香港") + policy: min_moving_avg + } +} + +# 更多的 Routing 样例见 https://github.com/daeuniverse/dae/blob/main/docs/en/configuration/routing.md +routing { + pname(hickory-dns) && dport(53) -> must_direct + pname(mihomo) -> must_direct + domain(geosite:cn) -> direct + # personal config routing + + domain(full: time.windows.com) -> must_direct + domain(suffix: 'hit.edu.cn') -> must_direct + domain(geosite: microsoft) -> proxy + # domain(geosite: onedrive) -> must_direct + domain(geosite: 'category-ai-chat-!cn') -> us + domain(geosite: google) -> us + domain(geosite: google-play) -> proxy + domain(geosite: apple) -> us + domain(keyword: spotify) -> us + domain(geosite: tiktok) -> us + + dip(geoip:private) -> direct + dip(geoip:cn) -> direct + # dport(63434) && sip(192.168.31.170) -> hk + dip(223.5.5.5) -> direct + + # ban qq dns over http + # dip(43.136.0.0/13) -> block + # dip(109.244.0.0/16) -> block + # dip(175.27.0.0/16) -> block + # dip('2409:8C1E:75B0:80::/64') -> block + + ## 禁用 h3,因为它通常消耗很多 CPU 和内存资源 + # l4proto(udp) && dport(443) -> block + + fallback: proxy +} diff --git a/users/dae/default.nix b/users/dae/default.nix new file mode 100644 index 0000000..d50004d --- /dev/null +++ b/users/dae/default.nix @@ -0,0 +1,114 @@ +{ pkgs, config, ... }: +{ + services.dae = { + enable = true; + openFirewall = { + enable = true; + port = 12345; + }; + disableTxChecksumIpGeneric = false; + config = builtins.readFile ./config.dae; + }; + environment.etc."dae/urls.txt".source = ./urls.txt; + systemd.services = + let + new_proxy = "/etc/dae/proxy.d.new"; + head = "user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36"; + update = '' + num=0 + check=1 + urls="$(${pkgs.coreutils}/bin/cat /etc/dae/urls.txt)" + mkdir -p ${new_proxy} + for url in "''${urls}"; do + txt=${new_proxy}/''${num}.txt + config="${new_proxy}/''${num}.dae" + ${pkgs.curl}/bin/curl -H "${head}" "''${url}" > "''${txt}" + ${pkgs.coreutils}/bin/echo "" > ''${config} + ${pkgs.coreutils}/bin/echo 'subscription {' >> ''${config} + ${pkgs.coreutils}/bin/echo \ \ wget:\ \"file\://proxy.d/''${num}.txt\" >> ''${config} + ${pkgs.coreutils}/bin/echo } >> ''${config} + if [[ ! -s ''${txt} ]]; then + check=0 + fi + ${pkgs.coreutils}/bin/chmod 0640 ''${txt} + ${pkgs.coreutils}/bin/chmod 0640 ''${config} + link=$((link+1)) + + if [[ ''${check} -eq 0 ]]; then + exit -1 + fi + done + ${pkgs.coreutils}/bin/rm -r /etc/dae/proxy.d + ${pkgs.coreutils}/bin/mv ${new_proxy} /etc/dae/proxy.d + ''; + in + { + "update-dae-subscription-immediate" = { + after = [ "network-online.target" ]; + wants = [ "network-online.target" ]; + before = [ "dae.service" ]; + serviceConfig = { + Type = "oneshot"; + ExecStart = + let + script = pkgs.writeTextFile { + name = "update-dae-subscription-immediate"; + executable = true; + destination = "/bin/script"; + text = '' + ${pkgs.coreutils}/bin/mkdir -p /etc/proxy.d + if [ -z "$(ls -A /etc/dae/proxy.d 2>/dev/null)" ]; then + ${pkgs.coreutils}/bin/echo "No subscription file found in /etc/dae/proxy.d. Update now..." + ${update} + else + ${pkgs.coreutils}/bin/echo "Found existing subscription files. Skipping immediate update." + fi + ''; + }; + in + [ + "${pkgs.bash}/bin/bash ${script}/bin/script" + ]; + }; + wantedBy = [ "multi-user.target" ]; + }; + + "update-dae-subscription-weekly" = { + after = [ "network-online.target" ]; + wants = [ "network-online.target" ]; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + Type = "oneshot"; + ExecStartPre = [ "${config.systemd.package}/bin/systemctl stop dae.service" ]; + ExecStartPost = [ + "${config.systemd.package}/bin/systemctl start dae.service" + ]; + ExecStart = + let + script = pkgs.writeTextFile { + name = "update-dae-subscription-weekly"; + executable = true; + destination = "/bin/script"; + text = '' + ${pkgs.coreutils}/bin/echo "Force subscription update..." + ${pkgs.coreutils}/bin/mkdir -p /etc/proxy.d + ${update} + ''; + }; + in + [ + "${pkgs.bash}/bin/bash ${script}/bin/script" + ]; + }; + }; + }; + + systemd.timers."dae-update" = { + wantedBy = [ "timers.target" ]; + timerConfig = { + OnCalendar = "weekly"; + Unit = "dae-update.service"; + Persistent = true; + }; + }; +} diff --git a/users/dae/urls.txt b/users/dae/urls.txt new file mode 100644 index 0000000..4e9e00a --- /dev/null +++ b/users/dae/urls.txt @@ -0,0 +1 @@ +https://bava8u2znaj6bdzzjnfb.wgetcloud.online/link/df057715-3fa5-38c8-b550-316aa84c22c1?target=v2rayn&list=1&simple=1 diff --git a/users/default.nix b/users/default.nix index 1ee4444..b8bfe97 100644 --- a/users/default.nix +++ b/users/default.nix @@ -14,6 +14,8 @@ } ./steam.nix ./spotify.nix + ./nh.nix + ./dae ]; programs.fish.enable = true; users.users.david.shell = pkgs.fish; diff --git a/users/home-manager/default.nix b/users/home-manager/default.nix index c5f3217..301b322 100644 --- a/users/home-manager/default.nix +++ b/users/home-manager/default.nix @@ -14,6 +14,8 @@ ./firefox.nix ./foot ./ghostty + ./niri + ./zed.nix ]; xdg.userDirs = { enable = true; diff --git a/users/home-manager/niri/config.kdl b/users/home-manager/niri/config.kdl new file mode 100644 index 0000000..987f344 --- /dev/null +++ b/users/home-manager/niri/config.kdl @@ -0,0 +1,291 @@ +input { + keyboard { + xkb { + } + } + + touchpad { + tap + natural-scroll + } + + mouse { + } + + trackpoint { + } +} + +output "DP-1" { + mode "2560x1440@169.900" + scale 1 + transform "normal" + position x=0 y=0 +} + + +output "eDP-1" { + mode "2560x1440@165.003" + scale 1.5 + transform "normal" + position x=2560 y=0 +} + +layout { + gaps 16 + center-focused-column "never" + preset-column-widths { + proportion 0.33333 + proportion 0.5 + proportion 0.66667 + } + + // You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between. + // preset-window-heights { } + + default-column-width {} + + // By default focus ring and border are rendered as a solid background rectangle + // behind windows. That is, they will show up through semitransparent windows. + // This is because windows using client-side decorations can have an arbitrary shape. + // + // If you don't like that, you should uncomment `prefer-no-csd` below. + // Niri will draw focus ring and border *around* windows that agree to omit their + // client-side decorations. + // + // Alternatively, you can override it with a window rule called + // `draw-border-with-background`. + + // You can change how the focus ring looks. + focus-ring { + // Uncomment this line to disable the focus ring. + // off + + // How many logical pixels the ring extends out from the windows. + width 4 + + // Colors can be set in a variety of ways: + // - CSS named colors: "red" + // - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa" + // - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others. + + // Color of the ring on the active monitor. + active-color "#7fc8ff" + + // Color of the ring on inactive monitors. + inactive-color "#505050" + + // You can also use gradients. They take precedence over solid colors. + // Gradients are rendered the same as CSS linear-gradient(angle, from, to). + // The angle is the same as in linear-gradient, and is optional, + // defaulting to 180 (top-to-bottom gradient). + // You can use any CSS linear-gradient tool on the web to set these up. + // Changing the color space is also supported, check the wiki for more info. + // + // active-gradient from="#80c8ff" to="#bbddff" angle=45 + + // You can also color the gradient relative to the entire view + // of the workspace, rather than relative to just the window itself. + // To do that, set relative-to="workspace-view". + // + // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" + } + + // You can also add a border. It's similar to the focus ring, but always visible. + border { + // The settings are the same as for the focus ring. + // If you enable the border, you probably want to disable the focus ring. + off + + width 4 + active-color "#ffc87f" + inactive-color "#505050" + + // active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view" + // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" + } + + // Struts shrink the area occupied by windows, similarly to layer-shell panels. + // You can think of them as a kind of outer gaps. They are set in logical pixels. + // Left and right struts will cause the next window to the side to always be visible. + // Top and bottom struts will simply add outer gaps in addition to the area occupied by + // layer-shell panels and regular gaps. + struts { + // left 64 + // right 64 + // top 64 + // bottom 64 + } +} + +// Add lines like this to spawn processes at startup. +// Note that running niri as a session supports xdg-desktop-autostart, +// which may be more convenient to use. +// See the binds section below for more spawn examples. +environment { + DISPLAY ":1" +} +spawn-at-startup "waybar" +spawn-at-startup "mako" +spawn-at-startup "swaybg" "-i" "/home/david/pic/wallpaper/screenbackground.png" +spawn-at-startup "fcitx5" "-d" "--replace" +spawn-at-startup "xwayland-satellite" ":1" + +// Uncomment this line to ask the clients to omit their client-side decorations if possible. +// If the client will specifically ask for CSD, the request will be honored. +// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners. +// This option will also fix border/focus ring drawing behind some semitransparent windows. +// After enabling or disabling this, you need to restart the apps for this to take effect. +// prefer-no-csd + +screenshot-path "~/pic/screenshot%Y-%m-%d-%H-%M-%S.png" + +// You can also set this to null to disable saving screenshots to disk. +// screenshot-path null + +animations { + // Slow down all animations by this factor. Values below 1 speed them up instead. + // slowdown 3.0 +} + +window-rule { + match app-id=r#"^org\.wezfurlong\.wezterm$"# + default-column-width {} +} +window-rule { + match app-id=r#"^org\.keepassxc\.KeePassXC$"# + match app-id=r#"^org\.gnome\.World\.Secrets$"# + + block-out-from "screen-capture" +} +window-rule { + draw-border-with-background false +} + +// Example: enable rounded corners for all windows. +// (This example rule is commented out with a "/-" in front.) +/-window-rule { + geometry-corner-radius 12 + clip-to-geometry true +} + +binds { + Mod+Shift+Slash { show-hotkey-overlay; } + + Mod+T { spawn "ghostty"; } + Mod+Space { spawn "fuzzel"; } + + XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; } + XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; } + XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; } + XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; } + + Mod+Q { close-window; } + + Mod+Left { focus-column-left; } + Mod+Down { focus-window-down; } + Mod+Up { focus-window-up; } + Mod+Right { focus-column-right; } + Mod+H { focus-column-left; } + Mod+J { focus-window-or-workspace-down; } + Mod+K { focus-window-or-workspace-up; } + Mod+L { focus-column-right; } + + Mod+Shift+Left { move-column-left; } + Mod+Shift+Down { move-window-down; } + Mod+Shift+Up { move-window-up; } + Mod+Shift+Right { move-column-right; } + Mod+Shift+H { move-column-left; } + Mod+Shift+J { move-window-down-or-to-workspace-down; } + Mod+Shift+K { move-window-up-or-to-workspace-up; } + Mod+Shift+L { move-column-right; } + + Mod+Home { focus-column-first; } + Mod+End { focus-column-last; } + Mod+Ctrl+Home { move-column-to-first; } + Mod+Ctrl+End { move-column-to-last; } + + Mod+Ctrl+Left { focus-monitor-left; } + Mod+Ctrl+Down { focus-monitor-down; } + Mod+Ctrl+Up { focus-monitor-up; } + Mod+Ctrl+Right { focus-monitor-right; } + Mod+Ctrl+H { focus-monitor-left; } + Mod+Ctrl+J { focus-monitor-down; } + Mod+Ctrl+K { focus-monitor-up; } + Mod+Ctrl+L { focus-monitor-right; } + + Mod+Shift+Ctrl+Left { move-column-to-monitor-left; } + Mod+Shift+Ctrl+Down { move-column-to-monitor-down; } + Mod+Shift+Ctrl+Up { move-column-to-monitor-up; } + Mod+Shift+Ctrl+Right { move-column-to-monitor-right; } + Mod+Shift+Ctrl+H { move-column-to-monitor-left; } + Mod+Shift+Ctrl+J { move-column-to-monitor-down; } + Mod+Shift+Ctrl+K { move-column-to-monitor-up; } + Mod+Shift+Ctrl+L { move-column-to-monitor-right; } + + Mod+Page_Down { focus-workspace-down; } + Mod+Page_Up { focus-workspace-up; } + Mod+U { focus-workspace-down; } + Mod+I { focus-workspace-up; } + Mod+Shift+Page_Down { move-column-to-workspace-down; } + Mod+Shift+Page_Up { move-column-to-workspace-up; } + Mod+Shift+U { move-column-to-workspace-down; } + Mod+Shift+I { move-column-to-workspace-up; } + + Mod+Ctrl+Page_Down { move-workspace-down; } + Mod+Ctrl+Page_Up { move-workspace-up; } + Mod+Ctrl+U { move-workspace-down; } + Mod+Ctrl+I { move-workspace-up; } + + Mod+Shift+WheelScrollDown cooldown-ms=150 { focus-workspace-down; } + Mod+Shift+WheelScrollUp cooldown-ms=150 { focus-workspace-up; } + Mod+WheelScrollDown { focus-column-right; } + Mod+WheelScrollUp { focus-column-left; } + + Mod+1 { focus-workspace 1; } + Mod+2 { focus-workspace 2; } + Mod+3 { focus-workspace 3; } + Mod+4 { focus-workspace 4; } + Mod+5 { focus-workspace 5; } + Mod+6 { focus-workspace 6; } + Mod+7 { focus-workspace 7; } + Mod+8 { focus-workspace 8; } + Mod+9 { focus-workspace 9; } + Mod+Shift+1 { move-column-to-workspace 1; } + Mod+Shift+2 { move-column-to-workspace 2; } + Mod+Shift+3 { move-column-to-workspace 3; } + Mod+Shift+4 { move-column-to-workspace 4; } + Mod+Shift+5 { move-column-to-workspace 5; } + Mod+Shift+6 { move-column-to-workspace 6; } + Mod+Shift+7 { move-column-to-workspace 7; } + Mod+Shift+8 { move-column-to-workspace 8; } + Mod+Shift+9 { move-column-to-workspace 9; } + + Mod+Tab { focus-workspace-previous; } + + Mod+BracketLeft { consume-or-expel-window-left; } + Mod+BracketRight { consume-or-expel-window-right; } + + Mod+Comma { consume-window-into-column; } + + Mod+Period { expel-window-from-column; } + + Mod+R { switch-preset-column-width; } + Mod+Shift+R { switch-preset-window-height; } + Mod+Ctrl+R { reset-window-height; } + Mod+M { maximize-column; } + Mod+Shift+M { fullscreen-window; } + Mod+Z { center-column; } + + Mod+Minus { set-column-width "-10%"; } + Mod+Equal { set-column-width "+10%"; } + + Mod+Shift+Minus { set-window-height "-10%"; } + Mod+Shift+Equal { set-window-height "+10%"; } + + Print { screenshot; } + Ctrl+Print { screenshot-screen; } + Alt+Print { screenshot-window; } + + Mod+Shift+E { quit; } +} diff --git a/users/home-manager/niri/default.nix b/users/home-manager/niri/default.nix new file mode 100644 index 0000000..356dc38 --- /dev/null +++ b/users/home-manager/niri/default.nix @@ -0,0 +1,13 @@ +{ pkgs, ... }: +{ + programs.niri = { + package = pkgs.niri-unstable; + config = builtins.readFile ./config.kdl; + }; + home.packages = with pkgs; [ + mako + swaybg + xwayland-satellite + waybar + ]; +} diff --git a/users/home-manager/zed.nix b/users/home-manager/zed.nix new file mode 100644 index 0000000..a566e6e --- /dev/null +++ b/users/home-manager/zed.nix @@ -0,0 +1,15 @@ +{ ... }: +{ + programs.zed-editor = { + enable = true; + extensions = [ + "nix" + "toml" + "make" + "rust" + ]; + userSettings = { + vim_mode = true; + }; + }; +} diff --git a/users/nh.nix b/users/nh.nix new file mode 100644 index 0000000..02b15ef --- /dev/null +++ b/users/nh.nix @@ -0,0 +1,11 @@ +{ + ... +}: +{ + programs.nh = { + enable = true; + clean.enable = true; + clean.extraArgs = "--keep-since 4d --keep 3"; + flake = ./..; + }; +}