Compare commits
No commits in common. "479a6306423f38e7a62b46eb550ff247cf726e98" and "859ffa55e87121454b5fe901af70ec7374d6bbb6" have entirely different histories.
479a630642
...
859ffa55e8
54 changed files with 18373 additions and 119 deletions
1114
flake.lock
generated
1114
flake.lock
generated
File diff suppressed because it is too large
Load diff
55
flake.nix
55
flake.nix
|
|
@ -21,6 +21,8 @@
|
|||
url = "github:nixos/nixpkgs?ref=master";
|
||||
};
|
||||
nixos-wsl.url = "github:nix-community/NixOS-WSL/main";
|
||||
stylix.url = "github:danth/stylix?ref=release-25.11";
|
||||
nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=latest";
|
||||
|
||||
sops-nix.url = "github:Mic92/sops-nix";
|
||||
|
||||
|
|
@ -41,6 +43,18 @@
|
|||
url = "git+https://git.kylekrein.com/kylekrein/emacs-config";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
beeengine = {
|
||||
url = "git+https://github.com/KyleKrein/BeeEngine?submodules=1"; #"git+https://git.kylekrein.com/BeeEngine/BeeEngine?shallow=1";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
conduwuit = {
|
||||
url = "git+https://forgejo.ellis.link/continuwuation/continuwuity.git";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
niri-flake = {
|
||||
url = "github:sodiboo/niri-flake";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
||||
chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
|
||||
lanzaboote.url = "github:nix-community/lanzaboote";
|
||||
|
|
@ -51,6 +65,10 @@
|
|||
url = "git+https://git.kylekrein.com/kylekrein/snowfall-lib"; #"git+file:///home/kylekrein/Git/snowfall-lib";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
snowfall-flake = {
|
||||
url = "github:snowfallorg/flake";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
deploy-rs = {
|
||||
url = "github:serokell/deploy-rs";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
|
@ -59,6 +77,23 @@
|
|||
url = "github:cachix/git-hooks.nix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
quickshell = {
|
||||
url = "git+https://git.outfoxxed.me/outfoxxed/quickshell";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
dgop = {
|
||||
url = "github:AvengeMedia/dgop";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
desktopShell = {
|
||||
url = "github:KyleKrein/DesktopShell";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.dgop.follows = "dgop";
|
||||
};
|
||||
rose-pine-hyprcursor = {
|
||||
url = "github:ndom91/rose-pine-hyprcursor";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
declarative-jellyfin = {
|
||||
url = "github:Sveske-Juice/declarative-jellyfin";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
|
@ -95,9 +130,10 @@
|
|||
};
|
||||
# Per-channel config
|
||||
channels = {
|
||||
nixpkgs-libre = {
|
||||
nixpkgs-cuda = {
|
||||
config = {
|
||||
allowUnfree = false;
|
||||
allowUnfree = true;
|
||||
cudaSupport = true;
|
||||
};
|
||||
input = inputs.nixpkgs;
|
||||
};
|
||||
|
|
@ -107,10 +143,14 @@
|
|||
|
||||
overlays = with inputs; [
|
||||
emacs-kylekrein.overlays.default
|
||||
niri-flake.overlays.niri
|
||||
snowfall-flake.overlays.default
|
||||
];
|
||||
|
||||
systems.modules.nixos = with inputs; [
|
||||
home-manager.nixosModules.home-manager
|
||||
nix-flatpak.nixosModules.nix-flatpak
|
||||
niri-flake.nixosModules.niri
|
||||
sops-nix.nixosModules.sops
|
||||
nixos-facter-modules.nixosModules.facter
|
||||
home-manager.nixosModules.default
|
||||
|
|
@ -121,6 +161,15 @@
|
|||
lanzaboote.nixosModules.lanzaboote
|
||||
impermanence.nixosModules.impermanence
|
||||
declarative-jellyfin.nixosModules.default
|
||||
desktopShell.nixosModules.greeter
|
||||
];
|
||||
|
||||
systems.hosts.kylekrein-framework12.modules = with inputs; [
|
||||
nixos-hardware.nixosModules.framework-12-13th-gen-intel
|
||||
];
|
||||
|
||||
homes.modules = with inputs; [
|
||||
nix-flatpak.homeManagerModules.nix-flatpak
|
||||
];
|
||||
|
||||
templates = import ./templates {};
|
||||
|
|
@ -134,7 +183,7 @@
|
|||
};
|
||||
kylekrein-homepc.remoteBuild = true;
|
||||
};
|
||||
exclude = ["kylekrein-wsl-wm" ];
|
||||
exclude = ["kylekrein-wsl-wm" "kylekrein-server"];
|
||||
};
|
||||
|
||||
outputs-builder = channels: {
|
||||
|
|
|
|||
29
homes/x86_64-linux/andrej/default.nix
Normal file
29
homes/x86_64-linux/andrej/default.nix
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
# User information gathered by Snowfall Lib is available.
|
||||
let
|
||||
name = config.snowfallorg.user.name;
|
||||
home = config.snowfallorg.user.home.directory;
|
||||
in {
|
||||
imports = lib.snowfall.fs.get-non-default-nix-files ./.;
|
||||
custom = {
|
||||
programs.librewolf.enable = true;
|
||||
};
|
||||
services.flatpak.packages = [
|
||||
"org.vinegarhq.Sober"
|
||||
];
|
||||
home = {
|
||||
packages = with pkgs; [
|
||||
zapzap
|
||||
];
|
||||
|
||||
sessionVariables = {
|
||||
};
|
||||
|
||||
stateVersion = "24.11";
|
||||
};
|
||||
}
|
||||
36
homes/x86_64-linux/andrej/hyprland.nix
Normal file
36
homes/x86_64-linux/andrej/hyprland.nix
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
pkgs,
|
||||
lib,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
home.packages = with pkgs; [
|
||||
inputs.quickshell.packages.${pkgs.system}.quickshell
|
||||
material-symbols
|
||||
inter
|
||||
fira-code
|
||||
cava
|
||||
wl-clipboard
|
||||
cliphist
|
||||
ddcutil
|
||||
matugen
|
||||
dgop
|
||||
glib
|
||||
khal # calendar
|
||||
gammastep # night mode
|
||||
colloid-gtk-theme
|
||||
kitty
|
||||
playerctl
|
||||
brightnessctl
|
||||
libnotify
|
||||
emacs-pgtk
|
||||
hyprshot
|
||||
jq
|
||||
kdePackages.gwenview
|
||||
kdePackages.ark
|
||||
inputs.rose-pine-hyprcursor.packages.${pkgs.system}.default
|
||||
];
|
||||
xdg.configFile."quickshell".source = "${
|
||||
inputs.desktopShell.packages.${pkgs.system}.dankMaterialShell
|
||||
}/etc/xdg/quickshell";
|
||||
}
|
||||
|
|
@ -17,16 +17,35 @@ in
|
|||
enable = true;
|
||||
firstNixOSInstall = 1729112485;
|
||||
};
|
||||
#nheko.enable = osConfig.custom.presets.wayland.enable;
|
||||
#xournalpp.enable = osConfig.custom.presets.wayland.enable;
|
||||
librewolf.enable = osConfig.custom.presets.wayland.enable;
|
||||
prismlauncher.enable = osConfig.custom.presets.gaming.enable;
|
||||
minecraft-bedrock.enable = osConfig.custom.presets.gaming.enable;
|
||||
bottles.enable = osConfig.custom.presets.wayland.enable;
|
||||
nextcloud-client.enable = osConfig.custom.presets.wayland.enable;
|
||||
thunderbird.enable = osConfig.custom.presets.wayland.enable;
|
||||
};
|
||||
};
|
||||
home = {
|
||||
packages = with pkgs;
|
||||
[
|
||||
neovim
|
||||
]
|
||||
++ lib.optionals osConfig.custom.presets.wayland.enable [
|
||||
gdb
|
||||
element-desktop
|
||||
vesktop
|
||||
obs-studio
|
||||
localsend
|
||||
kdePackages.kdenlive
|
||||
];
|
||||
|
||||
sessionVariables = {
|
||||
EDITOR ="nvim";
|
||||
EDITOR =
|
||||
if osConfig.custom.presets.wayland.enable
|
||||
then "emacsclient -c"
|
||||
else "nvim";
|
||||
NH_OS_FLAKE = "${home}/nixos-config";
|
||||
NH_HOME_FLAKE = "${home}/nixos-config";
|
||||
NH_DARWIN_FLAKE = "${home}/nixos-config";
|
||||
|
|
|
|||
31
homes/x86_64-linux/kylekrein/emacs.nix
Normal file
31
homes/x86_64-linux/kylekrein/emacs.nix
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
pkgs,
|
||||
system,
|
||||
inputs,
|
||||
osConfig,
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
emacs = pkgs.kylekrein.nixmacs.override {withLsps = true;};
|
||||
in {
|
||||
programs.emacs = {
|
||||
enable = osConfig.custom.presets.wayland.enable;
|
||||
package = emacs;
|
||||
};
|
||||
systemd.user.services.emacs = lib.mkIf config.programs.emacs.enable {
|
||||
Unit = {
|
||||
Description = "Launches (and relaunches) emacs";
|
||||
};
|
||||
Install = {
|
||||
WantedBy = ["graphical-session.target"];
|
||||
};
|
||||
Service = {
|
||||
ExecStart = "${pkgs.writeShellScript "run-emacs" ''
|
||||
${emacs}/bin/emacs --fg-daemon
|
||||
''}";
|
||||
Restart = "always";
|
||||
RestartSec = 5;
|
||||
};
|
||||
};
|
||||
}
|
||||
31
homes/x86_64-linux/kylekrein/kitty.nix
Normal file
31
homes/x86_64-linux/kylekrein/kitty.nix
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
osConfig,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
home.packages = with pkgs; lib.optionals (config.programs.kitty.enable) [kitty-themes];
|
||||
programs.fzf = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
};
|
||||
|
||||
programs.eza = {
|
||||
enable = true;
|
||||
icons = "always";
|
||||
};
|
||||
programs.kitty = {
|
||||
enable = osConfig.custom.presets.workstation.enable;
|
||||
font = {
|
||||
name = "JetBrainsMono Nerd Font";
|
||||
size = 20;
|
||||
};
|
||||
settings = {
|
||||
confirm_os_window_close = 0;
|
||||
};
|
||||
#shellIntegration.enableFishIntegration = true;
|
||||
themeFile = "Catppuccin-Macchiato";
|
||||
#Also available: Catppuccin-Frappe Catppuccin-Latte Catppuccin-Macchiato Catppuccin-Mocha
|
||||
# See all available kitty themes at: https://github.com/kovidgoyal/kitty-themes/blob/46d9dfe230f315a6a0c62f4687f6b3da20fd05e4/themes.json
|
||||
};
|
||||
}
|
||||
23
homes/x86_64-linux/kylekrein/music.nix
Normal file
23
homes/x86_64-linux/kylekrein/music.nix
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
pkgs,
|
||||
lib,
|
||||
osConfig,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
impermanence = config.custom.impermanence;
|
||||
in {
|
||||
config = lib.mkIf osConfig.custom.presets.wayland.enable {
|
||||
home.packages = with pkgs; [
|
||||
lrcget
|
||||
picard
|
||||
beets
|
||||
];
|
||||
home.persistence = lib.mkIf impermanence.enable {
|
||||
"${impermanence.persistentStorage}".directories = [
|
||||
".config/MusicBrainz"
|
||||
".config/beets"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
81
homes/x86_64-linux/kylekrein/niri/desktopShell.nix
Normal file
81
homes/x86_64-linux/kylekrein/niri/desktopShell.nix
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
{
|
||||
osConfig,
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
inputs,
|
||||
namespace,
|
||||
...
|
||||
}:
|
||||
with lib.custom; let
|
||||
username = config.snowfallorg.user.name;
|
||||
home = config.snowfallorg.user.home.directory;
|
||||
impermanence = config.${namespace}.impermanence;
|
||||
in
|
||||
lib.mkIf osConfig.custom.windowManagers.niri.enable {
|
||||
home.packages = with pkgs; [
|
||||
inputs.quickshell.packages.${pkgs.system}.quickshell
|
||||
material-symbols
|
||||
inter
|
||||
fira-code
|
||||
cava
|
||||
wl-clipboard
|
||||
cliphist
|
||||
ddcutil
|
||||
matugen
|
||||
dgop
|
||||
glib
|
||||
khal # calendar
|
||||
gammastep # night mode
|
||||
grim
|
||||
slurp
|
||||
satty
|
||||
];
|
||||
programs.kitty = {
|
||||
themeFile = lib.mkForce null;
|
||||
extraConfig = ''
|
||||
include ${home}/.config/kitty/dank-theme.conf
|
||||
'';
|
||||
};
|
||||
xdg.configFile."quickshell".source = "${
|
||||
inputs.desktopShell.packages.${pkgs.system}.dankMaterialShell
|
||||
}/etc/xdg/quickshell";
|
||||
home.file.".config/DankMaterialShell/settings.json".source = ./settings.json;
|
||||
home.persistence = lib.mkIf impermanence.enable {
|
||||
"${impermanence.persistentStorage}" = {
|
||||
files = [
|
||||
".local/state/DankMaterialShell/session.json"
|
||||
".local/share/color-schemes/DankMatugen.colors"
|
||||
];
|
||||
directories = [
|
||||
".cache/quickshell/dankshell"
|
||||
#".config/qt5ct"
|
||||
#".config/qt6ct"
|
||||
#".config/gtk-3.0"
|
||||
#".config/gtk-4.0"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
systemd.user.services.desktop-shell = {
|
||||
Unit = {
|
||||
Description = "Launches (and relaunches) Desktop Shell";
|
||||
};
|
||||
Install = {
|
||||
WantedBy = ["graphical-session.target"];
|
||||
};
|
||||
Service = {
|
||||
ExecStart = ''${lib.getExe pkgs.bash} -c "qs -c dms"'';
|
||||
Restart = "always";
|
||||
RestartSec = 5;
|
||||
};
|
||||
};
|
||||
|
||||
programs.niri = {
|
||||
settings = {
|
||||
spawn-at-startup = [
|
||||
{command = ["wl-paste" "--watch" "cliphist" "store"];}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
47
homes/x86_64-linux/kylekrein/niri/drawerstyle.css
Normal file
47
homes/x86_64-linux/kylekrein/niri/drawerstyle.css
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
* {
|
||||
border: none;
|
||||
font-family: Font Awesome, Roboto, Arial, sans-serif;
|
||||
font-size: 16px;
|
||||
color: #eeeeee;
|
||||
border-radius: 10px;
|
||||
}
|
||||
window {
|
||||
background-color: rgba(50, 63, 99, 0.718);
|
||||
color: #eeeeee;
|
||||
}
|
||||
|
||||
/* search entry */
|
||||
entry {
|
||||
background-color: rgba(0, 0, 0, 0.2)
|
||||
}
|
||||
|
||||
button, image {
|
||||
background: none;
|
||||
border: none
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: rgba(255, 255, 255, 0.1)
|
||||
}
|
||||
|
||||
/* in case you wanted to give category buttons a different look */
|
||||
#category-button {
|
||||
margin: 0 10px 0 10px
|
||||
}
|
||||
|
||||
#pinned-box {
|
||||
padding-bottom: 5px;
|
||||
border-bottom: 1px dotted gray
|
||||
}
|
||||
|
||||
#files-box {
|
||||
padding: 5px;
|
||||
border: 1px dotted gray;
|
||||
border-radius: 15px
|
||||
}
|
||||
|
||||
/* math operation result label */
|
||||
#math-label {
|
||||
font-weight: bold;
|
||||
font-size: 16px
|
||||
}
|
||||
529
homes/x86_64-linux/kylekrein/niri/niri.nix
Normal file
529
homes/x86_64-linux/kylekrein/niri/niri.nix
Normal file
|
|
@ -0,0 +1,529 @@
|
|||
#https://github.com/sodiboo/niri-flake/blob/main/default-config.kdl.nix
|
||||
#https://github.com/sodiboo/niri-flake/blob/main/docs.md
|
||||
#https://github.com/sodiboo/system/blob/main/niri.mod.nix
|
||||
{
|
||||
osConfig,
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
with lib.custom; let
|
||||
username = config.snowfallorg.user.name;
|
||||
home = config.snowfallorg.user.home.directory;
|
||||
in
|
||||
lib.mkIf osConfig.custom.windowManagers.niri.enable {
|
||||
custom = {
|
||||
programs.nautilus = enabled;
|
||||
};
|
||||
home.packages = with pkgs; [
|
||||
playerctl
|
||||
papers
|
||||
brightnessctl
|
||||
libnotify
|
||||
custom.wvkbd-kylekrein
|
||||
custom.lisgd-kylekrein
|
||||
];
|
||||
programs.niri = {
|
||||
settings = {
|
||||
spawn-at-startup = [
|
||||
{
|
||||
command = [
|
||||
"${lib.getExe pkgs.custom.wvkbd-kylekrein}"
|
||||
"--hidden"
|
||||
];
|
||||
}
|
||||
{
|
||||
command = [
|
||||
"dbus-update-activation-environment"
|
||||
"--systemd"
|
||||
"--all"
|
||||
];
|
||||
}
|
||||
{
|
||||
command = [
|
||||
"${pkgs.solaar}/bin/solaar"
|
||||
"-w"
|
||||
"hide"
|
||||
];
|
||||
}
|
||||
];
|
||||
layout = {
|
||||
preset-column-widths = [
|
||||
{proportion = 1.0 / 2.0;}
|
||||
{proportion = 1.0;}
|
||||
{proportion = 2.0 / 3.0;}
|
||||
{proportion = 1.0 / 3.0;}
|
||||
];
|
||||
default-column-width = {proportion = 1.0;};
|
||||
};
|
||||
binds = with config.lib.niri.actions; let
|
||||
sh = spawn "sh" "-c";
|
||||
emacs = action: sh "emacsclient -c --eval \"${action}\"";
|
||||
screenshot-annotate = sh ''${lib.getExe pkgs.grim} -g "$(${lib.getExe pkgs.slurp} -w 0)" -t ppm - | ${lib.getExe pkgs.satty} --early-exit --copy-command 'wl-copy' --filename='-' -o '~/Pictures/Screenshots/Screenshot-%Y-%m-%d_%H:%M:%S.png' --initial-tool brush'';
|
||||
in {
|
||||
"Mod+E".action = sh "emacsclient -c";
|
||||
"Mod+Shift+C".action = sh "nautilus";
|
||||
"Mod+C".action = emacs ''(dirvish \"${home}\")'';
|
||||
"Mod+T".action = spawn "kitty";
|
||||
"Mod+B".action = spawn "librewolf";
|
||||
"Mod+H".action = show-hotkey-overlay;
|
||||
"Mod+F".action = fullscreen-window;
|
||||
"Mod+R".action = switch-preset-column-width;
|
||||
"Mod+Q".action = close-window;
|
||||
"Mod+P".action = sh ''emacsclient -cF "((visibility . nil))" -e "(emacs-run-password-copy-field)"'';
|
||||
"Mod+Shift+S".action = screenshot-annotate;
|
||||
"Mod+1".action = focus-workspace 1;
|
||||
"Mod+2".action = focus-workspace 2;
|
||||
"Mod+3".action = focus-workspace 3;
|
||||
"Mod+4".action = focus-workspace 4;
|
||||
"Mod+5".action = focus-workspace 5;
|
||||
"Mod+6".action = focus-workspace 6;
|
||||
"Mod+7".action = focus-workspace 7;
|
||||
"Mod+8".action = focus-workspace 8;
|
||||
"Mod+9".action = focus-workspace 9;
|
||||
"Mod+0".action = focus-workspace 10;
|
||||
|
||||
"Mod+Shift+1".action.move-column-to-workspace = 1;
|
||||
"Mod+Shift+2".action.move-column-to-workspace = 2;
|
||||
"Mod+Shift+3".action.move-column-to-workspace = 3;
|
||||
"Mod+Shift+4".action.move-column-to-workspace = 4;
|
||||
"Mod+Shift+5".action.move-column-to-workspace = 5;
|
||||
"Mod+Shift+6".action.move-column-to-workspace = 6;
|
||||
"Mod+Shift+7".action.move-column-to-workspace = 7;
|
||||
"Mod+Shift+8".action.move-column-to-workspace = 8;
|
||||
"Mod+Shift+9".action.move-column-to-workspace = 9;
|
||||
"Mod+Shift+0".action.move-column-to-workspace = 10;
|
||||
|
||||
"Mod+Left".action = focus-column-left;
|
||||
"Mod+Right".action = focus-column-right;
|
||||
"Mod+Up".action = focus-workspace-up;
|
||||
"Mod+Down".action = focus-workspace-down;
|
||||
"Mod+Shift+Left".action = move-column-left;
|
||||
"Mod+Shift+Right".action = move-column-right;
|
||||
"Mod+Shift+Up".action = move-column-to-workspace-up;
|
||||
"Mod+Shift+Down".action = move-column-to-workspace-down;
|
||||
"Mod+Ctrl+Left".action = focus-monitor-left;
|
||||
"Mod+Ctrl+Right".action = focus-monitor-right;
|
||||
"Mod+Shift+Ctrl+Left".action = move-column-to-monitor-left;
|
||||
"Mod+Shift+Ctrl+Right".action = move-column-to-monitor-right;
|
||||
|
||||
"Ctrl+Alt+Delete" = {
|
||||
hotkey-overlay.title = "Restart Desktop Shell";
|
||||
action.spawn = [
|
||||
"systemctl"
|
||||
"--user"
|
||||
"restart"
|
||||
"desktop-shell.service"
|
||||
];
|
||||
};
|
||||
|
||||
"Mod+Space" = {
|
||||
hotkey-overlay.title = "App Launcher";
|
||||
action.spawn = [
|
||||
"qs"
|
||||
"-c"
|
||||
"dms"
|
||||
"ipc"
|
||||
"call"
|
||||
"spotlight"
|
||||
"toggle"
|
||||
];
|
||||
};
|
||||
"Mod+V" = {
|
||||
hotkey-overlay.title = "Clipboard Manager";
|
||||
action.spawn = [
|
||||
"qs"
|
||||
"-c"
|
||||
"dms"
|
||||
"ipc"
|
||||
"call"
|
||||
"clipboard"
|
||||
"toggle"
|
||||
];
|
||||
};
|
||||
"Mod+M" = {
|
||||
hotkey-overlay.title = "System Monitor";
|
||||
action.spawn = [
|
||||
"qs"
|
||||
"-c"
|
||||
"dms"
|
||||
"ipc"
|
||||
"call"
|
||||
"processlist"
|
||||
"toggle"
|
||||
];
|
||||
};
|
||||
"Mod+Comma" = {
|
||||
hotkey-overlay.title = "Open Settings";
|
||||
action.spawn = [
|
||||
"qs"
|
||||
"-c"
|
||||
"dms"
|
||||
"ipc"
|
||||
"call"
|
||||
"settings"
|
||||
"toggle"
|
||||
];
|
||||
};
|
||||
"Super+L" = {
|
||||
hotkey-overlay.title = "Lock";
|
||||
action.spawn = [
|
||||
"qs"
|
||||
"-c"
|
||||
"dms"
|
||||
"ipc"
|
||||
"call"
|
||||
"lock"
|
||||
"lock"
|
||||
];
|
||||
};
|
||||
"XF86AudioRaiseVolume" = {
|
||||
allow-when-locked = true;
|
||||
hotkey-overlay.hidden = true;
|
||||
action.spawn = [
|
||||
"qs"
|
||||
"-c"
|
||||
"dms"
|
||||
"ipc"
|
||||
"call"
|
||||
"audio"
|
||||
"increment"
|
||||
"3"
|
||||
];
|
||||
};
|
||||
"XF86AudioLowerVolume" = {
|
||||
allow-when-locked = true;
|
||||
hotkey-overlay.hidden = true;
|
||||
action.spawn = [
|
||||
"qs"
|
||||
"-c"
|
||||
"dms"
|
||||
"ipc"
|
||||
"call"
|
||||
"audio"
|
||||
"decrement"
|
||||
"3"
|
||||
];
|
||||
};
|
||||
"XF86AudioMute" = {
|
||||
allow-when-locked = true;
|
||||
hotkey-overlay.hidden = true;
|
||||
action.spawn = [
|
||||
"qs"
|
||||
"-c"
|
||||
"dms"
|
||||
"ipc"
|
||||
"call"
|
||||
"audio"
|
||||
"mute"
|
||||
];
|
||||
};
|
||||
"XF86AudioMicMute" = {
|
||||
allow-when-locked = true;
|
||||
hotkey-overlay.hidden = true;
|
||||
action.spawn = [
|
||||
"qs"
|
||||
"-c"
|
||||
"dms"
|
||||
"ipc"
|
||||
"call"
|
||||
"audio"
|
||||
"micmute"
|
||||
];
|
||||
};
|
||||
|
||||
"XF86MonBrightnessUp" = {
|
||||
allow-when-locked = true;
|
||||
hotkey-overlay.hidden = true;
|
||||
action.spawn = [
|
||||
"qs"
|
||||
"-c"
|
||||
"dms"
|
||||
"ipc"
|
||||
"call"
|
||||
"brightness"
|
||||
"increment"
|
||||
"5"
|
||||
""
|
||||
];
|
||||
};
|
||||
"XF86MonBrightnessDown" = {
|
||||
allow-when-locked = true;
|
||||
hotkey-overlay.hidden = true;
|
||||
action.spawn = [
|
||||
"qs"
|
||||
"-c"
|
||||
"dms"
|
||||
"ipc"
|
||||
"call"
|
||||
"brightness"
|
||||
"decrement"
|
||||
"5"
|
||||
""
|
||||
];
|
||||
};
|
||||
|
||||
"XF86AudioNext" = {
|
||||
allow-when-locked = true;
|
||||
hotkey-overlay.hidden = true;
|
||||
action = sh "playerctl next";
|
||||
};
|
||||
"XF86AudioPause" = {
|
||||
allow-when-locked = true;
|
||||
hotkey-overlay.hidden = true;
|
||||
action = sh "playerctl play-pause";
|
||||
};
|
||||
"XF86AudioPlay" = {
|
||||
allow-when-locked = true;
|
||||
hotkey-overlay.hidden = true;
|
||||
action = sh "playerctl play-pause";
|
||||
};
|
||||
"XF86AudioPrev" = {
|
||||
allow-when-locked = true;
|
||||
hotkey-overlay.hidden = true;
|
||||
action = sh "playerctl previous";
|
||||
};
|
||||
#"Mod+Tab".action = focus-window-down-or-column-right;
|
||||
#"Mod+Shift+Tab".action = focus-window-up-or-column-left;
|
||||
"Mod+Tab".action = toggle-overview;
|
||||
};
|
||||
input = {
|
||||
power-key-handling.enable = false;
|
||||
focus-follows-mouse = {
|
||||
#enable = true;
|
||||
};
|
||||
warp-mouse-to-focus.enable = false;
|
||||
keyboard = {
|
||||
xkb.layout = "eu, ru";
|
||||
xkb.options = "grp:lctrl_toggle, ctrl:nocaps";
|
||||
track-layout = "window";
|
||||
numlock = true;
|
||||
};
|
||||
touchpad = {
|
||||
tap = true;
|
||||
#accel-profile = "adaptive";
|
||||
click-method = "clickfinger";
|
||||
};
|
||||
};
|
||||
cursor = {
|
||||
hide-after-inactive-ms = 10000;
|
||||
};
|
||||
gestures.hot-corners.enable = true;
|
||||
prefer-no-csd = true;
|
||||
environment = {
|
||||
XDG_SESSION_TYPE = "wayland";
|
||||
__GL_GSYNC_ALLOWED = "1";
|
||||
QT_QPA_PLATFORM = "wayland";
|
||||
DISPLAY = ":0";
|
||||
};
|
||||
layer-rules = [
|
||||
{
|
||||
#this is for later to place keyboard on top of hyprlock
|
||||
matches = [{namespace = "wvkbd";}];
|
||||
}
|
||||
];
|
||||
window-rules = [
|
||||
{
|
||||
#active
|
||||
matches = [
|
||||
{
|
||||
is-active = true;
|
||||
}
|
||||
];
|
||||
opacity = 1.0;
|
||||
}
|
||||
{
|
||||
#inactive
|
||||
matches = [
|
||||
{
|
||||
is-active = false;
|
||||
}
|
||||
];
|
||||
opacity = 1.0;
|
||||
}
|
||||
{
|
||||
#opaque
|
||||
matches = [
|
||||
{
|
||||
app-id = "emacs";
|
||||
}
|
||||
{
|
||||
app-id = "blender";
|
||||
}
|
||||
];
|
||||
opacity = 1.0;
|
||||
}
|
||||
{
|
||||
#Popups
|
||||
matches = [
|
||||
{
|
||||
title = "emacs-run-launcher";
|
||||
}
|
||||
{
|
||||
title = "Paradox Crash Reporter";
|
||||
}
|
||||
];
|
||||
open-floating = true;
|
||||
open-focused = true;
|
||||
}
|
||||
{
|
||||
#Screenshots
|
||||
matches = [
|
||||
{
|
||||
title = "satty";
|
||||
}
|
||||
{
|
||||
app-id = "com.gabm.satty";
|
||||
}
|
||||
];
|
||||
open-floating = true;
|
||||
open-focused = true;
|
||||
min-width = 700;
|
||||
min-height = 350;
|
||||
}
|
||||
{
|
||||
#PiP
|
||||
matches = [
|
||||
{
|
||||
title = "Picture-in-Picture";
|
||||
}
|
||||
];
|
||||
open-floating = true;
|
||||
open-focused = false;
|
||||
opacity = 1.0;
|
||||
default-floating-position = {
|
||||
x = 0;
|
||||
y = 0;
|
||||
relative-to = "top-right";
|
||||
};
|
||||
}
|
||||
];
|
||||
xwayland-satellite = {
|
||||
enable = true;
|
||||
path = "${lib.getExe pkgs.xwayland-satellite-unstable}";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
xdg.portal.extraPortals = with pkgs; [
|
||||
xdg-desktop-portal-gtk
|
||||
];
|
||||
|
||||
services.hypridle = let
|
||||
niri = lib.getExe config.programs.niri.package;
|
||||
loginctl = "${pkgs.systemd}/bin/loginctl";
|
||||
qs = "${inputs.quickshell.packages.${pkgs.system}.quickshell}/bin/qs";
|
||||
locking-script = "${qs} -c dms ipc call lock lock";
|
||||
systemctl = "${pkgs.systemd}/bin/systemctl";
|
||||
suspendScript = cmd:
|
||||
pkgs.writeShellScript "suspend-script" ''
|
||||
# check if any player has status "Playing"
|
||||
${lib.getExe pkgs.playerctl} -a status | ${lib.getExe pkgs.ripgrep} Playing -q
|
||||
# only suspend if nothing is playing
|
||||
if [ $? == 1 ]; then
|
||||
${cmd}
|
||||
fi
|
||||
'';
|
||||
in {
|
||||
enable = true;
|
||||
settings.general = {
|
||||
before_sleep_cmd = "${loginctl} lock-session";
|
||||
#after_sleep_cmd = "#${niri} msg action power-on-monitors";
|
||||
lock_cmd = "${locking-script}";
|
||||
ignore_dbus_inhibit = false; # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam)
|
||||
ignore_systemd_inhibit = false; # whether to ignore systemd-inhibit --what=idle inhibitors
|
||||
};
|
||||
settings.listener = let
|
||||
secondary = "${systemctl} suspend";
|
||||
in [
|
||||
#{
|
||||
# timeout = 30;
|
||||
# command = "pidof hyprlock && ${secondary}";
|
||||
#}
|
||||
{
|
||||
timeout = 870;
|
||||
on-timeout = "${suspendScript ''${pkgs.libnotify}/bin/notify-send "You are idle. Going to sleep in 30 seconds"''}";
|
||||
}
|
||||
{
|
||||
timeout = 900;
|
||||
on-timeout = "${suspendScript "${systemctl} suspend"}";
|
||||
}
|
||||
];
|
||||
};
|
||||
systemd.user.services.lisgd-niri = lib.mkIf (config.custom.hardware.tablet.enable) {
|
||||
Unit = {
|
||||
Description = "Makes sure that you have touchscreen gestures.";
|
||||
};
|
||||
Install = {
|
||||
WantedBy = ["graphical-session.target"];
|
||||
};
|
||||
Service = {
|
||||
ExecStart = "${pkgs.writeShellScript "run-lisgd" ''
|
||||
${pkgs.custom.lisgd-kylekrein}/bin/lisgd
|
||||
''}";
|
||||
Restart = "always";
|
||||
RestartSec = 5;
|
||||
};
|
||||
};
|
||||
systemd.user.services.autorotate-niri = lib.mkIf (config.custom.hardware.tablet.enable) {
|
||||
Unit = {
|
||||
Description = "Adds auto rotation to Niri.";
|
||||
};
|
||||
Install = {
|
||||
WantedBy = ["graphical-session.target"];
|
||||
};
|
||||
Service = {
|
||||
ExecStart = "${pkgs.writeShellScript "autorotate" ''
|
||||
transform="normal"
|
||||
|
||||
monitor-sensor | while read -r line; do
|
||||
case "$line" in
|
||||
*normal*)
|
||||
new_transform="normal"
|
||||
;;
|
||||
*right-up*)
|
||||
new_transform="270"
|
||||
;;
|
||||
*bottom-up*)
|
||||
new_transform="180"
|
||||
;;
|
||||
*left-up*)
|
||||
new_transform="90"
|
||||
;;
|
||||
*)
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ "$new_transform" != "$transform" ]]; then
|
||||
transform="$new_transform"
|
||||
echo "Transform: $transform"
|
||||
niri msg output eDP-1 transform "$transform"
|
||||
systemctl --user restart lisgd-niri.service
|
||||
fi
|
||||
done
|
||||
''}";
|
||||
Restart = "always";
|
||||
RestartSec = 5;
|
||||
};
|
||||
};
|
||||
custom.hardware.tablet = {
|
||||
onTabletModeEnable = [
|
||||
{
|
||||
name = "autorotate";
|
||||
command = "systemctl --user start autorotate-niri.service";
|
||||
}
|
||||
];
|
||||
onTabletModeDisable = [
|
||||
{
|
||||
name = "autorotate";
|
||||
command = ''
|
||||
systemctl --user stop autorotate-niri.service
|
||||
niri msg output eDP-1 transform normal
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
BIN
homes/x86_64-linux/kylekrein/niri/nixos-warbler.png
Executable file
BIN
homes/x86_64-linux/kylekrein/niri/nixos-warbler.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 164 KiB |
223
homes/x86_64-linux/kylekrein/niri/settings.json
Normal file
223
homes/x86_64-linux/kylekrein/niri/settings.json
Normal file
|
|
@ -0,0 +1,223 @@
|
|||
{
|
||||
"currentThemeName": "dynamic",
|
||||
"customThemeFile": "",
|
||||
"matugenScheme": "scheme-tonal-spot",
|
||||
"dankBarTransparency": 0.75,
|
||||
"dankBarWidgetTransparency": 0.85,
|
||||
"popupTransparency": 0.92,
|
||||
"dockTransparency": 1,
|
||||
"use24HourClock": true,
|
||||
"useFahrenheit": false,
|
||||
"nightModeEnabled": false,
|
||||
"weatherLocation": "51.7177044, 8.7526530",
|
||||
"weatherCoordinates": "51.7177044,8.7526530",
|
||||
"useAutoLocation": false,
|
||||
"weatherEnabled": true,
|
||||
"showLauncherButton": true,
|
||||
"showWorkspaceSwitcher": true,
|
||||
"showFocusedWindow": true,
|
||||
"showWeather": true,
|
||||
"showMusic": true,
|
||||
"showClipboard": true,
|
||||
"showCpuUsage": true,
|
||||
"showMemUsage": true,
|
||||
"showCpuTemp": true,
|
||||
"showGpuTemp": true,
|
||||
"selectedGpuIndex": 0,
|
||||
"enabledGpuPciIds": [],
|
||||
"showSystemTray": true,
|
||||
"showClock": true,
|
||||
"showNotificationButton": true,
|
||||
"showBattery": true,
|
||||
"showControlCenterButton": true,
|
||||
"controlCenterShowNetworkIcon": true,
|
||||
"controlCenterShowBluetoothIcon": true,
|
||||
"controlCenterShowAudioIcon": true,
|
||||
"controlCenterWidgets": [
|
||||
{
|
||||
"id": "volumeSlider",
|
||||
"enabled": true,
|
||||
"width": 50
|
||||
},
|
||||
{
|
||||
"id": "brightnessSlider",
|
||||
"enabled": true,
|
||||
"width": 50
|
||||
},
|
||||
{
|
||||
"id": "wifi",
|
||||
"enabled": true,
|
||||
"width": 50
|
||||
},
|
||||
{
|
||||
"id": "bluetooth",
|
||||
"enabled": true,
|
||||
"width": 50
|
||||
},
|
||||
{
|
||||
"id": "audioOutput",
|
||||
"enabled": true,
|
||||
"width": 50
|
||||
},
|
||||
{
|
||||
"id": "audioInput",
|
||||
"enabled": true,
|
||||
"width": 50
|
||||
},
|
||||
{
|
||||
"id": "nightMode",
|
||||
"enabled": true,
|
||||
"width": 25
|
||||
},
|
||||
{
|
||||
"id": "idleInhibitor",
|
||||
"enabled": true,
|
||||
"width": 25
|
||||
},
|
||||
{
|
||||
"id": "doNotDisturb",
|
||||
"enabled": true,
|
||||
"width": 25
|
||||
},
|
||||
{
|
||||
"id": "battery",
|
||||
"enabled": true,
|
||||
"width": 25
|
||||
},
|
||||
{
|
||||
"id": "diskUsage",
|
||||
"enabled": true,
|
||||
"width": 100,
|
||||
"instanceId": "mfz4b7s6aer4zpglo9g",
|
||||
"mountPath": "/"
|
||||
}
|
||||
],
|
||||
"showWorkspaceIndex": false,
|
||||
"showWorkspacePadding": false,
|
||||
"showWorkspaceApps": true,
|
||||
"maxWorkspaceIcons": 30,
|
||||
"workspacesPerMonitor": true,
|
||||
"workspaceNameIcons": {},
|
||||
"waveProgressEnabled": true,
|
||||
"clockCompactMode": false,
|
||||
"focusedWindowCompactMode": false,
|
||||
"runningAppsCompactMode": true,
|
||||
"runningAppsCurrentWorkspace": false,
|
||||
"clockDateFormat": "ddd d",
|
||||
"lockDateFormat": "dddd, MMMM d",
|
||||
"mediaSize": 0,
|
||||
"dankBarLeftWidgets": [
|
||||
"launcherButton",
|
||||
"advancedWorkspaceSwitcher",
|
||||
{
|
||||
"id": "workspaceSwitcher",
|
||||
"enabled": true
|
||||
}
|
||||
],
|
||||
"dankBarCenterWidgets": [
|
||||
{
|
||||
"id": "music",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"id": "clock",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"id": "weather",
|
||||
"enabled": true
|
||||
}
|
||||
],
|
||||
"dankBarRightWidgets": [
|
||||
{
|
||||
"id": "systemTray",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"id": "clipboard",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"id": "notificationButton",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"id": "privacyIndicator",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"id": "keyboard_layout_name",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"id": "battery",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"id": "controlCenterButton",
|
||||
"enabled": true
|
||||
}
|
||||
],
|
||||
"appLauncherViewMode": "grid",
|
||||
"spotlightModalViewMode": "list",
|
||||
"networkPreference": "auto",
|
||||
"iconTheme": "System Default",
|
||||
"launcherLogoMode": "os",
|
||||
"launcherLogoCustomPath": "",
|
||||
"launcherLogoColorOverride": "primary",
|
||||
"launcherLogoColorInvertOnMode": false,
|
||||
"launcherLogoBrightness": 0.5,
|
||||
"launcherLogoContrast": 1,
|
||||
"launcherLogoSizeOffset": 0,
|
||||
"fontFamily": "Inter Variable",
|
||||
"monoFontFamily": "Fira Code",
|
||||
"fontWeight": 400,
|
||||
"fontScale": 1,
|
||||
"dankBarFontScale": 1,
|
||||
"notepadUseMonospace": true,
|
||||
"notepadFontFamily": "",
|
||||
"notepadFontSize": 14,
|
||||
"notepadShowLineNumbers": false,
|
||||
"notepadTransparencyOverride": -1,
|
||||
"notepadLastCustomTransparency": 0.95,
|
||||
"gtkThemingEnabled": true,
|
||||
"qtThemingEnabled": true,
|
||||
"showDock": false,
|
||||
"dockAutoHide": false,
|
||||
"dockGroupByApp": false,
|
||||
"dockOpenOnOverview": false,
|
||||
"dockPosition": 1,
|
||||
"dockSpacing": 4,
|
||||
"dockBottomGap": 0,
|
||||
"cornerRadius": 12,
|
||||
"notificationOverlayEnabled": false,
|
||||
"dankBarAutoHide": false,
|
||||
"dankBarOpenOnOverview": true,
|
||||
"dankBarVisible": true,
|
||||
"dankBarSpacing": 4,
|
||||
"dankBarBottomGap": 0,
|
||||
"dankBarInnerPadding": 8,
|
||||
"dankBarSquareCorners": false,
|
||||
"dankBarNoBackground": false,
|
||||
"dankBarGothCornersEnabled": false,
|
||||
"dankBarBorderEnabled": false,
|
||||
"dankBarPosition": 0,
|
||||
"lockScreenShowPowerActions": true,
|
||||
"hideBrightnessSlider": false,
|
||||
"widgetBackgroundColor": "sth",
|
||||
"surfaceBase": "s",
|
||||
"notificationTimeoutLow": 5000,
|
||||
"notificationTimeoutNormal": 5000,
|
||||
"notificationTimeoutCritical": 0,
|
||||
"notificationPopupPosition": 0,
|
||||
"osdAlwaysShowValue": false,
|
||||
"screenPreferences": {
|
||||
"notifications": [
|
||||
"all"
|
||||
],
|
||||
"toast": [
|
||||
"all"
|
||||
]
|
||||
},
|
||||
"animationSpeed": 2
|
||||
}
|
||||
25
homes/x86_64-linux/kylekrein/niri/theme.nix
Normal file
25
homes/x86_64-linux/kylekrein/niri/theme.nix
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
osConfig,
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
inputs,
|
||||
namespace,
|
||||
...
|
||||
}:
|
||||
with lib.custom; let
|
||||
username = config.snowfallorg.user.name;
|
||||
home = config.snowfallorg.user.home.directory;
|
||||
impermanence = config.${namespace}.impermanence;
|
||||
in
|
||||
lib.mkIf osConfig.custom.windowManagers.niri.enable {
|
||||
home.packages = with pkgs; [
|
||||
nordic
|
||||
];
|
||||
|
||||
programs.niri = {
|
||||
settings = {
|
||||
cursor.theme = "Nordic-cursors";
|
||||
};
|
||||
};
|
||||
}
|
||||
BIN
homes/x86_64-linux/kylekrein/niri/wallpapers/autumn-forest.jpg
Normal file
BIN
homes/x86_64-linux/kylekrein/niri/wallpapers/autumn-forest.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.2 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 294 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.8 MiB |
BIN
homes/x86_64-linux/kylekrein/niri/wallpapers/i-use-nixos-btw.png
Normal file
BIN
homes/x86_64-linux/kylekrein/niri/wallpapers/i-use-nixos-btw.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.6 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 7.1 MiB |
22
homes/x86_64-linux/tania/default.nix
Normal file
22
homes/x86_64-linux/tania/default.nix
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
# User information gathered by Snowfall Lib is available.
|
||||
let
|
||||
name = config.snowfallorg.user.name;
|
||||
home = config.snowfallorg.user.home.directory;
|
||||
in {
|
||||
imports = lib.snowfall.fs.get-non-default-nix-files ./.;
|
||||
home = {
|
||||
packages = with pkgs; [
|
||||
];
|
||||
|
||||
sessionVariables = {
|
||||
};
|
||||
|
||||
stateVersion = "25.05";
|
||||
};
|
||||
}
|
||||
57
modules/home/hardware/tablet/default.nix
Normal file
57
modules/home/hardware/tablet/default.nix
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
namespace,
|
||||
system,
|
||||
target,
|
||||
format,
|
||||
virtual,
|
||||
systems,
|
||||
config,
|
||||
osConfig,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with lib.${namespace}; let
|
||||
cfg = config.${namespace}.hardware.tablet;
|
||||
osCfg = osConfig.${namespace}.hardware.tablet;
|
||||
in {
|
||||
options.${namespace}.hardware.tablet = with types; {
|
||||
enable = mkBoolOpt osCfg.enable "Enable tablet module for hardware that supports it";
|
||||
path = mkOpt path osCfg.path "Path with a file, where it's stated, whether tablet mode 'on' or 'off'";
|
||||
onTabletModeEnable = mkOpt (listOf (attrsOf str)) [] "Actions to do when entering tablet mode. Should have name and command string attributes.";
|
||||
onTabletModeDisable = mkOpt (listOf (attrsOf str)) [] "Actions to do when exiting tablet mode. Should have name and command string attributes.";
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
systemd.user.services.tablet-mode-watcher = {
|
||||
Service = {
|
||||
Type = "oneshot";
|
||||
ExecStart = pkgs.writeShellScript "tablet-mode-watcher" ''
|
||||
state=$(${pkgs.coreutils}/bin/cat "${cfg.path}" 2>/dev/null || echo 0)
|
||||
|
||||
if [ "$state" -eq 1 ]; then
|
||||
echo "Tablet mode ON"
|
||||
${concatStringsSep "\n" (map (cmd: ''
|
||||
systemd-run --user --unit=tablet-on-${cmd.name} --collect sh -c '${cmd.command}'
|
||||
'')
|
||||
cfg.onTabletModeEnable)}
|
||||
else
|
||||
echo "Tablet mode OFF"
|
||||
${concatStringsSep "\n" (map (cmd: ''
|
||||
systemd-run --user --unit=tablet-off-${cmd.name} --collect sh -c '${cmd.command}'
|
||||
'')
|
||||
cfg.onTabletModeDisable)}
|
||||
fi
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
systemd.user.paths.tablet-mode-watcher = {
|
||||
Unit.Description = "Watch for tablet mode changes";
|
||||
Path.PathChanged = cfg.path;
|
||||
Install.WantedBy = ["default.target"];
|
||||
};
|
||||
};
|
||||
}
|
||||
35
modules/nixos/hardware/asahi/default.nix
Normal file
35
modules/nixos/hardware/asahi/default.nix
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
namespace,
|
||||
system,
|
||||
target,
|
||||
format,
|
||||
virtual,
|
||||
systems,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with lib.${namespace}; let
|
||||
cfg = config.${namespace}.hardware.asahi;
|
||||
in {
|
||||
options.${namespace}.hardware.asahi = with types; {
|
||||
enable = mkBoolOpt false "Enable hardware support for Apple Silicon (M Chips)";
|
||||
imports = [
|
||||
inputs.apple-silicon-support.nixosModules.default
|
||||
({pkgs, ...}: {
|
||||
hardware.asahi = {
|
||||
peripheralFirmwareDirectory = ./firmware;
|
||||
useExperimentalGPUDriver = true; #deprecated
|
||||
#experimentalGPUInstallMode = "overlay";
|
||||
setupAsahiSound = true;
|
||||
};
|
||||
environment.systemPackages = with pkgs; [
|
||||
mesa-asahi-edge
|
||||
];
|
||||
})
|
||||
];
|
||||
};
|
||||
}
|
||||
BIN
modules/nixos/hardware/asahi/firmware/all_firmware.tar.gz
Executable file
BIN
modules/nixos/hardware/asahi/firmware/all_firmware.tar.gz
Executable file
Binary file not shown.
BIN
modules/nixos/hardware/asahi/firmware/kernelcache.release.mac13g
Executable file
BIN
modules/nixos/hardware/asahi/firmware/kernelcache.release.mac13g
Executable file
Binary file not shown.
88
modules/nixos/hardware/battery/batteryStatus.nix
Normal file
88
modules/nixos/hardware/battery/batteryStatus.nix
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
{
|
||||
config,
|
||||
namespace,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.${namespace}.hardware.battery;
|
||||
battery-path = "/sys/class/power_supply/${cfg.batteryName}";
|
||||
get-battery-level = "${pkgs.writeShellScriptBin "get-battery-level" ''
|
||||
cat ${battery-path}/capacity 2>/dev/null || echo "N/A"
|
||||
''}/bin/get-battery-level";
|
||||
get-status = "${pkgs.writeShellScriptBin "get-status" ''
|
||||
cat ${battery-path}/status 2>/dev/null || echo "Unknown"
|
||||
''}/bin/get-status";
|
||||
get-icon = "${pkgs.writeShellScriptBin "get-icon" ''
|
||||
BATTERY_LEVEL=$(${get-battery-level})
|
||||
STATUS=$(${get-status})
|
||||
if [[ "$BATTERY_LEVEL" == "N/A" ]]; then
|
||||
ICON=" "
|
||||
elif [[ "$STATUS" == "Charging" ]]; then
|
||||
if [[ $BATTERY_LEVEL -ge 90 ]]; then
|
||||
ICON=" "
|
||||
elif [[ $BATTERY_LEVEL -ge 80 ]]; then
|
||||
ICON=" "
|
||||
elif [[ $BATTERY_LEVEL -ge 70 ]]; then
|
||||
ICON=" "
|
||||
elif [[ $BATTERY_LEVEL -ge 60 ]]; then
|
||||
ICON=" "
|
||||
elif [[ $BATTERY_LEVEL -ge 50 ]]; then
|
||||
ICON=" "
|
||||
elif [[ $BATTERY_LEVEL -ge 40 ]]; then
|
||||
ICON=" "
|
||||
elif [[ $BATTERY_LEVEL -ge 30 ]]; then
|
||||
ICON=" "
|
||||
elif [[ $BATTERY_LEVEL -ge 20 ]]; then
|
||||
ICON=" "
|
||||
elif [[ $BATTERY_LEVEL -ge 10 ]]; then
|
||||
ICON=" "
|
||||
else
|
||||
ICON=" "
|
||||
fi
|
||||
else
|
||||
if [[ $BATTERY_LEVEL -ge 90 ]]; then
|
||||
ICON=" "
|
||||
elif [[ $BATTERY_LEVEL -ge 70 ]]; then
|
||||
ICON=" "
|
||||
elif [[ $BATTERY_LEVEL -ge 50 ]]; then
|
||||
ICON=" "
|
||||
elif [[ $BATTERY_LEVEL -ge 30 ]]; then
|
||||
ICON=" "
|
||||
elif [[ $BATTERY_LEVEL -ge 10 ]]; then
|
||||
ICON=" "
|
||||
else
|
||||
ICON=" "
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "$ICON"
|
||||
''}/bin/get-icon";
|
||||
get-remaining-time = "${pkgs.writeShellScriptBin "get-remaining-time" ''
|
||||
REMAINING_ENERGY=$(cat ${battery-path}/${cfg.remainingEnergy})
|
||||
POWER_USAGE=$(cat ${battery-path}/${cfg.powerUsage})
|
||||
if [[ -n "$REMAINING_ENERGY" && -n "$POWER_USAGE" && "$POWER_USAGE" -ne 0 ]]; then
|
||||
TIME_LEFT=$(((REMAINING_ENERGY / POWER_USAGE)))
|
||||
MINUTES_LEFT=$(((( (REMAINING_ENERGY * 60) / POWER_USAGE )) - (TIME_LEFT * 60)))
|
||||
echo "$TIME_LEFT h $MINUTES_LEFT min"
|
||||
else
|
||||
echo ""
|
||||
fi
|
||||
''}/bin/get-remaining-time";
|
||||
in {
|
||||
${namespace}.hardware.battery.scripts = {
|
||||
icon = get-icon;
|
||||
status = get-status;
|
||||
time = get-remaining-time;
|
||||
level = get-battery-level;
|
||||
labelAdaptive = "${pkgs.writeShellScriptBin "labelAdaptive" ''
|
||||
if [[ "$(${get-status})" == "Charging" ]]; then
|
||||
echo "$(${get-battery-level})% $(${get-icon})"
|
||||
else
|
||||
echo "$(${get-remaining-time}) $(${get-icon})"
|
||||
fi
|
||||
''}/bin/labelAdaptive";
|
||||
labelPercent = "${pkgs.writeShellScriptBin "labelPercent" ''
|
||||
echo "$(${get-battery-level})% $(${get-icon})"
|
||||
''}/bin/labelPercent";
|
||||
};
|
||||
}
|
||||
43
modules/nixos/hardware/battery/default.nix
Normal file
43
modules/nixos/hardware/battery/default.nix
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
namespace,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with lib.${namespace}; let
|
||||
cfg = config.${namespace}.hardware.battery;
|
||||
in {
|
||||
options.${namespace}.hardware.battery = with types; {
|
||||
enable = mkBoolOpt false "If you have a battery in your hardware, enable this";
|
||||
batteryName = mkOpt str "BAT1" ''
|
||||
Put your battery name here. You can find it at "/sys/class/power_supply/"
|
||||
'';
|
||||
remainingEnergy = mkOpt str "charge_now" ''
|
||||
File in your battery, that tells the current amount of energy
|
||||
'';
|
||||
powerUsage = mkOpt str "current_now" ''
|
||||
File in your battery, that tells, how much energy your hardware is using
|
||||
'';
|
||||
scripts = {
|
||||
icon = mkOpt' str "";
|
||||
status = mkOpt' str "";
|
||||
time = mkOpt' str "";
|
||||
level = mkOpt' str "";
|
||||
labelAdaptive = mkOpt' str "";
|
||||
labelPercent = mkOpt' str "";
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable (mkMerge [
|
||||
(import ./batteryStatus.nix {
|
||||
inherit config;
|
||||
inherit namespace;
|
||||
inherit pkgs;
|
||||
})
|
||||
{
|
||||
services.upower.enable = true;
|
||||
}
|
||||
]);
|
||||
}
|
||||
88
modules/nixos/hardware/framework12/default.nix
Normal file
88
modules/nixos/hardware/framework12/default.nix
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
namespace,
|
||||
system,
|
||||
target,
|
||||
format,
|
||||
virtual,
|
||||
systems,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with lib.${namespace}; let
|
||||
cfg = config.${namespace}.hardware.framework12;
|
||||
in {
|
||||
options.${namespace}.hardware.framework12 = with types; {
|
||||
enable = mkBoolOpt false "Enable hardware support for framework 12. P.s. you still need to import inputs.nixos-hardware.nixosModules.framework-12-13th-gen-intel yourself";
|
||||
};
|
||||
config = mkIf cfg.enable {
|
||||
${namespace}.hardware = {
|
||||
tablet.enable = true;
|
||||
battery = {
|
||||
enable = true;
|
||||
batteryName = "BAT1";
|
||||
remainingEnergy = "charge_now";
|
||||
powerUsage = "current_now";
|
||||
};
|
||||
};
|
||||
# Ensure that the `pinctrl_tigerlake` kernel module is loaded before `soc_button_array`.
|
||||
# This is required for correcly switching to tablet mode when the display is folded back.
|
||||
boot.extraModprobeConfig = ''
|
||||
softdep soc_button_array pre: pinctrl_tigerlake
|
||||
'';
|
||||
boot.initrd.kernelModules = ["pinctrl_tigerlake"];
|
||||
# Patch the `udev` rules shipping with `iio-sensor-proxy` according to:
|
||||
# https://github.com/FrameworkComputer/linux-docs/blob/main/framework12/Ubuntu-25-04-accel-ubuntu25.04.md
|
||||
nixpkgs.overlays = [
|
||||
(final: prev: {
|
||||
iio-sensor-proxy = prev.iio-sensor-proxy.overrideAttrs (old: {
|
||||
postInstall = ''
|
||||
${old.postInstall or ""}
|
||||
sed -i 's/.*iio-buffer-accel/#&/' $out/lib/udev/rules.d/80-iio-sensor-proxy.rules
|
||||
'';
|
||||
});
|
||||
})
|
||||
];
|
||||
|
||||
hardware.intel-gpu-tools.enable = true;
|
||||
services.thermald.enable = true;
|
||||
|
||||
hardware.enableRedistributableFirmware = true;
|
||||
environment.systemPackages = [
|
||||
pkgs.framework-tool
|
||||
(pkgs.writeShellScriptBin "reset-tablet" ''
|
||||
sudo ${pkgs.framework-tool}/bin/framework_tool --tablet-mode tablet
|
||||
sudo ${pkgs.framework-tool}/bin/framework_tool --tablet-mode auto
|
||||
'')
|
||||
];
|
||||
security.sudo.extraRules = [
|
||||
{
|
||||
users = ["ALL"];
|
||||
commands = [
|
||||
{
|
||||
command = "${pkgs.framework-tool}/bin/framework_tool";
|
||||
options = ["NOPASSWD"];
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
services.xserver.videoDrivers = ["modesetting"];
|
||||
hardware.graphics = {
|
||||
enable = true;
|
||||
extraPackages = with pkgs; [
|
||||
# For modern Intel CPU's
|
||||
intel-media-driver # Enable Hardware Acceleration
|
||||
vpl-gpu-rt # Enable QSV
|
||||
];
|
||||
};
|
||||
environment.sessionVariables = {LIBVA_DRIVER_NAME = "iHD";};
|
||||
|
||||
users.groups.touchscreen = {};
|
||||
services.udev.extraRules = ''
|
||||
KERNEL=="event*", ATTRS{name}=="ILIT2901:00 222A:5539", SYMLINK+="touchscreen", MODE="0660", GROUP="touchscreen"
|
||||
'';
|
||||
};
|
||||
}
|
||||
44
modules/nixos/hardware/hibernation/default.nix
Normal file
44
modules/nixos/hardware/hibernation/default.nix
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
namespace,
|
||||
system,
|
||||
target,
|
||||
format,
|
||||
virtual,
|
||||
systems,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with lib.${namespace}; let
|
||||
cfg = config.${namespace}.hardware.hibernation;
|
||||
in {
|
||||
options.${namespace}.hardware.hibernation = with types; {
|
||||
enable = mkBoolOpt false "Enable hibernation";
|
||||
swapFileOffset = mkOpt (nullOr int) null "Offset of swapfile. Calculate offset using https://wiki.archlinux.org/title/Power_management/Suspend_and_hibernate#Acquire_swap_file_offset";
|
||||
resumeDevice = mkOpt' path "/dev/disk/by-label/nixos";
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
boot = {
|
||||
kernelParams =
|
||||
[
|
||||
"mem_sleep_default=deep"
|
||||
]
|
||||
#https://github.com/nix-community/disko/issues/651#issuecomment-2383741717
|
||||
++ optional (cfg.swapFileOffset != null) "resume_offset=${builtins.toString cfg.swapFileOffset}";
|
||||
resumeDevice = mkDefault cfg.resumeDevice;
|
||||
};
|
||||
services.logind.settings.Login = {
|
||||
HandleLidSwitch = mkDefault "suspend-then-hibernate";
|
||||
HandlePowerKey = mkDefault "suspend-then-hibernate";
|
||||
HandlePowerKeyLongPress = mkDefault "poweroff";
|
||||
};
|
||||
systemd.sleep.extraConfig = ''
|
||||
HibernateDelaySec=30m
|
||||
SuspendState=mem
|
||||
'';
|
||||
};
|
||||
}
|
||||
70
modules/nixos/hardware/tablet/default.nix
Normal file
70
modules/nixos/hardware/tablet/default.nix
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
namespace,
|
||||
system,
|
||||
target,
|
||||
format,
|
||||
virtual,
|
||||
systems,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with lib.${namespace}; let
|
||||
cfg = config.${namespace}.hardware.tablet;
|
||||
in {
|
||||
options.${namespace}.hardware.tablet = with types; {
|
||||
enable = mkBoolOpt false "Enable tablet module for hardware that supports it";
|
||||
path = mkOpt path "/run/tablet-mode-state" "Path with a file, where it's stated, whether tablet mode 'on' or 'off'";
|
||||
inputDevice = mkOpt' str "/dev/input/event4";
|
||||
onTabletModeEnable = mkOpt (listOf (attrsOf str)) [] "Actions to do when entering tablet mode";
|
||||
onTabletModeDisable = mkOpt (listOf (attrsOf str)) [] "Actions to do when exiting tablet mode";
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
# 1. System service for watching
|
||||
systemd.services = {
|
||||
tablet-mode-watcher = {
|
||||
description = "Watch for tablet mode changes";
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.writeShellScript "tablet-mode-eventd" ''
|
||||
if [ -f "${cfg.path}" ]; then
|
||||
in_tablet_mode=$(${pkgs.coreutils}/bin/cat "${cfg.path}")
|
||||
else
|
||||
echo 0 > "${cfg.path}"
|
||||
in_tablet_mode=0
|
||||
fi
|
||||
|
||||
stdbuf -oL -eL ${lib.getExe pkgs.libinput} debug-events --device "${cfg.inputDevice}" | while read -r line; do
|
||||
if [[ "$line" =~ switch\ tablet-mode\ state\ ([01]) ]]; then
|
||||
d="''${BASH_REMATCH[1]}"
|
||||
if [ "$d" -ne "$in_tablet_mode" ]; then
|
||||
in_tablet_mode=$d
|
||||
if [ "$d" -eq 1 ]; then
|
||||
${concatStringsSep "\n" (map (cmd: ''
|
||||
systemd-run --unit=tablet-on-${cmd.name} --collect sh -c '${cmd.command}'
|
||||
'')
|
||||
cfg.onTabletModeEnable)}
|
||||
echo "Tablet mode ON"
|
||||
echo 1 > "${cfg.path}"
|
||||
else
|
||||
${concatStringsSep "\n" (map (cmd: ''
|
||||
systemd-run --unit=tablet-off-${cmd.name} --collect sh -c '${cmd.command}'
|
||||
'')
|
||||
cfg.onTabletModeDisable)}
|
||||
echo "Tablet mode OFF"
|
||||
echo 0 > "${cfg.path}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
''}";
|
||||
Restart = "always";
|
||||
};
|
||||
wantedBy = ["graphical.target"];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
46
modules/nixos/loginManagers/sddm/default.nix
Normal file
46
modules/nixos/loginManagers/sddm/default.nix
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
namespace,
|
||||
system,
|
||||
target,
|
||||
format,
|
||||
virtual,
|
||||
systems,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with lib.${namespace}; let
|
||||
cfg = config.${namespace}.loginManagers.sddm;
|
||||
in {
|
||||
options.${namespace}.loginManagers.sddm = with types; {
|
||||
enable = mkBoolOpt false "Enable sddm as login manager";
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
environment.systemPackages = with pkgs; [
|
||||
(catppuccin-sddm.override {
|
||||
flavor = "mocha";
|
||||
# font = "";
|
||||
fontSize = "16";
|
||||
#background;
|
||||
loginBackground = false;
|
||||
})
|
||||
wvkbd
|
||||
];
|
||||
services.xserver.enable = true;
|
||||
services.displayManager.sddm = {
|
||||
enable = true;
|
||||
theme = "catppuccin-mocha";
|
||||
package = mkDefault pkgs.kdePackages.sddm;
|
||||
wayland.enable = mkDefault config.${namespace}.presets.wayland.enable;
|
||||
settings = {
|
||||
General = {
|
||||
InputMethod = "wvkbd-mobintl"; # Enables optional virtual keyboard at login (SDDM). Useful for touchscreens or accessibility.
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -66,6 +66,7 @@ in {
|
|||
git
|
||||
btop
|
||||
comma
|
||||
snowfallorg.flake
|
||||
];
|
||||
programs.bash = {
|
||||
shellAliases = {
|
||||
|
|
|
|||
61
modules/nixos/presets/gaming/default.nix
Normal file
61
modules/nixos/presets/gaming/default.nix
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
namespace,
|
||||
system,
|
||||
target,
|
||||
format,
|
||||
virtual,
|
||||
systems,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with lib.${namespace}; let
|
||||
cfg = config.${namespace}.presets.gaming;
|
||||
in {
|
||||
options.${namespace}.presets.gaming = with types; {
|
||||
enable = mkBoolOpt false "Enable everything that you need for gaming";
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
environment.systemPackages = with pkgs; [
|
||||
unzip
|
||||
wget
|
||||
xdotool
|
||||
xorg.xprop
|
||||
xorg.xrandr
|
||||
unixtools.xxd
|
||||
xorg.xwininfo
|
||||
yad
|
||||
protonup-qt
|
||||
protontricks
|
||||
];
|
||||
programs.steam = {
|
||||
enable = true;
|
||||
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
|
||||
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
|
||||
localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
|
||||
package = pkgs.steam.override {
|
||||
extraPkgs = pkgs:
|
||||
with pkgs; [
|
||||
xorg.libXcursor
|
||||
xorg.libXi
|
||||
xorg.libXinerama
|
||||
xorg.libXScrnSaver
|
||||
libpng
|
||||
libpulseaudio
|
||||
libvorbis
|
||||
sdl3
|
||||
SDL2
|
||||
stdenv.cc.cc.lib
|
||||
libkrb5
|
||||
keyutils
|
||||
gamescope
|
||||
];
|
||||
};
|
||||
};
|
||||
programs.gamemode.enable = true;
|
||||
};
|
||||
}
|
||||
34
modules/nixos/presets/wayland/default.nix
Normal file
34
modules/nixos/presets/wayland/default.nix
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
namespace,
|
||||
system,
|
||||
target,
|
||||
format,
|
||||
virtual,
|
||||
systems,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with lib.${namespace}; let
|
||||
cfg = config.${namespace}.presets.wayland;
|
||||
in {
|
||||
options.${namespace}.presets.wayland = with types; {
|
||||
enable = mkBoolOpt false "Enable preset with MUST HAVE wayland things";
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
environment.sessionVariables = {
|
||||
NIXOS_OZONE_WL = "1";
|
||||
};
|
||||
environment.systemPackages = with pkgs; [
|
||||
wl-clipboard
|
||||
git-credential-manager
|
||||
egl-wayland
|
||||
pwvucontrol
|
||||
];
|
||||
hardware.graphics.enable = true;
|
||||
};
|
||||
}
|
||||
134
modules/nixos/presets/workstation/default.nix
Normal file
134
modules/nixos/presets/workstation/default.nix
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
namespace,
|
||||
system,
|
||||
target,
|
||||
format,
|
||||
virtual,
|
||||
systems,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with lib.${namespace}; let
|
||||
cfg = config.${namespace}.presets.workstation;
|
||||
in {
|
||||
options.${namespace}.presets.workstation = with types; {
|
||||
enable = mkBoolOpt false "Enable workstation preset";
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
${namespace} = {
|
||||
presets.default = enabled;
|
||||
presets.wayland = enabled;
|
||||
hardware.printing = enabled;
|
||||
hardware.bluetooth = enabled;
|
||||
#programs.fastfetch = {
|
||||
# enable = true;
|
||||
# firstNixOSInstall = 1729112485;
|
||||
#};
|
||||
gpg = enabled;
|
||||
services.syncthing = {
|
||||
enable = true;
|
||||
user = "kylekrein";
|
||||
};
|
||||
};
|
||||
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
nix-direnv.enable = true;
|
||||
};
|
||||
networking.networkmanager.enable = true;
|
||||
services.udisks2.enable = true;
|
||||
|
||||
environment.systemPackages = with pkgs;
|
||||
with pkgs.${namespace}; [
|
||||
rnote
|
||||
libreoffice
|
||||
root-files
|
||||
gparted
|
||||
qdirstat
|
||||
exfatprogs
|
||||
tealdeer
|
||||
telegram-desktop
|
||||
vlc
|
||||
git-credential-manager
|
||||
qpwgraph
|
||||
solaar
|
||||
pdfarranger
|
||||
densify
|
||||
gimp3
|
||||
krita
|
||||
inkscape
|
||||
cameractrls-gtk4
|
||||
|
||||
#kde
|
||||
kdePackages.gwenview
|
||||
kdePackages.ark
|
||||
shotwell
|
||||
|
||||
deploy-rs
|
||||
custom.deploy-rs-online
|
||||
];
|
||||
programs.kdeconnect.enable = true;
|
||||
programs.kdeconnect.package = lib.mkDefault pkgs.kdePackages.kdeconnect-kde;
|
||||
fonts.packages = with pkgs; [
|
||||
nerd-fonts.jetbrains-mono
|
||||
font-awesome
|
||||
nerd-fonts.symbols-only
|
||||
hack-font
|
||||
noto-fonts-emoji
|
||||
# microsoft fonts:
|
||||
#corefonts
|
||||
#vistafonts
|
||||
];
|
||||
environment.sessionVariables = {
|
||||
MANPAGER = "emacsclient -c";
|
||||
EDITOR = "emacsclient -c";
|
||||
};
|
||||
hardware = {
|
||||
logitech.wireless.enable = true;
|
||||
};
|
||||
|
||||
security.polkit.enable = true;
|
||||
services.flatpak = enabled;
|
||||
|
||||
#programs.thunar = {
|
||||
# enable = true;
|
||||
# plugins = with pkgs.xfce; [
|
||||
# thunar-archive-plugin
|
||||
# thunar-volman
|
||||
# ];
|
||||
# };
|
||||
#programs.xfconf.enable = true; # so thunar can save config
|
||||
#services.gvfs.enable = true; # Mount, trash, and other functionalities
|
||||
#services.tumbler.enable = true; # Thumbnail support for images
|
||||
|
||||
#greeter
|
||||
programs.dankMaterialShell.greeter = {
|
||||
enable = config.${namespace}.windowManagers.niri.enable || config.programs.hyprland.enable;
|
||||
compositor.name =
|
||||
if config.${namespace}.windowManagers.niri.enable
|
||||
then "niri"
|
||||
else "hyprland";
|
||||
configHome = let
|
||||
imp = config.${namespace}.impermanence;
|
||||
in "${
|
||||
if imp.enable
|
||||
then imp.persistentStorage
|
||||
else ""
|
||||
}${config.users.users.kylekrein.home}";
|
||||
};
|
||||
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
jack.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
70
modules/nixos/programs/dolphin/default.nix
Normal file
70
modules/nixos/programs/dolphin/default.nix
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
namespace,
|
||||
system,
|
||||
target,
|
||||
format,
|
||||
virtual,
|
||||
systems,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with lib.${namespace}; let
|
||||
cfg = config.${namespace}.programs.dolphin;
|
||||
in {
|
||||
options.${namespace}.programs.dolphin = with types; {
|
||||
enable = mkBoolOpt false "Enable dolphin on non Kde environments";
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
environment.systemPackages = with pkgs; [
|
||||
kdePackages.qtwayland
|
||||
kdePackages.qtsvg
|
||||
kdePackages.kio-fuse #to mount remote filesystems via FUSE
|
||||
kdePackages.kio-extras #extra protocols support (sftp, fish and more)
|
||||
kdePackages.kio-admin
|
||||
libheif #https://github.com/NixOS/nixpkgs/issues/164021
|
||||
libheif.out
|
||||
|
||||
#kde
|
||||
kdePackages.breeze-icons
|
||||
kdePackages.breeze
|
||||
kdePackages.kdesdk-thumbnailers
|
||||
kdePackages.kdegraphics-thumbnailers
|
||||
kdePackages.kservice
|
||||
kdePackages.kdbusaddons
|
||||
kdePackages.kfilemetadata
|
||||
kdePackages.kconfig
|
||||
kdePackages.kcoreaddons
|
||||
kdePackages.kcrash
|
||||
kdePackages.kguiaddons
|
||||
kdePackages.ki18n
|
||||
kdePackages.kitemviews
|
||||
kdePackages.kwidgetsaddons
|
||||
kdePackages.kwindowsystem
|
||||
shared-mime-info
|
||||
|
||||
#kde support tools
|
||||
#libsForQt5.qt5ct
|
||||
#qt6ct
|
||||
kdePackages.kimageformats
|
||||
kdePackages.dolphin
|
||||
kdePackages.dolphin-plugins
|
||||
];
|
||||
xdg = {
|
||||
menus.enable = true;
|
||||
mime.enable = true;
|
||||
};
|
||||
|
||||
#https://discourse.nixos.org/t/dolphin-does-not-have-mime-associations/48985/3
|
||||
# This fixes the unpopulated MIME menus
|
||||
environment.etc."/xdg/menus/plasma-applications.menu".text = builtins.readFile "${pkgs.kdePackages.plasma-workspace}/etc/xdg/menus/plasma-applications.menu";
|
||||
environment.etc."/xdg/menus/applications.menu".text = builtins.readFile "${pkgs.kdePackages.plasma-workspace}/etc/xdg/menus/plasma-applications.menu";
|
||||
#environment.pathsToLink = [
|
||||
# "share/thumbnailers"
|
||||
#];
|
||||
};
|
||||
}
|
||||
37
modules/nixos/users/andrej/default.nix
Normal file
37
modules/nixos/users/andrej/default.nix
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
namespace,
|
||||
system,
|
||||
target,
|
||||
format,
|
||||
virtual,
|
||||
systems,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with lib.${namespace}; let
|
||||
username = "andrej";
|
||||
admin = false;
|
||||
extraGroups = ["networkmanager"];
|
||||
trustedSshKeys = [];
|
||||
|
||||
cfg = config.${namespace}.users.${username};
|
||||
in {
|
||||
options.${namespace}.users.${username} = with types; {
|
||||
enable = mkBoolOpt false "Enable ${username} user";
|
||||
config = mkOpt types.attrs {} "Additional home manager config for ${username}";
|
||||
};
|
||||
|
||||
config = mkUser {
|
||||
inherit config;
|
||||
inherit (cfg) enable;
|
||||
homeConfig = cfg.config;
|
||||
inherit username;
|
||||
inherit admin;
|
||||
inherit extraGroups;
|
||||
inherit trustedSshKeys;
|
||||
};
|
||||
}
|
||||
|
|
@ -19,7 +19,6 @@ with lib.${namespace}; let
|
|||
trustedSshKeys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFDdxZ5OyGcfD1JwEa4RWw86HWZ2dKFR0syrRckl7EvG kylekrein@kylekrein-homepc"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAWDM28XBxm4PFBNOouNWxqVmDj1ulUGEgHsRYoODCDG anaconda"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINYO1JV6qkQM+EW2WY/RxDFihgSKuFHF1hVtzl+F9ye4 kylekrein@anaconda"
|
||||
];
|
||||
|
||||
cfg = config.${namespace}.users.${username};
|
||||
|
|
|
|||
37
modules/nixos/users/tania/default.nix
Normal file
37
modules/nixos/users/tania/default.nix
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
namespace,
|
||||
system,
|
||||
target,
|
||||
format,
|
||||
virtual,
|
||||
systems,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with lib.${namespace}; let
|
||||
username = "tania";
|
||||
admin = false;
|
||||
extraGroups = ["networkmanager" "touchscreen"];
|
||||
trustedSshKeys = [];
|
||||
|
||||
cfg = config.${namespace}.users.${username};
|
||||
in {
|
||||
options.${namespace}.users.${username} = with types; {
|
||||
enable = mkBoolOpt false "Enable ${username} user";
|
||||
config = mkOpt types.attrs {} "Additional home manager config for ${username}";
|
||||
};
|
||||
|
||||
config = mkUser {
|
||||
inherit config;
|
||||
inherit (cfg) enable;
|
||||
homeConfig = cfg.config;
|
||||
inherit username;
|
||||
inherit admin;
|
||||
inherit extraGroups;
|
||||
inherit trustedSshKeys;
|
||||
};
|
||||
}
|
||||
40
modules/nixos/windowManagers/niri/default.nix
Normal file
40
modules/nixos/windowManagers/niri/default.nix
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
namespace,
|
||||
system,
|
||||
target,
|
||||
format,
|
||||
virtual,
|
||||
systems,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with lib.${namespace}; let
|
||||
cfg = config.${namespace}.windowManagers.niri;
|
||||
in {
|
||||
options.${namespace}.windowManagers.niri = with types; {
|
||||
enable = mkBoolOpt false "Enable Niri as your window manager";
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
${namespace} = {
|
||||
programs.dolphin.enable = mkDefault true;
|
||||
};
|
||||
security.pam.services.quickshell = {};
|
||||
programs.niri = {
|
||||
enable = true;
|
||||
package = pkgs.niri-unstable;
|
||||
};
|
||||
niri-flake.cache.enable = true;
|
||||
environment.systemPackages = with pkgs; [
|
||||
wl-clipboard
|
||||
wayland-utils
|
||||
libsecret
|
||||
gamescope
|
||||
xwayland-satellite-unstable
|
||||
];
|
||||
};
|
||||
}
|
||||
148
systems/x86_64-linux/andrej-pc/default.nix
Normal file
148
systems/x86_64-linux/andrej-pc/default.nix
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
namespace,
|
||||
system,
|
||||
target,
|
||||
format,
|
||||
virtual,
|
||||
systems,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with lib.custom; {
|
||||
facter.reportPath = ./facter.json;
|
||||
custom = {
|
||||
programs.dolphin = enabled;
|
||||
presets.default = enabled;
|
||||
presets.wayland = enabled;
|
||||
presets.gaming = enabled;
|
||||
hardware = {
|
||||
#nvidia = enabled;
|
||||
bluetooth = enabled;
|
||||
printing = enabled;
|
||||
};
|
||||
|
||||
users = {
|
||||
kylekrein = {
|
||||
enable = true;
|
||||
};
|
||||
andrej = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
presets.disko = {
|
||||
ext4Swap = {
|
||||
enable = true;
|
||||
device = "/dev/sda";
|
||||
swapSize = 16;
|
||||
};
|
||||
ext4 = {
|
||||
enable = true;
|
||||
device = "/dev/sdb";
|
||||
mountpoint = "/home/andrej/SteamGames";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
#greeter
|
||||
programs.dankMaterialShell.greeter = {
|
||||
enable = config.${namespace}.windowManagers.niri.enable || config.programs.hyprland.enable;
|
||||
compositor.name =
|
||||
if config.${namespace}.windowManagers.niri.enable
|
||||
then "niri"
|
||||
else "hyprland";
|
||||
configHome = let
|
||||
imp = config.${namespace}.impermanence;
|
||||
in "${
|
||||
if imp.enable
|
||||
then imp.persistentStorage
|
||||
else ""
|
||||
}${config.users.users.andrej.home}";
|
||||
};
|
||||
|
||||
services.flatpak = enabled;
|
||||
security.pam.services.quickshell = {};
|
||||
services.xserver = {
|
||||
enable = true;
|
||||
};
|
||||
programs.hyprland = {
|
||||
enable = true;
|
||||
systemd.setPath = enabled;
|
||||
};
|
||||
|
||||
networking.firewall.allowedTCPPorts = [22 25565];
|
||||
networking.firewall.allowedUDPPorts = [22 25565];
|
||||
|
||||
security.polkit.enable = true;
|
||||
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
jack.enable = true;
|
||||
};
|
||||
|
||||
programs.kdeconnect.enable = true;
|
||||
programs.kdeconnect.package = lib.mkDefault pkgs.kdePackages.kdeconnect-kde;
|
||||
|
||||
programs.nh = {
|
||||
enable = true;
|
||||
clean.enable = true;
|
||||
clean.extraArgs = "--keep-since 4d --keep 3";
|
||||
flake = "/etc/nixos-config";
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
libreoffice
|
||||
fzf
|
||||
killall
|
||||
eza
|
||||
fd
|
||||
gparted
|
||||
exfatprogs
|
||||
lazygit
|
||||
fastfetch
|
||||
telegram-desktop
|
||||
vlc
|
||||
wl-clipboard
|
||||
git
|
||||
git-credential-manager
|
||||
egl-wayland
|
||||
btop
|
||||
obs-studio
|
||||
blender
|
||||
vscodium-fhs
|
||||
discord
|
||||
solaar
|
||||
element-desktop
|
||||
|
||||
prismlauncher
|
||||
mcpelauncher-ui-qt
|
||||
jdk
|
||||
teams-for-linux
|
||||
];
|
||||
systemd.network.wait-online.enable = lib.mkForce false;
|
||||
networking.wireless.enable = mkForce false;
|
||||
|
||||
networking.networkmanager.enable = true;
|
||||
services.udisks2.enable = true;
|
||||
|
||||
services.zerotierone = {
|
||||
enable = true;
|
||||
joinNetworks = [
|
||||
"a09acf0233dccb4a"
|
||||
"1d71939404962783"
|
||||
"41d49af6c260338d"
|
||||
];
|
||||
};
|
||||
|
||||
# ======================== DO NOT CHANGE THIS ========================
|
||||
system.stateVersion = "24.11";
|
||||
# ======================== DO NOT CHANGE THIS ========================
|
||||
}
|
||||
4611
systems/x86_64-linux/andrej-pc/facter.json
Executable file
4611
systems/x86_64-linux/andrej-pc/facter.json
Executable file
File diff suppressed because it is too large
Load diff
75
systems/x86_64-linux/kylekrein-framework12/default.nix
Normal file
75
systems/x86_64-linux/kylekrein-framework12/default.nix
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
namespace,
|
||||
system,
|
||||
target,
|
||||
format,
|
||||
virtual,
|
||||
systems,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
niri-config = {
|
||||
programs.niri = {
|
||||
settings = {
|
||||
#input.power-key-handling.enable = true;
|
||||
spawn-at-startup = [
|
||||
{
|
||||
command = [
|
||||
"${lib.getExe pkgs.brightnessctl}"
|
||||
"-s 20%"
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
in
|
||||
with lib;
|
||||
with lib.custom; {
|
||||
facter.reportPath = ./facter.json;
|
||||
systemd.network.wait-online.enable = lib.mkForce false; #facter
|
||||
|
||||
custom.hardware.hibernation = {
|
||||
enable = false;
|
||||
swapFileOffset = 533760;
|
||||
};
|
||||
custom.presets.disko.impermanenceBtrfsLuks = {
|
||||
enable = true;
|
||||
swapSize = 64;
|
||||
};
|
||||
custom.hardware.framework12 = enabled;
|
||||
custom.hardware.secureBoot = enabled;
|
||||
custom.hardware.tablet.inputDevice = "/dev/input/by-path/platform-gpio-keys.9.auto-event";
|
||||
custom.impermanence = enabled;
|
||||
custom.presets.workstation = enabled;
|
||||
custom.presets.gaming = enabled;
|
||||
custom.windowManagers.niri = enabled;
|
||||
custom.services.ai = {
|
||||
enable = true;
|
||||
models = ["qwq" "llama3.1" "qwen2.5-coder:7b"];
|
||||
ui = disabled;
|
||||
};
|
||||
custom.users.kylekrein = {
|
||||
enable = true;
|
||||
config = niri-config;
|
||||
};
|
||||
environment.systemPackages = with pkgs; [
|
||||
blender
|
||||
video-downloader
|
||||
];
|
||||
|
||||
#services.fprintd.enable = true;
|
||||
#services.fprintd.tod.enable = true;
|
||||
#services.fprintd.tod.driver = pkgs.libfprint-2-tod1-elan;
|
||||
services.power-profiles-daemon.enable = true;
|
||||
services.tlp.enable = false;
|
||||
#Chat host
|
||||
networking.firewall.allowedTCPPorts = [80 443 22 8448 9993 8081];
|
||||
|
||||
# ======================== DO NOT CHANGE THIS ========================
|
||||
system.stateVersion = "25.05";
|
||||
# ======================== DO NOT CHANGE THIS ========================
|
||||
}
|
||||
3473
systems/x86_64-linux/kylekrein-framework12/facter.json
Normal file
3473
systems/x86_64-linux/kylekrein-framework12/facter.json
Normal file
File diff suppressed because it is too large
Load diff
81
systems/x86_64-linux/kylekrein-homepc/default.nix
Normal file
81
systems/x86_64-linux/kylekrein-homepc/default.nix
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
namespace,
|
||||
system,
|
||||
target,
|
||||
format,
|
||||
virtual,
|
||||
systems,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
niri-outputs = {
|
||||
programs.niri.settings.outputs = {
|
||||
"DP-1" = {
|
||||
scale = 1.6;
|
||||
position.x = 1600;
|
||||
position.y = 0;
|
||||
};
|
||||
"DP-3" = {
|
||||
scale = 1.6;
|
||||
position.x = 0;
|
||||
position.y = 0;
|
||||
};
|
||||
};
|
||||
};
|
||||
in
|
||||
with lib;
|
||||
with lib.${namespace}; {
|
||||
facter.reportPath = ./facter.json;
|
||||
systemd.network.wait-online.enable = lib.mkForce false; #facter
|
||||
|
||||
custom.hardware.nvidia = enabled;
|
||||
services.scx.enable = true; # by default uses scx_rustland scheduler
|
||||
boot.kernelPackages = lib.mkForce pkgs.linuxPackages_cachyos;
|
||||
system.modulesTree = [pkgs.linux_cachyos.modules];
|
||||
custom.impermanence = enabled;
|
||||
custom.presets.workstation = enabled;
|
||||
custom.presets.gaming = enabled;
|
||||
custom.presets.disko.impermanenceBtrfs = {
|
||||
enable = true;
|
||||
device = "/dev/nvme0n1";
|
||||
swapSize = 32;
|
||||
};
|
||||
custom.windowManagers.niri = enabled;
|
||||
custom.services.ai = {
|
||||
enable = true;
|
||||
models = ["qwq" "llama3.1" "qwen2.5-coder:7b" "gpt-oss:20b" "gpt-oss:120b"];
|
||||
};
|
||||
|
||||
custom.users = {
|
||||
kylekrein = {
|
||||
enable = true;
|
||||
config = niri-outputs;
|
||||
};
|
||||
tania = {
|
||||
inherit (config.custom.users.kylekrein) enable config;
|
||||
};
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
blender
|
||||
];
|
||||
|
||||
services.zerotierone = {
|
||||
enable = true;
|
||||
port = 9994;
|
||||
joinNetworks = [
|
||||
"A84AC5C10AD269CA"
|
||||
"db64858fed285e0f"
|
||||
];
|
||||
};
|
||||
#Chat host
|
||||
networking.firewall.allowedTCPPorts = [80 443 22 8448 9993 8081] ++ [config.services.zerotierone.port];
|
||||
networking.firewall.allowedUDPPorts = [config.services.zerotierone.port];
|
||||
|
||||
# ======================== DO NOT CHANGE THIS ========================
|
||||
system.stateVersion = "25.05";
|
||||
# ======================== DO NOT CHANGE THIS ========================
|
||||
}
|
||||
6689
systems/x86_64-linux/kylekrein-homepc/facter.json
Normal file
6689
systems/x86_64-linux/kylekrein-homepc/facter.json
Normal file
File diff suppressed because it is too large
Load diff
155
systems/x86_64-linux/kylekrein-server/default.nix
Normal file
155
systems/x86_64-linux/kylekrein-server/default.nix
Normal file
|
|
@ -0,0 +1,155 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
namespace,
|
||||
system,
|
||||
target,
|
||||
format,
|
||||
virtual,
|
||||
systems,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with lib.custom; {
|
||||
imports = lib.snowfall.fs.get-non-default-nix-files ./.;
|
||||
custom = {
|
||||
presets.default = enabled;
|
||||
users.kylekrein = {
|
||||
enable = true;
|
||||
config = {};
|
||||
};
|
||||
services.conduwuit = {
|
||||
enable = true;
|
||||
#user = "turnserver";
|
||||
settings = {
|
||||
global = {
|
||||
server_name = "kylekrein.com";
|
||||
well_known = {
|
||||
server = "matrix.kylekrein.com:443";
|
||||
client = "https://matrix.kylekrein.com";
|
||||
};
|
||||
port = [6167];
|
||||
trusted_servers = ["matrix.org"];
|
||||
allow_registration = false;
|
||||
registration_token = null; #nix shell nixpkgs#openssl -c openssl rand -base64 48 | tr -d '/+' | cut -c1-64
|
||||
allow_federation = true;
|
||||
allow_encryption = true;
|
||||
|
||||
allow_local_presence = true;
|
||||
require_auth_for_profile_requests = true;
|
||||
};
|
||||
};
|
||||
extraEnvironment = {
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.caddy = {
|
||||
enable = true;
|
||||
#virtualHosts."kylekrein.com:8448".extraConfig = ''
|
||||
# reverse_proxy http://localhost:6167
|
||||
#'';
|
||||
virtualHosts."kylekrein.com".extraConfig = ''
|
||||
handle_path /.well-known/matrix/* {
|
||||
|
||||
header Access-Control-Allow-Origin *
|
||||
|
||||
## `Content-Type: application/json` isn't required by the matrix spec
|
||||
## but some browsers (firefox) and some other tooling might preview json
|
||||
## content prettier when they are made aware via Content-Type
|
||||
header Content-Type application/json
|
||||
|
||||
respond /client `{ "m.homeserver": { "base_url": "https://matrix.kylekrein.com/" }, "org.matrix.msc3575.proxy": { "url": "https://matrix.kylekrein.com/"}, "org.matrix.msc4143.rtc_foci": [ { "type": "livekit", "livekit_service_url": "https://livekit-jwt.call.matrix.org" } ] }`
|
||||
|
||||
respond /server `{ "m.server": "matrix.kylekrein.com:443" }`
|
||||
|
||||
## return http/404 if nothing matches
|
||||
respond 404
|
||||
}
|
||||
respond /.well-known/element/element.json `{"call":{"widget_url":"https://call.element.io"}}`
|
||||
reverse_proxy * http://localhost:6167
|
||||
'';
|
||||
# reverse_proxy /.well-known/* http://localhost:6167
|
||||
#'';
|
||||
virtualHosts."matrix.kylekrein.com".extraConfig = ''
|
||||
handle_path /.well-known/matrix/* {
|
||||
|
||||
header Access-Control-Allow-Origin *
|
||||
|
||||
## `Content-Type: application/json` isn't required by the matrix spec
|
||||
## but some browsers (firefox) and some other tooling might preview json
|
||||
## content prettier when they are made aware via Content-Type
|
||||
header Content-Type application/json
|
||||
|
||||
respond /client `{ "m.homeserver": { "base_url": "https://matrix.kylekrein.com/" }, "org.matrix.msc3575.proxy": { "url": "https://matrix.kylekrein.com/"}, "org.matrix.msc4143.rtc_foci": [ { "type": "livekit", "livekit_service_url": "https://livekit-jwt.call.matrix.org" } ] }`
|
||||
|
||||
respond /server `{ "m.server": "https://matrix.kylekrein.com" }`
|
||||
|
||||
## return http/404 if nothing matches
|
||||
respond 404
|
||||
}
|
||||
respond /.well-known/element/element.json `{"call":{"widget_url":"https://call.element.io"}}`
|
||||
reverse_proxy * http://localhost:6167
|
||||
'';
|
||||
virtualHosts."uptime.kylekrein.com".extraConfig = ''
|
||||
reverse_proxy * http://localhost:4621
|
||||
'';
|
||||
#virtualHosts."gitlab.kylekrein.com".extraConfig = ''
|
||||
# reverse_proxy * unix//run/gitlab/gitlab-workhorse.socket
|
||||
#'';
|
||||
};
|
||||
services.uptime-kuma = {
|
||||
enable = true;
|
||||
settings = {
|
||||
PORT = "4621";
|
||||
HOST = "127.0.0.1";
|
||||
};
|
||||
appriseSupport = true;
|
||||
};
|
||||
|
||||
#Chat host
|
||||
networking.firewall.allowedTCPPorts = [80 443 22 8448];
|
||||
networking.firewall.allowedUDPPorts = [3478 5349];
|
||||
#sops.secrets."services/conduwuit" = {mode = "0755";};
|
||||
|
||||
#sops.secrets."services/gitlab/dbPassword" = {owner = "gitlab";};
|
||||
#sops.secrets."services/gitlab/rootPassword" = {owner = "gitlab";};
|
||||
#sops.secrets."services/gitlab/secret" = {owner = "gitlab";};
|
||||
#sops.secrets."services/gitlab/otpsecret" = {owner = "gitlab";};
|
||||
#sops.secrets."services/gitlab/dbsecret" = {owner = "gitlab";};
|
||||
#sops.secrets."services/gitlab/oidcKeyBase" = {owner = "gitlab";};
|
||||
#sops.secrets."services/gitlab/activeRecordSalt" = {owner = "gitlab";};
|
||||
#sops.secrets."services/gitlab/activeRecordPrimaryKey" = {owner = "gitlab";};
|
||||
#sops.secrets."services/gitlab/activeRecordDeterministicKey" = {owner = "gitlab";};
|
||||
services.gitlab = {
|
||||
enable = false;
|
||||
host = "gitlab.kylekrein.com";
|
||||
https = true;
|
||||
port = 443;
|
||||
#statePath = "/persist/gitlab/state";
|
||||
backup.startAt = "3:00";
|
||||
databasePasswordFile = config.sops.secrets."services/gitlab/dbPassword".path;
|
||||
initialRootPasswordFile = config.sops.secrets."services/gitlab/rootPassword".path;
|
||||
secrets = {
|
||||
secretFile = config.sops.secrets."services/gitlab/secret".path;
|
||||
otpFile = config.sops.secrets."services/gitlab/otpsecret".path;
|
||||
dbFile = config.sops.secrets."services/gitlab/dbsecret".path;
|
||||
jwsFile = config.sops.secrets."services/gitlab/oidcKeyBase".path; #pkgs.runCommand "oidcKeyBase" {} "${pkgs.openssl}/bin/openssl genrsa 2048 > $out";
|
||||
activeRecordSaltFile = config.sops.secrets."services/gitlab/activeRecordSalt".path;
|
||||
activeRecordPrimaryKeyFile = config.sops.secrets."services/gitlab/activeRecordPrimaryKey".path;
|
||||
activeRecordDeterministicKeyFile = config.sops.secrets."services/gitlab/activeRecordDeterministicKey".path;
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.gitlab-backup.environment.BACKUP = "dump";
|
||||
boot.tmp.cleanOnBoot = true;
|
||||
boot.loader.grub.enable = true;
|
||||
boot.loader.grub.device = "/dev/sda";
|
||||
boot.loader.systemd-boot.enable = mkForce false;
|
||||
|
||||
# ======================== DO NOT CHANGE THIS ========================
|
||||
system.stateVersion = "24.11";
|
||||
# ======================== DO NOT CHANGE THIS ========================
|
||||
}
|
||||
32
systems/x86_64-linux/kylekrein-server/hardware.nix
Normal file
32
systems/x86_64-linux/kylekrein-server/hardware.nix
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
modulesPath,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
(modulesPath + "/profiles/qemu-guest.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = ["ahci" "xhci_pci" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"];
|
||||
boot.initrd.kernelModules = [];
|
||||
boot.kernelModules = [];
|
||||
boot.extraModulePackages = [];
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/4f7e141c-0fc7-415a-815d-944b36f93806";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
swapDevices = [];
|
||||
|
||||
# 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
|
||||
# still possible to use this option, but it's recommended to use it in conjunction
|
||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.eth0.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
}
|
||||
48
systems/x86_64-linux/kylekrein-server/networking.nix
Normal file
48
systems/x86_64-linux/kylekrein-server/networking.nix
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
{lib, ...}: {
|
||||
# This file was populated at runtime with the networking
|
||||
# details gathered from the active system.
|
||||
networking = {
|
||||
nameservers = [
|
||||
"8.8.8.8"
|
||||
];
|
||||
defaultGateway = "172.31.1.1";
|
||||
defaultGateway6 = {
|
||||
address = "";
|
||||
interface = "eth0";
|
||||
};
|
||||
dhcpcd.enable = false;
|
||||
usePredictableInterfaceNames = lib.mkForce false;
|
||||
interfaces = {
|
||||
eth0 = {
|
||||
ipv4.addresses = [
|
||||
{
|
||||
address = "91.99.0.169";
|
||||
prefixLength = 32;
|
||||
}
|
||||
];
|
||||
ipv6.addresses = [
|
||||
{
|
||||
address = "fe80::9400:4ff:fe30:830e";
|
||||
prefixLength = 64;
|
||||
}
|
||||
];
|
||||
ipv4.routes = [
|
||||
{
|
||||
address = "172.31.1.1";
|
||||
prefixLength = 32;
|
||||
}
|
||||
];
|
||||
ipv6.routes = [
|
||||
{
|
||||
address = "";
|
||||
prefixLength = 128;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
services.udev.extraRules = ''
|
||||
ATTR{address}=="96:00:04:30:83:0e", NAME="eth0"
|
||||
|
||||
'';
|
||||
}
|
||||
|
|
@ -112,7 +112,6 @@ in {
|
|||
custom.impermanence = enabled;
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
quickemu
|
||||
ente-cli
|
||||
tmux
|
||||
icloudpd
|
||||
|
|
@ -129,13 +128,6 @@ in {
|
|||
"rtw89_8852ce"
|
||||
];
|
||||
|
||||
programs.virt-manager.enable = false;
|
||||
|
||||
users.groups.libvirtd.members = ["kylekrein"];
|
||||
|
||||
virtualisation.libvirtd.enable = true;
|
||||
|
||||
|
||||
custom.users.kylekrein = {
|
||||
enable = true;
|
||||
config = {};
|
||||
|
|
|
|||
|
|
@ -73,5 +73,4 @@ in {
|
|||
};
|
||||
};
|
||||
};
|
||||
fileSystems."/var/lib".neededForBoot = true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
virtualisation.oci-containers.backend = "podman";
|
||||
|
||||
virtualisation.oci-containers.containers.aliasvault = {
|
||||
image = "ghcr.io/aliasvault/aliasvault:0.26.6";
|
||||
image = "ghcr.io/aliasvault/aliasvault:0.25.0";
|
||||
autoStart = true;
|
||||
|
||||
ports = [
|
||||
|
|
|
|||
|
|
@ -4,8 +4,15 @@
|
|||
config,
|
||||
...
|
||||
}: {
|
||||
systemd.services.navidrome.serviceConfig.ExecStart = with lib; let
|
||||
cfg = config.services.navidrome;
|
||||
settingsFormat = pkgs.formats.toml {};
|
||||
in
|
||||
mkForce ''
|
||||
${pkgs.bash}/bin/bash -c "${getExe cfg.package} --configfile '${settingsFormat.generate "navidrome.toml" cfg.settings}'"
|
||||
'';
|
||||
services.navidrome = {
|
||||
enable = false; #doesnt build 24.02.2026
|
||||
enable = true;
|
||||
settings = {
|
||||
Scanner.Schedule = "@every 24h";
|
||||
MusicFolder = "/zstorage/media/music";
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@ in {
|
|||
sops.secrets."services/nextcloud/whiteboard" = {owner = "nextcloud";};
|
||||
services.nextcloud = {
|
||||
enable = true;
|
||||
maxUploadSize = "80G";
|
||||
package = pkgs.nextcloud32;
|
||||
database.createLocally = true;
|
||||
config = {
|
||||
|
|
|
|||
|
|
@ -35,9 +35,6 @@ in {
|
|||
enableACME = true;
|
||||
forceSSL = true;
|
||||
locations = config.services.nginx.virtualHosts."matrix.kylekrein.com".locations;
|
||||
extraConfig = ''
|
||||
client_max_body_size 1G;
|
||||
'';
|
||||
};
|
||||
|
||||
"turn.kylekrein.com" = {
|
||||
|
|
@ -74,9 +71,6 @@ in {
|
|||
enableACME = true;
|
||||
forceSSL = true;
|
||||
locations = matrixLocations;
|
||||
extraConfig = ''
|
||||
client_max_body_size 1G;
|
||||
'';
|
||||
};
|
||||
|
||||
"immich.kylekrein.com" = {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue