Compare commits
56 commits
main
...
automated/
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
585b4c310b | ||
|
|
95229e5139 | ||
|
|
f123c3feaf | ||
|
|
3ba825b279 | ||
|
|
50cf2f3b05 | ||
|
|
92c3b71cdf | ||
|
|
53175986b4 | ||
|
|
488736ae06 | ||
|
|
796f75bcbc | ||
|
|
82c1632279 | ||
|
|
782d3a05b5 | ||
|
|
4ae280500d | ||
|
|
1c8559ce0d | ||
|
|
8c5a3f7fc8 | ||
|
|
03901b1270 | ||
|
|
5b2506b267 | ||
|
|
6999c3dba8 | ||
|
|
8ddf8d2147 | ||
|
|
cf039b4b21 | ||
|
|
f95c22027d | ||
|
|
14bd36d55b | ||
|
|
187f9b7893 | ||
|
|
da3e49c97e | ||
|
|
bbbce085e9 | ||
|
|
efc2612efa | ||
|
|
0fc33a61a4 | ||
|
|
67546f7692 | ||
|
|
49a97aa599 | ||
|
|
2745b1c60d | ||
|
|
1449e884da | ||
|
|
7167a231c6 | ||
|
|
0343c702c1 | ||
|
|
bcb8ca3465 | ||
|
|
165fd81e2d | ||
|
|
5073c7e543 | ||
|
|
9423bc4bdf | ||
|
|
b8250cb19b | ||
|
|
99ef1a64c0 | ||
|
|
5f13b6ed3d | ||
|
|
7333f0f669 | ||
|
|
60233cdcec | ||
|
|
858c637c5d | ||
|
|
3568e196bd | ||
|
|
a8561f9335 | ||
|
|
ea8f380d9c | ||
|
|
59dddfb860 | ||
|
|
65505b0a70 | ||
|
|
344279eeff | ||
|
|
7673e0e111 | ||
|
|
21e38c2098 | ||
|
|
afc9d8b0d7 | ||
|
|
e25b37421c | ||
|
|
7508647f07 | ||
|
|
2e52091be0 | ||
|
|
3ceb51acb4 | ||
|
|
72d948ff83 |
67 changed files with 2308 additions and 2958 deletions
5
.mailmap
5
.mailmap
|
|
@ -1,5 +0,0 @@
|
||||||
zoey <hi@zoeys.computer> zackartz <zackmyers@lavabit.com>
|
|
||||||
zoey <hi@zoeys.computer> zack <me@zackmyers.io>
|
|
||||||
zoey <hi@zoeys.computer> zack <hi@zoeys.computer>
|
|
||||||
zoey <hi@zoeys.computer> Zachary Myers <hi@zoeys.computer>
|
|
||||||
zoey <hi@zoeys.computer> Zachary Myers <zackmyers808@gmail.com>
|
|
||||||
25
.sops.yaml
25
.sops.yaml
|
|
@ -1,25 +0,0 @@
|
||||||
keys:
|
|
||||||
- &personal_pgp_key 0x141576B17B4AE789
|
|
||||||
- &pc_main 0DCB1C584AECEB2674BB76C179FE3B714935CDAB
|
|
||||||
- &venus age1l6v7c5cp6sh6typgskwfufzkn3qw4av7r42z7lqyns6mtupytqhs2fg49u
|
|
||||||
- &personal_age_key age16p54d6tx3mg0htkzj43q2mzpvlqj4gz63mz5qzx8mpsp5zx4xexsszdhuk
|
|
||||||
|
|
||||||
creation_rules:
|
|
||||||
# This rule applies to any file named 'secrets.yaml' directly in the 'secrets/' directory
|
|
||||||
# or 'secrets/github-deploy-key.yaml' etc.
|
|
||||||
- path_regex: "secrets/vpn-config.yaml$"
|
|
||||||
key_groups:
|
|
||||||
- pgp:
|
|
||||||
- *personal_pgp_key
|
|
||||||
- *pc_main
|
|
||||||
- path_regex: "secrets/matrix-db.yaml$"
|
|
||||||
key_groups:
|
|
||||||
- age:
|
|
||||||
- *venus
|
|
||||||
- *personal_age_key
|
|
||||||
# Add host keys for decryption on the target system
|
|
||||||
# sops-nix will automatically pick up the system's SSH host keys
|
|
||||||
# as decryption keys if enabled in your NixOS config.
|
|
||||||
# So you typically don't list them explicitly here unless you
|
|
||||||
# want to restrict it to specific fingerprints, which is rare.
|
|
||||||
# This part ensures your *personal* key can decrypt it.
|
|
||||||
201
f.nix
201
f.nix
|
|
@ -1,201 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib;
|
|
||||||
with lib.custom; let
|
|
||||||
cfg = config.wms.hyprland;
|
|
||||||
|
|
||||||
mkService = recursiveUpdate {
|
|
||||||
Unit.PartOf = ["graphical-session.target"];
|
|
||||||
Unit.After = ["graphical-session.target"];
|
|
||||||
Install.WantedBy = ["graphical-session.target"];
|
|
||||||
};
|
|
||||||
|
|
||||||
mod = "SUPER";
|
|
||||||
in {
|
|
||||||
options.wms.hyprland = with types; {
|
|
||||||
enable = mkBoolOpt false "Enable Hyprland";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
xwayland
|
|
||||||
grim
|
|
||||||
slurp
|
|
||||||
];
|
|
||||||
|
|
||||||
wayland.windowManager.hyprland = {
|
|
||||||
enable = true;
|
|
||||||
# package = inputs.hyprland.packages.${pkgs.system}.hyprland;
|
|
||||||
xwayland.enable = true;
|
|
||||||
|
|
||||||
systemd = {
|
|
||||||
enable = false;
|
|
||||||
enableXdgAutostart = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
imports = [./conf/binds.nix];
|
|
||||||
wayland.windowManager.hyprland.settings = with colors; {
|
|
||||||
exec-once = [
|
|
||||||
# "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
|
|
||||||
# "systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
|
|
||||||
"zen"
|
|
||||||
"vesktop"
|
|
||||||
"cider-2"
|
|
||||||
"networkmanagerapplet"
|
|
||||||
"[workspace 9 silent] kitty"
|
|
||||||
"[workspace 9 silent] kitty"
|
|
||||||
"[workspace 9 silent] kitty"
|
|
||||||
"[workspace 10 silent] kitty"
|
|
||||||
];
|
|
||||||
|
|
||||||
env = [
|
|
||||||
"XDG_SESSION_TYPE,wayland"
|
|
||||||
"XDG_SESSION_DESKTOP,Hyprland"
|
|
||||||
"XDG_CURRENT_DESKTOP,Hyprland"
|
|
||||||
];
|
|
||||||
|
|
||||||
general = {
|
|
||||||
# gaps
|
|
||||||
gaps_in = 2;
|
|
||||||
gaps_out = 4;
|
|
||||||
|
|
||||||
# border thiccness
|
|
||||||
border_size = 2;
|
|
||||||
|
|
||||||
# active border color
|
|
||||||
"col.active_border" = "rgb(${rose})";
|
|
||||||
"col.inactive_border" = "rgb(${muted})";
|
|
||||||
};
|
|
||||||
|
|
||||||
input = {
|
|
||||||
kb_layout = "us,ru(phonetic)";
|
|
||||||
kb_options = grp:win_space_toggle;
|
|
||||||
sensitivity = 0; # -1.0 - 1.0, 0 means no modification.
|
|
||||||
accel_profile = "flat";
|
|
||||||
force_no_accel = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
dwindle = {
|
|
||||||
force_split = 2;
|
|
||||||
};
|
|
||||||
|
|
||||||
decoration = {
|
|
||||||
# fancy corners
|
|
||||||
rounding = 6;
|
|
||||||
# blur
|
|
||||||
blur = {
|
|
||||||
enabled = true;
|
|
||||||
size = 8;
|
|
||||||
passes = 2;
|
|
||||||
new_optimizations = 1;
|
|
||||||
contrast = 1;
|
|
||||||
brightness = 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
shadow = {
|
|
||||||
# shadow config
|
|
||||||
enabled = false;
|
|
||||||
# range = 60;
|
|
||||||
# render_power = 5;
|
|
||||||
# color = "rgba(07061f29)";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
misc = {
|
|
||||||
# disable redundant renders
|
|
||||||
disable_splash_rendering = true;
|
|
||||||
force_default_wallpaper = 0;
|
|
||||||
disable_hyprland_logo = true;
|
|
||||||
|
|
||||||
vfr = false;
|
|
||||||
vrr = 2;
|
|
||||||
|
|
||||||
# dpms
|
|
||||||
# mouse_move_enables_dpms = true; # enable dpms on mouse/touchpad action
|
|
||||||
# key_press_enables_dpms = true; # enable dpms on keyboard action
|
|
||||||
disable_autoreload = true; # autoreload is unnecessary on nixos, because the config is readonly anyway
|
|
||||||
};
|
|
||||||
|
|
||||||
xwayland = {
|
|
||||||
force_zero_scaling = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
cursor = {
|
|
||||||
no_hardware_cursors = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
monitor = ["DP-1,1920x1080@165,0x0,1"];
|
|
||||||
|
|
||||||
layerrule = [
|
|
||||||
"blur, ^(gtk-layer-shell)$"
|
|
||||||
"blur, ^(launcher)$"
|
|
||||||
"ignorezero, ^(gtk-layer-shell)$"
|
|
||||||
"ignorezero, ^(launcher)$"
|
|
||||||
"blur, notifications"
|
|
||||||
"ignorezero, notificatios"
|
|
||||||
"blur, bar"
|
|
||||||
"ignorezero, bar"
|
|
||||||
"ignorezero, ^(gtk-layer-shell|anyrun)$"
|
|
||||||
"blur, ^(gtk-layer-shell|anyrun)$"
|
|
||||||
"noanim, launcher"
|
|
||||||
"noanim, bar"
|
|
||||||
];
|
|
||||||
workspace = [
|
|
||||||
"1,monitor:DP-1"
|
|
||||||
"2,monitor:DP-1"
|
|
||||||
"3,monitor:DP-1"
|
|
||||||
"9,monitor:DP-1"
|
|
||||||
"10,monitor:DP-1"
|
|
||||||
];
|
|
||||||
windowrulev2 = [
|
|
||||||
# only allow shadows for floating windows
|
|
||||||
"noshadow, floating:0"
|
|
||||||
"tile, title:Cider"
|
|
||||||
|
|
||||||
"idleinhibit focus, class:^(mpv)$"
|
|
||||||
|
|
||||||
"float, title:^(Picture-in-Picture)$"
|
|
||||||
"pin, title:^(Picture-in-Picture)$"
|
|
||||||
|
|
||||||
"float,class:udiskie"
|
|
||||||
|
|
||||||
# "workspace special silent,class:^(pavucontrol)$"
|
|
||||||
|
|
||||||
"float, class:^(imv)$"
|
|
||||||
|
|
||||||
# throw sharing indicators away
|
|
||||||
"workspace special silent, title:^(Firefox — Sharing Indicator)$"
|
|
||||||
"workspace special silent, title:^(.*is sharing (your screen|a window)\.)$"
|
|
||||||
|
|
||||||
# specify what applications start on (at boot and normal startup of the app)
|
|
||||||
"workspace 2, class:^(vesktop)$"
|
|
||||||
"workspace 3, class:^(cider)$"
|
|
||||||
"workspace 4, class:^(zen)"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# # fake a tray to let apps start
|
|
||||||
# # https://github.com/nix-community/home-manager/issues/2064
|
|
||||||
# systemd.user.targets.tray = {
|
|
||||||
# Unit = {
|
|
||||||
# Description = "Home Manager System Tray";
|
|
||||||
# Requires = ["graphical-session-pre.target"];
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
|
|
||||||
systemd.user.services = {
|
|
||||||
swaybg = mkService {
|
|
||||||
Unit.Description = "Wallpaper chooser";
|
|
||||||
Service = {
|
|
||||||
ExecStart = "${getExe pkgs.swaybg} -i ${wallpaper}";
|
|
||||||
Restart = "always";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
1711
flake.lock
generated
1711
flake.lock
generated
File diff suppressed because it is too large
Load diff
74
flake.nix
74
flake.nix
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
nixos-stable.url = "github:nixos/nixpkgs/nixos-25.05";
|
nixos-stable.url = "github:nixos/nixpkgs/nixos-24.11";
|
||||||
|
|
||||||
home-manager = {
|
home-manager = {
|
||||||
url = "github:nix-community/home-manager";
|
url = "github:nix-community/home-manager";
|
||||||
|
|
@ -31,28 +31,19 @@
|
||||||
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
walker.url = "github:abenz1267/walker";
|
||||||
|
|
||||||
resume.url = "git+https://code.zoeys.cloud/zoey/resume.git";
|
resume.url = "git+https://code.zoeys.cloud/zoey/resume.git";
|
||||||
ags.url = "github:Aylur/ags/v1";
|
ags.url = "github:Aylur/ags/v1";
|
||||||
ags.inputs.nixpkgs.follows = "nixpkgs";
|
ags.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
agenix.url = "github:ryantm/agenix";
|
agenix.url = "github:ryantm/agenix";
|
||||||
agenix.inputs.nixpkgs.follows = "nixpkgs";
|
agenix.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
firefox-addons = {
|
|
||||||
url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
# to replace with sops-nix
|
# to replace with sops-nix
|
||||||
sops-nix.url = "github:Mic92/sops-nix";
|
sops-nix.url = "github:Mic92/sops-nix";
|
||||||
|
|
||||||
pnpm2nix.url = "github:nzbr/pnpm2nix-nzbr";
|
pnpm2nix.url = "github:nzbr/pnpm2nix-nzbr";
|
||||||
|
|
||||||
dms.url = "github:AvengeMedia/DankMaterialShell";
|
|
||||||
dms.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
|
|
||||||
nix-matrix-modules.url = "github:D4ndellion/nixos-matrix-modules";
|
|
||||||
nix-matrix-modules.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
|
|
||||||
solaar = {
|
solaar = {
|
||||||
url = "github:Svenum/Solaar-Flake/main"; # Uncomment line for latest unstable version
|
url = "github:Svenum/Solaar-Flake/main"; # Uncomment line for latest unstable version
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
@ -66,18 +57,12 @@
|
||||||
blog.url = "git+https://code.zoeys.cloud/zoey/web.git";
|
blog.url = "git+https://code.zoeys.cloud/zoey/web.git";
|
||||||
|
|
||||||
lanzaboote = {
|
lanzaboote = {
|
||||||
url = "github:nix-community/lanzaboote/v0.4.3";
|
url = "github:nix-community/lanzaboote/v0.4.1";
|
||||||
|
|
||||||
# Optional but recommended to limit the size of your system closure.
|
# Optional but recommended to limit the size of your system closure.
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
ciderd = {
|
|
||||||
url = "git+https://code.zoeys.cloud/zoey/ciderd";
|
|
||||||
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
hypridle = {
|
hypridle = {
|
||||||
url = "github:hyprwm/hypridle";
|
url = "github:hyprwm/hypridle";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
@ -129,7 +114,7 @@
|
||||||
posting.url = "github:jorikvanveen/posting-flake";
|
posting.url = "github:jorikvanveen/posting-flake";
|
||||||
|
|
||||||
lix-module = {
|
lix-module = {
|
||||||
url = "https://git.lix.systems/lix-project/nixos-module/archive/2.93.2-1.tar.gz";
|
url = "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-1.tar.gz";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -139,21 +124,26 @@
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
rust-overlay = {
|
||||||
|
url = "github:oxalica/rust-overlay";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
disko.url = "github:nix-community/disko";
|
disko.url = "github:nix-community/disko";
|
||||||
disko.inputs.nixpkgs.follows = "nixpkgs";
|
disko.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
niri-src.url = "github:YaLTeR/niri";
|
niri-src.url = "github:YaLTeR/niri";
|
||||||
niri-src.inputs.nixpkgs.follows = "nixpkgs";
|
niri-src.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
# niri-src.url = "github:visualglitch91/niri/feat/blur";
|
quickshell = {
|
||||||
# niri-src.inputs.nixpkgs.follows = "nixpkgs";
|
url = "git+https://git.outfoxxed.me/outfoxxed/quickshell";
|
||||||
|
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
niri.url = "github:sodiboo/niri-flake";
|
niri.url = "github:sodiboo/niri-flake";
|
||||||
|
|
||||||
chaotic.url = "github:chaotic-cx/nyx";
|
chaotic.url = "github:chaotic-cx/nyx/7b20daf110d06962ee99114220f2fb98cdc8673d";
|
||||||
lazyvim.url = "github:pfassina/lazyvim-nix";
|
|
||||||
|
|
||||||
vpn-confinement.url = "github:Maroka-chan/VPN-Confinement";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = inputs @ {self, ...}: let
|
outputs = inputs @ {self, ...}: let
|
||||||
|
|
@ -162,22 +152,22 @@
|
||||||
src = ./.;
|
src = ./.;
|
||||||
|
|
||||||
overlays = with inputs; [
|
overlays = with inputs; [
|
||||||
# rust-overlay.overlays.default
|
rust-overlay.overlays.default
|
||||||
(final: prev: {
|
(final: prev: {
|
||||||
ghostty = ghostty.packages."x86_64-linux".default;
|
ghostty = ghostty.packages."x86_64-linux".default;
|
||||||
})
|
})
|
||||||
# (final: prev: {
|
(final: prev: {
|
||||||
# shadps4 = prev.shadps4.overrideAttrs {
|
shadps4 = prev.shadps4.overrideAttrs {
|
||||||
# src = prev.fetchFromGitHub {
|
src = prev.fetchFromGitHub {
|
||||||
# owner = "shadps4-emu";
|
owner = "shadps4-emu";
|
||||||
# repo = "shadPS4";
|
repo = "shadPS4";
|
||||||
# rev = "41b39428335025e65f9e707ed8d5a9a1b09ba942";
|
rev = "41b39428335025e65f9e707ed8d5a9a1b09ba942";
|
||||||
# hash = "sha256-5oe2By8TjJJIVubkp5lzqx2slBR7hxIHV4wZLgRYKl8=";
|
hash = "sha256-5oe2By8TjJJIVubkp5lzqx2slBR7hxIHV4wZLgRYKl8=";
|
||||||
# fetchSubmodules = true;
|
fetchSubmodules = true;
|
||||||
# };
|
};
|
||||||
# patches = [];
|
patches = [];
|
||||||
# };
|
};
|
||||||
# })
|
})
|
||||||
niri.overlays.niri
|
niri.overlays.niri
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
@ -196,9 +186,7 @@
|
||||||
spicetify-nix.homeManagerModules.default
|
spicetify-nix.homeManagerModules.default
|
||||||
catppuccin.homeModules.default
|
catppuccin.homeModules.default
|
||||||
ags.homeManagerModules.default
|
ags.homeManagerModules.default
|
||||||
dms.homeModules.dankMaterialShell.default
|
walker.homeManagerModules.default
|
||||||
dms.homeModules.dankMaterialShell.niri
|
|
||||||
lazyvim.homeManagerModules.default
|
|
||||||
];
|
];
|
||||||
|
|
||||||
systems.modules.nixos = with inputs; [
|
systems.modules.nixos = with inputs; [
|
||||||
|
|
@ -214,8 +202,6 @@
|
||||||
disko.nixosModules.disko
|
disko.nixosModules.disko
|
||||||
niri.nixosModules.niri
|
niri.nixosModules.niri
|
||||||
chaotic.nixosModules.default
|
chaotic.nixosModules.default
|
||||||
nix-matrix-modules.nixosModules.default
|
|
||||||
vpn-confinement.nixosModules.default
|
|
||||||
];
|
];
|
||||||
|
|
||||||
systems.modules.earth = with inputs; [
|
systems.modules.earth = with inputs; [
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,8 @@
|
||||||
catppuccin.fzf.enable = true;
|
catppuccin.fzf.enable = true;
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
|
devenv
|
||||||
|
|
||||||
(discord.override {
|
(discord.override {
|
||||||
withOpenASAR = true;
|
withOpenASAR = true;
|
||||||
withVencord = true;
|
withVencord = true;
|
||||||
|
|
|
||||||
|
|
@ -53,10 +53,12 @@
|
||||||
|
|
||||||
programs.cava = {
|
programs.cava = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
catppuccin.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.btop = {
|
programs.btop = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
catppuccin.enable = true;
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
update_ms = 100
|
update_ms = 100
|
||||||
vim_keys = true
|
vim_keys = true
|
||||||
|
|
@ -65,9 +67,11 @@
|
||||||
|
|
||||||
programs.lazygit = {
|
programs.lazygit = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
catppuccin.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.fzf = {
|
programs.fzf = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
catppuccin.enable = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,10 +52,12 @@
|
||||||
|
|
||||||
programs.cava = {
|
programs.cava = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
catppuccin.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.btop = {
|
programs.btop = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
catppuccin.enable = true;
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
update_ms = 100
|
update_ms = 100
|
||||||
vim_keys = true
|
vim_keys = true
|
||||||
|
|
@ -64,9 +66,11 @@
|
||||||
|
|
||||||
programs.lazygit = {
|
programs.lazygit = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
catppuccin.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.fzf = {
|
programs.fzf = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
catppuccin.enable = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,16 @@
|
||||||
config,
|
config,
|
||||||
inputs,
|
inputs,
|
||||||
pkgs,
|
pkgs,
|
||||||
|
system,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
wms.hyprland.enable = false;
|
wms.hyprland.enable = false;
|
||||||
wms.niri.enable = true;
|
wms.niri.enable = true;
|
||||||
|
|
||||||
apps = {
|
apps = {
|
||||||
web.librewolf.enable = true;
|
web.librewolf.enable = true;
|
||||||
web.librewolf.setDefault = true;
|
web.zen.setDefault = true;
|
||||||
|
web.zen.enable = true;
|
||||||
|
|
||||||
tools.git.enable = true;
|
tools.git.enable = true;
|
||||||
tools.tmux.enable = true;
|
tools.tmux.enable = true;
|
||||||
|
|
@ -30,13 +31,14 @@
|
||||||
term.alacritty.enable = true;
|
term.alacritty.enable = true;
|
||||||
term.ghostty.enable = true;
|
term.ghostty.enable = true;
|
||||||
|
|
||||||
|
music.spotify.enable = true;
|
||||||
video.mpv.enable = true;
|
video.mpv.enable = true;
|
||||||
|
|
||||||
mail.aerc.enable = true;
|
mail.aerc.enable = true;
|
||||||
|
|
||||||
helpers = {
|
helpers = {
|
||||||
waybar.enable = false;
|
waybar.enable = true;
|
||||||
swaync.enable = false;
|
swaync.enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -62,37 +64,13 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
catppuccin.vivid.enable = false;
|
programs.distrobox = {
|
||||||
|
enable = true;
|
||||||
programs = {
|
containers = {
|
||||||
dankMaterialShell = {
|
proton-tkg = {
|
||||||
enable = true;
|
image = "archlinux";
|
||||||
|
additional_packages = "build-essential git";
|
||||||
niri.enableKeybinds = true;
|
};
|
||||||
systemd.enable = true;
|
|
||||||
|
|
||||||
enableCalendarEvents = true;
|
|
||||||
enableDynamicTheming = true;
|
|
||||||
enableSystemMonitoring = true;
|
|
||||||
enableAudioWavelength = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.user.services.polkit-gnome-authentication-agent-1 = {
|
|
||||||
Unit = {
|
|
||||||
Description = "polkit-gnome-authentication-agent-1";
|
|
||||||
Wants = ["graphical-session.target"];
|
|
||||||
After = ["graphical-session.target"];
|
|
||||||
};
|
|
||||||
Install = {
|
|
||||||
WantedBy = ["graphical-session.target"];
|
|
||||||
};
|
|
||||||
Service = {
|
|
||||||
Type = "simple";
|
|
||||||
ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1";
|
|
||||||
Restart = "on-failure";
|
|
||||||
RestartSec = 1;
|
|
||||||
TimeoutStopSec = 10;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -137,7 +115,7 @@
|
||||||
|
|
||||||
catppuccin.enable = true;
|
catppuccin.enable = true;
|
||||||
catppuccin.flavor = "mocha";
|
catppuccin.flavor = "mocha";
|
||||||
catppuccin.accent = "blue";
|
catppuccin.accent = "red";
|
||||||
|
|
||||||
catppuccin.aerc.enable = true;
|
catppuccin.aerc.enable = true;
|
||||||
|
|
||||||
|
|
@ -147,13 +125,6 @@
|
||||||
|
|
||||||
work.vpn.enable = true;
|
work.vpn.enable = true;
|
||||||
|
|
||||||
programs.obs-studio = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.obs-studio.override {
|
|
||||||
cudaSupport = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.atuin = {
|
programs.atuin = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableFishIntegration = config.programs.fish.enable;
|
enableFishIntegration = config.programs.fish.enable;
|
||||||
|
|
@ -164,33 +135,24 @@
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
gimp3
|
gimp3
|
||||||
slack
|
slack
|
||||||
zulip
|
|
||||||
|
|
||||||
cabextract
|
|
||||||
p7zip
|
|
||||||
|
|
||||||
himalaya
|
|
||||||
|
|
||||||
drawio
|
drawio
|
||||||
|
|
||||||
|
littlenavmap
|
||||||
|
|
||||||
app2unit
|
app2unit
|
||||||
|
|
||||||
awscli2
|
awscli2
|
||||||
monero-cli
|
monero-cli
|
||||||
|
devenv
|
||||||
|
|
||||||
tidal-hifi
|
zoom-us
|
||||||
|
|
||||||
pandoc
|
pandoc
|
||||||
cider-2
|
|
||||||
|
|
||||||
feather
|
nexusmods-app-unfree
|
||||||
|
|
||||||
prismlauncher
|
prismlauncher
|
||||||
|
obs-studio
|
||||||
qt6Packages.qt5compat
|
|
||||||
libsForQt5.qt5.qtgraphicaleffects
|
|
||||||
kdePackages.qtdeclarative
|
|
||||||
|
|
||||||
# prismlauncher
|
|
||||||
|
|
||||||
(discord.override {
|
(discord.override {
|
||||||
withOpenASAR = true;
|
withOpenASAR = true;
|
||||||
|
|
@ -212,6 +174,12 @@
|
||||||
heroic
|
heroic
|
||||||
cartridges
|
cartridges
|
||||||
|
|
||||||
|
darktable
|
||||||
|
|
||||||
|
thunderbird
|
||||||
|
|
||||||
|
custom.nvidia-nsight
|
||||||
|
|
||||||
custom.enc
|
custom.enc
|
||||||
|
|
||||||
neural-amp-modeler-lv2
|
neural-amp-modeler-lv2
|
||||||
|
|
@ -258,10 +226,12 @@
|
||||||
zed-editor
|
zed-editor
|
||||||
rmpc
|
rmpc
|
||||||
|
|
||||||
|
inputs.zen-browser.packages.${pkgs.system}.beta
|
||||||
|
|
||||||
starfetch
|
starfetch
|
||||||
lib.custom.nixos-stable.kiwix
|
lib.custom.nixos-stable.kiwix
|
||||||
|
|
||||||
mpc
|
mpc-cli
|
||||||
zathura
|
zathura
|
||||||
gpgme.dev
|
gpgme.dev
|
||||||
|
|
||||||
|
|
@ -279,17 +249,9 @@
|
||||||
man-pages
|
man-pages
|
||||||
man-pages-posix
|
man-pages-posix
|
||||||
|
|
||||||
devenv
|
ardour
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.thunderbird = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
profiles.${config.home.username} = {
|
|
||||||
isDefault = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.vesktop = {
|
programs.vesktop = {
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
|
|
@ -299,6 +261,8 @@
|
||||||
options = ["--cmd cd"];
|
options = ["--cmd cd"];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
services.quickshell.enable = false;
|
||||||
|
|
||||||
home.file.".mozilla/native-messaging-hosts/gpgmejson.json".text = builtins.toJSON {
|
home.file.".mozilla/native-messaging-hosts/gpgmejson.json".text = builtins.toJSON {
|
||||||
name = "gpgmejson";
|
name = "gpgmejson";
|
||||||
description = "JavaScript binding for GnuPG";
|
description = "JavaScript binding for GnuPG";
|
||||||
|
|
@ -349,7 +313,7 @@
|
||||||
services = {
|
services = {
|
||||||
gpg-agent = {
|
gpg-agent = {
|
||||||
enable = true;
|
enable = true;
|
||||||
pinentry.package = lib.mkForce pkgs.pinentry-gnome3;
|
pinentryPackage = lib.mkForce pkgs.pinentry-gnome3;
|
||||||
enableSshSupport = true;
|
enableSshSupport = true;
|
||||||
enableZshIntegration = true;
|
enableZshIntegration = true;
|
||||||
enableFishIntegration = true;
|
enableFishIntegration = true;
|
||||||
|
|
|
||||||
|
|
@ -52,10 +52,12 @@
|
||||||
|
|
||||||
programs.cava = {
|
programs.cava = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
catppuccin.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.btop = {
|
programs.btop = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
catppuccin.enable = true;
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
update_ms = 100
|
update_ms = 100
|
||||||
vim_keys = true
|
vim_keys = true
|
||||||
|
|
@ -64,9 +66,11 @@
|
||||||
|
|
||||||
programs.lazygit = {
|
programs.lazygit = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
catppuccin.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.fzf = {
|
programs.fzf = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
catppuccin.enable = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,22 +50,22 @@
|
||||||
options = ["--cmd cd"];
|
options = ["--cmd cd"];
|
||||||
};
|
};
|
||||||
|
|
||||||
catppuccin.btop.enable = true;
|
|
||||||
programs.btop = {
|
programs.btop = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
catppuccin.enable = true;
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
update_ms = 100
|
update_ms = 100
|
||||||
vim_keys = true
|
vim_keys = true
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
catppuccin.lazygit.enable = true;
|
|
||||||
programs.lazygit = {
|
programs.lazygit = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
catppuccin.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
catppuccin.fzf.enable = true;
|
|
||||||
programs.fzf = {
|
programs.fzf = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
catppuccin.enable = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -362,7 +362,5 @@ in {
|
||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.user.services.swaync.Service.Environment = ["GSK_RENDERER=gl"];
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
611
modules/home/apps/helpers/walker/default.nix
Normal file
611
modules/home/apps/helpers/walker/default.nix
Normal file
|
|
@ -0,0 +1,611 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib;
|
||||||
|
with lib.custom; let
|
||||||
|
cfg = config.apps.helpers.walker;
|
||||||
|
in {
|
||||||
|
options.apps.helpers.walker = with types; {
|
||||||
|
enable = mkBoolOpt false "Enable Walker";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
programs.walker = {
|
||||||
|
enable = true;
|
||||||
|
runAsService = true;
|
||||||
|
|
||||||
|
theme = {
|
||||||
|
layout = {
|
||||||
|
ui = {
|
||||||
|
anchors = {
|
||||||
|
bottom = true;
|
||||||
|
left = true;
|
||||||
|
right = true;
|
||||||
|
top = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
window = {
|
||||||
|
h_align = "fill";
|
||||||
|
v_align = "fill";
|
||||||
|
|
||||||
|
box = {
|
||||||
|
h_align = "center";
|
||||||
|
width = 450;
|
||||||
|
|
||||||
|
bar = {
|
||||||
|
orientation = "horizontal";
|
||||||
|
position = "end";
|
||||||
|
|
||||||
|
entry = {
|
||||||
|
h_align = "fill";
|
||||||
|
h_expand = true;
|
||||||
|
|
||||||
|
icon = {
|
||||||
|
h_align = "center";
|
||||||
|
h_expand = true;
|
||||||
|
pixel_size = 24;
|
||||||
|
theme = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
margins = {
|
||||||
|
top = 450;
|
||||||
|
};
|
||||||
|
|
||||||
|
ai_scroll = {
|
||||||
|
name = "aiScroll";
|
||||||
|
h_align = "fill";
|
||||||
|
v_align = "fill";
|
||||||
|
max_height = 300;
|
||||||
|
min_width = 400;
|
||||||
|
height = 300;
|
||||||
|
width = 400;
|
||||||
|
|
||||||
|
margins = {
|
||||||
|
top = 8;
|
||||||
|
};
|
||||||
|
|
||||||
|
list = {
|
||||||
|
name = "aiList";
|
||||||
|
orientation = "vertical";
|
||||||
|
width = 400;
|
||||||
|
spacing = 10;
|
||||||
|
|
||||||
|
item = {
|
||||||
|
name = "aiItem";
|
||||||
|
h_align = "fill";
|
||||||
|
v_align = "fill";
|
||||||
|
x_align = 0;
|
||||||
|
y_align = 0;
|
||||||
|
wrap = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
scroll = {
|
||||||
|
list = {
|
||||||
|
marker_color = "#1BFFE1";
|
||||||
|
max_height = 300;
|
||||||
|
max_width = 400;
|
||||||
|
min_width = 400;
|
||||||
|
width = 400;
|
||||||
|
|
||||||
|
item = {
|
||||||
|
activation_label = {
|
||||||
|
h_align = "fill";
|
||||||
|
v_align = "fill";
|
||||||
|
width = 20;
|
||||||
|
x_align = 0.5;
|
||||||
|
y_align = 0.5;
|
||||||
|
};
|
||||||
|
|
||||||
|
icon = {
|
||||||
|
pixel_size = 26;
|
||||||
|
theme = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
margins = {
|
||||||
|
top = 8;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
search = {
|
||||||
|
prompt = {
|
||||||
|
name = "prompt";
|
||||||
|
icon = "edit-find";
|
||||||
|
theme = "";
|
||||||
|
pixel_size = 18;
|
||||||
|
h_align = "center";
|
||||||
|
v_align = "center";
|
||||||
|
};
|
||||||
|
|
||||||
|
clear = {
|
||||||
|
name = "clear";
|
||||||
|
icon = "edit-clear";
|
||||||
|
theme = "";
|
||||||
|
pixel_size = 18;
|
||||||
|
h_align = "center";
|
||||||
|
v_align = "center";
|
||||||
|
};
|
||||||
|
|
||||||
|
input = {
|
||||||
|
h_align = "fill";
|
||||||
|
h_expand = true;
|
||||||
|
icons = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
spinner = {
|
||||||
|
hide = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
style = ''
|
||||||
|
@define-color foreground ${colors.fg.hex}; /* text */
|
||||||
|
@define-color background ${colors.bg.hex}; /* base */
|
||||||
|
@define-color cursor ${colors.primary.hex}; /* rosewater */
|
||||||
|
|
||||||
|
@define-color color0 ${colors.surface0.hex}; /* surface0 */
|
||||||
|
@define-color color1 ${colors.red.hex}; /* red */
|
||||||
|
@define-color color2 ${colors.green.hex}; /* green */
|
||||||
|
@define-color color3 ${colors.yellow.hex}; /* yellow */
|
||||||
|
@define-color color4 ${colors.blue.hex}; /* blue */
|
||||||
|
@define-color color5 ${colors.pink.hex}; /* pink */
|
||||||
|
@define-color color6 ${colors.teal.hex}; /* teal */
|
||||||
|
@define-color color7 ${colors.subtext1.hex}; /* subtext1 */
|
||||||
|
@define-color color8 ${colors.surface1.hex}; /* surface1 */
|
||||||
|
@define-color color9 ${colors.red.hex}; /* red */
|
||||||
|
@define-color color10 ${colors.green.hex}; /* green */
|
||||||
|
@define-color color11 ${colors.yellow.hex}; /* yellow */
|
||||||
|
@define-color color12 ${colors.blue.hex}; /* blue */
|
||||||
|
@define-color color13 ${colors.pink.hex}; /* pink */
|
||||||
|
@define-color color14 ${colors.teal.hex}; /* teal */
|
||||||
|
@define-color color15 ${colors.subtext0.hex}; /* subtext0 */
|
||||||
|
|
||||||
|
#window,
|
||||||
|
#box,
|
||||||
|
#aiScroll,
|
||||||
|
#aiList,
|
||||||
|
#search,
|
||||||
|
#password,
|
||||||
|
#input,
|
||||||
|
#prompt,
|
||||||
|
#clear,
|
||||||
|
#typeahead,
|
||||||
|
#list,
|
||||||
|
child,
|
||||||
|
scrollbar,
|
||||||
|
slider,
|
||||||
|
#item,
|
||||||
|
#text,
|
||||||
|
#label,
|
||||||
|
#bar,
|
||||||
|
#sub,
|
||||||
|
#activationlabel {
|
||||||
|
all: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
#cfgerr {
|
||||||
|
background: rgba(255, 0, 0, 0.4);
|
||||||
|
margin-top: 20px;
|
||||||
|
padding: 8px;
|
||||||
|
font-size: 1.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#window {
|
||||||
|
color: @foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#box {
|
||||||
|
border-radius: 2px;
|
||||||
|
background: @background;
|
||||||
|
padding: 32px;
|
||||||
|
border: 1px solid lighter(@background);
|
||||||
|
box-shadow:
|
||||||
|
0 19px 38px rgba(0, 0, 0, 0.3),
|
||||||
|
0 15px 12px rgba(0, 0, 0, 0.22);
|
||||||
|
}
|
||||||
|
|
||||||
|
#search {
|
||||||
|
box-shadow:
|
||||||
|
0 1px 3px rgba(0, 0, 0, 0.1),
|
||||||
|
0 1px 2px rgba(0, 0, 0, 0.22);
|
||||||
|
background: lighter(@background);
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#prompt {
|
||||||
|
margin-left: 4px;
|
||||||
|
margin-right: 12px;
|
||||||
|
color: @foreground;
|
||||||
|
opacity: 0.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clear {
|
||||||
|
color: @foreground;
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
#password,
|
||||||
|
#input,
|
||||||
|
#typeahead {
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#input {
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#password {
|
||||||
|
}
|
||||||
|
|
||||||
|
#spinner {
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#typeahead {
|
||||||
|
color: @foreground;
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
#input placeholder {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#list {
|
||||||
|
}
|
||||||
|
|
||||||
|
child {
|
||||||
|
padding: 8px;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
child:selected,
|
||||||
|
child:hover {
|
||||||
|
background: alpha(@color1, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
#item {
|
||||||
|
}
|
||||||
|
|
||||||
|
#icon {
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#text {
|
||||||
|
}
|
||||||
|
|
||||||
|
#label {
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sub {
|
||||||
|
opacity: 0.5;
|
||||||
|
font-size: 0.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#activationlabel {
|
||||||
|
}
|
||||||
|
|
||||||
|
#bar {
|
||||||
|
}
|
||||||
|
|
||||||
|
.barentry {
|
||||||
|
}
|
||||||
|
|
||||||
|
.activation #activationlabel {
|
||||||
|
}
|
||||||
|
|
||||||
|
.activation #text,
|
||||||
|
.activation #icon,
|
||||||
|
.activation #search {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aiItem {
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 2px;
|
||||||
|
color: @foreground;
|
||||||
|
background: @background;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aiItem.user {
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aiItem.assistant {
|
||||||
|
background: lighter(@background);
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
app_launch_prefix = "";
|
||||||
|
terminal_title_flag = "";
|
||||||
|
locale = "";
|
||||||
|
close_when_open = false;
|
||||||
|
theme = "nixos";
|
||||||
|
monitor = "";
|
||||||
|
hotreload_theme = false;
|
||||||
|
as_window = false;
|
||||||
|
timeout = 0;
|
||||||
|
disable_click_to_close = false;
|
||||||
|
force_keyboard_focus = false;
|
||||||
|
|
||||||
|
keys = {
|
||||||
|
accept_typeahead = ["tab"];
|
||||||
|
trigger_labels = "lalt";
|
||||||
|
next = ["down"];
|
||||||
|
prev = ["up"];
|
||||||
|
close = ["esc"];
|
||||||
|
remove_from_history = ["shift backspace"];
|
||||||
|
resume_query = ["ctrl r"];
|
||||||
|
toggle_exact_search = ["ctrl m"];
|
||||||
|
|
||||||
|
activation_modifiers = {
|
||||||
|
keep_open = "shift";
|
||||||
|
alternate = "alt";
|
||||||
|
};
|
||||||
|
|
||||||
|
ai = {
|
||||||
|
clear_session = ["ctrl x"];
|
||||||
|
copy_last_response = ["ctrl c"];
|
||||||
|
resume_session = ["ctrl r"];
|
||||||
|
run_last_response = ["ctrl e"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
events = {
|
||||||
|
on_activate = "";
|
||||||
|
on_selection = "";
|
||||||
|
on_exit = "";
|
||||||
|
on_launch = "";
|
||||||
|
on_query_change = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
list = {
|
||||||
|
dynamic_sub = true;
|
||||||
|
keyboard_scroll_style = "emacs";
|
||||||
|
max_entries = 50;
|
||||||
|
show_initial_entries = true;
|
||||||
|
single_click = true;
|
||||||
|
visibility_threshold = 20;
|
||||||
|
placeholder = "No Results";
|
||||||
|
};
|
||||||
|
|
||||||
|
search = {
|
||||||
|
argument_delimiter = "#";
|
||||||
|
placeholder = "Search...";
|
||||||
|
delay = 0;
|
||||||
|
resume_last_query = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
activation_mode = {
|
||||||
|
labels = "jkl;asdf";
|
||||||
|
};
|
||||||
|
|
||||||
|
builtins = {
|
||||||
|
applications = {
|
||||||
|
weight = 5;
|
||||||
|
name = "applications";
|
||||||
|
placeholder = "Applications";
|
||||||
|
prioritize_new = true;
|
||||||
|
hide_actions_with_empty_query = true;
|
||||||
|
context_aware = true;
|
||||||
|
refresh = true;
|
||||||
|
show_sub_when_single = true;
|
||||||
|
show_icon_when_single = true;
|
||||||
|
show_generic = true;
|
||||||
|
history = true;
|
||||||
|
|
||||||
|
actions = {
|
||||||
|
enabled = true;
|
||||||
|
hide_category = false;
|
||||||
|
hide_without_query = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
bookmarks = {
|
||||||
|
weight = 5;
|
||||||
|
placeholder = "Bookmarks";
|
||||||
|
name = "bookmarks";
|
||||||
|
icon = "bookmark";
|
||||||
|
switcher_only = true;
|
||||||
|
|
||||||
|
entries = [
|
||||||
|
{
|
||||||
|
label = "Walker";
|
||||||
|
url = "https://github.com/abenz1267/walker";
|
||||||
|
keywords = ["walker" "github"];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
xdph_picker = {
|
||||||
|
hidden = true;
|
||||||
|
weight = 5;
|
||||||
|
placeholder = "Screen/Window Picker";
|
||||||
|
show_sub_when_single = true;
|
||||||
|
name = "xdphpicker";
|
||||||
|
switcher_only = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
ai = {
|
||||||
|
weight = 5;
|
||||||
|
placeholder = "AI";
|
||||||
|
name = "ai";
|
||||||
|
icon = "help-browser";
|
||||||
|
switcher_only = true;
|
||||||
|
show_sub_when_single = true;
|
||||||
|
|
||||||
|
anthropic = {
|
||||||
|
prompts = [
|
||||||
|
{
|
||||||
|
model = "claude-3-7-sonnet-20250219";
|
||||||
|
temperature = 1;
|
||||||
|
max_tokens = 1000;
|
||||||
|
label = "General Assistant";
|
||||||
|
prompt = "You are a helpful general assistant. Keep your answers short and precise.";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
calc = {
|
||||||
|
require_number = true;
|
||||||
|
weight = 5;
|
||||||
|
name = "calc";
|
||||||
|
icon = "accessories-calculator";
|
||||||
|
placeholder = "Calculator";
|
||||||
|
min_chars = 4;
|
||||||
|
};
|
||||||
|
|
||||||
|
windows = {
|
||||||
|
weight = 5;
|
||||||
|
icon = "view-restore";
|
||||||
|
name = "windows";
|
||||||
|
placeholder = "Windows";
|
||||||
|
show_icon_when_single = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
clipboard = {
|
||||||
|
always_put_new_on_top = true;
|
||||||
|
exec = "wl-copy";
|
||||||
|
weight = 5;
|
||||||
|
name = "clipboard";
|
||||||
|
avoid_line_breaks = true;
|
||||||
|
placeholder = "Clipboard";
|
||||||
|
image_height = 300;
|
||||||
|
max_entries = 10;
|
||||||
|
switcher_only = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
commands = {
|
||||||
|
weight = 5;
|
||||||
|
icon = "utilities-terminal";
|
||||||
|
switcher_only = true;
|
||||||
|
name = "commands";
|
||||||
|
placeholder = "Commands";
|
||||||
|
};
|
||||||
|
|
||||||
|
custom_commands = {
|
||||||
|
weight = 5;
|
||||||
|
icon = "utilities-terminal";
|
||||||
|
name = "custom_commands";
|
||||||
|
placeholder = "Custom Commands";
|
||||||
|
};
|
||||||
|
|
||||||
|
emojis = {
|
||||||
|
exec = "wl-copy";
|
||||||
|
weight = 5;
|
||||||
|
name = "emojis";
|
||||||
|
placeholder = "Emojis";
|
||||||
|
switcher_only = true;
|
||||||
|
history = true;
|
||||||
|
typeahead = true;
|
||||||
|
show_unqualified = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
symbols = {
|
||||||
|
after_copy = "";
|
||||||
|
weight = 5;
|
||||||
|
name = "symbols";
|
||||||
|
placeholder = "Symbols";
|
||||||
|
switcher_only = true;
|
||||||
|
history = true;
|
||||||
|
typeahead = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
finder = {
|
||||||
|
use_fd = false;
|
||||||
|
fd_flags = "--ignore-vcs --type file";
|
||||||
|
weight = 5;
|
||||||
|
icon = "file";
|
||||||
|
name = "finder";
|
||||||
|
placeholder = "Finder";
|
||||||
|
switcher_only = true;
|
||||||
|
ignore_gitignore = true;
|
||||||
|
refresh = true;
|
||||||
|
concurrency = 8;
|
||||||
|
show_icon_when_single = true;
|
||||||
|
preview_images = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
runner = {
|
||||||
|
eager_loading = true;
|
||||||
|
weight = 5;
|
||||||
|
icon = "utilities-terminal";
|
||||||
|
name = "runner";
|
||||||
|
placeholder = "Runner";
|
||||||
|
typeahead = true;
|
||||||
|
history = true;
|
||||||
|
generic_entry = false;
|
||||||
|
refresh = true;
|
||||||
|
use_fd = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
ssh = {
|
||||||
|
weight = 5;
|
||||||
|
icon = "preferences-system-network";
|
||||||
|
name = "ssh";
|
||||||
|
placeholder = "SSH";
|
||||||
|
switcher_only = true;
|
||||||
|
history = true;
|
||||||
|
refresh = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
switcher = {
|
||||||
|
weight = 5;
|
||||||
|
name = "switcher";
|
||||||
|
placeholder = "Switcher";
|
||||||
|
prefix = "/";
|
||||||
|
};
|
||||||
|
|
||||||
|
websearch = {
|
||||||
|
keep_selection = true;
|
||||||
|
weight = 5;
|
||||||
|
icon = "applications-internet";
|
||||||
|
name = "websearch";
|
||||||
|
placeholder = "Websearch";
|
||||||
|
|
||||||
|
entries = [
|
||||||
|
{
|
||||||
|
name = "searx";
|
||||||
|
url = "https://search.zoeys.cloud/searx/search?q=%TERM%";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
dmenu = {
|
||||||
|
hidden = true;
|
||||||
|
weight = 5;
|
||||||
|
name = "dmenu";
|
||||||
|
placeholder = "Dmenu";
|
||||||
|
switcher_only = true;
|
||||||
|
show_icon_when_single = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
translation = {
|
||||||
|
delay = 1000;
|
||||||
|
weight = 5;
|
||||||
|
name = "translation";
|
||||||
|
icon = "accessories-dictionary";
|
||||||
|
placeholder = "Translation";
|
||||||
|
switcher_only = true;
|
||||||
|
provider = "googlefree";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -99,6 +99,15 @@ in {
|
||||||
"custom/power"
|
"custom/power"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
"custom/spotify" = {
|
||||||
|
format = "{}";
|
||||||
|
"return-type" = "json";
|
||||||
|
"on-click" = "playerctl -p spotify play-pause";
|
||||||
|
"on-click-right" = "spotifatius toggle-liked";
|
||||||
|
"on-click-middle" = "playerctl -p spotify next";
|
||||||
|
exec = "spotifatius monitor";
|
||||||
|
};
|
||||||
|
|
||||||
"custom/mullvad" = {
|
"custom/mullvad" = {
|
||||||
format = "{}";
|
format = "{}";
|
||||||
return-type = "json";
|
return-type = "json";
|
||||||
|
|
@ -136,7 +145,7 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
mpris = {
|
mpris = {
|
||||||
player = "chromium";
|
player = "spotify";
|
||||||
"dynamic-order" = ["artist" "title"];
|
"dynamic-order" = ["artist" "title"];
|
||||||
format = "{player_icon} {dynamic}";
|
format = "{player_icon} {dynamic}";
|
||||||
"format-paused" = "{status_icon} <i>{dynamic}</i>";
|
"format-paused" = "{status_icon} <i>{dynamic}</i>";
|
||||||
|
|
|
||||||
|
|
@ -105,11 +105,6 @@ menu,
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#custom-spotify.paused {
|
|
||||||
font-style: italic;
|
|
||||||
opacity: 0.75;
|
|
||||||
}
|
|
||||||
|
|
||||||
#custom-mullvad,
|
#custom-mullvad,
|
||||||
#custom-notification {
|
#custom-notification {
|
||||||
padding-left: 12px;
|
padding-left: 12px;
|
||||||
|
|
|
||||||
|
|
@ -66,10 +66,9 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
catppuccin.alacritty.enable = true;
|
|
||||||
|
|
||||||
programs.alacritty = {
|
programs.alacritty = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
catppuccin.enable = true;
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
colors = {
|
colors = {
|
||||||
|
|
|
||||||
|
|
@ -17,18 +17,12 @@ in {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
font-family = "Berkeley Mono";
|
font-family = fonts.mono;
|
||||||
|
|
||||||
font-size = 24;
|
|
||||||
|
|
||||||
font-style = "SemiBold ExtraCondensed";
|
|
||||||
font-style-bold = "Bold ExtraCondensed";
|
|
||||||
font-style-italic = "SemiBold ExtraCondensed Oblique";
|
|
||||||
font-style-bold-italic = "Bold ExtraCondensed Oblique";
|
|
||||||
|
|
||||||
gtk-single-instance = true;
|
gtk-single-instance = true;
|
||||||
gtk-titlebar = false;
|
gtk-titlebar = false;
|
||||||
|
|
||||||
|
background = colors.crust.hex;
|
||||||
|
|
||||||
alpha-blending = "linear-corrected";
|
alpha-blending = "linear-corrected";
|
||||||
|
|
||||||
window-padding-x = 20;
|
window-padding-x = 20;
|
||||||
|
|
|
||||||
|
|
@ -14,26 +14,50 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
catppuccin.kitty.enable = true;
|
|
||||||
|
|
||||||
programs.kitty = {
|
programs.kitty = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
font = {
|
||||||
|
name = "${fonts.mono} SemiLight";
|
||||||
|
size = 16;
|
||||||
|
};
|
||||||
|
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
font_family family='Berkeley Mono' style='Retina ExtraCondensed'
|
bold_font ${fonts.mono} SemiBold
|
||||||
bold_font family='Berkeley Mono' style='SemiBold ExtraCondensed'
|
italic_font ${fonts.mono} SemiLight
|
||||||
italic_font family='Berkeley Mono' style='Retina ExtraCondensed'
|
bold_italic_font ${fonts.mono} SemiBold
|
||||||
bold_italic_font family='Berkeley Mono' style='SemiBold ExtraCondensed'
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
catppuccin.enable = true;
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
window_padding_width = 20;
|
window_padding_width = 20;
|
||||||
# background_opacity = "0.9";
|
# background_opacity = "0.9";
|
||||||
|
background = colors.crust.hex;
|
||||||
|
foreground = colors.text.hex;
|
||||||
|
|
||||||
font_hinting = "slight";
|
font_hinting = "slight";
|
||||||
|
|
||||||
cursor_trail = 3;
|
|
||||||
|
|
||||||
text_composition_strategy = "1.2 10";
|
text_composition_strategy = "1.2 10";
|
||||||
|
|
||||||
|
# Normal colors
|
||||||
|
color0 = colors.surface1.hex; # black
|
||||||
|
color1 = colors.red.hex; # red
|
||||||
|
color2 = colors.green.hex; # green
|
||||||
|
color3 = colors.yellow.hex; # yellow
|
||||||
|
color4 = colors.blue.hex; # blue
|
||||||
|
color5 = colors.mauve.hex; # magenta
|
||||||
|
color6 = colors.teal.hex; # cyan
|
||||||
|
color7 = colors.text.hex; # white
|
||||||
|
|
||||||
|
# Bright colors
|
||||||
|
color8 = colors.surface2.hex; # bright black
|
||||||
|
color9 = colors.red.hex; # bright red
|
||||||
|
color10 = colors.green.hex; # bright green
|
||||||
|
color11 = colors.yellow.hex; # bright yellow
|
||||||
|
color12 = colors.blue.hex; # bright blue
|
||||||
|
color13 = colors.mauve.hex; # bright magenta
|
||||||
|
color14 = colors.teal.hex; # bright cyan
|
||||||
|
color15 = colors.text.hex; # bright white
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -14,11 +14,11 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
catppuccin.bat.enable = true;
|
|
||||||
|
|
||||||
programs.bat = {
|
programs.bat = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
|
catppuccin.enable = true;
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
pager = "less -FR";
|
pager = "less -FR";
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -17,18 +17,11 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [zsh-forgit gitflow];
|
||||||
zsh-forgit
|
|
||||||
gitflow
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.delta = {
|
|
||||||
enable = true;
|
|
||||||
enableGitIntegration = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.git = {
|
programs.git = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
userName = "zack";
|
||||||
|
userEmail = "hi@zoeys.computer";
|
||||||
ignores = [
|
ignores = [
|
||||||
".cache/"
|
".cache/"
|
||||||
".DS_Store"
|
".DS_Store"
|
||||||
|
|
@ -45,15 +38,8 @@ in {
|
||||||
key = cfg.signingKey;
|
key = cfg.signingKey;
|
||||||
signByDefault = cfg.signByDefault;
|
signByDefault = cfg.signByDefault;
|
||||||
};
|
};
|
||||||
lfs.enable = true;
|
extraConfig = {
|
||||||
settings = {
|
init = {defaultBranch = "main";};
|
||||||
user = {
|
|
||||||
name = "zack";
|
|
||||||
email = "hi@zoeys.computer";
|
|
||||||
};
|
|
||||||
init = {
|
|
||||||
defaultBranch = "main";
|
|
||||||
};
|
|
||||||
delta = {
|
delta = {
|
||||||
options.map-styles = "bold purple => syntax #ca9ee6, bold cyan => syntax #8caaee";
|
options.map-styles = "bold purple => syntax #ca9ee6, bold cyan => syntax #8caaee";
|
||||||
line-numbers = true;
|
line-numbers = true;
|
||||||
|
|
@ -78,30 +64,34 @@ in {
|
||||||
smtpencryption = "ssl";
|
smtpencryption = "ssl";
|
||||||
smtpserverport = 465;
|
smtpserverport = 465;
|
||||||
};
|
};
|
||||||
alias = {
|
};
|
||||||
essa = "push --force";
|
lfs.enable = true;
|
||||||
co = "checkout";
|
delta.enable = true;
|
||||||
fuck = "commit --amend -m";
|
aliases = {
|
||||||
c = "commit -m";
|
essa = "push --force";
|
||||||
ca = "commit -am";
|
co = "checkout";
|
||||||
forgor = "commit --amend --no-edit";
|
fuck = "commit --amend -m";
|
||||||
graph = "log --all --decorate --graph --oneline";
|
c = "commit -m";
|
||||||
oops = "checkout --";
|
ca = "commit -am";
|
||||||
l = "log";
|
forgor = "commit --amend --no-edit";
|
||||||
r = "rebase";
|
graph = "log --all --decorate --graph --oneline";
|
||||||
s = "status --short";
|
oops = "checkout --";
|
||||||
ss = "status";
|
l = "log";
|
||||||
d = "diff";
|
r = "rebase";
|
||||||
ps = "!git push origin $(git rev-parse --abbrev-ref HEAD)";
|
s = "status --short";
|
||||||
pl = "!git pull origin $(git rev-parse --abbrev-ref HEAD)";
|
ss = "status";
|
||||||
af = "!git add $(git ls-files -m -o --exclude-standard | sk -m)";
|
d = "diff";
|
||||||
st = "status";
|
ps = "!git push origin $(git rev-parse --abbrev-ref HEAD)";
|
||||||
br = "branch";
|
pl = "!git pull origin $(git rev-parse --abbrev-ref HEAD)";
|
||||||
df = "!git hist | peco | awk '{print $2}' | xargs -I {} git diff {}^ {}";
|
af = "!git add $(git ls-files -m -o --exclude-standard | sk -m)";
|
||||||
hist = ''log --pretty=format:"%Cgreen%h %Creset%cd %Cblue[%cn] %Creset%s%C(yellow)%d%C(reset)" --graph --date=relative --decorate --all'';
|
st = "status";
|
||||||
llog = ''log --graph --name-status --pretty=format:"%C(red)%h %C(reset)(%cd) %C(green)%an %Creset%s %C(yellow)%d%Creset" --date=relative'';
|
br = "branch";
|
||||||
edit-unmerged = "!f() { git ls-files --unmerged | cut -f2 | sort -u ; }; hx `f`";
|
df = "!git hist | peco | awk '{print $2}' | xargs -I {} git diff {}^ {}";
|
||||||
};
|
hist = ''
|
||||||
|
log --pretty=format:"%Cgreen%h %Creset%cd %Cblue[%cn] %Creset%s%C(yellow)%d%C(reset)" --graph --date=relative --decorate --all'';
|
||||||
|
llog = ''
|
||||||
|
log --graph --name-status --pretty=format:"%C(red)%h %C(reset)(%cd) %C(green)%an %Creset%s %C(yellow)%d%Creset" --date=relative'';
|
||||||
|
edit-unmerged = "!f() { git ls-files --unmerged | cut -f2 | sort -u ; }; hx `f`";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,16 @@
|
||||||
{
|
{
|
||||||
"extras": [
|
"extras": [
|
||||||
|
"lazyvim.plugins.extras.coding.mini-comment",
|
||||||
|
"lazyvim.plugins.extras.coding.yanky",
|
||||||
"lazyvim.plugins.extras.dap.core",
|
"lazyvim.plugins.extras.dap.core",
|
||||||
"lazyvim.plugins.extras.editor.dial",
|
"lazyvim.plugins.extras.editor.dial",
|
||||||
"lazyvim.plugins.extras.editor.inc-rename",
|
"lazyvim.plugins.extras.editor.inc-rename",
|
||||||
|
"lazyvim.plugins.extras.lang.angular",
|
||||||
|
"lazyvim.plugins.extras.lang.astro",
|
||||||
|
"lazyvim.plugins.extras.lang.cmake",
|
||||||
"lazyvim.plugins.extras.lang.docker",
|
"lazyvim.plugins.extras.lang.docker",
|
||||||
|
"lazyvim.plugins.extras.lang.haskell",
|
||||||
|
"lazyvim.plugins.extras.lang.java",
|
||||||
"lazyvim.plugins.extras.lang.toml",
|
"lazyvim.plugins.extras.lang.toml",
|
||||||
"lazyvim.plugins.extras.lang.json",
|
"lazyvim.plugins.extras.lang.json",
|
||||||
"lazyvim.plugins.extras.lang.clangd",
|
"lazyvim.plugins.extras.lang.clangd",
|
||||||
|
|
@ -13,15 +20,18 @@
|
||||||
"lazyvim.plugins.extras.lang.sql",
|
"lazyvim.plugins.extras.lang.sql",
|
||||||
"lazyvim.plugins.extras.lang.svelte",
|
"lazyvim.plugins.extras.lang.svelte",
|
||||||
"lazyvim.plugins.extras.lang.tailwind",
|
"lazyvim.plugins.extras.lang.tailwind",
|
||||||
|
"lazyvim.plugins.extras.lang.elixir",
|
||||||
|
"lazyvim.plugins.extras.lang.tex",
|
||||||
"lazyvim.plugins.extras.lang.go",
|
"lazyvim.plugins.extras.lang.go",
|
||||||
"lazyvim.plugins.extras.lang.php",
|
"lazyvim.plugins.extras.lang.python",
|
||||||
|
"lazyvim.plugins.extras.lang.zig",
|
||||||
"lazyvim.plugins.extras.lang.typescript",
|
"lazyvim.plugins.extras.lang.typescript",
|
||||||
"lazyvim.plugins.extras.test.core",
|
"lazyvim.plugins.extras.test.core",
|
||||||
"lazyvim.plugins.extras.util.rest",
|
"lazyvim.plugins.extras.util.rest",
|
||||||
"lazyvim.plugins.extras.util.dot",
|
"lazyvim.plugins.extras.util.dot",
|
||||||
"lazyvim.plugins.extras.util.mini-hipatterns",
|
"lazyvim.plugins.extras.util.mini-hipatterns",
|
||||||
"lazyvim.plugins.extras.formatting.biome",
|
"lazyvim.plugins.extras.coding.luasnip",
|
||||||
"lazyvim.plugins.extras.coding.luasnip"
|
"lazyvim.plugins.extras.coding.blink"
|
||||||
],
|
],
|
||||||
"install_version": 8,
|
"install_version": 8,
|
||||||
"news": {
|
"news": {
|
||||||
|
|
|
||||||
|
|
@ -3,21 +3,13 @@
|
||||||
-- Add any additional options here
|
-- Add any additional options here
|
||||||
|
|
||||||
if vim.g.neovide then
|
if vim.g.neovide then
|
||||||
|
-- Put anything you want to happen only in Neovide here
|
||||||
vim.o.guifont = "Iosevka,Noto_Color_Emoji:h14:b"
|
vim.o.guifont = "Iosevka,Noto_Color_Emoji:h14:b"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- in this case.
|
||||||
|
vim.g.lazyvim_blink_main = true
|
||||||
vim.g.snacks_animate = false
|
vim.g.snacks_animate = false
|
||||||
vim.o.termguicolors = true
|
vim.o.termguicolors = true
|
||||||
|
|
||||||
-- Minimal UI borders for floats
|
vim.g.lazyvim_python_lsp = "pyright"
|
||||||
vim.diagnostic.config({
|
|
||||||
virtual_text = false,
|
|
||||||
float = { border = "none" },
|
|
||||||
})
|
|
||||||
|
|
||||||
local border = "none"
|
|
||||||
local handlers = vim.lsp.handlers
|
|
||||||
handlers["textDocument/hover"] = vim.lsp.with(handlers.hover, { border = border })
|
|
||||||
handlers["textDocument/signatureHelp"] = vim.lsp.with(handlers.signature_help, { border = border })
|
|
||||||
|
|
||||||
vim.g.lazyvim_prettier_needs_config = true
|
|
||||||
|
|
|
||||||
|
|
@ -2,92 +2,15 @@ return {
|
||||||
{
|
{
|
||||||
"LazyVim/LazyVim",
|
"LazyVim/LazyVim",
|
||||||
opts = {
|
opts = {
|
||||||
colorscheme = "catppuccin",
|
colorscheme = "catppuccin-mocha",
|
||||||
news = { lazyvim = false },
|
news = { lazyvim = false },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"catppuccin",
|
"catppuccin",
|
||||||
opts = function(_, opts)
|
opts = {
|
||||||
opts.transparent_background = true
|
transparent_background = true,
|
||||||
opts.flavour = "mocha"
|
},
|
||||||
opts.no_bold = true
|
|
||||||
opts.no_italic = true
|
|
||||||
opts.dim_inactive = {
|
|
||||||
enabled = true,
|
|
||||||
percentage = 0.75,
|
|
||||||
}
|
|
||||||
opts.integrations = vim.tbl_deep_extend("force", opts.integrations or {}, {
|
|
||||||
noice = true,
|
|
||||||
blink_cmp = true,
|
|
||||||
notify = true,
|
|
||||||
treesitter = true,
|
|
||||||
lsp_trouble = true,
|
|
||||||
telescope = true,
|
|
||||||
which_key = true,
|
|
||||||
native_lsp = {
|
|
||||||
enabled = true,
|
|
||||||
inlay_hints = {
|
|
||||||
background = false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
indent_blankline = {
|
|
||||||
enabled = true,
|
|
||||||
scope_color = "overlay0",
|
|
||||||
colored_indent_levels = false,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
opts.custom_highlights = function(colors)
|
|
||||||
return {
|
|
||||||
Normal = { bg = "NONE" },
|
|
||||||
NormalNC = { bg = "NONE" },
|
|
||||||
NormalFloat = { bg = "NONE" },
|
|
||||||
FloatBorder = { fg = "NONE", bg = "NONE" },
|
|
||||||
FloatTitle = { fg = colors.subtext0, bg = "NONE" },
|
|
||||||
-- WinSeparator = { fg = colors.surface1 },
|
|
||||||
-- CursorLine = { bg = colors.mantle },
|
|
||||||
-- Visual = { bg = colors.surface0 },
|
|
||||||
-- Pmenu = { bg = colors.bg, fg = colors.text },
|
|
||||||
-- PmenuSel = { bg = colors.surface0, fg = colors.text },
|
|
||||||
-- PmenuSbar = { bg = colors.bg },
|
|
||||||
-- PmenuThumb = { bg = colors.surface1 },
|
|
||||||
-- StatusLine = { bg = colors.bg, fg = colors.subtext0 },
|
|
||||||
-- StatusLineNC = { bg = colors.bg, fg = colors.overlay0 },
|
|
||||||
-- TabLine = { bg = colors.bg, fg = colors.overlay1 },
|
|
||||||
-- TabLineSel = { bg = colors.bg, fg = colors.text },
|
|
||||||
-- TabLineFill = { bg = colors.bg },
|
|
||||||
-- SignColumn = { bg = colors.bg },
|
|
||||||
-- LineNr = { fg = colors.overlay1 },
|
|
||||||
DiagnosticUnderlineError = { sp = colors.red, undercurl = true },
|
|
||||||
DiagnosticUnderlineWarn = { sp = colors.yellow, undercurl = true },
|
|
||||||
DiagnosticUnderlineInfo = { sp = colors.teal, undercurl = true },
|
|
||||||
DiagnosticUnderlineHint = { sp = colors.sky, undercurl = true },
|
|
||||||
-- Noice popup and cmdline transparent, borderless
|
|
||||||
NoiceCmdlinePopup = { bg = "NONE", fg = colors.text },
|
|
||||||
NoiceCmdlinePopupBorder = { fg = "NONE", bg = "NONE" },
|
|
||||||
NoiceCmdlinePopupTitle = { bg = "NONE", fg = colors.subtext0 },
|
|
||||||
NoicePopup = { bg = "NONE", fg = colors.text },
|
|
||||||
NoicePopupBorder = { fg = "NONE", bg = "NONE" },
|
|
||||||
-- Blink.cmp: flat boxes with padding and pop colors
|
|
||||||
BlinkCmpMenu = { bg = "NONE", fg = colors.text },
|
|
||||||
BlinkCmpMenuBorder = { fg = "NONE", bg = "NONE" },
|
|
||||||
BlinkCmpMenuSelection = { bg = colors.surface0, fg = colors.text },
|
|
||||||
BlinkCmpMenuMatch = { fg = colors.mauve },
|
|
||||||
BlinkCmpDoc = { bg = "NONE" },
|
|
||||||
BlinkCmpDocBorder = { fg = "NONE", bg = "NONE" },
|
|
||||||
BlinkCmpDocSelection = { bg = colors.surface0 },
|
|
||||||
BlinkCmpKind = { fg = colors.sky },
|
|
||||||
BlinkCmpSource = { fg = colors.subtext0 },
|
|
||||||
-- Reduce scope highlighting prominence
|
|
||||||
IlluminatedWordText = { bg = colors.mantle },
|
|
||||||
IlluminatedWordRead = { bg = colors.mantle },
|
|
||||||
IlluminatedWordWrite = { bg = colors.mantle },
|
|
||||||
TreesitterContext = { bg = colors.mantle },
|
|
||||||
TreesitterContextLineNumber = { fg = colors.subtext0, bg = colors.mantle },
|
|
||||||
}
|
|
||||||
end
|
|
||||||
return opts
|
|
||||||
end,
|
|
||||||
-- config = function()
|
-- config = function()
|
||||||
-- require("catppuccin").setup({
|
-- require("catppuccin").setup({
|
||||||
-- transparent_background = true,
|
-- transparent_background = true,
|
||||||
|
|
@ -122,7 +45,7 @@ return {
|
||||||
-- end,
|
-- end,
|
||||||
-- color_overrides = {
|
-- color_overrides = {
|
||||||
-- mocha = {
|
-- mocha = {
|
||||||
-- bg = "#11111b",
|
-- base = "#11111b",
|
||||||
-- mantle = "#11111b",
|
-- mantle = "#11111b",
|
||||||
-- crust = "#11111b",
|
-- crust = "#11111b",
|
||||||
-- },
|
-- },
|
||||||
|
|
@ -136,11 +59,11 @@ return {
|
||||||
opts = {
|
opts = {
|
||||||
formatters_by_ft = {
|
formatters_by_ft = {
|
||||||
nix = { "alejandra" },
|
nix = { "alejandra" },
|
||||||
typescript = { "biome" },
|
typescript = { "prettierd" },
|
||||||
typescriptreact = { "biome" },
|
typescriptreact = { "prettierd" },
|
||||||
javascriptreact = { "biome" },
|
javascriptreact = { "prettierd" },
|
||||||
javascript = { "biome" },
|
javascript = { "prettierd" },
|
||||||
htmlangular = { "biome" },
|
htmlangular = { "prettierd" },
|
||||||
python = { "black" },
|
python = { "black" },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -210,90 +133,8 @@ return {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
--- minimal crisp single-line borders for LSP windows
|
|
||||||
inlay_hints = { enabled = true },
|
|
||||||
diagnostics = { virtual_text = false },
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
-- Minimal Noice styling
|
|
||||||
{
|
|
||||||
"folke/noice.nvim",
|
|
||||||
opts = function(_, opts)
|
|
||||||
opts = opts or {}
|
|
||||||
opts.presets = vim.tbl_deep_extend("force", opts.presets or {}, {
|
|
||||||
bottom_search = false,
|
|
||||||
command_palette = false,
|
|
||||||
long_message_to_split = true,
|
|
||||||
inc_rename = false,
|
|
||||||
lsp_doc_border = false,
|
|
||||||
})
|
|
||||||
opts.cmdline = vim.tbl_deep_extend("force", opts.cmdline or {}, {
|
|
||||||
view = "cmdline_popup",
|
|
||||||
})
|
|
||||||
opts.views = vim.tbl_deep_extend("force", opts.views or {}, {
|
|
||||||
cmdline_popup = {
|
|
||||||
border = { style = "none", padding = { 1, 2 } },
|
|
||||||
win_options = {
|
|
||||||
-- winhighlight = { "Normal:NoiceCmdlinePopup,FloatBorder:NoiceCmdlinePopupBorder,FloatTitle:NoiceCmdlinePopupTitle" },
|
|
||||||
winhighlight = {
|
|
||||||
Normal = "NoiceCmdlinePopup",
|
|
||||||
FloatBorder = "NoiceCmdlinePopupBorder",
|
|
||||||
FloatTitle = "NoiceCmdlinePopupTitle",
|
|
||||||
},
|
|
||||||
winblend = 0,
|
|
||||||
},
|
|
||||||
position = { row = "40%", col = "50%" },
|
|
||||||
size = { width = 60 },
|
|
||||||
},
|
|
||||||
popupmenu = {
|
|
||||||
border = { style = "none", padding = { 1, 2 } },
|
|
||||||
win_options = { winblend = 0, winhighlight = "Normal:NoicePopup,FloatBorder:NoicePopupBorder" },
|
|
||||||
},
|
|
||||||
mini = {
|
|
||||||
border = { style = "none", padding = { 1, 2 } },
|
|
||||||
win_options = { winblend = 0, winhighlight = "Normal:NoicePopup,FloatBorder:NoicePopupBorder" },
|
|
||||||
},
|
|
||||||
})
|
|
||||||
return opts
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
-- Minimal bufferline (if present in LazyVim)
|
|
||||||
{
|
|
||||||
"akinsho/bufferline.nvim",
|
|
||||||
opts = function(_, opts)
|
|
||||||
opts = opts or {}
|
|
||||||
opts.options = vim.tbl_deep_extend("force", opts.options or {}, {
|
|
||||||
separator_style = "none",
|
|
||||||
show_buffer_close_icons = false,
|
|
||||||
show_close_icon = false,
|
|
||||||
always_show_bufferline = false,
|
|
||||||
indicator = { style = "underline" },
|
|
||||||
})
|
|
||||||
return opts
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
-- Minimal indent guides
|
|
||||||
{
|
|
||||||
"lukas-reineke/indent-blankline.nvim",
|
|
||||||
main = "ibl",
|
|
||||||
opts = function(_, opts)
|
|
||||||
opts = opts or {}
|
|
||||||
opts.indent = { char = "│" }
|
|
||||||
opts.scope = { enabled = false }
|
|
||||||
opts.whitespace = { remove_blankline_trail = true }
|
|
||||||
return opts
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
"pimalaya/himalaya-vim",
|
|
||||||
{
|
|
||||||
"rachartier/tiny-inline-diagnostic.nvim",
|
|
||||||
event = "VeryLazy", -- Or `LspAttach`
|
|
||||||
priority = 1000, -- needs to be loaded in first
|
|
||||||
config = function()
|
|
||||||
require("tiny-inline-diagnostic").setup()
|
|
||||||
vim.diagnostic.config({ virtual_text = false }) -- Only if needed in your configuration, if you already have native LSP diagnostics
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
-- lua with lazy.nvim
|
-- lua with lazy.nvim
|
||||||
{
|
{
|
||||||
"max397574/better-escape.nvim",
|
"max397574/better-escape.nvim",
|
||||||
|
|
|
||||||
|
|
@ -1,284 +0,0 @@
|
||||||
return {
|
|
||||||
recommended = function()
|
|
||||||
return LazyVim.extras.wants({
|
|
||||||
ft = {
|
|
||||||
"javascript",
|
|
||||||
"javascriptreact",
|
|
||||||
"javascript.jsx",
|
|
||||||
"typescript",
|
|
||||||
"typescriptreact",
|
|
||||||
"typescript.tsx",
|
|
||||||
},
|
|
||||||
root = { "tsconfig.json", "package.json", "jsconfig.json" },
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
|
|
||||||
-- correctly setup lspconfig
|
|
||||||
{
|
|
||||||
"neovim/nvim-lspconfig",
|
|
||||||
opts = {
|
|
||||||
-- make sure mason installs the server
|
|
||||||
servers = {
|
|
||||||
--- @deprecated -- tsserver renamed to ts_ls but not yet released, so keep this for now
|
|
||||||
--- the proper approach is to check the nvim-lspconfig release version when it's released to determine the server name dynamically
|
|
||||||
tsserver = {
|
|
||||||
enabled = false,
|
|
||||||
},
|
|
||||||
ts_ls = {
|
|
||||||
enabled = false,
|
|
||||||
},
|
|
||||||
vtsls = {
|
|
||||||
-- explicitly add default filetypes, so that we can extend
|
|
||||||
-- them in related extras
|
|
||||||
filetypes = {
|
|
||||||
"javascript",
|
|
||||||
"javascriptreact",
|
|
||||||
"javascript.jsx",
|
|
||||||
"typescript",
|
|
||||||
"typescriptreact",
|
|
||||||
"typescript.tsx",
|
|
||||||
},
|
|
||||||
settings = {
|
|
||||||
complete_function_calls = true,
|
|
||||||
vtsls = {
|
|
||||||
enableMoveToFileCodeAction = true,
|
|
||||||
autoUseWorkspaceTsdk = true,
|
|
||||||
experimental = {
|
|
||||||
maxInlayHintLength = 30,
|
|
||||||
completion = {
|
|
||||||
enableServerSideFuzzyMatch = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
typescript = {
|
|
||||||
format = {
|
|
||||||
enable = false,
|
|
||||||
},
|
|
||||||
updateImportsOnFileMove = { enabled = "always" },
|
|
||||||
suggest = {
|
|
||||||
completeFunctionCalls = true,
|
|
||||||
},
|
|
||||||
inlayHints = {
|
|
||||||
enumMemberValues = { enabled = true },
|
|
||||||
functionLikeReturnTypes = { enabled = true },
|
|
||||||
parameterNames = { enabled = "literals" },
|
|
||||||
parameterTypes = { enabled = true },
|
|
||||||
propertyDeclarationTypes = { enabled = true },
|
|
||||||
variableTypes = { enabled = false },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
keys = {
|
|
||||||
{
|
|
||||||
"gD",
|
|
||||||
function()
|
|
||||||
local params = vim.lsp.util.make_position_params()
|
|
||||||
LazyVim.lsp.execute({
|
|
||||||
command = "typescript.goToSourceDefinition",
|
|
||||||
arguments = { params.textDocument.uri, params.position },
|
|
||||||
open = true,
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
desc = "Goto Source Definition",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"gR",
|
|
||||||
function()
|
|
||||||
LazyVim.lsp.execute({
|
|
||||||
command = "typescript.findAllFileReferences",
|
|
||||||
arguments = { vim.uri_from_bufnr(0) },
|
|
||||||
open = true,
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
desc = "File References",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>co",
|
|
||||||
LazyVim.lsp.action["source.organizeImports"],
|
|
||||||
desc = "Organize Imports",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>cM",
|
|
||||||
LazyVim.lsp.action["source.addMissingImports.ts"],
|
|
||||||
desc = "Add missing imports",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>cu",
|
|
||||||
LazyVim.lsp.action["source.removeUnused.ts"],
|
|
||||||
desc = "Remove unused imports",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>cD",
|
|
||||||
LazyVim.lsp.action["source.fixAll.ts"],
|
|
||||||
desc = "Fix all diagnostics",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"<leader>cV",
|
|
||||||
function()
|
|
||||||
LazyVim.lsp.execute({ command = "typescript.selectTypeScriptVersion" })
|
|
||||||
end,
|
|
||||||
desc = "Select TS workspace version",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
setup = {
|
|
||||||
--- @deprecated -- tsserver renamed to ts_ls but not yet released, so keep this for now
|
|
||||||
--- the proper approach is to check the nvim-lspconfig release version when it's released to determine the server name dynamically
|
|
||||||
tsserver = function()
|
|
||||||
-- disable tsserver
|
|
||||||
return true
|
|
||||||
end,
|
|
||||||
ts_ls = function()
|
|
||||||
-- disable tsserver
|
|
||||||
return true
|
|
||||||
end,
|
|
||||||
vtsls = function(_, opts)
|
|
||||||
LazyVim.lsp.on_attach(function(client, buffer)
|
|
||||||
client.commands["_typescript.moveToFileRefactoring"] = function(command, ctx)
|
|
||||||
---@type string, string, lsp.Range
|
|
||||||
local action, uri, range = unpack(command.arguments)
|
|
||||||
|
|
||||||
local function move(newf)
|
|
||||||
client.request("workspace/executeCommand", {
|
|
||||||
command = command.command,
|
|
||||||
arguments = { action, uri, range, newf },
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
local fname = vim.uri_to_fname(uri)
|
|
||||||
client.request("workspace/executeCommand", {
|
|
||||||
command = "typescript.tsserverRequest",
|
|
||||||
arguments = {
|
|
||||||
"getMoveToRefactoringFileSuggestions",
|
|
||||||
{
|
|
||||||
file = fname,
|
|
||||||
startLine = range.start.line + 1,
|
|
||||||
startOffset = range.start.character + 1,
|
|
||||||
endLine = range["end"].line + 1,
|
|
||||||
endOffset = range["end"].character + 1,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}, function(_, result)
|
|
||||||
---@type string[]
|
|
||||||
local files = result.body.files
|
|
||||||
table.insert(files, 1, "Enter new path...")
|
|
||||||
vim.ui.select(files, {
|
|
||||||
prompt = "Select move destination:",
|
|
||||||
format_item = function(f)
|
|
||||||
return vim.fn.fnamemodify(f, ":~:.")
|
|
||||||
end,
|
|
||||||
}, function(f)
|
|
||||||
if f and f:find("^Enter new path") then
|
|
||||||
vim.ui.input({
|
|
||||||
prompt = "Enter move destination:",
|
|
||||||
default = vim.fn.fnamemodify(fname, ":h") .. "/",
|
|
||||||
completion = "file",
|
|
||||||
}, function(newf)
|
|
||||||
return newf and move(newf)
|
|
||||||
end)
|
|
||||||
elseif f then
|
|
||||||
move(f)
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
end, "vtsls")
|
|
||||||
-- copy typescript settings to javascript
|
|
||||||
opts.settings.javascript =
|
|
||||||
vim.tbl_deep_extend("force", {}, opts.settings.typescript, opts.settings.javascript or {})
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"mfussenegger/nvim-dap",
|
|
||||||
optional = true,
|
|
||||||
dependencies = {
|
|
||||||
{
|
|
||||||
"mason-org/mason.nvim",
|
|
||||||
opts = function(_, opts)
|
|
||||||
opts.ensure_installed = opts.ensure_installed or {}
|
|
||||||
table.insert(opts.ensure_installed, "js-debug-adapter")
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
opts = function()
|
|
||||||
local dap = require("dap")
|
|
||||||
if not dap.adapters["pwa-node"] then
|
|
||||||
require("dap").adapters["pwa-node"] = {
|
|
||||||
type = "server",
|
|
||||||
host = "localhost",
|
|
||||||
port = "${port}",
|
|
||||||
executable = {
|
|
||||||
command = "node",
|
|
||||||
-- 💀 Make sure to update this path to point to your installation
|
|
||||||
args = {
|
|
||||||
LazyVim.get_pkg_path("js-debug-adapter", "/js-debug/src/dapDebugServer.js"),
|
|
||||||
"${port}",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end
|
|
||||||
if not dap.adapters["node"] then
|
|
||||||
dap.adapters["node"] = function(cb, config)
|
|
||||||
if config.type == "node" then
|
|
||||||
config.type = "pwa-node"
|
|
||||||
end
|
|
||||||
local nativeAdapter = dap.adapters["pwa-node"]
|
|
||||||
if type(nativeAdapter) == "function" then
|
|
||||||
nativeAdapter(cb, config)
|
|
||||||
else
|
|
||||||
cb(nativeAdapter)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local js_filetypes = { "typescript", "javascript", "typescriptreact", "javascriptreact" }
|
|
||||||
|
|
||||||
local vscode = require("dap.ext.vscode")
|
|
||||||
vscode.type_to_filetypes["node"] = js_filetypes
|
|
||||||
vscode.type_to_filetypes["pwa-node"] = js_filetypes
|
|
||||||
|
|
||||||
for _, language in ipairs(js_filetypes) do
|
|
||||||
if not dap.configurations[language] then
|
|
||||||
dap.configurations[language] = {
|
|
||||||
{
|
|
||||||
type = "pwa-node",
|
|
||||||
request = "launch",
|
|
||||||
name = "Launch file",
|
|
||||||
program = "${file}",
|
|
||||||
cwd = "${workspaceFolder}",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type = "pwa-node",
|
|
||||||
request = "attach",
|
|
||||||
name = "Attach",
|
|
||||||
processId = require("dap.utils").pick_process,
|
|
||||||
cwd = "${workspaceFolder}",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Filetype icons
|
|
||||||
{
|
|
||||||
"echasnovski/mini.icons",
|
|
||||||
opts = {
|
|
||||||
file = {
|
|
||||||
[".eslintrc.js"] = { glyph = "", hl = "MiniIconsYellow" },
|
|
||||||
[".node-version"] = { glyph = "", hl = "MiniIconsGreen" },
|
|
||||||
[".prettierrc"] = { glyph = "", hl = "MiniIconsPurple" },
|
|
||||||
[".yarnrc.yml"] = { glyph = "", hl = "MiniIconsBlue" },
|
|
||||||
["eslint.config.js"] = { glyph = "", hl = "MiniIconsYellow" },
|
|
||||||
["package.json"] = { glyph = "", hl = "MiniIconsGreen" },
|
|
||||||
["tsconfig.json"] = { glyph = "", hl = "MiniIconsAzure" },
|
|
||||||
["tsconfig.build.json"] = { glyph = "", hl = "MiniIconsAzure" },
|
|
||||||
["yarn.lock"] = { glyph = "", hl = "MiniIconsBlue" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
@ -5,24 +5,7 @@ return {
|
||||||
-- Author: shadmansaleh
|
-- Author: shadmansaleh
|
||||||
-- Credit: glepnir
|
-- Credit: glepnir
|
||||||
local lualine = require("lualine")
|
local lualine = require("lualine")
|
||||||
local ctp = require("catppuccin.palettes").get_palette("macchiato")
|
local ctp = require("catppuccin.palettes").get_palette("mocha")
|
||||||
|
|
||||||
-- Utility to blend two hex colors: result = (1 - alpha) * a + alpha * b
|
|
||||||
local function blend_hex(hex_a, hex_b, alpha)
|
|
||||||
local function hex_to_rgb(h)
|
|
||||||
h = h:gsub("#", "")
|
|
||||||
return tonumber(h:sub(1, 2), 16), tonumber(h:sub(3, 4), 16), tonumber(h:sub(5, 6), 16)
|
|
||||||
end
|
|
||||||
local function rgb_to_hex(r, g, b)
|
|
||||||
return string.format("#%02x%02x%02x", math.floor(r + 0.5), math.floor(g + 0.5), math.floor(b + 0.5))
|
|
||||||
end
|
|
||||||
local ar, ag, ab = hex_to_rgb(hex_a)
|
|
||||||
local br, bg, bb = hex_to_rgb(hex_b)
|
|
||||||
local r = ar * (1 - alpha) + br * alpha
|
|
||||||
local g = ag * (1 - alpha) + bg * alpha
|
|
||||||
local b = ab * (1 - alpha) + bb * alpha
|
|
||||||
return rgb_to_hex(r, g, b)
|
|
||||||
end
|
|
||||||
|
|
||||||
local conditions = {
|
local conditions = {
|
||||||
buffer_not_empty = function()
|
buffer_not_empty = function()
|
||||||
|
|
@ -41,11 +24,15 @@ return {
|
||||||
-- Config
|
-- Config
|
||||||
local config = {
|
local config = {
|
||||||
options = {
|
options = {
|
||||||
|
-- Disable sections and component separators
|
||||||
component_separators = "",
|
component_separators = "",
|
||||||
section_separators = "",
|
section_separators = "",
|
||||||
theme = {
|
theme = {
|
||||||
normal = { c = { fg = ctp.text, bg = "NONE" } },
|
-- We are going to use lualine_c an lualine_x as left and
|
||||||
inactive = { c = { fg = ctp.overlay0, bg = "NONE" } },
|
-- right section. Both are highlighted by c theme . So we
|
||||||
|
-- are just setting default looks o statusline
|
||||||
|
normal = { c = { fg = ctp.text, bg = ctp.base } },
|
||||||
|
inactive = { c = { fg = ctp.overlay0, bg = ctp.base } },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
sections = {
|
sections = {
|
||||||
|
|
@ -177,41 +164,6 @@ return {
|
||||||
return mode_colors[current_mode] or ctp.subtext0 -- Default to a neutral color if mode not found
|
return mode_colors[current_mode] or ctp.subtext0 -- Default to a neutral color if mode not found
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Human-readable mode labels
|
|
||||||
local function get_mode_label()
|
|
||||||
local m = vim.api.nvim_get_mode().mode
|
|
||||||
local normal = {
|
|
||||||
n = true,
|
|
||||||
no = true,
|
|
||||||
nov = true,
|
|
||||||
["noV"] = true,
|
|
||||||
["no\22"] = true,
|
|
||||||
niI = true,
|
|
||||||
niR = true,
|
|
||||||
niV = true,
|
|
||||||
nt = true,
|
|
||||||
}
|
|
||||||
if normal[m] then
|
|
||||||
return "NORM"
|
|
||||||
end
|
|
||||||
if m == "i" or m == "ic" or m == "ix" then
|
|
||||||
return "INS"
|
|
||||||
end
|
|
||||||
if m == "v" or m == "V" or m == "\22" or m == "vs" or m == "Vs" or m == "\22s" then
|
|
||||||
return "VIS"
|
|
||||||
end
|
|
||||||
if m == "R" or m == "Rc" or m == "Rx" or m == "Rv" or m == "Rvc" or m == "Rvx" then
|
|
||||||
return "REPL"
|
|
||||||
end
|
|
||||||
if m == "c" or m == "cv" or m == "ce" then
|
|
||||||
return "CMD"
|
|
||||||
end
|
|
||||||
if m == "t" or m == "!" then
|
|
||||||
return "TERM"
|
|
||||||
end
|
|
||||||
return "?"
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Inserts a component in lualine_c at left section
|
-- Inserts a component in lualine_c at left section
|
||||||
local function ins_left(component)
|
local function ins_left(component)
|
||||||
table.insert(config.sections.lualine_c, component)
|
table.insert(config.sections.lualine_c, component)
|
||||||
|
|
@ -224,14 +176,13 @@ return {
|
||||||
|
|
||||||
ins_left({
|
ins_left({
|
||||||
function()
|
function()
|
||||||
return get_mode_label()
|
return get_mode_abbr()
|
||||||
end,
|
end,
|
||||||
color = function()
|
color = function()
|
||||||
local mode_color = get_mode_color()
|
local color = get_mode_color()
|
||||||
local mode_bg = blend_hex(ctp.base, mode_color, 0.254)
|
return { fg = ctp.base, bg = color, gui = "bold" }
|
||||||
return { fg = mode_color, bg = mode_bg, gui = "bold" }
|
end, -- Sets highlighting of component
|
||||||
end,
|
padding = { left = 1, right = 1 }, -- We don't need space before this
|
||||||
padding = { left = 1, right = 1 },
|
|
||||||
})
|
})
|
||||||
|
|
||||||
ins_left({
|
ins_left({
|
||||||
|
|
@ -240,13 +191,19 @@ return {
|
||||||
color = { fg = ctp.subtext0 },
|
color = { fg = ctp.subtext0 },
|
||||||
})
|
})
|
||||||
|
|
||||||
-- visual separation using color only, no ASCII separators
|
ins_left({
|
||||||
ins_left({ "location", color = { fg = ctp.overlay1 } })
|
-- filesize component
|
||||||
|
"filesize",
|
||||||
|
cond = conditions.buffer_not_empty,
|
||||||
|
color = { fg = ctp.subtext1 },
|
||||||
|
})
|
||||||
|
|
||||||
|
ins_left({ "location", color = { fg = ctp.subtext1 } })
|
||||||
|
|
||||||
ins_left({
|
ins_left({
|
||||||
"diagnostics",
|
"diagnostics",
|
||||||
sources = { "nvim_diagnostic" },
|
sources = { "nvim_diagnostic" },
|
||||||
symbols = { error = "", warn = "", info = "" },
|
symbols = { error = " ", warn = " ", info = " " },
|
||||||
diagnostics_color = {
|
diagnostics_color = {
|
||||||
error = { fg = ctp.red },
|
error = { fg = ctp.red },
|
||||||
warn = { fg = ctp.yellow },
|
warn = { fg = ctp.yellow },
|
||||||
|
|
@ -262,13 +219,14 @@ return {
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- LSP client indicator (badge)
|
|
||||||
ins_right({
|
ins_right({
|
||||||
|
-- Lsp server name .
|
||||||
function()
|
function()
|
||||||
|
local msg = "none"
|
||||||
local buf_ft = vim.api.nvim_get_option_value("filetype", { buf = 0 })
|
local buf_ft = vim.api.nvim_get_option_value("filetype", { buf = 0 })
|
||||||
local clients = vim.lsp.get_clients()
|
local clients = vim.lsp.get_clients()
|
||||||
if next(clients) == nil then
|
if next(clients) == nil then
|
||||||
return ""
|
return msg
|
||||||
end
|
end
|
||||||
for _, client in ipairs(clients) do
|
for _, client in ipairs(clients) do
|
||||||
local filetypes = client.config.filetypes
|
local filetypes = client.config.filetypes
|
||||||
|
|
@ -276,41 +234,42 @@ return {
|
||||||
return client.name
|
return client.name
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return ""
|
return msg
|
||||||
end,
|
end,
|
||||||
color = function()
|
icon = "",
|
||||||
return { fg = ctp.sapphire, bg = blend_hex(ctp.base, ctp.sapphire, 0.254), gui = "bold" }
|
color = { fg = ctp.overlay1, gui = "bold" },
|
||||||
end,
|
})
|
||||||
padding = { left = 1, right = 1 },
|
|
||||||
|
-- Add components to right sections
|
||||||
|
ins_right({
|
||||||
|
"branch",
|
||||||
|
icon = "",
|
||||||
|
color = { fg = ctp.mauve, gui = "bold" },
|
||||||
|
})
|
||||||
|
|
||||||
|
ins_right({
|
||||||
|
"diff",
|
||||||
|
-- Is it me or the symbol for modified us really weird
|
||||||
|
symbols = { added = " ", modified = " ", removed = " " },
|
||||||
|
diff_color = {
|
||||||
|
added = { fg = ctp.green },
|
||||||
|
modified = { fg = ctp.peach },
|
||||||
|
removed = { fg = ctp.red },
|
||||||
|
},
|
||||||
|
cond = conditions.hide_in_width,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- CMP badge (visible in insert mode)
|
|
||||||
ins_right({
|
ins_right({
|
||||||
function()
|
function()
|
||||||
return "CMP"
|
return "▊"
|
||||||
end,
|
end,
|
||||||
cond = function()
|
|
||||||
local mode = vim.api.nvim_get_mode().mode
|
|
||||||
return mode == "i" or mode == "ic" or mode == "ix"
|
|
||||||
end,
|
|
||||||
color = { fg = ctp.base, bg = ctp.teal },
|
|
||||||
padding = { left = 1, right = 1 },
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Language/filetype badge
|
|
||||||
ins_right({
|
|
||||||
"filetype",
|
|
||||||
colored = false,
|
|
||||||
icon_only = false,
|
|
||||||
color = function()
|
color = function()
|
||||||
return { fg = ctp.text, ctp.surface0, gui = "bold" }
|
local color = get_mode_color()
|
||||||
end,
|
return { fg = color }
|
||||||
padding = { left = 1, right = 1 },
|
end, -- Sets highlighting of component
|
||||||
|
padding = { left = 1 },
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Minimal right side
|
|
||||||
ins_right({ "progress", color = { fg = ctp.overlay1 } })
|
|
||||||
|
|
||||||
-- Now don't forget to initialize lualine
|
-- Now don't forget to initialize lualine
|
||||||
lualine.setup(config)
|
lualine.setup(config)
|
||||||
end,
|
end,
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
return {
|
return {
|
||||||
"nvim-mini/mini.ai",
|
"echasnovski/mini.ai",
|
||||||
version = false,
|
version = false,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
return {
|
|
||||||
"chomosuke/typst-preview.nvim",
|
|
||||||
lazy = false, -- or ft = 'typst'
|
|
||||||
version = "1.*",
|
|
||||||
opts = {}, -- lazy.nvim will implicitly calls `setup {}`
|
|
||||||
}
|
|
||||||
|
|
@ -27,23 +27,18 @@ with lib.custom; let
|
||||||
in
|
in
|
||||||
result;
|
result;
|
||||||
|
|
||||||
pluginList = plugins:
|
pluginList = plugins: strings.concatMapStrings (plugin: " [\"${sanitizePluginName plugin.name}\"] = \"${plugin.outPath}\",\n") plugins;
|
||||||
strings.concatMapStrings (
|
|
||||||
plugin: " [\"${sanitizePluginName plugin.name}\"] = \"${plugin.outPath}\",\n"
|
|
||||||
)
|
|
||||||
plugins;
|
|
||||||
in {
|
in {
|
||||||
options.apps.tools.neovim = with types; {
|
options.apps.tools.neovim = with types; {
|
||||||
enable = mkBoolOpt false "Enable Neovim";
|
enable = mkBoolOpt false "Enable Neovim";
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
catppuccin.nvim.enable = false;
|
|
||||||
|
|
||||||
programs.neovim = {
|
programs.neovim = {
|
||||||
|
catppuccin.enable = false;
|
||||||
enable = true;
|
enable = true;
|
||||||
defaultEditor = true;
|
defaultEditor = true;
|
||||||
package = inputs.neovim-nightly-overlay.packages.${pkgs.system}.default;
|
# package = inputs.neovim-nightly-overlay.packages.${pkgs.system}.default;
|
||||||
extraLuaPackages = ps: [ps.magick];
|
extraLuaPackages = ps: [ps.magick];
|
||||||
extraPackages = with pkgs; [
|
extraPackages = with pkgs; [
|
||||||
# Formatters
|
# Formatters
|
||||||
|
|
@ -60,21 +55,22 @@ in {
|
||||||
# LSP
|
# LSP
|
||||||
lua-language-server
|
lua-language-server
|
||||||
nixd
|
nixd
|
||||||
|
(pkgs.rust-bin.selectLatestNightlyWith
|
||||||
|
(toolchain: toolchain.default))
|
||||||
rust-analyzer
|
rust-analyzer
|
||||||
nodePackages.typescript-language-server
|
nodePackages.typescript-language-server
|
||||||
#nodePackages.astro-language-server
|
#nodePackages.astro-language-server
|
||||||
nodePackages.bash-language-server
|
nodePackages.bash-language-server
|
||||||
nodePackages.svelte-language-server
|
nodePackages.svelte-language-server
|
||||||
tailwindcss-language-server
|
tailwindcss-language-server
|
||||||
vtsls
|
|
||||||
taplo
|
taplo
|
||||||
docker-compose-language-service
|
docker-compose-language-service
|
||||||
dockerfile-language-server
|
dockerfile-language-server-nodejs
|
||||||
haskellPackages.hadolint
|
haskellPackages.hadolint
|
||||||
shellcheck
|
shellcheck
|
||||||
markdownlint-cli2
|
markdownlint-cli2
|
||||||
shfmt
|
shfmt
|
||||||
# sqlfluff
|
sqlfluff
|
||||||
go
|
go
|
||||||
|
|
||||||
tailwindcss-language-server
|
tailwindcss-language-server
|
||||||
|
|
@ -92,6 +88,7 @@ in {
|
||||||
fswatch # File watcher utility, replacing libuv.fs_event for neovim 10.0
|
fswatch # File watcher utility, replacing libuv.fs_event for neovim 10.0
|
||||||
sqlite
|
sqlite
|
||||||
postgresql
|
postgresql
|
||||||
|
mongosh
|
||||||
# vscode-extensions.vadimcn.vscode-lldb.adapter
|
# vscode-extensions.vadimcn.vscode-lldb.adapter
|
||||||
];
|
];
|
||||||
plugins = with pkgs.vimPlugins; [
|
plugins = with pkgs.vimPlugins; [
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ in {
|
||||||
enableNushellIntegration = config.programs.nushell.enable;
|
enableNushellIntegration = config.programs.nushell.enable;
|
||||||
settings = {
|
settings = {
|
||||||
add_newline = false;
|
add_newline = false;
|
||||||
format = "$directory$git_branch$git_status$python$rust$nodejs$nix_shell$cmd_duration$line_break$character";
|
format = "$username$directory$git_branch$git_status$python$rust$nodejs$nix_shell$cmd_duration$line_break$character";
|
||||||
|
|
||||||
# Username display
|
# Username display
|
||||||
username = {
|
username = {
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ in {
|
||||||
enable = true;
|
enable = true;
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
set -g @catppuccin_window_status_style "basic"
|
set -g @catppuccin_window_status_style "basic"
|
||||||
|
set -g @catppuccin_status_background "#11111b"
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,261 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib;
|
|
||||||
with lib.custom; let
|
|
||||||
cfg = config.apps.web.floorp;
|
|
||||||
|
|
||||||
natsumi = pkgs.fetchFromGitHub {
|
|
||||||
owner = "greeeen-dev";
|
|
||||||
repo = "natsumi-browser";
|
|
||||||
rev = "v5.7.1";
|
|
||||||
hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
options.apps.web.floorp = with types; {
|
|
||||||
enable = mkBoolOpt false "Enable Floorp Browser";
|
|
||||||
|
|
||||||
setDefault = mkBoolOpt false "Enable Floorp as Default browser";
|
|
||||||
};
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
xdg.mimeApps.defaultApplications = mkIf cfg.setDefault {
|
|
||||||
"text/html" = "floorp.desktop";
|
|
||||||
"x-scheme-handler/http" = "floorp.desktop";
|
|
||||||
"x-scheme-handler/https" = "floorp.desktop";
|
|
||||||
};
|
|
||||||
|
|
||||||
home.file.".floorp/default/chrome" = {
|
|
||||||
source = "${natsumi}";
|
|
||||||
recursive = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
catppuccin.firefox.profiles.default.enable = false;
|
|
||||||
|
|
||||||
programs.floorp = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
profiles.default = {
|
|
||||||
extensions.force = true;
|
|
||||||
search = {
|
|
||||||
default = "SearXNG";
|
|
||||||
|
|
||||||
engines = {
|
|
||||||
"NixOS Options" = {
|
|
||||||
urls = [
|
|
||||||
{
|
|
||||||
template = "https://search.nixos.org/options?query={searchTerms}";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
|
|
||||||
definedAliases = ["@nixos"];
|
|
||||||
};
|
|
||||||
|
|
||||||
"Nix Packages" = {
|
|
||||||
urls = [
|
|
||||||
{
|
|
||||||
template = "https://search.nixos.org/packages?query={searchTerms}";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
|
|
||||||
definedAliases = ["@nixpkgs"];
|
|
||||||
};
|
|
||||||
|
|
||||||
"OpenStreetMap" = {
|
|
||||||
urls = [
|
|
||||||
{
|
|
||||||
template = "https://www.openstreetmap.org/search?query={searchTerms}";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
icon = "https://www.openstreetmap.org/favicon.ico";
|
|
||||||
definedAliases = ["@openstreetmap" "@osm"];
|
|
||||||
};
|
|
||||||
|
|
||||||
"SearXNG" = {
|
|
||||||
urls = [
|
|
||||||
{
|
|
||||||
template = "https://search.zoeys.computer/searx/search?q={searchTerms}";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
icon = "https://search.zoeys.computer/searx/static/themes/simple/img/favicon.svg";
|
|
||||||
definedAliases = ["@searx"];
|
|
||||||
};
|
|
||||||
|
|
||||||
"docs.rs" = {
|
|
||||||
urls = [
|
|
||||||
{
|
|
||||||
template = "https://docs.rs/releases/search?query={searchTerms}";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
icon = "https://docs.rs/-/static/favicon.ico";
|
|
||||||
definedAliases = ["@docs"];
|
|
||||||
};
|
|
||||||
|
|
||||||
"crates.io" = {
|
|
||||||
urls = [
|
|
||||||
{
|
|
||||||
template = "https://crates.io/search?q={searchTerms}";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
icon = "https://crates.io/assets/cargo.png";
|
|
||||||
definedAliases = ["@crates"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
force = true; # Required to prevent search engine symlink being overwritten. See https://github.com/nix-community/home-manager/issues/3698
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
policies = {
|
|
||||||
DisableTelemetry = true;
|
|
||||||
|
|
||||||
Preferences = {
|
|
||||||
"app.normandy.api_url" = "";
|
|
||||||
"app.normandy.enabled" = false;
|
|
||||||
"app.shield.optoutstudies.enabled" = false;
|
|
||||||
"app.update.auto" = false;
|
|
||||||
"beacon.enabled" = false;
|
|
||||||
"breakpad.reportURL" = "";
|
|
||||||
"browser.aboutConfig.showWarning" = false;
|
|
||||||
"browser.cache.offline.enable" = false;
|
|
||||||
"browser.crashReports.unsubmittedCheck.autoSubmit" = false;
|
|
||||||
"browser.crashReports.unsubmittedCheck.autoSubmit2" = false;
|
|
||||||
"browser.crashReports.unsubmittedCheck.enabled" = false;
|
|
||||||
"browser.disableResetPrompt" = true;
|
|
||||||
"browser.newtab.preload" = false;
|
|
||||||
"browser.newtabpage.activity-stream.section.highlights.includePocket" = false;
|
|
||||||
"browser.newtabpage.enhanced" = false;
|
|
||||||
"browser.newtabpage.introShown" = true;
|
|
||||||
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
|
|
||||||
"browser.newtabpage.activity-stream.showSponsored" = false;
|
|
||||||
"browser.newtabpage.activity-stream.system.showSponsored" = false;
|
|
||||||
"browser.safebrowsing.appRepURL" = "";
|
|
||||||
"browser.safebrowsing.blockedURIs.enabled" = false;
|
|
||||||
"browser.safebrowsing.downloads.enabled" = false;
|
|
||||||
"browser.safebrowsing.downloads.remote.enabled" = false;
|
|
||||||
"browser.safebrowsing.downloads.remote.url" = "";
|
|
||||||
"browser.safebrowsing.enabled" = false;
|
|
||||||
"browser.safebrowsing.malware.enabled" = false;
|
|
||||||
"browser.safebrowsing.phishing.enabled" = false;
|
|
||||||
"browser.selfsupport.url" = "";
|
|
||||||
"browser.send_pings" = false;
|
|
||||||
"browser.sessionstore.privacy_level" = 0;
|
|
||||||
"browser.shell.checkDefaultBrowser" = false;
|
|
||||||
"browser.startup.homepage_override.mstone" = "";
|
|
||||||
"browser.tabs.crashReporting.sendReport" = false;
|
|
||||||
"browser.urlbar.groupLabels.enabled" = false;
|
|
||||||
"browser.urlbar.quicksuggest.enabled" = false;
|
|
||||||
"browser.urlbar.speculativeConnect.enabled" = false;
|
|
||||||
"browser.urlbar.trimURLs" = false;
|
|
||||||
"browser.urlbar.suggest.quicksuggest.sponsored" = false;
|
|
||||||
"datareporting.healthreport.service.enabled" = false;
|
|
||||||
"datareporting.healthreport.uploadEnabled" = false;
|
|
||||||
"datareporting.policy.dataSubmissionEnabled" = false;
|
|
||||||
"device.sensors.ambientLight.enabled" = false;
|
|
||||||
"device.sensors.enabled" = false;
|
|
||||||
"device.sensors.motion.enabled" = false;
|
|
||||||
"device.sensors.orientation.enabled" = false;
|
|
||||||
"device.sensors.proximity.enabled" = false;
|
|
||||||
"dom.battery.enabled" = false;
|
|
||||||
"dom.event.clipboardevents.enabled" = false;
|
|
||||||
"dom.webaudio.enabled" = false;
|
|
||||||
"experiments.activeExperiment" = false;
|
|
||||||
"experiments.enabled" = false;
|
|
||||||
"experiments.manifest.uri" = "";
|
|
||||||
"experiments.supported" = false;
|
|
||||||
"extensions.ClearURLs@kevinr.whiteList" = "";
|
|
||||||
"extensions.Decentraleyes@ThomasRientjes.whiteList" = "";
|
|
||||||
"extensions.FirefoxMulti-AccountContainers@mozilla.whiteList" = "";
|
|
||||||
"extensions.TemporaryContainers@stoically.whiteList" = "";
|
|
||||||
"extensions.autoDisableScopes" = 14;
|
|
||||||
"extensions.getAddons.cache.enabled" = false;
|
|
||||||
"extensions.getAddons.showPane" = false;
|
|
||||||
"extensions.greasemonkey.stats.optedin" = false;
|
|
||||||
"extensions.greasemonkey.stats.url" = "";
|
|
||||||
"extensions.pocket.enabled" = false;
|
|
||||||
"extensions.shield-recipe-client.api_url" = "";
|
|
||||||
"extensions.shield-recipe-client.enabled" = false;
|
|
||||||
"extensions.webservice.discoverURL" = "";
|
|
||||||
"media.autoplay.default" = 0;
|
|
||||||
"media.autoplay.enabled" = true;
|
|
||||||
"media.eme.enabled" = false;
|
|
||||||
"media.gmp-widevinecdm.enabled" = false;
|
|
||||||
"media.navigator.enabled" = false;
|
|
||||||
"media.peerconnection.enabled" = false;
|
|
||||||
"media.video_stats.enabled" = false;
|
|
||||||
"network.IDN_show_punycode" = true;
|
|
||||||
"network.allow-experiments" = false;
|
|
||||||
"network.captive-portal-service.enabled" = false;
|
|
||||||
"network.cookie.cookieBehavior" = 1;
|
|
||||||
"network.dns.disablePrefetch" = true;
|
|
||||||
"network.dns.disablePrefetchFromHTTPS" = true;
|
|
||||||
"network.http.referer.spoofSource" = true;
|
|
||||||
"network.http.speculative-parallel-limit" = "";
|
|
||||||
"network.predictor.enable-prefetch" = false;
|
|
||||||
"network.predictor.enabled" = false;
|
|
||||||
"network.prefetch-next" = false;
|
|
||||||
"network.trr.mode" = "";
|
|
||||||
"privacy.donottrackheader.enabled" = true;
|
|
||||||
"privacy.donottrackheader.value" = "";
|
|
||||||
"privacy.firstparty.isolate" = true;
|
|
||||||
"privacy.query_stripping" = true;
|
|
||||||
"privacy.trackingprotection.cryptomining.enabled" = true;
|
|
||||||
"privacy.trackingprotection.enabled" = true;
|
|
||||||
"privacy.trackingprotection.fingerprinting.enabled" = true;
|
|
||||||
"privacy.trackingprotection.pbmode.enabled" = true;
|
|
||||||
"privacy.usercontext.about_newtab_segregation.enabled" = true;
|
|
||||||
"security.ssl.disable_session_identifiers" = true;
|
|
||||||
"services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsoredTopSite" = false;
|
|
||||||
"signon.autofillForms" = false;
|
|
||||||
"toolkit.telemetry.archive.enabled" = false;
|
|
||||||
"toolkit.telemetry.bhrPing.enabled" = false;
|
|
||||||
"toolkit.telemetry.cachedClientID" = "";
|
|
||||||
"toolkit.telemetry.enabled" = false;
|
|
||||||
"toolkit.telemetry.firstShutdownPing.enabled" = false;
|
|
||||||
"toolkit.telemetry.hybridContent.enabled" = false;
|
|
||||||
"toolkit.telemetry.newProfilePing.enabled" = false;
|
|
||||||
"toolkit.telemetry.prompted" = "";
|
|
||||||
"toolkit.telemetry.rejected" = true;
|
|
||||||
"toolkit.telemetry.reportingpolicy.firstRun" = false;
|
|
||||||
"toolkit.telemetry.server" = "";
|
|
||||||
"toolkit.telemetry.shutdownPingSender.enabled" = false;
|
|
||||||
"toolkit.telemetry.unified" = false;
|
|
||||||
"toolkit.telemetry.unifiedIsOptIn" = false;
|
|
||||||
"toolkit.telemetry.updatePing.enabled" = false;
|
|
||||||
"webgl.renderer-string-override" = " ";
|
|
||||||
"webgl.vendor-string-override" = " ";
|
|
||||||
};
|
|
||||||
|
|
||||||
ExtensionSettings = with builtins; let
|
|
||||||
extension = shortId: uuid: {
|
|
||||||
name = uuid;
|
|
||||||
value = {
|
|
||||||
install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/${shortId}/latest.xpi";
|
|
||||||
installation_mode = "normal_installed";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
in
|
|
||||||
listToAttrs [
|
|
||||||
(extension "ublock-origin" "uBlock0@raymondhill.net")
|
|
||||||
(extension "privacy-badger17" "jid1-MnnxcxisBPnSXQ@jetpack")
|
|
||||||
(extension "1password-x-password-manager" "{d634138d-c276-4fc8-924b-40a0ea21d284}")
|
|
||||||
(extension "multi-account-containers" "@testpilot-containers")
|
|
||||||
(extension "temporary-containers" "{c607c8df-14a7-4f28-894f-29e8722976af}")
|
|
||||||
(extension "styl-us" "{7a7a4a92-a2a0-41d1-9fd7-1e92480d612d}")
|
|
||||||
(extension "betterttv" "firefox@betterttv.net")
|
|
||||||
(extension "decentraleyes" "jid1-BoFifL9Vbdl2zQ@jetpack")
|
|
||||||
(extension "canvasblocker" "CanvasBlocker@kkapsner.de")
|
|
||||||
(extension "clearurls" "{74145f27-f039-47ce-a470-a662b129930a}")
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -2,19 +2,11 @@
|
||||||
lib,
|
lib,
|
||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
inputs,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
with lib.custom; let
|
with lib.custom; let
|
||||||
cfg = config.apps.web.librewolf;
|
cfg = config.apps.web.librewolf;
|
||||||
|
|
||||||
natsumi = pkgs.fetchFromGitHub {
|
|
||||||
owner = "greeeen-dev";
|
|
||||||
repo = "natsumi-browser";
|
|
||||||
rev = "v5.7.1";
|
|
||||||
hash = "sha256-t5xVpFRV2qq5uJRGk7V50EiPnsxbd2cyeKPJYqg/LF0=";
|
|
||||||
};
|
|
||||||
in {
|
in {
|
||||||
options.apps.web.librewolf = with types; {
|
options.apps.web.librewolf = with types; {
|
||||||
enable = mkBoolOpt false "Enable or disable librewolf";
|
enable = mkBoolOpt false "Enable or disable librewolf";
|
||||||
|
|
@ -29,43 +21,13 @@ in {
|
||||||
"x-scheme-handler/https" = "librewolf.desktop";
|
"x-scheme-handler/https" = "librewolf.desktop";
|
||||||
};
|
};
|
||||||
|
|
||||||
home.file.".librewolf/${config.home.username}/chrome" = {
|
|
||||||
source = "${natsumi}";
|
|
||||||
recursive = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.librewolf = {
|
programs.librewolf = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
profiles.default = lib.mkForce {
|
|
||||||
id = 1;
|
|
||||||
isDefault = false;
|
|
||||||
extensions = {
|
|
||||||
force = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
profiles.${config.home.username} = {
|
profiles.${config.home.username} = {
|
||||||
id = 0;
|
id = 0;
|
||||||
isDefault = true;
|
isDefault = true;
|
||||||
|
|
||||||
extensions = {
|
|
||||||
force = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
|
|
||||||
"sidebar.verticalTabs" = true;
|
|
||||||
|
|
||||||
"webgl.disabled" = false;
|
|
||||||
"privacy.resistFingerprinting" = false;
|
|
||||||
"privacy.clearOnShutdown.history" = false;
|
|
||||||
"privacy.clearOnShutdown.cookies" = false;
|
|
||||||
"network.cookie.lifetimePolicy" = 0;
|
|
||||||
|
|
||||||
"natsumi.theme.type" = "default";
|
|
||||||
};
|
|
||||||
|
|
||||||
search = {
|
search = {
|
||||||
default = "SearXNG";
|
default = "SearXNG";
|
||||||
|
|
||||||
|
|
@ -100,10 +62,7 @@ in {
|
||||||
];
|
];
|
||||||
|
|
||||||
icon = "https://www.openstreetmap.org/favicon.ico";
|
icon = "https://www.openstreetmap.org/favicon.ico";
|
||||||
definedAliases = [
|
definedAliases = ["@openstreetmap" "@osm"];
|
||||||
"@openstreetmap"
|
|
||||||
"@osm"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
"SearXNG" = {
|
"SearXNG" = {
|
||||||
|
|
@ -145,6 +104,125 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
policies = {
|
policies = {
|
||||||
|
DisableTelemetry = true;
|
||||||
|
|
||||||
|
Preferences = {
|
||||||
|
"app.normandy.api_url" = "";
|
||||||
|
"app.normandy.enabled" = false;
|
||||||
|
"app.shield.optoutstudies.enabled" = false;
|
||||||
|
"app.update.auto" = false;
|
||||||
|
"beacon.enabled" = false;
|
||||||
|
"breakpad.reportURL" = "";
|
||||||
|
"browser.aboutConfig.showWarning" = false;
|
||||||
|
"browser.cache.offline.enable" = false;
|
||||||
|
"browser.crashReports.unsubmittedCheck.autoSubmit" = false;
|
||||||
|
"browser.crashReports.unsubmittedCheck.autoSubmit2" = false;
|
||||||
|
"browser.crashReports.unsubmittedCheck.enabled" = false;
|
||||||
|
"browser.disableResetPrompt" = true;
|
||||||
|
"browser.newtab.preload" = false;
|
||||||
|
"browser.newtabpage.activity-stream.section.highlights.includePocket" = false;
|
||||||
|
"browser.newtabpage.enhanced" = false;
|
||||||
|
"browser.newtabpage.introShown" = true;
|
||||||
|
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
|
||||||
|
"browser.newtabpage.activity-stream.showSponsored" = false;
|
||||||
|
"browser.newtabpage.activity-stream.system.showSponsored" = false;
|
||||||
|
"browser.safebrowsing.appRepURL" = "";
|
||||||
|
"browser.safebrowsing.blockedURIs.enabled" = false;
|
||||||
|
"browser.safebrowsing.downloads.enabled" = false;
|
||||||
|
"browser.safebrowsing.downloads.remote.enabled" = false;
|
||||||
|
"browser.safebrowsing.downloads.remote.url" = "";
|
||||||
|
"browser.safebrowsing.enabled" = false;
|
||||||
|
"browser.safebrowsing.malware.enabled" = false;
|
||||||
|
"browser.safebrowsing.phishing.enabled" = false;
|
||||||
|
"browser.selfsupport.url" = "";
|
||||||
|
"browser.send_pings" = false;
|
||||||
|
"browser.sessionstore.privacy_level" = 0;
|
||||||
|
"browser.shell.checkDefaultBrowser" = false;
|
||||||
|
"browser.startup.homepage_override.mstone" = "";
|
||||||
|
"browser.tabs.crashReporting.sendReport" = false;
|
||||||
|
"browser.urlbar.groupLabels.enabled" = false;
|
||||||
|
"browser.urlbar.quicksuggest.enabled" = false;
|
||||||
|
"browser.urlbar.speculativeConnect.enabled" = false;
|
||||||
|
"browser.urlbar.trimURLs" = false;
|
||||||
|
"browser.urlbar.suggest.quicksuggest.sponsored" = false;
|
||||||
|
"datareporting.healthreport.service.enabled" = false;
|
||||||
|
"datareporting.healthreport.uploadEnabled" = false;
|
||||||
|
"datareporting.policy.dataSubmissionEnabled" = false;
|
||||||
|
"device.sensors.ambientLight.enabled" = false;
|
||||||
|
"device.sensors.enabled" = false;
|
||||||
|
"device.sensors.motion.enabled" = false;
|
||||||
|
"device.sensors.orientation.enabled" = false;
|
||||||
|
"device.sensors.proximity.enabled" = false;
|
||||||
|
"dom.battery.enabled" = false;
|
||||||
|
"dom.event.clipboardevents.enabled" = false;
|
||||||
|
"dom.webaudio.enabled" = false;
|
||||||
|
"experiments.activeExperiment" = false;
|
||||||
|
"experiments.enabled" = false;
|
||||||
|
"experiments.manifest.uri" = "";
|
||||||
|
"experiments.supported" = false;
|
||||||
|
"extensions.ClearURLs@kevinr.whiteList" = "";
|
||||||
|
"extensions.Decentraleyes@ThomasRientjes.whiteList" = "";
|
||||||
|
"extensions.FirefoxMulti-AccountContainers@mozilla.whiteList" = "";
|
||||||
|
"extensions.TemporaryContainers@stoically.whiteList" = "";
|
||||||
|
"extensions.autoDisableScopes" = 14;
|
||||||
|
"extensions.getAddons.cache.enabled" = false;
|
||||||
|
"extensions.getAddons.showPane" = false;
|
||||||
|
"extensions.greasemonkey.stats.optedin" = false;
|
||||||
|
"extensions.greasemonkey.stats.url" = "";
|
||||||
|
"extensions.pocket.enabled" = false;
|
||||||
|
"extensions.shield-recipe-client.api_url" = "";
|
||||||
|
"extensions.shield-recipe-client.enabled" = false;
|
||||||
|
"extensions.webservice.discoverURL" = "";
|
||||||
|
"media.autoplay.default" = 0;
|
||||||
|
"media.autoplay.enabled" = true;
|
||||||
|
"media.eme.enabled" = false;
|
||||||
|
"media.gmp-widevinecdm.enabled" = false;
|
||||||
|
"media.navigator.enabled" = false;
|
||||||
|
"media.peerconnection.enabled" = false;
|
||||||
|
"media.video_stats.enabled" = false;
|
||||||
|
"network.IDN_show_punycode" = true;
|
||||||
|
"network.allow-experiments" = false;
|
||||||
|
"network.captive-portal-service.enabled" = false;
|
||||||
|
"network.cookie.cookieBehavior" = 1;
|
||||||
|
"network.dns.disablePrefetch" = true;
|
||||||
|
"network.dns.disablePrefetchFromHTTPS" = true;
|
||||||
|
"network.http.referer.spoofSource" = true;
|
||||||
|
"network.http.speculative-parallel-limit" = "";
|
||||||
|
"network.predictor.enable-prefetch" = false;
|
||||||
|
"network.predictor.enabled" = false;
|
||||||
|
"network.prefetch-next" = false;
|
||||||
|
"network.trr.mode" = "";
|
||||||
|
"privacy.donottrackheader.enabled" = true;
|
||||||
|
"privacy.donottrackheader.value" = "";
|
||||||
|
"privacy.firstparty.isolate" = true;
|
||||||
|
"privacy.query_stripping" = true;
|
||||||
|
"privacy.trackingprotection.cryptomining.enabled" = true;
|
||||||
|
"privacy.trackingprotection.enabled" = true;
|
||||||
|
"privacy.trackingprotection.fingerprinting.enabled" = true;
|
||||||
|
"privacy.trackingprotection.pbmode.enabled" = true;
|
||||||
|
"privacy.usercontext.about_newtab_segregation.enabled" = true;
|
||||||
|
"security.ssl.disable_session_identifiers" = true;
|
||||||
|
"services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsoredTopSite" = false;
|
||||||
|
"signon.autofillForms" = false;
|
||||||
|
"toolkit.telemetry.archive.enabled" = false;
|
||||||
|
"toolkit.telemetry.bhrPing.enabled" = false;
|
||||||
|
"toolkit.telemetry.cachedClientID" = "";
|
||||||
|
"toolkit.telemetry.enabled" = false;
|
||||||
|
"toolkit.telemetry.firstShutdownPing.enabled" = false;
|
||||||
|
"toolkit.telemetry.hybridContent.enabled" = false;
|
||||||
|
"toolkit.telemetry.newProfilePing.enabled" = false;
|
||||||
|
"toolkit.telemetry.prompted" = "";
|
||||||
|
"toolkit.telemetry.rejected" = true;
|
||||||
|
"toolkit.telemetry.reportingpolicy.firstRun" = false;
|
||||||
|
"toolkit.telemetry.server" = "";
|
||||||
|
"toolkit.telemetry.shutdownPingSender.enabled" = false;
|
||||||
|
"toolkit.telemetry.unified" = false;
|
||||||
|
"toolkit.telemetry.unifiedIsOptIn" = false;
|
||||||
|
"toolkit.telemetry.updatePing.enabled" = false;
|
||||||
|
"webgl.renderer-string-override" = " ";
|
||||||
|
"webgl.vendor-string-override" = " ";
|
||||||
|
};
|
||||||
|
|
||||||
ExtensionSettings = with builtins; let
|
ExtensionSettings = with builtins; let
|
||||||
extension = shortId: uuid: {
|
extension = shortId: uuid: {
|
||||||
name = uuid;
|
name = uuid;
|
||||||
|
|
@ -158,11 +236,15 @@ in {
|
||||||
(extension "ublock-origin" "uBlock0@raymondhill.net")
|
(extension "ublock-origin" "uBlock0@raymondhill.net")
|
||||||
(extension "privacy-badger17" "jid1-MnnxcxisBPnSXQ@jetpack")
|
(extension "privacy-badger17" "jid1-MnnxcxisBPnSXQ@jetpack")
|
||||||
(extension "1password-x-password-manager" "{d634138d-c276-4fc8-924b-40a0ea21d284}")
|
(extension "1password-x-password-manager" "{d634138d-c276-4fc8-924b-40a0ea21d284}")
|
||||||
|
(extension "firefox-color" "FirefoxColor@mozilla.com")
|
||||||
|
(extension "multi-account-containers" "@testpilot-containers")
|
||||||
|
(extension "temporary-containers" "{c607c8df-14a7-4f28-894f-29e8722976af}")
|
||||||
(extension "styl-us" "{7a7a4a92-a2a0-41d1-9fd7-1e92480d612d}")
|
(extension "styl-us" "{7a7a4a92-a2a0-41d1-9fd7-1e92480d612d}")
|
||||||
(extension "betterttv" "firefox@betterttv.net")
|
(extension "betterttv" "firefox@betterttv.net")
|
||||||
(extension "decentraleyes" "jid1-BoFifL9Vbdl2zQ@jetpack")
|
(extension "decentraleyes" "jid1-BoFifL9Vbdl2zQ@jetpack")
|
||||||
(extension "canvasblocker" "CanvasBlocker@kkapsner.de")
|
(extension "canvasblocker" "CanvasBlocker@kkapsner.de")
|
||||||
(extension "clearurls" "{74145f27-f039-47ce-a470-a662b129930a}")
|
(extension "clearurls" "{74145f27-f039-47ce-a470-a662b129930a}")
|
||||||
|
(extension "mtab" "contact@maxhu.dev")
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,9 @@ in {
|
||||||
|
|
||||||
config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) {
|
config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) {
|
||||||
xdg.mimeApps.defaultApplications = mkIf cfg.setDefault {
|
xdg.mimeApps.defaultApplications = mkIf cfg.setDefault {
|
||||||
"text/html" = "zen-twilight.desktop";
|
"text/html" = "zen-beta.desktop";
|
||||||
"x-scheme-handler/http" = "zen-twilight.desktop";
|
"x-scheme-handler/http" = "zen-beta.desktop";
|
||||||
"x-scheme-handler/https" = "zen-twilight.desktop";
|
"x-scheme-handler/https" = "zen-beta.desktop";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
catppuccin.cursors.enable = true;
|
catppuccin.pointerCursor.enable = true;
|
||||||
|
|
||||||
home.pointerCursor = {
|
home.pointerCursor = {
|
||||||
gtk.enable = true;
|
gtk.enable = true;
|
||||||
|
|
@ -37,6 +37,10 @@ in {
|
||||||
|
|
||||||
iconTheme = {
|
iconTheme = {
|
||||||
name = "Papirus-Dark";
|
name = "Papirus-Dark";
|
||||||
|
package = pkgs.catppuccin-papirus-folders.override {
|
||||||
|
accent = ctp.accent;
|
||||||
|
flavor = ctp.flavor;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
gtk3.extraConfig = {
|
gtk3.extraConfig = {
|
||||||
|
|
|
||||||
|
|
@ -15,10 +15,9 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) {
|
config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) {
|
||||||
catppuccin.swaylock.enable = false;
|
|
||||||
|
|
||||||
programs.swaylock = {
|
programs.swaylock = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
catppuccin.enable = false;
|
||||||
package = pkgs.swaylock-effects;
|
package = pkgs.swaylock-effects;
|
||||||
settings = with colors; {
|
settings = with colors; {
|
||||||
clock = true;
|
clock = true;
|
||||||
|
|
|
||||||
55
modules/home/services/quickshell/default.nix
Normal file
55
modules/home/services/quickshell/default.nix
Normal file
|
|
@ -0,0 +1,55 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
system,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib;
|
||||||
|
with lib.custom; let
|
||||||
|
cfg = config.services.quickshell;
|
||||||
|
|
||||||
|
mkService = recursiveUpdate {
|
||||||
|
Unit.PartOf = ["graphical-session.target"];
|
||||||
|
Unit.After = ["graphical-session.target"];
|
||||||
|
Install.WantedBy = ["graphical-session.target"];
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
options.services.quickshell = with types; {
|
||||||
|
enable = mkBoolOpt false "Enable or Disable QuickShell";
|
||||||
|
};
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
systemd.user.services = {
|
||||||
|
quickshell = mkService {
|
||||||
|
Unit.Description = "QuickShell Service";
|
||||||
|
Service = {
|
||||||
|
Environment = [
|
||||||
|
"QSG_RENDER_LOOP=threaded"
|
||||||
|
# "QT_QUICK_BACKEND=software"
|
||||||
|
"QT_QPA_PLATFORM=wayland"
|
||||||
|
"QSG_RENDERER_TIMING=true"
|
||||||
|
"QML_DISABLE_DISTANCEFIELD=1"
|
||||||
|
"QT_WAYLAND_DISABLE_WINDOWDECORATION=1"
|
||||||
|
"QT_QPA_PLATFORMTHEME=qt5ct"
|
||||||
|
"QT_QPA_REFRESH_RATE=240"
|
||||||
|
"__GL_SYNC_TO_VBLANK=0"
|
||||||
|
"LIBGL_ALWAYS_SOFTWARE=0"
|
||||||
|
"__GL_SYNC_DISPLAY_DEVICE=DP-1" # Adjust this to match your display connection
|
||||||
|
"QML_ANIMATION_DRIVER=cadence"
|
||||||
|
"QML_CADENCE_DURATION=4"
|
||||||
|
"QML_CADENCE_MAX_RENDER_TIME=3.5"
|
||||||
|
"QSG_RENDERER_USE_THREADED_GL=1"
|
||||||
|
"QSG_RHI_PREFER_SOFTWARE_RENDERER=0"
|
||||||
|
"QSG_RHI_FORCE_SYNC=0"
|
||||||
|
"QSG_INFO=1"
|
||||||
|
];
|
||||||
|
ExecStart = ''
|
||||||
|
${inputs.quickshell.packages.${system}.default}/bin/qs --log-rules 'quickshell.dbus.properties.warning = false;quickshell.dbus.dbusmenu.warning = false;quickshell.service.notifications.warning = false;quickshell.service.sni.host.warning = false'
|
||||||
|
'';
|
||||||
|
Restart = "always";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -16,7 +16,7 @@ with pkgs; {
|
||||||
untar = "tar -xvf";
|
untar = "tar -xvf";
|
||||||
untargz = "tar -xzf";
|
untargz = "tar -xzf";
|
||||||
MANPAGER = "sh -c 'col -bx | bat -l man -p'";
|
MANPAGER = "sh -c 'col -bx | bat -l man -p'";
|
||||||
du = getExe dust;
|
du = getExe du-dust;
|
||||||
ps = getExe procs;
|
ps = getExe procs;
|
||||||
lb = "pw-loopback -C \"alsa_input.pci-0000_0d_00.4.analog-stereo\" -P \"Scarlett Solo (3rd Gen.) Headphones / Line 1-2\"";
|
lb = "pw-loopback -C \"alsa_input.pci-0000_0d_00.4.analog-stereo\" -P \"Scarlett Solo (3rd Gen.) Headphones / Line 1-2\"";
|
||||||
deploy = "nixos-rebuild switch --flake ~/nixos#pluto --target-host zoeys.computer --use-remote-sudo";
|
deploy = "nixos-rebuild switch --flake ~/nixos#pluto --target-host zoeys.computer --use-remote-sudo";
|
||||||
|
|
@ -28,8 +28,6 @@ with pkgs; {
|
||||||
la = "${getExe eza} -lah --tree";
|
la = "${getExe eza} -lah --tree";
|
||||||
ls = "${getExe eza} -h --git --icons --color=auto --group-directories-first -s extension";
|
ls = "${getExe eza} -h --git --icons --color=auto --group-directories-first -s extension";
|
||||||
tree = "${getExe eza} --tree --icons --tree";
|
tree = "${getExe eza} --tree --icons --tree";
|
||||||
ns = "nh os switch -- --cores 8 --max-jobs 1";
|
|
||||||
nsu = "nh os switch --update -- --cores 8 --max-jobs 1";
|
|
||||||
kys = "shutdown now";
|
kys = "shutdown now";
|
||||||
# w = ''| nvim -c "setlocal buftype=nofile bufhidden=wipe" -c "nnoremap <buffer> q :q!<CR>" -'';
|
# w = ''| nvim -c "setlocal buftype=nofile bufhidden=wipe" -c "nnoremap <buffer> q :q!<CR>" -'';
|
||||||
lv = "nvim -c \"normal '\''0\"";
|
lv = "nvim -c \"normal '\''0\"";
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,8 @@ in {
|
||||||
set -g FZF_PREVIEW_FILE_CMD "head -n 10"
|
set -g FZF_PREVIEW_FILE_CMD "head -n 10"
|
||||||
set -g FZF_PREVIEW_DIR_CMD "ls"
|
set -g FZF_PREVIEW_DIR_CMD "ls"
|
||||||
|
|
||||||
|
set -gx AWS_DEFAULT_PROFILE (cat ~/.aws_profile | string collect)
|
||||||
|
|
||||||
set -Ux MANROFFOPT '-c'
|
set -Ux MANROFFOPT '-c'
|
||||||
set -Ux MANPAGER "sh -c 'col -bx | bat -l man -p'"
|
set -Ux MANPAGER "sh -c 'col -bx | bat -l man -p'"
|
||||||
|
|
||||||
|
|
@ -91,7 +93,7 @@ in {
|
||||||
fzf
|
fzf
|
||||||
|
|
||||||
# dns client
|
# dns client
|
||||||
doggo
|
dogdns
|
||||||
|
|
||||||
# neofetch but for git repos
|
# neofetch but for git repos
|
||||||
onefetch
|
onefetch
|
||||||
|
|
@ -114,6 +116,9 @@ in {
|
||||||
imagemagick
|
imagemagick
|
||||||
ffmpeg-full
|
ffmpeg-full
|
||||||
|
|
||||||
|
# preview images in terminal
|
||||||
|
catimg
|
||||||
|
|
||||||
# networking stuff
|
# networking stuff
|
||||||
nmap
|
nmap
|
||||||
wget
|
wget
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ with pkgs; {
|
||||||
untar = "tar -xvf";
|
untar = "tar -xvf";
|
||||||
untargz = "tar -xzf";
|
untargz = "tar -xzf";
|
||||||
MANPAGER = "sh -c 'col -bx | bat -l man -p'";
|
MANPAGER = "sh -c 'col -bx | bat -l man -p'";
|
||||||
du = getExe dust;
|
du = getExe du-dust;
|
||||||
lb = "pw-loopback -C \"alsa_input.pci-0000_0d_00.4.analog-stereo\" -P \"Scarlett Solo (3rd Gen.) Headphones / Line 1-2\"";
|
lb = "pw-loopback -C \"alsa_input.pci-0000_0d_00.4.analog-stereo\" -P \"Scarlett Solo (3rd Gen.) Headphones / Line 1-2\"";
|
||||||
deploy = "nixos-rebuild switch --flake ~/nixos#pluto --target-host zoeys.computer --use-remote-sudo";
|
deploy = "nixos-rebuild switch --flake ~/nixos#pluto --target-host zoeys.computer --use-remote-sudo";
|
||||||
m = "mkdir";
|
m = "mkdir";
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ in {
|
||||||
ripgrep
|
ripgrep
|
||||||
gping
|
gping
|
||||||
fzf
|
fzf
|
||||||
doggo
|
dogdns
|
||||||
onefetch
|
onefetch
|
||||||
cpufetch
|
cpufetch
|
||||||
yt-dlp
|
yt-dlp
|
||||||
|
|
@ -62,6 +62,7 @@ in {
|
||||||
hyperfine
|
hyperfine
|
||||||
imagemagick
|
imagemagick
|
||||||
ffmpeg-full
|
ffmpeg-full
|
||||||
|
catimg
|
||||||
nmap
|
nmap
|
||||||
wget
|
wget
|
||||||
fd
|
fd
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ in {
|
||||||
gping
|
gping
|
||||||
|
|
||||||
# dns client
|
# dns client
|
||||||
doggo
|
dogdns
|
||||||
|
|
||||||
# neofetch but for git repos
|
# neofetch but for git repos
|
||||||
onefetch
|
onefetch
|
||||||
|
|
@ -115,6 +115,9 @@ in {
|
||||||
imagemagick
|
imagemagick
|
||||||
ffmpeg-full
|
ffmpeg-full
|
||||||
|
|
||||||
|
# preview images in terminal
|
||||||
|
catimg
|
||||||
|
|
||||||
# networking stuff
|
# networking stuff
|
||||||
nmap
|
nmap
|
||||||
wget
|
wget
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,17 @@ in {
|
||||||
"${mod},Q,killactive"
|
"${mod},Q,killactive"
|
||||||
"${mod},M,exit"
|
"${mod},M,exit"
|
||||||
"${mod},P,pseudo"
|
"${mod},P,pseudo"
|
||||||
|
"${mod},Z,exec,${pkgs.writeShellScriptBin "zen-launcher" ''
|
||||||
|
ZEN_RESULT=$(${inputs.hyprland.packages.${pkgs.system}.default}/bin/hyprctl clients -j | ${lib.getExe pkgs.jq} '.[] | select(.class | contains("zen"))')
|
||||||
|
|
||||||
|
if [ -z "$ZEN_RESULT" ]; then
|
||||||
|
${lib.getExe inputs.zen-browser.packages.${pkgs.system}.beta} &
|
||||||
|
disown
|
||||||
|
else
|
||||||
|
ZEN_WORKSPACE=$(echo "$ZEN_RESULT" | ${lib.getExe pkgs.jq} '.workspace.id')
|
||||||
|
${pkgs.hyprland}/bin/hyprctl dispatch workspace "$ZEN_WORKSPACE"
|
||||||
|
fi
|
||||||
|
''}/bin/zen-launcher"
|
||||||
|
|
||||||
"${mod},J,togglesplit,"
|
"${mod},J,togglesplit,"
|
||||||
|
|
||||||
|
|
@ -246,6 +257,7 @@ in {
|
||||||
# };
|
# };
|
||||||
# };
|
# };
|
||||||
|
|
||||||
|
services.quickshell.enable = true;
|
||||||
services.wallpaper.enable = true;
|
services.wallpaper.enable = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,15 +24,7 @@ with lib.custom; {
|
||||||
relative-to ? "window",
|
relative-to ? "window",
|
||||||
in' ? null,
|
in' ? null,
|
||||||
}: {
|
}: {
|
||||||
gradient = {
|
gradient = {inherit from to angle relative-to in';};
|
||||||
inherit
|
|
||||||
from
|
|
||||||
to
|
|
||||||
angle
|
|
||||||
relative-to
|
|
||||||
in'
|
|
||||||
;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
spawnSlackOnWeekday = pkgs.writeShellScriptBin "spawn-slack-on-weekday" ''
|
spawnSlackOnWeekday = pkgs.writeShellScriptBin "spawn-slack-on-weekday" ''
|
||||||
|
|
@ -49,7 +41,7 @@ with lib.custom; {
|
||||||
exit 0
|
exit 0
|
||||||
'';
|
'';
|
||||||
in {
|
in {
|
||||||
package = inputs.niri-src.packages.${pkgs.system}.niri;
|
package = pkgs.niri;
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
# Input device configuration
|
# Input device configuration
|
||||||
|
|
@ -63,8 +55,6 @@ with lib.custom; {
|
||||||
variant = "";
|
variant = "";
|
||||||
options = null; # Or "" if you prefer explicit empty
|
options = null; # Or "" if you prefer explicit empty
|
||||||
};
|
};
|
||||||
|
|
||||||
repeat-rate = 40;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
touchpad = {
|
touchpad = {
|
||||||
|
|
@ -97,7 +87,7 @@ with lib.custom; {
|
||||||
middle-emulation = false; # Commented out
|
middle-emulation = false; # Commented out
|
||||||
};
|
};
|
||||||
|
|
||||||
warp-mouse-to-focus.enable = true;
|
warp-mouse-to-focus = true;
|
||||||
|
|
||||||
focus-follows-mouse = {
|
focus-follows-mouse = {
|
||||||
enable = false; # Commented out in KDL
|
enable = false; # Commented out in KDL
|
||||||
|
|
@ -120,27 +110,6 @@ with lib.custom; {
|
||||||
rotation = 0;
|
rotation = 0;
|
||||||
flipped = false;
|
flipped = false;
|
||||||
};
|
};
|
||||||
position = {
|
|
||||||
x = 2560;
|
|
||||||
y = 0;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs."DP-3" = {
|
|
||||||
enable = true; # Not explicitly 'off'
|
|
||||||
mode = {
|
|
||||||
width = 3840;
|
|
||||||
height = 2160;
|
|
||||||
refresh = 240.0;
|
|
||||||
};
|
|
||||||
variable-refresh-rate = "on-demand";
|
|
||||||
focus-at-startup = true;
|
|
||||||
scale = 1.5;
|
|
||||||
transform = {
|
|
||||||
# "normal"
|
|
||||||
rotation = 0;
|
|
||||||
flipped = false;
|
|
||||||
};
|
|
||||||
position = {
|
position = {
|
||||||
x = 0;
|
x = 0;
|
||||||
y = 0;
|
y = 0;
|
||||||
|
|
@ -170,18 +139,9 @@ with lib.custom; {
|
||||||
|
|
||||||
# preset-window-heights = []; # Empty in KDL
|
# preset-window-heights = []; # Empty in KDL
|
||||||
|
|
||||||
default-column-width = {
|
default-column-width = {proportion = 0.5;};
|
||||||
proportion = 0.5;
|
|
||||||
};
|
|
||||||
# default-column-width = {}; # Alternative from KDL comments
|
# default-column-width = {}; # Alternative from KDL comments
|
||||||
|
|
||||||
# blur = {
|
|
||||||
# enable = true;
|
|
||||||
# passes = 4;
|
|
||||||
# radius = 4.0;
|
|
||||||
# noise = 0.1;
|
|
||||||
# };
|
|
||||||
|
|
||||||
focus-ring = {
|
focus-ring = {
|
||||||
enable = true; # Not explicitly 'off'
|
enable = true; # Not explicitly 'off'
|
||||||
width = 4;
|
width = 4;
|
||||||
|
|
@ -204,24 +164,20 @@ with lib.custom; {
|
||||||
};
|
};
|
||||||
|
|
||||||
struts = {
|
struts = {
|
||||||
# left = 64; # Commented out
|
# left = 64; # Commented out
|
||||||
# right = 64; # Commented out
|
# right = 64; # Commented out
|
||||||
# top = 64; # Commented out
|
# top = 64; # Commented out
|
||||||
# bottom = 64; # Commented out
|
# bottom = 64; # Commented out
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# Spawn processes at startup
|
# Spawn processes at startup
|
||||||
spawn-at-startup = [
|
spawn-at-startup = [
|
||||||
{command = ["xwayland-satellite"];}
|
{command = ["xwayland-satellite"];}
|
||||||
{
|
{command = ["${pkgs.writeShellScriptBin "thunderbird-delayed" ''sleep 5; thunderbird''}/bin/thunderbird-delayed"];}
|
||||||
command = [
|
|
||||||
"${pkgs.writeShellScriptBin "thunderbird-delayed" ''sleep 5; thunderbird''}/bin/thunderbird-delayed"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
{command = ["${pkgs.writeShellScriptBin "zen-delayed" ''sleep 5; zen''}/bin/zen-delayed"];}
|
{command = ["${pkgs.writeShellScriptBin "zen-delayed" ''sleep 5; zen''}/bin/zen-delayed"];}
|
||||||
{command = ["vesktop"];}
|
{command = ["vesktop"];}
|
||||||
{command = ["tidal-hifi"];}
|
{command = ["spotify"];}
|
||||||
|
|
||||||
{command = ["${spawnSlackOnWeekday}/bin/spawn-slack-on-weekday"];}
|
{command = ["${spawnSlackOnWeekday}/bin/spawn-slack-on-weekday"];}
|
||||||
];
|
];
|
||||||
|
|
@ -240,6 +196,10 @@ with lib.custom; {
|
||||||
# Individual animation settings can be added here if needed
|
# Individual animation settings can be added here if needed
|
||||||
};
|
};
|
||||||
|
|
||||||
|
debug = {
|
||||||
|
wait-for-frame-completion-in-pipewire = [];
|
||||||
|
};
|
||||||
|
|
||||||
layer-rules = [
|
layer-rules = [
|
||||||
{
|
{
|
||||||
matches = [
|
matches = [
|
||||||
|
|
@ -381,16 +341,11 @@ with lib.custom; {
|
||||||
# Keybindings
|
# Keybindings
|
||||||
binds =
|
binds =
|
||||||
{
|
{
|
||||||
"Mod+Shift+Slash" = {
|
"Mod+Shift+Slash" = {action = actions.show-hotkey-overlay;};
|
||||||
action = actions.show-hotkey-overlay;
|
|
||||||
};
|
|
||||||
|
|
||||||
"Mod+Return" = {
|
"Mod+Return" = {action = actions.spawn "kitty";};
|
||||||
action = actions.spawn "kitty";
|
"Mod+D" = {action = actions.spawn "fuzzel";};
|
||||||
};
|
"Super+Alt+L" = {action = actions.spawn "swaylock";};
|
||||||
"Mod+D" = {
|
|
||||||
action = actions.spawn "fuzzel";
|
|
||||||
};
|
|
||||||
# "Mod+T" = { action = actions.spawn "bash" "-c" "notify-send hello && exec alacritty"; };
|
# "Mod+T" = { action = actions.spawn "bash" "-c" "notify-send hello && exec alacritty"; };
|
||||||
|
|
||||||
# "Mod+S" = {action = actions.set-dynamic-cast-window;};
|
# "Mod+S" = {action = actions.set-dynamic-cast-window;};
|
||||||
|
|
@ -399,59 +354,43 @@ with lib.custom; {
|
||||||
#
|
#
|
||||||
# "Mod+Z" = {action = actions.clear-dynamic-cast-target;};
|
# "Mod+Z" = {action = actions.clear-dynamic-cast-target;};
|
||||||
|
|
||||||
"Mod+Q" = {
|
"XF86AudioRaiseVolume" = {
|
||||||
action = actions.close-window;
|
allow-when-locked = true;
|
||||||
|
action = actions.spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+";
|
||||||
|
};
|
||||||
|
"XF86AudioLowerVolume" = {
|
||||||
|
allow-when-locked = true;
|
||||||
|
action = actions.spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-";
|
||||||
|
};
|
||||||
|
"XF86AudioMute" = {
|
||||||
|
allow-when-locked = true;
|
||||||
|
action = actions.spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle";
|
||||||
|
};
|
||||||
|
"XF86AudioMicMute" = {
|
||||||
|
allow-when-locked = true;
|
||||||
|
action =
|
||||||
|
actions.spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle";
|
||||||
};
|
};
|
||||||
|
|
||||||
"Mod+Left" = {
|
"Mod+Q" = {action = actions.close-window;};
|
||||||
action = actions.focus-column-left;
|
|
||||||
};
|
|
||||||
"Mod+Down" = {
|
|
||||||
action = actions.focus-window-down;
|
|
||||||
};
|
|
||||||
"Mod+Up" = {
|
|
||||||
action = actions.focus-window-up;
|
|
||||||
};
|
|
||||||
"Mod+Right" = {
|
|
||||||
action = actions.focus-column-right;
|
|
||||||
};
|
|
||||||
"Mod+H" = {
|
|
||||||
action = actions.focus-column-left;
|
|
||||||
};
|
|
||||||
"Mod+J" = {
|
|
||||||
action = actions.focus-window-down;
|
|
||||||
};
|
|
||||||
"Mod+K" = {
|
|
||||||
action = actions.focus-window-up;
|
|
||||||
};
|
|
||||||
"Mod+L" = {
|
|
||||||
action = actions.focus-column-right;
|
|
||||||
};
|
|
||||||
|
|
||||||
"Mod+Ctrl+Left" = {
|
"Mod+Left" = {action = actions.focus-column-left;};
|
||||||
action = actions.move-column-left;
|
"Mod+Down" = {action = actions.focus-window-down;};
|
||||||
};
|
"Mod+Up" = {action = actions.focus-window-up;};
|
||||||
"Mod+Ctrl+Down" = {
|
"Mod+Right" = {action = actions.focus-column-right;};
|
||||||
action = actions.move-window-down;
|
"Mod+H" = {action = actions.focus-column-left;};
|
||||||
};
|
"Mod+J" = {action = actions.focus-window-down;};
|
||||||
"Mod+Ctrl+Up" = {
|
"Mod+K" = {action = actions.focus-window-up;};
|
||||||
action = actions.move-window-up;
|
"Mod+L" = {action = actions.focus-column-right;};
|
||||||
};
|
|
||||||
"Mod+Ctrl+Right" = {
|
"Mod+Ctrl+Left" = {action = actions.move-column-left;};
|
||||||
action = actions.move-column-right;
|
"Mod+Ctrl+Down" = {action = actions.move-window-down;};
|
||||||
};
|
"Mod+Ctrl+Up" = {action = actions.move-window-up;};
|
||||||
"Mod+Ctrl+H" = {
|
"Mod+Ctrl+Right" = {action = actions.move-column-right;};
|
||||||
action = actions.move-column-left;
|
"Mod+Ctrl+H" = {action = actions.move-column-left;};
|
||||||
};
|
"Mod+Ctrl+J" = {action = actions.move-window-down;};
|
||||||
"Mod+Ctrl+J" = {
|
"Mod+Ctrl+K" = {action = actions.move-window-up;};
|
||||||
action = actions.move-window-down;
|
"Mod+Ctrl+L" = {action = actions.move-column-right;};
|
||||||
};
|
|
||||||
"Mod+Ctrl+K" = {
|
|
||||||
action = actions.move-window-up;
|
|
||||||
};
|
|
||||||
"Mod+Ctrl+L" = {
|
|
||||||
action = actions.move-column-right;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Alternative commands (commented out in KDL)
|
# Alternative commands (commented out in KDL)
|
||||||
# "Mod+J" = { action = actions.focus-window-or-workspace-down; };
|
# "Mod+J" = { action = actions.focus-window-or-workspace-down; };
|
||||||
|
|
@ -459,110 +398,44 @@ with lib.custom; {
|
||||||
# "Mod+Ctrl+J" = { action = actions.move-window-down-or-to-workspace-down; };
|
# "Mod+Ctrl+J" = { action = actions.move-window-down-or-to-workspace-down; };
|
||||||
# "Mod+Ctrl+K" = { action = actions.move-window-up-or-to-workspace-up; };
|
# "Mod+Ctrl+K" = { action = actions.move-window-up-or-to-workspace-up; };
|
||||||
|
|
||||||
"Mod+Home" = {
|
"Mod+Home" = {action = actions.focus-column-first;};
|
||||||
action = actions.focus-column-first;
|
"Mod+End" = {action = actions.focus-column-last;};
|
||||||
};
|
"Mod+Ctrl+Home" = {action = actions.move-column-to-first;};
|
||||||
"Mod+End" = {
|
"Mod+Ctrl+End" = {action = actions.move-column-to-last;};
|
||||||
action = actions.focus-column-last;
|
|
||||||
};
|
|
||||||
"Mod+Ctrl+Home" = {
|
|
||||||
action = actions.move-column-to-first;
|
|
||||||
};
|
|
||||||
"Mod+Ctrl+End" = {
|
|
||||||
action = actions.move-column-to-last;
|
|
||||||
};
|
|
||||||
|
|
||||||
"Mod+Shift+Left" = {
|
"Mod+Shift+Left" = {action = actions.focus-monitor-left;};
|
||||||
action = actions.focus-monitor-left;
|
"Mod+Shift+Down" = {action = actions.focus-monitor-down;};
|
||||||
};
|
"Mod+Shift+Up" = {action = actions.focus-monitor-up;};
|
||||||
"Mod+Shift+Down" = {
|
"Mod+Shift+Right" = {action = actions.focus-monitor-right;};
|
||||||
action = actions.focus-monitor-down;
|
"Mod+Shift+H" = {action = actions.focus-monitor-left;};
|
||||||
};
|
"Mod+Shift+J" = {action = actions.focus-workspace-down;};
|
||||||
"Mod+Shift+Up" = {
|
"Mod+Shift+K" = {action = actions.focus-workspace-up;};
|
||||||
action = actions.focus-monitor-up;
|
"Mod+Shift+L" = {action = actions.focus-monitor-right;};
|
||||||
};
|
|
||||||
"Mod+Shift+Right" = {
|
|
||||||
action = actions.focus-monitor-right;
|
|
||||||
};
|
|
||||||
"Mod+Shift+H" = {
|
|
||||||
action = actions.focus-monitor-left;
|
|
||||||
};
|
|
||||||
"Mod+Shift+J" = {
|
|
||||||
action = actions.focus-workspace-down;
|
|
||||||
};
|
|
||||||
"Mod+Shift+K" = {
|
|
||||||
action = actions.focus-workspace-up;
|
|
||||||
};
|
|
||||||
"Mod+Shift+L" = {
|
|
||||||
action = actions.focus-monitor-right;
|
|
||||||
};
|
|
||||||
|
|
||||||
"Mod+Ctrl+Shift+F" = {
|
"Mod+Ctrl+Shift+F" = {action = actions.toggle-windowed-fullscreen;};
|
||||||
action = actions.toggle-windowed-fullscreen;
|
|
||||||
};
|
|
||||||
|
|
||||||
"Mod+Shift+Ctrl+Left" = {
|
"Mod+Shift+Ctrl+Left" = {action = actions.move-column-to-monitor-left;};
|
||||||
action = actions.move-column-to-monitor-left;
|
"Mod+Shift+Ctrl+Down" = {action = actions.move-column-to-monitor-down;};
|
||||||
};
|
"Mod+Shift+Ctrl+Up" = {action = actions.move-column-to-monitor-up;};
|
||||||
"Mod+Shift+Ctrl+Down" = {
|
"Mod+Shift+Ctrl+Right" = {action = actions.move-column-to-monitor-right;};
|
||||||
action = actions.move-column-to-monitor-down;
|
"Mod+Shift+Ctrl+H" = {action = actions.move-column-to-monitor-left;};
|
||||||
};
|
"Mod+Shift+Ctrl+J" = {action = actions.move-column-to-monitor-down;};
|
||||||
"Mod+Shift+Ctrl+Up" = {
|
"Mod+Shift+Ctrl+K" = {action = actions.move-column-to-monitor-up;};
|
||||||
action = actions.move-column-to-monitor-up;
|
"Mod+Shift+Ctrl+L" = {action = actions.move-column-to-monitor-right;};
|
||||||
};
|
|
||||||
"Mod+Shift+Ctrl+Right" = {
|
|
||||||
action = actions.move-column-to-monitor-right;
|
|
||||||
};
|
|
||||||
"Mod+Shift+Ctrl+H" = {
|
|
||||||
action = actions.move-column-to-monitor-left;
|
|
||||||
};
|
|
||||||
"Mod+Shift+Ctrl+J" = {
|
|
||||||
action = actions.move-column-to-monitor-down;
|
|
||||||
};
|
|
||||||
"Mod+Shift+Ctrl+K" = {
|
|
||||||
action = actions.move-column-to-monitor-up;
|
|
||||||
};
|
|
||||||
"Mod+Shift+Ctrl+L" = {
|
|
||||||
action = actions.move-column-to-monitor-right;
|
|
||||||
};
|
|
||||||
|
|
||||||
"Mod+Page_Down" = {
|
"Mod+Page_Down" = {action = actions.focus-workspace-down;};
|
||||||
action = actions.focus-workspace-down;
|
"Mod+Page_Up" = {action = actions.focus-workspace-up;};
|
||||||
};
|
"Mod+U" = {action = actions.focus-workspace-down;};
|
||||||
"Mod+Page_Up" = {
|
"Mod+I" = {action = actions.focus-workspace-up;};
|
||||||
action = actions.focus-workspace-up;
|
"Mod+Ctrl+Page_Down" = {action = actions.move-column-to-workspace-down;};
|
||||||
};
|
"Mod+Ctrl+Page_Up" = {action = actions.move-column-to-workspace-up;};
|
||||||
"Mod+U" = {
|
"Mod+Ctrl+U" = {action = actions.move-column-to-workspace-down;};
|
||||||
action = actions.focus-workspace-down;
|
"Mod+Ctrl+I" = {action = actions.move-column-to-workspace-up;};
|
||||||
};
|
|
||||||
"Mod+I" = {
|
|
||||||
action = actions.focus-workspace-up;
|
|
||||||
};
|
|
||||||
"Mod+Ctrl+Page_Down" = {
|
|
||||||
action = actions.move-column-to-workspace-down;
|
|
||||||
};
|
|
||||||
"Mod+Ctrl+Page_Up" = {
|
|
||||||
action = actions.move-column-to-workspace-up;
|
|
||||||
};
|
|
||||||
"Mod+Ctrl+U" = {
|
|
||||||
action = actions.move-column-to-workspace-down;
|
|
||||||
};
|
|
||||||
"Mod+Ctrl+I" = {
|
|
||||||
action = actions.move-column-to-workspace-up;
|
|
||||||
};
|
|
||||||
|
|
||||||
"Mod+Shift+Page_Down" = {
|
"Mod+Shift+Page_Down" = {action = actions.move-workspace-down;};
|
||||||
action = actions.move-workspace-down;
|
"Mod+Shift+Page_Up" = {action = actions.move-workspace-up;};
|
||||||
};
|
"Mod+Shift+U" = {action = actions.move-workspace-down;};
|
||||||
"Mod+Shift+Page_Up" = {
|
"Mod+Shift+I" = {action = actions.move-workspace-up;};
|
||||||
action = actions.move-workspace-up;
|
|
||||||
};
|
|
||||||
"Mod+Shift+U" = {
|
|
||||||
action = actions.move-workspace-down;
|
|
||||||
};
|
|
||||||
"Mod+Shift+I" = {
|
|
||||||
action = actions.move-workspace-up;
|
|
||||||
};
|
|
||||||
|
|
||||||
"Mod+WheelScrollDown" = {
|
"Mod+WheelScrollDown" = {
|
||||||
cooldown-ms = 150;
|
cooldown-ms = 150;
|
||||||
|
|
@ -581,116 +454,60 @@ with lib.custom; {
|
||||||
action = actions.move-column-to-workspace-up;
|
action = actions.move-column-to-workspace-up;
|
||||||
};
|
};
|
||||||
|
|
||||||
"Mod+WheelScrollRight" = {
|
"Mod+WheelScrollRight" = {action = actions.focus-column-right;};
|
||||||
action = actions.focus-column-right;
|
"Mod+WheelScrollLeft" = {action = actions.focus-column-left;};
|
||||||
};
|
"Mod+Ctrl+WheelScrollRight" = {action = actions.move-column-right;};
|
||||||
"Mod+WheelScrollLeft" = {
|
"Mod+Ctrl+WheelScrollLeft" = {action = actions.move-column-left;};
|
||||||
action = actions.focus-column-left;
|
|
||||||
};
|
|
||||||
"Mod+Ctrl+WheelScrollRight" = {
|
|
||||||
action = actions.move-column-right;
|
|
||||||
};
|
|
||||||
"Mod+Ctrl+WheelScrollLeft" = {
|
|
||||||
action = actions.move-column-left;
|
|
||||||
};
|
|
||||||
|
|
||||||
"Mod+Shift+WheelScrollDown" = {
|
"Mod+Shift+WheelScrollDown" = {action = actions.focus-column-right;};
|
||||||
action = actions.focus-column-right;
|
"Mod+Shift+WheelScrollUp" = {action = actions.focus-column-left;};
|
||||||
};
|
"Mod+Ctrl+Shift+WheelScrollDown" = {action = actions.move-column-right;};
|
||||||
"Mod+Shift+WheelScrollUp" = {
|
"Mod+Ctrl+Shift+WheelScrollUp" = {action = actions.move-column-left;};
|
||||||
action = actions.focus-column-left;
|
|
||||||
};
|
|
||||||
"Mod+Ctrl+Shift+WheelScrollDown" = {
|
|
||||||
action = actions.move-column-right;
|
|
||||||
};
|
|
||||||
"Mod+Ctrl+Shift+WheelScrollUp" = {
|
|
||||||
action = actions.move-column-left;
|
|
||||||
};
|
|
||||||
|
|
||||||
"Mod+Shift+Comma" = {
|
"Mod+Comma" = {action = actions.consume-window-into-column;};
|
||||||
action = actions.consume-window-into-column;
|
"Mod+Period" = {action = actions.expel-window-from-column;};
|
||||||
};
|
|
||||||
"Mod+Period" = {
|
|
||||||
action = actions.expel-window-from-column;
|
|
||||||
};
|
|
||||||
|
|
||||||
"Mod+BracketLeft" = {
|
"Mod+BracketLeft" = {action = actions.consume-or-expel-window-left;};
|
||||||
action = actions.consume-or-expel-window-left;
|
"Mod+BracketRight" = {action = actions.consume-or-expel-window-right;};
|
||||||
};
|
|
||||||
"Mod+BracketRight" = {
|
|
||||||
action = actions.consume-or-expel-window-right;
|
|
||||||
};
|
|
||||||
|
|
||||||
"Mod+R" = {
|
"Mod+R" = {action = actions.switch-preset-column-width;};
|
||||||
action = actions.switch-preset-column-width;
|
"Mod+Shift+R" = {action = actions.switch-preset-window-height;};
|
||||||
};
|
"Mod+Ctrl+R" = {action = actions.reset-window-height;};
|
||||||
"Mod+Shift+R" = {
|
"Mod+F" = {action = actions.maximize-column;};
|
||||||
action = actions.switch-preset-window-height;
|
"Mod+Shift+F" = {action = actions.fullscreen-window;};
|
||||||
};
|
"Mod+C" = {action = actions.center-column;};
|
||||||
"Mod+Ctrl+R" = {
|
"Mod+Ctrl+F" = {action = actions.expand-column-to-available-width;};
|
||||||
action = actions.reset-window-height;
|
|
||||||
};
|
|
||||||
"Mod+F" = {
|
|
||||||
action = actions.maximize-column;
|
|
||||||
};
|
|
||||||
"Mod+Shift+F" = {
|
|
||||||
action = actions.fullscreen-window;
|
|
||||||
};
|
|
||||||
"Mod+C" = {
|
|
||||||
action = actions.center-column;
|
|
||||||
};
|
|
||||||
"Mod+Ctrl+F" = {
|
|
||||||
action = actions.expand-column-to-available-width;
|
|
||||||
};
|
|
||||||
|
|
||||||
"Mod+Shift+V" = {
|
"Mod+V" = {action = actions.toggle-window-floating;};
|
||||||
action = actions.toggle-window-floating;
|
|
||||||
};
|
|
||||||
|
|
||||||
"Mod+Minus" = {
|
"Mod+Minus" = {action = actions.set-column-width "-10%";};
|
||||||
action = actions.set-column-width "-10%";
|
"Mod+Equal" = {action = actions.set-column-width "+10%";};
|
||||||
};
|
|
||||||
"Mod+Equal" = {
|
|
||||||
action = actions.set-column-width "+10%";
|
|
||||||
};
|
|
||||||
|
|
||||||
"Mod+Shift+Minus" = {
|
"Mod+Shift+Minus" = {action = actions.set-window-height "-10%";};
|
||||||
action = actions.set-window-height "-10%";
|
"Mod+Shift+Equal" = {action = actions.set-window-height "+10%";};
|
||||||
};
|
|
||||||
"Mod+Shift+Equal" = {
|
|
||||||
action = actions.set-window-height "+10%";
|
|
||||||
};
|
|
||||||
|
|
||||||
"Print" = {
|
"Print" = {action = actions.screenshot {};}; # Empty attrset for default args
|
||||||
action.screenshot = [];
|
"Mod+Shift+E" = {action = actions.quit {};}; # Default: no skip-confirmation
|
||||||
}; # Empty attrset for default args
|
"Ctrl+Alt+Delete" = {action = actions.quit {};};
|
||||||
"Mod+Shift+E" = {
|
|
||||||
action = actions.quit {};
|
|
||||||
}; # Default: no skip-confirmation
|
|
||||||
"Ctrl+Alt+Delete" = {
|
|
||||||
action = actions.quit {};
|
|
||||||
};
|
|
||||||
|
|
||||||
"Mod+Shift+P" = {
|
"Mod+Shift+P" = {action = actions.power-off-monitors;};
|
||||||
action = actions.power-off-monitors;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
// lib.attrsets.listToAttrs (
|
// lib.attrsets.listToAttrs (builtins.concatMap (i:
|
||||||
builtins.concatMap (i: [
|
with actions; [
|
||||||
{
|
{
|
||||||
name = "Mod+${toString i}";
|
name = "Mod+${toString i}";
|
||||||
value.action = actions.focus-workspace i;
|
value.action = focus-workspace i;
|
||||||
}
|
}
|
||||||
# FIXME: use this action directly untril sodiboo/niri-flake#1018 is fixed.
|
# FIXME: use this action directly untril sodiboo/niri-flake#1018 is fixed.
|
||||||
{
|
{
|
||||||
name = "Mod+Shift+${toString i}";
|
name = "Mod+Shift+${toString i}";
|
||||||
value.action.move-window-to-workspace = i;
|
value.action = spawn [niri "msg" "action" "move-column-to-workspace" (toString i)];
|
||||||
}
|
}
|
||||||
]) (lib.range 1 9)
|
]) (lib.range 1 9));
|
||||||
);
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# services.wallpaper.enable = true;
|
services.quickshell.enable = false;
|
||||||
|
services.wallpaper.enable = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,9 +24,39 @@ in {
|
||||||
jack.enable = true;
|
jack.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
services.pipewire.extraConfig.pipewire."92-low-latency" = {
|
systemd.user.services.cava-combine-inputs = {
|
||||||
"context.properties" = {
|
description = "Combine MOTU M4 Line Inputs L/R for Cava";
|
||||||
"default.clock.rate" = 192000;
|
|
||||||
|
# Ensure this runs after pipewire-pulse is started
|
||||||
|
after = ["pipewire-pulse.service"];
|
||||||
|
wants = ["pipewire-pulse.service"]; # Start pipewire-pulse if not already running
|
||||||
|
|
||||||
|
# Make it part of the default user session target
|
||||||
|
wantedBy = ["default.target"];
|
||||||
|
|
||||||
|
# Service configuration details
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot"; # Run the command once and exit
|
||||||
|
# Use RemainAfterExit if you want the service to show as 'active' after running
|
||||||
|
# RemainAfterExit = true;
|
||||||
|
|
||||||
|
# Command to execute. Use full paths for robustness.
|
||||||
|
# We use sh -c to run multiple commands sequentially.
|
||||||
|
# pactl is provided by the pulseaudio package.
|
||||||
|
ExecStart = "${pkgs.writeShellScriptBin "cava-start" ''
|
||||||
|
echo "Attempting to load Cava combine modules..."
|
||||||
|
# Load null sink (returns non-zero if it fails AND module doesn't exist)
|
||||||
|
${pkgs.pulseaudio}/bin/pactl load-module module-null-sink sink_name=cava-line-in sink_properties=device.description="Cava_Combined_LineIn"
|
||||||
|
# Load loopbacks (returns non-zero on failure)
|
||||||
|
${pkgs.pulseaudio}/bin/pactl load-module module-loopback source="alsa_input.usb-MOTU_M4_M4MA03F7DV-00.HiFi__Line3__source" sink=cava-line-in latency_msec=10
|
||||||
|
${pkgs.pulseaudio}/bin/pactl load-module module-loopback source="alsa_input.usb-MOTU_M4_M4MA03F7DV-00.HiFi__Line4__source" sink=cava-line-in latency_msec=10
|
||||||
|
echo "Finished loading Cava combine modules (ignore errors if already loaded)."
|
||||||
|
# Exit successfully even if modules were already loaded (pactl might return 0)
|
||||||
|
exit 0
|
||||||
|
''}/bin/cava-start";
|
||||||
|
|
||||||
|
# Prevent service from restarting automatically
|
||||||
|
Restart = "no";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -24,9 +24,9 @@ with lib.custom; let
|
||||||
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
|
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
|
||||||
|
|
||||||
# Isolate host to core 0
|
# Isolate host to core 0
|
||||||
systemctl set-property --runtime -- user.slice AllowedCPUs=0-15
|
systemctl set-property --runtime -- user.slice AllowedCPUs=0-8
|
||||||
systemctl set-property --runtime -- system.slice AllowedCPUs=0-15
|
systemctl set-property --runtime -- system.slice AllowedCPUs=0-8
|
||||||
systemctl set-property --runtime -- init.scope AllowedCPUs=0-15
|
systemctl set-property --runtime -- init.scope AllowedCPUs=0-8
|
||||||
|
|
||||||
# disable vpn
|
# disable vpn
|
||||||
mullvad disconnect -w
|
mullvad disconnect -w
|
||||||
|
|
@ -110,6 +110,14 @@ with lib.custom; let
|
||||||
libvirtd-cfg = config.virtualisation.libvirtd;
|
libvirtd-cfg = config.virtualisation.libvirtd;
|
||||||
|
|
||||||
qemuConfigFile = pkgs.writeText "qemu.conf" ''
|
qemuConfigFile = pkgs.writeText "qemu.conf" ''
|
||||||
|
${optionalString libvirtd-cfg.qemu.ovmf.enable ''
|
||||||
|
nvram = [
|
||||||
|
"/run/libvirt/nix-ovmf/AAVMF_CODE.fd:/run/libvirt/nix-ovmf/AAVMF_VARS.fd",
|
||||||
|
"/run/libvirt/nix-ovmf/AAVMF_CODE.ms.fd:/run/libvirt/nix-ovmf/AAVMF_VARS.ms.fd",
|
||||||
|
"/run/libvirt/nix-ovmf/OVMF_CODE.fd:/run/libvirt/nix-ovmf/OVMF_VARS.fd",
|
||||||
|
"/run/libvirt/nix-ovmf/OVMF_CODE.ms.fd:/run/libvirt/nix-ovmf/OVMF_VARS.ms.fd"
|
||||||
|
]
|
||||||
|
''}
|
||||||
${optionalString (!libvirtd-cfg.qemu.runAsRoot) ''
|
${optionalString (!libvirtd-cfg.qemu.runAsRoot) ''
|
||||||
user = "qemu-libvirtd"
|
user = "qemu-libvirtd"
|
||||||
group = "qemu-libvirtd"
|
group = "qemu-libvirtd"
|
||||||
|
|
@ -154,6 +162,16 @@ in {
|
||||||
package = pkgs.qemu_kvm;
|
package = pkgs.qemu_kvm;
|
||||||
runAsRoot = true;
|
runAsRoot = true;
|
||||||
swtpm.enable = true;
|
swtpm.enable = true;
|
||||||
|
ovmf = {
|
||||||
|
enable = true;
|
||||||
|
packages = [
|
||||||
|
(pkgs.OVMF.override {
|
||||||
|
secureBoot = true;
|
||||||
|
tpmSupport = true;
|
||||||
|
})
|
||||||
|
.fd
|
||||||
|
];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -199,17 +217,29 @@ in {
|
||||||
done
|
done
|
||||||
|
|
||||||
ln -s --force ${libvirtd-cfg.qemu.package}/bin/qemu-pr-helper /run/${dirName}/nix-helpers/
|
ln -s --force ${libvirtd-cfg.qemu.package}/bin/qemu-pr-helper /run/${dirName}/nix-helpers/
|
||||||
|
|
||||||
|
${optionalString libvirtd-cfg.qemu.ovmf.enable (
|
||||||
|
let
|
||||||
|
ovmfpackage = pkgs.buildEnv {
|
||||||
|
name = "qemu-ovmf";
|
||||||
|
paths = libvirtd-cfg.qemu.ovmf.packages;
|
||||||
|
};
|
||||||
|
in ''
|
||||||
|
ln -s --force ${ovmfpackage}/FV/AAVMF_CODE{,.ms}.fd /run/${dirName}/nix-ovmf/
|
||||||
|
ln -s --force ${ovmfpackage}/FV/OVMF_CODE{,.ms}.fd /run/${dirName}/nix-ovmf/
|
||||||
|
ln -s --force ${ovmfpackage}/FV/AAVMF_VARS{,.ms}.fd /run/${dirName}/nix-ovmf/
|
||||||
|
ln -s --force ${ovmfpackage}/FV/OVMF_VARS{,.ms}.fd /run/${dirName}/nix-ovmf/
|
||||||
|
''
|
||||||
|
)}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
system.activationScripts.libvirt-hooks.text = ''
|
system.activationScripts.libvirt-hooks.text = ''
|
||||||
ln -Tfs /etc/libvirt/hooks /var/lib/libvirt/hooks
|
ln -Tfs /etc/libvirt/hooks /var/lib/libvirt/hooks
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
# libguestfs
|
libguestfs-with-appliance
|
||||||
# ];
|
];
|
||||||
|
|
||||||
networking.firewall.trustedInterfaces = ["virbr0"];
|
|
||||||
|
|
||||||
environment.etc = {
|
environment.etc = {
|
||||||
"/libvirt/hooks/qemu" = {
|
"/libvirt/hooks/qemu" = {
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ in {
|
||||||
# supported GPUs is at:
|
# supported GPUs is at:
|
||||||
# https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus
|
# https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus
|
||||||
# Only available from driver 515.43.04+
|
# Only available from driver 515.43.04+
|
||||||
|
# Currently alpha-quality/buggy, so false is currently the recommended setting.
|
||||||
open = true;
|
open = true;
|
||||||
|
|
||||||
# Enable the Nvidia settings menu,
|
# Enable the Nvidia settings menu,
|
||||||
|
|
@ -43,19 +44,45 @@ in {
|
||||||
nvidiaSettings = false;
|
nvidiaSettings = false;
|
||||||
|
|
||||||
# Optionally, you may need to select the appropriate driver version for your specific GPU.
|
# Optionally, you may need to select the appropriate driver version for your specific GPU.
|
||||||
package = config.boot.kernelPackages.nvidiaPackages.mkDriver {
|
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||||
version = "580.82.09";
|
# package = config.boot.kernelPackages.nvidiaPackages.beta.overrideAttrs {
|
||||||
sha256_64bit = "sha256-Puz4MtouFeDgmsNMKdLHoDgDGC+QRXh6NVysvltWlbc=";
|
# patchesOpen = with pkgs; [
|
||||||
sha256_aarch64 = "sha256-6tHiAci9iDTKqKrDIjObeFdtrlEwjxOHJpHfX4GMEGQ=";
|
# (fetchpatch {
|
||||||
openSha256 = "sha256-YB+mQD+oEDIIDa+e8KX1/qOlQvZMNKFrI5z3CoVKUjs=";
|
# url = "https://raw.githubusercontent.com/CachyOS/kernel-patches/master/6.14/misc/nvidia/0001-Enable-atomic-kernel-modesetting-by-default.patch";
|
||||||
settingsSha256 = "sha256-um53cr2Xo90VhZM1bM2CH4q9b/1W2YOqUcvXPV6uw2s=";
|
# hash = "sha256-tvdm8nxxXslPUun33zj1kkYZOiWKK3F4nwcCkdzPW9s=";
|
||||||
persistencedSha256 = "sha256-lbYSa97aZ+k0CISoSxOMLyyMX//Zg2Raym6BC4COipU=";
|
# })
|
||||||
};
|
# (fetchpatch {
|
||||||
|
# url = "https://raw.githubusercontent.com/CachyOS/kernel-patches/master/6.14/misc/nvidia/0002-Add-IBT-support.patch";
|
||||||
|
# hash = "sha256-JUT8FwBhyRhOWxwET7Zw/xkIl8g6UCLMXSTofr0OuSg=";
|
||||||
|
# })
|
||||||
|
# (fetchpatch {
|
||||||
|
# url = "https://raw.githubusercontent.com/CachyOS/kernel-patches/master/6.14/misc/nvidia/0003-Kbuild-Convert-EXTRA_CFLAGS-to-ccflags-y.patch";
|
||||||
|
# hash = "sha256-W+yyiK6TpEs9IACMr/0V7EIP++u7MPOfa9ko3w8Gqtc=";
|
||||||
|
# })
|
||||||
|
# (fetchpatch {
|
||||||
|
# url = "https://raw.githubusercontent.com/CachyOS/kernel-patches/master/6.14/misc/nvidia/0004-kernel-open-nvidia-Use-new-timer-functions-for-6.15.patch";
|
||||||
|
# hash = "sha256-T3SY2O6Pmc8BA0oana5xGGDhBxCizwmRqMyPvgF3j8A=";
|
||||||
|
# })
|
||||||
|
# (fetchpatch {
|
||||||
|
# url = "https://raw.githubusercontent.com/CachyOS/kernel-patches/master/6.14/misc/nvidia/0005-nvidia-uvm-Use-__iowrite64_hi_lo.patch";
|
||||||
|
# hash = "sha256-T8BNr1H1vgEQoKB0S5cqcbq6fSQxiDK9bb/MCvMtzTI";
|
||||||
|
# })
|
||||||
|
# (fetchpatch {
|
||||||
|
# url = "https://raw.githubusercontent.com/CachyOS/kernel-patches/master/6.14/misc/nvidia/0006-nvidia-uvm-Use-page_pgmap.patch";
|
||||||
|
# hash = "sha256-YucFZ2Z7YSgUiah82uLOmd4Z/c5YLOXxzEZNO6ZvQQg=";
|
||||||
|
# })
|
||||||
|
# (fetchpatch {
|
||||||
|
# url = "https://raw.githubusercontent.com/CachyOS/kernel-patches/master/6.14/misc/nvidia/0007-nvidia-uvm-Convert-make_device_exclusive_range-to-ma.patch";
|
||||||
|
# hash = "sha256-AehV7D+yYBmE8FWsUiagnjB8V7S8RJSTNcVMwZIgw/I=";
|
||||||
|
# })
|
||||||
|
# (fetchpatch {
|
||||||
|
# url = "https://raw.githubusercontent.com/CachyOS/kernel-patches/master/6.14/misc/nvidia/0008-kbuild-Add-workaround-for-GCC-15-Compilation.patch";
|
||||||
|
# hash = "sha256-HrYBiAFy62Jll+ceVnGuJKGKDoaRObjAGIYa+yrAogA=";
|
||||||
|
# })
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
};
|
};
|
||||||
|
|
||||||
boot.initrd.kernelModules = ["nvidia"];
|
|
||||||
boot.extraModulePackages = [config.boot.kernelPackages.nvidia_x11];
|
|
||||||
|
|
||||||
environment.variables = {
|
environment.variables = {
|
||||||
GBM_BACKEND = "nvidia-drm";
|
GBM_BACKEND = "nvidia-drm";
|
||||||
WLR_NO_HARDWARE_CURSORS = "1";
|
WLR_NO_HARDWARE_CURSORS = "1";
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,8 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services.displayManager.gdm.enable = false;
|
services.xserver.displayManager.gdm.enable = false;
|
||||||
services.displayManager.gdm.wayland = true;
|
services.xserver.displayManager.gdm.wayland = true;
|
||||||
|
|
||||||
# services.displayManager.sddm.enable = true;
|
# services.displayManager.sddm.enable = true;
|
||||||
# services.displayManager.sddm.package = lib.mkForce pkgs.kdePackages.sddm;
|
# services.displayManager.sddm.package = lib.mkForce pkgs.kdePackages.sddm;
|
||||||
|
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib;
|
|
||||||
with lib.custom; let
|
|
||||||
cfg = config.services.crypto;
|
|
||||||
in {
|
|
||||||
options.services.crypto = with types; {
|
|
||||||
enable = mkBoolOpt false "Enable Monero";
|
|
||||||
};
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
services.wg-container.enable = true;
|
|
||||||
|
|
||||||
# systemd.services.monero.vpnConfinement = {
|
|
||||||
# enable = true;
|
|
||||||
# vpnNamespace = "wg";
|
|
||||||
# };
|
|
||||||
#
|
|
||||||
# services.monero = {
|
|
||||||
# enable = true;
|
|
||||||
# mining.enable = false;
|
|
||||||
# rpc = {address = "192.168.15.1";};
|
|
||||||
# extraConfig = ''
|
|
||||||
# confirm-external-bind=1
|
|
||||||
# '';
|
|
||||||
# };
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -33,7 +33,7 @@ in {
|
||||||
gitlab-email-pw-hashed.file = ./sec/gitlab-email-pw-hashed.age;
|
gitlab-email-pw-hashed.file = ./sec/gitlab-email-pw-hashed.age;
|
||||||
};
|
};
|
||||||
|
|
||||||
mailserver = rec {
|
mailserver = {
|
||||||
enable = true;
|
enable = true;
|
||||||
fqdn = "mail.zoeys.email";
|
fqdn = "mail.zoeys.email";
|
||||||
domains = ["zoeys.email" "zoeys.cloud" "zoeys.computer" "zackmyers.io" "zacharymyers.com" "pictureofcat.com"];
|
domains = ["zoeys.email" "zoeys.cloud" "zoeys.computer" "zackmyers.io" "zacharymyers.com" "pictureofcat.com"];
|
||||||
|
|
@ -64,23 +64,27 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
enableManageSieve = true;
|
certificateScheme = "acme-nginx";
|
||||||
|
|
||||||
dmarcReporting.enable = true;
|
|
||||||
|
|
||||||
x509.useACMEHost = fqdn;
|
|
||||||
virusScanning = true;
|
virusScanning = true;
|
||||||
stateVersion = 3;
|
stateVersion = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
services.nginx = {
|
# services.nginx = {
|
||||||
virtualHosts = {
|
# virtualHosts = {
|
||||||
"${config.mailserver.fqdn}" = {
|
# "cal.zoeys.cloud" = {
|
||||||
forceSSL = true;
|
# forceSSL = true;
|
||||||
enableACME = true;
|
# enableACME = true;
|
||||||
};
|
# locations."/" = {
|
||||||
};
|
# proxyPass = "http://localhost:5232/";
|
||||||
};
|
# extraConfig = ''
|
||||||
|
# proxy_set_header X-Script-Name /;
|
||||||
|
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
# proxy_pass_header Authorization;
|
||||||
|
# '';
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
|
||||||
services.roundcube = {
|
services.roundcube = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
|
||||||
|
|
@ -1,146 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib;
|
|
||||||
with lib.custom; let
|
|
||||||
cfg = config.services.matrix;
|
|
||||||
in {
|
|
||||||
options.services.matrix = with types; {
|
|
||||||
enable = mkBoolOpt false "Matrix Web Server";
|
|
||||||
};
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
sops = {
|
|
||||||
defaultSopsFile = ../../../.sops.yaml;
|
|
||||||
gnupg.home = "/var/lib/sops";
|
|
||||||
gnupg.sshKeyPaths = [];
|
|
||||||
|
|
||||||
secrets = {
|
|
||||||
"password" = {
|
|
||||||
sopsFile = ../../../../secrets/matrix-db.yaml;
|
|
||||||
owner = "root";
|
|
||||||
group = "root";
|
|
||||||
mode = "0444";
|
|
||||||
neededForUsers = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services.matrix-synapse-next = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
workers.federationSenders = 2;
|
|
||||||
workers.federationReceivers = 2;
|
|
||||||
workers.initialSyncers = 2;
|
|
||||||
workers.normalSyncers = 2;
|
|
||||||
workers.eventPersisters = 2;
|
|
||||||
workers.useUserDirectoryWorker = true;
|
|
||||||
|
|
||||||
enableNginx = true;
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
server_name = "zoeys.cloud";
|
|
||||||
|
|
||||||
recaptcha_public_key = "6LdcENQrAAAAAKFi-gTzPnf6Q2xq7yTmIYv6Xw5o";
|
|
||||||
recaptcha_private_key = "6LdcENQrAAAAABfnE6TVkMWtRrw0OZqZEfYaGm7m";
|
|
||||||
|
|
||||||
enable_registration = true;
|
|
||||||
enable_registration_captcha = true;
|
|
||||||
|
|
||||||
database = {
|
|
||||||
name = "psycopg2";
|
|
||||||
args = {
|
|
||||||
host = "localhost";
|
|
||||||
user = "synapse";
|
|
||||||
password = "synapse";
|
|
||||||
dbname = "synapse";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services.redis.servers."".enable = true;
|
|
||||||
|
|
||||||
services.coturn = rec {
|
|
||||||
enable = true;
|
|
||||||
no-cli = true;
|
|
||||||
no-tcp-relay = true;
|
|
||||||
min-port = 49000;
|
|
||||||
max-port = 50000;
|
|
||||||
use-auth-secret = true;
|
|
||||||
static-auth-secret = "will be world readable for local users :(";
|
|
||||||
realm = "turn.zoeys.cloud";
|
|
||||||
cert = "${config.security.acme.certs.${realm}.directory}/full.pem";
|
|
||||||
pkey = "${config.security.acme.certs.${realm}.directory}/key.pem";
|
|
||||||
extraConfig = ''
|
|
||||||
verbose
|
|
||||||
|
|
||||||
no-multicast-peers
|
|
||||||
denied-peer-ip=0.0.0.0-0.255.255.255
|
|
||||||
denied-peer-ip=10.0.0.0-10.255.255.255
|
|
||||||
denied-peer-ip=100.64.0.0-100.127.255.255
|
|
||||||
denied-peer-ip=127.0.0.0-127.255.255.255
|
|
||||||
denied-peer-ip=169.254.0.0-169.254.255.255
|
|
||||||
denied-peer-ip=172.16.0.0-172.31.255.255
|
|
||||||
denied-peer-ip=192.0.0.0-192.0.0.255
|
|
||||||
denied-peer-ip=192.0.2.0-192.0.2.255
|
|
||||||
denied-peer-ip=192.88.99.0-192.88.99.255
|
|
||||||
denied-peer-ip=192.168.0.0-192.168.255.255
|
|
||||||
denied-peer-ip=198.18.0.0-198.19.255.255
|
|
||||||
denied-peer-ip=198.51.100.0-198.51.100.255
|
|
||||||
denied-peer-ip=203.0.113.0-203.0.113.255
|
|
||||||
denied-peer-ip=240.0.0.0-255.255.255.255
|
|
||||||
denied-peer-ip=::1
|
|
||||||
denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
|
|
||||||
denied-peer-ip=::ffff:0.0.0.0-::ffff:255.255.255.255
|
|
||||||
denied-peer-ip=100::-100::ffff:ffff:ffff:ffff
|
|
||||||
denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
|
|
||||||
denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff
|
|
||||||
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
|
|
||||||
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.firewall = {
|
|
||||||
interfaces.ens3 = let
|
|
||||||
range = with config.services.coturn; [
|
|
||||||
{
|
|
||||||
from = min-port;
|
|
||||||
to = max-port;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
in {
|
|
||||||
allowedUDPPortRanges = range;
|
|
||||||
allowedUDPPorts = [3478 5349];
|
|
||||||
allowedTCPPortRanges = [];
|
|
||||||
allowedTCPPorts = [3478 5349];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services.nginx.virtualHosts.${config.services.coturn.realm} = {
|
|
||||||
forceSSL = true;
|
|
||||||
enableACME = true;
|
|
||||||
locations."/" = {
|
|
||||||
return = "200 '<html><body>Hai :3</body></html>'";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
users.groups.turnserver.members = ["nginx"];
|
|
||||||
|
|
||||||
security.acme.certs.${config.services.coturn.realm} = {
|
|
||||||
/*
|
|
||||||
insert here the right configuration to obtain a certificate
|
|
||||||
*/
|
|
||||||
postRun = "systemctl restart coturn.service";
|
|
||||||
group = "turnserver";
|
|
||||||
};
|
|
||||||
# configure synapse to point users to coturn
|
|
||||||
services.matrix-synapse.settings = with config.services.coturn; {
|
|
||||||
turn_uris = ["turn:${realm}:3478?transport=udp" "turn:${realm}:3478?transport=tcp"];
|
|
||||||
turn_shared_secret = static-auth-secret;
|
|
||||||
turn_user_lifetime = "1h";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib;
|
|
||||||
with lib.custom; let
|
|
||||||
cfg = config.services.torrent;
|
|
||||||
in {
|
|
||||||
options.services.torrent = with types; {
|
|
||||||
enable = mkBoolOpt false "Enable Transmission Service (for Linux ISOs)";
|
|
||||||
};
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
services.wg-container.enable = true;
|
|
||||||
|
|
||||||
systemd.services.transmission.vpnConfinement = {
|
|
||||||
enable = true;
|
|
||||||
vpnNamespace = "wg";
|
|
||||||
};
|
|
||||||
|
|
||||||
services.transmission = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.transmission_4;
|
|
||||||
settings = {
|
|
||||||
incomplete-dir-enabled = true;
|
|
||||||
rpc-bind-address = "192.168.15.1"; # Bind RPC/WebUI to VPN network namespace address
|
|
||||||
rpc-whitelist-enabled = false;
|
|
||||||
rpc-whitelist = [
|
|
||||||
"192.168.15.1"
|
|
||||||
"192.168.15.5" # Access from default network namespace
|
|
||||||
"192.168.1.*" # Access from other machines on specific subnet
|
|
||||||
"127.0.0.1" # Access through loopback within VPN network namespace
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -10,12 +10,25 @@ with lib.custom; let
|
||||||
in {
|
in {
|
||||||
options.services.vpn = with types; {
|
options.services.vpn = with types; {
|
||||||
enable = mkBoolOpt false "Enable VPN service(s)";
|
enable = mkBoolOpt false "Enable VPN service(s)";
|
||||||
|
|
||||||
|
mullvad = mkBoolOpt false "Enable Mullvad VPN Daemon";
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
services.mullvad-vpn = {
|
services.mullvad-vpn = {
|
||||||
enable = true;
|
enable = cfg.mullvad;
|
||||||
package = nixos-stable.mullvad;
|
package = nixos-stable.mullvad;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
services.openvpn = {
|
||||||
|
servers = {
|
||||||
|
work = {
|
||||||
|
config = ''config /home/zoey/Downloads/zachary_myers.ovpn'';
|
||||||
|
updateResolvConf = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.openvpn-work.wantedBy = lib.mkForce [];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ in {
|
||||||
|
|
||||||
services.nginx = {
|
services.nginx = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# package = pkgs.nginxStable.override {openssl = pkgs.libressl;};
|
package = pkgs.nginxStable.override {openssl = pkgs.libressl;};
|
||||||
recommendedProxySettings = true;
|
recommendedProxySettings = true;
|
||||||
recommendedGzipSettings = true;
|
recommendedGzipSettings = true;
|
||||||
recommendedOptimisation = true;
|
recommendedOptimisation = true;
|
||||||
|
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib;
|
|
||||||
with lib.custom; let
|
|
||||||
cfg = config.services.wg-container;
|
|
||||||
in {
|
|
||||||
options.services.wg-container = with types; {
|
|
||||||
enable = mkBoolOpt false "Enable Wireguard Container";
|
|
||||||
};
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
sops = {
|
|
||||||
defaultSopsFile = ../../../.sops.yaml;
|
|
||||||
gnupg.home = "/var/lib/sops";
|
|
||||||
gnupg.sshKeyPaths = [];
|
|
||||||
|
|
||||||
secrets = {
|
|
||||||
"vpn_config_file" = {
|
|
||||||
sopsFile = ../../../../secrets/vpn-config.yaml;
|
|
||||||
owner = "root";
|
|
||||||
group = "root";
|
|
||||||
mode = "0400";
|
|
||||||
neededForUsers = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
vpnNamespaces.wg = {
|
|
||||||
enable = true;
|
|
||||||
wireguardConfigFile = config.sops.secrets.vpn_config_file.path;
|
|
||||||
accessibleFrom = [
|
|
||||||
"192.168.0.0/24"
|
|
||||||
];
|
|
||||||
portMappings = [
|
|
||||||
{
|
|
||||||
from = 18081;
|
|
||||||
to = 18081;
|
|
||||||
protocol = "both";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
from = 9091;
|
|
||||||
to = 9091;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -36,7 +36,7 @@ in {
|
||||||
catppuccin.forgejo.enable = false;
|
catppuccin.forgejo.enable = false;
|
||||||
|
|
||||||
services.gitea-actions-runner = {
|
services.gitea-actions-runner = {
|
||||||
package = pkgs.forgejo-runner;
|
package = pkgs.forgejo-actions-runner;
|
||||||
instances.default = {
|
instances.default = {
|
||||||
enable = true;
|
enable = true;
|
||||||
name = "monolith";
|
name = "monolith";
|
||||||
|
|
|
||||||
|
|
@ -19,5 +19,19 @@ in {
|
||||||
user = "zoey";
|
user = "zoey";
|
||||||
group = "users";
|
group = "users";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# virtualisation.oci-containers = {
|
||||||
|
# containers.jellyfin-vue = {
|
||||||
|
# image = "ghcr.io/jellyfin/jellyfin-vue:unstable";
|
||||||
|
# environment = {
|
||||||
|
# "PUBLIC_JELLYFIN_API" = "http://localhost:8096";
|
||||||
|
# };
|
||||||
|
# ports = [
|
||||||
|
# "8065:80"
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [8065];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ in {
|
||||||
|
|
||||||
systemd.services."mirror-update" = {
|
systemd.services."mirror-update" = {
|
||||||
script = ''
|
script = ''
|
||||||
${pkgs.rsync}/bin/rsync -vPa --delete-after rsync://mirrors.lug.mtu.edu/archlinux/ /var/www/mirror.zackmyers.io/archlinux/
|
${pkgs.rsync}/bin/rsync -vPa rsync://mirrors.lug.mtu.edu/archlinux/ /var/www/mirror.zackmyers.io/archlinux/
|
||||||
'';
|
'';
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = "oneshot";
|
Type = "oneshot";
|
||||||
|
|
|
||||||
|
|
@ -148,8 +148,6 @@ in {
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
security.acme.certs."node.nyc.zackmyers.io".keyType = "rsa4096";
|
|
||||||
|
|
||||||
services.phpfpm = {
|
services.phpfpm = {
|
||||||
phpOptions = ''
|
phpOptions = ''
|
||||||
extension=${pkgs.php83Extensions.openssl}/lib/php/extensions/openssl.so
|
extension=${pkgs.php83Extensions.openssl}/lib/php/extensions/openssl.so
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ in {
|
||||||
# })
|
# })
|
||||||
noto-fonts
|
noto-fonts
|
||||||
noto-fonts-cjk-sans
|
noto-fonts-cjk-sans
|
||||||
noto-fonts-color-emoji
|
noto-fonts-emoji
|
||||||
jetbrains-mono
|
jetbrains-mono
|
||||||
nerd-fonts.iosevka
|
nerd-fonts.iosevka
|
||||||
nerd-fonts.zed-mono
|
nerd-fonts.zed-mono
|
||||||
|
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
{...}: final: prev: {
|
|
||||||
monado = prev.monado.overrideAttrs (old: {
|
|
||||||
buildInputs = builtins.filter (x: x != prev.opencv) old.buildInputs;
|
|
||||||
cmakeFlags =
|
|
||||||
(old.cmakeFlags or [])
|
|
||||||
++ [
|
|
||||||
"-DBUILD_WITH_OPENCV=OFF"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
owner = "bluesky-social";
|
owner = "bluesky-social";
|
||||||
repo = "pds";
|
repo = "pds";
|
||||||
rev = "main";
|
rev = "main";
|
||||||
hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
|
hash = "sha256-dEB5u++Zx+F4TH5q44AF/tuwAhLEyYT+U5/18viT4sw=";
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
inputs.pnpm2nix.packages.${pkgs.system}.mkPnpmPackage {
|
inputs.pnpm2nix.packages.${pkgs.system}.mkPnpmPackage {
|
||||||
|
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
{
|
|
||||||
fetchurl,
|
|
||||||
stdenv,
|
|
||||||
autoPatchelfHook,
|
|
||||||
xorg,
|
|
||||||
libGL,
|
|
||||||
libgcc,
|
|
||||||
systemdLibs,
|
|
||||||
libz,
|
|
||||||
glibc,
|
|
||||||
fontconfig,
|
|
||||||
e2fsprogs,
|
|
||||||
}:
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
src = fetchurl {
|
|
||||||
url = "https://cdn.discordapp.com/attachments/1306271439493533776/1414196667304902707/music-presence-2.3.3-preview.6-linux-x86_64.tar.gz?ex=68beb0c7&is=68bd5f47&hm=09a61b4eeadb1f0b61ed70a6d1a14fe267f320027e0aae8dca1923d0813b063a&";
|
|
||||||
hash = "sha256-KqGnG4xdZcOQJQXrNU3leLXDNjNFAVjvuDUKAR38IBs=";
|
|
||||||
};
|
|
||||||
|
|
||||||
nativeBuildInputs = [autoPatchelfHook];
|
|
||||||
|
|
||||||
preBuild = ''
|
|
||||||
addAutoPatchelfSearchPath ./usr/plugins/
|
|
||||||
addAutoPatchelfSearchPath ./usr/bin/
|
|
||||||
addAutoPatchelfSearchPath ./usr/lib/
|
|
||||||
'';
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
xorg.libX11
|
|
||||||
xorg.libxcb
|
|
||||||
libGL
|
|
||||||
libgcc
|
|
||||||
systemdLibs
|
|
||||||
libz
|
|
||||||
glibc
|
|
||||||
fontconfig
|
|
||||||
e2fsprogs
|
|
||||||
];
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
cp -r . $out
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
|
|
||||||
name = "discord-music-presence";
|
|
||||||
}
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
password: ENC[AES256_GCM,data:0fl9Py+dOU7yBG5+S9oikr/uVXM=,iv:ivZPbvIqCNH974p24ZXgobDQjZh4EaRqr9Mav0Ofv7Q=,tag:rPY6loyq5wCe/SXKsz39LA==,type:str]
|
|
||||||
sops:
|
|
||||||
shamir_threshold: 1
|
|
||||||
age:
|
|
||||||
- recipient: age1l6v7c5cp6sh6typgskwfufzkn3qw4av7r42z7lqyns6mtupytqhs2fg49u
|
|
||||||
enc: |
|
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBOZElOWnpHWC9mdGhOaVRQ
|
|
||||||
U2d1Z3U0Uk9sZGhZWFp5ejRLV1FEbUpFcVNNCm1WN0xrV1FkLzB5TXBWa3dnMDFD
|
|
||||||
eEI5L0hPbk1CM0dESWsxRXRKemp0RG8KLS0tIFNWR0M4a0tHSjR3ODV6aGpHQzZy
|
|
||||||
Y3hyR2p4Qk52S2FRVnFQK2pTb21sK2cKfTp78UNAFB4umRGvwDq782dhBYPeO6ms
|
|
||||||
wx9+gVmeRbHWC2SoVvjEpsK7FpSQDV5T6qDZP+L3DwWRKM2OfAdjRA==
|
|
||||||
-----END AGE ENCRYPTED FILE-----
|
|
||||||
- recipient: age16p54d6tx3mg0htkzj43q2mzpvlqj4gz63mz5qzx8mpsp5zx4xexsszdhuk
|
|
||||||
enc: |
|
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXTXUwaHhQdHBBVWVSMmNH
|
|
||||||
dUNJUys2VnhPbjdYd3NCUDM1dXV5am9FNkhzCnVmMnBOcmtrNVE5d012NzlsRm54
|
|
||||||
SDlQekQxR3JkbENJbXkxbGdSa3BGMVkKLS0tIEV1b3pJbHdFbXMzSGRrOXpPUW1U
|
|
||||||
OFpZeVVYYzJyMVMxOVBoNzFDVFdDc0UKu0T/bsKe7qaBbqWyalMEZ+MzuhZN2Jxk
|
|
||||||
mAQsc9ZAZeRda/0IjpnWjwfxCbt99wMKms1cPyDwGxRdDu5xSNKmUg==
|
|
||||||
-----END AGE ENCRYPTED FILE-----
|
|
||||||
lastmodified: "2025-09-20T18:43:33Z"
|
|
||||||
mac: ENC[AES256_GCM,data:n0J6Go+8GfyG9CO/o2DAcaUCzEWjANRy9ZFHkoogqKX1N6oCFWnojqx3qeUw1QlzNHKYsCVRawsYp/oezox9wyjH/EvKS1Ocxm4b6segIFL38y2zllR+AKDu7FsfEz+nkgp8VrzruaoobTBp4HLxNvlVKg9sWLboIDw38jt58EA=,iv:Lz3ph/lelLNyIVlWRowW3QZQoZw2VhCGUhA0kJHM3wc=,tag:ucu/ee0YhDO53xCBtkOHfg==,type:str]
|
|
||||||
unencrypted_suffix: _unencrypted
|
|
||||||
version: 3.10.2
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
vpn_config_file: ENC[AES256_GCM,data:ZkHMWmbWTp3h1miVkMuO+9psw7FPyfM7wg9B2Ef9HMlcO2ZL5D7FFW8wWGOCksvhabYIvuN0v9Vfi3gFRQOrmlHS8VXNw5+tMNJ24Yhgx5W3/SD/BUdZfvfFRFNMkYwy/M3ztiOIlZlQhE+0rxhzFgaq6bbbwDRLK5GmG5BM6saoP4qXn17kdyY7BnEzFghHQBmfXSp24vuEZt9KyP/hSo+UzAr2VO6ougtIAvR2BLvgiN9YH5qUF3vQYARNadbw+m5EgEoBvNzST5d/FOH2Ify4d/yYzUmF2XS4oBkrGbYlwi9Khd6Kn/MkwWS2d8In6gT3LaJIhBwGCtEQCwAlRErC1nwghEkTIBYDmvp4mQNWBIwcP60zgswyjFWt1oy7u1E5,iv:JJDupaXEVxfpcWaoE/G5RvjMkpETYgiS4kSiQEgvZCc=,tag:E+4FgnsFwhNiEPr+b6b6Og==,type:str]
|
|
||||||
sops:
|
|
||||||
lastmodified: "2025-06-24T21:56:48Z"
|
|
||||||
mac: ENC[AES256_GCM,data:gzKh3iFiNhHnI0b/ayOqVEZiMGR6aL6JGfr0q9f42dFlOW37bycIuSMNKdjeOslp7lvHdLSvrWW/aIGchBVHOMDSYFhiuxxmlhNbgAWAjDpDy2vbgIlKTEqt4ytQ+IKxN3mrCpEWiYVPi/FqzOKqZknWNEMQxxhIpbPx4FdaWPM=,iv:YE1eWK90EOL+zW/v0lL6DnStOYlF5mmdsRUaSHbbgJ4=,tag:v3S5GPstjZbbFcTj+dWWAg==,type:str]
|
|
||||||
pgp:
|
|
||||||
- created_at: "2025-06-24T21:10:42Z"
|
|
||||||
enc: |-
|
|
||||||
-----BEGIN PGP MESSAGE-----
|
|
||||||
|
|
||||||
hF4DSgOXOlpD5vQSAQdA6VlJq7Q66Ggk4hq4Z7n1Rt0CfMA+QX+H7nyx7WG4vRUw
|
|
||||||
G0ir2eYcyUETT35WWMu9weyNgRuwsuCT7GxpfWf82crp1RENKh/s0p4iFanhjIHo
|
|
||||||
0l4BFFP+xxvPEbXOepRVf+ewEdVMQXUEe1O3Qmm2v5Y08FKwQY6N9ExBRxgbkCQm
|
|
||||||
KTrTwHIfPGuZPLfgH2IAqmI7qbKiSTorLaBJOqDhtkFGcl6ALsNk40c42o6Yol4Q
|
|
||||||
=Wnnp
|
|
||||||
-----END PGP MESSAGE-----
|
|
||||||
fp: "0x141576B17B4AE789"
|
|
||||||
- created_at: "2025-06-24T21:10:42Z"
|
|
||||||
enc: |-
|
|
||||||
-----BEGIN PGP MESSAGE-----
|
|
||||||
|
|
||||||
hQEMA3n+O3FJNc2rAQgAjpT5Nds28cgp1OyyFXUJ6ei8He6VX5q9SsFqN81h1QM8
|
|
||||||
b0/EXG9+cVwIkN6nydjdygWChiVT3JutP3ucVOSGllA5B+NCGBZtt0i5bYfiMr5+
|
|
||||||
wblTFY2sYBnfeYjtm0s/IjnwzsKdHxzP6pZjuXcA28icKkSgPPKVRamUt+ytStAg
|
|
||||||
TDdP76Y1rN6Pp/jRYpPYGHML725LcEicSX++FCBdjMRvm+zxFXHigF4posoOwHST
|
|
||||||
idizJwfIwkuzVvc23eHLlWADqh28SqSMZd2qojS5pXuXmEKua1JqmY4poNMkP+BU
|
|
||||||
1j5EvcsmlNOGVY5+FFBkuGQ9rjOX61EjKUnGTO7d8tJeAYIsBS8EbFUv13YF/1UG
|
|
||||||
kE4AVTuRDqPizxcKh0j/nhZOIUpbzDYR73ZgofB5jzYfUVN6ucphBLw6WafCk+8/
|
|
||||||
F4DyFhGlHOX0QIMbYJRhOG2rFDk3oPpbiULRyKSpsA==
|
|
||||||
=887e
|
|
||||||
-----END PGP MESSAGE-----
|
|
||||||
fp: 0DCB1C584AECEB2674BB76C179FE3B714935CDAB
|
|
||||||
unencrypted_suffix: _unencrypted
|
|
||||||
version: 3.10.2
|
|
||||||
|
|
@ -6,10 +6,7 @@
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
imports = [
|
imports = [./disk-config.nix ./hardware-configuration.nix];
|
||||||
./disk-config.nix
|
|
||||||
./hardware-configuration.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
nix.settings = {
|
nix.settings = {
|
||||||
trusted-users = ["zoey"];
|
trusted-users = ["zoey"];
|
||||||
|
|
@ -20,7 +17,7 @@
|
||||||
dates = ["03:45"];
|
dates = ["03:45"];
|
||||||
};
|
};
|
||||||
|
|
||||||
# nix.package = inputs.lix-module.packages.${pkgs.system}.default;
|
nix.package = inputs.lix-module.packages.${pkgs.system}.default;
|
||||||
|
|
||||||
nix.gc = {
|
nix.gc = {
|
||||||
automatic = true;
|
automatic = true;
|
||||||
|
|
@ -28,13 +25,36 @@
|
||||||
options = "--delete-older-than 1d";
|
options = "--delete-older-than 1d";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
boot.initrd.postResumeCommands = lib.mkAfter ''
|
||||||
|
mkdir /btrfs_tmp
|
||||||
|
mount /dev/root_vg/root /btrfs_tmp
|
||||||
|
if [[ -e /btrfs_tmp/root ]]; then
|
||||||
|
mkdir -p /btrfs_tmp/old_roots
|
||||||
|
timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S")
|
||||||
|
mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
|
||||||
|
fi
|
||||||
|
|
||||||
|
delete_subvolume_recursively() {
|
||||||
|
IFS=$'\n'
|
||||||
|
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
|
||||||
|
delete_subvolume_recursively "/btrfs_tmp/$i"
|
||||||
|
done
|
||||||
|
btrfs subvolume delete "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do
|
||||||
|
delete_subvolume_recursively "$i"
|
||||||
|
done
|
||||||
|
|
||||||
|
btrfs subvolume create /btrfs_tmp/root
|
||||||
|
umount /btrfs_tmp
|
||||||
|
'';
|
||||||
|
|
||||||
hardware.audio.enable = true;
|
hardware.audio.enable = true;
|
||||||
hardware.nvidia.enable = true;
|
hardware.nvidia.enable = true;
|
||||||
hardware.keyboard.qmk.enable = true;
|
hardware.keyboard.qmk.enable = true;
|
||||||
programs.nix-ld.enable = true;
|
programs.nix-ld.enable = true;
|
||||||
|
|
||||||
services.flatpak.enable = true;
|
|
||||||
|
|
||||||
hardware.march = {
|
hardware.march = {
|
||||||
arch = "znver3";
|
arch = "znver3";
|
||||||
enableNativeOptimizations = true;
|
enableNativeOptimizations = true;
|
||||||
|
|
@ -62,24 +82,13 @@
|
||||||
configuration = {
|
configuration = {
|
||||||
services.desktopManager.plasma6.enable = true;
|
services.desktopManager.plasma6.enable = true;
|
||||||
services.displayManager.sddm.enable = true;
|
services.displayManager.sddm.enable = true;
|
||||||
services.displayManager.gdm.enable = lib.mkForce false;
|
services.xserver.displayManager.gdm.enable = lib.mkForce false;
|
||||||
|
|
||||||
programs.seahorse.enable = lib.mkForce false;
|
programs.seahorse.enable = lib.mkForce false;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# services.monado = {
|
|
||||||
# enable = true;
|
|
||||||
# defaultRuntime = true;
|
|
||||||
# };
|
|
||||||
#
|
|
||||||
# systemd.user.services.monado.environment = {
|
|
||||||
# STEAMVR_LH_ENABLE = "1";
|
|
||||||
# XRT_COMPOSITOR_COMPUTE = "1";
|
|
||||||
# XRT_COMPOSITOR_FORCE_WAYLAND_DIRECT = "1";
|
|
||||||
# };
|
|
||||||
|
|
||||||
programs.steam = {
|
programs.steam = {
|
||||||
enable = true;
|
enable = true;
|
||||||
extraPackages = with pkgs; [
|
extraPackages = with pkgs; [
|
||||||
|
|
@ -120,16 +129,28 @@
|
||||||
|
|
||||||
protocols.wayland.enable = true;
|
protocols.wayland.enable = true;
|
||||||
|
|
||||||
|
programs.openvpn3.enable = true;
|
||||||
|
|
||||||
services.udev.extraRules = ''
|
services.udev.extraRules = ''
|
||||||
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="plugdev"
|
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="plugdev"
|
||||||
'';
|
'';
|
||||||
services.fstrim.enable = true;
|
services.fstrim.enable = true;
|
||||||
services.vpn.enable = true;
|
services.vpn.enable = true;
|
||||||
services.xserver.enable = true;
|
services.xserver.enable = true;
|
||||||
|
services.vpn.mullvad = true;
|
||||||
services.lorri.enable = true;
|
services.lorri.enable = true;
|
||||||
services.udisks2.enable = true;
|
services.udisks2.enable = true;
|
||||||
services.crypto.enable = false;
|
services.transmission = {
|
||||||
services.torrent.enable = false;
|
enable = false;
|
||||||
|
package = pkgs.transmission_4;
|
||||||
|
settings = {
|
||||||
|
download-dir = "/home/zoey/Downloads";
|
||||||
|
incomplete-dir = "/home/zoey/Downloads/.incomplete";
|
||||||
|
incomplete-dir-enabled = true;
|
||||||
|
};
|
||||||
|
user = "zoey";
|
||||||
|
group = "users";
|
||||||
|
};
|
||||||
services.gnome.gnome-keyring.enable = true;
|
services.gnome.gnome-keyring.enable = true;
|
||||||
# services.solaar = {
|
# services.solaar = {
|
||||||
# enable = true;
|
# enable = true;
|
||||||
|
|
@ -139,13 +160,11 @@
|
||||||
polkitPolicyOwnerUsername = "zoey";
|
polkitPolicyOwnerUsername = "zoey";
|
||||||
};
|
};
|
||||||
|
|
||||||
security.polkit.enable = true;
|
|
||||||
|
|
||||||
# Bootloader.
|
# Bootloader.
|
||||||
boot.loader.systemd-boot.enable = lib.mkForce false;
|
boot.loader.systemd-boot.enable = true;
|
||||||
boot.lanzaboote = {
|
boot.lanzaboote = {
|
||||||
enable = true;
|
enable = false;
|
||||||
pkiBundle = "/var/lib/sbctl";
|
pkiBundle = "/etc/secureboot";
|
||||||
};
|
};
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
boot.blacklistedKernelModules = ["joydev"];
|
boot.blacklistedKernelModules = ["joydev"];
|
||||||
|
|
@ -153,23 +172,18 @@
|
||||||
networking.hostName = "earth"; # Define your hostname.
|
networking.hostName = "earth"; # Define your hostname.
|
||||||
networking.hostId = "a2a8bfcc";
|
networking.hostId = "a2a8bfcc";
|
||||||
|
|
||||||
networking.extraHosts = ''
|
|
||||||
127.0.0.1 blahaj.local
|
|
||||||
127.0.0.1 test.blahaj.local
|
|
||||||
127.0.0.2 earth
|
|
||||||
'';
|
|
||||||
|
|
||||||
networking.networkmanager = {
|
networking.networkmanager = {
|
||||||
enable = true;
|
enable = true;
|
||||||
unmanaged = ["enp6s0"];
|
unmanaged = ["enp6s0"];
|
||||||
# insertNameservers = ["1.1.1.1" "1.0.0.1"];
|
# insertNameservers = ["1.1.1.1" "1.0.0.1"];
|
||||||
};
|
};
|
||||||
|
|
||||||
# services.scx.enable = true;
|
services.scx.enable = true;
|
||||||
# services.scx.scheduler = "scx_rusty";
|
services.scx.scheduler = "scx_rusty";
|
||||||
# services.scx.package = pkgs.scx_git.full;
|
services.scx.package = pkgs.scx_git.full;
|
||||||
|
|
||||||
boot.kernelPackages = pkgs.linuxPackages_zen;
|
boot.kernelPackages = pkgs.linuxPackages_cachyos-lto;
|
||||||
|
# CachyOS-inspired kernel parameters for better desktop responsiveness and gaming
|
||||||
boot.kernelParams = [
|
boot.kernelParams = [
|
||||||
"nowatchdog"
|
"nowatchdog"
|
||||||
"preempt=full"
|
"preempt=full"
|
||||||
|
|
@ -177,6 +191,11 @@
|
||||||
"tsc=reliable"
|
"tsc=reliable"
|
||||||
"clocksource=tsc"
|
"clocksource=tsc"
|
||||||
"preempt=voluntary"
|
"preempt=voluntary"
|
||||||
|
"futex.futex2_interface=1" # Better Wine/Proton compatibility
|
||||||
|
"NVreg_UsePageAttributeTable=1" # Improved GPU memory management
|
||||||
|
"io_uring.sqpoll=2" # Modern I/O scheduler polling
|
||||||
|
"transparent_hugepage=madvise" # Better memory management
|
||||||
|
"elevator=bfq" # Better I/O scheduling for gaming
|
||||||
];
|
];
|
||||||
boot.supportedFilesystems = ["ntfs"];
|
boot.supportedFilesystems = ["ntfs"];
|
||||||
|
|
||||||
|
|
@ -199,30 +218,43 @@
|
||||||
pkgs.sbctl
|
pkgs.sbctl
|
||||||
pkgs.kdiskmark
|
pkgs.kdiskmark
|
||||||
pkgs.mangohud
|
pkgs.mangohud
|
||||||
pkgs.sops
|
inputs.quickshell.packages.${system}.default
|
||||||
|
(pkgs.shadps4.overrideAttrs {
|
||||||
|
version = "0.9.0";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "AzaharPlus";
|
||||||
|
repo = "shadPS4Plus";
|
||||||
|
tag = "SHADPS4PLUS_0_9_0_A";
|
||||||
|
hash = "sha256-ZwP+bOE4roWt51Ii53blDZzdq/SxK4Q69I4rLCNARLA=";
|
||||||
|
fetchSubmodules = true;
|
||||||
|
};
|
||||||
|
})
|
||||||
(pkgs.lutris.override {
|
(pkgs.lutris.override {
|
||||||
extraPkgs = pkgs: [
|
extraPkgs = pkgs: [
|
||||||
pkgs.winetricks
|
pkgs.winetricks
|
||||||
];
|
];
|
||||||
})
|
})
|
||||||
|
pkgs.vulkan-hdr-layer-kwin6
|
||||||
pkgs.bottles
|
pkgs.bottles
|
||||||
pkgs.file-roller
|
pkgs.file-roller
|
||||||
|
pkgs.podman-tui
|
||||||
pkgs.dive
|
pkgs.dive
|
||||||
pkgs.docker-compose
|
pkgs.docker-compose
|
||||||
|
pkgs.podman-compose
|
||||||
pkgs.transmission_4
|
pkgs.transmission_4
|
||||||
pkgs.protonup-qt
|
pkgs.protonup-qt
|
||||||
pkgs.restic
|
pkgs.restic
|
||||||
pkgs.qt5.qtwayland
|
pkgs.qt5.qtwayland
|
||||||
pkgs.vkbasalt # Vulkan post-processing layer for better visuals
|
pkgs.vkBasalt # Vulkan post-processing layer for better visuals
|
||||||
pkgs.goverlay # MangoHud and vkBasalt GUI configurator
|
pkgs.goverlay # MangoHud and vkBasalt GUI configurator
|
||||||
pkgs.cpupower-gui # CPU frequency control GUI
|
pkgs.cpupower-gui # CPU frequency control GUI
|
||||||
pkgs.ananicy-cpp # Process priority daemon
|
pkgs.ananicy-cpp # Process priority daemon
|
||||||
pkgs.umu-launcher
|
(inputs.umu.packages.${system}.umu-launcher.override {
|
||||||
# (inputs.umu.packages.${system}.umu-launcher.override {
|
withTruststore = true;
|
||||||
# withTruststore = true;
|
withDeltaUpdates = true;
|
||||||
# withDeltaUpdates = true;
|
})
|
||||||
# })
|
|
||||||
inputs.agenix.packages.${system}.agenix
|
inputs.agenix.packages.${system}.agenix
|
||||||
|
inputs.awsvpnclient.packages.${system}.awsvpnclient
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.fish.enable = true;
|
programs.fish.enable = true;
|
||||||
|
|
@ -231,18 +263,12 @@
|
||||||
users.users.zoey = {
|
users.users.zoey = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
description = "zoey";
|
description = "zoey";
|
||||||
extraGroups = [
|
extraGroups = ["networkmanager" "wheel" "docker" "libvirtd" "plugdev"];
|
||||||
"networkmanager"
|
|
||||||
"wheel"
|
|
||||||
"docker"
|
|
||||||
"libvirtd"
|
|
||||||
"plugdev"
|
|
||||||
];
|
|
||||||
shell = pkgs.fish;
|
shell = pkgs.fish;
|
||||||
initialHashedPassword = "$6$rounds=2000000$rFBJH7LwdEHvv.0i$HdHorWqp8REPdWPk5fEgZXX1TujRJkMxumGK0f0elFN0KRPlBjJMW2.35A.ID/o3eC/hGTwbSJAcJcwVN2zyV/";
|
initialHashedPassword = "$6$rounds=2000000$rFBJH7LwdEHvv.0i$HdHorWqp8REPdWPk5fEgZXX1TujRJkMxumGK0f0elFN0KRPlBjJMW2.35A.ID/o3eC/hGTwbSJAcJcwVN2zyV/";
|
||||||
};
|
};
|
||||||
|
|
||||||
services.gnome.core-apps.enable = true; # Enable core GNOME utilities
|
services.gnome.core-utilities.enable = true; # Enable core GNOME utilities
|
||||||
|
|
||||||
users.groups.plugdev = {};
|
users.groups.plugdev = {};
|
||||||
|
|
||||||
|
|
@ -262,7 +288,12 @@
|
||||||
ports = [22];
|
ports = [22];
|
||||||
};
|
};
|
||||||
|
|
||||||
networking.firewall.allowedTCPPorts = [22 1069];
|
networking.firewall.allowedTCPPorts = [22];
|
||||||
|
|
||||||
|
services.monero = {
|
||||||
|
enable = false;
|
||||||
|
mining.enable = false;
|
||||||
|
};
|
||||||
|
|
||||||
services.samba = {
|
services.samba = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
@ -301,13 +332,10 @@
|
||||||
sites.mealie.enable = false;
|
sites.mealie.enable = false;
|
||||||
|
|
||||||
virtualisation.containers.enable = true;
|
virtualisation.containers.enable = true;
|
||||||
# virtualisation.podman = {
|
virtualisation.podman = {
|
||||||
# enable = true;
|
|
||||||
# dockerCompat = true;
|
|
||||||
# defaultNetwork.settings.dns_enabled = true;
|
|
||||||
# };
|
|
||||||
virtualisation.docker = {
|
|
||||||
enable = true;
|
enable = true;
|
||||||
|
dockerCompat = true;
|
||||||
|
defaultNetwork.settings.dns_enabled = true;
|
||||||
};
|
};
|
||||||
hardware.gpu-passthru.enable = true;
|
hardware.gpu-passthru.enable = true;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@
|
||||||
pterodactyl.enable = true;
|
pterodactyl.enable = true;
|
||||||
search.enable = true;
|
search.enable = true;
|
||||||
map.enable = true;
|
map.enable = true;
|
||||||
hydra.enable = false;
|
hydra.enable = true;
|
||||||
cache.enable = true;
|
cache.enable = true;
|
||||||
minio.enable = true;
|
minio.enable = true;
|
||||||
immich.enable = true;
|
immich.enable = true;
|
||||||
|
|
@ -105,7 +105,7 @@
|
||||||
sourcehut.enable = false;
|
sourcehut.enable = false;
|
||||||
forgejo.enable = true;
|
forgejo.enable = true;
|
||||||
zoeycomputer = {
|
zoeycomputer = {
|
||||||
enable = false;
|
enable = true;
|
||||||
domain = "zoeys.computer";
|
domain = "zoeys.computer";
|
||||||
phx = {
|
phx = {
|
||||||
database = {
|
database = {
|
||||||
|
|
@ -181,7 +181,6 @@
|
||||||
hashedPassword = "$6$rounds=2000000$673Iz4rM8Dr9yz7C$Xq5JXxE7ioUrpZmMf3uTrPN2ODrEu3Sph6EhWyPoM5Ty./FhgB9hU0mz1yYo8sUj7wdUMWfR98haVJ24Wv3BK/";
|
hashedPassword = "$6$rounds=2000000$673Iz4rM8Dr9yz7C$Xq5JXxE7ioUrpZmMf3uTrPN2ODrEu3Sph6EhWyPoM5Ty./FhgB9hU0mz1yYo8sUj7wdUMWfR98haVJ24Wv3BK/";
|
||||||
openssh.authorizedKeys.keys = [
|
openssh.authorizedKeys.keys = [
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFuw7D+qDzzxBKsfKEmMd7odc98m3ZEnqWYFtuKwvC9k zoey@earth"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFuw7D+qDzzxBKsfKEmMd7odc98m3ZEnqWYFtuKwvC9k zoey@earth"
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOTCj3aEDA8Bbg7ka1nnA6d92IyXYTSWKz/e1bl5Fdf+ root@earth"
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,6 @@
|
||||||
|
|
||||||
services.web.nginx.enable = true;
|
services.web.nginx.enable = true;
|
||||||
services.mail.enable = true;
|
services.mail.enable = true;
|
||||||
services.matrix.enable = false;
|
|
||||||
|
|
||||||
environment.systemPackages = map lib.lowPrio [
|
environment.systemPackages = map lib.lowPrio [
|
||||||
pkgs.curl
|
pkgs.curl
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue