Compare commits

..
203 Commits
Author SHA1 Message Date
Chest fefcb8fb00 Pip 2026-09-30 23:15:10 +03:00
Sweetbread a5db402144 Rias: change disk FS 2026-09-21 20:08:18 +03:00
Sweetbread fc1c7a0f61 fixup! fixup! Update 2026-09-21 20:07:17 +03:00
Sweetbread eed510e68b zsh: nr alias 2026-09-18 19:00:13 +03:00
Sweetbread be9e7c0ce8 flake: add nixpkgs.follows 2026-09-17 20:45:34 +03:00
Sweetbread e53efb0472 pkgs: add insomnia 2026-09-17 18:07:25 +03:00
Sweetbread 8acfda2aa5 change key 2026-09-17 18:02:14 +03:00
Sweetbread 0e8763663b tmp 2026-09-17 18:02:14 +03:00
Sweetbread 4180bfd391 syncthing: add documents 2026-09-17 18:00:30 +03:00
Sweetbread 0c07e7be79 fixup! Update 2026-09-17 11:26:16 +03:00
Sweetbread d5832d160c helix: add wakapi 2026-09-16 19:43:04 +03:00
Sweetbread fac73d8508 hyprland: to lua 2026-09-16 19:42:53 +03:00
Sweetbread e57dad8746 Update 2026-09-16 19:42:53 +03:00
Sweetbread 238166668f pkgs: add mumble 2026-08-26 23:56:12 +03:00
Sweetbread ec8fdec87b fixup! Update 2026-08-26 23:55:58 +03:00
Sweetbread e6e6af404f wip: MTP 2026-08-19 22:09:41 +03:00
Sweetbread 7845af1fd1 hyprland: change scroll direction 2026-08-19 22:09:40 +03:00
Sweetbread 4a001529ec helix: add line moving
https://github.com/helix-editor/helix/discussions/5764#discussioncomment-9518381
2026-08-19 22:09:40 +03:00
Sweetbread 357db9432d helix: for FASM 2026-08-19 22:09:40 +03:00
Sweetbread cdc137c2d9 Update 2026-08-19 22:09:40 +03:00
Chest ce03661f12 vpn config fix 2026-08-19 22:09:40 +03:00
Sweetbread c78d0b40a2 Inaho: add games 2026-08-19 22:09:40 +03:00
Sweetbread 3c8a4219a6 pkgs: nmtui to wifitui 2026-08-19 22:09:40 +03:00
Sweetbread 4d77be992e Inaho: new host 2026-08-19 22:09:34 +03:00
Sweetbread 4c65c1b05f Update 2026-08-19 21:41:54 +03:00
Sweetbread 7e8f9439aa helix: steel 2026-08-19 21:41:54 +03:00
Sweetbread fe4052fe73 vpn: set capabilities 2026-08-19 21:41:54 +03:00
Sweetbread e216e9bc7a ygg: change peers 2026-08-19 21:41:54 +03:00
Sweetbread d4504b9705 Rias: openrgb 2026-08-19 21:41:54 +03:00
Sweetbread 8625d875db wallpaper-changer: add progress bar 2026-08-19 21:41:53 +03:00
Sweetbread 17e247fb38 mako: remove shit code 2026-08-19 21:41:53 +03:00
Sweetbread ed2f738a83 stylix: add accent color
I spent an hour just to add one f*ing option
2026-08-19 21:41:53 +03:00
Sweetbread e61bcb7d92 Update 2026-08-19 21:41:53 +03:00
Sweetbread 7b428a0b79 pkgs: move smth to stable 2026-08-19 21:41:53 +03:00
Sweetbread f8edaafdf3 ui: fuzzel to walker 2026-08-19 21:41:53 +03:00
Sweetbread e6e77aeed6 pkgs: add pear-desktop 2026-08-19 21:41:53 +03:00
Sweetbread 8b0298b67c font: change to pixel fonts 2026-08-19 21:41:52 +03:00
Sweetbread f084bdf9b4 pkgs: wob 2026-08-19 21:41:52 +03:00
Sweetbread de76f09730 wip: quickshell: control-panel 2026-08-19 21:41:52 +03:00
Sweetbread 124f3a7cf3 yazi: filechooser 2026-08-19 21:41:52 +03:00
Sweetbread ea289034ca yazi: open from other apps 2026-08-19 21:41:52 +03:00
Sweetbread deba85fd30 Update 2026-08-19 21:41:52 +03:00
Sweetbread 21471838e6 vpn: change client 2026-08-19 21:41:52 +03:00
Sweetbread 8ceca8ee8f ghostty: add cursor shader 2026-08-19 21:41:51 +03:00
Sweetbread dac276d6ed Rias: change mount type 2026-08-19 21:41:51 +03:00
Sweetbread a5e1267370 Update 2026-08-19 21:41:51 +03:00
Sweetbread c79cee4206 ygg: change node 2026-08-19 21:41:51 +03:00
Sweetbread b468c42a9e Impreza: add wallpaper 2026-08-19 21:41:51 +03:00
Sweetbread 61259a2320 nvidia: fix backlight 2026-08-19 21:41:51 +03:00
Chest 41f53f802c waybar for mee<3 2026-08-19 21:41:51 +03:00
Chest 55e4406dc5 vpn for gpt 2026-08-19 21:41:50 +03:00
Sweetbread 32f5cac84d vpn: change engine 2026-08-19 21:41:50 +03:00
Sweetbread a2fc3275af Update system 2026-08-19 21:41:50 +03:00
Sweetbread e51ba243dc wip: cava 2026-08-19 21:41:50 +03:00
Sweetbread aada228357 starship: fix os icon 2026-08-19 21:41:50 +03:00
Sweetbread 60734ee516 hyprland: add zoom 2026-08-19 21:41:50 +03:00
Sweetbread fe204a4d5a tty: fix Cyrillic 2026-08-19 21:41:50 +03:00
Sweetbread ed37f81cfd ssh: keepalive 2026-08-19 21:41:49 +03:00
Sweetbread fdeeb87f13 Replace AGS with waybar 2026-08-19 21:41:49 +03:00
Sweetbread 50a9f73fea Update system 2026-08-19 21:41:49 +03:00
Sweetbread b064e912aa Style hyprland 2026-08-19 21:41:49 +03:00
Sweetbread 10084a5e8e Make VPN list via flake
Wow, I didn't know I can do this...
2026-08-19 21:41:49 +03:00
Sweetbread 9a7b7f0b50 Update system 2026-08-19 21:41:49 +03:00
Chest 7f59ba969e vpn 2026-08-19 21:41:49 +03:00
Chest 0c97dde79f meow 2026-08-19 21:41:48 +03:00
Sweetbread f973b8e5ad Fix FileChooser in Hyprland 2026-08-19 21:41:48 +03:00
Sweetbread b4848028eb Update VPN 2026-08-19 21:41:48 +03:00
Sweetbread 1441647527 Repath mounts 2026-08-19 21:41:48 +03:00
Sweetbread e8350c58cc Update system 2026-08-19 21:41:48 +03:00
Sweetbread 998af9fc41 Change domain 2026-08-19 21:41:48 +03:00
Sweetbread 1ca630a80c yazi: add some stuff 2026-08-19 21:41:48 +03:00
Sweetbread 7ceabba4ab Replace wofi with fuzzel 2026-08-19 21:41:48 +03:00
Sweetbread d56f003982 Sort imports 2026-08-19 21:41:47 +03:00
Sweetbread 6c062088fa Change README 2026-08-19 21:41:47 +03:00
Sweetbread d8eaa5916b helix: change cursor shape and add a ruler 2026-08-19 21:41:47 +03:00
Sweetbread 6da0db4ffd ags: add another accent for chest 2026-08-19 21:41:47 +03:00
Sweetbread 4454eadfaf system: update channels 2026-08-19 21:41:47 +03:00
Sweetbread ada545525a ref: remove host.laptop from user modules 2026-08-19 21:41:47 +03:00
Sweetbread f31dc89efb sops: fix link 2026-08-19 21:41:47 +03:00
Sweetbread 8b8d7fc413 flake: add custom cache 2026-08-19 21:41:46 +03:00
Sweetbread 5f5931a47f hypr: change border color 2026-08-19 21:41:46 +03:00
Chest d9e8f3e4f1 pkgs: add ZZZ 2026-08-19 21:41:46 +03:00
Chest 3f359a91ec Eclipse: add VirtualBox 2026-08-19 21:41:46 +03:00
Sweetbread db46ffd3ec zsh: add more aliases 2026-08-19 21:41:46 +03:00
Sweetbread e560d34515 boot: left os prober only for Impreza 2026-08-19 21:41:46 +03:00
Sweetbread 13af1b5b4e flake: remove devshell 2026-08-19 21:41:46 +03:00
Sweetbread 21df106ace flake: remove host definition dublication 2026-08-19 21:41:45 +03:00
Sweetbread 8f93c5ef2a zsh: config history 2026-08-19 21:41:45 +03:00
Sweetbread 005edb2730 zsh: optimise aliases 2026-08-19 21:41:45 +03:00
Sweetbread d1056472e4 hyprland: separate settings for user and host 2026-08-19 21:41:45 +03:00
Sweetbread db70613838 Update system 2026-08-19 21:41:45 +03:00
Sweetbread d88a2a4871 pkgs: return office to everyone 2026-08-19 21:41:45 +03:00
Sweetbread d2560fa2a7 pdf 2026-08-19 21:41:45 +03:00
Sweetbread 69585ab64a system: update 2026-08-19 21:41:44 +03:00
Sweetbread f106eb0609 pkgs: add torrent client 2026-08-19 21:41:44 +03:00
Sweetbread c9ffbd5964 Add Miku cursor 2026-08-19 21:41:44 +03:00
Sweetbread 7b28ee6b9c Add Kurumi cursor 2026-08-19 21:41:44 +03:00
Sweetbread a30c4f8b68 nvidia: set envvar 2026-08-19 21:41:44 +03:00
Sweetbread 623f7b6425 style: set dark mode 2026-08-19 21:41:44 +03:00
Sweetbread ce84c7ab53 pkgs: add opentabletdriver 2026-08-19 21:41:44 +03:00
Sweetbread 82da0a8bda system: update 2026-08-19 21:41:44 +03:00
Sweetbread 17a5125775 hypr: add focus 2026-08-19 21:41:43 +03:00
Sweetbread 5b2a0997bd tex: add packages 2026-08-19 21:41:43 +03:00
Sweetbread 6ab8cb5724 pkgs: add vivaldi 2026-08-19 21:41:43 +03:00
Sweetbread 3d94a2952c fix: set imv as a image viewer 2026-08-19 21:41:43 +03:00
Sweetbread dfb1e890e5 yazi: set up plugins 2026-08-19 21:41:43 +03:00
Sweetbread a6495ca832 system: update 2026-08-19 21:41:43 +03:00
Sweetbread d976f13a10 feat: scanning 2026-08-19 21:41:43 +03:00
Sweetbread e6f3422b4d wip: fix: clipboard 2026-08-19 21:41:42 +03:00
Sweetbread 4f284d441e pkgs: replace grimblast with hyprshot 2026-08-19 21:41:42 +03:00
Sweetbread 371565c2bd pkgs: fastfetch instead of neofetch 2026-08-19 21:41:42 +03:00
Sweetbread 635cbff519 system: update 2026-08-19 21:41:42 +03:00
Sweetbread 826fe11063 system: change mount path to partlabel 2026-08-19 21:41:42 +03:00
Chest f3aac17934 New install 2026-08-19 21:41:42 +03:00
Chest b789807b47 flake: update aagl 2026-08-19 21:41:42 +03:00
Chest 5861a9e6a0 feat: F disk 2026-08-19 21:41:41 +03:00
Sweetbread 6b106f7948 yazi: do not preload .crdownload 2026-08-19 21:41:41 +03:00
Sweetbread 48b08d23ff hyprland: add media app binds 2026-08-19 21:41:41 +03:00
Sweetbread 1fb4acea88 hyprland: add media binds 2026-08-19 21:41:41 +03:00
Sweetbread e0bcb87b2c pkgs: add texstudio 2026-08-19 21:41:41 +03:00
Sweetbread 01d3b727a1 system: update 2026-08-19 21:41:41 +03:00
Sweetbread d3c08aa4f5 chore: something... 2026-08-19 21:41:41 +03:00
Sweetbread c6e8cf9847 pkgs: remove libreoffice for chest 2026-08-19 21:41:40 +03:00
Sweetbread 36bd415a4e system: update 2026-08-19 21:41:40 +03:00
Sweetbread 6953af7176 system: change channels 2026-08-19 21:41:40 +03:00
Sweetbread a36956b016 pkgs(chest): turn off some packages 2026-08-19 21:41:40 +03:00
Sweetbread 659627a4f1 style: decrease gaps 2026-08-19 21:41:40 +03:00
Sweetbread a00b0ccb33 system: update nixpkgs-fixed 2026-08-19 21:41:40 +03:00
Sweetbread 8e3d4604c4 style: ags 2026-08-19 21:41:40 +03:00
Sweetbread bb09c5f642 system: update 2026-08-19 21:41:39 +03:00
Sweetbread dbd3b513c2 refactor: move utils to a separate file 2026-08-19 21:41:39 +03:00
Sweetbread c83c94817d pkgs: add krita and gimp 2026-08-19 21:41:39 +03:00
Sweetbread de69e7a17f fix: wallpapers 2026-08-19 21:41:39 +03:00
Chest ec4438fff9 add binwalk 2026-08-19 21:41:39 +03:00
Chest 39681985e2 aagl 2026-08-19 21:41:39 +03:00
Sweetbread 47f7494203 Remove hyprlock 2026-08-19 21:41:39 +03:00
Sweetbread 9990ed351e feat: add intel graphics config 2026-08-19 21:41:38 +03:00
Sweetbread 9033cfe614 feat: add dependencies to host in home-manager 2026-08-19 21:41:38 +03:00
Sweetbread 598bf6a35d pkgs: add pinentry 2026-08-19 21:41:38 +03:00
Sweetbread 454cd36176 fix(ags): set margins 2026-08-19 21:41:38 +03:00
Chest 1a4a7b3918 host: Impreza 2026-08-19 21:41:38 +03:00
Sweetbread 492218b1f4 fix: change nick 2026-08-19 21:41:38 +03:00
Sweetbread 378182cff3 feat: yggdrasil 2026-08-19 21:41:38 +03:00
Sweetbread 2e8f33aa56 style: cursor 2026-08-19 21:41:37 +03:00
Sweetbread b384ef60e0 style: font 2026-08-19 21:41:37 +03:00
Sweetbread 4d9729a4dd system: update 2026-08-19 21:41:37 +03:00
Sweetbread 85cd854889 feat(yazi): add d drive shortcut 2026-08-19 21:41:37 +03:00
Sweetbread 15dee2e15d feat: add my custom dns server 2026-08-19 21:41:37 +03:00
Sweetbread cf52a7e7f3 feat: add pulsemixer 2026-08-19 21:41:37 +03:00
Sweetbread b8745ac460 fix: brightness setting 2026-08-19 21:41:37 +03:00
Sweetbread f88917aaf2 feat: kitty to ghostty 2026-08-19 21:41:36 +03:00
Sweetbread 6a545149e9 pkgs: add some utils 2026-08-19 21:41:36 +03:00
Sweetbread bb8e8c079d feat(ags): add battery bar 2026-08-19 21:41:36 +03:00
Sweetbread 281f0ad2da fix(ags): wifi widget 2026-08-19 21:41:36 +03:00
Sweetbread 97e6f6bd31 feat: postgres 2026-08-19 21:41:36 +03:00
Sweetbread 01aa2b8083 system: Update 2026-08-19 21:41:36 +03:00
Sweetbread ad6e7e332f git: Change mail 2026-08-19 21:41:36 +03:00
Sweetbread 478e184312 pkgs: Add prismlauncher 2026-08-19 21:41:36 +03:00
Sweetbread b2f10ff9ea system: Update 2026-08-19 21:41:35 +03:00
Chest 32c6b50dbe Add pkgs 2026-08-19 21:41:35 +03:00
Sweetbread 02dd50200f system: Update 2026-08-19 21:41:35 +03:00
Sweetbread fe7d4c1851 perf: Home-manager to module
feat: Optionise config
2026-08-19 21:41:35 +03:00
Sweetbread 1111288a47 fix(helix): No end newline 2026-08-19 21:41:35 +03:00
Sweetbread b6fe61969d pkgs: Add trashy 2026-08-19 21:41:35 +03:00
Sweetbread 9c4bee71e2 style: Change opacity and wallpaper 2026-08-19 21:41:35 +03:00
Sweetbread dfddc572b2 system: Update 2026-08-19 21:41:34 +03:00
Sweetbread 81a737a43e pkgs: litecli 2026-08-19 21:41:34 +03:00
Sweetbread aed9a6a713 feat(zsh): lg alias 2026-08-19 21:41:34 +03:00
Sweetbread b3f072d851 style: Reduce gap 2026-08-19 21:41:34 +03:00
Sweetbread d5894374f2 wip: console
Font changes to default after reload
2026-08-19 21:41:34 +03:00
Sweetbread 7df28b1a5d ags: To derivation 2026-08-19 21:41:34 +03:00
Sweetbread 71bb0a839e pkgs: Udiskie 2026-08-19 21:41:34 +03:00
Sweetbread f29c8f07cc system: Update 2026-08-19 21:41:33 +03:00
Sweetbread 40f612bad1 pkgs: Remove extra packages 2026-08-19 21:41:33 +03:00
Sweetbread 20950f6774 style: Btop 2026-08-19 21:41:33 +03:00
Sweetbread 765fd10420 feat(devshell): Add pkgs for helix and switching to zsh 2026-08-19 21:41:33 +03:00
Sweetbread a7359b47b5 fix(starship): Remove extra space 2026-08-19 21:41:33 +03:00
Sweetbread debad3cdae pkgs: Update aagl 2026-08-19 21:41:33 +03:00
Sweetbread 6fb6f6e5b5 pkgs: git-lfs 2026-08-19 21:41:33 +03:00
Sweetbread b6bef9e3ed pkgs: To 24.11 2026-08-19 21:41:32 +03:00
Sweetbread f9ae2cb408 ags: Add keyboard layout widget 2026-08-19 21:41:32 +03:00
Sweetbread b85a81882d docs: Change screenshot 2026-08-19 21:41:32 +03:00
Sweetbread e6f27cd3f1 pkgs: Add Pycharm to chest 2026-08-19 21:41:32 +03:00
Sweetbread ff0d402a7c ags: style 2026-08-19 21:41:32 +03:00
Sweetbread 61677eed09 pkgs: Remove dev packages 2026-08-19 21:41:32 +03:00
Sweetbread b68f55c599 fix: Show GPU stats in BTop 2026-08-19 21:41:32 +03:00
Sweetbread baa89ba1d4 grub: Add theme 2026-08-19 21:41:31 +03:00
Sweetbread b889c1d876 fix: Bootloader 2026-08-19 21:41:31 +03:00
Sweetbread 9d3c053acd fix: Icons 2026-08-19 21:41:31 +03:00
Sweetbread 122ab982e6 feat: ags 2026-08-19 21:41:31 +03:00
Sweetbread d07853a8d1 pkgs: New utils 2026-08-19 21:41:31 +03:00
Sweetbread c7a3b353aa system: Update 2026-08-19 21:41:31 +03:00
Sweetbread 0804b164e1 vpn: Update 2026-08-19 21:41:31 +03:00
Sweetbread b3137f6a21 pkgs: Add rtorrent 2026-08-19 21:41:31 +03:00
Sweetbread 8dab87ee21 syncthing: New device 2026-08-19 21:41:30 +03:00
Sweetbread d94737e8de pkgs: Add aseprite 2026-08-19 21:32:56 +03:00
Sweetbread 25fbc9fee0 pkgs: Add libreoffice 2026-08-19 21:32:55 +03:00
Sweetbread f01634bc64 develop: Add Rust 2026-08-19 21:32:55 +03:00
Sweetbread 1b4638c2f9 feat: Drag and Drop in yazi 2026-08-19 21:32:55 +03:00
Sweetbread 6c543e7478 system: Update 2026-08-19 21:32:55 +03:00
Sweetbread e70c545ecb vpn: Update 2026-08-19 21:32:55 +03:00
Sweetbread eb84bf348a pkgs: Flakify AAGL 2026-08-19 21:32:55 +03:00
Sweetbread 59edb25ebe pkgs: Syncthing 2026-08-19 21:32:55 +03:00
75 changed files with 3217 additions and 960 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ creation_rules:
key_groups: key_groups:
- age: - age:
- *primary - *primary
- path_regex: host/(Rias|Senko|Eclipse)/secrets/.+$ - path_regex: host/(Rias|Senko|Inaho|Eclipse)/secrets/.+$
key_groups: key_groups:
- age: - age:
- *primary - *primary
-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 = "/";
};
};
};
};
};
};
};
}
+60
View File
@@ -0,0 +1,60 @@
{ lib
, pkgs
, mumble ? pkgs.mumble
}:
let
# PipeWire 1.4.0 removed client-rt.conf, changing how clients negotiate
# realtime scheduling. Mumble never adapted, so its PipeWire data-loop
# thread stalls mid-negotiation and its own RT watchdog SIGKILLs the
# whole process almost immediately on every launch (confirmed via
# bpftrace: signal_generate shows Mumble's own "data-loop.0" thread
# sending itself SIGKILL). Reproduced identically on both the packaged
# 1.5.915 (Qt5) and a from-source 1.6.870 RC (Qt6) build, so it's the
# shared PipeWire client integration at fault, not Mumble's UI stack.
#
# Upstream: https://github.com/mumble-voip/mumble/issues/6780
# Bisected there to PipeWire 1.2.7 (last known-good) vs 1.4.1+ (broken).
#
# Fix: give Mumble an old, compatible libpipewire-0.3.so to dlopen at
# runtime. The system's actual PipeWire daemon is untouched (still
# whatever version NixOS ships) - only the client library Mumble talks
# through is pinned back.
pipewireGoodPkgs = import (fetchTarball {
url = "https://channels.nixos.org/nixos-24.11/nixexprs.tar.xz";
sha256 = "189lwv8l10bm9fnksfkzy05pm86gmziy9z3bdn13zc8d636ylchj"; # nix-prefetch-url --unpack https://channels.nixos.org/nixos-24.11/nixexprs.tar.xz
}) { inherit (pkgs) system; };
pipewireGood = pipewireGoodPkgs.pipewire;
# Mumble's own build is Qt5-based; QT_PLUGIN_PATH isn't set by its
# wrapper for the platform/sql plugins mumble actually needs when we
# bypass that wrapper below, so it has to be supplied explicitly.
qt5PluginPath = lib.makeSearchPath "lib/qt-${pkgs.qt5.qtbase.version}/plugins" [
pkgs.qt5.qtbase.bin
pkgs.qt5.qtsvg.bin
pkgs.qt5.qtwayland.bin
];
in
pkgs.symlinkJoin {
name = "mumble-pipewire-fixed-${mumble.version}";
paths = [ mumble ];
nativeBuildInputs = [ pkgs.makeWrapper ];
# mumble's own wrapper always prepends its own (broken, too-new)
# PipeWire path in front of anything we set, so wrapping it a second
# time can't win that ordering fight. Instead we skip straight to the
# real unwrapped binary and set env ourselves.
postBuild = ''
rm -f $out/bin/mumble
makeWrapper ${mumble}/bin/.mumble-wrapped $out/bin/mumble \
--prefix LD_LIBRARY_PATH : "${pipewireGood}/lib" \
--set QT_PLUGIN_PATH "${qt5PluginPath}"
'';
meta = mumble.meta // {
description = mumble.meta.description
+ " (patched: pinned PipeWire client lib to 1.2.7 to work around SIGKILL-on-launch with PipeWire >=1.4.0, see mumble#6780)";
};
}
Generated
+280 -274
View File
@@ -3,15 +3,17 @@
"aagl": { "aagl": {
"inputs": { "inputs": {
"flake-compat": "flake-compat", "flake-compat": "flake-compat",
"nixpkgs": "nixpkgs", "nixpkgs": [
"nixpkgs"
],
"rust-overlay": "rust-overlay" "rust-overlay": "rust-overlay"
}, },
"locked": { "locked": {
"lastModified": 1762958586, "lastModified": 1789138122,
"narHash": "sha256-1MryKS54NVQld+xDvCN0OBmAC8Jk+HmplqWbuerrhlk=", "narHash": "sha256-mh+ZiGCtHAo0xIi1yaNjHsftfnlWz9JiYwHCyT16yIE=",
"owner": "ezKEa", "owner": "ezKEa",
"repo": "aagl-gtk-on-nix", "repo": "aagl-gtk-on-nix",
"rev": "0d212e20bebe63b49b588323d37c0cc46bd7000f", "rev": "d82d6d6f66caf4b63fb154e62fad83c627874127",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -23,7 +25,9 @@
"ags": { "ags": {
"inputs": { "inputs": {
"astal": "astal", "astal": "astal",
"nixpkgs": "nixpkgs_3" "nixpkgs": [
"nixpkgs"
]
}, },
"locked": { "locked": {
"lastModified": 1744557573, "lastModified": 1744557573,
@@ -60,11 +64,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1762356719, "lastModified": 1784368054,
"narHash": "sha256-qwd/xdoOya1m8FENle+4hWnydCtlXUWLAW/Auk6WL7s=", "narHash": "sha256-zF1iJkBQSDWmRO4/LEeHR1SpKY0lqZaxkoQJpPS9K9U=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "aquamarine", "repo": "aquamarine",
"rev": "6d0b3567584691bf9d8fedb5d0093309e2f979c7", "rev": "9b5f14d9483445e766294eb8fbe0b8f370269ed0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -115,28 +119,28 @@
"base16-fish": { "base16-fish": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1754405784, "lastModified": 1765809053,
"narHash": "sha256-l9xHIy+85FN+bEo6yquq2IjD1rSg9fjfjpyGP1W8YXo=", "narHash": "sha256-XCUQLoLfBJ8saWms2HCIj4NEN+xNsWBlU1NrEPcQG4s=",
"owner": "tomyun", "owner": "tomyun",
"repo": "base16-fish", "repo": "base16-fish",
"rev": "23ae20a0093dca0d7b39d76ba2401af0ccf9c561", "rev": "86cbea4dca62e08fb7fd83a70e96472f92574782",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "tomyun", "owner": "tomyun",
"repo": "base16-fish", "repo": "base16-fish",
"rev": "23ae20a0093dca0d7b39d76ba2401af0ccf9c561", "rev": "86cbea4dca62e08fb7fd83a70e96472f92574782",
"type": "github" "type": "github"
} }
}, },
"base16-helix": { "base16-helix": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1752979451, "lastModified": 1776754714,
"narHash": "sha256-0CQM+FkYy0fOO/sMGhOoNL80ftsAzYCg9VhIrodqusM=", "narHash": "sha256-E3OAK27smtATTmX45uoTSRsVD+Y+ZiVVfgM/tjpbtYg=",
"owner": "tinted-theming", "owner": "tinted-theming",
"repo": "base16-helix", "repo": "base16-helix",
"rev": "27cf1e66e50abc622fb76a3019012dc07c678fac", "rev": "4d508123037e7851ad36ebf7d9c48b0e9e1eb581",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -162,14 +166,34 @@
"type": "github" "type": "github"
} }
}, },
"disko": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1781152676,
"narHash": "sha256-RxWs5ND31KzTG7wvMM+PMfUjyNpmIEr999lqNARaM5o=",
"owner": "nix-community",
"repo": "disko",
"rev": "ff8702b4de27f72b4c78573dfb89ec74e36abdf1",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "disko",
"type": "github"
}
},
"firefox-gnome-theme": { "firefox-gnome-theme": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1758112371, "lastModified": 1783570805,
"narHash": "sha256-lizRM2pj6PHrR25yimjyFn04OS4wcdbc38DCdBVa2rk=", "narHash": "sha256-ptl5aRlCv9/uRSv2u8Hq8UFVFeZ6Q/bT049bpqNgc3w=",
"owner": "rafaelmardojai", "owner": "rafaelmardojai",
"repo": "firefox-gnome-theme", "repo": "firefox-gnome-theme",
"rev": "0909cfe4a2af8d358ad13b20246a350e14c2473d", "rev": "5602ed62d638142c1ab31dccd01dfbfb28841225",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -181,11 +205,11 @@
"flake-compat": { "flake-compat": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1761588595, "lastModified": 1767039857,
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "edolstra", "owner": "edolstra",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -197,11 +221,27 @@
"flake-compat_2": { "flake-compat_2": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1747046372, "lastModified": 1767039857,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_3": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "edolstra", "owner": "edolstra",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -218,11 +258,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1756770412, "lastModified": 1782949081,
"narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=", "narHash": "sha256-vp6Y/Grm98ESt6ceOkWiHWyZRDV3J1RID4w+6NWK9yA=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "4524271976b625a4a605beefd893f270620fd751", "rev": "17c9d6cdfc60c64f4ee8d306f9bc0b4ccb51481e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -265,47 +305,47 @@
"type": "github" "type": "github"
} }
}, },
"gitignore": {
"inputs": {
"nixpkgs": [
"hyprland",
"pre-commit-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"gnome-shell": { "gnome-shell": {
"flake": false, "flake": false,
"locked": { "locked": {
"host": "gitlab.gnome.org", "host": "gitlab.gnome.org",
"lastModified": 1762869044, "lastModified": 1776175984,
"narHash": "sha256-nwm/GJ2Syigf7VccLAZ66mFC8mZJFqpJmIxSGKl7+Ds=", "narHash": "sha256-RJFlFW8GiMei6oqUGrMkGEvVqOH8U7Q8abc1yK4VKD8=",
"owner": "GNOME", "owner": "GNOME",
"repo": "gnome-shell", "repo": "gnome-shell",
"rev": "680e3d195a92203f28d4bf8c6e8bb537cc3ed4ad", "rev": "e0fdc4c13250e9a9b8ea9594c83925274f4a5dca",
"type": "gitlab" "type": "gitlab"
}, },
"original": { "original": {
"host": "gitlab.gnome.org", "host": "gitlab.gnome.org",
"owner": "GNOME", "owner": "GNOME",
"ref": "gnome-49", "ref": "50.1",
"repo": "gnome-shell", "repo": "gnome-shell",
"type": "gitlab" "type": "gitlab"
} }
}, },
"helix-steel": {
"inputs": {
"nixpkgs": [
"nixpkgs"
],
"rust-overlay": "rust-overlay_2"
},
"locked": {
"lastModified": 1788213353,
"narHash": "sha256-vJ7VgxuM/Dp7vyVlu6EXjP/ES14TALy64jgzyuYZl6g=",
"owner": "mattwparas",
"repo": "helix",
"rev": "ba5b022c1000a0ce28d4ce1d09acdd062a83a020",
"type": "github"
},
"original": {
"owner": "mattwparas",
"ref": "steel-event-system",
"repo": "helix",
"type": "github"
}
},
"home-manager": { "home-manager": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -313,11 +353,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1764135300, "lastModified": 1789320570,
"narHash": "sha256-5xOuutXM7UPTUcn3uDAD8UlPQsXmqPrX81cXoDOAGcA=", "narHash": "sha256-1Js4AJiWLV7U1SF3ok0J2tKbBEJYE5YpElGU+7fMbfo=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "f4cb25928fafa9ae68660fe71f730fc820a59028", "rev": "87b3c74df02a2b2e691a24f3c82774f48a70c1bd",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -342,11 +382,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1753964049, "lastModified": 1776511930,
"narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=", "narHash": "sha256-fCpwFiTW0rT7oKJqr3cqHMnkwypSwQKpbtUEtxdkgrM=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprcursor", "repo": "hyprcursor",
"rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5", "rev": "39435900785d0c560c6ae8777d29f28617d031ef",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -371,11 +411,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1762462052, "lastModified": 1782566056,
"narHash": "sha256-6roLYzcDf4V38RUMSqycsOwAnqfodL6BmhRkUtwIgdA=", "narHash": "sha256-haEZcHzYrePnjFOYSWTbxm/Nrla0aPslJfmvdCvqtVc=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprgraphics", "repo": "hyprgraphics",
"rev": "ffc999d980c7b3bca85d3ebd0a9fbadf984a8162", "rev": "c6e7b9f673f4360bc813d3dc75028f75ee88d3f8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -393,23 +433,24 @@
"hyprland-protocols": "hyprland-protocols", "hyprland-protocols": "hyprland-protocols",
"hyprlang": "hyprlang", "hyprlang": "hyprlang",
"hyprutils": "hyprutils", "hyprutils": "hyprutils",
"hyprwayland-scanner": "hyprwayland-scanner_2", "hyprwayland-scanner": "hyprwayland-scanner",
"nixpkgs": "nixpkgs_4", "hyprwire": "hyprwire",
"nixpkgs": "nixpkgs",
"pre-commit-hooks": "pre-commit-hooks", "pre-commit-hooks": "pre-commit-hooks",
"systems": "systems", "systems": "systems",
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
"lastModified": 1762731096, "lastModified": 1785170029,
"narHash": "sha256-Kma5MxOipSBamO6DnwBeqJNjJ+VwEO73zh9h1hs/2Aw=", "narHash": "sha256-8CKDx282HhxlD1pwXPnC4uK29Abn1Jsnh7LgPzeIXxI=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "Hyprland", "repo": "Hyprland",
"rev": "967c3c7404d4fa00234e29c70df3e263386d2597", "rev": "5c9377c15f85c50648f35ca5a213754f95b93ca0",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "hyprwm", "owner": "hyprwm",
"ref": "v0.52.1-b", "ref": "v0.56.1",
"repo": "Hyprland", "repo": "Hyprland",
"type": "github" "type": "github"
} }
@@ -433,6 +474,10 @@
"hyprland", "hyprland",
"hyprutils" "hyprutils"
], ],
"hyprwayland-scanner": [
"hyprland",
"hyprwayland-scanner"
],
"nixpkgs": [ "nixpkgs": [
"hyprland", "hyprland",
"nixpkgs" "nixpkgs"
@@ -443,11 +488,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1762465111, "lastModified": 1784196523,
"narHash": "sha256-dS13YZdWjgGGLBjpT4FHB6xf8I/WiAU+mgNWXsZgDUs=", "narHash": "sha256-ahtKMGXFJdlQNhatQm1+BBU/pGfGYnAqQt3vWvq4p8s=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprland-guiutils", "repo": "hyprland-guiutils",
"rev": "a415eba866a953f3096d661318f771aa0082eb98", "rev": "a6ccb6cb112ed5a244c0191fb972347ecfa893e0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -473,11 +518,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1763856454, "lastModified": 1788563182,
"narHash": "sha256-jlP442tr1Q7BynLKEb+L5lyGViJF5qUioymBCccV7/Y=", "narHash": "sha256-e2Q7i5T+iQY0o/uxFNnXxWpXZ1e5f6VV4eHdKk7l6kc=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprland-plugins", "repo": "hyprland-plugins",
"rev": "7ffc0b314e638ca4f8ce9cb1305951a47d107ade", "rev": "722f15a77768eab13f01f5e5dce024bd2f61f270",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -498,11 +543,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1759610243, "lastModified": 1772460177,
"narHash": "sha256-+KEVnKBe8wz+a6dTLq8YDcF3UrhQElwsYJaVaHXJtoI=", "narHash": "sha256-/6G/MsPvtn7bc4Y32pserBT/Z4SUUdBd4XYJpOEKVR4=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprland-protocols", "repo": "hyprland-protocols",
"rev": "bd153e76f751f150a09328dbdeb5e4fab9d23622", "rev": "1cb6db5fd6bb8aee419f4457402fa18293ace917",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -527,11 +572,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1758927902, "lastModified": 1777320127,
"narHash": "sha256-LZgMds7M94+vuMql2bERQ6LiFFdhgsEFezE4Vn+Ys3A=", "narHash": "sha256-Qu+Wf2Bp5qUjyn2YpZNq8a7JyzTGowhT1knrwE38a9U=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprlang", "repo": "hyprlang",
"rev": "4dafa28d4f79877d67a7d1a654cddccf8ebf15da", "rev": "090117506ddc3d7f26e650ff344d378c2ec329cc",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -562,7 +607,11 @@
"hyprland-guiutils", "hyprland-guiutils",
"hyprutils" "hyprutils"
], ],
"hyprwayland-scanner": "hyprwayland-scanner", "hyprwayland-scanner": [
"hyprland",
"hyprland-guiutils",
"hyprwayland-scanner"
],
"nixpkgs": [ "nixpkgs": [
"hyprland", "hyprland",
"hyprland-guiutils", "hyprland-guiutils",
@@ -575,11 +624,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1762463729, "lastModified": 1782554491,
"narHash": "sha256-2fYkU/mdz8WKY3dkDPlE/j6hTxIwqultsx4gMMsMns0=", "narHash": "sha256-+p3MlyN/nqRefcf2IckPlGRUn9+hielqpS9XClbLleM=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprtoolkit", "repo": "hyprtoolkit",
"rev": "88483bdee5329ec985f0c8f834c519cd18cfe532", "rev": "bdba25ced39ea39ab004a8f31593ba0b0ff1ca35",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -600,11 +649,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1762387740, "lastModified": 1784323413,
"narHash": "sha256-gQ9zJ+pUI4o+Gh4Z6jhJll7jjCSwi8ZqJIhCE2oqwhQ=", "narHash": "sha256-XnAVV+H4f8Xdv0yZcSwJ5kCjLyE8fHxPeLX6a3HSrAU=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprutils", "repo": "hyprutils",
"rev": "926689ddb9c0a8787e58c02c765a62e32d63d1f7", "rev": "5f03477ab3a005ff27c527486f551883535aea2f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -617,23 +666,19 @@
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"hyprland", "hyprland",
"hyprland-guiutils",
"hyprtoolkit",
"nixpkgs" "nixpkgs"
], ],
"systems": [ "systems": [
"hyprland", "hyprland",
"hyprland-guiutils",
"hyprtoolkit",
"systems" "systems"
] ]
}, },
"locked": { "locked": {
"lastModified": 1755184602, "lastModified": 1777159683,
"narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=", "narHash": "sha256-Jxixw6wZphUp+nHYxOKUYSckL17QMBx2d5Zp0rJHr1g=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprwayland-scanner", "repo": "hyprwayland-scanner",
"rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d", "rev": "b8632713a6beaf28b56f2a7b0ab2fb7088dbb404",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -642,8 +687,12 @@
"type": "github" "type": "github"
} }
}, },
"hyprwayland-scanner_2": { "hyprwire": {
"inputs": { "inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [ "nixpkgs": [
"hyprland", "hyprland",
"nixpkgs" "nixpkgs"
@@ -654,30 +703,30 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1755184602, "lastModified": 1778410714,
"narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=", "narHash": "sha256-o6RzFj4nJXaPRY7EM01siuCQeT41RfwwmcmFQqwFJJg=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprwayland-scanner", "repo": "hyprwire",
"rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d", "rev": "85148a8e612808cf5ddb25d0b3c5840f3498a7dc",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprwayland-scanner", "repo": "hyprwire",
"type": "github" "type": "github"
} }
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1761672384, "lastModified": 1784356753,
"narHash": "sha256-o9KF3DJL7g7iYMZq9SWgfS1BFlNbsm6xplRjVlOCkXI=", "narHash": "sha256-12KrbMiWLcf8m7pCvAtZh1ZrgF85ZXDXvfR/fWTKy84=",
"owner": "nixos", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "08dacfca559e1d7da38f3cf05f1f45ee9bfd213c", "rev": "61b7c44c4073f0b827768aff0049561b5110ea5a",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nixos", "owner": "NixOS",
"ref": "nixos-unstable", "ref": "nixos-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
@@ -685,59 +734,43 @@
}, },
"nixpkgs-pinned": { "nixpkgs-pinned": {
"locked": { "locked": {
"lastModified": 1764517877, "lastModified": 1779971959,
"narHash": "sha256-pp3uT4hHijIC8JUK5MEqeAWmParJrgBVzHLNfJDZxg4=", "narHash": "sha256-R5nauXyqyfRUFiZycFFZdkF7wl6eaUpPLst35+2nJQY=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "2d293cbfa5a793b4c50d17c05ef9e385b90edf6c", "rev": "ec942ba042dad5ef097e2ef3a3effc034241f011",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "2d293cbfa5a793b4c50d17c05ef9e385b90edf6c", "rev": "ec942ba042dad5ef097e2ef3a3effc034241f011",
"type": "github" "type": "github"
} }
}, },
"nixpkgs-stable": { "nixpkgs-stable": {
"locked": { "locked": {
"lastModified": 1764522689, "lastModified": 1789114715,
"narHash": "sha256-SqUuBFjhl/kpDiVaKLQBoD8TLD+/cTUzzgVFoaHrkqY=", "narHash": "sha256-ugpsyk3NM2s87vXfUiIIiibbJ4Pp0JPS5p/3mfs+q+c=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "8bb5646e0bed5dbd3ab08c7a7cc15b75ab4e1d0f", "rev": "21a67dc470149f337cecafbe965d8d252a390518",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nixos", "owner": "nixos",
"ref": "nixos-25.11", "ref": "nixos-26.05",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1744536153, "lastModified": 1789149629,
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", "narHash": "sha256-H6GwaZzZf+4npqv0tph94w9tZddSjFjmQrVsW0z78uk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1743583204,
"narHash": "sha256-F7n4+KOIfWrwoQjXrL2wD9RhFYLs2/GGe/MQY1sSdlE=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "2c8d3f48d33929642c1c12cd243df4cc7d2ce434", "rev": "eaad089433ca2bb662274377d33df3d0e51ef28b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -747,86 +780,6 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_4": {
"locked": {
"lastModified": 1762363567,
"narHash": "sha256-YRqMDEtSMbitIMj+JLpheSz0pwEr0Rmy5mC7myl17xs=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ae814fd3904b621d8ab97418f1d0f2eb0d3716f4",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_5": {
"locked": {
"lastModified": 1763966396,
"narHash": "sha256-6eeL1YPcY1MV3DDStIDIdy/zZCDKgHdkCmsrLJFiZf0=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "5ae3b07d8d6527c42f17c876e404993199144b6a",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_6": {
"locked": {
"lastModified": 1763618868,
"narHash": "sha256-v5afmLjn/uyD9EQuPBn7nZuaZVV9r+JerayK/4wvdWA=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "a8d610af3f1a5fb71e23e08434d8d61a466fc942",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_7": {
"locked": {
"lastModified": 1762977756,
"narHash": "sha256-4PqRErxfe+2toFJFgcRKZ0UI9NSIOJa+7RXVtBhy4KE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "c5ae371f1a6a7fd27823bc500d9390b38c05fa55",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_8": {
"locked": {
"lastModified": 1763806073,
"narHash": "sha256-FHsEKDvfWpzdADWj99z7vBk4D716Ujdyveo5+A048aI=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "878e468e02bfabeda08c79250f7ad583037f2227",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nur": { "nur": {
"inputs": { "inputs": {
"flake-parts": [ "flake-parts": [
@@ -839,11 +792,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1758998580, "lastModified": 1785549842,
"narHash": "sha256-VLx0z396gDCGSiowLMFz5XRO/XuNV+4EnDYjdJhHvUk=", "narHash": "sha256-DCwBZmGsySF7oKGTRgEv2HvpxVXkHT+38VhTM76k0B4=",
"owner": "nix-community", "owner": "nix-community",
"repo": "NUR", "repo": "NUR",
"rev": "ba8d9c98f5f4630bcb0e815ab456afd90c930728", "rev": "a9f987b57594e845e3e5cdd423b9a70846d70308",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -855,18 +808,17 @@
"pre-commit-hooks": { "pre-commit-hooks": {
"inputs": { "inputs": {
"flake-compat": "flake-compat_2", "flake-compat": "flake-compat_2",
"gitignore": "gitignore",
"nixpkgs": [ "nixpkgs": [
"hyprland", "hyprland",
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1762441963, "lastModified": 1784288435,
"narHash": "sha256-j+rNQ119ffYUkYt2YYS6rnd6Jh/crMZmbqpkGLXaEt0=", "narHash": "sha256-ReRHaLgr/uVqdD8afFSn+myXIfpHeOhP0yYe0TJqAA8=",
"owner": "cachix", "owner": "cachix",
"repo": "git-hooks.nix", "repo": "git-hooks.nix",
"rev": "8e7576e79b88c16d7ee3bbd112c8d90070832885", "rev": "43b3c1ab9d40fb1dbb008f451988a91e375825e9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -879,27 +831,34 @@
"inputs": { "inputs": {
"aagl": "aagl", "aagl": "aagl",
"ags": "ags", "ags": "ags",
"disko": "disko",
"helix-steel": "helix-steel",
"home-manager": "home-manager", "home-manager": "home-manager",
"hyprland": "hyprland", "hyprland": "hyprland",
"hyprland-plugins": "hyprland-plugins", "hyprland-plugins": "hyprland-plugins",
"nixpkgs": "nixpkgs_5", "nixpkgs": "nixpkgs_2",
"nixpkgs-pinned": "nixpkgs-pinned", "nixpkgs-pinned": "nixpkgs-pinned",
"nixpkgs-stable": "nixpkgs-stable", "nixpkgs-stable": "nixpkgs-stable",
"sops-nix": "sops-nix", "sops-nix": "sops-nix",
"stylix": "stylix", "stylix": "stylix",
"yazi": "yazi" "waybar": "waybar",
"yazi": "yazi",
"yazi-plugins": "yazi-plugins"
} }
}, },
"rust-overlay": { "rust-overlay": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs_2" "nixpkgs": [
"aagl",
"nixpkgs"
]
}, },
"locked": { "locked": {
"lastModified": 1761791894, "lastModified": 1785476452,
"narHash": "sha256-myRIDh+PxaREz+z9LzbqBJF+SnTFJwkthKDX9zMyddY=", "narHash": "sha256-/CXwCFPS41rb/JI2VitKCgVK6V5E6/sfw5ke3B9zyVQ=",
"owner": "oxalica", "owner": "oxalica",
"repo": "rust-overlay", "repo": "rust-overlay",
"rev": "59c45eb69d9222a4362673141e00ff77842cd219", "rev": "6ef009bf4c4873cdc1a621826722bdea7c03e62c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -909,6 +868,27 @@
} }
}, },
"rust-overlay_2": { "rust-overlay_2": {
"inputs": {
"nixpkgs": [
"helix-steel",
"nixpkgs"
]
},
"locked": {
"lastModified": 1775358767,
"narHash": "sha256-f2eC+WIfhjevCPQILuV08i/kmKZzYZpUvkom/33VxCA=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "20fd44bc663daa53a2575e01293e24e681d62244",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"rust-overlay_3": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"yazi", "yazi",
@@ -916,11 +896,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1763952169, "lastModified": 1783320166,
"narHash": "sha256-+PeDBD8P+NKauH+w7eO/QWCIp8Cx4mCfWnh9sJmy9CM=", "narHash": "sha256-l7C/OsjcnWDOk2K3ssj+SBduwL67LashjBqis9+t468=",
"owner": "oxalica", "owner": "oxalica",
"repo": "rust-overlay", "repo": "rust-overlay",
"rev": "ab726555a9a72e6dc80649809147823a813fa95b", "rev": "20ee15370c9256669d66968b89ee20a4b0a4e673",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -931,14 +911,16 @@
}, },
"sops-nix": { "sops-nix": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs_6" "nixpkgs": [
"nixpkgs"
]
}, },
"locked": { "locked": {
"lastModified": 1764021963, "lastModified": 1788914643,
"narHash": "sha256-1m84V2ROwNEbqeS9t37/mkry23GBhfMt8qb6aHHmjuc=", "narHash": "sha256-4GuMPW90JSxXWDPUB9M+1m7fYbe3H0apOd86/zBQ2Kw=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "c482a1c1bbe030be6688ed7dc84f7213f304f1ec", "rev": "13616fff713a9f94055c66f15687ebdc17a335df",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -956,21 +938,22 @@
"firefox-gnome-theme": "firefox-gnome-theme", "firefox-gnome-theme": "firefox-gnome-theme",
"flake-parts": "flake-parts", "flake-parts": "flake-parts",
"gnome-shell": "gnome-shell", "gnome-shell": "gnome-shell",
"nixpkgs": "nixpkgs_7", "nixpkgs": [
"nixpkgs"
],
"nur": "nur", "nur": "nur",
"systems": "systems_2", "systems": "systems_2",
"tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty", "tinted-kitty": "tinted-kitty",
"tinted-schemes": "tinted-schemes", "tinted-schemes": "tinted-schemes",
"tinted-tmux": "tinted-tmux", "tinted-tmux": "tinted-tmux",
"tinted-zed": "tinted-zed" "tinted-zed": "tinted-zed"
}, },
"locked": { "locked": {
"lastModified": 1764047889, "lastModified": 1787771653,
"narHash": "sha256-KGP5anhJ+uEv4qFV3UtD1YYVn00/zOqLdVBgSdrzW/c=", "narHash": "sha256-DkkJSBOXWV/mja5Vy8az5g1KpZlsbUwlmH0BsQhowaQ=",
"owner": "danth", "owner": "danth",
"repo": "stylix", "repo": "stylix",
"rev": "b5072c51308a20214b7eb095b6fd01ee100a8f18", "rev": "5e3809851f486e7fc7e84b40f174c74b60ecc784",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -996,15 +979,16 @@
}, },
"systems_2": { "systems_2": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1774449309,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "narHash": "sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w=",
"owner": "nix-systems", "owner": "nix-systems",
"repo": "default", "repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", "rev": "c29398b59d2048c4ab79345812849c9bd15e9150",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-systems", "owner": "nix-systems",
"ref": "future-26.11",
"repo": "default", "repo": "default",
"type": "github" "type": "github"
} }
@@ -1024,23 +1008,6 @@
"type": "github" "type": "github"
} }
}, },
"tinted-foot": {
"flake": false,
"locked": {
"lastModified": 1726913040,
"narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=",
"owner": "tinted-theming",
"repo": "tinted-foot",
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-foot",
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
"type": "github"
}
},
"tinted-kitty": { "tinted-kitty": {
"flake": false, "flake": false,
"locked": { "locked": {
@@ -1060,11 +1027,11 @@
"tinted-schemes": { "tinted-schemes": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1757716333, "lastModified": 1785153830,
"narHash": "sha256-d4km8W7w2zCUEmPAPUoLk1NlYrGODuVa3P7St+UrqkM=", "narHash": "sha256-fNdfCTeCXU3tZG3TMincd+u68qBHQgCr2Ljr/M1mWP0=",
"owner": "tinted-theming", "owner": "tinted-theming",
"repo": "schemes", "repo": "schemes",
"rev": "317a5e10c35825a6c905d912e480dfe8e71c7559", "rev": "9bd28ed313560db3c5b605c63bc4e309e78e3fc8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1076,11 +1043,11 @@
"tinted-tmux": { "tinted-tmux": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1757811970, "lastModified": 1785031658,
"narHash": "sha256-n5ZJgmzGZXOD9pZdAl1OnBu3PIqD+X3vEBUGbTi4JiI=", "narHash": "sha256-mZp9O2LjzdMzlqQF3l3fjqsuPBzXy+1qTfBEUGjTlpk=",
"owner": "tinted-theming", "owner": "tinted-theming",
"repo": "tinted-tmux", "repo": "tinted-tmux",
"rev": "d217ba31c846006e9e0ae70775b0ee0f00aa6b1e", "rev": "5d2c67f61ea7af36f16865ab6d541cdba41dc257",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1092,11 +1059,11 @@
"tinted-zed": { "tinted-zed": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1757811247, "lastModified": 1785030526,
"narHash": "sha256-4EFOUyLj85NRL3OacHoLGEo0wjiRJzfsXtR4CZWAn6w=", "narHash": "sha256-klZf8UviewRkxuu74Bhbq6tqy7oxebQC7UVRWbbtQxU=",
"owner": "tinted-theming", "owner": "tinted-theming",
"repo": "base16-zed", "repo": "base16-zed",
"rev": "824fe0aacf82b3c26690d14e8d2cedd56e18404e", "rev": "16f5a8adf4a6b1310d0a61ab172de963e8f76a02",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1105,6 +1072,27 @@
"type": "github" "type": "github"
} }
}, },
"waybar": {
"inputs": {
"flake-compat": "flake-compat_3",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1789627973,
"narHash": "sha256-OJBVQSIpW0Ozb3czGP3+TQyDC5BBqMQtx2asPsspFHo=",
"owner": "Alexays",
"repo": "Waybar",
"rev": "1687ec724a89756e79371784a2ba3f9700f8e5c6",
"type": "github"
},
"original": {
"owner": "Alexays",
"repo": "Waybar",
"type": "github"
}
},
"xdph": { "xdph": {
"inputs": { "inputs": {
"hyprland-protocols": [ "hyprland-protocols": [
@@ -1133,11 +1121,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1761431178, "lastModified": 1784371182,
"narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=", "narHash": "sha256-S8A1lezEalltWcCp3gAic5lssS0xTSISK6fKODefhOk=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland", "repo": "xdg-desktop-portal-hyprland",
"rev": "4b8801228ff958d028f588f0c2b911dbf32297f9", "rev": "08d99f727944dd15e4740090305e31c5fb92a50a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1149,15 +1137,17 @@
"yazi": { "yazi": {
"inputs": { "inputs": {
"flake-utils": "flake-utils", "flake-utils": "flake-utils",
"nixpkgs": "nixpkgs_8", "nixpkgs": [
"rust-overlay": "rust-overlay_2" "nixpkgs"
],
"rust-overlay": "rust-overlay_3"
}, },
"locked": { "locked": {
"lastModified": 1764149272, "lastModified": 1789171366,
"narHash": "sha256-qQ1UB4hLrzaemZ1GjhJ2jhUqgm4pw63HanJKz+XDRvg=", "narHash": "sha256-b7B5VQC96NJx0/q5pTVWqgGjyCiO0Cz1aPfVJcBXLfA=",
"owner": "sxyazi", "owner": "sxyazi",
"repo": "yazi", "repo": "yazi",
"rev": "329c80cbee5bb9e527ffa475bc0df2477f71ed93", "rev": "b8973fb4c2b9b184aad03cfc717c1fefe4140c40",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1165,6 +1155,22 @@
"repo": "yazi", "repo": "yazi",
"type": "github" "type": "github"
} }
},
"yazi-plugins": {
"flake": false,
"locked": {
"lastModified": 1788955781,
"narHash": "sha256-kwf9+KXOL5JXGDoEGdtwq+JujP8GVoOwDgz76FBM3xk=",
"owner": "yazi-rs",
"repo": "plugins",
"rev": "58c4f4e2f4835cc9bf6751f39e3f7c574fc7f55a",
"type": "github"
},
"original": {
"owner": "yazi-rs",
"repo": "plugins",
"type": "github"
}
} }
}, },
"root": "root", "root": "root",
+64 -14
View File
@@ -3,39 +3,88 @@
nixConfig = { nixConfig = {
extra-substituters = [ extra-substituters = [
"https://nix.codrs.ru/main" "https://nix.lair.moe/main"
"https://nix-community.cachix.org" "https://nix-community.cachix.org"
"https://hyprland.cachix.org" "https://hyprland.cachix.org"
"https://ezkea.cachix.org" "https://ezkea.cachix.org"
"https://yazi.cachix.org"
]; ];
extra-trusted-public-keys = [ extra-trusted-public-keys = [
"main:kpwMe+9BsGJ/IUb7i3iadaV38y5/Yuqoct0mf7wI9ds=" "main:tR2gNhCBJHKAlVgohPNHBhGnWL55tB8SxXmMWJe5lo8="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"ezkea.cachix.org-1:ioBmUbJTZIKsHmWWXPe1FSFbeVe+afhfgqgTSNd34eI=" "ezkea.cachix.org-1:ioBmUbJTZIKsHmWWXPe1FSFbeVe+afhfgqgTSNd34eI="
"yazi.cachix.org-1:Dcdz63NZKfvUCbDGngQDAZq6kOroIrFoyO064uvLh8k="
]; ];
}; };
inputs = { inputs = {
aagl.url = "github:ezKEa/aagl-gtk-on-nix"; aagl = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; url = "github:ezKEa/aagl-gtk-on-nix";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.11"; inputs.nixpkgs.follows = "nixpkgs";
nixpkgs-pinned.url = "github:nixos/nixpkgs/2d293cbfa5a793b4c50d17c05ef9e385b90edf6c"; };
sops-nix.url = "github:Mic92/sops-nix";
stylix.url = "github:danth/stylix";
ags.url = "github:Aylur/ags/3ed9737bdbc8fc7a7c7ceef2165c9109f336bff6";
yazi.url = "github:sxyazi/yazi";
hyprland.url = "github:hyprwm/Hyprland/v0.52.1-b"; ags = {
hyprland-plugins = { url = "github:Aylur/ags/3ed9737bdbc8fc7a7c7ceef2165c9109f336bff6";
url = "github:hyprwm/hyprland-plugins"; inputs.nixpkgs.follows = "nixpkgs";
inputs.hyprland.follows = "hyprland"; };
disko = {
url = "github:nix-community/disko";
inputs.nixpkgs.follows = "nixpkgs";
};
helix-steel = {
url = "github:mattwparas/helix/steel-event-system";
inputs.nixpkgs.follows = "nixpkgs";
}; };
home-manager = { home-manager = {
url = "github:nix-community/home-manager"; url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
hyprland = {
url = "github:hyprwm/Hyprland/v0.56.1";
# inputs.nixpkgs.follows = "nixpkgs";
};
hyprland-plugins = {
url = "github:hyprwm/hyprland-plugins";
inputs = {
hyprland.follows = "hyprland";
# nixpkgs.follows = "nixpkgs";
};
};
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-pinned.url = "github:nixos/nixpkgs/ec942ba042dad5ef097e2ef3a3effc034241f011";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-26.05";
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
stylix = {
url = "github:danth/stylix";
inputs.nixpkgs.follows = "nixpkgs";
};
waybar = {
url = "github:Alexays/Waybar";
inputs.nixpkgs.follows = "nixpkgs";
};
yazi = {
url = "github:sxyazi/yazi";
inputs.nixpkgs.follows = "nixpkgs";
};
yazi-plugins = {
url = "github:yazi-rs/plugins";
flake = false;
};
}; };
outputs = { self, nixpkgs, nixpkgs-stable, nixpkgs-pinned, home-manager, ... }@inputs: let outputs = { self, nixpkgs, nixpkgs-stable, nixpkgs-pinned, home-manager, ... }@inputs: let
@@ -55,6 +104,7 @@
Senko = mkHost "Senko"; Senko = mkHost "Senko";
Eclipse = mkHost "Eclipse"; Eclipse = mkHost "Eclipse";
Impreza = mkHost "Impreza"; Impreza = mkHost "Impreza";
Inaho = mkHost "Inaho";
}; };
}; };
} }
+2
View File
@@ -47,4 +47,6 @@
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
boot.loader.grub.useOSProber = true;
} }
+1
View File
@@ -3,6 +3,7 @@
nix.settings = inputs.aagl.nixConfig; # Set up Cachix nix.settings = inputs.aagl.nixConfig; # Set up Cachix
programs.honkers-railway-launcher.enable = true; programs.honkers-railway-launcher.enable = true;
programs.sleepy-launcher.enable = true; programs.sleepy-launcher.enable = true;
programs.anime-game-launcher.enable = true;
networking.hosts."0.0.0.0" = [ networking.hosts."0.0.0.0" = [
"overseauspider.yuanshen.com" "overseauspider.yuanshen.com"
"log-upload-os.hoyoverse.com" "log-upload-os.hoyoverse.com"
+25 -12
View File
@@ -1,27 +1,40 @@
{ pkgs, lib, ... }: { { pkgs, lib, ... }:
wayland.windowManager.hyprland = let let
hyprLua = import ../../../modules/user/hyprland/lua.nix { inherit lib; };
wallpaper = pkgs.fetchurl { wallpaper = pkgs.fetchurl {
name = "miku_wallpaper.jpg"; name = "miku_wallpaper.jpg";
url = "https://c.codrs.ru/pub/miku_wallpaper.jpeg?raw"; url = "https://c.lair.moe/pub/miku_wallpaper.jpeg?raw";
hash = "sha256-inK4X5KzQk5FHwDw2DYy43nm7XtXlC6I0S1PkYUv+3w="; hash = "sha256-inK4X5KzQk5FHwDw2DYy43nm7XtXlC6I0S1PkYUv+3w=";
}; };
in { in {
settings = { wayland.windowManager.hyprland.settings = {
monitor = [ monitor = [
"DP-3 , 1920x1080@165, 0x0 , 1" {
"HDMI-A-1, preferred , -1080x0, 1, transform, 1" output = "DP-3";
mode = "1920x1080@165";
position = "0x0";
scale = 1;
}
{
output = "HDMI-A-1";
mode = "preferred";
position = "-1080x0";
scale = 1;
transform = 1;
}
]; ];
workspace = [ workspace_rule = [
"1, monitor:DP-3, default:true" { workspace = "1"; monitor = "DP-3"; default = true; }
"10, monitor:HDMI-A-1, default:true" { workspace = "10"; monitor = "HDMI-A-1"; default = true; }
]; ];
exec-once = [ on = [
"hyprctl dispatch workspace 1" (hyprLua.onStart [
"hyprctl dispatch 'hl.dsp.focus({ workspace = 1 })'"
"${lib.getExe pkgs.swww} img -o HDMI-A-1 ${wallpaper}" "${lib.getExe pkgs.swww} img -o HDMI-A-1 ${wallpaper}"
"${lib.getExe pkgs.linux-wallpaperengine} ~/.local/share/wpe/wallpaper --assets-dir ~/.local/share/wpe/assets --screen-root DP-3 --noautomute" "${lib.getExe pkgs.linux-wallpaperengine} ~/.local/share/wpe/wallpaper --assets-dir ~/.local/share/wpe/assets --screen-root DP-3 --noautomute"
])
]; ];
}; };
};
} }
File diff suppressed because one or more lines are too long
+7 -7
View File
@@ -13,19 +13,19 @@
boot.kernelModules = [ "kvm-intel" ]; boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
fileSystems."/" = fileSystems."/" = {
{ device = "/dev/disk/by-uuid/31247de4-e9c0-4690-8bce-8380377b6872"; device = "/dev/disk/by-label/NixOS";
fsType = "ext4"; fsType = "ext4";
}; };
fileSystems."/boot" = fileSystems."/boot" = {
{ device = "/dev/disk/by-uuid/328A-299C"; device = "/dev/disk/by-label/EFI";
fsType = "vfat"; fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ]; options = [ "fmask=0022" "dmask=0022" "nofail" ];
}; };
fileSystems."/mnt/Windows" = fileSystems."/mnt/Windows" = {
{ device = "/dev/disk/by-uuid/84E48B00E48AF428"; device = "/dev/disk/by-label/Windows";
fsType = "ntfs"; fsType = "ntfs";
options = [ "umask=0022" "gid=100" "uid=1000" "nofail" ]; options = [ "umask=0022" "gid=100" "uid=1000" "nofail" ];
}; };
+15
View File
@@ -0,0 +1,15 @@
{ pkgs, lib, ... }:
let
hyprLua = import ../../../modules/user/hyprland/lua.nix { inherit lib; };
wallpaper = pkgs.fetchurl {
name = "miku_wallpaper.jpg";
url = "https://c.lair.moe/pub/miku_wallpaper.jpeg?raw";
hash = "sha256-inK4X5KzQk5FHwDw2DYy43nm7XtXlC6I0S1PkYUv+3w=";
};
in {
wayland.windowManager.hyprland.settings.on = [
(hyprLua.onStart [
"${lib.getExe pkgs.swww} img -o eDP-1 ${wallpaper}"
])
];
}
+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";
};
}
+10
View File
@@ -0,0 +1,10 @@
{
wayland.windowManager.hyprland.settings.monitor = [
{
output = "eDP-1";
mode = "1920x1080@60";
position = "0x0";
scale = 1;
}
];
}
+39
View File
@@ -0,0 +1,39 @@
{ config, ... }: {
services.syncthing = {
enable = true;
openDefaultPorts = true;
user = "sweetbread";
dataDir = "/home/sweetbread/.config/syncthing";
key = config.sops.secrets.syncthing_key.path;
cert = config.sops.secrets.syncthing_cert.path;
settings = {
devices = {
Rias.id = "EC5AGVN-2RKJDHN-NOSB7PQ-IRYCEEW-NPPDUGX-6QGSLUU-YIT5ZZZ-RVPTHQ6";
Akeno.id = "QDW3WJX-J7ETS4R-32CUAIY-EGNM2RD-ZEHOUW2-CHOEOUG-USZOWTR-HHQS2QX";
Koneko.id = "PJFWQRY-ZFUBGDR-NV7KVBL-UBDQ4HT-KPTYP34-MUDFPJU-4EZUHTT-ZLYRMAB";
};
folders = {
"Music" = {
path = "/home/sweetbread/Music";
devices = [ "Rias" "Akeno" "Koneko" ];
};
"Obsidian" = {
path = "/home/sweetbread/Documents/Obsidian";
devices = [ "Rias" "Akeno" "Koneko" ];
};
"Documents" = {
path = "/home/sweetbread/Documents";
devices = [ "Rias" ];
};
};
};
};
systemd.services.syncthing.environment.STNODEFAULTFOLDER = "true";
}
+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"
}
}
+4 -1
View File
@@ -3,7 +3,7 @@
./secrets/secrets.nix ./secrets/secrets.nix
./modules/grub.nix ./modules/grub.nix
./modules/syncthing.nix ./modules/syncthing.nix
../../modules/host/adb.nix ./modules/rgb.nix
../modules/gpu/nvidia.nix ../modules/gpu/nvidia.nix
(import ../modules/common.nix { (import ../modules/common.nix {
@@ -27,4 +27,7 @@
programs.gamemode.enable = true; programs.gamemode.enable = true;
services.printing.enable = true; services.printing.enable = true;
hardware.opentabletdriver.enable = true; hardware.opentabletdriver.enable = true;
environment.systemPackages = [ pkgs.android-tools ];
users.users.sweetbread.extraGroups = [ "kvm" ];
} }
+7 -3
View File
@@ -11,6 +11,10 @@
boot.kernelModules = [ "kvm-intel" ]; boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
environment.etc.crypttab.text = ''
storage UUID=9327148b-788a-4c23-ac73-28464ffabe1b none luks
'';
fileSystems."/" = { fileSystems."/" = {
device = "/dev/disk/by-label/NixOS"; device = "/dev/disk/by-label/NixOS";
fsType = "ext4"; fsType = "ext4";
@@ -23,9 +27,9 @@
}; };
fileSystems."/mnt/D" = { fileSystems."/mnt/D" = {
device = "/dev/disk/by-label/Data"; device = "/dev/mapper/storage";
fsType = "ntfs"; fsType = "ext4";
options = ["umask=0022" "gid=100" "uid=1000" "nofail" ]; options = [ "noatime" "nofail" ];
}; };
swapDevices = [ ]; swapDevices = [ ];
+25 -19
View File
@@ -1,44 +1,50 @@
{ pkgs, lib, ...}: { { pkgs, lib, ... }:
wayland.windowManager.hyprland = let let
hyprLua = import ../../../modules/user/hyprland/lua.nix { inherit lib; };
monitor-switcher = pkgs.writers.writeBashBin "monitor_switcher" /*bash*/ '' monitor-switcher = pkgs.writers.writeBashBin "monitor_switcher" /*bash*/ ''
MODE=$1 MODE=$1
case $MODE in case $MODE in
"tv") "tv")
hyprctl keyword monitor "DP-3, 1920x1080@60, 3840x0, 1" hyprctl eval 'hl.monitor({ output = "DP-3", mode = "1920x1080@60", position = "3840x0", scale = 1 })'
hyprctl keyword monitor "HDMI-A-1, 3840x2160@60, 0x0, 1" hyprctl eval 'hl.monitor({ output = "HDMI-A-1", mode = "3840x2160@60", position = "0x0", scale = 1 })'
notify-send "TV mode" notify-send "TV mode"
;; ;;
"mirror") "mirror")
hyprctl keyword monitor "HDMI-A-1, 3840x2160@60, 0x0, 1" hyprctl eval 'hl.monitor({ output = "HDMI-A-1", mode = "3840x2160@60", position = "0x0", scale = 1 })'
hyprctl keyword monitor "DP-3, preferred, auto, 1, mirror, HDMI-A-1" hyprctl eval 'hl.monitor({ output = "DP-3", mode = "preferred", position = "auto", scale = 1, mirror = "HDMI-A-1" })'
notify-send "TV-only mode" notify-send "TV-only mode"
;; ;;
"display"|*) "display"|*)
hyprctl keyword monitor "HDMI-A-1, disable" hyprctl eval 'hl.monitor({ output = "HDMI-A-1", disabled = true })'
hyprctl keyword monitor "DP-3, 3440x1440@165, 0x0, 1" hyprctl eval 'hl.monitor({ output = "DP-3", mode = "3440x1440@165", position = "0x0", scale = 1 })'
notify-send "Display mode" notify-send "Display mode"
;; ;;
esac esac
''; '';
in { in {
settings = { wayland.windowManager.hyprland.settings = {
monitor = [ monitor = [
"DP-3, 3440x1440@165, auto-right, 1" {
# "HDMI-A-1, 3840x2160@60, auto-left, 2" output = "DP-3";
"HDMI-A-1, disabled" mode = "3440x1440@165";
position = "auto-right";
scale = 1;
}
{
output = "HDMI-A-1";
disabled = true;
}
]; ];
bind = [ bind = [
'', XF86Calculator, exec, ghostty --title=pulsemixer -e pulsemixer'' (hyprLua.bind "XF86Calculator" (hyprLua.exec "ghostty --title=pulsemixer -e pulsemixer"))
(hyprLua.bind "SUPER + F1" (hyprLua.exec "${lib.getExe monitor-switcher} tv"))
''$mainMod, F1, exec, ${lib.getExe monitor-switcher} tv'' (hyprLua.bind "SUPER + F2" (hyprLua.exec "${lib.getExe monitor-switcher} mirror"))
''$mainMod, F2, exec, ${lib.getExe monitor-switcher} mirror'' (hyprLua.bind "SUPER + F3" (hyprLua.exec "${lib.getExe monitor-switcher}"))
''$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" ];
}
+14 -3
View File
@@ -11,8 +11,9 @@
settings = { settings = {
devices = { devices = {
Akeno = { id = "QDW3WJX-J7ETS4R-32CUAIY-EGNM2RD-ZEHOUW2-CHOEOUG-USZOWTR-HHQS2QX"; }; Akeno.id = "QDW3WJX-J7ETS4R-32CUAIY-EGNM2RD-ZEHOUW2-CHOEOUG-USZOWTR-HHQS2QX";
Koneko = { id = "PJFWQRY-ZFUBGDR-NV7KVBL-UBDQ4HT-KPTYP34-MUDFPJU-4EZUHTT-ZLYRMAB"; }; Koneko.id = "PJFWQRY-ZFUBGDR-NV7KVBL-UBDQ4HT-KPTYP34-MUDFPJU-4EZUHTT-ZLYRMAB";
Inaho.id = "GEHWQFQ-MPIMQ7R-QEWSOEB-BIZAHSZ-5YOFATK-KDIXFMV-JX3OF6G-ZPNZMA4";
}; };
folders = { folders = {
@@ -33,7 +34,17 @@
"Music" = { "Music" = {
path = "/home/sweetbread/Music"; path = "/home/sweetbread/Music";
devices = [ "Akeno" "Koneko" ]; devices = [ "Akeno" "Koneko" "Inaho" ];
};
"Obsidian" = {
path = "/mnt/D/Obsidian";
devices = [ "Koneko" "Inaho" ];
};
"Documents" = {
path = "/home/sweetbread/Documents";
devices = [ "Inaho" ];
}; };
}; };
}; };
File diff suppressed because one or more lines are too long
+1
View File
@@ -24,6 +24,7 @@
hardware.bluetooth.enable = true; hardware.bluetooth.enable = true;
host.laptop = true; host.laptop = true;
host.nvidia.prime.enable = true;
environment.systemPackages = [ pkgs.dbgate ]; environment.systemPackages = [ pkgs.dbgate ];
} }
+7 -6
View File
@@ -1,9 +1,10 @@
{ {
wayland.windowManager.hyprland = { wayland.windowManager.hyprland.settings.monitor = [
settings = { {
monitor = [ output = "eDP-1";
"eDP-1, 1920x1080@60, 0x0, 1" mode = "1920x1080@60";
position = "0x0";
scale = 1;
}
]; ];
};
};
} }
+19 -3
View File
@@ -7,14 +7,30 @@
]; ];
options = { 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 = { config = {
nix.settings = { nix.settings = {
keep-going = true; keep-going = true;
extra-substituters = [ "https://nix.codrs.ru/main" ]; extra-substituters = [ "https://nix.lair.moe/main" ];
extra-trusted-public-keys = [ "main:kpwMe+9BsGJ/IUb7i3iadaV38y5/Yuqoct0mf7wI9ds=" ]; extra-trusted-public-keys = [ "main:tR2gNhCBJHKAlVgohPNHBhGnWL55tB8SxXmMWJe5lo8=" ];
experimental-features = [ "nix-command" "flakes" ]; experimental-features = [ "nix-command" "flakes" ];
}; };
networking.hostName = hostname; networking.hostName = hostname;
+27 -10
View File
@@ -1,13 +1,23 @@
{ config, pkgs-stable, lib, ... }: { { config, pkgs-stable, lib, ... }: let
boot.kernelParams = [ "nvidia-drm.modeset=1" ]; primeCfg = config.host.nvidia.prime;
services.xserver.videoDrivers = [ "nvidia" ]; 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 = { hardware = {
graphics = { graphics = {
enable = true; enable = true;
enable32Bit = true; enable32Bit = true;
extraPackages = with pkgs-stable; [ extraPackages = with pkgs-stable; [
nvidia-vaapi-driver # nvidia-vaapi-driver
intel-media-driver intel-media-driver
libvdpau-va-gl libvdpau-va-gl
]; ];
@@ -24,21 +34,28 @@
nvidiaSettings = true; nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.stable; package = config.boot.kernelPackages.nvidiaPackages.stable;
prime = lib.optionalAttrs config.host.laptop { prime = lib.optionalAttrs isPrimeOffload {
intelBusId = "PCI:0:2:0"; offload = {
nvidiaBusId = "PCI:1:0:0"; enable = true;
enableOffloadCmd = true;
};
intelBusId = primeCfg.intelBusId;
nvidiaBusId = primeCfg.nvidiaBusId;
}; };
}; };
}; };
environment.sessionVariables = { environment.sessionVariables = {
__GL_VRR_ALLOWED = 1;
ELECTRON_OZONE_PLATFORM_HINT = "auto";
NIXOS_OZONE_WL = 1;
} // lib.optionalAttrs isPrimeOffload {
LIBVA_DRIVER_NAME = "iHD";
} // lib.optionalAttrs (!isPrimeOffload) {
WLR_NO_HARDWARE_CURSORS = 1; WLR_NO_HARDWARE_CURSORS = 1;
WLR_DRM_NO_ATOMIC = 1; WLR_DRM_NO_ATOMIC = 1;
GBM_BACKEND = "nvidia-drm"; GBM_BACKEND = "nvidia-drm";
LIBVA_DRIVER_NAME = "nvidia"; LIBVA_DRIVER_NAME = "nvidia";
__GLX_VENDOR_LIBRARY_NAME = "nvidia"; __GLX_VENDOR_LIBRARY_NAME = "nvidia";
__GL_VRR_ALLOWED = 1;
ELECTRON_OZONE_PLATFORM_HINT = "auto";
NIXOS_OZONE_WL = 1;
}; };
} }
+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-then-hibernate";
HandleLidSwitchExternalPower = "suspend-then-hibernate";
HandlePowerKey = "poweroff";
};
tlp.settings = {
# Preserve batteries when the laptop is usually on AC.
# Raise STOP_* to 100 if maximum autonomy matters more than battery wear.
START_CHARGE_THRESH_BAT0 = 70;
STOP_CHARGE_THRESH_BAT0 = 95;
START_CHARGE_THRESH_BAT1 = 70;
STOP_CHARGE_THRESH_BAT1 = 85;
RESTORE_THRESHOLDS_ON_BAT = 1;
# NVMe/SATA SSD power saving without making the system too sluggish.
AHCI_RUNTIME_PM_ON_AC = "on";
AHCI_RUNTIME_PM_ON_BAT = "auto";
SATA_LINKPWR_ON_AC = "med_power_with_dipm";
SATA_LINKPWR_ON_BAT = "med_power_with_dipm";
# Usually safe on ThinkPads; disable if some USB device randomly disconnects.
USB_AUTOSUSPEND = 1;
};
};
networking.networkmanager.wifi.powersave = true;
environment.systemPackages = with pkgs; [
acpi
lm_sensors
pciutils
powertop
smartmontools
usbutils
nvme-cli
];
}
+33 -4
View File
@@ -1,4 +1,4 @@
{ { pkgs, ... }: {
imports = [ imports = [
./host/bluetooth.nix ./host/bluetooth.nix
./host/bootloader.nix ./host/bootloader.nix
@@ -8,18 +8,47 @@
./host/gamemode.nix ./host/gamemode.nix
./host/gpg.nix ./host/gpg.nix
./host/laptop.nix ./host/laptop.nix
./host/network.nix
./host/printing.nix ./host/printing.nix
./host/shutdown-on-lan.nix ./host/shutdown-on-lan.nix
./host/sound.nix ./host/sound.nix
./host/virtmanager.nix ./host/virtmanager.nix
./host/vpn.nix ./host/vpn.nix
./host/network.nix
./host/yggdrasil.nix ./host/yggdrasil.nix
./host/mtp.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 = { services = {
udisks2.enable = true;
fstrim.enable = true; fstrim.enable = true;
upower.enable = true; upower.enable = true;
}; };
-4
View File
@@ -1,4 +0,0 @@
{
programs.adb.enable = true;
users.users.sweetbread.extraGroups = ["adbusers"]; # FIXME: check users
}
+2 -2
View File
@@ -1,6 +1,6 @@
{ pkgs, ... }: { {
console = { console = {
font = "${pkgs.kbd}/share/consolefonts/LatArCyrHeb-19.psfu.gz"; font = "LatArCyrHeb-19";
colors = [ colors = [
"16161E" "16161E"
"1A1B26" "1A1B26"
+10 -3
View File
@@ -1,8 +1,15 @@
{ { lib, ... }: {
environment.variables = { environment.variables = {
EDITOR = "hx"; EDITOR = "hx";
RANGER_LOAD_DEFAULT_RC = "FALSE"; RANGER_LOAD_DEFAULT_RC = "FALSE";
QT_QPA_PLATFORMTHEME = "qt5ct"; # GTK/Electron apps do not consistently use the portal picker unless this
GSETTINGS_BACKEND = "keyfile"; # 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";
}; };
} }
+2 -2
View File
@@ -1,4 +1,4 @@
{ config, pkgs, lib, ... }: { config, pkgs, pkgs-stable, lib, ... }:
lib.mkIf config.programs.gamemode.enable { lib.mkIf config.programs.gamemode.enable {
programs.steam = { programs.steam = {
@@ -10,7 +10,7 @@ lib.mkIf config.programs.gamemode.enable {
mangohud mangohud
protonup-ng protonup-ng
bottles bottles
heroic pkgs-stable.heroic
prismlauncher prismlauncher
]; ];
+3 -3
View File
@@ -4,11 +4,11 @@ lib.mkIf config.host.laptop {
services.tlp = { services.tlp = {
enable = true; enable = true;
settings = { settings = {
CPU_SCALING_GOVERNOR_ON_AC = "performance"; CPU_SCALING_GOVERNOR_ON_AC = "powersave";
CPU_SCALING_GOVERNOR_ON_BAT = "powersave"; CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
CPU_ENERGY_PERF_POLICY_ON_BAT = "power"; CPU_ENERGY_PERF_POLICY_ON_AC = "balance_performance";
CPU_ENERGY_PERF_POLICY_ON_AC = "performance"; CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power";
CPU_MIN_PERF_ON_AC = 0; CPU_MIN_PERF_ON_AC = 0;
CPU_MAX_PERF_ON_AC = 100; CPU_MAX_PERF_ON_AC = 100;
+5
View File
@@ -0,0 +1,5 @@
{ pkgs, ... }: {
environment.systemPackages = [ pkgs.glib ];
programs.fuse.enable = true;
services.gvfs.enable = true;
}
+1 -1
View File
@@ -1,7 +1,7 @@
{ pkgs, lib, ... }: { pkgs, lib, ... }:
let let
sol = pkgs.writers.writePython3 "shutdown-on-lan.py" { sol = pkgs.writers.writePython3 "shutdown-on-lan.py" {
libraries = [ pkgs.python313Packages.psutil ]; libraries = ps: [ ps.psutil ];
flakeIgnore = [ "E302" "E305" "E501" "E701" ]; flakeIgnore = [ "E302" "E305" "E501" "E701" ];
} /*py*/ '' } /*py*/ ''
# https://habr.com/ru/articles/816765/ # https://habr.com/ru/articles/816765/
+23 -22
View File
@@ -1,28 +1,29 @@
{ pkgs, config, ... }: { { pkgs-pinned, lib, ... }: {
systemd.services.v2raya = { programs.clash-verge = {
enable = true; enable = true;
description = "v2rayA gui client"; package = pkgs-pinned.clash-verge-rev;
after = [ "network.target" ]; serviceMode = true;
serviceConfig = { tunMode = true;
Restart = "always"; autoStart = true;
ExecStart = "${pkgs.v2raya}/bin/v2rayA";
};
path = with pkgs; [ iptables bash iproute2 ];
wantedBy = [ "multi-user.target" ];
environment = {
V2RAYA_LOG_FILE = "/var/log/v2raya/v2raya.log";
V2RAY_LOCATION_ASSET = "/etc/v2raya";
XRAY_LOCATION_ASSET = "/etc/v2raya";
};
}; };
environment.etc = { systemd.services.clash-verge.serviceConfig = {
"v2raya/ru_geoip.dat".source = pkgs.fetchurl { CapabilityBoundingSet = lib.mkForce [
name = "geoip.dat"; "CAP_NET_ADMIN"
url = "https://github.com/runetfreedom/russia-blocked-geoip/releases/download/202511300923/geoip.dat"; "CAP_NET_RAW"
hash = "sha256-irYvR6UpXRojrFYCSt2zjOa3V6YzJWdUX+2IIKDR7nY="; "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; persistentKeys = true;
settings = { settings = {
Peers = [ Peers = [
"tcp://codrs.ru:5001" "tcp://box.paulll.cc:13337"
"tcp://lair.moe:5001"
]; ];
}; };
}; };
+14 -11
View File
@@ -1,21 +1,24 @@
{ config, lib, ... }: { { config, lib, ... }: {
imports = [ 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/btop.nix
./user/wofi.nix
./user/mako.nix
./user/ghostty.nix ./user/ghostty.nix
./user/helix.nix
./user/hyprland.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/art.nix
./user/packages/desktop.nix ./user/packages/desktop.nix
./user/packages/coding.nix
./user/packages/utils.nix ./user/packages/utils.nix
]; ];
} }
-26
View File
@@ -1,26 +0,0 @@
{ config, inputs, pkgs, username, ... }: {
imports = [ inputs.ags.homeManagerModules.default ];
programs.ags = {
enable = true;
configDir = null;
extraPackages = with inputs.ags.packages.${pkgs.system}; [
battery
mpris
hyprland
network
tray
wireplumber
];
};
home.packages = with pkgs; [
pulsemixer
];
wayland.windowManager.hyprland.settings.exec-once = [ "ags run" ];
xdg.configFile."ags".source = (pkgs.callPackage ./packages/drvs/ags.nix { inherit username; colors = config.lib.stylix.colors; });
}
+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 = { programs.ghostty = {
enable = true; enable = true;
enableZshIntegration = true; enableZshIntegration = true;
package = ghosttyWithGL;
settings = { settings = {
confirm-close-surface = false; confirm-close-surface = false;
copy-on-select = false; copy-on-select = false;
title-report = true; title-report = true;
custom-shader = "${shaders}/cursor_warp.glsl";
}; };
}; };
} }
+174 -1
View File
@@ -1,8 +1,107 @@
{ { inputs, pkgs, lib, config, ... }: let
helixSteel =
inputs.helix-steel.packages.${pkgs.system}.default.overrideAttrs (old: {
cargoBuildFlags = (old.cargoBuildFlags or []) ++ [
"--features"
"steel,git"
];
});
comment-headers = pkgs.fetchurl {
url = "https://github.com/codingvivi/comment-dividers.hx/raw/refs/heads/main/comment_headers.scm";
name = "comment_headers.scm";
hash = "sha256-ohgn6DFJl0rdRJuri6Frs/uUlUsPxMvPHDuw4FS3qEE=";
};
patched-comment-headers = pkgs.runCommand "comment_headers.scm" { } ''
install -m 0644 ${comment-headers} "$out"
${pkgs.python3}/bin/python3 - <<'PY'
from pathlib import Path
import os
import sys
p = Path(os.environ["out"])
s = p.read_text()
start_marker = "(define (get-block-delims)"
end_marker = "(define (delete_till_first_nonwhitespace!)"
try:
start = s.index(start_marker)
end = s.index(end_marker, start)
except ValueError as e:
sys.exit(f"failed to find function markers: {e}")
new_get_block_delims = """(define (get-block-delims)
(helix.static.open_above)
(helix.static.insert_string "test_string")
(helix.static.normal_mode)
(helix.static.extend_to_line_bounds)
(helix.static.trim_selections)
(helix.static.toggle_comments)
(let* ([commented-test-string (helix.static.current-highlighted-text!)]
[strings-without-whitespace (split-whitespace commented-test-string)])
(delete-line-noyank!)
(cond
[(and (> (length strings-without-whitespace) 1)
(equal? (last strings-without-whitespace) "test_string"))
(list (first strings-without-whitespace) "")]
[(> (length strings-without-whitespace) 2)
(list (first strings-without-whitespace) (last strings-without-whitespace))]
[else
(list "" "")])))
"""
s = s[:start] + new_get_block_delims + s[end:]
old = "(make-line line-length fill-pattern #f padding-pattern)"
new = "(make-line line-length \"\" fill-pattern padding-pattern)"
if old not in s:
sys.exit("failed to find insert-divider make-line call")
s = s.replace(old, new)
p.write_text(s)
PY
'';
in {
home.packages = with pkgs; [
asm-lsp
fasm
steel
wakatime-cli
];
home.activation.installWakatimeHx = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
export PATH="${pkgs.steel}/bin:$PATH"
export STEEL_HOME="${config.xdg.dataHome}/steel"
if [ ! -f "$STEEL_HOME/cogs/wakatime/wakatime.scm" ]; then
forge pkg install --git https://github.com/Xerxes-2/wakatime.hx.git
fi
'';
programs.helix = { programs.helix = {
enable = true; enable = true;
package = helixSteel;
defaultEditor = true; defaultEditor = true;
languages = {
language-server.asm-lsp.command = "asm-lsp";
language = [
{
name = "nasm";
file-types = [ "asm" "inc" ];
comment-token = ";";
language-servers = [ "asm-lsp" ];
}
];
};
settings = { settings = {
# theme = "catppuccin-mocha"; # theme = "catppuccin-mocha";
editor = { editor = {
@@ -24,6 +123,80 @@
select = "underline"; select = "underline";
}; };
}; };
keys.normal = {
space = {
C-a = {
b = ":fasm-build";
r = ":fasm-run";
c = ":fasm-clean";
}; };
C-c = {
h = ":comment-h1";
j = ":comment-h2";
k = ":comment-h3";
d = ":comment-divider";
};
};
S-down = ["extend_to_line_bounds" "delete_selection" "paste_after"];
S-up = ["extend_to_line_bounds" "delete_selection" "move_line_up" "paste_before"];
};
};
};
xdg.configFile = {
"asm-lsp/.asm-lsp.toml".text = ''
[default_config]
assembler = "fasm"
instruction_set = "x86/x86-64"
[opts]
compiler = "fasm"
diagnostics = true
default_diagnostics = true
'';
"helix/cogs/comment_headers.scm".source = patched-comment-headers;
"helix/helix.scm".text = ''
(require (prefix-in div. "cogs/comment_headers.scm"))
(require (prefix-in helix. "helix/commands.scm"))
(provide comment-h1
comment-h2
comment-h3
comment-divider
fasm-build
fasm-run
fasm-clean)
(define (comment-h1)
(div.insert-h1!))
(define (comment-h2)
(div.insert-h2!))
(define (comment-h3)
(div.insert-h3!))
(define (comment-divider)
(div.insert-divider! 80 "~"))
(define (fasm-build)
(helix.write)
(helix.run-shell-command "just" "build"))
(define (fasm-run)
(helix.write)
(helix.run-shell-command "just" "run"))
(define (fasm-clean)
(helix.run-shell-command "just" "clean"))
'';
"helix/init.scm".text = ''
;; Steel init file
(require "wakatime/wakatime.scm")
'';
}; };
} }
+153 -128
View File
@@ -1,75 +1,83 @@
{ pkgs, lib, config, osConfig, inputs, username, ... }: let { pkgs, lib, config, osConfig, inputs, username, ... }:
let
optImport = path: lib.optional (builtins.pathExists path) path; optImport = path: lib.optional (builtins.pathExists path) path;
hostname = osConfig.networking.hostName; hostname = osConfig.networking.hostName;
hyprLua = import ./hyprland/lua.nix { inherit lib; };
inherit (hyprLua) bind bindWithFlags exec onStart;
direction = {
left = "l";
right = "r";
up = "u";
down = "d";
};
workspaceBinds = lib.concatMap (workspace:
let
key = if workspace == 10 then "0" else toString workspace;
workspaceValue = toString workspace;
in [
(bind "SUPER + ${key}" "hl.dsp.focus({ workspace = ${workspaceValue} })")
(bind "SUPER + SHIFT + ${key}" "hl.dsp.window.move({ workspace = ${workspaceValue}, follow = false })")
]
) (lib.range 1 10);
in { in {
imports = imports = [
./hyprland/zoom.nix
] ++
optImport ../../host/${hostname}/modules/hyprland.nix ++ optImport ../../host/${hostname}/modules/hyprland.nix ++
optImport ../../user/${username}/modules/hyprland.nix; optImport ../../user/${username}/modules/hyprland.nix;
home.packages = with pkgs; [ home.packages = with pkgs; [
ghostty ghostty
pamixer pamixer
wofi
clipse clipse
wl-clipboard wl-clipboard
wl-clip-persist wl-clip-persist
xclip xclip
awww
wifitui
]; ];
wayland.windowManager.hyprland = let wayland.windowManager.hyprland = {
colors = config.lib.stylix.colors;
in {
enable = true; enable = true;
configType = "lua";
xwayland.enable = true; xwayland.enable = true;
package = inputs.hyprland.packages.${pkgs.system}.hyprland; package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
plugins = with inputs.hyprland-plugins.packages.${pkgs.system}; [ plugins = with inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}; [
# hyprbars # Version mismatch # hyprbars # Version mismatch
]; ];
settings = { settings = {
"$mainMod" = "SUPER"; config = {
ecosystem = { ecosystem = {
no_donation_nag = true; no_donation_nag = true;
no_update_news = true; no_update_news = true;
}; };
env = [ cursor.no_hardware_cursors = 1;
"XDG_SESSION_TYPE,wayland"
"QT_QPA_PLATFORM,wayland"
"XDG_CURRENT_DESKTOP,Hyprland"
"XDG_SESSION_DESKTOP,Hyprland"
"XCURSOR_SIZE, ${toString config.stylix.cursor.size}"
"XCURSOR_THEME, ${config.stylix.cursor.name}"
"XDG_SCREENSHOTS_DIR,~/screens"
];
cursor.no_hardware_cursors = true;
debug = { debug = {
disable_logs = false; disable_logs = false;
enable_stdout_logs = true; enable_stdout_logs = true;
}; };
misc = { general."col.inactive_border" = lib.mkForce "rgba(00000000)";
focus_on_activate = true;
decoration = {
inactive_opacity = lib.mkDefault 0.95;
border_part_of_window = false;
}; };
misc.focus_on_activate = true;
input = { input = {
kb_layout = "us,ru"; kb_layout = "us,ru";
kb_options = "grp:caps_toggle"; kb_options = "grp:caps_toggle";
numlock_by_default = true; numlock_by_default = true;
follow_mouse = 1; follow_mouse = 1;
touchpad.natural_scroll = false;
touchpad = {
natural_scroll = false;
};
sensitivity = 0; sensitivity = 0;
}; };
@@ -78,129 +86,146 @@ in {
workspace_swipe_distance = 200; workspace_swipe_distance = 200;
workspace_swipe_forever = true; workspace_swipe_forever = true;
}; };
};
env = [
{ _args = [ "XDG_SESSION_TYPE" "wayland" ]; }
{ _args = [ "QT_QPA_PLATFORM" "wayland" ]; }
{ _args = [ "QT_QPA_PLATFORMTHEME" "xdgdesktopportal" ]; }
{ _args = [ "GTK_USE_PORTAL" "1" ]; }
{ _args = [ "TDESKTOP_USE_GTK_FILE_DIALOG" "1" ]; }
{ _args = [ "NIXOS_OZONE_WL" "1" ]; }
{ _args = [ "ELECTRON_OZONE_PLATFORM_HINT" "auto" ]; }
{ _args = [ "XDG_CURRENT_DESKTOP" "Hyprland" ]; }
{ _args = [ "XDG_SESSION_DESKTOP" "Hyprland" ]; }
{ _args = [ "XCURSOR_SIZE" (toString config.stylix.cursor.size) ]; }
{ _args = [ "XCURSOR_THEME" config.stylix.cursor.name ]; }
{ _args = [ "XDG_SCREENSHOTS_DIR" "~/screens" ]; }
];
gesture = [ gesture = [
"3, horizontal, workspace" {
fingers = 3;
direction = "horizontal";
action = "workspace";
}
]; ];
windowrule = [ workspace_rule = [
"float, class:^(imv)$" {
"float, class:^(feh)$" workspace = "w[t1]";
"float, class:^(mpv)$" gaps_out = 0;
"float, title:^(Список друзей)" }
"move onscreen cursor -50% -50%, class:^(xdragon)$"
"float, title:(nmtui)"
"float, title:(pulsemixer)"
"float, title:(clipse)"
"size 622 652, title:(clipse)"
]; ];
exec-once = lib.mkBefore [ window_rule = [
{ match.class = "imv"; float = true; }
{ match.class = "feh"; float = true; }
{ match.class = "mpv"; float = true; }
{ match.title = "Список друзей"; float = true; }
{ match.title = "wifitui"; float = true; }
{ match.title = "pulsemixer"; float = true; }
{ match.title = "clipse"; float = true; }
{ match.title = "clipse"; size = [ 622 652 ]; }
{ match.focus = true; rounding = 0; }
{
match = {
float = false;
workspace = "w[t1]";
};
border_size = 0;
}
];
on = lib.mkBefore [
(onStart [
"systemctl --user start plasma-polkit-agent" "systemctl --user start plasma-polkit-agent"
"${lib.getExe' pkgs.swww "swww-daemon"}" "${lib.getExe' pkgs.dbus "dbus-update-activation-environment"} --systemd --all"
"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" "wl-clip-persist --clipboard both"
"clipse -listen" "clipse -listen"
"${lib.getExe' pkgs.udiskie "udiskie"}" "${lib.getExe' pkgs.udiskie "udiskie"}"
])
]; ];
bind = [ bind = [
"$mainMod, V, exec, ghostty --title=clipse -e clipse" (bind "SUPER + V" (exec "ghostty --title=clipse -e clipse"))
(bind "SUPER + RETURN" (exec "ghostty"))
(bind "SUPER + Q" "hl.dsp.window.close()")
(bind "SUPER + M" "hl.dsp.exit()")
(bind "SUPER + E" (exec "ghostty -e sh -c yazi"))
(bind "SUPER + F" "hl.dsp.window.float({ action = \"toggle\" })")
(bind "SUPER + P" "hl.dsp.window.pseudo({ action = \"toggle\" })")
(bind "SUPER + J" "hl.dsp.layout(\"togglesplit\")")
(bind "SUPER + K" "hl.dsp.layout(\"swapsplit\")")
"$mainMod, Return, exec, ghostty" (bind "SUPER + LEFT" "hl.dsp.focus({ direction = \"${direction.left}\" })")
"$mainMod, Q, killactive," (bind "SUPER + RIGHT" "hl.dsp.focus({ direction = \"${direction.right}\" })")
"$mainMod, M, exit," (bind "SUPER + UP" "hl.dsp.focus({ direction = \"${direction.up}\" })")
"$mainMod, E, exec, ghostty -e sh -c yazi" (bind "SUPER + DOWN" "hl.dsp.focus({ direction = \"${direction.down}\" })")
"$mainMod, F, togglefloating,"
"$mainMod, D, exec, wofi --show drun"
"$mainMod, P, pseudo, # dwindle"
"$mainMod, J, togglesplit, # dwindle"
# Move focus with mainMod + arrow keys (bind "SUPER + SHIFT + LEFT" "hl.dsp.window.swap({ direction = \"${direction.left}\" })")
"$mainMod, left, movefocus, l" (bind "SUPER + SHIFT + RIGHT" "hl.dsp.window.swap({ direction = \"${direction.right}\" })")
"$mainMod, right, movefocus, r" (bind "SUPER + SHIFT + UP" "hl.dsp.window.swap({ direction = \"${direction.up}\" })")
"$mainMod, up, movefocus, u" (bind "SUPER + SHIFT + DOWN" "hl.dsp.window.swap({ direction = \"${direction.down}\" })")
"$mainMod, down, movefocus, d"
# Moving windows (bind "SUPER + CTRL + LEFT" "hl.dsp.window.resize({ x = -60, y = 0, relative = true })")
"$mainMod SHIFT, left, swapwindow, l" (bind "SUPER + CTRL + RIGHT" "hl.dsp.window.resize({ x = 60, y = 0, relative = true })")
"$mainMod SHIFT, right, swapwindow, r" (bind "SUPER + CTRL + UP" "hl.dsp.window.resize({ x = 0, y = -60, relative = true })")
"$mainMod SHIFT, up, swapwindow, u" (bind "SUPER + CTRL + DOWN" "hl.dsp.window.resize({ x = 0, y = 60, relative = true })")
"$mainMod SHIFT, down, swapwindow, d" ] ++ workspaceBinds ++ [
(bind "SUPER + SHIFT + F" "hl.dsp.window.fullscreen({ action = \"toggle\", mode = \"fullscreen\" })")
(bind "SUPER + mouse_down" "hl.dsp.focus({ workspace = \"e-1\" })")
(bind "SUPER + mouse_up" "hl.dsp.focus({ workspace = \"e+1\" })")
# Window resizing X Y (bind "SUPER + F3" (exec "${lib.getExe pkgs.brightnessctl} -d *::kbd_backlight set +33%"))
"$mainMod CTRL, left, resizeactive, -60 0" (bind "SUPER + F2" (exec "${lib.getExe pkgs.brightnessctl} -d *::kbd_backlight set 33%-"))
"$mainMod CTRL, right, resizeactive, 60 0"
"$mainMod CTRL, up, resizeactive, 0 -60"
"$mainMod CTRL, down, resizeactive, 0 60"
# Switch workspaces with mainMod + [0-9] (bind "XF86AudioMute" (exec "pamixer -t"))
"$mainMod, 1, workspace, 1" (bind "XF86AudioMicMute" (exec "pamixer --default-source -m"))
"$mainMod, 2, workspace, 2" (bind "XF86AudioPlay" (exec "${lib.getExe pkgs.playerctl} play-pause"))
"$mainMod, 3, workspace, 3" (bind "XF86Explorer" (exec "ghostty -e sh -c yazi"))
"$mainMod, 4, workspace, 4" (bind "XF86Mail" (exec "thunderbird"))
"$mainMod, 5, workspace, 5" (bind "XF86WWW" (exec "google-chrome-stable"))
"$mainMod, 6, workspace, 6"
"$mainMod, 7, workspace, 7"
"$mainMod, 8, workspace, 8"
"$mainMod, 9, workspace, 9"
"$mainMod, 0, workspace, 10"
# Move active window to a workspace with mainMod + SHIFT + [0-9] (bind "XF86MonBrightnessDown" (exec "${lib.getExe pkgs.brightnessctl} set 5%-"))
"$mainMod SHIFT, 1, movetoworkspacesilent, 1" (bind "XF86MonBrightnessUp" (exec "${lib.getExe pkgs.brightnessctl} set +5%"))
"$mainMod SHIFT, 2, movetoworkspacesilent, 2"
"$mainMod SHIFT, 3, movetoworkspacesilent, 3"
"$mainMod SHIFT, 4, movetoworkspacesilent, 4"
"$mainMod SHIFT, 5, movetoworkspacesilent, 5"
"$mainMod SHIFT, 6, movetoworkspacesilent, 6"
"$mainMod SHIFT, 7, movetoworkspacesilent, 7"
"$mainMod SHIFT, 8, movetoworkspacesilent, 8"
"$mainMod SHIFT, 9, movetoworkspacesilent, 9"
"$mainMod SHIFT, 0, movetoworkspacesilent, 10"
"$mainMod SHIFT, F, fullscreen" (bindWithFlags "XF86AudioRaiseVolume" (exec "pamixer -i 5") { repeating = true; })
(bindWithFlags "XF86AudioLowerVolume" (exec "pamixer -d 5") { repeating = true; })
# Scroll through existing workspaces with mainMod + scroll (bindWithFlags "XF86AudioPrev" (exec "${lib.getExe pkgs.playerctl} position 5-") { click = true; })
"$mainMod, mouse_down, workspace, e+1" (bindWithFlags "XF86AudioNext" (exec "${lib.getExe pkgs.playerctl} position 5+") { click = true; })
"$mainMod, mouse_up, workspace, e-1" (bindWithFlags "XF86AudioPrev" (exec "${lib.getExe pkgs.playerctl} previous") { long_press = true; })
(bindWithFlags "XF86AudioNext" (exec "${lib.getExe pkgs.playerctl} next") { long_press = true; })
# Keyboard backlight (bindWithFlags "SUPER + mouse:272" "hl.dsp.window.drag()" { mouse = true; })
"$mainMod, F3, exec, ${lib.getExe pkgs.brightnessctl} -d *::kbd_backlight set +33%" (bindWithFlags "SUPER + mouse:273" "hl.dsp.window.resize()" { mouse = true; })
"$mainMod, F2, exec, ${lib.getExe pkgs.brightnessctl} -d *::kbd_backlight set 33%-" ];
};
};
# Volume and Media Control xdg.portal = {
", XF86AudioMute, exec, pamixer -t" enable = true;
", XF86AudioMicMute, exec, pamixer --default-source -m"
", XF86AudioPlay, exec, ${lib.getExe pkgs.playerctl} play-pause"
", XF86Explorer, exec, ghostty -e sh -c yazi" extraPortals = [
", XF86Mail, exec, thunderbird" pkgs.xdg-desktop-portal-gtk
", XF86WWW, exec, google-chrome-stable" # TODO: Replace hard-code to some variable pkgs.xdg-desktop-portal-termfilechooser
# Brightness control
", XF86MonBrightnessDown, exec, ${lib.getExe pkgs.brightnessctl} set 5%- "
", XF86MonBrightnessUp, exec, ${lib.getExe pkgs.brightnessctl} set +5% "
]; ];
binde = [ config = {
", XF86AudioRaiseVolume, exec, pamixer -i 5 " common = {
", XF86AudioLowerVolume, exec, pamixer -d 5 " default = [ "hyprland" "gtk" ];
]; "org.freedesktop.impl.portal.FileChooser" = [ "termfilechooser" "gtk" ];
"org.freedesktop.impl.portal.Settings" = [ "gtk" ];
};
bindc = [ hyprland = {
", XF86AudioPrev, exec, ${lib.getExe pkgs.playerctl} position 5-" default = [ "hyprland" "gtk" ];
", XF86AudioNext, exec, ${lib.getExe pkgs.playerctl} position 5+" "org.freedesktop.impl.portal.FileChooser" = [ "termfilechooser" "gtk" ];
]; "org.freedesktop.impl.portal.Settings" = [ "gtk" ];
};
bindo = [
", XF86AudioPrev, exec, ${lib.getExe pkgs.playerctl} previous"
", XF86AudioNext, exec, ${lib.getExe pkgs.playerctl} next"
];
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = [
"$mainMod, mouse:272, movewindow"
"$mainMod, mouse:273, resizewindow"
];
}; };
}; };
} }
+35
View File
@@ -0,0 +1,35 @@
{ lib }:
let
inline = lib.generators.mkLuaInline;
quote = builtins.toJSON;
in rec {
inherit inline;
exec = command: "hl.dsp.exec_cmd(${quote command})";
bind = keys: dispatcher: {
_args = [
keys
(inline dispatcher)
];
};
bindWithFlags = keys: dispatcher: flags: {
_args = [
keys
(inline dispatcher)
flags
];
};
onStart = commands: {
_args = [
"hyprland.start"
(inline (
"function()\n"
+ lib.concatMapStringsSep "\n" (command: " hl.exec_cmd(${quote command})") commands
+ "\nend"
))
];
};
}
+32
View File
@@ -0,0 +1,32 @@
{ lib, ... }:
let
hyprLua = import ./lua.nix { inherit lib; };
inherit (hyprLua) bind bindWithFlags;
resetZoom = ''function()
hl.config({ cursor = { zoom_factor = 1 } })
end'';
zoomIn = ''function()
local current = hl.get_config("cursor.zoom_factor")
hl.config({ cursor = { zoom_factor = current * 1.1 } })
end'';
zoomOut = ''function()
local current = hl.get_config("cursor.zoom_factor")
hl.config({ cursor = { zoom_factor = math.max(1, current * 0.9) } })
end'';
in {
wayland.windowManager.hyprland.settings.bind = [
(bind "SUPER + SHIFT + mouse_up" resetZoom)
(bind "SUPER + SHIFT + mouse_down" resetZoom)
(bind "SUPER + SHIFT + minus" resetZoom)
(bind "SUPER + SHIFT + KP_SUBTRACT" resetZoom)
(bind "SUPER + SHIFT + 0" resetZoom)
(bindWithFlags "SUPER + equal" zoomIn { repeating = true; })
(bindWithFlags "SUPER + minus" zoomOut { repeating = true; })
(bindWithFlags "SUPER + KP_ADD" zoomIn { repeating = true; })
(bindWithFlags "SUPER + KP_SUBTRACT" zoomOut { repeating = true; })
];
}
+6 -2
View File
@@ -1,7 +1,11 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
let
hyprLua = import ./hyprland/lua.nix { inherit lib; };
in
lib.mkIf config.programs.hyprlock.enable { lib.mkIf config.programs.hyprlock.enable {
wayland.windowManager.hyprland.settings.exec-once = [ "hyprlock" ]; wayland.windowManager.hyprland.settings.on = [
(hyprLua.onStart [ "hyprlock" ])
];
programs.hyprlock = let programs.hyprlock = let
image = pkgs.fetchurl { image = pkgs.fetchurl {
+10 -18
View File
@@ -1,21 +1,13 @@
{ config, pkgs, ... }: { config, lib, ... }: let
let colors = config.lib.stylix.colors.withHashtag;
colors = config.lib.stylix.colors; accent = colors.${config.stylix.accent};
in { in {
home.packages = [ pkgs.mako ]; services.mako = {
xdg.configFile."mako/config".text = '' enable = true;
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
[urgency=high] settings = {
border-color=#${colors.base09} border-color = lib.mkForce accent;
default-timeout = 5000;
[urgency=low] };
border-color=#${colors.base04} };
'';
} }
+1 -1
View File
@@ -1,6 +1,6 @@
{ config, pkgs, ... }: let { config, pkgs, ... }: let
icon = pkgs.fetchurl { 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"; name = "nixos-chan.webp";
sha256 = "sha256-0majB9ljjMdZwvOijEgWdFKxWLje5tHgXHBJUWZfHfY="; sha256 = "sha256-0majB9ljjMdZwvOijEgWdFKxWLje5tHgXHBJUWZfHfY=";
}; };
-6
View File
@@ -1,6 +0,0 @@
{ pkgs, ... }: {
home.packages = with pkgs; [
jetbrains.idea-community
android-studio
];
}
+6 -3
View File
@@ -1,12 +1,15 @@
{ pkgs, pkgs-pinned, inputs, ... }: { { pkgs, pkgs-stable, ... }: {
home.packages = with pkgs; [ home.packages = with pkgs; [
pkgs-pinned.ayugram-desktop ayugram-desktop
vesktop vesktop
obs-studio obs-studio
mpv mpv
imhex
obsidian obsidian
qbittorrent pkgs-stable.qbittorrent
thunderbird thunderbird
libreoffice libreoffice
pear-desktop
( pkgs.callPackage ../../../drv/mumble.nix {} )
]; ];
} }
+2 -6
View File
@@ -1,15 +1,11 @@
{ stdenv, lib, config, colors, username, ... }: { stdenv, colors, accent ? colors.base0B, ... }:
stdenv.mkDerivation { stdenv.mkDerivation {
name = "AGS theme"; name = "AGS theme";
src = ./ags; src = ./ags;
dontUnpack = true; dontUnpack = true;
patchPhase = let patchPhase = ''
accent = if username == "chest"
then colors.base0E
else colors.base0B;
in ''
echo \$bg: \#${colors.base00}\; > colors.scss echo \$bg: \#${colors.base00}\; > colors.scss
echo \$surface0: \#${colors.base02}\; >> colors.scss echo \$surface0: \#${colors.base02}\; >> colors.scss
echo \$fg: \#${colors.base05}\; >> colors.scss echo \$fg: \#${colors.base05}\; >> colors.scss
-32
View File
@@ -1,32 +0,0 @@
{ pkgs, ... }: {
home.packages = with pkgs; [
texstudio
(texlive.combine {
inherit (texlive)
babel-russian
cm-super
cyrillic
hyphen-russian
hyphenat
titlesec
caption
float
xcolor
listings
pagecolor
moresize
raleway
fontawesome5
luatexbase
fontspec
ragged2e
enumitem
extsizes
multirow
varwidth
paracol
anyfontsize
scheme-basic;
})
];
}
+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 = { qt = {
enable = true; enable = true;
platformTheme.name = "qtct"; 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.
'';
};
}
+17
View File
@@ -0,0 +1,17 @@
{ lib, ... }:
let
hyprLua = import ./hyprland/lua.nix { inherit lib; };
in {
services = {
walker = {
enable = true;
systemd.enable = true;
};
elephant.enable = true;
};
wayland.windowManager.hyprland.settings.bind = [
(hyprLua.bind "SUPER + D" (hyprLua.exec "walker"))
];
}
+77
View File
@@ -0,0 +1,77 @@
{ config, pkgs, lib, ... }: let
c = config.lib.stylix.colors;
wobSocket = ''"''${XDG_RUNTIME_DIR:-/run/user/$(id -u)}/wob.sock"'';
volumeStep = pkgs.writeShellScriptBin "volume-step" /*bash*/ ''
volume="$(${lib.getExe' pkgs.wireplumber "wpctl"} get-volume @DEFAULT_AUDIO_SINK@)"
percent="$(printf '%s\n' "$volume" | ${pkgs.gawk}/bin/awk '{print int($2 * 100)}')"
if printf '%s\n' "$volume" | ${pkgs.gnugrep}/bin/grep -q MUTED; then
printf '%s muted\n' "$percent" > ${wobSocket}
else
printf '%s volume\n' "$percent" > ${wobSocket}
fi
'';
brightnessStep = pkgs.writeShellScriptBin "brightness-step" /*bash*/ ''
percent="$(${lib.getExe pkgs.brightnessctl} -m | ${lib.getExe' pkgs.coreutils "cut"} -d, -f4 | ${lib.getExe' pkgs.coreutils "tr"} -d '%')"
printf '%s brightness\n' "$percent" > ${wobSocket}
'';
hyprLua = import ./hyprland/lua.nix { inherit lib; };
in {
systemd.user = {
services.wob.Install.WantedBy = lib.mkForce [ ];
sockets.wob.Install.WantedBy = lib.mkForce [ "sockets.target" ];
};
services.wob = {
enable = true;
systemd = true;
settings = {
"" = {
timeout = 2000;
max = 100;
width = 280;
height = 32;
border_offset = 0;
border_size = 2;
bar_padding = 4;
anchor = "top center";
margin = "0 0 0 0";
overflow_mode = "nowrap";
orientation = "horizontal";
};
"style.volume" = { bar_color = c.base0D; };
"style.brightness" = { bar_color = c.base0A; };
"style.muted" = { bar_color = c.base04; };
};
};
wayland.windowManager.hyprland.settings.bind = [
(hyprLua.bindWithFlags "XF86AudioRaiseVolume" (hyprLua.exec "${lib.getExe volumeStep}") {
repeating = true;
locked = true;
})
(hyprLua.bindWithFlags "XF86AudioLowerVolume" (hyprLua.exec "${lib.getExe volumeStep}") {
repeating = true;
locked = true;
})
(hyprLua.bindWithFlags "XF86MonBrightnessUp" (hyprLua.exec "${lib.getExe brightnessStep}") {
repeating = true;
locked = true;
})
(hyprLua.bindWithFlags "XF86MonBrightnessDown" (hyprLua.exec "${lib.getExe brightnessStep}") {
repeating = true;
locked = true;
})
(hyprLua.bind "XF86AudioMute" (hyprLua.exec "${lib.getExe volumeStep} mute"))
];
}
-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=";
};
}
+294 -16
View File
@@ -1,12 +1,213 @@
{ pkgs, lib, inputs, ... }: { { pkgs, lib, inputs, ... }: let
hostSystem = pkgs.stdenv.hostPlatform.system;
yaziPkg = inputs.yazi.packages.${hostSystem}.default.override {
_7zz = pkgs._7zz-rar;
};
yaziOpen = pkgs.writeShellScriptBin "yazi-open" ''
set -efu
target="''${1:-$HOME}"
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
if [ -f "$target" ]; then
target="$(dirname "$target")"
fi
if [ ! -e "$target" ]; then
target="$HOME"
fi
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; [ home.packages = with pkgs; [
( ouch.override { enableUnfree = true; } ) ( ouch.override { enableUnfree = true; } )
yaziOpen
];
home.sessionVariables = {
GTK_USE_PORTAL = "1";
};
xdg.configFile."xdg-desktop-portal-termfilechooser/config".text = ''
[filechooser]
cmd=${lib.getExe yaziFileChooser}
default_dir=$HOME
open_mode=suggested
save_mode=last
'';
xdg.desktopEntries.yazi = {
name = "Yazi";
genericName = "File Manager";
exec = "${lib.getExe yaziOpen} %U";
terminal = false;
mimeType = [ "inode/directory" ];
categories = [ "System" "FileTools" "FileManager" ];
startupNotify = false;
};
xdg.mimeApps = {
enable = true;
defaultApplications = {
"inode/directory" = "yazi.desktop";
"application/x-gnome-saved-search" = "yazi.desktop";
};
};
xdg.dataFile."dbus-1/services/org.freedesktop.FileManager1.service".text = ''
[D-BUS Service]
Name=org.freedesktop.FileManager1
Exec=${lib.getExe fileManager1}
'';
wayland.windowManager.hyprland.settings.window_rule = [
{
match.class = "dragon-drop";
move = [
"(cursor_x-(window_w*0.5))"
"(cursor_y-(window_h*0.5))"
];
}
{
match.title = "Yazi File Picker";
float = true;
}
{
match.title = "Yazi File Picker";
size = [ 1200 800 ];
}
]; ];
programs.yazi = { programs.yazi = {
package = inputs.yazi.packages package = yaziPkg;
.${pkgs.stdenv.hostPlatform.system}.default
.override { _7zz = pkgs._7zz-rar; };
enable = true; enable = true;
enableZshIntegration = true; enableZshIntegration = true;
shellWrapperName = "y"; shellWrapperName = "y";
@@ -21,7 +222,7 @@
}; };
plugin = { plugin = {
preloaders = [ preloaders = [
{ name = "*.crdownload"; run = "noop"; } { url = "*.crdownload"; run = "noop"; }
]; ];
prepend_previewers = [ prepend_previewers = [
@@ -33,27 +234,69 @@
]; ];
prepend_fetchers = [ prepend_fetchers = [
{ id = "git"; mime = "*"; run = "git"; } { group = "git"; url = "*"; run = "git"; }
]; ];
}; };
}; };
plugins = with pkgs.yaziPlugins; { 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 inherit
chmod chmod
ouch ouch
full-border
starship
mount mount
git
toggle-pane toggle-pane
; ;
gvfs = {
package = gvfs;
setup = true;
};
full-border = {
package = yaziPlugin "full-border";
setup = true;
};
starship = {
package = starship;
setup = true;
};
git = {
package = yaziPlugin "git";
setup = true;
};
}; };
initLua = '' initLua = ''
require("git"):setup() Status:children_add(function()
require("full-border"):setup() local h = cx.active.current.hovered
require("starship"):setup() 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 = { keymap = {
@@ -63,19 +306,54 @@
run = "plugin toggle-pane max-preview"; run = "plugin toggle-pane max-preview";
desc = "Maximize or restore the preview pane"; 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"]; on = ["c" "m"];
run = "plugin chmod"; run = "plugin chmod";
desc = "Chmod on selected files"; desc = "Chmod on selected files";
} }
{ {
on = ["M"]; on = [ "M" "b" ];
run = "plugin mount"; run = "plugin mount";
desc = "Open mount menu"; desc = "Open block-device mount menu";
}
{
on = [ "M" "m" ];
run = "plugin gvfs -- select-then-mount --jump";
desc = "Mount GVFS device and jump to it";
}
{
on = [ "M" "u" ];
run = "plugin gvfs -- select-then-unmount";
desc = "Unmount GVFS device";
}
{
on = [ "M" "U" ];
run = "plugin gvfs -- select-then-unmount --eject";
desc = "Unmount and eject GVFS device";
}
{
on = [ "M" "t" ];
run = "plugin gvfs -- automount-when-cd";
desc = "Enable GVFS automount when entering device";
}
{
on = [ "g" "m" ];
run = "plugin gvfs -- jump-to-device";
desc = "Jump to mounted GVFS device";
}
{
on = [ "`" "`" ];
run = "plugin gvfs -- jump-back-prev-cwd";
desc = "Jump back from GVFS device";
} }
{ {
on = [ "<C-n>" ]; on = [ "<C-n>" ];
run = "shell '${lib.getExe pkgs.dragon-drop} -x -i -T %h'"; run = "shell '${lib.getExe pkgs.dragon-drop} -x -A -i -T %s'";
} }
{ {
on = [ "g" "<S-d>" ]; on = [ "g" "<S-d>" ];
+10 -4
View File
@@ -1,5 +1,6 @@
{ config, pkgs, ... }: { { config, osConfig, pkgs, lib, ... }: {
home.packages = [ pkgs.nh ]; home.packages = [ pkgs.nh ];
programs = { programs = {
zoxide.enable = true; zoxide.enable = true;
fzf.enable = true; fzf.enable = true;
@@ -36,7 +37,10 @@
read_only = " RO"; read_only = " RO";
}; };
nix_shell.format = "[nix-shell]($style) "; nix_shell.format = "[nix-shell]($style) ";
os.disabled = false; os = {
disabled = false;
style = "white";
};
python = { python = {
symbol = "py "; symbol = "py ";
python_binary = ["python3" "python"]; python_binary = ["python3" "python"];
@@ -62,13 +66,15 @@
cd = "z"; cd = "z";
lg = "lazygit"; lg = "lazygit";
s = "nix-shell . --run zsh"; 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 "$(zoxide init zsh)"
eval "$(nh completions zsh)"
source "$(fzf-share)/key-bindings.zsh" source "$(fzf-share)/key-bindings.zsh"
source "$(fzf-share)/completion.zsh" source "$(fzf-share)/completion.zsh"
nr() { nix run "nixpkgs#$1" -- "''${@:2}" }
''; '';
envExtra = '' envExtra = ''
+4 -3
View File
@@ -2,15 +2,16 @@
imports = [ imports = [
../../modules/user/packages/cs_utils.nix ../../modules/user/packages/cs_utils.nix
]; ];
disabledModules = [ disabledModules = [
../../modules/user/packages/art.nix ../../modules/user/packages/art.nix
../../modules/user/packages/coding.nix
]; ];
home.packages = with pkgs; [ home.packages = with pkgs; [
nautilus nautilus
vscode
python3 python3
pkgs-pinned.jetbrains.pycharm-community python3Packages.pip
pkgs-pinned.jetbrains.pycharm-oss
aseprite aseprite
krita krita
google-chrome google-chrome
+39 -27
View File
@@ -1,15 +1,22 @@
{ pkgs, lib, config, inputs, ... }: { { pkgs, lib, config, ... }:
wayland.windowManager.hyprland = let let
colors = config.lib.stylix.colors; colors = config.lib.stylix.colors;
accent = colors.${config.stylix.accent};
hyprLua = import ../../../modules/user/hyprland/lua.nix { inherit lib; };
in { in {
settings = { wayland.windowManager.hyprland.settings = {
config = {
general = { general = {
gaps_in = 5; gaps_in = 5;
gaps_out = 5; gaps_out = 5;
border_size = 2; border_size = 2;
"col.active_border" = "rgba(${colors.base0E}ee) rgba(${colors.base0C}ee) 45deg"; "col.active_border" = lib.mkForce {
"col.inactive_border" = "rgba(${colors.base05}aa)"; colors = [
"rgba(${accent}ee)"
"rgba(${colors.base0C}ee)"
];
angle = 45;
};
layout = "dwindle"; layout = "dwindle";
}; };
@@ -31,26 +38,9 @@
}; };
}; };
animations = { animations.enabled = true;
enabled = true;
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
animation = [
"windows, 1, 7, myBezier"
"windowsOut, 1, 7, default, popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 6, default"
];
};
dwindle = {
pseudotile = true;
smart_split = true;
};
dwindle.smart_split = true;
master.new_status = "master"; master.new_status = "master";
misc = { misc = {
@@ -58,10 +48,32 @@
animate_mouse_windowdragging = true; animate_mouse_windowdragging = true;
enable_swallow = true; enable_swallow = true;
}; };
};
bind = [ curve = {
''$mainMod Shift, S, exec, ${lib.getExe pkgs.grim} -g "$(${lib.getExe pkgs.slurp})" - | ${lib.getExe pkgs.swappy} -f -'' _args = [
"myBezier"
{
type = "bezier";
points = [
[ 0.05 0.9 ]
[ 0.1 1.05 ]
];
}
]; ];
}; };
animation = [
{ leaf = "windows"; enabled = true; speed = 7; bezier = "myBezier"; }
{ leaf = "windowsOut"; enabled = true; speed = 7; bezier = "default"; style = "popin 80%"; }
{ leaf = "border"; enabled = true; speed = 10; bezier = "default"; }
{ leaf = "borderangle"; enabled = true; speed = 8; bezier = "default"; }
{ leaf = "fade"; enabled = true; speed = 7; bezier = "default"; }
{ leaf = "workspaces"; enabled = true; speed = 6; bezier = "default"; }
];
bind = [
(hyprLua.bind "SUPER + SHIFT + S" (hyprLua.exec ''${lib.getExe pkgs.grim} -g "$(${lib.getExe pkgs.slurp})" - | ${lib.getExe pkgs.swappy} -f -''))
];
}; };
} }
+4 -1
View File
@@ -80,6 +80,8 @@
in { in {
stylix = { stylix = {
enable = true; enable = true;
overlays.enable = false;
targets = { targets = {
hyprland.enable = false; hyprland.enable = false;
waybar.enable = false; waybar.enable = false;
@@ -87,6 +89,7 @@ in {
}; };
base16Scheme = "${pkgs.base16-schemes}/share/themes/eris.yaml"; base16Scheme = "${pkgs.base16-schemes}/share/themes/eris.yaml";
accent = "base0E";
polarity = "dark"; polarity = "dark";
image = pkgs.fetchurl { image = pkgs.fetchurl {
@@ -94,7 +97,7 @@ in {
sha256 = "0ypqnq7bsr2giq7nq1c3xrw2m0gkii9j5zhfp512r93wc96zvm50"; sha256 = "0ypqnq7bsr2giq7nq1c3xrw2m0gkii9j5zhfp512r93wc96zvm50";
}; };
iconTheme = { icons = {
enable = true; enable = true;
package = pkgs.pop-icon-theme; package = pkgs.pop-icon-theme;
dark = "Pop-Dark"; dark = "Pop-Dark";
+329
View File
@@ -0,0 +1,329 @@
{
osConfig,
config,
inputs,
pkgs,
lib,
...
}: {
home.packages = with pkgs; [
font-awesome
nerd-fonts.symbols-only
playerctl
cava
pulsemixer
];
programs.waybar = {
enable = true;
systemd.enable = true;
package = inputs.waybar.packages.${pkgs.stdenv.hostPlatform.system}.default;
settings.mainBar = {
modules-center = [
"group/left"
"group/center"
"group/right"
];
"group/left" = {
orientation = "inherit";
modules = [
"hyprland/workspaces"
"custom/sep-left"
"hyprland/language"
"keyboard-state"
];
};
"group/center" = {
orientation = "inherit";
modules = [
"cava"
"mpris"
];
};
"group/right" = {
orientation = "inherit";
modules = [
"tray"
"custom/sep-left"
"group/system"
"custom/sep-left"
"pulseaudio"
"custom/sep-left"
"battery"
"clock"
];
};
cava = {
bars = 9;
bar_delimiter = 0;
stereo = false;
input_delay = 0;
format-icons = [" " "▁" "▂" "▃" "▄" "▅" "▆" "▇" "█"];
};
clock = {
tooltip = false;
interval = 5;
format = "{:L%d %b - %H:%M %a}";
};
pulseaudio = {
format = "{icon} {volume}%";
format-icons = {
headphone = "";
hands-free = "";
headset = "";
phone = "";
phone-muted = "";
portable = "";
car = "";
default = ["" ""];
};
on-click = "ghostty --title=pulsemixer -e pulsemixer";
};
mpris = {
format = "{dynamic}";
dynamic-len = if osConfig.host.laptop then 16 else 32;
dynamic-order = [ "title" "artist" "album" ];
};
battery = {
interval = 5;
states = {
warning = 30;
critical = 15;
};
format = "{icon} {capacity}% | ";
format-icons = {
default = ["󰂎" "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"];
charging = ["󰢟" "󰢜" "󰂆" "󰂇" "󰂈" "󰢝" "󰂉" "󰢞" "󰂊" "󰂋" "󰂅"];
};
};
"custom/sep-left" = {
format = " | ";
tooltip = false;
};
"keyboard-state" = {
capslock = true;
format = "{icon}";
format-icons = {
locked = "CAPS";
unlocked = "";
};
};
"hyprland/language" = {
format-en = "en";
format-ru = "ru";
};
"group/system" = {
orientation = "inherit";
drawer = {
transition-duration = 500;
transition-left-to-right = false;
};
modules = [
"network"
"custom/mem"
"cpu"
"temperature"
];
};
network = {
format = "{ifname}";
format-wifi = " {essid} ({signalStrength}%)";
format-ethernet = "{ifname}";
format-disconnected = "";
tooltip-format = "{ipaddr}";
max-length = 50;
on-click = "ghostty --title=wifitui -e wifitui";
};
"custom/weather" = {
format = "{}";
tooltip = true;
interval = 1800;
exec = "python3 $HOME/.config/waybar/scripts/wttr.py";
return-type = "json";
};
"custom/mem" = {
format = "{} ";
interval = 3;
exec = "free -h | awk '/Mem:/{printf $3}'";
tooltip = false;
};
cpu = {
interval = 2;
format = "{usage}% ";
min-length = 6;
};
temperature = {
hwmon-path = "/sys/class/hwmon/hwmon5/temp1_input";
critical-threshold = 80;
format = "{temperatureC}°C {icon}";
format-icons = ["" "" "" "" ""];
tooltip = false;
};
};
style = let
colors = config.lib.stylix.colors.withHashtag;
accent = colors.${config.stylix.accent};
scssFile = pkgs.writeText "waybar.scss" /*scss*/ ''
window#waybar {
background: transparent;
color: ${colors.base05};
font-weight: bold;
font-size: .85em;
& > * { padding: 0 0 6px 0; }
}
.modules-center {
background: ${colors.base01}CC;
border-radius: 12px;
padding: 10px;
box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.4);
}
#left,
#right,
#center {
background: ${colors.base02};
padding: 0 2px;
margin: 0 8px;
border-radius: 8px;
}
#left { margin-left: 0; }
#right { margin-right: 0; }
#clock { padding-right: 10px; }
#cava { padding: 0 10px; }
#language { padding: 8px; }
#workspaces button {
color: ${colors.base05};
padding: 0 2px;
border-radius: 999px;
border: 1pt solid transparent;
min-width: 20px;
&:hover { background: ${colors.base03}; }
&.active {
background: ${accent};
color: ${colors.base00};
min-width: 25px;
&:hover {
border-color: ${accent};
background: ${colors.base03};
color: ${accent};
}
}
}
#mpris {
border-radius: 8px;
padding: 4px;
&:hover { background: ${colors.base03}; }
&.playing {
border: 2px solid ${accent};
padding: 2px;
}
}
#tray {
widget {
border: 1pt solid transparent;
&:hover { background: ${colors.base03}; }
& > image { padding: 8px; }
}
& > .passive { border-color: ${colors.base03}; }
& > .needs-attention { border-color: ${colors.base09}; }
}
#pulseaudio {
&:hover { background: ${colors.base03}; }
&.muted {
background: ${colors.base08};
color: ${colors.base01};
&:hover {
color: ${colors.base08};
background: ${colors.base03};
}
}
}
#network {
&:hover { background: ${colors.base02}; }
&.disconnected {
color: ${colors.base00};
background: ${colors.base08};
}
}
#system .drawer-child > * {
margin-right: 4px
}
#keyboard-state label.locked {
color: ${colors.base08};
}
#battery {
&.plugged { color: ${colors.base0D}; }
&.charging { color: ${colors.base0B}; }
&:not(.charging) {
&.warning {
color: ${colors.base00};
background-color: ${colors.base09};
}
&.critical {
background-color: ${colors.base08};
color: ${colors.base00};
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
}
&.full {
color: ${colors.base00};
background: ${colors.base0B};
}
}
@keyframes blink {
to {
background-color: ${colors.base00};
color: ${colors.base08};
}
}
'';
cssFile = pkgs.runCommand "waybar.css" {
nativeBuildInputs = [ pkgs.dart-sass ];
} "sass ${scssFile} $out";
in builtins.readFile cssFile;
};
}
+2 -1
View File
@@ -22,6 +22,7 @@
../modules/user.nix ../modules/user.nix
./${name}/modules/git.nix ./${name}/modules/git.nix
./${name}/modules/style.nix ./${name}/modules/style.nix
./${name}/modules/waybar.nix
./${name}/home.nix ./${name}/home.nix
]; ];
@@ -56,7 +57,7 @@
services.greetd = let services.greetd = let
tuigreet = lib.getExe pkgs.tuigreet; tuigreet = lib.getExe pkgs.tuigreet;
session = lib.getExe inputs.hyprland.packages.${pkgs.system}.default; session = lib.getExe' inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.default "start-hyprland";
in { in {
enable = true; enable = true;
settings = { settings = {
+7 -4
View File
@@ -1,10 +1,13 @@
{ pkgs, ... }: { { pkgs, ... }: {
imports = [
../../modules/user/packages/tex.nix
];
programs.hyprlock.enable = true; programs.hyprlock.enable = true;
home.packages = with pkgs; [ home.packages = with pkgs; [
vivaldi android-studio
(vivaldi.override {
proprietaryCodecs = true;
enableWidevine = true;
})
weechat
insomnia
]; ];
xdg.mimeApps = { xdg.mimeApps = {
+1 -1
View File
@@ -3,7 +3,7 @@
enable = true; enable = true;
settings.user = { settings.user = {
name = "Sweetbread"; name = "Sweetbread";
email = "risdeveau@codrs.ru"; email = "risdeveau@lair.moe";
}; };
}; };
} }
+142 -53
View File
@@ -1,26 +1,98 @@
{ pkgs, lib, config, inputs, ... }: { { pkgs, lib, config, osConfig, inputs, ... }: {
wayland.windowManager.hyprland = let wayland.windowManager.hyprland = let
colors = config.lib.stylix.colors; colors = config.lib.stylix.colors;
accent = colors.${config.stylix.accent};
hyprLua = import ../../../modules/user/hyprland/lua.nix { inherit lib; };
wallpaper_changer = pkgs.writers.writePython3Bin "wallpaper_changer" { wallpaper_changer = pkgs.writers.writePython3Bin "wallpaper_changer" {
libraries = [ pkgs.python3Packages.requests ]; libraries = [ pkgs.python3Packages.requests ];
flakeIgnore = [ "E501" "E111" "E701" "E241" "E731" ]; flakeIgnore = [ "E111" "E121" "E241" "E501" "E701" "E731" ];
} /*py*/ '' } /*py*/ ''
import requests as requests import requests as requests
from random import choice from random import choice
from os import system, mkdir, listdir from os import listdir, makedirs, remove, replace, system
from os.path import exists from os.path import exists
from subprocess import run
notify_id = None
def notify(text, progress=None, expire_time=5000):
global notify_id
command = [
"${pkgs.libnotify}/bin/notify-send",
"--app-name", "wallpaper_changer",
"--print-id",
"--expire-time", str(expire_time),
]
if notify_id:
command.extend(["--replace-id", str(notify_id)])
if progress is not None:
command.extend(["--hint", f"int:value:{progress}"])
command.extend(["Wallpaper", text])
result = run(command, capture_output=True, text=True, check=False)
output = result.stdout.strip()
if output.isdigit():
notify_id = output
def download_with_progress(link, destination):
temporary = f"{destination}.part"
downloaded = 0
last_progress = -1
response = None
try:
response = requests.get(link, stream=True)
response.raise_for_status()
total = int(response.headers.get("content-length", 0))
with open(temporary, "wb") as file:
for chunk in response.iter_content(chunk_size=256 * 1024):
if not chunk:
continue
file.write(chunk)
downloaded += len(chunk)
if total <= 0:
continue
progress = min(100, downloaded * 100 // total)
if progress == 100 or progress >= last_progress + 2:
notify(f"Downloading... {progress}%", progress, 0)
last_progress = progress
replace(temporary, destination)
except Exception:
if exists(temporary):
remove(temporary)
raise
finally:
if response is not None:
response.close()
notify = lambda s: system(f"notify-desktop Wallpaper '{s}'")
folder = "${config.home.homeDirectory}/Wallpapers" folder = "${config.home.homeDirectory}/Wallpapers"
url = "https://wallhaven.cc/api/v1/collections/sweetbread/1764377" 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: with open("${config.sops.secrets."tokens/apis/wallhaven".path}") as f:
token = f.read() token = f.read()
notify("Updating wallpaper!") filename = None
notify("Updating wallpaper...", 0)
try: try:
json = requests.get(url, params={'apikey': token}).json() response = requests.get(url, params={'apikey': token})
response.raise_for_status()
json = response.json()
wallpaper = choice(json['data']) wallpaper = choice(json['data'])
link = wallpaper['path'] link = wallpaper['path']
@@ -31,32 +103,42 @@
else: ext = "png" else: ext = "png"
filename = f"{id}.{ext}" filename = f"{id}.{ext}"
destination = f"{folder}/{filename}"
if not exists(f"{folder}/{filename}"): if not exists(destination):
if not exists(folder): makedirs(folder, exist_ok=True)
mkdir(f"{folder}") notify("Downloading... 0%", 0, 0)
download_with_progress(link, destination)
notify("Downloaded", 100)
else:
notify("Using cached wallpaper", 100)
notify("Downloading...") except requests.exceptions.RequestException:
with open(f"{folder}/{filename}", 'wb') as f:
r = requests.get(link)
f.write(r.content)
except requests.exceptions.ConnectionError:
notify("Offline mode") notify("Offline mode")
try:
filename = choice(listdir(folder)) filename = choice(listdir(folder))
except (FileNotFoundError, IndexError):
notify("Offline mode and wallpaper cache is empty")
finally: finally:
system(f"${lib.getExe pkgs.swww} img {folder}/{filename} --transition-type center") if filename is not None:
notify("Applying wallpaper", 100)
system(f"awww img {folder}/{filename} --transition-type center")
''; '';
in { in {
settings = { settings = {
config = {
general = { general = {
gaps_in = 5; gaps_in = 2;
gaps_out = 10; gaps_out = 10;
border_size = 3; border_size = 3;
"col.active_border" = lib.mkForce "rgba(${colors.base0C}ee) rgba(${colors.base0B}ee) 45deg"; "col.active_border" = lib.mkForce {
"col.inactive_border" = lib.mkForce "rgba(${colors.base05}aa)"; colors = [
"rgba(${colors.base0C}aa)"
"rgba(${accent}aa)"
];
angle = 45;
};
layout = "dwindle"; layout = "dwindle";
}; };
@@ -70,33 +152,11 @@
new_optimizations = true; new_optimizations = true;
}; };
shadow = { shadow.enabled = false;
enabled = true;
range = 4;
render_power = 3;
};
};
animations = {
enabled = true;
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
animation = [
"windows, 1, 7, myBezier"
"windowsOut, 1, 7, default, popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 6, default"
];
};
dwindle = {
pseudotile = true;
smart_split = true;
}; };
animations.enabled = true;
dwindle.smart_split = true;
master.new_status = "master"; master.new_status = "master";
misc = { misc = {
@@ -104,17 +164,46 @@
animate_mouse_windowdragging = true; animate_mouse_windowdragging = true;
enable_swallow = true; enable_swallow = true;
}; };
};
exec-once = [ curve = {
"${lib.getExe wallpaper_changer}" _args = [
"myBezier"
{
type = "bezier";
points = [
[ 0.05 0.9 ]
[ 0.1 1.05 ]
];
}
];
};
animation = [
{ leaf = "windows"; enabled = true; speed = 7; bezier = "myBezier"; }
{ leaf = "windowsOut"; enabled = true; speed = 7; bezier = "default"; style = "popin 80%"; }
{ leaf = "border"; enabled = true; speed = 10; bezier = "default"; }
{ leaf = "borderangle"; enabled = true; speed = 8; bezier = "default"; }
{ leaf = "fade"; enabled = true; speed = 7; bezier = "default"; }
{ leaf = "workspaces"; enabled = true; speed = 6; bezier = "default"; }
];
on = [
(hyprLua.onStart [ "${lib.getExe wallpaper_changer}" ])
];
workspace_rule = [
{
workspace = "2";
layout = "scrolling";
}
]; ];
bind = [ bind = [
" , Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m active -m output" (hyprLua.bind "Print" (hyprLua.exec "${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m active -m output"))
"CTRL, Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m region" (hyprLua.bind "CTRL + Print" (hyprLua.exec "${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m region"))
"ALT , Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m active -m window" (hyprLua.bind "ALT + Print" (hyprLua.exec "${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m active -m window"))
(hyprLua.bind "SUPER + W" (hyprLua.exec "${lib.getExe wallpaper_changer}"))
"$mainMod, W, exec, ${lib.getExe wallpaper_changer}"
]; ];
}; };
}; };
+26 -3
View File
@@ -79,10 +79,25 @@
cp Kurumi $out/share/icons -r cp Kurumi $out/share/icons -r
''; '';
}; };
pixeloid = pkgs.stdenvNoCC.mkDerivation {
name = "Pixeloid";
dontUnpack = true;
src = pkgs.fetchurl {
url = "https://lair.moe/static/font/Pixeloid/otf/Sans.otf";
hash = "sha256-GTf2BnhH0Pzc3Bbevmd+mA6t8lZFMUxX9wkSqWicuSc=";
};
installPhase = ''
install -Dm644 "$src" "$out/share/fonts/opentype/Sans.otf"
'';
};
in { in {
# {
stylix = { stylix = {
enable = true; enable = true;
overlays.enable = false;
targets = { targets = {
hyprpaper.enable = lib.mkForce false; hyprpaper.enable = lib.mkForce false;
waybar.enable = false; waybar.enable = false;
@@ -90,6 +105,7 @@ in {
}; };
base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml"; base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
accent = "base0B";
polarity = "dark"; polarity = "dark";
image = pkgs.fetchurl { image = pkgs.fetchurl {
@@ -97,7 +113,7 @@ in {
sha256 = "sha256-u4d21a0Kh5OHEzQMSQ7+ey/Va2ftS1DefrOQFahaeC4="; sha256 = "sha256-u4d21a0Kh5OHEzQMSQ7+ey/Va2ftS1DefrOQFahaeC4=";
}; };
iconTheme = { icons = {
enable = true; enable = true;
package = pkgs.pop-icon-theme; package = pkgs.pop-icon-theme;
dark = "Pop-Dark"; dark = "Pop-Dark";
@@ -120,6 +136,11 @@ in {
package = (pkgs.google-fonts.override { fonts = [ "Gabriela" ]; }); package = (pkgs.google-fonts.override { fonts = [ "Gabriela" ]; });
}; };
sansSerif = {
name = "Pixeloid Sans";
package = pixeloid;
};
emoji = { emoji = {
package = pkgs.noto-fonts-monochrome-emoji; package = pkgs.noto-fonts-monochrome-emoji;
name = "Noto Emoji"; name = "Noto Emoji";
@@ -142,9 +163,11 @@ in {
}; };
gtk = { gtk = {
gtk4.extraConfig = { gtk4 = {
extraConfig = {
gtk-application-prefer-dark-theme = true; gtk-application-prefer-dark-theme = true;
}; };
};
gtk3.extraConfig = { gtk3.extraConfig = {
gtk-application-prefer-dark-theme = true; gtk-application-prefer-dark-theme = true;
}; };
+360
View File
@@ -0,0 +1,360 @@
{
osConfig,
config,
inputs,
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;
package = inputs.waybar.packages.${pkgs.stdenv.hostPlatform.system}.default;
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.layer_rule = [
{
match.namespace = "waybar";
blur = true;
}
];
}