Compare commits

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