Compare commits

...

122 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
112 changed files with 4307 additions and 3088 deletions

View File

@ -1,6 +1,17 @@
<h1>So what is this?</h1> # NixOS Configuration
<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> ## So what is this?
<h2>TODOs:</h2>
<ul> This is a personal NixOS config based on
<li>i'll put that in when i recall what i wanted to add</li> [Blueprint](https://github.com/numtide/blueprint).
</ul> 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

695
flake.lock generated

File diff suppressed because it is too large Load Diff

131
flake.nix
View File

@ -2,45 +2,104 @@
description = "unexplrd's personal configuration"; description = "unexplrd's personal configuration";
inputs = { inputs = {
blueprint.url = "github:numtide/blueprint"; # lix = {
chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable"; # url = "https://git.lix.systems/lix-project/nixos-module/archive/2.93.1.tar.gz";
disko.url = "github:nix-community/disko/latest"; # inputs.nixpkgs.follows = "nixpkgs";
home-manager.url = "github:nix-community/home-manager"; # };
hyprland.url = "github:hyprwm/Hyprland"; # neve = {
hyprsunset.url = "github:hyprwm/hyprsunset"; # inputs.nixvim.follows = "nixvim";
lanzaboote.url = "github:nix-community/lanzaboote/v0.4.2"; # url = "git+https://gitea.linerds.us/unexplrd/Neve";
# 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";
# nixvim.url = "github:nix-community/nixvim"; # nixvim.url = "github:nix-community/nixvim";
nix-flatpak.url = "github:gmodena/nix-flatpak"; systems.url = "github:nix-systems/default";
nix-index-database.url = "github:nix-community/nix-index-database"; blueprint = {
nixos-cosmic.url = "github:lilyinstarlight/nixos-cosmic"; url = "github:numtide/blueprint";
nixos-facter-modules.url = "github:numtide/nixos-facter-modules"; inputs.nixpkgs.follows = "nixpkgs";
# nixos-hardware.url = "github:NixOS/nixos-hardware/master"; inputs.systems.follows = "systems";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11"; };
nixpkgs.url = "github:NixOS/nixpkgs?ref=nixos-unstable"; chaotic = {
sops-nix.url = "github:mic92/sops-nix"; url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
walker = { inputs = {
url = "github:abenz1267/walker"; home-manager.follows = "home-manager";
nixpkgs.follows = "nixpkgs";
};
};
disko = {
url = "github:nix-community/disko/latest";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
stylix.url = "github:danth/stylix/8b0d9317edd57c5374adcf6957ae4775875c2a9d"; ghostty = {
# TODO: somehow reduce the number of *.inputs.nixpkgs.follows = "nixpkgs" stuff, mb a function? url = "github:ghostty-org/ghostty";
blueprint.inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
chaotic.inputs.nixpkgs.follows = "nixpkgs"; inputs.flake-utils.inputs.systems.follows = "systems";
disko.inputs.nixpkgs.follows = "nixpkgs"; };
home-manager.inputs.nixpkgs.follows = "nixpkgs"; home-manager = {
hyprland.inputs.nixpkgs.follows = "nixpkgs"; url = "github:nix-community/home-manager";
hyprsunset.inputs.hyprland-protocols.follows = "hyprland/hyprland-protocols"; inputs.nixpkgs.follows = "nixpkgs";
hyprsunset.inputs.hyprutils.follows = "hyprland/hyprutils"; };
hyprsunset.inputs.nixpkgs.follows = "nixpkgs"; hyprland = {
lanzaboote.inputs.nixpkgs.follows = "nixpkgs"; url = "github:hyprwm/Hyprland";
# lix.inputs.nixpkgs.follows = "nixpkgs"; inputs = {
mysecrets.flake = false; systems.follows = "systems";
# neve.inputs.nixvim.follows = "nixvim"; nixpkgs.follows = "nixpkgs";
nix-index-database.inputs.nixpkgs.follows = "nixpkgs"; };
sops-nix.inputs.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";
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;}; outputs = inputs: inputs.blueprint {inherit inputs;};

View File

@ -1,28 +1,27 @@
{ {inputs, ...}: {
config,
inputs,
...
}: {
imports = with inputs; [ imports = with inputs; [
self.nixosModules.config self.modules.shared.nixos
self.nixosModules.desktop self.nixosModules.desktop
self.nixosModules.system self.nixosModules.system
./disko ./disko
# ./minecraft.nix ./misc
]; ];
networking = { networking = {
networkmanager.enable = true;
hostId = "c7f6c4a1"; hostId = "c7f6c4a1";
hostName = "dunamis"; hostName = "dunamis";
}; };
environment.memoryAllocator.provider = "mimalloc"; system.stateVersion = "25.11";
system.stateVersion = "25.05";
time.timeZone = "Europe/Kyiv"; time.timeZone = "Europe/Kyiv";
desktop.niri.enable = true; desktop.niri.enable = true;
services.displayManager.autoLogin = {
enable = true;
user = "user";
};
module = { module = {
config = { config = {
secureBoot = true; secureBoot = true;
@ -31,24 +30,13 @@
}; };
stylix = { stylix = {
enable = true; enable = true;
theme = "rose-pine-dawn"; theme = "sandcastle";
}; };
}; locale = "uk_UA.UTF-8";
misc = {
locale.ukrainian.enable = true;
opentabletdriver.enable = false; opentabletdriver.enable = false;
qmk-vial.enable = true; qmk-vial.enable = true;
virtual.libvirt.enable = true;
nix = let
inherit (builtins) readFile;
inherit (config.users.users) user;
in {
settings.trusted-users = ["nix-ssh"];
sshServe = {
enable = true;
write = true;
keys = map (f: readFile f) user.openssh.authorizedKeys.keyFiles;
}; };
virt.libvirt.enable = true;
}; };
} }

View File

@ -1,4 +1,9 @@
{inputs, ...}: let {
config,
inputs,
...
}: let
inherit (config.networking) hostId;
disk = "/dev/disk/by-id/nvme-eui.000000000000000100a075244b5d6185"; disk = "/dev/disk/by-id/nvme-eui.000000000000000100a075244b5d6185";
in { in {
imports = with inputs; [ imports = with inputs; [
@ -10,5 +15,5 @@ in {
mountOptions = ["rw" "nosuid" "nodev"]; mountOptions = ["rw" "nosuid" "nodev"];
}; };
}; };
disko.devices.disk.main = import ./disk-main.nix {inherit disk;}; disko.devices.disk.main = import ./disk-main.nix {inherit disk hostId;};
} }

View File

@ -1,4 +1,7 @@
{disk, ...}: { {
disk,
hostId,
}: {
type = "disk"; type = "disk";
device = disk; device = disk;
content = { content = {
@ -25,45 +28,30 @@
size = "100%"; size = "100%";
content = { content = {
type = "luks"; type = "luks";
name = "luks-main"; name = "luks-" + hostId;
initrdUnlock = true; initrdUnlock = true;
settings.allowDiscards = true; settings.allowDiscards = true;
content = { content = let
mountOptions = ["autodefrag" "compress-force=zstd" "noatime"];
in {
type = "btrfs"; type = "btrfs";
extraArgs = ["-f"]; extraArgs = ["-f"];
subvolumes = { subvolumes = {
"@nixos-root" = { "@nixos-root" = {
mountpoint = "/"; mountpoint = "/";
mountOptions = [ mountOptions = mountOptions ++ ["noexec"];
"autodefrag"
"compress=zstd"
"noatime"
"noexec"
];
}; };
"@home" = { "@home" = {
mountpoint = "/home"; mountpoint = "/home";
mountOptions = [ inherit mountOptions;
"autodefrag"
"compress=zstd"
"noatime"
];
}; };
"@storage" = { "@storage" = {
mountpoint = "/storage"; mountpoint = "/storage";
mountOptions = [ inherit mountOptions;
"autodefrag"
"compress=zstd"
"noatime"
];
}; };
"@nix" = { "@nix" = {
mountpoint = "/nix"; mountpoint = "/nix";
mountOptions = [ inherit mountOptions;
"autodefrag"
"compress-force=zstd"
"noatime"
];
}; };
}; };
}; };

View File

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

View File

@ -1,17 +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"];
# TODO: remove when unbroken
stylix.targets.mako.enable = false;
}

View File

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

View File

@ -1,98 +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;
systemd.user.settings.Manager.DefaultEnvironment = {
TERMINAL = "wezterm";
};
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;
[
# development utils
alejandra # nix formatter in rust
devenv # programming deps in rust
jj-fzf # fuzzy finder jujutsu tui
just # make in rust
silicon # create code pics in rust
]
++ [
# console utils
bluetuith # bluetooth tui in go
dua # disk space usage in rust
duf # better df in go
fend # calculator in rust
mprocs # process runner in rust
ouch # archive manager in rust
procs # ps in rust
rbw # bitwarden cli in rust
sd # sed in rust
trashy # trash cli in rust
]
++ [
# misc apps
# vial # qmk keyboard configuring app
pinentry-qt # pinentry for rbw
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,23 +1,34 @@
{inputs, ...}: { {inputs, ...}: {
imports = with inputs; [ imports = with inputs; [
self.nixosModules.config self.modules.shared.nixos
self.nixosModules.desktop self.nixosModules.desktop
self.nixosModules.system self.nixosModules.system
./disko ./disko
./hardware ./hardware
./misc
]; ];
networking = { networking = {
networkmanager.enable = true; hostId = "14f63637";
# hostId = "";
hostName = "eldrid"; hostName = "eldrid";
}; };
environment.memoryAllocator.provider = "mimalloc"; system.stateVersion = "25.11";
system.stateVersion = "25.05";
time.timeZone = "Europe/Kyiv"; time.timeZone = "Europe/Kyiv";
desktop.plasma.enable = true; desktop.niri.enable = true;
services.displayManager.autoLogin = {
enable = true;
user = "user";
};
swapDevices = [
{
device = "/swap/swapfile";
size = 8 * 1024; # eight gigs
}
];
module = { module = {
config = { config = {
@ -29,19 +40,11 @@
}; };
stylix = { stylix = {
enable = true; enable = true;
theme = "helios"; theme = "sandcastle";
}; };
}; locale = "uk_UA.UTF-8";
misc = {
locale.ukrainian.enable = true;
opentabletdriver.enable = false;
qmk-vial.enable = true; qmk-vial.enable = true;
virtual.libvirt.enable = false; };
};
swapDevices = [
{
device = "/swap/swapfile";
size = 8 * 1024; # eight gigs
}
];
} }

View File

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

View File

@ -1,4 +1,7 @@
{disk, ...}: { {
disk,
hostId,
}: {
type = "disk"; type = "disk";
device = disk; device = disk;
content = { content = {
@ -25,7 +28,7 @@
size = "100%"; size = "100%";
content = { content = {
type = "luks"; type = "luks";
name = "luks-main"; name = "luks-" + hostId;
initrdUnlock = true; initrdUnlock = true;
settings.allowDiscards = true; settings.allowDiscards = true;
content = { content = {

View File

@ -1,30 +0,0 @@
{
config,
inputs,
...
}: let
inherit (builtins) readFile;
inherit (config.networking) hostName;
inherit (config.sops) secrets;
inherit (inputs) mysecrets;
pubHost = readFile "${mysecrets}/ssh/ssh_host_ed25519_dunamis.base64";
in {
nix = {
distributedBuilds = true;
buildMachines = [
{
hostName = "dunamis";
publicHostKey = pubHost;
sshKey = secrets."ssh-${hostName}-user".path;
sshUser = "nix-ssh";
supportedFeatures = [
"benchmark"
"big-parallel"
"kvm"
"nixos-test"
];
system = "x86_64-linux";
}
];
};
}

View File

@ -1,20 +1,47 @@
{pkgs, ...}: let {pkgs, ...}: let
cb-ucm-conf = pkgs.alsa-ucm-conf.overrideAttrs { cb-ucm-conf = with pkgs;
wttsrc = pkgs.fetchFromGitHub { alsa-ucm-conf.overrideAttrs {
wttsrc = fetchFromGitHub {
owner = "WeirdTreeThing"; owner = "WeirdTreeThing";
repo = "chromebook-ucm-conf"; repo = "alsa-ucm-conf-cros";
rev = "b6ce2a7"; rev = "a4f0ed6cf59163fb571c33a81a6b40b6f53ed57d";
hash = "sha256-QRUKHd3RQmg1tnZU8KCW0AmDtfw/daOJ/H3XU5qWTCc="; hash = "sha256-H0BsRzHSEJ6XCZB/Rvb3w+uGCzr+kAvAwcHWqYEtp6w=";
}; };
postInstall = '' unpackPhase = ''
cp -R $wttsrc/common/* $out/share/alsa/ucm2/common runHook preUnpack
cp -R $wttsrc/codecs/* $out/share/alsa/ucm2/codecs tar xf "$src"
cp -R $wttsrc/platforms/* $out/share/alsa/ucm2/platforms runHook postUnpack
cp -R $wttsrc/sof-rt5682 $out/share/alsa/ucm2/conf.d '';
cp -R $wttsrc/sof-cs42l42 $out/share/alsa/ucm2/conf.d
installPhase = ''
runHook preInstall
mkdir -p $out/share/alsa
cp -r alsa-ucm*/ucm2 $out/share/alsa
runHook postInstall
''; '';
}; };
in { 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 = [ system.replaceDependencies.replacements = [
{ {
original = pkgs.alsa-ucm-conf; original = pkgs.alsa-ucm-conf;
@ -22,6 +49,10 @@ in {
} }
]; ];
boot.extraModprobeConfig = ''
options snd-intel-dspcfg dsp_driver=3
'';
services.pipewire.wireplumber.configPackages = [ services.pipewire.wireplumber.configPackages = [
(pkgs.writeTextDir "share/wireplumber/main.lua.d/51-increase-headroom.lua" '' (pkgs.writeTextDir "share/wireplumber/main.lua.d/51-increase-headroom.lua" ''
rule = { rule = {
@ -37,10 +68,19 @@ in {
table.insert(alsa_monitor.rules,rule) table.insert(alsa_monitor.rules,rule)
'') '')
]; (pkgs.writeTextDir "share/wireplumber/main.lua.d/51-avs-dmic.lua" ''
boot = { rule = {
extraModprobeConfig = '' matches = {
options snd-intel-dspcfg dsp_driver=3 {
''; { "node.nick", "equals", "Internal Microphone" },
}; },
},
apply_properties = {
["audio.format"] = "S16LE",
},
}
table.insert(alsa_monitor.rules, rule)
'')
];
} }

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,7 +1 @@
{lib, ...}: { {flake, ...}: {imports = [flake.modules.shared.user];}
imports = [
../../../dunamis/users/user/common.nix
../../../dunamis/users/user/programs.nix
../../../dunamis/users/user/flatpak.nix
];
}

View File

@ -1,41 +1,41 @@
{ {inputs, ...}: {
config,
inputs,
...
}: {
imports = with inputs; [ imports = with inputs; [
self.nixosModules.config self.modules.shared.nixos
self.nixosModules.desktop self.nixosModules.desktop
self.nixosModules.system self.nixosModules.system
./disko ./disko
./hardware ./hardware
./misc
]; ];
networking = { networking = {
networkmanager.enable = true; hostId = "45b00123";
hostName = "legion"; hostName = "legion";
}; };
environment.memoryAllocator.provider = "mimalloc"; system.stateVersion = "25.11";
system.stateVersion = "25.05";
time.timeZone = "Europe/Kyiv"; time.timeZone = "Europe/Kyiv";
desktop.niri.enable = true; desktop.niri.enable = true;
services.displayManager.autoLogin = {
enable = true;
user = "user";
};
module = { module = {
config = { config = {
laptop.homeRowMods = true; laptop.homeRowMods = true;
powerSave = true; powerSave = true;
# secureBoot = true; secureBoot = true;
# tpmDiskUnlock = true; tpmDiskUnlock = true;
vaapi = "nvidia"; vaapi = "nvidia";
}; };
stylix = { stylix = {
enable = true; enable = true;
theme = "helios"; theme = "sandcastle";
}; };
locale = "uk_UA.UTF-8";
virt.libvirt.enable = true;
}; };
locale.ukrainian.enable = true;
virtual.libvirt.enable = true;
} }

View File

@ -1,4 +1,9 @@
{inputs, ...}: let {
config,
inputs,
...
}: let
inherit (config.networking) hostId;
disk-main = "/dev/disk/by-id/nvme-INTEL_SSDPEKKF256G8L_BTHH81460QC2256B"; disk-main = "/dev/disk/by-id/nvme-INTEL_SSDPEKKF256G8L_BTHH81460QC2256B";
disk-second = "/dev/disk/by-id/nvme-WDC_PC_SN730_SDBPNTY-1T00-1101_21114D802446"; disk-second = "/dev/disk/by-id/nvme-WDC_PC_SN730_SDBPNTY-1T00-1101_21114D802446";
in { in {
@ -11,6 +16,6 @@ in {
mountOptions = ["rw" "nosuid" "nodev"]; mountOptions = ["rw" "nosuid" "nodev"];
}; };
}; };
disko.devices.disk.main = import ./disk-main.nix {inherit disk-main;}; disko.devices.disk.main = import ./disk-main.nix {inherit disk-main hostId;};
disko.devices.disk.second = import ./disk-second.nix {inherit disk-second;}; disko.devices.disk.second = import ./disk-second.nix {inherit disk-second hostId;};
} }

View File

@ -1,4 +1,7 @@
{disk-main}: { {
disk-main,
hostId,
}: {
type = "disk"; type = "disk";
device = disk-main; device = disk-main;
content = { content = {
@ -25,7 +28,7 @@
size = "100%"; size = "100%";
content = { content = {
type = "luks"; type = "luks";
name = "luks-main"; name = "luks-" + hostId;
initrdUnlock = true; initrdUnlock = true;
settings.allowDiscards = true; settings.allowDiscards = true;
content = { content = {

View File

@ -1,4 +1,7 @@
{disk-second}: { {
disk-second,
hostId,
}: {
type = "disk"; type = "disk";
device = disk-second; device = disk-second;
content = { content = {
@ -8,7 +11,7 @@
size = "100%"; size = "100%";
content = { content = {
type = "luks"; type = "luks";
name = "luks-second"; name = "luks-${hostId}-second";
initrdUnlock = true; initrdUnlock = true;
settings.allowDiscards = true; settings.allowDiscards = true;
content = { content = {

View File

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

View File

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

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

@ -1,11 +1,15 @@
{disk, ...}: { {
disk,
hostId,
...
}: {
type = "disk"; type = "disk";
device = disk; device = disk;
content = { content = {
type = "gpt"; type = "gpt";
partitions = { partitions = {
ESP = { ESP = {
size = "2G"; size = "1G";
type = "EF00"; type = "EF00";
content = { content = {
type = "filesystem"; type = "filesystem";
@ -25,7 +29,7 @@
size = "100%"; size = "100%";
content = { content = {
type = "luks"; type = "luks";
name = "luks-main"; name = "luks-" + hostId;
initrdUnlock = true; initrdUnlock = true;
settings.allowDiscards = true; settings.allowDiscards = true;
content = { content = {
@ -61,6 +65,12 @@
"noatime" "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

@ -2,25 +2,40 @@
imports = with inputs; [ imports = with inputs; [
self.nixosModules.desktop self.nixosModules.desktop
self.nixosModules.system self.nixosModules.system
self.nixosModules.config self.modules.shared.nixos
./disko ./disko
./hardware ./hardware
./distributed-build.nix ./misc
]; ];
networking = { networking = {
networkmanager.enable = true;
hostId = "31150fae"; hostId = "31150fae";
hostName = "sarien"; hostName = "sarien";
}; };
boot.loader.systemd-boot.enable = true; system.stateVersion = "25.11";
environment.memoryAllocator.provider = "mimalloc";
system.stateVersion = "25.05";
time.timeZone = "Europe/Kyiv"; time.timeZone = "Europe/Kyiv";
desktop.niri.enable = true; desktop.niri.enable = true;
services.displayManager.autoLogin = {
enable = true;
user = "user";
};
swapDevices = [
{
device = "/swap/swapfile";
size = 4 * 1024;
priority = 100;
}
{
device = "/swap/hibernate";
size = 16 * 1024;
priority = 1;
}
];
module = { module = {
config = { config = {
laptop.homeRowMods = true; laptop.homeRowMods = true;
@ -30,12 +45,10 @@
}; };
stylix = { stylix = {
enable = true; enable = true;
theme = "nord"; theme = "sandcastle";
}; };
locale = "uk_UA.UTF-8";
misc.qmk-vial.enable = true;
virt.libvirt.enable = true;
}; };
locale.ukrainian.enable = true;
opentabletdriver.enable = false;
qmk-vial.enable = true;
virtual.libvirt.enable = true;
} }

View File

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

View File

@ -1,30 +0,0 @@
{
config,
inputs,
...
}: let
inherit (builtins) readFile;
inherit (config.networking) hostName;
inherit (config.sops) secrets;
inherit (inputs) mysecrets;
pubHost = readFile "${mysecrets}/ssh/ssh_host_ed25519_dunamis.base64";
in {
nix = {
distributedBuilds = true;
buildMachines = [
{
hostName = "dunamis";
publicHostKey = pubHost;
sshKey = secrets."ssh-${hostName}-user".path;
sshUser = "nix-ssh";
supportedFeatures = [
"benchmark"
"big-parallel"
"kvm"
"nixos-test"
];
system = "x86_64-linux";
}
];
};
}

View File

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

View File

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

View File

@ -1,5 +1,4 @@
{ {
imports = [ 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,6 +1,6 @@
{ {
imports = [ imports = [
./common # ./common
./cosmic ./cosmic
./gnome ./gnome
./hyprland ./hyprland

View File

@ -1,4 +1,5 @@
{ {
osConfig,
config, config,
pkgs, pkgs,
lib, lib,
@ -13,33 +14,63 @@ in {
mkEnableOption "enable gnome desktop"; mkEnableOption "enable gnome desktop";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
home.packages = with pkgs; [ home.packages =
gnomeExtensions.alphabetical-app-grid (with pkgs.gnomeExtensions; [
gnomeExtensions.removable-drive-menu # extensions
gnomeExtensions.caffeine alphabetical-app-grid
gnomeExtensions.space-bar app-icons-taskbar
gnomeExtensions.switcher caffeine
gnomeExtensions.tactile pano
gnomeExtensions.pano removable-drive-menu
gnomeExtensions.window-is-ready-remover space-bar
switcher
tactile
window-is-ready-remover
])
++ (with pkgs; [
# regular packages
junction junction
celluloid celluloid
mission-center mission-center
dconf dconf
pwvucontrol pwvucontrol
wl-clipboard wl-clipboard
]; ]);
programs.gnome-shell.extensions = [ programs.gnome-shell.extensions = [
{package = pkgs.gnomeExtensions.alphabetical-app-grid;} {package = pkgs.gnomeExtensions.alphabetical-app-grid;}
{package = pkgs.gnomeExtensions.app-icons-taskbar;}
{package = pkgs.gnomeExtensions.removable-drive-menu;}
{package = pkgs.gnomeExtensions.caffeine;} {package = pkgs.gnomeExtensions.caffeine;}
{package = pkgs.gnomeExtensions.pano;}
{package = pkgs.gnomeExtensions.removable-drive-menu;}
{package = pkgs.gnomeExtensions.space-bar;} {package = pkgs.gnomeExtensions.space-bar;}
{package = pkgs.gnomeExtensions.switcher;} {package = pkgs.gnomeExtensions.switcher;}
{package = pkgs.gnomeExtensions.tactile;} {package = pkgs.gnomeExtensions.tactile;}
{package = pkgs.gnomeExtensions.pano;}
{package = pkgs.gnomeExtensions.window-is-ready-remover;} {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; { dconf.settings = with lib.hm.gvariant; {
"org/gnome/desktop/a11y/applications" = { "org/gnome/desktop/a11y/applications" = {
screen-reader-enabled = false; screen-reader-enabled = false;
@ -54,12 +85,12 @@ in {
"org/gnome/desktop/input-sources" = { "org/gnome/desktop/input-sources" = {
mru-sources = [(mkTuple ["xkb" "us"])]; 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"]; xkb-options = ["terminate:ctrl_alt_bksp"];
}; };
"org/gnome/desktop/interface" = { "org/gnome/desktop/interface" = {
accent-color = "slate"; # accent-color = "slate";
clock-show-seconds = true; clock-show-seconds = true;
color-scheme = "prefer-dark"; color-scheme = "prefer-dark";
enable-animations = true; enable-animations = true;
@ -100,8 +131,8 @@ in {
move-to-workspace-last = ["<Shift><Control><Super>End"]; move-to-workspace-last = ["<Shift><Control><Super>End"];
move-to-workspace-left = ["<Control><Super>Left"]; move-to-workspace-left = ["<Control><Super>Left"];
move-to-workspace-right = ["<Control><Super>Right"]; move-to-workspace-right = ["<Control><Super>Right"];
switch-input-source = ["<Super>Escape"]; switch-input-source = ["<Super>Space"];
switch-input-source-backward = ["<Shift><Super>Escape"]; switch-input-source-backward = ["<Shift><Super>Space"];
switch-to-workspace-1 = ["<Super>1"]; switch-to-workspace-1 = ["<Super>1"];
switch-to-workspace-2 = ["<Super>2"]; switch-to-workspace-2 = ["<Super>2"];
switch-to-workspace-3 = ["<Super>3"]; switch-to-workspace-3 = ["<Super>3"];
@ -135,7 +166,18 @@ in {
}; };
"org/gnome/shell" = { "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" = { "org/gnome/shell/app-switcher" = {
@ -167,6 +209,21 @@ in {
workspace-indicator = true; 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" = { "org/gnome/shell/extensions/tactile" = {
background-color = "#${colors.base00}"; background-color = "#${colors.base00}";
border-color = "#${colors.base0D}"; 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;
}
'';
}

View File

@ -1,22 +1,27 @@
{ {
perSystem,
osConfig,
config, config,
pkgs, inputs,
lib, lib,
osConfig,
# perSystem,
pkgs,
... ...
}: let }: let
inherit (lib.strings) removeSuffix; inherit (lib) mkIf mkEnableOption mkForce getExe;
inherit (lib) mkIf mkEnableOption mkDefault mkForce getExe;
inherit (osConfig.module.stylix) theme;
inherit (osConfig.networking) hostName; inherit (osConfig.networking) hostName;
cfg = config.desktop.niri; cfg = config.desktop.niri;
ifLaptop = mkIf (hostName != "dunamis"); ifLaptop = mkIf (hostName != "dunamis");
commonArgs = {
inherit config inputs lib osConfig pkgs;
launcher = getExe pkgs.walker; launcher = getExe pkgs.walker;
lockscreen = getExe pkgs.gtklock; lockscreen = getExe pkgs.gtklock;
};
in { in {
imports = [ imports = with inputs; [
./programs walker.homeManagerModules.default
]; ];
options = { options = {
desktop.niri.enable = desktop.niri.enable =
@ -28,6 +33,24 @@ in {
wpaperd.enable = true; wpaperd.enable = true;
qt.enable = false; qt.enable = false;
}; };
stylix.iconTheme = {
enable = true;
light = "Papirus-Light";
dark = "Papirus-Dark";
package = let
inherit (lib.strings) hasPrefix;
inherit (osConfig.module.stylix) theme;
color =
if (hasPrefix "rose-pine" theme)
then "indigo"
else if (hasPrefix "nord" theme)
then "nordic"
else if (hasPrefix "s" theme)
then "teal"
else null;
in
pkgs.papirus-icon-theme.override {inherit color;};
};
dconf.settings = { dconf.settings = {
"org/gnome/desktop/wm/preferences" = { "org/gnome/desktop/wm/preferences" = {
button-layout = "icon:close"; button-layout = "icon:close";
@ -40,45 +63,26 @@ in {
else lib.mkDefault "prefer-light"; else lib.mkDefault "prefer-light";
}; };
}; };
gtk = {
enable = true;
iconTheme = let
papirusPackage =
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 {
name =
if config.stylix.polarity == "dark"
then "Papirus-Dark"
else "Papirus-Light";
package = papirusPackage;
};
};
qt = { qt = {
enable = true; enable = true;
platformTheme.name = "gtk3"; platformTheme.name = "gtk3";
}; };
xdg.configFile.niri = import ./niri.nix {inherit config hostName launcher lockscreen;}; programs.walker = import ./programs/walker commonArgs;
services = import ./services {inherit pkgs lockscreen getExe perSystem;}; programs.waybar = import ./programs/waybar commonArgs;
services = import ./services commonArgs;
home.packages = with pkgs; home.packages = with pkgs;
[ [
# gui libadwaita apps # gui libadwaita apps
celluloid # mpv gui in libadwaita celluloid # mpv gui in libadwaita
gnome-text-editor
helvum # pipewire patchbay in rust helvum # pipewire patchbay in rust
junction # app chooser junction # app chooser
loupe # image viewer and editor in rust loupe # image viewer and editor in rust
mission-center # task manager in rust (partly)
nautilus # file manager nautilus # file manager
overskride # bluetooth gui in rust
papers # pdf reader in rust papers # pdf reader in rust
pika-backup # borg gui in rust
pwvucontrol # pipewire gui in rust pwvucontrol # pipewire gui in rust
sonusmix # pipewire routing tool in rust
wdisplays # wlroots display configurator wdisplays # wlroots display configurator
] ]
++ [ ++ [
@ -91,6 +95,10 @@ in {
]; ];
xdg = { xdg = {
configFile = {
niri = import ./niri.nix commonArgs;
"mimeapps.list".force = true;
};
mime.enable = true; mime.enable = true;
mimeApps = { mimeApps = {
enable = true; enable = true;
@ -119,12 +127,11 @@ in {
}; };
systemd.user = { systemd.user = {
settings.Manager.DefaultEnvironment = { settings.Manager.DefaultEnvironment = {
QT_QPA_PLATFORM = "wayland";
DISPLAY = ":123"; DISPLAY = ":123";
}; };
targets.tray.Unit.Description = "Home Manager System Tray"; # workaround for udiskie targets.tray.Unit.Description = "Home Manager System Tray"; # workaround for udiskie
services = let services = let
mkGraphicalService = config: graphicalService // config; mkGraphicalService = config: lib.attrsets.recursiveUpdate graphicalService config;
graphicalService = { graphicalService = {
Install.WantedBy = ["niri.service"]; Install.WantedBy = ["niri.service"];
Unit = { Unit = {
@ -138,38 +145,50 @@ in {
RestartSec = 1; RestartSec = 1;
}; };
}; };
in { in
udiskie = mkGraphicalService {}; lib.mkMerge [
waybar = mkGraphicalService {}; {
copyq = mkGraphicalService {Service.Environment = mkForce "QT_QPA_PLATFORM=wayland";};
network-manager-applet = mkGraphicalService {}; network-manager-applet = mkGraphicalService {};
copyq = mkGraphicalService { udiskie = mkGraphicalService {};
Service = walker = mkGraphicalService {};
graphicalService.Service waybar = mkGraphicalService {};
wpaperd =
mkGraphicalService {}
// { // {
Environment = mkForce "QT_QPA_PLATFORM=wayland"; Service.TimeoutStopSec = mkForce "1";
}; Service.Restart = mkForce "always";
}; };
xwayland-satellite = mkGraphicalService { xwayland-satellite = mkGraphicalService {
Service = Service = {
graphicalService.Service
// {
Type = "simple"; Type = "simple";
ExecStart = getExe pkgs.xwayland-satellite + " :123"; ExecStart = getExe pkgs.xwayland-satellite + " :123";
}; };
}; };
wpaperd = mkGraphicalService { # gnome-polkit-agent = mkGraphicalService {
Service = # Service = {
mkDefault graphicalService.Service; # Type = "simple";
}; # ExecStart = pkgs.polkit_gnome + "/libexec/polkit-gnome-authentication-agent-1";
gnome-polkit-agent = mkGraphicalService { # };
Service = # };
graphicalService.Service }
// { (lib.mkIf (hostName == "morphius") {
lisgd = mkGraphicalService {
Service = {
# Group = "input";
Type = "simple"; Type = "simple";
ExecStart = pkgs.polkit_gnome + "/libexec/polkit-gnome-authentication-agent-1"; ExecStart =
}; "${pkgs.lisgd}/bin/lisgd"
+ " -d /dev/input/by-path/pci-0000:00:15.1-platform-i2c_designware.1-event"
+ " -g \"1,DU,TL,*,P,niri msg action toggle-overview\""
+ " -g \"3,UD,T,*,P,niri msg action focus-workspace-up\""
+ " -g \"3,DU,B,*,P,niri msg action focus-workspace-down\""
+ " -g \"3,LR,L,*,P,niri msg action focus-column-left\""
+ " -g \"3,RL,R,*,P,niri msg action focus-column-right\"";
}; };
}; };
})
];
}; };
}; };
} }

View File

@ -1,12 +1,14 @@
{ {
config, config,
hostName, osConfig,
launcher, launcher,
lockscreen, lockscreen,
... ...
}: let }: let
inherit (config.lib.stylix) colors; inherit (config.lib.stylix) colors;
inherit (config.stylix) cursor; inherit (config.stylix) cursor;
inherit (osConfig.networking) hostName;
keyboard = keyboard =
if hostName == "eldrid" if hostName == "eldrid"
then "chromeos" then "chromeos"
@ -91,74 +93,40 @@ in {
in '' in ''
environment { environment {
DISPLAY ":123" DISPLAY ":123"
QT_QPA_PLATFORMTHEME "gtk3" CLUTTER_BACKEND "wayland"
GDK_BACKEND "wayland"
MOZ_ENABLE_WAYLAND "1" MOZ_ENABLE_WAYLAND "1"
MOZ_WEBRENDER "1" MOZ_WEBRENDER "1"
GDK_BACKEND "wayland"
QT_QPA_PLATFORM "wayland" QT_QPA_PLATFORM "wayland"
XDG_SESSION_TYPE "wayland"
CLUTTER_BACKEND "wayland"
SDL_VIDEODRIVER "wayland" SDL_VIDEODRIVER "wayland"
XDG_SESSION_TYPE "wayland"
} }
input { input {
keyboard { keyboard {
xkb { xkb {
layout "us,ua" layout "us,ua"
${ variant "colemak_dh_ortho,"
if (hostName == "dunamis" || hostName == "legion")
then "// variant \"colemak_dh_ortho,\""
else "variant \"colemak_dh_ortho,\""
}
} }
repeat-delay 200 repeat-delay 200
repeat-rate 50 repeat-rate 50
track-layout "global" track-layout "window"
} }
touchpad { touchpad {
// off
tap tap
// dwt
// dwtp
natural-scroll natural-scroll
accel-speed 0.2 accel-speed 0.2
accel-profile "flat" accel-profile "flat"
// scroll-method "two-finger"
// disabled-on-external-mouse
} }
mouse { mouse {
// off
// natural-scroll
accel-speed 0.0 accel-speed 0.0
accel-profile "flat" accel-profile "flat"
// scroll-method "no-scroll" }
touch {
map-to-output "eDP-1"
} }
warp-mouse-to-focus warp-mouse-to-focus
// focus-follows-mouse workspace-auto-back-and-forth
}
output "eDP-1" {
// off
scale 1.2
transform "normal"
// position x=1920 y=0
}
output "Samsung Electric Company S24R65x H4TMA03291" {
position x=0 y=0
variable-refresh-rate
}
output "Philips Consumer Electronics Company 27M2N5500 UK02418033254" {
mode "2560x1440@${
if hostName == "legion"
then "144.001"
else "180.000"
}"
variable-refresh-rate
position x=0 y=0
scale 1.33
}
output "PNP(AOC) 27V2G5 0x0000026C" {
position x=1920 y=0
mode "1920x1080@74.973"
variable-refresh-rate
} }
cursor { cursor {
@ -166,44 +134,62 @@ in {
xcursor-size ${toString cursor.size} 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 { layout {
gaps 6 gaps 3
// background-color "#${colors.base02}"
background-color "transparent"
center-focused-column "never" // "on-overflow" center-focused-column "never" // "on-overflow"
default-column-width { proportion 1.0; }
preset-column-widths { preset-column-widths {
proportion 0.33333 proportion 0.33333
proportion 0.66667 proportion 0.66667
} }
// default-column-width { proportion 0.9; } struts {
default-column-width { proportion 0.5; } left 36
right 36
}
tab-indicator { tab-indicator {
active-color "#${colors.base04}" active-color "#${colors.base04}"
inactive-color "#${colors.base03}" inactive-color "#${colors.base03}"
corner-radius 4 corner-radius 6
gap 6 gap 3
gaps-between-tabs 3 gaps-between-tabs 3
length total-proportion=0.3 // length total-proportion=0.3
place-within-column place-within-column
position "left" position "left"
width 6 width 6
} }
focus-ring { focus-ring {
// off width 1
width 3 active-color "#${colors.base0D}"
active-gradient from="#${colors.base0D}" to="#${colors.base0F}" angle=40 relative-to="workspace-view"
inactive-color "#${colors.base03}" inactive-color "#${colors.base03}"
urgent-color "#${colors.base08}"
} }
struts { border {
left 33 off
right 33 width 1
active-color "#${colors.base0D}"
inactive-color "#${colors.base03}"
urgent-color "#${colors.base08}"
} }
} }
prefer-no-csd
hotkey-overlay {
skip-at-startup
}
window-rule { window-rule {
geometry-corner-radius 12 geometry-corner-radius 12
clip-to-geometry true clip-to-geometry true
@ -220,17 +206,22 @@ in {
active-color "#${colors.base0F}" active-color "#${colors.base0F}"
inactive-color "#${colors.base03}" inactive-color "#${colors.base03}"
} }
shadow {
on
color "#${colors.base0F}"
inactive-color "#${colors.base03}"
}
} }
screenshot-path "${xdgPics}/screenshots/screenshot-%Y-%m-%d-%H-%M-%S.png" layer-rule {
match namespace="^wpaperd.*$"
place-within-backdrop true
}
overview {
workspace-shadow {
off
}
}
layer-rule {
match namespace="waybar"
match at-startup=true
animations { opacity 0.99 // fixes the black fill
slowdown 0.8
} }
window-rule { window-rule {
@ -245,6 +236,7 @@ in {
} }
window-rule { window-rule {
match app-id="re.sonny.Junction" match app-id="re.sonny.Junction"
match app-id="com.github.hluk.copyq"
open-floating true open-floating true
open-focused true open-focused true
} }
@ -258,6 +250,7 @@ in {
match app-id=r#"^org\.keepassxc\.KeePassXC$"# match app-id=r#"^org\.keepassxc\.KeePassXC$"#
match app-id=r#"^org\.gnome\.World\.Secrets$"# match app-id=r#"^org\.gnome\.World\.Secrets$"#
match app-id=r#"^Bitwarden$"# match app-id=r#"^Bitwarden$"#
match app-id="io.github.kukuruzka165.materialgram"
match app-id="org.telegram.desktop" match app-id="org.telegram.desktop"
match app-id="org.signal.Signal" match app-id="org.signal.Signal"
match app-id="WebCord" match app-id="WebCord"
@ -265,6 +258,7 @@ in {
block-out-from "screencast" block-out-from "screencast"
} }
binds { binds {
Mod+Shift+Slash { show-hotkey-overlay; } Mod+Shift+Slash { show-hotkey-overlay; }
@ -276,6 +270,7 @@ in {
Mod+Shift+T { set-column-width "67%"; } Mod+Shift+T { set-column-width "67%"; }
Mod+V { toggle-column-tabbed-display; } Mod+V { toggle-column-tabbed-display; }
Mod+G { switch-focus-between-floating-and-tiling; } 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+Comma { consume-or-expel-window-left; }
Mod+Ctrl+Period { consume-or-expel-window-right; } Mod+Ctrl+Period { consume-or-expel-window-right; }
@ -284,6 +279,8 @@ in {
Mod+Ctrl+M { fullscreen-window; } Mod+Ctrl+M { fullscreen-window; }
Mod+Ctrl+G { toggle-window-floating; } Mod+Ctrl+G { toggle-window-floating; }
Mod+Ctrl+Shift+M { toggle-windowed-fullscreen; }
Mod+Minus { set-column-width "-10%"; } Mod+Minus { set-column-width "-10%"; }
Mod+Equal { set-column-width "+10%"; } Mod+Equal { set-column-width "+10%"; }
Mod+Comma { set-column-width "-10%"; } Mod+Comma { set-column-width "-10%"; }
@ -291,12 +288,15 @@ in {
Mod+Shift+Comma { set-window-height "-10%"; } Mod+Shift+Comma { set-window-height "-10%"; }
Mod+Shift+Period { set-window-height "+10%"; } Mod+Shift+Period { set-window-height "+10%"; }
Mod+Escape { switch-layout "next"; } Mod+Space { switch-layout "next"; }
Mod+Ctrl+Space repeat=false { toggle-overview; }
Mod+Return repeat=false { spawn "sh" "-c" "$TERMINAL"; } Mod+Return repeat=false { spawn "sh" "-c" "$TERMINAL"; }
Mod+Space repeat=false { spawn "${launcher}"; } Mod+BackSpace repeat=false { spawn "${launcher}"; }
Mod+A repeat=false { spawn "${launcher}"; }
Mod+Ctrl+L repeat=false { spawn "${lockscreen}"; } Mod+Ctrl+L repeat=false { spawn "${lockscreen}"; }
Mod+Ctrl+V repeat=false { spawn "copyq" "toggle"; } Mod+Ctrl+V repeat=false { spawn "copyq" "menu"; }
Mod+Shift+W repeat=false { spawn "walker" "-m" "windows"; } Mod+Shift+W repeat=false { spawn "walker" "-m" "windows"; }

View File

@ -1,20 +0,0 @@
{
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
];
# 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;};
}

View File

@ -1,6 +1,6 @@
{ {
config, config,
mkDefault, lib,
}: { }: {
enable = true; enable = true;
settings = { settings = {
@ -15,7 +15,7 @@
match-mode = "fuzzy"; match-mode = "fuzzy";
icon-theme = config.dconf.settings."org/gnome/desktop/interface".icon-theme; icon-theme = config.dconf.settings."org/gnome/desktop/interface".icon-theme;
}; };
border = mkDefault { border = lib.mkDefault {
width = 3; width = 3;
radius = 12; radius = 12;
}; };

View File

@ -146,32 +146,30 @@
h_align = "center"; h_align = "center";
v_align = "center"; v_align = "center";
box = { box = {
width = 450;
h_align = "center"; h_align = "center";
v_align = "center"; v_align = "center";
# spacing = 12;
orientation = "vertical"; orientation = "vertical";
search = { search = {
margins = {
start = 8;
top = 8;
end = 8;
bottom = 0;
};
h_align = "top"; h_align = "top";
margins = {
start = 3;
top = 3;
end = 3;
bottom = 3;
};
}; };
scroll = { scroll = {
overlay_scrolling = true; overlay_scrolling = true;
list = { list = {
margins = { margins = {
bottom = 8; bottom = 3;
top = 4; top = 0;
start = 8; start = 3;
end = 8; end = 3;
}; };
item = { item = {
icon.theme = "${config.gtk.iconTheme.name}"; icon.theme = "${config.gtk.iconTheme.name}";
spacing = 4; spacing = 3;
activation_label = { activation_label = {
x_align = 0.5; x_align = 0.5;
y_align = 0.5; y_align = 0.5;
@ -230,20 +228,19 @@
} }
#window { #window {
background: none; background: @base00;
color: @base05; color: @base05;
border-radius: 12px;
border: 1px solid @base0D;
} }
#box { #box {
border-radius: 20px;
border-width: 4px;
border-color: @base0D;
background: @base00; background: @base00;
} }
#search { #search {
background: @base01; background: @base01;
border-radius: 12px 12px 6px 6px; border-radius: 9px;
padding: 8px; padding: 8px;
} }
@ -252,12 +249,12 @@
#typeahead { #typeahead {
background: none; background: none;
box-shadow: none; box-shadow: none;
border-radius: 12px; border-radius: 6px;
} }
#input > *:first-child, #input > *:first-child,
#typeahead > *:first-child { #typeahead > *:first-child {
margin-right: 12px; margin-right: 3px;
border-radius: 0px; border-radius: 0px;
} }
@ -270,8 +267,8 @@
} }
#list { #list {
padding: 8px; padding: 3px;
border-radius: 6px 6px 12px 12px; border-radius: 9px;
background: @base01; background: @base01;
} }
@ -282,7 +279,7 @@
child:selected, child:selected,
child:hover { child:hover {
box-shadow: none; box-shadow: none;
border-radius: 8px; border-radius: 6px;
background: @base02; background: @base02;
} }

View File

@ -1,84 +1,54 @@
{ {
colors,
config, config,
getExe, lib,
ifLaptop, osConfig,
pkgs, pkgs,
launcher,
... ...
}: { }: let
inherit (config.lib.stylix) colors;
ifLaptop = lib.mkIf (osConfig.networking.hostName != "dunamis");
in {
enable = true; enable = true;
systemd = { systemd = {
enable = true; enable = true;
target = "graphical-session.target"; target = "graphical-session.target";
}; };
settings = { settings.bottom = {
bar-0 = {
# layer = "top";
position = "bottom"; position = "bottom";
height = 24; height = 33;
spacing = 6; spacing = 0;
margin-left = 33 + 3; # margin-left = 36 + 3;
margin-right = 33 + 3; # margin-right = 36 + 3;
margin-bottom = 3; # margin-bottom = 3;
reload_style_on_change = true;
modules-left = [ modules-left = [
"niri/language" "custom/launcher"
"niri/workspaces"
"wlr/taskbar" "wlr/taskbar"
# "privacy"
]; ];
modules-center = ["clock"];
modules-right = [ modules-right = [
(ifLaptop "group/laptop") "niri/workspaces"
"wireplumber" "niri/language"
"tray"
"privacy"
(ifLaptop "power-profiles-daemon")
"idle_inhibitor"
"custom/notification"
]; ];
"niri/workspaces" = { "niri/workspaces" = {
format = "{index}"; format = "{index}";
format-icons = {
"1" = "";
"2" = "";
"3" = "";
"4" = "";
"5" = "";
"6" = "";
"7" = "";
"8" = "";
"9" = "";
"10" = "";
general = "󰘧";
web = "󰖟";
chat = "󰻞";
code = "󰅩";
uni = "󱆀";
games = "󰺶";
system = "󰢻";
media = "󱜐";
tray = "󱊖";
};
}; };
"niri/language" = { "niri/language" = {
format = "{}"; format = "{}";
format-en = "🇺🇸"; format-en = "🇺🇸";
format-uk = "🇺🇦"; format-uk = "🇺🇦";
}; };
"custom/separator" = {
format = "󰝠";
interval = "once";
tooltip = false;
};
"group/laptop" = { "group/laptop" = {
orientation = "inherit"; orientation = "inherit";
modules = [ modules = [
"battery"
"backlight" "backlight"
"battery"
"power-profiles-daemon"
]; ];
}; };
"backlight" = { backlight = {
format = "{icon} {percent}%"; format = "{percent}% {icon}";
format-icons = [ format-icons = [
"󰃚" "󰃚"
"󰃛" "󰃛"
@ -89,21 +59,22 @@
"󰃠" "󰃠"
]; ];
}; };
"idle_inhibitor" = { idle_inhibitor = {
format = "{icon}"; format = "{icon}";
format-icons = { format-icons = {
activated = "󰅶"; activated = "󰅶";
deactivated = "󰾪"; deactivated = "󰾪";
}; };
}; };
"tray" = { tray = {
icon-size = 20; icon-size = 16;
spacing = 6; spacing = 6;
}; };
"clock" = { clock = {
interval = 1; interval = 1;
format = "{:%H:%M:%S}"; format = "{:%R}";
tooltip-format = "{:%d.%m.%Y}"; tooltip = true;
tooltip-format = "{:%B %d, %A}";
}; };
battery = { battery = {
states = { states = {
@ -111,32 +82,36 @@
warning = 30; warning = 30;
critical = 15; critical = 15;
}; };
format = "{icon} {capacity}%"; format = "{capacity}% {icon}";
format-full = "󱟢 {capacity}%"; format-full = "{capacity}% 󱟢";
format-charging = "󰂄 {capacity}%"; format-charging = "{capacity}% 󰂄";
format-plugged = "󰚥 {capacity}%"; format-plugged = "{capacity}% 󰚥";
format-alt = "{icon} {time}"; format-alt = "{icon} {time}";
format-icons = ["󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"]; format-icons = ["󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"];
}; };
mpris = { memory = {
format = "{player_icon} {dynamic}"; format = "{used:0.1f}G ";
format-paused = "{status_icon} <i>{dynamic}</i>"; tooltip-format = ''
playing-len = 30; RAM: {used:0.1f}G/{total:0.1f}G ({percentage}%)
playing-paused = 30; Swap: {swapUsed:0.1f}G/{swapTotal:0.1f}G ({swapPercentage}%)'';
player-icons = {
default = "";
mpv = "🎵";
}; };
status-icons = {paused = "";}; network = {
format = "{bandwidthDownBits} 󰇚 | {bandwidthUpBits} 󰕒";
interval = 3;
tooltip = false;
}; };
"upower" = { cpu = {
format = "{usage}% 󰍛";
interval = 3;
};
upower = {
icon-size = 16; icon-size = 16;
format = "{percentage}"; format = "{percentage}";
hide-if-empty = true; hide-if-empty = true;
tooltip = true; tooltip = true;
tooltip-spacing = 20; tooltip-spacing = 20;
}; };
"power-profiles-daemon" = { power-profiles-daemon = {
format = "{icon}"; format = "{icon}";
tooltip-format = "Power profile: {profile}\nDriver: {driver}"; tooltip-format = "Power profile: {profile}\nDriver: {driver}";
tooltip = true; tooltip = true;
@ -147,14 +122,19 @@
power-saver = ""; power-saver = "";
}; };
}; };
"wireplumber" = { wireplumber = {
scroll-step = 3; scroll-step = 3;
format = "{icon} {volume}%"; format = "{volume}% {icon}";
format-muted = "󰖁"; format-muted = "󰖁";
format-icons = ["󰕿" "󰖀" "󰕾"]; format-icons = ["󰕿" "󰖀" "󰕾"];
on-click = getExe pkgs.pwvucontrol; on-click = lib.getExe pkgs.pwvucontrol;
on-click-right = "wpctl set-mute @DEFAULT_SINK@ toggle"; on-click-right = "wpctl set-mute @DEFAULT_SINK@ toggle";
}; };
"custom/launcher" = {
format = "";
on-click = launcher;
tooltip = false;
};
"custom/notification" = { "custom/notification" = {
tooltip = false; tooltip = false;
format = "{icon}"; format = "{icon}";
@ -172,7 +152,7 @@
escape = true; escape = true;
}; };
"privacy" = { "privacy" = {
icon-spacing = 2; icon-spacing = 0;
icon-size = 16; icon-size = 16;
transition-duration = 250; transition-duration = 250;
screenshare = { screenshare = {
@ -187,143 +167,371 @@
}; };
}; };
"wlr/taskbar" = { "wlr/taskbar" = {
format = "{icon}"; format = "{icon} {name}";
icon-size = 20; icon-size = 16;
icon-theme = "${config.dconf.settings."org/gnome/desktop/interface".icon-theme}"; icon-theme = "${config.dconf.settings."org/gnome/desktop/interface".icon-theme}";
tooltip-format = "{title}"; tooltip-format = "{title}";
on-click = "activate"; on-click = "activate";
}; };
}; };
settings.top = {
position = "top";
height = 33;
spacing = 0;
# margin-left = 36 + 3;
# margin-right = 36 + 3;
# margin-top = 3;
modules-left = [
"custom/notification"
"tray"
];
modules-center = ["clock"];
modules-right = [
"privacy"
"network"
"cpu"
"memory"
"wireplumber"
(ifLaptop "group/laptop")
# "tray"
"idle_inhibitor"
];
"niri/workspaces" = {
format = "{index}";
}; };
style = '' "niri/language" = {
@define-color base00 #${colors.base00}; format = "{}";
@define-color base01 #${colors.base01}; format-en = "🇺🇸";
@define-color base02 #${colors.base02}; format-uk = "🇺🇦";
@define-color base03 #${colors.base03}; };
@define-color base04 #${colors.base04}; "group/laptop" = {
@define-color base05 #${colors.base05}; orientation = "inherit";
@define-color base06 #${colors.base06}; modules = [
@define-color base07 #${colors.base07}; "backlight"
@define-color base08 #${colors.base08}; "battery"
@define-color base09 #${colors.base09}; "power-profiles-daemon"
@define-color base0A #${colors.base0A}; ];
@define-color base0B #${colors.base0B}; };
@define-color base0C #${colors.base0C}; backlight = {
@define-color base0D #${colors.base0D}; format = "{percent}% {icon}";
@define-color base0E #${colors.base0E}; format-icons = [
@define-color base0F #${colors.base0F}; "󰃚"
"󰃛"
"󰃜"
"󰃝"
"󰃞"
"󰃟"
"󰃠"
];
};
idle_inhibitor = {
format = "{icon}";
format-icons = {
activated = "󰅶";
deactivated = "󰾪";
};
};
tray = {
icon-size = 16;
spacing = 6;
};
clock = {
interval = 1;
format = "{:%R}";
tooltip = true;
tooltip-format = "{:%B %d, %A}";
};
battery = {
states = {
good = 95;
warning = 30;
critical = 15;
};
format = "{capacity}% {icon}";
format-full = "{capacity}% 󱟢";
format-charging = "{capacity}% 󰂄";
format-plugged = "{capacity}% 󰚥";
format-alt = "{icon} {time}";
format-icons = ["󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"];
};
memory = {
format = "{used:0.1f}G ";
tooltip-format = ''
RAM: {used:0.1f}G/{total:0.1f}G ({percentage}%)
Swap: {swapUsed:0.1f}G/{swapTotal:0.1f}G ({swapPercentage}%)'';
};
network = {
format = "{bandwidthDownBits} 󰇚 | {bandwidthUpBits} 󰕒";
interval = 3;
tooltip = false;
};
cpu = {
format = "{usage}% 󰍛";
interval = 3;
};
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 = "{volume}% {icon}";
format-muted = "󰖁";
format-icons = ["󰕿" "󰖀" "󰕾"];
on-click = lib.getExe pkgs.pwvucontrol;
on-click-right = "wpctl set-mute @DEFAULT_SINK@ toggle";
};
"custom/launcher" = {
format = "";
on-click = launcher;
tooltip = false;
};
"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 = 0;
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} {name}";
icon-size = 18;
icon-theme = "${config.dconf.settings."org/gnome/desktop/interface".icon-theme}";
tooltip-format = "{title}";
on-click = "activate";
};
};
# TODO: figure out magic waybar css styling (does it pick up `~/.config/gtk-3.0/gtk.css` ?)
style =
# css
''
@define-color base00 #${colors.base00}; @define-color base08 #${colors.base08};
@define-color base01 #${colors.base01}; @define-color base09 #${colors.base09};
@define-color base02 #${colors.base02}; @define-color base0A #${colors.base0A};
@define-color base03 #${colors.base03}; @define-color base0B #${colors.base0B};
@define-color base04 #${colors.base04}; @define-color base0C #${colors.base0C};
@define-color base05 #${colors.base05}; @define-color base0D #${colors.base0D};
@define-color base06 #${colors.base06}; @define-color base0E #${colors.base0E};
@define-color base07 #${colors.base07}; @define-color base0F #${colors.base0F};
* { * {
font-family: ${config.stylix.fonts.sansSerif.name}, FontAwesome; /* all: unset; */
font-family: Symbols Nerd Font, FontAwesome, ${config.stylix.fonts.sansSerif.name};
font-weight: 500; font-weight: 500;
font-size: 100%; font-size: 16px;
} }
window#waybar {
background-color: transparent; .modules-left, .modules-center, .modules-right, window#waybar {
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; background-color: @base00;
border-radius: 24px;
border: 3px solid @base0D;
color: @base05; color: @base05;
padding: 0 0.4em; border-radius: 12px;
}
window#waybar {
border-radius: 0;
}
/* for leftmost modules */
.modules-left, .modules-center, .modules-right {
padding-left: 3px;
background-color: @base00;
color: @base05;
}
window#bottom.modules-center {
background-color: transparent
} }
tooltip { tooltip {
background: @base01; background: @base01;
border: 1px solid @base0E; border: 1px solid @base0D;
border-radius: 16px;
padding: 2em;
} }
tooltip label { tooltip label {
color: @base05; color: @base05;
} }
button { button {
box-shadow: inset 0 -3px transparent; box-shadow: inset 0 -3px transparent;
border-radius: 16px; border-radius: 6px;
} }
button:hover { button:hover {
background: inherit; background: inherit;
box-shadow: inset 0 -3px transparent; box-shadow: inset 0 -3px transparent;
} }
#mode {
background-color: rgba(0, 0, 0, 0.2);
box-shadow: inset 0 -3px @base05;
}
#battery,
#backlight, #backlight,
/* #workspaces, #battery,
#taskbar,
#privacy, */
#taskbar button,
#language,
#clock, #clock,
#battery, #cpu,
#backlight, #custom-launcher,
#custom-notification,
#idle_inhibitor,
#language,
#memory,
#network,
#power-profiles-daemon,
#privacy,
#privacy-item,
#taskbar button,
#taskbar,
#tray button,
#tray,
#wireplumber, #wireplumber,
#workspaces button, #workspaces button,
#workspaces {
all: unset;
border-radius: 9px;
background-color: @base01;
margin: 3px 3px 3px 0;
padding: 0 0.42em;
min-width: 1em;
}
#backlight,
#battery,
#custom-launcher,
#custom-notification, #custom-notification,
#idle_inhibitor, #idle_inhibitor,
#power-profiles-daemon, #power-profiles-daemon,
#privacy-item, #wireplumber {
#custom-separator { padding: 0 0.5em;
}
#custom-notification,
#power-profiles-daemon {
min-width: 1em;
}
#privacy,
#taskbar,
#workspaces {
padding: 0;
}
#workspaces {
padding-left: 3px;
}
#privacy-item {
padding: 0 0.3em; padding: 0 0.3em;
} }
#taskbar button {
padding-left: 0;
}
#taskbar button,
#tray button,
#workspaces button {
border-radius: 6px;
min-width: 0.8em;
}
#battery.critical:not(.charging) {
background-color: @base09;
color: @base00;
}
#power-profiles-daemon.performance {
background-color: @base0D;
color: @base00;
}
#power-profiles-daemon.power-saver {
background-color: @base0A;
color: @base00;
}
#privacy-item.audio-in {
background-color: @base0E;
color: @base00;
margin: 3px;
}
#privacy-item.screenshare {
background-color: @base0C;
color: @base00;
margin: 3px 0 3px 3px;
}
#taskbar button,
#tray button { #tray button {
padding: 0 0.3em; padding: 0 0.4em;
margin: 0 0.2em; margin: 3px;
} }
#workspaces button.active {
color: @base0D; #workspaces button.active,
#taskbar button.active {
background-color: @base02;
} }
#workspaces button:hover,
#workspaces button.active:hover,
#taskbar button.active:hover,
#taskbar button:hover { #taskbar button:hover {
box-shadow: transparent; background-color: @base0D;
color: @base00;
} }
#taskbar.empty,
window#empty { #taskbar.empty {
background-color: transparent; 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 { #tray > .needs-attention {
-gtk-icon-effect: highlight; -gtk-icon-effect: highlight;
background-color: @base08; background-color: @base08;
} }
#privacy-item.screenshare {
color: @base0C; #tray > .passive {
-gtk-icon-effect: dim;
} }
#privacy-item.audio-in {
color: @base0E; /* #workspaces button.active {
color: @base00;
background-color: @base0D;
} */
label:focus {
background-color: #000000;
} }
''; '';
} }

View File

@ -1,24 +1,26 @@
{ {
getExe, lib,
perSystem, osConfig,
pkgs, pkgs,
lockscreen, lockscreen,
... ...
}: { }:
swaync = import ./swaync; lib.attrsets.recursiveUpdate {
blueman-applet.enable = osConfig.services.blueman.enable;
copyq.enable = true;
gammastep.enable = true;
gnome-keyring.enable = true;
hypridle.enable = true;
kanshi = import ./kanshi;
network-manager-applet.enable = true; network-manager-applet.enable = true;
playerctld.enable = true; playerctld.enable = true;
swaync = import ./swaync;
swayosd.enable = true;
udiskie.enable = true;
wpaperd.enable = true; wpaperd.enable = true;
copyq = { }
enable = true; {
package = perSystem.nixpkgs-stable.copyq;
};
gnome-keyring = {
enable = true;
components = ["secrets"];
};
gammastep = { gammastep = {
enable = true;
provider = "manual"; provider = "manual";
latitude = 49.6; latitude = 49.6;
longitude = 36.1; longitude = 36.1;
@ -28,19 +30,8 @@
night = 3000; night = 3000;
}; };
}; };
swayosd = { gnome-keyring.components = ["secrets"];
enable = true; hypridle.settings = {
topMargin = 0.8;
};
udiskie = {
enable = true;
automount = false;
notify = true;
tray = "auto";
};
hypridle = {
enable = true;
settings = {
general = { general = {
before_sleep_cmd = "loginctl lock-session"; before_sleep_cmd = "loginctl lock-session";
lock_cmd = "pidof ${lockscreen} || ${lockscreen}"; lock_cmd = "pidof ${lockscreen} || ${lockscreen}";
@ -53,9 +44,14 @@
} }
{ {
timeout = 601; timeout = 601;
on-timeout = getExe pkgs.niri + " msg action power-off-monitors"; on-timeout = lib.getExe pkgs.niri + " msg action power-off-monitors";
} }
]; ];
}; };
swayosd.topMargin = 0.8;
udiskie = {
automount = false;
notify = true;
tray = "auto";
}; };
} }

View File

@ -0,0 +1,113 @@
{
enable = true;
settings = let
main = "Philips Consumer Electronics Company 27M2N5500 UK02418033254";
second = "Samsung Electric Company S24R65x H4TMA03291";
builtin = {
eldrid = "Chimei Innolux Corporation 0x1406 Unknown";
sarien = "LG Display 0x068B Unknown";
# morphius =;
};
in [
{
output = {
criteria = main;
position = "0,0";
scale = 4.0 / 3.0;
adaptiveSync = true;
};
}
{
output = {
criteria = second;
mode = "1920x1080@74.973";
adaptiveSync = true;
};
}
{
output = {
criteria = builtin.eldrid;
position = "0,0";
scale = 1.2;
# adaptiveSync = true;
};
}
{
output = {
criteria = builtin.sarien;
position = "0,0";
scale = 1.25;
# adaptiveSync = true;
};
}
{
profile = {
name = "dunamis";
outputs = [
{criteria = main;}
{
criteria = second;
position = "1920,180";
scale = 1.2;
# transform = "90";
adaptiveSync = true;
}
];
};
}
{
profile = {
name = "eldrid-docked";
outputs = [
{
criteria = main;
position = "0,0";
scale = 4.0 / 3.0;
}
{
criteria = builtin.eldrid;
position = "1920,0";
}
];
};
}
{
profile = {
name = "eldrid-undocked";
outputs = [
{
criteria = builtin.eldrid;
position = "0,0";
}
];
};
}
{
profile = {
name = "sarien-docked";
outputs = [
{
criteria = main;
position = "0,0";
scale = 4.0 / 3.0;
}
{
criteria = builtin.sarien;
position = "1920,0";
}
];
};
}
{
profile = {
name = "sarien-undocked";
outputs = [
{
criteria = builtin.sarien;
position = "0,0";
}
];
};
}
];
}

View File

@ -17,17 +17,17 @@
control-center-layer = "overlay"; control-center-layer = "overlay";
# Notification settings # Notification settings
positionX = "right"; positionX = "left";
positionY = "top"; positionY = "top";
notification-2fa-action = true; notification-2fa-action = true;
notification-inline-replies = false; notification-inline-replies = false;
notification-icon-size = 32; notification-icon-size = 48;
notification-body-image-height = 100; notification-body-image-height = 100;
notification-body-image-width = 200; notification-body-image-width = 200;
notification-window-width = 400; notification-window-width = 400;
# Control center settings # Control center settings
control-center-positionX = "right"; control-center-positionX = "left";
control-center-positionY = "top"; control-center-positionY = "top";
control-center-width = 500; control-center-width = 500;
control-center-exclusive-zone = true; control-center-exclusive-zone = true;
@ -59,8 +59,12 @@
}; };
}; };
}; };
# TODO: disable stylix, redo everything
style = '' style = ''
/*** Global ***/ * {
all: unset;
}
progress, progress,
progressbar, progressbar,
trough { trough {
@ -70,20 +74,19 @@
.app-icon, .app-icon,
.image { .image {
-gtk-icon-effect: none; -gtk-icon-effect: none;
padding-right: 0.5rem;
} }
.notification-action { .notification-action {
border-radius: 12px; border-radius: 9px;
margin: 0.5rem; margin: 3px;
} }
.close-button { .close-button {
margin: 24px; margin: 12px;
padding: 0.2rem; border-radius: 6px;
border-radius: 16px;
} }
/*** Notifications ***/
.notification-group.collapsed .notification-group.collapsed
.notification-row:not(:last-child) .notification-row:not(:last-child)
.notification-action, .notification-action,
@ -103,21 +106,21 @@
.notification.normal, .notification.normal,
.notification.critical, .notification.critical,
.control-center { .control-center {
margin: 16px; border-radius: 12px;
border-radius: 7px; margin: 6px;
} }
.floating-notifications, .floating-notifications,
.notification-content { .notification-content {
border-radius: 7px; padding: 0.5rem;
margin: 3px;
border-radius: 9px;
} }
.control-center-list { .control-center-list {
background: transparent; background: transparent;
} }
/*** Widgets ***/
/* Title widget */
.widget-title { .widget-title {
margin: 0.5rem; margin: 0.5rem;
} }
@ -127,11 +130,10 @@
} }
.widget-title > button { .widget-title > button {
border-radius: 16px; border-radius: 9px;
padding: 0.5rem; padding: 0.5rem;
} }
/* DND Widget */
.widget-dnd { .widget-dnd {
margin: 0.5rem; margin: 0.5rem;
} }
@ -141,23 +143,23 @@
} }
.widget-dnd > switch { .widget-dnd > switch {
border-radius: 16px; border-radius: 9px;
} }
.widget-dnd > switch slider { .widget-dnd > switch slider {
border-radius: 16px; margin: 3px;
padding: 0.25rem; border-radius: 6px;
padding: 0px;
} }
/* Mpris widget */
.widget-mpris .widget-mpris-player { .widget-mpris .widget-mpris-player {
border-radius: 16px; border-radius: 12px;
margin: 0.5rem; margin: 0.5rem;
padding: 0.5rem; padding: 0.5rem;
} }
.widget-mpris .widget-mpris-player .widget-mpris-album-art { .widget-mpris .widget-mpris-player .widget-mpris-album-art {
border-radius: 16px; border-radius: 9px;
} }
.widget-mpris .widget-mpris-player .widget-mpris-title { .widget-mpris .widget-mpris-player .widget-mpris-title {
@ -169,9 +171,8 @@
} }
.widget-mpris .widget-mpris-player > box > button { .widget-mpris .widget-mpris-player > box > button {
border: 1px solid transparent; border-radius: 6px;
border-radius: 16px; padding: 3px;
padding: 0.25rem;
} }
''; '';
} }

View File

@ -62,19 +62,25 @@ in {
}; };
languages = { languages = {
language-server = { language-server = {
clangd.command = "${pkgs.clang-tools}/bin/clangd"; # markdown-oxide.command = getExe pkgs.markdown-oxide;
markdown-oxide.command = getExe pkgs.markdown-oxide; # nixd.command = getExe pkgs.nixd;
# nil.command = getExe pkgs.nil; # pyright = {
nixd.command = getExe pkgs.nixd; # command = getExe pkgs.pyright;
# pyright.command = getExe pkgs.pyright; # args = ["-"];
# pyright.args = ["-"]; # };
ruff.command = getExe pkgs.ruff;
ruff.args = ["server"];
# rust-analyzer.command = getExe pkgs.rust-analyzer; # rust-analyzer.command = getExe pkgs.rust-analyzer;
# texlab.command = getExe pkgs.texlab; # texlab.command = getExe pkgs.texlab;
tinymist.command = getExe pkgs.tinymist; bash-language-server = {
fsac.command = getExe pkgs.fsautocomplete; command = getExe pkgs.bash-language-server;
fsac.config = { environment = {
"SHELLCHECK_PATH" = getExe pkgs.shellcheck;
"SHFMT_PATH" = getExe pkgs.shfmt;
};
};
clangd.command = "${pkgs.clang-tools}/bin/clangd";
fsac = {
command = getExe pkgs.fsautocomplete;
config = {
# editor.formatOnSave = true; # editor.formatOnSave = true;
AutomaticWorkspaceInit = true; AutomaticWorkspaceInit = true;
FSharp.ExternalAutocomplete = true; FSharp.ExternalAutocomplete = true;
@ -83,19 +89,30 @@ in {
FSharp.formatting.fantomas.enabled = true; FSharp.formatting.fantomas.enabled = true;
}; };
}; };
nil = {
command = getExe pkgs.nil;
config = {
formatting.command = [(getExe pkgs.alejandra)];
};
};
ruff = {
command = getExe pkgs.ruff;
args = ["server"];
};
tinymist.command = getExe pkgs.tinymist;
vscode-json-language-server.command = getExe pkgs.nodePackages.vscode-json-languageserver;
yaml-language-server.command = getExe pkgs.yaml-language-server;
zk = {
command = getExe pkgs.zk;
args = ["lsp"];
};
};
language = [ language = [
{ {
name = "nix"; name = "nix";
auto-format = true; auto-format = true;
formatter.command = getExe pkgs.alejandra; language-servers = ["nil"];
language-servers = ["nixd"];
} }
# {
# name = "latex";
# auto-format = true;
# formatter.command = "${pkgs.texlivePackages.latexindent}/bin/latexindent";
# language-servers = ["texlab"];
# }
{ {
name = "typst"; name = "typst";
auto-format = true; auto-format = true;
@ -105,23 +122,21 @@ in {
{ {
name = "markdown"; name = "markdown";
# auto-format = true; # auto-format = true;
# formatter.command = "${pkgs.comrak}/bin/comrak"; language-servers = ["zk" "markdown-oxide"];
language-servers = ["markdown-oxide"];
} }
{ {
name = "c"; name = "c";
auto-format = true; auto-format = true;
formatter.command = "${pkgs.clang-tools}/bin/clang-format"; # formatter.command = "${pkgs.clang-tools}/bin/clang-format";
} }
{ {
name = "cpp"; name = "cpp";
auto-format = true; auto-format = true;
formatter.command = "${pkgs.clang-tools}/bin/clang-format"; # formatter.command = "${pkgs.clang-tools}/bin/clang-format";
} }
{ {
name = "fsharp"; name = "fsharp";
auto-format = true; auto-format = true;
# formatter.command = getExe pkgs.fantomas;
language-servers = ["fsac"]; language-servers = ["fsac"];
scope = "source.fs"; scope = "source.fs";
roots = ["fsproj" "sln" ".git"]; roots = ["fsproj" "sln" ".git"];
@ -132,6 +147,25 @@ in {
# language-servers = ["rust-analyzer"]; # language-servers = ["rust-analyzer"];
# formatter.command = getExe pkgs.rustfmt; # formatter.command = getExe pkgs.rustfmt;
# } # }
{
name = "json";
auto-format = true;
formatter.command = getExe pkgs.jq;
language-servers = ["vscode-json-language-server"];
}
{
name = "yaml";
auto-format = true;
formatter.command = getExe pkgs.yamlfmt;
formatter.args = ["-"];
language-servers = ["yaml-language-server"];
}
{
name = "bash";
auto-format = true;
# formatter.command = getExe pkgs.shfmt;
# formatter.args = ["-"];
}
{ {
name = "python"; name = "python";
auto-format = true; auto-format = true;

View File

@ -15,44 +15,49 @@ in {
programs.zed-editor = { programs.zed-editor = {
enable = true; enable = true;
extensions = [ extensions = [
"nix" "bash"
"latex" "fsharp"
"typst"
"justfile" "justfile"
"nix"
"typst"
]; ];
userSettings = { userSettings = {
vim_mode = true; vim_mode = true;
ui_font_size = mkForce 16; ui_font_size = mkForce 16;
buffer_font_size = mkForce 16; buffer_font_size = mkForce 16;
features = {inline_completion_provider = "none";}; # features = {inline_completion_provider = "none";};
auto_update = false; auto_update = false;
languages = { languages = {
"FSharp" = {
language-servers = [
"fsautocomplete"
];
};
"Nix" = { "Nix" = {
language-servers = [ language-servers = [
"!nil" "nil"
"nixd"
]; ];
formatter = { # formatter = {
external.command = getExe pkgs.alejandra; # external.command = getExe pkgs.alejandra;
}; # };
};
"Rust" = {
formatter = {
external = {
command = getExe pkgs.rustfmt;
arguments = ["--edition" "2021"];
};
};
}; };
# "Rust" = {
# formatter = {
# external = {
# command = getExe pkgs.rustfmt;
# arguments = ["--edition" "2021"];
# };
# };
# };
"typst" = { "typst" = {
language-servers = ["tinymist"]; language-servers = ["tinymist"];
format_on_save = "on"; format_on_save = "on";
formatter = { # formatter = {
external = { # external = {
command = getExe pkgs.typstyle; # command = getExe pkgs.typstyle;
arguments = ["-i" "{buffer_path}"]; # arguments = ["-i" "{buffer_path}"];
}; # };
}; # };
}; };
"Python" = { "Python" = {
format_on_save = "on"; format_on_save = "on";
@ -67,50 +72,81 @@ in {
}; };
}; };
lsp = { lsp = {
bash-language-server = {
binary = {
path = getExe pkgs.bash-language-server;
env = {
"SHELLCHECK_PATH" = getExe pkgs.shellcheck;
"SHFMT_PATH" = getExe pkgs.shfmt;
};
};
};
fsautocomplete = {
binary = {
path = getExe pkgs.fsautocomplete;
};
settings = {
AutomaticWorkspaceInit = true;
FSharp.ExternalAutocomplete = true;
FSharp.linting.fsharplint.enabled = true;
FSharp.linting.fsharplint.configFile = "fsharplint.json";
FSharp.formatting.fantomas.enabled = true;
};
};
clangd = { clangd = {
binary = { binary = {
arguments = []; arguments = [];
path = "${pkgs.clang-tools}/bin/clangd"; path = "${pkgs.clang-tools}/bin/clangd";
}; };
}; };
rust-analyzer = { # rust-analyzer = {
binary = { # binary = {
arguments = []; # arguments = [];
path = getExe pkgs.rust-analyzer; # path = getExe pkgs.rust-analyzer;
}; # };
}; # };
ruff = { ruff = {
binary = { binary = {
arguments = []; arguments = [];
path = getExe pkgs.ruff; path = getExe pkgs.ruff;
}; };
}; };
nixd = { # nixd = {
binary = { # binary = {
arguments = []; # arguments = [];
path = getExe pkgs.nixd; # path = getExe pkgs.nixd;
}; # };
initialization_options.formatting.command = [(getExe pkgs.alejandra)]; # initialization_options.formatting.command = [(getExe pkgs.alejandra)];
}; # };
nil = { nil = {
binary = { binary = {
arguments = []; arguments = [];
path = getExe pkgs.nil; path = getExe pkgs.nil;
}; };
initialization_options.formatting.command = [(getExe pkgs.alejandra)]; settings.formatting.command = [(getExe pkgs.alejandra)];
};
texlab = {
binary = {
arguments = [];
path = getExe pkgs.texlab;
};
}; };
# texlab = {
# binary = {
# arguments = [];
# path = getExe pkgs.texlab;
# };
# };
tinymist = { tinymist = {
binary = { binary = {
arguments = []; arguments = [];
path = getExe pkgs.tinymist; path = getExe pkgs.tinymist;
}; };
}; };
vscode-json-language-server = {
binary = {
path = getExe pkgs.nodePackages.vscode-json-languageserver;
};
};
yaml-language-server = {
binary = {
path = getExe pkgs.yaml-language-server;
};
};
}; };
telemetry = { telemetry = {
diagnostics = false; diagnostics = false;

View File

@ -23,7 +23,7 @@ in {
"dunamis".id = "72VRZFX-65SZUKP-2XL2WLG-75MMKLG-PQLDEZN-G5OI5U7-RLF4OHS-LNCXEQX"; "dunamis".id = "72VRZFX-65SZUKP-2XL2WLG-75MMKLG-PQLDEZN-G5OI5U7-RLF4OHS-LNCXEQX";
"eldrid".id = "VTSBNN6-W6UUT66-NDEQBNJ-DJJM5YE-PWU63IW-Y6CTJNN-Q3RHEQB-POBLCQH"; "eldrid".id = "VTSBNN6-W6UUT66-NDEQBNJ-DJJM5YE-PWU63IW-Y6CTJNN-Q3RHEQB-POBLCQH";
"legion".id = "FDS73OW-BHRWDBO-AOFQX4D-FSCABP2-HN4575T-CSIO6TX-5CPJQLQ-L25TYQJ"; "legion".id = "FDS73OW-BHRWDBO-AOFQX4D-FSCABP2-HN4575T-CSIO6TX-5CPJQLQ-L25TYQJ";
"phone".id = "XBZLA7Y-YOBZHLO-MSTRAGS-6SN5MEZ-FDKR76F-DIX2BKE-FMDNUYR-TMD6UAQ"; "morphius".id = "VATWBD7-ZTMGGCT-XH6YDYD-5OMPILK-U43UYYW-OGC4BLB-IQGH35R-4X5HZQH";
"sarien".id = "LUVZGFV-OV6FV5E-SDROWHZ-4BR5PFB-VP5Y326-AFEP6NL-ORUMJQQ-SSYCQQO"; "sarien".id = "LUVZGFV-OV6FV5E-SDROWHZ-4BR5PFB-VP5Y326-AFEP6NL-ORUMJQQ-SSYCQQO";
}; };
folders = { folders = {
@ -33,7 +33,7 @@ in {
"dunamis" "dunamis"
"eldrid" "eldrid"
"legion" "legion"
"phone" "morphius"
"sarien" "sarien"
]; ];
}; };
@ -42,6 +42,7 @@ in {
devices = [ devices = [
"dunamis" "dunamis"
"eldrid" "eldrid"
"morphius"
"legion" "legion"
"sarien" "sarien"
]; ];

View File

@ -1,6 +1,7 @@
{ {
config, config,
lib, lib,
perSystem,
... ...
}: }:
with lib; let with lib; let
@ -12,6 +13,7 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
programs.ghostty = { programs.ghostty = {
enable = true; enable = true;
package = perSystem.ghostty.ghostty;
settings = { settings = {
gtk-single-instance = true; gtk-single-instance = true;
window-decoration = "client"; window-decoration = "client";

View File

@ -1,99 +0,0 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib) mkIf mkDefault;
in {
security = {
sudo.enable = false;
# doas.enable = true;
sudo-rs = {
enable = true;
execWheelOnly = true;
};
polkit.enable = true;
polkit.extraConfig = ''
polkit.addRule(function(action, subject) {
if (
subject.isInGroup("users")
&& (
action.id == "org.freedesktop.login1.reboot" ||
action.id == "org.freedesktop.login1.reboot-multiple-sessions" ||
action.id == "org.freedesktop.login1.power-off" ||
action.id == "org.freedesktop.login1.power-off-multiple-sessions"
)
)
{
return polkit.Result.YES;
}
});
'';
apparmor.enable = mkDefault true;
};
environment.systemPackages = with pkgs; [
(mkIf config.security.doas.enable doas-sudo-shim) # if doas install doas sudo shim
];
services.dbus = {
apparmor = "enabled";
implementation = "broker";
};
services.ntpd-rs = {
enable = true;
#settings = {
# server = {
# require-nts = true;
# };
#};
};
boot.kernelParams = [
"amd_iommu=force_isolation"
"debugfs=off"
"efi=disable_early_pci_dma"
"gather_data_sampling=force"
"intel_iommu=on"
"iommu.passthrough=0"
"iommu.strict=1"
"iommu=force"
"page_alloc.shuffle=1"
"vsyscall=none"
# "ia32_emulation=0"
# "lockdown=confidentiality"
# "module.sig_enforce=1"
];
boot.blacklistedKernelModules = [
# Obscure network protocols
"ax25"
"netrom"
"rose"
# Old or rare or insufficiently audited filesystems
"adfs"
"affs"
"bfs"
"befs"
"cramfs"
"efs"
"erofs"
"exofs"
"freevxfs"
"f2fs"
"hfs"
"hpfs"
"jfs"
"minix"
"nilfs2"
"ntfs"
"omfs"
"qnx4"
"qnx6"
"sysv"
"ufs"
];
nix.settings.allowed-users = mkDefault ["@users"];
}

View File

@ -0,0 +1,16 @@
{config, ...}: {
imports = [
./gnome-keyring.nix
./greeter.nix
./pam-rtprio.nix
./pipewire.nix
];
fonts.fontDir.enable = true;
security = {
pam = {
services.greetd.enableGnomeKeyring = config.services.greetd.enable && config.services.gnome.gnome-keyring.enable;
};
};
services.udisks2.enable = true;
programs.dconf.enable = true;
}

View File

@ -0,0 +1,25 @@
{
lib,
pkgs,
config,
...
}: let
inherit (lib) mkEnableOption mkIf;
cfg = config.module.desktop.gnome-keyring;
in {
options = {
module.desktop.gnome-keyring.enable = mkEnableOption "enable gnome keyring";
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
gcr_4
libsecret
];
programs.seahorse.enable = true;
services.gnome.gnome-keyring.enable = true;
xdg.portal.config.common = {
"org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
};
};
}

View File

@ -0,0 +1,51 @@
{
lib,
pkgs,
config,
...
}: let
inherit (lib) mkOption mkIf getExe types mkMerge;
cfg = config.module.desktop;
in {
options = {
module.desktop.displayManager = mkOption {
default = "greetd";
type = types.enum [
"cosmic"
"gdm"
"greetd"
"sddm"
];
};
};
config = mkMerge [
(mkIf (cfg.displayManager == "cosmic") {
services.displayManager.cosmic-greeter.enable = true;
})
(mkIf (cfg.displayManager == "gdm") {
services.displayManager.gdm = {
enable = true;
wayland = true;
};
})
(mkIf (cfg.displayManager == "greetd") {
programs.regreet.enable = true;
services.greetd = {
enable = true;
vt = 1;
settings = {
default_session = {
command = "${getExe pkgs.cage} -s -m last -- ${getExe pkgs.greetd.regreet}";
};
};
};
})
(mkIf (cfg.displayManager == "sddm") {
services.displayManager.sddm = {
enable = true;
wayland.enable = true;
};
})
];
}

View File

@ -0,0 +1,10 @@
{
security.pam.loginLimits = [
{
domain = "@users";
item = "rtprio";
type = "-";
value = -1;
}
];
}

View File

@ -16,17 +16,11 @@ in {
mkEnableOption "enable cosmic desktop"; mkEnableOption "enable cosmic desktop";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.sessionVariables.COSMIC_DATA_CONTROL_ENABLED = 1; module.desktop.displayManager = "cosmic";
sound.pipewire.enable = true; sound.pipewire.enable = true;
services = {
desktopManager.cosmic.enable = true; environment.sessionVariables.COSMIC_DATA_CONTROL_ENABLED = 1;
displayManager.cosmic-greeter.enable = true; services.desktopManager.cosmic.enable = true;
gnome.gnome-keyring.enable = true;
dbus = {
apparmor = "enabled";
implementation = "broker";
};
};
systemd = { systemd = {
packages = [pkgs.observatory]; packages = [pkgs.observatory];
services.monitord.wantedBy = ["multi-user.target"]; services.monitord.wantedBy = ["multi-user.target"];
@ -37,10 +31,7 @@ in {
xdg-desktop-portal-cosmic xdg-desktop-portal-cosmic
xdg-desktop-portal-gtk xdg-desktop-portal-gtk
]; ];
config.cosmic = { config.cosmic.default = ["cosmic" "gtk"];
default = ["cosmic" "gtk"];
"org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
};
}; };
}; };
} }

View File

@ -1,10 +1,10 @@
{ {
imports = [ imports = [
./common/pipewire.nix ./common
./cosmic.nix ./cosmic
./gnome.nix ./gnome
./hyprland.nix ./hyprland
./niri.nix ./niri
./plasma.nix ./plasma
]; ];
} }

View File

@ -1,29 +0,0 @@
{
config,
lib,
...
}:
with lib; let
cfg = config.desktop.gnome;
in {
options = {
desktop.gnome.enable =
mkEnableOption "enable gnome desktop";
};
config = mkIf cfg.enable {
sound.pipewire.enable = true;
services.xserver = {
enable = true;
displayManager.gdm.enable = true;
desktopManager.gnome.enable = true;
};
programs.dconf.enable = true;
programs.seahorse.enable = true;
services.gnome.gnome-keyring.enable = true;
services.udisks2.enable = true;
services.dbus = {
apparmor = "enabled";
implementation = "broker";
};
};
}

View File

@ -0,0 +1,79 @@
{
config,
pkgs,
lib,
...
}:
with lib; let
cfg = config.desktop.gnome;
in {
options = {
desktop.gnome.enable =
mkEnableOption "enable gnome desktop";
};
config = lib.mkMerge [
(mkIf cfg.enable {
module.desktop.displayManager = "gdm";
sound.pipewire.enable = true;
services.desktopManager.gnome.enable = true;
environment.gnome.excludePackages = with pkgs; [
orca
evince
# file-roller
geary
# gnome-disk-utility
# seahorse
# sushi
# sysprof
#
# gnome-shell-extensions
#
# adwaita-icon-theme
# nixos-background-info
# gnome-backgrounds
# gnome-bluetooth
# gnome-color-manager
# gnome-control-center
# gnome-shell-extensions
gnome-tour # GNOME Shell detects the .desktop file on first log-in.
gnome-user-docs
# glib # for gsettings program
# gnome-menus
# gtk3.out # for gtk-launch program
# xdg-user-dirs # Update user dirs as described in https://freedesktop.org/wiki/Software/xdg-user-dirs/
# xdg-user-dirs-gtk # Used to create the default bookmarks
#
# baobab
# epiphany
# gnome-text-editor
# gnome-calculator
# gnome-calendar
# gnome-characters
# gnome-clocks
gnome-console
gnome-contacts
# gnome-font-viewer
gnome-logs
# gnome-maps
gnome-music
gnome-system-monitor
# gnome-weather
# loupe
# nautilus
gnome-connections
# simple-scan
# snapshot
totem
yelp
# gnome-software
];
})
# workaround for crashing autologin session
(mkIf (cfg.enable && config.services.displayManager.autoLogin.enable) {
systemd.services = {
"getty@tty1".enable = false;
"autovt@tty1".enable = false;
};
})
];
}

View File

@ -1,77 +0,0 @@
{
perSystem,
config,
pkgs,
lib,
...
}:
with lib; let
cfg = config.desktop.hyprland;
in {
options = {
desktop.hyprland.enable =
mkEnableOption "enable hyprland desktop";
};
config = mkIf cfg.enable {
sound.pipewire.enable = true;
programs.hyprland = {
enable = true;
package = perSystem.hyprland.hyprland;
portalPackage = perSystem.hyprland.xdg-desktop-portal-hyprland;
};
environment.systemPackages = with pkgs; [
brightnessctl
gcr_4
];
fonts.fontDir.enable = true;
security.pam = {
services.hyprlock = {};
loginLimits = [
{
domain = "@users";
item = "rtprio";
type = "-";
value = 1;
}
];
};
services = {
gnome.gnome-keyring.enable = true;
udisks2.enable = true;
dbus = {
apparmor = "enabled";
implementation = "broker";
};
};
programs = {
dconf.enable = true;
seahorse.enable = true;
};
xdg.portal = {
enable = true;
extraPortals = [
perSystem.hyprland.xdg-desktop-portal-hyprland
pkgs.xdg-desktop-portal-gtk
];
config.common.default = [
"hyprland"
"gtk"
];
};
programs.regreet.enable = true;
services.greetd = {
enable = true;
vt = 6;
settings = {
default_session = {
command = "${pkgs.cage}/bin/cage -s -m last -- ${pkgs.greetd.regreet}/bin/regreet";
};
initial_session = {
user = "user";
command = "Hyprland";
};
};
};
};
}

View File

@ -0,0 +1,36 @@
{
perSystem,
config,
pkgs,
lib,
...
}: let
inherit (lib) mkEnableOption mkIf;
inherit (perSystem) hyprland;
cfg = config.desktop.hyprland;
in {
options = {
desktop.hyprland.enable =
mkEnableOption "enable hyprland desktop";
};
config = mkIf cfg.enable {
module.desktop.displayManager = "greetd";
module.desktop.gnome-keyring.enable = true;
sound.pipewire.enable = true;
programs.hyprland = {
enable = true;
package = hyprland.hyprland;
portalPackage = hyprland.xdg-desktop-portal-hyprland;
};
security.pam.services.hyprlock = {};
xdg.portal = {
enable = true;
extraPortals = [
hyprland.xdg-desktop-portal-hyprland
pkgs.xdg-desktop-portal-gtk
];
config.hyprland.default = ["hyprland" "gtk"];
};
};
}

View File

@ -1,72 +0,0 @@
{
config,
pkgs,
lib,
...
}: let
inherit (lib) mkIf mkEnableOption getExe;
cfg = config.desktop.niri;
in {
options = {
desktop.niri.enable =
mkEnableOption "enable niri desktop";
};
config = mkIf cfg.enable {
sound.pipewire.enable = true;
programs.niri.enable = true; # wayland compositor in rust
environment.systemPackages = with pkgs; [
brightnessctl
gcr_4
];
fonts.fontDir.enable = true;
security.pam = {
services.greetd.enableGnomeKeyring = true;
services.gtklock = {};
loginLimits = [
{
domain = "@users";
item = "rtprio";
type = "-";
value = 1;
}
];
};
services = {
gnome.gnome-keyring.enable = true;
udisks2.enable = true;
dbus = {
apparmor = "enabled";
implementation = "broker";
};
};
programs = {
dconf.enable = true;
seahorse.enable = true;
};
xdg.portal = {
enable = true;
extraPortals = with pkgs; [
xdg-desktop-portal-gnome
xdg-desktop-portal-gtk
];
config.niri = {
default = ["gnome" "gtk"];
"org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
};
};
programs.regreet.enable = true;
services.greetd = {
enable = true;
vt = 6;
settings = {
default_session = {
command = "${pkgs.cage}/bin/cage -s -m last -- ${getExe pkgs.greetd.regreet}";
};
initial_session = {
user = "user";
command = "${pkgs.niri}/bin/niri-session";
};
};
};
};
}

View File

@ -0,0 +1,45 @@
{
config,
pkgs,
lib,
...
}: let
inherit (lib) mkIf mkEnableOption;
cfg = config.desktop.niri;
in {
options = {
desktop.niri.enable =
mkEnableOption "enable niri desktop";
};
config = lib.mkMerge [
(mkIf cfg.enable {
module.desktop = {
displayManager = "greetd";
gnome-keyring.enable = true;
};
sound.pipewire.enable = true;
programs.niri.enable = true; # wayland compositor in rust
security = {
pam.services.gtklock = {};
soteria.enable = true; # polkit agent in rust
};
services = {
blueman.enable = config.hardware.bluetooth.enable;
gvfs.enable = true;
};
xdg.portal = {
enable = true;
extraPortals = with pkgs; [xdg-desktop-portal-gnome xdg-desktop-portal-gtk];
config.niri.default = ["gnome" "gtk"];
};
})
(mkIf (cfg.enable
&& config.services.displayManager.autoLogin.enable) {
services.greetd.settings.initial_session = {
command = "niri-session";
user = config.services.displayManager.autoLogin.user;
};
})
];
}

View File

@ -1,39 +0,0 @@
{
config,
pkgs,
lib,
...
}:
with lib; let
cfg = config.desktop.plasma;
in {
imports = [
./common/pipewire.nix
];
options = {
desktop.plasma = {
enable = mkEnableOption "enable plasma desktop";
# sddmEnable = mkEnableOption "enable simple display manager";
};
};
config = mkIf cfg.enable {
stylix.targets.qt.enable = mkDefault false;
environment.systemPackages = with pkgs; [gcr_4];
services = {
gnome.gnome-keyring.enable = true;
desktopManager.plasma6.enable = true;
displayManager.sddm = {
enable = true; # cfg.sddmEnable;
wayland.enable = true;
};
};
fonts.fontDir.enable = true;
xdg.portal = {
enable = true;
config.common = {
"org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
};
};
};
}

View File

@ -0,0 +1,22 @@
{
config,
pkgs,
lib,
...
}:
with lib; let
cfg = config.desktop.plasma;
in {
options = {
desktop.plasma = {
enable = mkEnableOption "enable plasma desktop";
};
};
config = mkIf cfg.enable {
module.desktop.displayManager = "sddm";
sound.pipewire.enable = true;
services.desktopManager.plasma6.enable = true;
stylix.targets.qt.enable = mkDefault false;
};
}

View File

@ -1,11 +1,21 @@
{lib, ...}: { {
environment.variables = { lib,
pkgs,
...
}: {
boot.tmp.cleanOnBoot = lib.mkDefault true;
console.font = "${pkgs.spleen}/share/consolefonts/spleen-16x32.psfu";
environment = {
ldso32 = null;
memoryAllocator.provider = "mimalloc";
variables = {
LESS = "-R --mouse"; LESS = "-R --mouse";
}; };
};
environment.ldso32 = null; networking.networkmanager.enable = true;
boot.tmp.cleanOnBoot = lib.mkDefault true;
services.openssh = { services.openssh = {
settings.X11Forwarding = false; settings.X11Forwarding = false;
@ -24,4 +34,12 @@
"sntrup761x25519-sha512@openssh.com" "sntrup761x25519-sha512@openssh.com"
]; ];
}; };
services.journald.extraConfig = ''
SystemMaxUse=1G
'';
systemd.coredump.extraConfig = ''
Storage=none
ProcessSizeMax=0
'';
} }

View File

@ -1,7 +1,9 @@
{ {
imports = [ imports = [
./common.nix ./common.nix
./locale.nix
./misc ./misc
./virtual ./stylix
./virt
]; ];
} }

View File

@ -3,16 +3,18 @@
lib, lib,
... ...
}: let }: let
inherit (lib) mkIf mkEnableOption; inherit (lib) types mkOption;
cfg = config.locale.ukrainian;
in { in {
options = { options = {
locale.ukrainian.enable = module.locale = mkOption {
mkEnableOption "enables ukrainian locale"; type = types.strMatching "[a-z]{2}_[A-Z]{2}\\.UTF-8";
default = "en_US.UTF-8";
description = "set locale";
}; };
config = mkIf cfg.enable { };
config = {
i18n = let i18n = let
locale = "uk_UA.UTF-8"; inherit (config.module) locale;
in { in {
defaultLocale = locale; defaultLocale = locale;
extraLocaleSettings = { extraLocaleSettings = {

View File

@ -1,8 +1,6 @@
{ {
imports = [ imports = [
./locale.nix
./opentabletdriver.nix ./opentabletdriver.nix
./qmk-vial.nix ./qmk-vial.nix
./stylix
]; ];
} }

View File

@ -6,10 +6,10 @@
inherit (lib) mkIf mkEnableOption; inherit (lib) mkIf mkEnableOption;
in { in {
options = { options = {
opentabletdriver.enable = module.misc.opentabletdriver.enable =
mkEnableOption "enables opentabletdriver"; mkEnableOption "enables opentabletdriver";
}; };
config = mkIf config.opentabletdriver.enable { config = mkIf config.module.misc.opentabletdriver.enable {
hardware.opentabletdriver = { hardware.opentabletdriver = {
enable = true; enable = true;
daemon.enable = true; daemon.enable = true;

View File

@ -6,10 +6,10 @@
inherit (lib) mkIf mkEnableOption; inherit (lib) mkIf mkEnableOption;
in { in {
options = { options = {
qmk-vial.enable = module.misc.qmk-vial.enable =
mkEnableOption "adds a udev rule for vial keyboards"; mkEnableOption "adds a udev rule for vial keyboards";
}; };
config = mkIf config.qmk-vial.enable { config = mkIf config.module.misc.qmk-vial.enable {
services.udev.extraRules = '' services.udev.extraRules = ''
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0660", GROUP="users", TAG+="uaccess", TAG+="udev-acl" KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0660", GROUP="users", TAG+="uaccess", TAG+="udev-acl"
''; '';

View File

@ -5,57 +5,81 @@
pkgs, pkgs,
... ...
}: let }: let
inherit (builtins) fetchurl;
inherit (lib) mkEnableOption mkOption mkIf; inherit (lib) mkEnableOption mkOption mkIf;
inherit (lib) optionalAttrs; inherit (lib) optionalAttrs;
inherit (lib.types) bool str; inherit (lib.types) bool str;
inherit (config.system) stateVersion;
cfg = config.module.stylix; cfg = config.module.stylix;
fromBase16Schemes = f: "${pkgs.base16-schemes}/share/themes/${f}.yaml";
interPackage = pkgs.inter-nerdfont; interPackage = pkgs.inter-nerdfont;
iosevkaPackage = iosevkaPackage = pkgs.nerd-fonts.iosevka;
if stateVersion == "24.11" iosevkaTermPackage = pkgs.nerd-fonts.iosevka-term;
then pkgs.nerdfonts.override {fonts = ["Iosevka"];} mesloLgPackage = pkgs.nerd-fonts.meslo-lg;
else pkgs.nerd-fonts.iosevka; # jetBrainsMonoPackage = pkgs.nerd-fonts.jetbrains-mono;
iosevkaTermPackage = geistMonoPackage = pkgs.nerd-fonts.geist-mono;
if stateVersion == "24.11" geistPackage = pkgs.geist-font;
then pkgs.nerdfonts.override {fonts = ["Iosevka Term"];}
else pkgs.nerd-fonts.iosevka-term;
mesloLgPackage =
if stateVersion == "24.11"
then pkgs.nerdfonts.override {fonts = ["MesloLG"];}
else pkgs.nerd-fonts.meslo-lg;
jetBrainsMonoPackage =
if stateVersion == "24.11"
then pkgs.nerdfonts.override {fonts = ["JetBrainsMono"];}
else pkgs.nerd-fonts.jetbrains-mono;
wallpapers = { wallpapers = {
fern-outline = builtins.fetchurl { abstract = {
squares = fetchurl {
url = "https://w.wallhaven.cc/full/p9/wallhaven-p91dym.jpg";
name = "wallhaven-p91dym.jpg";
sha256 = "wnsAhh0Soxm+lxahh+Xc/+CAw/abWgPIkeoOlzNGaDo=";
};
waves = fetchurl {
url = "https://w.wallhaven.cc/full/5y/wallhaven-5ydl93.png";
name = "wallhaven-5ydl93.png";
sha256 = "fTE2cyn2mkx05+Zn6qcs4+Rb7AYD0uyi6CNznuZYOjw=";
};
};
fern-outline = fetchurl {
url = "https://w.wallhaven.cc/full/p9/wallhaven-p9m7ve.png"; url = "https://w.wallhaven.cc/full/p9/wallhaven-p9m7ve.png";
name = "wallhaven-p9m7ve.png"; name = "wallhaven-p9m7ve.png";
sha256 = "0r7dl4fjwv2p5q5ggr4sjsl2h5m0s98k9qhiwkvmwi010lyffkx7"; sha256 = "0r7dl4fjwv2p5q5ggr4sjsl2h5m0s98k9qhiwkvmwi010lyffkx7";
}; };
mountains-pink = builtins.fetchurl { mountains-pink = fetchurl {
url = "https://w.wallhaven.cc/full/yq/wallhaven-yq7gox.jpg"; url = "https://w.wallhaven.cc/full/yq/wallhaven-yq7gox.jpg";
name = "wallhaven-yq7gox.jpg"; name = "wallhaven-yq7gox.jpg";
sha256 = "09s31spp9mq71fgkl1w80nzdc1458p1gjfyi3y6fy14wj2dza0pj"; sha256 = "09s31spp9mq71fgkl1w80nzdc1458p1gjfyi3y6fy14wj2dza0pj";
}; };
mountains-black = builtins.fetchurl { mountains-black = fetchurl {
url = "https://w.wallhaven.cc/full/9d/wallhaven-9djzww.jpg"; url = "https://w.wallhaven.cc/full/9d/wallhaven-9djzww.jpg";
name = "wallhaven-9djzww.jpg"; name = "wallhaven-9djzww.jpg";
sha256 = "1p2si922i9qs09h8c74lrvx0f284g0xvm7lh85gk1x7lqhn611zm"; sha256 = "1p2si922i9qs09h8c74lrvx0f284g0xvm7lh85gk1x7lqhn611zm";
}; };
cyber-dawn = builtins.fetchurl { cyber-dawn = fetchurl {
url = "https://w.wallhaven.cc/full/ym/wallhaven-ymo2y7.png"; url = "https://w.wallhaven.cc/full/ym/wallhaven-ymo2y7.png";
name = "wallhaven-ymo2y7.png"; name = "wallhaven-ymo2y7.png";
sha256 = "1b3j0hxxy8m25scq42lxsxc99xvr15pha1j4wplgz761asrvxly3"; sha256 = "1b3j0hxxy8m25scq42lxsxc99xvr15pha1j4wplgz761asrvxly3";
}; };
nixos-rainbow = fetchurl {
url = "https://w.wallhaven.cc/full/p9/wallhaven-p9pd23.png";
name = "wallhaven-p9pd23.png";
sha256 = "7CMuETntiVUCKhUIdJzX+sf3F47GvuX2a61o4xbEzww=";
};
mountains-sepia = fetchurl {
url = "https://w.wallhaven.cc/full/k8/wallhaven-k89k81.jpg";
name = "wallhaven-k89k81.jpg";
sha256 = "C0lvJ0ff0mCC3i9mmeHZsj/n6Ehkp3jaslVr7VDUB3k=";
};
jcurry-cloud = fetchurl {
url = "https://w.wallhaven.cc/full/7j/wallhaven-7j6wpy.jpg";
name = "wallhaven-je8rwq.jpg";
sha256 = "xsuCYc0mCDkrJZ+BUmEEclAfF17g1n39JHeubtZHP78=";
};
vapor-moon = fetchurl {
url = "https://w.wallhaven.cc/full/lm/wallhaven-lm6d2r.png";
name = "wallhaven-lm6d2r.png";
sha256 = "V07kj2zwFHDwzIN8QE8IFrJMXxDOBoK9C11sQGgTjyQ=";
};
}; };
themes = { themes = {
rose-pine-dawn = { rose-pine-dawn = {
polarity = "light"; polarity = "light";
scheme = "${pkgs.base16-schemes}/share/themes/rose-pine-dawn.yaml"; scheme = fromBase16Schemes "rose-pine-dawn";
wallpaper = wallpapers.cyber-dawn; wallpaper = wallpapers.cyber-dawn;
serif = { serif = {
@ -76,12 +100,12 @@
}; };
rose-pine-moon = { rose-pine-moon = {
polarity = "dark"; polarity = "dark";
scheme = "${pkgs.base16-schemes}/share/themes/rose-pine-moon.yaml"; scheme = fromBase16Schemes "rose-pine-moon";
wallpaper = wallpapers.cyber-dawn; wallpaper = wallpapers.cyber-dawn;
serif = { serif = {
package = iosevkaPackage; package = interPackage;
name = "Iosevka Nerd Font Propo"; name = "Inter Nerd Font";
}; };
monospace = { monospace = {
@ -95,10 +119,52 @@
size = 24; size = 24;
}; };
}; };
sandcastle = {
polarity = "dark";
scheme = fromBase16Schemes "sandcastle";
wallpaper = wallpapers.abstract.waves;
serif = {
package = geistPackage;
name = "Geist";
};
monospace = {
package = geistMonoPackage;
name = "GeistMono NFM";
};
cursor = {
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Classic";
size = 24;
};
};
gruvbox-dark-pale = {
polarity = "dark";
scheme = fromBase16Schemes "gruvbox-dark-pale";
wallpaper = wallpapers.mountains-sepia;
serif = {
package = geistPackage;
name = "Geist";
};
monospace = {
package = geistMonoPackage;
name = "GeistMono Nerd Font";
};
cursor = {
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Classic";
size = 24;
};
};
nord = { nord = {
polarity = "dark"; polarity = "dark";
scheme = "${pkgs.base16-schemes}/share/themes/nord.yaml"; scheme = fromBase16Schemes "nord";
wallpaper = builtins.fetchurl { wallpaper = fetchurl {
url = "https://w.wallhaven.cc/full/l8/wallhaven-l8l9gq.png"; url = "https://w.wallhaven.cc/full/l8/wallhaven-l8l9gq.png";
name = "wallhaven-l8l9gq.png"; name = "wallhaven-l8l9gq.png";
sha256 = "0ypr44sg0fn55m1b52dgr1nnscpi2p6rfkjsm7vvrdqw7bafbx2z"; sha256 = "0ypr44sg0fn55m1b52dgr1nnscpi2p6rfkjsm7vvrdqw7bafbx2z";
@ -123,8 +189,8 @@
nord-light = { nord-light = {
polarity = "light"; polarity = "light";
scheme = "${pkgs.base16-schemes}/share/themes/nord-light.yaml"; scheme = fromBase16Schemes "nord-light";
wallpaper = builtins.fetchurl { wallpaper = fetchurl {
url = "https://w.wallhaven.cc/full/l8/wallhaven-l8l9gq.png"; url = "https://w.wallhaven.cc/full/l8/wallhaven-l8l9gq.png";
name = "wallhaven-l8l9gq.png"; name = "wallhaven-l8l9gq.png";
sha256 = "0ypr44sg0fn55m1b52dgr1nnscpi2p6rfkjsm7vvrdqw7bafbx2z"; sha256 = "0ypr44sg0fn55m1b52dgr1nnscpi2p6rfkjsm7vvrdqw7bafbx2z";
@ -149,8 +215,8 @@
helios = { helios = {
polarity = "dark"; polarity = "dark";
scheme = "${pkgs.base16-schemes}/share/themes/helios.yaml"; scheme = fromBase16Schemes "helios";
wallpaper = builtins.fetchurl { wallpaper = fetchurl {
url = "https://w.wallhaven.cc/full/lq/wallhaven-lqorw2.png"; url = "https://w.wallhaven.cc/full/lq/wallhaven-lqorw2.png";
name = "wallhaven-lqorw2.png"; name = "wallhaven-lqorw2.png";
sha256 = "sha256:1rjchjq4pc2jyq8dvpa17mmscv9qcm0h0zv468lsf8s51anpid6p"; sha256 = "sha256:1rjchjq4pc2jyq8dvpa17mmscv9qcm0h0zv468lsf8s51anpid6p";
@ -175,8 +241,8 @@
sulphurpool = { sulphurpool = {
polarity = "dark"; polarity = "dark";
scheme = "${pkgs.base16-schemes}/share/themes/atelier-sulphurpool.yaml"; scheme = fromBase16Schemes "atelier-sulphurpool";
wallpaper = builtins.fetchurl { wallpaper = fetchurl {
url = "https://w.wallhaven.cc/full/rd/wallhaven-rd5q3m.jpg"; url = "https://w.wallhaven.cc/full/rd/wallhaven-rd5q3m.jpg";
name = "wallhaven-rd5q3m.jpg"; name = "wallhaven-rd5q3m.jpg";
sha256 = "sha256:1sa2739vwwv1xafzjvxlg3kvq26xmcxg6hrwq29q40j617r63sy6"; sha256 = "sha256:1sa2739vwwv1xafzjvxlg3kvq26xmcxg6hrwq29q40j617r63sy6";
@ -201,7 +267,7 @@
himalaya = { himalaya = {
# lightly pink like himalayan salt # lightly pink like himalayan salt
polarity = "light"; polarity = "light";
scheme = "${pkgs.base16-schemes}/share/themes/atelier-plateau-light.yaml"; scheme = fromBase16Schemes "atelier-plateau-light";
wallpaper = wallpapers.mountains-pink; wallpaper = wallpapers.mountains-pink;
serif = { serif = {
@ -214,6 +280,48 @@
name = "MesloLGM Nerd Font Mono"; name = "MesloLGM Nerd Font Mono";
}; };
cursor = {
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Ice";
size = 24;
};
};
vesper = {
polarity = "dark";
scheme = fromBase16Schemes "vesper";
wallpaper = wallpapers.abstract.squares;
serif = {
package = geistPackage;
name = "Geist";
};
monospace = {
package = geistMonoPackage;
name = "GeistMono Nerd Font";
};
cursor = {
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Classic";
size = 24;
};
};
github = {
polarity = "light";
scheme = fromBase16Schemes "github";
wallpaper = wallpapers.abstract.squares;
serif = {
package = geistPackage;
name = "Geist Light";
};
monospace = {
package = geistMonoPackage;
name = "GeistMono Nerd Font";
};
cursor = { cursor = {
package = pkgs.bibata-cursors; package = pkgs.bibata-cursors;
name = "Bibata-Modern-Ice"; name = "Bibata-Modern-Ice";
@ -243,6 +351,7 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
fonts.packages = [pkgs.nerd-fonts.symbols-only];
stylix = stylix =
{ {
enable = true; enable = true;

View File

@ -5,10 +5,10 @@
... ...
}: }:
with lib; let with lib; let
cfg = config.virtual.docker; cfg = config.module.virt.docker;
in { in {
options = { options = {
virtual.docker.enable = module.virt.docker.enable =
mkEnableOption "enable docker"; mkEnableOption "enable docker";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {

View File

@ -5,10 +5,10 @@
... ...
}: }:
with lib; let with lib; let
cfg = config.virtual.libvirt; cfg = config.module.virt.libvirt;
in { in {
options = { options = {
virtual.libvirt.enable = module.virt.libvirt.enable =
mkEnableOption "enables virtualisation"; mkEnableOption "enables virtualisation";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {

View File

@ -5,10 +5,10 @@
... ...
}: }:
with lib; let with lib; let
cfg = config.virtual.podman; cfg = config.module.virt.podman;
in { in {
options = { options = {
virtual.podman.enable = module.virt.podman.enable =
mkEnableOption "enables podman"; mkEnableOption "enables podman";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {

View File

@ -4,7 +4,7 @@
... ...
}: { }: {
boot.loader = { boot.loader = {
timeout = 3; timeout = 0;
efi.canTouchEfiVariables = true; efi.canTouchEfiVariables = true;
systemd-boot = { systemd-boot = {
consoleMode = "auto"; consoleMode = "auto";

View File

@ -11,6 +11,7 @@ in {
imports = [ imports = [
./boot ./boot
./hardware ./hardware
./misc
./networking ./networking
./nix ./nix
./security ./security
@ -43,15 +44,26 @@ in {
keyboards = { keyboards = {
internal = { internal = {
ids = ["0001:0001" "048d:c101"]; ids = ["0001:0001" "048d:c101"];
settings.main = { settings.main = let
a = "lettermod(alt, a, 200, 150)"; # finger = mod;
s = "lettermod(meta, s, 200, 150)"; pinky = "alt";
d = "lettermod(control, d, 200, 150)"; ring = "meta";
f = "lettermod(shift, f, 200, 150)"; middle = "control";
j = "lettermod(shift, j, 200, 150)"; index = "shift";
k = "lettermod(control, k, 200, 150)"; # timeouts
l = "lettermod(meta, l, 200, 150)"; idle = "200";
";" = "lettermod(alt, ;, 200, 150)"; hold = "150";
# function takes finger and letter
homeRowMod = f: l: "lettermod(${f}, ${l}, ${idle}, ${hold})";
in {
"a" = homeRowMod pinky "a";
"s" = homeRowMod ring "s";
"d" = homeRowMod middle "d";
"f" = homeRowMod index "f";
"j" = homeRowMod index "j";
"k" = homeRowMod middle "k";
"l" = homeRowMod ring "l";
";" = homeRowMod pinky ";";
}; };
}; };
}; };

View File

@ -0,0 +1,3 @@
{
imports = [./slim.nix ./zram.nix];
}

View File

@ -0,0 +1,20 @@
{
# taken from https://github.com/NuschtOS/nixos-modules/blob/main/modules/slim.nix
documentation = {
# html docs and info are not required, man pages are enough
doc.enable = false;
info.enable = false;
};
# environment.defaultPackages = lib.mkForce [];
# programs.thunderbird.package = pkgs.thunderbird.override {cfg.speechSynthesisSupport = false;};
# during testing only 550K-650K of the tmpfs where used
security.wrapperDirSize = "10M";
services = {
orca.enable = false; # requires speechd
speechd.enable = false; # voice files are big and fat
};
}

View File

@ -0,0 +1,8 @@
{
zramSwap = {
enable = true;
algorithm = "zstd";
memoryPercent = 25;
priority = 5;
};
}

View File

@ -1,13 +1,20 @@
{ {
pkgs, pkgs,
# inputs,
lib, lib,
... ...
}: { }: {
# imports = with inputs; [lix.nixosModules.default];
nix = { nix = {
package = pkgs.lixPackageSets.latest.lix; package = pkgs.lixPackageSets.latest.lix;
channel.enable = false; channel.enable = false;
daemonCPUSchedPolicy = "idle"; daemonCPUSchedPolicy = "idle";
optimise = {
automatic = true;
dates = ["weekly"];
};
settings = { settings = {
auto-optimise-store = true;
experimental-features = [ experimental-features = [
"nix-command" "nix-command"
"flakes" "flakes"
@ -19,7 +26,7 @@
"fetch-closure" "fetch-closure"
# Allow derivation builders to call Nix, and thus build derivations recursively. # Allow derivation builders to call Nix, and thus build derivations recursively.
"recursive-nix" # "recursive-nix"
# Allow the use of the impure-env setting. # Allow the use of the impure-env setting.
# "configurable-impure-env" # "configurable-impure-env"
@ -32,8 +39,5 @@
nix.settings.use-cgroups = true; nix.settings.use-cgroups = true;
# for container in builds support # for container in builds support
nix.settings.system-features = nix.settings.system-features = ["uid-range"];
if lib.versionAtLeast lib.version "25.05pre"
then ["uid-range"]
else lib.mkDefault ["uid-range"];
} }

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