Compare commits

...

171 Commits

Author SHA1 Message Date
c0d1341448 niri: redo a lot
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-19 13:21:31 +03:00
bba55dc973 try to fix styling
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-15 15:32:05 +03:00
d48559e6d8 modules/shared/user: apps
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-15 15:32:05 +03:00
c18c1d0060 stylix: geist fonts for sandcastle
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-15 15:32:05 +03:00
bec0e9d43a flake.lock: bump
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-15 15:32:05 +03:00
3937656ce1 cleanup the mess
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-13 13:55:45 +03:00
6554808614 unused stuff
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-13 13:55:45 +03:00
8a35e18e4e modules/home/desktop/niri/services/swaync/default.nix
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-12 15:36:36 +03:00
930417968f hosts/eldrid/cb-audio-fix: update
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-12 15:15:12 +03:00
7d0e089e3f use hostId for luks disks
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-12 15:15:12 +03:00
d135a13a5a niri/swaync: still hate it
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-10 13:21:04 +03:00
9c0e7c4cae flake.lock: bump
flake.nix: add ghostty
modules/home/programs/terminal/ghostty.nix: switch to ghostty flake

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-07 13:09:26 +03:00
c65a7997e2 change colorscheme
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-07 13:09:26 +03:00
61d4307a10 modules/home/desktop/niri/programs/waybar/default.nix
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-07 13:09:26 +03:00
81c866645f modules/shared/nixos/nix/common.nix: use upstream lix
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-04 16:31:09 +03:00
1065479388 flake.nix: switch to nixpkgs/master
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-04 16:02:54 +03:00
5d9782d733 finish niri rice
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-02 20:14:50 +03:00
67009df2a9 desktop/niri: blueman
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-02 19:06:12 +03:00
547e41d3f9 stylix: new theme
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-02 19:06:12 +03:00
8fe81eb9cd niri/walker: rework
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-01 12:44:58 +03:00
e599e4c5c4 niri/waybar: some fixes, new module
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-01 10:30:28 +03:00
b42de80180 desktop/niri: 1px border
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-01 00:34:05 +03:00
2093304e4c niri/waybar: polished
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-01 00:02:37 +03:00
e30f4a74cd niri/waybar: initial rework
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-30 22:11:35 +03:00
7c72e527e7 niri/waybar: now
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-29 17:45:14 +03:00
f854f65029 niri/waybar: now pixel perfect
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-29 17:40:05 +03:00
9034502635 switch to lix flake
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-29 14:42:57 +03:00
24b195b766 flake.lock: bump
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-29 14:42:57 +03:00
1ae179eb85 hosts/dunamis/configuration.nix: rose-pine-moon
modules/nixos/system/stylix/default.nix: change serif to inter

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-28 17:35:18 +03:00
efaae1a801 modules/nixos/system/common.nix: systemd
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-28 17:35:18 +03:00
27f29769e2 desktop/niri/default.nix: force mimeapps.list
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-28 17:35:18 +03:00
c586cc93d8 home/desktop/niri/programs/default.nix: remove
nixos/desktop/niri/default.nix: fix

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-28 17:35:18 +03:00
5526b559cf modules/shared/nixos/default.nix: refactor keyd
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-21 16:21:24 +03:00
47c88ecf63 modules/nixos/desktop/niri/default.nix: add gvfs
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-19 11:18:49 +03:00
71d94e52a8 desktop/niri: change settings
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-19 10:28:48 +03:00
268e527db6 flake.lock: bump
flake.nix: less repeated inputs

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-19 10:28:48 +03:00
f3bf120805 rework modules
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-19 10:23:34 +03:00
422b0551db hosts/eldrid/misc/undervolt.nix: add
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-19 10:23:34 +03:00
ac28a3442f hosts/morphius: enable iio for autorotate
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-18 18:50:26 +03:00
078351becd stylix: new theme
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-18 18:27:24 +03:00
46be9aa879 some options
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-18 18:27:24 +03:00
8f91352720 hosts/sarien/disko/disk-main.nix: remove
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-18 18:27:24 +03:00
d3ce08e765 misc/stylix: new wallpaper
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-18 00:22:46 +03:00
5859b9d469 flake.nix: sort
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-18 00:22:46 +03:00
a1cac8803a hosts: cleanup
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 17:35:36 +03:00
4054e42e21 desktop/niri: nest programs
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 17:35:36 +03:00
89ff07ac7b hosts/dunamis: switch to niri
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 17:35:36 +03:00
7641390aba desktop/niri: enable animations
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 15:01:22 +03:00
539a1d8713 hosts/dunamis/configuration.nix: remove TODO
hosts/legion: autologin, secure boot, tpm

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 15:01:22 +03:00
b3ac24719a move xdg.userDirs config to modules/shared/user
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 14:33:53 +03:00
f8d4b52394 services/kanshi: change
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 14:33:53 +03:00
4abde43c61 hosts: rename module
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 14:33:53 +03:00
686e36b144 niri/services/kanshi: some more config
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 14:10:55 +03:00
0bdff5ef5b restructure
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 14:10:55 +03:00
02a8c645e9 modules/nixos: rename config to shared
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 12:35:52 +03:00
8217a70b34 config/security: add pam.sshAgentAuth
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 12:27:29 +03:00
34795ac894 desktop/niri: Mod+X to hide/show waybar
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 12:27:29 +03:00
a876874791 move kanshi to niri module
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-15 17:08:45 +03:00
6dbd2b86a2 move display config to kanshi
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-15 16:43:45 +03:00
a4e5add644 desktop/niri: tweak copyq
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-14 17:26:23 +03:00
cc31b858f7 desktop/niri: use autoLogin module for greetd
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-14 17:26:23 +03:00
e669331366 config/boot/loader: set timeout to 0
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-14 17:26:23 +03:00
453fda9a36 desktop/niri: disable animations
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-14 17:26:23 +03:00
e2f6ed72ed modules/home/programs/editor: some lsp work
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-14 17:26:23 +03:00
8a4af44494 user/programs: enable zellij
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-14 17:26:23 +03:00
0c28f1e978 hosts/eldrid: update id's
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-13 00:21:37 +03:00
1dc168ce63 README.md: add GLF OS credits
and adapt various config elements from it

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-13 00:15:20 +03:00
e170e9d2b7 editor/helix: use nil instead of nixd
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-12 22:40:19 +03:00
002b06bb91 nixos/config: add slim module from nuschtos
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-12 13:30:29 +03:00
f39a105caf modules/nixos/config/services.nix: enable avahi
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-12 13:30:29 +03:00
432fad779a hosts/dunamis/users/user/flatpak.nix: an app
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-12 13:30:29 +03:00
590238d3e9 desktop/gnome: restructure packages
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-12 13:30:29 +03:00
fff9e50163 hosts/dunamis/configuration.nix: switch to gnome
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-12 13:30:29 +03:00
161a5917f6 distibuted-build: change to ssh-ng
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-11 17:58:39 +03:00
e828500be7 distributed-build: move to modules/config/nix
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-11 13:32:46 +03:00
0db2cbfe19 modules/nixos/config/services: disable speechd
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-11 01:19:17 +03:00
590a94af56 user/flatpak: add comments, add/remove programs
hosts/dunamis/users/user/programs: bleh

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-11 00:38:51 +03:00
c6d5a071b4 flake.lock: bump
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-11 00:38:51 +03:00
9534e50252 desktop/gnome: select layouts individually
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-08 15:04:40 +03:00
989c740184 hosts/sarien: switch to gnome
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-08 15:04:40 +03:00
f6f5121d1e hosts/sarien: add swap
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-08 15:04:40 +03:00
391886ef59 dunamis/user/programs: libadwaita apps
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-08 15:04:40 +03:00
0aec9e92c1 dunamis/misc/nix-ssh-serve.nix: rename
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-08 14:59:09 +03:00
7662e9cd6e desktop/gnome: add extension, change shortcut
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-07 18:48:56 +03:00
5c11830083 desktop/gnome.nix: fix autologin
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-07 18:48:56 +03:00
4397eec2a1 hosts/morphius: set hostId, autologin
change boot.loader.timeout to 0

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-07 18:48:56 +03:00
3cd27e0e79 desktop/gnome: move to 25.11 opts, add exdludePackages
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-07 16:42:33 +03:00
572314fe46 flake.nix: PR that fixes nix/lix bug w/ sshServe
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-06 16:55:29 +03:00
854a3be744 hosts/dunamis: move nix.sshServe to misc
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-06 16:55:29 +03:00
a5a2e9ceac user/programs: remove devenv
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-06 16:55:29 +03:00
c58b5489d8 desktop/gnome: better theming
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-06 15:15:10 +03:00
4fb2c8cc12 hosts/morphius: change desktop, colors
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-06 15:15:10 +03:00
08deff70bc desktop/hyprland: refactor
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-06 15:15:10 +03:00
920c75e997 desktop/niri: lisgd for touchscreen gestures
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-06 15:15:09 +03:00
2108320d1d flake.lock: bump
flake.nix: restructure, add some inputs.*.follows

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-05 00:44:24 +03:00
463e6f1630 desktop/niri: screencast block for materialgram
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-05 00:44:24 +03:00
16eb328cf5 dunamis/user/programs.nix: add gpu-screen-recorder-gtk
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-05 00:44:24 +03:00
672f28c75c hosts/dunamis/disko/disk-main.nix: refactor
hosts/sarien/disko/default.nix: source dunamis/disko/disk-main.nix

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-05 00:44:24 +03:00
f5a5f4b87c desktop/niri: change focus-ring to border
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-30 16:52:21 +03:00
95671a0343 stylix: add gruvbox-dark-pale
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-30 16:52:21 +03:00
b63073cab7 config/nix: try to fix distributed builds
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-29 14:40:08 +03:00
a22109abba hosts/morphius: user conf default to ghostty term
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-28 16:01:18 +03:00
af05ec7980 hosts/morphius: switch desktop to niri
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-28 16:01:18 +03:00
ddd039c803 hosts/morphius: enable zramSwap
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-28 16:01:18 +03:00
8ae65a6752 desktop/niri: hotfix for other desktops
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-28 16:01:18 +03:00
d81c644665 desktop/niri: add border around walker
programs/syncthing: add morphius
config/users: add morphius

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-28 15:53:36 +03:00
f0ecc5bdb9 hosts/morphius: some changes
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-27 22:19:55 +03:00
7139cfb640 hosts/morphius: init new device
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-27 16:55:14 +03:00
5dfa9d62c4 flake.lock: bump
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-25 22:19:01 +03:00
aff9f72f2c desktop/niri: add gnome-text-editor
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-25 22:19:01 +03:00
7bc1d7e36a hosts: move additional config to misc/
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-24 23:04:03 +03:00
f213931b6f hosts/sarien: add autologin
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-24 13:22:44 +03:00
52dcc3279e refactor modules/desktop
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-24 13:01:05 +03:00
56bad06595 README.md: update
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-22 09:57:04 +03:00
afd1d00116 README.md: update
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-22 09:55:19 +03:00
14eaee2bbc desktop/niri: switch polkit-gnome to soteria, update layout, keybinds
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-22 09:55:19 +03:00
43334d6dbd config/nix: fix
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-22 09:55:19 +03:00
d70b2f7f8a hosts: bump system.stateVersion
flake.lock: bump

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-22 09:55:19 +03:00
38579e3cb4 config/security: new sysctls
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-22 09:55:19 +03:00
6658a54631 user/programs.nix: new programs
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-22 09:55:19 +03:00
9d51e09afe editor/zed: add fsharp
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-22 09:55:19 +03:00
30fcac5ff6 hosts/dunamis: switch theme
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-22 09:55:19 +03:00
fce3a4ff0c desktop/niri: waybar modules now round pills
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-15 11:13:44 +03:00
8ee252f59c flake.lock: bump
flake.nix: remove catppuccin

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-15 11:13:44 +03:00
807265c4bc LICENSE: change to actual MIT
Explanation: The version previously committed is a custom version of MIT-0,
modified to better reflect the nature of this project, as Nix code and related
files are not able to function as computer programs. However, upon further
consideration, it was determined that:
- Nix operates like an interpreted language, e.g., Python, and thus is
  susceptible to be treated as software.
- There's already a precedent of licensing Nix code under MIT.

This commit should be treated as a correction to license text and not as an
act of relicensing, as it is clearly stated in the original commit that the
intention was to relicense the project under an unmodified MIT license, as
identified in SPDX.

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-11 21:50:03 +03:00
d6db686273 disko: add autodefrag mount optiton
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-11 17:44:48 +03:00
4e2702dfd1 editor/helix: add config for fsharp
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-11 17:44:48 +03:00
487a413bca desktop/niri: change struts
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-11 17:44:48 +03:00
34fe54974c move power saving and home row mods to module
cleanup

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-11 17:44:48 +03:00
0fe66b9671 LICENSE: change license to MIT
The rationale is the Unlicense's sloppy wording and the fact that MIT License is
generally more recognized and also used in the official nixpkgs repository [1].
The only difference between licenses is a condition of including a copyright
notice when reusing large portions of the work. Thus, MIT license provides the
same level of dedication to the public domain with no additional restrictions
and is therefore considered a better reflection of the author's values and a
compatible solution for relicensing this project.

From this point, all work in this public repository is retroactively relicensed
under the MIT license, with no additional obligations applied to any copy of
the work being used in any scenario, as described in the MIT license, prior to
this point.

[1] see 3225b228e8/COPYING

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-10 20:47:30 +03:00
07838aa669 waybar restyle, new themes
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-09 19:18:44 +03:00
1a4f54d7bc user/flatpak: new music player
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-07 19:34:02 +03:00
1f3d819061 hosts/legion: finalise
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-07 19:32:25 +03:00
38193c62ec nixos/config: add nvidia vaapi option
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-07 17:31:41 +03:00
7f073e121c hosts/legion: move to new structure
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-07 17:25:09 +03:00
75990ccc86 programs/walker: more config
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-06 23:17:02 +03:00
561d02b173 hosts/sarien: theme back to nord
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-06 23:17:02 +03:00
4cf90e6dfa flatpak: omg cool apps
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-06 23:17:02 +03:00
6c7305c24d programs/walker: some config
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-06 17:00:04 +03:00
260502c6ce restructure, add walker
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-06 00:17:38 +03:00
ee3a505d38 stylix: fix
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-05 13:36:25 +03:00
4fdb88bca4 desktop/plasma: use gnome keyring
because it's used on every other desktop and signal client works only with it

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-05 13:27:08 +03:00
338dc7454f modules/config: fix
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-05 13:27:08 +03:00
1aad949947 stylix: change himalaya monospace font
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-04 20:38:05 +03:00
8701ea20c6 hosts/eldrid: add the actual module
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-04 19:47:27 +03:00
4652ce19db move around security
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-04 19:38:26 +03:00
9510cc48e2 fix some things
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-04 19:18:25 +03:00
03bcc94645 more work on hosts/ and modules/config
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-04 18:50:39 +03:00
a87f912600 hosts/sarien: new theme
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-04 18:12:28 +03:00
b55a50ada8 modules/config: init new module
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-04 18:12:28 +03:00
6ae0a38f62 flake.lock: bump mysecrets
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-03 23:44:09 +03:00
5a6daf52ca hosts: source modules from workstation
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-03 23:29:08 +03:00
7e2458b322 hosts: move to new structure
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-03 23:08:55 +03:00
5fe09a598a hosts/sarien: split up
modules/stylix: change wallpaper

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-03 22:09:18 +03:00
83949480c8 facter: move hardware config to mysecrets
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-03 14:46:32 +03:00
86ea201653 hosts/dunamis: add userborn
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-03 13:31:37 +03:00
3bf0d20c63 editor/helix: config for python
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-03 13:31:37 +03:00
9eca8b59d3 desktop/cosmic: small refactor
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-03 13:31:37 +03:00
5393154b91 hosts/dunamis: break up disko
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-03 13:31:37 +03:00
a349e3803d hosts/dunamis: break up nix
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-03 13:31:37 +03:00
5e8f5bf7f3 hosts/dunamis: break up boot
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-03 13:31:37 +03:00
6279b93b1e hosts/dunamis: back to niri
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-03 13:31:37 +03:00
019ea4247a replace nixos-hardware with nixos-facter
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-03 13:31:37 +03:00
8c9ab14a76 desktop/niri: experimental refactor
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-04-28 22:54:55 +03:00
9bee43fc50 networking: random mac
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-04-28 22:53:03 +03:00
38e0f83009 hosts/disko: move disk to a variable
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-04-28 22:53:03 +03:00
37d57cdfb5 user/programs: refactor
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-04-28 22:53:03 +03:00
3b5775f58b flake.lock: bump
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-04-28 22:53:03 +03:00
3cf1a29d54 desktop/cosmic
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-04-27 22:02:07 +03:00
17b2c4b55d desktop/plasma: fix 'cause stylix broke everything
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-04-27 12:10:16 +03:00
566c25977b hosts/eldrid: turn back into workstation
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-04-27 12:10:16 +03:00
168 changed files with 6370 additions and 5218 deletions

20
LICENSE Normal file
View File

