Compare commits

...
Sign in to create a new pull request.

10 commits

Author SHA1 Message Date
1506941c66
updates 2026-01-13 15:39:16 -05:00
6198cf14d4
new nvim changes 2025-09-05 09:26:03 -04:00
d14e84eae8
wip: b4 nvim config 2025-08-31 10:25:07 -04:00
b6a5942767
add .mailmap 2025-08-26 17:40:21 -04:00
ae5e18bb21
remove quickshell 2025-08-26 16:59:18 -04:00
8bec2a9ac1
changes 2025-08-07 15:27:02 -04:00
3ce12900b8 updar 2025-08-02 16:20:18 -04:00
1a658f1668
update other things 2025-07-27 16:17:49 -04:00
620f2867e2
update things 2025-07-27 16:17:28 -04:00
af6a3bce3e
add crypto 2025-07-22 20:21:21 -04:00
67 changed files with 2991 additions and 2356 deletions

5
.mailmap Normal file
View file

@ -0,0 +1,5 @@
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 Normal file
View file

@ -0,0 +1,25 @@
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 Normal file
View file

@ -0,0 +1,201 @@
{
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";
};
};
};
};
}

1782
flake.lock generated

File diff suppressed because it is too large Load diff

View file

@ -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-24.11"; nixos-stable.url = "github:nixos/nixpkgs/nixos-25.05";
home-manager = { home-manager = {
url = "github:nix-community/home-manager"; url = "github:nix-community/home-manager";
@ -31,19 +31,28 @@
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";
@ -57,12 +66,18 @@
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.1"; url = "github:nix-community/lanzaboote/v0.4.3";
# 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";
@ -114,7 +129,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.91.1-1.tar.gz"; url = "https://git.lix.systems/lix-project/nixos-module/archive/2.93.2-1.tar.gz";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
@ -124,26 +139,21 @@
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";
quickshell = { # niri-src.url = "github:visualglitch91/niri/feat/blur";
url = "git+https://git.outfoxxed.me/outfoxxed/quickshell"; # niri-src.inputs.nixpkgs.follows = "nixpkgs";
inputs.nixpkgs.follows = "nixpkgs";
};
niri.url = "github:sodiboo/niri-flake"; niri.url = "github:sodiboo/niri-flake";
chaotic.url = "github:chaotic-cx/nyx/7b20daf110d06962ee99114220f2fb98cdc8673d"; chaotic.url = "github:chaotic-cx/nyx";
lazyvim.url = "github:pfassina/lazyvim-nix";
vpn-confinement.url = "github:Maroka-chan/VPN-Confinement";
}; };
outputs = inputs @ {self, ...}: let outputs = inputs @ {self, ...}: let
@ -152,22 +162,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
]; ];
@ -186,7 +196,9 @@
spicetify-nix.homeManagerModules.default spicetify-nix.homeManagerModules.default
catppuccin.homeModules.default catppuccin.homeModules.default
ags.homeManagerModules.default ags.homeManagerModules.default
walker.homeManagerModules.default dms.homeModules.dankMaterialShell.default
dms.homeModules.dankMaterialShell.niri
lazyvim.homeManagerModules.default
]; ];
systems.modules.nixos = with inputs; [ systems.modules.nixos = with inputs; [
@ -202,6 +214,8 @@
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; [

View file

@ -44,8 +44,6 @@
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;

View file

@ -53,12 +53,10 @@
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
@ -67,11 +65,9 @@
programs.lazygit = { programs.lazygit = {
enable = true; enable = true;
catppuccin.enable = true;
}; };
programs.fzf = { programs.fzf = {
enable = true; enable = true;
catppuccin.enable = true;
}; };
} }

View file

@ -52,12 +52,10 @@
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
@ -66,11 +64,9 @@
programs.lazygit = { programs.lazygit = {
enable = true; enable = true;
catppuccin.enable = true;
}; };
programs.fzf = { programs.fzf = {
enable = true; enable = true;
catppuccin.enable = true;
}; };
} }

View file

@ -2,16 +2,15 @@
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.zen.setDefault = true; web.librewolf.setDefault = true;
web.zen.enable = true;
tools.git.enable = true; tools.git.enable = true;
tools.tmux.enable = true; tools.tmux.enable = true;
@ -31,14 +30,13 @@
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 = true; waybar.enable = false;
swaync.enable = true; swaync.enable = false;
}; };
}; };
@ -64,13 +62,37 @@
}; };
}; };
programs.distrobox = { catppuccin.vivid.enable = false;
enable = true;
containers = { programs = {
proton-tkg = { dankMaterialShell = {
image = "archlinux"; enable = true;
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;
}; };
}; };
@ -115,7 +137,7 @@
catppuccin.enable = true; catppuccin.enable = true;
catppuccin.flavor = "mocha"; catppuccin.flavor = "mocha";
catppuccin.accent = "red"; catppuccin.accent = "blue";
catppuccin.aerc.enable = true; catppuccin.aerc.enable = true;
@ -125,6 +147,13 @@
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;
@ -135,24 +164,33 @@
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
zoom-us tidal-hifi
pandoc pandoc
cider-2
nexusmods-app-unfree feather
prismlauncher prismlauncher
obs-studio
qt6Packages.qt5compat
libsForQt5.qt5.qtgraphicaleffects
kdePackages.qtdeclarative
# prismlauncher
(discord.override { (discord.override {
withOpenASAR = true; withOpenASAR = true;
@ -174,12 +212,6 @@
heroic heroic
cartridges cartridges
darktable
thunderbird
custom.nvidia-nsight
custom.enc custom.enc
neural-amp-modeler-lv2 neural-amp-modeler-lv2
@ -226,12 +258,10 @@
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-cli mpc
zathura zathura
gpgme.dev gpgme.dev
@ -249,9 +279,17 @@
man-pages man-pages
man-pages-posix man-pages-posix
ardour devenv
]; ];
programs.thunderbird = {
enable = true;
profiles.${config.home.username} = {
isDefault = true;
};
};
programs.vesktop = { programs.vesktop = {
enable = true; enable = true;
}; };
@ -261,8 +299,6 @@
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";
@ -313,7 +349,7 @@
services = { services = {
gpg-agent = { gpg-agent = {
enable = true; enable = true;
pinentryPackage = lib.mkForce pkgs.pinentry-gnome3; pinentry.package = lib.mkForce pkgs.pinentry-gnome3;
enableSshSupport = true; enableSshSupport = true;
enableZshIntegration = true; enableZshIntegration = true;
enableFishIntegration = true; enableFishIntegration = true;

View file

@ -52,12 +52,10 @@
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
@ -66,11 +64,9 @@
programs.lazygit = { programs.lazygit = {
enable = true; enable = true;
catppuccin.enable = true;
}; };
programs.fzf = { programs.fzf = {
enable = true; enable = true;
catppuccin.enable = true;
}; };
} }

View file

@ -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;
}; };
} }

View file

@ -362,5 +362,7 @@ in {
} }
''; '';
}; };
systemd.user.services.swaync.Service.Environment = ["GSK_RENDERER=gl"];
}; };
} }

View file

@ -1,611 +0,0 @@
{
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";
};
};
};
};
};
}

View file

@ -99,15 +99,6 @@ 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";
@ -145,7 +136,7 @@ in {
}; };
mpris = { mpris = {
player = "spotify"; player = "chromium";
"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>";

View file

@ -105,6 +105,11 @@ 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;

View file

@ -66,9 +66,10 @@ 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 = {

View file

@ -17,12 +17,18 @@ in {
enable = true; enable = true;
settings = { settings = {
font-family = fonts.mono; font-family = "Berkeley 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;

View file

@ -14,50 +14,26 @@ 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 = ''
bold_font ${fonts.mono} SemiBold font_family family='Berkeley Mono' style='Retina ExtraCondensed'
italic_font ${fonts.mono} SemiLight bold_font family='Berkeley Mono' style='SemiBold ExtraCondensed'
bold_italic_font ${fonts.mono} SemiBold italic_font family='Berkeley Mono' style='Retina ExtraCondensed'
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
}; };
}; };
}; };

View file

@ -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";
}; };

View file

@ -17,11 +17,18 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
home.packages = with pkgs; [zsh-forgit gitflow]; home.packages = with pkgs; [
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"
@ -38,8 +45,15 @@ in {
key = cfg.signingKey; key = cfg.signingKey;
signByDefault = cfg.signByDefault; signByDefault = cfg.signByDefault;
}; };
extraConfig = { lfs.enable = true;
init = {defaultBranch = "main";}; settings = {
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;
@ -64,34 +78,30 @@ in {
smtpencryption = "ssl"; smtpencryption = "ssl";
smtpserverport = 465; smtpserverport = 465;
}; };
}; alias = {
lfs.enable = true; essa = "push --force";
delta.enable = true; co = "checkout";
aliases = { fuck = "commit --amend -m";
essa = "push --force"; c = "commit -m";
co = "checkout"; ca = "commit -am";
fuck = "commit --amend -m"; forgor = "commit --amend --no-edit";
c = "commit -m"; graph = "log --all --decorate --graph --oneline";
ca = "commit -am"; oops = "checkout --";
forgor = "commit --amend --no-edit"; l = "log";
graph = "log --all --decorate --graph --oneline"; r = "rebase";
oops = "checkout --"; s = "status --short";
l = "log"; ss = "status";
r = "rebase"; d = "diff";
s = "status --short"; ps = "!git push origin $(git rev-parse --abbrev-ref HEAD)";
ss = "status"; pl = "!git pull origin $(git rev-parse --abbrev-ref HEAD)";
d = "diff"; af = "!git add $(git ls-files -m -o --exclude-standard | sk -m)";
ps = "!git push origin $(git rev-parse --abbrev-ref HEAD)"; st = "status";
pl = "!git pull origin $(git rev-parse --abbrev-ref HEAD)"; br = "branch";
af = "!git add $(git ls-files -m -o --exclude-standard | sk -m)"; df = "!git hist | peco | awk '{print $2}' | xargs -I {} git diff {}^ {}";
st = "status"; hist = ''log --pretty=format:"%Cgreen%h %Creset%cd %Cblue[%cn] %Creset%s%C(yellow)%d%C(reset)" --graph --date=relative --decorate --all'';
br = "branch"; llog = ''log --graph --name-status --pretty=format:"%C(red)%h %C(reset)(%cd) %C(green)%an %Creset%s %C(yellow)%d%Creset" --date=relative'';
df = "!git hist | peco | awk '{print $2}' | xargs -I {} git diff {}^ {}"; edit-unmerged = "!f() { git ls-files --unmerged | cut -f2 | sort -u ; }; hx `f`";
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`";
}; };
}; };
}; };

View file

@ -1,16 +1,9 @@
{ {
"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",
@ -20,18 +13,15 @@
"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.python", "lazyvim.plugins.extras.lang.php",
"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.coding.luasnip", "lazyvim.plugins.extras.formatting.biome",
"lazyvim.plugins.extras.coding.blink" "lazyvim.plugins.extras.coding.luasnip"
], ],
"install_version": 8, "install_version": 8,
"news": { "news": {

View file

@ -3,13 +3,21 @@
-- 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
vim.g.lazyvim_python_lsp = "pyright" -- Minimal UI borders for floats
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

View file

@ -2,15 +2,92 @@ return {
{ {
"LazyVim/LazyVim", "LazyVim/LazyVim",
opts = { opts = {
colorscheme = "catppuccin-mocha", colorscheme = "catppuccin",
news = { lazyvim = false }, news = { lazyvim = false },
}, },
}, },
{ {
"catppuccin", "catppuccin",
opts = { opts = function(_, opts)
transparent_background = true, opts.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,
@ -45,7 +122,7 @@ return {
-- end, -- end,
-- color_overrides = { -- color_overrides = {
-- mocha = { -- mocha = {
-- base = "#11111b", -- bg = "#11111b",
-- mantle = "#11111b", -- mantle = "#11111b",
-- crust = "#11111b", -- crust = "#11111b",
-- }, -- },
@ -59,11 +136,11 @@ return {
opts = { opts = {
formatters_by_ft = { formatters_by_ft = {
nix = { "alejandra" }, nix = { "alejandra" },
typescript = { "prettierd" }, typescript = { "biome" },
typescriptreact = { "prettierd" }, typescriptreact = { "biome" },
javascriptreact = { "prettierd" }, javascriptreact = { "biome" },
javascript = { "prettierd" }, javascript = { "biome" },
htmlangular = { "prettierd" }, htmlangular = { "biome" },
python = { "black" }, python = { "black" },
}, },
}, },
@ -133,8 +210,90 @@ 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",

View file

@ -0,0 +1,284 @@
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" },
},
},
},
}

View file

@ -5,7 +5,24 @@ return {
-- Author: shadmansaleh -- Author: shadmansaleh
-- Credit: glepnir -- Credit: glepnir
local lualine = require("lualine") local lualine = require("lualine")
local ctp = require("catppuccin.palettes").get_palette("mocha") local ctp = require("catppuccin.palettes").get_palette("macchiato")
-- 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()
@ -24,15 +41,11 @@ return {
-- Config -- Config
local config = { local config = {
options = { options = {
-- Disable sections and component separators
component_separators = "", component_separators = "",
section_separators = "", section_separators = "",
theme = { theme = {
-- We are going to use lualine_c an lualine_x as left and normal = { c = { fg = ctp.text, bg = "NONE" } },
-- right section. Both are highlighted by c theme . So we inactive = { c = { fg = ctp.overlay0, bg = "NONE" } },
-- 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 = {
@ -164,6 +177,41 @@ 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)
@ -176,13 +224,14 @@ return {
ins_left({ ins_left({
function() function()
return get_mode_abbr() return get_mode_label()
end, end,
color = function() color = function()
local color = get_mode_color() local mode_color = get_mode_color()
return { fg = ctp.base, bg = color, gui = "bold" } local mode_bg = blend_hex(ctp.base, mode_color, 0.254)
end, -- Sets highlighting of component return { fg = mode_color, bg = mode_bg, gui = "bold" }
padding = { left = 1, right = 1 }, -- We don't need space before this end,
padding = { left = 1, right = 1 },
}) })
ins_left({ ins_left({
@ -191,19 +240,13 @@ return {
color = { fg = ctp.subtext0 }, color = { fg = ctp.subtext0 },
}) })
ins_left({ -- visual separation using color only, no ASCII separators
-- filesize component ins_left({ "location", color = { fg = ctp.overlay1 } })
"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 },
@ -219,14 +262,13 @@ 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 msg return ""
end end
for _, client in ipairs(clients) do for _, client in ipairs(clients) do
local filetypes = client.config.filetypes local filetypes = client.config.filetypes
@ -234,42 +276,41 @@ return {
return client.name return client.name
end end
end end
return msg return ""
end,
icon = "",
color = { fg = ctp.overlay1, gui = "bold" },
})
-- 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,
})
ins_right({
function()
return ""
end, end,
color = function() color = function()
local color = get_mode_color() return { fg = ctp.sapphire, bg = blend_hex(ctp.base, ctp.sapphire, 0.254), gui = "bold" }
return { fg = color } end,
end, -- Sets highlighting of component padding = { left = 1, right = 1 },
padding = { left = 1 },
}) })
-- CMP badge (visible in insert mode)
ins_right({
function()
return "CMP"
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()
return { fg = ctp.text, ctp.surface0, gui = "bold" }
end,
padding = { left = 1, right = 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,

View file

@ -1,4 +1,4 @@
return { return {
"echasnovski/mini.ai", "nvim-mini/mini.ai",
version = false, version = false,
} }

View file

@ -0,0 +1,6 @@
return {
"chomosuke/typst-preview.nvim",
lazy = false, -- or ft = 'typst'
version = "1.*",
opts = {}, -- lazy.nvim will implicitly calls `setup {}`
}

View file

@ -27,18 +27,23 @@ with lib.custom; let
in in
result; result;
pluginList = plugins: strings.concatMapStrings (plugin: " [\"${sanitizePluginName plugin.name}\"] = \"${plugin.outPath}\",\n") plugins; pluginList = 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
@ -55,22 +60,21 @@ 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-nodejs dockerfile-language-server
haskellPackages.hadolint haskellPackages.hadolint
shellcheck shellcheck
markdownlint-cli2 markdownlint-cli2
shfmt shfmt
sqlfluff # sqlfluff
go go
tailwindcss-language-server tailwindcss-language-server
@ -88,7 +92,6 @@ 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; [

View file

@ -20,7 +20,7 @@ in {
enableNushellIntegration = config.programs.nushell.enable; enableNushellIntegration = config.programs.nushell.enable;
settings = { settings = {
add_newline = false; add_newline = false;
format = "$username$directory$git_branch$git_status$python$rust$nodejs$nix_shell$cmd_duration$line_break$character"; format = "$directory$git_branch$git_status$python$rust$nodejs$nix_shell$cmd_duration$line_break$character";
# Username display # Username display
username = { username = {

View file

@ -18,7 +18,6 @@ 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"
''; '';
}; };

View file

@ -0,0 +1,261 @@
{
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}")
];
};
};
};
}

View file

@ -2,11 +2,19 @@
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";
@ -21,13 +29,43 @@ 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";
@ -62,7 +100,10 @@ in {
]; ];
icon = "https://www.openstreetmap.org/favicon.ico"; icon = "https://www.openstreetmap.org/favicon.ico";
definedAliases = ["@openstreetmap" "@osm"]; definedAliases = [
"@openstreetmap"
"@osm"
];
}; };
"SearXNG" = { "SearXNG" = {
@ -104,125 +145,6 @@ 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;
@ -236,15 +158,11 @@ 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")
]; ];
}; };
}; };

View file

@ -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-beta.desktop"; "text/html" = "zen-twilight.desktop";
"x-scheme-handler/http" = "zen-beta.desktop"; "x-scheme-handler/http" = "zen-twilight.desktop";
"x-scheme-handler/https" = "zen-beta.desktop"; "x-scheme-handler/https" = "zen-twilight.desktop";
}; };
}; };
} }

View file

@ -15,7 +15,7 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
catppuccin.pointerCursor.enable = true; catppuccin.cursors.enable = true;
home.pointerCursor = { home.pointerCursor = {
gtk.enable = true; gtk.enable = true;
@ -37,10 +37,6 @@ 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 = {

View file

@ -15,9 +15,10 @@ 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;

View file

@ -1,55 +0,0 @@
{
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";
};
};
};
};
}

View file

@ -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 du-dust; du = getExe 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,6 +28,8 @@ 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\"";

View file

@ -24,8 +24,6 @@ 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'"
@ -93,7 +91,7 @@ in {
fzf fzf
# dns client # dns client
dogdns doggo
# neofetch but for git repos # neofetch but for git repos
onefetch onefetch
@ -116,9 +114,6 @@ in {
imagemagick imagemagick
ffmpeg-full ffmpeg-full
# preview images in terminal
catimg
# networking stuff # networking stuff
nmap nmap
wget wget

View file

@ -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 du-dust; du = getExe 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";

View file

@ -53,7 +53,7 @@ in {
ripgrep ripgrep
gping gping
fzf fzf
dogdns doggo
onefetch onefetch
cpufetch cpufetch
yt-dlp yt-dlp
@ -62,7 +62,6 @@ in {
hyperfine hyperfine
imagemagick imagemagick
ffmpeg-full ffmpeg-full
catimg
nmap nmap
wget wget
fd fd

View file

@ -92,7 +92,7 @@ in {
gping gping
# dns client # dns client
dogdns doggo
# neofetch but for git repos # neofetch but for git repos
onefetch onefetch
@ -115,9 +115,6 @@ in {
imagemagick imagemagick
ffmpeg-full ffmpeg-full
# preview images in terminal
catimg
# networking stuff # networking stuff
nmap nmap
wget wget

View file

@ -76,17 +76,6 @@ 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,"
@ -257,7 +246,6 @@ in {
# }; # };
# }; # };
services.quickshell.enable = true;
services.wallpaper.enable = true; services.wallpaper.enable = true;
}; };
} }

View file

@ -24,7 +24,15 @@ with lib.custom; {
relative-to ? "window", relative-to ? "window",
in' ? null, in' ? null,
}: { }: {
gradient = {inherit from to angle relative-to in';}; gradient = {
inherit
from
to
angle
relative-to
in'
;
};
}; };
spawnSlackOnWeekday = pkgs.writeShellScriptBin "spawn-slack-on-weekday" '' spawnSlackOnWeekday = pkgs.writeShellScriptBin "spawn-slack-on-weekday" ''
@ -41,7 +49,7 @@ with lib.custom; {
exit 0 exit 0
''; '';
in { in {
package = pkgs.niri; package = inputs.niri-src.packages.${pkgs.system}.niri;
settings = { settings = {
# Input device configuration # Input device configuration
@ -55,6 +63,8 @@ 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 = {
@ -87,7 +97,7 @@ with lib.custom; {
middle-emulation = false; # Commented out middle-emulation = false; # Commented out
}; };
warp-mouse-to-focus = true; warp-mouse-to-focus.enable = true;
focus-follows-mouse = { focus-follows-mouse = {
enable = false; # Commented out in KDL enable = false; # Commented out in KDL
@ -110,6 +120,27 @@ 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;
@ -139,9 +170,18 @@ with lib.custom; {
# preset-window-heights = []; # Empty in KDL # preset-window-heights = []; # Empty in KDL
default-column-width = {proportion = 0.5;}; default-column-width = {
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;
@ -164,20 +204,24 @@ 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 = ["spotify"];} {command = ["tidal-hifi"];}
{command = ["${spawnSlackOnWeekday}/bin/spawn-slack-on-weekday"];} {command = ["${spawnSlackOnWeekday}/bin/spawn-slack-on-weekday"];}
]; ];
@ -196,10 +240,6 @@ 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 = [
@ -341,11 +381,16 @@ with lib.custom; {
# Keybindings # Keybindings
binds = binds =
{ {
"Mod+Shift+Slash" = {action = actions.show-hotkey-overlay;}; "Mod+Shift+Slash" = {
action = actions.show-hotkey-overlay;
};
"Mod+Return" = {action = actions.spawn "kitty";}; "Mod+Return" = {
"Mod+D" = {action = actions.spawn "fuzzel";}; action = actions.spawn "kitty";
"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;};
@ -354,43 +399,59 @@ with lib.custom; {
# #
# "Mod+Z" = {action = actions.clear-dynamic-cast-target;}; # "Mod+Z" = {action = actions.clear-dynamic-cast-target;};
"XF86AudioRaiseVolume" = { "Mod+Q" = {
allow-when-locked = true; action = actions.close-window;
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+Q" = {action = actions.close-window;}; "Mod+Left" = {
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+Left" = {action = actions.focus-column-left;}; "Mod+Ctrl+Left" = {
"Mod+Down" = {action = actions.focus-window-down;}; action = actions.move-column-left;
"Mod+Up" = {action = actions.focus-window-up;}; };
"Mod+Right" = {action = actions.focus-column-right;}; "Mod+Ctrl+Down" = {
"Mod+H" = {action = actions.focus-column-left;}; action = actions.move-window-down;
"Mod+J" = {action = actions.focus-window-down;}; };
"Mod+K" = {action = actions.focus-window-up;}; "Mod+Ctrl+Up" = {
"Mod+L" = {action = actions.focus-column-right;}; action = actions.move-window-up;
};
"Mod+Ctrl+Left" = {action = actions.move-column-left;}; "Mod+Ctrl+Right" = {
"Mod+Ctrl+Down" = {action = actions.move-window-down;}; action = actions.move-column-right;
"Mod+Ctrl+Up" = {action = actions.move-window-up;}; };
"Mod+Ctrl+Right" = {action = actions.move-column-right;}; "Mod+Ctrl+H" = {
"Mod+Ctrl+H" = {action = actions.move-column-left;}; action = actions.move-column-left;
"Mod+Ctrl+J" = {action = actions.move-window-down;}; };
"Mod+Ctrl+K" = {action = actions.move-window-up;}; "Mod+Ctrl+J" = {
"Mod+Ctrl+L" = {action = actions.move-column-right;}; action = actions.move-window-down;
};
"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; };
@ -398,44 +459,110 @@ 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" = {action = actions.focus-column-first;}; "Mod+Home" = {
"Mod+End" = {action = actions.focus-column-last;}; action = actions.focus-column-first;
"Mod+Ctrl+Home" = {action = actions.move-column-to-first;}; };
"Mod+Ctrl+End" = {action = actions.move-column-to-last;}; "Mod+End" = {
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" = {action = actions.focus-monitor-left;}; "Mod+Shift+Left" = {
"Mod+Shift+Down" = {action = actions.focus-monitor-down;}; action = actions.focus-monitor-left;
"Mod+Shift+Up" = {action = actions.focus-monitor-up;}; };
"Mod+Shift+Right" = {action = actions.focus-monitor-right;}; "Mod+Shift+Down" = {
"Mod+Shift+H" = {action = actions.focus-monitor-left;}; action = actions.focus-monitor-down;
"Mod+Shift+J" = {action = actions.focus-workspace-down;}; };
"Mod+Shift+K" = {action = actions.focus-workspace-up;}; "Mod+Shift+Up" = {
"Mod+Shift+L" = {action = actions.focus-monitor-right;}; action = actions.focus-monitor-up;
};
"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" = {action = actions.toggle-windowed-fullscreen;}; "Mod+Ctrl+Shift+F" = {
action = actions.toggle-windowed-fullscreen;
};
"Mod+Shift+Ctrl+Left" = {action = actions.move-column-to-monitor-left;}; "Mod+Shift+Ctrl+Left" = {
"Mod+Shift+Ctrl+Down" = {action = actions.move-column-to-monitor-down;}; action = actions.move-column-to-monitor-left;
"Mod+Shift+Ctrl+Up" = {action = actions.move-column-to-monitor-up;}; };
"Mod+Shift+Ctrl+Right" = {action = actions.move-column-to-monitor-right;}; "Mod+Shift+Ctrl+Down" = {
"Mod+Shift+Ctrl+H" = {action = actions.move-column-to-monitor-left;}; action = actions.move-column-to-monitor-down;
"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+Up" = {
"Mod+Shift+Ctrl+L" = {action = actions.move-column-to-monitor-right;}; action = actions.move-column-to-monitor-up;
};
"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" = {action = actions.focus-workspace-down;}; "Mod+Page_Down" = {
"Mod+Page_Up" = {action = actions.focus-workspace-up;}; action = actions.focus-workspace-down;
"Mod+U" = {action = actions.focus-workspace-down;}; };
"Mod+I" = {action = actions.focus-workspace-up;}; "Mod+Page_Up" = {
"Mod+Ctrl+Page_Down" = {action = actions.move-column-to-workspace-down;}; action = actions.focus-workspace-up;
"Mod+Ctrl+Page_Up" = {action = actions.move-column-to-workspace-up;}; };
"Mod+Ctrl+U" = {action = actions.move-column-to-workspace-down;}; "Mod+U" = {
"Mod+Ctrl+I" = {action = actions.move-column-to-workspace-up;}; action = actions.focus-workspace-down;
};
"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" = {action = actions.move-workspace-down;}; "Mod+Shift+Page_Down" = {
"Mod+Shift+Page_Up" = {action = actions.move-workspace-up;}; action = actions.move-workspace-down;
"Mod+Shift+U" = {action = actions.move-workspace-down;}; };
"Mod+Shift+I" = {action = actions.move-workspace-up;}; "Mod+Shift+Page_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;
@ -454,60 +581,116 @@ with lib.custom; {
action = actions.move-column-to-workspace-up; action = actions.move-column-to-workspace-up;
}; };
"Mod+WheelScrollRight" = {action = actions.focus-column-right;}; "Mod+WheelScrollRight" = {
"Mod+WheelScrollLeft" = {action = actions.focus-column-left;}; action = actions.focus-column-right;
"Mod+Ctrl+WheelScrollRight" = {action = actions.move-column-right;}; };
"Mod+Ctrl+WheelScrollLeft" = {action = actions.move-column-left;}; "Mod+WheelScrollLeft" = {
action = actions.focus-column-left;
};
"Mod+Ctrl+WheelScrollRight" = {
action = actions.move-column-right;
};
"Mod+Ctrl+WheelScrollLeft" = {
action = actions.move-column-left;
};
"Mod+Shift+WheelScrollDown" = {action = actions.focus-column-right;}; "Mod+Shift+WheelScrollDown" = {
"Mod+Shift+WheelScrollUp" = {action = actions.focus-column-left;}; action = actions.focus-column-right;
"Mod+Ctrl+Shift+WheelScrollDown" = {action = actions.move-column-right;}; };
"Mod+Ctrl+Shift+WheelScrollUp" = {action = actions.move-column-left;}; "Mod+Shift+WheelScrollUp" = {
action = actions.focus-column-left;
};
"Mod+Ctrl+Shift+WheelScrollDown" = {
action = actions.move-column-right;
};
"Mod+Ctrl+Shift+WheelScrollUp" = {
action = actions.move-column-left;
};
"Mod+Comma" = {action = actions.consume-window-into-column;}; "Mod+Shift+Comma" = {
"Mod+Period" = {action = actions.expel-window-from-column;}; action = actions.consume-window-into-column;
};
"Mod+Period" = {
action = actions.expel-window-from-column;
};
"Mod+BracketLeft" = {action = actions.consume-or-expel-window-left;}; "Mod+BracketLeft" = {
"Mod+BracketRight" = {action = actions.consume-or-expel-window-right;}; action = actions.consume-or-expel-window-left;
};
"Mod+BracketRight" = {
action = actions.consume-or-expel-window-right;
};
"Mod+R" = {action = actions.switch-preset-column-width;}; "Mod+R" = {
"Mod+Shift+R" = {action = actions.switch-preset-window-height;}; action = actions.switch-preset-column-width;
"Mod+Ctrl+R" = {action = actions.reset-window-height;}; };
"Mod+F" = {action = actions.maximize-column;}; "Mod+Shift+R" = {
"Mod+Shift+F" = {action = actions.fullscreen-window;}; action = actions.switch-preset-window-height;
"Mod+C" = {action = actions.center-column;}; };
"Mod+Ctrl+F" = {action = actions.expand-column-to-available-width;}; "Mod+Ctrl+R" = {
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+V" = {action = actions.toggle-window-floating;}; "Mod+Shift+V" = {
action = actions.toggle-window-floating;
};
"Mod+Minus" = {action = actions.set-column-width "-10%";}; "Mod+Minus" = {
"Mod+Equal" = {action = actions.set-column-width "+10%";}; action = actions.set-column-width "-10%";
};
"Mod+Equal" = {
action = actions.set-column-width "+10%";
};
"Mod+Shift+Minus" = {action = actions.set-window-height "-10%";}; "Mod+Shift+Minus" = {
"Mod+Shift+Equal" = {action = actions.set-window-height "+10%";}; action = actions.set-window-height "-10%";
};
"Mod+Shift+Equal" = {
action = actions.set-window-height "+10%";
};
"Print" = {action = actions.screenshot {};}; # Empty attrset for default args "Print" = {
"Mod+Shift+E" = {action = actions.quit {};}; # Default: no skip-confirmation action.screenshot = [];
"Ctrl+Alt+Delete" = {action = actions.quit {};}; }; # Empty attrset for default args
"Mod+Shift+E" = {
action = actions.quit {};
}; # Default: no skip-confirmation
"Ctrl+Alt+Delete" = {
action = actions.quit {};
};
"Mod+Shift+P" = {action = actions.power-off-monitors;}; "Mod+Shift+P" = {
action = actions.power-off-monitors;
};
} }
// lib.attrsets.listToAttrs (builtins.concatMap (i: // lib.attrsets.listToAttrs (
with actions; [ builtins.concatMap (i: [
{ {
name = "Mod+${toString i}"; name = "Mod+${toString i}";
value.action = focus-workspace i; value.action = actions.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 = spawn [niri "msg" "action" "move-column-to-workspace" (toString i)]; value.action.move-window-to-workspace = i;
} }
]) (lib.range 1 9)); ]) (lib.range 1 9)
);
}; };
}; };
services.quickshell.enable = false; # services.wallpaper.enable = true;
services.wallpaper.enable = true;
}; };
} }

View file

@ -24,39 +24,9 @@ in {
jack.enable = true; jack.enable = true;
}; };
systemd.user.services.cava-combine-inputs = { services.pipewire.extraConfig.pipewire."92-low-latency" = {
description = "Combine MOTU M4 Line Inputs L/R for Cava"; "context.properties" = {
"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";
}; };
}; };
}; };

View file

@ -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-8 systemctl set-property --runtime -- user.slice AllowedCPUs=0-15
systemctl set-property --runtime -- system.slice AllowedCPUs=0-8 systemctl set-property --runtime -- system.slice AllowedCPUs=0-15
systemctl set-property --runtime -- init.scope AllowedCPUs=0-8 systemctl set-property --runtime -- init.scope AllowedCPUs=0-15
# disable vpn # disable vpn
mullvad disconnect -w mullvad disconnect -w
@ -110,14 +110,6 @@ 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"
@ -162,16 +154,6 @@ 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
];
};
}; };
}; };
@ -217,29 +199,17 @@ 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-with-appliance # libguestfs
]; # ];
networking.firewall.trustedInterfaces = ["virbr0"];
environment.etc = { environment.etc = {
"/libvirt/hooks/qemu" = { "/libvirt/hooks/qemu" = {

View file

@ -36,7 +36,6 @@ 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,
@ -44,45 +43,19 @@ 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.stable; package = config.boot.kernelPackages.nvidiaPackages.mkDriver {
# package = config.boot.kernelPackages.nvidiaPackages.beta.overrideAttrs { version = "580.82.09";
# patchesOpen = with pkgs; [ sha256_64bit = "sha256-Puz4MtouFeDgmsNMKdLHoDgDGC+QRXh6NVysvltWlbc=";
# (fetchpatch { sha256_aarch64 = "sha256-6tHiAci9iDTKqKrDIjObeFdtrlEwjxOHJpHfX4GMEGQ=";
# url = "https://raw.githubusercontent.com/CachyOS/kernel-patches/master/6.14/misc/nvidia/0001-Enable-atomic-kernel-modesetting-by-default.patch"; openSha256 = "sha256-YB+mQD+oEDIIDa+e8KX1/qOlQvZMNKFrI5z3CoVKUjs=";
# hash = "sha256-tvdm8nxxXslPUun33zj1kkYZOiWKK3F4nwcCkdzPW9s="; settingsSha256 = "sha256-um53cr2Xo90VhZM1bM2CH4q9b/1W2YOqUcvXPV6uw2s=";
# }) 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";

View file

@ -27,8 +27,8 @@ in {
}; };
}; };
services.xserver.displayManager.gdm.enable = false; services.displayManager.gdm.enable = false;
services.xserver.displayManager.gdm.wayland = true; services.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;

View file

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

View file

@ -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 = { mailserver = rec {
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,27 +64,23 @@ in {
}; };
}; };
certificateScheme = "acme-nginx"; enableManageSieve = true;
dmarcReporting.enable = true;
x509.useACMEHost = fqdn;
virusScanning = true; virusScanning = true;
stateVersion = 1; stateVersion = 3;
}; };
# services.nginx = { services.nginx = {
# virtualHosts = { virtualHosts = {
# "cal.zoeys.cloud" = { "${config.mailserver.fqdn}" = {
# 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;

View file

@ -0,0 +1,146 @@
{
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";
};
};
}

View file

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

View file

@ -10,25 +10,12 @@ 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 = cfg.mullvad; enable = true;
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 [];
}; };
} }

View file

@ -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;

View file

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

View file

@ -36,7 +36,7 @@ in {
catppuccin.forgejo.enable = false; catppuccin.forgejo.enable = false;
services.gitea-actions-runner = { services.gitea-actions-runner = {
package = pkgs.forgejo-actions-runner; package = pkgs.forgejo-runner;
instances.default = { instances.default = {
enable = true; enable = true;
name = "monolith"; name = "monolith";

View file

@ -19,19 +19,5 @@ 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];
}; };
} }

View file

@ -24,7 +24,7 @@ in {
systemd.services."mirror-update" = { systemd.services."mirror-update" = {
script = '' script = ''
${pkgs.rsync}/bin/rsync -vPa rsync://mirrors.lug.mtu.edu/archlinux/ /var/www/mirror.zackmyers.io/archlinux/ ${pkgs.rsync}/bin/rsync -vPa --delete-after rsync://mirrors.lug.mtu.edu/archlinux/ /var/www/mirror.zackmyers.io/archlinux/
''; '';
serviceConfig = { serviceConfig = {
Type = "oneshot"; Type = "oneshot";

View file

@ -148,6 +148,8 @@ 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

View file

@ -57,7 +57,7 @@ in {
# }) # })
noto-fonts noto-fonts
noto-fonts-cjk-sans noto-fonts-cjk-sans
noto-fonts-emoji noto-fonts-color-emoji
jetbrains-mono jetbrains-mono
nerd-fonts.iosevka nerd-fonts.iosevka
nerd-fonts.zed-mono nerd-fonts.zed-mono

View file

@ -0,0 +1,10 @@
{...}: final: prev: {
monado = prev.monado.overrideAttrs (old: {
buildInputs = builtins.filter (x: x != prev.opencv) old.buildInputs;
cmakeFlags =
(old.cmakeFlags or [])
++ [
"-DBUILD_WITH_OPENCV=OFF"
];
});
}

View file

@ -7,7 +7,7 @@
owner = "bluesky-social"; owner = "bluesky-social";
repo = "pds"; repo = "pds";
rev = "main"; rev = "main";
hash = "sha256-dEB5u++Zx+F4TH5q44AF/tuwAhLEyYT+U5/18viT4sw="; hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
}; };
in in
inputs.pnpm2nix.packages.${pkgs.system}.mkPnpmPackage { inputs.pnpm2nix.packages.${pkgs.system}.mkPnpmPackage {

View file

@ -0,0 +1,47 @@
{
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";
}

26
secrets/matrix-db.yaml Normal file
View file

@ -0,0 +1,26 @@
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

33
secrets/vpn-config.yaml Normal file
View file

@ -0,0 +1,33 @@
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

View file

@ -6,7 +6,10 @@
config, config,
... ...
}: { }: {
imports = [./disk-config.nix ./hardware-configuration.nix]; imports = [
./disk-config.nix
./hardware-configuration.nix
];
nix.settings = { nix.settings = {
trusted-users = ["zoey"]; trusted-users = ["zoey"];
@ -17,7 +20,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;
@ -25,36 +28,13 @@
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;
@ -82,13 +62,24 @@
configuration = { configuration = {
services.desktopManager.plasma6.enable = true; services.desktopManager.plasma6.enable = true;
services.displayManager.sddm.enable = true; services.displayManager.sddm.enable = true;
services.xserver.displayManager.gdm.enable = lib.mkForce false; services.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; [
@ -129,28 +120,16 @@
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.transmission = { services.crypto.enable = false;
enable = false; services.torrent.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;
@ -160,11 +139,13 @@
polkitPolicyOwnerUsername = "zoey"; polkitPolicyOwnerUsername = "zoey";
}; };
security.polkit.enable = true;
# Bootloader. # Bootloader.
boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.enable = lib.mkForce false;
boot.lanzaboote = { boot.lanzaboote = {
enable = false; enable = true;
pkiBundle = "/etc/secureboot"; pkiBundle = "/var/lib/sbctl";
}; };
boot.loader.efi.canTouchEfiVariables = true; boot.loader.efi.canTouchEfiVariables = true;
boot.blacklistedKernelModules = ["joydev"]; boot.blacklistedKernelModules = ["joydev"];
@ -172,18 +153,23 @@
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_cachyos-lto; boot.kernelPackages = pkgs.linuxPackages_zen;
# CachyOS-inspired kernel parameters for better desktop responsiveness and gaming
boot.kernelParams = [ boot.kernelParams = [
"nowatchdog" "nowatchdog"
"preempt=full" "preempt=full"
@ -191,11 +177,6 @@
"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"];
@ -218,43 +199,30 @@
pkgs.sbctl pkgs.sbctl
pkgs.kdiskmark pkgs.kdiskmark
pkgs.mangohud pkgs.mangohud
inputs.quickshell.packages.${system}.default pkgs.sops
(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
(inputs.umu.packages.${system}.umu-launcher.override { pkgs.umu-launcher
withTruststore = true; # (inputs.umu.packages.${system}.umu-launcher.override {
withDeltaUpdates = true; # withTruststore = 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;
@ -263,12 +231,18 @@
users.users.zoey = { users.users.zoey = {
isNormalUser = true; isNormalUser = true;
description = "zoey"; description = "zoey";
extraGroups = ["networkmanager" "wheel" "docker" "libvirtd" "plugdev"]; extraGroups = [
"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-utilities.enable = true; # Enable core GNOME utilities services.gnome.core-apps.enable = true; # Enable core GNOME utilities
users.groups.plugdev = {}; users.groups.plugdev = {};
@ -288,12 +262,7 @@
ports = [22]; ports = [22];
}; };
networking.firewall.allowedTCPPorts = [22]; networking.firewall.allowedTCPPorts = [22 1069];
services.monero = {
enable = false;
mining.enable = false;
};
services.samba = { services.samba = {
enable = true; enable = true;
@ -332,10 +301,13 @@
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;

View file

@ -97,7 +97,7 @@
pterodactyl.enable = true; pterodactyl.enable = true;
search.enable = true; search.enable = true;
map.enable = true; map.enable = true;
hydra.enable = true; hydra.enable = false;
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 = true; enable = false;
domain = "zoeys.computer"; domain = "zoeys.computer";
phx = { phx = {
database = { database = {
@ -181,6 +181,7 @@
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"
]; ];
}; };

View file

@ -45,6 +45,7 @@
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