Compare commits
98 Commits
f5a5f4b87c
...
main
Author | SHA1 | Date | |
---|---|---|---|
c0d1341448
|
|||
bba55dc973
|
|||
d48559e6d8
|
|||
c18c1d0060
|
|||
bec0e9d43a
|
|||
3937656ce1
|
|||
6554808614
|
|||
8a35e18e4e
|
|||
930417968f
|
|||
7d0e089e3f
|
|||
d135a13a5a
|
|||
9c0e7c4cae
|
|||
c65a7997e2
|
|||
61d4307a10
|
|||
81c866645f
|
|||
1065479388
|
|||
5d9782d733
|
|||
67009df2a9
|
|||
547e41d3f9
|
|||
8fe81eb9cd
|
|||
e599e4c5c4
|
|||
b42de80180
|
|||
2093304e4c
|
|||
e30f4a74cd
|
|||
7c72e527e7
|
|||
f854f65029
|
|||
9034502635
|
|||
24b195b766
|
|||
1ae179eb85
|
|||
efaae1a801
|
|||
27f29769e2
|
|||
c586cc93d8
|
|||
5526b559cf
|
|||
47c88ecf63
|
|||
71d94e52a8
|
|||
268e527db6
|
|||
f3bf120805
|
|||
422b0551db
|
|||
ac28a3442f
|
|||
078351becd
|
|||
46be9aa879
|
|||
8f91352720
|
|||
d3ce08e765
|
|||
5859b9d469
|
|||
a1cac8803a
|
|||
4054e42e21
|
|||
89ff07ac7b
|
|||
7641390aba
|
|||
539a1d8713
|
|||
b3ac24719a
|
|||
f8d4b52394
|
|||
4abde43c61
|
|||
686e36b144
|
|||
0bdff5ef5b
|
|||
02a8c645e9
|
|||
8217a70b34
|
|||
34795ac894
|
|||
a876874791
|
|||
6dbd2b86a2
|
|||
a4e5add644
|
|||
cc31b858f7
|
|||
e669331366
|
|||
453fda9a36
|
|||
e2f6ed72ed
|
|||
8a4af44494
|
|||
0c28f1e978
|
|||
1dc168ce63
|
|||
e170e9d2b7
|
|||
002b06bb91
|
|||
f39a105caf
|
|||
432fad779a
|
|||
590238d3e9
|
|||
fff9e50163
|
|||
161a5917f6
|
|||
e828500be7
|
|||
0db2cbfe19
|
|||
590a94af56
|
|||
c6d5a071b4
|
|||
9534e50252
|
|||
989c740184
|
|||
f6f5121d1e
|
|||
391886ef59
|
|||
0aec9e92c1
|
|||
7662e9cd6e
|
|||
5c11830083
|
|||
4397eec2a1
|
|||
3cd27e0e79
|
|||
572314fe46
|
|||
854a3be744
|
|||
a5a2e9ceac
|
|||
c58b5489d8
|
|||
4fb2c8cc12
|
|||
08deff70bc
|
|||
920c75e997
|
|||
2108320d1d
|
|||
463e6f1630
|
|||
16eb328cf5
|
|||
672f28c75c
|
@ -12,5 +12,6 @@ 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
|
||||
|
684
flake.lock
generated
684
flake.lock
generated
File diff suppressed because it is too large
Load Diff
130
flake.nix
130
flake.nix
@ -2,44 +2,104 @@
|
||||
description = "unexplrd's personal configuration";
|
||||
|
||||
inputs = {
|
||||
blueprint.url = "github:numtide/blueprint";
|
||||
chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
|
||||
disko.url = "github:nix-community/disko/latest";
|
||||
home-manager.url = "github:nix-community/home-manager";
|
||||
hyprland.url = "github:hyprwm/Hyprland";
|
||||
hyprsunset.url = "github:hyprwm/hyprsunset";
|
||||
lanzaboote.url = "github:nix-community/lanzaboote/v0.4.2";
|
||||
# lix.url = "https://git.lix.systems/lix-project/nixos-module/archive/2.92.0-2.tar.gz";
|
||||
mysecrets.url = "git+ssh://gitea@gitea.linerds.us/unexplrd/nix-secrets";
|
||||
# neve.url = "git+https://gitea.linerds.us/unexplrd/Neve";
|
||||
# lix = {
|
||||
# url = "https://git.lix.systems/lix-project/nixos-module/archive/2.93.1.tar.gz";
|
||||
# inputs.nixpkgs.follows = "nixpkgs";
|
||||
# };
|
||||
# neve = {
|
||||
# inputs.nixvim.follows = "nixvim";
|
||||
# url = "git+https://gitea.linerds.us/unexplrd/Neve";
|
||||
# };
|
||||
# nixvim.url = "github:nix-community/nixvim";
|
||||
nix-flatpak.url = "github:gmodena/nix-flatpak";
|
||||
nix-index-database.url = "github:nix-community/nix-index-database";
|
||||
nixos-cosmic.url = "github:lilyinstarlight/nixos-cosmic";
|
||||
nixos-facter-modules.url = "github:numtide/nixos-facter-modules";
|
||||
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11";
|
||||
nixpkgs.url = "github:NixOS/nixpkgs?ref=nixos-unstable";
|
||||
sops-nix.url = "github:mic92/sops-nix";
|
||||
walker = {
|
||||
url = "github:abenz1267/walker";
|
||||
systems.url = "github:nix-systems/default";
|
||||
blueprint = {
|
||||
url = "github:numtide/blueprint";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.systems.follows = "systems";
|
||||
};
|
||||
chaotic = {
|
||||
url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
|
||||
inputs = {
|
||||
home-manager.follows = "home-manager";
|
||||
nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
disko = {
|
||||
url = "github:nix-community/disko/latest";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
stylix.url = "github:danth/stylix";
|
||||
# TODO: somehow reduce the number of *.inputs.nixpkgs.follows = "nixpkgs" stuff, mb a function?
|
||||
blueprint.inputs.nixpkgs.follows = "nixpkgs";
|
||||
chaotic.inputs.nixpkgs.follows = "nixpkgs";
|
||||
disko.inputs.nixpkgs.follows = "nixpkgs";
|
||||
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||
hyprland.inputs.nixpkgs.follows = "nixpkgs";
|
||||
hyprsunset.inputs.hyprland-protocols.follows = "hyprland/hyprland-protocols";
|
||||
hyprsunset.inputs.hyprutils.follows = "hyprland/hyprutils";
|
||||
hyprsunset.inputs.nixpkgs.follows = "nixpkgs";
|
||||
lanzaboote.inputs.nixpkgs.follows = "nixpkgs";
|
||||
# lix.inputs.nixpkgs.follows = "nixpkgs";
|
||||
mysecrets.flake = false;
|
||||
# neve.inputs.nixvim.follows = "nixvim";
|
||||
nix-index-database.inputs.nixpkgs.follows = "nixpkgs";
|
||||
sops-nix.inputs.nixpkgs.follows = "nixpkgs";
|
||||
ghostty = {
|
||||
url = "github:ghostty-org/ghostty";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.flake-utils.inputs.systems.follows = "systems";
|
||||
};
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
hyprland = {
|
||||
url = "github:hyprwm/Hyprland";
|
||||
inputs = {
|
||||
systems.follows = "systems";
|
||||
nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
hyprsunset = {
|
||||
url = "github:hyprwm/hyprsunset";
|
||||
inputs = {
|
||||
hyprland-protocols.follows = "hyprland/hyprland-protocols";
|
||||
hyprutils.follows = "hyprland/hyprutils";
|
||||
hyprwayland-scanner.follows = "hyprland/hyprwayland-scanner";
|
||||
nixpkgs.follows = "nixpkgs";
|
||||
systems.follows = "hyprland/systems";
|
||||
};
|
||||
};
|
||||
lanzaboote = {
|
||||
url = "github:nix-community/lanzaboote/v0.4.2";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
mysecrets = {
|
||||
url = "git+ssh://gitea@gitea.linerds.us/unexplrd/nix-secrets";
|
||||
flake = false;
|
||||
};
|
||||
nix-flatpak.url = "github:gmodena/nix-flatpak";
|
||||
nix-index-database = {
|
||||
url = "github:nix-community/nix-index-database";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
nixos-cosmic = {
|
||||
url = "github:lilyinstarlight/nixos-cosmic";
|
||||
inputs = {
|
||||
nixpkgs-stable.follows = "nixpkgs-stable";
|
||||
nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
nixos-facter-modules.url = "github:numtide/nixos-facter-modules";
|
||||
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11";
|
||||
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;};
|
||||
|
@ -1,11 +1,6 @@
|
||||
{
|
||||
config,
|
||||
inputs,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
{inputs, ...}: {
|
||||
imports = with inputs; [
|
||||
self.nixosModules.config
|
||||
self.modules.shared.nixos
|
||||
self.nixosModules.desktop
|
||||
self.nixosModules.system
|
||||
./disko
|
||||
@ -13,20 +8,18 @@
|
||||
];
|
||||
|
||||
networking = {
|
||||
networkmanager.enable = true;
|
||||
hostId = "c7f6c4a1";
|
||||
hostName = "dunamis";
|
||||
};
|
||||
|
||||
environment.memoryAllocator.provider = "mimalloc";
|
||||
system.stateVersion = "25.11";
|
||||
time.timeZone = "Europe/Kyiv";
|
||||
|
||||
desktop.niri.enable = true;
|
||||
# TODO: make a module for autologin
|
||||
services.greetd.settings.initial_session = {
|
||||
|
||||
services.displayManager.autoLogin = {
|
||||
enable = true;
|
||||
user = "user";
|
||||
command = "${pkgs.niri}/bin/niri-session";
|
||||
};
|
||||
|
||||
module = {
|
||||
@ -37,24 +30,13 @@
|
||||
};
|
||||
stylix = {
|
||||
enable = true;
|
||||
theme = "gruvbox-dark-pale";
|
||||
theme = "sandcastle";
|
||||
};
|
||||
};
|
||||
|
||||
locale.ukrainian.enable = true;
|
||||
locale = "uk_UA.UTF-8";
|
||||
misc = {
|
||||
opentabletdriver.enable = false;
|
||||
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;
|
||||
};
|
||||
}
|
||||
|
@ -1,4 +1,9 @@
|
||||
{inputs, ...}: let
|
||||
{
|
||||
config,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
inherit (config.networking) hostId;
|
||||
disk = "/dev/disk/by-id/nvme-eui.000000000000000100a075244b5d6185";
|
||||
in {
|
||||
imports = with inputs; [
|
||||
@ -10,5 +15,5 @@ in {
|
||||
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;};
|
||||
}
|
||||
|
@ -1,4 +1,7 @@
|
||||
{disk, ...}: {
|
||||
{
|
||||
disk,
|
||||
hostId,
|
||||
}: {
|
||||
type = "disk";
|
||||
device = disk;
|
||||
content = {
|
||||
@ -25,45 +28,30 @@
|
||||
size = "100%";
|
||||
content = {
|
||||
type = "luks";
|
||||
name = "luks-main";
|
||||
name = "luks-" + hostId;
|
||||
initrdUnlock = true;
|
||||
settings.allowDiscards = true;
|
||||
content = {
|
||||
content = let
|
||||
mountOptions = ["autodefrag" "compress-force=zstd" "noatime"];
|
||||
in {
|
||||
type = "btrfs";
|
||||
extraArgs = ["-f"];
|
||||
subvolumes = {
|
||||
"@nixos-root" = {
|
||||
mountpoint = "/";
|
||||
mountOptions = [
|
||||
"autodefrag"
|
||||
"compress=zstd"
|
||||
"noatime"
|
||||
"noexec"
|
||||
];
|
||||
mountOptions = mountOptions ++ ["noexec"];
|
||||
};
|
||||
"@home" = {
|
||||
mountpoint = "/home";
|
||||
mountOptions = [
|
||||
"autodefrag"
|
||||
"compress=zstd"
|
||||
"noatime"
|
||||
];
|
||||
inherit mountOptions;
|
||||
};
|
||||
"@storage" = {
|
||||
mountpoint = "/storage";
|
||||
mountOptions = [
|
||||
"autodefrag"
|
||||
"compress=zstd"
|
||||
"noatime"
|
||||
];
|
||||
inherit mountOptions;
|
||||
};
|
||||
"@nix" = {
|
||||
mountpoint = "/nix";
|
||||
mountOptions = [
|
||||
"autodefrag"
|
||||
"compress-force=zstd"
|
||||
"noatime"
|
||||
];
|
||||
inherit mountOptions;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -1,5 +1,6 @@
|
||||
{
|
||||
imports = [
|
||||
# ./minecraft.nix
|
||||
# ./nix-ssh-serve.nix
|
||||
];
|
||||
}
|
||||
|
@ -1,14 +0,0 @@
|
||||
{
|
||||
inputs,
|
||||
osConfig,
|
||||
...
|
||||
}: {
|
||||
imports = with inputs; [
|
||||
nix-index-database.hmModules.nix-index
|
||||
self.homeModules.desktop
|
||||
self.homeModules.programs
|
||||
];
|
||||
inherit (osConfig) desktop;
|
||||
home.stateVersion = osConfig.system.stateVersion;
|
||||
home.sessionPath = ["$HOME/.local/bin"];
|
||||
}
|
@ -1,7 +1 @@
|
||||
{
|
||||
imports = [
|
||||
./common.nix
|
||||
./flatpak.nix
|
||||
./programs.nix
|
||||
];
|
||||
}
|
||||
{flake, ...}: {imports = [flake.modules.shared.user];}
|
||||
|
@ -1,100 +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
|
||||
zk.enable = true;
|
||||
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
|
||||
systemctl-tui # systemctl tui 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";
|
||||
};
|
||||
};
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{inputs, ...}: {
|
||||
imports = with inputs; [
|
||||
self.nixosModules.config
|
||||
self.modules.shared.nixos
|
||||
self.nixosModules.desktop
|
||||
self.nixosModules.system
|
||||
./disko
|
||||
@ -9,16 +9,26 @@
|
||||
];
|
||||
|
||||
networking = {
|
||||
networkmanager.enable = true;
|
||||
# hostId = "";
|
||||
hostId = "14f63637";
|
||||
hostName = "eldrid";
|
||||
};
|
||||
|
||||
environment.memoryAllocator.provider = "mimalloc";
|
||||
system.stateVersion = "25.11";
|
||||
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 = {
|
||||
config = {
|
||||
@ -30,19 +40,11 @@
|
||||
};
|
||||
stylix = {
|
||||
enable = true;
|
||||
theme = "helios";
|
||||
theme = "sandcastle";
|
||||
};
|
||||
};
|
||||
|
||||
locale.ukrainian.enable = true;
|
||||
opentabletdriver.enable = false;
|
||||
locale = "uk_UA.UTF-8";
|
||||
misc = {
|
||||
qmk-vial.enable = true;
|
||||
virtual.libvirt.enable = false;
|
||||
|
||||
swapDevices = [
|
||||
{
|
||||
device = "/swap/swapfile";
|
||||
size = 8 * 1024; # eight gigs
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@ -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 {
|
||||
imports = with inputs; [
|
||||
disko.nixosModules.disko
|
||||
@ -10,5 +15,5 @@ in {
|
||||
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;};
|
||||
}
|
||||
|
@ -1,4 +1,7 @@
|
||||
{disk, ...}: {
|
||||
{
|
||||
disk,
|
||||
hostId,
|
||||
}: {
|
||||
type = "disk";
|
||||
device = disk;
|
||||
content = {
|
||||
@ -25,7 +28,7 @@
|
||||
size = "100%";
|
||||
content = {
|
||||
type = "luks";
|
||||
name = "luks-main";
|
||||
name = "luks-" + hostId;
|
||||
initrdUnlock = true;
|
||||
settings.allowDiscards = true;
|
||||
content = {
|
||||
|
@ -1,20 +1,47 @@
|
||||
{pkgs, ...}: let
|
||||
cb-ucm-conf = pkgs.alsa-ucm-conf.overrideAttrs {
|
||||
wttsrc = pkgs.fetchFromGitHub {
|
||||
cb-ucm-conf = with pkgs;
|
||||
alsa-ucm-conf.overrideAttrs {
|
||||
wttsrc = fetchFromGitHub {
|
||||
owner = "WeirdTreeThing";
|
||||
repo = "chromebook-ucm-conf";
|
||||
rev = "b6ce2a7";
|
||||
hash = "sha256-QRUKHd3RQmg1tnZU8KCW0AmDtfw/daOJ/H3XU5qWTCc=";
|
||||
repo = "alsa-ucm-conf-cros";
|
||||
rev = "a4f0ed6cf59163fb571c33a81a6b40b6f53ed57d";
|
||||
hash = "sha256-H0BsRzHSEJ6XCZB/Rvb3w+uGCzr+kAvAwcHWqYEtp6w=";
|
||||
};
|
||||
postInstall = ''
|
||||
cp -R $wttsrc/common/* $out/share/alsa/ucm2/common
|
||||
cp -R $wttsrc/codecs/* $out/share/alsa/ucm2/codecs
|
||||
cp -R $wttsrc/platforms/* $out/share/alsa/ucm2/platforms
|
||||
cp -R $wttsrc/sof-rt5682 $out/share/alsa/ucm2/conf.d
|
||||
cp -R $wttsrc/sof-cs42l42 $out/share/alsa/ucm2/conf.d
|
||||
unpackPhase = ''
|
||||
runHook preUnpack
|
||||
tar xf "$src"
|
||||
runHook postUnpack
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
mkdir -p $out/share/alsa
|
||||
cp -r alsa-ucm*/ucm2 $out/share/alsa
|
||||
runHook postInstall
|
||||
'';
|
||||
};
|
||||
in {
|
||||
environment = {
|
||||
systemPackages = [pkgs.sof-firmware];
|
||||
sessionVariables.ALSA_CONFIG_UCM2 = "${cb-ucm-conf}/share/alsa/ucm2";
|
||||
etc = {
|
||||
"wireplumber/main.lua.d/51-increase-headroom.lua".text = ''
|
||||
rule = {
|
||||
matches = {
|
||||
{
|
||||
{ "node.name", "matches", "alsa_output.*" },
|
||||
},
|
||||
},
|
||||
apply_properties = {
|
||||
["api.alsa.headroom"] = 4096,
|
||||
},
|
||||
}
|
||||
|
||||
table.insert(alsa_monitor.rules,rule)
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
system.replaceDependencies.replacements = [
|
||||
{
|
||||
original = pkgs.alsa-ucm-conf;
|
||||
@ -22,6 +49,10 @@ in {
|
||||
}
|
||||
];
|
||||
|
||||
boot.extraModprobeConfig = ''
|
||||
options snd-intel-dspcfg dsp_driver=3
|
||||
'';
|
||||
|
||||
services.pipewire.wireplumber.configPackages = [
|
||||
(pkgs.writeTextDir "share/wireplumber/main.lua.d/51-increase-headroom.lua" ''
|
||||
rule = {
|
||||
@ -37,10 +68,19 @@ in {
|
||||
|
||||
table.insert(alsa_monitor.rules,rule)
|
||||
'')
|
||||
(pkgs.writeTextDir "share/wireplumber/main.lua.d/51-avs-dmic.lua" ''
|
||||
rule = {
|
||||
matches = {
|
||||
{
|
||||
{ "node.nick", "equals", "Internal Microphone" },
|
||||
},
|
||||
},
|
||||
apply_properties = {
|
||||
["audio.format"] = "S16LE",
|
||||
},
|
||||
}
|
||||
|
||||
table.insert(alsa_monitor.rules, rule)
|
||||
'')
|
||||
];
|
||||
boot = {
|
||||
extraModprobeConfig = ''
|
||||
options snd-intel-dspcfg dsp_driver=3
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
{
|
||||
imports = [
|
||||
./distributed-build.nix
|
||||
# ./distributed-build.nix
|
||||
./undervolt.nix
|
||||
];
|
||||
}
|
||||
|
@ -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";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
7
hosts/eldrid/misc/undervolt.nix
Normal file
7
hosts/eldrid/misc/undervolt.nix
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
services.undervolt = {
|
||||
enable = true;
|
||||
# coreOffset = -150;
|
||||
turbo = 1;
|
||||
};
|
||||
}
|
@ -1,7 +1 @@
|
||||
{lib, ...}: {
|
||||
imports = [
|
||||
../../../dunamis/users/user/common.nix
|
||||
../../../dunamis/users/user/programs.nix
|
||||
../../../dunamis/users/user/flatpak.nix
|
||||
];
|
||||
}
|
||||
{flake, ...}: {imports = [flake.modules.shared.user];}
|
||||
|
@ -1,10 +1,6 @@
|
||||
{
|
||||
config,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
{inputs, ...}: {
|
||||
imports = with inputs; [
|
||||
self.nixosModules.config
|
||||
self.modules.shared.nixos
|
||||
self.nixosModules.desktop
|
||||
self.nixosModules.system
|
||||
./disko
|
||||
@ -13,30 +9,33 @@
|
||||
];
|
||||
|
||||
networking = {
|
||||
networkmanager.enable = true;
|
||||
hostId = "45b00123";
|
||||
hostName = "legion";
|
||||
};
|
||||
|
||||
environment.memoryAllocator.provider = "mimalloc";
|
||||
system.stateVersion = "25.11";
|
||||
time.timeZone = "Europe/Kyiv";
|
||||
|
||||
desktop.niri.enable = true;
|
||||
|
||||
services.displayManager.autoLogin = {
|
||||
enable = true;
|
||||
user = "user";
|
||||
};
|
||||
|
||||
module = {
|
||||
config = {
|
||||
laptop.homeRowMods = true;
|
||||
powerSave = true;
|
||||
# secureBoot = true;
|
||||
# tpmDiskUnlock = true;
|
||||
secureBoot = true;
|
||||
tpmDiskUnlock = true;
|
||||
vaapi = "nvidia";
|
||||
};
|
||||
stylix = {
|
||||
enable = true;
|
||||
theme = "helios";
|
||||
theme = "sandcastle";
|
||||
};
|
||||
locale = "uk_UA.UTF-8";
|
||||
virt.libvirt.enable = true;
|
||||
};
|
||||
|
||||
locale.ukrainian.enable = true;
|
||||
virtual.libvirt.enable = true;
|
||||
}
|
||||
|
@ -1,4 +1,9 @@
|
||||
{inputs, ...}: let
|
||||
{
|
||||
config,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
inherit (config.networking) hostId;
|
||||
disk-main = "/dev/disk/by-id/nvme-INTEL_SSDPEKKF256G8L_BTHH81460QC2256B";
|
||||
disk-second = "/dev/disk/by-id/nvme-WDC_PC_SN730_SDBPNTY-1T00-1101_21114D802446";
|
||||
in {
|
||||
@ -11,6 +16,6 @@ in {
|
||||
mountOptions = ["rw" "nosuid" "nodev"];
|
||||
};
|
||||
};
|
||||
disko.devices.disk.main = import ./disk-main.nix {inherit disk-main;};
|
||||
disko.devices.disk.second = import ./disk-second.nix {inherit disk-second;};
|
||||
disko.devices.disk.main = import ./disk-main.nix {inherit disk-main hostId;};
|
||||
disko.devices.disk.second = import ./disk-second.nix {inherit disk-second hostId;};
|
||||
}
|
||||
|
@ -1,4 +1,7 @@
|
||||
{disk-main}: {
|
||||
{
|
||||
disk-main,
|
||||
hostId,
|
||||
}: {
|
||||
type = "disk";
|
||||
device = disk-main;
|
||||
content = {
|
||||
@ -25,7 +28,7 @@
|
||||
size = "100%";
|
||||
content = {
|
||||
type = "luks";
|
||||
name = "luks-main";
|
||||
name = "luks-" + hostId;
|
||||
initrdUnlock = true;
|
||||
settings.allowDiscards = true;
|
||||
content = {
|
||||
|
@ -1,4 +1,7 @@
|
||||
{disk-second}: {
|
||||
{
|
||||
disk-second,
|
||||
hostId,
|
||||
}: {
|
||||
type = "disk";
|
||||
device = disk-second;
|
||||
content = {
|
||||
@ -8,7 +11,7 @@
|
||||
size = "100%";
|
||||
content = {
|
||||
type = "luks";
|
||||
name = "luks-second";
|
||||
name = "luks-${hostId}-second";
|
||||
initrdUnlock = true;
|
||||
settings.allowDiscards = true;
|
||||
content = {
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
imports = [
|
||||
./distributed-build.nix
|
||||
# ./distributed-build.nix
|
||||
];
|
||||
}
|
||||
|
@ -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";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
@ -1,7 +1 @@
|
||||
{
|
||||
imports = [
|
||||
../../../dunamis/users/user/common.nix
|
||||
../../../dunamis/users/user/flatpak.nix
|
||||
../../../dunamis/users/user/programs.nix
|
||||
];
|
||||
}
|
||||
{flake, ...}: {imports = [flake.modules.shared.user];}
|
||||
|
@ -1,29 +1,28 @@
|
||||
{
|
||||
inputs,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
{inputs, ...}: {
|
||||
imports = with inputs; [
|
||||
self.nixosModules.desktop
|
||||
self.nixosModules.system
|
||||
self.nixosModules.config
|
||||
self.modules.shared.nixos
|
||||
./disko
|
||||
./hardware
|
||||
./misc
|
||||
];
|
||||
|
||||
networking = {
|
||||
networkmanager.enable = true;
|
||||
# hostId = "31150fae";
|
||||
hostId = "bd1b5837";
|
||||
hostName = "morphius";
|
||||
};
|
||||
|
||||
boot.kernelModules = ["i915"];
|
||||
environment.memoryAllocator.provider = "mimalloc";
|
||||
system.stateVersion = "25.11";
|
||||
time.timeZone = "Europe/Kyiv";
|
||||
|
||||
zramSwap.enable = true;
|
||||
desktop.gnome.enable = true;
|
||||
|
||||
services.displayManager.autoLogin = {
|
||||
enable = true;
|
||||
user = "user";
|
||||
};
|
||||
|
||||
swapDevices = [
|
||||
{
|
||||
device = "/swap/swapfile";
|
||||
@ -31,8 +30,6 @@
|
||||
}
|
||||
];
|
||||
|
||||
desktop.niri.enable = true;
|
||||
|
||||
module = {
|
||||
config = {
|
||||
secureBoot = true;
|
||||
@ -43,10 +40,8 @@
|
||||
};
|
||||
stylix = {
|
||||
enable = true;
|
||||
theme = "rose-pine-moon";
|
||||
theme = "sandcastle";
|
||||
};
|
||||
locale = "uk_UA.UTF-8";
|
||||
};
|
||||
|
||||
locale.ukrainian.enable = true;
|
||||
opentabletdriver.enable = false;
|
||||
}
|
||||
|
@ -1,4 +1,9 @@
|
||||
{inputs, ...}: let
|
||||
{
|
||||
config,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
inherit (config.networking) hostId;
|
||||
disk = "/dev/nvme0n1";
|
||||
in {
|
||||
imports = with inputs; [
|
||||
@ -10,5 +15,5 @@ in {
|
||||
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;};
|
||||
}
|
||||
|
@ -1,4 +1,8 @@
|
||||
{disk, ...}: {
|
||||
{
|
||||
disk,
|
||||
hostId,
|
||||
...
|
||||
}: {
|
||||
type = "disk";
|
||||
device = disk;
|
||||
content = {
|
||||
@ -25,7 +29,7 @@
|
||||
size = "100%";
|
||||
content = {
|
||||
type = "luks";
|
||||
name = "luks-main";
|
||||
name = "luks-" + hostId;
|
||||
initrdUnlock = true;
|
||||
settings.allowDiscards = true;
|
||||
content = {
|
||||
|
@ -2,6 +2,7 @@
|
||||
imports = [
|
||||
# ./laptop
|
||||
];
|
||||
hardware.sensor.iio.enable = true;
|
||||
services = {
|
||||
logind = {
|
||||
lidSwitch = "ignore";
|
||||
|
@ -1,5 +0,0 @@
|
||||
{
|
||||
imports = [
|
||||
./keyboard-fix.nix
|
||||
];
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
{
|
||||
services = {
|
||||
udev.extraHwdb = ''
|
||||
evdev:input:b0011v0001p0001eAB83*
|
||||
KEYBOARD_KEY_d5=sysrq
|
||||
KEYBOARD_KEY_d4=leftmeta
|
||||
KEYBOARD_KEY_95=brightnessdown
|
||||
KEYBOARD_KEY_91=brightnessup
|
||||
'';
|
||||
keyd = {
|
||||
enable = true;
|
||||
keyboards.default = {
|
||||
ids = ["0001:0001"];
|
||||
settings.main = {
|
||||
camera = "brightnessdown";
|
||||
prog1 = "brightnessup";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
imports = [
|
||||
./distributed-build.nix
|
||||
# ./distributed-build.nix
|
||||
];
|
||||
}
|
||||
|
@ -1,31 +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"
|
||||
"uid-range"
|
||||
];
|
||||
system = "x86_64-linux";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
@ -1,10 +1 @@
|
||||
{lib, ...}: {
|
||||
imports = [
|
||||
../../../dunamis/users/user/common.nix
|
||||
../../../dunamis/users/user/programs.nix
|
||||
../../../dunamis/users/user/flatpak.nix
|
||||
];
|
||||
systemd.user.settings.Manager.DefaultEnvironment = {
|
||||
TERMINAL = lib.mkForce "ghostty";
|
||||
};
|
||||
}
|
||||
{flake, ...}: {imports = [flake.modules.shared.user];}
|
||||
|
@ -1,34 +1,41 @@
|
||||
{
|
||||
inputs,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
{inputs, ...}: {
|
||||
imports = with inputs; [
|
||||
self.nixosModules.desktop
|
||||
self.nixosModules.system
|
||||
self.nixosModules.config
|
||||
self.modules.shared.nixos
|
||||
./disko
|
||||
./hardware
|
||||
./misc
|
||||
];
|
||||
|
||||
networking = {
|
||||
networkmanager.enable = true;
|
||||
hostId = "31150fae";
|
||||
hostName = "sarien";
|
||||
};
|
||||
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
environment.memoryAllocator.provider = "mimalloc";
|
||||
system.stateVersion = "25.11";
|
||||
time.timeZone = "Europe/Kyiv";
|
||||
|
||||
desktop.niri.enable = true;
|
||||
services.greetd.settings.initial_session = {
|
||||
|
||||
services.displayManager.autoLogin = {
|
||||
enable = true;
|
||||
user = "user";
|
||||
command = "${pkgs.niri}/bin/niri-session";
|
||||
};
|
||||
|
||||
swapDevices = [
|
||||
{
|
||||
device = "/swap/swapfile";
|
||||
size = 4 * 1024;
|
||||
priority = 100;
|
||||
}
|
||||
{
|
||||
device = "/swap/hibernate";
|
||||
size = 16 * 1024;
|
||||
priority = 1;
|
||||
}
|
||||
];
|
||||
|
||||
module = {
|
||||
config = {
|
||||
laptop.homeRowMods = true;
|
||||
@ -38,12 +45,10 @@
|
||||
};
|
||||
stylix = {
|
||||
enable = true;
|
||||
theme = "rose-pine-moon";
|
||||
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;
|
||||
}
|
||||
|
@ -1,4 +1,9 @@
|
||||
{inputs, ...}: let
|
||||
{
|
||||
config,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
inherit (config.networking) hostId;
|
||||
disk = "/dev/disk/by-id/nvme-eui.0025385911b36714";
|
||||
in {
|
||||
imports = with inputs; [
|
||||
@ -10,5 +15,6 @@ in {
|
||||
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;};
|
||||
}
|
||||
|
@ -1,70 +0,0 @@
|
||||
{disk, ...}: {
|
||||
type = "disk";
|
||||
device = disk;
|
||||
content = {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
ESP = {
|
||||
size = "2G";
|
||||
type = "EF00";
|
||||
content = {
|
||||
type = "filesystem";
|
||||
format = "vfat";
|
||||
mountpoint = "/boot";
|
||||
mountOptions = [
|
||||
"umask=0077"
|
||||
"fmask=0022"
|
||||
"dmask=0022"
|
||||
"noexec"
|
||||
"nosuid"
|
||||
"nodev"
|
||||
];
|
||||
};
|
||||
};
|
||||
luks = {
|
||||
size = "100%";
|
||||
content = {
|
||||
type = "luks";
|
||||
name = "luks-main";
|
||||
initrdUnlock = true;
|
||||
settings.allowDiscards = true;
|
||||
content = {
|
||||
type = "btrfs";
|
||||
extraArgs = ["-f"];
|
||||
subvolumes = {
|
||||
"@nixos-root" = {
|
||||
mountpoint = "/";
|
||||
mountOptions = [
|
||||
"compress=zstd"
|
||||
"noatime"
|
||||
"noexec"
|
||||
];
|
||||
};
|
||||
"@home" = {
|
||||
mountpoint = "/home";
|
||||
mountOptions = [
|
||||
"compress=zstd"
|
||||
"noatime"
|
||||
];
|
||||
};
|
||||
"@storage" = {
|
||||
mountpoint = "/storage";
|
||||
mountOptions = [
|
||||
"compress=zstd"
|
||||
"noatime"
|
||||
];
|
||||
};
|
||||
"@nix" = {
|
||||
mountpoint = "/nix";
|
||||
mountOptions = [
|
||||
"compress-force=zstd"
|
||||
"noatime"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
imports = [
|
||||
./distributed-build.nix
|
||||
# ./distributed-build.nix
|
||||
];
|
||||
}
|
||||
|
@ -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";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
@ -1,7 +1 @@
|
||||
{
|
||||
imports = [
|
||||
../../../dunamis/users/user/common.nix
|
||||
../../../dunamis/users/user/programs.nix
|
||||
../../../dunamis/users/user/flatpak.nix
|
||||
];
|
||||
}
|
||||
{flake, ...}: {imports = [flake.modules.shared.user];}
|
||||
|
@ -1,5 +1,4 @@
|
||||
{
|
||||
imports = [
|
||||
./xdg-userdirs.nix
|
||||
];
|
||||
}
|
||||
|
@ -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";
|
||||
};
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
imports = [
|
||||
./common
|
||||
# ./common
|
||||
./cosmic
|
||||
./gnome
|
||||
./hyprland
|
||||
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
osConfig,
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
@ -13,33 +14,63 @@ in {
|
||||
mkEnableOption "enable gnome desktop";
|
||||
};
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = with pkgs; [
|
||||
gnomeExtensions.alphabetical-app-grid
|
||||
gnomeExtensions.removable-drive-menu
|
||||
gnomeExtensions.caffeine
|
||||
gnomeExtensions.space-bar
|
||||
gnomeExtensions.switcher
|
||||
gnomeExtensions.tactile
|
||||
gnomeExtensions.pano
|
||||
gnomeExtensions.window-is-ready-remover
|
||||
home.packages =
|
||||
(with pkgs.gnomeExtensions; [
|
||||
# extensions
|
||||
alphabetical-app-grid
|
||||
app-icons-taskbar
|
||||
caffeine
|
||||
pano
|
||||
removable-drive-menu
|
||||
space-bar
|
||||
switcher
|
||||
tactile
|
||||
window-is-ready-remover
|
||||
])
|
||||
++ (with pkgs; [
|
||||
# regular packages
|
||||
junction
|
||||
celluloid
|
||||
mission-center
|
||||
dconf
|
||||
pwvucontrol
|
||||
wl-clipboard
|
||||
];
|
||||
]);
|
||||
programs.gnome-shell.extensions = [
|
||||
{package = pkgs.gnomeExtensions.alphabetical-app-grid;}
|
||||
|
||||
{package = pkgs.gnomeExtensions.removable-drive-menu;}
|
||||
{package = pkgs.gnomeExtensions.app-icons-taskbar;}
|
||||
{package = pkgs.gnomeExtensions.caffeine;}
|
||||
{package = pkgs.gnomeExtensions.pano;}
|
||||
{package = pkgs.gnomeExtensions.removable-drive-menu;}
|
||||
{package = pkgs.gnomeExtensions.space-bar;}
|
||||
{package = pkgs.gnomeExtensions.switcher;}
|
||||
{package = pkgs.gnomeExtensions.tactile;}
|
||||
{package = pkgs.gnomeExtensions.pano;}
|
||||
{package = pkgs.gnomeExtensions.window-is-ready-remover;}
|
||||
];
|
||||
gtk = {
|
||||
enable = true;
|
||||
iconTheme = let
|
||||
name =
|
||||
if (lib.strings.hasPrefix "gruvbox" osConfig.module.stylix.theme)
|
||||
then "Gruvbox-Plus-Dark"
|
||||
else if config.stylix.polarity == "dark"
|
||||
then "Papirus-Dark"
|
||||
else "Papirus-Light";
|
||||
package =
|
||||
if (lib.strings.hasPrefix "gruvbox" osConfig.module.stylix.theme)
|
||||
then pkgs.gruvbox-plus-icons
|
||||
else if (lib.strings.hasPrefix "rose-pine" osConfig.module.stylix.theme)
|
||||
then pkgs.papirus-icon-theme.override {color = "indigo";}
|
||||
else if (lib.strings.hasPrefix "nord" osConfig.module.stylix.theme)
|
||||
then pkgs.papirus-icon-theme.override {color = "nordic";}
|
||||
else pkgs.papirus-icon-theme;
|
||||
in {inherit name package;};
|
||||
};
|
||||
qt = {
|
||||
enable = true;
|
||||
platformTheme.name = lib.mkForce "adwaita";
|
||||
};
|
||||
|
||||
dconf.settings = with lib.hm.gvariant; {
|
||||
"org/gnome/desktop/a11y/applications" = {
|
||||
screen-reader-enabled = false;
|
||||
@ -54,12 +85,12 @@ in {
|
||||
|
||||
"org/gnome/desktop/input-sources" = {
|
||||
mru-sources = [(mkTuple ["xkb" "us"])];
|
||||
sources = [(mkTuple ["xkb" "us"]) (mkTuple ["xkb" "ua"]) (mkTuple ["xkb" "us+colemak_dh"])];
|
||||
# sources = [(mkTuple ["xkb" "us"]) (mkTuple ["xkb" "ua"]) (mkTuple ["xkb" "us+colemak_dh"])];
|
||||
xkb-options = ["terminate:ctrl_alt_bksp"];
|
||||
};
|
||||
|
||||
"org/gnome/desktop/interface" = {
|
||||
accent-color = "slate";
|
||||
# accent-color = "slate";
|
||||
clock-show-seconds = true;
|
||||
color-scheme = "prefer-dark";
|
||||
enable-animations = true;
|
||||
@ -100,8 +131,8 @@ in {
|
||||
move-to-workspace-last = ["<Shift><Control><Super>End"];
|
||||
move-to-workspace-left = ["<Control><Super>Left"];
|
||||
move-to-workspace-right = ["<Control><Super>Right"];
|
||||
switch-input-source = ["<Super>Escape"];
|
||||
switch-input-source-backward = ["<Shift><Super>Escape"];
|
||||
switch-input-source = ["<Super>Space"];
|
||||
switch-input-source-backward = ["<Shift><Super>Space"];
|
||||
switch-to-workspace-1 = ["<Super>1"];
|
||||
switch-to-workspace-2 = ["<Super>2"];
|
||||
switch-to-workspace-3 = ["<Super>3"];
|
||||
@ -135,7 +166,18 @@ in {
|
||||
};
|
||||
|
||||
"org/gnome/shell" = {
|
||||
enabled-extensions = ["drive-menu@gnome-shell-extensions.gcampax.github.com" "caffeine@patapon.info" "AlphabeticalAppGrid@stuarthayhurst" "appindicatorsupport@rgcjonas.gmail.com" "user-theme@gnome-shell-extensions.gcampax.github.com" "tactile@lundal.io" "switcher@landau.fi" "pano@elhan.io" "space-bar@luchrioh"];
|
||||
enabled-extensions = [
|
||||
"AlphabeticalAppGrid@stuarthayhurst"
|
||||
"appindicatorsupport@rgcjonas.gmail.com"
|
||||
"aztaskbar@aztaskbar.gitlab.com"
|
||||
"caffeine@patapon.info"
|
||||
"drive-menu@gnome-shell-extensions.gcampax.github.com"
|
||||
"pano@elhan.io"
|
||||
"space-bar@luchrioh"
|
||||
"switcher@landau.fi"
|
||||
"tactile@lundal.io"
|
||||
"user-theme@gnome-shell-extensions.gcampax.github.com"
|
||||
];
|
||||
};
|
||||
|
||||
"org/gnome/shell/app-switcher" = {
|
||||
@ -167,6 +209,21 @@ in {
|
||||
workspace-indicator = true;
|
||||
};
|
||||
|
||||
"org/gnome/shell/extensions/aztaskbar" = with lib.hm.gvariant; {
|
||||
favorites = true;
|
||||
icon-size = 25;
|
||||
icon-style = "REGULAR";
|
||||
# intellihide = true;
|
||||
main-panel-height = mkTuple [true 40];
|
||||
position-offset = 4;
|
||||
prefs-visible-page = "";
|
||||
show-apps-button = mkTuple [true 0];
|
||||
show-panel-activities-button = true;
|
||||
show-weather-by-clock = "LEFT";
|
||||
taskbar-spacing = 2;
|
||||
# update-notifier-project-version = 30;
|
||||
};
|
||||
|
||||
"org/gnome/shell/extensions/tactile" = {
|
||||
background-color = "#${colors.base00}";
|
||||
border-color = "#${colors.base0D}";
|
||||
|
File diff suppressed because it is too large
Load Diff
458
modules/home/desktop/hyprland/hyprland.nix
Normal file
458
modules/home/desktop/hyprland/hyprland.nix
Normal 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
|
||||
'';
|
||||
}
|
@ -14,9 +14,10 @@ in {
|
||||
imports = with inputs; [
|
||||
walker.homeManagerModules.default
|
||||
];
|
||||
options = config.desktop.niri.enable {
|
||||
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;};
|
||||
};
|
||||
}
|
23
modules/home/desktop/hyprland/programs/fuzzel/default.nix
Normal file
23
modules/home/desktop/hyprland/programs/fuzzel/default.nix
Normal 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;
|
||||
};
|
||||
};
|
||||
}
|
94
modules/home/desktop/hyprland/programs/hyprlock/default.nix
Normal file
94
modules/home/desktop/hyprland/programs/hyprlock/default.nix
Normal 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";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
307
modules/home/desktop/hyprland/programs/walker/default.nix
Normal file
307
modules/home/desktop/hyprland/programs/walker/default.nix
Normal 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;
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
331
modules/home/desktop/hyprland/programs/waybar/default.nix
Normal file
331
modules/home/desktop/hyprland/programs/waybar/default.nix
Normal 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;
|
||||
}
|
||||
'';
|
||||
}
|
65
modules/home/desktop/hyprland/services/default.nix
Normal file
65
modules/home/desktop/hyprland/services/default.nix
Normal 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";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
177
modules/home/desktop/hyprland/services/swaync/default.nix
Normal file
177
modules/home/desktop/hyprland/services/swaync/default.nix
Normal 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;
|
||||
}
|
||||
'';
|
||||
}
|
@ -1,21 +1,24 @@
|
||||
{
|
||||
perSystem,
|
||||
osConfig,
|
||||
config,
|
||||
inputs,
|
||||
pkgs,
|
||||
lib,
|
||||
osConfig,
|
||||
# perSystem,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
# inherit (lib.strings) removeSuffix;
|
||||
inherit (lib) mkIf mkEnableOption mkDefault mkForce getExe;
|
||||
inherit (config.lib.stylix) colors;
|
||||
# inherit (osConfig.module.stylix) theme;
|
||||
inherit (lib) mkIf mkEnableOption mkForce getExe;
|
||||
inherit (osConfig.networking) hostName;
|
||||
|
||||
cfg = config.desktop.niri;
|
||||
|
||||
ifLaptop = mkIf (hostName != "dunamis");
|
||||
|
||||
commonArgs = {
|
||||
inherit config inputs lib osConfig pkgs;
|
||||
launcher = getExe pkgs.walker;
|
||||
lockscreen = getExe pkgs.gtklock;
|
||||
};
|
||||
in {
|
||||
imports = with inputs; [
|
||||
walker.homeManagerModules.default
|
||||
@ -30,6 +33,24 @@ in {
|
||||
wpaperd.enable = true;
|
||||
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 = {
|
||||
"org/gnome/desktop/wm/preferences" = {
|
||||
button-layout = "icon:close";
|
||||
@ -42,34 +63,14 @@ in {
|
||||
else lib.mkDefault "prefer-light";
|
||||
};
|
||||
};
|
||||
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 = "gtk3";
|
||||
};
|
||||
|
||||
programs.walker = import ./programs/walker {inherit config inputs pkgs;};
|
||||
programs.waybar = import ./programs/waybar {inherit config colors getExe ifLaptop pkgs;};
|
||||
xdg.configFile.niri = import ./niri.nix {inherit config hostName launcher lockscreen;};
|
||||
services = import ./services {inherit pkgs lockscreen getExe perSystem;};
|
||||
programs.walker = import ./programs/walker commonArgs;
|
||||
programs.waybar = import ./programs/waybar commonArgs;
|
||||
services = import ./services commonArgs;
|
||||
|
||||
home.packages = with pkgs;
|
||||
[
|
||||
@ -79,13 +80,9 @@ in {
|
||||
helvum # pipewire patchbay in rust
|
||||
junction # app chooser
|
||||
loupe # image viewer and editor in rust
|
||||
mission-center # task manager in rust (partly)
|
||||
nautilus # file manager
|
||||
overskride # bluetooth gui in rust
|
||||
papers # pdf reader in rust
|
||||
pika-backup # borg gui in rust
|
||||
pwvucontrol # pipewire gui in rust
|
||||
sonusmix # pipewire routing tool in rust
|
||||
wdisplays # wlroots display configurator
|
||||
]
|
||||
++ [
|
||||
@ -98,6 +95,10 @@ in {
|
||||
];
|
||||
|
||||
xdg = {
|
||||
configFile = {
|
||||
niri = import ./niri.nix commonArgs;
|
||||
"mimeapps.list".force = true;
|
||||
};
|
||||
mime.enable = true;
|
||||
mimeApps = {
|
||||
enable = true;
|
||||
@ -126,12 +127,11 @@ in {
|
||||
};
|
||||
systemd.user = {
|
||||
settings.Manager.DefaultEnvironment = {
|
||||
QT_QPA_PLATFORM = "wayland";
|
||||
DISPLAY = ":123";
|
||||
};
|
||||
targets.tray.Unit.Description = "Home Manager System Tray"; # workaround for udiskie
|
||||
services = let
|
||||
mkGraphicalService = config: graphicalService // config;
|
||||
mkGraphicalService = config: lib.attrsets.recursiveUpdate graphicalService config;
|
||||
graphicalService = {
|
||||
Install.WantedBy = ["niri.service"];
|
||||
Unit = {
|
||||
@ -145,39 +145,50 @@ in {
|
||||
RestartSec = 1;
|
||||
};
|
||||
};
|
||||
in {
|
||||
udiskie = mkGraphicalService {};
|
||||
waybar = mkGraphicalService {};
|
||||
in
|
||||
lib.mkMerge [
|
||||
{
|
||||
copyq = mkGraphicalService {Service.Environment = mkForce "QT_QPA_PLATFORM=wayland";};
|
||||
network-manager-applet = mkGraphicalService {};
|
||||
copyq = mkGraphicalService {
|
||||
Service =
|
||||
graphicalService.Service
|
||||
udiskie = mkGraphicalService {};
|
||||
walker = mkGraphicalService {};
|
||||
waybar = mkGraphicalService {};
|
||||
wpaperd =
|
||||
mkGraphicalService {}
|
||||
// {
|
||||
Environment = mkForce "QT_QPA_PLATFORM=wayland";
|
||||
};
|
||||
Service.TimeoutStopSec = mkForce "1";
|
||||
Service.Restart = mkForce "always";
|
||||
};
|
||||
xwayland-satellite = mkGraphicalService {
|
||||
Service =
|
||||
graphicalService.Service
|
||||
// {
|
||||
Service = {
|
||||
Type = "simple";
|
||||
ExecStart = getExe pkgs.xwayland-satellite + " :123";
|
||||
};
|
||||
};
|
||||
wpaperd = mkGraphicalService {
|
||||
Service =
|
||||
mkDefault graphicalService.Service;
|
||||
};
|
||||
walker = mkGraphicalService {};
|
||||
# gnome-polkit-agent = mkGraphicalService {
|
||||
# Service =
|
||||
# graphicalService.Service
|
||||
# // {
|
||||
# Service = {
|
||||
# Type = "simple";
|
||||
# ExecStart = pkgs.polkit_gnome + "/libexec/polkit-gnome-authentication-agent-1";
|
||||
# };
|
||||
# };
|
||||
}
|
||||
(lib.mkIf (hostName == "morphius") {
|
||||
lisgd = mkGraphicalService {
|
||||
Service = {
|
||||
# Group = "input";
|
||||
Type = "simple";
|
||||
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\"";
|
||||
};
|
||||
};
|
||||
})
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@ -1,12 +1,14 @@
|
||||
{
|
||||
config,
|
||||
hostName,
|
||||
osConfig,
|
||||
launcher,
|
||||
lockscreen,
|
||||
...
|
||||
}: let
|
||||
inherit (config.lib.stylix) colors;
|
||||
inherit (config.stylix) cursor;
|
||||
inherit (osConfig.networking) hostName;
|
||||
|
||||
keyboard =
|
||||
if hostName == "eldrid"
|
||||
then "chromeos"
|
||||
@ -91,15 +93,15 @@ in {
|
||||
in ''
|
||||
environment {
|
||||
DISPLAY ":123"
|
||||
QT_QPA_PLATFORMTHEME "gtk3"
|
||||
CLUTTER_BACKEND "wayland"
|
||||
GDK_BACKEND "wayland"
|
||||
MOZ_ENABLE_WAYLAND "1"
|
||||
MOZ_WEBRENDER "1"
|
||||
GDK_BACKEND "wayland"
|
||||
QT_QPA_PLATFORM "wayland"
|
||||
XDG_SESSION_TYPE "wayland"
|
||||
CLUTTER_BACKEND "wayland"
|
||||
SDL_VIDEODRIVER "wayland"
|
||||
XDG_SESSION_TYPE "wayland"
|
||||
}
|
||||
|
||||
input {
|
||||
keyboard {
|
||||
xkb {
|
||||
@ -108,53 +110,23 @@ in {
|
||||
}
|
||||
repeat-delay 200
|
||||
repeat-rate 50
|
||||
track-layout "global"
|
||||
track-layout "window"
|
||||
}
|
||||
touchpad {
|
||||
// off
|
||||
tap
|
||||
// dwt
|
||||
// dwtp
|
||||
natural-scroll
|
||||
accel-speed 0.2
|
||||
accel-profile "flat"
|
||||
// scroll-method "two-finger"
|
||||
// disabled-on-external-mouse
|
||||
}
|
||||
mouse {
|
||||
// off
|
||||
// natural-scroll
|
||||
accel-speed 0.0
|
||||
accel-profile "flat"
|
||||
// scroll-method "no-scroll"
|
||||
}
|
||||
touch {
|
||||
map-to-output "eDP-1"
|
||||
}
|
||||
warp-mouse-to-focus
|
||||
// focus-follows-mouse
|
||||
}
|
||||
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
|
||||
workspace-auto-back-and-forth
|
||||
}
|
||||
|
||||
cursor {
|
||||
@ -162,51 +134,62 @@ in {
|
||||
xcursor-size ${toString cursor.size}
|
||||
}
|
||||
|
||||
hotkey-overlay {
|
||||
skip-at-startup
|
||||
}
|
||||
|
||||
prefer-no-csd
|
||||
|
||||
screenshot-path "${xdgPics}/screenshots/screenshot-%Y-%m-%d-%H-%M-%S.png"
|
||||
|
||||
animations {
|
||||
slowdown 0.5
|
||||
}
|
||||
|
||||
layout {
|
||||
gaps 3
|
||||
|
||||
// background-color "#${colors.base02}"
|
||||
background-color "transparent"
|
||||
center-focused-column "never" // "on-overflow"
|
||||
default-column-width { proportion 1.0; }
|
||||
|
||||
preset-column-widths {
|
||||
proportion 0.33333
|
||||
proportion 0.66667
|
||||
}
|
||||
|
||||
background-color "transparent"
|
||||
// default-column-width { proportion 0.9; }
|
||||
default-column-width { proportion 0.5; }
|
||||
struts {
|
||||
left 36
|
||||
right 36
|
||||
}
|
||||
|
||||
tab-indicator {
|
||||
active-color "#${colors.base04}"
|
||||
inactive-color "#${colors.base03}"
|
||||
corner-radius 4
|
||||
gap 6
|
||||
corner-radius 6
|
||||
gap 3
|
||||
gaps-between-tabs 3
|
||||
length total-proportion=0.3
|
||||
// length total-proportion=0.3
|
||||
place-within-column
|
||||
position "left"
|
||||
width 6
|
||||
}
|
||||
focus-ring {
|
||||
off
|
||||
width 3
|
||||
active-gradient from="#${colors.base0D}" to="#${colors.base0F}" angle=40 relative-to="workspace-view"
|
||||
inactive-color "#${colors.base03}"
|
||||
}
|
||||
border {
|
||||
width 3
|
||||
width 1
|
||||
active-color "#${colors.base0D}"
|
||||
inactive-color "#${colors.base03}"
|
||||
|
||||
urgent-color "#${colors.base08}"
|
||||
}
|
||||
struts {
|
||||
left 33
|
||||
right 33
|
||||
border {
|
||||
off
|
||||
width 1
|
||||
active-color "#${colors.base0D}"
|
||||
inactive-color "#${colors.base03}"
|
||||
urgent-color "#${colors.base08}"
|
||||
}
|
||||
}
|
||||
|
||||
prefer-no-csd
|
||||
|
||||
hotkey-overlay {
|
||||
skip-at-startup
|
||||
}
|
||||
window-rule {
|
||||
geometry-corner-radius 12
|
||||
clip-to-geometry true
|
||||
@ -223,31 +206,22 @@ in {
|
||||
active-color "#${colors.base0F}"
|
||||
inactive-color "#${colors.base03}"
|
||||
}
|
||||
shadow {
|
||||
on
|
||||
color "#${colors.base0F}"
|
||||
inactive-color "#${colors.base03}"
|
||||
}
|
||||
}
|
||||
|
||||
// Make the wallpaper stationary, rather than moving with workspaces.
|
||||
layer-rule {
|
||||
// This is for swaybg; change for other wallpaper tools.
|
||||
// Find the right namespace by running niri msg layers.
|
||||
match namespace="^wallpaper$"
|
||||
match namespace="^wpaperd.*$"
|
||||
place-within-backdrop true
|
||||
}
|
||||
|
||||
// Optionally, disable the workspace shadows in the overview.
|
||||
overview {
|
||||
workspace-shadow {
|
||||
off
|
||||
}
|
||||
}
|
||||
screenshot-path "${xdgPics}/screenshots/screenshot-%Y-%m-%d-%H-%M-%S.png"
|
||||
layer-rule {
|
||||
match namespace="waybar"
|
||||
match at-startup=true
|
||||
|
||||
animations {
|
||||
slowdown 0.8
|
||||
opacity 0.99 // fixes the black fill
|
||||
}
|
||||
|
||||
window-rule {
|
||||
@ -262,6 +236,7 @@ in {
|
||||
}
|
||||
window-rule {
|
||||
match app-id="re.sonny.Junction"
|
||||
match app-id="com.github.hluk.copyq"
|
||||
open-floating true
|
||||
open-focused true
|
||||
}
|
||||
@ -275,6 +250,7 @@ in {
|
||||
match app-id=r#"^org\.keepassxc\.KeePassXC$"#
|
||||
match app-id=r#"^org\.gnome\.World\.Secrets$"#
|
||||
match app-id=r#"^Bitwarden$"#
|
||||
match app-id="io.github.kukuruzka165.materialgram"
|
||||
match app-id="org.telegram.desktop"
|
||||
match app-id="org.signal.Signal"
|
||||
match app-id="WebCord"
|
||||
@ -282,6 +258,7 @@ in {
|
||||
block-out-from "screencast"
|
||||
}
|
||||
|
||||
|
||||
binds {
|
||||
Mod+Shift+Slash { show-hotkey-overlay; }
|
||||
|
||||
@ -293,6 +270,7 @@ in {
|
||||
Mod+Shift+T { set-column-width "67%"; }
|
||||
Mod+V { toggle-column-tabbed-display; }
|
||||
Mod+G { switch-focus-between-floating-and-tiling; }
|
||||
Mod+X { spawn "pkill" "-SIGUSR1" "waybar"; } // hide/show waybar
|
||||
|
||||
Mod+Ctrl+Comma { consume-or-expel-window-left; }
|
||||
Mod+Ctrl+Period { consume-or-expel-window-right; }
|
||||
@ -318,7 +296,7 @@ in {
|
||||
Mod+BackSpace repeat=false { spawn "${launcher}"; }
|
||||
Mod+A repeat=false { spawn "${launcher}"; }
|
||||
Mod+Ctrl+L repeat=false { spawn "${lockscreen}"; }
|
||||
Mod+Ctrl+V repeat=false { spawn "copyq" "toggle"; }
|
||||
Mod+Ctrl+V repeat=false { spawn "copyq" "menu"; }
|
||||
|
||||
Mod+Shift+W repeat=false { spawn "walker" "-m" "windows"; }
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
config,
|
||||
mkDefault,
|
||||
lib,
|
||||
}: {
|
||||
enable = true;
|
||||
settings = {
|
||||
@ -15,7 +15,7 @@
|
||||
match-mode = "fuzzy";
|
||||
icon-theme = config.dconf.settings."org/gnome/desktop/interface".icon-theme;
|
||||
};
|
||||
border = mkDefault {
|
||||
border = lib.mkDefault {
|
||||
width = 3;
|
||||
radius = 12;
|
||||
};
|
||||
|
@ -146,32 +146,30 @@
|
||||
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";
|
||||
margins = {
|
||||
start = 3;
|
||||
top = 3;
|
||||
end = 3;
|
||||
bottom = 3;
|
||||
};
|
||||
};
|
||||
scroll = {
|
||||
overlay_scrolling = true;
|
||||
list = {
|
||||
margins = {
|
||||
bottom = 8;
|
||||
top = 4;
|
||||
start = 8;
|
||||
end = 8;
|
||||
bottom = 3;
|
||||
top = 0;
|
||||
start = 3;
|
||||
end = 3;
|
||||
};
|
||||
item = {
|
||||
icon.theme = "${config.gtk.iconTheme.name}";
|
||||
spacing = 4;
|
||||
spacing = 3;
|
||||
activation_label = {
|
||||
x_align = 0.5;
|
||||
y_align = 0.5;
|
||||
@ -232,8 +230,8 @@
|
||||
#window {
|
||||
background: @base00;
|
||||
color: @base05;
|
||||
border-radius: 20px;
|
||||
border: 3px solid @base0D;
|
||||
border-radius: 12px;
|
||||
border: 1px solid @base0D;
|
||||
}
|
||||
|
||||
#box {
|
||||
@ -242,7 +240,7 @@
|
||||
|
||||
#search {
|
||||
background: @base01;
|
||||
border-radius: 12px 12px 6px 6px;
|
||||
border-radius: 9px;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
@ -251,12 +249,12 @@
|
||||
#typeahead {
|
||||
background: none;
|
||||
box-shadow: none;
|
||||
border-radius: 12px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
#input > *:first-child,
|
||||
#typeahead > *:first-child {
|
||||
margin-right: 12px;
|
||||
margin-right: 3px;
|
||||
border-radius: 0px;
|
||||
}
|
||||
|
||||
@ -269,8 +267,8 @@
|
||||
}
|
||||
|
||||
#list {
|
||||
padding: 8px;
|
||||
border-radius: 6px 6px 12px 12px;
|
||||
padding: 3px;
|
||||
border-radius: 9px;
|
||||
background: @base01;
|
||||
}
|
||||
|
||||
@ -281,7 +279,7 @@
|
||||
child:selected,
|
||||
child:hover {
|
||||
box-shadow: none;
|
||||
border-radius: 8px;
|
||||
border-radius: 6px;
|
||||
background: @base02;
|
||||
}
|
||||
|
||||
|
@ -1,84 +1,54 @@
|
||||
{
|
||||
colors,
|
||||
config,
|
||||
getExe,
|
||||
ifLaptop,
|
||||
lib,
|
||||
osConfig,
|
||||
pkgs,
|
||||
launcher,
|
||||
...
|
||||
}: {
|
||||
}: let
|
||||
inherit (config.lib.stylix) colors;
|
||||
|
||||
ifLaptop = lib.mkIf (osConfig.networking.hostName != "dunamis");
|
||||
in {
|
||||
enable = true;
|
||||
systemd = {
|
||||
enable = true;
|
||||
target = "graphical-session.target";
|
||||
};
|
||||
settings = {
|
||||
bar-0 = {
|
||||
# layer = "top";
|
||||
settings.bottom = {
|
||||
position = "bottom";
|
||||
height = 24;
|
||||
spacing = 6;
|
||||
margin-left = 33 + 3;
|
||||
margin-right = 33 + 3;
|
||||
margin-bottom = 3;
|
||||
reload_style_on_change = true;
|
||||
height = 33;
|
||||
spacing = 0;
|
||||
# margin-left = 36 + 3;
|
||||
# margin-right = 36 + 3;
|
||||
# margin-bottom = 3;
|
||||
modules-left = [
|
||||
"niri/language"
|
||||
"niri/workspaces"
|
||||
"custom/launcher"
|
||||
"wlr/taskbar"
|
||||
# "privacy"
|
||||
];
|
||||
modules-center = ["clock"];
|
||||
modules-right = [
|
||||
(ifLaptop "group/laptop")
|
||||
"wireplumber"
|
||||
"tray"
|
||||
"privacy"
|
||||
(ifLaptop "power-profiles-daemon")
|
||||
"idle_inhibitor"
|
||||
"custom/notification"
|
||||
"niri/workspaces"
|
||||
"niri/language"
|
||||
];
|
||||
"niri/workspaces" = {
|
||||
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" = {
|
||||
format = "{}";
|
||||
format-en = "🇺🇸";
|
||||
format-uk = "🇺🇦";
|
||||
};
|
||||
"custom/separator" = {
|
||||
format = "";
|
||||
interval = "once";
|
||||
tooltip = false;
|
||||
};
|
||||
"group/laptop" = {
|
||||
orientation = "inherit";
|
||||
modules = [
|
||||
"battery"
|
||||
"backlight"
|
||||
"battery"
|
||||
"power-profiles-daemon"
|
||||
];
|
||||
};
|
||||
"backlight" = {
|
||||
format = "{icon} {percent}%";
|
||||
backlight = {
|
||||
format = "{percent}% {icon}";
|
||||
format-icons = [
|
||||
""
|
||||
""
|
||||
@ -89,22 +59,22 @@
|
||||
""
|
||||
];
|
||||
};
|
||||
"idle_inhibitor" = {
|
||||
idle_inhibitor = {
|
||||
format = "{icon}";
|
||||
format-icons = {
|
||||
activated = "";
|
||||
deactivated = "";
|
||||
};
|
||||
};
|
||||
"tray" = {
|
||||
icon-size = 20;
|
||||
tray = {
|
||||
icon-size = 16;
|
||||
spacing = 6;
|
||||
};
|
||||
"clock" = {
|
||||
clock = {
|
||||
interval = 1;
|
||||
format = "{:%B %d - %H:%M - %A}";
|
||||
tooltip = false;
|
||||
# tooltip-format = "{%y.%m.%d - %B %d, %A}";
|
||||
format = "{:%R}";
|
||||
tooltip = true;
|
||||
tooltip-format = "{:%B %d, %A}";
|
||||
};
|
||||
battery = {
|
||||
states = {
|
||||
@ -112,32 +82,36 @@
|
||||
warning = 30;
|
||||
critical = 15;
|
||||
};
|
||||
format = "{icon} {capacity}%";
|
||||
format-full = " {capacity}%";
|
||||
format-charging = " {capacity}%";
|
||||
format-plugged = " {capacity}%";
|
||||
format = "{capacity}% {icon}";
|
||||
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 = "🎵";
|
||||
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}%)'';
|
||||
};
|
||||
status-icons = {paused = "⏸";};
|
||||
network = {
|
||||
format = "{bandwidthDownBits} | {bandwidthUpBits} ";
|
||||
interval = 3;
|
||||
tooltip = false;
|
||||
};
|
||||
"upower" = {
|
||||
cpu = {
|
||||
format = "{usage}% ";
|
||||
interval = 3;
|
||||
};
|
||||
upower = {
|
||||
icon-size = 16;
|
||||
format = "{percentage}";
|
||||
hide-if-empty = true;
|
||||
tooltip = true;
|
||||
tooltip-spacing = 20;
|
||||
};
|
||||
"power-profiles-daemon" = {
|
||||
power-profiles-daemon = {
|
||||
format = "{icon}";
|
||||
tooltip-format = "Power profile: {profile}\nDriver: {driver}";
|
||||
tooltip = true;
|
||||
@ -148,14 +122,19 @@
|
||||
power-saver = "";
|
||||
};
|
||||
};
|
||||
"wireplumber" = {
|
||||
wireplumber = {
|
||||
scroll-step = 3;
|
||||
format = "{icon} {volume}%";
|
||||
format = "{volume}% {icon}";
|
||||
format-muted = "";
|
||||
format-icons = ["" "" ""];
|
||||
on-click = getExe pkgs.pwvucontrol;
|
||||
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}";
|
||||
@ -173,7 +152,7 @@
|
||||
escape = true;
|
||||
};
|
||||
"privacy" = {
|
||||
icon-spacing = 2;
|
||||
icon-spacing = 0;
|
||||
icon-size = 16;
|
||||
transition-duration = 250;
|
||||
screenshare = {
|
||||
@ -188,143 +167,371 @@
|
||||
};
|
||||
};
|
||||
"wlr/taskbar" = {
|
||||
format = "{icon}";
|
||||
icon-size = 20;
|
||||
format = "{icon} {name}";
|
||||
icon-size = 16;
|
||||
icon-theme = "${config.dconf.settings."org/gnome/desktop/interface".icon-theme}";
|
||||
tooltip-format = "{title}";
|
||||
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 = ''
|
||||
@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};
|
||||
"niri/language" = {
|
||||
format = "{}";
|
||||
format-en = "🇺🇸";
|
||||
format-uk = "🇺🇦";
|
||||
};
|
||||
"group/laptop" = {
|
||||
orientation = "inherit";
|
||||
modules = [
|
||||
"backlight"
|
||||
"battery"
|
||||
"power-profiles-daemon"
|
||||
];
|
||||
};
|
||||
backlight = {
|
||||
format = "{percent}% {icon}";
|
||||
format-icons = [
|
||||
""
|
||||
""
|
||||
""
|
||||
""
|
||||
""
|
||||
""
|
||||
""
|
||||
];
|
||||
};
|
||||
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-size: 100%;
|
||||
font-size: 16px;
|
||||
}
|
||||
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; */
|
||||
|
||||
.modules-left, .modules-center, .modules-right, window#waybar {
|
||||
background-color: @base00;
|
||||
border-radius: 24px;
|
||||
border: 3px solid @base0D;
|
||||
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 {
|
||||
background: @base01;
|
||||
border: 1px solid @base0E;
|
||||
border: 1px solid @base0D;
|
||||
border-radius: 16px;
|
||||
padding: 2em;
|
||||
}
|
||||
|
||||
tooltip label {
|
||||
color: @base05;
|
||||
}
|
||||
|
||||
button {
|
||||
box-shadow: inset 0 -3px transparent;
|
||||
border-radius: 16px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
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,
|
||||
#battery,
|
||||
#clock,
|
||||
#battery,
|
||||
#backlight,
|
||||
#cpu,
|
||||
#custom-launcher,
|
||||
#custom-notification,
|
||||
#idle_inhibitor,
|
||||
#language,
|
||||
#memory,
|
||||
#network,
|
||||
#power-profiles-daemon,
|
||||
#privacy,
|
||||
#privacy-item,
|
||||
#taskbar button,
|
||||
#taskbar,
|
||||
#tray button,
|
||||
#tray,
|
||||
#wireplumber,
|
||||
#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,
|
||||
#idle_inhibitor,
|
||||
#power-profiles-daemon,
|
||||
#privacy-item,
|
||||
#custom-separator {
|
||||
#wireplumber {
|
||||
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;
|
||||
}
|
||||
|
||||
#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 {
|
||||
padding: 0 0.3em;
|
||||
margin: 0 0.2em;
|
||||
padding: 0 0.4em;
|
||||
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 {
|
||||
box-shadow: transparent;
|
||||
background-color: @base0D;
|
||||
color: @base00;
|
||||
}
|
||||
#taskbar.empty,
|
||||
window#empty {
|
||||
|
||||
#taskbar.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;
|
||||
|
||||
#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;
|
||||
}
|
||||
'';
|
||||
}
|
||||
|
@ -1,24 +1,26 @@
|
||||
{
|
||||
getExe,
|
||||
perSystem,
|
||||
lib,
|
||||
osConfig,
|
||||
pkgs,
|
||||
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;
|
||||
playerctld.enable = true;
|
||||
swaync = import ./swaync;
|
||||
swayosd.enable = true;
|
||||
udiskie.enable = true;
|
||||
wpaperd.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;
|
||||
@ -28,19 +30,8 @@
|
||||
night = 3000;
|
||||
};
|
||||
};
|
||||
swayosd = {
|
||||
enable = true;
|
||||
topMargin = 0.8;
|
||||
};
|
||||
udiskie = {
|
||||
enable = true;
|
||||
automount = false;
|
||||
notify = true;
|
||||
tray = "auto";
|
||||
};
|
||||
hypridle = {
|
||||
enable = true;
|
||||
settings = {
|
||||
gnome-keyring.components = ["secrets"];
|
||||
hypridle.settings = {
|
||||
general = {
|
||||
before_sleep_cmd = "loginctl lock-session";
|
||||
lock_cmd = "pidof ${lockscreen} || ${lockscreen}";
|
||||
@ -53,9 +44,14 @@
|
||||
}
|
||||
{
|
||||
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";
|
||||
};
|
||||
}
|
||||
|
113
modules/home/desktop/niri/services/kanshi/default.nix
Normal file
113
modules/home/desktop/niri/services/kanshi/default.nix
Normal 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";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
@ -17,17 +17,17 @@
|
||||
control-center-layer = "overlay";
|
||||
|
||||
# Notification settings
|
||||
positionX = "right";
|
||||
positionX = "left";
|
||||
positionY = "top";
|
||||
notification-2fa-action = true;
|
||||
notification-inline-replies = false;
|
||||
notification-icon-size = 32;
|
||||
notification-icon-size = 48;
|
||||
notification-body-image-height = 100;
|
||||
notification-body-image-width = 200;
|
||||
notification-window-width = 400;
|
||||
|
||||
# Control center settings
|
||||
control-center-positionX = "right";
|
||||
control-center-positionX = "left";
|
||||
control-center-positionY = "top";
|
||||
control-center-width = 500;
|
||||
control-center-exclusive-zone = true;
|
||||
@ -59,8 +59,12 @@
|
||||
};
|
||||
};
|
||||
};
|
||||
# TODO: disable stylix, redo everything
|
||||
style = ''
|
||||
/*** Global ***/
|
||||
* {
|
||||
all: unset;
|
||||
}
|
||||
|
||||
progress,
|
||||
progressbar,
|
||||
trough {
|
||||
@ -70,20 +74,19 @@
|
||||
.app-icon,
|
||||
.image {
|
||||
-gtk-icon-effect: none;
|
||||
padding-right: 0.5rem;
|
||||
}
|
||||
|
||||
.notification-action {
|
||||
border-radius: 12px;
|
||||
margin: 0.5rem;
|
||||
border-radius: 9px;
|
||||
margin: 3px;
|
||||
}
|
||||
|
||||
.close-button {
|
||||
margin: 24px;
|
||||
padding: 0.2rem;
|
||||
border-radius: 16px;
|
||||
margin: 12px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
/*** Notifications ***/
|
||||
.notification-group.collapsed
|
||||
.notification-row:not(:last-child)
|
||||
.notification-action,
|
||||
@ -103,21 +106,21 @@
|
||||
.notification.normal,
|
||||
.notification.critical,
|
||||
.control-center {
|
||||
margin: 16px;
|
||||
border-radius: 7px;
|
||||
border-radius: 12px;
|
||||
margin: 6px;
|
||||
}
|
||||
|
||||
.floating-notifications,
|
||||
.notification-content {
|
||||
border-radius: 7px;
|
||||
padding: 0.5rem;
|
||||
margin: 3px;
|
||||
border-radius: 9px;
|
||||
}
|
||||
|
||||
.control-center-list {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
/*** Widgets ***/
|
||||
/* Title widget */
|
||||
.widget-title {
|
||||
margin: 0.5rem;
|
||||
}
|
||||
@ -127,11 +130,10 @@
|
||||
}
|
||||
|
||||
.widget-title > button {
|
||||
border-radius: 16px;
|
||||
border-radius: 9px;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
/* DND Widget */
|
||||
.widget-dnd {
|
||||
margin: 0.5rem;
|
||||
}
|
||||
@ -141,23 +143,23 @@
|
||||
}
|
||||
|
||||
.widget-dnd > switch {
|
||||
border-radius: 16px;
|
||||
border-radius: 9px;
|
||||
}
|
||||
|
||||
.widget-dnd > switch slider {
|
||||
border-radius: 16px;
|
||||
padding: 0.25rem;
|
||||
margin: 3px;
|
||||
border-radius: 6px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
/* Mpris widget */
|
||||
.widget-mpris .widget-mpris-player {
|
||||
border-radius: 16px;
|
||||
border-radius: 12px;
|
||||
margin: 0.5rem;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
.widget-mpris .widget-mpris-player .widget-mpris-album-art {
|
||||
border-radius: 16px;
|
||||
border-radius: 9px;
|
||||
}
|
||||
|
||||
.widget-mpris .widget-mpris-player .widget-mpris-title {
|
||||
@ -169,9 +171,8 @@
|
||||
}
|
||||
|
||||
.widget-mpris .widget-mpris-player > box > button {
|
||||
border: 1px solid transparent;
|
||||
border-radius: 16px;
|
||||
padding: 0.25rem;
|
||||
border-radius: 6px;
|
||||
padding: 3px;
|
||||
}
|
||||
'';
|
||||
}
|
||||
|
@ -62,23 +62,25 @@ in {
|
||||
};
|
||||
languages = {
|
||||
language-server = {
|
||||
clangd.command = "${pkgs.clang-tools}/bin/clangd";
|
||||
# markdown-oxide.command = getExe pkgs.markdown-oxide;
|
||||
# nil.command = getExe pkgs.nil;
|
||||
nixd.command = getExe pkgs.nixd;
|
||||
# pyright.command = getExe pkgs.pyright;
|
||||
# pyright.args = ["-"];
|
||||
ruff.command = getExe pkgs.ruff;
|
||||
ruff.args = ["server"];
|
||||
# nixd.command = getExe pkgs.nixd;
|
||||
# pyright = {
|
||||
# command = getExe pkgs.pyright;
|
||||
# args = ["-"];
|
||||
# };
|
||||
# rust-analyzer.command = getExe pkgs.rust-analyzer;
|
||||
# texlab.command = getExe pkgs.texlab;
|
||||
tinymist.command = getExe pkgs.tinymist;
|
||||
zk = {
|
||||
command = getExe pkgs.zk;
|
||||
args = ["lsp"];
|
||||
bash-language-server = {
|
||||
command = getExe pkgs.bash-language-server;
|
||||
environment = {
|
||||
"SHELLCHECK_PATH" = getExe pkgs.shellcheck;
|
||||
"SHFMT_PATH" = getExe pkgs.shfmt;
|
||||
};
|
||||
fsac.command = getExe pkgs.fsautocomplete;
|
||||
fsac.config = {
|
||||
};
|
||||
clangd.command = "${pkgs.clang-tools}/bin/clangd";
|
||||
fsac = {
|
||||
command = getExe pkgs.fsautocomplete;
|
||||
config = {
|
||||
# editor.formatOnSave = true;
|
||||
AutomaticWorkspaceInit = true;
|
||||
FSharp.ExternalAutocomplete = true;
|
||||
@ -87,19 +89,30 @@ in {
|
||||
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 = [
|
||||
{
|
||||
name = "nix";
|
||||
auto-format = true;
|
||||
formatter.command = getExe pkgs.alejandra;
|
||||
language-servers = ["nixd"];
|
||||
language-servers = ["nil"];
|
||||
}
|
||||
# {
|
||||
# name = "latex";
|
||||
# auto-format = true;
|
||||
# formatter.command = "${pkgs.texlivePackages.latexindent}/bin/latexindent";
|
||||
# language-servers = ["texlab"];
|
||||
# }
|
||||
{
|
||||
name = "typst";
|
||||
auto-format = true;
|
||||
@ -109,23 +122,21 @@ in {
|
||||
{
|
||||
name = "markdown";
|
||||
# auto-format = true;
|
||||
# formatter.command = "${pkgs.comrak}/bin/comrak";
|
||||
language-servers = ["zk" "markdown-oxide"];
|
||||
}
|
||||
{
|
||||
name = "c";
|
||||
auto-format = true;
|
||||
formatter.command = "${pkgs.clang-tools}/bin/clang-format";
|
||||
# formatter.command = "${pkgs.clang-tools}/bin/clang-format";
|
||||
}
|
||||
{
|
||||
name = "cpp";
|
||||
auto-format = true;
|
||||
formatter.command = "${pkgs.clang-tools}/bin/clang-format";
|
||||
# formatter.command = "${pkgs.clang-tools}/bin/clang-format";
|
||||
}
|
||||
{
|
||||
name = "fsharp";
|
||||
auto-format = true;
|
||||
# formatter.command = getExe pkgs.fantomas;
|
||||
language-servers = ["fsac"];
|
||||
scope = "source.fs";
|
||||
roots = ["fsproj" "sln" ".git"];
|
||||
@ -136,6 +147,25 @@ in {
|
||||
# language-servers = ["rust-analyzer"];
|
||||
# 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";
|
||||
auto-format = true;
|
||||
|
@ -15,11 +15,11 @@ in {
|
||||
programs.zed-editor = {
|
||||
enable = true;
|
||||
extensions = [
|
||||
"nix"
|
||||
"bash"
|
||||
"fsharp"
|
||||
# "latex"
|
||||
"typst"
|
||||
"justfile"
|
||||
"nix"
|
||||
"typst"
|
||||
];
|
||||
userSettings = {
|
||||
vim_mode = true;
|
||||
@ -35,30 +35,29 @@ in {
|
||||
};
|
||||
"Nix" = {
|
||||
language-servers = [
|
||||
"!nil"
|
||||
"nixd"
|
||||
"nil"
|
||||
];
|
||||
formatter = {
|
||||
external.command = getExe pkgs.alejandra;
|
||||
};
|
||||
};
|
||||
"Rust" = {
|
||||
formatter = {
|
||||
external = {
|
||||
command = getExe pkgs.rustfmt;
|
||||
arguments = ["--edition" "2021"];
|
||||
};
|
||||
};
|
||||
# formatter = {
|
||||
# external.command = getExe pkgs.alejandra;
|
||||
# };
|
||||
};
|
||||
# "Rust" = {
|
||||
# formatter = {
|
||||
# external = {
|
||||
# command = getExe pkgs.rustfmt;
|
||||
# arguments = ["--edition" "2021"];
|
||||
# };
|
||||
# };
|
||||
# };
|
||||
"typst" = {
|
||||
language-servers = ["tinymist"];
|
||||
format_on_save = "on";
|
||||
formatter = {
|
||||
external = {
|
||||
command = getExe pkgs.typstyle;
|
||||
arguments = ["-i" "{buffer_path}"];
|
||||
};
|
||||
};
|
||||
# formatter = {
|
||||
# external = {
|
||||
# command = getExe pkgs.typstyle;
|
||||
# arguments = ["-i" "{buffer_path}"];
|
||||
# };
|
||||
# };
|
||||
};
|
||||
"Python" = {
|
||||
format_on_save = "on";
|
||||
@ -73,6 +72,15 @@ in {
|
||||
};
|
||||
};
|
||||
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;
|
||||
@ -91,32 +99,32 @@ in {
|
||||
path = "${pkgs.clang-tools}/bin/clangd";
|
||||
};
|
||||
};
|
||||
rust-analyzer = {
|
||||
binary = {
|
||||
arguments = [];
|
||||
path = getExe pkgs.rust-analyzer;
|
||||
};
|
||||
};
|
||||
# rust-analyzer = {
|
||||
# binary = {
|
||||
# arguments = [];
|
||||
# path = getExe pkgs.rust-analyzer;
|
||||
# };
|
||||
# };
|
||||
ruff = {
|
||||
binary = {
|
||||
arguments = [];
|
||||
path = getExe pkgs.ruff;
|
||||
};
|
||||
};
|
||||
nixd = {
|
||||
binary = {
|
||||
arguments = [];
|
||||
path = getExe pkgs.nixd;
|
||||
};
|
||||
initialization_options.formatting.command = [(getExe pkgs.alejandra)];
|
||||
};
|
||||
# nil = {
|
||||
# nixd = {
|
||||
# binary = {
|
||||
# arguments = [];
|
||||
# path = getExe pkgs.nil;
|
||||
# path = getExe pkgs.nixd;
|
||||
# };
|
||||
# initialization_options.formatting.command = [(getExe pkgs.alejandra)];
|
||||
# };
|
||||
nil = {
|
||||
binary = {
|
||||
arguments = [];
|
||||
path = getExe pkgs.nil;
|
||||
};
|
||||
settings.formatting.command = [(getExe pkgs.alejandra)];
|
||||
};
|
||||
# texlab = {
|
||||
# binary = {
|
||||
# arguments = [];
|
||||
@ -129,6 +137,16 @@ in {
|
||||
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 = {
|
||||
diagnostics = false;
|
||||
|
@ -1,6 +1,7 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
perSystem,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
@ -12,6 +13,7 @@ in {
|
||||
config = mkIf cfg.enable {
|
||||
programs.ghostty = {
|
||||
enable = true;
|
||||
package = perSystem.ghostty.ghostty;
|
||||
settings = {
|
||||
gtk-single-instance = true;
|
||||
window-decoration = "client";
|
||||
|
@ -1,117 +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.kernel.sysctl = {
|
||||
"dev.tty.ldisc_autoload" = 0;
|
||||
"fs.protected_fifos" = 2;
|
||||
"fs.protected_regular" = 2;
|
||||
"fs.suid_dumpable" = 0;
|
||||
"kernel.kptr_restrict" = 2;
|
||||
# "kernel.modules_disabled" = 1;
|
||||
"kernel.sysrq" = 0;
|
||||
"kernel.unprivileged_bpf_disabled" = 1;
|
||||
"net.ipv4.conf.all.forwarding" = 0;
|
||||
"net.ipv4.conf.all.log_martians" = 1;
|
||||
"net.ipv4.conf.all.rp_filter" = 1;
|
||||
"net.ipv4.conf.all.send_redirects" = 0;
|
||||
"net.ipv4.conf.default.accept_redirects" = 0;
|
||||
"net.ipv4.conf.default.log_martians" = 1;
|
||||
"net.ipv6.conf.all.accept_redirects" = 0;
|
||||
"net.ipv6.conf.default.accept_redirects" = 0;
|
||||
};
|
||||
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"];
|
||||
}
|
@ -16,7 +16,7 @@ in {
|
||||
gcr_4
|
||||
libsecret
|
||||
];
|
||||
# programs.seahorse.enable = true;
|
||||
programs.seahorse.enable = true;
|
||||
services.gnome.gnome-keyring.enable = true;
|
||||
xdg.portal.config.common = {
|
||||
"org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
|
||||
|
@ -24,7 +24,10 @@ in {
|
||||
services.displayManager.cosmic-greeter.enable = true;
|
||||
})
|
||||
(mkIf (cfg.displayManager == "gdm") {
|
||||
services.xserver.displayManager.gdm.enable = true;
|
||||
services.displayManager.gdm = {
|
||||
enable = true;
|
||||
wayland = true;
|
||||
};
|
||||
})
|
||||
(mkIf (cfg.displayManager == "greetd") {
|
||||
programs.regreet.enable = true;
|
||||
|
@ -1,10 +1,10 @@
|
||||
{
|
||||
imports = [
|
||||
./common
|
||||
./cosmic.nix
|
||||
./gnome.nix
|
||||
./hyprland.nix
|
||||
./niri.nix
|
||||
./plasma.nix
|
||||
./cosmic
|
||||
./gnome
|
||||
./hyprland
|
||||
./niri
|
||||
./plasma
|
||||
];
|
||||
}
|
||||
|
@ -1,22 +0,0 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.desktop.gnome;
|
||||
in {
|
||||
options = {
|
||||
desktop.gnome.enable =
|
||||
mkEnableOption "enable gnome desktop";
|
||||
};
|
||||
config = mkIf cfg.enable {
|
||||
module.desktop.displayManager = "gdm";
|
||||
sound.pipewire.enable = true;
|
||||
|
||||
services.xserver = {
|
||||
enable = true;
|
||||
desktopManager.gnome.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
79
modules/nixos/desktop/gnome/default.nix
Normal file
79
modules/nixos/desktop/gnome/default.nix
Normal 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;
|
||||
};
|
||||
})
|
||||
];
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit (lib) mkIf mkEnableOption;
|
||||
cfg = config.desktop.niri;
|
||||
in {
|
||||
options = {
|
||||
desktop.niri.enable =
|
||||
mkEnableOption "enable niri desktop";
|
||||
};
|
||||
config = mkIf cfg.enable {
|
||||
module.desktop.displayManager = "greetd";
|
||||
module.desktop.gnome-keyring.enable = true;
|
||||
sound.pipewire.enable = true;
|
||||
|
||||
security = {
|
||||
soteria.enable = true; # polkit agent in rust
|
||||
pam.services.gtklock = {};
|
||||
};
|
||||
programs.niri.enable = true; # wayland compositor in rust
|
||||
xdg.portal = {
|
||||
enable = true;
|
||||
extraPortals = with pkgs; [
|
||||
xdg-desktop-portal-gnome
|
||||
xdg-desktop-portal-gtk
|
||||
];
|
||||
config.niri.default = ["gnome" "gtk"];
|
||||
};
|
||||
};
|
||||
}
|
45
modules/nixos/desktop/niri/default.nix
Normal file
45
modules/nixos/desktop/niri/default.nix
Normal 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;
|
||||
};
|
||||
})
|
||||
];
|
||||
}
|
@ -7,9 +7,6 @@
|
||||
with lib; let
|
||||
cfg = config.desktop.plasma;
|
||||
in {
|
||||
imports = [
|
||||
./common/pipewire.nix
|
||||
];
|
||||
options = {
|
||||
desktop.plasma = {
|
||||
enable = mkEnableOption "enable plasma desktop";
|
@ -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";
|
||||
};
|
||||
};
|
||||
|
||||
environment.ldso32 = null;
|
||||
|
||||
boot.tmp.cleanOnBoot = lib.mkDefault true;
|
||||
networking.networkmanager.enable = true;
|
||||
|
||||
services.openssh = {
|
||||
settings.X11Forwarding = false;
|
||||
@ -24,4 +34,12 @@
|
||||
"sntrup761x25519-sha512@openssh.com"
|
||||
];
|
||||
};
|
||||
|
||||
services.journald.extraConfig = ''
|
||||
SystemMaxUse=1G
|
||||
'';
|
||||
systemd.coredump.extraConfig = ''
|
||||
Storage=none
|
||||
ProcessSizeMax=0
|
||||
'';
|
||||
}
|
||||
|
@ -1,7 +1,9 @@
|
||||
{
|
||||
imports = [
|
||||
./common.nix
|
||||
./locale.nix
|
||||
./misc
|
||||
./virtual
|
||||
./stylix
|
||||
./virt
|
||||
];
|
||||
}
|
||||
|
@ -3,16 +3,18 @@
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit (lib) mkIf mkEnableOption;
|
||||
cfg = config.locale.ukrainian;
|
||||
inherit (lib) types mkOption;
|
||||
in {
|
||||
options = {
|
||||
locale.ukrainian.enable =
|
||||
mkEnableOption "enables ukrainian locale";
|
||||
module.locale = mkOption {
|
||||
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
|
||||
locale = "uk_UA.UTF-8";
|
||||
inherit (config.module) locale;
|
||||
in {
|
||||
defaultLocale = locale;
|
||||
extraLocaleSettings = {
|
@ -1,8 +1,6 @@
|
||||
{
|
||||
imports = [
|
||||
./locale.nix
|
||||
./opentabletdriver.nix
|
||||
./qmk-vial.nix
|
||||
./stylix
|
||||
];
|
||||
}
|
||||
|
@ -6,10 +6,10 @@
|
||||
inherit (lib) mkIf mkEnableOption;
|
||||
in {
|
||||
options = {
|
||||
opentabletdriver.enable =
|
||||
module.misc.opentabletdriver.enable =
|
||||
mkEnableOption "enables opentabletdriver";
|
||||
};
|
||||
config = mkIf config.opentabletdriver.enable {
|
||||
config = mkIf config.module.misc.opentabletdriver.enable {
|
||||
hardware.opentabletdriver = {
|
||||
enable = true;
|
||||
daemon.enable = true;
|
||||
|
@ -6,10 +6,10 @@
|
||||
inherit (lib) mkIf mkEnableOption;
|
||||
in {
|
||||
options = {
|
||||
qmk-vial.enable =
|
||||
module.misc.qmk-vial.enable =
|
||||
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 = ''
|
||||
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0660", GROUP="users", TAG+="uaccess", TAG+="udev-acl"
|
||||
'';
|
||||
|
@ -5,66 +5,81 @@
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
inherit (builtins) fetchurl;
|
||||
inherit (lib) mkEnableOption mkOption mkIf;
|
||||
inherit (lib) optionalAttrs;
|
||||
inherit (lib.types) bool str;
|
||||
inherit (config.system) stateVersion;
|
||||
|
||||
cfg = config.module.stylix;
|
||||
|
||||
fromBase16Schemes = f: "${pkgs.base16-schemes}/share/themes/${f}.yaml";
|
||||
|
||||
interPackage = pkgs.inter-nerdfont;
|
||||
iosevkaPackage =
|
||||
if stateVersion == "24.11"
|
||||
then pkgs.nerdfonts.override {fonts = ["Iosevka"];}
|
||||
else pkgs.nerd-fonts.iosevka;
|
||||
iosevkaTermPackage =
|
||||
if stateVersion == "24.11"
|
||||
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;
|
||||
geistMonoPackage =
|
||||
if stateVersion == "24.11"
|
||||
then pkgs.nerdfonts.override {fonts = ["GeistMono"];}
|
||||
else pkgs.nerd-fonts.geist-mono;
|
||||
iosevkaPackage = pkgs.nerd-fonts.iosevka;
|
||||
iosevkaTermPackage = pkgs.nerd-fonts.iosevka-term;
|
||||
mesloLgPackage = pkgs.nerd-fonts.meslo-lg;
|
||||
# jetBrainsMonoPackage = pkgs.nerd-fonts.jetbrains-mono;
|
||||
geistMonoPackage = pkgs.nerd-fonts.geist-mono;
|
||||
geistPackage = pkgs.geist-font;
|
||||
|
||||
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";
|
||||
name = "wallhaven-p9m7ve.png";
|
||||
sha256 = "0r7dl4fjwv2p5q5ggr4sjsl2h5m0s98k9qhiwkvmwi010lyffkx7";
|
||||
};
|
||||
mountains-pink = builtins.fetchurl {
|
||||
mountains-pink = fetchurl {
|
||||
url = "https://w.wallhaven.cc/full/yq/wallhaven-yq7gox.jpg";
|
||||
name = "wallhaven-yq7gox.jpg";
|
||||
sha256 = "09s31spp9mq71fgkl1w80nzdc1458p1gjfyi3y6fy14wj2dza0pj";
|
||||
};
|
||||
mountains-black = builtins.fetchurl {
|
||||
mountains-black = fetchurl {
|
||||
url = "https://w.wallhaven.cc/full/9d/wallhaven-9djzww.jpg";
|
||||
name = "wallhaven-9djzww.jpg";
|
||||
sha256 = "1p2si922i9qs09h8c74lrvx0f284g0xvm7lh85gk1x7lqhn611zm";
|
||||
};
|
||||
cyber-dawn = builtins.fetchurl {
|
||||
cyber-dawn = fetchurl {
|
||||
url = "https://w.wallhaven.cc/full/ym/wallhaven-ymo2y7.png";
|
||||
name = "wallhaven-ymo2y7.png";
|
||||
sha256 = "1b3j0hxxy8m25scq42lxsxc99xvr15pha1j4wplgz761asrvxly3";
|
||||
};
|
||||
nixos-rainbow = builtins.fetchurl {
|
||||
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 = {
|
||||
rose-pine-dawn = {
|
||||
polarity = "light";
|
||||
scheme = "${pkgs.base16-schemes}/share/themes/rose-pine-dawn.yaml";
|
||||
scheme = fromBase16Schemes "rose-pine-dawn";
|
||||
wallpaper = wallpapers.cyber-dawn;
|
||||
|
||||
serif = {
|
||||
@ -85,14 +100,12 @@
|
||||
};
|
||||
rose-pine-moon = {
|
||||
polarity = "dark";
|
||||
scheme = "${pkgs.base16-schemes}/share/themes/rose-pine-moon.yaml";
|
||||
scheme = fromBase16Schemes "rose-pine-moon";
|
||||
wallpaper = wallpapers.cyber-dawn;
|
||||
|
||||
serif = {
|
||||
# package = iosevkaPackage;
|
||||
# name = "Iosevka Nerd Font Propo";
|
||||
package = pkgs.geist-font;
|
||||
name = "Geist Light";
|
||||
package = interPackage;
|
||||
name = "Inter Nerd Font";
|
||||
};
|
||||
|
||||
monospace = {
|
||||
@ -106,15 +119,34 @@
|
||||
size = 24;
|
||||
};
|
||||
};
|
||||
gruvbox-dark-pale = {
|
||||
sandcastle = {
|
||||
polarity = "dark";
|
||||
scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-pale.yaml";
|
||||
wallpaper = wallpapers.nixos-rainbow;
|
||||
scheme = fromBase16Schemes "sandcastle";
|
||||
wallpaper = wallpapers.abstract.waves;
|
||||
|
||||
serif = {
|
||||
# package = iosevkaPackage;
|
||||
# name = "Iosevka Nerd Font Propo";
|
||||
package = pkgs.geist-font;
|
||||
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";
|
||||
};
|
||||
|
||||
@ -131,8 +163,8 @@
|
||||
};
|
||||
nord = {
|
||||
polarity = "dark";
|
||||
scheme = "${pkgs.base16-schemes}/share/themes/nord.yaml";
|
||||
wallpaper = builtins.fetchurl {
|
||||
scheme = fromBase16Schemes "nord";
|
||||
wallpaper = fetchurl {
|
||||
url = "https://w.wallhaven.cc/full/l8/wallhaven-l8l9gq.png";
|
||||
name = "wallhaven-l8l9gq.png";
|
||||
sha256 = "0ypr44sg0fn55m1b52dgr1nnscpi2p6rfkjsm7vvrdqw7bafbx2z";
|
||||
@ -157,8 +189,8 @@
|
||||
|
||||
nord-light = {
|
||||
polarity = "light";
|
||||
scheme = "${pkgs.base16-schemes}/share/themes/nord-light.yaml";
|
||||
wallpaper = builtins.fetchurl {
|
||||
scheme = fromBase16Schemes "nord-light";
|
||||
wallpaper = fetchurl {
|
||||
url = "https://w.wallhaven.cc/full/l8/wallhaven-l8l9gq.png";
|
||||
name = "wallhaven-l8l9gq.png";
|
||||
sha256 = "0ypr44sg0fn55m1b52dgr1nnscpi2p6rfkjsm7vvrdqw7bafbx2z";
|
||||
@ -183,8 +215,8 @@
|
||||
|
||||
helios = {
|
||||
polarity = "dark";
|
||||
scheme = "${pkgs.base16-schemes}/share/themes/helios.yaml";
|
||||
wallpaper = builtins.fetchurl {
|
||||
scheme = fromBase16Schemes "helios";
|
||||
wallpaper = fetchurl {
|
||||
url = "https://w.wallhaven.cc/full/lq/wallhaven-lqorw2.png";
|
||||
name = "wallhaven-lqorw2.png";
|
||||
sha256 = "sha256:1rjchjq4pc2jyq8dvpa17mmscv9qcm0h0zv468lsf8s51anpid6p";
|
||||
@ -209,8 +241,8 @@
|
||||
|
||||
sulphurpool = {
|
||||
polarity = "dark";
|
||||
scheme = "${pkgs.base16-schemes}/share/themes/atelier-sulphurpool.yaml";
|
||||
wallpaper = builtins.fetchurl {
|
||||
scheme = fromBase16Schemes "atelier-sulphurpool";
|
||||
wallpaper = fetchurl {
|
||||
url = "https://w.wallhaven.cc/full/rd/wallhaven-rd5q3m.jpg";
|
||||
name = "wallhaven-rd5q3m.jpg";
|
||||
sha256 = "sha256:1sa2739vwwv1xafzjvxlg3kvq26xmcxg6hrwq29q40j617r63sy6";
|
||||
@ -235,7 +267,7 @@
|
||||
himalaya = {
|
||||
# lightly pink like himalayan salt
|
||||
polarity = "light";
|
||||
scheme = "${pkgs.base16-schemes}/share/themes/atelier-plateau-light.yaml";
|
||||
scheme = fromBase16Schemes "atelier-plateau-light";
|
||||
wallpaper = wallpapers.mountains-pink;
|
||||
|
||||
serif = {
|
||||
@ -248,6 +280,48 @@
|
||||
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 = {
|
||||
package = pkgs.bibata-cursors;
|
||||
name = "Bibata-Modern-Ice";
|
||||
@ -277,6 +351,7 @@ in {
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
fonts.packages = [pkgs.nerd-fonts.symbols-only];
|
||||
stylix =
|
||||
{
|
||||
enable = true;
|
@ -5,10 +5,10 @@
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.virtual.docker;
|
||||
cfg = config.module.virt.docker;
|
||||
in {
|
||||
options = {
|
||||
virtual.docker.enable =
|
||||
module.virt.docker.enable =
|
||||
mkEnableOption "enable docker";
|
||||
};
|
||||
config = mkIf cfg.enable {
|
@ -5,10 +5,10 @@
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.virtual.libvirt;
|
||||
cfg = config.module.virt.libvirt;
|
||||
in {
|
||||
options = {
|
||||
virtual.libvirt.enable =
|
||||
module.virt.libvirt.enable =
|
||||
mkEnableOption "enables virtualisation";
|
||||
};
|
||||
config = mkIf cfg.enable {
|
@ -5,10 +5,10 @@
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.virtual.podman;
|
||||
cfg = config.module.virt.podman;
|
||||
in {
|
||||
options = {
|
||||
virtual.podman.enable =
|
||||
module.virt.podman.enable =
|
||||
mkEnableOption "enables podman";
|
||||
};
|
||||
config = mkIf cfg.enable {
|
@ -4,7 +4,7 @@
|
||||
...
|
||||
}: {
|
||||
boot.loader = {
|
||||
timeout = 3;
|
||||
timeout = 0;
|
||||
efi.canTouchEfiVariables = true;
|
||||
systemd-boot = {
|
||||
consoleMode = "auto";
|
@ -11,6 +11,7 @@ in {
|
||||
imports = [
|
||||
./boot
|
||||
./hardware
|
||||
./misc
|
||||
./networking
|
||||
./nix
|
||||
./security
|
||||
@ -43,15 +44,26 @@ in {
|
||||
keyboards = {
|
||||
internal = {
|
||||
ids = ["0001:0001" "048d:c101"];
|
||||
settings.main = {
|
||||
a = "lettermod(alt, a, 200, 150)";
|
||||
s = "lettermod(meta, s, 200, 150)";
|
||||
d = "lettermod(control, d, 200, 150)";
|
||||
f = "lettermod(shift, f, 200, 150)";
|
||||
j = "lettermod(shift, j, 200, 150)";
|
||||
k = "lettermod(control, k, 200, 150)";
|
||||
l = "lettermod(meta, l, 200, 150)";
|
||||
";" = "lettermod(alt, ;, 200, 150)";
|
||||
settings.main = let
|
||||
# finger = mod;
|
||||
pinky = "alt";
|
||||
ring = "meta";
|
||||
middle = "control";
|
||||
index = "shift";
|
||||
# timeouts
|
||||
idle = "200";
|
||||
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 ";";
|
||||
};
|
||||
};
|
||||
};
|
3
modules/shared/nixos/misc/default.nix
Normal file
3
modules/shared/nixos/misc/default.nix
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
imports = [./slim.nix ./zram.nix];
|
||||
}
|
20
modules/shared/nixos/misc/slim.nix
Normal file
20
modules/shared/nixos/misc/slim.nix
Normal 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
|
||||
};
|
||||
}
|
8
modules/shared/nixos/misc/zram.nix
Normal file
8
modules/shared/nixos/misc/zram.nix
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
zramSwap = {
|
||||
enable = true;
|
||||
algorithm = "zstd";
|
||||
memoryPercent = 25;
|
||||
priority = 5;
|
||||
};
|
||||
}
|
@ -1,13 +1,20 @@
|
||||
{
|
||||
pkgs,
|
||||
# inputs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
# imports = with inputs; [lix.nixosModules.default];
|
||||
nix = {
|
||||
package = pkgs.lixPackageSets.latest.lix;
|
||||
channel.enable = false;
|
||||
daemonCPUSchedPolicy = "idle";
|
||||
optimise = {
|
||||
automatic = true;
|
||||
dates = ["weekly"];
|
||||
};
|
||||
settings = {
|
||||
auto-optimise-store = true;
|
||||
experimental-features = [
|
||||
"nix-command"
|
||||
"flakes"
|
@ -1,6 +1,7 @@
|
||||
{
|
||||
imports = [
|
||||
./common.nix
|
||||
./distibuted-build.nix
|
||||
./substituters.nix
|
||||
];
|
||||
}
|
49
modules/shared/nixos/nix/distibuted-build.nix
Normal file
49
modules/shared/nixos/nix/distibuted-build.nix
Normal file
@ -0,0 +1,49 @@
|
||||
{
|
||||
config,
|
||||
inputs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
isBuildHost = config.networking.hostName == "dunamis";
|
||||
in {
|
||||
config = lib.mkMerge [
|
||||
(lib.mkIf isBuildHost {
|
||||
nix = let
|
||||
inherit (builtins) readFile;
|
||||
inherit (config.users.users) user;
|
||||
in {
|
||||
sshServe = {
|
||||
enable = true;
|
||||
keys = map (f: readFile f) user.openssh.authorizedKeys.keyFiles;
|
||||
protocol = "ssh-ng";
|
||||
trusted = true;
|
||||
write = true;
|
||||
};
|
||||
};
|
||||
})
|
||||
(lib.mkIf (!isBuildHost) {
|
||||
nix = 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 {
|
||||
distributedBuilds = true;
|
||||
buildMachines = [
|
||||
{
|
||||
hostName = "dunamis";
|
||||
maxJobs = 3;
|
||||
protocol = "ssh-ng";
|
||||
publicHostKey = pubHost;
|
||||
speedFactor = 2;
|
||||
sshKey = secrets."ssh-${hostName}-user".path;
|
||||
sshUser = "nix-ssh";
|
||||
supportedFeatures = ["benchmark" "big-parallel" "kvm" "nixos-test"];
|
||||
system = "x86_64-linux";
|
||||
}
|
||||
];
|
||||
};
|
||||
})
|
||||
];
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user