@ -0,0 +1,20 @@
// SPDX-License-Identifier: MIT
Copyright 2025 unexplrd@linerds.us
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the “Software”), to deal
in the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -1,6 +1,17 @@
<h1>So what is this?</h1>
<p>This is a personal config based on <a href="https://github.com/numtide/blueprint">Blueprint</a>, and it's pretty usable. If one wants to use it, they have to change and adapt it for their own use case, for that please visit the original repo, as it contains the necessary documentation.</p>
<h2>TODOs:</h2>
<ul>
<li>i'll put that in when i recall what i wanted to add</li>
</ul>
# NixOS Configuration
## So what is this?
This is a personal NixOS config based on
[Blueprint](https://github.com/numtide/blueprint).
This repo is mainly used to sync changes between devices. If you want to
use it - it's pretty composable, so modules can be integrated in your
configs without much hassle.
## Credits
Configurations I took code/ideas from:
- [github:TheMaxMur/NixOS-Configuration](https://github.com/TheMaxMur/NixOS-Configuration)
- [github:nix-community/srvos](https://github.com/nix-community/srvos)
- [github:cloud-gouv/securix](https://github.com/cloud-gouv/securix)
- [GLF OS](https://www.gaminglinux.fr/glf-os/en)
Thx a lot <3

View File

@ -1,24 +0,0 @@
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <https://unlicense.org/>

717
flake.lock generated

File diff suppressed because it is too large Load Diff

129
flake.nix
View File

@ -2,41 +2,104 @@
description = "unexplrd's personal configuration";
inputs = {
blueprint.url = "github:numtide/blueprint";
catppuccin.url = "github:catppuccin/nix";
chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
disko.url = "github:nix-community/disko/latest";
home-manager.url = "github:nix-community/home-manager";
hyprland.url = "github:hyprwm/Hyprland";
hyprsunset.url = "github:hyprwm/hyprsunset";
lanzaboote.url = "github:nix-community/lanzaboote/v0.4.2";
# lix.url = "https://git.lix.systems/lix-project/nixos-module/archive/2.92.0-2.tar.gz";
mysecrets.url = "git+ssh://gitea@gitea.linerds.us/unexplrd/nix-secrets";
# neve.url = "git+https://gitea.linerds.us/unexplrd/Neve";
nix-flatpak.url = "github:gmodena/nix-flatpak";
nix-index-database.url = "github:nix-community/nix-index-database";
# nixos-cosmic.url = "github:lilyinstarlight/nixos-cosmic";
# lix = {
# url = "https://git.lix.systems/lix-project/nixos-module/archive/2.93.1.tar.gz";
# inputs.nixpkgs.follows = "nixpkgs";
# };
# neve = {
# inputs.nixvim.follows = "nixvim";
# url = "git+https://gitea.linerds.us/unexplrd/Neve";
# };
# nixvim.url = "github:nix-community/nixvim";
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
nixpkgs.url = "github:NixOS/nixpkgs?ref=nixos-unstable";
systems.url = "github:nix-systems/default";
blueprint = {
url = "github:numtide/blueprint";
inputs.nixpkgs.follows = "nixpkgs";
inputs.systems.follows = "systems";
};
chaotic = {
url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
inputs = {
home-manager.follows = "home-manager";
nixpkgs.follows = "nixpkgs";
};
};
disko = {
url = "github:nix-community/disko/latest";
inputs.nixpkgs.follows = "nixpkgs";
};
ghostty = {
url = "github:ghostty-org/ghostty";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-utils.inputs.systems.follows = "systems";
};
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
hyprland = {
url = "github:hyprwm/Hyprland";
inputs = {
systems.follows = "systems";
nixpkgs.follows = "nixpkgs";
};
};
hyprsunset = {
url = "github:hyprwm/hyprsunset";
inputs = {
hyprland-protocols.follows = "hyprland/hyprland-protocols";
hyprutils.follows = "hyprland/hyprutils";
hyprwayland-scanner.follows = "hyprland/hyprwayland-scanner";
nixpkgs.follows = "nixpkgs";
systems.follows = "hyprland/systems";
};
};
lanzaboote = {
url = "github:nix-community/lanzaboote/v0.4.2";
inputs.nixpkgs.follows = "nixpkgs";
};
mysecrets = {
url = "git+ssh://gitea@gitea.linerds.us/unexplrd/nix-secrets";
flake = false;
};
nix-flatpak.url = "github:gmodena/nix-flatpak";
nix-index-database = {
url = "github:nix-community/nix-index-database";
inputs.nixpkgs.follows = "nixpkgs";
};
nixos-cosmic = {
url = "github:lilyinstarlight/nixos-cosmic";
inputs = {
nixpkgs-stable.follows = "nixpkgs-stable";
nixpkgs.follows = "nixpkgs";
};
};
nixos-facter-modules.url = "github:numtide/nixos-facter-modules";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11";
sops-nix.url = "github:mic92/sops-nix";
stylix.url = "github:danth/stylix/8b0d9317edd57c5374adcf6957ae4775875c2a9d";
# TODO: somehow reduce the number of *.inputs.nixpkgs.follows = "nixpkgs" stuff, mb a function?
blueprint.inputs.nixpkgs.follows = "nixpkgs";
chaotic.inputs.nixpkgs.follows = "nixpkgs";
disko.inputs.nixpkgs.follows = "nixpkgs";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
hyprland.inputs.nixpkgs.follows = "nixpkgs";
hyprsunset.inputs.hyprland-protocols.follows = "hyprland/hyprland-protocols";
hyprsunset.inputs.hyprutils.follows = "hyprland/hyprutils";
hyprsunset.inputs.nixpkgs.follows = "nixpkgs";
lanzaboote.inputs.nixpkgs.follows = "nixpkgs";
# lix.inputs.nixpkgs.follows = "nixpkgs";
mysecrets.flake = false;
# neve.inputs.nixvim.follows = "nixvim";
nix-index-database.inputs.nixpkgs.follows = "nixpkgs";
sops-nix.inputs.nixpkgs.follows = "nixpkgs";
nixpkgs = {
url = "github:NixOS/nixpkgs/nixos-unstable";
# workaround for `unexpected Nix daemon error: error: serialised integer 7022364302122705765 is too large for type 'j'`
# url = "github:NixOS/nixpkgs/pull/413627/head";
};
sops-nix = {
url = "github:mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
stylix = {
url = "github:danth/stylix";
inputs = {
# home-manager.follows = "home-manager";
nixpkgs.follows = "nixpkgs";
systems.follows = "systems";
};
};
walker = {
url = "github:abenz1267/walker";
inputs = {
nixpkgs.follows = "nixpkgs";
systems.follows = "systems";
};
};
};
outputs = inputs: inputs.blueprint {inherit inputs;};

View File

@ -1,56 +0,0 @@
{
pkgs,
config,
inputs,
...
}: {
imports = with inputs; [
chaotic.nixosModules.default
lanzaboote.nixosModules.lanzaboote
];
boot = {
# kernelPackages = pkgs.linuxPackages_latest;
consoleLogLevel = 0;
kernelPackages = pkgs.linuxPackages_cachyos;
kernelModules = ["kvm-amd"];
kernelParams = [
# "mitigations=auto"
# "spectre_v2=on"
# "spectre_v2_user=on"
# "spectre_bhi=on"
# "spec_store_bypass_disable=on"
# "tsx=off"
# "kvm.nx_huge_pages=force"
# "l1d_flush=on"
"amd_iommu=force_isolation"
"debugfs=off"
"efi=disable_early_pci_dma"
"gather_data_sampling=force"
# "ia32_emulation=0"
"intel_iommu=on"
"iommu.passthrough=0"
"iommu.strict=1"
"iommu=force"
# "lockdown=confidentiality"
# "module.sig_enforce=1"
"page_alloc.shuffle=1"
# "reg_file_data_sampling=on"
# "spec_rstack_overflow=safe-ret"
"vsyscall=none"
];
initrd = {
availableKernelModules = ["xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod"];
systemd.enable = true; # needed for auto-unlocking with TPM
};
loader.efi.canTouchEfiVariables = true;
loader.systemd-boot = {
enable = !config.boot.lanzaboote.enable;
consoleMode = "auto";
};
lanzaboote = {
enable = true;
pkiBundle = "/var/lib/sbctl";
};
plymouth.enable = true;
};
}

View File

@ -1,34 +1,42 @@
{inputs, ...}: {
imports = with inputs; [
self.modules.shared.nixos
self.nixosModules.desktop
self.nixosModules.system
./boot.nix
./disko.nix
./hardware.nix
./networking.nix
./nix.nix
./programs.nix
./services.nix
./sops.nix
./users.nix
./minecraft.nix
./disko
./misc
];
desktop.niri.enable = true;
environment.memoryAllocator.provider = "mimalloc";
locale.ukrainian.enable = true;
module.stylix = {
enable = true;
theme = "helios";
networking = {
hostId = "c7f6c4a1";
hostName = "dunamis";
};
opentabletdriver.enable = false;
qmk-vial.enable = true;
security.basic.enable = true;
system.stateVersion = "25.05";
system.stateVersion = "25.11";
time.timeZone = "Europe/Kyiv";
virtual.libvirt.enable = true;
wireless = {
bluetooth.enable = true;
bluetooth.enableBlueman = true;
desktop.niri.enable = true;
services.displayManager.autoLogin = {
enable = true;
user = "user";
};
module = {
config = {
secureBoot = true;
tpmDiskUnlock = true;
vaapi = "intel-media-driver";
};
stylix = {
enable = true;
theme = "sandcastle";
};
locale = "uk_UA.UTF-8";
misc = {
opentabletdriver.enable = false;
qmk-vial.enable = true;
};
virt.libvirt.enable = true;
};
}

View File

@ -1,81 +0,0 @@
{inputs, ...}: {
imports = with inputs; [
disko.nixosModules.disko
];
disko.devices.nodev = {
"/tmp" = {
fsType = "tmpfs";
mountOptions = ["rw" "nosuid" "nodev"];
};
};
disko.devices.disk.main = {
type = "disk";
device = "/dev/disk/by-id/nvme-eui.000000000000000100a075244b5d6185";
content = {
type = "gpt";
partitions = {
ESP = {
size = "2G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [
"umask=0077"
"fmask=0022"
"dmask=0022"
"noexec"
"nosuid"
"nodev"
];
};
};
luks = {
size = "100%";
content = {
type = "luks";
name = "luks-main";
initrdUnlock = true;
settings.allowDiscards = true;
content = {
type = "btrfs";
extraArgs = ["-f"];
subvolumes = {
"@nixos-root" = {
mountpoint = "/";
mountOptions = [
"compress=zstd"
"noatime"
"noexec"
];
};
"@home" = {
mountpoint = "/home";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@storage" = {
mountpoint = "/storage";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@nix" = {
mountpoint = "/nix";
mountOptions = [
"compress-force=zstd"
"noatime"
];
};
};
};
};
};
};
};
};
}

View File

@ -0,0 +1,19 @@
{
config,
inputs,
...
}: let
inherit (config.networking) hostId;
disk = "/dev/disk/by-id/nvme-eui.000000000000000100a075244b5d6185";
in {
imports = with inputs; [
disko.nixosModules.disko
];
disko.devices.nodev = {
"/tmp" = {
fsType = "tmpfs";
mountOptions = ["rw" "nosuid" "nodev"];
};
};
disko.devices.disk.main = import ./disk-main.nix {inherit disk hostId;};
}

View File

@ -0,0 +1,62 @@
{
disk,
hostId,
}: {
type = "disk";
device = disk;
content = {
type = "gpt";
partitions = {
ESP = {
size = "2G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [
"umask=0077"
"fmask=0022"
"dmask=0022"
"noexec"
"nosuid"
"nodev"
];
};
};
luks = {
size = "100%";
content = {
type = "luks";
name = "luks-" + hostId;
initrdUnlock = true;
settings.allowDiscards = true;
content = let
mountOptions = ["autodefrag" "compress-force=zstd" "noatime"];
in {
type = "btrfs";
extraArgs = ["-f"];
subvolumes = {
"@nixos-root" = {
mountpoint = "/";
mountOptions = mountOptions ++ ["noexec"];
};
"@home" = {
mountpoint = "/home";
inherit mountOptions;
};
"@storage" = {
mountpoint = "/storage";
inherit mountOptions;
};
"@nix" = {
mountpoint = "/nix";
inherit mountOptions;
};
};
};
};
};
};
};
}

View File

@ -1,17 +0,0 @@
{
lib,
inputs,
modulesPath,
...
}: {
imports = with inputs.nixos-hardware.nixosModules; [
(modulesPath + "/installer/scan/not-detected.nix")
common-cpu-amd-pstate
common-gpu-intel
common-hidpi
common-pc-ssd
];
hardware.enableRedistributableFirmware = true;
hardware.intelgpu.vaapiDriver = "intel-media-driver";
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}

View File

@ -0,0 +1,6 @@
{
imports = [
# ./minecraft.nix
# ./nix-ssh-serve.nix
];
}

View File

@ -1,7 +0,0 @@
{
networking = {
hostId = "c7f6c4a1";
hostName = "dunamis";
networkmanager.enable = true;
};
}

View File

@ -1,18 +0,0 @@
# TODO: better file name
{
config,
pkgs,
...
}: {
nix = {
package = pkgs.lix;
channel.enable = false;
settings.experimental-features = ["nix-command" "flakes"];
daemonCPUSchedPolicy = "idle";
sshServe = {
enable = true;
write = true;
keys = map (f: builtins.readFile f) config.users.users.user.openssh.authorizedKeys.keyFiles;
};
};
}

View File

@ -1,26 +0,0 @@
{
inputs,
config,
pkgs,
...
}: let
inherit (config.sops) secrets;
inherit (inputs) mysecrets;
in {
nix.settings.trusted-users = ["user" "nix-ssh"];
users.mutableUsers = false;
users.users = {
user = {
hashedPasswordFile = secrets."user-password-hashed".path;
extraGroups = ["wheel" "video" "libvirtd" "dialout"];
isNormalUser = true;
shell = pkgs.fish;
openssh.authorizedKeys.keyFiles = map (f: "${mysecrets}/ssh/user/id_${f}_ed25519.pub") [
"dunamis"
"eldrid"
"sarien"
"legion"
];
};
};
}

View File

@ -1,14 +0,0 @@
{
inputs,
osConfig,
...
}: {
imports = with inputs; [
nix-index-database.hmModules.nix-index
self.homeModules.desktop
self.homeModules.programs
];
inherit (osConfig) desktop;
home.stateVersion = osConfig.system.stateVersion;
home.sessionPath = ["$HOME/.local/bin"];
}

View File

@ -1,7 +1 @@
{
imports = [
./common.nix
./flatpak.nix
./programs.nix
];
}
{flake, ...}: {imports = [flake.modules.shared.user];}

View File

@ -1,90 +0,0 @@
{pkgs, ...}: {
console.yazi.enable = true;
editor.helix.enable = true;
shell = {
fish.enable = true;
oh-my-posh.enable = true;
};
syncthing.enable = true;
terminal.wezterm.enable = true;
terminal.ghostty.enable = true;
services = {
pueue.enable = true; # process queue in rust
ssh-agent.enable = true;
};
programs = {
bat.enable = true; # cat in rust
btop = {
enable = true;
settings.update_ms = 200;
};
direnv.enable = true;
direnv.silent = true;
eza.enable = true; # ls in rust
fd.enable = true; # find in rust
fzf.enable = true; # fuzzy finder in rust
git = {
enable = true;
delta.enable = true; # diff in rust
signing.format = "ssh";
aliases = {
cl = "clone";
co = "checkout";
pom = "push origin main";
};
};
gitui.enable = true; # git ui in rust
jujutsu.enable = true; # vcs in rust
keychain = {
enable = true;
keys = ["id_ed25519"];
};
nix-index-database.comma.enable = true;
nix-index.enable = true;
nix-your-shell.enable = true;
pay-respects.enable = true; # thefuck in rust
ripgrep.enable = true; # grep in rust
zoxide.enable = true; # fuzzy cd in rust
};
home.packages = with pkgs; [
alejandra # nix formatter in rust
bluetuith # bluetooth tui in go
devenv # programming deps in rust
dua # disk space usage in rust
duf # better df in go
fend # calculator in rust
flatpak # flatpak cli
jj-fzf # fuzzy finder jujutsu tui
just # make in rust
mprocs # process runner in rust
ouch # archive manager in rust
overskride # bluetooth gui in rust
pika-backup # borg gui in rust
pinentry-qt # pinentry for rbw
procs # ps in rust
rbw # bitwarden cli in rust
sd # sed in rust
silicon # create code pics in rust
trashy # trash cli in rust
# vial # qmk keyboard configuring app
virt-manager # libvirt gui
waycheck # check wayland protocols
];
xdg.desktopEntries = {
uni = {
actions."Copy".exec = "fish -c \"~/.local/bin/uni --copy\"";
categories = ["Utility" "X-Launch" "Network"];
comment = "Select and open or copy URLs from a list.";
exec = "fish -c \"~/.local/bin/uni\"";
icon = "web-browser";
name = "Uni URL Handler";
startupNotify = true;
terminal = false;
type = "Application";
};
};
}

View File

@ -1,36 +0,0 @@
{
pkgs,
config,
inputs,
...
}: {
imports = with inputs; [
chaotic.nixosModules.default
lanzaboote.nixosModules.lanzaboote
];
boot = {
# kernelPackages = pkgs.linuxPackages_latest;
kernelPackages = pkgs.linuxPackages_cachyos;
loader.efi.canTouchEfiVariables = true;
loader.systemd-boot = {
enable = !config.boot.lanzaboote.enable;
consoleMode = "auto";
};
plymouth.enable = true;
initrd = {
availableKernelModules = ["ahci" "xhci_pci" "virtio_pci" "sr_mod" "virtio_blk" "xe" "i915"];
kernelModules = [];
};
kernelModules = ["kvm-intel"];
extraModulePackages = [];
lanzaboote = {
enable = true;
pkiBundle = "/var/lib/sbctl";
};
};
console = {
earlySetup = true;
packages = [pkgs.terminus_font];
font = "${pkgs.terminus_font}/share/consolefonts/ter-c18n.psf.gz";
};
}

View File

@ -1,35 +1,27 @@
{inputs, ...}: {
imports = with inputs; [
self.modules.shared.nixos
self.nixosModules.desktop
self.nixosModules.system
./boot.nix
./disko.nix
./hardware.nix
./networking.nix
./nix.nix
./power-saving.nix
../dunamis/programs.nix
./services.nix
./sops.nix
./users.nix
./disko
./hardware
./misc
];
# desktop.niri.enable = true;
locale.ukrainian.enable = true;
module.stylix = {
enable = true;
theme = "nord";
networking = {
hostId = "14f63637";
hostName = "eldrid";
};
opentabletdriver.enable = false;
system.stateVersion = "25.11";
time.timeZone = "Europe/Kyiv";
# qmk-vial.enable = true;
desktop.niri.enable = true;
security.basic.enable = true;
system.stateVersion = "25.05";
services.displayManager.autoLogin = {
enable = true;
user = "user";
};
swapDevices = [
{
@ -38,13 +30,21 @@
}
];
time.timeZone = "Europe/Kyiv";
# virtual.libvirt.enable = true;
# wireless = {
# wifi.enable = true;
# bluetooth.enable = true;
# bluetooth.enableBlueman = true;
# };
module = {
config = {
laptop.homeRowMods = true;
powerSave = true;
secureBoot = true;
useIwd = true;
vaapi = "intel-media-driver";
};
stylix = {
enable = true;
theme = "sandcastle";
};
locale = "uk_UA.UTF-8";
misc = {
qmk-vial.enable = true;
};
};
}

View File

@ -1,94 +0,0 @@
{inputs, ...}: {
imports = with inputs; [
disko.nixosModules.disko
];
disko.devices.nodev = {
"/tmp" = {
fsType = "tmpfs";
mountOptions = ["rw" "nosuid" "nodev"];
};
};
disko.devices.disk.main = {
type = "disk";
device = "/dev/nvme0n1";
content = {
type = "gpt";
partitions = {
ESP = {
size = "1G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [
"umask=0077"
"fmask=0022"
"dmask=0022"
"noexec"
];
};
};
luks = {
size = "100%";
content = {
type = "luks";
name = "lukscrypted";
initrdUnlock = true;
settings.allowDiscards = true;
content = {
type = "btrfs";
extraArgs = ["-f"];
subvolumes = {
"@nixos" = {
mountpoint = "/";
mountOptions = [
"compress=zstd"
"noatime"
# "noexec"
];
};
"@home" = {
mountpoint = "/home";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@flatpak" = {
mountpoint = "/var/lib/flatpak";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@storage" = {
mountpoint = "/storage";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@swap" = {
mountpoint = "/swap";
mountOptions = [
"compress=zstd"
"noatime"
# "noexec"
];
};
# "@nix" = {
# mountpoint = "/nix";
# mountOptions = [
# "compress=zstd"
# "noatime"
# ];
# };
};
};
};
};
};
};
};
}

View File

@ -0,0 +1,19 @@
{
config,
inputs,
...
}: let
inherit (config.networking) hostId;
disk = "/dev/disk/by-id/nvme-eui.e8238fa6bf530001001b444a44022ad0";
in {
imports = with inputs; [
disko.nixosModules.disko
];
disko.devices.nodev = {
"/tmp" = {
fsType = "tmpfs";
mountOptions = ["rw" "nosuid" "nodev"];
};
};
disko.devices.disk.main = import ./disk-main.nix {inherit disk hostId;};
}

View File

@ -0,0 +1,88 @@
{
disk,
hostId,
}: {
type = "disk";
device = disk;
content = {
type = "gpt";
partitions = {
ESP = {
size = "1G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [
"umask=0077"
"fmask=0022"
"dmask=0022"
"noexec"
"nosuid"
"nodev"
];
};
};
luks = {
size = "100%";
content = {
type = "luks";
name = "luks-" + hostId;
initrdUnlock = true;
settings.allowDiscards = true;
content = {
type = "btrfs";
extraArgs = ["-f"];
subvolumes = {
"@nixos" = {
mountpoint = "/";
mountOptions = [
"compress=zstd"
"noatime"
# "noexec"
];
};
"@home" = {
mountpoint = "/home";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@flatpak" = {
mountpoint = "/var/lib/flatpak";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@storage" = {
mountpoint = "/storage";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@swap" = {
mountpoint = "/swap";
mountOptions = [
"compress=zstd"
"noatime"
# "noexec"
];
};
# "@nix" = {
# mountpoint = "/nix";
# mountOptions = [
# "compress=zstd"
# "noatime"
# ];
# };
};
};
};
};
};
};
}

View File

@ -0,0 +1,11 @@
{
imports = [
./laptop
];
services = {
logind = {
lidSwitch = "ignore";
powerKey = "suspend";
};
};
}

View File

@ -0,0 +1,86 @@
{pkgs, ...}: let
cb-ucm-conf = with pkgs;
alsa-ucm-conf.overrideAttrs {
wttsrc = fetchFromGitHub {
owner = "WeirdTreeThing";
repo = "alsa-ucm-conf-cros";
rev = "a4f0ed6cf59163fb571c33a81a6b40b6f53ed57d";
hash = "sha256-H0BsRzHSEJ6XCZB/Rvb3w+uGCzr+kAvAwcHWqYEtp6w=";
};
unpackPhase = ''
runHook preUnpack
tar xf "$src"
runHook postUnpack
'';
installPhase = ''
runHook preInstall
mkdir -p $out/share/alsa
cp -r alsa-ucm*/ucm2 $out/share/alsa
runHook postInstall
'';
};
in {
environment = {
systemPackages = [pkgs.sof-firmware];
sessionVariables.ALSA_CONFIG_UCM2 = "${cb-ucm-conf}/share/alsa/ucm2";
etc = {
"wireplumber/main.lua.d/51-increase-headroom.lua".text = ''
rule = {
matches = {
{
{ "node.name", "matches", "alsa_output.*" },
},
},
apply_properties = {
["api.alsa.headroom"] = 4096,
},
}
table.insert(alsa_monitor.rules,rule)
'';
};
};
system.replaceDependencies.replacements = [
{
original = pkgs.alsa-ucm-conf;
replacement = cb-ucm-conf;
}
];
boot.extraModprobeConfig = ''
options snd-intel-dspcfg dsp_driver=3
'';
services.pipewire.wireplumber.configPackages = [
(pkgs.writeTextDir "share/wireplumber/main.lua.d/51-increase-headroom.lua" ''
rule = {
matches = {
{
{ "node.name", "matches", "alsa_output.*" },
},
},
apply_properties = {
["api.alsa.headroom"] = 4096,
},
}
table.insert(alsa_monitor.rules,rule)
'')
(pkgs.writeTextDir "share/wireplumber/main.lua.d/51-avs-dmic.lua" ''
rule = {
matches = {
{
{ "node.nick", "equals", "Internal Microphone" },
},
},
apply_properties = {
["audio.format"] = "S16LE",
},
}
table.insert(alsa_monitor.rules, rule)
'')
];
}

View File

@ -1,50 +1,4 @@
{
config,
lib,
pkgs,
# modulesPath,
...
}: let
cb-ucm-conf = pkgs.alsa-ucm-conf.overrideAttrs {
wttsrc = pkgs.fetchFromGitHub {
owner = "WeirdTreeThing";
repo = "chromebook-ucm-conf";
rev = "b6ce2a7";
hash = "sha256-QRUKHd3RQmg1tnZU8KCW0AmDtfw/daOJ/H3XU5qWTCc=";
};
postInstall = ''
cp -R $wttsrc/common/* $out/share/alsa/ucm2/common
cp -R $wttsrc/codecs/* $out/share/alsa/ucm2/codecs
cp -R $wttsrc/platforms/* $out/share/alsa/ucm2/platforms
cp -R $wttsrc/sof-rt5682 $out/share/alsa/ucm2/conf.d
cp -R $wttsrc/sof-cs42l42 $out/share/alsa/ucm2/conf.d
'';
};
in {
hardware.graphics = {
enable = true;
extraPackages = with pkgs; [
intel-media-driver
vaapiIntel
vpl-gpu-rt
];
};
# intel ax201 wifi card firmware
hardware.enableRedistributableFirmware = true;
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
services = {
logind = {
lidSwitch = "ignore";
powerKey = "suspend";
};
};
# physically broken touchscreen
services.udev.extraRules = "ACTION==\"add|change\", KERNELS==\"input[0-9]*\", SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"27c6\", ATTRS{id/product}==\"0e84\", ENV{LIBINPUT_IGNORE_DEVICE}=\"1\"";
services.keyd = {
enable = true;
keyboards.internal = {
@ -137,33 +91,4 @@ in {
};
};
};
system.replaceDependencies.replacements = [
{
original = pkgs.alsa-ucm-conf;
replacement = cb-ucm-conf;
}
];
services.pipewire.wireplumber.configPackages = [
(pkgs.writeTextDir "share/wireplumber/main.lua.d/51-increase-headroom.lua" ''
rule = {
matches = {
{
{ "node.name", "matches", "alsa_output.*" },
},
},
apply_properties = {
["api.alsa.headroom"] = 4096,
},
}
table.insert(alsa_monitor.rules,rule)
'')
];
boot = {
extraModprobeConfig = ''
options snd-intel-dspcfg dsp_driver=3
'';
};
}

View File

@ -0,0 +1,7 @@
{
imports = [
./cb-audio-fix.nix
./cb-keyboard.nix
./touchscreen-fix.nix
];
}

View File

@ -0,0 +1,3 @@
{
services.udev.extraRules = "ACTION==\"add|change\", KERNELS==\"input[0-9]*\", SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"27c6\", ATTRS{id/product}==\"0e84\", ENV{LIBINPUT_IGNORE_DEVICE}=\"1\"";
}

View File

@ -1,23 +0,0 @@
{
networking.firewall.allowedTCPPorts = [25565];
networking.firewall.allowedUDPPorts = [25565];
virtualisation.oci-containers = {
backend = "podman";
containers.minecraft = {
image = "docker.io/itzg/minecraft-server:java17-alpine";
volumes = ["/storage/minecraft:/data"];
ports = ["25565:25565"];
environment = {
DIFFICULTY = "easy";
EULA = "true";
GUI = "false";
INIT_MEMORY = "6G";
MAX_MEMORY = "6G";
ONLINE_MODE = "false";
TYPE = "forge";
VERSION = "1.20.1";
VIEW_DISTANCE = "8";
};
};
};
}

View File

@ -0,0 +1,6 @@
{
imports = [
# ./distributed-build.nix
./undervolt.nix
];
}

View File

@ -0,0 +1,7 @@
{
services.undervolt = {
enable = true;
# coreOffset = -150;
turbo = 1;
};
}

View File

@ -1,9 +0,0 @@
{
networking = {
networkmanager.enable = true;
hostName = "eldrid";
hosts = {
"192.168.1.42" = ["dunamis"];
};
};
}

View File

@ -1,34 +0,0 @@
# TODO: better file name
{
config,
pkgs,
...
}: let
hostName =
if (config.networking.hostName == "vylxae")
then "sarien"
else config.networking.hostName;
inherit (config.sops) secrets;
inherit (inputs) mysecrets;
in {
nix = {
package = pkgs.lix;
channel.enable = false;
daemonCPUSchedPolicy = "idle";
settings = {
experimental-features = ["nix-command" "flakes"];
builders-use-substitutes = true;
};
distributedBuilds = true;
buildMachines = [
{
hostName = "dunamis";
sshUser = "nix-ssh";
system = "x86_64-linux";
sshKey = secrets."ssh-${hostName}-user".path;
supportedFeatures = ["nixos-test" "big-parallel" "kvm" "benchmark"];
publicHostKey = builtins.readFile "${mysecrets}/ssh/ssh_host_ed25519_dunamis.base64";
}
];
};
}

View File

@ -1,7 +0,0 @@
{
powerManagement.enable = true;
powerManagement.powertop.enable = true;
services.power-profiles-daemon.enable = true;
services.thermald.enable = true;
services.upower.enable = true;
}

View File

@ -1,18 +0,0 @@
{pkgs, ...}: {
programs.neovim = {
enable = false;
viAlias = true;
vimAlias = true;
};
programs.nh = {
enable = true;
clean.enable = true;
clean.extraArgs = "--keep-since 7d --keep 3";
flake = "/home/user/.config/nixos";
};
programs.fish.enable = true;
environment.systemPackages = with pkgs; [
helix
# nushell
];
}

View File

@ -1,21 +0,0 @@
{
services = {
# flatpak.enable = true;
fstrim.enable = true;
openssh.enable = true;
power-profiles-daemon.enable = true;
syncthing.openDefaultPorts = true;
dnscrypt-proxy2 = {
enable = true;
settings = {
require_dnssec = true;
server_names = ["mullvad-doh"];
bootstrap_resolvers = ["9.9.9.11:53" "9.9.9.9:53"];
};
};
scx = {
enable = true;
scheduler = "scx_flash";
};
};
}

View File

@ -1,64 +0,0 @@
{
config,
inputs,
...
}: let
inherit (inputs) mysecrets;
hostName =
if (config.networking.hostName == "vylxae")
then "sarien"
else config.networking.hostName;
sopsFile = mysecrets + "/hosts/${hostName}.yaml";
dotSsh = name: "/home/user/.ssh/" + name;
sshKey = {
mode = "0400";
owner = "user";
};
in {
imports = with inputs; [
sops-nix.nixosModules.sops
];
sops = {
age = {
sshKeyPaths = ["/etc/ssh/ssh_host_ed25519_key"];
keyFile = "/var/lib/sops-nix/key.txt";
generateKey = true;
};
defaultSopsFile = mysecrets + "/common.yaml";
secrets = {
"user-password-hashed".neededForUsers = true;
"ssh-config" = {
path = dotSsh "config";
mode = "0400";
owner = "user";
};
"ssh-${hostName}-user" = {
inherit sopsFile;
inherit (sshKey) mode owner;
path = dotSsh "id_ed25519";
};
"ssh-${hostName}-user.pub" = {
inherit sopsFile;
inherit (sshKey) mode owner;
path = dotSsh "id_ed25519.pub";
};
"ssh-unexplrd" = {
inherit (sshKey) mode owner;
path = dotSsh "id_unexplrd_ed25519";
};
"ssh-unexplrd.pub" = {
inherit (sshKey) mode owner;
path = dotSsh "id_unexplrd_ed25519.pub";
};
"ssh-uni" = {
inherit (sshKey) mode owner;
path = dotSsh "id_uni_ed25519";
};
"ssh-uni.pub" = {
inherit (sshKey) mode owner;
path = dotSsh "id_uni_ed25519.pub";
};
};
};
}

View File

@ -1,100 +0,0 @@
{inputs, ...}: {
imports = with inputs; [
nix-flatpak.homeManagerModules.nix-flatpak
];
services.flatpak = {
enable = true;
uninstallUnmanaged = true;
remotes = [
{
name = "flathub";
location = "https://dl.flathub.org/repo/flathub.flatpakrepo";
}
{
name = "hero-persson";
location = "https://hero-persson.github.io/unmojang-flatpak/index.flatpakrepo";
}
];
packages = [
# misc
"app.zen_browser.zen"
"net.mullvad.MullvadBrowser"
"com.obsproject.Studio"
"com.bitwarden.desktop"
"com.github.tchx84.Flatseal"
"de.haeckerfelix.Fragments"
"org.qbittorrent.qBittorrent"
# "com.transmissionbt.Transmission"
"com.usebottles.bottles"
"com.logseq.Logseq"
# chatting
"org.signal.Signal"
"im.riot.Riot"
"org.telegram.desktop"
"io.github.kukuruzka165.materialgram"
"io.github.spacingbat3.webcord"
"org.mozilla.Thunderbird"
# media
"io.bassi.Amberol"
"io.freetubeapp.FreeTube"
#"io.github.celluloid_player.Celluloid"
# "io.mpv.Mpv"
# gaming
#"com.github._0negal.Viper"
"net.lutris.Lutris"
"com.heroicgameslauncher.hgl"
{
appId = "org.unmojang.FjordLauncher";
origin = "hero-persson";
}
"org.freedesktop.Platform.VulkanLayer.MangoHud//24.08"
"org.freedesktop.Platform.VulkanLayer.gamescope//24.08"
];
overrides = {
"global" = {
# Force Wayland by default
Context = {
sockets = ["wayland" "!x11" "!fallback-x11"];
filesystems = [
"!host"
"!home"
"!~/.ssh"
"xdg-run/pipewire-0"
"xdg-config/gtk-3.0:ro"
"xdg-config/gtk-4.0:ro"
"~/.local/share/icons:ro"
"/nix/store:ro"
];
};
Environment = {
ELECTRON_OZONE_PLATFORM_HINT = "wayland";
};
};
"com.valvesoftware.Steam" = {
Context = {
sockets = ["x11" "wayland"];
filesystems = ["/storage/games/steam"];
};
Environment.STEAM_FORCE_DESKTOPUI_SCALING = "1.3";
};
"org.signal.Signal" = {
Environment.SIGNAL_PASSWORD_STORE = "gnome-libsecret";
};
"net.lutris.Lutris".Context = {
sockets = ["x11" "wayland"];
filesystems = ["/storage/games/lutris" "~/games/lutris"];
};
"com.heroicgameslauncher.hgl".Context = {
sockets = ["x11" "wayland"];
filesystems = ["/storage/games/heroic" "~/games/heroic"];
};
"com.usebottles.Bottles" = {
Context.sockets = ["x11" "wayland"];
};
};
};
}

View File

@ -1,8 +1 @@
{lib, ...}: {
imports = [
../../../dunamis/users/user/common.nix
../../../dunamis/users/user/programs.nix
# ../../../dunamis/users/user/flatpak.nix
];
syncthing.enable = lib.mkDefault false;
}
{flake, ...}: {imports = [flake.modules.shared.user];}

View File

@ -1,56 +0,0 @@
{
pkgs,
config,
inputs,
...
}: {
imports = with inputs; [
chaotic.nixosModules.default
lanzaboote.nixosModules.lanzaboote
];
boot = {
# kernelPackages = pkgs.linuxPackages_latest;
consoleLogLevel = 0;
kernelPackages = pkgs.linuxPackages_cachyos;
kernelModules = ["kvm-amd"];
kernelParams = [
# "mitigations=auto"
# "spectre_v2=on"
# "spectre_v2_user=on"
# "spectre_bhi=on"
# "spec_store_bypass_disable=on"
# "tsx=off"
# "kvm.nx_huge_pages=force"
# "l1d_flush=on"
"amd_iommu=force_isolation"
"debugfs=off"
"efi=disable_early_pci_dma"
"gather_data_sampling=force"
# "ia32_emulation=0"
"intel_iommu=on"
"iommu.passthrough=0"
"iommu.strict=1"
"iommu=force"
# "lockdown=confidentiality"
# "module.sig_enforce=1"
"page_alloc.shuffle=1"
# "reg_file_data_sampling=on"
# "spec_rstack_overflow=safe-ret"
"vsyscall=none"
];
initrd = {
availableKernelModules = ["xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod"];
systemd.enable = true; # needed for auto-unlocking with TPM
};
loader.efi.canTouchEfiVariables = true;
loader.systemd-boot = {
enable = !config.boot.lanzaboote.enable;
consoleMode = "auto";
};
lanzaboote = {
enable = true;
pkiBundle = "/etc/secureboot";
};
plymouth.enable = true;
};
}

View File

@ -1,40 +1,41 @@
{inputs, ...}: {
imports = with inputs; [
self.modules.shared.nixos
self.nixosModules.desktop
self.nixosModules.system
../dunamis/programs.nix
./boot.nix
./disko.nix
./hardware.nix
./networking.nix
./nix.nix
./power-saving.nix
./services.nix
./sops.nix
./users.nix
./disko
./hardware
./misc
];
desktop.niri.enable = true;
environment.memoryAllocator.provider = "mimalloc";
locale.ukrainian.enable = true;
module.stylix = {
enable = true;
theme = "helios";
networking = {
hostId = "45b00123";
hostName = "legion";
};
opentabletdriver.enable = false;
qmk-vial.enable = true;
security.basic.enable = true;
system.stateVersion = "25.05";
system.stateVersion = "25.11";
time.timeZone = "Europe/Kyiv";
virtual.libvirt.enable = true;
wireless = {
bluetooth.enable = true;
bluetooth.enableBlueman = true;
desktop.niri.enable = true;
services.displayManager.autoLogin = {
enable = true;
user = "user";
};
module = {
config = {
laptop.homeRowMods = true;
powerSave = true;
secureBoot = true;
tpmDiskUnlock = true;
vaapi = "nvidia";
};
stylix = {
enable = true;
theme = "sandcastle";
};
locale = "uk_UA.UTF-8";
virt.libvirt.enable = true;
};
swapDevices = [
{
device = "/swap/swapfile";
size = 8 * 1024;
}
];
}

View File

@ -1,112 +0,0 @@
{inputs, ...}: {
imports = with inputs; [
disko.nixosModules.disko
];
disko.devices.nodev = {
"/tmp" = {
fsType = "tmpfs";
mountOptions = ["rw" "nosuid" "nodev"];
};
};
disko.devices.disk.main = {
type = "disk";
device = "/dev/disk/by-id/nvme-INTEL_SSDPEKKF256G8L_BTHH81460QC2256B";
content = {
type = "gpt";
partitions = {
ESP = {
size = "2G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [
"umask=0077"
"fmask=0022"
"dmask=0022"
"noexec"
"nosuid"
"nodev"
];
};
};
luks = {
size = "100%";
content = {
type = "luks";
name = "luks-main";
initrdUnlock = true;
settings.allowDiscards = true;
content = {
type = "btrfs";
extraArgs = ["-f"];
subvolumes = {
"@root-nixos" = {
mountpoint = "/";
mountOptions = [
"compress=zstd"
"noatime"
# "noexec"
];
};
"@home" = {
mountpoint = "/home";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@swap" = {
mountpoint = "/swap";
mountOptions = [
# "compress=zstd"
"noatime"
];
};
# "@nix" = {
# mountpoint = "/nix";
# mountOptions = [
# "compress-force=zstd"
# "noatime"
# ];
# };
};
};
};
};
};
};
};
disko.devices.disk.second = {
type = "disk";
device = "/dev/disk/by-id/nvme-WDC_PC_SN730_SDBPNTY-1T00-1101_21114D802446";
content = {
type = "gpt";
partitions = {
luks = {
size = "100%";
content = {
type = "luks";
name = "luks-second";
initrdUnlock = true;
settings.allowDiscards = true;
content = {
type = "btrfs";
extraArgs = ["-f"];
subvolumes = {
"@storage" = {
mountpoint = "/storage";
mountOptions = [
"compress=zstd"
"noatime"
];
};
};
};
};
};
};
};
};
}

View File

@ -0,0 +1,21 @@
{
config,
inputs,
...
}: let
inherit (config.networking) hostId;
disk-main = "/dev/disk/by-id/nvme-INTEL_SSDPEKKF256G8L_BTHH81460QC2256B";
disk-second = "/dev/disk/by-id/nvme-WDC_PC_SN730_SDBPNTY-1T00-1101_21114D802446";
in {
imports = with inputs; [
disko.nixosModules.disko
];
disko.devices.nodev = {
"/tmp" = {
fsType = "tmpfs";
mountOptions = ["rw" "nosuid" "nodev"];
};
};
disko.devices.disk.main = import ./disk-main.nix {inherit disk-main hostId;};
disko.devices.disk.second = import ./disk-second.nix {inherit disk-second hostId;};
}

View File

@ -0,0 +1,75 @@
{
disk-main,
hostId,
}: {
type = "disk";
device = disk-main;
content = {
type = "gpt";
partitions = {
ESP = {
size = "2G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [
"umask=0077"
"fmask=0022"
"dmask=0022"
"noexec"
"nosuid"
"nodev"
];
};
};
luks = {
size = "100%";
content = {
type = "luks";
name = "luks-" + hostId;
initrdUnlock = true;
settings.allowDiscards = true;
content = {
type = "btrfs";
extraArgs = ["-f"];
subvolumes = {
"@root-nixos" = {
mountpoint = "/";
mountOptions = [
"autodefrag"
"compress=zstd"
"noatime"
# "noexec"
];
};
"@home" = {
mountpoint = "/home";
mountOptions = [
"autodefrag"
"compress=zstd"
"noatime"
];
};
"@swap" = {
mountpoint = "/swap";
mountOptions = [
# "compress=zstd"
"noatime"
];
};
# "@nix" = {
# mountpoint = "/nix";
# mountOptions = [
# "compress-force=zstd"
# "noatime"
# ];
# };
};
};
};
};
};
};
}

View File

@ -0,0 +1,35 @@
{
disk-second,
hostId,
}: {
type = "disk";
device = disk-second;
content = {
type = "gpt";
partitions = {
luks = {
size = "100%";
content = {
type = "luks";
name = "luks-${hostId}-second";
initrdUnlock = true;
settings.allowDiscards = true;
content = {
type = "btrfs";
extraArgs = ["-f"];
subvolumes = {
"@storage" = {
mountpoint = "/storage";
mountOptions = [
"autodefrag"
"compress=zstd"
"noatime"
];
};
};
};
};
};
};
};
}

View File

@ -1,41 +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.
{
inputs,
lib,
modulesPath,
...
}: {
imports = with inputs.nixos-hardware.nixosModules; [
(modulesPath + "/installer/scan/not-detected.nix")
lenovo-legion-15ach6h
];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware = {
enableRedistributableFirmware = true;
nvidia-container-toolkit.enable = true;
nvidia = {
dynamicBoost.enable = true;
powerManagement.finegrained = false;
};
};
services.keyd = {
enable = true;
keyboards.laptop = {
ids = ["048d:c101"];
settings.main = {
a = "lettermod(alt, a, 200, 150)";
s = "lettermod(meta, s, 200, 150)";
d = "lettermod(control, d, 200, 150)";
f = "lettermod(shift, f, 200, 150)";
j = "lettermod(shift, j, 200, 150)";
k = "lettermod(control, k, 200, 150)";
l = "lettermod(meta, l, 200, 150)";
";" = "lettermod(alt, ;, 200, 150)";
};
};
};
}

View File

@ -0,0 +1,11 @@
{
imports = [
./nvidia.nix
];
services = {
logind = {
lidSwitch = "ignore";
powerKey = "suspend";
};
};
}

View File

@ -0,0 +1,36 @@
{
config,
lib,
...
}: {
nixpkgs.config.allowUnfreePredicate = pkg:
builtins.elem (lib.getName pkg) [
"nvidia-x11"
];
services.xserver.videoDrivers = ["nvidia"];
hardware = {
nvidia-container-toolkit.enable = true;
nvidia = {
package = config.boot.kernelPackages.nvidiaPackages.beta;
open = true;
modesetting.enable = true;
nvidiaSettings = false;
dynamicBoost.enable = true;
powerManagement = {
enable = false;
# finegrained = true;
};
prime = {
# sync.enable = true;
# reverseSync.enable = true;
# allowExternalGpu = true;
offload = {
enable = true;
enableOffloadCmd = true;
};
amdgpuBusId = "PCI:6:0:0";
nvidiaBusId = "PCI:1:0:0";
};
};
};
}

View File

@ -0,0 +1,5 @@
{
imports = [
# ./distributed-build.nix
];
}

View File

@ -1,6 +0,0 @@
{
networking = {
hostName = "legion";
networkmanager.enable = true;
};
}

View File

@ -1,14 +0,0 @@
# TODO: better file name
{
config,
pkgs,
...
}: {
nixpkgs.config.allowUnfree = true;
nix = {
package = pkgs.lix;
channel.enable = false;
settings.experimental-features = ["nix-command" "flakes"];
daemonCPUSchedPolicy = "idle";
};
}

View File

@ -1,7 +0,0 @@
{
powerManagement.enable = true;
powerManagement.powertop.enable = true;
services.power-profiles-daemon.enable = true;
services.thermald.enable = true;
services.upower.enable = true;
}

View File

@ -1,19 +0,0 @@
{
pkgs,
lib,
...
}: {
programs = {
fish.enable = true;
mosh.enable = true;
nh = {
enable = true;
flake = "/home/user/.config/nixos";
};
};
environment.systemPackages = with pkgs; [
(lib.hiPrio uutils-coreutils-noprefix)
helix
nushell
];
}

View File

@ -1,34 +0,0 @@
{
services = {
# hardware.openrgb.enable = true;
flatpak.enable = true;
fwupd.enable = true;
openssh.enable = true;
syncthing.openDefaultPorts = true;
dnscrypt-proxy2 = {
enable = true;
settings = {
require_dnssec = true;
server_names = ["mullvad-doh"];
bootstrap_resolvers = ["9.9.9.11:53" "9.9.9.9:53"];
};
};
opensnitch = {
enable = false;
settings = {
DefaultAaction = "deny";
Firewall = "iptables";
InterceptUnknown = true;
ProcMonitorMethod = "ebpf";
};
};
scx = {
enable = false;
scheduler = "scx_flash";
};
logind = {
lidSwitch = "ignore";
powerKey = "suspend";
};
};
}

View File

@ -1,64 +0,0 @@
{
config,
inputs,
...
}: let
inherit (inputs) mysecrets;
hostName =
if (config.networking.hostName == "vylxae")
then "sarien"
else config.networking.hostName;
sopsFile = mysecrets + "/hosts/${hostName}.yaml";
dotSsh = name: "/home/user/.ssh/" + name;
sshKey = {
mode = "0400";
owner = "user";
};
in {
imports = with inputs; [
sops-nix.nixosModules.sops
];
sops = {
age = {
sshKeyPaths = ["/etc/ssh/ssh_host_ed25519_key"];
keyFile = "/var/lib/sops-nix/key.txt";
generateKey = true;
};
defaultSopsFile = mysecrets + "/common.yaml";
secrets = {
"user-password-hashed".neededForUsers = true;
"ssh-config" = {
path = dotSsh "config";
mode = "0400";
owner = "user";
};
"ssh-${hostName}-user" = {
inherit sopsFile;
inherit (sshKey) mode owner;
path = dotSsh "id_ed25519";
};
"ssh-${hostName}-user.pub" = {
inherit sopsFile;
inherit (sshKey) mode owner;
path = dotSsh "id_ed25519.pub";
};
"ssh-unexplrd" = {
inherit (sshKey) mode owner;
path = dotSsh "id_unexplrd_ed25519";
};
"ssh-unexplrd.pub" = {
inherit (sshKey) mode owner;
path = dotSsh "id_unexplrd_ed25519.pub";
};
"ssh-uni" = {
inherit (sshKey) mode owner;
path = dotSsh "id_uni_ed25519";
};
"ssh-uni.pub" = {
inherit (sshKey) mode owner;
path = dotSsh "id_uni_ed25519.pub";
};
};
};
}

View File

@ -1,26 +0,0 @@
{
inputs,
config,
pkgs,
...
}: let
inherit (config.sops) secrets;
inherit (inputs) mysecrets;
in {
nix.settings.trusted-users = ["user" "nix-ssh"];
users.mutableUsers = false;
users.users = {
user = {
hashedPasswordFile = secrets."user-password-hashed".path;
extraGroups = ["wheel" "video" "libvirtd" "dialout"];
isNormalUser = true;
shell = pkgs.fish;
openssh.authorizedKeys.keyFiles = map (f: "${mysecrets}/ssh/user/id_${f}_ed25519.pub") [
"dunamis"
"eldrid"
"sarien"
"legion"
];
};
};
}

View File

@ -1,7 +1 @@
{
imports = [
../../../dunamis/users/user/common.nix
../../../dunamis/users/user/flatpak.nix
../../../dunamis/users/user/programs.nix
];
}
{flake, ...}: {imports = [flake.modules.shared.user];}

View File

@ -0,0 +1,47 @@
{inputs, ...}: {
imports = with inputs; [
self.nixosModules.desktop
self.nixosModules.system
self.modules.shared.nixos
./disko
./hardware
./misc
];
networking = {
hostId = "bd1b5837";
hostName = "morphius";
};
system.stateVersion = "25.11";
time.timeZone = "Europe/Kyiv";
desktop.gnome.enable = true;
services.displayManager.autoLogin = {
enable = true;
user = "user";
};
swapDevices = [
{
device = "/swap/swapfile";
size = 8 * 1024;
}
];
module = {
config = {
secureBoot = true;
tpmDiskUnlock = true;
powerSave = true;
useIwd = true;
vaapi = "intel-media-driver";
};
stylix = {
enable = true;
theme = "sandcastle";
};
locale = "uk_UA.UTF-8";
};
}

View File

@ -0,0 +1,19 @@
{
config,
inputs,
...
}: let
inherit (config.networking) hostId;
disk = "/dev/nvme0n1";
in {
imports = with inputs; [
disko.nixosModules.disko
];
disko.devices.nodev = {
"/tmp" = {
fsType = "tmpfs";
mountOptions = ["rw" "nosuid" "nodev"];
};
};
disko.devices.disk.main = import ./disk-main.nix {inherit disk hostId;};
}

View File

@ -0,0 +1,80 @@
{
disk,
hostId,
...
}: {
type = "disk";
device = disk;
content = {
type = "gpt";
partitions = {
ESP = {
size = "1G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [
"umask=0077"
"fmask=0022"
"dmask=0022"
"noexec"
"nosuid"
"nodev"
];
};
};
luks = {
size = "100%";
content = {
type = "luks";
name = "luks-" + hostId;
initrdUnlock = true;
settings.allowDiscards = true;
content = {
type = "btrfs";
extraArgs = ["-f"];
subvolumes = {
"@nixos-root" = {
mountpoint = "/";
mountOptions = [
"compress=zstd"
"noatime"
"noexec"
];
};
"@home" = {
mountpoint = "/home";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@storage" = {
mountpoint = "/storage";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@nix" = {
mountpoint = "/nix";
mountOptions = [
"compress-force=zstd"
"noatime"
];
};
"@swap" = {
mountpoint = "/swap";
mountOptions = [
"noatime"
];
};
};
};
};
};
};
};
}

View File

@ -0,0 +1,12 @@
{
imports = [
# ./laptop
];
hardware.sensor.iio.enable = true;
services = {
logind = {
lidSwitch = "ignore";
powerKey = "suspend";
};
};
}

View File

@ -0,0 +1,5 @@
{
imports = [
# ./distributed-build.nix
];
}

View File

@ -0,0 +1 @@
{flake, ...}: {imports = [flake.modules.shared.user];}

View File

@ -1,13 +0,0 @@
{inputs, ...}: {
imports = with inputs; [
nix-index-database.hmModules.nix-index
self.homeModules.programs
./programs.nix
];
home = {
stateVersion = "25.05";
sessionPath = [
"$HOME/.local/bin"
];
};
}

View File

@ -1,60 +0,0 @@
{pkgs, ...}: {
shell = {
fish.enable = true;
#nushell.enable = true;
oh-my-posh.enable = true;
};
console.yazi.enable = true;
services.ssh-agent.enable = true;
programs = {
bat.enable = true;
btop = {
enable = true;
settings.update_ms = 200;
};
eza.enable = true;
fd.enable = true;
fzf = {
enable = true;
defaultOptions = ["--color=16"];
};
pay-respects.enable = true;
nix-index.enable = true;
nix-index-database.comma.enable = true;
gitui.enable = true;
git = {
enable = true;
delta.enable = true;
signing.format = "ssh";
aliases = {
cl = "clone";
co = "checkout";
pom = "push origin main";
};
};
jujutsu.enable = true;
ripgrep.enable = true;
};
editor = {
helix.enable = true;
};
home.packages = with pkgs; [
alejandra # nix formatter in rust
trashy # trash cli in rust
devenv # programming deps in rust
procs # ps in rust
ouch # archive manager in runt
dust # du in rust
fend # calc in rust
moar # better pager (in go)
just # make in rust
rbw # bitwarden cli in rust
jj-fzf # fuzzy finder jujutsu tui
];
systemd.user.settings.Manager.DefaultEnvironment.PAGER = "moar";
}

View File

@ -1,41 +0,0 @@
{
pkgs,
config,
inputs,
...
}: {
imports = with inputs; [
chaotic.nixosModules.default
];
boot = {
# kernelPackages = pkgs.linuxPackages_latest;
kernelPackages = pkgs.linuxPackages_cachyos;
kernelModules = ["kvm-intel"];
kernelParams = [
"debugfs=off"
"efi=disable_early_pci_dma"
# "gather_data_sampling=force"
"intel_iommu=on"
"iommu.passthrough=0"
"iommu.strict=1"
"iommu=force"
# "lockdown=confidentiality"
# "module.sig_enforce=1"
"page_alloc.shuffle=1"
# "reg_file_data_sampling=on"
# "spec_rstack_overflow=safe-ret"
"vsyscall=none"
];
loader.efi.canTouchEfiVariables = true;
loader.systemd-boot = {
enable = true;
consoleMode = "auto";
};
plymouth.enable = true;
};
console = {
earlySetup = true;
packages = [pkgs.terminus_font];
font = "${pkgs.terminus_font}/share/consolefonts/ter-c18n.psf.gz";
};
}

View File

@ -2,42 +2,53 @@
imports = with inputs; [
self.nixosModules.desktop
self.nixosModules.system
./boot.nix
./disko.nix
./hardware.nix
./networking.nix
./nix.nix
./power-saving.nix
../dunamis/programs.nix
./services.nix
./sops.nix
./users.nix
self.modules.shared.nixos
./disko
./hardware
./misc
];
networking = {
hostId = "31150fae";
hostName = "sarien";
};
system.stateVersion = "25.11";
time.timeZone = "Europe/Kyiv";
desktop.niri.enable = true;
locale.ukrainian.enable = true;
module.stylix = {
services.displayManager.autoLogin = {
enable = true;
theme = "helios";
user = "user";
};
opentabletdriver.enable = false;
swapDevices = [
{
device = "/swap/swapfile";
size = 4 * 1024;
priority = 100;
}
{
device = "/swap/hibernate";
size = 16 * 1024;
priority = 1;
}
];
qmk-vial.enable = true;
security.basic.enable = true;
system.stateVersion = "25.05";
time.timeZone = "Europe/Kyiv";
virtual.libvirt.enable = true;
wireless = {
wifi.enable = true;
bluetooth.enable = true;
bluetooth.enableBlueman = true;
module = {
config = {
laptop.homeRowMods = true;
powerSave = true;
useIwd = true;
vaapi = "intel-media-driver";
};
stylix = {
enable = true;
theme = "sandcastle";
};
locale = "uk_UA.UTF-8";
misc.qmk-vial.enable = true;
virt.libvirt.enable = true;
};
}

View File

@ -1,79 +0,0 @@
{inputs, ...}: {
imports = with inputs; [
disko.nixosModules.disko
];
disko.devices.nodev = {
"/tmp" = {
fsType = "tmpfs";
mountOptions = ["rw" "nosuid" "nodev"];
};
};
disko.devices.disk.main = {
type = "disk";
device = "/dev/disk/by-id/nvme-eui.0025385911b36714";
content = {
type = "gpt";
partitions = {
ESP = {
size = "2G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [
"umask=0077"
"fmask=0022"
"dmask=0022"
"noexec"
];
};
};
luks = {
size = "100%";
content = {
type = "luks";
name = "luks-main";
initrdUnlock = true;
settings.allowDiscards = true;
content = {
type = "btrfs";
extraArgs = ["-f"];
subvolumes = {
"@nixos-root" = {
mountpoint = "/";
mountOptions = [
"compress=zstd"
"noatime"
"noexec"
];
};
"@home" = {
mountpoint = "/home";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@nix" = {
mountpoint = "/nix";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@storage" = {
mountpoint = "/storage";
mountOptions = [
"compress=zstd"
"noatime"
];
};
};
};
};
};
};
};
};
}

View File

@ -0,0 +1,20 @@
{
config,
inputs,
...
}: let
inherit (config.networking) hostId;
disk = "/dev/disk/by-id/nvme-eui.0025385911b36714";
in {
imports = with inputs; [
disko.nixosModules.disko
];
disko.devices.nodev = {
"/tmp" = {
fsType = "tmpfs";
mountOptions = ["rw" "nosuid" "nodev"];
};
};
# same partitioning setup
disko.devices.disk.main = import ../../dunamis/disko/disk-main.nix {inherit disk hostId;};
}

View File

@ -1,55 +0,0 @@
{
lib,
inputs,
modulesPath,
...
}: {
imports = with inputs.nixos-hardware.nixosModules; [
(modulesPath + "/installer/scan/not-detected.nix")
common-cpu-intel
common-gpu-intel-kaby-lake
common-hidpi
common-pc-laptop-ssd
];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.enableRedistributableFirmware = true;
services = {
logind = {
lidSwitch = "ignore";
powerKey = "suspend";
};
udev.extraHwdb = ''
evdev:input:b0011v0001p0001eAB83*
KEYBOARD_KEY_d5=sysrq
KEYBOARD_KEY_d4=leftmeta
KEYBOARD_KEY_95=brightnessdown
KEYBOARD_KEY_91=brightnessup
'';
keyd = {
enable = true;
keyboards = {
default = {
ids = ["0001:0001"];
settings = {
main = {
camera = "brightnessdown";
prog1 = "brightnessup";
# home row mods
a = "lettermod(alt, a, 200, 150)";
s = "lettermod(meta, s, 200, 150)";
d = "lettermod(control, d, 200, 150)";
f = "lettermod(shift, f, 200, 150)";
j = "lettermod(shift, j, 200, 150)";
k = "lettermod(control, k, 200, 150)";
l = "lettermod(meta, l, 200, 150)";
";" = "lettermod(alt, ;, 200, 150)";
};
};
};
};
};
};
}

View File

@ -0,0 +1,11 @@
{
imports = [
./laptop
];
services = {
logind = {
lidSwitch = "ignore";
powerKey = "suspend";
};
};
}

View File

@ -0,0 +1,5 @@
{
imports = [
./keyboard-fix.nix
];
}

View File

@ -0,0 +1,21 @@
{
services = {
udev.extraHwdb = ''
evdev:input:b0011v0001p0001eAB83*
KEYBOARD_KEY_d5=sysrq
KEYBOARD_KEY_d4=leftmeta
KEYBOARD_KEY_95=brightnessdown
KEYBOARD_KEY_91=brightnessup
'';
keyd = {
enable = true;
keyboards.default = {
ids = ["0001:0001"];
settings.main = {
camera = "brightnessdown";
prog1 = "brightnessup";
};
};
};
};
}

View File

@ -0,0 +1,5 @@
{
imports = [
# ./distributed-build.nix
];
}

View File

@ -1,10 +0,0 @@
{
networking = {
networkmanager.enable = true;
hostId = "31150fae";
hostName = "sarien";
hosts = {
"192.168.1.42" = ["dunamis"];
};
};
}

View File

@ -1,35 +0,0 @@
# TODO: better file name
{
config,
inputs,
pkgs,
...
}: let
hostName =
if (config.networking.hostName == "vylxae")
then "sarien"
else config.networking.hostName;
inherit (config.sops) secrets;
inherit (inputs) mysecrets;
in {
nix = {
package = pkgs.lix;
channel.enable = false;
daemonCPUSchedPolicy = "idle";
settings = {
experimental-features = ["nix-command" "flakes"];
builders-use-substitutes = true;
};
distributedBuilds = true;
buildMachines = [
{
hostName = "dunamis";
sshUser = "nix-ssh";
system = "x86_64-linux";
sshKey = secrets."ssh-${hostName}-user".path;
supportedFeatures = ["nixos-test" "big-parallel" "kvm" "benchmark"];
publicHostKey = builtins.readFile "${mysecrets}/ssh/ssh_host_ed25519_dunamis.base64";
}
];
};
}

View File

@ -1,7 +0,0 @@
{
powerManagement.enable = true;
powerManagement.powertop.enable = true;
services.power-profiles-daemon.enable = true;
services.thermald.enable = true;
services.upower.enable = true;
}

View File

@ -1,13 +0,0 @@
{pkgs, ...}: {
programs.nh = {
enable = true;
clean.enable = true;
clean.extraArgs = "--keep-since 7d --keep 3";
flake = "/home/user/.config/nixos";
};
programs.fish.enable = true;
environment.systemPackages = with pkgs; [
helix
nushell
];
}

View File

@ -1,21 +0,0 @@
{
services = {
flatpak.enable = true;
fstrim.enable = true;
openssh.enable = true;
power-profiles-daemon.enable = true;
syncthing.openDefaultPorts = true;
dnscrypt-proxy2 = {
enable = true;
settings = {
require_dnssec = true;
server_names = ["mullvad-doh"];
bootstrap_resolvers = ["9.9.9.11:53" "9.9.9.9:53"];
};
};
scx = {
enable = true;
scheduler = "scx_flash";
};
};
}

View File

@ -1,64 +0,0 @@
{
config,
inputs,
...
}: let
inherit (inputs) mysecrets;
hostName =
if (config.networking.hostName == "vylxae")
then "sarien"
else config.networking.hostName;
sopsFile = mysecrets + "/hosts/${hostName}.yaml";
dotSsh = name: "/home/user/.ssh/" + name;
sshKey = {
mode = "0400";
owner = "user";
};
in {
imports = with inputs; [
sops-nix.nixosModules.sops
];
sops = {
age = {
sshKeyPaths = ["/etc/ssh/ssh_host_ed25519_key"];
keyFile = "/var/lib/sops-nix/key.txt";
generateKey = true;
};
defaultSopsFile = mysecrets + "/common.yaml";
secrets = {
"user-password-hashed".neededForUsers = true;
"ssh-config" = {
path = dotSsh "config";
mode = "0400";
owner = "user";
};
"ssh-${hostName}-user" = {
inherit sopsFile;
inherit (sshKey) mode owner;
path = dotSsh "id_ed25519";
};
"ssh-${hostName}-user.pub" = {
inherit sopsFile;
inherit (sshKey) mode owner;
path = dotSsh "id_ed25519.pub";
};
"ssh-unexplrd" = {
inherit (sshKey) mode owner;
path = dotSsh "id_unexplrd_ed25519";
};
"ssh-unexplrd.pub" = {
inherit (sshKey) mode owner;
path = dotSsh "id_unexplrd_ed25519.pub";
};
"ssh-uni" = {
inherit (sshKey) mode owner;
path = dotSsh "id_uni_ed25519";
};
"ssh-uni.pub" = {
inherit (sshKey) mode owner;
path = dotSsh "id_uni_ed25519.pub";
};
};
};
}

View File

@ -1,26 +0,0 @@
{
inputs,
config,
pkgs,
...
}: let
inherit (config.sops) secrets;
inherit (inputs) mysecrets;
in {
nix.settings.trusted-users = ["user"];
users.mutableUsers = false;
users.users = {
user = {
hashedPasswordFile = secrets."user-password-hashed".path;
isNormalUser = true;
extraGroups = ["wheel" "video" "libvirtd" "dialout"];
shell = pkgs.fish;
openssh.authorizedKeys.keyFiles = map (f: "${mysecrets}/ssh/user/id_${f}_ed25519.pub") [
"dunamis"
"eldrid"
"sarien"
"legion"
];
};
};
}

View File

@ -1,7 +1 @@
{
imports = [
../../../dunamis/users/user/common.nix
../../../dunamis/users/user/programs.nix
../../../dunamis/users/user/flatpak.nix
];
}
{flake, ...}: {imports = [flake.modules.shared.user];}

View File

@ -1,5 +1,4 @@
{
imports = [
./xdg-userdirs.nix
];
}

View File

@ -1,17 +0,0 @@
{config, ...}: let
inherit (config.home) homeDirectory;
home = f: "${homeDirectory}/${f}";
in {
xdg.userDirs = {
enable = true;
createDirectories = true;
templates = home "temps";
publicShare = home "pub";
desktop = home "desktop";
download = home "downloads";
documents = home "docs";
pictures = home "pics";
videos = home "vids";
music = home "music";
};
}

View File

@ -1,10 +1,12 @@
{
osConfig,
config,
pkgs,
lib,
...
}:
with lib; let
inherit (osConfig.module.stylix) theme;
cfg = config.desktop.cosmic;
in {
options = {
@ -12,8 +14,81 @@ in {
mkEnableOption "enable cosmic desktop";
};
config = mkIf cfg.enable {
stylix.targets = {
qt.enable = false;
gtk.enable = false;
};
home.packages = with pkgs; [
wl-clipboard-rs
helvum
loupe
papers
junction
celluloid
mission-center
dconf
libnotify
playerctl
wdisplays
pwvucontrol
wl-clipboard
];
gtk = {
enable = true;
iconTheme = {
name =
if config.stylix.polarity == "dark"
then "Papirus-Dark"
else "Papirus-Light";
package =
if (removeSuffix "-light" theme) == "nord"
then pkgs.papirus-nord
else pkgs.papirus-icon-theme;
};
};
qt = {
enable = true;
platformTheme.name = "gtk3";
};
services = {
gnome-keyring = {
enable = true;
components = ["secrets"];
};
};
dconf.settings = {
"org/gnome/desktop/wm/preferences" = {
button-layout = "icon:minimize,maximize,close";
};
"org/gnome/desktop/interface" = {
icon-theme = config.gtk.iconTheme.name;
};
};
xdg = {
mime.enable = true;
mimeApps = {
enable = true;
defaultApplications = let
file_manager = ["org.gnome.Nautilus.desktop"];
image_viewer = ["org.gnome.Loupe.desktop"];
pdf_reader = ["org.gnome.Papers.desktop"];
video_player = ["io.github.celluloid_player.Celluloid.desktop"];
web_browser = ["re.sonny.Junction.desktop"];
in {
"application/pdf" = pdf_reader;
"image/jpeg" = image_viewer;
"image/png" = image_viewer;
"inode/directory" = file_manager;
"text/html" = web_browser;
"video/mp4" = video_player;
"video/mpeg" = video_player;
"video/x-matroska" = video_player;
"video/x-mpeg" = video_player;
"x-scheme-handler/about" = web_browser;
"x-scheme-handler/http" = web_browser;
"x-scheme-handler/https" = web_browser;
"x-scheme-handler/unknown" = web_browser;
};
};
};
};
}

View File

@ -1,6 +1,7 @@
{
imports = [
./common
# ./common
./cosmic
./gnome
./hyprland
./niri

View File

@ -1,4 +1,5 @@
{
osConfig,
config,
pkgs,
lib,
@ -13,33 +14,63 @@ in {
mkEnableOption "enable gnome desktop";
};
config = mkIf cfg.enable {
home.packages = with pkgs; [
gnomeExtensions.alphabetical-app-grid
gnomeExtensions.removable-drive-menu
gnomeExtensions.caffeine
gnomeExtensions.space-bar
gnomeExtensions.switcher
gnomeExtensions.tactile
gnomeExtensions.pano
gnomeExtensions.window-is-ready-remover
junction
celluloid
mission-center
dconf
pwvucontrol
wl-clipboard
];
home.packages =
(with pkgs.gnomeExtensions; [
# extensions
alphabetical-app-grid
app-icons-taskbar
caffeine
pano
removable-drive-menu
space-bar
switcher
tactile
window-is-ready-remover
])
++ (with pkgs; [
# regular packages
junction
celluloid
mission-center
dconf
pwvucontrol
wl-clipboard
]);
programs.gnome-shell.extensions = [
{package = pkgs.gnomeExtensions.alphabetical-app-grid;}
{package = pkgs.gnomeExtensions.removable-drive-menu;}
{package = pkgs.gnomeExtensions.app-icons-taskbar;}
{package = pkgs.gnomeExtensions.caffeine;}
{package = pkgs.gnomeExtensions.pano;}
{package = pkgs.gnomeExtensions.removable-drive-menu;}
{package = pkgs.gnomeExtensions.space-bar;}
{package = pkgs.gnomeExtensions.switcher;}
{package = pkgs.gnomeExtensions.tactile;}
{package = pkgs.gnomeExtensions.pano;}
{package = pkgs.gnomeExtensions.window-is-ready-remover;}
];
gtk = {
enable = true;
iconTheme = let
name =
if (lib.strings.hasPrefix "gruvbox" osConfig.module.stylix.theme)
then "Gruvbox-Plus-Dark"
else if config.stylix.polarity == "dark"
then "Papirus-Dark"
else "Papirus-Light";
package =
if (lib.strings.hasPrefix "gruvbox" osConfig.module.stylix.theme)
then pkgs.gruvbox-plus-icons
else if (lib.strings.hasPrefix "rose-pine" osConfig.module.stylix.theme)
then pkgs.papirus-icon-theme.override {color = "indigo";}
else if (lib.strings.hasPrefix "nord" osConfig.module.stylix.theme)
then pkgs.papirus-icon-theme.override {color = "nordic";}
else pkgs.papirus-icon-theme;
in {inherit name package;};
};
qt = {
enable = true;
platformTheme.name = lib.mkForce "adwaita";
};
dconf.settings = with lib.hm.gvariant; {
"org/gnome/desktop/a11y/applications" = {
screen-reader-enabled = false;
@ -54,12 +85,12 @@ in {
"org/gnome/desktop/input-sources" = {
mru-sources = [(mkTuple ["xkb" "us"])];
sources = [(mkTuple ["xkb" "us"]) (mkTuple ["xkb" "ua"]) (mkTuple ["xkb" "us+colemak_dh"])];
# sources = [(mkTuple ["xkb" "us"]) (mkTuple ["xkb" "ua"]) (mkTuple ["xkb" "us+colemak_dh"])];
xkb-options = ["terminate:ctrl_alt_bksp"];
};
"org/gnome/desktop/interface" = {
accent-color = "slate";
# accent-color = "slate";
clock-show-seconds = true;
color-scheme = "prefer-dark";
enable-animations = true;
@ -100,8 +131,8 @@ in {
move-to-workspace-last = ["<Shift><Control><Super>End"];
move-to-workspace-left = ["<Control><Super>Left"];
move-to-workspace-right = ["<Control><Super>Right"];
switch-input-source = ["<Super>Escape"];
switch-input-source-backward = ["<Shift><Super>Escape"];
switch-input-source = ["<Super>Space"];
switch-input-source-backward = ["<Shift><Super>Space"];
switch-to-workspace-1 = ["<Super>1"];
switch-to-workspace-2 = ["<Super>2"];
switch-to-workspace-3 = ["<Super>3"];
@ -135,7 +166,18 @@ in {
};
"org/gnome/shell" = {
enabled-extensions = ["drive-menu@gnome-shell-extensions.gcampax.github.com" "caffeine@patapon.info" "AlphabeticalAppGrid@stuarthayhurst" "appindicatorsupport@rgcjonas.gmail.com" "user-theme@gnome-shell-extensions.gcampax.github.com" "tactile@lundal.io" "switcher@landau.fi" "pano@elhan.io" "space-bar@luchrioh"];
enabled-extensions = [
"AlphabeticalAppGrid@stuarthayhurst"
"appindicatorsupport@rgcjonas.gmail.com"
"aztaskbar@aztaskbar.gitlab.com"
"caffeine@patapon.info"
"drive-menu@gnome-shell-extensions.gcampax.github.com"
"pano@elhan.io"
"space-bar@luchrioh"
"switcher@landau.fi"
"tactile@lundal.io"
"user-theme@gnome-shell-extensions.gcampax.github.com"
];
};
"org/gnome/shell/app-switcher" = {
@ -167,6 +209,21 @@ in {
workspace-indicator = true;
};
"org/gnome/shell/extensions/aztaskbar" = with lib.hm.gvariant; {
favorites = true;
icon-size = 25;
icon-style = "REGULAR";
# intellihide = true;
main-panel-height = mkTuple [true 40];
position-offset = 4;
prefs-visible-page = "";
show-apps-button = mkTuple [true 0];
show-panel-activities-button = true;
show-weather-by-clock = "LEFT";
taskbar-spacing = 2;
# update-notifier-project-version = 30;
};
"org/gnome/shell/extensions/tactile" = {
background-color = "#${colors.base00}";
border-color = "#${colors.base0D}";

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,458 @@
{
config,
osConfig,
perSystem,
launcher,
lockscreen,
# pkgs,
# lib,
...
}: let
inherit (config.lib.stylix) colors;
# inherit (lib) mkIf;
hostname = osConfig.networking.hostName;
cursorSize = config.stylix.cursor.size;
fontName = config.stylix.fonts.sansSerif.name;
keyboard =
if hostname == "eldrid"
then "chromeos"
else "platform";
xdgPictures =
config.xdg.userDirs.pictures;
# ifLaptop = mkIf (hostname != "dunamis");
in {
enable = true;
systemd = {
enable = true;
variables = [
"--all"
];
};
package = perSystem.hyprland.hyprland;
portalPackage = perSystem.hyprland.xdg-desktop-portal-hyprland;
# plugins = with pkgs.hyprlandPlugins; [
# hyprspace
# hy3
# hyprscroller
# ];
settings = {
input = {
kb_layout = "us,ua";
resolve_binds_by_sym =
if hostname == "dunamis"
then 0
else 1;
repeat_rate = 50;
repeat_delay = 300;
# mouse
accel_profile = "flat";
sensitivity = 0;
};
device = [
{
name = "ite-tech.-inc.-ite-device(8910)-keyboard";
kb_variant = "colemak_dh,";
}
{
name = "at-translated-set-2-keyboard";
kb_variant = "colemak_dh,";
}
{
name = "keyd-virtual-keyboard";
kb_variant = "colemak_dh,";
}
];
xwayland.force_zero_scaling = true;
monitor = [
", preferred, auto, 1"
"desc:AOC 27V2G5 0x0000026C, addreserved, 0, 300, 0, 0"
"desc:Samsung Electric Company S24R65x H4TMA03291, preferred, 0x0, 1, bitdepth, 10, vrr, 1"
"desc:Philips Consumer Electronics Company 27M2N5500 UK02418033254, 2560x1440@180.00Hz, 0x0, 1.3333333, bitdepth, 10, vrr, 1"
"desc:BOE 0x08E8, preferred, 1920x0, 1.2, bitdepth, 10"
"desc:LG Display 0x068B, preferred, 1920x0, 1.2, bitdepth, 10"
"desc:Chimei Innolux Corporation 0x1406, preferred, 1920x0, 1.2"
"desc:KDC 0x0000, preferred, 1920x0, 1.25"
];
env = [
"ELECTRON_OZONE_PLATFORM_HINT,auto"
"QT_QPA_PLATFORM,wayland"
"QT_QPA_PLATFORMTHEME,gtk3"
"XCURSORSIZE,${toString cursorSize}"
"GSK_RENDERER,ngl"
];
decoration = {
shadow.enabled = false;
# drop_shadow = false;
blur = {
size = 8;
passes = 3;
};
# shadow_offset = "0 5";
# "col.shadow" = "rgba(00000099)";
rounding = 12;
};
misc = {
font_family = fontName;
disable_splash_rendering = true;
disable_hyprland_logo = true;
# vfr = true;
};
bezier = [
"easeOutQuad, 0.25, 0.46, 0.45, 0.94"
"easeOutExpo, 0.19, 1, 0.22, 1"
];
animation = [
"workspaces, 1, 3, easeOutExpo, slidefade 20%"
"windows, 1, 3, easeOutExpo, popin 80%"
"layers, 1, 2, easeOutExpo, fade"
];
plugin = [
{
overview = {
gapsIn = 12;
gapsOut = 24;
exitOnClick = true;
centerAligned = true;
showNewWorkspace = false;
showEmptyWorkspace = false;
affectStrut = false;
};
hyprexpo = {
columns = 3;
gap_size = 8;
#bg_col = "rgb(111111)";
workspace_method = "first 1"; # [center/first] [workspace] e.g. first 1 or center m+1
enable_gesture = true; # laptop touchpad
gesture_fingers = 3; # 3 or 4
gesture_distance = 400; # how far is the "max"
gesture_positive = false; # positive = swipe down. Negative = swipe up.;
};
}
{
hy3 = {
autotile = true;
tab_first_window = false;
tabs = {
render_text = true;
height = 24;
padding = 8;
rounding = 8;
text_height = 14;
text_center = true;
text_font = fontName;
"col.active" = "0xff${colors.base00}";
"col.inactive" = "0xff${colors.base00}";
"col.urgent" = "0xff${colors.base00}";
"col.active.text" = "0xff${colors.base0D}";
"col.inactive.text" = "0xff${colors.base05}";
"col.urgent.text" = "0xff${colors.base09}";
"col.active.border" = "0xff${colors.base00}";
"col.inactive.border" = "0xff${colors.base00}";
"col.urgent.border" = "0xff${colors.base00}";
};
};
}
{
scroller = {
column_widths = "onethird onehalf twothirds one";
window_heights = "onethird onehalf twothirds one";
gesture_scroll_fingers = 3;
gesture_overview_fingers = 3;
jump_labels_font = fontName;
jump_labels_color = "0xff${colors.base0A}";
};
}
];
dwindle = {
force_split = 2;
default_split_ratio = 1.2;
};
master = {
mfact = 0.6;
};
"$mod" = "SUPER";
"$modShift" = "$mod SHIFT";
"$modCtrl" = "$mod CTRL";
"$modShiftCtrl" = "$mod SHIFT CTRL";
"$left" = "N";
"$down" = "E";
"$up" = "I";
"$right" = "O";
"$terminal" = "ghostty";
"$launcher" = launcher;
"$screenLocker" = lockscreen;
"$webBrowser" = "io.github.zen_browser.zen";
"$clipboardManager" = "copyq menu";
general = {
"col.active_border" = "0xff${colors.base0D}";
"col.inactive_border" = "0xff${colors.base03}";
gaps_in = 4;
gaps_out = 8;
border_size = 3;
allow_tearing = true;
layout = "dwindle";
};
group = {
"col.border_active" = "0xff${colors.base0D}";
"col.border_inactive" = "0xff${colors.base03}";
"col.border_locked_active" = "0xff${colors.base0A}";
"col.border_locked_inactive" = "0xff${colors.base0F}";
groupbar = {
height = 16;
rounding = 0;
indicator_height = 0;
gradient_rounding = 4;
font_size = 14;
gradients = true;
font_family = fontName;
"text_color" = "0xff${colors.base00}";
"col.active" = "0xff${colors.base0D}";
"col.inactive" = "0xff${colors.base03}";
};
};
binds.scroll_event_delay = 0;
cursor.persistent_warps = true;
bind = [
"$mod, Return, exec, $terminal"
"$mod, Space, exec, $launcher"
# "$modShift, Space, exec, $launcher"
"$modCtrl, Q, killactive"
"$modCtrl, M, fullscreen"
"$modCtrl, G, togglefloating"
"$mod, G, pin"
"$mod, T, togglegroup"
"$mod, period, changegroupactive, f"
"$mod, comma, changegroupactive, b"
"$modCtrl, period, movewindoworgroup, r"
"$modCtrl, comma, movewindoworgroup, l"
"$mod, Tab, cyclenext,"
"$modShift, Tab, cyclenext, prev"
"$mod, Tab, bringactivetotop,"
"$modShift, U, focusurgentorlast"
"$modCtrl, L, exec, $screenLocker"
"$modCtrl, B, exec, $webBrowser"
"$modCtrl, V, exec, $clipboardManager"
"$modCtrl, K, focuswindow, title:(Meet:.*)"
# ", Print, exec, ${pkgs.grim}/bin/grim -g \"$(${pkgs.slurp}/bin/slurp -o -r -c '\#\#00000000')\" -t ppm - | ${pkgs.satty}/bin/satty --filename - --fullscreen --output-filename ${xdgPictures}/screenshots/satty-$(date '+%Y%m%d-%H:%M:%S').png"
", Print, exec, hyprshot -z -m region -o ${xdgPictures}/screenshots -f screenshot-$(date '+%Y%m%d-%H:%M:%S').png"
"CTRL, Print, exec, hyprshot -z -m window -o ${xdgPictures}/screenshots -f screenshot-$(date '+%Y%m%d-%H:%M:%S').png"
"SHIFT, Print, exec, hyprshot -z -m output -o ${xdgPictures}/screenshots -f screenshot-$(date '+%Y%m%d-%H:%M:%S').png"
## navigation
"$mod, $left, movefocus, l"
"$mod, $down, movefocus, d"
"$mod, $up, movefocus, u"
"$mod, $right, movefocus, r"
"$modShift, $left, workspace, e-1"
"$modShift, $right, workspace, e+1"
"$mod, left, movefocus, l"
"$mod, up, movefocus, u"
"$mod, down, movefocus, d"
"$mod, right, movefocus, r"
"$modShift, W, focuscurrentorlast"
"$mod, mouse_down, workspace, e-1"
"$mod, mouse_up, workspace, e+1"
"$modShift, left, workspace, e-1"
"$modShift, right, workspace, e+1"
"$modCtrl, $left, movewindow, l"
"$modCtrl, $down, movewindow, d"
"$modCtrl, $up, movewindow, u"
"$modCtrl, $right, movewindow, r"
"$modCtrl, left, movewindow, l"
"$modCtrl, up, movewindow, u"
"$modCtrl, down, movewindow, d"
"$modCtrl, right, movewindow, r"
# workspaces
"$mod, 1, workspace, 1"
"$mod, 2, workspace, 2"
"$mod, 3, workspace, 3"
"$mod, 4, workspace, 4"
"$mod, 5, workspace, 5"
"$mod, 6, workspace, 6"
"$mod, 7, workspace, 7"
"$mod, 8, workspace, 8"
"$mod, 9, workspace, 9"
"$mod, 0, togglespecialworkspace"
"$modShiftCtrl, 1, movetoworkspace, 1"
"$modShiftCtrl, 2, movetoworkspace, 2"
"$modShiftCtrl, 3, movetoworkspace, 3"
"$modShiftCtrl, 4, movetoworkspace, 4"
"$modShiftCtrl, 5, movetoworkspace, 5"
"$modShiftCtrl, 6, movetoworkspace, 6"
"$modShiftCtrl, 7, movetoworkspace, 7"
"$modShiftCtrl, 8, movetoworkspace, 8"
"$modShiftCtrl, 9, movetoworkspace, 9"
"$modShiftCtrl, 0, movetoworkspace, special"
"$mod, Q, workspace, 1"
"$mod, W, workspace, 2"
"$mod, F, workspace, 3"
"$mod, P, workspace, 4"
"$mod, B, workspace, 5"
"$mod, J, workspace, 6"
"$mod, L, workspace, 7"
"$mod, U, workspace, 8"
"$mod, Y, workspace, 9"
"$mod, apostrophe, togglespecialworkspace"
"$modShiftCtrl, Q, movetoworkspace, 1"
"$modShiftCtrl, W, movetoworkspace, 2"
"$modShiftCtrl, F, movetoworkspace, 3"
"$modShiftCtrl, P, movetoworkspace, 4"
"$modShiftCtrl, B, movetoworkspace, 5"
"$modShiftCtrl, J, movetoworkspace, 6"
"$modShiftCtrl, L, movetoworkspace, 7"
"$modShiftCtrl, U, movetoworkspace, 8"
"$modShiftCtrl, Y, movetoworkspace, 9"
"$modShiftCtrl, apostrophe, movetoworkspace, special"
"$modShiftCtrl, $left, movetoworkspace, e-1"
"$modShiftCtrl, $right, movetoworkspace, e+1"
"$modShiftCtrl, left, movetoworkspace, e-1"
"$modShiftCtrl, right, movetoworkspace, e+1"
''$mod ALT, mouse_down, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor * 1.25}')"''
''$mod ALT, mouse_up, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor / 1.25}')"''
"$mod ALT, mouse:274, exec, hyprctl keyword cursor:zoom_factor 1" # middle wheel click
];
# binde = [
# "$mod, comma, resizeactive, -10 0"
# "$mod, period, resizeactive, 10 0"
# "$modShift, comma, resizeactive, 0 -10"
# "$modShift, period, resizeactive, 0 10"
# ];
bindl = [
"$mod, Escape, exec, hyprctl switchxkblayout all next"
", switch:on:Lid Switch, exec, hyprctl keyword monitor 'eDP-1, disable'"
", switch:off:Lid Switch, exec, hyprctl keyword monitor 'eDP-1, preferred, 1920x0, 1.2'"
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
", XF86AudioPlay, exec, playerctl play-pause"
", XF86AudioPrev, exec, playerctl previous"
", XF86AudioNext, exec, playerctl next"
"$modShiftCtrl ALT, Q, exit"
];
binde = [
", XF86MonBrightnessUp, exec, brightnessctl s 5%+"
", XF86MonBrightnessDown, exec, brightnessctl s 5%-"
"ALT, XF86MonBrightnessUp, exec, brightnessctl s 5%+ -d ${keyboard}::kbd_backlight"
"ALT, XF86MonBrightnessDown, exec, brightnessctl s 5%- -d ${keyboard}::kbd_backlight"
", XF86KbdBrightnessUp, exec, brightnessctl s 5%+ -d ${keyboard}::kbd_backlight"
", XF86KbdBrightnessDown, exec, brightnessctl s 5%- -d ${keyboard}::kbd_backlight"
", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
];
bindm = [
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
"$mod ALT, mouse:272, resizewindow"
];
gestures = {
workspace_swipe = true;
workspace_swipe_fingers = 3;
workspace_swipe_distance = 300;
};
workspace = [
"1, defaultName:general"
"2, defaultName:web"
"3, defaultName:chat"
"4, defaultName:code"
"5, defaultName:uni"
"6, defaultName:games"
"7, defaultName:system"
"8, defaultName:media"
"9, defaultName:tray"
# "10, defaultName:"
];
windowrulev2 = [
## tray/misc utilities
# file picker
"float, class:xdg-desktop-portal-gtk"
"size <50% <90%, class:xdg-desktop-portal-gtk"
"center 1, class:xdg-desktop-portal-gtk"
# xdp-hyprland stream picker
"float, initialTitle:MainPicker"
# general apps
"float, class:(com.saivert.pwvucontrol)"
"float, class:(re.sonny.Junction)"
"float, class:(com.github.hluk.copyq)"
"float, class:(nm-connection-editor)"
"float, class:(.blueman-manager-wrapped)"
# telegram
"maximize, initialTitle:Медіапереглядач"
"noborder, title:TelegramDesktop"
"keepaspectratio, title:TelegramDesktop"
"noblur, title:TelegramDesktop"
"float, title:TelegramDesktop"
"pin, title:TelegramDesktop"
# any chromium-based
"noborder, title:Картинка в картинці"
"keepaspectratio, title:Картинка в картинці"
"noblur, title:Картинка в картинці"
"float, title:Картинка в картинці"
"pin, title:Картинка в картинці"
# and firefox
"noborder, title:Picture-in-Picture"
"keepaspectratio, title:Picture-in-Picture"
"noblur, title:Picture-in-Picture"
"float, title:Picture-in-Picture"
"pin, title:Picture-in-Picture"
# screenshot editor
"noanim, class:com.gabm.satty"
"float, class:com.gabm.satty"
"rounding 0, class:com.gabm.satty"
"size 100% 100%, class:com.gabm.satty"
"move 0 0, class:com.gabm.satty"
"pin, class:com.gabm.satty"
## games
"float, class:(com.mojang.minecraft.java-edition)"
"immediate, class:(com.mojang.minecraft.java-edition)"
# cs2
"immediate, class:(cs2)"
# deadlock
# "float, class:(steam_app_1422450)"
"fullscreen, class:(steam_app_1422450)"
"immediate, class:(steam_app_1422450)"
"immediate, initialTitle:(Ghostrunner)"
# dead by daylight
"immediate, class:deadbydaylight-egs-shipping.exe"
## workspace assignments
"workspace name:chat, class:org.telegram.desktop"
"workspace name:chat, class:org.signal.Signal"
"workspace name:chat, class:im.riot.Riot"
"workspace name:chat, class:WebCord"
"workspace name:games, class:com.heroicgameslauncher.hgl"
"workspace name:games, class:net.lutris.Lutris"
"workspace name:games, class:steam"
# "workspace name:game, class:"
];
};
extraConfig = ''
bind = $modShift, R, submap, resize
submap = resize
binde = , right, resizeactive, 10 0
binde = , left, resizeactive, -10 0
binde = , up, resizeactive, 0 -10
binde = , down, resizeactive, 0 10
binde = , $right, resizeactive, 10 0
binde = , $left, resizeactive, -10 0
binde = , $up, resizeactive, 0 -10
binde = , $down, resizeactive, 0 10
bind = , escape, submap, reset
submap = reset
'';
}

View File

@ -0,0 +1,23 @@
{
osConfig,
config,
inputs,
pkgs,
lib,
...
}: let
inherit (lib) mkIf mkDefault getExe;
inherit (config.lib.stylix) colors;
inherit (osConfig.networking) hostName;
ifLaptop = mkIf (hostName != "dunamis");
in {
imports = with inputs; [
walker.homeManagerModules.default
];
options = config.desktop.hyprland.enable {
# programs.fuzzel = import ./fuzzel {inherit config mkDefault;};
programs.walker = import ./walker {inherit config inputs pkgs;};
programs.waybar = import ./waybar {inherit colors config getExe ifLaptop pkgs;};
programs.hyprlock = import ./hyprlock {inherit config pkgs;};
};
}

View File

@ -0,0 +1,23 @@
{
config,
mkDefault,
}: {
enable = true;
settings = {
main = {
terminal = "$TERMINAL -e";
fields = "filename,name,generic,keywords,categories,exec";
dpi-aware = false;
width = 20;
horizontal-pad = 12;
vertical-pad = 12;
show-actions = true;
match-mode = "fuzzy";
icon-theme = config.dconf.settings."org/gnome/desktop/interface".icon-theme;
};
border = mkDefault {
width = 3;
radius = 12;
};
};
}

View File

@ -0,0 +1,94 @@
{
config,
pkgs,
...
}: let
inherit (config.stylix) colors;
in {
enable = true;
settings = {
general = {
disable_loading_bar = true;
#grace = 300;
hide_cursor = true;
no_fade_in = false;
};
background = [
{
path = "screenshot";
blur_passes = 4;
blur_size = 8;
}
];
input-field = [
{
size = "274, 50";
rounding = 12;
outline_thickness = 3;
position = "0, 0";
monitor = "";
dots_center = true;
fade_on_empty = false;
font_family = "${config.stylix.fonts.serif.name}";
font_color = "rgb(${colors.base05})";
inner_color = "rgb(${colors.base00})";
outer_color = "rgb(${colors.base0D})";
check_color = "rgb(${colors.base0A})";
fail_color = "rgb(${colors.base08})";
placeholder_text = "locked...";
fail_text = "wrong";
shadow_passes = 0;
}
];
shape = [
{
rounding = 12;
#border_size = 3;
size = "274, 50";
color = "rgb(${colors.base00})";
border_color = "rgb(${colors.base0D})";
position = "0, 60";
halign = "center";
valign = "center";
}
{
rounding = 12;
#border_size = 3;
size = "274, 50";
color = "rgb(${colors.base00})";
border_color = "rgb(${colors.base0D})";
position = "0, -60";
halign = "center";
valign = "center";
}
];
label = [
{
monitor = "";
text = "$LAYOUT"; #"cmd[update:1000] ${pkgs.uutils-coreutils-noprefix}/bin/echo $(${pkgs.uutils-coreutils-noprefix}/bin/date +%H:%M:%S)";
text_align = "center";
font_size = 16;
font_family = "${config.stylix.fonts.serif.name}";
outer_color = "rgb(${colors.base00})";
color = "rgb(${colors.base05})";
position = "0, 60";
halign = "center";
valign = "center";
}
{
monitor = "";
text = "cmd[update:1000] ${pkgs.uutils-coreutils-noprefix}/bin/echo $(${pkgs.uutils-coreutils-noprefix}/bin/date +'%m/%d %a %T')";
text_align = "center";
font_size = 16;
font_family = "${config.stylix.fonts.serif.name}";
outer_color = "rgb(${colors.base00})";
color = "rgb(${colors.base05})";
position = "0, -60";
halign = "center";
valign = "center";
}
];
};
}

View File

@ -0,0 +1,307 @@
{
config,
pkgs,
...
}: {
enable = true;
package = pkgs.walker;
runAsService = true;
config = {
activation_mode.labels = "neiotsra";
as_window = false;
disabled = [
"bookmarks"
"clipboard"
"custom_commands"
"translation"
"websearch"
];
builtins = {
applications = {
actions.enabled = true;
context_aware = true;
name = "applications";
placeholder = "Applications";
prioritize_new = true;
refresh = true;
show_generic = true;
show_icon_when_single = true;
show_sub_when_single = true;
weight = 10;
};
calc = {
icon = "accessories-calculator";
min_chars = 4;
name = "calc";
placeholder = "Calculator";
weight = 5;
};
clipboard = {
image_height = 300;
max_entries = 10;
name = "clipboard";
placeholder = "Clipboard";
switcher_only = true;
weight = 5;
};
commands = {
icon = "utilities-terminal";
name = "commands";
placeholder = "Commands";
switcher_only = true;
weight = 8;
};
custom_commands = {
icon = "utilities-terminal";
name = "custom_commands";
placeholder = "Custom Commands";
weight = 5;
};
dmenu = {
name = "dmenu";
placeholder = "Dmenu";
switcher_only = true;
weight = 5;
};
emojis = {
history = true;
name = "emojis";
placeholder = "Emojis";
switcher_only = true;
typeahead = true;
weight = 5;
};
finder = {
concurrency = 8;
icon = "folder";
ignore_gitignore = true;
name = "finder";
placeholder = "Finder";
refresh = true;
switcher_only = true;
weight = 5;
};
runner = {
generic_entry = false;
history = true;
icon = "utilities-terminal";
name = "runner";
placeholder = "Runner";
refresh = true;
typeahead = true;
weight = 5;
};
ssh = {
history = true;
icon = "preferences-system-network";
name = "ssh";
placeholder = "SSH";
refresh = true;
switcher_only = true;
weight = 5;
};
switcher = {
name = "switcher";
placeholder = "Switcher";
prefix = "/";
weight = 5;
};
websearch = {
icon = "applications-internet";
name = "websearch";
placeholder = "Websearch";
weight = 5;
};
windows = {
icon = "view-restore";
name = "windows";
placeholder = "Windows";
weight = 10;
};
};
disable_click_to_close = false;
force_keyboard_focus = true;
list = {
max_entries = 50;
show_initial_entries = true;
single_click = true;
};
search = {
delay = 0;
force_keyboard_focus = true;
history = true;
placeholder = "Search...";
};
};
theme = {
layout = {
ui = {
anchors = {
bottom = false;
left = false;
right = false;
top = false;
};
window = {
h_align = "center";
v_align = "center";
box = {
width = 450;
h_align = "center";
v_align = "center";
# spacing = 12;
orientation = "vertical";
search = {
margins = {
start = 8;
top = 8;
end = 8;
bottom = 0;
};
h_align = "top";
};
scroll = {
overlay_scrolling = true;
list = {
margins = {
bottom = 8;
top = 4;
start = 8;
end = 8;
};
item = {
icon.theme = "${config.gtk.iconTheme.name}";
spacing = 4;
activation_label = {
x_align = 0.5;
y_align = 0.5;
width = 32;
};
text = {
h_align = "start";
h_expand = true;
revert = true;
wrap = true;
};
};
};
};
};
};
};
};
style = let
inherit (config.lib.stylix) colors;
in ''
@define-color base00 #${colors.base00};
@define-color base01 #${colors.base01};
@define-color base02 #${colors.base02};
@define-color base03 #${colors.base03};
@define-color base04 #${colors.base04};
@define-color base05 #${colors.base05};
@define-color base06 #${colors.base06};
@define-color base07 #${colors.base07};
@define-color base08 #${colors.base08};
@define-color base09 #${colors.base09};
@define-color base0A #${colors.base0A};
@define-color base0B #${colors.base0B};
@define-color base0C #${colors.base0C};
@define-color base0D #${colors.base0D};
@define-color base0E #${colors.base0E};
@define-color base0F #${colors.base0F};
#window,
#box,
#search,
#password,
#input,
#typeahead,
#spinner,
#list,
child,
scrollbar,
slider,
#item,
#text,
#label,
#sub,
#activationlabel {
all: unset;
}
#window {
background: @base00;
color: @base05;
border-radius: 20px;
border: 3px solid @base0D;
}
#box {
background: @base00;
}
#search {
background: @base01;
border-radius: 12px 12px 6px 6px;
padding: 8px;
}
#password,
#input,
#typeahead {
background: none;
box-shadow: none;
border-radius: 12px;
}
#input > *:first-child,
#typeahead > *:first-child {
margin-right: 12px;
border-radius: 0px;
}
#typeahead {
color: @base05;
}
#input placeholder {
opacity: 0.5;
}
#list {
padding: 8px;
border-radius: 6px 6px 12px 12px;
background: @base01;
}
child {
box-shadow: none;
}
child:selected,
child:hover {
box-shadow: none;
border-radius: 8px;
background: @base02;
}
#item {
padding: 4px;
}
#sub {
font-size: smaller;
opacity: 0.5;
}
#activationlabel {
opacity: 0.5;
}
.activation #activationlabel {
opacity: 1;
color: @base05;
}
'';
};
}

View File

@ -0,0 +1,331 @@
{
colors,
config,
getExe,
ifLaptop,
pkgs,
...
}: {
enable = true;
systemd = {
enable = true;
target = "graphical-session.target";
};
settings = {
bar-0 = {
# layer = "top";
position = "bottom";
height = 24;
spacing = 6;
# margin-left = 33 + 3;
# margin-right = 33 + 3;
margin-left = 8;
margin-right = 8;
margin-bottom = 8;
reload_style_on_change = true;
modules-left = [
"hyprland/language"
"hyprland/workspaces"
"wlr/taskbar"
];
modules-center = ["clock"];
modules-right = [
(ifLaptop "group/laptop")
"wireplumber"
"tray"
"privacy"
(ifLaptop "power-profiles-daemon")
"idle_inhibitor"
"custom/notification"
];
"niri/workspaces" = {
format = "{icon}";
format-icons = {
"1" = "";
"2" = "";
"3" = "";
"4" = "";
"5" = "";
"6" = "";
"7" = "";
"8" = "";
"9" = "";
"10" = "";
general = "󰘧";
web = "󰖟";
chat = "󰻞";
code = "󰅩";
uni = "󱆀";
games = "󰺶";
system = "󰢻";
media = "󱜐";
tray = "󱊖";
};
};
"niri/language" = {
format = "{}";
format-en = "🇺🇸";
format-uk = "🇺🇦";
};
"custom/separator" = {
format = "󰝠";
interval = "once";
tooltip = false;
};
"group/laptop" = {
orientation = "inherit";
modules = [
"battery"
"backlight"
];
};
"backlight" = {
format = "{icon} {percent}%";
format-icons = [
"󰃚"
"󰃛"
"󰃜"
"󰃝"
"󰃞"
"󰃟"
"󰃠"
];
};
"idle_inhibitor" = {
format = "{icon}";
format-icons = {
activated = "󰅶";
deactivated = "󰾪";
};
};
"tray" = {
icon-size = 20;
spacing = 6;
};
"clock" = {
interval = 1;
format = "{:%H:%M:%S}";
tooltip-format = "{:%d.%m.%Y}";
};
battery = {
states = {
good = 95;
warning = 30;
critical = 15;
};
format = "{icon} {capacity}%";
format-full = "󱟢 {capacity}%";
format-charging = "󰂄 {capacity}%";
format-plugged = "󰚥 {capacity}%";
format-alt = "{icon} {time}";
format-icons = ["󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"];
};
mpris = {
format = "{player_icon} {dynamic}";
format-paused = "{status_icon} <i>{dynamic}</i>";
playing-len = 30;
playing-paused = 30;
player-icons = {
default = "";
mpv = "🎵";
};
status-icons = {paused = "";};
};
"upower" = {
icon-size = 16;
format = "{percentage}";
hide-if-empty = true;
tooltip = true;
tooltip-spacing = 20;
};
"power-profiles-daemon" = {
format = "{icon}";
tooltip-format = "Power profile: {profile}\nDriver: {driver}";
tooltip = true;
format-icons = {
default = "󱡮";
performance = "󱡮";
balanced = "";
power-saver = "";
};
};
"wireplumber" = {
scroll-step = 3;
format = "{icon} {volume}%";
format-muted = "󰖁";
format-icons = ["󰕿" "󰖀" "󰕾"];
on-click = getExe pkgs.pwvucontrol;
on-click-right = "wpctl set-mute @DEFAULT_SINK@ toggle";
};
"custom/notification" = {
tooltip = false;
format = "{icon}";
format-icons = {
notification = "󱅫";
none = "󰂚";
dnd-notification = "󰂛";
dnd-none = "󰂛";
};
return-type = "json";
exec-if = "which swaync-client";
exec = "swaync-client -swb";
on-click = "swaync-client -t -sw";
on-click-right = "swaync-client -d -sw";
escape = true;
};
"privacy" = {
icon-spacing = 2;
icon-size = 16;
transition-duration = 250;
screenshare = {
type = "screenshare";
tooltip = true;
tooltip-icon-size = 24;
};
audio-in = {
type = "audio-in";
tooltip = true;
tooltip-icon-size = 24;
};
};
"wlr/taskbar" = {
format = "{icon}";
icon-size = 20;
icon-theme = "${config.dconf.settings."org/gnome/desktop/interface".icon-theme}";
tooltip-format = "{title}";
on-click = "activate";
};
};
};
style = ''
@define-color base00 #${colors.base00};
@define-color base01 #${colors.base01};
@define-color base02 #${colors.base02};
@define-color base03 #${colors.base03};
@define-color base04 #${colors.base04};
@define-color base05 #${colors.base05};
@define-color base06 #${colors.base06};
@define-color base07 #${colors.base07};
@define-color base08 #${colors.base08};
@define-color base09 #${colors.base09};
@define-color base0A #${colors.base0A};
@define-color base0B #${colors.base0B};
@define-color base0C #${colors.base0C};
@define-color base0D #${colors.base0D};
@define-color base0E #${colors.base0E};
@define-color base0F #${colors.base0F};
* {
font-family: ${config.stylix.fonts.sansSerif.name}, FontAwesome;
font-weight: 500;
font-size: 100%;
}
window#waybar {
background-color: transparent;
color: @base05;
}
.modules-center {
background-color: transparent;
}
.mpris.stopped {
background-color: transparent;
}
.modules-left,
.modules-center,
.modules-right {
/* border-bottom-left-radius: 12px;
border-bottom-right-radius: 12px;
border-top-left-radius: 0px;
border-top-right-radius: 0px; */
background-color: @base00;
border-radius: 24px;
border: 3px solid @base0D;
color: @base05;
padding: 0 0.4em;
}
tooltip {
background: @base01;
border: 1px solid @base0E;
}
tooltip label {
color: @base05;
}
button {
box-shadow: inset 0 -3px transparent;
border-radius: 16px;
}
button:hover {
background: inherit;
box-shadow: inset 0 -3px transparent;
}
#mode {
background-color: rgba(0, 0, 0, 0.2);
box-shadow: inset 0 -3px @base05;
}
#battery,
#backlight,
/* #workspaces,
#taskbar,
#privacy, */
#taskbar button,
#language,
#clock,
#battery,
#backlight,
#wireplumber,
#workspaces button,
#custom-notification,
#idle_inhibitor,
#power-profiles-daemon,
#privacy-item,
#custom-separator {
padding: 0 0.3em;
}
#tray button {
padding: 0 0.3em;
margin: 0 0.2em;
}
#workspaces button.active {
color: @base0D;
}
#taskbar button:hover {
box-shadow: transparent;
}
#taskbar.empty,
window#empty {
background-color: transparent;
}
#battery.critical:not(.charging) {
color: @base09;
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: steps(12);
animation-iteration-count: infinite;
animation-direction: alternate;
}
#power-profiles-daemon.performance {
color: @base0D;
}
#power-profiles-daemon.balanced {
color: @base0B;
}
#power-profiles-daemon.power-saver {
color: @base0A;
}
label:focus {
background-color: #000000;
}
#tray > .passive {
-gtk-icon-effect: dim;
}
#tray > .needs-attention {
-gtk-icon-effect: highlight;
background-color: @base08;
}
#privacy-item.screenshare {
color: @base0C;
}
#privacy-item.audio-in {
color: @base0E;
}
'';
}

