Compare commits

..
142 Commits
Author SHA1 Message Date
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 950 additions and 3156 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ creation_rules:
key_groups:
- age:
- *primary
- path_regex: host/(Rias|Senko|Inaho|Eclipse)/secrets/.+$
- path_regex: host/(Rias|Senko|Eclipse)/secrets/.+$
key_groups:
- age:
- *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
+267 -273
View File
@@ -3,17 +3,15 @@
"aagl": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": [
"nixpkgs"
],
"nixpkgs": "nixpkgs",
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1789138122,
"narHash": "sha256-mh+ZiGCtHAo0xIi1yaNjHsftfnlWz9JiYwHCyT16yIE=",
"lastModified": 1771029844,
"narHash": "sha256-fY6UGNKCQcYkflnkdzNRbuGNJiavQzokZjMCMVfUgCg=",
"owner": "ezKEa",
"repo": "aagl-gtk-on-nix",
"rev": "d82d6d6f66caf4b63fb154e62fad83c627874127",
"rev": "c3b9c0ab9e24d1648ed29040164704a1cd8fa3c9",
"type": "github"
},
"original": {
@@ -25,9 +23,7 @@
"ags": {
"inputs": {
"astal": "astal",
"nixpkgs": [
"nixpkgs"
]
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1744557573,
@@ -64,11 +60,11 @@
]
},
"locked": {
"lastModified": 1784368054,
"narHash": "sha256-zF1iJkBQSDWmRO4/LEeHR1SpKY0lqZaxkoQJpPS9K9U=",
"lastModified": 1762356719,
"narHash": "sha256-qwd/xdoOya1m8FENle+4hWnydCtlXUWLAW/Auk6WL7s=",
"owner": "hyprwm",
"repo": "aquamarine",
"rev": "9b5f14d9483445e766294eb8fbe0b8f370269ed0",
"rev": "6d0b3567584691bf9d8fedb5d0093309e2f979c7",
"type": "github"
},
"original": {
@@ -136,11 +132,11 @@
"base16-helix": {
"flake": false,
"locked": {
"lastModified": 1776754714,
"narHash": "sha256-E3OAK27smtATTmX45uoTSRsVD+Y+ZiVVfgM/tjpbtYg=",
"lastModified": 1760703920,
"narHash": "sha256-m82fGUYns4uHd+ZTdoLX2vlHikzwzdu2s2rYM2bNwzw=",
"owner": "tinted-theming",
"repo": "base16-helix",
"rev": "4d508123037e7851ad36ebf7d9c48b0e9e1eb581",
"rev": "d646af9b7d14bff08824538164af99d0c521b185",
"type": "github"
},
"original": {
@@ -166,34 +162,14 @@
"type": "github"
}
},
"disko": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1781152676,
"narHash": "sha256-RxWs5ND31KzTG7wvMM+PMfUjyNpmIEr999lqNARaM5o=",
"owner": "nix-community",
"repo": "disko",
"rev": "ff8702b4de27f72b4c78573dfb89ec74e36abdf1",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "disko",
"type": "github"
}
},
"firefox-gnome-theme": {
"flake": false,
"locked": {
"lastModified": 1783570805,
"narHash": "sha256-ptl5aRlCv9/uRSv2u8Hq8UFVFeZ6Q/bT049bpqNgc3w=",
"lastModified": 1764873433,
"narHash": "sha256-1XPewtGMi+9wN9Ispoluxunw/RwozuTRVuuQOmxzt+A=",
"owner": "rafaelmardojai",
"repo": "firefox-gnome-theme",
"rev": "5602ed62d638142c1ab31dccd01dfbfb28841225",
"rev": "f7ffd917ac0d253dbd6a3bf3da06888f57c69f92",
"type": "github"
},
"original": {
@@ -221,27 +197,11 @@
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_3": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github"
},
"original": {
@@ -258,11 +218,11 @@
]
},
"locked": {
"lastModified": 1782949081,
"narHash": "sha256-vp6Y/Grm98ESt6ceOkWiHWyZRDV3J1RID4w+6NWK9yA=",
"lastModified": 1767609335,
"narHash": "sha256-feveD98mQpptwrAEggBQKJTYbvwwglSbOv53uCfH9PY=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "17c9d6cdfc60c64f4ee8d306f9bc0b4ccb51481e",
"rev": "250481aafeb741edfe23d29195671c19b36b6dca",
"type": "github"
},
"original": {
@@ -305,47 +265,47 @@
"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": {
"flake": false,
"locked": {
"host": "gitlab.gnome.org",
"lastModified": 1776175984,
"narHash": "sha256-RJFlFW8GiMei6oqUGrMkGEvVqOH8U7Q8abc1yK4VKD8=",
"lastModified": 1767737596,
"narHash": "sha256-eFujfIUQDgWnSJBablOuG+32hCai192yRdrNHTv0a+s=",
"owner": "GNOME",
"repo": "gnome-shell",
"rev": "e0fdc4c13250e9a9b8ea9594c83925274f4a5dca",
"rev": "ef02db02bf0ff342734d525b5767814770d85b49",
"type": "gitlab"
},
"original": {
"host": "gitlab.gnome.org",
"owner": "GNOME",
"ref": "50.1",
"ref": "gnome-49",
"repo": "gnome-shell",
"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": {
"inputs": {
"nixpkgs": [
@@ -353,11 +313,11 @@
]
},
"locked": {
"lastModified": 1789320570,
"narHash": "sha256-1Js4AJiWLV7U1SF3ok0J2tKbBEJYE5YpElGU+7fMbfo=",
"lastModified": 1771037579,
"narHash": "sha256-NX5XuhGcsmk0oEII2PEtMRgvh2KaAv3/WWQsOpxAgR4=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "87b3c74df02a2b2e691a24f3c82774f48a70c1bd",
"rev": "05e6dc0f6ed936f918cb6f0f21f1dad1e4c53150",
"type": "github"
},
"original": {
@@ -382,11 +342,11 @@
]
},
"locked": {
"lastModified": 1776511930,
"narHash": "sha256-fCpwFiTW0rT7oKJqr3cqHMnkwypSwQKpbtUEtxdkgrM=",
"lastModified": 1753964049,
"narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=",
"owner": "hyprwm",
"repo": "hyprcursor",
"rev": "39435900785d0c560c6ae8777d29f28617d031ef",
"rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5",
"type": "github"
},
"original": {
@@ -411,11 +371,11 @@
]
},
"locked": {
"lastModified": 1782566056,
"narHash": "sha256-haEZcHzYrePnjFOYSWTbxm/Nrla0aPslJfmvdCvqtVc=",
"lastModified": 1762462052,
"narHash": "sha256-6roLYzcDf4V38RUMSqycsOwAnqfodL6BmhRkUtwIgdA=",
"owner": "hyprwm",
"repo": "hyprgraphics",
"rev": "c6e7b9f673f4360bc813d3dc75028f75ee88d3f8",
"rev": "ffc999d980c7b3bca85d3ebd0a9fbadf984a8162",
"type": "github"
},
"original": {
@@ -433,24 +393,23 @@
"hyprland-protocols": "hyprland-protocols",
"hyprlang": "hyprlang",
"hyprutils": "hyprutils",
"hyprwayland-scanner": "hyprwayland-scanner",
"hyprwire": "hyprwire",
"nixpkgs": "nixpkgs",
"hyprwayland-scanner": "hyprwayland-scanner_2",
"nixpkgs": "nixpkgs_4",
"pre-commit-hooks": "pre-commit-hooks",
"systems": "systems",
"xdph": "xdph"
},
"locked": {
"lastModified": 1785170029,
"narHash": "sha256-8CKDx282HhxlD1pwXPnC4uK29Abn1Jsnh7LgPzeIXxI=",
"lastModified": 1762731096,
"narHash": "sha256-Kma5MxOipSBamO6DnwBeqJNjJ+VwEO73zh9h1hs/2Aw=",
"owner": "hyprwm",
"repo": "Hyprland",
"rev": "5c9377c15f85c50648f35ca5a213754f95b93ca0",
"rev": "967c3c7404d4fa00234e29c70df3e263386d2597",
"type": "github"
},
"original": {
"owner": "hyprwm",
"ref": "v0.56.1",
"ref": "v0.52.1-b",
"repo": "Hyprland",
"type": "github"
}
@@ -474,10 +433,6 @@
"hyprland",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprwayland-scanner"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
@@ -488,11 +443,11 @@
]
},
"locked": {
"lastModified": 1784196523,
"narHash": "sha256-ahtKMGXFJdlQNhatQm1+BBU/pGfGYnAqQt3vWvq4p8s=",
"lastModified": 1762465111,
"narHash": "sha256-dS13YZdWjgGGLBjpT4FHB6xf8I/WiAU+mgNWXsZgDUs=",
"owner": "hyprwm",
"repo": "hyprland-guiutils",
"rev": "a6ccb6cb112ed5a244c0191fb972347ecfa893e0",
"rev": "a415eba866a953f3096d661318f771aa0082eb98",
"type": "github"
},
"original": {
@@ -518,11 +473,11 @@
]
},
"locked": {
"lastModified": 1788563182,
"narHash": "sha256-e2Q7i5T+iQY0o/uxFNnXxWpXZ1e5f6VV4eHdKk7l6kc=",
"lastModified": 1770899531,
"narHash": "sha256-UBrWjh0DR8db60aLNkTnZTJ9F4kWK0Y7rUDNJC88W7A=",
"owner": "hyprwm",
"repo": "hyprland-plugins",
"rev": "722f15a77768eab13f01f5e5dce024bd2f61f270",
"rev": "e03c34ccd51280a44ea6d1f5c040cd81ecca25ed",
"type": "github"
},
"original": {
@@ -543,11 +498,11 @@
]
},
"locked": {
"lastModified": 1772460177,
"narHash": "sha256-/6G/MsPvtn7bc4Y32pserBT/Z4SUUdBd4XYJpOEKVR4=",
"lastModified": 1759610243,
"narHash": "sha256-+KEVnKBe8wz+a6dTLq8YDcF3UrhQElwsYJaVaHXJtoI=",
"owner": "hyprwm",
"repo": "hyprland-protocols",
"rev": "1cb6db5fd6bb8aee419f4457402fa18293ace917",
"rev": "bd153e76f751f150a09328dbdeb5e4fab9d23622",
"type": "github"
},
"original": {
@@ -572,11 +527,11 @@
]
},
"locked": {
"lastModified": 1777320127,
"narHash": "sha256-Qu+Wf2Bp5qUjyn2YpZNq8a7JyzTGowhT1knrwE38a9U=",
"lastModified": 1758927902,
"narHash": "sha256-LZgMds7M94+vuMql2bERQ6LiFFdhgsEFezE4Vn+Ys3A=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "090117506ddc3d7f26e650ff344d378c2ec329cc",
"rev": "4dafa28d4f79877d67a7d1a654cddccf8ebf15da",
"type": "github"
},
"original": {
@@ -607,11 +562,7 @@
"hyprland-guiutils",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprland-guiutils",
"hyprwayland-scanner"
],
"hyprwayland-scanner": "hyprwayland-scanner",
"nixpkgs": [
"hyprland",
"hyprland-guiutils",
@@ -624,11 +575,11 @@
]
},
"locked": {
"lastModified": 1782554491,
"narHash": "sha256-+p3MlyN/nqRefcf2IckPlGRUn9+hielqpS9XClbLleM=",
"lastModified": 1762463729,
"narHash": "sha256-2fYkU/mdz8WKY3dkDPlE/j6hTxIwqultsx4gMMsMns0=",
"owner": "hyprwm",
"repo": "hyprtoolkit",
"rev": "bdba25ced39ea39ab004a8f31593ba0b0ff1ca35",
"rev": "88483bdee5329ec985f0c8f834c519cd18cfe532",
"type": "github"
},
"original": {
@@ -649,11 +600,11 @@
]
},
"locked": {
"lastModified": 1784323413,
"narHash": "sha256-XnAVV+H4f8Xdv0yZcSwJ5kCjLyE8fHxPeLX6a3HSrAU=",
"lastModified": 1762387740,
"narHash": "sha256-gQ9zJ+pUI4o+Gh4Z6jhJll7jjCSwi8ZqJIhCE2oqwhQ=",
"owner": "hyprwm",
"repo": "hyprutils",
"rev": "5f03477ab3a005ff27c527486f551883535aea2f",
"rev": "926689ddb9c0a8787e58c02c765a62e32d63d1f7",
"type": "github"
},
"original": {
@@ -666,19 +617,23 @@
"inputs": {
"nixpkgs": [
"hyprland",
"hyprland-guiutils",
"hyprtoolkit",
"nixpkgs"
],
"systems": [
"hyprland",
"hyprland-guiutils",
"hyprtoolkit",
"systems"
]
},
"locked": {
"lastModified": 1777159683,
"narHash": "sha256-Jxixw6wZphUp+nHYxOKUYSckL17QMBx2d5Zp0rJHr1g=",
"lastModified": 1755184602,
"narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=",
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"rev": "b8632713a6beaf28b56f2a7b0ab2fb7088dbb404",
"rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d",
"type": "github"
},
"original": {
@@ -687,12 +642,8 @@
"type": "github"
}
},
"hyprwire": {
"hyprwayland-scanner_2": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
@@ -703,30 +654,30 @@
]
},
"locked": {
"lastModified": 1778410714,
"narHash": "sha256-o6RzFj4nJXaPRY7EM01siuCQeT41RfwwmcmFQqwFJJg=",
"lastModified": 1755184602,
"narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=",
"owner": "hyprwm",
"repo": "hyprwire",
"rev": "85148a8e612808cf5ddb25d0b3c5840f3498a7dc",
"repo": "hyprwayland-scanner",
"rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprwire",
"repo": "hyprwayland-scanner",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1784356753,
"narHash": "sha256-12KrbMiWLcf8m7pCvAtZh1ZrgF85ZXDXvfR/fWTKy84=",
"owner": "NixOS",
"lastModified": 1770841267,
"narHash": "sha256-9xejG0KoqsoKEGp2kVbXRlEYtFFcDTHjidiuX8hGO44=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "61b7c44c4073f0b827768aff0049561b5110ea5a",
"rev": "ec7c70d12ce2fc37cb92aff673dcdca89d187bae",
"type": "github"
},
"original": {
"owner": "NixOS",
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
@@ -734,43 +685,59 @@
},
"nixpkgs-pinned": {
"locked": {
"lastModified": 1779971959,
"narHash": "sha256-R5nauXyqyfRUFiZycFFZdkF7wl6eaUpPLst35+2nJQY=",
"lastModified": 1764517877,
"narHash": "sha256-pp3uT4hHijIC8JUK5MEqeAWmParJrgBVzHLNfJDZxg4=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "ec942ba042dad5ef097e2ef3a3effc034241f011",
"rev": "2d293cbfa5a793b4c50d17c05ef9e385b90edf6c",
"type": "github"
},
"original": {
"owner": "nixos",
"repo": "nixpkgs",
"rev": "ec942ba042dad5ef097e2ef3a3effc034241f011",
"rev": "2d293cbfa5a793b4c50d17c05ef9e385b90edf6c",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1789114715,
"narHash": "sha256-ugpsyk3NM2s87vXfUiIIiibbJ4Pp0JPS5p/3mfs+q+c=",
"lastModified": 1770770419,
"narHash": "sha256-iKZMkr6Cm9JzWlRYW/VPoL0A9jVKtZYiU4zSrVeetIs=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "21a67dc470149f337cecafbe965d8d252a390518",
"rev": "6c5e707c6b5339359a9a9e215c5e66d6d802fd7a",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-26.05",
"ref": "nixos-25.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1789149629,
"narHash": "sha256-H6GwaZzZf+4npqv0tph94w9tZddSjFjmQrVsW0z78uk=",
"lastModified": 1744536153,
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1743583204,
"narHash": "sha256-F7n4+KOIfWrwoQjXrL2wD9RhFYLs2/GGe/MQY1sSdlE=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "eaad089433ca2bb662274377d33df3d0e51ef28b",
"rev": "2c8d3f48d33929642c1c12cd243df4cc7d2ce434",
"type": "github"
},
"original": {
@@ -780,6 +747,86 @@
"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": 1771008912,
"narHash": "sha256-gf2AmWVTs8lEq7z/3ZAsgnZDhWIckkb+ZnAo5RzSxJg=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "a82ccc39b39b621151d6732718e3e250109076fa",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_6": {
"locked": {
"lastModified": 1770380644,
"narHash": "sha256-P7dWMHRUWG5m4G+06jDyThXO7kwSk46C1kgjEWcybkE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ae67888ff7ef9dff69b3cf0cc0fbfbcd3a722abe",
"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": 1768875095,
"narHash": "sha256-dYP3DjiL7oIiiq3H65tGIXXIT1Waiadmv93JS0sS+8A=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ed142ab1b3a092c4d149245d0c4126a5d7ea00b0",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nur": {
"inputs": {
"flake-parts": [
@@ -792,11 +839,11 @@
]
},
"locked": {
"lastModified": 1785549842,
"narHash": "sha256-DCwBZmGsySF7oKGTRgEv2HvpxVXkHT+38VhTM76k0B4=",
"lastModified": 1767810917,
"narHash": "sha256-ZKqhk772+v/bujjhla9VABwcvz+hB2IaRyeLT6CFnT0=",
"owner": "nix-community",
"repo": "NUR",
"rev": "a9f987b57594e845e3e5cdd423b9a70846d70308",
"rev": "dead29c804adc928d3a69dfe7f9f12d0eec1f1a4",
"type": "github"
},
"original": {
@@ -808,17 +855,18 @@
"pre-commit-hooks": {
"inputs": {
"flake-compat": "flake-compat_2",
"gitignore": "gitignore",
"nixpkgs": [
"hyprland",
"nixpkgs"
]
},
"locked": {
"lastModified": 1784288435,
"narHash": "sha256-ReRHaLgr/uVqdD8afFSn+myXIfpHeOhP0yYe0TJqAA8=",
"lastModified": 1762441963,
"narHash": "sha256-j+rNQ119ffYUkYt2YYS6rnd6Jh/crMZmbqpkGLXaEt0=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "43b3c1ab9d40fb1dbb008f451988a91e375825e9",
"rev": "8e7576e79b88c16d7ee3bbd112c8d90070832885",
"type": "github"
},
"original": {
@@ -831,34 +879,27 @@
"inputs": {
"aagl": "aagl",
"ags": "ags",
"disko": "disko",
"helix-steel": "helix-steel",
"home-manager": "home-manager",
"hyprland": "hyprland",
"hyprland-plugins": "hyprland-plugins",
"nixpkgs": "nixpkgs_2",
"nixpkgs": "nixpkgs_5",
"nixpkgs-pinned": "nixpkgs-pinned",
"nixpkgs-stable": "nixpkgs-stable",
"sops-nix": "sops-nix",
"stylix": "stylix",
"waybar": "waybar",
"yazi": "yazi",
"yazi-plugins": "yazi-plugins"
"yazi": "yazi"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": [
"aagl",
"nixpkgs"
]
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1785476452,
"narHash": "sha256-/CXwCFPS41rb/JI2VitKCgVK6V5E6/sfw5ke3B9zyVQ=",
"lastModified": 1770952264,
"narHash": "sha256-CjymNrJZWBtpavyuTkfPVPaZkwzIzGaf0E/3WgcwM14=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "6ef009bf4c4873cdc1a621826722bdea7c03e62c",
"rev": "ec6a3d5cdf14bb5a1dd03652bd3f6351004d2188",
"type": "github"
},
"original": {
@@ -868,27 +909,6 @@
}
},
"rust-overlay_2": {
"inputs": {
"nixpkgs": [
"helix-steel",
"nixpkgs"
]
},
"locked": {
"lastModified": 1775358767,
"narHash": "sha256-f2eC+WIfhjevCPQILuV08i/kmKZzYZpUvkom/33VxCA=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "20fd44bc663daa53a2575e01293e24e681d62244",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"rust-overlay_3": {
"inputs": {
"nixpkgs": [
"yazi",
@@ -896,11 +916,11 @@
]
},
"locked": {
"lastModified": 1783320166,
"narHash": "sha256-l7C/OsjcnWDOk2K3ssj+SBduwL67LashjBqis9+t468=",
"lastModified": 1769091129,
"narHash": "sha256-Jj/vIHjiu4OdDIrDXZ3xOPCJrMZZKzhE2UIVXV/NYzY=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "20ee15370c9256669d66968b89ee20a4b0a4e673",
"rev": "131e22d6a6d54ab72aeef6a5a661ab7005b4c596",
"type": "github"
},
"original": {
@@ -911,16 +931,14 @@
},
"sops-nix": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
"nixpkgs": "nixpkgs_6"
},
"locked": {
"lastModified": 1788914643,
"narHash": "sha256-4GuMPW90JSxXWDPUB9M+1m7fYbe3H0apOd86/zBQ2Kw=",
"lastModified": 1770683991,
"narHash": "sha256-xVfPvXDf9QN3Eh9dV+Lw6IkWG42KSuQ1u2260HKvpnc=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "13616fff713a9f94055c66f15687ebdc17a335df",
"rev": "8b89f44c2cc4581e402111d928869fe7ba9f7033",
"type": "github"
},
"original": {
@@ -938,22 +956,21 @@
"firefox-gnome-theme": "firefox-gnome-theme",
"flake-parts": "flake-parts",
"gnome-shell": "gnome-shell",
"nixpkgs": [
"nixpkgs"
],
"nixpkgs": "nixpkgs_7",
"nur": "nur",
"systems": "systems_2",
"tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty",
"tinted-schemes": "tinted-schemes",
"tinted-tmux": "tinted-tmux",
"tinted-zed": "tinted-zed"
},
"locked": {
"lastModified": 1787771653,
"narHash": "sha256-DkkJSBOXWV/mja5Vy8az5g1KpZlsbUwlmH0BsQhowaQ=",
"lastModified": 1770914701,
"narHash": "sha256-QHFYyngohNhih4w+3IqQty5DV+p1txsx1kkk6XJWar8=",
"owner": "danth",
"repo": "stylix",
"rev": "5e3809851f486e7fc7e84b40f174c74b60ecc784",
"rev": "db03fed72e5ca02be34e1d24789345a943329738",
"type": "github"
},
"original": {
@@ -979,16 +996,15 @@
},
"systems_2": {
"locked": {
"lastModified": 1774449309,
"narHash": "sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w=",
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "c29398b59d2048c4ab79345812849c9bd15e9150",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"ref": "future-26.11",
"repo": "default",
"type": "github"
}
@@ -1008,6 +1024,23 @@
"type": "github"
}
},
"tinted-foot": {
"flake": false,
"locked": {
"lastModified": 1726913040,
"narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=",
"owner": "tinted-theming",
"repo": "tinted-foot",
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-foot",
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
"type": "github"
}
},
"tinted-kitty": {
"flake": false,
"locked": {
@@ -1027,11 +1060,11 @@
"tinted-schemes": {
"flake": false,
"locked": {
"lastModified": 1785153830,
"narHash": "sha256-fNdfCTeCXU3tZG3TMincd+u68qBHQgCr2Ljr/M1mWP0=",
"lastModified": 1767710407,
"narHash": "sha256-+W1EB79Jl0/gm4JqmO0Nuc5C7hRdp4vfsV/VdzI+des=",
"owner": "tinted-theming",
"repo": "schemes",
"rev": "9bd28ed313560db3c5b605c63bc4e309e78e3fc8",
"rev": "2800e2b8ac90f678d7e4acebe4fa253f602e05b2",
"type": "github"
},
"original": {
@@ -1043,11 +1076,11 @@
"tinted-tmux": {
"flake": false,
"locked": {
"lastModified": 1785031658,
"narHash": "sha256-mZp9O2LjzdMzlqQF3l3fjqsuPBzXy+1qTfBEUGjTlpk=",
"lastModified": 1767489635,
"narHash": "sha256-e6nnFnWXKBCJjCv4QG4bbcouJ6y3yeT70V9MofL32lU=",
"owner": "tinted-theming",
"repo": "tinted-tmux",
"rev": "5d2c67f61ea7af36f16865ab6d541cdba41dc257",
"rev": "3c32729ccae99be44fe8a125d20be06f8d7d8184",
"type": "github"
},
"original": {
@@ -1059,11 +1092,11 @@
"tinted-zed": {
"flake": false,
"locked": {
"lastModified": 1785030526,
"narHash": "sha256-klZf8UviewRkxuu74Bhbq6tqy7oxebQC7UVRWbbtQxU=",
"lastModified": 1767488740,
"narHash": "sha256-wVOj0qyil8m+ouSsVZcNjl5ZR+1GdOOAooAatQXHbuU=",
"owner": "tinted-theming",
"repo": "base16-zed",
"rev": "16f5a8adf4a6b1310d0a61ab172de963e8f76a02",
"rev": "11abb0b282ad3786a2aae088d3a01c60916f2e40",
"type": "github"
},
"original": {
@@ -1072,27 +1105,6 @@
"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": {
"inputs": {
"hyprland-protocols": [
@@ -1121,11 +1133,11 @@
]
},
"locked": {
"lastModified": 1784371182,
"narHash": "sha256-S8A1lezEalltWcCp3gAic5lssS0xTSISK6fKODefhOk=",
"lastModified": 1761431178,
"narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=",
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"rev": "08d99f727944dd15e4740090305e31c5fb92a50a",
"rev": "4b8801228ff958d028f588f0c2b911dbf32297f9",
"type": "github"
},
"original": {
@@ -1137,17 +1149,15 @@
"yazi": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": [
"nixpkgs"
],
"rust-overlay": "rust-overlay_3"
"nixpkgs": "nixpkgs_8",
"rust-overlay": "rust-overlay_2"
},
"locked": {
"lastModified": 1789171366,
"narHash": "sha256-b7B5VQC96NJx0/q5pTVWqgGjyCiO0Cz1aPfVJcBXLfA=",
"lastModified": 1770959024,
"narHash": "sha256-r2fZFW+xZxEdyORsAipCrnuxQblGGldtZcx0iSQI1ZQ=",
"owner": "sxyazi",
"repo": "yazi",
"rev": "b8973fb4c2b9b184aad03cfc717c1fefe4140c40",
"rev": "13bdb164a473091b46e857d37599e7e1ae22665e",
"type": "github"
},
"original": {
@@ -1155,22 +1165,6 @@
"repo": "yazi",
"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",
+13 -61
View File
@@ -10,7 +10,7 @@
"https://yazi.cachix.org"
];
extra-trusted-public-keys = [
"main:tR2gNhCBJHKAlVgohPNHBhGnWL55tB8SxXmMWJe5lo8="
"main:kpwMe+9BsGJ/IUb7i3iadaV38y5/Yuqoct0mf7wI9ds="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"ezkea.cachix.org-1:ioBmUbJTZIKsHmWWXPe1FSFbeVe+afhfgqgTSNd34eI="
@@ -19,72 +19,25 @@
};
inputs = {
aagl = {
url = "github:ezKEa/aagl-gtk-on-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
aagl.url = "github:ezKEa/aagl-gtk-on-nix";
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
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 = {
url = "github:Aylur/ags/3ed9737bdbc8fc7a7c7ceef2165c9109f336bff6";
inputs.nixpkgs.follows = "nixpkgs";
};
disko = {
url = "github:nix-community/disko";
inputs.nixpkgs.follows = "nixpkgs";
};
helix-steel = {
url = "github:mattwparas/helix/steel-event-system";
inputs.nixpkgs.follows = "nixpkgs";
hyprland.url = "github:hyprwm/Hyprland/v0.52.1-b";
hyprland-plugins = {
url = "github:hyprwm/hyprland-plugins";
inputs.hyprland.follows = "hyprland";
};
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
hyprland = {
url = "github:hyprwm/Hyprland/v0.56.1";
# inputs.nixpkgs.follows = "nixpkgs";
};
hyprland-plugins = {
url = "github:hyprwm/hyprland-plugins";
inputs = {
hyprland.follows = "hyprland";
# nixpkgs.follows = "nixpkgs";
};
};
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-pinned.url = "github:nixos/nixpkgs/ec942ba042dad5ef097e2ef3a3effc034241f011";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-26.05";
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
stylix = {
url = "github:danth/stylix";
inputs.nixpkgs.follows = "nixpkgs";
};
waybar = {
url = "github:Alexays/Waybar";
inputs.nixpkgs.follows = "nixpkgs";
};
yazi = {
url = "github:sxyazi/yazi";
inputs.nixpkgs.follows = "nixpkgs";
};
yazi-plugins = {
url = "github:yazi-rs/plugins";
flake = false;
};
};
outputs = { self, nixpkgs, nixpkgs-stable, nixpkgs-pinned, home-manager, ... }@inputs: let
@@ -104,7 +57,6 @@
Senko = mkHost "Senko";
Eclipse = mkHost "Eclipse";
Impreza = mkHost "Impreza";
Inaho = mkHost "Inaho";
};
};
}
+22 -35
View File
@@ -1,40 +1,27 @@
{ 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 = {
monitor = [
{
output = "DP-3";
mode = "1920x1080@165";
position = "0x0";
scale = 1;
}
{
output = "HDMI-A-1";
mode = "preferred";
position = "-1080x0";
scale = 1;
transform = 1;
}
];
{ pkgs, lib, ... }: {
wayland.windowManager.hyprland = let
wallpaper = pkgs.fetchurl {
name = "miku_wallpaper.jpg";
url = "https://c.lair.moe/pub/miku_wallpaper.jpeg?raw";
hash = "sha256-inK4X5KzQk5FHwDw2DYy43nm7XtXlC6I0S1PkYUv+3w=";
};
in {
settings = {
monitor = [
"DP-3 , 1920x1080@165, 0x0 , 1"
"HDMI-A-1, preferred , -1080x0, 1, transform, 1"
];
workspace_rule = [
{ workspace = "1"; monitor = "DP-3"; default = true; }
{ workspace = "10"; monitor = "HDMI-A-1"; default = true; }
];
workspace = [
"1, monitor:DP-3, default:true"
"10, monitor:HDMI-A-1, default:true"
];
on = [
(hyprLua.onStart [
"hyprctl dispatch 'hl.dsp.focus({ workspace = 1 })'"
exec-once = [
"hyprctl dispatch workspace 1"
"${lib.getExe pkgs.swww} img -o HDMI-A-1 ${wallpaper}"
"${lib.getExe pkgs.linux-wallpaperengine} ~/.local/share/wpe/wallpaper --assets-dir ~/.local/share/wpe/assets --screen-root DP-3 --noautomute"
])
];
];
};
};
}
}
File diff suppressed because one or more lines are too long
-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
./modules/grub.nix
./modules/syncthing.nix
./modules/rgb.nix
../modules/gpu/nvidia.nix
(import ../modules/common.nix {
+3 -7
View File
@@ -11,10 +11,6 @@
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
environment.etc.crypttab.text = ''
storage UUID=9327148b-788a-4c23-ac73-28464ffabe1b none luks
'';
fileSystems."/" = {
device = "/dev/disk/by-label/NixOS";
fsType = "ext4";
@@ -27,9 +23,9 @@
};
fileSystems."/mnt/D" = {
device = "/dev/mapper/storage";
fsType = "ext4";
options = [ "noatime" "nofail" ];
device = "/dev/disk/by-label/Data";
fsType = "ntfs";
options = ["umask=0022" "gid=100" "uid=1000" "nofail" ];
};
swapDevices = [ ];
+38 -44
View File
@@ -1,50 +1,44 @@
{ pkgs, lib, ... }:
let
hyprLua = import ../../../modules/user/hyprland/lua.nix { inherit lib; };
{ pkgs, lib, ...}: {
wayland.windowManager.hyprland = let
monitor-switcher = pkgs.writers.writeBashBin "monitor_switcher" /*bash*/ ''
MODE=$1
monitor-switcher = pkgs.writers.writeBashBin "monitor_switcher" /*bash*/ ''
MODE=$1
case $MODE in
"tv")
hyprctl keyword monitor "DP-3, 1920x1080@60, 3840x0, 1"
hyprctl keyword monitor "HDMI-A-1, 3840x2160@60, 0x0, 1"
notify-send "TV mode"
;;
case $MODE in
"tv")
hyprctl eval 'hl.monitor({ output = "DP-3", mode = "1920x1080@60", position = "3840x0", scale = 1 })'
hyprctl eval 'hl.monitor({ output = "HDMI-A-1", mode = "3840x2160@60", position = "0x0", scale = 1 })'
notify-send "TV mode"
;;
"mirror")
hyprctl keyword monitor "HDMI-A-1, 3840x2160@60, 0x0, 1"
hyprctl keyword monitor "DP-3, preferred, auto, 1, mirror, HDMI-A-1"
notify-send "TV-only mode"
;;
"mirror")
hyprctl eval 'hl.monitor({ output = "HDMI-A-1", mode = "3840x2160@60", position = "0x0", scale = 1 })'
hyprctl eval 'hl.monitor({ output = "DP-3", mode = "preferred", position = "auto", scale = 1, mirror = "HDMI-A-1" })'
notify-send "TV-only mode"
;;
"display"|*)
hyprctl keyword monitor "HDMI-A-1, disable"
hyprctl keyword monitor "DP-3, 3440x1440@165, 0x0, 1"
notify-send "Display mode"
;;
"display"|*)
hyprctl eval 'hl.monitor({ output = "HDMI-A-1", disabled = true })'
hyprctl eval 'hl.monitor({ output = "DP-3", mode = "3440x1440@165", position = "0x0", scale = 1 })'
notify-send "Display mode"
;;
esac
'';
in {
wayland.windowManager.hyprland.settings = {
monitor = [
{
output = "DP-3";
mode = "3440x1440@165";
position = "auto-right";
scale = 1;
}
{
output = "HDMI-A-1";
disabled = true;
}
];
esac
'';
in {
settings = {
monitor = [
"DP-3, 3440x1440@165, auto-right, 1"
# "HDMI-A-1, 3840x2160@60, auto-left, 2"
"HDMI-A-1, disabled"
];
bind = [
(hyprLua.bind "XF86Calculator" (hyprLua.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"))
(hyprLua.bind "SUPER + F3" (hyprLua.exec "${lib.getExe monitor-switcher}"))
];
bind = [
'', XF86Calculator, exec, ghostty --title=pulsemixer -e pulsemixer''
''$mainMod, F1, exec, ${lib.getExe monitor-switcher} tv''
''$mainMod, F2, exec, ${lib.getExe monitor-switcher} mirror''
''$mainMod, F3, exec, ${lib.getExe monitor-switcher}''
];
};
};
}
}
-17
View File
@@ -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 = {
devices = {
Akeno.id = "QDW3WJX-J7ETS4R-32CUAIY-EGNM2RD-ZEHOUW2-CHOEOUG-USZOWTR-HHQS2QX";
Koneko.id = "PJFWQRY-ZFUBGDR-NV7KVBL-UBDQ4HT-KPTYP34-MUDFPJU-4EZUHTT-ZLYRMAB";
Inaho.id = "GEHWQFQ-MPIMQ7R-QEWSOEB-BIZAHSZ-5YOFATK-KDIXFMV-JX3OF6G-ZPNZMA4";
Akeno = { id = "QDW3WJX-J7ETS4R-32CUAIY-EGNM2RD-ZEHOUW2-CHOEOUG-USZOWTR-HHQS2QX"; };
Koneko = { id = "PJFWQRY-ZFUBGDR-NV7KVBL-UBDQ4HT-KPTYP34-MUDFPJU-4EZUHTT-ZLYRMAB"; };
};
folders = {
@@ -34,17 +33,7 @@
"Music" = {
path = "/home/sweetbread/Music";
devices = [ "Akeno" "Koneko" "Inaho" ];
};
"Obsidian" = {
path = "/mnt/D/Obsidian";
devices = [ "Koneko" "Inaho" ];
};
"Documents" = {
path = "/home/sweetbread/Documents";
devices = [ "Inaho" ];
devices = [ "Akeno" "Koneko" ];
};
};
};
File diff suppressed because one or more lines are too long
-1
View File
@@ -24,7 +24,6 @@
hardware.bluetooth.enable = true;
host.laptop = true;
host.nvidia.prime.enable = true;
environment.systemPackages = [ pkgs.dbgate ];
}
+8 -9
View File
@@ -1,10 +1,9 @@
{
wayland.windowManager.hyprland.settings.monitor = [
{
output = "eDP-1";
mode = "1920x1080@60";
position = "0x0";
scale = 1;
}
];
}
wayland.windowManager.hyprland = {
settings = {
monitor = [
"eDP-1, 1920x1080@60, 0x0, 1"
];
};
};
}
+3 -19
View File
@@ -7,30 +7,14 @@
];
options = {
host = {
laptop = lib.mkEnableOption "laptop mode";
nvidia.prime = {
enable = lib.mkEnableOption "NVIDIA PRIME offload for hybrid graphics";
intelBusId = lib.mkOption {
type = lib.types.str;
default = "PCI:0:2:0";
description = "Intel/iGPU Bus ID used by NVIDIA PRIME.";
};
nvidiaBusId = lib.mkOption {
type = lib.types.str;
default = "PCI:1:0:0";
description = "NVIDIA dGPU Bus ID used by NVIDIA PRIME.";
};
};
};
host.laptop = lib.mkEnableOption "laptop mode";
};
config = {
nix.settings = {
keep-going = true;
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" ];
};
networking.hostName = hostname;
@@ -38,4 +22,4 @@
i18n.defaultLocale = lib.mkDefault "ru_RU.UTF-8";
system.stateVersion = "23.05";
};
}
}
+10 -27
View File
@@ -1,16 +1,6 @@
{ config, pkgs-stable, lib, ... }: let
primeCfg = config.host.nvidia.prime;
isPrimeOffload = primeCfg.enable;
in {
boot = {
kernelParams = [ "nvidia-drm.modeset=1" ];
initrd.kernelModules = lib.optionals isPrimeOffload [ "i915" ];
};
services.xserver.videoDrivers =
if isPrimeOffload
then [ "modesetting" "nvidia" ]
else [ "nvidia" ];
{ config, pkgs-stable, lib, ... }: {
boot.kernelParams = [ "nvidia-drm.modeset=1" ];
services.xserver.videoDrivers = [ "nvidia" ];
hardware = {
graphics = {
@@ -21,7 +11,7 @@ in {
intel-media-driver
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 = {
@@ -34,28 +24,21 @@ in {
nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.stable;
prime = lib.optionalAttrs isPrimeOffload {
offload = {
enable = true;
enableOffloadCmd = true;
};
intelBusId = primeCfg.intelBusId;
nvidiaBusId = primeCfg.nvidiaBusId;
prime = lib.optionalAttrs config.host.laptop {
intelBusId = "PCI:0:2:0";
nvidiaBusId = "PCI:1:0:0";
};
};
};
environment.sessionVariables = {
__GL_VRR_ALLOWED = 1;
ELECTRON_OZONE_PLATFORM_HINT = "auto";
NIXOS_OZONE_WL = 1;
} // lib.optionalAttrs isPrimeOffload {
LIBVA_DRIVER_NAME = "iHD";
} // lib.optionalAttrs (!isPrimeOffload) {
WLR_NO_HARDWARE_CURSORS = 1;
WLR_DRM_NO_ATOMIC = 1;
GBM_BACKEND = "nvidia-drm";
LIBVA_DRIVER_NAME = "nvidia";
__GLX_VENDOR_LIBRARY_NAME = "nvidia";
__GL_VRR_ALLOWED = 1;
ELECTRON_OZONE_PLATFORM_HINT = "auto";
NIXOS_OZONE_WL = 1;
};
}
-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 = [
./host/bluetooth.nix
./host/bootloader.nix
@@ -15,40 +15,11 @@
./host/virtmanager.nix
./host/vpn.nix
./host/yggdrasil.nix
./host/mtp.nix
];
programs = {
dconf.enable = true;
hyprland.enable = true;
};
xdg.portal = {
enable = true;
xdgOpenUsePortal = true;
extraPortals = with pkgs; [
xdg-desktop-portal-hyprland
xdg-desktop-portal-gtk
xdg-desktop-portal-termfilechooser
];
config = {
common = {
default = [ "hyprland" "gtk" ];
"org.freedesktop.impl.portal.FileChooser" = [ "termfilechooser" "gtk" ];
"org.freedesktop.impl.portal.Settings" = [ "gtk" ];
};
hyprland = {
default = [ "hyprland" "gtk" ];
"org.freedesktop.impl.portal.FileChooser" = [ "termfilechooser" "gtk" ];
"org.freedesktop.impl.portal.Settings" = [ "gtk" ];
};
};
};
programs.hyprland.enable = true;
services = {
udisks2.enable = true;
fstrim.enable = true;
upower.enable = true;
};
+2 -2
View File
@@ -1,6 +1,6 @@
{
{ pkgs, ... }: {
console = {
font = "LatArCyrHeb-19";
font = "${pkgs.kbd}/share/consolefonts/LatArCyrHeb-19.psfu.gz";
colors = [
"16161E"
"1A1B26"
+3 -10
View File
@@ -1,15 +1,8 @@
{ lib, ... }: {
{
environment.variables = {
EDITOR = "hx";
RANGER_LOAD_DEFAULT_RC = "FALSE";
# GTK/Electron apps do not consistently use the portal picker unless this
# variable is present in the graphical session environment.
GTK_USE_PORTAL = "1";
# Qt/Telegram-like apps otherwise keep using their own picker. This makes
# them ask xdg-desktop-portal for file/folder selection.
QT_QPA_PLATFORMTHEME = lib.mkForce "xdgdesktopportal";
TDESKTOP_USE_GTK_FILE_DIALOG = "1";
QT_QPA_PLATFORMTHEME = "qt5ct";
GSETTINGS_BACKEND = "keyfile";
};
}
+2 -2
View File
@@ -1,4 +1,4 @@
{ config, pkgs, pkgs-stable, lib, ... }:
{ config, pkgs, lib, ... }:
lib.mkIf config.programs.gamemode.enable {
programs.steam = {
@@ -10,7 +10,7 @@ lib.mkIf config.programs.gamemode.enable {
mangohud
protonup-ng
bottles
pkgs-stable.heroic
heroic
prismlauncher
];
+3 -3
View File
@@ -4,11 +4,11 @@ lib.mkIf config.host.laptop {
services.tlp = {
enable = true;
settings = {
CPU_SCALING_GOVERNOR_ON_AC = "powersave";
CPU_SCALING_GOVERNOR_ON_AC = "performance";
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
CPU_ENERGY_PERF_POLICY_ON_AC = "balance_performance";
CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power";
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
CPU_MIN_PERF_ON_AC = 0;
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, ... }:
let
sol = pkgs.writers.writePython3 "shutdown-on-lan.py" {
libraries = ps: [ ps.psutil ];
libraries = [ pkgs.python313Packages.psutil ];
flakeIgnore = [ "E302" "E305" "E501" "E701" ];
} /*py*/ ''
# https://habr.com/ru/articles/816765/
+22 -23
View File
@@ -1,29 +1,28 @@
{ pkgs-pinned, lib, ... }: {
programs.clash-verge = {
{ pkgs, config, ... }: {
systemd.services.v2raya = {
enable = true;
package = pkgs-pinned.clash-verge-rev;
serviceMode = true;
tunMode = true;
autoStart = true;
description = "v2rayA gui client";
after = [ "network.target" ];
serviceConfig = {
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 = {
CapabilityBoundingSet = lib.mkForce [
"CAP_NET_ADMIN"
"CAP_NET_RAW"
"CAP_SYS_ADMIN"
"CAP_DAC_OVERRIDE"
"CAP_DAC_READ_SEARCH"
"CAP_SYS_PTRACE"
"CAP_SETUID"
"CAP_SETGID"
"CAP_CHOWN"
"CAP_MKNOD"
];
environment.etc = {
"v2raya/ru_geoip.dat".source = pkgs.fetchurl {
name = "geoip.dat";
url = "https://github.com/runetfreedom/russia-blocked-geoip/releases/download/202602271541/geoip.dat";
hash = "sha256-j+Cjq8OeZFWTyb+QvXTbWDoLaVHPcqQLNSc5Y+p5c/8=";
};
AmbientCapabilities = [
"CAP_DAC_READ_SEARCH"
"CAP_SYS_PTRACE"
];
"v2raya/bolt.db".source = config.sops.secrets.vpn_bolt.path;
};
}
-1
View File
@@ -4,7 +4,6 @@
persistentKeys = true;
settings = {
Peers = [
"tcp://box.paulll.cc:13337"
"tcp://lair.moe:5001"
];
};
+3 -5
View File
@@ -1,6 +1,8 @@
{ config, lib, ... }: {
imports = [
./user/ags.nix
./user/btop.nix
./user/fuzzel.nix
./user/ghostty.nix
./user/helix.nix
./user/hyprland.nix
@@ -8,17 +10,13 @@
./user/mako.nix
./user/neofetch.nix
./user/qt.nix
./user/quickshell.nix
./user/stylix.nix
./user/sops.nix
./user/ssh.nix
./user/walker.nix
./user/wob.nix
./user/yazi.nix
./user/zsh.nix
./user/packages/art.nix
./user/packages/desktop.nix
./user/packages/coding.nix
./user/packages/utils.nix
];
}
+26
View File
@@ -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 = {
enable = true;
enableZshIntegration = true;
package = ghosttyWithGL;
settings = {
confirm-close-surface = false;
copy-on-select = false;
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 = {
enable = true;
package = helixSteel;
defaultEditor = true;
languages = {
language-server.asm-lsp.command = "asm-lsp";
language = [
{
name = "nasm";
file-types = [ "asm" "inc" ];
comment-token = ";";
language-servers = [ "asm-lsp" ];
}
];
};
settings = {
# theme = "catppuccin-mocha";
editor = {
@@ -123,80 +24,6 @@ in {
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")
'';
};
}
+159 -172
View File
@@ -1,30 +1,8 @@
{ pkgs, lib, config, osConfig, inputs, username, ... }:
let
{ pkgs, lib, config, osConfig, inputs, username, ... }: let
optImport = path: lib.optional (builtins.pathExists path) path;
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 {
imports = [
./hyprland/zoom.nix
] ++
imports =
optImport ../../host/${hostname}/modules/hyprland.nix ++
optImport ../../user/${username}/modules/hyprland.nix;
@@ -35,173 +13,192 @@ in {
wl-clipboard
wl-clip-persist
xclip
awww
wifitui
];
wayland.windowManager.hyprland = {
wayland.windowManager.hyprland = let
colors = config.lib.stylix.colors;
in {
enable = true;
configType = "lua";
xwayland.enable = true;
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
plugins = with inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}; [
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
plugins = with inputs.hyprland-plugins.packages.${pkgs.system}; [
# hyprbars # Version mismatch
];
settings = {
config = {
ecosystem = {
no_donation_nag = true;
no_update_news = true;
};
"$mainMod" = "SUPER";
cursor.no_hardware_cursors = 1;
debug = {
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;
};
ecosystem = {
no_donation_nag = true;
no_update_news = true;
};
env = [
{ _args = [ "XDG_SESSION_TYPE" "wayland" ]; }
{ _args = [ "QT_QPA_PLATFORM" "wayland" ]; }
{ _args = [ "QT_QPA_PLATFORMTHEME" "xdgdesktopportal" ]; }
{ _args = [ "GTK_USE_PORTAL" "1" ]; }
{ _args = [ "TDESKTOP_USE_GTK_FILE_DIALOG" "1" ]; }
{ _args = [ "NIXOS_OZONE_WL" "1" ]; }
{ _args = [ "ELECTRON_OZONE_PLATFORM_HINT" "auto" ]; }
{ _args = [ "XDG_CURRENT_DESKTOP" "Hyprland" ]; }
{ _args = [ "XDG_SESSION_DESKTOP" "Hyprland" ]; }
{ _args = [ "XCURSOR_SIZE" (toString config.stylix.cursor.size) ]; }
{ _args = [ "XCURSOR_THEME" config.stylix.cursor.name ]; }
{ _args = [ "XDG_SCREENSHOTS_DIR" "~/screens" ]; }
"XDG_SESSION_TYPE,wayland"
"QT_QPA_PLATFORM,wayland"
"XDG_CURRENT_DESKTOP,Hyprland"
"XDG_SESSION_DESKTOP,Hyprland"
"XCURSOR_SIZE, ${toString config.stylix.cursor.size}"
"XCURSOR_THEME, ${config.stylix.cursor.name}"
"XDG_SCREENSHOTS_DIR,~/screens"
];
cursor.no_hardware_cursors = true;
debug = {
disable_logs = false;
enable_stdout_logs = true;
};
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 = [
{
fingers = 3;
direction = "horizontal";
action = "workspace";
}
"3, horizontal, workspace"
];
workspace_rule = [
{
workspace = "w[t1]";
gaps_out = 0;
}
windowrule = [
"float, class:^(imv)$"
"float, class:^(feh)$"
"float, class:^(mpv)$"
"float, title:^(Список друзей)"
"move onscreen cursor -50% -50%, class:^(xdragon)$"
"float, title:(nmtui)"
"float, title:(pulsemixer)"
"float, title:(clipse)"
"size 622 652, title:(clipse)"
];
window_rule = [
{ match.class = "imv"; float = true; }
{ match.class = "feh"; float = true; }
{ match.class = "mpv"; float = true; }
{ match.title = "Список друзей"; float = true; }
{ match.title = "wifitui"; float = true; }
{ match.title = "pulsemixer"; float = true; }
{ match.title = "clipse"; float = true; }
{ match.title = "clipse"; size = [ 622 652 ]; }
{ match.focus = true; rounding = 0; }
{
match = {
float = false;
workspace = "w[t1]";
};
border_size = 0;
}
];
on = lib.mkBefore [
(onStart [
"systemctl --user start plasma-polkit-agent"
"${lib.getExe' pkgs.dbus "dbus-update-activation-environment"} --systemd --all"
"systemctl --user import-environment XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE WAYLAND_DISPLAY DISPLAY GTK_USE_PORTAL QT_QPA_PLATFORMTHEME TDESKTOP_USE_GTK_FILE_DIALOG NIXOS_OZONE_WL ELECTRON_OZONE_PLATFORM_HINT"
"awww-daemon"
"wl-clip-persist --clipboard both"
"clipse -listen"
"${lib.getExe' pkgs.udiskie "udiskie"}"
])
exec-once = lib.mkBefore [
"systemctl --user start plasma-polkit-agent"
"${lib.getExe' pkgs.swww "swww-daemon"}"
"wl-clip-persist --clipboard both"
"clipse -listen"
"${lib.getExe' pkgs.udiskie "udiskie"}"
];
bind = [
(bind "SUPER + V" (exec "ghostty --title=clipse -e clipse"))
(bind "SUPER + RETURN" (exec "ghostty"))
(bind "SUPER + Q" "hl.dsp.window.close()")
(bind "SUPER + M" "hl.dsp.exit()")
(bind "SUPER + E" (exec "ghostty -e sh -c yazi"))
(bind "SUPER + F" "hl.dsp.window.float({ action = \"toggle\" })")
(bind "SUPER + P" "hl.dsp.window.pseudo({ action = \"toggle\" })")
(bind "SUPER + J" "hl.dsp.layout(\"togglesplit\")")
(bind "SUPER + K" "hl.dsp.layout(\"swapsplit\")")
"$mainMod, V, exec, ghostty --title=clipse -e clipse"
(bind "SUPER + LEFT" "hl.dsp.focus({ direction = \"${direction.left}\" })")
(bind "SUPER + RIGHT" "hl.dsp.focus({ direction = \"${direction.right}\" })")
(bind "SUPER + UP" "hl.dsp.focus({ direction = \"${direction.up}\" })")
(bind "SUPER + DOWN" "hl.dsp.focus({ direction = \"${direction.down}\" })")
"$mainMod, Return, exec, ghostty"
"$mainMod, Q, killactive,"
"$mainMod, M, exit,"
"$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}\" })")
(bind "SUPER + SHIFT + RIGHT" "hl.dsp.window.swap({ direction = \"${direction.right}\" })")
(bind "SUPER + SHIFT + UP" "hl.dsp.window.swap({ direction = \"${direction.up}\" })")
(bind "SUPER + SHIFT + DOWN" "hl.dsp.window.swap({ direction = \"${direction.down}\" })")
# Move focus with mainMod + arrow keys
"$mainMod, left, movefocus, l"
"$mainMod, right, movefocus, r"
"$mainMod, up, movefocus, u"
"$mainMod, down, movefocus, d"
(bind "SUPER + CTRL + LEFT" "hl.dsp.window.resize({ x = -60, y = 0, relative = true })")
(bind "SUPER + CTRL + RIGHT" "hl.dsp.window.resize({ x = 60, y = 0, relative = true })")
(bind "SUPER + CTRL + UP" "hl.dsp.window.resize({ x = 0, y = -60, relative = true })")
(bind "SUPER + CTRL + DOWN" "hl.dsp.window.resize({ x = 0, y = 60, relative = true })")
] ++ workspaceBinds ++ [
(bind "SUPER + SHIFT + F" "hl.dsp.window.fullscreen({ action = \"toggle\", mode = \"fullscreen\" })")
(bind "SUPER + mouse_down" "hl.dsp.focus({ workspace = \"e-1\" })")
(bind "SUPER + mouse_up" "hl.dsp.focus({ workspace = \"e+1\" })")
# Moving windows
"$mainMod SHIFT, left, swapwindow, l"
"$mainMod SHIFT, right, swapwindow, r"
"$mainMod SHIFT, up, swapwindow, u"
"$mainMod SHIFT, down, swapwindow, d"
(bind "SUPER + F3" (exec "${lib.getExe pkgs.brightnessctl} -d *::kbd_backlight set +33%"))
(bind "SUPER + F2" (exec "${lib.getExe pkgs.brightnessctl} -d *::kbd_backlight set 33%-"))
# Window resizing X Y
"$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"))
(bind "XF86AudioMicMute" (exec "pamixer --default-source -m"))
(bind "XF86AudioPlay" (exec "${lib.getExe pkgs.playerctl} play-pause"))
(bind "XF86Explorer" (exec "ghostty -e sh -c yazi"))
(bind "XF86Mail" (exec "thunderbird"))
(bind "XF86WWW" (exec "google-chrome-stable"))
# Switch workspaces with mainMod + [0-9]
"$mainMod, 1, workspace, 1"
"$mainMod, 2, workspace, 2"
"$mainMod, 3, workspace, 3"
"$mainMod, 4, workspace, 4"
"$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%-"))
(bind "XF86MonBrightnessUp" (exec "${lib.getExe pkgs.brightnessctl} set +5%"))
# Move active window to a workspace with mainMod + SHIFT + [0-9]
"$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; })
(bindWithFlags "XF86AudioLowerVolume" (exec "pamixer -d 5") { repeating = true; })
"$mainMod SHIFT, F, fullscreen"
(bindWithFlags "XF86AudioPrev" (exec "${lib.getExe pkgs.playerctl} position 5-") { click = true; })
(bindWithFlags "XF86AudioNext" (exec "${lib.getExe pkgs.playerctl} position 5+") { click = true; })
(bindWithFlags "XF86AudioPrev" (exec "${lib.getExe pkgs.playerctl} previous") { long_press = true; })
(bindWithFlags "XF86AudioNext" (exec "${lib.getExe pkgs.playerctl} next") { long_press = true; })
# Scroll through existing workspaces with mainMod + scroll
"$mainMod, mouse_down, workspace, e+1"
"$mainMod, mouse_up, workspace, e-1"
(bindWithFlags "SUPER + mouse:272" "hl.dsp.window.drag()" { mouse = true; })
(bindWithFlags "SUPER + mouse:273" "hl.dsp.window.resize()" { mouse = true; })
# Keyboard backlight
"$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 +208,11 @@ in {
extraPortals = [
pkgs.xdg-desktop-portal-gtk
pkgs.xdg-desktop-portal-termfilechooser
];
config = {
common = {
default = [ "hyprland" "gtk" ];
"org.freedesktop.impl.portal.FileChooser" = [ "termfilechooser" "gtk" ];
"org.freedesktop.impl.portal.Settings" = [ "gtk" ];
};
hyprland = {
default = [ "hyprland" "gtk" ];
"org.freedesktop.impl.portal.FileChooser" = [ "termfilechooser" "gtk" ];
"org.freedesktop.impl.portal.Settings" = [ "gtk" ];
};
config.common = {
default = [ "hyprland" "gtk" ];
"org.freedesktop.impl.portal.FileChooser" = [ "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, ... }:
let
hyprLua = import ./hyprland/lua.nix { inherit lib; };
in
lib.mkIf config.programs.hyprlock.enable {
wayland.windowManager.hyprland.settings.on = [
(hyprLua.onStart [ "hyprlock" ])
];
wayland.windowManager.hyprland.settings.exec-once = [ "hyprlock" ];
programs.hyprlock = let
image = pkgs.fetchurl {
+20 -12
View File
@@ -1,13 +1,21 @@
{ config, lib, ... }: let
colors = config.lib.stylix.colors.withHashtag;
accent = colors.${config.stylix.accent};
in {
services.mako = {
enable = true;
{ config, pkgs, ... }:
let
colors = config.lib.stylix.colors;
in {
home.packages = [ pkgs.mako ];
xdg.configFile."mako/config".text = ''
background-color=#${colors.base00}
text-color=#${colors.base05}
border-color=#${colors.base0B}
border-radius=10
margin=16
progress-color=over #${colors.base0A}
default-timeout=5000
settings = {
border-color = lib.mkForce accent;
default-timeout = 5000;
};
};
}
[urgency=high]
border-color=#${colors.base09}
[urgency=low]
border-color=#${colors.base04}
'';
}
+6
View File
@@ -0,0 +1,6 @@
{ pkgs, ... }: {
home.packages = with pkgs; [
jetbrains.idea-oss
android-studio
];
}
+3 -6
View File
@@ -1,15 +1,12 @@
{ pkgs, pkgs-stable, ... }: {
{ pkgs, pkgs-pinned, inputs, ... }: {
home.packages = with pkgs; [
ayugram-desktop
pkgs-pinned.ayugram-desktop
vesktop
obs-studio
mpv
imhex
obsidian
pkgs-stable.qbittorrent
qbittorrent
thunderbird
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 {
name = "AGS theme";
src = ./ags;
dontUnpack = true;
patchPhase = ''
patchPhase = let
accent = if username == "chest"
then colors.base0E
else colors.base0B;
in ''
echo \$bg: \#${colors.base00}\; > colors.scss
echo \$surface0: \#${colors.base02}\; >> 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 = {
enable = true;
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
}
}
}
}
}
'';
};
};
}
-12
View File
@@ -1,12 +0,0 @@
{
programs.ssh = {
enable = true;
enableDefaultConfig = false;
settings = {
"*" = {
serverAliveInterval = 30;
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"))
];
}
-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
hostSystem = pkgs.stdenv.hostPlatform.system;
{ pkgs, lib, inputs, ... }: {
home.packages = with pkgs; [
( ouch.override { enableUnfree = true; } )
];
yaziPkg = inputs.yazi.packages.${hostSystem}.default.override {
_7zz = pkgs._7zz-rar;
};
programs.yazi = {
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" ''
set -efu
settings = {
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
file://*)
target="$(${lib.getExe pkgs.python3} -c 'import sys, urllib.parse; print(urllib.parse.unquote(urllib.parse.urlparse(sys.argv[1]).path))' "$target")"
;;
esac
prepend_fetchers = [
{ id = "git"; mime = "*"; run = "git"; }
];
};
};
if [ -f "$target" ]; then
target="$(dirname "$target")"
fi
plugins = with pkgs.yaziPlugins; {
inherit
chmod
ouch
full-border
starship
mount
git
toggle-pane
;
};
if [ ! -e "$target" ]; then
target="$HOME"
fi
initLua = ''
require("git"):setup()
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" ''
set -efu
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)
'';
directory="''${2:-0}"
save="''${3:-0}"
path="''${4:-}"
out="''${5:?missing termfilechooser output path}"
state_dir="''${XDG_STATE_HOME:-$HOME/.local/state}/xdg-desktop-portal-termfilechooser"
last_selected_path="$state_dir/last-selected"
${lib.getExe' pkgs.coreutils "mkdir"} -p "$state_dir"
if [ -s "$last_selected_path" ]; then
IFS= read -r last_selected < "$last_selected_path" || true
if [ -d "$last_selected" ]; then
if [ "$save" = "1" ] && [ -n "$path" ]; then
path="$last_selected/''${path##*/}"
else
path="$last_selected"
fi
fi
fi
if [ -z "$path" ]; then
path="$HOME"
fi
created_placeholder=0
if [ "$save" = "1" ] && [ ! -e "$path" ]; then
placeholder_dir="''${path%/*}"
if [ "$placeholder_dir" != "$path" ]; then
${lib.getExe' pkgs.coreutils "mkdir"} -p "$placeholder_dir"
fi
{
printf '%s\n' 'This file was created by xdg-desktop-portal-termfilechooser.'
printf '%s\n' 'Move/rename it in Yazi, then open/select it to choose the save path.'
} > "$path"
created_placeholder=1
fi
${lib.getExe pkgs.ghostty} --title="Yazi File Picker" -e ${lib.getExe yaziPkg} --chooser-file="$out" --cwd-file="$last_selected_path" "$path"
if [ "$directory" = "1" ] && [ ! -s "$out" ] && [ -s "$last_selected_path" ]; then
IFS= read -r cwd < "$last_selected_path" || true
if [ -n "''${cwd:-}" ] && [ -d "$cwd" ]; then
printf '%s\n' "$cwd" > "$out"
fi
fi
if [ "$created_placeholder" = "1" ] && [ ! -s "$out" ]; then
${lib.getExe' pkgs.coreutils "rm"} -f "$path"
fi
'';
fileManager1 = pkgs.writeShellScriptBin "yazi-filemanager1" ''
exec ${pkgs.python3.withPackages (ps: [ ps.dbus-next ])}/bin/python ${pkgs.writeText "yazi-filemanager1.py" ''
import asyncio
import os
import subprocess
import urllib.parse
from dbus_next.aio import MessageBus
from dbus_next.constants import BusType
from dbus_next.service import ServiceInterface, method
YAZI_OPEN = ${builtins.toJSON (lib.getExe yaziOpen)}
def uri_to_path(uri: str) -> str | None:
parsed = urllib.parse.urlparse(uri)
if parsed.scheme != "file":
return None
return urllib.parse.unquote(parsed.path)
def open_paths(uris: list[str], reveal_items: bool = False) -> None:
for uri in uris:
path = uri_to_path(uri)
if not path:
continue
if reveal_items and os.path.isfile(path):
path = os.path.dirname(path)
subprocess.Popen(
[YAZI_OPEN, path],
start_new_session=True,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
)
class FileManager1(ServiceInterface):
def __init__(self) -> None:
super().__init__("org.freedesktop.FileManager1")
@method()
def ShowFolders(self, uris: "as", startup_id: "s") -> "":
open_paths(uris)
@method()
def ShowItems(self, uris: "as", startup_id: "s") -> "":
open_paths(uris, reveal_items=True)
@method()
def ShowItemProperties(self, uris: "as", startup_id: "s") -> "":
open_paths(uris, reveal_items=True)
async def main() -> None:
bus = await MessageBus(bus_type=BusType.SESSION).connect()
bus.export("/org/freedesktop/FileManager1", FileManager1())
await bus.request_name("org.freedesktop.FileManager1")
await asyncio.Event().wait()
asyncio.run(main())
''}
'';
in {
home.packages = with pkgs; [
( ouch.override { enableUnfree = true; } )
yaziOpen
];
home.sessionVariables = {
GTK_USE_PORTAL = "1";
};
xdg.configFile."xdg-desktop-portal-termfilechooser/config".text = ''
[filechooser]
cmd=${lib.getExe yaziFileChooser}
default_dir=$HOME
open_mode=suggested
save_mode=last
'';
xdg.desktopEntries.yazi = {
name = "Yazi";
genericName = "File Manager";
exec = "${lib.getExe yaziOpen} %U";
terminal = false;
mimeType = [ "inode/directory" ];
categories = [ "System" "FileTools" "FileManager" ];
startupNotify = false;
};
xdg.mimeApps = {
enable = true;
defaultApplications = {
"inode/directory" = "yazi.desktop";
"application/x-gnome-saved-search" = "yazi.desktop";
};
};
xdg.dataFile."dbus-1/services/org.freedesktop.FileManager1.service".text = ''
[D-BUS Service]
Name=org.freedesktop.FileManager1
Exec=${lib.getExe fileManager1}
'';
wayland.windowManager.hyprland.settings.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";
}
];
};
};
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 "$@"; do echo "file://$path"; done | wl-copy -t text/uri-list'';
desc = "Copy files into system clipboard";
}
{
on = ["c" "m"];
run = "plugin chmod";
desc = "Chmod on selected files";
}
{
on = ["M"];
run = "plugin mount";
desc = "Open mount menu";
}
{
on = [ "<C-n>" ];
run = "shell '${lib.getExe pkgs.dragon-drop} -x -A -i -T %s'";
}
{
on = [ "g" "<S-d>" ];
run = ''cd /mnt/D'';
desc = "Goto D drive";
}
];
};
};
}
+4 -10
View File
@@ -1,6 +1,5 @@
{ config, osConfig, pkgs, lib, ... }: {
{ config, pkgs, ... }: {
home.packages = [ pkgs.nh ];
programs = {
zoxide.enable = true;
fzf.enable = true;
@@ -37,10 +36,7 @@
read_only = " RO";
};
nix_shell.format = "[nix-shell]($style) ";
os = {
disabled = false;
style = "white";
};
os.disabled = false;
python = {
symbol = "py ";
python_binary = ["python3" "python"];
@@ -66,15 +62,13 @@
cd = "z";
lg = "lazygit";
s = "nix-shell . --run zsh";
} // lib.optionalAttrs osConfig.boot.loader.grub.useOSProber {
win = "sudo grub-reboot 2; sudo reboot";
};
initContent = /*bash*/ ''
initContent = ''
eval "$(zoxide init zsh)"
eval "$(nh completions zsh)"
source "$(fzf-share)/key-bindings.zsh"
source "$(fzf-share)/completion.zsh"
nr() { nix run "nixpkgs#$1" -- "''${@:2}" }
'';
envExtra = ''
+3 -3
View File
@@ -2,15 +2,15 @@
imports = [
../../modules/user/packages/cs_utils.nix
];
disabledModules = [
../../modules/user/packages/art.nix
../../modules/user/packages/coding.nix
];
home.packages = with pkgs; [
nautilus
vscode
python3
pkgs-pinned.jetbrains.pycharm-oss
pkgs-pinned.jetbrains.pycharm-community
aseprite
krita
google-chrome
+29 -41
View File
@@ -1,22 +1,15 @@
{ pkgs, lib, config, ... }:
let
colors = config.lib.stylix.colors;
accent = colors.${config.stylix.accent};
hyprLua = import ../../../modules/user/hyprland/lua.nix { inherit lib; };
in {
wayland.windowManager.hyprland.settings = {
config = {
{ pkgs, lib, config, inputs, ... }: {
wayland.windowManager.hyprland = let
colors = config.lib.stylix.colors;
in {
settings = {
general = {
gaps_in = 5;
gaps_out = 5;
border_size = 2;
"col.active_border" = lib.mkForce {
colors = [
"rgba(${accent}ee)"
"rgba(${colors.base0C}ee)"
];
angle = 45;
};
"col.active_border" = "rgba(${colors.base0E}ee) rgba(${colors.base0C}ee) 45deg";
"col.inactive_border" = "rgba(${colors.base05}aa)";
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";
misc = {
@@ -48,32 +58,10 @@ in {
animate_mouse_windowdragging = true;
enable_swallow = true;
};
};
curve = {
_args = [
"myBezier"
{
type = "bezier";
points = [
[ 0.05 0.9 ]
[ 0.1 1.05 ]
];
}
bind = [
''$mainMod Shift, S, exec, ${lib.getExe pkgs.grim} -g "$(${lib.getExe pkgs.slurp})" - | ${lib.getExe pkgs.swappy} -f -''
];
};
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 {
stylix = {
enable = true;
overlays.enable = false;
targets = {
hyprland.enable = false;
waybar.enable = false;
@@ -89,7 +87,6 @@ in {
};
base16Scheme = "${pkgs.base16-schemes}/share/themes/eris.yaml";
accent = "base0E";
polarity = "dark";
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
./${name}/modules/git.nix
./${name}/modules/style.nix
./${name}/modules/waybar.nix
./${name}/home.nix
];
@@ -57,7 +56,7 @@
services.greetd = let
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 {
enable = true;
settings = {
+4 -7
View File
@@ -1,13 +1,10 @@
{ pkgs, ... }: {
imports = [
../../modules/user/packages/tex.nix
];
programs.hyprlock.enable = true;
home.packages = with pkgs; [
android-studio
(vivaldi.override {
proprietaryCodecs = true;
enableWidevine = true;
})
weechat
insomnia
vivaldi
];
xdg.mimeApps = {
+70 -159
View File
@@ -1,98 +1,26 @@
{ pkgs, lib, config, osConfig, inputs, ... }: {
{ pkgs, lib, config, inputs, ... }: {
wayland.windowManager.hyprland = let
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" {
libraries = [ pkgs.python3Packages.requests ];
flakeIgnore = [ "E111" "E121" "E241" "E501" "E701" "E731" ];
flakeIgnore = [ "E501" "E111" "E701" "E241" "E731" ];
} /*py*/ ''
import requests as requests
from random import choice
from os import listdir, makedirs, remove, replace, system
from os import system, mkdir, listdir
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"
url = "https://wallhaven.cc/api/v1/collections/sweetbread/${
if osConfig.networking.hostName == "Rias" then "1764377"
else "2108577"
}"
url = "https://wallhaven.cc/api/v1/collections/sweetbread/1764377"
with open("${config.sops.secrets."tokens/apis/wallhaven".path}") as f:
token = f.read()
filename = None
notify("Updating wallpaper...", 0)
notify("Updating wallpaper!")
try:
response = requests.get(url, params={'apikey': token})
response.raise_for_status()
json = response.json()
json = requests.get(url, params={'apikey': token}).json()
wallpaper = choice(json['data'])
link = wallpaper['path']
@@ -103,107 +31,90 @@
else: ext = "png"
filename = f"{id}.{ext}"
destination = f"{folder}/{filename}"
if not exists(destination):
makedirs(folder, exist_ok=True)
notify("Downloading... 0%", 0, 0)
download_with_progress(link, destination)
notify("Downloaded", 100)
else:
notify("Using cached wallpaper", 100)
if not exists(f"{folder}/{filename}"):
if not exists(folder):
mkdir(f"{folder}")
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")
try:
filename = choice(listdir(folder))
except (FileNotFoundError, IndexError):
notify("Offline mode and wallpaper cache is empty")
filename = choice(listdir(folder))
finally:
if filename is not None:
notify("Applying wallpaper", 100)
system(f"awww img {folder}/{filename} --transition-type center")
system(f"${lib.getExe pkgs.swww} img {folder}/{filename} --transition-type center")
'';
in {
settings = {
config = {
general = {
gaps_in = 2;
gaps_out = 10;
border_size = 3;
"col.active_border" = lib.mkForce {
colors = [
"rgba(${colors.base0C}aa)"
"rgba(${accent}aa)"
];
angle = 45;
};
layout = "dwindle";
general = {
gaps_in = 5;
gaps_out = 10;
border_size = 3;
"col.active_border" = lib.mkForce "rgba(${colors.base0C}ee) rgba(${colors.base0B}ee) 45deg";
"col.inactive_border" = lib.mkForce "rgba(${colors.base05}aa)";
layout = "dwindle";
};
decoration = {
rounding = 10;
blur = {
enabled = true;
size = 16;
passes = 2;
new_optimizations = true;
};
decoration = {
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;
shadow = {
enabled = true;
range = 4;
render_power = 3;
};
};
curve = {
_args = [
"myBezier"
{
type = "bezier";
points = [
[ 0.05 0.9 ]
[ 0.1 1.05 ]
];
}
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 = [
{ 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"; }
];
dwindle = {
pseudotile = true;
smart_split = true;
};
on = [
(hyprLua.onStart [ "${lib.getExe wallpaper_changer}" ])
];
master.new_status = "master";
workspace_rule = [
{
workspace = "2";
layout = "scrolling";
}
misc = {
animate_manual_resizes = true;
animate_mouse_windowdragging = true;
enable_swallow = true;
};
exec-once = [
"${lib.getExe wallpaper_changer}"
];
bind = [
(hyprLua.bind "Print" (hyprLua.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"))
(hyprLua.bind "ALT + Print" (hyprLua.exec "${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m active -m window"))
(hyprLua.bind "SUPER + W" (hyprLua.exec "${lib.getExe wallpaper_changer}"))
" , Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m active -m output"
"CTRL, Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m region"
"ALT , Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m active -m window"
"$mainMod, W, exec, ${lib.getExe wallpaper_changer}"
];
};
};
+3 -26
View File
@@ -79,25 +79,10 @@
cp Kurumi $out/share/icons -r
'';
};
pixeloid = pkgs.stdenvNoCC.mkDerivation {
name = "Pixeloid";
dontUnpack = true;
src = pkgs.fetchurl {
url = "https://lair.moe/static/font/Pixeloid/otf/Sans.otf";
hash = "sha256-GTf2BnhH0Pzc3Bbevmd+mA6t8lZFMUxX9wkSqWicuSc=";
};
installPhase = ''
install -Dm644 "$src" "$out/share/fonts/opentype/Sans.otf"
'';
};
in {
# {
stylix = {
enable = true;
overlays.enable = false;
targets = {
hyprpaper.enable = lib.mkForce false;
waybar.enable = false;
@@ -105,7 +90,6 @@ in {
};
base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
accent = "base0B";
polarity = "dark";
image = pkgs.fetchurl {
@@ -136,11 +120,6 @@ in {
package = (pkgs.google-fonts.override { fonts = [ "Gabriela" ]; });
};
sansSerif = {
name = "Pixeloid Sans";
package = pixeloid;
};
emoji = {
package = pkgs.noto-fonts-monochrome-emoji;
name = "Noto Emoji";
@@ -163,10 +142,8 @@ in {
};
gtk = {
gtk4 = {
extraConfig = {
gtk-application-prefer-dark-theme = true;
};
gtk4.extraConfig = {
gtk-application-prefer-dark-theme = true;
};
gtk3.extraConfig = {
gtk-application-prefer-dark-theme = true;
-360
View File
@@ -1,360 +0,0 @@
{
osConfig,
config,
inputs,
pkgs,
lib,
...
}: {
home.packages = with pkgs; [
playerctl
cava
pulsemixer
libnotify
monocraft
font-awesome
nerd-fonts.symbols-only
];
programs.waybar = let
multibat = osConfig.networking.hostName == "Inaho";
in {
enable = true;
systemd.enable = true;
package = inputs.waybar.packages.${pkgs.stdenv.hostPlatform.system}.default;
settings.mainBar = {
spacing = 8;
modules-left = [
"hyprland/workspaces"
"hyprland/language"
"keyboard-state"
"cava"
];
modules-center = [
"mpris"
];
modules-right = [
"tray"
"group/system"
"pulseaudio"
( if multibat then "group/bat" else "battery" )
"clock"
];
cava = {
bars = 14;
sleep_timer = 5;
hide_on_silence = true;
bar_delimiter = 0;
input_delay = 0;
format-icons = [" " "▁" "▂" "▃" "▄" "▅" "▆" "▇" "█"];
};
clock = {
tooltip = false;
interval = 5;
format = "{:L%d %b - %H:%M %a}";
};
pulseaudio = {
format = "{icon} {volume}%";
format-icons = {
headphone = "";
hands-free = "";
headset = "";
phone = "";
phone-muted = "";
portable = "";
car = "";
default = ["" ""];
};
on-click = "ghostty --title=pulsemixer -e pulsemixer";
};
mpris = {
format = "{dynamic}";
dynamic-len = if osConfig.host.laptop then 32 else 64;
dynamic-order = [ "title" "artist" "album" ];
};
"group/bat" = lib.mkIf multibat {
orientation = "inherit";
drawer = {
transition-duration = 500;
transition-left-to-right = false;
};
modules = [
"battery"
"battery#int"
"battery#ext"
];
};
battery = {
interval = 5;
states = {
warning = 30;
critical = 15;
};
format = "{icon} {capacity}%";
format-icons = {
default = ["󰂎" "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"];
charging = ["󰢟" "󰢜" "󰂆" "󰂇" "󰂈" "󰢝" "󰂉" "󰢞" "󰂊" "󰂋" "󰂅"];
};
events = {
on-discharging-warning = "notify-send -u normal 'Low Battery'";
on-discharging-critical = "notify-send -u critical 'Very Low Battery'";
};
};
"battery#int" = lib.mkIf multibat {
bat = "BAT0";
interval = 5;
states = {
warning = 30;
critical = 15;
};
format = "I: {capacity}%";
};
"battery#ext" = lib.mkIf multibat {
bat = "BAT1";
interval = 5;
states = {
warning = 30;
critical = 15;
};
format = "E: {capacity}%";
events = {
on-discharging-critical = "notify-send -u normal 'External battery is critical";
};
};
"keyboard-state" = {
capslock = true;
format = "{icon}";
format-icons = {
locked = "CAPS";
unlocked = "";
};
};
"hyprland/language" = {
format-en = "en";
format-ru = "ru";
};
"group/system" = {
orientation = "inherit";
drawer = {
transition-duration = 500;
transition-left-to-right = false;
};
modules = [
"network"
"custom/mem"
"cpu"
"temperature"
];
};
network = {
format = "{ifname}";
format-wifi = " {essid} ({signalStrength}%)";
format-ethernet = "{ifname}";
format-disconnected = "";
tooltip-format = "{ipaddr}";
max-length = 50;
on-click = "ghostty --title=wifitui -e wifitui";
};
"custom/weather" = {
format = "{}";
tooltip = true;
interval = 1800;
exec = "python3 $HOME/.config/waybar/scripts/wttr.py";
return-type = "json";
};
"custom/mem" = {
format = "{} ";
interval = 3;
exec = "free -h | awk '/Mem:/{printf $3}'";
tooltip = false;
};
cpu = {
interval = 2;
format = "{usage}% ";
min-length = 6;
};
temperature = {
hwmon-path = "/sys/class/hwmon/hwmon5/temp1_input";
critical-threshold = 80;
format = "{temperatureC}°C {icon}";
format-icons = ["" "" "" "" ""];
tooltip = false;
};
};
style = let
colors = config.lib.stylix.colors.withHashtag;
accent = colors.${config.stylix.accent};
radius = "6px";
scssFile = pkgs.writeText "waybar.scss" /*scss*/ ''
window#waybar {
background: transparent;
color: ${colors.base05};
border-radius: ${radius};
font-family: "Symbols Nerd Font Mono", "Monocraft", "Font Awesome 7 Free";
font-weight: bold;
font-size: .85em;
& > * { padding: 8px; }
}
#cava,
#language,
#mpris,
#pulseaudio,
#network,
#battery,
#cpu,
#temperature,
#keyboard-state label.locked,
#custom-mem,
#clock {
background: ${colors.base00};
border-radius: ${radius};
padding: 8px;
}
#workspaces,
#tray {
background: ${colors.base00};
border-radius: ${radius};
}
#workspaces button {
color: ${colors.base05};
padding: 4px;
border-radius: ${radius};
border: 1pt solid transparent;
&:hover { background: ${colors.base01}; }
&.active {
background: ${accent};
color: ${colors.base00};
&:hover {
border-color: ${accent};
background: ${colors.base01};
color: ${accent};
}
}
}
#mpris {
&:hover { background: ${colors.base01}; }
&.paused { opacity: .5; }
}
#tray {
widget {
border: 1pt solid transparent;
border-radius: ${radius};
&:hover { background: ${colors.base01}; }
& > image { padding: 8px; }
}
& > .passive { border-color: ${colors.base02}; }
& > .needs-attention { border-color: ${colors.base09}; }
}
#pulseaudio {
&:hover { background: ${colors.base01}; }
&.muted {
background: ${colors.base08};
color: ${colors.base00};
&:hover {
color: ${colors.base08};
background: ${colors.base01};
}
}
}
#network {
&:hover { background: ${colors.base01}; }
&.disconnected {
color: ${colors.base00};
background: ${colors.base08};
}
}
#system,
#bat {
& .drawer-child > * { margin-right: 4px }
}
#keyboard-state label.locked {
background-color: ${colors.base00};
color: ${colors.base08};
}
#battery {
&.charging { color: ${accent}; }
&:not(.charging) {
&.warning {
color: ${colors.base00};
background-color: ${colors.base09};
}
&.critical {
background-color: ${colors.base08};
color: ${colors.base00};
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
}
&.full {
color: ${colors.base00};
background: ${accent};
}
&.plugged {
color: ${colors.base00};
background: ${colors.base0D};
}
}
@keyframes blink {
to {
background-color: ${colors.base00};
color: ${colors.base08};
}
}
'';
cssFile = pkgs.runCommand "waybar.css" {
nativeBuildInputs = [ pkgs.dart-sass ];
} "sass ${scssFile} $out";
in builtins.readFile cssFile;
};
wayland.windowManager.hyprland.settings.layer_rule = [
{
match.namespace = "waybar";
blur = true;
}
];
}