formatting, big time

This commit is contained in:
Schrottkatze 2025-04-11 09:20:46 +02:00
parent 38d96c9f52
commit 509320c115
Signed by: schrottkatze
SSH key fingerprint: SHA256:FPOYVeBy3QP20FEM42uWF1Wa/Qhlk+L3S2+Wuau/Auo
64 changed files with 1293 additions and 990 deletions

View file

@ -10,11 +10,13 @@
... ...
}: }:
with lib; with lib;
with builtins; { with builtins;
imports = [lix-module.nixosModules.default]; {
imports = [ lix-module.nixosModules.default ];
environment = { environment = {
systemPackages = with pkgs; [ systemPackages = with pkgs; [
nixfmt-rfc-style
overskride overskride
transmission_4-gtk transmission_4-gtk
@ -105,7 +107,16 @@ with builtins; {
users.users.jade = { users.users.jade = {
isNormalUser = true; isNormalUser = true;
extraGroups = ["wheel" "input" "uinput" "libvirtd" "adbusers" "dialout" "plugdev" "wireshark"]; extraGroups = [
"wheel"
"input"
"uinput"
"libvirtd"
"adbusers"
"dialout"
"plugdev"
"wireshark"
];
openssh.authorizedKeys.keys = [ openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOaE8TFsIazpn4OnHvHcRpOFr9FfvMaWOiEjmHsmnAoE cardno:000F_70CD7D05" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOaE8TFsIazpn4OnHvHcRpOFr9FfvMaWOiEjmHsmnAoE cardno:000F_70CD7D05"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg7hhAKxIAbokHHcIj9HBgbkgoKGCG2R+gx7HZKL+iz cardno:000F_93C6A612" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg7hhAKxIAbokHHcIj9HBgbkgoKGCG2R+gx7HZKL+iz cardno:000F_93C6A612"

216
flake.nix
View file

@ -24,107 +24,129 @@
}; };
}; };
outputs = { outputs =
self, {
nixpkgs, self,
nixpkgs-stable, nixpkgs,
nixpkgs-unstable-small, nixpkgs-stable,
lix-module, nixpkgs-unstable-small,
typst-within, lix-module,
home-manager, typst-within,
nixos-hardware, home-manager,
niri, nixos-hardware,
stylix, niri,
fenix, stylix,
crane, fenix,
... crane,
} @ inputs: let ...
system = "x86_64-linux"; }@inputs:
pkgs = nixpkgs.legacyPackages.${system}; let
pkgs-stable = nixpkgs-stable.legacyPackages.${system}; system = "x86_64-linux";
pkgs-unstable-small = nixpkgs-unstable-small.legacyPackages.${system}; pkgs = nixpkgs.legacyPackages.${system};
rs-toolchain = with fenix.packages.${system}; pkgs-stable = nixpkgs-stable.legacyPackages.${system};
combine [ pkgs-unstable-small = nixpkgs-unstable-small.legacyPackages.${system};
complete.toolchain rs-toolchain =
]; with fenix.packages.${system};
crane-lib = (crane.mkLib nixpkgs.legacyPackages.${system}).overrideToolchain rs-toolchain; combine [
rs-programs = final: prev: { complete.toolchain
s10e-jrnl = crane-lib.buildPackage { ];
pname = "s10e-bs"; crane-lib = (crane.mkLib nixpkgs.legacyPackages.${system}).overrideToolchain rs-toolchain;
version = "0.0.1"; rs-programs = final: prev: {
src = crane-lib.cleanCargoSource (crane-lib.path ./.); s10e-jrnl = crane-lib.buildPackage {
}; pname = "s10e-bs";
}; version = "0.0.1";
in { src = crane-lib.cleanCargoSource (crane-lib.path ./.);
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-rfc-style;
devShells."x86_64-linux".default = pkgs.mkShell {
buildInputs = [
rs-toolchain
pkgs.pkg-config
pkgs.openssl
];
};
nixosConfigurations = {
monosodium-glutamate-g = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs pkgs-unstable-small pkgs-stable rs-programs lix-module niri;
}; };
system = "x86_64-linux"; };
modules = [ in
inputs.niri.nixosModules.niri {
stylix.nixosModules.stylix formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-rfc-style;
./hosts/monosodium-glutamate-g/configuration.nix devShells."x86_64-linux".default = pkgs.mkShell {
home-manager.nixosModules.home-manager buildInputs = [
{ rs-toolchain
home-manager.useGlobalPkgs = true; pkgs.pkg-config
home-manager.useUserPackages = true; pkgs.openssl
home-manager.extraSpecialArgs = {
inherit pkgs-unstable-small pkgs-stable typst-within;
};
home-manager.sharedModules = [
inputs.nixcord.homeManagerModules.nixcord
];
home-manager.users.jade = {
nixosConfig,
pkgs,
...
}: {
home.sessionVariables.TZ = nixosConfig.time.timeZone;
home.stateVersion = "${nixosConfig.system.stateVersion}";
};
}
]; ];
}; };
denkbrett = nixpkgs.lib.nixosSystem { nixosConfigurations = {
specialArgs = { monosodium-glutamate-g = nixpkgs.lib.nixosSystem {
inherit inputs pkgs-unstable-small pkgs-stable rs-programs lix-module niri; specialArgs = {
inherit
inputs
pkgs-unstable-small
pkgs-stable
rs-programs
lix-module
niri
;
};
system = "x86_64-linux";
modules = [
inputs.niri.nixosModules.niri
stylix.nixosModules.stylix
./hosts/monosodium-glutamate-g/configuration.nix
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = {
inherit pkgs-unstable-small pkgs-stable typst-within;
};
home-manager.sharedModules = [
inputs.nixcord.homeManagerModules.nixcord
];
home-manager.users.jade =
{
nixosConfig,
pkgs,
...
}:
{
home.sessionVariables.TZ = nixosConfig.time.timeZone;
home.stateVersion = "${nixosConfig.system.stateVersion}";
};
}
];
};
denkbrett = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit
inputs
pkgs-unstable-small
pkgs-stable
rs-programs
lix-module
niri
;
};
system = "x86_64-linux";
modules = [
inputs.niri.nixosModules.niri
stylix.nixosModules.stylix
./hosts/denkbrett/configuration.nix
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = {
inherit pkgs-unstable-small pkgs-stable typst-within;
};
home-manager.sharedModules = [
inputs.nixcord.homeManagerModules.nixcord
];
home-manager.users.jade =
{
nixosConfig,
pkgs,
...
}:
{
home.sessionVariables.TZ = nixosConfig.time.timeZone;
home.stateVersion = "22.11";
};
}
];
}; };
system = "x86_64-linux";
modules = [
inputs.niri.nixosModules.niri
stylix.nixosModules.stylix
./hosts/denkbrett/configuration.nix
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = {
inherit pkgs-unstable-small pkgs-stable typst-within;
};
home-manager.sharedModules = [
inputs.nixcord.homeManagerModules.nixcord
];
home-manager.users.jade = {
nixosConfig,
pkgs,
...
}: {
home.sessionVariables.TZ = nixosConfig.time.timeZone;
home.stateVersion = "22.11";
};
}
];
}; };
}; };
};
} }

View file

@ -1,7 +1,8 @@
# Edit this configuration file to define what should be installed on # Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page # your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help). # and in the NixOS manual (accessible by running nixos-help).
{pkgs, ...}: { { pkgs, ... }:
{
nixpkgs.config.permittedInsecurePackages = [ nixpkgs.config.permittedInsecurePackages = [
"electron-25.9.0" "electron-25.9.0"
"electron-27.3.11" "electron-27.3.11"
@ -27,19 +28,19 @@
}; };
}; };
security.pam.services.swaylock = {}; security.pam.services.swaylock = { };
hardware.usb-modeswitch.enable = true; hardware.usb-modeswitch.enable = true;
systemd.services."ModemManager".enable = true; systemd.services."ModemManager".enable = true;
systemd.services."ModemManager".wants = ["NetworkManager.service"]; systemd.services."ModemManager".wants = [ "NetworkManager.service" ];
systemd.services."ModemManager".wantedBy = ["multi-user.target"]; systemd.services."ModemManager".wantedBy = [ "multi-user.target" ];
programs.wireshark.enable = true; programs.wireshark.enable = true;
boot.resumeDevice = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694"; boot.resumeDevice = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694";
boot.kernelParams = ["resume_offset=7380652"]; boot.kernelParams = [ "resume_offset=7380652" ];
boot.binfmt.emulatedSystems = ["aarch64-linux"]; boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
services.blueman.enable = true; services.blueman.enable = true;

View file

@ -7,35 +7,53 @@
pkgs, pkgs,
modulesPath, modulesPath,
... ...
}: { }:
{
imports = [ imports = [
(modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = ["xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc"]; boot.initrd.availableKernelModules = [
boot.initrd.kernelModules = ["i915"]; "xhci_pci"
boot.kernelModules = ["kvm-intel"]; "nvme"
boot.extraModulePackages = []; "usb_storage"
"sd_mod"
"rtsx_pci_sdmmc"
];
boot.initrd.kernelModules = [ "i915" ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" = { fileSystems."/" = {
device = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694"; device = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694";
fsType = "btrfs"; fsType = "btrfs";
options = ["subvol=@" "compress=zstd:3" "noatime"]; options = [
"subvol=@"
"compress=zstd:3"
"noatime"
];
}; };
fileSystems."/home" = { fileSystems."/home" = {
device = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694"; device = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694";
fsType = "btrfs"; fsType = "btrfs";
options = ["subvol=@home" "compress=zstd:3"]; options = [
"subvol=@home"
"compress=zstd:3"
];
}; };
fileSystems."/swap" = { fileSystems."/swap" = {
device = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694"; device = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694";
fsType = "btrfs"; fsType = "btrfs";
options = ["subvol=@/@swap" "noatime"]; options = [
"subvol=@/@swap"
"noatime"
];
}; };
boot.initrd.luks.devices."luks-9cd75cce-6829-4db8-8c5c-a9fb9ec3e122".device = "/dev/disk/by-uuid/9cd75cce-6829-4db8-8c5c-a9fb9ec3e122"; boot.initrd.luks.devices."luks-9cd75cce-6829-4db8-8c5c-a9fb9ec3e122".device =
"/dev/disk/by-uuid/9cd75cce-6829-4db8-8c5c-a9fb9ec3e122";
fileSystems."/boot" = { fileSystems."/boot" = {
device = "/dev/disk/by-uuid/C6CA-5DE8"; device = "/dev/disk/by-uuid/C6CA-5DE8";

View file

@ -1,4 +1,5 @@
{...}: { { ... }:
{
imports = [ imports = [
./input.nix ./input.nix
./graphics.nix ./graphics.nix

View file

@ -3,7 +3,8 @@
lib, lib,
config, config,
... ...
}: { }:
{
environment.variables = { environment.variables = {
VDPAU_DRIVER = lib.mkIf config.hardware.graphics.enable (lib.mkDefault "va_gl"); VDPAU_DRIVER = lib.mkIf config.hardware.graphics.enable (lib.mkDefault "va_gl");
}; };

View file

@ -1,25 +1,34 @@
{...}: { { ... }:
{
# key remapping # key remapping
jade.input.remapping = let jade.input.remapping =
default = { let
swapKeys = [ default = {
["KEY_Y" "KEY_Z"] swapKeys = [
["KEY_LEFTALT" "KEY_LEFTMETA"] [
]; "KEY_Y"
dual_role = [ "KEY_Z"
{ ]
input = "KEY_CAPSLOCK"; [
hold = ["KEY_LEFTCTRL"]; "KEY_LEFTALT"
tap = ["KEY_ESC"]; "KEY_LEFTMETA"
} ]
]; ];
dual_role = [
{
input = "KEY_CAPSLOCK";
hold = [ "KEY_LEFTCTRL" ];
tap = [ "KEY_ESC" ];
}
];
};
in
{
enable = true;
devices."AT Translated Set 2 keyboard" = default;
devices."Razer Razer Huntsman" = default;
devices."Razer Razer DeathAdder V2" = default;
}; };
in {
enable = true;
devices."AT Translated Set 2 keyboard" = default;
devices."Razer Razer Huntsman" = default;
devices."Razer Razer DeathAdder V2" = default;
};
hardware.trackpoint = { hardware.trackpoint = {
enable = true; enable = true;

View file

@ -5,7 +5,8 @@
pkgs, pkgs,
pkgs-stable, pkgs-stable,
... ...
}: { }:
{
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
../../common.nix ../../common.nix
@ -35,7 +36,7 @@
kernelPackages = pkgs.linuxPackages_zen; kernelPackages = pkgs.linuxPackages_zen;
binfmt.emulatedSystems = ["aarch64-linux"]; binfmt.emulatedSystems = [ "aarch64-linux" ];
}; };
networking.hostName = "monosodium-glutamate-g"; networking.hostName = "monosodium-glutamate-g";
@ -79,7 +80,7 @@
# networking.firewall.allowedTCPPorts = [ 4713 ]; # networking.firewall.allowedTCPPorts = [ 4713 ];
systemd.services."NetworkManager-wait-online".enable = false; systemd.services."NetworkManager-wait-online".enable = false;
swapDevices = [{device = "/swap/swapfile";}]; swapDevices = [ { device = "/swap/swapfile"; } ];
system.stateVersion = "24.05"; # Did you read the comment? system.stateVersion = "24.05"; # Did you read the comment?
} }

View file

@ -7,37 +7,49 @@
pkgs, pkgs,
modulesPath, modulesPath,
... ...
}: { }:
{
imports = [ imports = [
(modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "uas" "usbhid" "sd_mod"]; boot.initrd.availableKernelModules = [
boot.initrd.kernelModules = []; "nvme"
boot.kernelModules = ["kvm-amd"]; "xhci_pci"
boot.extraModulePackages = []; "ahci"
"uas"
"usbhid"
"sd_mod"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" = { fileSystems."/" = {
device = "/dev/disk/by-uuid/efb8f256-5b14-4b52-a2d9-ae4b91ecb711"; device = "/dev/disk/by-uuid/efb8f256-5b14-4b52-a2d9-ae4b91ecb711";
fsType = "btrfs"; fsType = "btrfs";
options = ["subvol=@"]; options = [ "subvol=@" ];
}; };
boot.initrd.luks.devices."luks-919f9b8b-2804-447a-97e0-f7f515d0be56".device = "/dev/disk/by-uuid/919f9b8b-2804-447a-97e0-f7f515d0be56"; boot.initrd.luks.devices."luks-919f9b8b-2804-447a-97e0-f7f515d0be56".device =
"/dev/disk/by-uuid/919f9b8b-2804-447a-97e0-f7f515d0be56";
fileSystems."/boot" = { fileSystems."/boot" = {
device = "/dev/disk/by-uuid/3FAD-A6B4"; device = "/dev/disk/by-uuid/3FAD-A6B4";
fsType = "vfat"; fsType = "vfat";
options = ["fmask=0077" "dmask=0077"]; options = [
"fmask=0077"
"dmask=0077"
];
}; };
fileSystems."/swap" = { fileSystems."/swap" = {
device = "/dev/disk/by-uuid/efb8f256-5b14-4b52-a2d9-ae4b91ecb711"; device = "/dev/disk/by-uuid/efb8f256-5b14-4b52-a2d9-ae4b91ecb711";
fsType = "btrfs"; fsType = "btrfs";
options = ["subvol=swap"]; options = [ "subvol=swap" ];
}; };
swapDevices = []; swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's # (the default) this is the recommended approach. When using systemd-networkd it's

View file

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

View file

@ -1,4 +1,5 @@
{pkgs, ...}: { { pkgs, ... }:
{
environment.systemPackages = [ environment.systemPackages = [
pkgs.nvtopPackages.amd pkgs.nvtopPackages.amd
pkgs.radeontop pkgs.radeontop

View file

@ -1,4 +1,5 @@
{...}: { { ... }:
{
imports = [ imports = [
./shell ./shell
./desktop ./desktop

View file

@ -4,7 +4,8 @@
pkgs, pkgs,
... ...
}: }:
with lib; { with lib;
{
imports = [ imports = [
./gaming.nix ./gaming.nix
./syncthing.nix ./syncthing.nix
@ -28,25 +29,27 @@ with lib; {
notifications.test = true; notifications.test = true;
}; };
home-manager.users.jade = {pkgs, ...}: { home-manager.users.jade =
programs.ssh = { { pkgs, ... }:
controlMaster = "yes"; {
programs.ssh = {
controlMaster = "yes";
};
home.packages = with pkgs; [
just
bacon
magic-wormhole-rs
# filemanager
xfce.thunar
xfce.tumbler
xfce.thunar-archive-plugin
file-roller
# from environment.systemPackages cleanup
virt-manager
ddccontrol-db
];
}; };
home.packages = with pkgs; [
just
bacon
magic-wormhole-rs
# filemanager
xfce.thunar
xfce.tumbler
xfce.thunar-archive-plugin
file-roller
# from environment.systemPackages cleanup
virt-manager
ddccontrol-db
];
};
} }

View file

@ -2,16 +2,20 @@
config, config,
lib, lib,
... ...
}: let }:
let
cfg = config.jade.desktop.gaming; cfg = config.jade.desktop.gaming;
in in
with lib; { with lib;
options.jade.desktop.gaming = { {
enable = mkEnableOption "Enable gaming stuff"; options.jade.desktop.gaming = {
}; enable = mkEnableOption "Enable gaming stuff";
config = mkIf cfg.enable { };
programs.steam.enable = true; config = mkIf cfg.enable {
home-manager.users.jade = {pkgs, ...}: { programs.steam.enable = true;
home-manager.users.jade =
{ pkgs, ... }:
{
home.packages = with pkgs; [ home.packages = with pkgs; [
lutris lutris
prismlauncher prismlauncher
@ -20,5 +24,5 @@ in
vkd3d-proton vkd3d-proton
]; ];
}; };
}; };
} }

View file

@ -3,20 +3,24 @@
lib, lib,
pkgs, pkgs,
... ...
}: let }:
let
cfg = config.jade.desktop.kdeconnect; cfg = config.jade.desktop.kdeconnect;
in in
with lib; { with lib;
options.jade.desktop.kdeconnect = { {
enable = mkEnableOption "Enable KDE connect"; options.jade.desktop.kdeconnect = {
}; enable = mkEnableOption "Enable KDE connect";
config = mkIf cfg.enable { };
programs.kdeconnect.enable = true; config = mkIf cfg.enable {
home-manager.users.jade = {pkgs, ...}: { programs.kdeconnect.enable = true;
home-manager.users.jade =
{ pkgs, ... }:
{
services.kdeconnect = { services.kdeconnect = {
enable = true; enable = true;
indicator = true; indicator = true;
}; };
}; };
}; };
} }

View file

@ -3,19 +3,23 @@
lib, lib,
pkgs, pkgs,
... ...
}: let }:
let
cfg = config.jade.desktop.social; cfg = config.jade.desktop.social;
in in
with lib; { with lib;
options.jade.desktop.social = { {
enable = mkEnableOption "Enable social apps"; options.jade.desktop.social = {
}; enable = mkEnableOption "Enable social apps";
config = mkIf cfg.enable { };
home-manager.users.jade = { config = mkIf cfg.enable {
home-manager.users.jade =
{
pkgs, pkgs,
pkgs-stable, pkgs-stable,
... ...
}: { }:
{
programs.nixcord = { programs.nixcord = {
enable = true; enable = true;
vesktop = { vesktop = {
@ -35,11 +39,11 @@ in
iamb iamb
]; ];
}; };
programs.evolution = { programs.evolution = {
enable = true; enable = true;
plugins = [pkgs.evolution-ews]; plugins = [ pkgs.evolution-ews ];
};
services.gnome.evolution-data-server.enable = true;
services.gnome.evolution-data-server.plugins = [];
}; };
} services.gnome.evolution-data-server.enable = true;
services.gnome.evolution-data-server.plugins = [ ];
};
}

View file

@ -3,19 +3,21 @@
lib, lib,
pkgs, pkgs,
... ...
}: let }:
let
cfg = config.jade.desktop.syncthing; cfg = config.jade.desktop.syncthing;
in in
with lib; { with lib;
options.jade.desktop.syncthing = { {
enable = mkEnableOption "Enable syncing via syncthing"; options.jade.desktop.syncthing = {
enable = mkEnableOption "Enable syncing via syncthing";
};
config = mkIf cfg.enable {
services.syncthing = rec {
enable = true;
user = "jade";
dataDir = "/home/${user}/Documents";
configDir = "/home/${user}/Documents/.config/syncthing";
}; };
config = mkIf cfg.enable { };
services.syncthing = rec { }
enable = true;
user = "jade";
dataDir = "/home/${user}/Documents";
configDir = "/home/${user}/Documents/.config/syncthing";
};
};
}

View file

@ -1,4 +1,5 @@
{pkgs, ...}: { { pkgs, ... }:
{
programs = { programs = {
noisetorch.enable = true; noisetorch.enable = true;
}; };

View file

@ -1,4 +1,5 @@
{...}: { { ... }:
{
imports = [ imports = [
./audio.nix ./audio.nix
./home ./home

View file

@ -3,31 +3,33 @@
config, config,
lib, lib,
... ...
}: let }:
let
cfg = config.jade.desktop.dm; cfg = config.jade.desktop.dm;
in in
with lib; { with lib;
options.jade.desktop.dm.autoLogin = { {
enable = mkEnableOption "Enable Autologin"; options.jade.desktop.dm.autoLogin = {
delay = mkOption { enable = mkEnableOption "Enable Autologin";
type = types.int; delay = mkOption {
default = 0; type = types.int;
default = 0;
};
};
config.services = {
displayManager = {
autoLogin = {
enable = cfg.autoLogin.enable;
user = "jade";
};
defaultSession = "niri";
};
xserver.displayManager.gdm = {
enable = true;
banner = "Meow :3";
autoLogin = {
delay = cfg.autoLogin.delay;
}; };
}; };
config.services = { };
displayManager = { }
autoLogin = {
enable = cfg.autoLogin.enable;
user = "jade";
};
defaultSession = "niri";
};
xserver.displayManager.gdm = {
enable = true;
banner = "Meow :3";
autoLogin = {
delay = cfg.autoLogin.delay;
};
};
};
}

View file

@ -1,4 +1,5 @@
{pkgs, ...}: { { pkgs, ... }:
{
home.file = { home.file = {
".tridactylrc" = { ".tridactylrc" = {
text = '' text = ''
@ -16,23 +17,25 @@
}; };
policies = { policies = {
DefaultDownloadDirectory = "\${home}/Downloads"; DefaultDownloadDirectory = "\${home}/Downloads";
Extensions.Install = builtins.map (name: "https://addons.mozilla.org/firefox/downloads/latest/${name}") [ Extensions.Install =
"ublock-origin" builtins.map (name: "https://addons.mozilla.org/firefox/downloads/latest/${name}")
"tridactyl-vim" [
"privacy-badger17" "ublock-origin"
"gruvbox-dark-theme" "tridactyl-vim"
"torproject-snowflake" "privacy-badger17"
"bitwarden-password-manager" "gruvbox-dark-theme"
"terms-of-service-didnt-read" "torproject-snowflake"
"shinigami-eyes" "bitwarden-password-manager"
"darkreader" "terms-of-service-didnt-read"
"sponsorblock" "shinigami-eyes"
"youtube-mrbeastify" "darkreader"
"return-youtube-dislikes" "sponsorblock"
"multi-account-containers" "youtube-mrbeastify"
"tabby-cat-friend" "return-youtube-dislikes"
"indie-wiki-buddy" "multi-account-containers"
]; "tabby-cat-friend"
"indie-wiki-buddy"
];
Extensions.Uninstall = [ Extensions.Uninstall = [
"google@search.mozilla.org" "google@search.mozilla.org"
"bing@search.mozilla.org" "bing@search.mozilla.org"
@ -63,7 +66,7 @@
} }
]; ];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = ["pkgs"]; definedAliases = [ "pkgs" ];
}; };
"Nix Options" = { "Nix Options" = {
urls = [ urls = [
@ -78,7 +81,7 @@
} }
]; ];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = ["opts"]; definedAliases = [ "opts" ];
}; };
"Home manager Options" = { "Home manager Options" = {
urls = [ urls = [
@ -97,7 +100,7 @@
} }
]; ];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = ["hm"]; definedAliases = [ "hm" ];
}; };
"NixOS Wiki" = { "NixOS Wiki" = {
urls = [ urls = [
@ -112,7 +115,7 @@
} }
]; ];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = ["nxwk"]; definedAliases = [ "nxwk" ];
}; };
"Noogle" = { "Noogle" = {
urls = [ urls = [
@ -126,7 +129,7 @@
]; ];
} }
]; ];
definedAliases = ["ngl"]; definedAliases = [ "ngl" ];
}; };
"lib.rs" = { "lib.rs" = {
urls = [ urls = [
@ -141,7 +144,7 @@
} }
]; ];
icon = "https://lib.rs/favicon.png"; icon = "https://lib.rs/favicon.png";
definedAliases = ["libs"]; definedAliases = [ "libs" ];
}; };
"rust docs" = { "rust docs" = {
urls = [ urls = [
@ -156,7 +159,7 @@
} }
]; ];
icon = "https://docs.rs/-/static/favicon.ico"; icon = "https://docs.rs/-/static/favicon.ico";
definedAliases = ["docs"]; definedAliases = [ "docs" ];
}; };
"rust docs direct open" = { "rust docs direct open" = {
urls = [ urls = [
@ -164,7 +167,10 @@
template = "https://docs.rs/{searchTerms}"; template = "https://docs.rs/{searchTerms}";
} }
]; ];
definedAliases = ["doc" "docd"]; definedAliases = [
"doc"
"docd"
];
}; };
"rust std docs" = { "rust std docs" = {
urls = [ urls = [
@ -179,7 +185,7 @@
} }
]; ];
icon = "https://doc.rust-lang.org/favicon.ico"; icon = "https://doc.rust-lang.org/favicon.ico";
definedAliases = ["std"]; definedAliases = [ "std" ];
}; };
"MDN" = { "MDN" = {
urls = [ urls = [

View file

@ -1,30 +1,33 @@
{...}: { { ... }:
{
programs.niri.enable = true; programs.niri.enable = true;
home-manager.users.jade = {pkgs, ...}: { home-manager.users.jade =
imports = [ { pkgs, ... }:
./notifications.nix {
./terminal.nix imports = [
./layaway.nix ./notifications.nix
./swayidle.nix ./terminal.nix
./browser.nix ./layaway.nix
./eww ./swayidle.nix
./niri ./browser.nix
]; ./eww
./niri
];
# temporary(tm) # temporary(tm)
programs.wofi.enable = true; programs.wofi.enable = true;
programs.swaylock.enable = true; programs.swaylock.enable = true;
services.network-manager-applet.enable = true; services.network-manager-applet.enable = true;
xsession.enable = true; xsession.enable = true;
home.packages = [ home.packages = [
pkgs.fluent-reader pkgs.fluent-reader
]; ];
services.gpg-agent = { services.gpg-agent = {
enable = true; enable = true;
enableNushellIntegration = true; enableNushellIntegration = true;
enableSshSupport = true; enableSshSupport = true;
};
}; };
};
} }

View file

@ -1,6 +1,7 @@
{ ... }: { { ... }:
programs.eww = { {
enable = true; programs.eww = {
configDir = ./configDir; enable = true;
}; configDir = ./configDir;
};
} }

View file

@ -2,7 +2,8 @@
pkgs, pkgs,
lib, lib,
... ...
}: let }:
let
# stolen: https://github.com/MultisampledNight/core/blob/678f176cb24f5dc4b5dc629cfd3e643487be01bb/system/packages/layaway/default.nix#L7-L25 # stolen: https://github.com/MultisampledNight/core/blob/678f176cb24f5dc4b5dc629cfd3e643487be01bb/system/packages/layaway/default.nix#L7-L25
layaway = pkgs.rustPlatform.buildRustPackage rec { layaway = pkgs.rustPlatform.buildRustPackage rec {
pname = "layaway"; pname = "layaway";
@ -21,9 +22,10 @@
meta = with lib; { meta = with lib; {
description = "Layout creation for Sway via a relative and human-readable DSL."; description = "Layout creation for Sway via a relative and human-readable DSL.";
homepage = "https://github.com/MultisampledNight/layaway"; homepage = "https://github.com/MultisampledNight/layaway";
maintainers = [maintainers.multisn8]; maintainers = [ maintainers.multisn8 ];
}; };
}; };
in { in
home.packages = [layaway]; {
home.packages = [ layaway ];
} }

View file

@ -1,50 +1,91 @@
{pkgs, ...}: { { pkgs, ... }:
{
programs.niri.settings.binds = { programs.niri.settings.binds = {
# spawn terminal # spawn terminal
"Mod+Return".action.spawn = "kitty"; "Mod+Return".action.spawn = "kitty";
"Mod+Return".repeat = false; "Mod+Return".repeat = false;
"Mod+D".action.spawn = ["wofi" "-S" "drun" "--allow-images"]; "Mod+D".action.spawn = [
"wofi"
"-S"
"drun"
"--allow-images"
];
"Mod+D".repeat = false; "Mod+D".repeat = false;
"Mod+I".action.spawn = ["${pkgs.rofimoji}/bin/rofimoji" "--selector" "wofi" "-f" "alchemical_symbols" "anatolian_hieroglyphs" "emojis" "braille_patterns" "box_drawing" "chess_symbols" "emoticons" "geometric_shapes" "gothic" "greek_extended" "math" "mathematical_alphanumeric_symbols" "mathematical_operators" "miscellaneous_symbols" "miscellaneous_mathematical_symbols-a" "miscellaneous_mathematical_symbols-b" "miscellaneous_symbols_and_arrows" "miscellaneous_symbols_and_pictographs" "miscellaneous_technical" "modi" "modifier_tone_letters" "musical_symbols" "nerd_font" "number_forms" "shorthand_format_controls" "specials" "variation_selectors" "vertical_forms" "-a" "copy"]; "Mod+I".action.spawn = [
"${pkgs.rofimoji}/bin/rofimoji"
"--selector"
"wofi"
"-f"
"alchemical_symbols"
"anatolian_hieroglyphs"
"emojis"
"braille_patterns"
"box_drawing"
"chess_symbols"
"emoticons"
"geometric_shapes"
"gothic"
"greek_extended"
"math"
"mathematical_alphanumeric_symbols"
"mathematical_operators"
"miscellaneous_symbols"
"miscellaneous_mathematical_symbols-a"
"miscellaneous_mathematical_symbols-b"
"miscellaneous_symbols_and_arrows"
"miscellaneous_symbols_and_pictographs"
"miscellaneous_technical"
"modi"
"modifier_tone_letters"
"musical_symbols"
"nerd_font"
"number_forms"
"shorthand_format_controls"
"specials"
"variation_selectors"
"vertical_forms"
"-a"
"copy"
];
"Mod+Shift+E".action.quit = []; "Mod+Shift+E".action.quit = [ ];
"Mod+Shift+Q".action.close-window = []; "Mod+Shift+Q".action.close-window = [ ];
"Mod+Shift+P".action.power-off-monitors = []; "Mod+Shift+P".action.power-off-monitors = [ ];
"Mod+Shift+Ctrl+Slash".action.toggle-keyboard-shortcuts-inhibit = []; "Mod+Shift+Ctrl+Slash".action.toggle-keyboard-shortcuts-inhibit = [ ];
"Mod+Shift+Ctrl+Slash".allow-inhibiting = false; "Mod+Shift+Ctrl+Slash".allow-inhibiting = false;
"Mod+Shift+Slash".action.show-hotkey-overlay = []; "Mod+Shift+Slash".action.show-hotkey-overlay = [ ];
# window/columns controls # window/columns controls
"Mod+H".action.focus-column-left = []; "Mod+H".action.focus-column-left = [ ];
"Mod+J".action.focus-window-down = []; "Mod+J".action.focus-window-down = [ ];
"Mod+K".action.focus-window-up = []; "Mod+K".action.focus-window-up = [ ];
"Mod+L".action.focus-column-right = []; "Mod+L".action.focus-column-right = [ ];
"Mod+Ctrl+H".action.move-column-left = []; "Mod+Ctrl+H".action.move-column-left = [ ];
"Mod+Ctrl+J".action.move-window-down = []; "Mod+Ctrl+J".action.move-window-down = [ ];
"Mod+Ctrl+K".action.move-window-up = []; "Mod+Ctrl+K".action.move-window-up = [ ];
"Mod+Ctrl+L".action.move-column-right = []; "Mod+Ctrl+L".action.move-column-right = [ ];
"Mod+R".action.switch-preset-column-width = []; "Mod+R".action.switch-preset-column-width = [ ];
"Mod+V".action.toggle-window-floating = []; "Mod+V".action.toggle-window-floating = [ ];
"Mod+Shift+V".action.switch-focus-between-floating-and-tiling = []; "Mod+Shift+V".action.switch-focus-between-floating-and-tiling = [ ];
# monitor controls # monitor controls
"Mod+Shift+H".action.focus-monitor-left = []; "Mod+Shift+H".action.focus-monitor-left = [ ];
"Mod+Shift+J".action.focus-monitor-down = []; "Mod+Shift+J".action.focus-monitor-down = [ ];
"Mod+Shift+K".action.focus-monitor-up = []; "Mod+Shift+K".action.focus-monitor-up = [ ];
"Mod+Shift+L".action.focus-monitor-right = []; "Mod+Shift+L".action.focus-monitor-right = [ ];
"Mod+Shift+Ctrl+H".action.move-column-to-monitor-left = []; "Mod+Shift+Ctrl+H".action.move-column-to-monitor-left = [ ];
"Mod+Shift+Ctrl+J".action.move-column-to-monitor-down = []; "Mod+Shift+Ctrl+J".action.move-column-to-monitor-down = [ ];
"Mod+Shift+Ctrl+K".action.move-column-to-monitor-up = []; "Mod+Shift+Ctrl+K".action.move-column-to-monitor-up = [ ];
"Mod+Shift+Ctrl+L".action.move-column-to-monitor-right = []; "Mod+Shift+Ctrl+L".action.move-column-to-monitor-right = [ ];
# workspace controls # workspace controls
"Mod+P".action.focus-workspace-up = []; "Mod+P".action.focus-workspace-up = [ ];
"Mod+N".action.focus-workspace-down = []; "Mod+N".action.focus-workspace-down = [ ];
"Mod+Ctrl+P".action.move-column-to-workspace-up = []; "Mod+Ctrl+P".action.move-column-to-workspace-up = [ ];
"Mod+Ctrl+N".action.move-column-to-workspace-down = []; "Mod+Ctrl+N".action.move-column-to-workspace-down = [ ];
"Mod+1".action.focus-workspace = 1; "Mod+1".action.focus-workspace = 1;
"Mod+2".action.focus-workspace = 2; "Mod+2".action.focus-workspace = 2;
"Mod+3".action.focus-workspace = 3; "Mod+3".action.focus-workspace = 3;
@ -65,26 +106,46 @@
"Mod+Ctrl+9".action.move-column-to-workspace = 9; "Mod+Ctrl+9".action.move-column-to-workspace = 9;
# column editing stuffs # column editing stuffs
"Mod+BracketLeft".action.consume-or-expel-window-left = []; "Mod+BracketLeft".action.consume-or-expel-window-left = [ ];
"Mod+BracketRight".action.consume-or-expel-window-right = []; "Mod+BracketRight".action.consume-or-expel-window-right = [ ];
"Mod+F".action.maximize-column = []; "Mod+F".action.maximize-column = [ ];
"Mod+Shift+F".action.expand-column-to-available-width = []; "Mod+Shift+F".action.expand-column-to-available-width = [ ];
"Mod+Ctrl+F".action.fullscreen-window = []; "Mod+Ctrl+F".action.fullscreen-window = [ ];
"Mod+C".action.center-column = []; "Mod+C".action.center-column = [ ];
"Mod+Minus".action.set-column-width = "-5%"; "Mod+Minus".action.set-column-width = "-5%";
"Mod+Equal".action.set-column-width = "+5%"; "Mod+Equal".action.set-column-width = "+5%";
"Mod+Shift+Minus".action.set-window-height = "-10%"; "Mod+Shift+Minus".action.set-window-height = "-10%";
"Mod+Shift+Equal".action.set-window-height = "+10%"; "Mod+Shift+Equal".action.set-window-height = "+10%";
"Mod+W".action.toggle-column-tabbed-display = []; "Mod+W".action.toggle-column-tabbed-display = [ ];
# media keys # media keys
"XF86AudioRaiseVolume".action.spawn = ["wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"]; "XF86AudioRaiseVolume".action.spawn = [
"XF86AudioLowerVolume".action.spawn = ["wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"]; "wpctl"
"XF86AudioMute".action.spawn = ["wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"]; "set-volume"
"XF86AudioMicMute" .action.spawn = ["wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"]; "@DEFAULT_AUDIO_SINK@"
"0.1+"
];
"XF86AudioLowerVolume".action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"0.1-"
];
"XF86AudioMute".action.spawn = [
"wpctl"
"set-mute"
"@DEFAULT_AUDIO_SINK@"
"toggle"
];
"XF86AudioMicMute".action.spawn = [
"wpctl"
"set-mute"
"@DEFAULT_AUDIO_SOURCE@"
"toggle"
];
"XF86AudioRaiseVolume".allow-when-locked = true; "XF86AudioRaiseVolume".allow-when-locked = true;
"XF86AudioLowerVolume".allow-when-locked = true; "XF86AudioLowerVolume".allow-when-locked = true;
"XF86AudioMute".allow-when-locked = true; "XF86AudioMute".allow-when-locked = true;
"XF86AudioMicMute" .allow-when-locked = true; "XF86AudioMicMute".allow-when-locked = true;
}; };
} }

View file

@ -1,4 +1,5 @@
{pkgs, ...}: { { pkgs, ... }:
{
imports = [ imports = [
./xwayland-sat.nix ./xwayland-sat.nix
./screenshot.nix ./screenshot.nix
@ -14,7 +15,14 @@
}; };
spawn-at-startup = [ spawn-at-startup = [
{command = ["eww" "open-many" "topBar" "bottomBar"];} {
command = [
"eww"
"open-many"
"topBar"
"bottomBar"
];
}
{ {
command = [ command = [
"${pkgs.swaybg}/bin/swaybg" "${pkgs.swaybg}/bin/swaybg"

View file

@ -1,4 +1,5 @@
{...}: { { ... }:
{
programs.niri.settings.input = { programs.niri.settings.input = {
keyboard = { keyboard = {
xkb = { xkb = {

View file

@ -1,9 +1,10 @@
{...}: { { ... }:
{
programs.niri.settings = { programs.niri.settings = {
layer-rules = [ layer-rules = [
{ {
matches = [ matches = [
{namespace = "notifications";} { namespace = "notifications"; }
]; ];
block-out-from = "screen-capture"; block-out-from = "screen-capture";
} }
@ -11,12 +12,14 @@
window-rules = [ window-rules = [
{ {
matches = [ matches = [
{app-id = "^signal|Element|org\.gnome\.Evolution$";} { app-id = "^signal|Element|org\.gnome\.Evolution$"; }
{title = "^.*(Discord|Beispiel Screenshare block Bug|Bitwarden|Träwelling).*$";} { title = "^.*(Discord|Beispiel Screenshare block Bug|Bitwarden|Träwelling).*$"; }
]; ];
excludes = [ excludes = [
{title = "^.*((Schrottkatze|Statistics|Leaderboard) - Träwelling|chaos.social|Nekoverse|catgirl.cloud).*$";} {
{is-floating = true;} title = "^.*((Schrottkatze|Statistics|Leaderboard) - Träwelling|chaos.social|Nekoverse|catgirl.cloud).*$";
}
{ is-floating = true; }
]; ];
block-out-from = "screen-capture"; block-out-from = "screen-capture";
} }

View file

@ -1,5 +1,6 @@
{pkgs, ...}: { { pkgs, ... }:
home.packages = [pkgs.gamescope]; {
home.packages = [ pkgs.gamescope ];
programs.niri.settings = { programs.niri.settings = {
window-rules = [ window-rules = [
{ {
@ -48,12 +49,16 @@
is-floating = true; is-floating = true;
} }
]; ];
geometry-corner-radius = let val = 5.; in { geometry-corner-radius =
bottom-left = val; let
bottom-right = val; val = 5.;
top-left = val; in
top-right = val; {
}; bottom-left = val;
bottom-right = val;
top-left = val;
top-right = val;
};
} }
]; ];

View file

@ -1,13 +1,14 @@
{pkgs, ...}: { { pkgs, ... }:
{
programs.niri.settings = { programs.niri.settings = {
screenshot-path = "~/Pictures/screenshots/%Y-%m-%dT%H:%M:%S.png"; screenshot-path = "~/Pictures/screenshots/%Y-%m-%dT%H:%M:%S.png";
binds = { binds = {
"Print".action.screenshot = []; "Print".action.screenshot = [ ];
"Ctrl+Print".action.screenshot-screen = []; "Ctrl+Print".action.screenshot-screen = [ ];
"Shift+Print".action.screenshot-window = []; "Shift+Print".action.screenshot-window = [ ];
"Mod+S".action.screenshot = []; "Mod+S".action.screenshot = [ ];
"Mod+Ctrl+S".action.screenshot-screen = []; "Mod+Ctrl+S".action.screenshot-screen = [ ];
"Mod+Shift+S".action.screenshot-window = []; "Mod+Shift+S".action.screenshot-window = [ ];
}; };
}; };
} }

View file

@ -1,4 +1,5 @@
{...}: { { ... }:
{
programs.niri.settings = { programs.niri.settings = {
prefer-no-csd = true; prefer-no-csd = true;
@ -38,35 +39,42 @@
inactive.color = "#3c3836"; inactive.color = "#3c3836";
gap = 2; gap = 2;
width = 5; width = 5;
corner-radius= 3; corner-radius = 3;
position = "left"; position = "left";
gaps-between-tabs = 0; gaps-between-tabs = 0;
}; };
}; };
window-rules = [ window-rules = [
{ {
matches = [{ matches = [
is-floating = true; {
}]; is-floating = true;
baba-is-float = true; }
shadow = { ];
offset.y = 0; baba-is-float = true;
offset.x = 0; shadow = {
softness = 40; offset.y = 0;
color = "#bab9e5af"; offset.x = 0;
inactive-color = "#fa9d99af"; softness = 40;
enable = true; color = "#bab9e5af";
}; inactive-color = "#fa9d99af";
} enable = true;
{
geometry-corner-radius = let val = 1.; in {
bottom-left = val;
bottom-right = val;
top-left = val;
top-right = val;
}; };
}
{
geometry-corner-radius =
let
val = 1.;
in
{
bottom-left = val;
bottom-right = val;
top-left = val;
top-right = val;
};
clip-to-geometry = true; clip-to-geometry = true;
}]; }
];
}; };
} }

View file

@ -1,7 +1,8 @@
{pkgs, ...}: { { pkgs, ... }:
{
programs.niri.settings = { programs.niri.settings = {
spawn-at-startup = [ spawn-at-startup = [
{command = ["${pkgs.xwayland-satellite}/bin/xwayland-satellite"];} { command = [ "${pkgs.xwayland-satellite}/bin/xwayland-satellite" ]; }
]; ];
environment.DISPLAY = ":0"; environment.DISPLAY = ":0";
}; };

View file

@ -1,4 +1,5 @@
{pkgs, ...}: { { pkgs, ... }:
{
home.packages = [ home.packages = [
pkgs.libnotify pkgs.libnotify
]; ];

View file

@ -1,4 +1,5 @@
{pkgs, ...}: { { pkgs, ... }:
{
# unsure whether i still need swayidle, will keep it in and might remove after further testing # unsure whether i still need swayidle, will keep it in and might remove after further testing
services.swayidle = { services.swayidle = {

View file

@ -1,4 +1,5 @@
{...}: { { ... }:
{
programs.kitty = { programs.kitty = {
enable = true; enable = true;
font.size = 12; font.size = 12;

View file

@ -1,4 +1,5 @@
{...}: { { ... }:
{
time.timeZone = "Europe/Berlin"; time.timeZone = "Europe/Berlin";
i18n.extraLocaleSettings = { i18n.extraLocaleSettings = {
LC_ADDRESS = "de_DE.UTF-8"; LC_ADDRESS = "de_DE.UTF-8";

View file

@ -1,4 +1,5 @@
{pkgs, ...}: { { pkgs, ... }:
{
services.printing = { services.printing = {
enable = true; enable = true;
drivers = with pkgs; [ drivers = with pkgs; [

View file

@ -1,4 +1,5 @@
{pkgs, ...}: { { pkgs, ... }:
{
stylix = { stylix = {
enable = true; enable = true;
polarity = "dark"; polarity = "dark";
@ -25,30 +26,32 @@
}; };
}; };
}; };
home-manager.users.jade = {pkgs, ...}: { home-manager.users.jade =
stylix.targets = { { pkgs, ... }:
firefox = { {
profileNames = ["jade"]; stylix.targets = {
firefox = {
profileNames = [ "jade" ];
};
helix.enable = false;
btop.enable = false;
nushell.enable = false;
starship.enable = false;
kitty.enable = false;
dunst.enable = false;
wofi.enable = false;
}; };
helix.enable = false; gtk = {
btop.enable = false; enable = true;
nushell.enable = false; cursorTheme = {
starship.enable = false; package = pkgs.phinger-cursors;
kitty.enable = false; name = "phinger-cursors";
dunst.enable = false; size = 30;
wofi.enable = false; };
}; iconTheme = {
gtk = { package = pkgs.gruvbox-dark-icons-gtk;
enable = true; name = "gruvbox-dark-icons";
cursorTheme = { };
package = pkgs.phinger-cursors;
name = "phinger-cursors";
size = 30;
};
iconTheme = {
package = pkgs.gruvbox-dark-icons-gtk;
name = "gruvbox-dark-icons";
}; };
}; };
};
} }

View file

@ -1,4 +1,5 @@
{...}: { { ... }:
{
services.tlp = { services.tlp = {
enable = true; enable = true;
settings = { settings = {

View file

@ -3,7 +3,8 @@
lib, lib,
pkgs, pkgs,
... ...
}: { }:
{
imports = [ imports = [
./spacenav.nix ./spacenav.nix
./wacom.nix ./wacom.nix

View file

@ -3,33 +3,35 @@
config, config,
lib, lib,
... ...
}: let }:
let
cfg = config.jade.hwKey; cfg = config.jade.hwKey;
in in
with lib; { with lib;
options.jade.hwKey = { {
pamAuth.enable = mkEnableOption "Enable PAM authentication with hardware keys"; options.jade.hwKey = {
}; pamAuth.enable = mkEnableOption "Enable PAM authentication with hardware keys";
config = { };
# nitrokey config = {
services.udev.packages = [pkgs.nitrokey-udev-rules]; # nitrokey
services.udev.packages = [ pkgs.nitrokey-udev-rules ];
# smartcard daemon # smartcard daemon
services.pcscd.enable = true; services.pcscd.enable = true;
# authenticate using hw key # authenticate using hw key
security.pam = { security.pam = {
services.jade.u2fAuth = cfg.pamAuth.enable; services.jade.u2fAuth = cfg.pamAuth.enable;
u2f = { u2f = {
enable = true; enable = true;
control = "sufficient"; control = "sufficient";
settings = { settings = {
cue = true; cue = true;
authFile = "/home/jade/.ssh/u2f_keys"; authFile = "/home/jade/.ssh/u2f_keys";
};
}; };
}; };
programs.i3lock.u2fSupport = true;
}; };
}
programs.i3lock.u2fSupport = true;
};
}

View file

@ -1,10 +1,11 @@
{pkgs, ...}: { { pkgs, ... }:
{
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
spacenavd spacenavd
libspnav libspnav
]; ];
systemd.services.spacenavd = { systemd.services.spacenavd = {
wantedBy = ["graphical.target"]; wantedBy = [ "graphical.target" ];
script = "${pkgs.spacenavd}/bin/spacenavd -d"; script = "${pkgs.spacenavd}/bin/spacenavd -d";
}; };
} }

View file

@ -1,10 +1,13 @@
{...}: { { ... }:
{
services.xserver.wacom.enable = true; services.xserver.wacom.enable = true;
home-manager.users.jade = {pkgs, ...}: { home-manager.users.jade =
home.packages = [ { pkgs, ... }:
# TODO: figure out if the previous enabled option depends on these anyway {
pkgs.libwacom home.packages = [
pkgs.wacomtablet # TODO: figure out if the previous enabled option depends on these anyway
]; pkgs.libwacom
}; pkgs.wacomtablet
];
};
} }

View file

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

View file

@ -3,7 +3,8 @@
config, config,
lib, lib,
... ...
}: let }:
let
cfg = config.jade.input.remapping; cfg = config.jade.input.remapping;
evremap = pkgs.rustPlatform.buildRustPackage { evremap = pkgs.rustPlatform.buildRustPackage {
pname = "evremap"; pname = "evremap";
@ -16,91 +17,117 @@
}; };
useFetchCargoVendor = true; useFetchCargoVendor = true;
cargoHash = "sha256-O1rJ48m8Q7kZABw/UNpmUT7FFBWQedo6CuV+NX9kDt8="; cargoHash = "sha256-O1rJ48m8Q7kZABw/UNpmUT7FFBWQedo6CuV+NX9kDt8=";
nativeBuildInputs = [pkgs.pkg-config]; nativeBuildInputs = [ pkgs.pkg-config ];
buildInputs = [pkgs.libevdev]; buildInputs = [ pkgs.libevdev ];
}; };
toml = pkgs.formats.toml {}; toml = pkgs.formats.toml { };
in in
with lib; { with lib;
options.jade.input.remapping = { {
enable = mkEnableOption "Enable evremap"; options.jade.input.remapping = {
devices = mkOption { enable = mkEnableOption "Enable evremap";
type = types.attrsOf (types.submodule ({name, ...}: { devices = mkOption {
options = { type = types.attrsOf (
device_name = mkOption { types.submodule (
type = types.str; { name, ... }:
description = "The device name"; {
default = name; options = {
device_name = mkOption {
type = types.str;
description = "The device name";
default = name;
};
remap = mkOption {
type = types.listOf (
types.submodule (
{ ... }:
{
options.input = mkOption { type = types.listOf types.str; };
options.output = mkOption { type = types.listOf types.str; };
}
)
);
default = [ ];
};
swapKeys = mkOption {
description = "Lists with two keys to be swapped on the keyboard layout.";
type = types.listOf (
# verify that each key swapping list contains two elements
types.addCheck (types.listOf types.str) (v: builtins.length v == 2)
);
default = [ ];
};
dual_role = mkOption {
type = types.listOf (
types.submodule (
{ ... }:
{
options.input = mkOption { type = types.str; };
options.hold = mkOption { type = types.listOf types.str; };
options.tap = mkOption { type = types.listOf types.str; };
}
)
);
default = [ ];
};
}; };
remap = mkOption { }
type = types.listOf (types.submodule ({...}: { )
options.input = mkOption {type = types.listOf types.str;}; );
options.output = mkOption {type = types.listOf types.str;};
}));
default = [];
};
swapKeys = mkOption {
description = "Lists with two keys to be swapped on the keyboard layout.";
type = types.listOf (
# verify that each key swapping list contains two elements
types.addCheck (types.listOf types.str) (v: builtins.length v == 2)
);
default = [];
};
dual_role = mkOption {
type = types.listOf (types.submodule ({...}: {
options.input = mkOption {type = types.str;};
options.hold = mkOption {type = types.listOf types.str;};
options.tap = mkOption {type = types.listOf types.str;};
}));
default = [];
};
};
}));
};
}; };
config = mkIf cfg.enable ( };
with builtins; let config = mkIf cfg.enable (
devs = map ({ with builtins;
let
devs = map (
{
device_name, device_name,
remap, remap,
swapKeys, swapKeys,
dual_role, dual_role,
}: { }:
{
inherit device_name dual_role; inherit device_name dual_role;
# expand swapKeys to normal remaps # expand swapKeys to normal remaps
remap = concatLists [ remap = concatLists [
remap remap
(lib.lists.flatten (map (keys: [ (lib.lists.flatten (
map (keys: [
{ {
input = [(head keys)]; input = [ (head keys) ];
output = [(lib.lists.last keys)]; output = [ (lib.lists.last keys) ];
} }
{ {
input = [(lib.lists.last keys)]; input = [ (lib.lists.last keys) ];
output = [(head keys)]; output = [ (head keys) ];
} }
]) ]) swapKeys
swapKeys)) ))
]; ];
}) (attrValues cfg.devices); }
in { ) (attrValues cfg.devices);
# generate numbered systemd services for each device to be remapped in
# https://github.com/wez/evremap/issues/17 {
systemd.services = listToAttrs (genList (i: { # generate numbered systemd services for each device to be remapped
# https://github.com/wez/evremap/issues/17
systemd.services = listToAttrs (
genList (i: {
name = "evremap${toString i}"; name = "evremap${toString i}";
value = let value =
cfgFile = toml.generate "remaps-${toString i}.toml" (elemAt devs i); let
in { cfgFile = toml.generate "remaps-${toString i}.toml" (elemAt devs i);
wantedBy = ["multi-user.target"]; in
serviceConfig.ExecStart = "-${evremap}/bin/evremap remap ${cfgFile}"; {
unitConfig = { wantedBy = [ "multi-user.target" ];
Restart = "on-failure"; serviceConfig.ExecStart = "-${evremap}/bin/evremap remap ${cfgFile}";
unitConfig = {
Restart = "on-failure";
};
}; };
}; }) (length devs)
}) (length devs)); );
environment.systemPackages = [evremap]; environment.systemPackages = [ evremap ];
} }
); );
} }

View file

@ -4,18 +4,22 @@
config, config,
lib, lib,
... ...
}: let }:
let
cfg = config.jade.desktop.media; cfg = config.jade.desktop.media;
in in
with lib; { with lib;
imports = [ {
./obs.nix imports = [
./fonts.nix ./obs.nix
]; ./fonts.nix
options.jade.desktop.media.videoEditing = mkEnableOption "Enable Video editing software"; ];
config = { options.jade.desktop.media.videoEditing = mkEnableOption "Enable Video editing software";
home-manager.users.jade = {pkgs, ...}: { config = {
imports = [./typst.nix]; home-manager.users.jade =
{ pkgs, ... }:
{
imports = [ ./typst.nix ];
home.packages = with pkgs; [ home.packages = with pkgs; [
# creative software basics # creative software basics
pastel pastel
@ -52,5 +56,5 @@ in
(mkIf cfg.videoEditing glaxnimate) (mkIf cfg.videoEditing glaxnimate)
]; ];
}; };
}; };
} }

View file

@ -1,4 +1,5 @@
{pkgs, ...}: { { pkgs, ... }:
{
nixpkgs.config.packageOverrides = pkgs: { nixpkgs.config.packageOverrides = pkgs: {
google-fonts = pkgs.google-fonts.overrideAttrs (oldAttrs: { google-fonts = pkgs.google-fonts.overrideAttrs (oldAttrs: {
src = pkgs.fetchFromGitHub { src = pkgs.fetchFromGitHub {
@ -34,15 +35,17 @@
fontDir.enable = true; fontDir.enable = true;
}; };
home-manager.users.jade = {...}: { home-manager.users.jade =
fonts.fontconfig = { { ... }:
enable = true; {
defaultFonts = { fonts.fontconfig = {
emoji = []; enable = true;
monospace = []; defaultFonts = {
sansSerif = ["Atkinson Hyperlegible"]; emoji = [ ];
serif = []; monospace = [ ];
sansSerif = [ "Atkinson Hyperlegible" ];
serif = [ ];
};
}; };
}; };
};
} }

View file

@ -3,34 +3,36 @@
lib, lib,
pkgs, pkgs,
... ...
}: let }:
let
cfg = config.jade.desktop.media.obs; cfg = config.jade.desktop.media.obs;
in in
with lib; { with lib;
options.jade.desktop.media.obs = mkEnableOption "Enable OBS"; {
options.jade.desktop.media.obs = mkEnableOption "Enable OBS";
config = mkIf cfg { config = mkIf cfg {
programs.obs-studio.enableVirtualCamera = true; programs.obs-studio.enableVirtualCamera = true;
# OBS stuffs # OBS stuffs
environment.systemPackages = [ environment.systemPackages = [
(pkgs.wrapOBS { (pkgs.wrapOBS {
plugins = with pkgs.obs-studio-plugins; [ plugins = with pkgs.obs-studio-plugins; [
wlrobs wlrobs
obs-backgroundremoval obs-backgroundremoval
obs-pipewire-audio-capture obs-pipewire-audio-capture
waveform waveform
obs-3d-effect obs-3d-effect
];
})
];
boot = {
extraModulePackages = with config.boot.kernelPackages; [
v4l2loopback
]; ];
extraModprobeConfig = '' })
options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1 ];
'';
}; boot = {
extraModulePackages = with config.boot.kernelPackages; [
v4l2loopback
];
extraModprobeConfig = ''
options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1
'';
}; };
} };
}

View file

@ -2,14 +2,15 @@
pkgs, pkgs,
typst-within, typst-within,
... ...
}: let }:
let
packages = { packages = {
typst-configs = pkgs.fetchFromGitea { typst-configs = pkgs.fetchFromGitea {
domain = "forge.katzen.cafe"; domain = "forge.katzen.cafe";
owner = "schrottkatze"; owner = "schrottkatze";
repo = "typst-configs"; repo = "typst-configs";
rev = "9a5bd5256ace2a56de51b89793f191b4eecce1dc"; #:REV:- rev = "%REV%";-:# rev = "9a5bd5256ace2a56de51b89793f191b4eecce1dc"; # :REV:- rev = "%REV%";-:#
sha256 = "sha256-E+5fJULNxM0XcbimuENqIJC24ZwPRMSHnG97ncBtEGw="; #:SHA:- sha256 = "%SHA%";-:# sha256 = "sha256-E+5fJULNxM0XcbimuENqIJC24ZwPRMSHnG97ncBtEGw="; # :SHA:- sha256 = "%SHA%";-:#
}; };
flow = pkgs.fetchFromGitHub { flow = pkgs.fetchFromGitHub {
owner = "MultisampledNight"; owner = "MultisampledNight";
@ -19,7 +20,8 @@
}; };
}; };
mkTypstPath = name: ".local/share/typst/packages/local/${name}/0.1.0"; mkTypstPath = name: ".local/share/typst/packages/local/${name}/0.1.0";
in { in
{
home.file = { home.file = {
typst-configs = { typst-configs = {
target = mkTypstPath "typst-configs"; target = mkTypstPath "typst-configs";

View file

@ -1,4 +1,5 @@
{...}: { { ... }:
{
imports = [ imports = [
./firewall.nix ./firewall.nix
./hosts.nix ./hosts.nix
@ -10,11 +11,13 @@
systemd.services."NetworkManager-wait-online".enable = false; systemd.services."NetworkManager-wait-online".enable = false;
services.mullvad-vpn.enable = true; services.mullvad-vpn.enable = true;
home-manager.users.jade = {pkgs, ...}: { home-manager.users.jade =
home.packages = with pkgs; [ { pkgs, ... }:
networkmanagerapplet {
mullvad-vpn home.packages = with pkgs; [
macchanger networkmanagerapplet
]; mullvad-vpn
}; macchanger
];
};
} }

View file

@ -1,10 +1,13 @@
{pkgs, ...}: let { pkgs, ... }:
addNuShebang = path: let
addNuShebang =
path:
builtins.concatStringsSep "\n\n" [ builtins.concatStringsSep "\n\n" [
"#!${pkgs.nushell}/bin/nu" "#!${pkgs.nushell}/bin/nu"
(builtins.readFile path) (builtins.readFile path)
]; ];
in { in
{
networking.networkmanager.dispatcherScripts = [ networking.networkmanager.dispatcherScripts = [
{ {
type = "basic"; type = "basic";
@ -12,16 +15,15 @@ in {
} }
]; ];
environment.etc = with builtins; ( environment.etc =
listToAttrs ( with builtins;
(listToAttrs (
map (v: { map (v: {
name = "networkhooks/${v}"; name = "networkhooks/${v}";
value = { value = {
text = addNuShebang ./hooks/${v}; text = addNuShebang ./hooks/${v};
mode = "0755"; mode = "0755";
}; };
}) }) (attrNames (readDir ./hooks))
(attrNames (readDir ./hooks)) ));
)
);
} }

View file

@ -1,13 +1,19 @@
# Thanks @ kloenk (@kloenk@catcatnya.com) for making this for me at MRMCD 2024 :33 # Thanks @ kloenk (@kloenk@catcatnya.com) for making this for me at MRMCD 2024 :33
{pkgs-stable, ...}: let { pkgs-stable, ... }:
let
caDir = "/var/lib/easyroam"; caDir = "/var/lib/easyroam";
uuid = "821ad781-76a3-447f-a2e8-c7f18a1df3bc"; uuid = "821ad781-76a3-447f-a2e8-c7f18a1df3bc";
in { in
{
systemd.services.easyroam = { systemd.services.easyroam = {
requires = ["NetworkManager.service"]; requires = [ "NetworkManager.service" ];
after = ["NetworkManager.service"]; after = [ "NetworkManager.service" ];
requiredBy = ["network-online.target"]; requiredBy = [ "network-online.target" ];
path = with pkgs-stable; [networkmanager openssl gnused]; path = with pkgs-stable; [
networkmanager
openssl
gnused
];
script = '' script = ''
set -x set -x
openssl pkcs12 -password pass: -in ${caDir}/my_easyroam_cert.p12 -legacy -nokeys | openssl x509 > ${caDir}/easyroam_client_cert.pem openssl pkcs12 -password pass: -in ${caDir}/my_easyroam_cert.p12 -legacy -nokeys | openssl x509 > ${caDir}/easyroam_client_cert.pem
@ -44,7 +50,7 @@ in {
addr-gen-mode = "default"; addr-gen-mode = "default";
method = "auto"; method = "auto";
}; };
proxy = {}; proxy = { };
wifi = { wifi = {
mode = "infrastructure"; mode = "infrastructure";
ssid = "eduroam"; ssid = "eduroam";

View file

@ -3,7 +3,8 @@
lib, lib,
pkgs, pkgs,
... ...
}: { }:
{
config = { config = {
networking = { networking = {
firewall = { firewall = {

View file

@ -1,4 +1,5 @@
{...}: { { ... }:
{
networking.hosts = { networking.hosts = {
"127.0.0.1" = [ "127.0.0.1" = [
"www.tiktok.com" "www.tiktok.com"

View file

@ -2,7 +2,8 @@
rs-programs, rs-programs,
niri, niri,
... ...
}: { }:
{
nix = { nix = {
extraOptions = '' extraOptions = ''
experimental-features = nix-command flakes experimental-features = nix-command flakes
@ -24,6 +25,9 @@
"nodejs-16.20.0" "nodejs-16.20.0"
]; ];
}; };
overlays = [rs-programs niri.overlays.niri]; overlays = [
rs-programs
niri.overlays.niri
];
}; };
} }

View file

@ -1,11 +1,14 @@
{...}: { { ... }:
home-manager.users.jade = {pkgs, ...}: { {
programs.btop = { home-manager.users.jade =
enable = true; { pkgs, ... }:
settings = { {
color_theme = "gruvbox_dark"; programs.btop = {
vim_keys = true; enable = true;
settings = {
color_theme = "gruvbox_dark";
vim_keys = true;
};
}; };
}; };
};
} }

View file

@ -1,4 +1,5 @@
{pkgs, ...}: { { pkgs, ... }:
{
imports = [ imports = [
./helix.nix ./helix.nix
./nu.nix ./nu.nix
@ -11,10 +12,12 @@
]; ];
programs.mosh.enable = true; programs.mosh.enable = true;
programs.bat.enable = true; programs.bat.enable = true;
home-manager.users.jade = {...}: { home-manager.users.jade =
programs.carapace.enable = true; { ... }:
programs.direnv.enable = true; {
}; programs.carapace.enable = true;
programs.direnv.enable = true;
};
users.defaultUserShell = pkgs.nushell; users.defaultUserShell = pkgs.nushell;
} }

View file

@ -3,54 +3,57 @@
lib, lib,
pkgs, pkgs,
... ...
}: { }:
home-manager.users.jade = { {
pkgs, home-manager.users.jade =
config, {
... pkgs,
}: { config,
programs.git = { ...
enable = true; }:
userName = "Schrottkatze"; {
userEmail = "git@schrottkatze.de"; programs.git = {
aliases = { enable = true;
a = "add"; userName = "Schrottkatze";
c = "commit"; userEmail = "git@schrottkatze.de";
ca = "commit --all"; aliases = {
p = "push"; a = "add";
pl = "pull"; c = "commit";
s = "status"; ca = "commit --all";
}; p = "push";
signing = { pl = "pull";
format = "ssh"; s = "status";
key = "${pkgs.writeText "blue_nk3.pub" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg7hhAKxIAbokHHcIj9HBgbkgoKGCG2R+gx7HZKL+iz cardno:000F_93C6A612"}"; };
signByDefault = true; signing = {
}; format = "ssh";
}; key = "${pkgs.writeText "blue_nk3.pub" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg7hhAKxIAbokHHcIj9HBgbkgoKGCG2R+gx7HZKL+iz cardno:000F_93C6A612"}";
programs.jujutsu = { signByDefault = true;
enable = true;
settings = {
user = {
name = config.programs.git.userName;
email = config.programs.git.userEmail;
}; };
}; };
}; programs.jujutsu = {
programs.gitui = { enable = true;
enable = true; settings = {
keyConfig = '' user = {
( name = config.programs.git.userName;
move_left: Some(( code: Char('h'), modifiers: "")), email = config.programs.git.userEmail;
move_right: Some(( code: Char('l'), modifiers: "")), };
move_up: Some(( code: Char('k'), modifiers: "")), };
move_down: Some(( code: Char('j'), modifiers: "")), };
programs.gitui = {
enable = true;
keyConfig = ''
(
move_left: Some(( code: Char('h'), modifiers: "")),
move_right: Some(( code: Char('l'), modifiers: "")),
move_up: Some(( code: Char('k'), modifiers: "")),
move_down: Some(( code: Char('j'), modifiers: "")),
stash_open: Some(( code: Char('l'), modifiers: "")), stash_open: Some(( code: Char('l'), modifiers: "")),
open_help: Some(( code: F(1), modifiers: "")), open_help: Some(( code: F(1), modifiers: "")),
status_reset_item: Some(( code: Char('U'), modifiers: "SHIFT")), status_reset_item: Some(( code: Char('U'), modifiers: "SHIFT")),
) )
''; '';
};
}; };
};
} }

View file

@ -1,213 +1,225 @@
{config, ...}: { { config, ... }:
home-manager.users.jade = { {
pkgs, home-manager.users.jade =
pkgs-stable, {
... pkgs,
}: { pkgs-stable,
home = { ...
sessionVariables.EDITOR = "hx"; }:
packages = [ {
pkgs.wl-clipboard-rs home = {
pkgs.nil sessionVariables.EDITOR = "hx";
pkgs.vscode-langservers-extracted packages = [
pkgs.nodePackages.typescript-language-server pkgs.wl-clipboard-rs
pkgs.emmet-language-server pkgs.nil
pkgs.jdt-language-server pkgs.vscode-langservers-extracted
pkgs.tinymist pkgs.nodePackages.typescript-language-server
pkgs.typstyle pkgs.emmet-language-server
]; pkgs.jdt-language-server
}; pkgs.tinymist
programs.helix = { pkgs.typstyle
enable = true;
defaultEditor = true;
settings = {
theme = "gruvbox_dark_hard";
editor = {
line-number = "relative";
bufferline = "multiple";
color-modes = true;
cursorline = true;
auto-save = {
after-delay.enable = true;
after-delay.timeout = 10000;
};
auto-format = true;
end-of-line-diagnostics = "hint";
# slightly optimized based on my layout
jump-label-alphabet = "jfkdhaslgwenuiopbcmyzqrtvx";
clipboard-provider = "wayland";
inline-diagnostics = {
cursor-line = "hint";
};
lsp = {
display-messages = true;
display-inlay-hints = true;
};
popup-border = "popup";
shell = ["nu" "-c"];
statusline.left = [
"mode"
"spinner"
"spacer"
"version-control"
"file-name"
"diagnostics"
"read-only-indicator"
"file-modification-indicator"
"spacer"
];
statusline.right = [
"workspace-diagnostics"
"register"
"position"
"selections"
"file-encoding"
"file-type"
];
idle-timeout = 50;
completion-timeout = 100;
indent-guides = {
render = true;
character = "";
skip-levels = 3;
};
soft-wrap = {
enable = true;
};
whitespace = {
render = {
space = "none";
tab = "all";
newline = "none";
};
characters = {
nbsp = "·";
tab = "";
};
};
};
keys = {
normal = {
space."=" = ":fmt";
space.space = "@[<space>]<space>";
# smart tab++
tab = "move_parent_node_end";
S-tab = "move_parent_node_start";
A-S = "@S[\\s]+<ret>";
"'" = {
D = "@<C-w>sgd";
F = "@<C-w>sgy";
d = "@<C-w>vgd";
f = "@<C-w>vgy";
h = ":toggle-option lsp.display-inlay-hints";
t = ":pipe flip-bool";
};
};
insert = {
up = "no_op";
down = "no_op";
left = "no_op";
right = "no_op";
pageup = "no_op";
pagedown = "no_op";
home = "no_op";
end = "no_op";
# smart tab ++
S-tab = "move_parent_node_start";
};
select = {
# smart tab++
tab = "extend_parent_node_end";
S-tab = "extend_parent_node_start";
};
};
};
languages = {
language-server = {
"nu-builtin-lsp" = {
command = "${config.users.defaultUserShell}/bin/nu";
args = ["--lsp"];
};
"rust-analyzer" = {
config = {
check.command = "check";
completion.snippets.custom = {
"pub fn" = {
prefix = ["pfn" "pubfn"];
postfix = ["pfn"];
body = [
"pub fn $\{receiver\}() {"
"\\t$1"
"}"
];
scope = "type";
};
};
completion.termSearch.enable = true;
diagnostics.enable = true;
inlayHints = {
bindingModeHints.enable = true;
closureCaptureHints.enable = true;
closureReturnTypeHints.enable = true;
discriminantHints.enable = true;
expressionAdjustmentHints = {
hideOutsideUnsafe = true;
};
lifetimeElisionHints.enable = "skip_trivial";
};
interpret.tests = true;
lens = {
references = {
adt.enable = true;
trait.enable = true;
};
};
typing.autoClosingAngleBrackets.enable = true;
};
};
"emmet-language-server" = {
command = "emmet-language-server";
args = ["--stdio"];
};
"psalm" = {
command = "psalm";
args = ["--language-server"];
};
"tinymist" = {
config = {
exportPdf = "onType";
formatterMode = "typstyle";
};
};
};
language = [
{
name = "nu";
language-servers = ["nu-builtin-lsp"];
}
{
name = "php";
language-servers = ["psalm"];
}
{
name = "nix";
formatter = {
command = "${pkgs.alejandra}/bin/alejandra";
args = ["--quiet"];
};
auto-format = true;
}
{
name = "html";
roots = [".git"];
language-servers = ["vscode-html-language-server" "emmet-language-server"];
auto-format = false;
}
]; ];
}; };
programs.helix = {
enable = true;
defaultEditor = true;
settings = {
theme = "gruvbox_dark_hard";
editor = {
line-number = "relative";
bufferline = "multiple";
color-modes = true;
cursorline = true;
auto-save = {
after-delay.enable = true;
after-delay.timeout = 10000;
};
auto-format = true;
end-of-line-diagnostics = "hint";
# slightly optimized based on my layout
jump-label-alphabet = "jfkdhaslgwenuiopbcmyzqrtvx";
clipboard-provider = "wayland";
inline-diagnostics = {
cursor-line = "hint";
};
lsp = {
display-messages = true;
display-inlay-hints = true;
};
popup-border = "popup";
shell = [
"nu"
"-c"
];
statusline.left = [
"mode"
"spinner"
"spacer"
"version-control"
"file-name"
"diagnostics"
"read-only-indicator"
"file-modification-indicator"
"spacer"
];
statusline.right = [
"workspace-diagnostics"
"register"
"position"
"selections"
"file-encoding"
"file-type"
];
idle-timeout = 50;
completion-timeout = 100;
indent-guides = {
render = true;
character = "";
skip-levels = 3;
};
soft-wrap = {
enable = true;
};
whitespace = {
render = {
space = "none";
tab = "all";
newline = "none";
};
characters = {
nbsp = "·";
tab = "";
};
};
};
keys = {
normal = {
space."=" = ":fmt";
space.space = "@[<space>]<space>";
# smart tab++
tab = "move_parent_node_end";
S-tab = "move_parent_node_start";
A-S = "@S[\\s]+<ret>";
"'" = {
D = "@<C-w>sgd";
F = "@<C-w>sgy";
d = "@<C-w>vgd";
f = "@<C-w>vgy";
h = ":toggle-option lsp.display-inlay-hints";
t = ":pipe flip-bool";
};
};
insert = {
up = "no_op";
down = "no_op";
left = "no_op";
right = "no_op";
pageup = "no_op";
pagedown = "no_op";
home = "no_op";
end = "no_op";
# smart tab ++
S-tab = "move_parent_node_start";
};
select = {
# smart tab++
tab = "extend_parent_node_end";
S-tab = "extend_parent_node_start";
};
};
};
languages = {
language-server = {
"nu-builtin-lsp" = {
command = "${config.users.defaultUserShell}/bin/nu";
args = [ "--lsp" ];
};
"rust-analyzer" = {
config = {
check.command = "check";
completion.snippets.custom = {
"pub fn" = {
prefix = [
"pfn"
"pubfn"
];
postfix = [ "pfn" ];
body = [
"pub fn $\{receiver\}() {"
"\\t$1"
"}"
];
scope = "type";
};
};
completion.termSearch.enable = true;
diagnostics.enable = true;
inlayHints = {
bindingModeHints.enable = true;
closureCaptureHints.enable = true;
closureReturnTypeHints.enable = true;
discriminantHints.enable = true;
expressionAdjustmentHints = {
hideOutsideUnsafe = true;
};
lifetimeElisionHints.enable = "skip_trivial";
};
interpret.tests = true;
lens = {
references = {
adt.enable = true;
trait.enable = true;
};
};
typing.autoClosingAngleBrackets.enable = true;
};
};
"emmet-language-server" = {
command = "emmet-language-server";
args = [ "--stdio" ];
};
"psalm" = {
command = "psalm";
args = [ "--language-server" ];
};
"tinymist" = {
config = {
exportPdf = "onType";
formatterMode = "typstyle";
};
};
};
language = [
{
name = "nu";
language-servers = [ "nu-builtin-lsp" ];
}
{
name = "php";
language-servers = [ "psalm" ];
}
{
name = "nix";
formatter = {
command = "${pkgs.nixfmt-rfc-style}/bin/nixfmt";
args = [ "--quiet" ];
};
auto-format = true;
}
{
name = "html";
roots = [ ".git" ];
language-servers = [
"vscode-html-language-server"
"emmet-language-server"
];
auto-format = false;
}
];
};
};
}; };
};
} }

View file

@ -1,24 +1,31 @@
{...}: { { ... }:
home-manager.users.jade = { {
pkgs, home-manager.users.jade =
lib, {
... pkgs,
}: { lib,
home = { ...
packages = [pkgs.mprocs]; }:
}; {
xdg.configFile."mprocs/mprocs.yaml" = { home = {
text = builtins.toJSON { packages = [ pkgs.mprocs ];
proc_list_width = 15; };
keymap_procs = { xdg.configFile."mprocs/mprocs.yaml" = {
"<l>" = {c = "toggle-focus";}; text = builtins.toJSON {
}; proc_list_width = 15;
keymap_term = { keymap_procs = {
"<C-a>" = null; "<l>" = {
# Ctrl-m so it doesnt overlap with zellij or helix c = "toggle-focus";
"<C-M>" = {c = "toggle-focus";}; };
};
keymap_term = {
"<C-a>" = null;
# Ctrl-m so it doesnt overlap with zellij or helix
"<C-M>" = {
c = "toggle-focus";
};
};
}; };
}; };
}; };
};
} }

View file

@ -1,44 +1,46 @@
{config, ...}: { { config, ... }:
home-manager.users.jade = {pkgs, ...}: { {
# Needed for nu_scripts background_task home-manager.users.jade =
services.pueue = { { pkgs, ... }:
enable = true; {
settings = { # Needed for nu_scripts background_task
shared = { services.pueue = {
use_unix_socket = true; enable = true;
settings = {
shared = {
use_unix_socket = true;
};
}; };
}; };
}; home.packages = [
home.packages = [ pkgs.pueue
pkgs.pueue ];
]; home.file."shell-startup" = {
home.file."shell-startup" = { source = ./nu/shell-startup.nu;
source = ./nu/shell-startup.nu; target = ".config/nushell/shell-startup.nu";
target = ".config/nushell/shell-startup.nu"; };
}; programs.nushell = {
programs.nushell = { enable = true;
enable = true; package = config.users.defaultUserShell;
package = config.users.defaultUserShell; configFile.source = ./nu/config.nu;
configFile.source = ./nu/config.nu; envFile.source = ./nu/env.nu;
envFile.source = ./nu/env.nu; extraConfig = ''
extraConfig = '' plugin add ${pkgs.nushellPlugins.query}/bin/nu_plugin_query;
plugin add ${pkgs.nushellPlugins.query}/bin/nu_plugin_query; plugin add ${pkgs.nushellPlugins.polars}/bin/nu_plugin_polars;
plugin add ${pkgs.nushellPlugins.polars}/bin/nu_plugin_polars; plugin add ${pkgs.nushellPlugins.formats}/bin/nu_plugin_formats;
plugin add ${pkgs.nushellPlugins.formats}/bin/nu_plugin_formats;
plugin use query; plugin use query;
plugin use polars; plugin use polars;
plugin use formats; plugin use formats;
source ${./nu/custom_commands.nu}; source ${./nu/custom_commands.nu};
source ${./nu/aliases.nu}; source ${./nu/aliases.nu};
nu ${./nu/shell-startup.nu}; nu ${./nu/shell-startup.nu};
''; '';
extraEnv = '' extraEnv = '''';
''; };
# programs.starship.enableNushellIntegration = true;
programs.carapace.enableNushellIntegration = true;
programs.direnv.enableNushellIntegration = true;
}; };
# programs.starship.enableNushellIntegration = true;
programs.carapace.enableNushellIntegration = true;
programs.direnv.enableNushellIntegration = true;
};
} }

View file

@ -1,41 +1,44 @@
{...}: { { ... }:
home-manager.users.jade = {pkgs, ...}: { {
programs.starship = { home-manager.users.jade =
enable = true; { pkgs, ... }:
enableNushellIntegration = false; {
settings = { programs.starship = {
format = "$all$directory$character"; enable = true;
character = { enableNushellIntegration = false;
success_symbol = "[\\$](green)"; settings = {
error_symbol = "[X](red)"; format = "$all$directory$character";
}; character = {
git_branch = { success_symbol = "[\\$](green)";
format = "\\[[$symbol$branch]($style)\\]"; error_symbol = "[X](red)";
symbol = " "; };
}; git_branch = {
git_status = { format = "\\[[$symbol$branch]($style)\\]";
format = "([\\[$all_status$ahead_behind\\]]($style))"; symbol = " ";
}; };
haskell = { git_status = {
format = "\\[[$symbol($version)]($style)\\]"; format = "([\\[$all_status$ahead_behind\\]]($style))";
symbol = " "; };
}; haskell = {
cmd_duration = { format = "\\[[$symbol($version)]($style)\\]";
format = "\\[[ $duration]($style)\\]"; symbol = " ";
}; };
nix_shell = { cmd_duration = {
format = "\\[[$symbol$state( \\($name\\))]($style)\\]"; format = "\\[[ $duration]($style)\\]";
symbol = " "; };
}; nix_shell = {
rust = { format = "\\[[$symbol$state( \\($name\\))]($style)\\]";
format = "\\[[$symbol($version)]($style)\\]"; symbol = " ";
symbol = " "; };
}; rust = {
package = { format = "\\[[$symbol($version)]($style)\\]";
format = "\\[[$symbol$version]($style)\\]"; symbol = " ";
symbol = " "; };
package = {
format = "\\[[$symbol$version]($style)\\]";
symbol = " ";
};
}; };
}; };
}; };
};
} }

View file

@ -1,6 +1,7 @@
{...}: { { ... }:
{
nixpkgs.config.packageOverrides = pkgs: { nixpkgs.config.packageOverrides = pkgs: {
sudo = pkgs.sudo.override {withInsults = true;}; sudo = pkgs.sudo.override { withInsults = true; };
}; };
security.sudo.extraConfig = "Defaults insults"; security.sudo.extraConfig = "Defaults insults";
} }

View file

@ -1,13 +1,10 @@
{config, ...}: let { config, ... }:
generateOptions = with builtins; ( let
opts: generateOptions =
toString ( with builtins;
attrValues ( (opts: toString (attrValues (mapAttrs (name: value: "--${name} ${toString value}") opts)));
mapAttrs (name: value: "--${name} ${toString value}") opts in
) {
)
);
in {
# TODO: global colorscheme vars for everything # TODO: global colorscheme vars for everything
console.colors = [ console.colors = [
"282828" "282828"