View File

@ -0,0 +1,65 @@
{
# getExe,
perSystem,
# pkgs,
lockscreen,
...
}: {
swaync = import ./swaync;
network-manager-applet.enable = true;
blueman-applet.enable = true;
playerctld.enable = true;
wpaperd.enable = true;
hyprpaper.enable = true;
copyq = {
enable = true;
package = perSystem.nixpkgs-stable.copyq;
};
gnome-keyring = {
enable = true;
components = ["secrets"];
};
gammastep = {
enable = true;
provider = "manual";
latitude = 49.6;
longitude = 36.1;
tray = true;
temperature = {
day = 6500;
night = 3000;
};
};
swayosd = {
enable = true;
topMargin = 0.8;
};
udiskie = {
enable = true;
automount = false;
notify = true;
tray = "auto";
};
hypridle = {
enable = true;
settings = {
general = {
before_sleep_cmd = "loginctl lock-session";
after_sleep_cmd = "hyprctl dispatch dpms on";
lock_cmd = "pidof hyprlock || hyprlock";
# unlock_cmd = "loginctl unlock-session";
};
listener = [
{
timeout = 600;
on-timeout = "pidof ${lockscreen} || ${lockscreen}";
}
{
timeout = 601;
on-timeout = "hyprctl dispatch dpms off";
on-resume = "hyprctl dispatch dpms on";
}
];
};
};
}

