Compare commits
156
Commits
master
..
5b2c6a3fdb
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5b2c6a3fdb
|
||
|
|
3f243e7dac
|
||
|
|
22862a4bec
|
||
|
|
1be908698f
|
||
|
|
bd00472f1b | ||
|
|
807ad51562 | ||
|
|
a986113a60
|
||
|
|
2fb0093206
|
||
|
|
1537ef8486
|
||
|
|
61b4abdd8e
|
||
|
|
679f249092
|
||
|
|
a79986153f
|
||
|
|
5e6f0bf09f
|
||
|
|
c4c77bec1b
|
||
|
|
04a99bdd4a | ||
|
|
df1b32cd60 | ||
|
|
b6598902fb
|
||
|
|
d207c9e3fa
|
||
|
|
77e0ecadd2
|
||
|
|
2bdb4a58e9
|
||
|
|
c09c1748f5
|
||
|
|
03a6cfbb96
|
||
|
|
9281b78cd9
|
||
|
|
9c3698839c
|
||
|
|
1d18bad6fa
|
||
|
|
aeecd99aca
|
||
|
|
f45ab786f9
|
||
|
|
80f25abdd5
|
||
|
|
718d20da06
|
||
|
|
ce4e5e3d50
|
||
|
|
3835443178
|
||
|
|
47b17c70ad
|
||
|
|
bd810a6a2a
|
||
|
|
6cf26a1e18
|
||
|
|
b556847dcf
|
||
|
|
3f06268365
|
||
|
|
b02a17a7d9
|
||
|
|
5ebffd5e41
|
||
|
|
0c9e6b31aa
|
||
|
|
885dca9738
|
||
|
|
08a3195d43
|
||
|
|
d934e358c0
|
||
|
|
7356fbe8f6
|
||
|
|
cae32c1b4f
|
||
|
|
a0ea0dd7f1
|
||
|
|
a42b17d363
|
||
|
|
f970e20730
|
||
|
|
4c34c5c364
|
||
|
|
c4ceb67dfc
|
||
|
|
9706b7954c
|
||
|
|
396db61e5e
|
||
|
|
063cfe0ac0
|
||
|
|
82e9a0e807
|
||
|
|
3304573292
|
||
|
|
26753a5b98
|
||
|
|
51280986ed
|
||
|
|
6a6be514df | ||
|
|
0b7bf06f58
|
||
|
|
c11584e31e
|
||
|
|
6fc5cee147
|
||
|
|
adc82860eb
|
||
|
|
bd9bf6ccc7
|
||
|
|
75bb7846f9
|
||
|
|
7747587e69
|
||
|
|
7c37e7122f
|
||
|
|
02aef91f3a
|
||
|
|
ba0aac7807
|
||
|
|
b27399db29 | ||
|
|
a98c3f84ce | ||
|
|
7069a9e1f0
|
||
|
|
86a972fd61
|
||
|
|
d793b0e635
|
||
|
|
1f034a5ebc
|
||
|
|
b96b2986f0
|
||
|
|
4570dfb4b4
|
||
|
|
88efa96ac7
|
||
|
|
48ce8bdf9d
|
||
|
|
724633d928
|
||
|
|
7eedb9098a
|
||
|
|
6432eb6171
|
||
|
|
4b7d0a0980
|
||
|
|
de77adcfcb
|
||
|
|
16f84aaa04
|
||
|
|
24f013c765
|
||
|
|
a84a509cf8
|
||
|
|
df54654750
|
||
|
|
cddf52d5d3 | ||
|
|
01c5f62314 | ||
|
|
3279001345
|
||
|
|
2ea3557973
|
||
|
|
9cdd54c6e8
|
||
|
|
28bf565203
|
||
|
|
b1df12ae65 | ||
|
|
5912338271 | ||
|
|
a5d2aad596 | ||
|
|
56add43822 | ||
|
|
d524383340 | ||
|
|
51566b7224 | ||
|
|
2d322ab1f2 | ||
|
|
8c39e606e3 | ||
|
|
d275bc88b2 | ||
|
|
3acbf43b4e | ||
|
|
729fe36326 | ||
|
|
530be0cf44 | ||
|
|
6105e157c7 | ||
|
|
4b0e3a61e9 | ||
|
|
680b3cd3d6 | ||
|
|
830336ee06 | ||
|
|
01bc1610bf | ||
|
|
d26818f47a | ||
|
|
ca50e2af2b | ||
|
|
0cc88081d1 | ||
|
|
dee91dd001 | ||
|
|
510e179b78 | ||
|
|
ea39ab9992 | ||
|
|
f2c215460b | ||
|
|
96d83ec1b4 | ||
|
|
a3f6c55b93 | ||
|
|
879ea3474a | ||
|
|
41cf1a5894 | ||
|
|
b294b8c8ee | ||
|
|
e677754de3 | ||
|
|
4f11c8139f | ||
|
|
e46c205fe3 | ||
|
|
290b694877 | ||
|
|
8ad47d16eb | ||
|
|
e3f8430193 | ||
|
|
46d4249637 | ||
|
|
8c1f94d05a | ||
|
|
bac068cf69 | ||
|
|
6cbc8b393d | ||
|
|
ac3eee4bb0 | ||
|
|
045f44e2d2 | ||
|
|
a198789a17 | ||
|
|
7fa285f0cc | ||
|
|
bebf7e8b6d | ||
|
|
6f2c1bed14 | ||
|
|
dfa96985d6 | ||
|
|
2a6196cc70 | ||
|
|
23a0e060ef | ||
|
|
040923c626 | ||
|
|
2c3de69e72 | ||
|
|
8ea1207bb9 | ||
|
|
21fe030dc7 | ||
|
|
f6950c7e78 | ||
|
|
f76b88cf4b | ||
|
|
6e5568e330 | ||
|
|
1308aae228 | ||
|
|
ded07cb14a | ||
|
|
81ab925d88 | ||
|
|
e909e76c9e | ||
|
|
3fc9f416f9 | ||
|
|
c3672ea118 | ||
|
|
1dee7a5769 | ||
|
|
e0a0721dea | ||
|
|
5cad49555e |
+1
-1
@@ -5,7 +5,7 @@ creation_rules:
|
|||||||
key_groups:
|
key_groups:
|
||||||
- age:
|
- age:
|
||||||
- *primary
|
- *primary
|
||||||
- path_regex: host/(Rias|Senko|Inaho|Eclipse)/secrets/.+$
|
- path_regex: host/(Rias|Senko|Eclipse)/secrets/.+$
|
||||||
key_groups:
|
key_groups:
|
||||||
- age:
|
- age:
|
||||||
- *primary
|
- *primary
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
disko.devices = {
|
||||||
|
disk = {
|
||||||
|
my-disk = {
|
||||||
|
device = "/dev/sdb";
|
||||||
|
type = "disk";
|
||||||
|
content = {
|
||||||
|
type = "gpt";
|
||||||
|
partitions = {
|
||||||
|
ESP = {
|
||||||
|
type = "EF00";
|
||||||
|
size = "256M";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "vfat";
|
||||||
|
mountpoint = "/boot";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
swap = {
|
||||||
|
size = "8G";
|
||||||
|
content = {
|
||||||
|
type = "swap";
|
||||||
|
resumeDevice = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
root = {
|
||||||
|
size = "100%";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "ext4";
|
||||||
|
mountpoint = "/";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
{ lib
|
|
||||||
, pkgs
|
|
||||||
, mumble ? pkgs.mumble
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
# PipeWire 1.4.0 removed client-rt.conf, changing how clients negotiate
|
|
||||||
# realtime scheduling. Mumble never adapted, so its PipeWire data-loop
|
|
||||||
# thread stalls mid-negotiation and its own RT watchdog SIGKILLs the
|
|
||||||
# whole process almost immediately on every launch (confirmed via
|
|
||||||
# bpftrace: signal_generate shows Mumble's own "data-loop.0" thread
|
|
||||||
# sending itself SIGKILL). Reproduced identically on both the packaged
|
|
||||||
# 1.5.915 (Qt5) and a from-source 1.6.870 RC (Qt6) build, so it's the
|
|
||||||
# shared PipeWire client integration at fault, not Mumble's UI stack.
|
|
||||||
#
|
|
||||||
# Upstream: https://github.com/mumble-voip/mumble/issues/6780
|
|
||||||
# Bisected there to PipeWire 1.2.7 (last known-good) vs 1.4.1+ (broken).
|
|
||||||
#
|
|
||||||
# Fix: give Mumble an old, compatible libpipewire-0.3.so to dlopen at
|
|
||||||
# runtime. The system's actual PipeWire daemon is untouched (still
|
|
||||||
# whatever version NixOS ships) - only the client library Mumble talks
|
|
||||||
# through is pinned back.
|
|
||||||
pipewireGoodPkgs = import (fetchTarball {
|
|
||||||
url = "https://channels.nixos.org/nixos-24.11/nixexprs.tar.xz";
|
|
||||||
sha256 = "189lwv8l10bm9fnksfkzy05pm86gmziy9z3bdn13zc8d636ylchj"; # nix-prefetch-url --unpack https://channels.nixos.org/nixos-24.11/nixexprs.tar.xz
|
|
||||||
}) { inherit (pkgs) system; };
|
|
||||||
pipewireGood = pipewireGoodPkgs.pipewire;
|
|
||||||
|
|
||||||
# Mumble's own build is Qt5-based; QT_PLUGIN_PATH isn't set by its
|
|
||||||
# wrapper for the platform/sql plugins mumble actually needs when we
|
|
||||||
# bypass that wrapper below, so it has to be supplied explicitly.
|
|
||||||
qt5PluginPath = lib.makeSearchPath "lib/qt-${pkgs.qt5.qtbase.version}/plugins" [
|
|
||||||
pkgs.qt5.qtbase.bin
|
|
||||||
pkgs.qt5.qtsvg.bin
|
|
||||||
pkgs.qt5.qtwayland.bin
|
|
||||||
];
|
|
||||||
in
|
|
||||||
pkgs.symlinkJoin {
|
|
||||||
name = "mumble-pipewire-fixed-${mumble.version}";
|
|
||||||
|
|
||||||
paths = [ mumble ];
|
|
||||||
|
|
||||||
nativeBuildInputs = [ pkgs.makeWrapper ];
|
|
||||||
|
|
||||||
# mumble's own wrapper always prepends its own (broken, too-new)
|
|
||||||
# PipeWire path in front of anything we set, so wrapping it a second
|
|
||||||
# time can't win that ordering fight. Instead we skip straight to the
|
|
||||||
# real unwrapped binary and set env ourselves.
|
|
||||||
postBuild = ''
|
|
||||||
rm -f $out/bin/mumble
|
|
||||||
makeWrapper ${mumble}/bin/.mumble-wrapped $out/bin/mumble \
|
|
||||||
--prefix LD_LIBRARY_PATH : "${pipewireGood}/lib" \
|
|
||||||
--set QT_PLUGIN_PATH "${qt5PluginPath}"
|
|
||||||
'';
|
|
||||||
|
|
||||||
meta = mumble.meta // {
|
|
||||||
description = mumble.meta.description
|
|
||||||
+ " (patched: pinned PipeWire client lib to 1.2.7 to work around SIGKILL-on-launch with PipeWire >=1.4.0, see mumble#6780)";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
Generated
+270
-249
@@ -3,17 +3,15 @@
|
|||||||
"aagl": {
|
"aagl": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": "flake-compat",
|
"flake-compat": "flake-compat",
|
||||||
"nixpkgs": [
|
"nixpkgs": "nixpkgs",
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"rust-overlay": "rust-overlay"
|
"rust-overlay": "rust-overlay"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1789138122,
|
"lastModified": 1772290697,
|
||||||
"narHash": "sha256-mh+ZiGCtHAo0xIi1yaNjHsftfnlWz9JiYwHCyT16yIE=",
|
"narHash": "sha256-MyLNx13P+pv1RszO1rMd3144NEeU/oU4iL+xOTpRoaU=",
|
||||||
"owner": "ezKEa",
|
"owner": "ezKEa",
|
||||||
"repo": "aagl-gtk-on-nix",
|
"repo": "aagl-gtk-on-nix",
|
||||||
"rev": "d82d6d6f66caf4b63fb154e62fad83c627874127",
|
"rev": "dcb53a4cb4cb09ef7f08328428ba559be5b9f01b",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -25,9 +23,7 @@
|
|||||||
"ags": {
|
"ags": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"astal": "astal",
|
"astal": "astal",
|
||||||
"nixpkgs": [
|
"nixpkgs": "nixpkgs_3"
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1744557573,
|
"lastModified": 1744557573,
|
||||||
@@ -64,11 +60,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1784368054,
|
"lastModified": 1772460678,
|
||||||
"narHash": "sha256-zF1iJkBQSDWmRO4/LEeHR1SpKY0lqZaxkoQJpPS9K9U=",
|
"narHash": "sha256-NYaWs8fYJ38IgFld0hGSdT2LEVhrgO8SiRReBjIH7YY=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "aquamarine",
|
"repo": "aquamarine",
|
||||||
"rev": "9b5f14d9483445e766294eb8fbe0b8f370269ed0",
|
"rev": "5d2cb726b16ee349df443f84b64cff53221b6983",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -136,11 +132,11 @@
|
|||||||
"base16-helix": {
|
"base16-helix": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1776754714,
|
"lastModified": 1760703920,
|
||||||
"narHash": "sha256-E3OAK27smtATTmX45uoTSRsVD+Y+ZiVVfgM/tjpbtYg=",
|
"narHash": "sha256-m82fGUYns4uHd+ZTdoLX2vlHikzwzdu2s2rYM2bNwzw=",
|
||||||
"owner": "tinted-theming",
|
"owner": "tinted-theming",
|
||||||
"repo": "base16-helix",
|
"repo": "base16-helix",
|
||||||
"rev": "4d508123037e7851ad36ebf7d9c48b0e9e1eb581",
|
"rev": "d646af9b7d14bff08824538164af99d0c521b185",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -166,34 +162,14 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"disko": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1781152676,
|
|
||||||
"narHash": "sha256-RxWs5ND31KzTG7wvMM+PMfUjyNpmIEr999lqNARaM5o=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "disko",
|
|
||||||
"rev": "ff8702b4de27f72b4c78573dfb89ec74e36abdf1",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "disko",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"firefox-gnome-theme": {
|
"firefox-gnome-theme": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1783570805,
|
"lastModified": 1764873433,
|
||||||
"narHash": "sha256-ptl5aRlCv9/uRSv2u8Hq8UFVFeZ6Q/bT049bpqNgc3w=",
|
"narHash": "sha256-1XPewtGMi+9wN9Ispoluxunw/RwozuTRVuuQOmxzt+A=",
|
||||||
"owner": "rafaelmardojai",
|
"owner": "rafaelmardojai",
|
||||||
"repo": "firefox-gnome-theme",
|
"repo": "firefox-gnome-theme",
|
||||||
"rev": "5602ed62d638142c1ab31dccd01dfbfb28841225",
|
"rev": "f7ffd917ac0d253dbd6a3bf3da06888f57c69f92",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -234,22 +210,6 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-compat_3": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1767039857,
|
|
||||||
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
|
|
||||||
"owner": "edolstra",
|
|
||||||
"repo": "flake-compat",
|
|
||||||
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "edolstra",
|
|
||||||
"repo": "flake-compat",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-parts": {
|
"flake-parts": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs-lib": [
|
"nixpkgs-lib": [
|
||||||
@@ -258,11 +218,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1782949081,
|
"lastModified": 1767609335,
|
||||||
"narHash": "sha256-vp6Y/Grm98ESt6ceOkWiHWyZRDV3J1RID4w+6NWK9yA=",
|
"narHash": "sha256-feveD98mQpptwrAEggBQKJTYbvwwglSbOv53uCfH9PY=",
|
||||||
"owner": "hercules-ci",
|
"owner": "hercules-ci",
|
||||||
"repo": "flake-parts",
|
"repo": "flake-parts",
|
||||||
"rev": "17c9d6cdfc60c64f4ee8d306f9bc0b4ccb51481e",
|
"rev": "250481aafeb741edfe23d29195671c19b36b6dca",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -305,47 +265,47 @@
|
|||||||
"type": "github"
|
"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"
|
||||||
|
}
|
||||||
|
},
|
||||||
"gnome-shell": {
|
"gnome-shell": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"host": "gitlab.gnome.org",
|
"host": "gitlab.gnome.org",
|
||||||
"lastModified": 1776175984,
|
"lastModified": 1767737596,
|
||||||
"narHash": "sha256-RJFlFW8GiMei6oqUGrMkGEvVqOH8U7Q8abc1yK4VKD8=",
|
"narHash": "sha256-eFujfIUQDgWnSJBablOuG+32hCai192yRdrNHTv0a+s=",
|
||||||
"owner": "GNOME",
|
"owner": "GNOME",
|
||||||
"repo": "gnome-shell",
|
"repo": "gnome-shell",
|
||||||
"rev": "e0fdc4c13250e9a9b8ea9594c83925274f4a5dca",
|
"rev": "ef02db02bf0ff342734d525b5767814770d85b49",
|
||||||
"type": "gitlab"
|
"type": "gitlab"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"host": "gitlab.gnome.org",
|
"host": "gitlab.gnome.org",
|
||||||
"owner": "GNOME",
|
"owner": "GNOME",
|
||||||
"ref": "50.1",
|
"ref": "gnome-49",
|
||||||
"repo": "gnome-shell",
|
"repo": "gnome-shell",
|
||||||
"type": "gitlab"
|
"type": "gitlab"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"helix-steel": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"rust-overlay": "rust-overlay_2"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1788213353,
|
|
||||||
"narHash": "sha256-vJ7VgxuM/Dp7vyVlu6EXjP/ES14TALy64jgzyuYZl6g=",
|
|
||||||
"owner": "mattwparas",
|
|
||||||
"repo": "helix",
|
|
||||||
"rev": "ba5b022c1000a0ce28d4ce1d09acdd062a83a020",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "mattwparas",
|
|
||||||
"ref": "steel-event-system",
|
|
||||||
"repo": "helix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"home-manager": {
|
"home-manager": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
@@ -353,11 +313,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1789320570,
|
"lastModified": 1773681856,
|
||||||
"narHash": "sha256-1Js4AJiWLV7U1SF3ok0J2tKbBEJYE5YpElGU+7fMbfo=",
|
"narHash": "sha256-+bRqxoFCJFO9ZTFhcCkzNXbDT3b8AEk88fyjB7Is6eo=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "87b3c74df02a2b2e691a24f3c82774f48a70c1bd",
|
"rev": "57d5560ee92a424fb71fde800acd6ed2c725dfce",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -382,11 +342,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1776511930,
|
"lastModified": 1772461003,
|
||||||
"narHash": "sha256-fCpwFiTW0rT7oKJqr3cqHMnkwypSwQKpbtUEtxdkgrM=",
|
"narHash": "sha256-pVICsV7FtcEeVwg5y/LFh3XFUkVJninm/P1j/JHzEbM=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprcursor",
|
"repo": "hyprcursor",
|
||||||
"rev": "39435900785d0c560c6ae8777d29f28617d031ef",
|
"rev": "b62396457b9cfe2ebf24fe05404b09d2a40f8ed7",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -411,11 +371,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1782566056,
|
"lastModified": 1772461523,
|
||||||
"narHash": "sha256-haEZcHzYrePnjFOYSWTbxm/Nrla0aPslJfmvdCvqtVc=",
|
"narHash": "sha256-mI6A51do+hEUzeJKk9YSWfVHdI/SEEIBi2tp5Whq5mI=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprgraphics",
|
"repo": "hyprgraphics",
|
||||||
"rev": "c6e7b9f673f4360bc813d3dc75028f75ee88d3f8",
|
"rev": "7d63c04b4a2dd5e59ef943b4b143f46e713df804",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -435,22 +395,22 @@
|
|||||||
"hyprutils": "hyprutils",
|
"hyprutils": "hyprutils",
|
||||||
"hyprwayland-scanner": "hyprwayland-scanner",
|
"hyprwayland-scanner": "hyprwayland-scanner",
|
||||||
"hyprwire": "hyprwire",
|
"hyprwire": "hyprwire",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs_4",
|
||||||
"pre-commit-hooks": "pre-commit-hooks",
|
"pre-commit-hooks": "pre-commit-hooks",
|
||||||
"systems": "systems",
|
"systems": "systems",
|
||||||
"xdph": "xdph"
|
"xdph": "xdph"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785170029,
|
"lastModified": 1773149218,
|
||||||
"narHash": "sha256-8CKDx282HhxlD1pwXPnC4uK29Abn1Jsnh7LgPzeIXxI=",
|
"narHash": "sha256-m5Ewi+rgn18qPP54Um4O2zwZ02oiomlZssHvXYEUv3U=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "Hyprland",
|
"repo": "Hyprland",
|
||||||
"rev": "5c9377c15f85c50648f35ca5a213754f95b93ca0",
|
"rev": "59f9f2688ac508a0584d1462151195a6c4992f99",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"ref": "v0.56.1",
|
"ref": "v0.54.2-b",
|
||||||
"repo": "Hyprland",
|
"repo": "Hyprland",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
@@ -488,11 +448,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1784196523,
|
"lastModified": 1772467975,
|
||||||
"narHash": "sha256-ahtKMGXFJdlQNhatQm1+BBU/pGfGYnAqQt3vWvq4p8s=",
|
"narHash": "sha256-kipyuDBxrZq+beYpZqWzGvFWm4QbayW9agAvi94vDXY=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprland-guiutils",
|
"repo": "hyprland-guiutils",
|
||||||
"rev": "a6ccb6cb112ed5a244c0191fb972347ecfa893e0",
|
"rev": "5e1c6b9025aaf4d578f3eff7c0eb1f0c197a9507",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -518,11 +478,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1788563182,
|
"lastModified": 1771865848,
|
||||||
"narHash": "sha256-e2Q7i5T+iQY0o/uxFNnXxWpXZ1e5f6VV4eHdKk7l6kc=",
|
"narHash": "sha256-xwNa+1D8WPsDnJtUofDrtyDCZKZotbUymzV/R5s+M0I=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprland-plugins",
|
"repo": "hyprland-plugins",
|
||||||
"rev": "722f15a77768eab13f01f5e5dce024bd2f61f270",
|
"rev": "b85a56b9531013c79f2f3846fd6ee2ff014b8960",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -572,11 +532,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1777320127,
|
"lastModified": 1772459629,
|
||||||
"narHash": "sha256-Qu+Wf2Bp5qUjyn2YpZNq8a7JyzTGowhT1knrwE38a9U=",
|
"narHash": "sha256-/iwvNUYShmmnwmz/czEUh6+0eF5vCMv0xtDW0STPIuM=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprlang",
|
"repo": "hyprlang",
|
||||||
"rev": "090117506ddc3d7f26e650ff344d378c2ec329cc",
|
"rev": "7615ee388de18239a4ab1400946f3d0e498a8186",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -624,11 +584,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1782554491,
|
"lastModified": 1772462885,
|
||||||
"narHash": "sha256-+p3MlyN/nqRefcf2IckPlGRUn9+hielqpS9XClbLleM=",
|
"narHash": "sha256-5pHXrQK9zasMnIo6yME6EOXmWGFMSnCITcfKshhKJ9I=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprtoolkit",
|
"repo": "hyprtoolkit",
|
||||||
"rev": "bdba25ced39ea39ab004a8f31593ba0b0ff1ca35",
|
"rev": "9af245a69fa6b286b88ddfc340afd288e00a6998",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -649,11 +609,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1784323413,
|
"lastModified": 1772459870,
|
||||||
"narHash": "sha256-XnAVV+H4f8Xdv0yZcSwJ5kCjLyE8fHxPeLX6a3HSrAU=",
|
"narHash": "sha256-xxkK2Cvqxpf/4UGcJ/TyCwrvmiNWsKsJfFzHMp2bxis=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprutils",
|
"repo": "hyprutils",
|
||||||
"rev": "5f03477ab3a005ff27c527486f551883535aea2f",
|
"rev": "e63f3a79334dec49f8eb1691f66f18115df04085",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -674,11 +634,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1777159683,
|
"lastModified": 1772459835,
|
||||||
"narHash": "sha256-Jxixw6wZphUp+nHYxOKUYSckL17QMBx2d5Zp0rJHr1g=",
|
"narHash": "sha256-978jRz/y/9TKmZb/qD4lEYHCQGHpEXGqy+8X2lFZsak=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprwayland-scanner",
|
"repo": "hyprwayland-scanner",
|
||||||
"rev": "b8632713a6beaf28b56f2a7b0ab2fb7088dbb404",
|
"rev": "0a692d4a645165eebd65f109146b8861e3a925e7",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -703,11 +663,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1778410714,
|
"lastModified": 1772463520,
|
||||||
"narHash": "sha256-o6RzFj4nJXaPRY7EM01siuCQeT41RfwwmcmFQqwFJJg=",
|
"narHash": "sha256-GIjASzYnV4fK19HnyJKmHyqyxHxIpjusK9foEA4Yo+4=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprwire",
|
"repo": "hyprwire",
|
||||||
"rev": "85148a8e612808cf5ddb25d0b3c5840f3498a7dc",
|
"rev": "4e1933ae5602b350c5b6633f5c932549c9b8aca2",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -718,15 +678,15 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1784356753,
|
"lastModified": 1770841267,
|
||||||
"narHash": "sha256-12KrbMiWLcf8m7pCvAtZh1ZrgF85ZXDXvfR/fWTKy84=",
|
"narHash": "sha256-9xejG0KoqsoKEGp2kVbXRlEYtFFcDTHjidiuX8hGO44=",
|
||||||
"owner": "NixOS",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "61b7c44c4073f0b827768aff0049561b5110ea5a",
|
"rev": "ec7c70d12ce2fc37cb92aff673dcdca89d187bae",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"owner": "nixos",
|
||||||
"ref": "nixos-unstable",
|
"ref": "nixos-unstable",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
@@ -734,43 +694,59 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-pinned": {
|
"nixpkgs-pinned": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1779971959,
|
"lastModified": 1764517877,
|
||||||
"narHash": "sha256-R5nauXyqyfRUFiZycFFZdkF7wl6eaUpPLst35+2nJQY=",
|
"narHash": "sha256-pp3uT4hHijIC8JUK5MEqeAWmParJrgBVzHLNfJDZxg4=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "ec942ba042dad5ef097e2ef3a3effc034241f011",
|
"rev": "2d293cbfa5a793b4c50d17c05ef9e385b90edf6c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "ec942ba042dad5ef097e2ef3a3effc034241f011",
|
"rev": "2d293cbfa5a793b4c50d17c05ef9e385b90edf6c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs-stable": {
|
"nixpkgs-stable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1789114715,
|
"lastModified": 1773610124,
|
||||||
"narHash": "sha256-ugpsyk3NM2s87vXfUiIIiibbJ4Pp0JPS5p/3mfs+q+c=",
|
"narHash": "sha256-EpC7ELOKmb+xXaqpK5ZRpJ5g9fxxg6tWny7/rUBfrwk=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "21a67dc470149f337cecafbe965d8d252a390518",
|
"rev": "9fe1300f4360e13f39d6d1d006e54fd5093e9ad5",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"ref": "nixos-26.05",
|
"ref": "nixos-25.11",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1789149629,
|
"lastModified": 1744536153,
|
||||||
"narHash": "sha256-H6GwaZzZf+4npqv0tph94w9tZddSjFjmQrVsW0z78uk=",
|
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_3": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1743583204,
|
||||||
|
"narHash": "sha256-F7n4+KOIfWrwoQjXrL2wD9RhFYLs2/GGe/MQY1sSdlE=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "eaad089433ca2bb662274377d33df3d0e51ef28b",
|
"rev": "2c8d3f48d33929642c1c12cd243df4cc7d2ce434",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -780,6 +756,86 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nixpkgs_4": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1772542754,
|
||||||
|
"narHash": "sha256-WGV2hy+VIeQsYXpsLjdr4GvHv5eECMISX1zKLTedhdg=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "8c809a146a140c5c8806f13399592dbcb1bb5dc4",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_5": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1773646010,
|
||||||
|
"narHash": "sha256-iYrs97hS7p5u4lQzuNWzuALGIOdkPXvjz7bviiBjUu8=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "5b2c2d84341b2afb5647081c1386a80d7a8d8605",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_6": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1773507054,
|
||||||
|
"narHash": "sha256-Q8U5VXgrcxmCxPtCCJCIZkcAX3FCZwGh1GNVIXxMND0=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "e80236013dc8b77aa49ca90e7a12d86f5d8d64c9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_7": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1767767207,
|
||||||
|
"narHash": "sha256-Mj3d3PfwltLmukFal5i3fFt27L6NiKXdBezC1EBuZs4=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "5912c1772a44e31bf1c63c0390b90501e5026886",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_8": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1772419343,
|
||||||
|
"narHash": "sha256-QU3Cd5DJH7dHyMnGEFfPcZDaCAsJQ6tUD+JuUsYqnKU=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "93178f6a00c22fcdee1c6f5f9ab92f2072072ea9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nur": {
|
"nur": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-parts": [
|
"flake-parts": [
|
||||||
@@ -792,11 +848,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785549842,
|
"lastModified": 1767810917,
|
||||||
"narHash": "sha256-DCwBZmGsySF7oKGTRgEv2HvpxVXkHT+38VhTM76k0B4=",
|
"narHash": "sha256-ZKqhk772+v/bujjhla9VABwcvz+hB2IaRyeLT6CFnT0=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "NUR",
|
"repo": "NUR",
|
||||||
"rev": "a9f987b57594e845e3e5cdd423b9a70846d70308",
|
"rev": "dead29c804adc928d3a69dfe7f9f12d0eec1f1a4",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -808,17 +864,18 @@
|
|||||||
"pre-commit-hooks": {
|
"pre-commit-hooks": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": "flake-compat_2",
|
"flake-compat": "flake-compat_2",
|
||||||
|
"gitignore": "gitignore",
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"hyprland",
|
"hyprland",
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1784288435,
|
"lastModified": 1772024342,
|
||||||
"narHash": "sha256-ReRHaLgr/uVqdD8afFSn+myXIfpHeOhP0yYe0TJqAA8=",
|
"narHash": "sha256-+eXlIc4/7dE6EcPs9a2DaSY3fTA9AE526hGqkNID3Wg=",
|
||||||
"owner": "cachix",
|
"owner": "cachix",
|
||||||
"repo": "git-hooks.nix",
|
"repo": "git-hooks.nix",
|
||||||
"rev": "43b3c1ab9d40fb1dbb008f451988a91e375825e9",
|
"rev": "6e34e97ed9788b17796ee43ccdbaf871a5c2b476",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -831,34 +888,45 @@
|
|||||||
"inputs": {
|
"inputs": {
|
||||||
"aagl": "aagl",
|
"aagl": "aagl",
|
||||||
"ags": "ags",
|
"ags": "ags",
|
||||||
"disko": "disko",
|
|
||||||
"helix-steel": "helix-steel",
|
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"hyprland": "hyprland",
|
"hyprland": "hyprland",
|
||||||
"hyprland-plugins": "hyprland-plugins",
|
"hyprland-plugins": "hyprland-plugins",
|
||||||
"nixpkgs": "nixpkgs_2",
|
"nixpkgs": "nixpkgs_5",
|
||||||
"nixpkgs-pinned": "nixpkgs-pinned",
|
"nixpkgs-pinned": "nixpkgs-pinned",
|
||||||
"nixpkgs-stable": "nixpkgs-stable",
|
"nixpkgs-stable": "nixpkgs-stable",
|
||||||
|
"russia-blocked-geoip": "russia-blocked-geoip",
|
||||||
"sops-nix": "sops-nix",
|
"sops-nix": "sops-nix",
|
||||||
"stylix": "stylix",
|
"stylix": "stylix",
|
||||||
"waybar": "waybar",
|
"yazi": "yazi"
|
||||||
"yazi": "yazi",
|
}
|
||||||
"yazi-plugins": "yazi-plugins"
|
},
|
||||||
|
"russia-blocked-geoip": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1773677447,
|
||||||
|
"narHash": "sha256-jo3BJ7iHaicSyrljzIOQu6Ce4ALfpZSgYVNFFcZuMq0=",
|
||||||
|
"owner": "runetfreedom",
|
||||||
|
"repo": "russia-blocked-geoip",
|
||||||
|
"rev": "f6fa2c8e8fb5d29ba674cd809e58a4b25c99e9bf",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "runetfreedom",
|
||||||
|
"ref": "release",
|
||||||
|
"repo": "russia-blocked-geoip",
|
||||||
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rust-overlay": {
|
"rust-overlay": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": "nixpkgs_2"
|
||||||
"aagl",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785476452,
|
"lastModified": 1770952264,
|
||||||
"narHash": "sha256-/CXwCFPS41rb/JI2VitKCgVK6V5E6/sfw5ke3B9zyVQ=",
|
"narHash": "sha256-CjymNrJZWBtpavyuTkfPVPaZkwzIzGaf0E/3WgcwM14=",
|
||||||
"owner": "oxalica",
|
"owner": "oxalica",
|
||||||
"repo": "rust-overlay",
|
"repo": "rust-overlay",
|
||||||
"rev": "6ef009bf4c4873cdc1a621826722bdea7c03e62c",
|
"rev": "ec6a3d5cdf14bb5a1dd03652bd3f6351004d2188",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -868,27 +936,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rust-overlay_2": {
|
"rust-overlay_2": {
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"helix-steel",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1775358767,
|
|
||||||
"narHash": "sha256-f2eC+WIfhjevCPQILuV08i/kmKZzYZpUvkom/33VxCA=",
|
|
||||||
"owner": "oxalica",
|
|
||||||
"repo": "rust-overlay",
|
|
||||||
"rev": "20fd44bc663daa53a2575e01293e24e681d62244",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "oxalica",
|
|
||||||
"repo": "rust-overlay",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"rust-overlay_3": {
|
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"yazi",
|
"yazi",
|
||||||
@@ -896,11 +943,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1783320166,
|
"lastModified": 1772420823,
|
||||||
"narHash": "sha256-l7C/OsjcnWDOk2K3ssj+SBduwL67LashjBqis9+t468=",
|
"narHash": "sha256-q3oVwz1Rx41D1D+F6vg41kpOkk3Zi3KwnkHEZp7DCGs=",
|
||||||
"owner": "oxalica",
|
"owner": "oxalica",
|
||||||
"repo": "rust-overlay",
|
"repo": "rust-overlay",
|
||||||
"rev": "20ee15370c9256669d66968b89ee20a4b0a4e673",
|
"rev": "458eea8d905c609e9d889423e6b8a1c7bc2f792c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -911,16 +958,14 @@
|
|||||||
},
|
},
|
||||||
"sops-nix": {
|
"sops-nix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": "nixpkgs_6"
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1788914643,
|
"lastModified": 1773550941,
|
||||||
"narHash": "sha256-4GuMPW90JSxXWDPUB9M+1m7fYbe3H0apOd86/zBQ2Kw=",
|
"narHash": "sha256-wa/++bL2QeMUreNFBZEWluQfOYB0MnQIeGNMuaX9sfs=",
|
||||||
"owner": "Mic92",
|
"owner": "Mic92",
|
||||||
"repo": "sops-nix",
|
"repo": "sops-nix",
|
||||||
"rev": "13616fff713a9f94055c66f15687ebdc17a335df",
|
"rev": "c469b6885f0dcd5c7c56bd935a0f08dbcd9e79e1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -938,22 +983,21 @@
|
|||||||
"firefox-gnome-theme": "firefox-gnome-theme",
|
"firefox-gnome-theme": "firefox-gnome-theme",
|
||||||
"flake-parts": "flake-parts",
|
"flake-parts": "flake-parts",
|
||||||
"gnome-shell": "gnome-shell",
|
"gnome-shell": "gnome-shell",
|
||||||
"nixpkgs": [
|
"nixpkgs": "nixpkgs_7",
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"nur": "nur",
|
"nur": "nur",
|
||||||
"systems": "systems_2",
|
"systems": "systems_2",
|
||||||
|
"tinted-foot": "tinted-foot",
|
||||||
"tinted-kitty": "tinted-kitty",
|
"tinted-kitty": "tinted-kitty",
|
||||||
"tinted-schemes": "tinted-schemes",
|
"tinted-schemes": "tinted-schemes",
|
||||||
"tinted-tmux": "tinted-tmux",
|
"tinted-tmux": "tinted-tmux",
|
||||||
"tinted-zed": "tinted-zed"
|
"tinted-zed": "tinted-zed"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1787771653,
|
"lastModified": 1772296853,
|
||||||
"narHash": "sha256-DkkJSBOXWV/mja5Vy8az5g1KpZlsbUwlmH0BsQhowaQ=",
|
"narHash": "sha256-pAtzPsgHRKw/2Kv8HgAjSJg450FDldHPWsP3AKG/Xj0=",
|
||||||
"owner": "danth",
|
"owner": "danth",
|
||||||
"repo": "stylix",
|
"repo": "stylix",
|
||||||
"rev": "5e3809851f486e7fc7e84b40f174c74b60ecc784",
|
"rev": "c4b8e80a1020e09a1f081ad0f98ce804a6e85acf",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -979,16 +1023,15 @@
|
|||||||
},
|
},
|
||||||
"systems_2": {
|
"systems_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1774449309,
|
"lastModified": 1681028828,
|
||||||
"narHash": "sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w=",
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
"owner": "nix-systems",
|
"owner": "nix-systems",
|
||||||
"repo": "default",
|
"repo": "default",
|
||||||
"rev": "c29398b59d2048c4ab79345812849c9bd15e9150",
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nix-systems",
|
"owner": "nix-systems",
|
||||||
"ref": "future-26.11",
|
|
||||||
"repo": "default",
|
"repo": "default",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
@@ -1008,6 +1051,23 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"tinted-foot": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1726913040,
|
||||||
|
"narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=",
|
||||||
|
"owner": "tinted-theming",
|
||||||
|
"repo": "tinted-foot",
|
||||||
|
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "tinted-theming",
|
||||||
|
"repo": "tinted-foot",
|
||||||
|
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"tinted-kitty": {
|
"tinted-kitty": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
@@ -1027,11 +1087,11 @@
|
|||||||
"tinted-schemes": {
|
"tinted-schemes": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785153830,
|
"lastModified": 1767710407,
|
||||||
"narHash": "sha256-fNdfCTeCXU3tZG3TMincd+u68qBHQgCr2Ljr/M1mWP0=",
|
"narHash": "sha256-+W1EB79Jl0/gm4JqmO0Nuc5C7hRdp4vfsV/VdzI+des=",
|
||||||
"owner": "tinted-theming",
|
"owner": "tinted-theming",
|
||||||
"repo": "schemes",
|
"repo": "schemes",
|
||||||
"rev": "9bd28ed313560db3c5b605c63bc4e309e78e3fc8",
|
"rev": "2800e2b8ac90f678d7e4acebe4fa253f602e05b2",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1043,11 +1103,11 @@
|
|||||||
"tinted-tmux": {
|
"tinted-tmux": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785031658,
|
"lastModified": 1767489635,
|
||||||
"narHash": "sha256-mZp9O2LjzdMzlqQF3l3fjqsuPBzXy+1qTfBEUGjTlpk=",
|
"narHash": "sha256-e6nnFnWXKBCJjCv4QG4bbcouJ6y3yeT70V9MofL32lU=",
|
||||||
"owner": "tinted-theming",
|
"owner": "tinted-theming",
|
||||||
"repo": "tinted-tmux",
|
"repo": "tinted-tmux",
|
||||||
"rev": "5d2c67f61ea7af36f16865ab6d541cdba41dc257",
|
"rev": "3c32729ccae99be44fe8a125d20be06f8d7d8184",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1059,11 +1119,11 @@
|
|||||||
"tinted-zed": {
|
"tinted-zed": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785030526,
|
"lastModified": 1767488740,
|
||||||
"narHash": "sha256-klZf8UviewRkxuu74Bhbq6tqy7oxebQC7UVRWbbtQxU=",
|
"narHash": "sha256-wVOj0qyil8m+ouSsVZcNjl5ZR+1GdOOAooAatQXHbuU=",
|
||||||
"owner": "tinted-theming",
|
"owner": "tinted-theming",
|
||||||
"repo": "base16-zed",
|
"repo": "base16-zed",
|
||||||
"rev": "16f5a8adf4a6b1310d0a61ab172de963e8f76a02",
|
"rev": "11abb0b282ad3786a2aae088d3a01c60916f2e40",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1072,27 +1132,6 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"waybar": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-compat": "flake-compat_3",
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1789627973,
|
|
||||||
"narHash": "sha256-OJBVQSIpW0Ozb3czGP3+TQyDC5BBqMQtx2asPsspFHo=",
|
|
||||||
"owner": "Alexays",
|
|
||||||
"repo": "Waybar",
|
|
||||||
"rev": "1687ec724a89756e79371784a2ba3f9700f8e5c6",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "Alexays",
|
|
||||||
"repo": "Waybar",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xdph": {
|
"xdph": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"hyprland-protocols": [
|
"hyprland-protocols": [
|
||||||
@@ -1121,11 +1160,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1784371182,
|
"lastModified": 1772476586,
|
||||||
"narHash": "sha256-S8A1lezEalltWcCp3gAic5lssS0xTSISK6fKODefhOk=",
|
"narHash": "sha256-N/ZwsRLULLpBP5ecvAUzNq8E/CgLRwPwSrHyY3xB5KM=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "xdg-desktop-portal-hyprland",
|
"repo": "xdg-desktop-portal-hyprland",
|
||||||
"rev": "08d99f727944dd15e4740090305e31c5fb92a50a",
|
"rev": "eb6c02a2ead882f3474f3d7f2fbe966b64ed5110",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1137,17 +1176,15 @@
|
|||||||
"yazi": {
|
"yazi": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-utils": "flake-utils",
|
"flake-utils": "flake-utils",
|
||||||
"nixpkgs": [
|
"nixpkgs": "nixpkgs_8",
|
||||||
"nixpkgs"
|
"rust-overlay": "rust-overlay_2"
|
||||||
],
|
|
||||||
"rust-overlay": "rust-overlay_3"
|
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1789171366,
|
"lastModified": 1773638943,
|
||||||
"narHash": "sha256-b7B5VQC96NJx0/q5pTVWqgGjyCiO0Cz1aPfVJcBXLfA=",
|
"narHash": "sha256-TgGuoRB28Q7IeHupfLZ/NFeztWgXS8H0HkPMy5Neb4c=",
|
||||||
"owner": "sxyazi",
|
"owner": "sxyazi",
|
||||||
"repo": "yazi",
|
"repo": "yazi",
|
||||||
"rev": "b8973fb4c2b9b184aad03cfc717c1fefe4140c40",
|
"rev": "de01a56ac5a566ecb4804659a5ecb413a9e3734f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1155,22 +1192,6 @@
|
|||||||
"repo": "yazi",
|
"repo": "yazi",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"yazi-plugins": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1788955781,
|
|
||||||
"narHash": "sha256-kwf9+KXOL5JXGDoEGdtwq+JujP8GVoOwDgz76FBM3xk=",
|
|
||||||
"owner": "yazi-rs",
|
|
||||||
"repo": "plugins",
|
|
||||||
"rev": "58c4f4e2f4835cc9bf6751f39e3f7c574fc7f55a",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "yazi-rs",
|
|
||||||
"repo": "plugins",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": "root",
|
"root": "root",
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
"https://yazi.cachix.org"
|
"https://yazi.cachix.org"
|
||||||
];
|
];
|
||||||
extra-trusted-public-keys = [
|
extra-trusted-public-keys = [
|
||||||
"main:tR2gNhCBJHKAlVgohPNHBhGnWL55tB8SxXmMWJe5lo8="
|
"main:kpwMe+9BsGJ/IUb7i3iadaV38y5/Yuqoct0mf7wI9ds="
|
||||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||||
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||||
"ezkea.cachix.org-1:ioBmUbJTZIKsHmWWXPe1FSFbeVe+afhfgqgTSNd34eI="
|
"ezkea.cachix.org-1:ioBmUbJTZIKsHmWWXPe1FSFbeVe+afhfgqgTSNd34eI="
|
||||||
@@ -19,24 +19,19 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
aagl = {
|
aagl.url = "github:ezKEa/aagl-gtk-on-nix";
|
||||||
url = "github:ezKEa/aagl-gtk-on-nix";
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.11";
|
||||||
};
|
nixpkgs-pinned.url = "github:nixos/nixpkgs/2d293cbfa5a793b4c50d17c05ef9e385b90edf6c";
|
||||||
|
sops-nix.url = "github:Mic92/sops-nix";
|
||||||
|
stylix.url = "github:danth/stylix";
|
||||||
|
ags.url = "github:Aylur/ags/3ed9737bdbc8fc7a7c7ceef2165c9109f336bff6";
|
||||||
|
yazi.url = "github:sxyazi/yazi";
|
||||||
|
|
||||||
ags = {
|
hyprland.url = "github:hyprwm/Hyprland/v0.54.2-b";
|
||||||
url = "github:Aylur/ags/3ed9737bdbc8fc7a7c7ceef2165c9109f336bff6";
|
hyprland-plugins = {
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
url = "github:hyprwm/hyprland-plugins";
|
||||||
};
|
inputs.hyprland.follows = "hyprland";
|
||||||
|
|
||||||
disko = {
|
|
||||||
url = "github:nix-community/disko";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
helix-steel = {
|
|
||||||
url = "github:mattwparas/helix/steel-event-system";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
home-manager = {
|
home-manager = {
|
||||||
@@ -44,45 +39,8 @@
|
|||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
hyprland = {
|
russia-blocked-geoip = {
|
||||||
url = "github:hyprwm/Hyprland/v0.56.1";
|
url = "github:runetfreedom/russia-blocked-geoip/release";
|
||||||
# inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
hyprland-plugins = {
|
|
||||||
url = "github:hyprwm/hyprland-plugins";
|
|
||||||
inputs = {
|
|
||||||
hyprland.follows = "hyprland";
|
|
||||||
# nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
|
||||||
nixpkgs-pinned.url = "github:nixos/nixpkgs/ec942ba042dad5ef097e2ef3a3effc034241f011";
|
|
||||||
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-26.05";
|
|
||||||
|
|
||||||
sops-nix = {
|
|
||||||
url = "github:Mic92/sops-nix";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
stylix = {
|
|
||||||
url = "github:danth/stylix";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
waybar = {
|
|
||||||
url = "github:Alexays/Waybar";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
yazi = {
|
|
||||||
url = "github:sxyazi/yazi";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
yazi-plugins = {
|
|
||||||
url = "github:yazi-rs/plugins";
|
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -104,7 +62,6 @@
|
|||||||
Senko = mkHost "Senko";
|
Senko = mkHost "Senko";
|
||||||
Eclipse = mkHost "Eclipse";
|
Eclipse = mkHost "Eclipse";
|
||||||
Impreza = mkHost "Impreza";
|
Impreza = mkHost "Impreza";
|
||||||
Inaho = mkHost "Inaho";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,40 +1,27 @@
|
|||||||
{ pkgs, lib, ... }:
|
{ pkgs, lib, ... }: {
|
||||||
let
|
wayland.windowManager.hyprland = let
|
||||||
hyprLua = import ../../../modules/user/hyprland/lua.nix { inherit lib; };
|
wallpaper = pkgs.fetchurl {
|
||||||
wallpaper = pkgs.fetchurl {
|
name = "miku_wallpaper.jpg";
|
||||||
name = "miku_wallpaper.jpg";
|
url = "https://c.lair.moe/pub/miku_wallpaper.jpeg?raw";
|
||||||
url = "https://c.lair.moe/pub/miku_wallpaper.jpeg?raw";
|
hash = "sha256-inK4X5KzQk5FHwDw2DYy43nm7XtXlC6I0S1PkYUv+3w=";
|
||||||
hash = "sha256-inK4X5KzQk5FHwDw2DYy43nm7XtXlC6I0S1PkYUv+3w=";
|
};
|
||||||
};
|
in {
|
||||||
in {
|
settings = {
|
||||||
wayland.windowManager.hyprland.settings = {
|
monitor = [
|
||||||
monitor = [
|
"DP-3 , 1920x1080@165, 0x0 , 1"
|
||||||
{
|
"HDMI-A-1, preferred , -1080x0, 1, transform, 1"
|
||||||
output = "DP-3";
|
];
|
||||||
mode = "1920x1080@165";
|
|
||||||
position = "0x0";
|
|
||||||
scale = 1;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
output = "HDMI-A-1";
|
|
||||||
mode = "preferred";
|
|
||||||
position = "-1080x0";
|
|
||||||
scale = 1;
|
|
||||||
transform = 1;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
workspace_rule = [
|
workspace = [
|
||||||
{ workspace = "1"; monitor = "DP-3"; default = true; }
|
"1, monitor:DP-3, default:true"
|
||||||
{ workspace = "10"; monitor = "HDMI-A-1"; default = true; }
|
"10, monitor:HDMI-A-1, default:true"
|
||||||
];
|
];
|
||||||
|
|
||||||
on = [
|
exec-once = [
|
||||||
(hyprLua.onStart [
|
"hyprctl dispatch workspace 1"
|
||||||
"hyprctl dispatch 'hl.dsp.focus({ workspace = 1 })'"
|
|
||||||
"${lib.getExe pkgs.swww} img -o HDMI-A-1 ${wallpaper}"
|
"${lib.getExe pkgs.swww} img -o HDMI-A-1 ${wallpaper}"
|
||||||
"${lib.getExe pkgs.linux-wallpaperengine} ~/.local/share/wpe/wallpaper --assets-dir ~/.local/share/wpe/assets --screen-root DP-3 --noautomute"
|
"${lib.getExe pkgs.linux-wallpaperengine} ~/.local/share/wpe/wallpaper --assets-dir ~/.local/share/wpe/assets --screen-root DP-3 --noautomute"
|
||||||
])
|
];
|
||||||
];
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
File diff suppressed because one or more lines are too long
@@ -1,15 +0,0 @@
|
|||||||
{ pkgs, lib, ... }:
|
|
||||||
let
|
|
||||||
hyprLua = import ../../../modules/user/hyprland/lua.nix { inherit lib; };
|
|
||||||
wallpaper = pkgs.fetchurl {
|
|
||||||
name = "miku_wallpaper.jpg";
|
|
||||||
url = "https://c.lair.moe/pub/miku_wallpaper.jpeg?raw";
|
|
||||||
hash = "sha256-inK4X5KzQk5FHwDw2DYy43nm7XtXlC6I0S1PkYUv+3w=";
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
wayland.windowManager.hyprland.settings.on = [
|
|
||||||
(hyprLua.onStart [
|
|
||||||
"${lib.getExe pkgs.swww} img -o eDP-1 ${wallpaper}"
|
|
||||||
])
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
ThinkPad T480
|
|
||||||
|
|
||||||
CPU: Intel i5-8350U
|
|
||||||
RAM: 16GB planned (8GB stock + 8GB SO-DIMM)
|
|
||||||
SSD: 256GB NVMe stock; disko assumes `/dev/nvme0n1`
|
|
||||||
|
|
||||||
## Installation notes
|
|
||||||
|
|
||||||
This host uses `disko` with GPT + unencrypted EFI System Partition + LUKS + Btrfs subvolumes.
|
|
||||||
|
|
||||||
Before formatting, verify the target disk:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
lsblk
|
|
||||||
```
|
|
||||||
|
|
||||||
If the internal drive is not `/dev/nvme0n1`, edit `host/Inaho/disko.nix` first.
|
|
||||||
For a 2.5" SATA SSD/HDD it will usually be `/dev/sda`.
|
|
||||||
|
|
||||||
Then partition, format and mount:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo nix --experimental-features "nix-command flakes" run github:nix-community/disko/latest -- \
|
|
||||||
--mode destroy,format,mount ./host/Inaho/disko.nix
|
|
||||||
```
|
|
||||||
|
|
||||||
This destroys the selected disk.
|
|
||||||
|
|
||||||
After that install the host:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo nixos-install --flake .#Inaho
|
|
||||||
```
|
|
||||||
|
|
||||||
The flake contains a new `disko` input. If `flake.lock` has not been updated yet, run:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
nix flake lock --update-input disko
|
|
||||||
```
|
|
||||||
|
|
||||||
## After first boot
|
|
||||||
|
|
||||||
Update firmware, especially BIOS/UEFI and Thunderbolt, when batteries are installed and charged:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo fwupdmgr refresh
|
|
||||||
sudo fwupdmgr get-updates
|
|
||||||
sudo fwupdmgr update
|
|
||||||
```
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
{ config, pkgs, pkgs-stable, pkgs-pinned, lib, inputs, ... }: {
|
|
||||||
imports = [
|
|
||||||
inputs.disko.nixosModules.disko
|
|
||||||
./disko.nix
|
|
||||||
./secrets/secrets.nix
|
|
||||||
./modules/grub.nix
|
|
||||||
./modules/syncthing.nix
|
|
||||||
../modules/thinkpad.nix
|
|
||||||
../modules/gpu/intel.nix
|
|
||||||
|
|
||||||
(import ../modules/common.nix {
|
|
||||||
inherit lib;
|
|
||||||
inherit inputs;
|
|
||||||
hostname = "Inaho";
|
|
||||||
})
|
|
||||||
|
|
||||||
(import ../../user/common.nix {
|
|
||||||
inherit config;
|
|
||||||
inherit pkgs;
|
|
||||||
inherit pkgs-stable;
|
|
||||||
inherit pkgs-pinned;
|
|
||||||
inherit lib;
|
|
||||||
inherit inputs;
|
|
||||||
name = "sweetbread";
|
|
||||||
fullname = "Sweet Bread";
|
|
||||||
})
|
|
||||||
];
|
|
||||||
|
|
||||||
hardware.bluetooth.enable = true;
|
|
||||||
host.laptop = true;
|
|
||||||
|
|
||||||
hardware.usb-modeswitch.enable = true;
|
|
||||||
networking.modemmanager.enable = true;
|
|
||||||
|
|
||||||
programs.steam = {
|
|
||||||
enable = true;
|
|
||||||
gamescopeSession.enable = true;
|
|
||||||
};
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
pkgs-stable.bottles
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
{ lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
# Verify with `lsblk` before running disko. For the stock T480 NVMe setup
|
|
||||||
# this is usually correct; for a 2.5" SATA SSD/HDD change it to /dev/sda.
|
|
||||||
disk = "/dev/sda";
|
|
||||||
|
|
||||||
btrfsMountOptions = [
|
|
||||||
"compress=zstd"
|
|
||||||
"noatime"
|
|
||||||
"ssd"
|
|
||||||
"discard=async"
|
|
||||||
];
|
|
||||||
in {
|
|
||||||
disko.devices = {
|
|
||||||
disk = {
|
|
||||||
main = {
|
|
||||||
type = "disk";
|
|
||||||
device = disk;
|
|
||||||
content = {
|
|
||||||
type = "gpt";
|
|
||||||
partitions = {
|
|
||||||
ESP = {
|
|
||||||
priority = 1;
|
|
||||||
name = "ESP";
|
|
||||||
start = "1M";
|
|
||||||
size = "512M";
|
|
||||||
type = "EF00";
|
|
||||||
content = {
|
|
||||||
type = "filesystem";
|
|
||||||
format = "vfat";
|
|
||||||
mountpoint = "/boot";
|
|
||||||
mountOptions = [ "umask=0077" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
luks = {
|
|
||||||
priority = 2;
|
|
||||||
name = "cryptsystem";
|
|
||||||
size = "100%";
|
|
||||||
content = {
|
|
||||||
type = "luks";
|
|
||||||
name = "crypted";
|
|
||||||
settings = {
|
|
||||||
# Allows fstrim/discard through LUKS for SSDs.
|
|
||||||
allowDiscards = true;
|
|
||||||
};
|
|
||||||
content = {
|
|
||||||
type = "btrfs";
|
|
||||||
extraArgs = [ "-f" "-L" "NixOS" ];
|
|
||||||
subvolumes = {
|
|
||||||
"/root" = {
|
|
||||||
mountpoint = "/";
|
|
||||||
mountOptions = btrfsMountOptions;
|
|
||||||
};
|
|
||||||
|
|
||||||
"/home" = {
|
|
||||||
mountpoint = "/home";
|
|
||||||
mountOptions = btrfsMountOptions;
|
|
||||||
};
|
|
||||||
|
|
||||||
"/nix" = {
|
|
||||||
mountpoint = "/nix";
|
|
||||||
mountOptions = btrfsMountOptions;
|
|
||||||
};
|
|
||||||
|
|
||||||
"/log" = {
|
|
||||||
mountpoint = "/var/log";
|
|
||||||
mountOptions = btrfsMountOptions;
|
|
||||||
};
|
|
||||||
|
|
||||||
"/swap" = {
|
|
||||||
mountpoint = "/.swapvol";
|
|
||||||
swap.swapfile.size = "16G";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
|
||||||
# and may be overwritten by future invocations. Please make changes
|
|
||||||
# to /etc/nixos/configuration.nix instead.
|
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
|
||||||
|
|
||||||
# File systems and swap are declared in ./disko.nix.
|
|
||||||
# If you regenerate this file after installation, use:
|
|
||||||
# nixos-generate-config --no-filesystems --root /mnt
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "usbhid" "sd_mod" "rtsx_pci_sdmmc" ];
|
|
||||||
boot.initrd.kernelModules = [ ];
|
|
||||||
boot.kernelModules = [ "kvm-intel" "thinkpad_acpi" ];
|
|
||||||
boot.extraModulePackages = [ ];
|
|
||||||
|
|
||||||
networking.useDHCP = lib.mkDefault true;
|
|
||||||
|
|
||||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
|
||||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{ pkgs, ... }: let
|
|
||||||
theme = pkgs.fetchFromGitHub {
|
|
||||||
owner = "Patato777";
|
|
||||||
repo = "dotfiles";
|
|
||||||
rev = "cc363921707807d7ad3e36b462f0df793a0fe18a";
|
|
||||||
hash = "sha256-fpXGFNrzbV6K9hoZRX4tGieTLzhpPeGm6wn8CF4OGow=";
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
boot.loader.grub = {
|
|
||||||
gfxmodeEfi = "1920x1080";
|
|
||||||
theme = "${theme}/grub/themes/virtuaverse";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
wayland.windowManager.hyprland.settings.monitor = [
|
|
||||||
{
|
|
||||||
output = "eDP-1";
|
|
||||||
mode = "1920x1080@60";
|
|
||||||
position = "0x0";
|
|
||||||
scale = 1;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
{ config, ... }: {
|
|
||||||
services.syncthing = {
|
|
||||||
enable = true;
|
|
||||||
openDefaultPorts = true;
|
|
||||||
|
|
||||||
user = "sweetbread";
|
|
||||||
dataDir = "/home/sweetbread/.config/syncthing";
|
|
||||||
|
|
||||||
key = config.sops.secrets.syncthing_key.path;
|
|
||||||
cert = config.sops.secrets.syncthing_cert.path;
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
devices = {
|
|
||||||
Rias.id = "EC5AGVN-2RKJDHN-NOSB7PQ-IRYCEEW-NPPDUGX-6QGSLUU-YIT5ZZZ-RVPTHQ6";
|
|
||||||
Akeno.id = "QDW3WJX-J7ETS4R-32CUAIY-EGNM2RD-ZEHOUW2-CHOEOUG-USZOWTR-HHQS2QX";
|
|
||||||
Koneko.id = "PJFWQRY-ZFUBGDR-NV7KVBL-UBDQ4HT-KPTYP34-MUDFPJU-4EZUHTT-ZLYRMAB";
|
|
||||||
};
|
|
||||||
|
|
||||||
folders = {
|
|
||||||
"Music" = {
|
|
||||||
path = "/home/sweetbread/Music";
|
|
||||||
devices = [ "Rias" "Akeno" "Koneko" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
"Obsidian" = {
|
|
||||||
path = "/home/sweetbread/Documents/Obsidian";
|
|
||||||
devices = [ "Rias" "Akeno" "Koneko" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
"Documents" = {
|
|
||||||
path = "/home/sweetbread/Documents";
|
|
||||||
devices = [ "Rias" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.services.syncthing.environment.STNODEFAULTFOLDER = "true";
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
sops = {
|
|
||||||
age.keyFile = "/root/age.key";
|
|
||||||
secrets = {
|
|
||||||
vpn_bolt = {
|
|
||||||
format = "binary";
|
|
||||||
sopsFile = ../../Rias/secrets/vpn_bolt.db;
|
|
||||||
};
|
|
||||||
|
|
||||||
syncthing_cert = {
|
|
||||||
format = "binary";
|
|
||||||
sopsFile = ./syncthing_cert.pem;
|
|
||||||
};
|
|
||||||
syncthing_key = {
|
|
||||||
format = "binary";
|
|
||||||
sopsFile = ./syncthing_key.pem;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"data": "ENC[AES256_GCM,data:rMr83F9VyGV5dp2XqXGAh3X2sCczUb0chH/2Hn9N9tijfRsOLGqHuy/zy29aOHR0PJ4euTU3bhmxWrBV/7oTnnEfI7DFF0vX4eBDaK8BzwAzrzXHYJOAgcwuYSqEEyWiLvTGABuLhTEto9kIMLxVIssa679s7zQSRwemVJSA3fEdtYD0BLAiO/ZtiAEmitgEt4EBRp9DhJPqlh2YfMmP6DpkDSy0hk+S+0NZg7eyrp7fivldiLzjsYDwCsugFcZQtWOqLMHY0kYhou8c2CKXu8UyqVVx24DyWfBfD1TH2pOk1ZsXFsxhFFKp5wcsfi0xDF1BG4hANcHVa6pR6y5JxNzh53xaH3NuvNJFEQSGJw5fNMuCrDnkYLDpU3xezzjvvxI01y7i2A00zsLli1fc9HA67ZlP1OBzsI7FyMgZlnOXQpbqnkj+kZdYAdOTjjMzQvrPusVS3RvqvcWj1qZtnHa1ZGmWh7xG0J10lQB4uDmTSxWoUUi7VmLXTC16HQNMySd8GbFmD/4Nj+/SxDShgsiug7L4hICjPC8Isosy99tE2wRXpjmMYUdlD7zu/vyEMxVPhkWnJyZZPXG+DjGBc/Diaw4ufYNxUs4yIRDceMArirubt/sN/eUoGOBGVWxvGm0/olTott7Yr+YKRSrDyWo9SWCz1qgz/ydpXm+xE7bPtbj9eAObZwneB/0tZTyo8o1WKd9yUST89m91EMQ31R97yCBwDW19VftWVCZH2w+QHNunih4ZUNiALQS745T2petbvc63iNiZswu0l3qoVM8x3y1RhAPLbsZpwQWSca307iDfBTB6uVW4HwLtL30=,iv:ajC3mjCYKUqS7XGIN64NiJoG6wHMvGdcHhazSO860ms=,tag:31fWG7m2neW2Pft9TjmBGg==,type:str]",
|
|
||||||
"sops": {
|
|
||||||
"age": [
|
|
||||||
{
|
|
||||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuQUNTSDVIeDRuMmtTWXZD\nU0x4OVJrUStFeW5QV0pOZ2hEZnJZQ09UbW5RCmwxbjhuWis1Q3BCTGtOdS8zNE0w\nL0pDK3dBY1hxZ2dCNG96RlA0dkNWVWMKLS0tIHFld2hUdm11dk5hT2ZtRXpId0VG\nRDM0L05jS0lGcnJBYWVNWElIazdlaUEKugvBGcCzYTZL6aC6mI6GCzhiPFYql75z\nSBfalDmqSVU2k1IBqsNHIYSxzOXwUiGS3MSHJUCf7M2y9X3dHJGeyw==\n-----END AGE ENCRYPTED FILE-----\n",
|
|
||||||
"recipient": "age1j3uuyax673fvl5x4dveupq3dylngnrq0e5uy7fmclsexkfd25vysk646wk"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"lastmodified": "2026-07-21T20:27:59Z",
|
|
||||||
"mac": "ENC[AES256_GCM,data:lYZH1f3TyvcgqWI9hVOP3l2xImRh+LL0volXVUYSdGBnQTsAJfzMdsol/SsETwNNn+KrANC3ucO0/MXOWDK7ZPJ5Oq9R+OQnM8LK9/5mNfbzgodTw0RaH8FsrrtBCtHn3H2rlrBoPFEArblWKOh0G9iyrmufT09OREGt/G0tE5o=,iv:vmB1CY3sVajvLS8zAS/0I+NgnAOStbUkzQdw6XY45y4=,tag:mZP/eZVn+DJq+OT1ghtOkQ==,type:str]",
|
|
||||||
"version": "3.13.2"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"data": "ENC[AES256_GCM,data:2nMwCxU1y0zE5VtnmEf3lT4XyI9e8dokPkipo3TXpxuRJZ9OXCOb0n4pHb4Xx9OlDgAeW2UX70cR1Wtj7QPQx9h/HYZTmUeIP4rvlTPhaxs/2F33ud1lPKceV2DK2q8G/EvPLnlCcLWMvy6BVsqBlNmjAzNonWI=,iv:7H0o0i3zp7K2demt1O2Pw4BNt+2q4PhHBw1K/jC7OH4=,tag:Bx82eo5kQqwlb6egYmopgQ==,type:str]",
|
|
||||||
"sops": {
|
|
||||||
"age": [
|
|
||||||
{
|
|
||||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2Vzl3M3pFblY5SmRQRUtI\nNWFCbWZJQTJTOWFHdTd1YkJEbXFGOFhBTUNNClBKdWhGdmh3Q2dUNkpMUUU3Zmdq\nUFd1M2twNW1KRGErRHUvc1BLY2pMT3MKLS0tIElVZ0RVVFQrb1FuYnJ0OU44RWZK\nbnpJZnFLR3kzV3VRaytQRDMrYkg5S2sKkr97EwJmtcIsRYH4di+tadTWnWzuCDa9\ngY+CKCVEPUgD1AXSgCwCP2AVd/zaKUbm6d6UA2QzZyqGsRim56WFsQ==\n-----END AGE ENCRYPTED FILE-----\n",
|
|
||||||
"recipient": "age1j3uuyax673fvl5x4dveupq3dylngnrq0e5uy7fmclsexkfd25vysk646wk"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"lastmodified": "2026-07-21T20:28:23Z",
|
|
||||||
"mac": "ENC[AES256_GCM,data:ohYjzIYDilW7lsmZFZXpF629yevO2p8laA7Zl0+NCvZ8dB4nthLUePsnLTYCrEo5ADbboM5Cka11FiYbmB1IMR4mEdRwTN37EsQtyYLZbZ+j4XPsuXO0UT0NmWWiFNJlQEWfTVbhaZRDQXcPpVvm+6qQfRub018/0C59oWpmbyA=,iv:SX1QDDUWZyxE0zODAImcGGHJI7KGKYx9/6Q9F+9SVCQ=,tag:AExTZIfAKTCeU9c3Qj+IUw==,type:str]",
|
|
||||||
"version": "3.13.2"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -3,7 +3,6 @@
|
|||||||
./secrets/secrets.nix
|
./secrets/secrets.nix
|
||||||
./modules/grub.nix
|
./modules/grub.nix
|
||||||
./modules/syncthing.nix
|
./modules/syncthing.nix
|
||||||
./modules/rgb.nix
|
|
||||||
../modules/gpu/nvidia.nix
|
../modules/gpu/nvidia.nix
|
||||||
|
|
||||||
(import ../modules/common.nix {
|
(import ../modules/common.nix {
|
||||||
|
|||||||
@@ -11,10 +11,6 @@
|
|||||||
boot.kernelModules = [ "kvm-intel" ];
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
environment.etc.crypttab.text = ''
|
|
||||||
storage UUID=9327148b-788a-4c23-ac73-28464ffabe1b none luks
|
|
||||||
'';
|
|
||||||
|
|
||||||
fileSystems."/" = {
|
fileSystems."/" = {
|
||||||
device = "/dev/disk/by-label/NixOS";
|
device = "/dev/disk/by-label/NixOS";
|
||||||
fsType = "ext4";
|
fsType = "ext4";
|
||||||
@@ -27,9 +23,9 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/mnt/D" = {
|
fileSystems."/mnt/D" = {
|
||||||
device = "/dev/mapper/storage";
|
device = "/dev/disk/by-label/Data";
|
||||||
fsType = "ext4";
|
fsType = "ntfs";
|
||||||
options = [ "noatime" "nofail" ];
|
options = ["umask=0022" "gid=100" "uid=1000" "nofail" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
swapDevices = [ ];
|
swapDevices = [ ];
|
||||||
|
|||||||
@@ -1,50 +1,44 @@
|
|||||||
{ pkgs, lib, ... }:
|
{ pkgs, lib, ...}: {
|
||||||
let
|
wayland.windowManager.hyprland = let
|
||||||
hyprLua = import ../../../modules/user/hyprland/lua.nix { inherit lib; };
|
monitor-switcher = pkgs.writers.writeBashBin "monitor_switcher" /*bash*/ ''
|
||||||
|
MODE=$1
|
||||||
|
|
||||||
monitor-switcher = pkgs.writers.writeBashBin "monitor_switcher" /*bash*/ ''
|
case $MODE in
|
||||||
MODE=$1
|
"tv")
|
||||||
|
hyprctl keyword monitor "DP-3, 1920x1080@60, 3840x0, 1"
|
||||||
|
hyprctl keyword monitor "HDMI-A-1, 3840x2160@60, 0x0, 1"
|
||||||
|
notify-send "TV mode"
|
||||||
|
;;
|
||||||
|
|
||||||
case $MODE in
|
"mirror")
|
||||||
"tv")
|
hyprctl keyword monitor "HDMI-A-1, 3840x2160@60, 0x0, 1"
|
||||||
hyprctl eval 'hl.monitor({ output = "DP-3", mode = "1920x1080@60", position = "3840x0", scale = 1 })'
|
hyprctl keyword monitor "DP-3, preferred, auto, 1, mirror, HDMI-A-1"
|
||||||
hyprctl eval 'hl.monitor({ output = "HDMI-A-1", mode = "3840x2160@60", position = "0x0", scale = 1 })'
|
notify-send "TV-only mode"
|
||||||
notify-send "TV mode"
|
;;
|
||||||
;;
|
|
||||||
|
|
||||||
"mirror")
|
"display"|*)
|
||||||
hyprctl eval 'hl.monitor({ output = "HDMI-A-1", mode = "3840x2160@60", position = "0x0", scale = 1 })'
|
hyprctl keyword monitor "HDMI-A-1, disable"
|
||||||
hyprctl eval 'hl.monitor({ output = "DP-3", mode = "preferred", position = "auto", scale = 1, mirror = "HDMI-A-1" })'
|
hyprctl keyword monitor "DP-3, 3440x1440@165, 0x0, 1"
|
||||||
notify-send "TV-only mode"
|
notify-send "Display mode"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
"display"|*)
|
esac
|
||||||
hyprctl eval 'hl.monitor({ output = "HDMI-A-1", disabled = true })'
|
'';
|
||||||
hyprctl eval 'hl.monitor({ output = "DP-3", mode = "3440x1440@165", position = "0x0", scale = 1 })'
|
in {
|
||||||
notify-send "Display mode"
|
settings = {
|
||||||
;;
|
monitor = [
|
||||||
esac
|
"DP-3, 3440x1440@165, auto-right, 1"
|
||||||
'';
|
# "HDMI-A-1, 3840x2160@60, auto-left, 2"
|
||||||
in {
|
"HDMI-A-1, disabled"
|
||||||
wayland.windowManager.hyprland.settings = {
|
];
|
||||||
monitor = [
|
|
||||||
{
|
|
||||||
output = "DP-3";
|
|
||||||
mode = "3440x1440@165";
|
|
||||||
position = "auto-right";
|
|
||||||
scale = 1;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
output = "HDMI-A-1";
|
|
||||||
disabled = true;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
bind = [
|
bind = [
|
||||||
(hyprLua.bind "XF86Calculator" (hyprLua.exec "ghostty --title=pulsemixer -e pulsemixer"))
|
'', XF86Calculator, exec, ghostty --title=pulsemixer -e pulsemixer''
|
||||||
(hyprLua.bind "SUPER + F1" (hyprLua.exec "${lib.getExe monitor-switcher} tv"))
|
|
||||||
(hyprLua.bind "SUPER + F2" (hyprLua.exec "${lib.getExe monitor-switcher} mirror"))
|
''$mainMod, F1, exec, ${lib.getExe monitor-switcher} tv''
|
||||||
(hyprLua.bind "SUPER + F3" (hyprLua.exec "${lib.getExe monitor-switcher}"))
|
''$mainMod, F2, exec, ${lib.getExe monitor-switcher} mirror''
|
||||||
];
|
''$mainMod, F3, exec, ${lib.getExe monitor-switcher}''
|
||||||
|
];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{ pkgs, ... }:{
|
|
||||||
services.hardware.openrgb = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.openrgb-with-all-plugins;
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
openrgb-with-all-plugins
|
|
||||||
i2c-tools
|
|
||||||
pciutils
|
|
||||||
];
|
|
||||||
|
|
||||||
hardware.i2c.enable = true;
|
|
||||||
boot.kernelModules = [ "i2c-dev" ];
|
|
||||||
|
|
||||||
users.groups.i2c.members = [ "sweetbread" ];
|
|
||||||
}
|
|
||||||
@@ -11,9 +11,8 @@
|
|||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
devices = {
|
devices = {
|
||||||
Akeno.id = "QDW3WJX-J7ETS4R-32CUAIY-EGNM2RD-ZEHOUW2-CHOEOUG-USZOWTR-HHQS2QX";
|
Akeno = { id = "QDW3WJX-J7ETS4R-32CUAIY-EGNM2RD-ZEHOUW2-CHOEOUG-USZOWTR-HHQS2QX"; };
|
||||||
Koneko.id = "PJFWQRY-ZFUBGDR-NV7KVBL-UBDQ4HT-KPTYP34-MUDFPJU-4EZUHTT-ZLYRMAB";
|
Koneko = { id = "PJFWQRY-ZFUBGDR-NV7KVBL-UBDQ4HT-KPTYP34-MUDFPJU-4EZUHTT-ZLYRMAB"; };
|
||||||
Inaho.id = "GEHWQFQ-MPIMQ7R-QEWSOEB-BIZAHSZ-5YOFATK-KDIXFMV-JX3OF6G-ZPNZMA4";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
folders = {
|
folders = {
|
||||||
@@ -34,17 +33,7 @@
|
|||||||
|
|
||||||
"Music" = {
|
"Music" = {
|
||||||
path = "/home/sweetbread/Music";
|
path = "/home/sweetbread/Music";
|
||||||
devices = [ "Akeno" "Koneko" "Inaho" ];
|
devices = [ "Akeno" "Koneko" ];
|
||||||
};
|
|
||||||
|
|
||||||
"Obsidian" = {
|
|
||||||
path = "/mnt/D/Obsidian";
|
|
||||||
devices = [ "Koneko" "Inaho" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
"Documents" = {
|
|
||||||
path = "/home/sweetbread/Documents";
|
|
||||||
devices = [ "Inaho" ];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -24,7 +24,6 @@
|
|||||||
|
|
||||||
hardware.bluetooth.enable = true;
|
hardware.bluetooth.enable = true;
|
||||||
host.laptop = true;
|
host.laptop = true;
|
||||||
host.nvidia.prime.enable = true;
|
|
||||||
|
|
||||||
environment.systemPackages = [ pkgs.dbgate ];
|
environment.systemPackages = [ pkgs.dbgate ];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
{
|
{
|
||||||
wayland.windowManager.hyprland.settings.monitor = [
|
wayland.windowManager.hyprland = {
|
||||||
{
|
settings = {
|
||||||
output = "eDP-1";
|
monitor = [
|
||||||
mode = "1920x1080@60";
|
"eDP-1, 1920x1080@60, 0x0, 1"
|
||||||
position = "0x0";
|
];
|
||||||
scale = 1;
|
};
|
||||||
}
|
};
|
||||||
];
|
|
||||||
}
|
}
|
||||||
+2
-18
@@ -7,30 +7,14 @@
|
|||||||
];
|
];
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
host = {
|
host.laptop = lib.mkEnableOption "laptop mode";
|
||||||
laptop = lib.mkEnableOption "laptop mode";
|
|
||||||
|
|
||||||
nvidia.prime = {
|
|
||||||
enable = lib.mkEnableOption "NVIDIA PRIME offload for hybrid graphics";
|
|
||||||
intelBusId = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
default = "PCI:0:2:0";
|
|
||||||
description = "Intel/iGPU Bus ID used by NVIDIA PRIME.";
|
|
||||||
};
|
|
||||||
nvidiaBusId = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
default = "PCI:1:0:0";
|
|
||||||
description = "NVIDIA dGPU Bus ID used by NVIDIA PRIME.";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
nix.settings = {
|
nix.settings = {
|
||||||
keep-going = true;
|
keep-going = true;
|
||||||
extra-substituters = [ "https://nix.lair.moe/main" ];
|
extra-substituters = [ "https://nix.lair.moe/main" ];
|
||||||
extra-trusted-public-keys = [ "main:tR2gNhCBJHKAlVgohPNHBhGnWL55tB8SxXmMWJe5lo8=" ];
|
extra-trusted-public-keys = [ "main:kpwMe+9BsGJ/IUb7i3iadaV38y5/Yuqoct0mf7wI9ds=" ];
|
||||||
experimental-features = [ "nix-command" "flakes" ];
|
experimental-features = [ "nix-command" "flakes" ];
|
||||||
};
|
};
|
||||||
networking.hostName = hostname;
|
networking.hostName = hostname;
|
||||||
|
|||||||
+10
-27
@@ -1,16 +1,6 @@
|
|||||||
{ config, pkgs-stable, lib, ... }: let
|
{ config, pkgs-stable, lib, ... }: {
|
||||||
primeCfg = config.host.nvidia.prime;
|
boot.kernelParams = [ "nvidia-drm.modeset=1" ];
|
||||||
isPrimeOffload = primeCfg.enable;
|
services.xserver.videoDrivers = [ "nvidia" ];
|
||||||
in {
|
|
||||||
boot = {
|
|
||||||
kernelParams = [ "nvidia-drm.modeset=1" ];
|
|
||||||
initrd.kernelModules = lib.optionals isPrimeOffload [ "i915" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
services.xserver.videoDrivers =
|
|
||||||
if isPrimeOffload
|
|
||||||
then [ "modesetting" "nvidia" ]
|
|
||||||
else [ "nvidia" ];
|
|
||||||
|
|
||||||
hardware = {
|
hardware = {
|
||||||
graphics = {
|
graphics = {
|
||||||
@@ -21,7 +11,7 @@ in {
|
|||||||
intel-media-driver
|
intel-media-driver
|
||||||
libvdpau-va-gl
|
libvdpau-va-gl
|
||||||
];
|
];
|
||||||
extraPackages32 = with pkgs-stable.pkgsi686Linux; [ nvidia-vaapi-driver intel-media-driver ];
|
extraPackages32 = with pkgs-stable.pkgsi686Linux; [nvidia-vaapi-driver intel-media-driver];
|
||||||
};
|
};
|
||||||
|
|
||||||
nvidia = {
|
nvidia = {
|
||||||
@@ -34,28 +24,21 @@ in {
|
|||||||
nvidiaSettings = true;
|
nvidiaSettings = true;
|
||||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||||
|
|
||||||
prime = lib.optionalAttrs isPrimeOffload {
|
prime = lib.optionalAttrs config.host.laptop {
|
||||||
offload = {
|
intelBusId = "PCI:0:2:0";
|
||||||
enable = true;
|
nvidiaBusId = "PCI:1:0:0";
|
||||||
enableOffloadCmd = true;
|
|
||||||
};
|
|
||||||
intelBusId = primeCfg.intelBusId;
|
|
||||||
nvidiaBusId = primeCfg.nvidiaBusId;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.sessionVariables = {
|
environment.sessionVariables = {
|
||||||
__GL_VRR_ALLOWED = 1;
|
|
||||||
ELECTRON_OZONE_PLATFORM_HINT = "auto";
|
|
||||||
NIXOS_OZONE_WL = 1;
|
|
||||||
} // lib.optionalAttrs isPrimeOffload {
|
|
||||||
LIBVA_DRIVER_NAME = "iHD";
|
|
||||||
} // lib.optionalAttrs (!isPrimeOffload) {
|
|
||||||
WLR_NO_HARDWARE_CURSORS = 1;
|
WLR_NO_HARDWARE_CURSORS = 1;
|
||||||
WLR_DRM_NO_ATOMIC = 1;
|
WLR_DRM_NO_ATOMIC = 1;
|
||||||
GBM_BACKEND = "nvidia-drm";
|
GBM_BACKEND = "nvidia-drm";
|
||||||
LIBVA_DRIVER_NAME = "nvidia";
|
LIBVA_DRIVER_NAME = "nvidia";
|
||||||
__GLX_VENDOR_LIBRARY_NAME = "nvidia";
|
__GLX_VENDOR_LIBRARY_NAME = "nvidia";
|
||||||
|
__GL_VRR_ALLOWED = 1;
|
||||||
|
ELECTRON_OZONE_PLATFORM_HINT = "auto";
|
||||||
|
NIXOS_OZONE_WL = 1;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,83 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }: {
|
|
||||||
# T480-specific hardware defaults.
|
|
||||||
hardware = {
|
|
||||||
enableRedistributableFirmware = true;
|
|
||||||
|
|
||||||
trackpoint = {
|
|
||||||
enable = true;
|
|
||||||
emulateWheel = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
boot = {
|
|
||||||
supportedFilesystems = [ "btrfs" ];
|
|
||||||
|
|
||||||
initrd.availableKernelModules = [
|
|
||||||
"nvme"
|
|
||||||
"ahci"
|
|
||||||
"xhci_pci"
|
|
||||||
"usb_storage"
|
|
||||||
"usbhid"
|
|
||||||
"sd_mod"
|
|
||||||
"rtsx_pci_sdmmc"
|
|
||||||
];
|
|
||||||
|
|
||||||
kernelModules = [ "kvm-intel" "thinkpad_acpi" ];
|
|
||||||
|
|
||||||
kernelParams = [
|
|
||||||
# Prefer S3/deep sleep when BIOS exposes it. If suspend behaves worse,
|
|
||||||
# remove this and use the BIOS sleep setting instead.
|
|
||||||
"mem_sleep_default=deep"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
powerManagement.enable = true;
|
|
||||||
services = {
|
|
||||||
# Firmware updates for BIOS/UEFI, Thunderbolt, SSDs where LVFS supports it.
|
|
||||||
fwupd.enable = true;
|
|
||||||
|
|
||||||
# Helps Intel laptops keep sane thermal behaviour under load.
|
|
||||||
thermald.enable = true;
|
|
||||||
|
|
||||||
# Fingerprint reader support. If fprintd does not detect the reader,
|
|
||||||
# leaving this enabled is harmless; login can still use a password.
|
|
||||||
fprintd.enable = true;
|
|
||||||
|
|
||||||
logind.settings.Login = {
|
|
||||||
HandleLidSwitch = "suspend-then-hibernate";
|
|
||||||
HandleLidSwitchExternalPower = "suspend-then-hibernate";
|
|
||||||
HandlePowerKey = "poweroff";
|
|
||||||
};
|
|
||||||
|
|
||||||
tlp.settings = {
|
|
||||||
# Preserve batteries when the laptop is usually on AC.
|
|
||||||
# Raise STOP_* to 100 if maximum autonomy matters more than battery wear.
|
|
||||||
START_CHARGE_THRESH_BAT0 = 70;
|
|
||||||
STOP_CHARGE_THRESH_BAT0 = 95;
|
|
||||||
START_CHARGE_THRESH_BAT1 = 70;
|
|
||||||
STOP_CHARGE_THRESH_BAT1 = 85;
|
|
||||||
RESTORE_THRESHOLDS_ON_BAT = 1;
|
|
||||||
|
|
||||||
# NVMe/SATA SSD power saving without making the system too sluggish.
|
|
||||||
AHCI_RUNTIME_PM_ON_AC = "on";
|
|
||||||
AHCI_RUNTIME_PM_ON_BAT = "auto";
|
|
||||||
SATA_LINKPWR_ON_AC = "med_power_with_dipm";
|
|
||||||
SATA_LINKPWR_ON_BAT = "med_power_with_dipm";
|
|
||||||
|
|
||||||
# Usually safe on ThinkPads; disable if some USB device randomly disconnects.
|
|
||||||
USB_AUTOSUSPEND = 1;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.networkmanager.wifi.powersave = true;
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
acpi
|
|
||||||
lm_sensors
|
|
||||||
pciutils
|
|
||||||
powertop
|
|
||||||
smartmontools
|
|
||||||
usbutils
|
|
||||||
nvme-cli
|
|
||||||
];
|
|
||||||
}
|
|
||||||
+3
-32
@@ -1,4 +1,4 @@
|
|||||||
{ pkgs, ... }: {
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./host/bluetooth.nix
|
./host/bluetooth.nix
|
||||||
./host/bootloader.nix
|
./host/bootloader.nix
|
||||||
@@ -15,40 +15,11 @@
|
|||||||
./host/virtmanager.nix
|
./host/virtmanager.nix
|
||||||
./host/vpn.nix
|
./host/vpn.nix
|
||||||
./host/yggdrasil.nix
|
./host/yggdrasil.nix
|
||||||
./host/mtp.nix
|
|
||||||
];
|
];
|
||||||
|
|
||||||
programs = {
|
programs.hyprland.enable = true;
|
||||||
dconf.enable = true;
|
|
||||||
hyprland.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.portal = {
|
|
||||||
enable = true;
|
|
||||||
xdgOpenUsePortal = true;
|
|
||||||
|
|
||||||
extraPortals = with pkgs; [
|
|
||||||
xdg-desktop-portal-hyprland
|
|
||||||
xdg-desktop-portal-gtk
|
|
||||||
xdg-desktop-portal-termfilechooser
|
|
||||||
];
|
|
||||||
|
|
||||||
config = {
|
|
||||||
common = {
|
|
||||||
default = [ "hyprland" "gtk" ];
|
|
||||||
"org.freedesktop.impl.portal.FileChooser" = [ "termfilechooser" "gtk" ];
|
|
||||||
"org.freedesktop.impl.portal.Settings" = [ "gtk" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
hyprland = {
|
|
||||||
default = [ "hyprland" "gtk" ];
|
|
||||||
"org.freedesktop.impl.portal.FileChooser" = [ "termfilechooser" "gtk" ];
|
|
||||||
"org.freedesktop.impl.portal.Settings" = [ "gtk" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services = {
|
services = {
|
||||||
|
udisks2.enable = true;
|
||||||
fstrim.enable = true;
|
fstrim.enable = true;
|
||||||
upower.enable = true;
|
upower.enable = true;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{ pkgs, ... }: {
|
||||||
console = {
|
console = {
|
||||||
font = "LatArCyrHeb-19";
|
font = "${pkgs.kbd}/share/consolefonts/LatArCyrHeb-19.psfu.gz";
|
||||||
colors = [
|
colors = [
|
||||||
"16161E"
|
"16161E"
|
||||||
"1A1B26"
|
"1A1B26"
|
||||||
|
|||||||
+3
-10
@@ -1,15 +1,8 @@
|
|||||||
{ lib, ... }: {
|
{
|
||||||
environment.variables = {
|
environment.variables = {
|
||||||
EDITOR = "hx";
|
EDITOR = "hx";
|
||||||
RANGER_LOAD_DEFAULT_RC = "FALSE";
|
RANGER_LOAD_DEFAULT_RC = "FALSE";
|
||||||
# GTK/Electron apps do not consistently use the portal picker unless this
|
QT_QPA_PLATFORMTHEME = "qt5ct";
|
||||||
# variable is present in the graphical session environment.
|
GSETTINGS_BACKEND = "keyfile";
|
||||||
GTK_USE_PORTAL = "1";
|
|
||||||
|
|
||||||
# Qt/Telegram-like apps otherwise keep using their own picker. This makes
|
|
||||||
# them ask xdg-desktop-portal for file/folder selection.
|
|
||||||
QT_QPA_PLATFORMTHEME = lib.mkForce "xdgdesktopportal";
|
|
||||||
TDESKTOP_USE_GTK_FILE_DIALOG = "1";
|
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,11 +4,11 @@ lib.mkIf config.host.laptop {
|
|||||||
services.tlp = {
|
services.tlp = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
CPU_SCALING_GOVERNOR_ON_AC = "powersave";
|
CPU_SCALING_GOVERNOR_ON_AC = "performance";
|
||||||
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
|
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
|
||||||
|
|
||||||
CPU_ENERGY_PERF_POLICY_ON_AC = "balance_performance";
|
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
|
||||||
CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power";
|
CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
|
||||||
|
|
||||||
CPU_MIN_PERF_ON_AC = 0;
|
CPU_MIN_PERF_ON_AC = 0;
|
||||||
CPU_MAX_PERF_ON_AC = 100;
|
CPU_MAX_PERF_ON_AC = 100;
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
{ pkgs, ... }: {
|
|
||||||
environment.systemPackages = [ pkgs.glib ];
|
|
||||||
programs.fuse.enable = true;
|
|
||||||
services.gvfs.enable = true;
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{ pkgs, lib, ... }:
|
{ pkgs, lib, ... }:
|
||||||
let
|
let
|
||||||
sol = pkgs.writers.writePython3 "shutdown-on-lan.py" {
|
sol = pkgs.writers.writePython3 "shutdown-on-lan.py" {
|
||||||
libraries = ps: [ ps.psutil ];
|
libraries = [ pkgs.python313Packages.psutil ];
|
||||||
flakeIgnore = [ "E302" "E305" "E501" "E701" ];
|
flakeIgnore = [ "E302" "E305" "E501" "E701" ];
|
||||||
} /*py*/ ''
|
} /*py*/ ''
|
||||||
# https://habr.com/ru/articles/816765/
|
# https://habr.com/ru/articles/816765/
|
||||||
|
|||||||
+18
-24
@@ -1,29 +1,23 @@
|
|||||||
{ pkgs-pinned, lib, ... }: {
|
{ inputs, pkgs, config, ... }: {
|
||||||
programs.clash-verge = {
|
systemd.services.v2raya = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs-pinned.clash-verge-rev;
|
description = "v2rayA gui client";
|
||||||
serviceMode = true;
|
after = [ "network.target" ];
|
||||||
tunMode = true;
|
serviceConfig = {
|
||||||
autoStart = true;
|
Restart = "always";
|
||||||
|
ExecStart = "${pkgs.v2raya}/bin/v2rayA";
|
||||||
|
};
|
||||||
|
path = with pkgs; [ iptables bash iproute2 ];
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
environment = {
|
||||||
|
V2RAYA_LOG_FILE = "/var/log/v2raya/v2raya.log";
|
||||||
|
V2RAY_LOCATION_ASSET = "/etc/v2raya";
|
||||||
|
XRAY_LOCATION_ASSET = "/etc/v2raya";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.clash-verge.serviceConfig = {
|
environment.etc = {
|
||||||
CapabilityBoundingSet = lib.mkForce [
|
"v2raya/ru_geoip.dat".source = "${inputs.russia-blocked-geoip}/geoip.dat";
|
||||||
"CAP_NET_ADMIN"
|
"v2raya/bolt.db".source = config.sops.secrets.vpn_bolt.path;
|
||||||
"CAP_NET_RAW"
|
|
||||||
"CAP_SYS_ADMIN"
|
|
||||||
"CAP_DAC_OVERRIDE"
|
|
||||||
"CAP_DAC_READ_SEARCH"
|
|
||||||
"CAP_SYS_PTRACE"
|
|
||||||
"CAP_SETUID"
|
|
||||||
"CAP_SETGID"
|
|
||||||
"CAP_CHOWN"
|
|
||||||
"CAP_MKNOD"
|
|
||||||
];
|
|
||||||
|
|
||||||
AmbientCapabilities = [
|
|
||||||
"CAP_DAC_READ_SEARCH"
|
|
||||||
"CAP_SYS_PTRACE"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
{ pkgs, inputs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Важно: портал должен быть собран под тот же Hyprland, что и сам Hyprland
|
||||||
|
# (есть отдельная опция именно для этого).
|
||||||
|
programs.hyprland = {
|
||||||
|
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
|
||||||
|
portalPackage = inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland;
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg.portal = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
# Делает так, что xdg-open идёт через портал (часто полезно для sandbox/FHS/wrappers).
|
||||||
|
# Опция есть в NixOS как xdg.portal.xdgOpenUsePortal :contentReference[oaicite:2]{index=2}
|
||||||
|
xdgOpenUsePortal = true;
|
||||||
|
|
||||||
|
# Два бэкенда: Hyprland (композитор-специфичное) + GTK (интеграция/диалоги/OpenURI)
|
||||||
|
extraPortals = [
|
||||||
|
inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland
|
||||||
|
pkgs.xdg-desktop-portal-gtk
|
||||||
|
];
|
||||||
|
|
||||||
|
# Роутинг интерфейсов по portals.conf(5):
|
||||||
|
# xdg-desktop-portal выбирает конфиг по XDG_CURRENT_DESKTOP (с lower-case) :contentReference[oaicite:3]{index=3}
|
||||||
|
config = {
|
||||||
|
common = {
|
||||||
|
default = [ "gtk" ];
|
||||||
|
"org.freedesktop.impl.portal.FileChooser" = [ "gtk" ];
|
||||||
|
"org.freedesktop.impl.portal.ScreenCast" = [ "hyprland" ];
|
||||||
|
"org.freedesktop.impl.portal.Screenshot" = [ "hyprland" ];
|
||||||
|
"org.freedesktop.impl.portal.GlobalShortcuts" = [ "hyprland" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Если XDG_CURRENT_DESKTOP=Hyprland присутствует — предпочитаем Hyprland,
|
||||||
|
# но оставляем gtk как fallback для интерфейсов, которых нет у hyprland-портала.
|
||||||
|
hyprland.default = [ "hyprland" "gtk" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -4,7 +4,6 @@
|
|||||||
persistentKeys = true;
|
persistentKeys = true;
|
||||||
settings = {
|
settings = {
|
||||||
Peers = [
|
Peers = [
|
||||||
"tcp://box.paulll.cc:13337"
|
|
||||||
"tcp://lair.moe:5001"
|
"tcp://lair.moe:5001"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|||||||
+2
-4
@@ -1,6 +1,7 @@
|
|||||||
{ config, lib, ... }: {
|
{ config, lib, ... }: {
|
||||||
imports = [
|
imports = [
|
||||||
./user/btop.nix
|
./user/btop.nix
|
||||||
|
./user/fuzzel.nix
|
||||||
./user/ghostty.nix
|
./user/ghostty.nix
|
||||||
./user/helix.nix
|
./user/helix.nix
|
||||||
./user/hyprland.nix
|
./user/hyprland.nix
|
||||||
@@ -8,12 +9,9 @@
|
|||||||
./user/mako.nix
|
./user/mako.nix
|
||||||
./user/neofetch.nix
|
./user/neofetch.nix
|
||||||
./user/qt.nix
|
./user/qt.nix
|
||||||
./user/quickshell.nix
|
|
||||||
./user/stylix.nix
|
|
||||||
./user/sops.nix
|
./user/sops.nix
|
||||||
./user/ssh.nix
|
./user/ssh.nix
|
||||||
./user/walker.nix
|
./user/waybar.nix
|
||||||
./user/wob.nix
|
|
||||||
./user/yazi.nix
|
./user/yazi.nix
|
||||||
./user/zsh.nix
|
./user/zsh.nix
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
{ config, inputs, pkgs, username, ... }: {
|
||||||
|
imports = [ inputs.ags.homeManagerModules.default ];
|
||||||
|
|
||||||
|
programs.ags = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
configDir = null;
|
||||||
|
|
||||||
|
extraPackages = with inputs.ags.packages.${pkgs.system}; [
|
||||||
|
battery
|
||||||
|
mpris
|
||||||
|
hyprland
|
||||||
|
network
|
||||||
|
tray
|
||||||
|
wireplumber
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
pulsemixer
|
||||||
|
];
|
||||||
|
|
||||||
|
wayland.windowManager.hyprland.settings.exec-once = [ "ags run" ];
|
||||||
|
|
||||||
|
xdg.configFile."ags".source = (pkgs.callPackage ./packages/drvs/ags.nix { inherit username; colors = config.lib.stylix.colors; });
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
programs.fuzzel = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
main = {
|
||||||
|
width = 40;
|
||||||
|
line-height = 25;
|
||||||
|
fields = "name,generic,comment,categories,filename,keywords";
|
||||||
|
prompt = ''"❯ "'';
|
||||||
|
show-actions = "no";
|
||||||
|
filter-desktop = "yes";
|
||||||
|
match-counter = "yes";
|
||||||
|
};
|
||||||
|
|
||||||
|
border = {
|
||||||
|
radius = "20";
|
||||||
|
};
|
||||||
|
|
||||||
|
dmenu = {
|
||||||
|
exit-immediately-if-empty = "yes";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,23 +1,11 @@
|
|||||||
{ config, pkgs, ... }: let
|
{
|
||||||
ghosttyWithGL = (config.lib.nixGL.wrap pkgs.ghostty);
|
|
||||||
shaders = pkgs.fetchFromGitHub {
|
|
||||||
owner = "sahaj-b";
|
|
||||||
repo = "ghostty-cursor-shaders";
|
|
||||||
rev = "06d4e90fb5410e9c4d0b3131584060adddf89406";
|
|
||||||
hash = "sha256-G/UIr1bKnxn1AcHl/4FL/jou6b7M2VeREslYVELxdmw=";
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
programs.ghostty = {
|
programs.ghostty = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableZshIntegration = true;
|
enableZshIntegration = true;
|
||||||
package = ghosttyWithGL;
|
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
confirm-close-surface = false;
|
confirm-close-surface = false;
|
||||||
copy-on-select = false;
|
copy-on-select = false;
|
||||||
title-report = true;
|
title-report = true;
|
||||||
|
|
||||||
custom-shader = "${shaders}/cursor_warp.glsl";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
+1
-174
@@ -1,107 +1,8 @@
|
|||||||
{ inputs, pkgs, lib, config, ... }: let
|
{
|
||||||
helixSteel =
|
|
||||||
inputs.helix-steel.packages.${pkgs.system}.default.overrideAttrs (old: {
|
|
||||||
cargoBuildFlags = (old.cargoBuildFlags or []) ++ [
|
|
||||||
"--features"
|
|
||||||
"steel,git"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
comment-headers = pkgs.fetchurl {
|
|
||||||
url = "https://github.com/codingvivi/comment-dividers.hx/raw/refs/heads/main/comment_headers.scm";
|
|
||||||
name = "comment_headers.scm";
|
|
||||||
hash = "sha256-ohgn6DFJl0rdRJuri6Frs/uUlUsPxMvPHDuw4FS3qEE=";
|
|
||||||
};
|
|
||||||
|
|
||||||
patched-comment-headers = pkgs.runCommand "comment_headers.scm" { } ''
|
|
||||||
install -m 0644 ${comment-headers} "$out"
|
|
||||||
|
|
||||||
${pkgs.python3}/bin/python3 - <<'PY'
|
|
||||||
from pathlib import Path
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
|
|
||||||
p = Path(os.environ["out"])
|
|
||||||
s = p.read_text()
|
|
||||||
|
|
||||||
start_marker = "(define (get-block-delims)"
|
|
||||||
end_marker = "(define (delete_till_first_nonwhitespace!)"
|
|
||||||
|
|
||||||
try:
|
|
||||||
start = s.index(start_marker)
|
|
||||||
end = s.index(end_marker, start)
|
|
||||||
except ValueError as e:
|
|
||||||
sys.exit(f"failed to find function markers: {e}")
|
|
||||||
|
|
||||||
new_get_block_delims = """(define (get-block-delims)
|
|
||||||
(helix.static.open_above)
|
|
||||||
(helix.static.insert_string "test_string")
|
|
||||||
(helix.static.normal_mode)
|
|
||||||
(helix.static.extend_to_line_bounds)
|
|
||||||
(helix.static.trim_selections)
|
|
||||||
(helix.static.toggle_comments)
|
|
||||||
(let* ([commented-test-string (helix.static.current-highlighted-text!)]
|
|
||||||
[strings-without-whitespace (split-whitespace commented-test-string)])
|
|
||||||
(delete-line-noyank!)
|
|
||||||
(cond
|
|
||||||
[(and (> (length strings-without-whitespace) 1)
|
|
||||||
(equal? (last strings-without-whitespace) "test_string"))
|
|
||||||
(list (first strings-without-whitespace) "")]
|
|
||||||
[(> (length strings-without-whitespace) 2)
|
|
||||||
(list (first strings-without-whitespace) (last strings-without-whitespace))]
|
|
||||||
[else
|
|
||||||
(list "" "")])))
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
s = s[:start] + new_get_block_delims + s[end:]
|
|
||||||
|
|
||||||
old = "(make-line line-length fill-pattern #f padding-pattern)"
|
|
||||||
new = "(make-line line-length \"\" fill-pattern padding-pattern)"
|
|
||||||
|
|
||||||
if old not in s:
|
|
||||||
sys.exit("failed to find insert-divider make-line call")
|
|
||||||
|
|
||||||
s = s.replace(old, new)
|
|
||||||
|
|
||||||
p.write_text(s)
|
|
||||||
PY
|
|
||||||
'';
|
|
||||||
in {
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
asm-lsp
|
|
||||||
fasm
|
|
||||||
steel
|
|
||||||
wakatime-cli
|
|
||||||
];
|
|
||||||
|
|
||||||
home.activation.installWakatimeHx = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
|
||||||
export PATH="${pkgs.steel}/bin:$PATH"
|
|
||||||
export STEEL_HOME="${config.xdg.dataHome}/steel"
|
|
||||||
|
|
||||||
if [ ! -f "$STEEL_HOME/cogs/wakatime/wakatime.scm" ]; then
|
|
||||||
forge pkg install --git https://github.com/Xerxes-2/wakatime.hx.git
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
|
|
||||||
programs.helix = {
|
programs.helix = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = helixSteel;
|
|
||||||
defaultEditor = true;
|
defaultEditor = true;
|
||||||
|
|
||||||
languages = {
|
|
||||||
language-server.asm-lsp.command = "asm-lsp";
|
|
||||||
|
|
||||||
language = [
|
|
||||||
{
|
|
||||||
name = "nasm";
|
|
||||||
file-types = [ "asm" "inc" ];
|
|
||||||
comment-token = ";";
|
|
||||||
language-servers = [ "asm-lsp" ];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
# theme = "catppuccin-mocha";
|
# theme = "catppuccin-mocha";
|
||||||
editor = {
|
editor = {
|
||||||
@@ -123,80 +24,6 @@ in {
|
|||||||
select = "underline";
|
select = "underline";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
keys.normal = {
|
|
||||||
space = {
|
|
||||||
C-a = {
|
|
||||||
b = ":fasm-build";
|
|
||||||
r = ":fasm-run";
|
|
||||||
c = ":fasm-clean";
|
|
||||||
};
|
|
||||||
|
|
||||||
C-c = {
|
|
||||||
h = ":comment-h1";
|
|
||||||
j = ":comment-h2";
|
|
||||||
k = ":comment-h3";
|
|
||||||
d = ":comment-divider";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
S-down = ["extend_to_line_bounds" "delete_selection" "paste_after"];
|
|
||||||
S-up = ["extend_to_line_bounds" "delete_selection" "move_line_up" "paste_before"];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
xdg.configFile = {
|
|
||||||
"asm-lsp/.asm-lsp.toml".text = ''
|
|
||||||
[default_config]
|
|
||||||
assembler = "fasm"
|
|
||||||
instruction_set = "x86/x86-64"
|
|
||||||
|
|
||||||
[opts]
|
|
||||||
compiler = "fasm"
|
|
||||||
diagnostics = true
|
|
||||||
default_diagnostics = true
|
|
||||||
'';
|
|
||||||
|
|
||||||
"helix/cogs/comment_headers.scm".source = patched-comment-headers;
|
|
||||||
"helix/helix.scm".text = ''
|
|
||||||
(require (prefix-in div. "cogs/comment_headers.scm"))
|
|
||||||
(require (prefix-in helix. "helix/commands.scm"))
|
|
||||||
|
|
||||||
(provide comment-h1
|
|
||||||
comment-h2
|
|
||||||
comment-h3
|
|
||||||
comment-divider
|
|
||||||
fasm-build
|
|
||||||
fasm-run
|
|
||||||
fasm-clean)
|
|
||||||
|
|
||||||
(define (comment-h1)
|
|
||||||
(div.insert-h1!))
|
|
||||||
|
|
||||||
(define (comment-h2)
|
|
||||||
(div.insert-h2!))
|
|
||||||
|
|
||||||
(define (comment-h3)
|
|
||||||
(div.insert-h3!))
|
|
||||||
|
|
||||||
(define (comment-divider)
|
|
||||||
(div.insert-divider! 80 "~"))
|
|
||||||
|
|
||||||
(define (fasm-build)
|
|
||||||
(helix.write)
|
|
||||||
(helix.run-shell-command "just" "build"))
|
|
||||||
|
|
||||||
(define (fasm-run)
|
|
||||||
(helix.write)
|
|
||||||
(helix.run-shell-command "just" "run"))
|
|
||||||
|
|
||||||
(define (fasm-clean)
|
|
||||||
(helix.run-shell-command "just" "clean"))
|
|
||||||
'';
|
|
||||||
"helix/init.scm".text = ''
|
|
||||||
;; Steel init file
|
|
||||||
(require "wakatime/wakatime.scm")
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
+171
-170
@@ -1,30 +1,8 @@
|
|||||||
{ pkgs, lib, config, osConfig, inputs, username, ... }:
|
{ pkgs, lib, config, osConfig, inputs, username, ... }: let
|
||||||
let
|
|
||||||
optImport = path: lib.optional (builtins.pathExists path) path;
|
optImport = path: lib.optional (builtins.pathExists path) path;
|
||||||
hostname = osConfig.networking.hostName;
|
hostname = osConfig.networking.hostName;
|
||||||
hyprLua = import ./hyprland/lua.nix { inherit lib; };
|
|
||||||
inherit (hyprLua) bind bindWithFlags exec onStart;
|
|
||||||
|
|
||||||
direction = {
|
|
||||||
left = "l";
|
|
||||||
right = "r";
|
|
||||||
up = "u";
|
|
||||||
down = "d";
|
|
||||||
};
|
|
||||||
|
|
||||||
workspaceBinds = lib.concatMap (workspace:
|
|
||||||
let
|
|
||||||
key = if workspace == 10 then "0" else toString workspace;
|
|
||||||
workspaceValue = toString workspace;
|
|
||||||
in [
|
|
||||||
(bind "SUPER + ${key}" "hl.dsp.focus({ workspace = ${workspaceValue} })")
|
|
||||||
(bind "SUPER + SHIFT + ${key}" "hl.dsp.window.move({ workspace = ${workspaceValue}, follow = false })")
|
|
||||||
]
|
|
||||||
) (lib.range 1 10);
|
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports =
|
||||||
./hyprland/zoom.nix
|
|
||||||
] ++
|
|
||||||
optImport ../../host/${hostname}/modules/hyprland.nix ++
|
optImport ../../host/${hostname}/modules/hyprland.nix ++
|
||||||
optImport ../../user/${username}/modules/hyprland.nix;
|
optImport ../../user/${username}/modules/hyprland.nix;
|
||||||
|
|
||||||
@@ -35,173 +13,206 @@ in {
|
|||||||
wl-clipboard
|
wl-clipboard
|
||||||
wl-clip-persist
|
wl-clip-persist
|
||||||
xclip
|
xclip
|
||||||
awww
|
|
||||||
wifitui
|
|
||||||
];
|
];
|
||||||
|
|
||||||
wayland.windowManager.hyprland = {
|
wayland.windowManager.hyprland = let
|
||||||
|
colors = config.lib.stylix.colors;
|
||||||
|
in {
|
||||||
enable = true;
|
enable = true;
|
||||||
configType = "lua";
|
|
||||||
xwayland.enable = true;
|
xwayland.enable = true;
|
||||||
|
|
||||||
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
|
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
|
||||||
plugins = with inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}; [
|
plugins = with inputs.hyprland-plugins.packages.${pkgs.system}; [
|
||||||
# hyprbars # Version mismatch
|
# hyprbars # Version mismatch
|
||||||
];
|
];
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
config = {
|
"$mainMod" = "SUPER";
|
||||||
ecosystem = {
|
|
||||||
no_donation_nag = true;
|
|
||||||
no_update_news = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
cursor.no_hardware_cursors = 1;
|
ecosystem = {
|
||||||
|
no_donation_nag = true;
|
||||||
debug = {
|
no_update_news = true;
|
||||||
disable_logs = false;
|
|
||||||
enable_stdout_logs = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
general."col.inactive_border" = lib.mkForce "rgba(00000000)";
|
|
||||||
|
|
||||||
decoration = {
|
|
||||||
inactive_opacity = lib.mkDefault 0.95;
|
|
||||||
border_part_of_window = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
misc.focus_on_activate = true;
|
|
||||||
|
|
||||||
input = {
|
|
||||||
kb_layout = "us,ru";
|
|
||||||
kb_options = "grp:caps_toggle";
|
|
||||||
numlock_by_default = true;
|
|
||||||
follow_mouse = 1;
|
|
||||||
touchpad.natural_scroll = false;
|
|
||||||
sensitivity = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
gestures = {
|
|
||||||
workspace_swipe_invert = true;
|
|
||||||
workspace_swipe_distance = 200;
|
|
||||||
workspace_swipe_forever = true;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
env = [
|
env = [
|
||||||
{ _args = [ "XDG_SESSION_TYPE" "wayland" ]; }
|
"XDG_SESSION_TYPE,wayland"
|
||||||
{ _args = [ "QT_QPA_PLATFORM" "wayland" ]; }
|
"QT_QPA_PLATFORM,wayland"
|
||||||
{ _args = [ "QT_QPA_PLATFORMTHEME" "xdgdesktopportal" ]; }
|
|
||||||
{ _args = [ "GTK_USE_PORTAL" "1" ]; }
|
"XDG_CURRENT_DESKTOP,Hyprland"
|
||||||
{ _args = [ "TDESKTOP_USE_GTK_FILE_DIALOG" "1" ]; }
|
"XDG_SESSION_DESKTOP,Hyprland"
|
||||||
{ _args = [ "NIXOS_OZONE_WL" "1" ]; }
|
|
||||||
{ _args = [ "ELECTRON_OZONE_PLATFORM_HINT" "auto" ]; }
|
"XCURSOR_SIZE, ${toString config.stylix.cursor.size}"
|
||||||
{ _args = [ "XDG_CURRENT_DESKTOP" "Hyprland" ]; }
|
"XCURSOR_THEME, ${config.stylix.cursor.name}"
|
||||||
{ _args = [ "XDG_SESSION_DESKTOP" "Hyprland" ]; }
|
|
||||||
{ _args = [ "XCURSOR_SIZE" (toString config.stylix.cursor.size) ]; }
|
"XDG_SCREENSHOTS_DIR,~/screens"
|
||||||
{ _args = [ "XCURSOR_THEME" config.stylix.cursor.name ]; }
|
|
||||||
{ _args = [ "XDG_SCREENSHOTS_DIR" "~/screens" ]; }
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
cursor.no_hardware_cursors = true;
|
||||||
|
|
||||||
|
debug = {
|
||||||
|
disable_logs = false;
|
||||||
|
enable_stdout_logs = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
general = {
|
||||||
|
"col.inactive_border" = lib.mkForce "rgba(00000000)";
|
||||||
|
};
|
||||||
|
|
||||||
|
decoration.inactive_opacity = lib.mkDefault .95;
|
||||||
|
decoration.border_part_of_window = false;
|
||||||
|
|
||||||
|
misc = {
|
||||||
|
focus_on_activate = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
input = {
|
||||||
|
kb_layout = "us,ru";
|
||||||
|
kb_options = "grp:caps_toggle";
|
||||||
|
numlock_by_default = true;
|
||||||
|
|
||||||
|
follow_mouse = 1;
|
||||||
|
|
||||||
|
touchpad = {
|
||||||
|
natural_scroll = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
sensitivity = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
gestures = {
|
||||||
|
workspace_swipe_invert = true;
|
||||||
|
workspace_swipe_distance = 200;
|
||||||
|
workspace_swipe_forever = true;
|
||||||
|
};
|
||||||
|
|
||||||
gesture = [
|
gesture = [
|
||||||
{
|
"3, horizontal, workspace"
|
||||||
fingers = 3;
|
|
||||||
direction = "horizontal";
|
|
||||||
action = "workspace";
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
|
|
||||||
workspace_rule = [
|
workspace = [
|
||||||
{
|
"w[t1], gapsout:10 0 0, gapsin:0"
|
||||||
workspace = "w[t1]";
|
|
||||||
gaps_out = 0;
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
|
|
||||||
window_rule = [
|
windowrule = [
|
||||||
{ match.class = "imv"; float = true; }
|
"float, class:^(imv)$"
|
||||||
{ match.class = "feh"; float = true; }
|
"float, class:^(feh)$"
|
||||||
{ match.class = "mpv"; float = true; }
|
"float, class:^(mpv)$"
|
||||||
{ match.title = "Список друзей"; float = true; }
|
"float, title:^(Список друзей)"
|
||||||
{ match.title = "wifitui"; float = true; }
|
"move onscreen cursor -50% -50%, class:^(dragon-drop)$"
|
||||||
{ match.title = "pulsemixer"; float = true; }
|
"float, title:(nmtui)"
|
||||||
{ match.title = "clipse"; float = true; }
|
"float, title:(pulsemixer)"
|
||||||
{ match.title = "clipse"; size = [ 622 652 ]; }
|
"float, title:(clipse)"
|
||||||
{ match.focus = true; rounding = 0; }
|
"size 622 652, title:(clipse)"
|
||||||
{
|
|
||||||
match = {
|
"rounding 0, focus:1"
|
||||||
float = false;
|
"bordersize 0, floating:0, onworkspace:w[t1]"
|
||||||
workspace = "w[t1]";
|
|
||||||
};
|
|
||||||
border_size = 0;
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
|
|
||||||
on = lib.mkBefore [
|
exec-once = lib.mkBefore [
|
||||||
(onStart [
|
"systemctl --user start plasma-polkit-agent"
|
||||||
"systemctl --user start plasma-polkit-agent"
|
"${lib.getExe' pkgs.swww "swww-daemon"}"
|
||||||
"${lib.getExe' pkgs.dbus "dbus-update-activation-environment"} --systemd --all"
|
"wl-clip-persist --clipboard both"
|
||||||
"systemctl --user import-environment XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE WAYLAND_DISPLAY DISPLAY GTK_USE_PORTAL QT_QPA_PLATFORMTHEME TDESKTOP_USE_GTK_FILE_DIALOG NIXOS_OZONE_WL ELECTRON_OZONE_PLATFORM_HINT"
|
"clipse -listen"
|
||||||
"awww-daemon"
|
"${lib.getExe' pkgs.udiskie "udiskie"}"
|
||||||
"wl-clip-persist --clipboard both"
|
|
||||||
"clipse -listen"
|
|
||||||
"${lib.getExe' pkgs.udiskie "udiskie"}"
|
|
||||||
])
|
|
||||||
];
|
];
|
||||||
|
|
||||||
bind = [
|
bind = [
|
||||||
(bind "SUPER + V" (exec "ghostty --title=clipse -e clipse"))
|
"$mainMod, V, exec, ghostty --title=clipse -e clipse"
|
||||||
(bind "SUPER + RETURN" (exec "ghostty"))
|
|
||||||
(bind "SUPER + Q" "hl.dsp.window.close()")
|
|
||||||
(bind "SUPER + M" "hl.dsp.exit()")
|
|
||||||
(bind "SUPER + E" (exec "ghostty -e sh -c yazi"))
|
|
||||||
(bind "SUPER + F" "hl.dsp.window.float({ action = \"toggle\" })")
|
|
||||||
(bind "SUPER + P" "hl.dsp.window.pseudo({ action = \"toggle\" })")
|
|
||||||
(bind "SUPER + J" "hl.dsp.layout(\"togglesplit\")")
|
|
||||||
(bind "SUPER + K" "hl.dsp.layout(\"swapsplit\")")
|
|
||||||
|
|
||||||
(bind "SUPER + LEFT" "hl.dsp.focus({ direction = \"${direction.left}\" })")
|
"$mainMod, Return, exec, ghostty"
|
||||||
(bind "SUPER + RIGHT" "hl.dsp.focus({ direction = \"${direction.right}\" })")
|
"$mainMod, Q, killactive,"
|
||||||
(bind "SUPER + UP" "hl.dsp.focus({ direction = \"${direction.up}\" })")
|
"$mainMod, M, exit,"
|
||||||
(bind "SUPER + DOWN" "hl.dsp.focus({ direction = \"${direction.down}\" })")
|
"$mainMod, E, exec, ghostty -e sh -c yazi"
|
||||||
|
"$mainMod, F, togglefloating,"
|
||||||
|
"$mainMod, D, exec, fuzzel"
|
||||||
|
"$mainMod, P, pseudo, # dwindle"
|
||||||
|
"$mainMod, J, togglesplit, # dwindle"
|
||||||
|
|
||||||
(bind "SUPER + SHIFT + LEFT" "hl.dsp.window.swap({ direction = \"${direction.left}\" })")
|
# Move focus with mainMod + arrow keys
|
||||||
(bind "SUPER + SHIFT + RIGHT" "hl.dsp.window.swap({ direction = \"${direction.right}\" })")
|
"$mainMod, left, movefocus, l"
|
||||||
(bind "SUPER + SHIFT + UP" "hl.dsp.window.swap({ direction = \"${direction.up}\" })")
|
"$mainMod, right, movefocus, r"
|
||||||
(bind "SUPER + SHIFT + DOWN" "hl.dsp.window.swap({ direction = \"${direction.down}\" })")
|
"$mainMod, up, movefocus, u"
|
||||||
|
"$mainMod, down, movefocus, d"
|
||||||
|
|
||||||
(bind "SUPER + CTRL + LEFT" "hl.dsp.window.resize({ x = -60, y = 0, relative = true })")
|
# Moving windows
|
||||||
(bind "SUPER + CTRL + RIGHT" "hl.dsp.window.resize({ x = 60, y = 0, relative = true })")
|
"$mainMod SHIFT, left, swapwindow, l"
|
||||||
(bind "SUPER + CTRL + UP" "hl.dsp.window.resize({ x = 0, y = -60, relative = true })")
|
"$mainMod SHIFT, right, swapwindow, r"
|
||||||
(bind "SUPER + CTRL + DOWN" "hl.dsp.window.resize({ x = 0, y = 60, relative = true })")
|
"$mainMod SHIFT, up, swapwindow, u"
|
||||||
] ++ workspaceBinds ++ [
|
"$mainMod SHIFT, down, swapwindow, d"
|
||||||
(bind "SUPER + SHIFT + F" "hl.dsp.window.fullscreen({ action = \"toggle\", mode = \"fullscreen\" })")
|
|
||||||
(bind "SUPER + mouse_down" "hl.dsp.focus({ workspace = \"e-1\" })")
|
|
||||||
(bind "SUPER + mouse_up" "hl.dsp.focus({ workspace = \"e+1\" })")
|
|
||||||
|
|
||||||
(bind "SUPER + F3" (exec "${lib.getExe pkgs.brightnessctl} -d *::kbd_backlight set +33%"))
|
# Window resizing X Y
|
||||||
(bind "SUPER + F2" (exec "${lib.getExe pkgs.brightnessctl} -d *::kbd_backlight set 33%-"))
|
"$mainMod CTRL, left, resizeactive, -60 0"
|
||||||
|
"$mainMod CTRL, right, resizeactive, 60 0"
|
||||||
|
"$mainMod CTRL, up, resizeactive, 0 -60"
|
||||||
|
"$mainMod CTRL, down, resizeactive, 0 60"
|
||||||
|
|
||||||
(bind "XF86AudioMute" (exec "pamixer -t"))
|
# Switch workspaces with mainMod + [0-9]
|
||||||
(bind "XF86AudioMicMute" (exec "pamixer --default-source -m"))
|
"$mainMod, 1, workspace, 1"
|
||||||
(bind "XF86AudioPlay" (exec "${lib.getExe pkgs.playerctl} play-pause"))
|
"$mainMod, 2, workspace, 2"
|
||||||
(bind "XF86Explorer" (exec "ghostty -e sh -c yazi"))
|
"$mainMod, 3, workspace, 3"
|
||||||
(bind "XF86Mail" (exec "thunderbird"))
|
"$mainMod, 4, workspace, 4"
|
||||||
(bind "XF86WWW" (exec "google-chrome-stable"))
|
"$mainMod, 5, workspace, 5"
|
||||||
|
"$mainMod, 6, workspace, 6"
|
||||||
|
"$mainMod, 7, workspace, 7"
|
||||||
|
"$mainMod, 8, workspace, 8"
|
||||||
|
"$mainMod, 9, workspace, 9"
|
||||||
|
"$mainMod, 0, workspace, 10"
|
||||||
|
|
||||||
(bind "XF86MonBrightnessDown" (exec "${lib.getExe pkgs.brightnessctl} set 5%-"))
|
# Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||||
(bind "XF86MonBrightnessUp" (exec "${lib.getExe pkgs.brightnessctl} set +5%"))
|
"$mainMod SHIFT, 1, movetoworkspacesilent, 1"
|
||||||
|
"$mainMod SHIFT, 2, movetoworkspacesilent, 2"
|
||||||
|
"$mainMod SHIFT, 3, movetoworkspacesilent, 3"
|
||||||
|
"$mainMod SHIFT, 4, movetoworkspacesilent, 4"
|
||||||
|
"$mainMod SHIFT, 5, movetoworkspacesilent, 5"
|
||||||
|
"$mainMod SHIFT, 6, movetoworkspacesilent, 6"
|
||||||
|
"$mainMod SHIFT, 7, movetoworkspacesilent, 7"
|
||||||
|
"$mainMod SHIFT, 8, movetoworkspacesilent, 8"
|
||||||
|
"$mainMod SHIFT, 9, movetoworkspacesilent, 9"
|
||||||
|
"$mainMod SHIFT, 0, movetoworkspacesilent, 10"
|
||||||
|
|
||||||
(bindWithFlags "XF86AudioRaiseVolume" (exec "pamixer -i 5") { repeating = true; })
|
"$mainMod SHIFT, F, fullscreen"
|
||||||
(bindWithFlags "XF86AudioLowerVolume" (exec "pamixer -d 5") { repeating = true; })
|
|
||||||
|
|
||||||
(bindWithFlags "XF86AudioPrev" (exec "${lib.getExe pkgs.playerctl} position 5-") { click = true; })
|
# Scroll through existing workspaces with mainMod + scroll
|
||||||
(bindWithFlags "XF86AudioNext" (exec "${lib.getExe pkgs.playerctl} position 5+") { click = true; })
|
"$mainMod, mouse_down, workspace, e+1"
|
||||||
(bindWithFlags "XF86AudioPrev" (exec "${lib.getExe pkgs.playerctl} previous") { long_press = true; })
|
"$mainMod, mouse_up, workspace, e-1"
|
||||||
(bindWithFlags "XF86AudioNext" (exec "${lib.getExe pkgs.playerctl} next") { long_press = true; })
|
|
||||||
|
|
||||||
(bindWithFlags "SUPER + mouse:272" "hl.dsp.window.drag()" { mouse = true; })
|
# Keyboard backlight
|
||||||
(bindWithFlags "SUPER + mouse:273" "hl.dsp.window.resize()" { mouse = true; })
|
"$mainMod, F3, exec, ${lib.getExe pkgs.brightnessctl} -d *::kbd_backlight set +33%"
|
||||||
|
"$mainMod, F2, exec, ${lib.getExe pkgs.brightnessctl} -d *::kbd_backlight set 33%-"
|
||||||
|
|
||||||
|
# Volume and Media Control
|
||||||
|
", XF86AudioMute, exec, pamixer -t"
|
||||||
|
", XF86AudioMicMute, exec, pamixer --default-source -m"
|
||||||
|
", XF86AudioPlay, exec, ${lib.getExe pkgs.playerctl} play-pause"
|
||||||
|
|
||||||
|
", XF86Explorer, exec, ghostty -e sh -c yazi"
|
||||||
|
", XF86Mail, exec, thunderbird"
|
||||||
|
", XF86WWW, exec, google-chrome-stable" # TODO: Replace hard-code to some variable
|
||||||
|
|
||||||
|
# Brightness control
|
||||||
|
", XF86MonBrightnessDown, exec, ${lib.getExe pkgs.brightnessctl} set 5%- "
|
||||||
|
", XF86MonBrightnessUp, exec, ${lib.getExe pkgs.brightnessctl} set +5% "
|
||||||
|
];
|
||||||
|
|
||||||
|
binde = [
|
||||||
|
", XF86AudioRaiseVolume, exec, pamixer -i 5 "
|
||||||
|
", XF86AudioLowerVolume, exec, pamixer -d 5 "
|
||||||
|
];
|
||||||
|
|
||||||
|
bindc = [
|
||||||
|
", XF86AudioPrev, exec, ${lib.getExe pkgs.playerctl} position 5-"
|
||||||
|
", XF86AudioNext, exec, ${lib.getExe pkgs.playerctl} position 5+"
|
||||||
|
];
|
||||||
|
|
||||||
|
bindo = [
|
||||||
|
", XF86AudioPrev, exec, ${lib.getExe pkgs.playerctl} previous"
|
||||||
|
", XF86AudioNext, exec, ${lib.getExe pkgs.playerctl} next"
|
||||||
|
];
|
||||||
|
|
||||||
|
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
|
bindm = [
|
||||||
|
"$mainMod, mouse:272, movewindow"
|
||||||
|
"$mainMod, mouse:273, resizewindow"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -211,21 +222,11 @@ in {
|
|||||||
|
|
||||||
extraPortals = [
|
extraPortals = [
|
||||||
pkgs.xdg-desktop-portal-gtk
|
pkgs.xdg-desktop-portal-gtk
|
||||||
pkgs.xdg-desktop-portal-termfilechooser
|
|
||||||
];
|
];
|
||||||
|
|
||||||
config = {
|
config.common = {
|
||||||
common = {
|
default = [ "hyprland" "gtk" ];
|
||||||
default = [ "hyprland" "gtk" ];
|
"org.freedesktop.impl.portal.FileChooser" = [ "gtk" ];
|
||||||
"org.freedesktop.impl.portal.FileChooser" = [ "termfilechooser" "gtk" ];
|
|
||||||
"org.freedesktop.impl.portal.Settings" = [ "gtk" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
hyprland = {
|
|
||||||
default = [ "hyprland" "gtk" ];
|
|
||||||
"org.freedesktop.impl.portal.FileChooser" = [ "termfilechooser" "gtk" ];
|
|
||||||
"org.freedesktop.impl.portal.Settings" = [ "gtk" ];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
{ lib }:
|
|
||||||
let
|
|
||||||
inline = lib.generators.mkLuaInline;
|
|
||||||
quote = builtins.toJSON;
|
|
||||||
in rec {
|
|
||||||
inherit inline;
|
|
||||||
|
|
||||||
exec = command: "hl.dsp.exec_cmd(${quote command})";
|
|
||||||
|
|
||||||
bind = keys: dispatcher: {
|
|
||||||
_args = [
|
|
||||||
keys
|
|
||||||
(inline dispatcher)
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
bindWithFlags = keys: dispatcher: flags: {
|
|
||||||
_args = [
|
|
||||||
keys
|
|
||||||
(inline dispatcher)
|
|
||||||
flags
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
onStart = commands: {
|
|
||||||
_args = [
|
|
||||||
"hyprland.start"
|
|
||||||
(inline (
|
|
||||||
"function()\n"
|
|
||||||
+ lib.concatMapStringsSep "\n" (command: " hl.exec_cmd(${quote command})") commands
|
|
||||||
+ "\nend"
|
|
||||||
))
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
{ lib, ... }:
|
|
||||||
let
|
|
||||||
hyprLua = import ./lua.nix { inherit lib; };
|
|
||||||
inherit (hyprLua) bind bindWithFlags;
|
|
||||||
|
|
||||||
resetZoom = ''function()
|
|
||||||
hl.config({ cursor = { zoom_factor = 1 } })
|
|
||||||
end'';
|
|
||||||
|
|
||||||
zoomIn = ''function()
|
|
||||||
local current = hl.get_config("cursor.zoom_factor")
|
|
||||||
hl.config({ cursor = { zoom_factor = current * 1.1 } })
|
|
||||||
end'';
|
|
||||||
|
|
||||||
zoomOut = ''function()
|
|
||||||
local current = hl.get_config("cursor.zoom_factor")
|
|
||||||
hl.config({ cursor = { zoom_factor = math.max(1, current * 0.9) } })
|
|
||||||
end'';
|
|
||||||
in {
|
|
||||||
wayland.windowManager.hyprland.settings.bind = [
|
|
||||||
(bind "SUPER + SHIFT + mouse_up" resetZoom)
|
|
||||||
(bind "SUPER + SHIFT + mouse_down" resetZoom)
|
|
||||||
(bind "SUPER + SHIFT + minus" resetZoom)
|
|
||||||
(bind "SUPER + SHIFT + KP_SUBTRACT" resetZoom)
|
|
||||||
(bind "SUPER + SHIFT + 0" resetZoom)
|
|
||||||
|
|
||||||
(bindWithFlags "SUPER + equal" zoomIn { repeating = true; })
|
|
||||||
(bindWithFlags "SUPER + minus" zoomOut { repeating = true; })
|
|
||||||
(bindWithFlags "SUPER + KP_ADD" zoomIn { repeating = true; })
|
|
||||||
(bindWithFlags "SUPER + KP_SUBTRACT" zoomOut { repeating = true; })
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,11 +1,7 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{ config, pkgs, lib, ... }:
|
||||||
let
|
|
||||||
hyprLua = import ./hyprland/lua.nix { inherit lib; };
|
|
||||||
in
|
|
||||||
lib.mkIf config.programs.hyprlock.enable {
|
lib.mkIf config.programs.hyprlock.enable {
|
||||||
wayland.windowManager.hyprland.settings.on = [
|
wayland.windowManager.hyprland.settings.exec-once = [ "hyprlock" ];
|
||||||
(hyprLua.onStart [ "hyprlock" ])
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.hyprlock = let
|
programs.hyprlock = let
|
||||||
image = pkgs.fetchurl {
|
image = pkgs.fetchurl {
|
||||||
|
|||||||
+20
-12
@@ -1,13 +1,21 @@
|
|||||||
{ config, lib, ... }: let
|
{ config, pkgs, ... }:
|
||||||
colors = config.lib.stylix.colors.withHashtag;
|
let
|
||||||
accent = colors.${config.stylix.accent};
|
colors = config.lib.stylix.colors;
|
||||||
in {
|
in {
|
||||||
services.mako = {
|
home.packages = [ pkgs.mako ];
|
||||||
enable = true;
|
xdg.configFile."mako/config".text = ''
|
||||||
|
background-color=#${colors.base00}
|
||||||
|
text-color=#${colors.base05}
|
||||||
|
border-color=#${colors.base0B}
|
||||||
|
border-radius=10
|
||||||
|
margin=16
|
||||||
|
progress-color=over #${colors.base0A}
|
||||||
|
default-timeout=5000
|
||||||
|
|
||||||
settings = {
|
[urgency=high]
|
||||||
border-color = lib.mkForce accent;
|
border-color=#${colors.base09}
|
||||||
default-timeout = 5000;
|
|
||||||
};
|
[urgency=low]
|
||||||
};
|
border-color=#${colors.base04}
|
||||||
}
|
'';
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
{ pkgs, pkgs-stable, ... }: {
|
{ pkgs, pkgs-pinned, inputs, ... }: {
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
ayugram-desktop
|
pkgs-pinned.ayugram-desktop
|
||||||
vesktop
|
vesktop
|
||||||
obs-studio
|
obs-studio
|
||||||
mpv
|
mpv
|
||||||
imhex
|
imhex
|
||||||
obsidian
|
obsidian
|
||||||
pkgs-stable.qbittorrent
|
qbittorrent
|
||||||
thunderbird
|
thunderbird
|
||||||
libreoffice
|
libreoffice
|
||||||
pear-desktop
|
|
||||||
( pkgs.callPackage ../../../drv/mumble.nix {} )
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
{ stdenv, colors, accent ? colors.base0B, ... }:
|
{ stdenv, lib, config, colors, username, ... }:
|
||||||
stdenv.mkDerivation {
|
stdenv.mkDerivation {
|
||||||
name = "AGS theme";
|
name = "AGS theme";
|
||||||
|
|
||||||
src = ./ags;
|
src = ./ags;
|
||||||
dontUnpack = true;
|
dontUnpack = true;
|
||||||
|
|
||||||
patchPhase = ''
|
patchPhase = let
|
||||||
|
accent = if username == "chest"
|
||||||
|
then colors.base0E
|
||||||
|
else colors.base0B;
|
||||||
|
in ''
|
||||||
echo \$bg: \#${colors.base00}\; > colors.scss
|
echo \$bg: \#${colors.base00}\; > colors.scss
|
||||||
echo \$surface0: \#${colors.base02}\; >> colors.scss
|
echo \$surface0: \#${colors.base02}\; >> colors.scss
|
||||||
echo \$fg: \#${colors.base05}\; >> colors.scss
|
echo \$fg: \#${colors.base05}\; >> colors.scss
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
{ pkgs, ... }: {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
texstudio
|
||||||
|
(texlive.combine {
|
||||||
|
inherit (texlive)
|
||||||
|
babel-russian
|
||||||
|
cm-super
|
||||||
|
cyrillic
|
||||||
|
hyphen-russian
|
||||||
|
hyphenat
|
||||||
|
titlesec
|
||||||
|
caption
|
||||||
|
float
|
||||||
|
xcolor
|
||||||
|
listings
|
||||||
|
pagecolor
|
||||||
|
moresize
|
||||||
|
raleway
|
||||||
|
fontawesome5
|
||||||
|
luatexbase
|
||||||
|
fontspec
|
||||||
|
ragged2e
|
||||||
|
enumitem
|
||||||
|
extsizes
|
||||||
|
multirow
|
||||||
|
varwidth
|
||||||
|
paracol
|
||||||
|
anyfontsize
|
||||||
|
scheme-basic;
|
||||||
|
})
|
||||||
|
];
|
||||||
|
}
|
||||||
+1
-11
@@ -1,14 +1,4 @@
|
|||||||
{ lib, ... }: {
|
{
|
||||||
# Keep qtct/Kvantum for styling, but tell qtct to delegate standard file
|
|
||||||
# dialogs to xdg-desktop-portal. This is what makes AyuGram/Telegram-like Qt
|
|
||||||
# apps use the Yazi picker instead of Qt's built-in dialog.
|
|
||||||
stylix.targets.qt.standardDialogs = "xdgdesktopportal";
|
|
||||||
|
|
||||||
home.sessionVariables = {
|
|
||||||
QT_QPA_PLATFORMTHEME = lib.mkForce "xdgdesktopportal";
|
|
||||||
TDESKTOP_USE_GTK_FILE_DIALOG = "1";
|
|
||||||
};
|
|
||||||
|
|
||||||
qt = {
|
qt = {
|
||||||
enable = true;
|
enable = true;
|
||||||
platformTheme.name = "qtct";
|
platformTheme.name = "qtct";
|
||||||
|
|||||||
@@ -1,182 +0,0 @@
|
|||||||
{ pkgs, config, ... }: let
|
|
||||||
c = config.lib.stylix.colors.withHashtag;
|
|
||||||
font = config.stylix.fonts.sansSerif.name;
|
|
||||||
in {
|
|
||||||
programs.quickshell = {
|
|
||||||
enable = true;
|
|
||||||
activeConfig = "control-center";
|
|
||||||
|
|
||||||
configs = {
|
|
||||||
control-center = pkgs.writeTextDir "shell.qml" ''
|
|
||||||
import Quickshell
|
|
||||||
import Quickshell.Wayland
|
|
||||||
import Quickshell.Hyprland
|
|
||||||
import QtQuick
|
|
||||||
import QtQuick.Layouts
|
|
||||||
|
|
||||||
PanelWindow {
|
|
||||||
id: root
|
|
||||||
|
|
||||||
anchors {
|
|
||||||
top: true
|
|
||||||
right: true
|
|
||||||
}
|
|
||||||
|
|
||||||
implicitWidth: 360
|
|
||||||
implicitHeight: wrapper.implicitHeight
|
|
||||||
|
|
||||||
color: "transparent"
|
|
||||||
|
|
||||||
margins {
|
|
||||||
top: -12
|
|
||||||
right: 0
|
|
||||||
}
|
|
||||||
|
|
||||||
exclusionMode: ExclusionMode.Normal
|
|
||||||
exclusiveZone: 0
|
|
||||||
|
|
||||||
WlrLayershell.namespace: "qs-control-center"
|
|
||||||
WlrLayershell.layer: WlrLayer.Overlay
|
|
||||||
WlrLayershell.keyboardFocus: WlrKeyboardFocus.OnDemand
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: wrapper
|
|
||||||
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
readonly property int outerMargin: 12
|
|
||||||
readonly property int innerMargin: 18
|
|
||||||
readonly property int buttonHeight: 48
|
|
||||||
readonly property int spacingSize: 14
|
|
||||||
|
|
||||||
implicitWidth: 360
|
|
||||||
implicitHeight: panel.implicitHeight + outerMargin * 2
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: panel
|
|
||||||
|
|
||||||
x: wrapper.outerMargin
|
|
||||||
y: wrapper.outerMargin
|
|
||||||
width: parent.width - wrapper.outerMargin * 2
|
|
||||||
height: implicitHeight
|
|
||||||
|
|
||||||
implicitHeight: content.implicitHeight + wrapper.innerMargin * 2
|
|
||||||
|
|
||||||
radius: 20
|
|
||||||
color: "${c.base00}"
|
|
||||||
border.color: "${c.base03}"
|
|
||||||
border.width: 1
|
|
||||||
|
|
||||||
ColumnLayout {
|
|
||||||
id: content
|
|
||||||
|
|
||||||
x: wrapper.innerMargin
|
|
||||||
y: wrapper.innerMargin
|
|
||||||
width: parent.width - wrapper.innerMargin * 2
|
|
||||||
|
|
||||||
spacing: wrapper.spacingSize
|
|
||||||
|
|
||||||
Text {
|
|
||||||
text: "Control Center"
|
|
||||||
color: "${c.base05}"
|
|
||||||
font.family: "${font}"
|
|
||||||
font.pixelSize: 22
|
|
||||||
font.bold: true
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
height: wrapper.buttonHeight
|
|
||||||
radius: 12
|
|
||||||
color: audioMouse.containsMouse ? "${c.base02}" : "${c.base01}"
|
|
||||||
border.color: "${c.base03}"
|
|
||||||
border.width: 1
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: "Audio settings"
|
|
||||||
color: "${c.base05}"
|
|
||||||
font.family: "${font}"
|
|
||||||
font.pixelSize: 15
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: audioMouse
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
onClicked: Hyprland.dispatch("exec pavucontrol")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
height: wrapper.buttonHeight
|
|
||||||
radius: 12
|
|
||||||
color: networkMouse.containsMouse ? "${c.base02}" : "${c.base01}"
|
|
||||||
border.color: "${c.base03}"
|
|
||||||
border.width: 1
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: "Network settings"
|
|
||||||
color: "${c.base05}"
|
|
||||||
font.family: "${font}"
|
|
||||||
font.pixelSize: 15
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: networkMouse
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
onClicked: Hyprland.dispatch("exec nm-connection-editor")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
height: wrapper.buttonHeight
|
|
||||||
radius: 12
|
|
||||||
color: bluetoothMouse.containsMouse ? "${c.base02}" : "${c.base01}"
|
|
||||||
border.color: "${c.base03}"
|
|
||||||
border.width: 1
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: "Bluetooth"
|
|
||||||
color: "${c.base05}"
|
|
||||||
font.family: "${font}"
|
|
||||||
font.pixelSize: 15
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: bluetoothMouse
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
onClicked: Hyprland.dispatch("exec blueman-manager")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
height: 1
|
|
||||||
color: "${c.base03}"
|
|
||||||
}
|
|
||||||
|
|
||||||
Text {
|
|
||||||
text: "Quickshell + Hyprland"
|
|
||||||
color: "${c.base04}"
|
|
||||||
font.family: "${font}"
|
|
||||||
font.pixelSize: 13
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
programs.ssh = {
|
programs.ssh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableDefaultConfig = false;
|
enableDefaultConfig = false;
|
||||||
settings = {
|
matchBlocks = {
|
||||||
"*" = {
|
"*" = {
|
||||||
serverAliveInterval = 30;
|
serverAliveInterval = 30;
|
||||||
serverAliveCountMax = 5;
|
serverAliveCountMax = 5;
|
||||||
|
|||||||
@@ -1,40 +0,0 @@
|
|||||||
{ config, lib, ... }: let
|
|
||||||
inherit (lib) mkOption types;
|
|
||||||
|
|
||||||
base16Names = [
|
|
||||||
"base00"
|
|
||||||
"base01"
|
|
||||||
"base02"
|
|
||||||
"base03"
|
|
||||||
"base04"
|
|
||||||
"base05"
|
|
||||||
"base06"
|
|
||||||
"base07"
|
|
||||||
"base08"
|
|
||||||
"base09"
|
|
||||||
"base0A"
|
|
||||||
"base0B"
|
|
||||||
"base0C"
|
|
||||||
"base0D"
|
|
||||||
"base0E"
|
|
||||||
"base0F"
|
|
||||||
];
|
|
||||||
in {
|
|
||||||
options.stylix.accent = mkOption {
|
|
||||||
type = types.enum base16Names;
|
|
||||||
default = "base0B";
|
|
||||||
description = ''
|
|
||||||
Base16 colour used as the user accent.
|
|
||||||
|
|
||||||
Use it as:
|
|
||||||
|
|
||||||
config.lib.stylix.colors.${config.stylix.accent}
|
|
||||||
config.lib.stylix.colors.withHashtag.${config.stylix.accent}
|
|
||||||
|
|
||||||
This module deliberately does not extend config.lib.stylix.colors: Stylix
|
|
||||||
exports that value as a generated base16 attrset/functor, and replacing or
|
|
||||||
partially extending it can break Stylix targets which expect metadata such
|
|
||||||
as `scheme` to be present.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{ lib, ... }:
|
|
||||||
let
|
|
||||||
hyprLua = import ./hyprland/lua.nix { inherit lib; };
|
|
||||||
in {
|
|
||||||
services = {
|
|
||||||
walker = {
|
|
||||||
enable = true;
|
|
||||||
systemd.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
elephant.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
wayland.windowManager.hyprland.settings.bind = [
|
|
||||||
(hyprLua.bind "SUPER + D" (hyprLua.exec "walker"))
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,142 @@
|
|||||||
|
{ osConfig, config, pkgs, ... }: {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
font-awesome
|
||||||
|
nerd-fonts.symbols-only
|
||||||
|
playerctl
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.waybar = {
|
||||||
|
enable = true;
|
||||||
|
systemd.enable = true;
|
||||||
|
|
||||||
|
settings.mainBar = {
|
||||||
|
spacing = 8;
|
||||||
|
|
||||||
|
modules-left = [
|
||||||
|
"hyprland/workspaces"
|
||||||
|
"hyprland/language"
|
||||||
|
"keyboard-state"
|
||||||
|
];
|
||||||
|
|
||||||
|
modules-center = [
|
||||||
|
"mpris"
|
||||||
|
];
|
||||||
|
|
||||||
|
modules-right = [
|
||||||
|
"tray"
|
||||||
|
"group/system"
|
||||||
|
"pulseaudio"
|
||||||
|
"battery"
|
||||||
|
"clock"
|
||||||
|
];
|
||||||
|
|
||||||
|
clock = {
|
||||||
|
tooltip = false;
|
||||||
|
interval = 5;
|
||||||
|
format = "{:L%d %b - %H:%M %a}";
|
||||||
|
};
|
||||||
|
|
||||||
|
pulseaudio = {
|
||||||
|
format = "{icon} {volume}%";
|
||||||
|
format-icons = {
|
||||||
|
headphone = "";
|
||||||
|
hands-free = "";
|
||||||
|
headset = "";
|
||||||
|
phone = "";
|
||||||
|
phone-muted = "";
|
||||||
|
portable = "";
|
||||||
|
car = "";
|
||||||
|
default = ["" ""];
|
||||||
|
};
|
||||||
|
on-click = "ghostty --title=pulsemixer -e pulsemixer";
|
||||||
|
};
|
||||||
|
|
||||||
|
mpris = {
|
||||||
|
format = "{dynamic}";
|
||||||
|
dynamic-len = if osConfig.host.laptop then 32 else 64;
|
||||||
|
dynamic-order = [ "title" "artist" "album" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
battery = {
|
||||||
|
interval = 5;
|
||||||
|
states = {
|
||||||
|
warning = 30;
|
||||||
|
critical = 15;
|
||||||
|
};
|
||||||
|
format = "{icon} {capacity}%";
|
||||||
|
format-icons = {
|
||||||
|
default = ["" "" "" "" "" "" "" "" "" "" ""];
|
||||||
|
charging = ["" "" "" "" "" "" "" "" "" "" ""];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
"keyboard-state" = {
|
||||||
|
capslock = true;
|
||||||
|
format = "{icon}";
|
||||||
|
format-icons = {
|
||||||
|
locked = "CAPS";
|
||||||
|
unlocked = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
"hyprland/language" = {
|
||||||
|
format-en = "en";
|
||||||
|
format-ru = "ru";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
"group/system" = {
|
||||||
|
orientation = "inherit";
|
||||||
|
drawer = {
|
||||||
|
transition-duration = 500;
|
||||||
|
transition-left-to-right = false;
|
||||||
|
};
|
||||||
|
modules = [
|
||||||
|
"network"
|
||||||
|
"custom/mem"
|
||||||
|
"cpu"
|
||||||
|
"temperature"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
network = {
|
||||||
|
format = "{ifname}";
|
||||||
|
format-wifi = " {essid} ({signalStrength}%)";
|
||||||
|
format-ethernet = "{ifname}";
|
||||||
|
format-disconnected = "";
|
||||||
|
tooltip-format = "{ipaddr}";
|
||||||
|
max-length = 50;
|
||||||
|
on-click = "ghostty --title=nmtui -e nmtui";
|
||||||
|
};
|
||||||
|
|
||||||
|
"custom/weather" = {
|
||||||
|
format = "{}";
|
||||||
|
tooltip = true;
|
||||||
|
interval = 1800;
|
||||||
|
exec = "python3 $HOME/.config/waybar/scripts/wttr.py";
|
||||||
|
return-type = "json";
|
||||||
|
};
|
||||||
|
|
||||||
|
"custom/mem" = {
|
||||||
|
format = "{} ";
|
||||||
|
interval = 3;
|
||||||
|
exec = "free -h | awk '/Mem:/{printf $3}'";
|
||||||
|
tooltip = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
cpu = {
|
||||||
|
interval = 2;
|
||||||
|
format = "{usage}% ";
|
||||||
|
min-length = 6;
|
||||||
|
};
|
||||||
|
|
||||||
|
temperature = {
|
||||||
|
hwmon-path = "/sys/class/hwmon/hwmon5/temp1_input";
|
||||||
|
critical-threshold = 80;
|
||||||
|
format = "{temperatureC}°C {icon}";
|
||||||
|
format-icons = ["" "" "" "" ""];
|
||||||
|
tooltip = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }: let
|
|
||||||
c = config.lib.stylix.colors;
|
|
||||||
|
|
||||||
wobSocket = ''"''${XDG_RUNTIME_DIR:-/run/user/$(id -u)}/wob.sock"'';
|
|
||||||
|
|
||||||
volumeStep = pkgs.writeShellScriptBin "volume-step" /*bash*/ ''
|
|
||||||
volume="$(${lib.getExe' pkgs.wireplumber "wpctl"} get-volume @DEFAULT_AUDIO_SINK@)"
|
|
||||||
percent="$(printf '%s\n' "$volume" | ${pkgs.gawk}/bin/awk '{print int($2 * 100)}')"
|
|
||||||
|
|
||||||
if printf '%s\n' "$volume" | ${pkgs.gnugrep}/bin/grep -q MUTED; then
|
|
||||||
printf '%s muted\n' "$percent" > ${wobSocket}
|
|
||||||
else
|
|
||||||
printf '%s volume\n' "$percent" > ${wobSocket}
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
|
|
||||||
brightnessStep = pkgs.writeShellScriptBin "brightness-step" /*bash*/ ''
|
|
||||||
percent="$(${lib.getExe pkgs.brightnessctl} -m | ${lib.getExe' pkgs.coreutils "cut"} -d, -f4 | ${lib.getExe' pkgs.coreutils "tr"} -d '%')"
|
|
||||||
printf '%s brightness\n' "$percent" > ${wobSocket}
|
|
||||||
'';
|
|
||||||
|
|
||||||
hyprLua = import ./hyprland/lua.nix { inherit lib; };
|
|
||||||
in {
|
|
||||||
systemd.user = {
|
|
||||||
services.wob.Install.WantedBy = lib.mkForce [ ];
|
|
||||||
sockets.wob.Install.WantedBy = lib.mkForce [ "sockets.target" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
services.wob = {
|
|
||||||
enable = true;
|
|
||||||
systemd = true;
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
"" = {
|
|
||||||
timeout = 2000;
|
|
||||||
max = 100;
|
|
||||||
|
|
||||||
width = 280;
|
|
||||||
height = 32;
|
|
||||||
|
|
||||||
border_offset = 0;
|
|
||||||
border_size = 2;
|
|
||||||
bar_padding = 4;
|
|
||||||
|
|
||||||
anchor = "top center";
|
|
||||||
margin = "0 0 0 0";
|
|
||||||
|
|
||||||
overflow_mode = "nowrap";
|
|
||||||
orientation = "horizontal";
|
|
||||||
};
|
|
||||||
|
|
||||||
"style.volume" = { bar_color = c.base0D; };
|
|
||||||
"style.brightness" = { bar_color = c.base0A; };
|
|
||||||
"style.muted" = { bar_color = c.base04; };
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
wayland.windowManager.hyprland.settings.bind = [
|
|
||||||
(hyprLua.bindWithFlags "XF86AudioRaiseVolume" (hyprLua.exec "${lib.getExe volumeStep}") {
|
|
||||||
repeating = true;
|
|
||||||
locked = true;
|
|
||||||
})
|
|
||||||
(hyprLua.bindWithFlags "XF86AudioLowerVolume" (hyprLua.exec "${lib.getExe volumeStep}") {
|
|
||||||
repeating = true;
|
|
||||||
locked = true;
|
|
||||||
})
|
|
||||||
(hyprLua.bindWithFlags "XF86MonBrightnessUp" (hyprLua.exec "${lib.getExe brightnessStep}") {
|
|
||||||
repeating = true;
|
|
||||||
locked = true;
|
|
||||||
})
|
|
||||||
(hyprLua.bindWithFlags "XF86MonBrightnessDown" (hyprLua.exec "${lib.getExe brightnessStep}") {
|
|
||||||
repeating = true;
|
|
||||||
locked = true;
|
|
||||||
})
|
|
||||||
(hyprLua.bind "XF86AudioMute" (hyprLua.exec "${lib.getExe volumeStep} mute"))
|
|
||||||
];
|
|
||||||
}
|
|
||||||
+97
-356
@@ -1,366 +1,107 @@
|
|||||||
{ pkgs, lib, inputs, ... }: let
|
{ pkgs, lib, inputs, ... }: {
|
||||||
hostSystem = pkgs.stdenv.hostPlatform.system;
|
home.packages = with pkgs; [
|
||||||
|
( ouch.override { enableUnfree = true; } )
|
||||||
|
];
|
||||||
|
|
||||||
yaziPkg = inputs.yazi.packages.${hostSystem}.default.override {
|
programs.yazi = {
|
||||||
_7zz = pkgs._7zz-rar;
|
package = inputs.yazi.packages
|
||||||
};
|
.${pkgs.stdenv.hostPlatform.system}.default
|
||||||
|
.override { _7zz = pkgs._7zz-rar; };
|
||||||
|
enable = true;
|
||||||
|
enableZshIntegration = true;
|
||||||
|
shellWrapperName = "y";
|
||||||
|
|
||||||
yaziOpen = pkgs.writeShellScriptBin "yazi-open" ''
|
settings = {
|
||||||
set -efu
|
mgr = {
|
||||||
|
show_hidden = true;
|
||||||
|
};
|
||||||
|
preview = {
|
||||||
|
max_width = 1000;
|
||||||
|
max_height = 1000;
|
||||||
|
};
|
||||||
|
plugin = {
|
||||||
|
preloaders = [
|
||||||
|
{ name = "*.crdownload"; run = "noop"; }
|
||||||
|
];
|
||||||
|
|
||||||
target="''${1:-$HOME}"
|
prepend_previewers = [
|
||||||
|
{ mime = "application/xz"; run = "ouch"; }
|
||||||
|
{ mime = "application/zip"; run = "ouch"; }
|
||||||
|
{ mime = "application/rar"; run = "ouch"; }
|
||||||
|
{ mime = "application/gzip"; run = "ouch"; }
|
||||||
|
{ mime = "application/7z-compressed"; run = "ouch"; }
|
||||||
|
];
|
||||||
|
|
||||||
case "$target" in
|
prepend_fetchers = [
|
||||||
file://*)
|
{ id = "git"; mime = "*"; run = "git"; }
|
||||||
target="$(${lib.getExe pkgs.python3} -c 'import sys, urllib.parse; print(urllib.parse.unquote(urllib.parse.urlparse(sys.argv[1]).path))' "$target")"
|
];
|
||||||
;;
|
};
|
||||||
esac
|
};
|
||||||
|
|
||||||
if [ -f "$target" ]; then
|
plugins = with pkgs.yaziPlugins; {
|
||||||
target="$(dirname "$target")"
|
inherit
|
||||||
fi
|
chmod
|
||||||
|
ouch
|
||||||
|
full-border
|
||||||
|
starship
|
||||||
|
mount
|
||||||
|
git
|
||||||
|
toggle-pane
|
||||||
|
;
|
||||||
|
};
|
||||||
|
|
||||||
if [ ! -e "$target" ]; then
|
initLua = ''
|
||||||
target="$HOME"
|
require("git"):setup()
|
||||||
fi
|
require("full-border"):setup()
|
||||||
|
require("starship"):setup()
|
||||||
|
|
||||||
exec ${lib.getExe pkgs.ghostty} --title="Yazi" -e ${lib.getExe yaziPkg} "$target"
|
Status:children_add(function()
|
||||||
'';
|
local h = cx.active.current.hovered
|
||||||
|
if not h or ya.target_family() ~= "unix" then
|
||||||
|
return ""
|
||||||
|
end
|
||||||
|
|
||||||
yaziFileChooser = pkgs.writeShellScriptBin "yazi-file-chooser" ''
|
return ui.Line {
|
||||||
set -efu
|
ui.Span(ya.user_name(h.cha.uid) or tostring(h.cha.uid)):fg("magenta"),
|
||||||
|
":",
|
||||||
|
ui.Span(ya.group_name(h.cha.gid) or tostring(h.cha.gid)):fg("magenta"),
|
||||||
|
" ",
|
||||||
|
}
|
||||||
|
end, 500, Status.RIGHT)
|
||||||
|
'';
|
||||||
|
|
||||||
directory="''${2:-0}"
|
keymap = {
|
||||||
save="''${3:-0}"
|
mgr.prepend_keymap = [
|
||||||
path="''${4:-}"
|
{
|
||||||
out="''${5:?missing termfilechooser output path}"
|
on = "T";
|
||||||
|
run = "plugin toggle-pane max-preview";
|
||||||
state_dir="''${XDG_STATE_HOME:-$HOME/.local/state}/xdg-desktop-portal-termfilechooser"
|
desc = "Maximize or restore the preview pane";
|
||||||
last_selected_path="$state_dir/last-selected"
|
}
|
||||||
${lib.getExe' pkgs.coreutils "mkdir"} -p "$state_dir"
|
{
|
||||||
|
on = "Y";
|
||||||
if [ -s "$last_selected_path" ]; then
|
run = ''shell -- for path in "$@"; do echo "file://$path"; done | wl-copy -t text/uri-list'';
|
||||||
IFS= read -r last_selected < "$last_selected_path" || true
|
desc = "Copy files into system clipboard";
|
||||||
if [ -d "$last_selected" ]; then
|
}
|
||||||
if [ "$save" = "1" ] && [ -n "$path" ]; then
|
{
|
||||||
path="$last_selected/''${path##*/}"
|
on = ["c" "m"];
|
||||||
else
|
run = "plugin chmod";
|
||||||
path="$last_selected"
|
desc = "Chmod on selected files";
|
||||||
fi
|
}
|
||||||
fi
|
{
|
||||||
fi
|
on = ["M"];
|
||||||
|
run = "plugin mount";
|
||||||
if [ -z "$path" ]; then
|
desc = "Open mount menu";
|
||||||
path="$HOME"
|
}
|
||||||
fi
|
{
|
||||||
|
on = [ "<C-n>" ];
|
||||||
created_placeholder=0
|
run = "shell '${lib.getExe pkgs.dragon-drop} -x -A -i -T %s'";
|
||||||
if [ "$save" = "1" ] && [ ! -e "$path" ]; then
|
}
|
||||||
placeholder_dir="''${path%/*}"
|
{
|
||||||
if [ "$placeholder_dir" != "$path" ]; then
|
on = [ "g" "<S-d>" ];
|
||||||
${lib.getExe' pkgs.coreutils "mkdir"} -p "$placeholder_dir"
|
run = ''cd /mnt/D'';
|
||||||
fi
|
desc = "Goto D drive";
|
||||||
|
}
|
||||||
{
|
];
|
||||||
printf '%s\n' 'This file was created by xdg-desktop-portal-termfilechooser.'
|
};
|
||||||
printf '%s\n' 'Move/rename it in Yazi, then open/select it to choose the save path.'
|
};
|
||||||
} > "$path"
|
|
||||||
created_placeholder=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
${lib.getExe pkgs.ghostty} --title="Yazi File Picker" -e ${lib.getExe yaziPkg} --chooser-file="$out" --cwd-file="$last_selected_path" "$path"
|
|
||||||
|
|
||||||
if [ "$directory" = "1" ] && [ ! -s "$out" ] && [ -s "$last_selected_path" ]; then
|
|
||||||
IFS= read -r cwd < "$last_selected_path" || true
|
|
||||||
if [ -n "''${cwd:-}" ] && [ -d "$cwd" ]; then
|
|
||||||
printf '%s\n' "$cwd" > "$out"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$created_placeholder" = "1" ] && [ ! -s "$out" ]; then
|
|
||||||
${lib.getExe' pkgs.coreutils "rm"} -f "$path"
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
|
|
||||||
fileManager1 = pkgs.writeShellScriptBin "yazi-filemanager1" ''
|
|
||||||
exec ${pkgs.python3.withPackages (ps: [ ps.dbus-next ])}/bin/python ${pkgs.writeText "yazi-filemanager1.py" ''
|
|
||||||
import asyncio
|
|
||||||
import os
|
|
||||||
import subprocess
|
|
||||||
import urllib.parse
|
|
||||||
|
|
||||||
from dbus_next.aio import MessageBus
|
|
||||||
from dbus_next.constants import BusType
|
|
||||||
from dbus_next.service import ServiceInterface, method
|
|
||||||
|
|
||||||
YAZI_OPEN = ${builtins.toJSON (lib.getExe yaziOpen)}
|
|
||||||
|
|
||||||
|
|
||||||
def uri_to_path(uri: str) -> str | None:
|
|
||||||
parsed = urllib.parse.urlparse(uri)
|
|
||||||
if parsed.scheme != "file":
|
|
||||||
return None
|
|
||||||
return urllib.parse.unquote(parsed.path)
|
|
||||||
|
|
||||||
|
|
||||||
def open_paths(uris: list[str], reveal_items: bool = False) -> None:
|
|
||||||
for uri in uris:
|
|
||||||
path = uri_to_path(uri)
|
|
||||||
if not path:
|
|
||||||
continue
|
|
||||||
|
|
||||||
if reveal_items and os.path.isfile(path):
|
|
||||||
path = os.path.dirname(path)
|
|
||||||
|
|
||||||
subprocess.Popen(
|
|
||||||
[YAZI_OPEN, path],
|
|
||||||
start_new_session=True,
|
|
||||||
stdout=subprocess.DEVNULL,
|
|
||||||
stderr=subprocess.DEVNULL,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class FileManager1(ServiceInterface):
|
|
||||||
def __init__(self) -> None:
|
|
||||||
super().__init__("org.freedesktop.FileManager1")
|
|
||||||
|
|
||||||
@method()
|
|
||||||
def ShowFolders(self, uris: "as", startup_id: "s") -> "":
|
|
||||||
open_paths(uris)
|
|
||||||
|
|
||||||
@method()
|
|
||||||
def ShowItems(self, uris: "as", startup_id: "s") -> "":
|
|
||||||
open_paths(uris, reveal_items=True)
|
|
||||||
|
|
||||||
@method()
|
|
||||||
def ShowItemProperties(self, uris: "as", startup_id: "s") -> "":
|
|
||||||
open_paths(uris, reveal_items=True)
|
|
||||||
|
|
||||||
|
|
||||||
async def main() -> None:
|
|
||||||
bus = await MessageBus(bus_type=BusType.SESSION).connect()
|
|
||||||
bus.export("/org/freedesktop/FileManager1", FileManager1())
|
|
||||||
await bus.request_name("org.freedesktop.FileManager1")
|
|
||||||
await asyncio.Event().wait()
|
|
||||||
|
|
||||||
asyncio.run(main())
|
|
||||||
''}
|
|
||||||
'';
|
|
||||||
in {
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
( ouch.override { enableUnfree = true; } )
|
|
||||||
yaziOpen
|
|
||||||
];
|
|
||||||
|
|
||||||
home.sessionVariables = {
|
|
||||||
GTK_USE_PORTAL = "1";
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.configFile."xdg-desktop-portal-termfilechooser/config".text = ''
|
|
||||||
[filechooser]
|
|
||||||
cmd=${lib.getExe yaziFileChooser}
|
|
||||||
default_dir=$HOME
|
|
||||||
open_mode=suggested
|
|
||||||
save_mode=last
|
|
||||||
'';
|
|
||||||
|
|
||||||
xdg.desktopEntries.yazi = {
|
|
||||||
name = "Yazi";
|
|
||||||
genericName = "File Manager";
|
|
||||||
exec = "${lib.getExe yaziOpen} %U";
|
|
||||||
terminal = false;
|
|
||||||
mimeType = [ "inode/directory" ];
|
|
||||||
categories = [ "System" "FileTools" "FileManager" ];
|
|
||||||
startupNotify = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.mimeApps = {
|
|
||||||
enable = true;
|
|
||||||
defaultApplications = {
|
|
||||||
"inode/directory" = "yazi.desktop";
|
|
||||||
"application/x-gnome-saved-search" = "yazi.desktop";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.dataFile."dbus-1/services/org.freedesktop.FileManager1.service".text = ''
|
|
||||||
[D-BUS Service]
|
|
||||||
Name=org.freedesktop.FileManager1
|
|
||||||
Exec=${lib.getExe fileManager1}
|
|
||||||
'';
|
|
||||||
|
|
||||||
wayland.windowManager.hyprland.settings.window_rule = [
|
|
||||||
{
|
|
||||||
match.class = "dragon-drop";
|
|
||||||
move = [
|
|
||||||
"(cursor_x-(window_w*0.5))"
|
|
||||||
"(cursor_y-(window_h*0.5))"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.title = "Yazi File Picker";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.title = "Yazi File Picker";
|
|
||||||
size = [ 1200 800 ];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.yazi = {
|
|
||||||
package = yaziPkg;
|
|
||||||
enable = true;
|
|
||||||
enableZshIntegration = true;
|
|
||||||
shellWrapperName = "y";
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
mgr = {
|
|
||||||
show_hidden = true;
|
|
||||||
};
|
|
||||||
preview = {
|
|
||||||
max_width = 1000;
|
|
||||||
max_height = 1000;
|
|
||||||
};
|
|
||||||
plugin = {
|
|
||||||
preloaders = [
|
|
||||||
{ url = "*.crdownload"; run = "noop"; }
|
|
||||||
];
|
|
||||||
|
|
||||||
prepend_previewers = [
|
|
||||||
{ mime = "application/xz"; run = "ouch"; }
|
|
||||||
{ mime = "application/zip"; run = "ouch"; }
|
|
||||||
{ mime = "application/rar"; run = "ouch"; }
|
|
||||||
{ mime = "application/gzip"; run = "ouch"; }
|
|
||||||
{ mime = "application/7z-compressed"; run = "ouch"; }
|
|
||||||
];
|
|
||||||
|
|
||||||
prepend_fetchers = [
|
|
||||||
{ group = "git"; url = "*"; run = "git"; }
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
plugins = let
|
|
||||||
yaziPlugin = name: pkgs.stdenvNoCC.mkDerivation {
|
|
||||||
pname = "${name}.yazi";
|
|
||||||
version = "unstable";
|
|
||||||
src = inputs.yazi-plugins;
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
mkdir -p $out
|
|
||||||
cp -r ${name}.yazi/* $out/
|
|
||||||
rm -f $out/LICENSE
|
|
||||||
cp LICENSE $out/LICENSE
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
in with pkgs.yaziPlugins; {
|
|
||||||
inherit
|
|
||||||
chmod
|
|
||||||
ouch
|
|
||||||
mount
|
|
||||||
toggle-pane
|
|
||||||
;
|
|
||||||
|
|
||||||
gvfs = {
|
|
||||||
package = gvfs;
|
|
||||||
setup = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
full-border = {
|
|
||||||
package = yaziPlugin "full-border";
|
|
||||||
setup = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
starship = {
|
|
||||||
package = starship;
|
|
||||||
setup = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
git = {
|
|
||||||
package = yaziPlugin "git";
|
|
||||||
setup = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
initLua = ''
|
|
||||||
Status:children_add(function()
|
|
||||||
local h = cx.active.current.hovered
|
|
||||||
if not h or ya.target_family() ~= "unix" then
|
|
||||||
return ""
|
|
||||||
end
|
|
||||||
|
|
||||||
return ui.Line {
|
|
||||||
ui.Span(ya.user_name(h.cha.uid) or tostring(h.cha.uid)):fg("magenta"),
|
|
||||||
":",
|
|
||||||
ui.Span(ya.group_name(h.cha.gid) or tostring(h.cha.gid)):fg("magenta"),
|
|
||||||
" ",
|
|
||||||
}
|
|
||||||
end, 500, Status.RIGHT)
|
|
||||||
'';
|
|
||||||
|
|
||||||
keymap = {
|
|
||||||
mgr.prepend_keymap = [
|
|
||||||
{
|
|
||||||
on = "T";
|
|
||||||
run = "plugin toggle-pane max-preview";
|
|
||||||
desc = "Maximize or restore the preview pane";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
on = "Y";
|
|
||||||
run = ''shell -- for path in %s; do echo "file://$path"; done | wl-copy -t text/uri-list'';
|
|
||||||
desc = "Copy files into system clipboard";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
on = ["c" "m"];
|
|
||||||
run = "plugin chmod";
|
|
||||||
desc = "Chmod on selected files";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
on = [ "M" "b" ];
|
|
||||||
run = "plugin mount";
|
|
||||||
desc = "Open block-device mount menu";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
on = [ "M" "m" ];
|
|
||||||
run = "plugin gvfs -- select-then-mount --jump";
|
|
||||||
desc = "Mount GVFS device and jump to it";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
on = [ "M" "u" ];
|
|
||||||
run = "plugin gvfs -- select-then-unmount";
|
|
||||||
desc = "Unmount GVFS device";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
on = [ "M" "U" ];
|
|
||||||
run = "plugin gvfs -- select-then-unmount --eject";
|
|
||||||
desc = "Unmount and eject GVFS device";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
on = [ "M" "t" ];
|
|
||||||
run = "plugin gvfs -- automount-when-cd";
|
|
||||||
desc = "Enable GVFS automount when entering device";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
on = [ "g" "m" ];
|
|
||||||
run = "plugin gvfs -- jump-to-device";
|
|
||||||
desc = "Jump to mounted GVFS device";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
on = [ "`" "`" ];
|
|
||||||
run = "plugin gvfs -- jump-back-prev-cwd";
|
|
||||||
desc = "Jump back from GVFS device";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
on = [ "<C-n>" ];
|
|
||||||
run = "shell '${lib.getExe pkgs.dragon-drop} -x -A -i -T %s'";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
on = [ "g" "<S-d>" ];
|
|
||||||
run = ''cd /mnt/D'';
|
|
||||||
desc = "Goto D drive";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,10 +37,7 @@
|
|||||||
read_only = " RO";
|
read_only = " RO";
|
||||||
};
|
};
|
||||||
nix_shell.format = "[nix-shell]($style) ";
|
nix_shell.format = "[nix-shell]($style) ";
|
||||||
os = {
|
os.disabled = false;
|
||||||
disabled = false;
|
|
||||||
style = "white";
|
|
||||||
};
|
|
||||||
python = {
|
python = {
|
||||||
symbol = "py ";
|
symbol = "py ";
|
||||||
python_binary = ["python3" "python"];
|
python_binary = ["python3" "python"];
|
||||||
@@ -74,7 +71,6 @@
|
|||||||
eval "$(zoxide init zsh)"
|
eval "$(zoxide init zsh)"
|
||||||
source "$(fzf-share)/key-bindings.zsh"
|
source "$(fzf-share)/key-bindings.zsh"
|
||||||
source "$(fzf-share)/completion.zsh"
|
source "$(fzf-share)/completion.zsh"
|
||||||
nr() { nix run "nixpkgs#$1" -- "''${@:2}" }
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
envExtra = ''
|
envExtra = ''
|
||||||
|
|||||||
+1
-2
@@ -8,9 +8,8 @@
|
|||||||
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
nautilus
|
nautilus
|
||||||
vscode
|
|
||||||
python3
|
python3
|
||||||
pkgs-pinned.jetbrains.pycharm-oss
|
pkgs-pinned.jetbrains.pycharm-community
|
||||||
aseprite
|
aseprite
|
||||||
krita
|
krita
|
||||||
google-chrome
|
google-chrome
|
||||||
|
|||||||
@@ -1,22 +1,15 @@
|
|||||||
{ pkgs, lib, config, ... }:
|
{ pkgs, lib, config, inputs, ... }: {
|
||||||
let
|
wayland.windowManager.hyprland = let
|
||||||
colors = config.lib.stylix.colors;
|
colors = config.lib.stylix.colors;
|
||||||
accent = colors.${config.stylix.accent};
|
in {
|
||||||
hyprLua = import ../../../modules/user/hyprland/lua.nix { inherit lib; };
|
settings = {
|
||||||
in {
|
|
||||||
wayland.windowManager.hyprland.settings = {
|
|
||||||
config = {
|
|
||||||
general = {
|
general = {
|
||||||
gaps_in = 5;
|
gaps_in = 5;
|
||||||
gaps_out = 5;
|
gaps_out = 5;
|
||||||
border_size = 2;
|
border_size = 2;
|
||||||
"col.active_border" = lib.mkForce {
|
"col.active_border" = "rgba(${colors.base0E}ee) rgba(${colors.base0C}ee) 45deg";
|
||||||
colors = [
|
"col.inactive_border" = "rgba(${colors.base05}aa)";
|
||||||
"rgba(${accent}ee)"
|
|
||||||
"rgba(${colors.base0C}ee)"
|
|
||||||
];
|
|
||||||
angle = 45;
|
|
||||||
};
|
|
||||||
layout = "dwindle";
|
layout = "dwindle";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -38,9 +31,26 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
animations.enabled = 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"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
dwindle = {
|
||||||
|
pseudotile = true;
|
||||||
|
smart_split = true;
|
||||||
|
};
|
||||||
|
|
||||||
dwindle.smart_split = true;
|
|
||||||
master.new_status = "master";
|
master.new_status = "master";
|
||||||
|
|
||||||
misc = {
|
misc = {
|
||||||
@@ -48,32 +58,10 @@ in {
|
|||||||
animate_mouse_windowdragging = true;
|
animate_mouse_windowdragging = true;
|
||||||
enable_swallow = true;
|
enable_swallow = true;
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
curve = {
|
bind = [
|
||||||
_args = [
|
''$mainMod Shift, S, exec, ${lib.getExe pkgs.grim} -g "$(${lib.getExe pkgs.slurp})" - | ${lib.getExe pkgs.swappy} -f -''
|
||||||
"myBezier"
|
|
||||||
{
|
|
||||||
type = "bezier";
|
|
||||||
points = [
|
|
||||||
[ 0.05 0.9 ]
|
|
||||||
[ 0.1 1.05 ]
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
animation = [
|
|
||||||
{ leaf = "windows"; enabled = true; speed = 7; bezier = "myBezier"; }
|
|
||||||
{ leaf = "windowsOut"; enabled = true; speed = 7; bezier = "default"; style = "popin 80%"; }
|
|
||||||
{ leaf = "border"; enabled = true; speed = 10; bezier = "default"; }
|
|
||||||
{ leaf = "borderangle"; enabled = true; speed = 8; bezier = "default"; }
|
|
||||||
{ leaf = "fade"; enabled = true; speed = 7; bezier = "default"; }
|
|
||||||
{ leaf = "workspaces"; enabled = true; speed = 6; bezier = "default"; }
|
|
||||||
];
|
|
||||||
|
|
||||||
bind = [
|
|
||||||
(hyprLua.bind "SUPER + SHIFT + S" (hyprLua.exec ''${lib.getExe pkgs.grim} -g "$(${lib.getExe pkgs.slurp})" - | ${lib.getExe pkgs.swappy} -f -''))
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,8 +80,6 @@
|
|||||||
in {
|
in {
|
||||||
stylix = {
|
stylix = {
|
||||||
enable = true;
|
enable = true;
|
||||||
overlays.enable = false;
|
|
||||||
|
|
||||||
targets = {
|
targets = {
|
||||||
hyprland.enable = false;
|
hyprland.enable = false;
|
||||||
waybar.enable = false;
|
waybar.enable = false;
|
||||||
@@ -89,7 +87,6 @@ in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
base16Scheme = "${pkgs.base16-schemes}/share/themes/eris.yaml";
|
base16Scheme = "${pkgs.base16-schemes}/share/themes/eris.yaml";
|
||||||
accent = "base0E";
|
|
||||||
polarity = "dark";
|
polarity = "dark";
|
||||||
|
|
||||||
image = pkgs.fetchurl {
|
image = pkgs.fetchurl {
|
||||||
|
|||||||
@@ -1,329 +0,0 @@
|
|||||||
{
|
|
||||||
osConfig,
|
|
||||||
config,
|
|
||||||
inputs,
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
font-awesome
|
|
||||||
nerd-fonts.symbols-only
|
|
||||||
playerctl
|
|
||||||
cava
|
|
||||||
pulsemixer
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.waybar = {
|
|
||||||
enable = true;
|
|
||||||
systemd.enable = true;
|
|
||||||
package = inputs.waybar.packages.${pkgs.stdenv.hostPlatform.system}.default;
|
|
||||||
|
|
||||||
settings.mainBar = {
|
|
||||||
modules-center = [
|
|
||||||
"group/left"
|
|
||||||
"group/center"
|
|
||||||
"group/right"
|
|
||||||
];
|
|
||||||
|
|
||||||
|
|
||||||
"group/left" = {
|
|
||||||
orientation = "inherit";
|
|
||||||
modules = [
|
|
||||||
"hyprland/workspaces"
|
|
||||||
"custom/sep-left"
|
|
||||||
"hyprland/language"
|
|
||||||
"keyboard-state"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
"group/center" = {
|
|
||||||
orientation = "inherit";
|
|
||||||
modules = [
|
|
||||||
"cava"
|
|
||||||
"mpris"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
"group/right" = {
|
|
||||||
orientation = "inherit";
|
|
||||||
modules = [
|
|
||||||
"tray"
|
|
||||||
"custom/sep-left"
|
|
||||||
"group/system"
|
|
||||||
"custom/sep-left"
|
|
||||||
"pulseaudio"
|
|
||||||
"custom/sep-left"
|
|
||||||
"battery"
|
|
||||||
"clock"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
cava = {
|
|
||||||
bars = 9;
|
|
||||||
bar_delimiter = 0;
|
|
||||||
stereo = false;
|
|
||||||
input_delay = 0;
|
|
||||||
format-icons = [" " "▁" "▂" "▃" "▄" "▅" "▆" "▇" "█"];
|
|
||||||
};
|
|
||||||
|
|
||||||
clock = {
|
|
||||||
tooltip = false;
|
|
||||||
interval = 5;
|
|
||||||
format = "{:L%d %b - %H:%M %a}";
|
|
||||||
};
|
|
||||||
|
|
||||||
pulseaudio = {
|
|
||||||
format = "{icon} {volume}%";
|
|
||||||
format-icons = {
|
|
||||||
headphone = "";
|
|
||||||
hands-free = "";
|
|
||||||
headset = "";
|
|
||||||
phone = "";
|
|
||||||
phone-muted = "";
|
|
||||||
portable = "";
|
|
||||||
car = "";
|
|
||||||
default = ["" ""];
|
|
||||||
};
|
|
||||||
on-click = "ghostty --title=pulsemixer -e pulsemixer";
|
|
||||||
};
|
|
||||||
|
|
||||||
mpris = {
|
|
||||||
format = "{dynamic}";
|
|
||||||
dynamic-len = if osConfig.host.laptop then 16 else 32;
|
|
||||||
dynamic-order = [ "title" "artist" "album" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
battery = {
|
|
||||||
interval = 5;
|
|
||||||
states = {
|
|
||||||
warning = 30;
|
|
||||||
critical = 15;
|
|
||||||
};
|
|
||||||
format = "{icon} {capacity}% | ";
|
|
||||||
format-icons = {
|
|
||||||
default = ["" "" "" "" "" "" "" "" "" "" ""];
|
|
||||||
charging = ["" "" "" "" "" "" "" "" "" "" ""];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
"custom/sep-left" = {
|
|
||||||
format = " | ";
|
|
||||||
tooltip = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
"keyboard-state" = {
|
|
||||||
capslock = true;
|
|
||||||
format = "{icon}";
|
|
||||||
format-icons = {
|
|
||||||
locked = "CAPS";
|
|
||||||
unlocked = "";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
"hyprland/language" = {
|
|
||||||
format-en = "en";
|
|
||||||
format-ru = "ru";
|
|
||||||
};
|
|
||||||
|
|
||||||
"group/system" = {
|
|
||||||
orientation = "inherit";
|
|
||||||
drawer = {
|
|
||||||
transition-duration = 500;
|
|
||||||
transition-left-to-right = false;
|
|
||||||
};
|
|
||||||
modules = [
|
|
||||||
"network"
|
|
||||||
"custom/mem"
|
|
||||||
"cpu"
|
|
||||||
"temperature"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
network = {
|
|
||||||
format = "{ifname}";
|
|
||||||
format-wifi = " {essid} ({signalStrength}%)";
|
|
||||||
format-ethernet = "{ifname}";
|
|
||||||
format-disconnected = "";
|
|
||||||
tooltip-format = "{ipaddr}";
|
|
||||||
max-length = 50;
|
|
||||||
on-click = "ghostty --title=wifitui -e wifitui";
|
|
||||||
};
|
|
||||||
|
|
||||||
"custom/weather" = {
|
|
||||||
format = "{}";
|
|
||||||
tooltip = true;
|
|
||||||
interval = 1800;
|
|
||||||
exec = "python3 $HOME/.config/waybar/scripts/wttr.py";
|
|
||||||
return-type = "json";
|
|
||||||
};
|
|
||||||
|
|
||||||
"custom/mem" = {
|
|
||||||
format = "{} ";
|
|
||||||
interval = 3;
|
|
||||||
exec = "free -h | awk '/Mem:/{printf $3}'";
|
|
||||||
tooltip = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
cpu = {
|
|
||||||
interval = 2;
|
|
||||||
format = "{usage}% ";
|
|
||||||
min-length = 6;
|
|
||||||
};
|
|
||||||
|
|
||||||
temperature = {
|
|
||||||
hwmon-path = "/sys/class/hwmon/hwmon5/temp1_input";
|
|
||||||
critical-threshold = 80;
|
|
||||||
format = "{temperatureC}°C {icon}";
|
|
||||||
format-icons = ["" "" "" "" ""];
|
|
||||||
tooltip = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
style = let
|
|
||||||
colors = config.lib.stylix.colors.withHashtag;
|
|
||||||
accent = colors.${config.stylix.accent};
|
|
||||||
scssFile = pkgs.writeText "waybar.scss" /*scss*/ ''
|
|
||||||
window#waybar {
|
|
||||||
background: transparent;
|
|
||||||
color: ${colors.base05};
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: .85em;
|
|
||||||
& > * { padding: 0 0 6px 0; }
|
|
||||||
}
|
|
||||||
|
|
||||||
.modules-center {
|
|
||||||
background: ${colors.base01}CC;
|
|
||||||
border-radius: 12px;
|
|
||||||
padding: 10px;
|
|
||||||
box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.4);
|
|
||||||
}
|
|
||||||
|
|
||||||
#left,
|
|
||||||
#right,
|
|
||||||
#center {
|
|
||||||
background: ${colors.base02};
|
|
||||||
padding: 0 2px;
|
|
||||||
margin: 0 8px;
|
|
||||||
border-radius: 8px;
|
|
||||||
}
|
|
||||||
#left { margin-left: 0; }
|
|
||||||
#right { margin-right: 0; }
|
|
||||||
|
|
||||||
#clock { padding-right: 10px; }
|
|
||||||
|
|
||||||
#cava { padding: 0 10px; }
|
|
||||||
|
|
||||||
#language { padding: 8px; }
|
|
||||||
|
|
||||||
#workspaces button {
|
|
||||||
color: ${colors.base05};
|
|
||||||
padding: 0 2px;
|
|
||||||
border-radius: 999px;
|
|
||||||
border: 1pt solid transparent;
|
|
||||||
min-width: 20px;
|
|
||||||
|
|
||||||
&:hover { background: ${colors.base03}; }
|
|
||||||
|
|
||||||
&.active {
|
|
||||||
background: ${accent};
|
|
||||||
color: ${colors.base00};
|
|
||||||
min-width: 25px;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
border-color: ${accent};
|
|
||||||
background: ${colors.base03};
|
|
||||||
color: ${accent};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#mpris {
|
|
||||||
border-radius: 8px;
|
|
||||||
padding: 4px;
|
|
||||||
&:hover { background: ${colors.base03}; }
|
|
||||||
&.playing {
|
|
||||||
border: 2px solid ${accent};
|
|
||||||
padding: 2px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#tray {
|
|
||||||
widget {
|
|
||||||
border: 1pt solid transparent;
|
|
||||||
&:hover { background: ${colors.base03}; }
|
|
||||||
& > image { padding: 8px; }
|
|
||||||
}
|
|
||||||
|
|
||||||
& > .passive { border-color: ${colors.base03}; }
|
|
||||||
& > .needs-attention { border-color: ${colors.base09}; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#pulseaudio {
|
|
||||||
&:hover { background: ${colors.base03}; }
|
|
||||||
&.muted {
|
|
||||||
background: ${colors.base08};
|
|
||||||
color: ${colors.base01};
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
color: ${colors.base08};
|
|
||||||
background: ${colors.base03};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#network {
|
|
||||||
&:hover { background: ${colors.base02}; }
|
|
||||||
&.disconnected {
|
|
||||||
color: ${colors.base00};
|
|
||||||
background: ${colors.base08};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#system .drawer-child > * {
|
|
||||||
margin-right: 4px
|
|
||||||
}
|
|
||||||
|
|
||||||
#keyboard-state label.locked {
|
|
||||||
color: ${colors.base08};
|
|
||||||
}
|
|
||||||
|
|
||||||
#battery {
|
|
||||||
&.plugged { color: ${colors.base0D}; }
|
|
||||||
&.charging { color: ${colors.base0B}; }
|
|
||||||
&:not(.charging) {
|
|
||||||
&.warning {
|
|
||||||
color: ${colors.base00};
|
|
||||||
background-color: ${colors.base09};
|
|
||||||
}
|
|
||||||
&.critical {
|
|
||||||
background-color: ${colors.base08};
|
|
||||||
color: ${colors.base00};
|
|
||||||
animation-name: blink;
|
|
||||||
animation-duration: 0.5s;
|
|
||||||
animation-timing-function: linear;
|
|
||||||
animation-iteration-count: infinite;
|
|
||||||
animation-direction: alternate;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.full {
|
|
||||||
color: ${colors.base00};
|
|
||||||
background: ${colors.base0B};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes blink {
|
|
||||||
to {
|
|
||||||
background-color: ${colors.base00};
|
|
||||||
color: ${colors.base08};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
|
|
||||||
cssFile = pkgs.runCommand "waybar.css" {
|
|
||||||
nativeBuildInputs = [ pkgs.dart-sass ];
|
|
||||||
} "sass ${scssFile} $out";
|
|
||||||
in builtins.readFile cssFile;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
+1
-2
@@ -22,7 +22,6 @@
|
|||||||
../modules/user.nix
|
../modules/user.nix
|
||||||
./${name}/modules/git.nix
|
./${name}/modules/git.nix
|
||||||
./${name}/modules/style.nix
|
./${name}/modules/style.nix
|
||||||
./${name}/modules/waybar.nix
|
|
||||||
./${name}/home.nix
|
./${name}/home.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -57,7 +56,7 @@
|
|||||||
|
|
||||||
services.greetd = let
|
services.greetd = let
|
||||||
tuigreet = lib.getExe pkgs.tuigreet;
|
tuigreet = lib.getExe pkgs.tuigreet;
|
||||||
session = lib.getExe' inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.default "start-hyprland";
|
session = lib.getExe inputs.hyprland.packages.${pkgs.system}.default;
|
||||||
in {
|
in {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
{ pkgs, ... }: {
|
{ pkgs, ... }: {
|
||||||
|
imports = [
|
||||||
|
../../modules/user/packages/tex.nix
|
||||||
|
./modules/waybar.nix
|
||||||
|
];
|
||||||
programs.hyprlock.enable = true;
|
programs.hyprlock.enable = true;
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
android-studio
|
android-studio
|
||||||
(vivaldi.override {
|
vivaldi
|
||||||
proprietaryCodecs = true;
|
|
||||||
enableWidevine = true;
|
|
||||||
})
|
|
||||||
weechat
|
weechat
|
||||||
insomnia
|
|
||||||
];
|
];
|
||||||
|
|
||||||
xdg.mimeApps = {
|
xdg.mimeApps = {
|
||||||
|
|||||||
@@ -1,98 +1,26 @@
|
|||||||
{ pkgs, lib, config, osConfig, inputs, ... }: {
|
{ pkgs, lib, config, inputs, ... }: {
|
||||||
wayland.windowManager.hyprland = let
|
wayland.windowManager.hyprland = let
|
||||||
colors = config.lib.stylix.colors;
|
colors = config.lib.stylix.colors;
|
||||||
accent = colors.${config.stylix.accent};
|
|
||||||
hyprLua = import ../../../modules/user/hyprland/lua.nix { inherit lib; };
|
|
||||||
|
|
||||||
wallpaper_changer = pkgs.writers.writePython3Bin "wallpaper_changer" {
|
wallpaper_changer = pkgs.writers.writePython3Bin "wallpaper_changer" {
|
||||||
libraries = [ pkgs.python3Packages.requests ];
|
libraries = [ pkgs.python3Packages.requests ];
|
||||||
flakeIgnore = [ "E111" "E121" "E241" "E501" "E701" "E731" ];
|
flakeIgnore = [ "E501" "E111" "E701" "E241" "E731" ];
|
||||||
} /*py*/ ''
|
} /*py*/ ''
|
||||||
import requests as requests
|
import requests as requests
|
||||||
from random import choice
|
from random import choice
|
||||||
from os import listdir, makedirs, remove, replace, system
|
from os import system, mkdir, listdir
|
||||||
from os.path import exists
|
from os.path import exists
|
||||||
from subprocess import run
|
|
||||||
|
|
||||||
notify_id = None
|
|
||||||
|
|
||||||
|
|
||||||
def notify(text, progress=None, expire_time=5000):
|
|
||||||
global notify_id
|
|
||||||
|
|
||||||
command = [
|
|
||||||
"${pkgs.libnotify}/bin/notify-send",
|
|
||||||
"--app-name", "wallpaper_changer",
|
|
||||||
"--print-id",
|
|
||||||
"--expire-time", str(expire_time),
|
|
||||||
]
|
|
||||||
|
|
||||||
if notify_id:
|
|
||||||
command.extend(["--replace-id", str(notify_id)])
|
|
||||||
|
|
||||||
if progress is not None:
|
|
||||||
command.extend(["--hint", f"int:value:{progress}"])
|
|
||||||
|
|
||||||
command.extend(["Wallpaper", text])
|
|
||||||
|
|
||||||
result = run(command, capture_output=True, text=True, check=False)
|
|
||||||
output = result.stdout.strip()
|
|
||||||
if output.isdigit():
|
|
||||||
notify_id = output
|
|
||||||
|
|
||||||
|
|
||||||
def download_with_progress(link, destination):
|
|
||||||
temporary = f"{destination}.part"
|
|
||||||
downloaded = 0
|
|
||||||
last_progress = -1
|
|
||||||
|
|
||||||
response = None
|
|
||||||
try:
|
|
||||||
response = requests.get(link, stream=True)
|
|
||||||
response.raise_for_status()
|
|
||||||
total = int(response.headers.get("content-length", 0))
|
|
||||||
|
|
||||||
with open(temporary, "wb") as file:
|
|
||||||
for chunk in response.iter_content(chunk_size=256 * 1024):
|
|
||||||
if not chunk:
|
|
||||||
continue
|
|
||||||
|
|
||||||
file.write(chunk)
|
|
||||||
downloaded += len(chunk)
|
|
||||||
|
|
||||||
if total <= 0:
|
|
||||||
continue
|
|
||||||
|
|
||||||
progress = min(100, downloaded * 100 // total)
|
|
||||||
if progress == 100 or progress >= last_progress + 2:
|
|
||||||
notify(f"Downloading... {progress}%", progress, 0)
|
|
||||||
last_progress = progress
|
|
||||||
|
|
||||||
replace(temporary, destination)
|
|
||||||
except Exception:
|
|
||||||
if exists(temporary):
|
|
||||||
remove(temporary)
|
|
||||||
raise
|
|
||||||
finally:
|
|
||||||
if response is not None:
|
|
||||||
response.close()
|
|
||||||
|
|
||||||
|
|
||||||
|
notify = lambda s: system(f"notify-desktop Wallpaper '{s}'")
|
||||||
folder = "${config.home.homeDirectory}/Wallpapers"
|
folder = "${config.home.homeDirectory}/Wallpapers"
|
||||||
url = "https://wallhaven.cc/api/v1/collections/sweetbread/${
|
url = "https://wallhaven.cc/api/v1/collections/sweetbread/1764377"
|
||||||
if osConfig.networking.hostName == "Rias" then "1764377"
|
|
||||||
else "2108577"
|
|
||||||
}"
|
|
||||||
with open("${config.sops.secrets."tokens/apis/wallhaven".path}") as f:
|
with open("${config.sops.secrets."tokens/apis/wallhaven".path}") as f:
|
||||||
token = f.read()
|
token = f.read()
|
||||||
|
|
||||||
filename = None
|
notify("Updating wallpaper!")
|
||||||
notify("Updating wallpaper...", 0)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response = requests.get(url, params={'apikey': token})
|
json = requests.get(url, params={'apikey': token}).json()
|
||||||
response.raise_for_status()
|
|
||||||
json = response.json()
|
|
||||||
|
|
||||||
wallpaper = choice(json['data'])
|
wallpaper = choice(json['data'])
|
||||||
link = wallpaper['path']
|
link = wallpaper['path']
|
||||||
@@ -103,107 +31,85 @@
|
|||||||
else: ext = "png"
|
else: ext = "png"
|
||||||
|
|
||||||
filename = f"{id}.{ext}"
|
filename = f"{id}.{ext}"
|
||||||
destination = f"{folder}/{filename}"
|
|
||||||
|
|
||||||
if not exists(destination):
|
if not exists(f"{folder}/{filename}"):
|
||||||
makedirs(folder, exist_ok=True)
|
if not exists(folder):
|
||||||
notify("Downloading... 0%", 0, 0)
|
mkdir(f"{folder}")
|
||||||
download_with_progress(link, destination)
|
|
||||||
notify("Downloaded", 100)
|
|
||||||
else:
|
|
||||||
notify("Using cached wallpaper", 100)
|
|
||||||
|
|
||||||
except requests.exceptions.RequestException:
|
notify("Downloading...")
|
||||||
|
with open(f"{folder}/{filename}", 'wb') as f:
|
||||||
|
r = requests.get(link)
|
||||||
|
f.write(r.content)
|
||||||
|
|
||||||
|
except requests.exceptions.ConnectionError:
|
||||||
notify("Offline mode")
|
notify("Offline mode")
|
||||||
try:
|
filename = choice(listdir(folder))
|
||||||
filename = choice(listdir(folder))
|
|
||||||
except (FileNotFoundError, IndexError):
|
|
||||||
notify("Offline mode and wallpaper cache is empty")
|
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
if filename is not None:
|
system(f"${lib.getExe pkgs.swww} img {folder}/{filename} --transition-type center")
|
||||||
notify("Applying wallpaper", 100)
|
|
||||||
system(f"awww img {folder}/{filename} --transition-type center")
|
|
||||||
'';
|
'';
|
||||||
in {
|
in {
|
||||||
settings = {
|
settings = {
|
||||||
config = {
|
general = {
|
||||||
general = {
|
gaps_in = 2;
|
||||||
gaps_in = 2;
|
gaps_out = 10;
|
||||||
gaps_out = 10;
|
border_size = 3;
|
||||||
border_size = 3;
|
"col.active_border" = lib.mkForce "rgba(${colors.base0C}aa) rgba(${colors.base0B}aa) 45deg";
|
||||||
"col.active_border" = lib.mkForce {
|
|
||||||
colors = [
|
|
||||||
"rgba(${colors.base0C}aa)"
|
|
||||||
"rgba(${accent}aa)"
|
|
||||||
];
|
|
||||||
angle = 45;
|
|
||||||
};
|
|
||||||
layout = "dwindle";
|
|
||||||
};
|
|
||||||
|
|
||||||
decoration = {
|
layout = "dwindle";
|
||||||
rounding = 10;
|
|
||||||
|
|
||||||
blur = {
|
|
||||||
enabled = true;
|
|
||||||
size = 16;
|
|
||||||
passes = 2;
|
|
||||||
new_optimizations = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
shadow.enabled = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
animations.enabled = true;
|
|
||||||
dwindle.smart_split = true;
|
|
||||||
master.new_status = "master";
|
|
||||||
|
|
||||||
misc = {
|
|
||||||
animate_manual_resizes = true;
|
|
||||||
animate_mouse_windowdragging = true;
|
|
||||||
enable_swallow = true;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
curve = {
|
decoration = {
|
||||||
_args = [
|
rounding = 10;
|
||||||
"myBezier"
|
|
||||||
{
|
blur = {
|
||||||
type = "bezier";
|
enabled = true;
|
||||||
points = [
|
size = 16;
|
||||||
[ 0.05 0.9 ]
|
passes = 2;
|
||||||
[ 0.1 1.05 ]
|
new_optimizations = true;
|
||||||
];
|
};
|
||||||
}
|
|
||||||
|
shadow.enabled = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
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"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
animation = [
|
dwindle = {
|
||||||
{ leaf = "windows"; enabled = true; speed = 7; bezier = "myBezier"; }
|
pseudotile = true;
|
||||||
{ leaf = "windowsOut"; enabled = true; speed = 7; bezier = "default"; style = "popin 80%"; }
|
smart_split = true;
|
||||||
{ leaf = "border"; enabled = true; speed = 10; bezier = "default"; }
|
};
|
||||||
{ leaf = "borderangle"; enabled = true; speed = 8; bezier = "default"; }
|
|
||||||
{ leaf = "fade"; enabled = true; speed = 7; bezier = "default"; }
|
|
||||||
{ leaf = "workspaces"; enabled = true; speed = 6; bezier = "default"; }
|
|
||||||
];
|
|
||||||
|
|
||||||
on = [
|
master.new_status = "master";
|
||||||
(hyprLua.onStart [ "${lib.getExe wallpaper_changer}" ])
|
|
||||||
];
|
|
||||||
|
|
||||||
workspace_rule = [
|
misc = {
|
||||||
{
|
animate_manual_resizes = true;
|
||||||
workspace = "2";
|
animate_mouse_windowdragging = true;
|
||||||
layout = "scrolling";
|
enable_swallow = true;
|
||||||
}
|
};
|
||||||
|
|
||||||
|
exec-once = [
|
||||||
|
"${lib.getExe wallpaper_changer}"
|
||||||
];
|
];
|
||||||
|
|
||||||
bind = [
|
bind = [
|
||||||
(hyprLua.bind "Print" (hyprLua.exec "${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m active -m output"))
|
" , Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m active -m output"
|
||||||
(hyprLua.bind "CTRL + Print" (hyprLua.exec "${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m region"))
|
"CTRL, Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m region"
|
||||||
(hyprLua.bind "ALT + Print" (hyprLua.exec "${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m active -m window"))
|
"ALT , Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m active -m window"
|
||||||
(hyprLua.bind "SUPER + W" (hyprLua.exec "${lib.getExe wallpaper_changer}"))
|
|
||||||
|
"$mainMod, W, exec, ${lib.getExe wallpaper_changer}"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -79,25 +79,10 @@
|
|||||||
cp Kurumi $out/share/icons -r
|
cp Kurumi $out/share/icons -r
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
pixeloid = pkgs.stdenvNoCC.mkDerivation {
|
|
||||||
name = "Pixeloid";
|
|
||||||
dontUnpack = true;
|
|
||||||
|
|
||||||
src = pkgs.fetchurl {
|
|
||||||
url = "https://lair.moe/static/font/Pixeloid/otf/Sans.otf";
|
|
||||||
hash = "sha256-GTf2BnhH0Pzc3Bbevmd+mA6t8lZFMUxX9wkSqWicuSc=";
|
|
||||||
};
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
install -Dm644 "$src" "$out/share/fonts/opentype/Sans.otf"
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
in {
|
in {
|
||||||
|
# {
|
||||||
stylix = {
|
stylix = {
|
||||||
enable = true;
|
enable = true;
|
||||||
overlays.enable = false;
|
|
||||||
|
|
||||||
targets = {
|
targets = {
|
||||||
hyprpaper.enable = lib.mkForce false;
|
hyprpaper.enable = lib.mkForce false;
|
||||||
waybar.enable = false;
|
waybar.enable = false;
|
||||||
@@ -105,7 +90,6 @@ in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
|
base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
|
||||||
accent = "base0B";
|
|
||||||
polarity = "dark";
|
polarity = "dark";
|
||||||
|
|
||||||
image = pkgs.fetchurl {
|
image = pkgs.fetchurl {
|
||||||
@@ -136,11 +120,6 @@ in {
|
|||||||
package = (pkgs.google-fonts.override { fonts = [ "Gabriela" ]; });
|
package = (pkgs.google-fonts.override { fonts = [ "Gabriela" ]; });
|
||||||
};
|
};
|
||||||
|
|
||||||
sansSerif = {
|
|
||||||
name = "Pixeloid Sans";
|
|
||||||
package = pixeloid;
|
|
||||||
};
|
|
||||||
|
|
||||||
emoji = {
|
emoji = {
|
||||||
package = pkgs.noto-fonts-monochrome-emoji;
|
package = pkgs.noto-fonts-monochrome-emoji;
|
||||||
name = "Noto Emoji";
|
name = "Noto Emoji";
|
||||||
@@ -163,10 +142,8 @@ in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
gtk = {
|
gtk = {
|
||||||
gtk4 = {
|
gtk4.extraConfig = {
|
||||||
extraConfig = {
|
gtk-application-prefer-dark-theme = true;
|
||||||
gtk-application-prefer-dark-theme = true;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
gtk3.extraConfig = {
|
gtk3.extraConfig = {
|
||||||
gtk-application-prefer-dark-theme = true;
|
gtk-application-prefer-dark-theme = true;
|
||||||
|
|||||||
+117
-333
@@ -1,360 +1,144 @@
|
|||||||
{
|
{ config, pkgs, ... }: {
|
||||||
osConfig,
|
programs.waybar.style = let
|
||||||
config,
|
colors = config.lib.stylix.colors.withHashtag;
|
||||||
inputs,
|
radius = "6px";
|
||||||
pkgs,
|
scssFile = pkgs.writeText "waybar.scss" /*scss*/ ''
|
||||||
lib,
|
window#waybar {
|
||||||
...
|
background: transparent;
|
||||||
}: {
|
color: ${colors.base05};
|
||||||
home.packages = with pkgs; [
|
border-radius: ${radius};
|
||||||
playerctl
|
font-weight: bold;
|
||||||
cava
|
font-size: .85em;
|
||||||
pulsemixer
|
|
||||||
libnotify
|
|
||||||
|
|
||||||
monocraft
|
& > * { padding: 8px; }
|
||||||
font-awesome
|
}
|
||||||
nerd-fonts.symbols-only
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.waybar = let
|
#language,
|
||||||
multibat = osConfig.networking.hostName == "Inaho";
|
#mpris,
|
||||||
in {
|
#pulseaudio,
|
||||||
enable = true;
|
#network,
|
||||||
systemd.enable = true;
|
#battery,
|
||||||
package = inputs.waybar.packages.${pkgs.stdenv.hostPlatform.system}.default;
|
#cpu,
|
||||||
|
#temperature,
|
||||||
|
#keyboard-state label.locked,
|
||||||
|
#custom-mem,
|
||||||
|
#clock {
|
||||||
|
background: ${colors.base00};
|
||||||
|
border-radius: ${radius};
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
settings.mainBar = {
|
#workspaces,
|
||||||
spacing = 8;
|
#tray {
|
||||||
|
background: ${colors.base00};
|
||||||
|
border-radius: ${radius};
|
||||||
|
}
|
||||||
|
|
||||||
modules-left = [
|
#workspaces button {
|
||||||
"hyprland/workspaces"
|
color: ${colors.base05};
|
||||||
"hyprland/language"
|
padding: 4px;
|
||||||
"keyboard-state"
|
border-radius: ${radius};
|
||||||
"cava"
|
border: 1pt solid transparent;
|
||||||
];
|
|
||||||
|
|
||||||
modules-center = [
|
&:hover { background: ${colors.base01}; }
|
||||||
"mpris"
|
|
||||||
];
|
|
||||||
|
|
||||||
modules-right = [
|
&.active {
|
||||||
"tray"
|
background: ${colors.base0B};
|
||||||
"group/system"
|
color: ${colors.base00};
|
||||||
"pulseaudio"
|
|
||||||
( if multibat then "group/bat" else "battery" )
|
|
||||||
"clock"
|
|
||||||
];
|
|
||||||
|
|
||||||
cava = {
|
&:hover {
|
||||||
bars = 14;
|
border-color: ${colors.base0B};
|
||||||
sleep_timer = 5;
|
background: ${colors.base01};
|
||||||
hide_on_silence = true;
|
color: ${colors.base0B};
|
||||||
bar_delimiter = 0;
|
}
|
||||||
input_delay = 0;
|
|
||||||
format-icons = [" " "▁" "▂" "▃" "▄" "▅" "▆" "▇" "█"];
|
|
||||||
};
|
|
||||||
|
|
||||||
clock = {
|
|
||||||
tooltip = false;
|
|
||||||
interval = 5;
|
|
||||||
format = "{:L%d %b - %H:%M %a}";
|
|
||||||
};
|
|
||||||
|
|
||||||
pulseaudio = {
|
|
||||||
format = "{icon} {volume}%";
|
|
||||||
format-icons = {
|
|
||||||
headphone = "";
|
|
||||||
hands-free = "";
|
|
||||||
headset = "";
|
|
||||||
phone = "";
|
|
||||||
phone-muted = "";
|
|
||||||
portable = "";
|
|
||||||
car = "";
|
|
||||||
default = ["" ""];
|
|
||||||
};
|
|
||||||
on-click = "ghostty --title=pulsemixer -e pulsemixer";
|
|
||||||
};
|
|
||||||
|
|
||||||
mpris = {
|
|
||||||
format = "{dynamic}";
|
|
||||||
dynamic-len = if osConfig.host.laptop then 32 else 64;
|
|
||||||
dynamic-order = [ "title" "artist" "album" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
"group/bat" = lib.mkIf multibat {
|
|
||||||
orientation = "inherit";
|
|
||||||
drawer = {
|
|
||||||
transition-duration = 500;
|
|
||||||
transition-left-to-right = false;
|
|
||||||
};
|
|
||||||
modules = [
|
|
||||||
"battery"
|
|
||||||
"battery#int"
|
|
||||||
"battery#ext"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
battery = {
|
|
||||||
interval = 5;
|
|
||||||
states = {
|
|
||||||
warning = 30;
|
|
||||||
critical = 15;
|
|
||||||
};
|
|
||||||
format = "{icon} {capacity}%";
|
|
||||||
format-icons = {
|
|
||||||
default = ["" "" "" "" "" "" "" "" "" "" ""];
|
|
||||||
charging = ["" "" "" "" "" "" "" "" "" "" ""];
|
|
||||||
};
|
|
||||||
events = {
|
|
||||||
on-discharging-warning = "notify-send -u normal 'Low Battery'";
|
|
||||||
on-discharging-critical = "notify-send -u critical 'Very Low Battery'";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
"battery#int" = lib.mkIf multibat {
|
|
||||||
bat = "BAT0";
|
|
||||||
interval = 5;
|
|
||||||
states = {
|
|
||||||
warning = 30;
|
|
||||||
critical = 15;
|
|
||||||
};
|
|
||||||
format = "I: {capacity}%";
|
|
||||||
};
|
|
||||||
|
|
||||||
"battery#ext" = lib.mkIf multibat {
|
|
||||||
bat = "BAT1";
|
|
||||||
interval = 5;
|
|
||||||
states = {
|
|
||||||
warning = 30;
|
|
||||||
critical = 15;
|
|
||||||
};
|
|
||||||
format = "E: {capacity}%";
|
|
||||||
events = {
|
|
||||||
on-discharging-critical = "notify-send -u normal 'External battery is critical";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
"keyboard-state" = {
|
|
||||||
capslock = true;
|
|
||||||
format = "{icon}";
|
|
||||||
format-icons = {
|
|
||||||
locked = "CAPS";
|
|
||||||
unlocked = "";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
"hyprland/language" = {
|
|
||||||
format-en = "en";
|
|
||||||
format-ru = "ru";
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
"group/system" = {
|
|
||||||
orientation = "inherit";
|
|
||||||
drawer = {
|
|
||||||
transition-duration = 500;
|
|
||||||
transition-left-to-right = false;
|
|
||||||
};
|
|
||||||
modules = [
|
|
||||||
"network"
|
|
||||||
"custom/mem"
|
|
||||||
"cpu"
|
|
||||||
"temperature"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
network = {
|
|
||||||
format = "{ifname}";
|
|
||||||
format-wifi = " {essid} ({signalStrength}%)";
|
|
||||||
format-ethernet = "{ifname}";
|
|
||||||
format-disconnected = "";
|
|
||||||
tooltip-format = "{ipaddr}";
|
|
||||||
max-length = 50;
|
|
||||||
on-click = "ghostty --title=wifitui -e wifitui";
|
|
||||||
};
|
|
||||||
|
|
||||||
"custom/weather" = {
|
|
||||||
format = "{}";
|
|
||||||
tooltip = true;
|
|
||||||
interval = 1800;
|
|
||||||
exec = "python3 $HOME/.config/waybar/scripts/wttr.py";
|
|
||||||
return-type = "json";
|
|
||||||
};
|
|
||||||
|
|
||||||
"custom/mem" = {
|
|
||||||
format = "{} ";
|
|
||||||
interval = 3;
|
|
||||||
exec = "free -h | awk '/Mem:/{printf $3}'";
|
|
||||||
tooltip = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
cpu = {
|
|
||||||
interval = 2;
|
|
||||||
format = "{usage}% ";
|
|
||||||
min-length = 6;
|
|
||||||
};
|
|
||||||
|
|
||||||
temperature = {
|
|
||||||
hwmon-path = "/sys/class/hwmon/hwmon5/temp1_input";
|
|
||||||
critical-threshold = 80;
|
|
||||||
format = "{temperatureC}°C {icon}";
|
|
||||||
format-icons = ["" "" "" "" ""];
|
|
||||||
tooltip = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
style = let
|
|
||||||
colors = config.lib.stylix.colors.withHashtag;
|
|
||||||
accent = colors.${config.stylix.accent};
|
|
||||||
radius = "6px";
|
|
||||||
scssFile = pkgs.writeText "waybar.scss" /*scss*/ ''
|
|
||||||
window#waybar {
|
|
||||||
background: transparent;
|
|
||||||
color: ${colors.base05};
|
|
||||||
border-radius: ${radius};
|
|
||||||
font-family: "Symbols Nerd Font Mono", "Monocraft", "Font Awesome 7 Free";
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: .85em;
|
|
||||||
|
|
||||||
& > * { padding: 8px; }
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#cava,
|
#mpris {
|
||||||
#language,
|
&:hover { background: ${colors.base01}; }
|
||||||
#mpris,
|
&.paused { opacity: .5; }
|
||||||
#pulseaudio,
|
}
|
||||||
#network,
|
|
||||||
#battery,
|
|
||||||
#cpu,
|
|
||||||
#temperature,
|
|
||||||
#keyboard-state label.locked,
|
|
||||||
#custom-mem,
|
|
||||||
#clock {
|
|
||||||
background: ${colors.base00};
|
|
||||||
border-radius: ${radius};
|
|
||||||
padding: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces,
|
#tray {
|
||||||
#tray {
|
widget {
|
||||||
background: ${colors.base00};
|
|
||||||
border-radius: ${radius};
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button {
|
|
||||||
color: ${colors.base05};
|
|
||||||
padding: 4px;
|
|
||||||
border-radius: ${radius};
|
|
||||||
border: 1pt solid transparent;
|
border: 1pt solid transparent;
|
||||||
|
border-radius: ${radius};
|
||||||
&:hover { background: ${colors.base01}; }
|
&:hover { background: ${colors.base01}; }
|
||||||
|
& > image { padding: 8px; }
|
||||||
|
}
|
||||||
|
|
||||||
&.active {
|
& > .passive { border-color: ${colors.base02}; }
|
||||||
background: ${accent};
|
& > .needs-attention { border-color: ${colors.base09}; }
|
||||||
|
}
|
||||||
|
|
||||||
|
#pulseaudio {
|
||||||
|
&:hover { background: ${colors.base01}; }
|
||||||
|
&.muted {
|
||||||
|
background: ${colors.base08};
|
||||||
|
color: ${colors.base00};
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: ${colors.base08};
|
||||||
|
background: ${colors.base01};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#network {
|
||||||
|
&:hover { background: ${colors.base01}; }
|
||||||
|
&.disconnected {
|
||||||
|
color: ${colors.base00};
|
||||||
|
background: ${colors.base08};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#system .drawer-child > * {
|
||||||
|
margin-right: 4px
|
||||||
|
}
|
||||||
|
|
||||||
|
#keyboard-state label.locked {
|
||||||
|
background-color: ${colors.base00};
|
||||||
|
color: ${colors.base08};
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery {
|
||||||
|
&.plugged { color: ${colors.base0D}; }
|
||||||
|
&.charging { color: ${colors.base0B}; }
|
||||||
|
&:not(.charging) {
|
||||||
|
&.warning {
|
||||||
color: ${colors.base00};
|
color: ${colors.base00};
|
||||||
|
background-color: ${colors.base09};
|
||||||
&:hover {
|
|
||||||
border-color: ${accent};
|
|
||||||
background: ${colors.base01};
|
|
||||||
color: ${accent};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
&.critical {
|
||||||
|
background-color: ${colors.base08};
|
||||||
#mpris {
|
|
||||||
&:hover { background: ${colors.base01}; }
|
|
||||||
&.paused { opacity: .5; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#tray {
|
|
||||||
widget {
|
|
||||||
border: 1pt solid transparent;
|
|
||||||
border-radius: ${radius};
|
|
||||||
&:hover { background: ${colors.base01}; }
|
|
||||||
& > image { padding: 8px; }
|
|
||||||
}
|
|
||||||
|
|
||||||
& > .passive { border-color: ${colors.base02}; }
|
|
||||||
& > .needs-attention { border-color: ${colors.base09}; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#pulseaudio {
|
|
||||||
&:hover { background: ${colors.base01}; }
|
|
||||||
&.muted {
|
|
||||||
background: ${colors.base08};
|
|
||||||
color: ${colors.base00};
|
color: ${colors.base00};
|
||||||
|
animation-name: blink;
|
||||||
&:hover {
|
animation-duration: 0.5s;
|
||||||
color: ${colors.base08};
|
animation-timing-function: linear;
|
||||||
background: ${colors.base01};
|
animation-iteration-count: infinite;
|
||||||
}
|
animation-direction: alternate;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
&.full {
|
||||||
#network {
|
color: ${colors.base00};
|
||||||
&:hover { background: ${colors.base01}; }
|
background: ${colors.base0B};
|
||||||
&.disconnected {
|
|
||||||
color: ${colors.base00};
|
|
||||||
background: ${colors.base08};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#system,
|
@keyframes blink {
|
||||||
#bat {
|
to {
|
||||||
& .drawer-child > * { margin-right: 4px }
|
|
||||||
}
|
|
||||||
|
|
||||||
#keyboard-state label.locked {
|
|
||||||
background-color: ${colors.base00};
|
background-color: ${colors.base00};
|
||||||
color: ${colors.base08};
|
color: ${colors.base08};
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
|
||||||
#battery {
|
cssFile = pkgs.runCommand "waybar.css" {
|
||||||
&.charging { color: ${accent}; }
|
nativeBuildInputs = [ pkgs.dart-sass ];
|
||||||
&:not(.charging) {
|
} "sass ${scssFile} $out";
|
||||||
&.warning {
|
in builtins.readFile cssFile;
|
||||||
color: ${colors.base00};
|
|
||||||
background-color: ${colors.base09};
|
|
||||||
}
|
|
||||||
&.critical {
|
|
||||||
background-color: ${colors.base08};
|
|
||||||
color: ${colors.base00};
|
|
||||||
animation-name: blink;
|
|
||||||
animation-duration: 0.5s;
|
|
||||||
animation-timing-function: linear;
|
|
||||||
animation-iteration-count: infinite;
|
|
||||||
animation-direction: alternate;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.full {
|
|
||||||
color: ${colors.base00};
|
|
||||||
background: ${accent};
|
|
||||||
}
|
|
||||||
&.plugged {
|
|
||||||
color: ${colors.base00};
|
|
||||||
background: ${colors.base0D};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes blink {
|
wayland.windowManager.hyprland.settings.layerrule = [
|
||||||
to {
|
"blur, waybar"
|
||||||
background-color: ${colors.base00};
|
|
||||||
color: ${colors.base08};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
|
|
||||||
cssFile = pkgs.runCommand "waybar.css" {
|
|
||||||
nativeBuildInputs = [ pkgs.dart-sass ];
|
|
||||||
} "sass ${scssFile} $out";
|
|
||||||
in builtins.readFile cssFile;
|
|
||||||
};
|
|
||||||
|
|
||||||
wayland.windowManager.hyprland.settings.layer_rule = [
|
|
||||||
{
|
|
||||||
match.namespace = "waybar";
|
|
||||||
blur = true;
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user