refactor *started*

This commit is contained in:
martyTF 2026-03-30 22:03:03 +02:00
parent d0413cb830
commit db2103a37d
103 changed files with 1008 additions and 786 deletions

View file

@ -1,7 +0,0 @@
# MODULES
todo:
- [ ] move home-manager stuff to ../home
- [ ] add server stuff
-> seperate home manager stuff from normal nix stuff, use home manager purely for dotfiles, use modules to install stuff

View file

@ -0,0 +1,26 @@
{
config,
pkgs,
inputs,
lib,
...
}:
{
options = {
apps.audio = {
base.enable = lib.mkEnableOption "enable basic audio";
media.enable = lib.mkEnableOption "enable audio media";
editing.enable = lib.mkEnableOption "enable audio editing";
};
};
config = {
environment.systemPackages = with pkgs; [
(lib.mkIf (apps.audio.base.enable) pavucontrol)
(lib.mkIf (apps.audio.base.enable) playerctl)
(lib.mkIf (apps.audio.editing.enable) tenacity)
(lib.mkIf (apps.audio.editing.enable) flac)
];
};
}

16
modules/apps/default.nix Normal file
View file

@ -0,0 +1,16 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [
./audio
./gaming
./image
./video
./terminal
];
}

View file

@ -8,7 +8,6 @@
{
imports = [
./steam.nix
./modding.nix
./minecraft.nix
];
}

View file

@ -7,13 +7,13 @@
{
options = {
gaming = {
apps.gaming = {
minecraft.enable = lib.mkEnableOption "enable minecraft";
};
};
config = lib.mkIf config.gaming.minecraft.enable {
home.packages = with pkgs; [
config = lib.mkIf config.apps.gaming.minecraft.enable {
environment.systemPackages = with pkgs; [
prismlauncher
];
};

View file

@ -0,0 +1,41 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
apps.gaming = {
steam.enable = lib.mkEnableOption "enable steam";
};
};
config = lib.mkIf config.apps.gaming.steam.enable {
environment.systemPackages = with pkgs; [
adwsteamgtk
];
programs = {
steam = {
enable = true;
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true;
localNetworkGameTransfers.openFirewall = true;
gamescopeSession.enable = true;
protontricks.enable = true;
extraCompatPackages = with pkgs; [
proton-ge-bin
];
extraPackages = with pkgs; [
gamescope
];
};
gamescope = {
enable = true;
capSysNice = true;
};
};
};
}

View file

@ -0,0 +1,24 @@
{
config,
pkgs,
inputs,
lib,
...
}:
{
options = {
apps.image = {
base.enable = lib.mkEnableOption "enable basic image";
editing.enable = lib.mkEnableOption "enable image editing";
};
};
config = {
environment.systemPackages = with pkgs; [
(lib.mkIf (apps.image.base.enable) nomacs)
(lib.mkIf (apps.image.editing.enable) gimp3-with-plugins)
(lib.mkIf (apps.image.editing.enable) krita)
];
};
}

View file

@ -7,6 +7,6 @@
{
imports = [
./sshfs.nix
./keyboard.nix
];
}

View file

@ -0,0 +1,26 @@
{
config,
lib,
pkgs,
...
}:
{
environment.systemPackages = with pkgs; [
qmk
qmk-udev-rules
qmk_hid
via
vial
];
services.udev = {
packages = with pkgs; [
qmk
qmk-udev-rules
qmk_hid
via
vial
];
};
}

View file

@ -0,0 +1,31 @@
{
config,
pkgs,
inputs,
lib,
...
}:
{
options = {
apps.terminal.toys = lib.mkEnableOption "enable terminal toys";
};
config = {
environment.systemPackages =
with pkgs;
[
unzip
btop
]
++ lib.mkIf config.apps.terminal.toys [
asciiquarium-transparent
cava
bunnyfetch
nerdfetch
fastfetch
cmatrix
astroterm
];
};
}

View file

@ -0,0 +1,30 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
apps.terminal = {
package = lib.mkOption {
default = "";
description = "terminal package";
};
binary = lib.mkOption {
default = "";
description = "terminal binary";
};
default = lib.mkOption {
default = "";
description = "default terminal";
};
};
};
imports = [
./base-packages.nix
./kitty.nix
./tui.nix
];
}

View file

@ -0,0 +1,25 @@
{
config,
pkgs,
inputs,
lib,
...
}:
{
options = {
apps.terminal = {
kitty.enable = lib.mkEnableOption "enable kitty";
};
};
config = lib.mkIf config.apps.terminal.kitty.enable {
terminal = lib.mkIf (config.apps.terminal.default == "kitty") {
package = pkgs.kitty;
binary = "${pkgs.kitty}/bin/kitty";
};
environment.systemPackages = with pkgs; [
kitty
];
};
}

View file

@ -0,0 +1,25 @@
{
config,
pkgs,
inputs,
lib,
...
}:
let
tt = config.apps.terminal.tui;
in
{
options = {
apps.terminal.tui = {
ranger.enable = lib.mkEnableOption "enable ranger";
};
};
config = {
environment.systemPackages = with pkgs; [
(lib.mkIf (tt.ranger.enable) ranger)
];
};
}

View file

@ -0,0 +1,26 @@
{
config,
pkgs,
inputs,
lib,
...
}:
{
options = {
apps.video = {
base.enable = lib.mkEnableOption "enable basic video";
editing.enable = lib.mkEnableOption "enable video editing";
media.enable = lib.mkEnableOption "enable video media";
};
};
config = {
environment.systemPackages = with pkgs; [
(lib.mkIf (apps.video.base.enable) mpv)
(lib.mkIf (apps.video.editing.enable) kdePackages.kdenlive)
(lib.mkIf (apps.video.media.enable) jellyfin-desktop)
(lib.mkIf (apps.video.media.enable) pipeline)
];
};
}

