Compare commits

...
85 Commits
Author SHA1 Message Date
Sweetbread acdc1e1d2f hyprland: change scroll direction 2026-08-15 21:31:10 +03:00
Sweetbread d5cdc66342 helix: add line moving
https://github.com/helix-editor/helix/discussions/5764#discussioncomment-9518381
2026-08-15 21:31:10 +03:00
Sweetbread 8a4fb789e6 helix: for FASM 2026-08-15 21:31:10 +03:00
Sweetbread c4f421d4e7 Update 2026-08-15 21:31:10 +03:00
Chest 1f9fb4a15e vpn config fix 2026-08-15 21:31:10 +03:00
Sweetbread ae06285820 Inaho: add games 2026-08-15 21:31:10 +03:00
Sweetbread 79c1c1dc00 pkgs: nmtui to wifitui 2026-08-15 21:30:49 +03:00
Sweetbread 18326f8d7b Inaho: new host 2026-08-15 21:30:49 +03:00
Sweetbread a1aed98d86 Update 2026-08-15 21:21:40 +03:00
Sweetbread 1ac87ff9b6 helix: steel 2026-07-06 07:46:18 +03:00
Sweetbread cb04781be6 vpn: set capabilities 2026-07-06 07:45:55 +03:00
Sweetbread 320c5e4b16 fixup! pkgs: wob 2026-07-06 07:45:14 +03:00
Sweetbread ac11428642 ygg: change peers 2026-07-06 07:44:55 +03:00
Sweetbread fbc26c1562 Rias: openrgb 2026-07-06 07:44:14 +03:00
Sweetbread 3c8c43f90b wallpaper-changer: add progress bar 2026-06-08 03:47:46 +03:00
Sweetbread 3de3a14d0b mako: remove shit code 2026-06-08 03:25:29 +03:00
Sweetbread 98434b79cf stylix: add accent color
I spent an hour just to add one f*ing option
2026-06-08 03:25:28 +03:00
Sweetbread c8b5900985 Update 2026-06-06 02:52:41 +03:00
Sweetbread ae74e79b8e fixup! wip: quickshell: control-panel 2026-06-06 01:43:13 +03:00
Sweetbread 3fd67e08bc pkgs: move smth to stable 2026-06-06 01:42:57 +03:00
Sweetbread e2527a20d1 ui: fuzzel to walker 2026-06-05 20:14:31 +03:00
Sweetbread 03fbc1e1b7 fixup! font: change to pixel fonts 2026-06-05 02:16:23 +03:00
Sweetbread 5b93b31de3 pkgs: add pear-desktop 2026-06-04 21:57:07 +03:00
Sweetbread 9332b07729 font: change to pixel fonts 2026-06-04 21:57:07 +03:00
Sweetbread 211dafc241 pkgs: wob 2026-06-04 21:57:07 +03:00
Sweetbread cb5771e2a3 wip: quickshell: control-panel 2026-06-04 21:57:06 +03:00
Sweetbread 3fc3f5fa3a fixup! Replace AGS with waybar 2026-06-03 01:42:24 +03:00
Sweetbread 2ffedb7835 yazi: filechooser 2026-06-01 18:42:50 +03:00
Sweetbread 5b2fbe0db4 yazi: open from other apps 2026-06-01 18:42:49 +03:00
Sweetbread 7ea803d7cd Update 2026-06-01 18:42:49 +03:00
Sweetbread 16cfa90286 vpn: change client 2026-05-31 14:53:41 +03:00
Sweetbread 89dfed99cb ghostty: add cursor shader 2026-05-31 14:53:41 +03:00
Sweetbread 36be1d4912 Rias: change mount type 2026-05-31 14:53:40 +03:00
Sweetbread 9d687a19d1 Update 2026-05-31 14:53:40 +03:00
Sweetbread 9a74a3572d ygg: change node 2026-05-31 14:51:53 +03:00
Sweetbread 1eace564e5 Impreza: add wallpaper 2026-05-31 14:51:53 +03:00
Sweetbread 88f9d0bc57 nvidia: fix backlight 2026-05-31 14:51:53 +03:00
Chest e52ee5b09f waybar for mee<3 2026-05-31 14:51:53 +03:00
Chest fd9a6db867 vpn for gpt 2026-05-31 14:51:53 +03:00
Sweetbread acf0041fbc vpn: change engine 2026-05-31 14:51:52 +03:00
Sweetbread 435423f6e1 Update system 2026-05-31 14:51:52 +03:00
Sweetbread 61b6256a14 wip: cava 2026-05-31 14:51:52 +03:00
Sweetbread cdfdeffc07 starship: fix os icon 2026-05-31 14:51:52 +03:00
Sweetbread 6156fda36d hyprland: add zoom 2026-05-31 14:51:52 +03:00
Sweetbread 9f8a14849e tty: fix Cyrillic 2026-05-31 14:51:52 +03:00
Sweetbread 9eea524875 ssh: keepalive 2026-05-31 14:51:52 +03:00
Sweetbread f84b6b1f6d Replace AGS with waybar 2026-05-31 14:51:52 +03:00
Sweetbread 46cf31e49a Update system 2026-05-31 14:51:51 +03:00
Sweetbread 91ccf1078f Style hyprland 2026-05-31 14:51:51 +03:00
Sweetbread e890c350c6 Make VPN list via flake
Wow, I didn't know I can do this...
2026-05-31 14:51:51 +03:00
Sweetbread 9d395d0dae Update system 2026-05-31 14:51:51 +03:00
Chest cc3d356513 vpn 2026-03-17 19:22:08 +03:00
Chest 617ecbaf20 meow 2026-03-17 19:22:08 +03:00
Sweetbread bc24313d57 Fix FileChooser in Hyprland 2026-03-17 19:22:07 +03:00
Sweetbread c54814b63e Update VPN 2026-03-17 19:22:07 +03:00
Sweetbread e1794a8dd3 Repath mounts 2026-03-17 19:22:07 +03:00
Sweetbread 092e73822d Update system 2026-03-17 19:22:07 +03:00
Sweetbread a185fa4d85 Change domain 2026-03-17 19:22:07 +03:00
Sweetbread 514d3a45d9 yazi: add some stuff 2026-03-17 19:22:01 +03:00
Sweetbread 9c3698839c Replace wofi with fuzzel 2025-12-13 03:13:26 +03:00
Sweetbread 1d18bad6fa Sort imports 2025-12-13 03:12:12 +03:00
Sweetbread aeecd99aca Change README 2025-12-06 23:26:10 +03:00
Sweetbread f45ab786f9 helix: change cursor shape and add a ruler 2025-12-06 22:48:56 +03:00
Sweetbread 80f25abdd5 ags: add another accent for chest 2025-12-03 15:37:14 +03:00
Sweetbread 718d20da06 system: update channels 2025-12-03 15:37:14 +03:00
Sweetbread ce4e5e3d50 ref: remove host.laptop from user modules 2025-12-03 15:36:33 +03:00
Sweetbread 3835443178 sops: fix link 2025-12-03 15:36:33 +03:00
Sweetbread 47b17c70ad flake: add custom cache 2025-12-03 15:36:33 +03:00
Sweetbread bd810a6a2a hypr: change border color 2025-12-03 15:36:33 +03:00
Chest 6cf26a1e18 pkgs: add ZZZ 2025-12-03 15:36:33 +03:00
Chest b556847dcf Eclipse: add VirtualBox 2025-12-03 15:36:33 +03:00
Sweetbread 3f06268365 zsh: add more aliases 2025-12-03 15:36:32 +03:00
Sweetbread b02a17a7d9 boot: left os prober only for Impreza 2025-12-03 15:36:32 +03:00
Sweetbread 5ebffd5e41 flake: remove devshell 2025-12-03 15:36:32 +03:00
Sweetbread 0c9e6b31aa flake: remove host definition dublication 2025-12-03 15:36:22 +03:00
Sweetbread 885dca9738 zsh: config history 2025-12-01 19:14:15 +03:00
Sweetbread 08a3195d43 zsh: optimise aliases 2025-12-01 19:14:15 +03:00
Sweetbread d934e358c0 hyprland: separate settings for user and host 2025-12-01 19:14:15 +03:00
Sweetbread 7356fbe8f6 Update system 2025-12-01 19:14:06 +03:00
Sweetbread cae32c1b4f pkgs: return office to everyone 2025-11-15 20:09:47 +03:00
Sweetbread a0ea0dd7f1 pdf 2025-11-15 20:09:47 +03:00
Sweetbread a42b17d363 fixup! Add Miku cursor 2025-11-02 19:35:06 +03:00
Sweetbread f970e20730 system: update 2025-10-31 13:40:32 +03:00
Sweetbread 4c34c5c364 pkgs: add torrent client 2025-10-24 13:15:25 +03:00
Sweetbread c4ceb67dfc Add Miku cursor 2025-10-10 00:51:20 +03:00
85 changed files with 3096 additions and 829 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ creation_rules:
key_groups:
- age:
- *primary
- path_regex: host/(Rias|Senko|Eclipse)/secrets/.+$
- path_regex: host/(Rias|Senko|Inaho|Eclipse)/secrets/.+$
key_groups:
- age:
- *primary
+42 -7
View File
@@ -1,12 +1,47 @@
# ❄️ My NixOS Config
```bash
git clone https://github.com/Andrey0189/nixos-config
mv nixos-config $HOME/nix # Config is supposed to be in the ~/nix directory
cd $HOME/nix
sudo nixos-rebuild switch --flake .
home-manager switch --flake .
This configuration is based on [&'s config](https://github.com/Andrey0189/nixos-config)
## Users
- [Sweetbread](./user/sweetbread)
- [Chest](./user/chest)
## Hosts
- [Rias](./host/Rias)
- [Senko](./host/Senko)
- [Eclipse](./host/Eclipse)
- [Impreza](./host/Impreza)
## How does this work?
The [flake](./flake.nix) file is the starting point. While installing/rebuilding
the correct `host` is chosen, which includes `./host/${host}/configuration.nix`.
It includes 2 (actually, more, but hey!) files:
- [`./host/modules/common.nix`](./host/modules/common.nix): Common setting
for all hosts (I don't say)
- [`./user/common.nix`](./user/common.nix): Common settings for all users (you
got the idea) and setup of [home-manager](https://github.com/nix-community/home-manager)
It allows me to remove duplications and add multiple users to one host
Example with Rias:
```
Enjoy!
./host/Rias/configuration.nix
./host/Rias/modules/*
./host/modules/gpu/nvidia.nix
./host/modules/common.nix
./host/Rias/hardware-configuration.nix
./modules/host.nix
./modules/host/*
./host/modules/packages.nix
./user/common.nix
./user/sweetbread/home.nix
./user/sweetbread/modules/*
./modules/user.nix
./modules/user/*
```
## Programs
Most of programs are defined in [user modules](./modules/user)
![Screenshot](./screenshot.png)
-41
View File
@@ -1,41 +0,0 @@
{
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 = "/";
};
};
};
};
};
};
};
}
Generated
+356 -228
View File
@@ -7,11 +7,11 @@
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1758557465,
"narHash": "sha256-SeDqOZQoARl/xxEMdej09IScCf77SEQfRAjED7lBgMY=",
"lastModified": 1783689476,
"narHash": "sha256-Ac4EGPZr9e+mPUdmavJFSTft4vgoXml40+YOFYKTXPg=",
"owner": "ezKEa",
"repo": "aagl-gtk-on-nix",
"rev": "944f9903859ad16db762fbe573fb6f05f7367e16",
"rev": "af94408291ad477cae8eed964981ab41f90eb184",
"type": "github"
},
"original": {
@@ -23,7 +23,7 @@
"ags": {
"inputs": {
"astal": "astal",
"nixpkgs": "nixpkgs_3"
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1744557573,
@@ -60,11 +60,11 @@
]
},
"locked": {
"lastModified": 1758302489,
"narHash": "sha256-NvE/uabYsuR7TbmRkSlOe6DB7UnOpD2/kHGyir2J/6A=",
"lastModified": 1772460678,
"narHash": "sha256-NYaWs8fYJ38IgFld0hGSdT2LEVhrgO8SiRReBjIH7YY=",
"owner": "hyprwm",
"repo": "aquamarine",
"rev": "11406cc23afeaaef1ee3ccffb9614e67e2458e29",
"rev": "5d2cb726b16ee349df443f84b64cff53221b6983",
"type": "github"
},
"original": {
@@ -115,27 +115,28 @@
"base16-fish": {
"flake": false,
"locked": {
"lastModified": 1622559957,
"narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=",
"lastModified": 1765809053,
"narHash": "sha256-XCUQLoLfBJ8saWms2HCIj4NEN+xNsWBlU1NrEPcQG4s=",
"owner": "tomyun",
"repo": "base16-fish",
"rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe",
"rev": "86cbea4dca62e08fb7fd83a70e96472f92574782",
"type": "github"
},
"original": {
"owner": "tomyun",
"repo": "base16-fish",
"rev": "86cbea4dca62e08fb7fd83a70e96472f92574782",
"type": "github"
}
},
"base16-helix": {
"flake": false,
"locked": {
"lastModified": 1752979451,
"narHash": "sha256-0CQM+FkYy0fOO/sMGhOoNL80ftsAzYCg9VhIrodqusM=",
"lastModified": 1776754714,
"narHash": "sha256-E3OAK27smtATTmX45uoTSRsVD+Y+ZiVVfgM/tjpbtYg=",
"owner": "tinted-theming",
"repo": "base16-helix",
"rev": "27cf1e66e50abc622fb76a3019012dc07c678fac",
"rev": "4d508123037e7851ad36ebf7d9c48b0e9e1eb581",
"type": "github"
},
"original": {
@@ -161,14 +162,34 @@
"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": {
"flake": false,
"locked": {
"lastModified": 1756083905,
"narHash": "sha256-UqYGTBgI5ypGh0Kf6zZjom/vABg7HQocB4gmxzl12uo=",
"lastModified": 1782007937,
"narHash": "sha256-PbnJr+eB+9Czol3ReI83dUgEhcn0sDK6TSy6ODTQm88=",
"owner": "rafaelmardojai",
"repo": "firefox-gnome-theme",
"rev": "b655eaf16d4cbec9c3472f62eee285d4b419a808",
"rev": "981bd332015397fb1ca033fa982bd61635160c78",
"type": "github"
},
"original": {
@@ -180,11 +201,11 @@
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
@@ -196,15 +217,15 @@
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "edolstra",
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
@@ -217,11 +238,11 @@
]
},
"locked": {
"lastModified": 1756770412,
"narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=",
"lastModified": 1782949081,
"narHash": "sha256-vp6Y/Grm98ESt6ceOkWiHWyZRDV3J1RID4w+6NWK9yA=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "4524271976b625a4a605beefd893f270620fd751",
"rev": "17c9d6cdfc60c64f4ee8d306f9bc0b4ccb51481e",
"type": "github"
},
"original": {
@@ -289,17 +310,39 @@
"gnome-shell": {
"flake": false,
"locked": {
"lastModified": 1748186689,
"narHash": "sha256-UaD7Y9f8iuLBMGHXeJlRu6U1Ggw5B9JnkFs3enZlap0=",
"host": "gitlab.gnome.org",
"lastModified": 1776175984,
"narHash": "sha256-RJFlFW8GiMei6oqUGrMkGEvVqOH8U7Q8abc1yK4VKD8=",
"owner": "GNOME",
"repo": "gnome-shell",
"rev": "8c88f917db0f1f0d80fa55206c863d3746fa18d0",
"rev": "e0fdc4c13250e9a9b8ea9594c83925274f4a5dca",
"type": "gitlab"
},
"original": {
"host": "gitlab.gnome.org",
"owner": "GNOME",
"ref": "50.1",
"repo": "gnome-shell",
"type": "gitlab"
}
},
"helix-steel": {
"inputs": {
"nixpkgs": "nixpkgs_3",
"rust-overlay": "rust-overlay_2"
},
"locked": {
"lastModified": 1784384926,
"narHash": "sha256-qYR2f+uSUNsJYbbwSo9bCB+LI7n3NzQDCHXJRmHztDg=",
"owner": "mattwparas",
"repo": "helix",
"rev": "8d189f46e9c620baa685bdfbe39b7c95928475a0",
"type": "github"
},
"original": {
"owner": "GNOME",
"ref": "48.2",
"repo": "gnome-shell",
"owner": "mattwparas",
"ref": "steel-event-system",
"repo": "helix",
"type": "github"
}
},
@@ -310,11 +353,11 @@
]
},
"locked": {
"lastModified": 1758719930,
"narHash": "sha256-DgHe1026Ob49CPegPMiWj1HNtlMTGQzfSZQQVlHC950=",
"lastModified": 1784913159,
"narHash": "sha256-JWq0BfjO4ktpH5USfQNQzdvHpIDT8fSKD5K7LvdMRFs=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "142acd7a7d9eb7f0bb647f053b4ddfd01fdfbf1d",
"rev": "079a3b5d1aa6a719920a51316253b7d6dd22738d",
"type": "github"
},
"original": {
@@ -339,11 +382,11 @@
]
},
"locked": {
"lastModified": 1753964049,
"narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=",
"lastModified": 1772461003,
"narHash": "sha256-pVICsV7FtcEeVwg5y/LFh3XFUkVJninm/P1j/JHzEbM=",
"owner": "hyprwm",
"repo": "hyprcursor",
"rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5",
"rev": "b62396457b9cfe2ebf24fe05404b09d2a40f8ed7",
"type": "github"
},
"original": {
@@ -368,11 +411,11 @@
]
},
"locked": {
"lastModified": 1758572180,
"narHash": "sha256-Is8Rcp99Ynl3JFcU3k2lsmyf8WGacWKZtnVb0mVIZ6M=",
"lastModified": 1772461523,
"narHash": "sha256-mI6A51do+hEUzeJKk9YSWfVHdI/SEEIBi2tp5Whq5mI=",
"owner": "hyprwm",
"repo": "hyprgraphics",
"rev": "32e6b8386f7dc70a4cc01607a826a281f3c52364",
"rev": "7d63c04b4a2dd5e59ef943b4b143f46e713df804",
"type": "github"
},
"original": {
@@ -386,31 +429,78 @@
"aquamarine": "aquamarine",
"hyprcursor": "hyprcursor",
"hyprgraphics": "hyprgraphics",
"hyprland-guiutils": "hyprland-guiutils",
"hyprland-protocols": "hyprland-protocols",
"hyprland-qtutils": "hyprland-qtutils",
"hyprlang": "hyprlang",
"hyprutils": "hyprutils",
"hyprwayland-scanner": "hyprwayland-scanner",
"hyprwire": "hyprwire",
"nixpkgs": "nixpkgs_4",
"pre-commit-hooks": "pre-commit-hooks",
"systems": "systems",
"xdph": "xdph"
},
"locked": {
"lastModified": 1758574443,
"narHash": "sha256-eLU5Zo1L3IFr8LgOsvTcoYW04/K+Sb8OvpwbaTSTGF4=",
"lastModified": 1773149218,
"narHash": "sha256-m5Ewi+rgn18qPP54Um4O2zwZ02oiomlZssHvXYEUv3U=",
"owner": "hyprwm",
"repo": "Hyprland",
"rev": "71a1216abcc7031776630a6d88f105605c4dc1c9",
"rev": "59f9f2688ac508a0584d1462151195a6c4992f99",
"type": "github"
},
"original": {
"owner": "hyprwm",
"ref": "v0.51.1-b",
"ref": "v0.54.2-b",
"repo": "Hyprland",
"type": "github"
}
},
"hyprland-guiutils": {
"inputs": {
"aquamarine": [
"hyprland",
"aquamarine"
],
"hyprgraphics": [
"hyprland",
"hyprgraphics"
],
"hyprlang": [
"hyprland",
"hyprlang"
],
"hyprtoolkit": "hyprtoolkit",
"hyprutils": [
"hyprland",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprwayland-scanner"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1772467975,
"narHash": "sha256-kipyuDBxrZq+beYpZqWzGvFWm4QbayW9agAvi94vDXY=",
"owner": "hyprwm",
"repo": "hyprland-guiutils",
"rev": "5e1c6b9025aaf4d578f3eff7c0eb1f0c197a9507",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-guiutils",
"type": "github"
}
},
"hyprland-plugins": {
"inputs": {
"hyprland": [
@@ -428,11 +518,11 @@
]
},
"locked": {
"lastModified": 1758650429,
"narHash": "sha256-tQLvuUu/8p9yEerYz+mcsSW7VNd7Z4vuSd4LGF8Y38w=",
"lastModified": 1784102347,
"narHash": "sha256-piRpwar7VZI3YviYo0a/UMFz9+rLesfv3nRLGKxjVGg=",
"owner": "hyprwm",
"repo": "hyprland-plugins",
"rev": "1e3fa62428728bdc2d040f65afe98de1ae01c6b5",
"rev": "7644cecdb947060682891a0db2a0cdc5c0b9e704",
"type": "github"
},
"original": {
@@ -453,11 +543,11 @@
]
},
"locked": {
"lastModified": 1749046714,
"narHash": "sha256-kymV5FMnddYGI+UjwIw8ceDjdeg7ToDVjbHCvUlhn14=",
"lastModified": 1772460177,
"narHash": "sha256-/6G/MsPvtn7bc4Y32pserBT/Z4SUUdBd4XYJpOEKVR4=",
"owner": "hyprwm",
"repo": "hyprland-protocols",
"rev": "613878cb6f459c5e323aaafe1e6f388ac8a36330",
"rev": "1cb6db5fd6bb8aee419f4457402fa18293ace917",
"type": "github"
},
"original": {
@@ -466,74 +556,6 @@
"type": "github"
}
},
"hyprland-qt-support": {
"inputs": {
"hyprlang": [
"hyprland",
"hyprland-qtutils",
"hyprlang"
],
"nixpkgs": [
"hyprland",
"hyprland-qtutils",
"nixpkgs"
],
"systems": [
"hyprland",
"hyprland-qtutils",
"systems"
]
},
"locked": {
"lastModified": 1749154592,
"narHash": "sha256-DO7z5CeT/ddSGDEnK9mAXm1qlGL47L3VAHLlLXoCjhE=",
"owner": "hyprwm",
"repo": "hyprland-qt-support",
"rev": "4c8053c3c888138a30c3a6c45c2e45f5484f2074",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-qt-support",
"type": "github"
}
},
"hyprland-qtutils": {
"inputs": {
"hyprland-qt-support": "hyprland-qt-support",
"hyprlang": [
"hyprland",
"hyprlang"
],
"hyprutils": [
"hyprland",
"hyprland-qtutils",
"hyprlang",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1757694755,
"narHash": "sha256-j+w5QUUr2QT/jkxgVKecGYV8J7fpzXCMgzEEr6LG9ug=",
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"rev": "5ffdfc13ed03df1dae5084468d935f0a3f2c9a4c",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"type": "github"
}
},
"hyprlang": {
"inputs": {
"hyprutils": [
@@ -550,11 +572,11 @@
]
},
"locked": {
"lastModified": 1756810301,
"narHash": "sha256-wgZ3VW4VVtjK5dr0EiK9zKdJ/SOqGIBXVG85C3LVxQA=",
"lastModified": 1772459629,
"narHash": "sha256-/iwvNUYShmmnwmz/czEUh6+0eF5vCMv0xtDW0STPIuM=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "3d63fb4a42c819f198deabd18c0c2c1ded1de931",
"rev": "7615ee388de18239a4ab1400946f3d0e498a8186",
"type": "github"
},
"original": {
@@ -563,6 +585,58 @@
"type": "github"
}
},
"hyprtoolkit": {
"inputs": {
"aquamarine": [
"hyprland",
"hyprland-guiutils",
"aquamarine"
],
"hyprgraphics": [
"hyprland",
"hyprland-guiutils",
"hyprgraphics"
],
"hyprlang": [
"hyprland",
"hyprland-guiutils",
"hyprlang"
],
"hyprutils": [
"hyprland",
"hyprland-guiutils",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprland-guiutils",
"hyprwayland-scanner"
],
"nixpkgs": [
"hyprland",
"hyprland-guiutils",
"nixpkgs"
],
"systems": [
"hyprland",
"hyprland-guiutils",
"systems"
]
},
"locked": {
"lastModified": 1772462885,
"narHash": "sha256-5pHXrQK9zasMnIo6yME6EOXmWGFMSnCITcfKshhKJ9I=",
"owner": "hyprwm",
"repo": "hyprtoolkit",
"rev": "9af245a69fa6b286b88ddfc340afd288e00a6998",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprtoolkit",
"type": "github"
}
},
"hyprutils": {
"inputs": {
"nixpkgs": [
@@ -575,11 +649,11 @@
]
},
"locked": {
"lastModified": 1756117388,
"narHash": "sha256-oRDel6pNl/T2tI+nc/USU9ZP9w08dxtl7hiZxa0C/Wc=",
"lastModified": 1772459870,
"narHash": "sha256-xxkK2Cvqxpf/4UGcJ/TyCwrvmiNWsKsJfFzHMp2bxis=",
"owner": "hyprwm",
"repo": "hyprutils",
"rev": "b2ae3204845f5f2f79b4703b441252d8ad2ecfd0",
"rev": "e63f3a79334dec49f8eb1691f66f18115df04085",
"type": "github"
},
"original": {
@@ -600,11 +674,11 @@
]
},
"locked": {
"lastModified": 1755184602,
"narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=",
"lastModified": 1772459835,
"narHash": "sha256-978jRz/y/9TKmZb/qD4lEYHCQGHpEXGqy+8X2lFZsak=",
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d",
"rev": "0a692d4a645165eebd65f109146b8861e3a925e7",
"type": "github"
},
"original": {
@@ -613,13 +687,42 @@
"type": "github"
}
},
"hyprwire": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1772463520,
"narHash": "sha256-GIjASzYnV4fK19HnyJKmHyqyxHxIpjusK9foEA4Yo+4=",
"owner": "hyprwm",
"repo": "hyprwire",
"rev": "4e1933ae5602b350c5b6633f5c932549c9b8aca2",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprwire",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1758277210,
"narHash": "sha256-iCGWf/LTy+aY0zFu8q12lK8KuZp7yvdhStehhyX1v8w=",
"lastModified": 1782723713,
"narHash": "sha256-oPXCU/SSUokcGaJREHibG1CBX3+s/W7orDWQOZDsEeQ=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "8eaee110344796db060382e15d3af0a9fc396e0e",
"rev": "b5aa0fbd538984f6e3d201be0005b4463d8b09f8",
"type": "github"
},
"original": {
@@ -629,55 +732,39 @@
"type": "github"
}
},
"nixpkgs-fixed": {
"nixpkgs-pinned": {
"locked": {
"lastModified": 1754292888,
"narHash": "sha256-1ziydHSiDuSnaiPzCQh1mRFBsM2d2yRX9I+5OPGEmIE=",
"lastModified": 1779971959,
"narHash": "sha256-R5nauXyqyfRUFiZycFFZdkF7wl6eaUpPLst35+2nJQY=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "ce01daebf8489ba97bd1609d185ea276efdeb121",
"rev": "ec942ba042dad5ef097e2ef3a3effc034241f011",
"type": "github"
},
"original": {
"owner": "nixos",
"repo": "nixpkgs",
"rev": "ce01daebf8489ba97bd1609d185ea276efdeb121",
"rev": "ec942ba042dad5ef097e2ef3a3effc034241f011",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1758589230,
"narHash": "sha256-zMTCFGe8aVGTEr2RqUi/QzC1nOIQ0N1HRsbqB4f646k=",
"lastModified": 1784856561,
"narHash": "sha256-J+Bx1Z6Oeoj2FgnBhRMKyUhhtDoOpTgXYaVLZpDjW4A=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "d1d883129b193f0b495d75c148c2c3a7d95789a0",
"rev": "597283ad8aa0b331c788e97c4c262d58877074ef",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-25.05",
"ref": "nixos-26.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1744536153,
"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=",
@@ -693,13 +780,29 @@
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1775036866,
"narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "6201e203d09599479a3b3450ed24fa81537ebc4e",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1758277210,
"narHash": "sha256-iCGWf/LTy+aY0zFu8q12lK8KuZp7yvdhStehhyX1v8w=",
"lastModified": 1772542754,
"narHash": "sha256-WGV2hy+VIeQsYXpsLjdr4GvHv5eECMISX1zKLTedhdg=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "8eaee110344796db060382e15d3af0a9fc396e0e",
"rev": "8c809a146a140c5c8806f13399592dbcb1bb5dc4",
"type": "github"
},
"original": {
@@ -711,11 +814,11 @@
},
"nixpkgs_5": {
"locked": {
"lastModified": 1758427187,
"narHash": "sha256-pHpxZ/IyCwoTQPtFIAG2QaxuSm8jWzrzBGjwQZIttJc=",
"lastModified": 1784796856,
"narHash": "sha256-wWFrV5/Qbm+lyt5x20E/bSbfJiGKMo4RCxZV8cl/WZI=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "554be6495561ff07b6c724047bdd7e0716aa7b46",
"rev": "e2587caef70cea85dd97d7daab492899902dbf5d",
"type": "github"
},
"original": {
@@ -727,11 +830,11 @@
},
"nixpkgs_6": {
"locked": {
"lastModified": 1758262103,
"narHash": "sha256-aBGl3XEOsjWw6W3AHiKibN7FeoG73dutQQEqnd/etR8=",
"lastModified": 1782175435,
"narHash": "sha256-EMzXKmnOtBQ2MnvpiNOm7E+kOMvdPrIKaeg52Tip2Uk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "12bd230118a1901a4a5d393f9f56b6ad7e571d01",
"rev": "89570f24e97e614aa34aa9ab1c927b6578a43775",
"type": "github"
},
"original": {
@@ -743,11 +846,11 @@
},
"nixpkgs_7": {
"locked": {
"lastModified": 1756819007,
"narHash": "sha256-12V64nKG/O/guxSYnr5/nq1EfqwJCdD2+cIGmhz3nrE=",
"lastModified": 1783224372,
"narHash": "sha256-8i/87eeoqiGE4yOTjwSA3Eh/ziJRQEmd/unYU+K27sk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "aaff8c16d7fc04991cac6245bee1baa31f72b1e1",
"rev": "d407951447dcd00442e97087bf374aad70c04cea",
"type": "github"
},
"original": {
@@ -759,11 +862,11 @@
},
"nixpkgs_8": {
"locked": {
"lastModified": 1756288264,
"narHash": "sha256-Om8adB1lfkU7D33VpR+/haZ2gI5r3Q+ZbIPzE5sYnwE=",
"lastModified": 1783279667,
"narHash": "sha256-/NAkDSsve+GNM0Bt6tleJdCGfsTlK89nPjkVOzZMo0s=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ddd1826f294a0ee5fdc198ab72c8306a0ea73aa9",
"rev": "f205b5574fd0cb7da5b702a2da51507b7f4fdd1b",
"type": "github"
},
"original": {
@@ -785,11 +888,11 @@
]
},
"locked": {
"lastModified": 1756961635,
"narHash": "sha256-hETvQcILTg5kChjYNns1fD5ELdsYB/VVgVmBtqKQj9A=",
"lastModified": 1783439237,
"narHash": "sha256-WUr8JF2v3n4Y30E5dxv4sAgNJXpVDBoCQNoQ/V4+n4o=",
"owner": "nix-community",
"repo": "NUR",
"rev": "6ca27b2654ac55e3f6e0ca434c1b4589ae22b370",
"rev": "b70bb66c7bcd162642f3a609bc16843c7059f503",
"type": "github"
},
"original": {
@@ -808,11 +911,11 @@
]
},
"locked": {
"lastModified": 1758108966,
"narHash": "sha256-ytw7ROXaWZ7OfwHrQ9xvjpUWeGVm86pwnEd1QhzawIo=",
"lastModified": 1772024342,
"narHash": "sha256-+eXlIc4/7dE6EcPs9a2DaSY3fTA9AE526hGqkNID3Wg=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "54df955a695a84cd47d4a43e08e1feaf90b1fd9b",
"rev": "6e34e97ed9788b17796ee43ccdbaf871a5c2b476",
"type": "github"
},
"original": {
@@ -825,27 +928,33 @@
"inputs": {
"aagl": "aagl",
"ags": "ags",
"disko": "disko",
"helix-steel": "helix-steel",
"home-manager": "home-manager",
"hyprland": "hyprland",
"hyprland-plugins": "hyprland-plugins",
"nixpkgs": "nixpkgs_5",
"nixpkgs-fixed": "nixpkgs-fixed",
"nixpkgs-pinned": "nixpkgs-pinned",
"nixpkgs-stable": "nixpkgs-stable",
"sops-nix": "sops-nix",
"stylix": "stylix",
"yazi": "yazi"
"yazi": "yazi",
"yazi-plugins": "yazi-plugins"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": "nixpkgs_2"
"nixpkgs": [
"aagl",
"nixpkgs"
]
},
"locked": {
"lastModified": 1758508617,
"narHash": "sha256-kx2uELmVnAbiekj/YFfWR26OXqXedImkhe2ocnbumTA=",
"lastModified": 1782875958,
"narHash": "sha256-5eqDcnBjb1424HRQdnhuhNOBZguq1Z2tqSa2OMF/m2c=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "d2bac276ac7e669a1f09c48614538a37e3eb6d0f",
"rev": "13139aefa973f3d96c60c0fbab801de058ae25ca",
"type": "github"
},
"original": {
@@ -855,6 +964,27 @@
}
},
"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": {
"nixpkgs": [
"yazi",
@@ -862,11 +992,11 @@
]
},
"locked": {
"lastModified": 1756348497,
"narHash": "sha256-xJp3VnoYh4kpsaKFO/7SsGbwOz7pI1ZmjbqpXEuR2cw=",
"lastModified": 1783320166,
"narHash": "sha256-l7C/OsjcnWDOk2K3ssj+SBduwL67LashjBqis9+t468=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "0adf92c70d23fb4f703aea5d3ebb51ac65994f7f",
"rev": "20ee15370c9256669d66968b89ee20a4b0a4e673",
"type": "github"
},
"original": {
@@ -880,11 +1010,11 @@
"nixpkgs": "nixpkgs_6"
},
"locked": {
"lastModified": 1758425756,
"narHash": "sha256-L3N8zV6wsViXiD8i3WFyrvjDdz76g3tXKEdZ4FkgQ+Y=",
"lastModified": 1783174389,
"narHash": "sha256-aCWC8ngycU7OdJrU2+Je3qf+1a2ykuBvpPhZT/9tXMc=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "e0fdaea3c31646e252a60b42d0ed8eafdb289762",
"rev": "f1406619a3884cd5c47992a70b8b35c9c0fcb4c9",
"type": "github"
},
"original": {
@@ -905,18 +1035,17 @@
"nixpkgs": "nixpkgs_7",
"nur": "nur",
"systems": "systems_2",
"tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty",
"tinted-schemes": "tinted-schemes",
"tinted-tmux": "tinted-tmux",
"tinted-zed": "tinted-zed"
},
"locked": {
"lastModified": 1758716250,
"narHash": "sha256-PvOo4vSk7WAOhSifgL+rzExihquU9DOIOQPrUVuFHpE=",
"lastModified": 1784676123,
"narHash": "sha256-ndyanKzw90yX2nUVFmTuYqXidUNymtMfgmIHyNdhht0=",
"owner": "danth",
"repo": "stylix",
"rev": "526c882800837cce7676f3e11bb3e13e975c6032",
"rev": "66714e5ce44269ecc58c20d9196da8dbe1b27a31",
"type": "github"
},
"original": {
@@ -970,23 +1099,6 @@
"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": {
"flake": false,
"locked": {
@@ -1006,11 +1118,11 @@
"tinted-schemes": {
"flake": false,
"locked": {
"lastModified": 1754779259,
"narHash": "sha256-8KG2lXGaXLUE0F/JVwLQe7kOVm21IDfNEo0gfga5P4M=",
"lastModified": 1781968807,
"narHash": "sha256-yYO3Vw2M0y3TAUqt+9+Mj0zwP3XDTF5/PXcPhhFQ1ZM=",
"owner": "tinted-theming",
"repo": "schemes",
"rev": "097d751b9e3c8b97ce158e7d141e5a292545b502",
"rev": "2ccef2f4b22e3cab5a9292811f7133a07eeba4a7",
"type": "github"
},
"original": {
@@ -1022,11 +1134,11 @@
"tinted-tmux": {
"flake": false,
"locked": {
"lastModified": 1754788770,
"narHash": "sha256-LAu5nBr7pM/jD9jwFc6/kyFY4h7Us4bZz7dvVvehuwo=",
"lastModified": 1782012462,
"narHash": "sha256-2iDiD8DQLwS1lGuD9TS8WlvNyDoTs6krWntJbtB2zGo=",
"owner": "tinted-theming",
"repo": "tinted-tmux",
"rev": "fb2175accef8935f6955503ec9dd3c973eec385c",
"rev": "8c4e750f738a742bd73377ee41d3dadedebedef4",
"type": "github"
},
"original": {
@@ -1038,11 +1150,11 @@
"tinted-zed": {
"flake": false,
"locked": {
"lastModified": 1755613540,
"narHash": "sha256-zBFrrTxHLDMDX/OYxkCwGGbAhPXLi8FrnLhYLsSOKeY=",
"lastModified": 1782009766,
"narHash": "sha256-VUhBjpGvWqHI7rWeyMYb/u87YJSXHKfVV6S+IelWeO8=",
"owner": "tinted-theming",
"repo": "base16-zed",
"rev": "937bada16cd3200bdbd3a2f5776fc3b686d5cba0",
"rev": "5e8350bcd354e3241ab681a265fa6ef060c40be1",
"type": "github"
},
"original": {
@@ -1079,11 +1191,11 @@
]
},
"locked": {
"lastModified": 1755354946,
"narHash": "sha256-zdov5f/GcoLQc9qYIS1dUTqtJMeDqmBmo59PAxze6e4=",
"lastModified": 1772476586,
"narHash": "sha256-N/ZwsRLULLpBP5ecvAUzNq8E/CgLRwPwSrHyY3xB5KM=",
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"rev": "a10726d6a8d0ef1a0c645378f983b6278c42eaa0",
"rev": "eb6c02a2ead882f3474f3d7f2fbe966b64ed5110",
"type": "github"
},
"original": {
@@ -1096,14 +1208,14 @@
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs_8",
"rust-overlay": "rust-overlay_2"
"rust-overlay": "rust-overlay_3"
},
"locked": {
"lastModified": 1758728025,
"narHash": "sha256-QXk08LGTqxZZL/2BDas0SWzVDIHt/O45mnobxioPNIU=",
"lastModified": 1784994533,
"narHash": "sha256-DDle7Ge8I+Wd77hwWCKLs/BuhBobmoZxWRG9PGGjPJ8=",
"owner": "sxyazi",
"repo": "yazi",
"rev": "6b09f2b66548564b3a15d6659277c37d7b3c7aa6",
"rev": "d30866dbb22e9ee50226bb65c6cec72dbce5ad98",
"type": "github"
},
"original": {
@@ -1111,6 +1223,22 @@
"repo": "yazi",
"type": "github"
}
},
"yazi-plugins": {
"flake": false,
"locked": {
"lastModified": 1784743894,
"narHash": "sha256-lio4pvrqK575q7M+GtRr/5EdA4h2J/7gIvXK8c5rq1U=",
"owner": "yazi-rs",
"repo": "plugins",
"rev": "bbac5e75b22a2893ef7cdd2bd6814b15f2abb91e",
"type": "github"
},
"original": {
"owner": "yazi-rs",
"repo": "plugins",
"type": "github"
}
}
},
"root": "root",
+33 -80
View File
@@ -3,32 +3,42 @@
nixConfig = {
extra-substituters = [
"https://nix.lair.moe/main"
"https://nix-community.cachix.org"
# "https://cache.garnix.io"
"https://hyprland.cachix.org"
"https://ezkea.cachix.org"
"https://risdeveau.cachix.org"
"https://yazi.cachix.org"
];
extra-trusted-public-keys = [
"main:tR2gNhCBJHKAlVgohPNHBhGnWL55tB8SxXmMWJe5lo8="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
# "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"ezkea.cachix.org-1:ioBmUbJTZIKsHmWWXPe1FSFbeVe+afhfgqgTSNd34eI="
"risdeveau.cachix.org-1:TsoFSVeLl7iKtUYGX7qsvKPjf2vbNLfLC5v3SAdU8r0="
"yazi.cachix.org-1:Dcdz63NZKfvUCbDGngQDAZq6kOroIrFoyO064uvLh8k="
];
};
inputs = {
aagl.url = "github:ezKEa/aagl-gtk-on-nix";
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.05";
nixpkgs-fixed.url = "github:nixos/nixpkgs/ce01daebf8489ba97bd1609d185ea276efdeb121";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-26.05";
nixpkgs-pinned.url = "github:nixos/nixpkgs/ec942ba042dad5ef097e2ef3a3effc034241f011";
disko = {
url = "github:nix-community/disko";
inputs.nixpkgs.follows = "nixpkgs";
};
sops-nix.url = "github:Mic92/sops-nix";
stylix.url = "github:danth/stylix";
ags.url = "github:Aylur/ags/3ed9737bdbc8fc7a7c7ceef2165c9109f336bff6";
yazi.url = "github:sxyazi/yazi";
helix-steel.url = "github:mattwparas/helix/steel-event-system";
hyprland.url = "github:hyprwm/Hyprland/v0.51.1-b";
yazi.url = "github:sxyazi/yazi";
yazi-plugins = {
url = "github:yazi-rs/plugins";
flake = false;
};
hyprland.url = "github:hyprwm/Hyprland/v0.54.2-b";
hyprland-plugins = {
url = "github:hyprwm/hyprland-plugins";
inputs.hyprland.follows = "hyprland";
@@ -40,81 +50,24 @@
};
};
outputs = { self, nixpkgs, nixpkgs-stable, nixpkgs-fixed, home-manager, ... }@inputs: let
outputs = { self, nixpkgs, nixpkgs-stable, nixpkgs-pinned, home-manager, ... }@inputs: let
system = "x86_64-linux";
config = { allowUnfree = true; };
mkHost = hostname: nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs;
pkgs-stable = import nixpkgs-stable { inherit system config; };
pkgs-pinned = import nixpkgs-pinned { inherit system config; };
};
modules = [ ./host/${hostname}/configuration.nix ];
};
in {
nixosConfigurations = {
Rias = nixpkgs-stable.lib.nixosSystem {
specialArgs = {
pkgs-unstable = import nixpkgs {
inherit system;
config.allowUnfree = true;
};
pkgs-fixed = import nixpkgs-fixed {
inherit system;
config.allowUnfree = true;
};
inherit inputs system;
};
modules = [ ./host/Rias/configuration.nix ];
};
Senko = nixpkgs-stable.lib.nixosSystem {
specialArgs = {
pkgs-unstable = import nixpkgs {
inherit system;
config.allowUnfree = true;
};
pkgs-fixed = import nixpkgs-fixed {
inherit system;
config.allowUnfree = true;
};
inherit inputs system;
};
modules = [ ./host/Senko/configuration.nix ];
};
Eclipse = nixpkgs-stable.lib.nixosSystem {
specialArgs = {
pkgs-unstable = import nixpkgs {
inherit system;
config.allowUnfree = true;
};
pkgs-fixed = import nixpkgs-fixed {
inherit system;
config.allowUnfree = true;
};
inherit inputs system;
};
modules = [ ./host/Eclipse/configuration.nix ];
};
Impreza = nixpkgs-stable.lib.nixosSystem {
specialArgs = {
pkgs-unstable = import nixpkgs {
inherit system;
config.allowUnfree = true;
};
pkgs-fixed = import nixpkgs-fixed {
inherit system;
config.allowUnfree = true;
};
inherit inputs system;
};
modules = [ ./host/Impreza/configuration.nix ];
};
};
devShells."${system}".default = let
pkgs = import nixpkgs { inherit system; };
in pkgs.mkShell {
shellHook = "zsh";
packages = with pkgs; [
cargo
rustc
rust-analyzer
lldb
];
Rias = mkHost "Rias";
Senko = mkHost "Senko";
Eclipse = mkHost "Eclipse";
Impreza = mkHost "Impreza";
Inaho = mkHost "Inaho";
};
};
}
+5 -6
View File
@@ -1,6 +1,4 @@
{ config, pkgs, pkgs-unstable, pkgs-fixed, lib, inputs, ...}: let
laptop = false;
in {
{ config, pkgs, pkgs-stable, pkgs-pinned, lib, inputs, ... }: {
imports = [
./secrets/secrets.nix
./modules/aagl.nix
@@ -17,11 +15,10 @@ in {
(import ../../user/common.nix {
inherit config;
inherit pkgs;
inherit pkgs-unstable;
inherit pkgs-fixed;
inherit pkgs-stable;
inherit pkgs-pinned;
inherit lib;
inherit inputs;
inherit laptop;
name = "chest";
})
];
@@ -29,4 +26,6 @@ in {
nixpkgs.config.allowBroken = true;
programs.gamemode.enable = true;
services.printing.enable = true;
virtualisation.virtualbox.host.enable = true;
users.extraGroups.vboxusers.members = [ "chest" ];
}
+2
View File
@@ -47,4 +47,6 @@
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
boot.loader.grub.useOSProber = true;
}
+2
View File
@@ -2,6 +2,8 @@
imports = [ inputs.aagl.nixosModules.default ];
nix.settings = inputs.aagl.nixConfig; # Set up Cachix
programs.honkers-railway-launcher.enable = true;
programs.sleepy-launcher.enable = true;
programs.anime-game-launcher.enable = true;
networking.hosts."0.0.0.0" = [
"overseauspider.yuanshen.com"
"log-upload-os.hoyoverse.com"
+27
View File
@@ -0,0 +1,27 @@
{ pkgs, lib, ... }: {
wayland.windowManager.hyprland = let
wallpaper = pkgs.fetchurl {
name = "miku_wallpaper.jpg";
url = "https://c.lair.moe/pub/miku_wallpaper.jpeg?raw";
hash = "sha256-inK4X5KzQk5FHwDw2DYy43nm7XtXlC6I0S1PkYUv+3w=";
};
in {
settings = {
monitor = [
"DP-3 , 1920x1080@165, 0x0 , 1"
"HDMI-A-1, preferred , -1080x0, 1, transform, 1"
];
workspace = [
"1, monitor:DP-3, default:true"
"10, monitor:HDMI-A-1, default:true"
];
exec-once = [
"hyprctl dispatch workspace 1"
"${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"
];
};
};
}
File diff suppressed because one or more lines are too long
+5 -7
View File
@@ -1,6 +1,4 @@
{ config, pkgs, pkgs-unstable, pkgs-fixed, lib, inputs, ...}: let
laptop = true;
in {
{ config, pkgs, pkgs-stable, pkgs-pinned, lib, inputs, ... }: {
imports = [
./secrets/secrets.nix
./modules/grub.nix
@@ -15,17 +13,17 @@ in {
(import ../../user/common.nix {
inherit config;
inherit pkgs;
inherit pkgs-unstable;
inherit pkgs-fixed;
inherit pkgs-stable;
inherit pkgs-pinned;
inherit lib;
inherit inputs;
inherit laptop;
name = "chest";
})
];
nix.settings.cores = 3;
nixpkgs.config.allowBroken = true;
programs.gamemode.enable = true;
hardware.bluetooth.enable = true;
host.laptop = laptop;
host.laptop = true;
}
+16 -14
View File
@@ -13,22 +13,22 @@
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/31247de4-e9c0-4690-8bce-8380377b6872";
fsType = "ext4";
};
fileSystems."/" = {
device = "/dev/disk/by-label/NixOS";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/328A-299C";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
fileSystems."/boot" = {
device = "/dev/disk/by-label/EFI";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" "nofail" ];
};
fileSystems."/mnt/Windows" =
{ device = "/dev/disk/by-uuid/84E48B00E48AF428";
fsType = "ntfs";
options = [ "umask=0022" "gid=100" "uid=1000" "nofail" ];
};
fileSystems."/mnt/Windows" = {
device = "/dev/disk/by-label/Windows";
fsType = "ntfs";
options = [ "umask=0022" "gid=100" "uid=1000" "nofail" ];
};
swapDevices = [ ];
@@ -41,4 +41,6 @@
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
boot.loader.grub.useOSProber = true;
}
+15
View File
@@ -0,0 +1,15 @@
{ pkgs, lib, ... }: {
wayland.windowManager.hyprland = let
wallpaper = pkgs.fetchurl {
name = "miku_wallpaper.jpg";
url = "https://c.lair.moe/pub/miku_wallpaper.jpeg?raw";
hash = "sha256-inK4X5KzQk5FHwDw2DYy43nm7XtXlC6I0S1PkYUv+3w=";
};
in {
settings = {
exec-once = [
"${lib.getExe pkgs.swww} img -o eDP-1 ${wallpaper}"
];
};
};
}
+49
View File
@@ -0,0 +1,49 @@
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
```
+42
View File
@@ -0,0 +1,42 @@
{ 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
];
}
+85
View File
@@ -0,0 +1,85 @@
{ 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";
};
};
};
};
};
};
};
};
};
};
}
+22
View File
@@ -0,0 +1,22 @@
# 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;
}
+13
View File
@@ -0,0 +1,13 @@
{ 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";
};
}
+9
View File
@@ -0,0 +1,9 @@
{
wayland.windowManager.hyprland = {
settings = {
monitor = [
"eDP-1, 1920x1080@60, 0x0, 1"
];
};
};
}
+34
View File
@@ -0,0 +1,34 @@
{ 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" ];
};
};
};
};
systemd.services.syncthing.environment.STNODEFAULTFOLDER = "true";
}
+20
View File
@@ -0,0 +1,20 @@
{
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;
};
};
};
}
+14
View File
@@ -0,0 +1,14 @@
{
"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"
}
}
+14
View File
@@ -0,0 +1,14 @@
{
"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"
}
}
+7
View File
@@ -0,0 +1,7 @@
My desktop
- **CPU:** Intel i5-10600KF
- **GPU:** NVidia GeForce RTX 3060 Ti
- **RAM:** 32GB
- **SSD:** 512GB
- **HDD:** 1TB
+7 -7
View File
@@ -1,11 +1,9 @@
{ config, pkgs, pkgs-unstable, pkgs-fixed, lib, inputs, ...}: let
laptop = false;
in {
{ config, pkgs, pkgs-stable, pkgs-pinned, lib, inputs, ... }: {
imports = [
./secrets/secrets.nix
./modules/grub.nix
./modules/syncthing.nix
../../modules/host/adb.nix
./modules/rgb.nix
../modules/gpu/nvidia.nix
(import ../modules/common.nix {
@@ -17,11 +15,10 @@ in {
(import ../../user/common.nix {
inherit config;
inherit pkgs;
inherit pkgs-unstable;
inherit pkgs-fixed;
inherit pkgs-stable;
inherit pkgs-pinned;
inherit lib;
inherit inputs;
inherit laptop;
name = "sweetbread";
fullname = "Sweet Bread";
})
@@ -30,4 +27,7 @@ in {
programs.gamemode.enable = true;
services.printing.enable = true;
hardware.opentabletdriver.enable = true;
environment.systemPackages = [ pkgs.android-tools ];
users.users.sweetbread.extraGroups = [ "kvm" ];
}
+1 -1
View File
@@ -24,7 +24,7 @@
fileSystems."/mnt/D" = {
device = "/dev/disk/by-label/Data";
fsType = "ntfs";
fsType = "ntfs3";
options = ["umask=0022" "gid=100" "uid=1000" "nofail" ];
};
+44
View File
@@ -0,0 +1,44 @@
{ pkgs, lib, ...}: {
wayland.windowManager.hyprland = let
monitor-switcher = pkgs.writers.writeBashBin "monitor_switcher" /*bash*/ ''
MODE=$1
case $MODE in
"tv")
hyprctl keyword monitor "DP-3, 1920x1080@60, 3840x0, 1"
hyprctl keyword monitor "HDMI-A-1, 3840x2160@60, 0x0, 1"
notify-send "TV mode"
;;
"mirror")
hyprctl keyword monitor "HDMI-A-1, 3840x2160@60, 0x0, 1"
hyprctl keyword monitor "DP-3, preferred, auto, 1, mirror, HDMI-A-1"
notify-send "TV-only mode"
;;
"display"|*)
hyprctl keyword monitor "HDMI-A-1, disable"
hyprctl keyword monitor "DP-3, 3440x1440@165, 0x0, 1"
notify-send "Display mode"
;;
esac
'';
in {
settings = {
monitor = [
"DP-3, 3440x1440@165, auto-right, 1"
# "HDMI-A-1, 3840x2160@60, auto-left, 2"
"HDMI-A-1, disabled"
];
bind = [
'', XF86Calculator, exec, ghostty --title=pulsemixer -e pulsemixer''
''$mainMod, F1, exec, ${lib.getExe monitor-switcher} tv''
''$mainMod, F2, exec, ${lib.getExe monitor-switcher} mirror''
''$mainMod, F3, exec, ${lib.getExe monitor-switcher}''
];
};
};
}
+17
View File
@@ -0,0 +1,17 @@
{ 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" ];
}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
My laptop `HP Pavilion 15-cb012ur`
+5 -7
View File
@@ -1,6 +1,4 @@
{ config, pkgs, pkgs-unstable, pkgs-fixed, lib, inputs, ...}: let
laptop = true;
in {
{ config, pkgs, pkgs-stable, pkgs-pinned, lib, inputs, ... }: {
imports = [
./secrets/secrets.nix
./modules/grub.nix
@@ -15,18 +13,18 @@ in {
(import ../../user/common.nix {
inherit config;
inherit pkgs;
inherit pkgs-unstable;
inherit pkgs-fixed;
inherit pkgs-stable;
inherit pkgs-pinned;
inherit lib;
inherit inputs;
inherit laptop;
name = "sweetbread";
fullname = "Sweet Bread";
})
];
hardware.bluetooth.enable = true;
host.laptop = laptop;
host.laptop = true;
host.nvidia.prime.enable = true;
environment.systemPackages = [ pkgs.dbgate ];
}
+9
View File
@@ -0,0 +1,9 @@
{
wayland.windowManager.hyprland = {
settings = {
monitor = [
"eDP-1, 1920x1080@60, 0x0, 1"
];
};
};
}
+1 -1
View File
@@ -4,7 +4,7 @@
secrets = {
vpn_bolt = {
format = "binary";
sopsFile = ./vpn_bolt.db;
sopsFile = ../../Rias/secrets/vpn_bolt.db;
};
};
};
-1
View File
@@ -1 +0,0 @@
../../Rias/secrets/vpn_bolt.db
+24 -3
View File
@@ -7,14 +7,35 @@
];
options = {
host.laptop = lib.mkEnableOption "laptop mode";
host = {
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 = {
nix.settings = {
keep-going = true;
extra-substituters = [ "https://nix.lair.moe/main" ];
extra-trusted-public-keys = [ "main:kpwMe+9BsGJ/IUb7i3iadaV38y5/Yuqoct0mf7wI9ds=" ];
experimental-features = [ "nix-command" "flakes" ];
};
networking.hostName = hostname;
time.timeZone = lib.mkDefault "Europe/Moscow";
i18n.defaultLocale = lib.mkDefault "ru_RU.UTF-8";
nix.settings.experimental-features = [ "nix-command" "flakes" ];
system.stateVersion = "23.05";
};
}
}
+6 -6
View File
@@ -1,22 +1,22 @@
{ config, pkgs, ... }:
{ config, pkgs-stable, ... }:
{
hardware.graphics = {
enable = true;
extraPackages = with pkgs; [
extraPackages = with pkgs-stable; [
intel-media-driver
intel-compute-runtime
libvdpau-va-gl
];
extraPackages32 = with pkgs.pkgsi686Linux; [
extraPackages32 = with pkgs-stable.pkgsi686Linux; [
intel-media-driver
];
};
nixpkgs.config.packageOverrides = pkgs: {
vaapiIntel = pkgs.vaapiIntel.override { enableHybridCodec = true; };
nixpkgs.config.packageOverrides = pkgs-stable: {
vaapiIntel = pkgs-stable.vaapiIntel.override { enableHybridCodec = true; };
};
environment.systemPackages = with pkgs; [
environment.systemPackages = with pkgs-stable; [
intel-gpu-tools
libva-utils
clinfo
+29 -12
View File
@@ -1,17 +1,27 @@
{ config, pkgs, lib, ... }: {
boot.kernelParams = [ "nvidia-drm.modeset=1" ];
services.xserver.videoDrivers = [ "nvidia" ];
{ config, pkgs-stable, lib, ... }: let
primeCfg = config.host.nvidia.prime;
isPrimeOffload = primeCfg.enable;
in {
boot = {
kernelParams = [ "nvidia-drm.modeset=1" ];
initrd.kernelModules = lib.optionals isPrimeOffload [ "i915" ];
};
services.xserver.videoDrivers =
if isPrimeOffload
then [ "modesetting" "nvidia" ]
else [ "nvidia" ];
hardware = {
graphics = {
enable = true;
enable32Bit = true;
extraPackages = with pkgs; [
nvidia-vaapi-driver
extraPackages = with pkgs-stable; [
# nvidia-vaapi-driver
intel-media-driver
libvdpau-va-gl
];
extraPackages32 = with pkgs.pkgsi686Linux; [nvidia-vaapi-driver intel-media-driver];
extraPackages32 = with pkgs-stable.pkgsi686Linux; [ nvidia-vaapi-driver intel-media-driver ];
};
nvidia = {
@@ -24,21 +34,28 @@
nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.stable;
prime = lib.optionalAttrs config.host.laptop {
intelBusId = "PCI:0:2:0";
nvidiaBusId = "PCI:1:0:0";
prime = lib.optionalAttrs isPrimeOffload {
offload = {
enable = true;
enableOffloadCmd = true;
};
intelBusId = primeCfg.intelBusId;
nvidiaBusId = primeCfg.nvidiaBusId;
};
};
};
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_DRM_NO_ATOMIC = 1;
GBM_BACKEND = "nvidia-drm";
LIBVA_DRIVER_NAME = "nvidia";
__GLX_VENDOR_LIBRARY_NAME = "nvidia";
__GL_VRR_ALLOWED = 1;
ELECTRON_OZONE_PLATFORM_HINT = "auto";
NIXOS_OZONE_WL = 1;
};
}
+4 -4
View File
@@ -1,7 +1,7 @@
{ pkgs-unstable, inputs, ... }: {
{ pkgs, inputs, ... }: {
nixpkgs.config.allowUnfree = true;
environment.systemPackages = with pkgs-unstable; [
environment.systemPackages = with pkgs; [
file
tree
wget
@@ -15,12 +15,12 @@
ncdu
tldr
helix
pinentry
pinentry-gnome3
];
fonts = {
enableDefaultPackages = false;
packages = with pkgs-unstable; [
packages = with pkgs; [
jetbrains-mono # Best mono font
noto-fonts-cjk-sans # Japanese
powerline-symbols # Console decoration
+83
View File
@@ -0,0 +1,83 @@
{ 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";
HandleLidSwitchExternalPower = "suspend";
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
];
}
+32 -3
View File
@@ -1,4 +1,4 @@
{
{ pkgs, ... }: {
imports = [
./host/bluetooth.nix
./host/bootloader.nix
@@ -8,16 +8,45 @@
./host/gamemode.nix
./host/gpg.nix
./host/laptop.nix
./host/network.nix
./host/printing.nix
./host/shutdown-on-lan.nix
./host/sound.nix
./host/virtmanager.nix
./host/vpn.nix
./host/network.nix
./host/yggdrasil.nix
];
programs.hyprland.enable = true;
programs = {
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 = {
udisks2.enable = true;
fstrim.enable = true;
-4
View File
@@ -1,4 +0,0 @@
{
programs.adb.enable = true;
users.users.sweetbread.extraGroups = ["adbusers"]; # FIXME: check users
}
-1
View File
@@ -11,7 +11,6 @@
enable = true;
efiSupport = true;
device = "nodev";
useOSProber = true;
};
};
consoleLogLevel = 0;
+2 -2
View File
@@ -1,6 +1,6 @@
{ pkgs, ... }: {
{
console = {
font = "${pkgs.kbd}/share/consolefonts/LatArCyrHeb-19.psfu.gz";
font = "LatArCyrHeb-19";
colors = [
"16161E"
"1A1B26"
+10 -3
View File
@@ -1,8 +1,15 @@
{
{ lib, ... }: {
environment.variables = {
EDITOR = "hx";
RANGER_LOAD_DEFAULT_RC = "FALSE";
QT_QPA_PLATFORMTHEME = "qt5ct";
GSETTINGS_BACKEND = "keyfile";
# GTK/Electron apps do not consistently use the portal picker unless this
# variable is present in the graphical session environment.
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 -4
View File
@@ -1,4 +1,4 @@
{ config, pkgs, pkgs-unstable, lib, ... }:
{ config, pkgs, pkgs-stable, lib, ... }:
lib.mkIf config.programs.gamemode.enable {
programs.steam = {
@@ -8,9 +8,9 @@ lib.mkIf config.programs.gamemode.enable {
environment.systemPackages = with pkgs; [
mangohud
protonup
bottles
heroic
protonup-ng
pkgs-stable.bottles
pkgs-stable.heroic
prismlauncher
];
+1 -1
View File
@@ -1,4 +1,4 @@
{ pkgs, ...}: {
{
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
+3 -3
View File
@@ -4,11 +4,11 @@ lib.mkIf config.host.laptop {
services.tlp = {
enable = true;
settings = {
CPU_SCALING_GOVERNOR_ON_AC = "performance";
CPU_SCALING_GOVERNOR_ON_AC = "powersave";
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
CPU_ENERGY_PERF_POLICY_ON_AC = "balance_performance";
CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power";
CPU_MIN_PERF_ON_AC = 0;
CPU_MAX_PERF_ON_AC = 100;
+1 -1
View File
@@ -1,7 +1,7 @@
{ pkgs, lib, ... }:
let
sol = pkgs.writers.writePython3 "shutdown-on-lan.py" {
libraries = [ pkgs.python312Packages.psutil ];
libraries = ps: [ ps.psutil ];
flakeIgnore = [ "E302" "E305" "E501" "E701" ];
} /*py*/ ''
# https://habr.com/ru/articles/816765/
+1 -1
View File
@@ -1,4 +1,4 @@
{ pkgs, ... }: {
{
virtualisation.libvirtd.enable = true;
programs.virt-manager.enable = true;
}
+23 -22
View File
@@ -1,28 +1,29 @@
{ pkgs, pkgs-unstable, config, ...}: {
systemd.services.v2raya = {
{ pkgs-pinned, lib, ... }: {
programs.clash-verge = {
enable = true;
description = "v2rayA gui client";
after = [ "network.target" ];
serviceConfig = {
Restart = "always";
ExecStart = "${pkgs-unstable.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";
};
package = pkgs-pinned.clash-verge-rev;
serviceMode = true;
tunMode = true;
autoStart = true;
};
environment.etc = {
"v2raya/ru_geoip.dat".source = pkgs.fetchurl {
name = "geoip.dat";
url = "https://github.com/runetfreedom/russia-blocked-geoip/releases/download/202509251525/geoip.dat";
hash = "sha256-bhz32BOLoqq8yYe8tXWQRkqUiDMa4jAuhLjDfcyF9d4=";
};
systemd.services.clash-verge.serviceConfig = {
CapabilityBoundingSet = lib.mkForce [
"CAP_NET_ADMIN"
"CAP_NET_RAW"
"CAP_SYS_ADMIN"
"CAP_DAC_OVERRIDE"
"CAP_DAC_READ_SEARCH"
"CAP_SYS_PTRACE"
"CAP_SETUID"
"CAP_SETGID"
"CAP_CHOWN"
"CAP_MKNOD"
];
"v2raya/bolt.db".source = config.sops.secrets.vpn_bolt.path;
AmbientCapabilities = [
"CAP_DAC_READ_SEARCH"
"CAP_SYS_PTRACE"
];
};
}
+2 -1
View File
@@ -4,7 +4,8 @@
persistentKeys = true;
settings = {
Peers = [
"tcp://codrs.ru:5001"
"tcp://box.paulll.cc:13337"
"tcp://lair.moe:5001"
];
};
};
+16 -12
View File
@@ -1,20 +1,24 @@
{ config, lib, ... }: {
imports = [
./user/qt.nix
./user/sops.nix
./user/neofetch.nix
./user/yazi.nix
./user/ags.nix
./user/zsh.nix
./user/helix.nix
./user/hyprlock.nix
./user/btop.nix
./user/wofi.nix
./user/mako.nix
./user/ghostty.nix
./user/helix.nix
./user/hyprland.nix
./user/hyprlock.nix
./user/mako.nix
./user/neofetch.nix
./user/qt.nix
./user/quickshell.nix
./user/stylix.nix
./user/sops.nix
./user/ssh.nix
./user/walker.nix
./user/wob.nix
./user/yazi.nix
./user/zsh.nix
./user/packages/art.nix
./user/packages/desktop.nix
./user/packages/coding.nix
./user/packages/utils.nix
] ;
];
}
-26
View File
@@ -1,26 +0,0 @@
{ config, inputs, pkgs, ... }: {
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 { colors = config.lib.stylix.colors; });
}
+13 -1
View File
@@ -1,11 +1,23 @@
{
{ 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 = {
enable = true;
enableZshIntegration = true;
package = ghosttyWithGL;
settings = {
confirm-close-surface = false;
copy-on-select = false;
title-report = true;
custom-shader = "${shaders}/cursor_warp.glsl";
};
};
}
+170 -2
View File
@@ -1,12 +1,103 @@
{
{ inputs, pkgs, ... }: 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
];
programs.helix = {
enable = true;
package = helixSteel;
defaultEditor = true;
languages = {
language-server.asm-lsp.command = "asm-lsp";
language = [
{
name = "nasm";
file-types = [ "asm" "inc" ];
comment-token = ";";
language-servers = [ "asm-lsp" ];
}
];
};
settings = {
# theme = "catppuccin-mocha";
editor = {
rulers = [ 81 ];
insert-final-newline = false;
indent-guides.render = true;
whitespace.render = {
space = "all";
tab = "all";
@@ -15,8 +106,85 @@
newline = "none";
};
indent-guides.render = true;
cursor-shape = {
normal = "block";
insert = "bar";
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
'';
};
}
@@ -1,70 +1,33 @@
{ pkgs, lib, config, collection, swww_flags, inputs }: {
{ pkgs, lib, config, osConfig, inputs, username, ... }: let
optImport = path: lib.optional (builtins.pathExists path) path;
hostname = osConfig.networking.hostName;
in {
imports = [
./hyprland/zoom.nix
] ++
optImport ../../host/${hostname}/modules/hyprland.nix ++
optImport ../../user/${username}/modules/hyprland.nix;
home.packages = with pkgs; [
ghostty
pamixer
wofi
clipse
wl-clipboard
wl-clip-persist
xclip
awww
wifitui
];
wayland.windowManager.hyprland =
let
wayland.windowManager.hyprland = let
colors = config.lib.stylix.colors;
wallpaper_changer = pkgs.writers.writePython3Bin "wallpaper_changer" {
libraries = [ pkgs.python3Packages.requests ];
flakeIgnore = [ "E501" "E111" "E701" "E241" "E731" ];
} /*py*/ ''
import requests as requests
from random import choice
from os import system, mkdir, listdir
from os.path import exists
notify = lambda s: system(f"notify-desktop Wallpaper '{s}'")
folder = "${config.home.homeDirectory}/Wallpapers"
url = "https://wallhaven.cc/api/v1/collections/${collection}"
with open("${config.sops.secrets."tokens/apis/wallhaven".path}") as f:
token = f.read()
notify("Updating wallpaper!")
try:
json = requests.get(url, params={'apikey': token}).json()
wallpaper = choice(json['data'])
link = wallpaper['path']
format = wallpaper['file_type']
id = wallpaper['id']
if format == "image/jpeg": ext = "jpg"
else: ext = "png"
filename = f"{id}.{ext}"
if not exists(f"{folder}/{filename}"):
if not exists(folder):
mkdir(f"{folder}")
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")
filename = choice(listdir(folder))
finally:
system(f"${lib.getExe pkgs.swww} img {folder}/{filename} ${swww_flags}")
'';
in {
enable = true;
configType = "hyprlang";
xwayland.enable = true;
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
plugins = with inputs.hyprland-plugins.packages.${pkgs.system}; [
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
plugins = with inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}; [
# hyprbars # Version mismatch
];
@@ -79,6 +42,11 @@
env = [
"XDG_SESSION_TYPE,wayland"
"QT_QPA_PLATFORM,wayland"
"QT_QPA_PLATFORMTHEME,xdgdesktopportal"
"GTK_USE_PORTAL,1"
"TDESKTOP_USE_GTK_FILE_DIALOG,1"
"NIXOS_OZONE_WL,1"
"ELECTRON_OZONE_PLATFORM_HINT,auto"
"XDG_CURRENT_DESKTOP,Hyprland"
"XDG_SESSION_DESKTOP,Hyprland"
@@ -96,6 +64,13 @@
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;
};
@@ -124,22 +99,31 @@
"3, horizontal, workspace"
];
windowrule = [
"float, class:^(imv)$"
"float, class:^(feh)$"
"float, class:^(mpv)$"
"float, title:^(Список друзей)"
"move onscreen cursor -50% -50%, class:^(xdragon)$"
"float, title:(nmtui)"
"float, title:(pulsemixer)"
"float, title:(clipse)"
"size 622 652, title:(clipse)"
workspace = [
"w[t1], gapsout:0"
];
exec-once = [
windowrule = [
"match:class imv, float 1"
"match:class feh, float 1"
"match:class mpv, float 1"
"match:title Список друзей, float 1"
"match:title wifitui, float 1"
"match:title pulsemixer, float 1"
"match:title clipse, float 1"
"match:title clipse, size 622 652"
"match:focus 1, rounding 0"
"match:float 0, match:workspace w[t1], border_size 0"
];
exec-once = lib.mkBefore [
"systemctl --user start plasma-polkit-agent"
"${lib.getExe' pkgs.swww "swww-daemon"}"
"${lib.getExe wallpaper_changer}"
"${lib.getExe' pkgs.dbus "dbus-update-activation-environment"} --systemd --all"
"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"
"awww-daemon"
"wl-clip-persist --clipboard both"
"clipse -listen"
"${lib.getExe' pkgs.udiskie "udiskie"}"
@@ -153,9 +137,9 @@
"$mainMod, M, exit,"
"$mainMod, E, exec, ghostty -e sh -c yazi"
"$mainMod, F, togglefloating,"
"$mainMod, D, exec, wofi --show drun"
"$mainMod, P, pseudo, # dwindle"
"$mainMod, J, togglesplit, # dwindle"
"$mainMod, J, layoutmsg, togglesplit"
"$mainMod, K, layoutmsg, swapsplit"
# Move focus with mainMod + arrow keys
"$mainMod, left, movefocus, l"
@@ -202,8 +186,8 @@
"$mainMod SHIFT, F, fullscreen"
# Scroll through existing workspaces with mainMod + scroll
"$mainMod, mouse_down, workspace, e+1"
"$mainMod, mouse_up, workspace, e-1"
"$mainMod, mouse_down, workspace, e-1"
"$mainMod, mouse_up, workspace, e+1"
# Keyboard backlight
"$mainMod, F3, exec, ${lib.getExe pkgs.brightnessctl} -d *::kbd_backlight set +33%"
@@ -213,22 +197,14 @@
", XF86AudioMute, exec, pamixer -t"
", XF86AudioMicMute, exec, pamixer --default-source -m"
", XF86AudioPlay, exec, ${lib.getExe pkgs.playerctl} play-pause"
", XF86AudioPrev, exec, ${lib.getExe pkgs.playerctl} position 5-"
", XF86AudioNext, exec, ${lib.getExe pkgs.playerctl} position 5+"
", 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% "
# Waybar
"$mainMod, B, exec, pkill -SIGUSR1 waybar"
#"$mainMod, W, exec, pkill -SIGUSR2 waybar"
"$mainMod, W, exec, ${lib.getExe wallpaper_changer}"
];
binde = [
@@ -236,6 +212,11 @@
", 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"
@@ -248,4 +229,27 @@
];
};
};
xdg.portal = {
enable = true;
extraPortals = [
pkgs.xdg-desktop-portal-gtk
pkgs.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" ];
};
};
};
}
+21
View File
@@ -0,0 +1,21 @@
{
wayland.windowManager.hyprland.settings = {
bind = [
# "$mainMod, mouse_down, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '.float * 1.1')"
# "$mainMod, mouse_up , exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '(.float * 0.9) | if . < 1 then 1 else . end')"
"$mainMod SHIFT, mouse_up , exec, hyprctl -q keyword cursor:zoom_factor 1"
"$mainMod SHIFT, mouse_down , exec, hyprctl -q keyword cursor:zoom_factor 1"
"$mainMod SHIFT, minus , exec, hyprctl -q keyword cursor:zoom_factor 1"
"$mainMod SHIFT, KP_SUBTRACT, exec, hyprctl -q keyword cursor:zoom_factor 1"
"$mainMod SHIFT, 0 , exec, hyprctl -q keyword cursor:zoom_factor 1"
];
binde = [
"$mainMod, equal , exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '.float * 1.1')"
"$mainMod, minus , exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '(.float * 0.9) | if . < 1 then 1 else . end')"
"$mainMod, KP_ADD , exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '.float * 1.1')"
"$mainMod, KP_SUBTRACT, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '(.float * 0.9) | if . < 1 then 1 else . end')"
];
};
}
+12 -20
View File
@@ -1,21 +1,13 @@
{ config, pkgs, ... }:
let
colors = config.lib.stylix.colors;
in {
home.packages = [ pkgs.mako ];
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
{ config, lib, ... }: let
colors = config.lib.stylix.colors.withHashtag;
accent = colors.${config.stylix.accent};
in {
services.mako = {
enable = true;
[urgency=high]
border-color=#${colors.base09}
[urgency=low]
border-color=#${colors.base04}
'';
}
settings = {
border-color = lib.mkForce accent;
default-timeout = 5000;
};
};
}
+1 -1
View File
@@ -1,6 +1,6 @@
{ config, pkgs, ... }: let
icon = pkgs.fetchurl {
url = "https://cloud.codrs.ru/pub/nixos-chan.webp?raw";
url = "https://cloud.lair.moe/pub/nixos-chan.webp?raw";
name = "nixos-chan.webp";
sha256 = "sha256-0majB9ljjMdZwvOijEgWdFKxWLje5tHgXHBJUWZfHfY=";
};
+3 -3
View File
@@ -1,7 +1,7 @@
{ pkgs-fixed, lib, host, ... }:
{ pkgs-pinned, lib, osConfig, ... }:
lib.mkIf (!host.laptop) {
home.packages = with pkgs-fixed; [
lib.mkIf (!osConfig.host.laptop) {
home.packages = with pkgs-pinned; [
(blender.override { cudaSupport = true; })
aseprite
krita
-6
View File
@@ -1,6 +0,0 @@
{ pkgs, ... }: {
home.packages = with pkgs; [
jetbrains.idea-community
android-studio
];
}
+6 -2
View File
@@ -1,10 +1,14 @@
{ pkgs, inputs, pkgs-fixed, ... }: {
{ pkgs, pkgs-stable, ... }: {
home.packages = with pkgs; [
ayugram-desktop
vesktop
obs-studio
mpv
imhex
obsidian
pkgs-fixed.thunderbird
pkgs-stable.qbittorrent
thunderbird
libreoffice
pear-desktop
];
}
+3 -3
View File
@@ -1,4 +1,4 @@
{ stdenv, lib, config, colors, ... }:
{ stdenv, colors, accent ? colors.base0B, ... }:
stdenv.mkDerivation {
name = "AGS theme";
@@ -9,9 +9,9 @@
echo \$bg: \#${colors.base00}\; > colors.scss
echo \$surface0: \#${colors.base02}\; >> colors.scss
echo \$fg: \#${colors.base05}\; >> colors.scss
echo \$accent: \#${colors.base0B}\; >> colors.scss
echo \$accent: \#${accent}\; >> colors.scss
echo \#${colors.base0B} > accent.css
echo \#${accent} > accent.css
'';
installPhase = ''
+11 -1
View File
@@ -1,4 +1,14 @@
{
{ 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 = {
enable = true;
platformTheme.name = "qtct";
+182
View File
@@ -0,0 +1,182 @@
{ 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
}
}
}
}
}
'';
};
};
}
+12
View File
@@ -0,0 +1,12 @@
{
programs.ssh = {
enable = true;
enableDefaultConfig = false;
settings = {
"*" = {
serverAliveInterval = 30;
serverAliveCountMax = 5;
};
};
};
}
+40
View File
@@ -0,0 +1,40 @@
{ 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.
'';
};
}
+14
View File
@@ -0,0 +1,14 @@
{
services = {
walker = {
enable = true;
systemd.enable = true;
};
elephant.enable = true;
};
wayland.windowManager.hyprland.settings.bind = [
"$mainMod, D, exec, walker"
];
}
+68
View File
@@ -0,0 +1,68 @@
{ 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}
'';
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 = {
bindel = [
", XF86AudioRaiseVolume, exec, ${lib.getExe volumeStep}"
", XF86AudioLowerVolume, exec, ${lib.getExe volumeStep}"
", XF86MonBrightnessUp, exec, ${lib.getExe brightnessStep}"
", XF86MonBrightnessDown, exec, ${lib.getExe brightnessStep}"
];
bind = [
", XF86AudioMute, exec, ${lib.getExe volumeStep} mute"
];
};
}
-7
View File
@@ -1,7 +0,0 @@
{ pkgs, ... }: {
xdg.configFile."wofi/style.css".source = pkgs.fetchurl {
name = "style.css";
url = "https://github.com/joao-vitor-sr/wofi-themes-collection/raw/main/themes/nord.css";
sha256 = "sha256-rMDtE7Q0hmqd9LD+Ur/QR6cMan9ev6e9IyzpwY367c0=";
};
}
+311 -80
View File
@@ -1,88 +1,319 @@
{ pkgs, lib, inputs, ... }: {
home.packages = with pkgs; [
( ouch.override { enableUnfree = true; } )
];
{ pkgs, lib, inputs, ... }: let
hostSystem = pkgs.stdenv.hostPlatform.system;
programs.yazi = {
package = inputs.yazi.packages
.${pkgs.stdenv.hostPlatform.system}.default
.override { _7zz = pkgs._7zz-rar; };
enable = true;
enableZshIntegration = true;
shellWrapperName = "y";
yaziPkg = inputs.yazi.packages.${hostSystem}.default.override {
_7zz = pkgs._7zz-rar;
};
settings = {
mgr = {
show_hidden = true;
};
preview = {
max_width = 1000;
max_height = 1000;
};
plugin = {
preloaders = [
{ name = "*.crdownload"; run = "noop"; }
];
yaziOpen = pkgs.writeShellScriptBin "yazi-open" ''
set -efu
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"; }
];
target="''${1:-$HOME}"
prepend_fetchers = [
{ id = "git"; mime = "*"; run = "git"; }
];
};
};
case "$target" in
file://*)
target="$(${lib.getExe pkgs.python3} -c 'import sys, urllib.parse; print(urllib.parse.unquote(urllib.parse.urlparse(sys.argv[1]).path))' "$target")"
;;
esac
plugins = with pkgs.yaziPlugins; {
inherit
chmod
ouch
full-border
starship
mount
git
toggle-pane
;
};
if [ -f "$target" ]; then
target="$(dirname "$target")"
fi
initLua = ''
require("git"):setup()
require("full-border"):setup()
require("starship"):setup()
'';
if [ ! -e "$target" ]; then
target="$HOME"
fi
keymap = {
mgr.prepend_keymap = [
{
on = "T";
run = "plugin toggle-pane max-preview";
desc = "Maximize or restore the preview pane";
}
{
on = ["c" "m"];
run = "plugin chmod";
desc = "Chmod on selected files";
}
{
on = ["M"];
run = "plugin mount";
desc = "Open mount menu";
}
{
on = [ "<C-n>" ];
run = ''shell '${lib.getExe pkgs.xdragon} -x -i -T "$@"' --confirm'';
}
{
on = [ "g" "<S-d>" ];
run = ''cd /mnt/D'';
desc = "Goto D drive";
}
];
};
};
exec ${lib.getExe pkgs.ghostty} --title="Yazi" -e ${lib.getExe yaziPkg} "$target"
'';
yaziFileChooser = pkgs.writeShellScriptBin "yazi-file-chooser" ''
set -efu
directory="''${2:-0}"
save="''${3:-0}"
path="''${4:-}"
out="''${5:?missing termfilechooser output path}"
state_dir="''${XDG_STATE_HOME:-$HOME/.local/state}/xdg-desktop-portal-termfilechooser"
last_selected_path="$state_dir/last-selected"
${lib.getExe' pkgs.coreutils "mkdir"} -p "$state_dir"
if [ -s "$last_selected_path" ]; then
IFS= read -r last_selected < "$last_selected_path" || true
if [ -d "$last_selected" ]; then
if [ "$save" = "1" ] && [ -n "$path" ]; then
path="$last_selected/''${path##*/}"
else
path="$last_selected"
fi
fi
fi
if [ -z "$path" ]; then
path="$HOME"
fi
created_placeholder=0
if [ "$save" = "1" ] && [ ! -e "$path" ]; then
placeholder_dir="''${path%/*}"
if [ "$placeholder_dir" != "$path" ]; then
${lib.getExe' pkgs.coreutils "mkdir"} -p "$placeholder_dir"
fi
{
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.windowrule = [
"match:class dragon-drop, move cursor_x-window_w/2 cursor_y-window_h/2"
"match:title Yazi File Picker, float 1"
"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
;
full-border = {
package = yaziPlugin "full-border";
setup = true;
};
starship = {
package = starship;
setup = true;
};
git = {
package = 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"];
run = "plugin mount";
desc = "Open mount menu";
}
{
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";
}
];
};
};
}
+20 -20
View File
@@ -1,5 +1,6 @@
{ config, pkgs, ... }: {
{ config, osConfig, pkgs, lib, ... }: {
home.packages = [ pkgs.nh ];
programs = {
zoxide.enable = true;
fzf.enable = true;
@@ -36,7 +37,10 @@
read_only = " RO";
};
nix_shell.format = "[nix-shell]($style) ";
os.disabled = false;
os = {
disabled = false;
style = "white";
};
python = {
symbol = "py ";
python_binary = ["python3" "python"];
@@ -51,31 +55,23 @@
autosuggestion.enable = true;
syntaxHighlighting.enable = true;
shellAliases =
let
flakeDir = "~/nix";
in {
shellAliases = let
flakeDir = "~/nix";
in {
rb = "nh os switch ${flakeDir}";
trb = "nh os test ${flakeDir}";
upd = "nix flake update --flake ${flakeDir}";
upg = "sudo nixos-rebuild switch --upgrade --flake ${flakeDir}";
hms = "nh home switch ${flakeDir}";
rhms = ''${pkgs.bash} $(home-manager generations | fzf | awk -F '-> ' '{print $2 "/activate"}')''; #https://github.com/nix-community/home-manager/issues/1114#issuecomment-2067785129
conf = "$EDITOR ${flakeDir}/nixos/hosts/$(hostname)/configuration.nix";
pkgs = "$EDITOR ${flakeDir}/nixos/packages.nix";
ll = "ls -l";
se = "sudoedit";
ff = "fastfetch";
cat = "${pkgs.lib.getExe pkgs.bat}";
cd = "z";
lg = "lazygit";
s = "nix-shell . --run zsh";
} // lib.optionalAttrs osConfig.boot.loader.grub.useOSProber {
win = "sudo grub-reboot 2; sudo reboot";
};
initContent = ''
initContent = /*bash*/ ''
eval "$(zoxide init zsh)"
eval "$(nh completions zsh)"
source "$(fzf-share)/key-bindings.zsh"
source "$(fzf-share)/completion.zsh"
'';
@@ -84,8 +80,12 @@
TERM=xterm-256color
'';
history.size = 10000;
history.path = "${config.xdg.dataHome}/zsh/history";
history = {
size = 10000;
path = "${config.xdg.dataHome}/zsh/history";
expireDuplicatesFirst = true;
ignoreDups = true;
};
oh-my-zsh.enable = true;
};
+4
View File
@@ -0,0 +1,4 @@
My gf
- **Theme:** eris
- **Cursor:** [Miku](https://ko-fi.com/s/dcea0e990f)
+9 -4
View File
@@ -1,18 +1,23 @@
{ pkgs, pkgs-fixed, host, ... }: {
{ pkgs, pkgs-pinned, host, ... }: {
imports = [
../../modules/user/packages/cs_utils.nix
];
disabledModules = [
../../modules/user/packages/art.nix
../../modules/user/packages/coding.nix
];
home.packages = with pkgs; [
nautilus
vscode
python3
pkgs-fixed.jetbrains.pycharm-community
pkgs-pinned.jetbrains.pycharm-oss
aseprite
krita
google-chrome
];
xdg.mimeApps = {
enable = true;
defaultApplications."application/pdf" = "google-chrome.desktop";
};
}
+4 -2
View File
@@ -1,7 +1,9 @@
{
programs.git = {
enable = true;
userName = "chest";
userEmail = "e.a.sunduk@gmail.com";
settings.user = {
name = "chest";
email = "e.a.sunduk@gmail.com";
};
};
}
+2 -15
View File
@@ -1,26 +1,14 @@
{ pkgs, lib, config, inputs, ... }: {
imports = [(
import ../../../modules/user/patterns/hyprland.nix {
inherit lib;
inherit pkgs;
inherit config;
inherit inputs;
collection = "cheeeest/1767552";
swww_flags = "";
}
)];
wayland.windowManager.hyprland = let
colors = config.lib.stylix.colors;
accent = colors.${config.stylix.accent};
in {
settings = {
monitor = ",preferred,auto,1";
exec-once =["${lib.getExe pkgs.linux-wallpaperengine} ~/.local/share/wpe/wallpaper --assets-dir ~/.local/share/wpe/assets --screen-root DP-3 --noautomute"];
general = {
gaps_in = 5;
gaps_out = 5;
border_size = 2;
"col.active_border" = "rgba(${colors.base0C}ee) rgba(${colors.base0B}ee) 45deg";
"col.active_border" = "rgba(${accent}ee) rgba(${colors.base0C}ee) 45deg";
"col.inactive_border" = "rgba(${colors.base05}aa)";
layout = "dwindle";
@@ -60,7 +48,6 @@
};
dwindle = {
pseudotile = true;
smart_split = true;
};
+87 -9
View File
@@ -1,6 +1,87 @@
{ pkgs, config, lib, host, ... }: {
{ pkgs, config, lib, ... }: let
miku-cursor = pkgs.stdenv.mkDerivation {
name = "Miku cursor";
# Hatsune Miku Cursor
# Author: NOiiRE ❖
# https://ko-fi.com/s/dcea0e990f
src = pkgs.fetchzip {
name = "MikuCursor.zip";
url = "https://ko-fi.com/api/file-upload/cf0bb0a7-feb8-4090-8e2e-68fd33b7b040/download?transactionId=684d8995-2014-4f9f-bb77-39e4dae3bad7";
curlOpts = "-A HTTPie/3.2.4";
extension = "zip";
hash = "sha256-aWnq1SckuRBVmX1T+htbideBbYUGvAqDyRB1v3cbpyA=";
};
nativeBuildInputs = [ pkgs.win2xcur ];
patchPhase = ''
pwd
echo $src
mkdir Miku/cursors -p
win2xcur $src/*.ani -o Miku/cursors
cd Miku/
echo "[Icon theme]" > index.theme
echo "Name=Miku Cursor" >> index.theme
cd cursors/
mv 'Miku normal' default
ln -s default left_ptr
ln -s default arrow
mv 'Miku link' pointer
ln -s pointer hand2
mv 'Miku busy' wait
ln -s wait progress
mv 'Miku help' help
ln -s help question_arrow
mv 'Miku text' text
ln -s text xterm
mv 'Miku hand' pencil
mv 'Miku precision' cross
ln -s cross crosshair
ln -s cross tcross
mv 'Miku unavailable' not-allowed
# mv 'Miku location' ?
# mv 'Miku person' ?
mv 'Miku vert' ns-resize
ln -s ns-resize n-resize
ln -s ns-resize s-resize
ln -s ns-resize v_double_arrow
ln -s ns-resize sb_v_double_arrow
mv 'Miku horz' ew-resize
ln -s ew-resize e-resize
ln -s ew-resize w-resize
ln -s ew-resize h_double_arrow
ln -s ew-resize sb_h_double_arrow
ln -s ew-resize left_side
ln -s ew-resize right_side
mv 'Miku dgn1' nw-resize
ln -s nw-resize top_left_corner
ln -s nw-resize bottom_right_corner
mv 'Miku dgn2' ne-resize
ln -s ne-resize top_right_corner
ln -s ne-resize bottom_left_corner
mv 'Miku move' move
ln -s move nesw-resize
ln -s move grab
ln -s move grabbing
ln -s move fleur
# mv 'Miku alt' ?
cd ../..
'';
installPhase = ''
mkdir $out/share/icons -p
cp Miku $out/share/icons -r
'';
};
in {
stylix = {
enable = true;
overlays.enable = false;
targets = {
hyprland.enable = false;
waybar.enable = false;
@@ -8,6 +89,7 @@
};
base16Scheme = "${pkgs.base16-schemes}/share/themes/eris.yaml";
accent = "base0E";
polarity = "dark";
image = pkgs.fetchurl {
@@ -15,20 +97,16 @@
sha256 = "0ypqnq7bsr2giq7nq1c3xrw2m0gkii9j5zhfp512r93wc96zvm50";
};
iconTheme = {
icons = {
enable = true;
package = pkgs.pop-icon-theme;
dark = "Pop-Dark";
};
cursor = if host.name == "Impreza" then {
name = "catppuccin-mocha-pink-cursors";
cursor = {
name = "Miku";
size = 16;
package = pkgs.catppuccin-cursors.mochaPink;
} else {
name = "catppuccin-mocha-peach-cursors";
size = 16;
package = pkgs.catppuccin-cursors.mochaPeach;
package = miku-cursor;
};
fonts = {
+321
View File
@@ -0,0 +1,321 @@
{ osConfig, config, pkgs, lib, ... }: {
home.packages = with pkgs; [
font-awesome
nerd-fonts.symbols-only
playerctl
cava
pulsemixer
];
programs.waybar = {
enable = true;
systemd.enable = true;
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;
};
}
+18 -14
View File
@@ -1,19 +1,28 @@
{ config, pkgs, pkgs-unstable, pkgs-fixed, lib, inputs, laptop, name, fullname ? name, ... }: {
{ config
, pkgs
, pkgs-stable
, pkgs-pinned
, lib
, inputs
, name
, fullname ? name
}: {
imports = [
inputs.home-manager.nixosModules.home-manager {
home-manager = {
useGlobalPkgs = false;
useGlobalPkgs = true;
useUserPackages = true;
backupFileExtension = "rebuild";
overwriteBackup = true;
users.${name} = {
imports = [
inputs.sops-nix.homeManagerModules.sops
inputs.stylix.homeManagerModules.stylix
inputs.stylix.homeModules.stylix
../modules/user.nix
./${name}/modules/git.nix
./${name}/modules/hyprland.nix
./${name}/modules/style.nix
./${name}/modules/waybar.nix
./${name}/home.nix
];
@@ -22,18 +31,13 @@
homeDirectory = "/home/${name}";
stateVersion = "23.11";
};
_module.args.pkgs = lib.mkForce pkgs-unstable;
};
extraSpecialArgs = {
inherit inputs;
pkgs-stable = pkgs;
inherit pkgs-fixed;
host = {
laptop = laptop;
name = config.networking.hostName;
};
inherit pkgs-stable;
inherit pkgs-pinned;
username = name;
};
};
}
@@ -52,8 +56,8 @@
};
services.greetd = let
tuigreet = lib.getExe pkgs.greetd.tuigreet;
session = lib.getExe inputs.hyprland.packages.${pkgs.system}.default;
tuigreet = lib.getExe pkgs.tuigreet;
session = lib.getExe' inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.default "start-hyprland";
in {
enable = true;
settings = {
+4
View File
@@ -0,0 +1,4 @@
My config
- **Theme:** [Catppuccin](https://catppuccin.com) Mocha
- **Cursor:** [\[Date A Live\] Kurumi Tokisaki](https://ko-fi.com/s/66a6c36df1)
+11 -2
View File
@@ -4,7 +4,16 @@
];
programs.hyprlock.enable = true;
home.packages = with pkgs; [
libreoffice
vivaldi
android-studio
(vivaldi.override {
proprietaryCodecs = true;
enableWidevine = true;
})
weechat
];
xdg.mimeApps = {
enable = true;
defaultApplications."application/pdf" = "vivaldi-stable.desktop";
};
}
+4 -2
View File
@@ -1,7 +1,9 @@
{
programs.git = {
enable = true;
userName = "Sweetbread";
userEmail = "risdeveau@codrs.ru";
settings.user = {
name = "Sweetbread";
email = "risdeveau@lair.moe";
};
};
}
+136 -29
View File
@@ -1,32 +1,136 @@
{ pkgs, lib, config, inputs, ... }: {
imports = [(
import ../../../modules/user/patterns/hyprland.nix {
inherit lib;
inherit pkgs;
inherit config;
inherit inputs;
collection = "sweetbread/1764377";
swww_flags = "--transition-type center";
}
)];
{ pkgs, lib, config, osConfig, inputs, ... }: {
wayland.windowManager.hyprland = let
colors = config.lib.stylix.colors;
accent = colors.${config.stylix.accent};
wallpaper_changer = pkgs.writers.writePython3Bin "wallpaper_changer" {
libraries = [ pkgs.python3Packages.requests ];
flakeIgnore = [ "E111" "E121" "E241" "E501" "E701" "E731" ];
} /*py*/ ''
import requests as requests
from random import choice
from os import listdir, makedirs, remove, replace, system
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()
folder = "${config.home.homeDirectory}/Wallpapers"
url = "https://wallhaven.cc/api/v1/collections/sweetbread/${
if osConfig.networking.hostName == "Rias" then "1764377"
else "2108577"
}"
with open("${config.sops.secrets."tokens/apis/wallhaven".path}") as f:
token = f.read()
filename = None
notify("Updating wallpaper...", 0)
try:
response = requests.get(url, params={'apikey': token})
response.raise_for_status()
json = response.json()
wallpaper = choice(json['data'])
link = wallpaper['path']
format = wallpaper['file_type']
id = wallpaper['id']
if format == "image/jpeg": ext = "jpg"
else: ext = "png"
filename = f"{id}.{ext}"
destination = f"{folder}/{filename}"
if not exists(destination):
makedirs(folder, exist_ok=True)
notify("Downloading... 0%", 0, 0)
download_with_progress(link, destination)
notify("Downloaded", 100)
else:
notify("Using cached wallpaper", 100)
except requests.exceptions.RequestException:
notify("Offline mode")
try:
filename = choice(listdir(folder))
except (FileNotFoundError, IndexError):
notify("Offline mode and wallpaper cache is empty")
finally:
if filename is not None:
notify("Applying wallpaper", 100)
system(f"awww img {folder}/{filename} --transition-type center")
'';
in {
settings = {
monitor = [
"DP-3, 3440x1440@165.00Hz, auto-right, 1"
# "HDMI-A-1, 3840x2160@60.00Hz, auto-left, 2"
"HDMI-A-1, disabled"
",preferred,auto,1"
];
general = {
gaps_in = 5;
gaps_in = 2;
gaps_out = 10;
border_size = 3;
"col.active_border" = lib.mkForce "rgba(${colors.base0C}ee) rgba(${colors.base0B}ee) 45deg";
"col.inactive_border" = lib.mkForce "rgba(${colors.base05}aa)";
"col.active_border" = lib.mkForce "rgba(${colors.base0C}aa) rgba(${accent}aa) 45deg";
layout = "dwindle";
};
@@ -41,11 +145,7 @@
new_optimizations = true;
};
shadow = {
enabled = true;
range = 4;
render_power = 3;
};
shadow.enabled = false;
};
animations = {
@@ -64,7 +164,6 @@
};
dwindle = {
pseudotile = true;
smart_split = true;
};
@@ -76,12 +175,20 @@
enable_swallow = true;
};
exec-once = [
"${lib.getExe wallpaper_changer}"
];
workspace = [
"2, layout:scrolling"
];
bind = [
" , Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m active -m output"
"CTRL, Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m region"
"ALT , Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m active -m window"
'', XF86Calculator, exec, ghostty --title=pulsemixer -e pulsemixer''
"$mainMod, W, exec, ${lib.getExe wallpaper_changer}"
];
};
};
+27 -4
View File
@@ -79,10 +79,25 @@
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 {
# {
stylix = {
enable = true;
overlays.enable = false;
targets = {
hyprpaper.enable = lib.mkForce false;
waybar.enable = false;
@@ -90,6 +105,7 @@ in {
};
base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
accent = "base0B";
polarity = "dark";
image = pkgs.fetchurl {
@@ -97,7 +113,7 @@ in {
sha256 = "sha256-u4d21a0Kh5OHEzQMSQ7+ey/Va2ftS1DefrOQFahaeC4=";
};
iconTheme = {
icons = {
enable = true;
package = pkgs.pop-icon-theme;
dark = "Pop-Dark";
@@ -120,6 +136,11 @@ in {
package = (pkgs.google-fonts.override { fonts = [ "Gabriela" ]; });
};
sansSerif = {
name = "Pixeloid Sans";
package = pixeloid;
};
emoji = {
package = pkgs.noto-fonts-monochrome-emoji;
name = "Noto Emoji";
@@ -142,8 +163,10 @@ in {
};
gtk = {
gtk4.extraConfig = {
gtk-application-prefer-dark-theme = true;
gtk4 = {
extraConfig = {
gtk-application-prefer-dark-theme = true;
};
};
gtk3.extraConfig = {
gtk-application-prefer-dark-theme = true;
+349
View File
@@ -0,0 +1,349 @@
{ osConfig, config, pkgs, lib, ... }: {
home.packages = with pkgs; [
playerctl
cava
pulsemixer
libnotify
monocraft
font-awesome
nerd-fonts.symbols-only
];
programs.waybar = let
multibat = osConfig.networking.hostName == "Inaho";
in {
enable = true;
systemd.enable = true;
settings.mainBar = {
spacing = 8;
modules-left = [
"hyprland/workspaces"
"hyprland/language"
"keyboard-state"
"cava"
];
modules-center = [
"mpris"
];
modules-right = [
"tray"
"group/system"
"pulseaudio"
( if multibat then "group/bat" else "battery" )
"clock"
];
cava = {
bars = 14;
sleep_timer = 5;
hide_on_silence = true;
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,
#language,
#mpris,
#pulseaudio,
#network,
#battery,
#cpu,
#temperature,
#keyboard-state label.locked,
#custom-mem,
#clock {
background: ${colors.base00};
border-radius: ${radius};
padding: 8px;
}
#workspaces,
#tray {
background: ${colors.base00};
border-radius: ${radius};
}
#workspaces button {
color: ${colors.base05};
padding: 4px;
border-radius: ${radius};
border: 1pt solid transparent;
&:hover { background: ${colors.base01}; }
&.active {
background: ${accent};
color: ${colors.base00};
&:hover {
border-color: ${accent};
background: ${colors.base01};
color: ${accent};
}
}
}
#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};
&:hover {
color: ${colors.base08};
background: ${colors.base01};
}
}
}
#network {
&:hover { background: ${colors.base01}; }
&.disconnected {
color: ${colors.base00};
background: ${colors.base08};
}
}
#system,
#bat {
& .drawer-child > * { margin-right: 4px }
}
#keyboard-state label.locked {
background-color: ${colors.base00};
color: ${colors.base08};
}
#battery {
&.charging { color: ${accent}; }
&: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: ${accent};
}
&.plugged {
color: ${colors.base00};
background: ${colors.base0D};
}
}
@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;
};
wayland.windowManager.hyprland.settings.layerrule = [
"blur on, match:namespace waybar"
];
}