View File

@ -0,0 +1,177 @@
{
enable = true;
settings = {
cssPriority = "user";
image-visibility = "when-available";
keyboard-shortcut = true;
relative-timestamps = true;
timeout = 5;
timeout-low = 5;
timeout-critical = 0;
script-fail-notify = true;
transition-time = 200;
# Layer settings
layer-shell = true;
layer = "overlay";
control-center-layer = "overlay";
# Notification settings
positionX = "right";
positionY = "top";
notification-2fa-action = true;
notification-inline-replies = false;
notification-icon-size = 32;
notification-body-image-height = 100;
notification-body-image-width = 200;
notification-window-width = 400;
# Control center settings
control-center-positionX = "right";
control-center-positionY = "top";
control-center-width = 500;
control-center-exclusive-zone = true;
fit-to-screen = true;
hide-on-action = true;
hide-on-clear = false;
# Widget settings
widgets = [
"title"
"dnd"
"notifications"
"mpris"
];
widget-config = {
title = {
text = "Notifications";
clear-all-button = true;
button-text = "Clear All";
};
dnd = {
text = "Do Not Disturb";
};
mpris = {
image-size = 96;
image-radius = 12;
blur = true;
};
};
};
style = ''
/*** Global ***/
progress,
progressbar,
trough {
border-radius: 16px;
}
.app-icon,
.image {
-gtk-icon-effect: none;
}
.notification-action {
border-radius: 12px;
margin: 0.5rem;
}
.close-button {
margin: 24px;
padding: 0.2rem;
border-radius: 16px;
}
/*** Notifications ***/
.notification-group.collapsed
.notification-row:not(:last-child)
.notification-action,
.notification-group.collapsed
.notification-row:not(:last-child)
.notification-default-action {
opacity: 0;
}
.trough {
margin: 4px;
border-radius: 7px;
}
.notification,
.notification.low,
.notification.normal,
.notification.critical,
.control-center {
margin: 16px;
border-radius: 7px;
}
.floating-notifications,
.notification-content {
border-radius: 7px;
}
.control-center-list {
background: transparent;
}
/*** Widgets ***/
/* Title widget */
.widget-title {
margin: 0.5rem;
}
.widget-title > label {
font-weight: bold;
}
.widget-title > button {
border-radius: 16px;
padding: 0.5rem;
}
/* DND Widget */
.widget-dnd {
margin: 0.5rem;
}
.widget-dnd > label {
font-weight: bold;
}
.widget-dnd > switch {
border-radius: 16px;
}
.widget-dnd > switch slider {
border-radius: 16px;
padding: 0.25rem;
}
/* Mpris widget */
.widget-mpris .widget-mpris-player {
border-radius: 16px;
margin: 0.5rem;
padding: 0.5rem;
}
.widget-mpris .widget-mpris-player .widget-mpris-album-art {
border-radius: 16px;
}
.widget-mpris .widget-mpris-player .widget-mpris-title {
font-weight: bold;
}
.widget-mpris .widget-mpris-player .widget-mpris-subtitle {
font-weight: normal;
}
.widget-mpris .widget-mpris-player > box > button {
border: 1px solid transparent;
border-radius: 16px;
padding: 0.25rem;
}
'';
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,368 @@
{
config,
osConfig,
launcher,
lockscreen,
...
}: let
inherit (config.lib.stylix) colors;
inherit (config.stylix) cursor;
inherit (osConfig.networking) hostName;
keyboard =
if hostName == "eldrid"
then "chromeos"
else "platform";
xdgPics =
config.xdg.userDirs.pictures;
in {
target = "niri/config.kdl";
text = let
arrows = {
left = "Left";
down = "Down";
up = "Up";
right = "Right";
};
homerow-arrows = {
left = "n";
down = "e";
up = "i";
right = "o";
};
letters = {
first = "Q";
second = "W";
third = "F";
fourth = "P";
fifth = "B";
sixth = "J";
seventh = "L";
eighth = "U";
ninth = "Y";
};
numbers = {
first = "1";
second = "2";
third = "3";
fourth = "4";
fifth = "5";
sixth = "6";
seventh = "7";
eighth = "8";
ninth = "9";
};
genArrowNavigation = keys: ''
Mod+${keys.left} { focus-column-left; }
Mod+${keys.down} { focus-window-or-workspace-down; }
Mod+${keys.up} { focus-window-or-workspace-up; }
Mod+${keys.right} { focus-column-right; }
Mod+Ctrl+${keys.left} { move-column-left; }
Mod+Ctrl+${keys.down} { move-window-down-or-to-workspace-down; }
Mod+Ctrl+${keys.up} { move-window-up-or-to-workspace-up; }
Mod+Ctrl+${keys.right} { move-column-right; }
Mod+Shift+${keys.left} { focus-monitor-left; }
Mod+Shift+${keys.down} { focus-monitor-down; }
Mod+Shift+${keys.up} { focus-monitor-up; }
Mod+Shift+${keys.right} { focus-monitor-right; }
Mod+Shift+Ctrl+${keys.left} { move-column-to-monitor-left; }
Mod+Shift+Ctrl+${keys.down} { move-column-to-monitor-down; }
Mod+Shift+Ctrl+${keys.up} { move-column-to-monitor-up; }
Mod+Shift+Ctrl+${keys.right} { move-column-to-monitor-right; }
'';
genWorkspacesNavigation = keys: ''
Mod+${keys.first} { focus-workspace 1; }
Mod+${keys.second} { focus-workspace 2; }
Mod+${keys.third} { focus-workspace 3; }
Mod+${keys.fourth} { focus-workspace 4; }
Mod+${keys.fifth} { focus-workspace 5; }
Mod+${keys.sixth} { focus-workspace 6; }
Mod+${keys.seventh} { focus-workspace 7; }
Mod+${keys.eighth} { focus-workspace 8; }
Mod+${keys.ninth} { focus-workspace 9; }
Mod+Ctrl+Shift+${keys.first} { move-column-to-workspace 1; }
Mod+Ctrl+Shift+${keys.second} { move-column-to-workspace 2; }
Mod+Ctrl+Shift+${keys.third} { move-column-to-workspace 3; }
Mod+Ctrl+Shift+${keys.fourth} { move-column-to-workspace 4; }
Mod+Ctrl+Shift+${keys.fifth} { move-column-to-workspace 5; }
Mod+Ctrl+Shift+${keys.sixth} { move-column-to-workspace 6; }
Mod+Ctrl+Shift+${keys.seventh} { move-column-to-workspace 7; }
Mod+Ctrl+Shift+${keys.eighth} { move-column-to-workspace 8; }
Mod+Ctrl+Shift+${keys.ninth} { move-column-to-workspace 9; }
'';
in ''
environment {
DISPLAY ":123"
CLUTTER_BACKEND "wayland"
GDK_BACKEND "wayland"
MOZ_ENABLE_WAYLAND "1"
MOZ_WEBRENDER "1"
QT_QPA_PLATFORM "wayland"
SDL_VIDEODRIVER "wayland"
XDG_SESSION_TYPE "wayland"
}
input {
keyboard {
xkb {
layout "us,ua"
variant "colemak_dh_ortho,"
}
repeat-delay 200
repeat-rate 50
track-layout "window"
}
touchpad {
tap
natural-scroll
accel-speed 0.2
accel-profile "flat"
}
mouse {
accel-speed 0.0
accel-profile "flat"
}
touch {
map-to-output "eDP-1"
}
warp-mouse-to-focus
workspace-auto-back-and-forth
}
cursor {
xcursor-theme "${cursor.name}"
xcursor-size ${toString cursor.size}
}
hotkey-overlay {
skip-at-startup
}
prefer-no-csd
screenshot-path "${xdgPics}/screenshots/screenshot-%Y-%m-%d-%H-%M-%S.png"
animations {
slowdown 0.5
}
layout {
gaps 3
// background-color "#${colors.base02}"
background-color "transparent"
center-focused-column "never" // "on-overflow"
default-column-width { proportion 1.0; }
preset-column-widths {
proportion 0.33333
proportion 0.66667
}
struts {
left 36
right 36
}
tab-indicator {
active-color "#${colors.base04}"
inactive-color "#${colors.base03}"
corner-radius 6
gap 3
gaps-between-tabs 3
// length total-proportion=0.3
place-within-column
position "left"
width 6
}
focus-ring {
width 1
active-color "#${colors.base0D}"
inactive-color "#${colors.base03}"
urgent-color "#${colors.base08}"
}
border {
off
width 1
active-color "#${colors.base0D}"
inactive-color "#${colors.base03}"
urgent-color "#${colors.base08}"
}
}
window-rule {
geometry-corner-radius 12
clip-to-geometry true
}
window-rule {
match is-window-cast-target=true
focus-ring {
width 3
active-color "#${colors.base0F}"
inactive-color "#${colors.base03}"
}
border {
width 3
active-color "#${colors.base0F}"
inactive-color "#${colors.base03}"
}
}
layer-rule {
match namespace="^wpaperd.*$"
place-within-backdrop true
}
overview {
workspace-shadow {
off
}
}
layer-rule {
match namespace="waybar"
match at-startup=true
opacity 0.99 // fixes the black fill
}
window-rule {
match title="Картинка в картинці"
match title="Picture-in-Picture"
open-floating true
}
window-rule {
match app-id="org.wezfurlong.wezterm"
match app-id="com.mitchellh.ghostty"
default-column-width { proportion 1.0; }
}
window-rule {
match app-id="re.sonny.Junction"
match app-id="com.github.hluk.copyq"
open-floating true
open-focused true
}
window-rule {
match app-id="com.mitchellh.ghostty"
draw-border-with-background false
}
window-rule {
match app-id=r#"^org\.keepassxc\.KeePassXC$"#
match app-id=r#"^org\.gnome\.World\.Secrets$"#
match app-id=r#"^Bitwarden$"#
match app-id="io.github.kukuruzka165.materialgram"
match app-id="org.telegram.desktop"
match app-id="org.signal.Signal"
match app-id="WebCord"
// block-out-from "screen-capture"
block-out-from "screencast"
}
binds {
Mod+Shift+Slash { show-hotkey-overlay; }
Mod+Tab { focus-workspace-previous; }
Mod+C { center-column; }
Mod+M { maximize-column; }
Mod+H { set-column-width "50%"; }
Mod+T { set-column-width "33%"; }
Mod+Shift+T { set-column-width "67%"; }
Mod+V { toggle-column-tabbed-display; }
Mod+G { switch-focus-between-floating-and-tiling; }
Mod+X { spawn "pkill" "-SIGUSR1" "waybar"; } // hide/show waybar
Mod+Ctrl+Comma { consume-or-expel-window-left; }
Mod+Ctrl+Period { consume-or-expel-window-right; }
Mod+Ctrl+Q { close-window; }
Mod+Ctrl+M { fullscreen-window; }
Mod+Ctrl+G { toggle-window-floating; }
Mod+Ctrl+Shift+M { toggle-windowed-fullscreen; }
Mod+Minus { set-column-width "-10%"; }
Mod+Equal { set-column-width "+10%"; }
Mod+Comma { set-column-width "-10%"; }
Mod+Period { set-column-width "+10%"; }
Mod+Shift+Comma { set-window-height "-10%"; }
Mod+Shift+Period { set-window-height "+10%"; }
Mod+Space { switch-layout "next"; }
Mod+Ctrl+Space repeat=false { toggle-overview; }
Mod+Return repeat=false { spawn "sh" "-c" "$TERMINAL"; }
Mod+BackSpace repeat=false { spawn "${launcher}"; }
Mod+A repeat=false { spawn "${launcher}"; }
Mod+Ctrl+L repeat=false { spawn "${lockscreen}"; }
Mod+Ctrl+V repeat=false { spawn "copyq" "menu"; }
Mod+Shift+W repeat=false { spawn "walker" "-m" "windows"; }
Mod+Ctrl+Shift+BracketLeft { quit; }
Mod+Ctrl+Shift+BracketRight { power-off-monitors; }
Print { screenshot; }
Ctrl+Print { screenshot-screen; }
Shift+Print { screenshot-window; }
// Caps_Lock { spawn "swayosd-client" "--caps-lock"; }
// XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "-l" "1.0" "@DEFAULT_AUDIO_SINK@" "5%+"; }
// XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "-l" "1.0" "@DEFAULT_AUDIO_SINK@" "5%-"; }
// XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
// XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }
XF86AudioRaiseVolume allow-when-locked=true { spawn "swayosd-client" "--output-volume" "raise"; }
XF86AudioLowerVolume allow-when-locked=true { spawn "swayosd-client" "--output-volume" "lower"; }
XF86AudioMute allow-when-locked=true { spawn "swayosd-client" "--output-volume" "mute-toggle"; }
XF86AudioMicMute allow-when-locked=true { spawn "swayosd-client" "--input-volume" "mute-toggle"; }
XF86AudioPlay allow-when-locked=true { spawn "playerctl" "play-pause"; }
XF86AudioPause allow-when-locked=true { spawn "playerctl" "pause"; }
XF86AudioPrev allow-when-locked=true { spawn "playerctl" "previous"; }
XF86AudioNext allow-when-locked=true { spawn "playerctl" "next"; }
XF86ScreenSaver allow-when-locked=true { spawn "${lockscreen}"; }
XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "s" "5%+"; }
XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "s" "5%-"; }
Alt+XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "s" "5%+" "-d" "${keyboard}::kbd_backlight"; }
Alt+XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "s" "5%-" "-d" "${keyboard}::kbd_backlight"; }
XF86KbdBrightnessUp allow-when-locked=true { spawn "brightnessctl" "s" "5%+" "-d" "${keyboard}::kbd_backlight"; }
XF86KbdBrightnessDown allow-when-locked=true { spawn "brightnessctl" "s" "5%-" "-d" "${keyboard}::kbd_backlight"; }
Mod+Home { focus-column-first; }
Mod+End { focus-column-last; }
Mod+Ctrl+Home { move-column-to-first; }
Mod+Ctrl+End { move-column-to-last; }
Mod+Next { focus-workspace-down; }
Mod+Prior { focus-workspace-up; }
Mod+Ctrl+Next { move-column-to-workspace-down; }
Mod+Ctrl+Prior { move-column-to-workspace-up; }
Mod+Shift+Next { move-workspace-down; }
Mod+Shift+Prior { move-workspace-up; }
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
Mod+WheelScrollRight { focus-column-right; }
Mod+WheelScrollLeft { focus-column-left; }
Mod+Ctrl+WheelScrollRight { move-column-right; }
Mod+Ctrl+WheelScrollLeft { move-column-left; }
Mod+Shift+WheelScrollDown { focus-column-right; }
Mod+Shift+WheelScrollUp { focus-column-left; }
Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
Mod+TouchpadScrollDown { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02+"; }
Mod+TouchpadScrollUp { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02-"; }
${genArrowNavigation arrows}
${genArrowNavigation homerow-arrows}
${genWorkspacesNavigation letters}
${genWorkspacesNavigation numbers}
}
'';
}

View File

@ -0,0 +1,23 @@
{
config,
lib,
}: {
enable = true;
settings = {
main = {
terminal = "$TERMINAL -e";
fields = "filename,name,generic,keywords,categories,exec";
dpi-aware = false;
width = 20;
horizontal-pad = 12;
vertical-pad = 12;
show-actions = true;
match-mode = "fuzzy";
icon-theme = config.dconf.settings."org/gnome/desktop/interface".icon-theme;
};
border = lib.mkDefault {
width = 3;
radius = 12;
};
};
}

Some files were not shown because too many files have changed in this diff Show More