View file

@ -1,20 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
bluetooth = {
enable = lib.mkEnableOption "enable bluetooth";
};
};
config = lib.mkIf config.bluetooth.enable {
home.packages = with pkgs; [
bluez
bluetuith
];
};
}

View file

@ -1,15 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [
./internet
./bluetooth
./mounts
./social-media
];
}

View file

@ -1,16 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [
./librewolf.nix
./zen-browser.nix
./tor.nix
./mail.nix
./rss.nix
];
}

View file

@ -1,21 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
internet.browsers = {
librewolf = {
enable = lib.mkEnableOption "enable librewolf";
};
};
};
config = lib.mkIf config.internet.browsers.librewolf.enable {
home.packages = with pkgs; [
librewolf
];
};
}

View file

@ -1,34 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
internet = {
mail.enable = lib.mkEnableOption "enable e-mail";
mail.providers.protonmail.enable = lib.mkEnableOption "enable protonmail";
};
};
config = {
programs = {
thunderbird = lib.mkIf config.internet.mail.enable {
enable = true;
profiles."default" = {
isDefault = true;
};
};
};
services = {
protonmail-bridge = lib.mkIf config.internet.mail.providers.protonmail.enable {
enable = true;
package = pkgs.protonmail-bridge;
extraPackages = with pkgs; [
gnome-keyring
];
};
};
};
}

View file

@ -1,19 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
internet = {
rss.enable = lib.mkEnableOption "enable rss";
};
};
config = {
home.packages = with pkgs; [
(lib.mkIf (config.internet.rss.enable) newsflash)
];
};
}

View file

@ -1,21 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
internet = {
tor.enable = lib.mkEnableOption "enable tor";
browsers.tor-browser.enable = lib.mkEnableOption "enable tor-browser";
};
};
config = {
home.packages = with pkgs; [
(lib.mkIf (config.internet.browsers.tor-browser.enable) tor-browser)
(lib.mkIf (config.internet.tor.enable) oniux)
];
};
}

View file

@ -1,98 +0,0 @@
{
config,
lib,
pkgs,
inputs,
...
}:
let
extension = shortId: guid: {
name = guid;
value = {
install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/${shortId}/latest.xpi";
installation_mode = "normal_installed";
};
};
prefs = {
# Check these out at about:config
"extensions.autoDisableScopes" = 0;
"extensions.pocket.enabled" = false;
"general.autoScroll" = true;
"general.smoothScroll" = true;
"middlemouse.contentLoadURL" = false;
"devtools.debugger.remote-enabled" = true;
"devtools.chrome.enabled" = true;
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
"browser.ml.enable" = false;
"browser.ml.chat.enabled" = false;
"browser.ml.chat.menu" = false;
"browser.ml.chat.page" = false;
"browser.ml.chat.page.footerBadge" = false;
"browser.ml.chat.page.menuBadge" = false;
"browser.ml.linkPreview.enabled" = false;
"browser.ml.pageAssist.enabled" = false;
"browser.tabs.groups.smart.enabled" = false;
"browser.tabs.groups.smart.userEnabled" = false;
"extensions.ml.enabled" = false;
"browser.search.visualSearch.featureGate" = false;
# ...
};
extensions = [
# To add additional extensions, find it on addons.mozilla.org, find
# the short ID in the url (like https://addons.mozilla.org/en-US/firefox/addon/!SHORT_ID!/)
# Then go to https://addons.mozilla.org/api/v5/addons/addon/!SHORT_ID!/ to get the guid
(extension "adnauseam" "adnauseam@rednoise.org")
(extension "floccus" "floccus@handmadeideas.org")
(extension "bitwarden-password-manager" "{446900e4-71c2-419f-a6a7-df9c091e268b}")
(extension "simplelogin" "addon@simplelogin")
(extension "localcdn-fork-of-decentraleyes" "{b86e4813-687a-43e6-ab65-0bde4ab75758}")
(extension "catppuccin-web-file-icons" "{bbb880ce-43c9-47ae-b746-c3e0096c5b76}")
(extension "peertube-companion" "peertube-companion@booteille")
(extension "peertubeify" "{01175c8e-4506-4263-bad9-d3ddfd4f5a5f}")
(extension "peertube-picks" "{937c0767-0608-41e2-917a-8bf06601275a}")
# ...
];
in
{
options = {
internet.browsers = {
zen-browser = {
enable = lib.mkEnableOption "enable zen-browser";
};
};
};
config = lib.mkIf config.internet.browsers.zen-browser.enable {
home.packages = [
(pkgs.wrapFirefox
inputs.zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.zen-browser-unwrapped
{
extraPrefs = lib.concatLines (
lib.mapAttrsToList (
name: value: ''lockPref(${lib.strings.toJSON name}, ${lib.strings.toJSON value});''
) prefs
);
extraPolicies = {
DisableTelemetry = true;
ExtensionSettings = builtins.listToAttrs extensions;
SearchEngines = {
Default = "MartyTF's Series of Tubes";
Add = [
{
Name = "MartyTF's Series of Tubes";
URLTemplate = "https://search.marty.tf/?q={searchTerms}";
IconURL = "https://wiki.nixos.org/favicon.ico";
Alias = "@sgx";
}
];
};
};
}
)
];
};
}

View file

@ -1,28 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
};
config = {
programs.sftpman = {
enable = true;
mounts = {
marty-server = {
host = "marty-server";
user = "marty";
mountOptions = [
"/mnt/Server"
];
mountPoint = "/";
};
};
package = pkgs.sshfs;
defaultSshKey = "~/.ssh/id_ed25519";
};
};
}

View file

@ -1,15 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [
./messaging
];
home.packages = with pkgs; [
fedistar
];
}

View file

@ -1,31 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
messaging = {
enable = lib.mkEnableOption "enable all messaging";
element.enable = lib.mkEnableOption "enable element";
signal.enable = lib.mkEnableOption "enable signal";
};
};
config = {
messaging = lib.mkIf config.messaging.enable {
element.enable = lib.mkDefault true;
signal.enable = lib.mkDefault true;
};
home.packages = with pkgs; [
(lib.mkIf (config.messaging.signal.enable) signal-desktop)
];
programs = {
element-desktop = lib.mkIf config.messaging.element.enable {
enable = true;
};
};
};
}

View file

@ -7,14 +7,9 @@
{
imports = [
./defaults
./development
./terminal
./apps
./desktop
./misc
./gaming
./connectivity
./media
./server
./system
./user
];
}

View file

@ -1,60 +0,0 @@
{
config,
pkgs,
inputs,
lib,
...
}:
{
options = {
device = {
type = {
laptop = lib.mkEnableOption "laptop";
desktop = lib.mkEnableOption "desktop";
server = lib.mkEnableOption "server";
};
};
};
imports = [
./laptop.nix
./desktop.nix
./server.nix
];
config = {
development = lib.mkDefault {
git.enable = true;
};
terminal = lib.mkDefault {
ranger.enable = true;
};
misc = lib.mkDefault {
bitwarden.enable = true;
};
internet.tor.enable = true;
syncthing = lib.mkDefault {
devices = {
marty-pc = {
id = "6PJZD52-EEWIO7U-MZMJJ5B-33DGNSU-O7DJVRT-GAE7QZG-ZY3VIMV-VSMBDQP";
autoAcceptFolder = true;
};
marty-server = {
id = "UDMXEKZ-HYIFI5S-VAKE75O-K3C65QV-LS43QA5-3JTHWKL-CI5C3Y6-P4NSQQM";
autoAcceptFolders = true;
};
marty-latitude = {
id = "SOAWHKA-BCQGO5G-IJ24WTO-RDETP5M-LNTVO66-MHIOUU2-NNQ57P6-FFKNSA6";
autoAcceptFolders = true;
};
marty-pixel = {
id = "GSBXOGW-6SYLDUQ-HPH7FBJ-CKHWQIK-K5YORB4-CYKGYT6-DLCVSAK-LA2RMAK";
autoAcceptFolders = true;
};
marty-fairphone = {
id = "2ISVWQV-4USY5IA-2OU55CE-Q7VLPD7-4RVQ5WX-FXQSJMY-2ES4EZG-IGFB7QG";
autoAcceptFolders = true;
};
};
};
};
}

View file

@ -1,58 +0,0 @@
{
config,
pkgs,
inputs,
lib,
...
}:
{
config = lib.mkIf config.device.type.desktop {
development = lib.mkDefault {
vscodium.enable = true;
godot.enable = true;
python.enable = true;
};
terminal = lib.mkDefault {
kitty.enable = true;
};
desktop = lib.mkDefault {
hyprland = {
enable = true;
numlock = true;
};
# waybar.enable = true;
walker.enable = true;
wallpaper.enable = true;
grimblast.enable = true;
audio.enable = true;
noctalia.enable = true;
};
messaging.enable = true;
internet = lib.mkDefault {
browsers = {
zen-browser = {
enable = true;
};
tor-browser = {
enable = true;
};
};
mail = {
enable = true;
providers.protonmail.enable = true;
};
rss.enable = true;
};
bluetooth.enable = true;
media = {
images.enable = true;
video.enable = true;
audio.enable = true;
threeD.enable = true;
};
misc = {
obsidian.enable = true;
};
};
}

View file

@ -1,51 +0,0 @@
{
config,
pkgs,
inputs,
lib,
...
}:
{
config = lib.mkIf config.device.type.laptop {
home.packages = with pkgs; [
light
];
development = lib.mkDefault {
vscodium.enable = true;
};
terminal = lib.mkDefault {
kitty.enable = true;
};
desktop = lib.mkDefault {
hyprland = {
enable = true;
};
# waybar.enable = true;
walker.enable = true;
wallpaper.enable = true;
grimblast.enable = true;
audio.enable = true;
noctalia.enable = true;
};
messaging.enable = true;
internet = lib.mkDefault {
browsers = {
zen-browser = {
enable = true;
};
};
mail = {
enable = true;
providers.protonmail.enable = true;
};
rss.enable = true;
};
bluetooth.enable = true;
media = {
images.nomacs.enable = true;
video.mpv.enable = true;
video.tsukimi.enable = true;
};
};
}

View file

@ -1,3 +0,0 @@
# HOME
only for dotfiles, no longer installing stuff from here

View file

@ -1,22 +0,0 @@
{
config,
pkgs,
inputs,
lib,
...
}:
{
options = {
desktop = {
audio.enable = lib.mkEnableOption "enable audio";
};
};
config = lib.mkIf config.desktop.audio.enable {
home.packages = with pkgs; [
pavucontrol
playerctl
];
};
}

View file

@ -7,16 +7,9 @@
{
imports = [
./hyprland.nix
./walker.nix
./waybar.nix
./rofi.nix
./wallpaper.nix
./grimblast.nix
./audio.nix
./noctalia.nix
];
home.packages = with pkgs; [
wl-clipboard
./utilities
./window-managers
./shell
./display-manager.nix
];
}

View file

@ -0,0 +1,51 @@
{
config,
pkgs,
lib,
inputs,
...
}:
{
services = {
xserver = {
xkb = {
layout = builtins.substring 0 2 config.system.locale;
variant = "";
};
};
power-profiles-daemon = {
enable = true;
};
upower = {
enable = true;
};
displayManager = {
gdm = {
enable = true;
autoSuspend = false;
};
};
};
programs = {
uwsm = {
waylandCompositors = {
hyprland = lib.mkIf config.desktop.window-managers.hyprland.enable {
prettyName = "Hyprland";
comment = "Hyprland";
binPath = "${config.programs.hyprland.package}/bin/start-hyprland";
};
sway = lib.mkIf config.desktop.window-managers.sway.enable {
prettyName = "Sway";
comment = "Sway";
binPath = "${config.programs.sway.package}/bin/sway --session";
};
niri = lib.mkIf config.desktop.window-managers.niri.enable {
prettyName = "Niri";
comment = "Niri";
binPath = "${config.programs.niri.package}/bin/niri-session";
};
};
};
};
}

View file

@ -1,211 +0,0 @@
{
config,
lib,
pkgs,
inputs,
...
}:
{
options = {
desktop = {
hyprland = {
enable = lib.mkEnableOption "enable hyprland";
monitors = lib.mkOption {
default = [
",preferred,auto,1"
];
description = "declare monitors";
};
workspaces = {
workspaces = lib.mkOption {
default = (
builtins.concatLists (
builtins.genList (
i:
let
ws = i + 1;
in
[
"${toString i},persistent:true"
]
) config.desktop.hyprland.workspaces.amount
)
);
description = "declare workspace";
};
amount = lib.mkOption {
default = 9;
description = "declare workspace amount";
};
};
numlock = lib.mkEnableOption "numlock by default";
};
};
};
config = lib.mkIf config.desktop.hyprland.enable {
xdg.portal = {
enable = true;
configPackages = [
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland
];
extraPortals = [
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland
pkgs.xdg-desktop-portal-xapp
pkgs.xdg-desktop-portal-gtk
];
config.common = {
"org.freedesktop.portal.OpenURI" = [
"*"
"hyprland"
];
};
};
programs = {
hyprlock = {
enable = true;
};
};
wayland.windowManager.hyprland = {
enable = true;
xwayland.enable = true;
systemd.enable = false;
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
portalPackage =
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
settings = {
monitor = config.desktop.hyprland.monitors;
workspace = config.desktop.hyprland.workspaces.workspaces;
env = [
"XDG_CURRENT_DESKTOP,Hyprland"
"XDG_SESSION_TYPE,wayland"
"XDG_SESSION_DESKTOP,Hyprland"
];
exec-once = [
#"hyprctl plugin load "
(lib.mkIf (config.desktop.walker.enable) "elephant")
(lib.mkIf (config.desktop.waybar.enable) "waybar")
(lib.mkIf (config.desktop.noctalia.enable) "noctalia-shell")
(lib.mkIf (config.desktop.noctalia.enable) "noctalia-shell ipc call wallpaper random")
(lib.mkIf (config.desktop.wallpaper.enable) "waypaper --restore --random")
(lib.mkIf (config.gaming.steam.enable) "adwaita-steam-gtk -u; steam -silent")
(lib.mkIf (config.internet.mail.providers.protonmail.enable) "protonmail-bridge -n")
"echo $HYPRLAND_INSTANCE_SIGNATURE > ~/.config/hypr/instance_signature"
];
"$mod" = "SUPER";
"$shiftmod" = "SUPER_SHIFT";
"$controlmod" = "SUPER_CTRL";
bind = [
(lib.mkIf (config.desktop.walker.enable) "$mod, D, exec, walker")
(lib.mkIf (config.desktop.rofi.enable) "$mod, D, exec, rofi -show drun")
(lib.mkIf (config.terminal.kitty.enable) "$mod, return, exec, kitty")
(lib.mkIf (config.desktop.grimblast.enable) ", print, exec, GRIMBLAST_EDITOR=gradia grimblast edit area")
(lib.mkIf (config.desktop.rofi.enable) (
lib.mkIf (config.misc.bitwarden.enable) "$mod, B, exec, rbw unlocked || kitty --class kitty-floating -e rbw unlock; rofi-rbw; sleep 30; rbw lock"
))
(lib.mkIf (config.desktop.walker.enable) (
lib.mkIf (config.misc.bitwarden.enable) "$mod, B, exec, rbw unlocked || kitty --class kitty-floating -e rbw unlock; selected=$(rbw list | walker -d); wl-copy $(rbw get \"$selected\"); sleep 30; rbw lock"
))
"$mod, F, fullscreen, 1"
"$shiftmod, F, fullscreen, 0"
"$shiftmod, Q, killactive,"
"$mod, S, togglespecialworkspace, magic"
"$mod, O, exec, zen"
"$shiftmod, S, movetoworkspace, special:magic"
"$controlmod, right, workspace, m+1"
"$controlmod, left, workspace, m-1"
"$mod, mouse_down, workspace, m-1"
"$mod, mouse_up, workspace, m+1"
"$mod, left, movefocus, l"
"$mod, right, movefocus, r"
"$mod, up, movefocus, u"
"$mod, down, movefocus, d"
"$mod, J, exec, playerctl previous"
"$mod, K, exec, playerctl play-pause"
"$mod, L, exec, playerctl next"
"$mod, G, togglefloating,"
# "$mod, H, hyprexpo:expo, toggle"
"$mod, F1, exec, hyprlock"
"$shiftmod, E, exec, codium"
"$controlmod, up, exec, light -A 10"
"$controlmod, down, exec, light -U 10"
"$controlmod, Q, exec, hyprctl kill"
]
++ (builtins.concatLists (
builtins.genList (
i:
let
ws = i + 1;
in
[
"$mod, code:1${toString i}, workspace, ${toString ws}"
"$shiftmod, code:1${toString i}, movetoworkspacesilent, ${toString ws}"
]
) config.desktop.hyprland.workspaces.amount
));
bindm = [
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
];
bindel = [
",XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+"
",XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
];
input = {
kb_layout = "de";
numlock_by_default = config.desktop.hyprland.numlock;
follow_mouse = 2;
mouse_refocus = false;
accel_profile = "flat";
sensitivity = 0.2;
touchpad = {
natural_scroll = "no";
disable_while_typing = true;
};
};
cursor = {
inactive_timeout = 0;
no_warps = true;
};
decoration = {
rounding = 20;
blur = {
enabled = true;
size = 3;
passes = 1;
};
shadow = {
range = 4;
render_power = 3;
color = "rgba(1a1a1aee)";
};
};
# plugin = {
# hyprexpo = {
# columns = 2;
# gap_size = 20;
# bg_col = "rgb(e1e1e2)";
# workspace_method = "first 1";
# enable_gesture = true;
# gesture_distance = 300;
# gesture_positive = true;
# gesture_negative = true;
# };
# hyprtrails = {
# color = "rgba(1a1a1aee)";
# };
# };
};
plugins = [
# inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}.hyprtrails
# inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}.hyprexpo
];
};
home.sessionVariables.NIXOS_OZONE_WL = "1";
};
}

View file

@ -1,22 +0,0 @@
{
pkgs,
inputs,
lib,
config,
...
}:
{
options = {
desktop = {
noctalia.enable = lib.mkEnableOption "enable noctalia";
};
};
config = lib.mkIf config.desktop.noctalia.enable {
programs.noctalia-shell = {
enable = true;
};
};
}

View file

@ -1,29 +0,0 @@
{
config,
pkgs,
inputs,
lib,
...
}:
{
options = {
desktop = {
rofi.enable = lib.mkEnableOption "enable rofi";
};
};
config = lib.mkIf config.desktop.rofi.enable {
programs = {
rofi = {
enable = true;
modes = [
"drun"
"run"
"ssh"
];
};
};
};
}

View file

@ -0,0 +1,15 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [
./noctalia.nix
./swww.nix
./walker.nix
./waybar.nix
];
}

View file

@ -0,0 +1,24 @@
{
pkgs,
inputs,
lib,
config,
...
}:
{
options = {
desktop.shell = {
noctalia.enable = lib.mkEnableOption "enable noctalia";
};
};
imports = lib.mkIf config.desktop.shell.noctalia.enable [
inputs.noctalia.homeModules.default
];
config = lib.mkIf config.desktop.shell.noctalia.enable {
desktop.shell.swww.enable = lib.mkDefault false;
programs.noctalia-shell = {
enable = true;
};
};
}

View file

@ -0,0 +1,22 @@
{
config,
pkgs,
inputs,
lib,
...
}:
{
options = {
desktop.shell = {
swww.enable = lib.mkEnableOption "enable swww";
};
};
config = lib.mkIf config.desktop.shell.swww.enable {
environment.systemPackages = with pkgs; [
waypaper
swww
];
};
}

View file

@ -8,19 +8,15 @@
{
options = {
desktop = {
desktop.shell = {
walker.enable = lib.mkEnableOption "enable walker";
};
};
config = lib.mkIf config.desktop.walker.enable {
config = lib.mkIf config.desktop.shell.walker.enable {
programs = {
walker = {
enable = true;
runAsService = true;
config = {
theme = "noctalia";
};
};
};
};

View file

@ -7,12 +7,12 @@
{
options = {
desktop = {
desktop.shell = {
waybar.enable = lib.mkEnableOption "enable waybar";
};
};
config = lib.mkIf config.desktop.waybar.enable {
config = lib.mkIf config.desktop.shell.waybar.enable {
programs = {
waybar = {
enable = true;

View file

@ -1,33 +0,0 @@
{
config,
pkgs,
lib,
...
}:
{
options = {
desktop = {
sway = {
enable = lib.mkEnableOption "enable sway";
};
};
};
config = lib.mkIf config.desktop.sway.enable {
environment.systemPackages = with pkgs; [
grim # screenshot functionality
slurp # screenshot functionality
wl-clipboard # wl-copy and wl-paste for copy/paste from stdin / stdout
];
# Enable the gnome-keyring secrets vault.
# Will be exposed through DBus to programs willing to store secrets.
services.gnome.gnome-keyring.enable = true;
programs.sway = {
enable = true;
wrapperFeatures.gtk = true;
package = null;
};
};
}

View file

@ -6,7 +6,7 @@
}:
{
home.packages = with pkgs; [
openssl
imports = [
./grimblast.nix
];
}

View file

@ -8,13 +8,13 @@
{
options = {
desktop = {
desktop.utilities = {
grimblast.enable = lib.mkEnableOption "enable grimblast";
};
};
config = lib.mkIf config.desktop.grimblast.enable {
home.packages = with pkgs; [
config = lib.mkIf config.desktop.utilities.grimblast.enable {
environment.systemPackages = with pkgs; [
grimblast
gradia
];

View file

@ -1,22 +0,0 @@
{
config,
pkgs,
inputs,
lib,
...
}:
{
options = {
desktop = {
wallpaper.enable = lib.mkEnableOption "enable wallpapers";
};
};
config = lib.mkIf config.desktop.wallpaper.enable {
home.packages = with pkgs; [
waypaper
swww
];
};
}

View file

@ -0,0 +1,14 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [
./hyprland.nix
./niri.nix
./sway.nix
];
}

View file

@ -0,0 +1,27 @@
{
config,
pkgs,
lib,
inputs,
...
}:
{
options = {
desktop.window-managers = {
hyprland = {
enable = lib.mkEnableOption "enable hyprland";
};
};
};
config = lib.mkIf config.desktop.window-managers.hyprland.enable {
programs.hyprland = {
enable = true;
withUWSM = true;
xwayland.enable = true;
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
portalPackage =
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
};
};
}

View file

@ -7,21 +7,17 @@
{
options = {
desktop = {
desktop.window-managers = {
niri = {
enable = lib.mkEnableOption "enable niri";
};
};
};
config = lib.mkIf config.desktop.niri.enable {
# Enable the gnome-keyring secrets vault.
# Will be exposed through DBus to programs willing to store secrets.
config = lib.mkIf config.desktop.window-managers.niri.enable {
services.gnome.gnome-keyring.enable = true;
environment.systemPackages = with pkgs; [
xwayland-satellite
niri
];
xwayland-satellite
];
programs.niri = {
enable = true;
};

View file

@ -0,0 +1,24 @@
{
config,
pkgs,
lib,
...
}:
{
options = {
desktop.window-managers = {
sway = {
enable = lib.mkEnableOption "enable sway";
};
};
};
config = lib.mkIf config.desktop.window-managers.sway.enable {
services.gnome.gnome-keyring.enable = true;
programs.sway = {
enable = true;
wrapperFeatures.gtk = true;
package = null;
};
};
}

View file

@ -1,20 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [
./git.nix
./vscodium.nix
./python.nix
./godot.nix
./openssl.nix
];
home.packages = with pkgs; [
bc
imagemagick
];
}

View file

@ -1,34 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
development = {
git.enable = lib.mkEnableOption "enable git";
};
};
config = lib.mkIf config.development.git.enable {
programs = {
git = {
enable = true;
settings = {
init = {
defaultBranch = "main";
};
user = {
email = "marty@marty.tf";
name = "marty";
};
push = {
autoSetupRemote = true;
};
};
};
};
};
}

View file

@ -1,20 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
development = {
godot.enable = lib.mkEnableOption "enable godot";
};
};
config = lib.mkIf config.development.godot.enable {
home.packages = with pkgs; [
godot
];
};
}

View file

@ -1,21 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
development = {
python.enable = lib.mkEnableOption "enable python";
};
};
config = lib.mkIf config.development.python.enable {
home.packages = with pkgs; [
uv
virtualenv
];
};
}

View file

@ -1,38 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
development = {
vscodium.enable = lib.mkEnableOption "enable vscodium";
};
};
config = lib.mkIf config.development.vscodium.enable {
programs.vscode = {
enable = true;
package = pkgs.vscodium;
profiles.default.extensions = with pkgs.vscode-extensions; [
catppuccin.catppuccin-vsc
catppuccin.catppuccin-vsc-icons
jnoortheen.nix-ide
alefragnani.project-manager
naumovs.color-highlight
geequlim.godot-tools
stylelint.vscode-stylelint
ecmel.vscode-html-css
esbenp.prettier-vscode
];
};
home.packages = with pkgs; [
nixfmt
];
home.sessionVariables = {
EDITOR = lib.mkDefault "codium";
};
};
}

View file

@ -1,21 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
gaming = {
modding.enable = lib.mkEnableOption "enable game modding";
};
};
config = lib.mkIf config.gaming.modding.enable {
home.packages = with pkgs; [
limo
r2modman
];
};
}

View file

@ -1,20 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
gaming = {
steam.enable = lib.mkEnableOption "enable steam";
};
};
config = lib.mkIf config.gaming.steam.enable {
home.packages = with pkgs; [
adwsteamgtk
];
};
}

View file

@ -1,28 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
media = {
threeD = {
enable = lib.mkEnableOption "enable all 3d media";
blender.enable = lib.mkEnableOption "enable blender";
};
};
};
config = {
media.threeD = lib.mkIf config.media.threeD.enable {
blender.enable = lib.mkDefault true;
};
home.packages = with pkgs; [
(lib.mkIf (config.media.threeD.blender.enable) blender)
];
};
}

View file

@ -1,30 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
media = {
audio = {
enable = lib.mkEnableOption "enable all audio media";
tenacity.enable = lib.mkEnableOption "enable tenacity";
flac.enable = lib.mkEnableOption "enable flac";
};
};
};
config = {
media.audio = lib.mkIf config.media.audio.enable {
tenacity.enable = lib.mkDefault true;
flac.enable = lib.mkDefault true;
};
home.packages = with pkgs; [
(lib.mkIf (config.media.audio.tenacity.enable) tenacity)
(lib.mkIf (config.media.audio.flac.enable) flac)
];
};
}

View file

@ -1,15 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [
./images.nix
./video.nix
./audio.nix
./3d.nix
];
}

View file

@ -1,34 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
media = {
images = {
enable = lib.mkEnableOption "enable all image media";
nomacs.enable = lib.mkEnableOption "enable nomacs";
gimp.enable = lib.mkEnableOption "enable gimp";
krita.enable = lib.mkEnableOption "enable krita";
};
};
};
config = {
media.images = lib.mkIf config.media.images.enable {
nomacs.enable = lib.mkDefault true;
gimp.enable = lib.mkDefault true;
krita.enable = lib.mkDefault true;
};
home.packages = with pkgs; [
(lib.mkIf (config.media.images.nomacs.enable) nomacs)
(lib.mkIf (config.media.images.gimp.enable) gimp3-with-plugins)
(lib.mkIf (config.media.images.krita.enable) krita)
];
};
}

View file

@ -1,42 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
media = {
video = {
enable = lib.mkEnableOption "enable all video media";
mpv.enable = lib.mkEnableOption "enable mpv";
kdenlive.enable = lib.mkEnableOption "enable kdenlive";
tsukimi.enable = lib.mkEnableOption "enable tsukimi (jellyfin client)";
jellyfin.enable = lib.mkEnableOption "enable jellyin (jellyfin client)";
pipeline.enable = lib.mkEnableOption "enable pipeline (you/peertube client)";
};
};
};
config = {
media.video = lib.mkIf config.media.video.enable {
kdenlive.enable = lib.mkDefault true;
mpv.enable = lib.mkDefault true;
tsukimi.enable = lib.mkDefault true;
jellyfin.enable = lib.mkDefault true;
pipeline.enable = lib.mkDefault true;
};
home.packages = with pkgs; [
(lib.mkIf (config.media.video.kdenlive.enable) kdePackages.kdenlive)
(lib.mkIf (config.media.video.tsukimi.enable) tsukimi)
(lib.mkIf (config.media.video.jellyfin.enable) jellyfin-desktop)
(lib.mkIf (config.media.video.pipeline.enable) pipeline)
];
programs = {
mpv = lib.mkIf config.media.video.mpv.enable {
enable = true;
};
};
};
}

View file

@ -1,22 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
misc = {
bitwarden.enable = lib.mkEnableOption "enable bitwarden";
};
};
config = lib.mkIf config.misc.bitwarden.enable {
home.packages = with pkgs; [
rbw
pinentry-curses
(lib.mkIf (config.desktop.rofi.enable) rofi-rbw)
];
};
}

View file

@ -1,15 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [
./bitwarden.nix
./syncthing.nix
./secrets.nix
./obsidian.nix
];
}

View file

@ -1,20 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
misc = {
obsidian.enable = lib.mkEnableOption "enable obsidian";
};
};
config = lib.mkIf config.misc.obsidian.enable {
home.packages = with pkgs; [
obsidian
];
};
}

View file

@ -1,17 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
home.packages = with pkgs; [
pass
gnome-keyring
seahorse
libsecret
gcr
];
services.gnome-keyring.enable = true;
}

View file

@ -1,42 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
syncthing.devices = lib.mkOption {
default = { };
description = ''
set syncthing devices
'';
};
syncthing.folders = lib.mkOption {
default = { };
description = ''
set syncthing folders
'';
};
};
config = {
home.packages = with pkgs; [
localsend
];
services = {
syncthing = {
enable = true;
tray.enable = true;
guiAddress = "0.0.0.0:8384";
settings = {
devices = config.syncthing.devices;
folders = config.syncthing.folders;
};
overrideDevices = lib.mkIf (config.syncthing.devices == { }) false;
overrideFolders = lib.mkIf (config.syncthing.folders == { }) false;
};
};
};
}

View file

@ -8,11 +8,11 @@
{
options = {
domain = lib.mkOption {
default = "example.com";
default = "marty.tf";
description = "set domain name";
};
email = lib.mkOption {
default = "${config.main-user.userName}.${config.domain}";
default = "${config.user.userName}@${config.domain}";
description = "set email";
};
nginx = {

42
modules/system/boot.nix Normal file
View file

@ -0,0 +1,42 @@
{
config,
lib,
pkgs,
inputs,
...
}:
{
system = {
autoUpgrade = {
enable = false;
allowReboot = false;
};
};
boot = {
loader = {
systemd-boot = {
enable = true;
editor = false;
};
timeout = 3;
efi.canTouchEfiVariables = true;
};
kernelPackages = pkgs.linuxPackages_zen;
kernel = {
sysctl = {
"vm.swappiness" = 10;
};
};
};
services = {
dbus.implementation = "broker";
};
hardware = {
graphics = {
enable = true;
enable32Bit = true;
};
};
}

View file

@ -0,0 +1,18 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [
./boot.nix
./shell.nix
./networking.nix
./localization.nix
./fira-code.nix
./nixos-cli.nix
./ssh.nix
];
}

View file

@ -0,0 +1,10 @@
{
config,
pkgs,
lib,
...
}:
{
environment.systemPackages = [ pkgs.nerd-fonts.fira-code ];
}

View file

@ -0,0 +1,51 @@
{
config,
pkgs,
lib,
...
}:
let
timezone = config.system.timezone;
language = config.system.language;
locale = config.system.locale;
in
{
options = {
system = {
timezone = lib.mkOption {
default = "Europe/Berlin";
description = "timezone";
};
language = lib.mkOption {
default = "en_GB.UTF-8";
description = "language";
};
locale = lib.mkOption {
default = "de_DE.UTF-8";
description = "locale";
};
};
};
config = {
time.timeZone = timezone;
i18n = {
defaultLocale = language;
extraLocaleSettings = {
LC_ADDRESS = locale;
LC_IDENTIFICATION = locale;
LC_MEASUREMENT = locale;
LC_MONETARY = locale;
LC_NAME = locale;
LC_NUMERIC = locale;
LC_PAPER = locale;
LC_TELEPHONE = locale;
LC_TIME = locale;
};
};
console.keyMap = builtins.substring 0 2 locale;
};
}

View file

@ -0,0 +1,41 @@
{ config, pkgs, ... }:
{
networking = {
networkmanager.enable = true;
firewall = {
enable = true;
allowedUDPPorts = [
config.services.tailscale.port
53317
16261
16262
];
allowedTCPPorts = [
53317
16261
16262
];
trustedInterfaces = [ "tailscale0" ];
};
};
services = {
tailscale = {
enable = true;
extraSetFlags = [
"--ssh"
];
};
};
hardware = {
bluetooth = {
enable = true;
powerOnBoot = true;
settings = {
General = {
Experimental = true;
};
};
};
};
}

View file

@ -1,11 +1,10 @@
{
config,
pkgs,
inputs,
lib,
...
}:
{
}
programs.nixos-cli.enable = true;
}

15
modules/system/shell.nix Normal file
View file

@ -0,0 +1,15 @@
{ config, pkgs, ... }:
{
environment = {
systemPackages = with pkgs; [
coreutils
util-linux
];
};
programs = {
fish.enable = true;
bash.enable = true;
zsh.enable = true;
};
}

13
modules/system/ssh.nix Normal file
View file

@ -0,0 +1,13 @@
{ config, pkgs, ... }:
{
services = {
openssh = {
enable = true;
settings = {
PermitRootLogin = "no";
PasswordAuthentication = false;
};
};
};
}

View file

@ -1,16 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [
./kitty.nix
./file-manager.nix
./fish.nix
./toys.nix
];
}

View file

@ -1,72 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
terminal = {
ranger = {
enable = lib.mkEnableOption "enable ranger";
};
};
};
config = lib.mkIf config.terminal.ranger.enable {
programs = {
ranger = {
enable = true;
extraPackages = [
];
settings = {
viewmode = "miller";
column_ratios = "1,3,4";
show_hidden = true;
confirm_on_delete = "multiple";
use_preview_script = true;
automatically_count_files = true;
open_all_images = true;
vcs_aware = true;
vcs_backend_git = "enabled";
vcs_msg_length = 50;
preview_images = true;
preview_images_method = lib.mkIf config.terminal.kitty.enable "kitty";
preview_files = true;
preview_directories = true;
collapse_preview = false;
save_console_history = true;
status_bar_on_top = false;
draw_progress_bar_in_status_bar = true;
draw_borders = "both";
dirname_in_tabs = true;
mouse_enabled = false;
display_size_in_main_column = true;
display_size_in_status_bar = true;
display_free_space_in_status_bar = true;
display_tags_in_all_columns = true;
update_title = true;
update_tmux_title = true;
shorten_title = 10;
hostname_in_titlebar = true;
tilde_in_titlebar = false;
max_history_size = 100;
max_console_history_size = 200;
scroll_offset = 8;
flushinput = true;
autosave_bookmarks = true;
show_cursor = false;
sort = "natural";
sort_case_insensitive = true;
sort_directories_first = true;
};
};
};
home.packages = with pkgs; [
unzip
];
};
}

View file

@ -1,22 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
terminal = {
fish.enable = lib.mkEnableOption "enable fish";
};
};
config = lib.mkIf config.terminal.fish.enable {
programs = {
fish = {
enable = true;
};
};
};
}

View file

@ -1,80 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
terminal = {
kitty.enable = lib.mkEnableOption "enable kitty";
};
};
config = lib.mkIf config.terminal.kitty.enable {
programs = {
kitty = {
enable = true;
enableGitIntegration = true;
shellIntegration = {
enableFishIntegration = true;
enableBashIntegration = true;
};
font = {
name = "FiraCode Nerd Font";
size = 16;
package = pkgs.nerd-fonts.fira-code;
};
settings = {
include = "themes/noctalia.conf";
wayland_titlebar_color = "system";
macos_titlebar_color = "system";
# The most important setting of the whole confiG
confirm_os_window_close = 0;
# Cursor
cursor_shape = "underline";
# Scrollback
scrollback_lines = 10000;
# Link Behaviour
url_style = "straight";
open_url_with = "default";
# Layouts
remember_window_size = "no";
enabled_layouts = "splits, tall";
window_resize_step_cells = 3;
window_resize_step_lines = 3;
window_border_width = "3 pt";
draw_minimal_borders = "yes";
window_margin_width = 10;
window_padding_width = 10;
# Borders/Appearance
inactive_text_alpha = 0.5;
hide_window_decorations = "no";
# tab bar
tab_bar_min_tabs = 1;
tab_bar_edge = "bottom";
tab_bar_style = "powerline";
tab_powerline_style = "slanted";
tab_title_template = "{title}{' :{}:'.format(num_windows) if num_windows > 1 else ''}";
};
};
};
home.sessionVariables = {
TERM = lib.mkDefault "xterm-kitty";
};
};
}

View file

@ -1,26 +0,0 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
terminal = {
toys.enable = lib.mkEnableOption "enable terminal toys";
};
};
config = lib.mkIf config.terminal.toys.enable {
home.packages = with pkgs; [
asciiquarium-transparent
cava
bunnyfetch
nerdfetch
fastfetch
cmatrix
astroterm
];
};
}

47
modules/user/default.nix Normal file
View file

@ -0,0 +1,47 @@
{
config,
pkgs,
inputs,
lib,
...
}:
{
options = {
user = {
userName = lib.mkOption {
default = "marty";
description = ''
main user name
'';
};
shell = lib.mkOption {
default = pkgs.fish;
description = ''
main user shell
'';
};
};
};
config = {
users.users.${config.user.userName} = {
isNormalUser = true;
description = "${config.user.userName}";
extraGroups = [
"networkmanager"
"wheel"
"video"
"audio"
"render"
"docker"
];
shell = config.user.shell;
};
security.sudo = {
enable = true;
wheelNeedsPassword = true;
};
};
}